From eaf5c2637d5e3ea9bdac62f456c482b42845eb00 Mon Sep 17 00:00:00 2001 From: waclaw66 Date: Tue, 16 Feb 2021 19:44:41 +0000 Subject: [PATCH 001/578] Translated using Weblate (Czech) Currently translated at 100.0% (2081 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/cs/ --- vector/src/main/res/values-cs/strings.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/vector/src/main/res/values-cs/strings.xml b/vector/src/main/res/values-cs/strings.xml index 4fe9a905aa..2277157028 100644 --- a/vector/src/main/res/values-cs/strings.xml +++ b/vector/src/main/res/values-cs/strings.xml @@ -41,10 +41,10 @@ \nPřipojit se jako %1$s nebo %2$s Hlasem Videem - Nemohu spustit hovor, zkuste, prosím, později + Nemohu zahájit hovor, zkuste, prosím, později Z důvodu chybějících práv mohou některé funkce chybět… Potřebujete práva k pozvání pro spuštění konference v této místnosti - Nemohu spustit hovor + Nemohu zahájit hovor Informace o relaci Konferenční hovory nejsou podporovány v šifrovaných místnostech Přesto poslat @@ -1947,8 +1947,8 @@ Zahájit video schůzku Zahájit hlasovou schůzku Schůzky používají pravidla zabezpečení a přístupu Jitsi. Všichni lidé nyní v místnosti uvidí pozvánku k připojení, zatímco Vaše schůzka probíhá. - Nemůžete spustit hovor se sebou - Nemůžete spustit hovor se sebou, počkejte, až účastníci přijmou pozvánku + Nemůžete zahájit hovor se sebou + Nemůžete zahájit hovor se sebou, počkejte, až účastníci přijmou pozvánku Přidání widgetu se nezdařilo Odstranění widgetu se nezdařilo Přijmout From ed51c865efc851950667725b0c8fc9a24d64cc28 Mon Sep 17 00:00:00 2001 From: Torben Date: Tue, 16 Feb 2021 14:08:31 +0000 Subject: [PATCH 002/578] Translated using Weblate (German) Currently translated at 99.9% (2080 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/de/ --- vector/src/main/res/values-de/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vector/src/main/res/values-de/strings.xml b/vector/src/main/res/values-de/strings.xml index 43eef6909f..a5015b2117 100644 --- a/vector/src/main/res/values-de/strings.xml +++ b/vector/src/main/res/values-de/strings.xml @@ -1894,7 +1894,7 @@ \nElement Android oder einen anderen cross-signing fähigen Matrix Client Nutze die neueste Version von Element auf deinen anderen Geräten: - Erzwingt das Verferfen der aktuell ausgehende Gruppensitzung in einem verschlüsseltem Raum + Erzwingt das Verwerfen der aktuell ausgehende Gruppensitzung in einem verschlüsseltem Raum Wird nur in verschlüsselten Räumen unterstützt Benutze deine %1$s oder deinen %2$s um fortzufahren. Wiederherstellungsschlüssel verwenden From 1ae0f93e14d6e3df450a5ff5cc77b577a9ad36a4 Mon Sep 17 00:00:00 2001 From: LinAGKar Date: Wed, 17 Feb 2021 19:52:49 +0000 Subject: [PATCH 003/578] Translated using Weblate (Swedish) Currently translated at 100.0% (2081 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/sv/ --- vector/src/main/res/values-sv/strings.xml | 28 +++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/vector/src/main/res/values-sv/strings.xml b/vector/src/main/res/values-sv/strings.xml index c203e48839..c8aa5824db 100644 --- a/vector/src/main/res/values-sv/strings.xml +++ b/vector/src/main/res/values-sv/strings.xml @@ -2320,4 +2320,32 @@ Omautentisering krävs Mislyckades att ställa in korssignering Obehörig, saknar giltiga autentiseringsuppgifter + Användare + Ett fel inträffade när samtalet flyttades + Flytta + Anslut + Rådfråga först + + 1 aktivt samtal (%1$s) - 1 pausat samtal + 1 aktivt samtal (%1$s) - %2$d pausade samtal + + + Pausat samtal + %1$d pausade samtal + + Aktivt samtal (%1$s) + Ett fel inträffade när telefonnumret slogs upp + Knappsats + Ring tillbaka + Det här samtalet har avslutats + %1$s avböjde det här samtalet + Du avböjde det här samtalet %1$s + Du är för närvarande i det här samtalet + %1$s startade ett samtal + Du startade ett samtal + Du parkerade samtalet + %s parkerade samtalet + Parkera + Återuppta + Tillbaka \ No newline at end of file From 7d8c184ddabe5765d64569d74d4f6441aa9bbb99 Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Wed, 17 Feb 2021 02:29:08 +0000 Subject: [PATCH 004/578] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (2081 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/zh_Hant/ --- vector/src/main/res/values-zh-rTW/strings.xml | 30 +++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/vector/src/main/res/values-zh-rTW/strings.xml b/vector/src/main/res/values-zh-rTW/strings.xml index e4368652bf..7121c8f570 100644 --- a/vector/src/main/res/values-zh-rTW/strings.xml +++ b/vector/src/main/res/values-zh-rTW/strings.xml @@ -385,7 +385,7 @@ %d 個聊天室 - 有 %1$d 個聊天室匹配 “%2$s” + %2$s 找到 %1$s 個聊天室 正在搜尋目錄…… 所有訊息(通知並震動) @@ -2096,7 +2096,7 @@ 使用 PIN 碼與生物識別技術來保護存取權。 保護存取權 - 顯示您現在可以驗證的 %s 個裝置 + 顯示您現在可以驗證的 %d 個裝置 您將會重新啟動,沒有歷史紀錄,已信任的裝置或已信任的使用者 如果您重設了所有東西 @@ -2282,4 +2282,30 @@ 需要重新驗證 未能設定交叉簽章 未授權,缺少有效的身份驗證憑證 + 使用者 + 轉移電話時發生錯誤 + 轉移 + 連線 + 先諮詢 + + 1 個通話中 (%1$s) · %2$d 暫停的通話 + + + %1$d 暫停了通話 + + 通話中 (%1$s) + 查詢電話號碼時發生錯誤 + 撥號鍵盤 + 回撥 + 此通話已結束 + %1$s 婉拒了此通話 + 您婉拒了此通話 %1$s + 您目前在此通話中 + %1$s 開始了通話 + 您開始了通話 + 您保留了通話 + %s 保留了通話 + 保留 + 恢復 + 返回 \ No newline at end of file From 5547f1119205dfc5608c62f2fa00ae5d50e0d357 Mon Sep 17 00:00:00 2001 From: zer0-x <1rn0kmrwo@relay.firefox.com> Date: Wed, 17 Feb 2021 19:33:20 +0000 Subject: [PATCH 005/578] Translated using Weblate (Arabic) Currently translated at 84.5% (191 of 226 strings) Translation: Element Android/Element Android Sdk Translate-URL: https://translate.element.io/projects/element-android/element-sdk/ar/ --- .../src/main/res/values-ar/strings.xml | 340 +++++++++++------- 1 file changed, 204 insertions(+), 136 deletions(-) diff --git a/matrix-sdk-android/src/main/res/values-ar/strings.xml b/matrix-sdk-android/src/main/res/values-ar/strings.xml index 0da4dc8f8e..6e017f9d23 100644 --- a/matrix-sdk-android/src/main/res/values-ar/strings.xml +++ b/matrix-sdk-android/src/main/res/values-ar/strings.xml @@ -1,150 +1,218 @@ - %1$s قد أرسل صورة. - دعوة من %s - %1$s قد دعى %2$s - %1$s قد دعاك أنت - %1$s قد إنضّم إلى الغرفة - %1$s قد غادر الغرفة - %1$s قد رفض الدعوة - %1$s قد طرد %2$s - %1$s قد رفع الحظر عن %2$s - %1$s قد حظر %2$s - %1$s قد غيّر صورته الشخصية - %1$s قد عيّن اسمه الظاهر إلى %2$s - %1$s قد غيّر اسمه الظاهر من %2$s إلى %3$s - %1$s قد أزال اسمه الظاهر (لقد كان %2$s) - %1$s قد غيّر الموضوع إلى: %2$s - %1$s قد غيّر اسم الغرفة إلى: %2$s - %s قد أجاب على المُكالمة. - %s قد أنهى المُكالمة. - %1$s قد جعل التأريخ المُستقبلي للغرفة مرئيًا لـ %2$s - جميع أعضاء الغرفة، من اللحظة التي تمت دعوتهم. - جميع أعضاء الغرفة، من لحظة انضمامهم. - جميع أعضاء الغرفة. + إنَّ %1$s قد أرسلَ صُّورة. + دعوة مِن %s + إنَّ %1$s قد دَعى %2$s + إنَّ %1$s قد دعاكَ أنت + إنَّ %1$s قد إنضّم إلى الغُرفة + إنَّ %1$s قد غادر الغرفة + إنَّ %1$s قد رفضَ الدعوة + إنَّ %1$s قد طردَ %2$s + إنَّ %1$s قد رفعَ الحظر عن %2$s + إنَّ %1$s قد حظرَ %2$s + إنَّ %1$s قد غيَّرَ صورته الشخصية + إنَّ %1$s قد عيَّنَ اسمه الظاهر إلى %2$s + إنَّ %1$s قد غيَّرَ اسمه الظاهر من %2$s إلى %3$s + إنَّ %1$s قد أزالَ اسمه الظاهر (لقد كان %2$s) + إنَّ %1$s قد غيَّرَ الموضوع إلى: %2$s + إنَّ %1$s قد غيَّرَ اسم الغُرفة إلى: %2$s + إنَّ %s قد أجابَ على المُكالمة. + إنَّ %s قد أنهى المُكالمة. + إنَّ %1$s قد جعلَ التأريخ المُستقبلي للغُرفة مرئيًا لـ %2$s + جميع أعضاء الغُرفة، مِنَ اللَّحظة التي تمَّت دعوتهم. + جميع أعضاء الغُرفة، مِن لحظة انضمامهم. + جميع أعضاء الغُرفة. أيُّ شخص. غير معروف (%s). - %1$s قد فعّل تعمية النهاية-إلى-النهاية (%2$s) - %1$s قد طلب اجتماع VoIP - اجتماع VoIP قد بدأ - اجتماع VoIP قد انتهى - %1$s قد أزال اسم الغرفة - %1$s قد أزال موضوع الغرفة - حدّث ⁨%1$s⁩ اللاحة ⁨%2$s⁩ - أرسل ⁨%1$s⁩ دعوة إلى ⁨%2$s⁩ للانضمام إلى الغرفة - ** تعذّر فك التعمية: ⁨%s⁩ ** - لم يُرسل جهاز المرسل مفاتيح هذه الرسالة. - تعذّر إرسال الرسالة - فشل رفع الصورة - خطأ في الشبكة - خطأ في «ماترِكس» - لا يمكنك حاليًا الانضمام ثانيةً إلى غرفة فارغة. - رسالة معمّاة - عنوان البريد الإلكتروني + إنَّ %1$s قد فعَّلَ تعمية النهاية-إلى-النهاية (%2$s) + إنَّ %1$s قد طلبَ اجتماع VoIP + إنَّ اجتماع VoIP قد بدأ + إنَّ اجتماع VoIP قد انتهى + إنَّ %1$s قد أزالَ اسم الغُرفة + إنَّ %1$s قد أزالَ موضوع الغُرفة + إنَّ %1$s قد حدَّثَ ملفه الشخصي %2$s + إنَّ %1$s قد أرسلَ دعوة إلى %2$s للإنضمام إلى الغُرفة + ** يتعذَّر فك تعمية: ⁨%s⁩ ** + إنَّ جِهاز المُرسل لم يُرسل لنا المفاتيح لهذه الرِّسالة. + يتعذَّ إرسال الرِّسالة + فَشلَ رفع الصُّورة + خطأ في الشَّبكة + خطأ في Matrix + حاليًا مِن غير المُمكِن إعادة الاِنضمام إلى غُرفة فارِغة. + رِسالة مُعمَّاة + عُنوان البريد الإلكتروني رقم الهاتف ‏‏⁨%1$s⁩: ‏⁨%2$s⁩ - %1$s قد سحب دعوة %2$s - %s قد أجرى مُكالمة مرئية. - %s قد أجرى مُكالمة صوتية. - قَبِل ⁨%1$s⁩ دعوة ⁨%2$s⁩ - تعذر التهذيب - %1$s قد أرسل مُلصقًا. - (تمَّ تغيير الصورة أيضًا) - دعوة من ⁨%s⁩ - غرفة فارغة - ‏⁨%1$s⁩ و ⁨%2$s⁩ - دعوة إلى غرفة + إنَّ %1$s قد سحبَ دعوة %2$s + إنَّ %s قد أجرى مُكالمة مرئية. + إنَّ %s قد أجرى مُكالمة صوتية. + إنَّ %1$s قد قَبَل دعوة %2$s + يتعذَّر التنقيح + إنَّ %1$s قد أرسلَ مُلصقًا. + (تمَّ تغيِّير الصُّورة أيضًا) + دَعوة مِن ⁨%s⁩ + غُرفة فارِغة + %1$s وَ %2$s + دَعوة غُرفة - - - - - - + + %1$s وواحد آخر + %1$s و%2$d آخران + %1$s و%2$d آخرين + %1$s و%2$d آخرون + %1$s و%2$d آخرون - أنت قد أرسلت صورة. - أنت قد أرسلت مُلصقًا. - دعوة منك أنت - %1$s قد أنشأ الغرفة - أنت قد أنشأت الغرفة - أنت قد دعوت %1$s - أنت قد انضممت إلى الغرفة - أنت قد غادرت الغرفة + أنتَ قد أرسلتَ صُّورة. + أنتَ قد أرسلتَ مُلصقًا. + دعوة مِنكَ أنت + إنَّ %1$s قد أنشأ الغُرفة + أنتَ قد أنشأتَ الغُرفة + أنتَ قد دعوتَ %1$s + أنتَ قد انضممت إلى الغُرفة + أنتَ قد غادرتَ الغُرفة أنت قد رفضت الدعوة - أنت قد طردت %1$s - أنت قد رفعت الحظر عن %1$s - أنت قد حظرت %1$s - أنت قد سحبت دعوة %1$s - أنت قد غيّرت صورتك الشخصية - أنت قد عيّنت اسمك الظاهر إلى %1$s - أنت قد غيّرت اسمك الظاهر من ⁨%1$s⁩ إلى ⁨%2$s⁩ - أنت قد أزلت اسمك الظاهر (لقد كان ⁨%1$s⁩) - أنت قد غيّرت الموضوع إلى: ⁨%1$s⁩ - %1$s قد غيّر صورة الغرفة - أنت قد غيّرت صورة الغرفة - أنت قد غيّرت اسم الغرفة إلى: %1$s - أنت قد أجريت مُكالمة مرئية. - أنت قد أجريت مُكالمة صوتية. - %s قد أرسل بيانات لإعداد مُكالمة. - أنت قد أرسلت بيانات لإعداد مُكالمة. - أنت قد أجبت على المُكالمة. - أنت قد أنهيت المُكالمة. - أنت قد جعلت التأريخ المُستقبلي للغرفة مرئيًا لـ %1$s - أنت قد فعّلت تعيمية النهاية-إلى-النهاية (%1$s) - %s قد قام بترقية هذه الغرفة. - أنت قد رقّيتَ هذه الغرفة. - أنت قد طلبت اجتماع VoIP - أنت قد أزلت اسم الغرفة - أنت قد أزلت موضوع الغرفة - %1$s قد أزال صورة الغرفة - أنت قد أزلت صورة الغرفة - تمت إزالة الرسالة + أنتَ قد طردتَ %1$s + أنتَ قد رفعتَ الحظر عن %1$s + أنتَ قد حظرتَ %1$s + أنتَ قد سحبتَ دعوة %1$s + أنتَ قد غيّرتَ صورتك الشخصية + أنتَ قد عيَّنتَ اسمك الظاهر إلى %1$s + أنتَ قد غيّرتَ اسمك الظاهر من ⁨%1$s⁩ إلى ⁨%2$s⁩ + أنتَ قد أزلتَ اسمك الظاهر (لقد كان ⁨%1$s⁩) + أنتَ قد غيَّرتَ الموضوع إلى: ⁨%1$s⁩ + إنَّ %1$s قد غيَّرَ صورة الغُرفة + أنتَ قد غيَّرتَ صورة الغُرفة + أنتَ قد غيَّرتَ اسم الغُرفة إلى: %1$s + أنتَ قد أجريتَ مُكالمة مرئية. + أنتَ قد أجريتَ مُكالمة صوتية. + إنَّ %s قد أرسلَ بيانات لإعداد مُكالمة. + أنتَ قد أرسلتَ بيانات لإعداد مُكالمة. + أنتَ قد أجبتَ على المُكالمة. + أنتَ قد أنهيتَ المُكالمة. + أنتَ قد جعلتَ التأريخ المُستقبلي للغُرفة مرئيًا لـ %1$s + أنتَ قد فعَّلتَ تعيمية النهاية-إلى-النهاية (%1$s) + إنَّ %s قد قامَ بترقية هذه الغرفة. + أنتَ قد رقَّيتَ هذه الغرفة. + أنتَ قد طلبتَ اجتماع VoIP + أنتَ قد أزلتَ اسم الغُرفة + أنتَ قد أزلتَ موضوع الغُرفة + إنَّ %1$s قد أزالَ صورة الغُرفة + أنتَ قد أزلتَ صورة الغُرفة + تمَّت إزالة الرسالة الرسالة قد أُزيلت بواسطة %1$s أُزيلت الرسالة [السبب: ⁨%1$s⁩] - أزال ⁨%1$s⁩ الرسالة [السبب: ⁨%2$s⁩] - أرسلت دعوة إلى ⁨%1$s⁩ للانضمام إلى الغرفة - سحب ⁨%1$s⁩ دعوة ⁨%2$s⁩ للانضمام إلى الغرفة - سحبت دعوة ⁨%1$s⁩ للانضمام إلى الغرفة - قَبِلت دعوة ⁨%1$s⁩ - أضاف ⁨%1$s⁩ الودجة ⁨%2$s⁩ - أضفت الودجة ⁨%1$s⁩ - أزال ⁨%1$s⁩ الودجة ⁨%2$s⁩ - أزلت الودجة ⁨%1$s⁩ - عدّل ⁨%1$s⁩ الودجة ⁨%2$s⁩ - عدّلت الودجة ⁨%1$s⁩ - مدير - المبدئي - مخصّص (⁨%1$d⁩) - مخصّص - غيّرت مستوى قوّة %1$s⁩. - غيّر ⁨%1$s⁩ مستوى قوّة %2$s⁩. - ‏⁨%1$s⁩ من ⁨%2$s⁩ إلى ⁨%3$s⁩ - المزامنة الأولية: -\nيستورد الحساب… - 🎉 جميع الخوادم محظورة من المُشاركة! لم يعُد من الممكن استخدام هذه الغرفة. + الرِّسالة أُزيلت بِواسطة %1$s [السبب: ⁨%2$s⁩] + أنتَ قد أرسلتَ دعوة إلى %1$s للإنضمام إلى الغُرفة + إنَّ %1$s قد سحب دعوة %2$s للإنضمام إلى الغُرفة + أنتَ قد سحبت دعوة %1$s للإنضمام إلى الغُرفة + أنتَ قد قبلتَ دعوة %1$s + إنَّ %1$s قد أضافَ القطعة %2$s + أنتَّ قد أضفتَ القطعة %1$s + إنَّ %1$s قد أزال القطعة %2$s + أنتَ قد أزلتَ القطعة %1$s + إنَّ %1$s قد عدَّلَ القطعة %2$s + أنتَ قد عدَّلتَ القطعة %1$s + مسؤول + الاِفتراضي + مُخصَّص (⁨%1$d⁩) + مخصَّص + أنتَ قد غيَّرتَ مُستوى قوة %1$s. + إنَّ %1$s قد غيَّرَ مُستوى قوة %2$s. + %1$s مِن %2$s إلى %3$s + المُزامنة الأولية: +\nيجري إستيرد الحِساب… + 🎉 جميع الخوادِم محظورة مِنَ المُشاركة! لم يعُد من المُمكِن استخدام هذه الغُرفة. لا تغيير. - • خوادم مُطابقة IP الحرفية محظورة الآن. - • الخادم المُطابق لـ %s قد أُزيل من قائمة السماح. - • الخادم المُطابق لـ %s مسموح الآن. - • الخادم المُطابق لـ %s قد أُزيل من قائمة الحظر. - • الخادم المُطابق لـ %s محظور الآن. - • خوادم مُطابقة IP الحرفية مسموحة الآن. - أنت قد غيّرت خادم الـACLs لهذه الغرفة. - %s قد غيّر خادم الـACLs لهذه الغرفة. - • الخادم يحظر مُطابقة القيم الحرفية للـIP. - • الخادم المُطابق لـ %s مسموح. - • الخادم المُطابق لـ %s محظور. - • الخادم يسمح بمُطابقة القيم الحرفية للـIP. - أنت قد عيّنت خادم الـACLs لهذه الغرفة. - %s قد عيّن خادم الـACLs لهذه الغرفة. - أنت قد قمت بالترقية هُنا. - %s قد قام بالترقية هُنا. - أنت قد جعلت الرسائل المُستقبلية مرئية لـ %1$s - %1$s قد جعل الرسائل المُستقبلية مرئية لـ %2$s - أنت قد غادرت الغرفة - %1$s قد غادر الغرفة + • خوادِم مُطابقة IP الحرفية محظورة الآن. + • الخادِم المُطابق لـ %s قد أُزيل مِن قائمة السماح. + • الخادِم المُطابق لـ %s مسموح الآن. + • الخادِم المُطابق لـ %s قد أُزيل مِن قائمة الحظر. + • الخادِم المُطابق لـ %s محظور الآن. + • خوادِم مُطابقة IP الحرفية مسموحة الآن. + أنتَ قد غيَّرتَ خادِم الـACLs لهذه الغُرفة. + إنَّ %s قد غيَّرَ خادِم الـACLs لهذه الغُرفة. + • الخادِم يحظُر مُطابقة القيم الحرفية للـIP. + • الخادِم المُطابق لـ %s مسموح. + • الخادِم المُطابق لـ %s محظور. + • الخادِم يسمح بمُطابقة القيم الحرفية للـIP. + أنتَ قد عيَّنتَ خادِم الـACLs لهذه الغُرفة. + إنَّ %s قد عيَّنَ خادِم الـACLs لهذه الغُرفة. + أنتَ قد قمتَ بالترقية هُنا. + إنَّ %s قد قامَ بالترقية هُنا. + أنتَ قد جعلتَ الرسائل المُستقبلية مرئية لـ %1$s + إنَّ %1$s قد جعلَ الرسائل المُستقبلية مرئية لـ %2$s + أنتَ قد غادرتَ الغُرفة + إنَّ %1$s قد غادر الغرفة أنت قد انضممت - %1$s قد انضم - أنت قد أنشأت المُناقشة - %1$s قد أنشأ المُناقشة + إنَّ %1$s قد انضم + أنتَ قد أنشأتَ المُناقشة + إنَّ %1$s قد أنشأ المُناقشة + أنتَ قد سحبتَ دعوة %1$s. السبب: %2$s + إنَّ %1$s قد سحبَ دعوة %2$s. السبب: %3$s + أنتَ قد ألغيتَ دعوة %1$s للإنضمام إلى الغُرفة. السبب: %2$s + إنَّ %1$s قد ألغيت دعوة %2$s للإنضمام إلى الغُرفة. السبب: %3$s + أنتَ قد قبلتَ دعوة %1$s. السبب: %2$s + إنَّ %1$s قد قبلَ دعوة %2$s. السبب: %3$s + أنتَ قد أرسلتَ دعوة إلى %1$s للإنضمام إلى الغُرفة. السبب: %2$s + إنَّ %1$s قد أرسل دعوة إلى %2$s للإنضمام إلى الغُرغة. السبب: %3$s + أنتَ قد حظرتَ %1$s. السبب: %2$s + إنَّ %1$s قد حَظر %2$s. السبب: %3$s + أنتَ قد رفعتَ الحظر عن %1$s. السبب: %2$s + إنَّ %1$s قد رفع الحظر عن %2$s. السبب: %3$s + أنتَ قد طردتَ %1$s. السبب: %2$s + إنَّ %1$s قد طرد %2$s. السبب: %3$s + أنتَ قد رفضتَ الدعوة. السبب: %1$s + إنَّ %1$s قد رفض الدعوة. السبب: %2$s + أنتَ قد غادرت. السبب: %1$s + إنَّ %1$s قد غادر. السبب: %2$s + أنتَ قد غادرتَ الغُرفة. السبب: %1$s + إنَّ %1$s قد غادر الغُرفة. السبب: %2$s + أنتَ قد إنضممت. السبب: %1$s + إنَّ %1$s قد إنضم. السبب: %2$s + أنتَ قد إنضممتَ إلى الغُرفة. السبب: %1$s + إنَّ %1$s قد إنضم إلى الغُرفة. السبب: %2$s + إنَّ %1$s قد دعاكَ أنت. السبب: %2$s + أنتَ قد دعوتَ %1$s. السبب: %2$s + إنَّ %1$s قد دعا %2$s. السبب: %3$s + دعوتُكَ أنت. السبب: %1$s + دعوة %1$s. السبب: %2$s + محو قائمة انتظار الإرسال + يجري إرسال الرِّسالة… + المُزامنة الأولية: +\nيجري إستيرد مَعلومات الحِساب + المُزامنة الأولية: +\nيجري إستيرد المُجتمعات + المُزامنة الأولية: +\nيجري إستيرد الغُرف المُغادَر مِنها + المُزامنة الأولية: +\nيجري إستيرد الغُرف المَدعو إليها + المُزامنة الأولية: +\nيجري إستيرد الغُرف المُنضم فيها + المُزامنة الأولية: +\nيجري إستيرد الغُرف + المُزامنة الأولية: +\nيجري إستيرد التَعمية + غُرفة فارِغة (كانت %s) + + %1$s، %2$s و%3$s + %1$s، %2$s، %3$s و%4$d آخر + %1$s، %2$s، %3$s و%4$d آخران + %1$s، %2$s، %3$s و%4$d آخرين + %1$s، %2$s، %3$s و%4$d آخرون + %1$s،%2$s،%3$s و%4$d آخرون + + الأعضاء %1$s، %2$s، %3$s و %4$s + الأعضاء %1$s، %2$s و %3$s + مُشرِف + أنتَ قد عدَّلتَ اجتماع الفيديو + لقد عُدِّلَ اجتماع الفيديو بواسطة %1$s + أنتَ قد أنهيتَ اجتماع الفيديو + لقد أُنهيَ اجتماع الفيديو بواسطة %1$s + أنتَ قد بدأتَ اجتماع الفيديو + لقد بدأ اجتماع الفيديو بواسطة %1$s + أنتَ قد سحبتَ دعوة %1$s + إنَّ %1$s قد سحب دعوة %2$s + أنتَ قد دعوتَ %1$s + إنَّ %1$s قد دعى %2$s + أنتَ قد حدَّثتَ ملفك الشخصي %1$s \ No newline at end of file From ca2c4a64e9ac567e6d1aba8a380a4d53795d9c32 Mon Sep 17 00:00:00 2001 From: "@a2sc:matrix.org" Date: Wed, 17 Feb 2021 15:13:49 +0000 Subject: [PATCH 006/578] Translated using Weblate (German) Currently translated at 100.0% (226 of 226 strings) Translation: Element Android/Element Android Sdk Translate-URL: https://translate.element.io/projects/element-android/element-sdk/de/ --- matrix-sdk-android/src/main/res/values-de/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/matrix-sdk-android/src/main/res/values-de/strings.xml b/matrix-sdk-android/src/main/res/values-de/strings.xml index 81cf01983d..fdfb264f49 100644 --- a/matrix-sdk-android/src/main/res/values-de/strings.xml +++ b/matrix-sdk-android/src/main/res/values-de/strings.xml @@ -236,8 +236,8 @@ %1$s entfernte die alternativen Adressen %2$s für diesen Raum. - Du fügtest die alternative Adresse %2$s für diesen Raum hinzu. - Du fügtest die alternativen Adressen %2$s für diesen Raum hinzu. + Du hast die alternative Adresse %1$s für diesen Raum hinzugefügt. + Du hast die alternativen Adressen %1$s für diesen Raum hinzufügt. %1$s fügte die alternative Adresse %2$s für diesen Raum hinzu. From 263b8b1e77de926c4ab6d6e16ca5479551fce79b Mon Sep 17 00:00:00 2001 From: XoseM Date: Wed, 17 Feb 2021 07:10:03 +0000 Subject: [PATCH 007/578] Translated using Weblate (Galician) Currently translated at 85.3% (193 of 226 strings) Translation: Element Android/Element Android Sdk Translate-URL: https://translate.element.io/projects/element-android/element-sdk/gl/ --- .../src/main/res/values-gl/strings.xml | 109 ++++++++++++++++++ 1 file changed, 109 insertions(+) diff --git a/matrix-sdk-android/src/main/res/values-gl/strings.xml b/matrix-sdk-android/src/main/res/values-gl/strings.xml index 6ae9b33b66..def8af44c7 100644 --- a/matrix-sdk-android/src/main/res/values-gl/strings.xml +++ b/matrix-sdk-android/src/main/res/values-gl/strings.xml @@ -98,4 +98,113 @@ Respondeches á chamada. Enviaches datos para configurar a chamada. %s enviou datos para configurar a chamada. + Retiraches o convite de %1$s. Razón: %2$s + %1$s retirou o convite de %2$s. Razón: %3$s + Aceptaches o convite para %1$s. Razón: %2$s + %1$s aceptou o convite para %2$s. Razón: %3$s + Revogaches o convite para que %1$s se una á sala. Razón: %2$s + %1$s revogou o convite para que %2$s se una á sala. Razón: %3$s + Convidaches a %1$s para que se una á sala. Razón: %2$s + %1$s convidou a %2$s para que se una á sala. Razón: %3$s + Vetaches a %1$s. Razón: %2$s + %1$s vetou a %2$s. Razón: %3$s + Retirácheslle o veto a %1$s. Razón: %2$s + %1$s retirou o veto a %2$s. Razón: %3$s + Expulsaches a %1$s. Razón: %2$s + %1$s expulsou a %2$s. Razón: %3$s + Rexeitaches o convite. Razón: %1$s + %1$s rexeitou o convite. Razón: %2$s + Saíches. Razón: %1$s + %1$s saíu. Razón: %2$s + Saíches da sala. Razón: %1$s + %1$s deixou a sala. Razón: %2$s + Unícheste. Razón: %1$s + %1$s uníuse. Razón: %2$s + Unícheste á sala. Razón: %1$s + %1$s uniuse á sala. Razón: %2$s + %1$s convidoute. Razón: %2$s + Convidaches a %1$s. Razón: %2$s + %1$s convidou a %2$s. Razón: %3$s + O teu convite. Razón: %1$s + Convite de %1$s. Razón: %2$s + Baleirar cola de envíos + Enviando mensaxe… + Sincr. inicial: +\nImportando datos da conta + Sincr. inicial: +\nImportando comunidades + Sincr. inicial: +\nImportando salas das que saíches + Sincr. inicial: +\nImportando convites a salas + Sincr. inicial: +\nImportando Salas + Sincr. inicial: +\nImportando salas + Sincr. inicial: +\nImportando cifrado + Sincr. inicial: +\nImportando conta… + Sala baleira (estaba %s) + Sala baleira + + %1$s e 1 máis + %1$s e %2$d outras + + + %1$s, %2$s, %3$s e %4$d máis + %1$s, %2$s, %3$s e %4$d outras + + %1$s, %2$s, %3$s e %4$s + %1$s, %2$s e %3$s + Convite de sala + Convite desde %s + %1$s de %2$s a %3$s + %1$s cambiou de categoría a %2$s. + Cambiaches a categoría de %1$s. + Personalizado + Personalizado (%1$d) + Por defecto + Moderadora + Admin + Modificaches a conferencia de vídeo + Conferencia de vídeo modificada por %1$s + Finalizaches a conferencia de vídeo + Conferencia de vídeo finalizada por %1$s + Iniciaches unha conferencia de vídeo + Conferencia de vídeo iniciada por %1$s + Modificaches o widget %1$s + %1$s modificou o widget %2$s + Eliminaches o widget %1$s + %1$s eliminou o widget %2$s + Engadiches o widget %1$s + %1$s engadiu o widget %2$s + Aceptaches o convite para %1$s + Revogaches o convite para %1$s + %1$s revogou o convite para %2$s + Revogaches o convite para que %1$s se una á sala + %1$s revogou o convite para que %2$s se una á sala + Convidaches a %1$s + %1$s convidou a %2$s + Enviácheslle un convite a %1$s para unirse á sala + Actualizaches o teu perfil %1$s + Mensaxe eliminada por %1$s [razón: %2$s] + Mensaxe eliminada [razón: %1$s] + Mensaxe eliminada por %1$s + Mensaxe eliminada + Eliminaches o avatar da sala + %1$s eliminou o avatar da sala + Eliminaches o asunto da sala + Eliminaches o nome da sala + Solicitaches unha conferencia VoIP + 🎉 Vetouse a participación de tódolos servidores! Xa non se pode utilizar esta sala. + Sen cambio. + • Os servidores con literais IP concordantes están vetados. + • Os servidores cos literais IP concordantes están permitidos. + • Servidores con %s foron eliminados da lista de permitidos. + • Os servidores con %s agora están permitidos. + • Os servidores con %s xa non están la lista de vetados. + • Os servidores con %s están agora vetados. + Cambiaches os ACLs do servidor para esta sala. + %s cambiou os ACLs do servidor para esta sala. \ No newline at end of file From a66f609a07179e1332261ce15382c5b370feb5c0 Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Wed, 17 Feb 2021 02:30:12 +0000 Subject: [PATCH 008/578] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (226 of 226 strings) Translation: Element Android/Element Android Sdk Translate-URL: https://translate.element.io/projects/element-android/element-sdk/zh_Hant/ --- matrix-sdk-android/src/main/res/values-zh-rTW/strings.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/matrix-sdk-android/src/main/res/values-zh-rTW/strings.xml b/matrix-sdk-android/src/main/res/values-zh-rTW/strings.xml index 5038e8aab2..6f73f88279 100644 --- a/matrix-sdk-android/src/main/res/values-zh-rTW/strings.xml +++ b/matrix-sdk-android/src/main/res/values-zh-rTW/strings.xml @@ -248,4 +248,10 @@ %1$s 已為此聊天室新增了備用地址 %2$s。 + 您修改了視訊會議 + %1$s 修改了視訊會議 + 您結束了視訊會議 + %1$s 結束了視訊會議 + 您開始了視訊會議 + 由 %1$s 開始的視訊會議 \ No newline at end of file From 04c1cbd38e7448a3baffbb0ac984208cf924bd46 Mon Sep 17 00:00:00 2001 From: LinAGKar Date: Wed, 17 Feb 2021 19:45:03 +0000 Subject: [PATCH 009/578] Translated using Weblate (Swedish) Currently translated at 100.0% (226 of 226 strings) Translation: Element Android/Element Android Sdk Translate-URL: https://translate.element.io/projects/element-android/element-sdk/sv/ --- matrix-sdk-android/src/main/res/values-sv/strings.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/matrix-sdk-android/src/main/res/values-sv/strings.xml b/matrix-sdk-android/src/main/res/values-sv/strings.xml index 91d874591f..df36a47533 100644 --- a/matrix-sdk-android/src/main/res/values-sv/strings.xml +++ b/matrix-sdk-android/src/main/res/values-sv/strings.xml @@ -258,4 +258,10 @@ • Servrar som matchar %s är bannade. Du satte server-ACLer för det här rummet. %s satte server-ACLer för det här rummet. + Du ändrade videogruppsamtal + Videogruppsamtal ändrades av %1$s + Du avslutade videogruppsamtal + Videogruppsamtal avslutades av %1$s + Du startade videogruppsamtal + Videogruppsamtal startades av %1$s \ No newline at end of file From be1febef41f1bd3d6a63c69361db7fd45e60ed8e Mon Sep 17 00:00:00 2001 From: LinAGKar Date: Tue, 16 Feb 2021 13:17:36 +0000 Subject: [PATCH 010/578] Translated using Weblate (Swedish) Currently translated at 100.0% (11 of 11 strings) Translation: Element Android/Element Android Store Translate-URL: https://translate.element.io/projects/element-android/element-store/sv/ --- fastlane/metadata/android/sv/changelogs/40100170.txt | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 fastlane/metadata/android/sv/changelogs/40100170.txt diff --git a/fastlane/metadata/android/sv/changelogs/40100170.txt b/fastlane/metadata/android/sv/changelogs/40100170.txt new file mode 100644 index 0000000000..37f027d054 --- /dev/null +++ b/fastlane/metadata/android/sv/changelogs/40100170.txt @@ -0,0 +1,2 @@ +Huvudsakliga ändringar i den här versionen: Buggfixar! +Full ändringslogg: https://github.com/vector-im/element-android/releases/tag/v1.0.17 From 85a053838e92b5bac764b40beb1c9df617bcf611 Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Wed, 17 Feb 2021 02:34:11 +0000 Subject: [PATCH 011/578] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (11 of 11 strings) Translation: Element Android/Element Android Store Translate-URL: https://translate.element.io/projects/element-android/element-store/zh_Hant/ --- fastlane/metadata/android/zh_Hant/changelogs/40100170.txt | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 fastlane/metadata/android/zh_Hant/changelogs/40100170.txt diff --git a/fastlane/metadata/android/zh_Hant/changelogs/40100170.txt b/fastlane/metadata/android/zh_Hant/changelogs/40100170.txt new file mode 100644 index 0000000000..35b8a54110 --- /dev/null +++ b/fastlane/metadata/android/zh_Hant/changelogs/40100170.txt @@ -0,0 +1,2 @@ +此版本中的主要變動:錯誤修復! +完整變更紀錄:https://github.com/vector-im/element-android/releases/tag/v1.0.17 From 4267e33d196231712c1206048281ddff679cef9a Mon Sep 17 00:00:00 2001 From: waclaw66 Date: Tue, 16 Feb 2021 11:35:39 +0000 Subject: [PATCH 012/578] Translated using Weblate (Czech) Currently translated at 63.6% (7 of 11 strings) Translation: Element Android/Element Android Store Translate-URL: https://translate.element.io/projects/element-android/element-store/cs/ --- fastlane/metadata/android/cs/changelogs/40100130.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fastlane/metadata/android/cs/changelogs/40100130.txt b/fastlane/metadata/android/cs/changelogs/40100130.txt index 0e90f17e8b..bf44ad40e0 100644 --- a/fastlane/metadata/android/cs/changelogs/40100130.txt +++ b/fastlane/metadata/android/cs/changelogs/40100130.txt @@ -1,2 +1,2 @@ Hlavní změny v této verzi: Náhled URL, nová klávesice s Emoji, nové možnosti nastavení místností a sníh na vánoce! -Plné znění změn: https://github.com/vector-im/element-android/releases/tag/v1.0.12 +Plné znění změn: https://github.com/vector-im/element-android/releases/tag/v1.0.13 From 21ea461c1c3e3fa033975ef5df8c933e292b5bce Mon Sep 17 00:00:00 2001 From: vachan-maker Date: Wed, 17 Feb 2021 02:28:22 +0000 Subject: [PATCH 013/578] Translated using Weblate (Malayalam) Currently translated at 5.7% (120 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/ml/ --- vector/src/main/res/values-ml/strings.xml | 27 +++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/vector/src/main/res/values-ml/strings.xml b/vector/src/main/res/values-ml/strings.xml index 64a5cfbe7b..b191484568 100644 --- a/vector/src/main/res/values-ml/strings.xml +++ b/vector/src/main/res/values-ml/strings.xml @@ -93,4 +93,31 @@ സന്ദേശങ്ങൾ നിശബ്‌ദ അറിയിപ്പുകൾ സമന്വയിപ്പിക്കുന്നു + ഫോൺ നമ്പർ (നിർബന്ധമല്ല) + ഫോൺ നമ്പർ + ഒഴിവാക്കൂ + സമർപ്പിക്കൂ + അക്കൗണ്ട് സൃഷ്ടിക്കൂ + വീഡിയോ എടുക്കുക + ഫോട്ടോ എടുക്കുക + സ്പീക്കർ + ഫോൺ + എന്നോട് ഇനിയും ചോദിക്കരുത് + പുതിയ ചാറ്റ് ആരംഭിക്കുക + പ്രവേശിക്കൂ + അക്കൗണ്ട് സൃഷ്ടിക്കൂ + ഉപയോക്തൃനാമം + മുറിയിൽ ചേരുക + സ്ക്രീൻഷോട്ട് അയയ്ക്കൂ + ക്ഷണിക്കുക + ക്ലിപ്പ്ബോർഡിലേക്ക് പകർത്തി + നിരസിക്കുക + സ്വീകരിക്കുക + ഒരു കോൾ ആരംഭിക്കാൻ നിങ്ങളെ അനുവദിച്ചിട്ടില്ല + ഒഴിവാക്കൂ + പേരുമാറ്റുക + സംസാരിക്കൂ + നീക്കംചെയ്യൂ + ബാക്കപ്പ് + അംഗ വിശദാംശങ്ങൾ \ No newline at end of file From 14fc31be07ef3c672330b1777ce7e98d0a06c70c Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 16 Feb 2021 14:05:01 +0100 Subject: [PATCH 014/578] Add homeserver version check --- tools/hs_diag.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/hs_diag.py b/tools/hs_diag.py index ded10a562d..7d7a947c4c 100755 --- a/tools/hs_diag.py +++ b/tools/hs_diag.py @@ -48,7 +48,8 @@ print("Get information from " + baseUrl) items = [ # [Title, URL, True for GET request and False for POST request] ["Well-known", baseUrl + ".well-known/matrix/client", True] - , ["Version", baseUrl + "_matrix/client/versions", True] + , ["API version", baseUrl + "_matrix/client/versions", True] + , ["Homeserver version", baseUrl + "_matrix/federation/v1/version", True] , ["Login flow", baseUrl + "_matrix/client/r0/login", True] , ["Registration flow", baseUrl + "_matrix/client/r0/register", False] # Useless , ["Username availability", baseUrl + "_matrix/client/r0/register/available?username=benoit", True] From a8be5ed6b02b942e2059cdb3f3ce4e01ad26817c Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 16 Feb 2021 14:50:50 +0100 Subject: [PATCH 015/578] Create FederationModule --- .../sdk/api/federation/FederationService.kt | 24 +++++++++ .../sdk/api/federation/FederationVersion.kt | 31 ++++++++++++ .../matrix/android/sdk/api/session/Session.kt | 6 +++ .../federation/DefaultFederationService.kt | 29 +++++++++++ .../sdk/internal/federation/FederationAPI.kt | 27 ++++++++++ .../federation/FederationGetVersionResult.kt | 37 ++++++++++++++ .../internal/federation/FederationModule.kt | 49 +++++++++++++++++++ .../federation/GetFederationVersionTask.kt | 40 +++++++++++++++ .../sdk/internal/network/NetworkConstants.kt | 3 ++ .../sdk/internal/session/DefaultSession.kt | 4 ++ .../sdk/internal/session/SessionComponent.kt | 2 + 11 files changed, 252 insertions(+) create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/federation/FederationService.kt create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/federation/FederationVersion.kt create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/federation/DefaultFederationService.kt create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/federation/FederationAPI.kt create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/federation/FederationGetVersionResult.kt create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/federation/FederationModule.kt create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/federation/GetFederationVersionTask.kt diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/federation/FederationService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/federation/FederationService.kt new file mode 100644 index 0000000000..0761ef8d21 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/federation/FederationService.kt @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2021 The Matrix.org Foundation C.I.C. + * + * 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. + */ + +package org.matrix.android.sdk.api.federation + +interface FederationService { + /** + * Get information about the homeserver + */ + suspend fun getFederationVersion(): FederationVersion +} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/federation/FederationVersion.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/federation/FederationVersion.kt new file mode 100644 index 0000000000..2ed3f848b6 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/federation/FederationVersion.kt @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2021 The Matrix.org Foundation C.I.C. + * + * 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. + */ + +package org.matrix.android.sdk.api.federation + +/** + * Ref: https://matrix.org/docs/spec/server_server/latest#get-matrix-federation-v1-version + */ +data class FederationVersion( + /** + * Arbitrary name that identify this implementation. + */ + val name: String?, + /** + * Version of this implementation. The version format depends on the implementation. + */ + val version: String? +) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/Session.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/Session.kt index 039025e0df..86ac0056e2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/Session.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/Session.kt @@ -21,6 +21,7 @@ import androidx.lifecycle.LiveData import okhttp3.OkHttpClient import org.matrix.android.sdk.api.auth.data.SessionParams import org.matrix.android.sdk.api.failure.GlobalError +import org.matrix.android.sdk.api.federation.FederationService import org.matrix.android.sdk.api.pushrules.PushRuleService import org.matrix.android.sdk.api.session.account.AccountService import org.matrix.android.sdk.api.session.accountdata.AccountDataService @@ -213,6 +214,11 @@ interface Session : */ fun searchService(): SearchService + /** + * Returns the federation service associated with the session + */ + fun federationService(): FederationService + /** * Returns the third party service associated with the session */ diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/federation/DefaultFederationService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/federation/DefaultFederationService.kt new file mode 100644 index 0000000000..862a4855cc --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/federation/DefaultFederationService.kt @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2021 The Matrix.org Foundation C.I.C. + * + * 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. + */ + +package org.matrix.android.sdk.internal.federation + +import org.matrix.android.sdk.api.federation.FederationService +import org.matrix.android.sdk.api.federation.FederationVersion +import javax.inject.Inject + +internal class DefaultFederationService @Inject constructor( + private val getFederationVersionTask: GetFederationVersionTask +) : FederationService { + override suspend fun getFederationVersion(): FederationVersion { + return getFederationVersionTask.execute(Unit) + } +} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/federation/FederationAPI.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/federation/FederationAPI.kt new file mode 100644 index 0000000000..1816616336 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/federation/FederationAPI.kt @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2021 The Matrix.org Foundation C.I.C. + * + * 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. + * + */ + +package org.matrix.android.sdk.internal.federation + +import org.matrix.android.sdk.internal.network.NetworkConstants +import retrofit2.Call +import retrofit2.http.GET + +internal interface FederationAPI { + @GET(NetworkConstants.URI_FEDERATION_PATH + "version") + fun getVersion(): Call +} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/federation/FederationGetVersionResult.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/federation/FederationGetVersionResult.kt new file mode 100644 index 0000000000..4e436c0da2 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/federation/FederationGetVersionResult.kt @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2021 The Matrix.org Foundation C.I.C. + * + * 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. + */ + +package org.matrix.android.sdk.internal.federation + +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass + +/** + * Ref: https://matrix.org/docs/spec/server_server/latest#get-matrix-federation-v1-version + */ +@JsonClass(generateAdapter = true) +internal data class FederationGetVersionResult( + /** + * Arbitrary name that identify this implementation. + */ + @Json(name = "name") + val name: String?, + /** + * Version of this implementation. The version format depends on the implementation. + */ + @Json(name = "version") + val version: String? +) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/federation/FederationModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/federation/FederationModule.kt new file mode 100644 index 0000000000..320bf1d445 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/federation/FederationModule.kt @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2021 The Matrix.org Foundation C.I.C. + * + * 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. + * + */ + +package org.matrix.android.sdk.internal.federation + +import dagger.Binds +import dagger.Lazy +import dagger.Module +import dagger.Provides +import okhttp3.OkHttpClient +import org.matrix.android.sdk.api.auth.data.SessionParams +import org.matrix.android.sdk.api.federation.FederationService +import org.matrix.android.sdk.internal.di.Unauthenticated +import org.matrix.android.sdk.internal.network.RetrofitFactory + +@Module +internal abstract class FederationModule { + + @Module + companion object { + @Provides + @JvmStatic + fun providesFederationAPI(@Unauthenticated okHttpClient: Lazy, + sessionParams: SessionParams, + retrofitFactory: RetrofitFactory): FederationAPI { + return retrofitFactory.create(okHttpClient, sessionParams.homeServerUrl).create(FederationAPI::class.java) + } + } + + @Binds + abstract fun bindFederationService(service: DefaultFederationService): FederationService + + @Binds + abstract fun bindGetFederationVersionTask(task: DefaultGetFederationVersionTask): GetFederationVersionTask +} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/federation/GetFederationVersionTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/federation/GetFederationVersionTask.kt new file mode 100644 index 0000000000..6000ff6d31 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/federation/GetFederationVersionTask.kt @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2021 The Matrix.org Foundation C.I.C. + * + * 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. + */ + +package org.matrix.android.sdk.internal.federation + +import org.matrix.android.sdk.api.federation.FederationVersion +import org.matrix.android.sdk.internal.network.executeRequest +import org.matrix.android.sdk.internal.task.Task +import javax.inject.Inject + +internal interface GetFederationVersionTask : Task + +internal class DefaultGetFederationVersionTask @Inject constructor( + private val federationAPI: FederationAPI +) : GetFederationVersionTask { + + override suspend fun execute(params: Unit): FederationVersion { + val result = executeRequest(null) { + apiCall = federationAPI.getVersion() + } + + return FederationVersion( + name = result.name, + version = result.version + ) + } +} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/NetworkConstants.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/NetworkConstants.kt index a14c86efb6..99c12255cd 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/NetworkConstants.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/NetworkConstants.kt @@ -36,4 +36,7 @@ internal object NetworkConstants { // Integration const val URI_INTEGRATION_MANAGER_PATH = "_matrix/integrations/v1/" + + // Federation + const val URI_FEDERATION_PATH = "_matrix/federation/v1/" } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultSession.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultSession.kt index 890f3a6ac3..06bb4bd929 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultSession.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultSession.kt @@ -22,6 +22,7 @@ import io.realm.RealmConfiguration import okhttp3.OkHttpClient import org.matrix.android.sdk.api.auth.data.SessionParams import org.matrix.android.sdk.api.failure.GlobalError +import org.matrix.android.sdk.api.federation.FederationService import org.matrix.android.sdk.api.pushrules.PushRuleService import org.matrix.android.sdk.api.session.InitialSyncProgressService import org.matrix.android.sdk.api.session.Session @@ -88,6 +89,7 @@ internal class DefaultSession @Inject constructor( private val groupService: Lazy, private val userService: Lazy, private val filterService: Lazy, + private val federationService: Lazy, private val cacheService: Lazy, private val signOutService: Lazy, private val pushRuleService: Lazy, @@ -260,6 +262,8 @@ internal class DefaultSession @Inject constructor( override fun searchService(): SearchService = searchService.get() + override fun federationService(): FederationService = federationService.get() + override fun thirdPartyService(): ThirdPartyService = thirdPartyService.get() override fun getOkHttpClient(): OkHttpClient { diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionComponent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionComponent.kt index 9279c5c97a..7e1e3d0f70 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionComponent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionComponent.kt @@ -27,6 +27,7 @@ import org.matrix.android.sdk.internal.crypto.SendGossipWorker import org.matrix.android.sdk.internal.crypto.crosssigning.UpdateTrustWorker import org.matrix.android.sdk.internal.crypto.verification.SendVerificationMessageWorker import org.matrix.android.sdk.internal.di.MatrixComponent +import org.matrix.android.sdk.internal.federation.FederationModule import org.matrix.android.sdk.internal.network.NetworkConnectivityChecker import org.matrix.android.sdk.internal.session.account.AccountModule import org.matrix.android.sdk.internal.session.cache.CacheModule @@ -87,6 +88,7 @@ import org.matrix.android.sdk.internal.util.MatrixCoroutineDispatchers AccountDataModule::class, ProfileModule::class, AccountModule::class, + FederationModule::class, CallModule::class, SearchModule::class, ThirdPartyModule::class From 531beb0a86d6f923b83ce7e0e8098a80d26c0534 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 16 Feb 2021 17:01:35 +0100 Subject: [PATCH 016/578] Add a screen to view details about the homeserver --- .../federation/FederationGetVersionResult.kt | 6 ++ .../federation/GetFederationVersionTask.kt | 4 +- .../im/vector/app/core/di/FragmentModule.kt | 6 ++ .../discovery/SettingsCenteredImageItem.kt | 41 ++++++++ .../homeserver/HomeServerSettingsViewState.kt | 27 +++++ .../homeserver/HomeserverSettingsAction.kt | 23 +++++ .../HomeserverSettingsController.kt | 98 +++++++++++++++++++ .../homeserver/HomeserverSettingsFragment.kt | 73 ++++++++++++++ .../homeserver/HomeserverSettingsViewModel.kt | 92 +++++++++++++++++ vector/src/main/res/drawable/ic_layers.xml | 27 +++++ .../layout/item_settings_centered_image.xml | 11 +++ vector/src/main/res/values/strings.xml | 3 + .../main/res/xml/vector_settings_general.xml | 1 + 13 files changed, 410 insertions(+), 2 deletions(-) create mode 100644 vector/src/main/java/im/vector/app/features/discovery/SettingsCenteredImageItem.kt create mode 100644 vector/src/main/java/im/vector/app/features/settings/homeserver/HomeServerSettingsViewState.kt create mode 100644 vector/src/main/java/im/vector/app/features/settings/homeserver/HomeserverSettingsAction.kt create mode 100644 vector/src/main/java/im/vector/app/features/settings/homeserver/HomeserverSettingsController.kt create mode 100644 vector/src/main/java/im/vector/app/features/settings/homeserver/HomeserverSettingsFragment.kt create mode 100644 vector/src/main/java/im/vector/app/features/settings/homeserver/HomeserverSettingsViewModel.kt create mode 100644 vector/src/main/res/drawable/ic_layers.xml create mode 100644 vector/src/main/res/layout/item_settings_centered_image.xml diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/federation/FederationGetVersionResult.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/federation/FederationGetVersionResult.kt index 4e436c0da2..3d84008be6 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/federation/FederationGetVersionResult.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/federation/FederationGetVersionResult.kt @@ -24,6 +24,12 @@ import com.squareup.moshi.JsonClass */ @JsonClass(generateAdapter = true) internal data class FederationGetVersionResult( + @Json(name = "server") + val server: FederationGetVersionServer? +) + +@JsonClass(generateAdapter = true) +internal data class FederationGetVersionServer( /** * Arbitrary name that identify this implementation. */ diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/federation/GetFederationVersionTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/federation/GetFederationVersionTask.kt index 6000ff6d31..ce35e48f6b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/federation/GetFederationVersionTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/federation/GetFederationVersionTask.kt @@ -33,8 +33,8 @@ internal class DefaultGetFederationVersionTask @Inject constructor( } return FederationVersion( - name = result.name, - version = result.version + name = result.server?.name, + version = result.server?.version ) } } diff --git a/vector/src/main/java/im/vector/app/core/di/FragmentModule.kt b/vector/src/main/java/im/vector/app/core/di/FragmentModule.kt index eff484fb9a..430aee5468 100644 --- a/vector/src/main/java/im/vector/app/core/di/FragmentModule.kt +++ b/vector/src/main/java/im/vector/app/core/di/FragmentModule.kt @@ -109,6 +109,7 @@ import im.vector.app.features.settings.devtools.GossipingEventsPaperTrailFragmen import im.vector.app.features.settings.devtools.IncomingKeyRequestListFragment import im.vector.app.features.settings.devtools.KeyRequestsFragment import im.vector.app.features.settings.devtools.OutgoingKeyRequestListFragment +import im.vector.app.features.settings.homeserver.HomeserverSettingsFragment import im.vector.app.features.settings.ignored.VectorSettingsIgnoredUsersFragment import im.vector.app.features.settings.locale.LocalePickerFragment import im.vector.app.features.settings.push.PushGatewaysFragment @@ -284,6 +285,11 @@ interface FragmentModule { @FragmentKey(VectorSettingsLabsFragment::class) fun bindVectorSettingsLabsFragment(fragment: VectorSettingsLabsFragment): Fragment + @Binds + @IntoMap + @FragmentKey(HomeserverSettingsFragment::class) + fun bindHomeserverSettingsFragment(fragment: HomeserverSettingsFragment): Fragment + @Binds @IntoMap @FragmentKey(VectorSettingsPinFragment::class) diff --git a/vector/src/main/java/im/vector/app/features/discovery/SettingsCenteredImageItem.kt b/vector/src/main/java/im/vector/app/features/discovery/SettingsCenteredImageItem.kt new file mode 100644 index 0000000000..af79dd8bb5 --- /dev/null +++ b/vector/src/main/java/im/vector/app/features/discovery/SettingsCenteredImageItem.kt @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2021 New Vector Ltd + * + * 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. + */ +package im.vector.app.features.discovery + +import android.widget.ImageView +import androidx.annotation.DrawableRes +import com.airbnb.epoxy.EpoxyAttribute +import com.airbnb.epoxy.EpoxyModelClass +import com.airbnb.epoxy.EpoxyModelWithHolder +import im.vector.app.R +import im.vector.app.core.epoxy.VectorEpoxyHolder + +@EpoxyModelClass(layout = R.layout.item_settings_centered_image) +abstract class SettingsCenteredImageItem : EpoxyModelWithHolder() { + + @EpoxyAttribute + @DrawableRes + var drawableRes: Int = 0 + + override fun bind(holder: Holder) { + super.bind(holder) + holder.image.setImageResource(drawableRes) + } + + class Holder : VectorEpoxyHolder() { + val image by bind(R.id.itemSettingsImage) + } +} diff --git a/vector/src/main/java/im/vector/app/features/settings/homeserver/HomeServerSettingsViewState.kt b/vector/src/main/java/im/vector/app/features/settings/homeserver/HomeServerSettingsViewState.kt new file mode 100644 index 0000000000..7c1a78d0cf --- /dev/null +++ b/vector/src/main/java/im/vector/app/features/settings/homeserver/HomeServerSettingsViewState.kt @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2021 New Vector Ltd + * + * 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. + */ + +package im.vector.app.features.settings.homeserver + +import com.airbnb.mvrx.Async +import com.airbnb.mvrx.MvRxState +import com.airbnb.mvrx.Uninitialized +import org.matrix.android.sdk.api.federation.FederationVersion + +data class HomeServerSettingsViewState( + val baseUrl: String = "", + val federationVersion: Async = Uninitialized +) : MvRxState diff --git a/vector/src/main/java/im/vector/app/features/settings/homeserver/HomeserverSettingsAction.kt b/vector/src/main/java/im/vector/app/features/settings/homeserver/HomeserverSettingsAction.kt new file mode 100644 index 0000000000..6ab097f4bf --- /dev/null +++ b/vector/src/main/java/im/vector/app/features/settings/homeserver/HomeserverSettingsAction.kt @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2021 New Vector Ltd + * + * 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. + */ + +package im.vector.app.features.settings.homeserver + +import im.vector.app.core.platform.VectorViewModelAction + +sealed class HomeserverSettingsAction : VectorViewModelAction { + object Refresh : HomeserverSettingsAction() +} diff --git a/vector/src/main/java/im/vector/app/features/settings/homeserver/HomeserverSettingsController.kt b/vector/src/main/java/im/vector/app/features/settings/homeserver/HomeserverSettingsController.kt new file mode 100644 index 0000000000..4f648309f0 --- /dev/null +++ b/vector/src/main/java/im/vector/app/features/settings/homeserver/HomeserverSettingsController.kt @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2021 New Vector Ltd + * + * 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. + */ + +package im.vector.app.features.settings.homeserver + +import com.airbnb.epoxy.TypedEpoxyController +import com.airbnb.mvrx.Fail +import com.airbnb.mvrx.Loading +import com.airbnb.mvrx.Success +import com.airbnb.mvrx.Uninitialized +import im.vector.app.R +import im.vector.app.core.epoxy.errorWithRetryItem +import im.vector.app.core.epoxy.loadingItem +import im.vector.app.core.error.ErrorFormatter +import im.vector.app.features.discovery.settingsCenteredImageItem +import im.vector.app.features.discovery.settingsInfoItem +import im.vector.app.features.discovery.settingsSectionTitleItem +import org.matrix.android.sdk.api.federation.FederationVersion +import javax.inject.Inject + +class HomeserverSettingsController @Inject constructor( + private val errorFormatter: ErrorFormatter +) : TypedEpoxyController() { + + var callback: Callback? = null + + interface Callback { + fun retry() + } + + override fun buildModels(data: HomeServerSettingsViewState?) { + data ?: return + + buildHeader(data) + when (val federationVersion = data.federationVersion) { + is Loading, + is Uninitialized -> + loadingItem { + id("loading") + } + is Fail -> + errorWithRetryItem { + id("error") + text(errorFormatter.toHumanReadable(federationVersion.error)) + listener { callback?.retry() } + } + is Success -> + buildFederationVersion(federationVersion()) + } + } + + private fun buildHeader(state: HomeServerSettingsViewState) { + settingsCenteredImageItem { + id("icon") + drawableRes(R.drawable.ic_layers) + } + settingsSectionTitleItem { + id("urlTitle") + titleResId(R.string.hs_url) + } + settingsInfoItem { + id("urlValue") + helperText(state.baseUrl) + } + } + + private fun buildFederationVersion(federationVersion: FederationVersion) { + settingsSectionTitleItem { + id("nameTitle") + titleResId(R.string.settings_server_name) + } + settingsInfoItem { + id("nameValue") + helperText(federationVersion.name) + } + settingsSectionTitleItem { + id("versionTitle") + titleResId(R.string.settings_server_version) + } + settingsInfoItem { + id("versionValue") + helperText(federationVersion.version) + } + } +} diff --git a/vector/src/main/java/im/vector/app/features/settings/homeserver/HomeserverSettingsFragment.kt b/vector/src/main/java/im/vector/app/features/settings/homeserver/HomeserverSettingsFragment.kt new file mode 100644 index 0000000000..20541a1ebb --- /dev/null +++ b/vector/src/main/java/im/vector/app/features/settings/homeserver/HomeserverSettingsFragment.kt @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2021 New Vector Ltd + * + * 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. + */ + +package im.vector.app.features.settings.homeserver + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.appcompat.app.AppCompatActivity +import com.airbnb.mvrx.fragmentViewModel +import com.airbnb.mvrx.withState +import im.vector.app.R +import im.vector.app.core.extensions.cleanup +import im.vector.app.core.extensions.configureWith +import im.vector.app.core.platform.VectorBaseFragment +import im.vector.app.databinding.FragmentGenericRecyclerBinding +import javax.inject.Inject + +/** + * Display some information about the homeserver + */ +class HomeserverSettingsFragment @Inject constructor( + val homeserverSettingsViewModelFactory: HomeserverSettingsViewModel.Factory, + private val homeserverSettingsController: HomeserverSettingsController +) : VectorBaseFragment(), + HomeserverSettingsController.Callback { + + override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentGenericRecyclerBinding { + return FragmentGenericRecyclerBinding.inflate(inflater, container, false) + } + + private val viewModel: HomeserverSettingsViewModel by fragmentViewModel() + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + homeserverSettingsController.callback = this + views.genericRecyclerView.configureWith(homeserverSettingsController) + } + + override fun onDestroyView() { + homeserverSettingsController.callback = null + views.genericRecyclerView.cleanup() + super.onDestroyView() + } + + override fun onResume() { + super.onResume() + (activity as? AppCompatActivity)?.supportActionBar?.setTitle(R.string.settings_home_server) + } + + override fun retry() { + viewModel.handle(HomeserverSettingsAction.Refresh) + } + + override fun invalidate() = withState(viewModel) { state -> + homeserverSettingsController.setData(state) + } +} diff --git a/vector/src/main/java/im/vector/app/features/settings/homeserver/HomeserverSettingsViewModel.kt b/vector/src/main/java/im/vector/app/features/settings/homeserver/HomeserverSettingsViewModel.kt new file mode 100644 index 0000000000..19578aea81 --- /dev/null +++ b/vector/src/main/java/im/vector/app/features/settings/homeserver/HomeserverSettingsViewModel.kt @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2021 New Vector Ltd + * + * 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. + */ + +package im.vector.app.features.settings.homeserver + +import androidx.lifecycle.viewModelScope +import com.airbnb.mvrx.Fail +import com.airbnb.mvrx.FragmentViewModelContext +import com.airbnb.mvrx.Loading +import com.airbnb.mvrx.MvRxViewModelFactory +import com.airbnb.mvrx.Success +import com.airbnb.mvrx.ViewModelContext +import dagger.assisted.Assisted +import dagger.assisted.AssistedFactory +import dagger.assisted.AssistedInject +import im.vector.app.core.platform.EmptyViewEvents +import im.vector.app.core.platform.VectorViewModel +import kotlinx.coroutines.launch +import org.matrix.android.sdk.api.session.Session + +class HomeserverSettingsViewModel @AssistedInject constructor( + @Assisted initialState: HomeServerSettingsViewState, + private val session: Session +) : VectorViewModel(initialState) { + + @AssistedFactory + interface Factory { + fun create(initialState: HomeServerSettingsViewState): HomeserverSettingsViewModel + } + + companion object : MvRxViewModelFactory { + + @JvmStatic + override fun create(viewModelContext: ViewModelContext, state: HomeServerSettingsViewState): HomeserverSettingsViewModel? { + val fragment: HomeserverSettingsFragment = (viewModelContext as FragmentViewModelContext).fragment() + return fragment.homeserverSettingsViewModelFactory.create(state) + } + } + + init { + setState { + copy( + baseUrl = session.sessionParams.homeServerUrl + ) + } + fetchHomeserverVersion() + } + + private fun fetchHomeserverVersion() { + setState { + copy( + federationVersion = Loading() + ) + } + + viewModelScope.launch { + try { + val federationVersion = session.federationService().getFederationVersion() + setState { + copy( + federationVersion = Success(federationVersion) + ) + } + } catch (failure: Throwable) { + setState { + copy( + federationVersion = Fail(failure) + ) + } + } + } + } + + override fun handle(action: HomeserverSettingsAction) { + when (action) { + HomeserverSettingsAction.Refresh -> fetchHomeserverVersion() + } + } +} diff --git a/vector/src/main/res/drawable/ic_layers.xml b/vector/src/main/res/drawable/ic_layers.xml new file mode 100644 index 0000000000..658630add0 --- /dev/null +++ b/vector/src/main/res/drawable/ic_layers.xml @@ -0,0 +1,27 @@ + + + + + diff --git a/vector/src/main/res/layout/item_settings_centered_image.xml b/vector/src/main/res/layout/item_settings_centered_image.xml new file mode 100644 index 0000000000..ee249448e7 --- /dev/null +++ b/vector/src/main/res/layout/item_settings_centered_image.xml @@ -0,0 +1,11 @@ + + diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index 79f1514b2a..d71720f64a 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -2336,6 +2336,9 @@ Manage Sessions Sign out of this session + Server name + Server version + No cryptographic information available This session is trusted for secure messaging because you verified it: diff --git a/vector/src/main/res/xml/vector_settings_general.xml b/vector/src/main/res/xml/vector_settings_general.xml index c1fe82e4c2..73ce09eb22 100644 --- a/vector/src/main/res/xml/vector_settings_general.xml +++ b/vector/src/main/res/xml/vector_settings_general.xml @@ -81,6 +81,7 @@ Date: Tue, 16 Feb 2021 18:52:48 +0100 Subject: [PATCH 017/578] Add server version in rageshakes --- .../features/rageshake/BugReportActivity.kt | 10 ++- .../app/features/rageshake/BugReportState.kt | 24 ++++++ .../features/rageshake/BugReportViewModel.kt | 76 +++++++++++++++++++ .../app/features/rageshake/BugReporter.kt | 2 + 4 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 vector/src/main/java/im/vector/app/features/rageshake/BugReportState.kt create mode 100644 vector/src/main/java/im/vector/app/features/rageshake/BugReportViewModel.kt diff --git a/vector/src/main/java/im/vector/app/features/rageshake/BugReportActivity.kt b/vector/src/main/java/im/vector/app/features/rageshake/BugReportActivity.kt index 930e41e0d9..024d84f27b 100755 --- a/vector/src/main/java/im/vector/app/features/rageshake/BugReportActivity.kt +++ b/vector/src/main/java/im/vector/app/features/rageshake/BugReportActivity.kt @@ -21,12 +21,15 @@ import android.view.MenuItem import android.widget.Toast import androidx.core.view.isVisible import androidx.core.widget.doOnTextChanged +import com.airbnb.mvrx.viewModel +import com.airbnb.mvrx.withState import im.vector.app.R import im.vector.app.core.di.ScreenComponent import im.vector.app.core.platform.VectorBaseActivity import im.vector.app.databinding.ActivityBugReportBinding import timber.log.Timber +import javax.inject.Inject /** * Form to send a bug report @@ -39,6 +42,10 @@ class BugReportActivity : VectorBaseActivity() { override fun getBinding() = ActivityBugReportBinding.inflate(layoutInflater) + @Inject lateinit var bugReportViewModelFactory: BugReportViewModel.Factory + + private val viewModel: BugReportViewModel by viewModel() + private var forSuggestion: Boolean = false override fun initUiAndData() { @@ -114,7 +121,7 @@ class BugReportActivity : VectorBaseActivity() { /** * Send the bug report */ - private fun sendBugReport() { + private fun sendBugReport() = withState(viewModel) { state -> views.bugReportScrollview.alpha = 0.3f views.bugReportMaskView.isVisible = true @@ -133,6 +140,7 @@ class BugReportActivity : VectorBaseActivity() { views.bugReportButtonIncludeKeyShareHistory.isChecked, views.bugReportButtonIncludeScreenshot.isChecked, views.bugReportEditText.text.toString(), + state.serverVersion, object : BugReporter.IMXBugReportListener { override fun onUploadFailed(reason: String?) { try { diff --git a/vector/src/main/java/im/vector/app/features/rageshake/BugReportState.kt b/vector/src/main/java/im/vector/app/features/rageshake/BugReportState.kt new file mode 100644 index 0000000000..1dc316a5e2 --- /dev/null +++ b/vector/src/main/java/im/vector/app/features/rageshake/BugReportState.kt @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2021 New Vector Ltd + * + * 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. + */ + +package im.vector.app.features.rageshake + +import com.airbnb.mvrx.MvRxState + +data class BugReportState( + val serverVersion: String = "" +) : MvRxState + diff --git a/vector/src/main/java/im/vector/app/features/rageshake/BugReportViewModel.kt b/vector/src/main/java/im/vector/app/features/rageshake/BugReportViewModel.kt new file mode 100644 index 0000000000..c71a89553e --- /dev/null +++ b/vector/src/main/java/im/vector/app/features/rageshake/BugReportViewModel.kt @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2021 New Vector Ltd + * + * 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. + */ + +package im.vector.app.features.rageshake + +import androidx.lifecycle.viewModelScope +import com.airbnb.mvrx.ActivityViewModelContext +import com.airbnb.mvrx.MvRxViewModelFactory +import com.airbnb.mvrx.ViewModelContext +import dagger.assisted.Assisted +import dagger.assisted.AssistedFactory +import dagger.assisted.AssistedInject +import im.vector.app.core.di.ActiveSessionHolder +import im.vector.app.core.platform.EmptyAction +import im.vector.app.core.platform.EmptyViewEvents +import im.vector.app.core.platform.VectorViewModel +import kotlinx.coroutines.launch +import org.matrix.android.sdk.api.extensions.tryOrNull + +class BugReportViewModel @AssistedInject constructor( + @Assisted initialState: BugReportState, + val activeSessionHolder: ActiveSessionHolder +) : VectorViewModel(initialState) { + + @AssistedFactory + interface Factory { + fun create(initialState: BugReportState): BugReportViewModel + } + + companion object : MvRxViewModelFactory { + + @JvmStatic + override fun create(viewModelContext: ViewModelContext, state: BugReportState): BugReportViewModel? { + val activity: BugReportActivity = (viewModelContext as ActivityViewModelContext).activity() + return activity.bugReportViewModelFactory.create(state) + } + } + + init { + fetchHomeserverVersion() + } + + private fun fetchHomeserverVersion() { + viewModelScope.launch { + val version = tryOrNull { + activeSessionHolder.getSafeActiveSession() + ?.federationService() + ?.getFederationVersion() + ?.let { "${it.name} - ${it.version}" } + } ?: "undefined" + + setState { + copy( + serverVersion = version + ) + } + } + } + + override fun handle(action: EmptyAction) { + // No op + } +} diff --git a/vector/src/main/java/im/vector/app/features/rageshake/BugReporter.kt b/vector/src/main/java/im/vector/app/features/rageshake/BugReporter.kt index a43aca488d..15fd18039b 100755 --- a/vector/src/main/java/im/vector/app/features/rageshake/BugReporter.kt +++ b/vector/src/main/java/im/vector/app/features/rageshake/BugReporter.kt @@ -165,6 +165,7 @@ class BugReporter @Inject constructor( withKeyRequestHistory: Boolean, withScreenshot: Boolean, theBugDescription: String, + serverVersion: String, listener: IMXBugReportListener?) { // enumerate files to delete val mBugReportFiles: MutableList = ArrayList() @@ -273,6 +274,7 @@ class BugReporter @Inject constructor( .addFormDataPart("app_language", VectorLocale.applicationLocale.toString()) .addFormDataPart("default_app_language", systemLocaleProvider.getSystemLocale().toString()) .addFormDataPart("theme", ThemeUtils.getApplicationTheme(context)) + .addFormDataPart("server_version", serverVersion) val buildNumber = context.getString(R.string.build_number) if (buildNumber.isNotEmpty() && buildNumber != "0") { From e1f778e21add98853a6ee7c19695a7ed9ca0035a Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 16 Feb 2021 18:56:49 +0100 Subject: [PATCH 018/578] Changelog --- CHANGES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index b67e33f9ad..cfff2756ef 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -5,7 +5,7 @@ Features ✨: - Improvements 🙌: - - + - Fetch homeserver type and version and display in a new wetting screen and add info in rageshakes (#2831) Bugfix 🐛: - From 80524fb8c1fee3fa5326326e0e42f1a11d455054 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 16 Feb 2021 19:34:26 +0100 Subject: [PATCH 019/578] Cleanup --- CHANGES.md | 2 +- .../java/im/vector/app/features/rageshake/BugReportState.kt | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index cfff2756ef..422d94ff06 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -5,7 +5,7 @@ Features ✨: - Improvements 🙌: - - Fetch homeserver type and version and display in a new wetting screen and add info in rageshakes (#2831) + - Fetch homeserver type and version and display in a new setting screen and add info in rageshakes (#2831) Bugfix 🐛: - diff --git a/vector/src/main/java/im/vector/app/features/rageshake/BugReportState.kt b/vector/src/main/java/im/vector/app/features/rageshake/BugReportState.kt index 1dc316a5e2..a5019115fb 100644 --- a/vector/src/main/java/im/vector/app/features/rageshake/BugReportState.kt +++ b/vector/src/main/java/im/vector/app/features/rageshake/BugReportState.kt @@ -21,4 +21,3 @@ import com.airbnb.mvrx.MvRxState data class BugReportState( val serverVersion: String = "" ) : MvRxState - From f9f54cabdd396e6daab19c7c08e0aa920913ec8e Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Feb 2021 23:40:03 +0100 Subject: [PATCH 020/578] Add upload capability on the screen and give possibility to refresh the data --- .../HomeServerCapabilitiesService.kt | 5 ++++ .../DefaultHomeServerCapabilitiesService.kt | 11 ++++++-- .../GetHomeServerCapabilitiesTask.kt | 20 +++++++++----- .../sdk/internal/session/sync/SyncTask.kt | 2 +- .../homeserver/HomeServerSettingsViewState.kt | 2 ++ .../HomeserverSettingsController.kt | 26 +++++++++++++++++-- .../homeserver/HomeserverSettingsViewModel.kt | 18 ++++++++++++- vector/src/main/res/values/strings.xml | 3 +++ 8 files changed, 74 insertions(+), 13 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/homeserver/HomeServerCapabilitiesService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/homeserver/HomeServerCapabilitiesService.kt index 2c9121ce4a..f12cbcd6db 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/homeserver/HomeServerCapabilitiesService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/homeserver/HomeServerCapabilitiesService.kt @@ -21,6 +21,11 @@ package org.matrix.android.sdk.api.session.homeserver */ interface HomeServerCapabilitiesService { + /** + * Force a refresh of the stored data + */ + suspend fun refreshHomeServerCapabilities() + /** * Get the HomeServer capabilities */ diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/DefaultHomeServerCapabilitiesService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/DefaultHomeServerCapabilitiesService.kt index 27396aac80..0ed690d972 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/DefaultHomeServerCapabilitiesService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/DefaultHomeServerCapabilitiesService.kt @@ -17,16 +17,23 @@ package org.matrix.android.sdk.internal.session.homeserver import com.zhuinden.monarchy.Monarchy +import io.realm.Realm import org.matrix.android.sdk.api.session.homeserver.HomeServerCapabilities import org.matrix.android.sdk.api.session.homeserver.HomeServerCapabilitiesService import org.matrix.android.sdk.internal.database.mapper.HomeServerCapabilitiesMapper import org.matrix.android.sdk.internal.database.model.HomeServerCapabilitiesEntity import org.matrix.android.sdk.internal.database.query.get import org.matrix.android.sdk.internal.di.SessionDatabase -import io.realm.Realm import javax.inject.Inject -internal class DefaultHomeServerCapabilitiesService @Inject constructor(@SessionDatabase private val monarchy: Monarchy) : HomeServerCapabilitiesService { +internal class DefaultHomeServerCapabilitiesService @Inject constructor( + @SessionDatabase private val monarchy: Monarchy, + private val getHomeServerCapabilitiesTask: GetHomeServerCapabilitiesTask +) : HomeServerCapabilitiesService { + + override suspend fun refreshHomeServerCapabilities() { + getHomeServerCapabilitiesTask.execute(GetHomeServerCapabilitiesTask.Params(forceRefresh = true)) + } override fun getHomeServerCapabilities(): HomeServerCapabilities { return Realm.getInstance(monarchy.realmConfiguration).use { realm -> diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/GetHomeServerCapabilitiesTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/GetHomeServerCapabilitiesTask.kt index 845cfb392e..84c9132d61 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/GetHomeServerCapabilitiesTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/GetHomeServerCapabilitiesTask.kt @@ -38,7 +38,11 @@ import timber.log.Timber import java.util.Date import javax.inject.Inject -internal interface GetHomeServerCapabilitiesTask : Task +internal interface GetHomeServerCapabilitiesTask : Task { + data class Params( + val forceRefresh: Boolean + ) +} internal class DefaultGetHomeServerCapabilitiesTask @Inject constructor( private val capabilitiesAPI: CapabilitiesAPI, @@ -52,12 +56,14 @@ internal class DefaultGetHomeServerCapabilitiesTask @Inject constructor( private val userId: String ) : GetHomeServerCapabilitiesTask { - override suspend fun execute(params: Unit) { - var doRequest = false - monarchy.awaitTransaction { realm -> - val homeServerCapabilitiesEntity = HomeServerCapabilitiesEntity.getOrCreate(realm) + override suspend fun execute(params: GetHomeServerCapabilitiesTask.Params) { + var doRequest = params.forceRefresh + if (!doRequest) { + monarchy.awaitTransaction { realm -> + val homeServerCapabilitiesEntity = HomeServerCapabilitiesEntity.getOrCreate(realm) - doRequest = homeServerCapabilitiesEntity.lastUpdatedTimestamp + MIN_DELAY_BETWEEN_TWO_REQUEST_MILLIS < Date().time + doRequest = homeServerCapabilitiesEntity.lastUpdatedTimestamp + MIN_DELAY_BETWEEN_TWO_REQUEST_MILLIS < Date().time + } } if (!doRequest) { @@ -123,7 +129,7 @@ internal class DefaultGetHomeServerCapabilitiesTask @Inject constructor( } companion object { - // 8 hours like on Riot Web + // 8 hours like on Element Web private const val MIN_DELAY_BETWEEN_TWO_REQUEST_MILLIS = 8 * 60 * 60 * 1000 } } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTask.kt index 7c38230065..bfe3799771 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTask.kt @@ -77,7 +77,7 @@ internal class DefaultSyncTask @Inject constructor( initialSyncProgressService.startTask(R.string.initial_sync_start_importing_account, 100) } // Maybe refresh the home server capabilities data we know - getHomeServerCapabilitiesTask.execute(Unit) + getHomeServerCapabilitiesTask.execute(GetHomeServerCapabilitiesTask.Params(forceRefresh = false)) val readTimeOut = (params.timeout + TIMEOUT_MARGIN).coerceAtLeast(TimeOutInterceptor.DEFAULT_LONG_TIMEOUT) diff --git a/vector/src/main/java/im/vector/app/features/settings/homeserver/HomeServerSettingsViewState.kt b/vector/src/main/java/im/vector/app/features/settings/homeserver/HomeServerSettingsViewState.kt index 7c1a78d0cf..abd823fa99 100644 --- a/vector/src/main/java/im/vector/app/features/settings/homeserver/HomeServerSettingsViewState.kt +++ b/vector/src/main/java/im/vector/app/features/settings/homeserver/HomeServerSettingsViewState.kt @@ -20,8 +20,10 @@ import com.airbnb.mvrx.Async import com.airbnb.mvrx.MvRxState import com.airbnb.mvrx.Uninitialized import org.matrix.android.sdk.api.federation.FederationVersion +import org.matrix.android.sdk.api.session.homeserver.HomeServerCapabilities data class HomeServerSettingsViewState( val baseUrl: String = "", + val homeServerCapabilities: HomeServerCapabilities = HomeServerCapabilities(), val federationVersion: Async = Uninitialized ) : MvRxState diff --git a/vector/src/main/java/im/vector/app/features/settings/homeserver/HomeserverSettingsController.kt b/vector/src/main/java/im/vector/app/features/settings/homeserver/HomeserverSettingsController.kt index 4f648309f0..e90f711edc 100644 --- a/vector/src/main/java/im/vector/app/features/settings/homeserver/HomeserverSettingsController.kt +++ b/vector/src/main/java/im/vector/app/features/settings/homeserver/HomeserverSettingsController.kt @@ -25,13 +25,16 @@ import im.vector.app.R import im.vector.app.core.epoxy.errorWithRetryItem import im.vector.app.core.epoxy.loadingItem import im.vector.app.core.error.ErrorFormatter +import im.vector.app.core.resources.StringProvider import im.vector.app.features.discovery.settingsCenteredImageItem import im.vector.app.features.discovery.settingsInfoItem import im.vector.app.features.discovery.settingsSectionTitleItem import org.matrix.android.sdk.api.federation.FederationVersion +import org.matrix.android.sdk.api.session.homeserver.HomeServerCapabilities import javax.inject.Inject class HomeserverSettingsController @Inject constructor( + private val stringProvider: StringProvider, private val errorFormatter: ErrorFormatter ) : TypedEpoxyController() { @@ -51,15 +54,16 @@ class HomeserverSettingsController @Inject constructor( loadingItem { id("loading") } - is Fail -> + is Fail -> errorWithRetryItem { id("error") text(errorFormatter.toHumanReadable(federationVersion.error)) listener { callback?.retry() } } - is Success -> + is Success -> buildFederationVersion(federationVersion()) } + buildCapabilities(data) } private fun buildHeader(state: HomeServerSettingsViewState) { @@ -95,4 +99,22 @@ class HomeserverSettingsController @Inject constructor( helperText(federationVersion.version) } } + + private fun buildCapabilities(data: HomeServerSettingsViewState) { + settingsSectionTitleItem { + id("uploadTitle") + titleResId(R.string.settings_server_upload_size_title) + } + + val limit = data.homeServerCapabilities.maxUploadFileSize + + settingsInfoItem { + id("uploadValue") + if (limit == HomeServerCapabilities.MAX_UPLOAD_FILE_SIZE_UNKNOWN) { + helperTextResId(R.string.settings_server_upload_size_unknown) + } else { + helperText(stringProvider.getString(R.string.settings_server_upload_size_content, "${limit / 1048576L} MB")) + } + } + } } diff --git a/vector/src/main/java/im/vector/app/features/settings/homeserver/HomeserverSettingsViewModel.kt b/vector/src/main/java/im/vector/app/features/settings/homeserver/HomeserverSettingsViewModel.kt index 19578aea81..17f03a3456 100644 --- a/vector/src/main/java/im/vector/app/features/settings/homeserver/HomeserverSettingsViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/settings/homeserver/HomeserverSettingsViewModel.kt @@ -53,10 +53,26 @@ class HomeserverSettingsViewModel @AssistedInject constructor( init { setState { copy( - baseUrl = session.sessionParams.homeServerUrl + baseUrl = session.sessionParams.homeServerUrl, + homeServerCapabilities = session.getHomeServerCapabilities() ) } fetchHomeserverVersion() + refreshHomeServerCapabilities() + } + + private fun refreshHomeServerCapabilities() { + viewModelScope.launch { + runCatching { + session.refreshHomeServerCapabilities() + } + + setState { + copy( + homeServerCapabilities = session.getHomeServerCapabilities() + ) + } + } } private fun fetchHomeserverVersion() { diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index d71720f64a..a1e7b01cda 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -2338,6 +2338,9 @@ Server name Server version + Server file upload limit + Your homeserver accepts attachments (files, media, etc.) with a size up to %s. + The limit is unknown. No cryptographic information available From 0f328fda440f179f8906764f3ac44bb61e76eb3c Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 19 Feb 2021 11:59:33 +0100 Subject: [PATCH 021/578] Add the new screen to the sanity test --- .../java/im/vector/app/ui/UiAllScreensSanityTest.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/vector/src/androidTest/java/im/vector/app/ui/UiAllScreensSanityTest.kt b/vector/src/androidTest/java/im/vector/app/ui/UiAllScreensSanityTest.kt index 338d57fea8..a0b8e08885 100644 --- a/vector/src/androidTest/java/im/vector/app/ui/UiAllScreensSanityTest.kt +++ b/vector/src/androidTest/java/im/vector/app/ui/UiAllScreensSanityTest.kt @@ -483,6 +483,9 @@ class UiAllScreensSanityTest { clickOn(R.string.add_identity_server) pressBack() pressBack() + // Home server + clickOnPreference(R.string.settings_home_server) + pressBack() // Identity server clickOnPreference(R.string.settings_identity_server) pressBack() From 490a8551aca76bf0013f377e630138f686fa0e93 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 19 Feb 2021 12:18:14 +0100 Subject: [PATCH 022/578] Items have been reordered --- .../java/im/vector/app/ui/UiAllScreensSanityTest.kt | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/vector/src/androidTest/java/im/vector/app/ui/UiAllScreensSanityTest.kt b/vector/src/androidTest/java/im/vector/app/ui/UiAllScreensSanityTest.kt index a0b8e08885..0b93e58ee2 100644 --- a/vector/src/androidTest/java/im/vector/app/ui/UiAllScreensSanityTest.kt +++ b/vector/src/androidTest/java/im/vector/app/ui/UiAllScreensSanityTest.kt @@ -277,13 +277,18 @@ class UiAllScreensSanityTest { assertDisplayed(R.id.roomProfileAvatarView) - // Room addresses + // Leave clickListItem(R.id.matrixProfileRecyclerView, 13) + clickDialogNegativeButton() + + // Advanced + // Room addresses + clickListItem(R.id.matrixProfileRecyclerView, 15) onView(isRoot()).perform(waitForView(withText(R.string.room_alias_published_alias_title))) pressBack() // Room permissions - clickListItem(R.id.matrixProfileRecyclerView, 15) + clickListItem(R.id.matrixProfileRecyclerView, 17) onView(isRoot()).perform(waitForView(withText(R.string.room_permissions_title))) clickOn(R.string.room_permissions_change_room_avatar) clickDialogNegativeButton() @@ -292,10 +297,6 @@ class UiAllScreensSanityTest { clickOn(R.string.hide_advanced) pressBack() - // Leave - clickListItem(R.id.matrixProfileRecyclerView, 17) - clickDialogNegativeButton() - // Menu share // clickMenu(R.id.roomProfileShareAction) // pressBack() From 8580f46ec19fcab4807b7d58d35b2090e265c145 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 19 Feb 2021 12:45:52 +0100 Subject: [PATCH 023/578] Fix other issue in test --- .../java/im/vector/app/ui/UiAllScreensSanityTest.kt | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/vector/src/androidTest/java/im/vector/app/ui/UiAllScreensSanityTest.kt b/vector/src/androidTest/java/im/vector/app/ui/UiAllScreensSanityTest.kt index 0b93e58ee2..6f8056de13 100644 --- a/vector/src/androidTest/java/im/vector/app/ui/UiAllScreensSanityTest.kt +++ b/vector/src/androidTest/java/im/vector/app/ui/UiAllScreensSanityTest.kt @@ -23,7 +23,6 @@ import androidx.test.espresso.Espresso.pressBack import androidx.test.espresso.action.ViewActions.closeSoftKeyboard import androidx.test.espresso.action.ViewActions.longClick import androidx.test.espresso.contrib.RecyclerViewActions.actionOnItem -import androidx.test.espresso.matcher.ViewMatchers import androidx.test.espresso.matcher.ViewMatchers.hasDescendant import androidx.test.espresso.matcher.ViewMatchers.isRoot import androidx.test.espresso.matcher.ViewMatchers.withId @@ -145,7 +144,7 @@ class UiAllScreensSanityTest { } private fun ignoreVerification() { - Thread.sleep(6000) + sleep(6000) val activity = EspressoHelper.getCurrentActivity()!! val popup = activity.findViewById(com.tapadoo.alerter.R.id.llAlertBackground) @@ -155,7 +154,7 @@ class UiAllScreensSanityTest { assertDisplayed(R.id.bottomSheetFragmentContainer) - onView(ViewMatchers.isRoot()).perform(SleepViewAction.sleep(2000)) + onView(isRoot()).perform(SleepViewAction.sleep(2000)) clickOn(R.string.skip) assertDisplayed(R.string.are_you_sure) @@ -206,12 +205,12 @@ class UiAllScreensSanityTest { // Test quick reaction longClickOnMessage() // Add quick reaction - clickOn("👍") + clickOn("\uD83D\uDC4D️") // 👍 sleep(1000) // Open reactions - longClickOn("👍") + longClickOn("\uD83D\uDC4D️") // 👍 pressBack() // Test add reaction @@ -226,6 +225,8 @@ class UiAllScreensSanityTest { clickOn(R.string.edit) // TODO Cancel action writeTo(R.id.composerEditText, "Hello universe!") + // Wait a bit for the keyboard layout to update + sleep(30) clickOn(R.id.sendButton) // Open edit history longClickOnMessage("Hello universe! (edited)") From e511e7e02ed36195acacc5f80dd4a77fb0fce3f8 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 19 Feb 2021 21:26:01 +0100 Subject: [PATCH 024/578] Add menu entry for dev tools (to complete existing /devtools command) --- .../features/roomprofile/RoomProfileController.kt | 14 ++++++++++++-- .../features/roomprofile/RoomProfileFragment.kt | 4 ++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt index 5ab86f7138..820f6848d8 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt @@ -57,6 +57,7 @@ class RoomProfileController @Inject constructor( fun onRoomAliasesClicked() fun onRoomPermissionsClicked() fun onRoomIdClicked() + fun onRoomDevToolsClicked() fun onUrlInTopicLongClicked(url: String) } @@ -193,7 +194,7 @@ class RoomProfileController @Inject constructor( title = stringProvider.getString(R.string.room_settings_permissions_title), subtitle = stringProvider.getString(R.string.room_settings_permissions_subtitle), dividerColor = dividerColor, - divider = true, + divider = false, editable = true, action = { callback?.onRoomPermissionsClicked() } ) @@ -204,10 +205,19 @@ class RoomProfileController @Inject constructor( title = stringProvider.getString(R.string.room_settings_room_internal_id), subtitle = roomSummary.roomId, dividerColor = dividerColor, - divider = false, + divider = true, editable = false, action = { callback?.onRoomIdClicked() } ) + buildProfileAction( + id = "devTools", + title = stringProvider.getString(R.string.dev_tools_menu_name), + subtitle = roomSummary.roomId, + dividerColor = dividerColor, + divider = false, + editable = true, + action = { callback?.onRoomDevToolsClicked() } + ) } } diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt index 154483652b..16c703ea48 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt @@ -295,6 +295,10 @@ class RoomProfileFragment @Inject constructor( copyToClipboard(requireContext(), roomProfileArgs.roomId) } + override fun onRoomDevToolsClicked() { + navigator.openDevTools(requireContext(), roomProfileArgs.roomId) + } + override fun onUrlInTopicLongClicked(url: String) { copyToClipboard(requireContext(), url, true) } From 8793d263d45a712d0f3260cfe6faccc29133268d Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 19 Feb 2021 21:53:10 +0100 Subject: [PATCH 025/578] Add info about room version --- .../features/roomprofile/RoomProfileController.kt | 10 ++++++++++ .../features/roomprofile/RoomProfileViewModel.kt | 14 ++++++++++++++ .../features/roomprofile/RoomProfileViewState.kt | 2 ++ vector/src/main/res/values/strings.xml | 1 + 4 files changed, 27 insertions(+) diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt index 820f6848d8..bb7d041199 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt @@ -209,6 +209,16 @@ class RoomProfileController @Inject constructor( editable = false, action = { callback?.onRoomIdClicked() } ) + data.roomCreateContent()?.roomVersion?.let { + buildProfileAction( + id = "roomVersion", + title = stringProvider.getString(R.string.room_settings_room_version_title), + subtitle = it, + dividerColor = dividerColor, + divider = true, + editable = false + ) + } buildProfileAction( id = "devTools", title = stringProvider.getString(R.string.dev_tools_menu_name), diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileViewModel.kt b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileViewModel.kt index 02a648287f..c8bb6b5b5c 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileViewModel.kt @@ -33,13 +33,17 @@ import im.vector.app.features.powerlevel.PowerLevelsObservableFactory import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import org.matrix.android.sdk.api.MatrixCallback +import org.matrix.android.sdk.api.query.QueryStringValue import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.events.model.EventType +import org.matrix.android.sdk.api.session.events.model.toModel import org.matrix.android.sdk.api.session.room.members.roomMemberQueryParams import org.matrix.android.sdk.api.session.room.model.Membership +import org.matrix.android.sdk.api.session.room.model.create.RoomCreateContent import org.matrix.android.sdk.api.session.room.powerlevels.PowerLevelsHelper import org.matrix.android.sdk.api.session.room.state.isPublic import org.matrix.android.sdk.rx.RxRoom +import org.matrix.android.sdk.rx.mapOptional import org.matrix.android.sdk.rx.rx import org.matrix.android.sdk.rx.unwrap @@ -69,10 +73,20 @@ class RoomProfileViewModel @AssistedInject constructor( init { val rxRoom = room.rx() observeRoomSummary(rxRoom) + observeRoomCreateContent(rxRoom) observeBannedRoomMembers(rxRoom) observePermissions() } + private fun observeRoomCreateContent(rxRoom: RxRoom) { + rxRoom.liveStateEvent(EventType.STATE_ROOM_CREATE, QueryStringValue.NoCondition) + .mapOptional { it.content.toModel() } + .unwrap() + .execute { + copy(roomCreateContent = it) + } + } + private fun observeRoomSummary(rxRoom: RxRoom) { rxRoom.liveRoomSummary() .unwrap() diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileViewState.kt b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileViewState.kt index 398982ede1..bf7cd732ef 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileViewState.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileViewState.kt @@ -22,10 +22,12 @@ import com.airbnb.mvrx.MvRxState import com.airbnb.mvrx.Uninitialized import org.matrix.android.sdk.api.session.room.model.RoomMemberSummary import org.matrix.android.sdk.api.session.room.model.RoomSummary +import org.matrix.android.sdk.api.session.room.model.create.RoomCreateContent data class RoomProfileViewState( val roomId: String, val roomSummary: Async = Uninitialized, + val roomCreateContent: Async = Uninitialized, val bannedMembership: Async> = Uninitialized, val actionPermissions: ActionPermissions = ActionPermissions(), val isLoading: Boolean = false diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index a1e7b01cda..a3eade1f02 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -1117,6 +1117,7 @@ Advanced This room’s internal ID + Room version Addresses Labs These are experimental features that may break in unexpected ways. Use with caution. From 5a4915e81716240aabfd8063486e935a6c1a0424 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 Feb 2021 23:21:14 +0000 Subject: [PATCH 026/578] Bump flexbox from 1.1.1 to 2.0.1 Bumps [flexbox](https://github.com/google/flexbox-layout) from 1.1.1 to 2.0.1. - [Release notes](https://github.com/google/flexbox-layout/releases) - [Commits](https://github.com/google/flexbox-layout/compare/1.1.1...2.0.1) Signed-off-by: dependabot[bot] --- vector/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vector/build.gradle b/vector/build.gradle index fe7fd5094b..50689de1ae 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -375,7 +375,7 @@ dependencies { implementation "io.noties.markwon:html:$markwon_version" implementation 'com.googlecode.htmlcompressor:htmlcompressor:1.5.2' implementation 'me.saket:better-link-movement-method:2.2.0' - implementation 'com.google.android:flexbox:1.1.1' + implementation 'com.google.android:flexbox:2.0.1' implementation "androidx.autofill:autofill:$autofill_version" implementation 'jp.wasabeef:glide-transformations:4.3.0' implementation 'com.github.vector-im:PFLockScreen-Android:1.0.0-beta12' From 6f01e3b99b6f0228abdfa6db72493e4d3d2935b8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 Feb 2021 23:23:31 +0000 Subject: [PATCH 027/578] Bump mockk-android from 1.9.2.kotlin12 to 1.10.6 Bumps [mockk-android](https://github.com/mockk/mockk) from 1.9.2.kotlin12 to 1.10.6. - [Release notes](https://github.com/mockk/mockk/releases) - [Commits](https://github.com/mockk/mockk/compare/1.9.2.kotlin12...1.10.6) Signed-off-by: dependabot[bot] --- matrix-sdk-android/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/matrix-sdk-android/build.gradle b/matrix-sdk-android/build.gradle index 8ff16cb159..5eb9d3eb28 100644 --- a/matrix-sdk-android/build.gradle +++ b/matrix-sdk-android/build.gradle @@ -186,7 +186,7 @@ dependencies { androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' androidTestImplementation 'org.amshove.kluent:kluent-android:1.61' // Note: version sticks to 1.9.2 due to https://github.com/mockk/mockk/issues/281 - androidTestImplementation 'io.mockk:mockk-android:1.9.2.kotlin12' + androidTestImplementation 'io.mockk:mockk-android:1.10.6' androidTestImplementation "androidx.arch.core:core-testing:$arch_version" androidTestImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlin_coroutines_version" // Plant Timber tree for test From 5aa50a6c6068405a3a27508d416367e64034fa7a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 20 Feb 2021 10:07:19 +0000 Subject: [PATCH 028/578] Bump mockk from 1.9.2.kotlin12 to 1.10.6 Bumps [mockk](https://github.com/mockk/mockk) from 1.9.2.kotlin12 to 1.10.6. - [Release notes](https://github.com/mockk/mockk/releases) - [Commits](https://github.com/mockk/mockk/compare/1.9.2.kotlin12...1.10.6) Signed-off-by: dependabot[bot] --- matrix-sdk-android/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/matrix-sdk-android/build.gradle b/matrix-sdk-android/build.gradle index 20f526643c..9e5ad2b94f 100644 --- a/matrix-sdk-android/build.gradle +++ b/matrix-sdk-android/build.gradle @@ -172,7 +172,7 @@ dependencies { testImplementation 'org.robolectric:robolectric:4.3' //testImplementation 'org.robolectric:shadows-support-v4:3.0' // Note: version sticks to 1.9.2 due to https://github.com/mockk/mockk/issues/281 - testImplementation 'io.mockk:mockk:1.9.2.kotlin12' + testImplementation 'io.mockk:mockk:1.10.6' testImplementation 'org.amshove.kluent:kluent-android:1.65' testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlin_coroutines_version" // Plant Timber tree for test From c06958200702f81bfd64a9b58e9331a09c2cabab Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 20 Feb 2021 10:19:23 +0000 Subject: [PATCH 029/578] Bump fragment-ktx from 1.3.0-beta01 to 1.3.0 Bumps fragment-ktx from 1.3.0-beta01 to 1.3.0. Signed-off-by: dependabot[bot] --- multipicker/build.gradle | 2 +- vector/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/multipicker/build.gradle b/multipicker/build.gradle index 5b24388aae..89a692a782 100644 --- a/multipicker/build.gradle +++ b/multipicker/build.gradle @@ -43,7 +43,7 @@ android { dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation 'androidx.appcompat:appcompat:1.2.0' - implementation "androidx.fragment:fragment-ktx:1.3.0-beta01" + implementation "androidx.fragment:fragment-ktx:1.3.0" implementation 'androidx.exifinterface:exifinterface:1.3.2' // Log diff --git a/vector/build.gradle b/vector/build.gradle index 0ed71ba1b2..fe2c577057 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -288,7 +288,7 @@ android { dependencies { def epoxy_version = '4.4.0' - def fragment_version = '1.3.0-beta01' + def fragment_version = '1.3.0' def arrow_version = "0.8.2" def markwon_version = '4.1.2' def big_image_viewer_version = '1.6.2' From a5a857f03649060e32a3f82dc5ecf4ea4143fcd8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 20 Feb 2021 10:19:35 +0000 Subject: [PATCH 030/578] Bump recyclerview from 1.2.0-alpha06 to 1.2.0-beta01 Bumps recyclerview from 1.2.0-alpha06 to 1.2.0-beta01. Signed-off-by: dependabot[bot] --- attachment-viewer/build.gradle | 2 +- vector/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/attachment-viewer/build.gradle b/attachment-viewer/build.gradle index a92eb11212..f07f418602 100644 --- a/attachment-viewer/build.gradle +++ b/attachment-viewer/build.gradle @@ -69,7 +69,7 @@ dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" implementation 'androidx.core:core-ktx:1.3.2' implementation 'androidx.appcompat:appcompat:1.2.0' - implementation "androidx.recyclerview:recyclerview:1.1.0" + implementation "androidx.recyclerview:recyclerview:1.2.0-beta01" implementation 'com.google.android.material:material:1.3.0' } \ No newline at end of file diff --git a/vector/build.gradle b/vector/build.gradle index 0ed71ba1b2..e7c68bd7ad 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -316,7 +316,7 @@ dependencies { implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlin_coroutines_version" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlin_coroutines_version" - implementation "androidx.recyclerview:recyclerview:1.2.0-alpha06" + implementation "androidx.recyclerview:recyclerview:1.2.0-beta01" implementation 'androidx.appcompat:appcompat:1.2.0' implementation "androidx.fragment:fragment-ktx:$fragment_version" implementation 'androidx.constraintlayout:constraintlayout:2.0.4' From a7adcbcd789a6f415ecdaa2f02df15fa45bfaabd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 20 Feb 2021 10:20:10 +0000 Subject: [PATCH 031/578] Bump rxkotlin from 2.3.0 to 2.4.0 Bumps [rxkotlin](https://github.com/ReactiveX/RxKotlin) from 2.3.0 to 2.4.0. - [Release notes](https://github.com/ReactiveX/RxKotlin/releases) - [Commits](https://github.com/ReactiveX/RxKotlin/compare/2.3.0...2.4.0) Signed-off-by: dependabot[bot] --- attachment-viewer/build.gradle | 2 +- matrix-sdk-android-rx/build.gradle | 2 +- vector/build.gradle | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/attachment-viewer/build.gradle b/attachment-viewer/build.gradle index a92eb11212..1c9e88cc5b 100644 --- a/attachment-viewer/build.gradle +++ b/attachment-viewer/build.gradle @@ -63,7 +63,7 @@ android { dependencies { implementation 'com.github.chrisbanes:PhotoView:2.1.4' - implementation 'io.reactivex.rxjava2:rxkotlin:2.3.0' + implementation 'io.reactivex.rxjava2:rxkotlin:2.4.0' implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" diff --git a/matrix-sdk-android-rx/build.gradle b/matrix-sdk-android-rx/build.gradle index 0e899e21ff..37b0ff8d00 100644 --- a/matrix-sdk-android-rx/build.gradle +++ b/matrix-sdk-android-rx/build.gradle @@ -36,7 +36,7 @@ android { dependencies { implementation project(":matrix-sdk-android") implementation 'androidx.appcompat:appcompat:1.2.0' - implementation 'io.reactivex.rxjava2:rxkotlin:2.3.0' + implementation 'io.reactivex.rxjava2:rxkotlin:2.4.0' implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' implementation "org.jetbrains.kotlinx:kotlinx-coroutines-rx2:$kotlin_coroutines_version" diff --git a/vector/build.gradle b/vector/build.gradle index 92f3e151dc..e57ee57d35 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -341,7 +341,7 @@ dependencies { implementation 'com.googlecode.libphonenumber:libphonenumber:8.12.18' // rx - implementation 'io.reactivex.rxjava2:rxkotlin:2.3.0' + implementation 'io.reactivex.rxjava2:rxkotlin:2.4.0' implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' implementation 'com.jakewharton.rxrelay2:rxrelay:2.1.1' // RXBinding From 94faa2dc116415b9f20bb2ba4999440cb8221a33 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 20 Feb 2021 10:22:09 +0000 Subject: [PATCH 032/578] Bump rxbinding-material from 3.0.0 to 3.1.0 Bumps [rxbinding-material](https://github.com/JakeWharton/RxBinding) from 3.0.0 to 3.1.0. - [Release notes](https://github.com/JakeWharton/RxBinding/releases) - [Changelog](https://github.com/JakeWharton/RxBinding/blob/master/CHANGELOG.md) - [Commits](https://github.com/JakeWharton/RxBinding/compare/3.0.0...3.1.0) Signed-off-by: dependabot[bot] --- vector/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vector/build.gradle b/vector/build.gradle index ae2a88081b..e1f2facf3e 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -347,7 +347,7 @@ dependencies { // RXBinding implementation 'com.jakewharton.rxbinding3:rxbinding:3.1.0' implementation 'com.jakewharton.rxbinding3:rxbinding-appcompat:3.1.0' - implementation 'com.jakewharton.rxbinding3:rxbinding-material:3.0.0' + implementation 'com.jakewharton.rxbinding3:rxbinding-material:3.1.0' implementation("com.airbnb.android:epoxy:$epoxy_version") implementation "com.airbnb.android:epoxy-glide-preloading:$epoxy_version" From 5320d16406926daeff1ec8368a03de9f72ce5f61 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 20 Feb 2021 10:22:58 +0000 Subject: [PATCH 033/578] Bump work-runtime-ktx from 2.4.0 to 2.5.0 Bumps work-runtime-ktx from 2.4.0 to 2.5.0. Signed-off-by: dependabot[bot] --- matrix-sdk-android/build.gradle | 2 +- vector/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/matrix-sdk-android/build.gradle b/matrix-sdk-android/build.gradle index 03145ec257..fa59bc189e 100644 --- a/matrix-sdk-android/build.gradle +++ b/matrix-sdk-android/build.gradle @@ -113,7 +113,7 @@ dependencies { def arch_version = '2.1.0' def markwon_version = '3.1.0' def daggerVersion = '2.32' - def work_version = '2.4.0' + def work_version = '2.5.0' def retrofit_version = '2.9.0' implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" diff --git a/vector/build.gradle b/vector/build.gradle index ae2a88081b..6e2f88a24f 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -296,7 +296,7 @@ dependencies { def moshi_version = '1.11.0' def daggerVersion = '2.32' def autofill_version = "1.1.0" - def work_version = '2.4.0' + def work_version = '2.5.0' def arch_version = '2.1.0' def lifecycle_version = '2.2.0' From 471620c4c653f2d5bebd5d9889d727a6927f0079 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 20 Feb 2021 23:12:11 +0000 Subject: [PATCH 034/578] Bump robolectric from 4.3 to 4.5.1 Bumps [robolectric](https://github.com/robolectric/robolectric) from 4.3 to 4.5.1. - [Release notes](https://github.com/robolectric/robolectric/releases) - [Commits](https://github.com/robolectric/robolectric/compare/robolectric-4.3...robolectric-4.5.1) Signed-off-by: dependabot[bot] --- matrix-sdk-android/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/matrix-sdk-android/build.gradle b/matrix-sdk-android/build.gradle index 3cce7c8195..cd3fe0b83b 100644 --- a/matrix-sdk-android/build.gradle +++ b/matrix-sdk-android/build.gradle @@ -169,7 +169,7 @@ dependencies { implementation 'com.googlecode.libphonenumber:libphonenumber:8.12.18' testImplementation 'junit:junit:4.13.2' - testImplementation 'org.robolectric:robolectric:4.3' + testImplementation 'org.robolectric:robolectric:4.5.1' //testImplementation 'org.robolectric:shadows-support-v4:3.0' // Note: version sticks to 1.9.2 due to https://github.com/mockk/mockk/issues/281 testImplementation 'io.mockk:mockk:1.10.6' From 823ba386d9e0f2fe0774463c646d6ff65f36534a Mon Sep 17 00:00:00 2001 From: Nikita Epifanov Date: Sat, 20 Feb 2021 07:15:41 +0000 Subject: [PATCH 035/578] Translated using Weblate (Russian) Currently translated at 99.5% (2072 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/ru/ --- vector/src/main/res/values-ru/strings.xml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/vector/src/main/res/values-ru/strings.xml b/vector/src/main/res/values-ru/strings.xml index 32039144d6..8764831970 100644 --- a/vector/src/main/res/values-ru/strings.xml +++ b/vector/src/main/res/values-ru/strings.xml @@ -2431,4 +2431,18 @@ Element требует от вас ввести свои учетные данные для выполнения этого действия. Требуется повторная аутентификация Не удалось настроить перекрестную подпись + Активный звонок (%1$s) + При поиске номера телефона произошла ошибка + Панель набора номера + Перезвонить + Этот вызов закончился + %1$s отменил(а) этот вызов + Вы отклонили этот вызов %1$s + Вы сейчас в этом вызове + Вы начали вызов + %1$s начал(а) вызов + Вы поставили вызов на удержание + %s поставил вызов на удержание + Удерживать + Возобновить \ No newline at end of file From eb14341f9fec56aa2cea6e77f674d95fb8ad2ce2 Mon Sep 17 00:00:00 2001 From: GokdenizK Date: Thu, 18 Feb 2021 09:37:16 +0000 Subject: [PATCH 036/578] Translated using Weblate (Turkish) Currently translated at 72.1% (1502 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/tr/ --- vector/src/main/res/values-tr/strings.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/vector/src/main/res/values-tr/strings.xml b/vector/src/main/res/values-tr/strings.xml index 2f4c163d6d..1d5b8ed277 100644 --- a/vector/src/main/res/values-tr/strings.xml +++ b/vector/src/main/res/values-tr/strings.xml @@ -1709,4 +1709,8 @@ %1$d/%2$d anahtar başarıyla içe aktarıldı. %1$d/%2$d anahtar başarıyla içe aktarıldı. + Aramayı beklettiniz + %s aramayı bekletti + Beklet + Devam et \ No newline at end of file From 2f8169c26d9f4adc10d3610a288731f32b1dcb96 Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Fri, 19 Feb 2021 01:48:24 +0000 Subject: [PATCH 037/578] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (2081 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/zh_Hant/ --- vector/src/main/res/values-zh-rTW/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vector/src/main/res/values-zh-rTW/strings.xml b/vector/src/main/res/values-zh-rTW/strings.xml index 7121c8f570..e246c0ae8a 100644 --- a/vector/src/main/res/values-zh-rTW/strings.xml +++ b/vector/src/main/res/values-zh-rTW/strings.xml @@ -2105,7 +2105,7 @@ 忘記或遺失所有復原選項?重設所有東西 您已加入。 %s 已加入。 - 此聊天適中的訊息有端到端加密。 + 此聊天室中的訊息有端到端加密。 離開 設定 這裡的訊息有端到端加密。 @@ -2115,7 +2115,7 @@ 此家伺服器正在執行較舊的版本。請要求您的家伺服器管理原升級。您可以繼續,但某些功能可能無法正常運作。 您讓此變為僅邀請。 %1$s 讓此變為僅邀請。 - 在已加密的聊天適中顯示完整歷史紀錄 + 在已加密的聊天室中顯示完整歷史紀錄 %1$s 與 %2$s %1$s 在 %2$s 與 %3$s From 58ab82a47765677ab117dd0e5ba841881cd4d9f9 Mon Sep 17 00:00:00 2001 From: waclaw66 Date: Fri, 19 Feb 2021 11:13:07 +0000 Subject: [PATCH 038/578] Translated using Weblate (Czech) Currently translated at 100.0% (226 of 226 strings) Translation: Element Android/Element Android Sdk Translate-URL: https://translate.element.io/projects/element-android/element-sdk/cs/ --- matrix-sdk-android/src/main/res/values-cs/strings.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/matrix-sdk-android/src/main/res/values-cs/strings.xml b/matrix-sdk-android/src/main/res/values-cs/strings.xml index d92959ac4c..b1ab4ea77f 100644 --- a/matrix-sdk-android/src/main/res/values-cs/strings.xml +++ b/matrix-sdk-android/src/main/res/values-cs/strings.xml @@ -268,4 +268,10 @@ %1$s přidali alternativní adresy %2$s pro tuto místnost. %1$s přidali alternativní adresy %2$s pro tuto místnost. + Upravili jste videokonferenci + Videokonference byla upravena uživatelem %1$s + Ukončili jste videokonferenci + Videokonference byla ukončena uživatelem %1$s + Zahájili jste videokonferenci + Videokonference byla zahájena uživatelem %1$s \ No newline at end of file From 8250a64e34431f28899eb8906dad6731fec4fe1e Mon Sep 17 00:00:00 2001 From: XoseM Date: Sat, 20 Feb 2021 07:12:15 +0000 Subject: [PATCH 039/578] Translated using Weblate (Galician) Currently translated at 85.8% (194 of 226 strings) Translation: Element Android/Element Android Sdk Translate-URL: https://translate.element.io/projects/element-android/element-sdk/gl/ --- matrix-sdk-android/src/main/res/values-gl/strings.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/matrix-sdk-android/src/main/res/values-gl/strings.xml b/matrix-sdk-android/src/main/res/values-gl/strings.xml index def8af44c7..55d59065c9 100644 --- a/matrix-sdk-android/src/main/res/values-gl/strings.xml +++ b/matrix-sdk-android/src/main/res/values-gl/strings.xml @@ -207,4 +207,8 @@ • Os servidores con %s están agora vetados. Cambiaches os ACLs do servidor para esta sala. %s cambiou os ACLs do servidor para esta sala. + + %1$s engadiu %2$s como enderezo desta sala. + %1$s engadiu %2$s como enderezos desta sala. + \ No newline at end of file From 60dad590250e282bc0e64f5326c71372f3879db9 Mon Sep 17 00:00:00 2001 From: Nikita Epifanov Date: Sat, 20 Feb 2021 07:08:55 +0000 Subject: [PATCH 040/578] Translated using Weblate (Russian) Currently translated at 100.0% (11 of 11 strings) Translation: Element Android/Element Android Store Translate-URL: https://translate.element.io/projects/element-android/element-store/ru/ --- fastlane/metadata/android/ru/changelogs/40100170.txt | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 fastlane/metadata/android/ru/changelogs/40100170.txt diff --git a/fastlane/metadata/android/ru/changelogs/40100170.txt b/fastlane/metadata/android/ru/changelogs/40100170.txt new file mode 100644 index 0000000000..0e636dc4dc --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/40100170.txt @@ -0,0 +1,2 @@ +Основные изменения в этой версии: Исправлены ошибки! +Полный список изменений: https://github.com/vector-im/element-android/releases/tag/v1.0.17 From b37505112b5f8eb3fa6a66acee4c7c95a1c33016 Mon Sep 17 00:00:00 2001 From: waclaw66 Date: Fri, 19 Feb 2021 11:33:40 +0000 Subject: [PATCH 041/578] Translated using Weblate (Czech) Currently translated at 63.6% (7 of 11 strings) Translation: Element Android/Element Android Store Translate-URL: https://translate.element.io/projects/element-android/element-store/cs/ --- .../metadata/android/cs/full_description.txt | 36 +++++++++---------- .../metadata/android/cs/short_description.txt | 2 +- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/fastlane/metadata/android/cs/full_description.txt b/fastlane/metadata/android/cs/full_description.txt index 50ca0ac171..f9c1f2ad0c 100644 --- a/fastlane/metadata/android/cs/full_description.txt +++ b/fastlane/metadata/android/cs/full_description.txt @@ -1,30 +1,30 @@ -Element je nový typ aplikace pro výměnu zpráv a kolaboraci, která: +Element je nový typ aplikace pro výměnu zpráv a spolupráci, která: -1. Vám dá moc zachovat si soukromí -2. Vás nechá komunikovat s kýmkoli v síti Matrix a dokonce dále integrací s aplikacemi jako Slack -3. Vás ochrání před inzercí, těžbou dat a uzavřenými zahradami -4. Vás zabezpečí šifrováním end-to-end s křížovým podepisováním pro ověření ostatních +1. Vám dá kontrolu nad ochranou vašeho soukromí +2. Umožní vám komunikovat s kýmkoli v síti Matrix a dokonce i mimo ni pomocí integrací s aplikacemi, jako je Slack +3. Ochrání vás před inzercí, dataminingem a uzavřenými zahradami +4. Zabezpečí vás end-to-end šifrováním s křížovým podpisem pro ověření ostatních -Element is completely different from other messaging and collaboration apps because it is decentralised and open source. +Element je zcela odlišný od ostatních aplikací pro zasílání zpráv a spolupráci, protože je decentralizovaný a otevřený. -Element lets you self-host - or choose a host - so that you have privacy, ownership and control of your data and conversations. It gives you access to an open network; so you’re not just stuck speaking to other Element users only. And it is very secure. +Element vám umožňuje použít vlastní domovský server - nebo si vybrat hostitele - abyste měli soukromí, vlastnictví a kontrolu nad svými daty a konverzacemi. Poskytuje vám přístup k otevřené síti; takže nejste zaseknuti jen při konverzaci s ostatními uživateli Elementu. A je velmi bezpečný. -Element is able to do all this because it operates on Matrix - the standard for open, decentralised communication. +Element je toho všeho schopen, protože pracuje na Matrixu - standardu otevřené, decentralizované komunikace. -Element puts you in control by letting you choose who hosts your conversations. From the Element app, you can choose to host in different ways: +Element vám dává kontrolu nad tím, že si můžete vybrat, kdo bude hostovat vaše konverzace. Z aplikace Element si můžete vybrat hostování různými způsoby: -1. Get a free account on the matrix.org public server hosted by the Matrix developers, or choose from thousands of public servers hosted by volunteers -2. Self-host your account by running a server on your own hardware -3. Sign up for an account on a custom server by simply subscribing to the Element Matrix Services hosting platform +1. Získejte zdarma účet na veřejném serveru matrix.org hostovaném vývojáři Matrixu, nebo si vyberte z tisíců veřejných serverů hostovaných dobrovolníky +2. Hostujte svůj účet spuštěním serveru na svém vlastním hardwaru +3. Zaregistrujte si účet na vlastním serveru jednoduchým přihlášením k hostitelské platformě Element Matrix Services -Why choose Element? +Proč zvolit Element? -OWN YOUR DATA: You decide where to keep your data and messages. You own it and control it, not some MEGACORP that mines your data or gives access to third parties. +VLASTNĚTE SVÁ DATA: Vy rozhodnete, kde svá data a zprávy ponecháte. Vlastníte je a jsou pod vaší kontrolou, ne nějaký MEGACORP, který těží vaše data nebo poskytuje přístup třetím stranám. -OPEN MESSAGING AND COLLABORATION: You can chat with anyone else in the Matrix network, whether they’re using Element or another Matrix app, and even if they are using a different messaging system of the likes of Slack, IRC or XMPP. +ZPRÁVY A SPOLUPRÁCE: Můžete chatovat s kýmkoli v síti Matrix, ať už používá Element nebo jinou aplikaci, a to i v případě, že používají jiný systém zasílání zpráv, jako je Slack, IRC nebo XMPP. -SUPER-SECURE: Real end-to-end encryption (only those in the conversation can decrypt messages), and cross-signing to verify the devices of conversation participants. +MAXIMÁLNĚ BEZPEČNÉ: Skutečné šifrování typu end-to-end (pouze ti v konverzaci mohou dešifrovat zprávy) a křížové podepisování k ověření zařízení účastníků konverzace. -COMPLETE COMMUNICATION: Messaging, voice and video calls, file sharing, screen sharing and a whole bunch of integrations, bots and widgets. Build rooms, communities, stay in touch and get things done. +KOMPLETNÍ KOMUNIKACE: Zprávy, hlasové hovory a videohovory, sdílení souborů, sdílení obrazovky a celá řada integrací, robotů a widgetů. Budujte místnosti, komunity, zůstaňte v kontaktu a spolupracujte. -EVERYWHERE YOU ARE: Stay in touch wherever you are with fully synchronised message history across all your devices and on the web at https://app.element.io. +KDEKOLIV JSTE: Zůstaňte v kontaktu, ať jste kdekoli, s plně synchronizovanou historií zpráv na všech vašich zařízeních a na webu na adrese https://app.element.io. diff --git a/fastlane/metadata/android/cs/short_description.txt b/fastlane/metadata/android/cs/short_description.txt index 0e62a3e249..a654a9ea6a 100644 --- a/fastlane/metadata/android/cs/short_description.txt +++ b/fastlane/metadata/android/cs/short_description.txt @@ -1 +1 @@ -Zabezpečený decentralizovaný chat & VoIP. Uchovejte svá data v bezpečí. +Zabezpečený decentralizovaný chat a VoIP. Uchovejte svá data v bezpečí. From 206f19401f87ebc83449444d1dfd75c382de3def Mon Sep 17 00:00:00 2001 From: vachan-maker Date: Fri, 19 Feb 2021 07:16:11 +0000 Subject: [PATCH 042/578] Translated using Weblate (Malayalam) Currently translated at 9.5% (198 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/ml/ --- vector/src/main/res/values-ml/strings.xml | 87 +++++++++++++++++++++++ 1 file changed, 87 insertions(+) diff --git a/vector/src/main/res/values-ml/strings.xml b/vector/src/main/res/values-ml/strings.xml index b191484568..1f66b9ec40 100644 --- a/vector/src/main/res/values-ml/strings.xml +++ b/vector/src/main/res/values-ml/strings.xml @@ -120,4 +120,91 @@ നീക്കംചെയ്യൂ ബാക്കപ്പ് അംഗ വിശദാംശങ്ങൾ + matrix.org തിരഞ്ഞെടുക്കൂ + അടുത്തത് + ഉപയോക്തൃനാമം + അടുത്തത് + വീണ്ടും അയയ്ക്കൂ + കോഡ് നൽകൂ + ഫോൺ നമ്പർ ഉറപ്പാക്കൂ + അടുത്തത് + ഫോൺ നമ്പർ (നിർബന്ധമല്ല) + ഫോൺ നമ്പർ + ഫോൺ നമ്പർ സജ്ജമാക്കൂ + അടുത്തത് + വിജയകരം! + മുന്നറിയിപ്പ്! + വിലാസം + %s-ൽ തുടരുക + അല്ലെങ്കിൽ + മറ്റുള്ളവ + കൂടുതൽ അറിയുക + ഒരു സെർവർ തിരഞ്ഞെടുക്കുക + തുടരുക + ചരിത്രം മായ്ക്കൂ + അടുത്തത് + മുന്നറിയിപ്പ് + + %d പുതിയ സന്ദേശങ്ങൾ + %d പുതിയ സന്ദേശം + + എല്ലാം റദ്ദാക്കൂ + എല്ലാം വീണ്ടും അയയ്ക്കൂ + ഒരു സന്ദേശം അയക്കൂ (എൻ‌ക്രിപ്റ്റ് ചെയ്യാത്ത)… + %s ടൈപ്പുചെയ്യുന്നു… + തിരയുക + "%1$s, " + അഡ്മിൻ ആക്കൂ + ക്ഷണം റദ്ദാക്കൂ + ക്ഷണിക്കുക + ഇപ്പോൾ %1$s + ഓഫ്‌ലൈൻ + ഓൺ‌ലൈൻ + സൃഷ്ടിക്കൂ + 1 അംഗം + + %d അംഗം + %d അംഗങ്ങൾ + + + %d സജീവ അംഗം + %d സജീവ അംഗങ്ങൾ + + അംഗത്തെ ചേർക്കുക + പുതിയ ചാറ്റ് + ഒരു മുറി + സമന്വയിപ്പിക്കുന്നു… + നിരസിക്കുക + ചേരുക + നീക്കംചെയ്യൂ + തുടരുക + ഇല്ല + അതെ + സംരക്ഷിച്ചു + വിവരം + കോളുകൾ + മുറിയുടെ വിഷയം + മുറിയുടെ പേര് + ഇന്ന് + ഇന്നലെ + അഭ്യർത്ഥന അയച്ചൂ + തിരിച്ചറിയൽ സെർവർ: + ഹോം സെർവർ: + ഈ - മെയില് വിലാസം + പ്രവേശിക്കൂ + ഫോട്ടോ അല്ലെങ്കിൽ വീഡിയോ എടുക്കൂ + സ്റ്റിക്കർ അയയ്ക്കൂ + ഫയലുകൾ അയയ്ക്കൂ + ശബ്‌ദ ഉപകരണം തിരഞ്ഞെടുക്കുക + വീഡിയോ കോൾ ആരംഭിക്കുക + വോയ്സ് കോൾ ആരംഭിക്കുക + പുരോഗതി (%s%%) + നിങ്ങളുടെ പ്രശ്നം ഇവിടെ വിവരിക്കുക + ഗ്രൂപ്പുകളില്ല + മുറികളില്ല + മുറികൾ + ഉറപ്പാക്കൽ + സ്വീകരിക്കുക + പിന്നീട് + വോയ്സ് \ No newline at end of file From 370651ab567519965313ab6f2f0937101b40bbdf Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Sun, 21 Feb 2021 10:43:35 +0100 Subject: [PATCH 043/578] Dependabot will create only 1 PR to upgrade RxBinding dependencies --- vector/build.gradle | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/vector/build.gradle b/vector/build.gradle index 6e279bd959..08dadf6745 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -299,6 +299,7 @@ dependencies { def work_version = '2.5.0' def arch_version = '2.1.0' def lifecycle_version = '2.2.0' + def rxbinding_version = '3.1.0' // Tests def kluent_version = '1.65' @@ -345,9 +346,9 @@ dependencies { implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' implementation 'com.jakewharton.rxrelay2:rxrelay:2.1.1' // RXBinding - implementation 'com.jakewharton.rxbinding3:rxbinding:3.1.0' - implementation 'com.jakewharton.rxbinding3:rxbinding-appcompat:3.1.0' - implementation 'com.jakewharton.rxbinding3:rxbinding-material:3.1.0' + implementation "com.jakewharton.rxbinding3:rxbinding:$rxbinding_version" + implementation "com.jakewharton.rxbinding3:rxbinding-appcompat:$rxbinding_version" + implementation "com.jakewharton.rxbinding3:rxbinding-material:$rxbinding_version" implementation("com.airbnb.android:epoxy:$epoxy_version") implementation "com.airbnb.android:epoxy-glide-preloading:$epoxy_version" From fd3c41a2503ea95e7be9ca0ce5eb44e5af6426a4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 Feb 2021 23:21:43 +0000 Subject: [PATCH 044/578] Bump realmfieldnameshelper from 1.1.1 to 2.0.0 Bumps [realmfieldnameshelper](https://github.com/cmelchior/realmfieldnameshelper) from 1.1.1 to 2.0.0. - [Release notes](https://github.com/cmelchior/realmfieldnameshelper/releases) - [Changelog](https://github.com/cmelchior/realmfieldnameshelper/blob/master/CHANGELOG.md) - [Commits](https://github.com/cmelchior/realmfieldnameshelper/commits) Signed-off-by: dependabot[bot] --- matrix-sdk-android/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/matrix-sdk-android/build.gradle b/matrix-sdk-android/build.gradle index cd3fe0b83b..3ade9f7214 100644 --- a/matrix-sdk-android/build.gradle +++ b/matrix-sdk-android/build.gradle @@ -145,7 +145,7 @@ dependencies { // Database implementation 'com.github.Zhuinden:realm-monarchy:0.7.1' - kapt 'dk.ilios:realmfieldnameshelper:1.1.1' + kapt 'dk.ilios:realmfieldnameshelper:2.0.0' // Work implementation "androidx.work:work-runtime-ktx:$work_version" From bf48978065059cd5de882645990ab81305dc0cf1 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Sun, 21 Feb 2021 11:08:42 +0100 Subject: [PATCH 045/578] Fix compilation issue after upgrade of realmfieldnameshelper from 1.1.1 to 2.0.0 --- .../database/query/ChunkEntityQueries.kt | 3 +-- .../internal/database/query/PushersQueries.kt | 2 +- .../database/query/UserDraftsEntityQueries.kt | 3 +-- .../session/room/timeline/DefaultTimeline.kt | 5 ++--- .../room/timeline/TimelineHiddenReadReceipts.kt | 17 +++++++++-------- 5 files changed, 14 insertions(+), 16 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ChunkEntityQueries.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ChunkEntityQueries.kt index 6028697054..f7d2823303 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ChunkEntityQueries.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ChunkEntityQueries.kt @@ -18,7 +18,6 @@ package org.matrix.android.sdk.internal.database.query import org.matrix.android.sdk.internal.database.model.ChunkEntity import org.matrix.android.sdk.internal.database.model.ChunkEntityFields -import org.matrix.android.sdk.internal.database.model.RoomEntityFields import io.realm.Realm import io.realm.RealmQuery import io.realm.RealmResults @@ -27,7 +26,7 @@ import io.realm.kotlin.where internal fun ChunkEntity.Companion.where(realm: Realm, roomId: String): RealmQuery { return realm.where() - .equalTo("${ChunkEntityFields.ROOM}.${RoomEntityFields.ROOM_ID}", roomId) + .equalTo(ChunkEntityFields.ROOM.ROOM_ID, roomId) } internal fun ChunkEntity.Companion.find(realm: Realm, roomId: String, prevToken: String? = null, nextToken: String? = null): ChunkEntity? { diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/PushersQueries.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/PushersQueries.kt index d78bda2317..359b256844 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/PushersQueries.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/PushersQueries.kt @@ -48,6 +48,6 @@ internal fun PushRuleEntity.Companion.where(realm: Realm, scope: String, ruleId: String): RealmQuery { return realm.where() - .equalTo("${PushRuleEntityFields.PARENT}.${PushRulesEntityFields.SCOPE}", scope) + .equalTo(PushRuleEntityFields.PARENT.SCOPE, scope) .equalTo(PushRuleEntityFields.RULE_ID, ruleId) } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/UserDraftsEntityQueries.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/UserDraftsEntityQueries.kt index 35f317f192..4af4da0a22 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/UserDraftsEntityQueries.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/UserDraftsEntityQueries.kt @@ -16,7 +16,6 @@ package org.matrix.android.sdk.internal.database.query -import org.matrix.android.sdk.internal.database.model.RoomSummaryEntityFields import org.matrix.android.sdk.internal.database.model.UserDraftsEntity import org.matrix.android.sdk.internal.database.model.UserDraftsEntityFields import io.realm.Realm @@ -26,7 +25,7 @@ import io.realm.kotlin.where internal fun UserDraftsEntity.Companion.where(realm: Realm, roomId: String? = null): RealmQuery { val query = realm.where() if (roomId != null) { - query.equalTo(UserDraftsEntityFields.ROOM_SUMMARY_ENTITY + "." + RoomSummaryEntityFields.ROOM_ID, roomId) + query.equalTo(UserDraftsEntityFields.ROOM_SUMMARY_ENTITY.ROOM_ID, roomId) } return query } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultTimeline.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultTimeline.kt index ae90282d52..ca272a3520 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultTimeline.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultTimeline.kt @@ -43,7 +43,6 @@ import org.matrix.android.sdk.api.util.CancelableBag import org.matrix.android.sdk.internal.database.RealmSessionProvider import org.matrix.android.sdk.internal.database.mapper.TimelineEventMapper import org.matrix.android.sdk.internal.database.model.ChunkEntity -import org.matrix.android.sdk.internal.database.model.ChunkEntityFields import org.matrix.android.sdk.internal.database.model.RoomEntity import org.matrix.android.sdk.internal.database.model.TimelineEventEntity import org.matrix.android.sdk.internal.database.model.TimelineEventEntityFields @@ -688,11 +687,11 @@ internal class DefaultTimeline( return if (initialEventId == null) { TimelineEventEntity .whereRoomId(realm, roomId = roomId) - .equalTo("${TimelineEventEntityFields.CHUNK}.${ChunkEntityFields.IS_LAST_FORWARD}", true) + .equalTo(TimelineEventEntityFields.CHUNK.IS_LAST_FORWARD, true) } else { TimelineEventEntity .whereRoomId(realm, roomId = roomId) - .`in`("${TimelineEventEntityFields.CHUNK}.${ChunkEntityFields.TIMELINE_EVENTS.EVENT_ID}", arrayOf(initialEventId)) + .`in`("${TimelineEventEntityFields.CHUNK.TIMELINE_EVENTS}.${TimelineEventEntityFields.EVENT_ID}", arrayOf(initialEventId)) } } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TimelineHiddenReadReceipts.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TimelineHiddenReadReceipts.kt index fa517bebf2..0ade8ad3b8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TimelineHiddenReadReceipts.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TimelineHiddenReadReceipts.kt @@ -24,6 +24,7 @@ import io.realm.RealmResults import org.matrix.android.sdk.api.session.room.model.ReadReceipt import org.matrix.android.sdk.api.session.room.timeline.TimelineSettings import org.matrix.android.sdk.internal.database.mapper.ReadReceiptsSummaryMapper +import org.matrix.android.sdk.internal.database.model.EventEntityFields import org.matrix.android.sdk.internal.database.model.ReadReceiptsSummaryEntity import org.matrix.android.sdk.internal.database.model.ReadReceiptsSummaryEntityFields import org.matrix.android.sdk.internal.database.model.TimelineEventEntity @@ -121,7 +122,7 @@ internal class TimelineHiddenReadReceipts constructor(private val readReceiptsSu // We are looking for read receipts set on hidden events. // We only accept those with a timelineEvent (so coming from pagination/sync). this.hiddenReadReceipts = ReadReceiptsSummaryEntity.whereInRoom(realm, roomId) - .isNotEmpty(ReadReceiptsSummaryEntityFields.TIMELINE_EVENT) + .isNotEmpty(ReadReceiptsSummaryEntityFields.TIMELINE_EVENT.`$`) .isNotEmpty(ReadReceiptsSummaryEntityFields.READ_RECEIPTS.`$`) .filterReceiptsWithSettings() .findAllAsync() @@ -157,12 +158,12 @@ internal class TimelineHiddenReadReceipts constructor(private val readReceiptsSu // Result: D, F, H, I settings.filters.allowedTypes.forEachIndexed { index, filter -> if (filter.stateKey == null) { - notEqualTo("${ReadReceiptsSummaryEntityFields.TIMELINE_EVENT}.${TimelineEventEntityFields.ROOT.TYPE}", filter.eventType) + notEqualTo("${ReadReceiptsSummaryEntityFields.TIMELINE_EVENT.ROOT}.${EventEntityFields.TYPE}", filter.eventType) } else { beginGroup() - notEqualTo("${ReadReceiptsSummaryEntityFields.TIMELINE_EVENT}.${TimelineEventEntityFields.ROOT.TYPE}", filter.eventType) + notEqualTo("${ReadReceiptsSummaryEntityFields.TIMELINE_EVENT.ROOT}.${EventEntityFields.TYPE}", filter.eventType) or() - notEqualTo("${ReadReceiptsSummaryEntityFields.TIMELINE_EVENT}.${TimelineEventEntityFields.ROOT.STATE_KEY}", filter.stateKey) + notEqualTo("${ReadReceiptsSummaryEntityFields.TIMELINE_EVENT.ROOT}.${EventEntityFields.STATE_KEY}", filter.stateKey) endGroup() } if (index != settings.filters.allowedTypes.size - 1) { @@ -174,19 +175,19 @@ internal class TimelineHiddenReadReceipts constructor(private val readReceiptsSu } if (settings.filters.filterUseless) { if (needOr) or() - equalTo("${ReadReceiptsSummaryEntityFields.TIMELINE_EVENT}.${TimelineEventEntityFields.ROOT.IS_USELESS}", true) + equalTo("${ReadReceiptsSummaryEntityFields.TIMELINE_EVENT.ROOT}.${EventEntityFields.IS_USELESS}", true) needOr = true } if (settings.filters.filterEdits) { if (needOr) or() - like("${ReadReceiptsSummaryEntityFields.TIMELINE_EVENT}.${TimelineEventEntityFields.ROOT.CONTENT}", TimelineEventFilter.Content.EDIT) + like("${ReadReceiptsSummaryEntityFields.TIMELINE_EVENT.ROOT}.${EventEntityFields.CONTENT}", TimelineEventFilter.Content.EDIT) or() - like("${ReadReceiptsSummaryEntityFields.TIMELINE_EVENT}.${TimelineEventEntityFields.ROOT.CONTENT}", TimelineEventFilter.Content.RESPONSE) + like("${ReadReceiptsSummaryEntityFields.TIMELINE_EVENT.ROOT}.${EventEntityFields.CONTENT}", TimelineEventFilter.Content.RESPONSE) needOr = true } if (settings.filters.filterRedacted) { if (needOr) or() - like("${ReadReceiptsSummaryEntityFields.TIMELINE_EVENT}.${TimelineEventEntityFields.ROOT.UNSIGNED_DATA}", TimelineEventFilter.Unsigned.REDACTED) + like("${ReadReceiptsSummaryEntityFields.TIMELINE_EVENT.ROOT}.${EventEntityFields.UNSIGNED_DATA}", TimelineEventFilter.Unsigned.REDACTED) } endGroup() return this From 4465d87eb825674348104491cac1e552d79bf281 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 20 Feb 2021 10:27:17 +0000 Subject: [PATCH 046/578] Bump browser from 1.2.0 to 1.3.0 Bumps browser from 1.2.0 to 1.3.0. Signed-off-by: dependabot[bot] --- vector/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vector/build.gradle b/vector/build.gradle index 08dadf6745..c8fbc20cee 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -382,7 +382,7 @@ dependencies { implementation 'com.github.vector-im:PFLockScreen-Android:1.0.0-beta12' // Custom Tab - implementation 'androidx.browser:browser:1.2.0' + implementation 'androidx.browser:browser:1.3.0' // Passphrase strength helper implementation 'com.nulab-inc:zxcvbn:1.4.0' From dd3a395d11125e644d1974a220bc4d6a246894d8 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Sun, 21 Feb 2021 16:11:49 +0100 Subject: [PATCH 047/578] Fix compilation issue after upgrade of browser from 1.2.0 to 1.3.0 --- .../core/utils/ExternalApplicationsUtil.kt | 28 ++++++++++++------- .../vector/app/features/themes/ThemeUtils.kt | 8 ++++++ 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/vector/src/main/java/im/vector/app/core/utils/ExternalApplicationsUtil.kt b/vector/src/main/java/im/vector/app/core/utils/ExternalApplicationsUtil.kt index 45db8ea91d..fa1c50f419 100644 --- a/vector/src/main/java/im/vector/app/core/utils/ExternalApplicationsUtil.kt +++ b/vector/src/main/java/im/vector/app/core/utils/ExternalApplicationsUtil.kt @@ -33,14 +33,15 @@ import android.provider.Settings import android.webkit.MimeTypeMap import android.widget.Toast import androidx.activity.result.ActivityResultLauncher +import androidx.browser.customtabs.CustomTabColorSchemeParams import androidx.browser.customtabs.CustomTabsIntent import androidx.browser.customtabs.CustomTabsSession -import androidx.core.content.ContextCompat import androidx.core.content.FileProvider import androidx.core.content.getSystemService import im.vector.app.BuildConfig import im.vector.app.R import im.vector.app.features.notifications.NotificationUtils +import im.vector.app.features.themes.ThemeUtils import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch @@ -92,17 +93,24 @@ fun openUrlInExternalBrowser(context: Context, uri: Uri?) { * If several compatible browsers are installed, the user will be proposed to choose one. * Ref: https://developer.chrome.com/multidevice/android/customtabs */ -fun openUrlInChromeCustomTab(context: Context, session: CustomTabsSession?, url: String) { +fun openUrlInChromeCustomTab(context: Context, + session: CustomTabsSession?, + url: String) { try { CustomTabsIntent.Builder() - .setToolbarColor(ContextCompat.getColor(context, R.color.riotx_background_light)) - .apply { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) { - setNavigationBarColor(ContextCompat.getColor(context, R.color.riotx_header_panel_background_light)) - } - } - .setNavigationBarColor(ContextCompat.getColor(context, R.color.riotx_background_light)) - .setColorScheme(CustomTabsIntent.COLOR_SCHEME_LIGHT) + .setDefaultColorSchemeParams( + CustomTabColorSchemeParams.Builder() + .setToolbarColor(ThemeUtils.getColor(context, R.attr.riotx_background)) + .setNavigationBarColor(ThemeUtils.getColor(context, R.attr.riotx_background)) + .build() + ) + .setColorScheme( + when { + ThemeUtils.isSystemTheme(context) -> CustomTabsIntent.COLOR_SCHEME_SYSTEM + ThemeUtils.isLightTheme(context) -> CustomTabsIntent.COLOR_SCHEME_LIGHT + else -> CustomTabsIntent.COLOR_SCHEME_DARK + } + ) // Note: setting close button icon does not work .setCloseButtonIcon(BitmapFactory.decodeResource(context.resources, R.drawable.ic_back_24dp)) .setStartAnimations(context, R.anim.enter_fade_in, R.anim.exit_fade_out) diff --git a/vector/src/main/java/im/vector/app/features/themes/ThemeUtils.kt b/vector/src/main/java/im/vector/app/features/themes/ThemeUtils.kt index 0856ac4b35..3bf58ab709 100644 --- a/vector/src/main/java/im/vector/app/features/themes/ThemeUtils.kt +++ b/vector/src/main/java/im/vector/app/features/themes/ThemeUtils.kt @@ -59,6 +59,14 @@ object ThemeUtils { setApplicationTheme(context, theme) } + /** + * @return true if current theme is System + */ + fun isSystemTheme(context: Context): Boolean { + val theme = getApplicationTheme(context) + return theme == SYSTEM_THEME_VALUE + } + /** * @return true if current theme is Light or current theme is System and system theme is light */ From 76923ad88a71e70b1e5ba74644e4079698a88b72 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 20 Feb 2021 10:27:05 +0000 Subject: [PATCH 048/578] Bump alerter from 5.1.2 to 7.0.1 Bumps [alerter](https://github.com/Tapadoo/Alerter) from 5.1.2 to 7.0.1. - [Release notes](https://github.com/Tapadoo/Alerter/releases) - [Changelog](https://github.com/Tapadoo/Alerter/blob/master/CHANGELOG.md) - [Commits](https://github.com/Tapadoo/Alerter/commits) Signed-off-by: dependabot[bot] --- vector/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vector/build.gradle b/vector/build.gradle index c8fbc20cee..2c5dc01e37 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -388,7 +388,7 @@ dependencies { implementation 'com.nulab-inc:zxcvbn:1.4.0' //Alerter - implementation 'com.tapadoo.android:alerter:5.1.2' + implementation 'com.tapadoo.android:alerter:7.0.1' implementation 'com.otaliastudios:autocomplete:1.1.0' From f617a8d77f1732ab47a444a0e5e9ba1a1324101a Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Sun, 21 Feb 2021 16:20:57 +0100 Subject: [PATCH 049/578] Fix compilation issue after upgrade of alerter from 5.1.2 to 7.0.1 --- .../main/java/im/vector/app/features/popup/PopupAlertManager.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vector/src/main/java/im/vector/app/features/popup/PopupAlertManager.kt b/vector/src/main/java/im/vector/app/features/popup/PopupAlertManager.kt index 6952d5f653..67ef0514f2 100644 --- a/vector/src/main/java/im/vector/app/features/popup/PopupAlertManager.kt +++ b/vector/src/main/java/im/vector/app/features/popup/PopupAlertManager.kt @@ -99,7 +99,7 @@ class PopupAlertManager @Inject constructor() { // we want to remove existing popup on previous activity and display it on new one if (currentAlerter != null) { weakCurrentActivity?.get()?.let { - Alerter.clearCurrent(it) + Alerter.clearCurrent(it, null) if (currentAlerter?.isLight == false) { setLightStatusBar() } From d444e91ba8bc7baf066ce0e6e0caaf9eadb37251 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 20 Feb 2021 23:10:37 +0000 Subject: [PATCH 050/578] Bump kotlin_version from 1.4.21 to 1.4.30 Bumps `kotlin_version` from 1.4.21 to 1.4.30. Updates `kotlin-gradle-plugin` from 1.4.21 to 1.4.30 Updates `kotlin-stdlib-jdk7` from 1.4.21 to 1.4.30 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.4.21...v1.4.30) Updates `kotlin-stdlib` from 1.4.21 to 1.4.30 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.4.21...v1.4.30) Signed-off-by: dependabot[bot] --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 18a0564943..9c1a912924 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,7 @@ buildscript { // Ref: https://kotlinlang.org/releases.html - ext.kotlin_version = '1.4.21' + ext.kotlin_version = '1.4.30' ext.kotlin_coroutines_version = "1.4.1" repositories { google() From 88964d8cf7ff1f247c5441d3d8103c8102eec14a Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Sun, 21 Feb 2021 16:24:40 +0100 Subject: [PATCH 051/578] Also bump kotlin_coroutines_version to recommended version 1.4.2 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 9c1a912924..5f4650ee23 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ buildscript { // Ref: https://kotlinlang.org/releases.html ext.kotlin_version = '1.4.30' - ext.kotlin_coroutines_version = "1.4.1" + ext.kotlin_coroutines_version = "1.4.2" repositories { google() jcenter() From ef3d8f365acfbc2a0dbf3b755dcb24a93b14cbf6 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Sun, 21 Feb 2021 16:52:19 +0100 Subject: [PATCH 052/578] Changelog --- CHANGES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index b67e33f9ad..811347934d 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -17,7 +17,7 @@ SDK API changes ⚠️: - Build 🧱: - - + - Update a lot of dependencies, with the help of dependabot. Test: - From a348571e325e5f40e17f4ade1a01ecb5ddac83ab Mon Sep 17 00:00:00 2001 From: Jonathan de Jong Date: Sun, 21 Feb 2021 19:19:46 +0100 Subject: [PATCH 053/578] Fix spelling --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3464fd9e76..dd32991051 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -29,7 +29,7 @@ To create a new screen: - Then right click on the package, and select `New/New Vector/RiotX Feature`. - Follow the Wizard, especially replace `Main` by something more relevant to your feature. - Click on `Finish`. -- Remaining steps are described as TODO in the generated files, or will be pointed out by the compilator, or at runtime :) +- Remaining steps are described as TODO in the generated files, or will be pointed out by the compiler, or at runtime :) Note that if the templates are modified, the only things to do is to restart Android Studio for the change to take effect. From bebb9560053e08ec072deff452b05f95ac443c2d Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 22 Feb 2021 17:44:11 +0100 Subject: [PATCH 054/578] Try to fix crash about UrlPreview (#2640) --- CHANGES.md | 2 +- .../features/home/room/detail/RoomDetailViewModel.kt | 4 ++-- .../room/detail/timeline/url/PreviewUrlRetriever.kt | 11 +++++------ 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 46057a37ec..4c87e88e47 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -8,7 +8,7 @@ Improvements 🙌: - Fetch homeserver type and version and display in a new setting screen and add info in rageshakes (#2831) Bugfix 🐛: - - + - Try to fix crash about UrlPreview (#2640) Translations 🗣: - diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt index c7a5873a65..601891b15a 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt @@ -132,7 +132,7 @@ class RoomDetailViewModel @AssistedInject constructor( val timeline = room.createTimeline(eventId, timelineSettings) // Same lifecycle than the ViewModel (survive to screen rotation) - val previewUrlRetriever = PreviewUrlRetriever(session) + val previewUrlRetriever = PreviewUrlRetriever(session, viewModelScope) // Slot to keep a pending action during permission request var pendingAction: RoomDetailAction? = null @@ -1425,7 +1425,7 @@ class RoomDetailViewModel @AssistedInject constructor( snapshot .takeIf { state.asyncRoomSummary.invoke()?.isEncrypted == false } ?.forEach { - previewUrlRetriever.getPreviewUrl(it, viewModelScope) + previewUrlRetriever.getPreviewUrl(it) } } } diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/url/PreviewUrlRetriever.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/url/PreviewUrlRetriever.kt index 54d5fd9eb3..df75c0094b 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/url/PreviewUrlRetriever.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/url/PreviewUrlRetriever.kt @@ -16,17 +16,17 @@ package im.vector.app.features.home.room.detail.timeline.url -import android.os.Handler -import android.os.Looper import im.vector.app.BuildConfig import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import org.matrix.android.sdk.api.cache.CacheStrategy import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent import org.matrix.android.sdk.api.session.room.timeline.getLatestEventId -class PreviewUrlRetriever(session: Session) { +class PreviewUrlRetriever(session: Session, + private val coroutineScope: CoroutineScope) { private val mediaService = session.mediaService() private data class EventIdPreviewUrlUiState( @@ -38,12 +38,11 @@ class PreviewUrlRetriever(session: Session) { // Keys are the main eventId private val data = mutableMapOf() private val listeners = mutableMapOf>() - private val uiHandler = Handler(Looper.getMainLooper()) // In memory list private val blockedUrl = mutableSetOf() - fun getPreviewUrl(event: TimelineEvent, coroutineScope: CoroutineScope) { + fun getPreviewUrl(event: TimelineEvent) { val eventId = event.root.eventId ?: return val latestEventId = event.getLatestEventId() @@ -115,7 +114,7 @@ class PreviewUrlRetriever(session: Session) { private fun updateState(eventId: String, latestEventId: String, state: PreviewUrlUiState) { data[eventId] = EventIdPreviewUrlUiState(latestEventId, state) // Notify the listener - uiHandler.post { + coroutineScope.launch(Dispatchers.Main) { listeners[eventId].orEmpty().forEach { it.onStateUpdated(state) } From 24c5e727cead45e04cbe0916fe06f44484cb62c6 Mon Sep 17 00:00:00 2001 From: gradle-update-robot Date: Tue, 23 Feb 2021 00:48:50 +0000 Subject: [PATCH 055/578] Update Gradle Wrapper from 6.8.2 to 6.8.3. Signed-off-by: gradle-update-robot --- gradle/wrapper/gradle-wrapper.properties | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 30d5f428d7..6e61ea7487 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,6 @@ -#Fri Jan 29 18:05:42 CET 2021 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionSha256Sum=1433372d903ffba27496f8d5af24265310d2da0d78bf6b4e5138831d4fe066e9 -distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.2-all.zip +distributionSha256Sum=9af5c8e7e2cd1a3b0f694a4ac262b9f38c75262e74a9e8b5101af302a6beadd7 +distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From 6b55960c92ca209fcfab8b2d37b2ceb60fad52da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexia=20=C5=ACerner?= Date: Mon, 22 Feb 2021 22:24:02 +0000 Subject: [PATCH 056/578] Translated using Weblate (Esperanto) Currently translated at 92.3% (1922 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/eo/ --- vector/src/main/res/values-eo/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vector/src/main/res/values-eo/strings.xml b/vector/src/main/res/values-eo/strings.xml index 776dbdf076..6ac0b9ce47 100644 --- a/vector/src/main/res/values-eo/strings.xml +++ b/vector/src/main/res/values-eo/strings.xml @@ -845,7 +845,7 @@ Elektebloj pri trovado aperos post aldono de retpoŝtadreso. Troveblaj retpoŝtadresoj Vi nun ne uzas identigan servilon. Por trovi kaj troviĝi de jamaj kontaktoj, kiujn vi konas, agordu tian servilon sube. - Vi nun uzas %1$s por trovi kaj troviĝi de jamaj kontaktoj, kiujn vi trovas. + Vi nun uzas %1$s por trovi kaj troviĝi de jamaj kontaktoj, kiujn vi konas. Ŝanĝi identigan servilon Agordi identigan servilon Malkonekti identigan servilon @@ -1186,7 +1186,7 @@ \nSe vi ne salutis alian salutaĵon, malatentu ĉi tiun peton. Via nekontrolita salutaĵo «%s» petas ĉifrajn ŝlosilojn. Vi aldonis novan salutaĵon «%s», kiu petas ĉifrajn ŝlosilojn. - Por daŭrigi vi bezonas akcepti la uzokondiĉojn de tiu ĉi servo. + Por daŭrigi vi devas akcepti la uzokondiĉojn de tiu ĉi servo. Ĉi tiu elekteblo postulas aplikaĵon de ekstera liveranto por registri la mesaĝojn. Sendi voĉmesaĝojn Uzi enigan klavon por sendi mesaĝon From d062a23d857fe0fba6503cbeaa231bb29e1e0253 Mon Sep 17 00:00:00 2001 From: Tirifto Date: Mon, 22 Feb 2021 18:46:50 +0000 Subject: [PATCH 057/578] Translated using Weblate (Esperanto) Currently translated at 92.3% (1922 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/eo/ --- vector/src/main/res/values-eo/strings.xml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/vector/src/main/res/values-eo/strings.xml b/vector/src/main/res/values-eo/strings.xml index 6ac0b9ce47..51c0c4ee50 100644 --- a/vector/src/main/res/values-eo/strings.xml +++ b/vector/src/main/res/values-eo/strings.xml @@ -2169,4 +2169,21 @@ Element trovis propran servilan agordaron per la retnomo «%1$s» el via identigilo de uzanto: \n%2$s Nevalidas hejmservil-serĉanta respondo + Elektu la rolojn bezonatajn por ŝanĝi diversajn partojn de la ĉambro + Permesoj + Montri kaj ĝisdatigi la rolojn bezonatajn por ŝanĝi diversajn partojn de la ĉambro. + Ĉi tiu ĉambro ne estas publika. Vi ne povos re-aliĝi sen invito. + Permesi aliron al viaj kontaktoj. + Por skani rapidrespondan kodon, vi bezonas permesi aliron al filmilo. + Vi paŭzigis la vokon + %s paŭzigis la vokon + Paŭzigi + Daŭrigi + Sendi historion de petoj havigi ŝlosilojn + Neniu pliaj rezultoj + Reiri + Malpublikigi + Aldoni + Ekbabili + Implicita de sistemo \ No newline at end of file From 316bcd728e99bb8887d962fdb42bece3057c6156 Mon Sep 17 00:00:00 2001 From: Martin Johansen Date: Mon, 22 Feb 2021 16:04:23 +0000 Subject: [PATCH 058/578] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?= =?UTF-8?q?an=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 69.4% (1445 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/nb_NO/ --- vector/src/main/res/values-nb-rNO/strings.xml | 400 +++++++++++++++++- 1 file changed, 397 insertions(+), 3 deletions(-) diff --git a/vector/src/main/res/values-nb-rNO/strings.xml b/vector/src/main/res/values-nb-rNO/strings.xml index f84414ced6..c9161369cb 100644 --- a/vector/src/main/res/values-nb-rNO/strings.xml +++ b/vector/src/main/res/values-nb-rNO/strings.xml @@ -121,7 +121,7 @@ %dt - 1d + %dd %dd Lag @@ -934,7 +934,7 @@ Gjennomgå innstillingene dine for å aktivere push-varsler Feil kode, %d gjenværende forsøk - Feil kode, %d gjenværende forsøk + Feil kode, %d gjenværende forsøker Advarsel! Siste gjenværende forsøk før avlogging! For mange feil, du er logget ut @@ -1022,7 +1022,7 @@ Alle meldinger (støyende) %1$s rom funnet for %2$s - %1$s rom funnet for %2$s + %1$s rommer funnet for %2$s Bla gjennom katalogen Skriv inn et rom-ID eller et romalias @@ -1170,4 +1170,398 @@ \n \nMerk at denne handlingen starter appen på nytt, og det kan ta litt tid. Er du sikker på at du vil invitere %s til denne chatten\? + ekstern side kunne ikke plukke opp. + Videoanrop i prosess… + Anrop i prosess… + Brukeren kansellerte bekreftelsen + Ingen identitetsserver er konfigurert, det er nødvendig å tilbakestille passordet ditt. + Det ser ut til at du prøver å koble til en annen hjemmeserver. Vil du logge av\? + Bli med i et rom for å begynne å bruke appen. + Du har ikke flere uleste meldinger + Velkommen hjem! + Dine direktemeldingssamtaler vises her. Trykk på + nederst til høyre for å starte noen. + Rommene dine vises her. Trykk på + nederst til høyre for å finne eksisterende eller starte noen av dine egne. + Godta + Se reaksjoner + Arrangement slettet av bruker + Sist redigert av %1$s på %2$s + Ingen nettverk. Kontroller Internett-tilkoblingen din. + Bytt nettverk + Dette rommet kan ikke forhåndsvises + Dette rommet kan ikke forhåndsvises. Vil du bli med på det\? + OPPRETT + Romnavn + Romemne (valgfritt) + Emne + Alle vil være med på dette rommet + Rominnstillinger + Andre tredjepartsmeldinger + Du ser allerede på dette rommet! + Vennligst skriv ditt forslag nedenfor. + Beskriv ditt forslag her + Takk, forslaget er sendt + Vis fullstendig historie i krypterte rom + Krypterer miniatyrbilde… + Laster ned fil %1$s… + Filen %1$s er lastet ned! + Ingen endringer funnet + Finner du ikke det du leter etter\? + Send en ny direkte melding + Søk etter navn eller ID + Aktiver sveip for å svare på tidslinjen + Link kopiert til utklippstavlen + Legg til etter matrix-ID + QR kode + Legg til med QR-kode + Oppretter rom… + Ingen resultater funnet, bruk Legg til etter matrix-ID for å søke på serveren. + Begynn å skrive for å få resultater + Nylig + Kjente brukere + Kontakter + Forslag + Gjennomgå vilkårene + Vær oppdagelig av andre + Konfigurer identitetsserver + Du bruker for øyeblikket ikke en identitetsserver. For å oppdage og bli oppdaget av eksisterende kontakter du kjenner, konfigurer du en nedenfor. + Hvis du kobler fra identitetsserveren din, vil du ikke kunne oppdages av andre brukere, og du vil ikke kunne invitere andre via e-post eller telefon. + Synlige telefonnumre + Vi sendte deg en bekreftelses-e-post til %s, sjekk e-posten din og klikk på bekreftelseskoblingen + Vi sendte deg en bekreftelses-e-post til %s. Sjekk først e-posten din og klikk på bekreftelseskoblingen + Send e-post og telefonnummer + Du har gitt ditt samtykke til å sende e-post og telefonnummer til denne identitetsserveren for å oppdage andre brukere fra kontaktene dine. + Du har ikke gitt ditt samtykke til å sende e-post og telefonnummer til denne identitetsserveren for å oppdage andre brukere fra kontaktene dine. + Opphev mitt samtykke + Gi samtykke + Send e-post og telefonnummer + Kunne ikke koble til identitetsserveren + Vennligst skriv inn nettadressen til identitetsserveren + Identitetsserveren du har valgt har ingen tjenestevilkår. Fortsett bare hvis du stoler på eieren av tjenesten + En tekstmelding er sendt til %s. Vennligst skriv inn bekreftelseskoden den inneholder. + Kode + Bekreftelseskoden er ikke riktig. + Godta vilkårene for identitetsserveren (%s) for å la deg bli oppdaget via e-postadresse eller telefonnummer. + Prøv på nytt når du har godtatt vilkårene til hjemmeserveren din. + Ser ut som det tar for lang tid å svare på serveren, dette kan skyldes enten dårlig tilkobling eller en feil med serveren. Prøv igjen om en stund. + Åpne menyen for opprett rom + Lukk menyen for opprett rom… + Lag en ny direkte samtale + Lag en ny direkte samtale etter Matrix ID + Opprett en ny direkte samtale ved å skanne en QR-kode + Gå til bunnen + Det oppstod en feil under henting av vedlegget. + Legg til bilde fra + Roter og beskjær + Kunne ikke håndtere delingsdata + %1$d av %2$d + Det er ingen medier i dette rommet + Det er ingen filer i dette rommet + Tilpasset rapport… + Rapporter dette innholdet + Årsak til å rapportere dette innholdet + RAPPORTERE + Innhold rapportert + Dette innholdet ble rapportert. +\n +\nHvis du ikke vil se mer innhold fra denne brukeren, kan du ignorere dem for å skjule meldingene sine. + Rapportert som spam + Dette innholdet ble rapportert som spam. +\n +\nHvis du ikke vil se mer innhold fra denne brukeren, kan du ignorere dem for å skjule meldingene sine. + Rapportert som upassende + Dette innholdet ble rapportert som upassende. +\n +\nHvis du ikke vil se mer innhold fra denne brukeren, kan du ignorere dem for å skjule meldingene sine. + Det er ingen nettverkstilkobling akkurat nå + Alle meldinger (støyende) + Legg til i favoritter + Fjern fra favoritter + Legg til lav prioritet + Fjern fra lav prioritet + %1$s gjorde ingen endringer + Skriv inn nøkkelord for å finne en reaksjon. + %1$s gjorde rommet offentlig for den som kjenner lenken. + Du gjorde rommet offentlig for den som kjenner lenken. + Koble til en tilpasset server + Skriv inn adressen til en server eller et Element du vil koble til + Skriv inn adressen til serveren du vil bruke + Hvis du endrer passordet, tilbakestilles alle krypteringsnøkler fra ende-til-ende på alle øktene dine, noe som gjør kryptert chatlogg uleselig. Konfigurer sikkerhetskopiering av nøkkel eller eksporter romnøklene fra en annen økt før du tilbakestiller passordet. + Du er logget ut av alle økter og vil ikke lenger motta push-varsler. Logg på igjen på hver enhet for å aktivere varsler på nytt. + Passordet ditt er ikke endret ennå. +\n +\nStoppe passordendringsprosessen\? + Kontoen din er ikke opprettet ennå. +\n +\nStoppe registreringsprosessen\? + Velg en tilpasset hjemmeserver + Vennligst utfør captcha-utfordringen + Vi har nettopp sendt en e-post til %1$s. +\nKlikk på lenken den inneholder for å fortsette opprettelsen av kontoen. + Den angitte koden er ikke riktig. Vennligst sjekk. + + Det er sendt for mange forespørsler. Du kan prøve på nytt %1$d sekund… + Det er sendt for mange forespørsler. Du kan prøve på nytt %1$d sekunder… + + Dette er ikke en gyldig brukeridentifikator. Forventet format: \'@bruker:homeserver.org\' + Logg på for å gjenopprette krypteringsnøkler som er lagret eksklusivt på denne enheten. Du trenger dem for å lese alle dine sikre meldinger på hvilken som helst enhet. + Fjern personlige data + Linken din til matrix.to var feil + Beskrivelsen er for kort + Viser bare de første resultatene, skriv flere bokstaver… + Skjul avansert + Vis avansert + Bekreftelse sendt + Du gjorde ingen endringer + Det er samtalen din. Ei det. + Chat med folk direkte eller i grupper + Hold samtaler private med kryptering + Akkurat som e-post har kontoer ett hjem, selv om du kan snakke med hvem som helst + Bli med millioner gratis på den største offentlige serveren + Eller + Fortsett med %s + Registrer deg med %s + Logg inn med %s + Logg på %1$s + Slett logg + Det oppsto en feil under innlasting av siden: %1$s (%2$d) + Beklager, denne tjeneren godtar ikke nye kontoer. + Denne e-postadressen er ikke tilknyttet noen konto. + En bekreftelses-e-post vil bli sendt til innboksen din for å bekrefte innstillingen av ditt nye passord. + Denne e-postadressen er ikke knyttet til noen konto + En bekreftelses-e-post ble sendt til %1$s. + Trykk på lenken for å bekrefte det nye passordet ditt. Når du har fulgt lenken den inneholder, klikker du nedenfor. + Tilbake til Logg inn + Angi en e-post for å gjenopprette kontoen din. Senere, kan du eventuelt la folk du kjenner oppdage deg via e-posten din. + Angi et telefonnummer slik at folk du kjenner kan oppdage deg. + Vennligst bruk det internasjonale formatet. + Vi har nettopp sendt en kode til %1$s. Skriv det inn nedenfor for å bekrefte at det er deg. + Send igjen + Vennligst bruk det internasjonale formatet (telefonnummeret må starte med \'+\') + Internasjonale telefonnumre må starte med \'+\' + Telefonnummeret virker ugyldig. Vennligst sjekk det + Velg matrix.org + Velg Element Matrix Services + Alternativt, hvis du allerede har en konto og du kjenner din Matrix-identifikator og passordet ditt, kan du bruke denne metoden: + Logg på med Matrix ID + Hvis du oppretter en konto på en hjemmeserver, bruker du Matrix-ID (f.eks. @Bruker:domene.com) og passord nedenfor. + Logg på med Matrix ID + Hvis du ikke vet passordet ditt, kan du gå tilbake for å tilbakestille det. + Logg på igjen + Slett data + Vil du slette alle data som er lagret på denne enheten\? +\nLogg på igjen for å få tilgang til kontodataene og meldingene dine. + Du mister tilgangen til sikre meldinger med mindre du logger på for å gjenopprette krypteringsnøklene. + Slett data + Andre økter + Riste oppdaget! + Element kan krasje oftere når en uventet feil oppstår + Romadresse + Denne adressen er allerede i bruk + Oppgi romadresse + Noen tegn er ikke tillatt + Oppretter rom… + Ikke klarert pålogging + For ytterligere sikkerhet, bruk et annet pålitelig kommunikasjonsmiddel eller gjør dette personlig. + Se etter det grønne skjoldet for å sikre at en bruker er klarert. Stol på alle brukere i et rom for å sikre at rommet er sikkert. + Reagerte med: %s + %s avbrutt + %s akseptert + Skann koden med den andre brukerens enhet for å verifisere hverandre på en sikker måte + Kan ikke skanne + Skann koden deres + Venter på %s… + Meldinger i dette rommet er ikke kryptert fra ende-til-ende. + Meldinger her er ikke kryptert fra ende-til-ende. + Meldinger i dette rommet er kryptert fra ende-til-ende. +\n +\nMeldingene dine er sikret med låser, og bare du og mottakeren har de unike nøklene for å låse dem opp. + Meldinger her er kryptert fra ende-til-ende. +\n +\nMeldingene dine er sikret med låser, og bare du og mottakeren har de unike nøklene for å låse dem opp. + Rominnstillinger + Innstillinger + Forlat + Administratorer + Administrator i %1$s + Moderator i %1$s + Standard i %1$s + Direkte melding + Nylige rom + Andre rom + Aktiver end-to-end-kryptering… + Du har ikke tillatelse til å aktivere kryptering i dette rommet. + Når det er aktivert, kan ikke kryptering for et rom deaktiveres. Meldinger sendt i et kryptert rom kan ikke sees av serveren, bare av deltakerne i rommet. Aktivering av kryptering kan forhindre at mange bots og broer fungerer som de skal. + For å være trygg, gjør dette personlig eller bruk en annen måte å kommunisere på. + Sammenlign den unike emojien, slik at de vises i samme rekkefølge. + Sammenlign koden med den som vises på den andre brukerens skjerm. + Meldinger med denne brukeren er kryptert fra ende-til-ende og kan ikke leses av tredjeparter. + Den nye økten din er nå bekreftet. Den har tilgang til de krypterte meldingene dine, og andre brukere vil se det som pålitelig. + Logg av denne økten + Denne økten er klarert for sikker meldingstjeneste fordi du bekreftet den: + Bekreft denne økten for å merke den som klarert og gi den tilgang til krypterte meldinger. Hvis du ikke logget på denne økten, kan det hende at kontoen din er kompromittert: + Andre brukere stoler kanskje ikke på det + Fullstendig sikkerhet + Bruk en eksisterende økt for å bekrefte denne, og gi den tilgang til krypterte meldinger. + Inntil denne brukeren stoler på denne økten, blir meldinger sendt til og fra den merket med advarsler. Alternativt kan du bekrefte det manuelt. + Tilkoblingen til serveren har gått tapt + Flymodus er på + Kontodata + Vil du sende dette vedlegget til %1$s\? + Inkluder en grunn + Element Android + Ny pålogging. Var dette deg\? + Trykk for å se gjennom og bekrefte + Bruk denne økten til å bekrefte den nye, og gi den tilgang til krypterte meldinger. + Dette var ikke meg + Kontoen din kan være kompromittert + Hvis du avbryter, vil du ikke kunne lese krypterte meldinger på denne enheten, og andre brukere stoler ikke på det + Hvis du avbryter, vil du ikke kunne lese krypterte meldinger på den nye enheten din, og andre brukere stoler ikke på det + Bekreft enhetene dine fra Innstillinger. + Bekreftelsen avbrutt + Bruker passord + Skriv inn %s for å fortsette. + Ikke bruk kontopassordet ditt. + Skriv inn en sikkerhetsfrase bare du kjenner, brukt til å sikre hemmeligheter på serveren din. + Dette kan ta flere sekunder, vær tålmodig. + Du er ferdig! + Du kan ikke gjøre det fra mobil + Meldinger i dette rommet er kryptert fra ende-til-ende. Lær mer og verifiser brukere i profilen deres. + Meldinger i dette rommet er kryptert fra ende-til-ende. + Kryptering som brukes av dette rommet støttes ikke + %s opprettet og konfigurert rommet. + Du opprettet og konfigurerte rommet. + %s ble med. + Du ble med. + Dette er begynnelsen på %s. + Dette er begynnelsen på denne samtalen. + Dette er begynnelsen på historien om direkte meldinger med %s. + %s for å fortelle folk hva dette rommet handler om. + Legg til et emne + "Emne: " + Nesten der! Viser den andre enheten det samme skjoldet\? + Nesten der! Venter på bekreftelse… + Venter på %s… + Feil brukernavn og/eller passord. Det angitte passordet starter eller slutter med mellomrom, sjekk det. + Denne kontoen har blitt deaktivert. + Beskjed… + Krypteringsoppgradering tilgjengelig + Bekreft deg selv og andre for å sikre chattene dine + Forhindre skjermbilder av applikasjonen + Bruk det nyeste Element på de andre enhetene dine: + Har du glemt eller mistet alle gjenopprettingsalternativene\? Tilbakestill alt + Tilbakestill alt + Gjør dette bare hvis du ikke har noen annen enhet du kan bekrefte denne enheten med. + Hvis du tilbakestiller alt + Du starter på nytt uten historikk, ingen meldinger, pålitelige enheter eller pålitelige brukere + Kryptert av en ubekreftet enhet + Gjennomgå hvor du er logget inn + Bekreft alle øktene dine for å sikre at kontoen og meldingene dine er trygge + Bekreft den nye påloggingen som får tilgang til kontoen din: %1$s + Bekreft pålogging + Bekreft identiteten din ved å bekrefte denne påloggingen fra en av de andre øktene dine, og gi den tilgang til krypterte meldinger. + Bekreft identiteten din ved å bekrefte denne påloggingen, og gi den tilgang til krypterte meldinger. + Velg et brukernavn. + Velg passord. + Legg til personer + 🔐️ Bli med meg på element + Invitasjon sendt til %1$s + Det er ikke en gyldig QR-kode for matrix + Vi kunne ikke invitere brukere. Kontroller brukerne du vil invitere, og prøv på nytt. + Skann en QR-kode + Del koden min + Koden min + Del denne koden med folk slik at de kan skanne den for å legge til deg og begynne å chatte. + Laster inn tilgjengelige språk… + Godta først vilkårene for identitetsserveren i innstillingene. + For ditt privatliv støtter Element bare sending av hash-bruker-e-post og telefonnummer. + Sett rolle + Åpne chat + Legg til fra telefonboken min + Del på tekst + Du startet en samtale + %1$s startet en samtale + Du er for øyeblikket i denne samtalen + Du avviste denne samtalen %1$s + %1$s avviste denne samtalen + Denne samtalen er avsluttet + Ring tilbake + Det oppsto en feil med å slå opp telefonnummeret + Aktiv samtale (%1$s) + Overfør + Det oppstod en feil under overføring av samtalen + Brukere + Element krever at du oppgir legitimasjonen din for å utføre denne handlingen. + %1$dm %2$ds + Bakgrunnsforbindelse + Element kan kjøre i bakgrunnen for å administrere varslene dine sikkert og privat. Dette kan påvirke batteriforbruket. + Dette vil erstatte din nåværende nøkkel eller frase. + Generer en ny sikkerhetsnøkkel eller sett en ny sikkerhetsfrase for din eksisterende sikkerhetskopi. + Beskytt deg mot å miste tilgang til krypterte meldinger og data ved å sikkerhetskopiere krypteringsnøkler på serveren din. + Tilbakestill sikker sikkerhetskopiering + Konfigurer sikker sikkerhetskopiering + Sikker sikkerhetskopiering + Legg til en knapp på meldingskomponisten for å åpne emoji-tastaturet + Vis emoji-tastatur + Enter-knappen på det myke tastaturet vil sende melding i stedet for å legge til en linjeskift + Forhåndsvis media før sending + Vibrer når du nevner en bruker + Bruk kommandoen /confetti eller send en melding som inneholder ❄️ eller 🎉 + Klikk på lest kvitteringene for en detaljert liste. + Vis tidsstempler for alle meldinger + Formater meldinger med markdown-syntaksen før de sendes. Dette gir avansert formatering, for eksempel å bruke stjerner for å vise kursiv tekst. + La andre brukere vite at du skriver. + Telefonbok land + Kontakter tillatelse + Behold media + Tredjeparts varsler + + %d sekund + %d sekunder + + Kunne ikke oppdatere innstillingene. + Ingen bakgrunnssynkronisering + Optimalisert for sanntid + Optimalisert for batteri + Bakgrunnssynkronisering + Meldinger sendt av bot + Ring invitasjoner + Når jeg blir invitert til et rom + Velg LED-farge, vibrasjon, lyd… + • Varsler inneholder bare metadata + • Meldinger sendes via Firebase Cloud Messaging + Appen trenger tillatelse for å kjøre i bakgrunnen + Hvis en bruker lar en enhet være frakoblet og stasjonær i en periode, mens skjermen er slått av, går enheten i Døsemodus. Dette forhindrer apper i å få tilgang til nettverket og avviser jobber, synkroniseringer og standardalarmer. + Element påvirkes ikke av batterioptimalisering. + Meldingen er klikket! + Klikk på varselet. Hvis du ikke ser varselet, må du sjekke systeminnstillingene. + Varslingsvisning + Bytte tema + Oppgrader rommet + Endre tillatelser + Endre romnavn + Endre historie synlighet + Aktiver romkryptering + Endre hovedadresse for rommet + Bytt romavatar + Gi beskjed til alle + Fjern meldinger sendt av andre + Utesteng brukere + Spark brukere + Endre innstillinger + Inviter brukere + Send meldinger + Standard rolle + Du har ikke tillatelse til å oppdatere rollene som kreves for å endre forskjellige deler av rommet + Velg rollene som kreves for å endre forskjellige deler av rommet + Tillatelser + Se og oppdater rollene som kreves for å endre forskjellige deler av rommet. + Romtillatelser + Dette rommet er ikke offentlig. Du vil ikke kunne bli med uten invitasjon. + Du holdt samtalen + %s holdt samtalen + Sett på vent + Gjenoppta + Uautorisert, mangler gyldig autentiseringslegitimasjon + Tilbake + System standard \ No newline at end of file From 28d1510306f82c7ae68d315cf1a5e5f51e448587 Mon Sep 17 00:00:00 2001 From: Nikita Epifanov Date: Sun, 21 Feb 2021 18:36:18 +0000 Subject: [PATCH 059/578] Translated using Weblate (Russian) Currently translated at 99.8% (2077 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/ru/ --- vector/src/main/res/values-ru/strings.xml | 131 +++++++++++++--------- 1 file changed, 78 insertions(+), 53 deletions(-) diff --git a/vector/src/main/res/values-ru/strings.xml b/vector/src/main/res/values-ru/strings.xml index 8764831970..5025da3bdd 100644 --- a/vector/src/main/res/values-ru/strings.xml +++ b/vector/src/main/res/values-ru/strings.xml @@ -146,9 +146,9 @@ Забыли пароль? Использовать особые параметры сервера Проверьте email для продолжения регистрации - Регистрация одновременно по email и номеру телефона пока не поддерживается. Только номер телефона будет связан с аккаунтом. - -Вы можете добавить свой email в настройках профиля. + Регистрация одновременно по email и номеру телефона пока не поддерживается. Только номер телефона будет связан с аккаунтом. +\n +\nВы можете добавить свой email в настройках профиля. Проверка не являетесь ли вы роботом Логин уже используется Сервер: @@ -159,7 +159,9 @@ Должен быть введен новый пароль. На адрес %s было отправлено письмо. После перехода по ссылке в письме, нажмите ниже. Не удалось проверить email: убедитесь, что вы перешли по присланной ссылке - Ваш пароль сброшен. Осуществлен выход на всех сессиях - вы не будете получать push уведомления. Для включения push уведомлений заново войдите на каждом из ваших устройств. + Ваш пароль сброшен. +\n +\nОсуществлен выход на всех сессиях - вы не будете получать push уведомления. Для включения push уведомлений заново войдите на каждом из ваших устройств. URL должен начинаться с http[s]:// Сбой входа: сетевая ошибка @@ -222,8 +224,8 @@ Element необходимы разрешения на доступ к микрофону, чтобы выполнять звонки. \n\nПожалуйста разрешите доступ в следующем окне, чтобы иметь возможность совершать звонки. Element необходимы разрешения на доступ к камере и микрофону для видеовызовов. - -Пожалуйста дайте разрешение в следующем окне для звонка. +\n +\nПожалуйста дайте разрешение в следующем окне для звонка. Element может проверить вашу адресную книгу, чтобы найти других пользователей Matrix по их электронной почте и номерам телефонов. Если вы согласны поделиться своей адресной книгой для этой цели, пожалуйста, откройте доступ на следующем всплывающем окне. Element может проверить Вашу адресную книгу, чтобы найти других пользователей сети по email или телефонному номеру. \n @@ -278,7 +280,8 @@ ID пользователя, имя или email Упомянуть Отобразить список сессий - Вы не сможете отменить это действие, поскольку пользователь получит такой же уровень доступа, как и у вас. Вы уверены? + Вы не сможете отменить это действие, поскольку пользователь получит такой же уровень доступа, как и у вас. +\nВы уверены\? "Вы уверены что хотите пригласить %s в этот чат?" Пригласить по ID @@ -325,9 +328,9 @@ ПРИСОЕДИНИЛИСЬ Причина отчета о контенте - Вы хотите скрыть все сообщения этого пользователя? - -Учтите, что это действие перезапустит приложение и может занять некоторое время. + Вы хотите скрыть все сообщения этого пользователя\? +\n +\nУчтите, что это действие перезапустит приложение и может занять некоторое время. Отменить загрузку Отменить загрузку @@ -416,8 +419,8 @@ Обновить публичное имя Последнее подключение %1$s @ %2$s - Для этой операции требуется дополнительная проверка подлинности. -Чтобы продолжить, введите пароль. + Для этой операции требуется дополнительная проверка подлинности. +\nЧтобы продолжить, введите пароль. Аутентификация Пароль: Отправить @@ -436,9 +439,9 @@ Подтвердите новый пароль Не удалось обновить пароль Пароль был обновлен - Отображать сообщения пользователя %s? - -Учтите, что это действие перезапустит приложение и может занять некоторое время. + Отображать сообщения пользователя %s\? +\n +\nУчтите, что это действие перезапустит приложение и может занять некоторое время. Вы уверены, что хотите удалить устройство для получения уведомлений? Вы уверены, что хотите удалить %1$s %2$s? Выберите страну @@ -533,9 +536,9 @@ Экспорт Введите парольную фразу Подтвердите парольную фразу - E2E ключи комнаты сохранены в \'%s\'. - -Предупреждение: этот файл может быть удален после деинсталляции приложения. + E2E ключи комнаты сохранены в \'%s\'. +\n +\nПредупреждение: этот файл может быть удален после деинсталляции приложения. Импорт E2E ключей комнаты Импорт ключей комнаты Импортировать ключи из локального файла @@ -774,9 +777,9 @@ надежно от Matrix-Homeserver получено Отправить стикер Отправить стикер - У вас сейчас нет доступных стикеров. - -Добавить сейчас? + У вас сейчас нет доступных стикеров. +\n +\nДобавить сейчас\? Деактивация аккаунта Деактивировать мой аккаунт Отправка аналитических данных @@ -791,11 +794,11 @@ Пожалуйста, удалите все сообщения, которые я отправил, после деактивации моего аккаунта (предупреждение: будущие участники увидят неполную историю разговоров) Чтобы продолжить, введите пароль: Деактивировать аккаунт - Это действие сделает вашу учетную запись непригодной для дальнейшего использования. Вы не сможете войти в систему и никто другой не сможет заново зарегистрировать учетную запись с вашим идентификатором. Также, это приведет к тому, что вы покинете все комнаты, в которых участвовали и данные о вашей учетной записи будут удалены с сервера идентификации. Это действие необратимо. - -По умолчанию, деактивация вашей учетной записи не удаляет отправленные вами сообщения. Если вы хотите, чтобы мы удалили все ваши сообщения - поставьте отметку в поле ниже. - -Видимость сообщений в Matrix похожа на электронную почту. Удаление ваших сообщений означает, что отправленные вами сообщения не будут показаны новым или не зарегистрированным пользователям, но те пользователи, которые уже получили эти сообщения - по прежнему будут их видеть. + Это действие сделает вашу учетную запись непригодной для дальнейшего использования. Вы не сможете войти в систему и никто другой не сможет заново зарегистрировать учетную запись с вашим идентификатором. Также, это приведет к тому, что вы покинете все комнаты, в которых участвовали и данные о вашей учетной записи будут удалены с сервера идентификации. Это действие необратимо. +\n +\nПо умолчанию, деактивация вашей учетной записи не удаляет отправленные вами сообщения. Если вы хотите, чтобы мы удалили все ваши сообщения - поставьте отметку в поле ниже. +\n +\nВидимость сообщений в Matrix похожа на электронную почту. Удаление ваших сообщений означает, что отправленные вами сообщения не будут показаны новым или не зарегистрированным пользователям, но те пользователи, которые уже получили эти сообщения - по прежнему будут их видеть. Лицензии сторонних производителей Скачать Говорить @@ -937,13 +940,13 @@ Один или несколько тестов не пройдены, пожалуйста, отправьте отчет об ошибке, чтобы помочь нам исследовать проблему. Настройки системы. Уведомления включены в настройках системы. - Уведомления отключены в настройках системы. -Пожалуйста, проверьте настройки системы. + Уведомления отключены в настройках системы. +\nПожалуйста, проверьте настройки системы. Открыть настройки Настройки аккаунта. Уведомления включены для вашей учетной записи. - Уведомления отключены для вашей учетной записи. -Пожалуйста, проверьте настройки аккаунта. + Уведомления отключены для вашей учетной записи. +\nПожалуйста, проверьте настройки аккаунта. Включить Настройки сессии. Уведомления включены для этой сессии. @@ -952,22 +955,22 @@ Включить Проверка сервисов Play APK Google Play сервисов доступен и обновлён. - Element использует сервисы Google Play для доставки push-сообщений, но не похоже что он настроен правильно: -%1$s + Element использует сервисы Google Play для доставки push-сообщений, но не похоже что он настроен правильно: +\n%1$s Исправить сервисы Play Токен Firebase Токен FCM успешно получен: -%1$s - Не удалось получить токен FCM: -%1$s +\n%1$s + Не удалось получить токен FCM: +\n%1$s Регистрация токена Токен FCM успешно зарегистрирован на сервере. - Не удалось зарегистрировать токен FCM на сервере: -%1$s + Не удалось зарегистрировать токен FCM на сервере: +\n%1$s Служба уведомлений Служба уведомлений запущена. - Служба уведомлений не запущена. -Попробуйте перезапустить приложение. + Служба уведомлений не запущена. +\nПопробуйте перезапустить приложение. Запустить службу Автоматический перезапуск службы уведомлений Служба была убита и перезапущена автоматически. @@ -977,11 +980,11 @@ При перезагрузке устройства служба не будет запущена , вы не будете получать уведомления, пока Element не будет открыт один раз. Включить запуск при загрузке Проверьте фоновые ограничения - Фоновые ограничения отключены для Element. Этот тест должен быть запущен с использованием мобильных данных (без WIFI). -%1$s - Фоновые ограничения включены для Element. -Работа приложения будет жестко ограничена, пока оно находится в фоновом режиме, и это может повлиять на уведомления. -%1$s + Фоновые ограничения отключены для Element. Этот тест должен быть запущен с использованием мобильных данных (без WIFI). +\n%1$s + Фоновые ограничения включены для Element. +\nРабота приложения будет жестко ограничена, пока оно находится в фоновом режиме, и это может повлиять на уведомления. +\n%1$s Отключить ограничения Оптимизация батареи Оптимизация батареи не влияет на Element. @@ -995,8 +998,8 @@ Показывать события о вступлении/выходе Показывать события аккаунта Включает изменения аватара и отображаемого имени. - Необходимо минимизировать влияние на фоновое соединение для надёжности уведомлений. -На следующем экране вам будет предложено разрешить Райоту всегда работать в фоновом режиме, пожалуйста, примите. + Необходимо минимизировать влияние на фоновое соединение для надёжности уведомлений. +\nНа следующем экране вам будет предложено разрешить Райоту всегда работать в фоновом режиме, пожалуйста, примите. Использовать системную камеру вместо камеры Element. Показать информацию %1$s: @@ -1091,14 +1094,15 @@ Невозможно расшифровать резервную копию с помощью данного пароля: убедитесь, что вы ввели верный пароль. Ключи шифрования копируются на сервер в фоновом режиме. Первое копирование может занять несколько минут. Генерация ключей восстановления с использованием парольной фразы может занять несколько секунд. - Ключ восстановления был сохранен в \'%s\'. - -Предупреждение: этот файл может быть удален при удалении приложения. + Ключ восстановления был сохранен в \'%s\'. +\n +\nПредупреждение: этот файл может быть удален при удалении приложения. [%1$s] \nЭта ошибка вне контроля Element. На телефоне нет учетной записи Google. Пожалуйста, добавьте аккаунт Google. - [%1$s] -Эта ошибка вне контроля Element. Причины могут быть разными. Возможно, это будет работать, если вы повторите попытку позже, вы также можете проверить, что службы Google Play не ограничены в использовании данных в настройках системы, или что часы вашего устройства установлены правильно, или это может произойти на модифицированных прошивках. - [%1$s] Эта ошибка вне контроля Element, и, по словам Google, эта ошибка означает, что на устройстве слишком много приложений, зарегистрированных в FCM. Ошибка возникает только в тех случаях, когда существует огромное количество приложений, поэтому она не должна влиять на обычного пользователя. + [%1$s] +\nЭта ошибка вне контроля Element. Причины могут быть разными. Возможно, это будет работать, если вы повторите попытку позже, вы также можете проверить, что службы Google Play не ограничены в использовании данных в настройках системы, или что часы вашего устройства установлены правильно, или это может произойти на модифицированных прошивках. + [%1$s] +\nЭта ошибка вне контроля Element, и, по словам Google, эта ошибка означает, что на устройстве слишком много приложений, зарегистрированных в FCM. Ошибка возникает только в тех случаях, когда существует огромное количество приложений, поэтому она не должна влиять на обычного пользователя. Ваши зашифрованные сообщения будут потеряны, если выйдете сейчас Выполняется резервное копирование ключа. Если выйти сейчас, Вы потеряете доступ к Вашим зашифрованным сообщениям. Мне не нужны мои зашифрованные сообщения @@ -1151,7 +1155,8 @@ Зашифрованная копия ключей будет храниться на вашем сервере. Для безопасности защитите её парольной фразой. \n \nДля максимальной безопасности парольная фраза должна отличаться от пароля вашей учётной записи. - Ключ восстановления — это страховка, вы можете использовать его для восстановления доступа к вашим зашифрованным сообщениям, если забудете вашу парольную фразу. Храните ключ восстановления в надёжном месте, например, в диспетчере паролей (или в сейфе) + Ключ восстановления — это страховка, вы можете использовать его для восстановления доступа к вашим зашифрованным сообщениям, если забудете вашу парольную фразу. +\nХраните ключ восстановления в надёжном месте, например, в диспетчере паролей (или в сейфе) Импортирование ключей… Скачивание ключей… Вычисление ключа восстановления… @@ -1504,6 +1509,7 @@ Введите адрес Modular Element или сервера, который вы хотите использовать Произошла ошибка при загрузке страницы: %1$s (%2$d) Приложение не может войти на этот сервер, так как он поддерживает следующие типы входа: %1$s. +\n \nВы хотите войти с помощью веб-клиента\? Извините, этот сервер не принимает новые учётные записи. Приложение не может создать учётную запись на этом домашнем сервере. @@ -2445,4 +2451,23 @@ %s поставил вызов на удержание Удерживать Возобновить + Пользователи + Произошла ошибка при переводе вызова + Перевод + Соединиться + Сначала спросить + + 1 активный вызов (%1$s) · 1 приостановленный вызов + 1 активный вызов (%1$s) · %2$d приостановленных вызова + 1 активный вызов (%1$s) · %2$d приостановленных вызовов + 1 активный вызов (%1$s) · %2$d приостановленных вызовов + + + Приостановленный вызов + %1$d приостановленных вызова + %1$d приостановленных вызовов + %1$d приостановленных вызовов + + Нет учётных данных, неправильная учётная запись пользователя и/или пароль + Вернуть \ No newline at end of file From 5317f26791d3875570385a9428b1d8e5bbcb8225 Mon Sep 17 00:00:00 2001 From: LinAGKar Date: Sun, 21 Feb 2021 12:24:44 +0000 Subject: [PATCH 060/578] Translated using Weblate (Swedish) Currently translated at 100.0% (2081 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/sv/ --- vector/src/main/res/values-sv/strings.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/vector/src/main/res/values-sv/strings.xml b/vector/src/main/res/values-sv/strings.xml index c8aa5824db..b2bf64234c 100644 --- a/vector/src/main/res/values-sv/strings.xml +++ b/vector/src/main/res/values-sv/strings.xml @@ -40,7 +40,7 @@ Skicka Skicka igen Ta bort - Citat + Citera Ladda ner Dela Prata @@ -256,7 +256,7 @@ Grupplista %d medlemsskapsändring - %s medlemsskapsändringar + %d medlemsskapsändringar Skicka som Original @@ -849,11 +849,11 @@ Välj en rumskatalog %d oläst aviserat meddelande - %s olästa aviserade meddelanden + %d olästa aviserade meddelanden %d oläst aviserat meddelande - %s olästa aviserade meddelanden + %d olästa aviserade meddelanden %1$s: %2$d meddelande From d476dbcdda0240665b6e677217b8a0702708b017 Mon Sep 17 00:00:00 2001 From: ppnplusdf0eb2eb726b4bb3 Date: Tue, 23 Feb 2021 02:49:09 +0000 Subject: [PATCH 061/578] Translated using Weblate (Thai) Currently translated at 7.7% (161 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/th/ --- vector/src/main/res/values-th/strings.xml | 95 +++++++++++++++++++---- 1 file changed, 81 insertions(+), 14 deletions(-) diff --git a/vector/src/main/res/values-th/strings.xml b/vector/src/main/res/values-th/strings.xml index ed3cd5614c..f583723f75 100644 --- a/vector/src/main/res/values-th/strings.xml +++ b/vector/src/main/res/values-th/strings.xml @@ -1,14 +1,11 @@ - + หรือ เปิด ปิด ปิดใช้งาน - คำเตือน - อ่านแล้ว - ข้าม รหัสผ่าน รหัสผ่านใหม่ @@ -28,10 +25,8 @@ ลบ เปลี่ยนชื่อ ข้าม - ส่งสติกเกอร์ กำลังโหลด… - ส่งต่อ ไม่มี รายงานเนื้อหา @@ -44,21 +39,17 @@ ผู้คน ห้อง ชุมชน - การเชิญ การแจ้งเตือนจากระบบ - คุณไม่ได้อนุญาตให้ Element เข้าถึงรายชื่อผู้ติดต่อในเครื่อง ไม่มีผลลัพธ์ ไม่มีห้อง ผู้ใช้ %d คน - เชิญ ชุมชน ไม่มีกลุ่ม - ถ้าเป็นไปได้ โปรดเขียนคำอธิบายเป็นภาษาอังกฤษ อธิบายปัญหาของคุณที่นี่ ส่งไปยัง @@ -68,11 +59,9 @@ เข้าสู่ระบบ ออกจากระบบ ค้นหา - เริ่มแชทใหม่ ลองโดยใช้ %s ไม่ต้องถามฉันอีก - เลือกอุปกรณ์เสียง โทรศัพท์ ลำโพง @@ -83,7 +72,6 @@ หลัง ปิด HD เปิด HD - ส่งสติกเกอร์ เข้าสู่ระบบ สร้างบัญชี @@ -97,4 +85,83 @@ หมายเลขโทรศัพท์ หมายเลขโทรศัพท์ (ไม่จำเป็น) รหัสผ่านสั้นเกินไป (อย่างน้อย 6 ตัว) - + ข้อมูล + ถ่ายภาพหรือวิดีโอ + กำลังโทร… + โทร + การโทร + ชื่อห้อง + วันนี้ + เมื่อวาน + %1$d นาที %2$d วิ + %d วิ + ขนาดเล็ก + ขนาดกลาง + ขนาดใหญ่ + ต้นฉบับ + ส่งเป็น + รายการกลุ่ม + ชื่อผู้ใช้นี้ถูกใช้ไปแล้ว + ชื่อผู้ใช้/รหัสผ่านไม่ถูกต้อง + ข้อผิดพลาด SSL + ไม่สามารถเข้าสู่ระบบ + ชื่อผู้ใช้ถูกใช้แล้ว + กรุณาตรวจสอบอีเมลเพื่อดำเนินการลงทะเบียนต่อไป + ลืมรหัสผ่าน\? + รหัสผ่านไม่ตรงกัน + ไม่ได้ใส่รหัสผ่าน + ชื่อผู้ใช้ และ/หรือ รหัสผ่านไม่ถูกต้อง + ยืนยันรหัสผ่านใหม่ + ใส่รหัสผ่านอีกครั้ง + ถ่ายวิดีโอ + ถ่ายภาพ + เริ่มการโทรวิดีโอ + เริ่มการโทรเสียง + ความคืบหน้า (%s%%) + ไดเรกทอรีห้อง + ห้อง + ไม่มีผลลัพธ์เพิ่มเติม + ไม่มีการสนทนา + การสนทนา + ลำดับความสำคัญต่ำ + รายการโปรด + ข้อผิดพลาด + สำเร็จ + การยืนยัน + คัดลอกไปยังคลิปบอร์ดแล้ว + เลิกเผยแพร่ + เพิ่ม + คัดลอก + ตอบกลับด่วน + การโทรวิดีโอ + การโทรเสียง + ออกจากระบบ + ออก + วางสาย + ปฏิเสธ + ยอมรับ + ปฏิเสธ + เพิกเฉย + เรียบร้อย + ยอมรับ + ออฟไลน์ + เชิญ + ข้อมูลเซสชั่น + ไม่สามารถเริ่มการโทร + เริ่มการประชุมเสียง + เริ่มการประชุมวิดีโอ + เริ่มสนทนา + รีเซ็ต + ปิดทิ้ง + เลิกเชื่อมต่อ + ดูต้นฉบับที่ถอดรหัสแล้ว + ดูต้นฉบับ + ไว้ภายหลัง + ลบออก + ส่งซ้ำ + อยู่ + สำรองข้อมูล + คุณแน่ใจหรือไม่\? + ข้อมูลชุมชน + ค่าเริ่มต้นของระบบ + \ No newline at end of file From dc4d2fc15decb0928064eb0d481a4603cfff6643 Mon Sep 17 00:00:00 2001 From: XoseM Date: Mon, 22 Feb 2021 06:37:04 +0000 Subject: [PATCH 062/578] Translated using Weblate (Galician) Currently translated at 100.0% (226 of 226 strings) Translation: Element Android/Element Android Sdk Translate-URL: https://translate.element.io/projects/element-android/element-sdk/gl/ --- .../src/main/res/values-gl/strings.xml | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/matrix-sdk-android/src/main/res/values-gl/strings.xml b/matrix-sdk-android/src/main/res/values-gl/strings.xml index 55d59065c9..208b1e9d13 100644 --- a/matrix-sdk-android/src/main/res/values-gl/strings.xml +++ b/matrix-sdk-android/src/main/res/values-gl/strings.xml @@ -211,4 +211,57 @@ %1$s engadiu %2$s como enderezo desta sala. %1$s engadiu %2$s como enderezos desta sala. + %s solicita verificar a túa chave, pero o teu cliente non soporta a verificación de chaves nos chats. Necesitarás usar o método antigo de verificación de chaves. + Activaches o cifrado extremo-a-extremo (algoritmo non recoñecido %1$s). + %1$s activou o cifrado extremo-a-extrem (algoritmo non recoñecible %2$s). + Activaches o cifrado extremo-a-extremo. + %1$s activou o cifrado extremo-a-extremo. + Non permites que as convidadas se unan á sala. + %1$s non permite que as usuarias se unan á sala. + Non permites que as convidadas se unan á sala. + %1$s non permite que as convidadas se unan á sala. + Permitiches que as convidadas se unan aquí. + %1$s permitiu que as convidadas se unan aquí. + Permitiches que as convidadas se unan á sala. + %1$s permite que as convidadas se unan á sala. + Cambiaches os enderezos desta sala. + %1$s cambiou os enderezos desta sala. + Cambiaches os enderezos principal e alternativo para esta sala. + %1$s cambiou os enderezos alternativo e principal para esta sala. + Cambiaches os enderezos alternativos para esta sala. + %1$s cambiou os enderezos alternativos para esta sala. + + Eliminaches o enderezo alternativo %1$s para esta sala. + Eliminaches os enderezos alternativos %1$s para esta sala. + + + %1$s eliminou o enderezo alternativo %2$s para esta sala. + %1$s eliminou os enderezos alternativos %2$s para esta sala. + + + Engadiches o enderezo alternativo %1$s para esta sala. + Engadiches os enderezos alternativos %1$s para esta sala. + + + %1$s engadiu o enderezo alternativo %2$s para esta sala. + %1$s engadiu os enderezos alternativos %2$s para esta sala. + + Eliminaches o enderezo principal desta sala. + %1$s eliminou o enderezo principal desta sala. + Estableceches %1$s como enderezo principal desta sala. + %1$s estableceu %2$s como enderezo principal desta sala. + Engadiches %1$s e eliminaches %2$s como enderezos desta sala. + %1$s engadiu %2$s e eliminou %3$s como enderezos desta sala. + + Eliminaches %1$s como enderezo desta sala. + Eliminaches %1$s como enderezos desta sala. + + + %1$s eliminou %2$s como enderezo desta sala. + %1$s eliminou %2$s como enderezos desta sala. + + + Engadiches %1$s como enderezo para esta sala. + Engadiches %1$s como enderezos para esta sala. + \ No newline at end of file From 8f02c52a2687ce60e78e605a198248a0a8ecd10c Mon Sep 17 00:00:00 2001 From: Nikita Epifanov Date: Sun, 21 Feb 2021 18:40:28 +0000 Subject: [PATCH 063/578] Translated using Weblate (Russian) Currently translated at 100.0% (226 of 226 strings) Translation: Element Android/Element Android Sdk Translate-URL: https://translate.element.io/projects/element-android/element-sdk/ru/ --- matrix-sdk-android/src/main/res/values-ru/strings.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/matrix-sdk-android/src/main/res/values-ru/strings.xml b/matrix-sdk-android/src/main/res/values-ru/strings.xml index f2e0bd668f..b317e04908 100644 --- a/matrix-sdk-android/src/main/res/values-ru/strings.xml +++ b/matrix-sdk-android/src/main/res/values-ru/strings.xml @@ -282,4 +282,10 @@ %1$s добавил(а) альтернативные адреса %2$s для этой комнаты. %1$s добавил(а) альтернативные адреса %2$s для этой комнаты. + Вы изменили видеоконференцию + %1$s изменил(а) видеоконференцию + Вы завершили видеоконференцию + %1$s завершил(а) видеоконференцию + Вы начали видеоконференцию + %1$s начал(а) видеоконференцию \ No newline at end of file From ae4062828d13b12a785947fa7fb62d955eede790 Mon Sep 17 00:00:00 2001 From: Martin Johansen Date: Sun, 21 Feb 2021 23:07:47 +0000 Subject: [PATCH 064/578] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?= =?UTF-8?q?an=20Bokm=C3=A5l=20(nb))?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 3.9% (9 of 226 strings) Translation: Element Android/Element Android Sdk Translate-URL: https://translate.element.io/projects/element-android/element-sdk/nb/ --- matrix-sdk-android/src/main/res/values-nb/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/matrix-sdk-android/src/main/res/values-nb/strings.xml b/matrix-sdk-android/src/main/res/values-nb/strings.xml index 07cf4226e0..3a7caefc55 100644 --- a/matrix-sdk-android/src/main/res/values-nb/strings.xml +++ b/matrix-sdk-android/src/main/res/values-nb/strings.xml @@ -8,4 +8,5 @@ Du sendte et bilde. %1$s sendte et bilde. %1$s: %2$s + %1$s skapte rommet \ No newline at end of file From ab52395d1a8f19a66c7ad00f5bc0a3817cb5f773 Mon Sep 17 00:00:00 2001 From: zeritti Date: Mon, 22 Feb 2021 18:30:23 +0000 Subject: [PATCH 065/578] Translated using Weblate (Czech) Currently translated at 100.0% (11 of 11 strings) Translation: Element Android/Element Android Store Translate-URL: https://translate.element.io/projects/element-android/element-store/cs/ --- fastlane/metadata/android/cs/changelogs/40100140.txt | 2 ++ fastlane/metadata/android/cs/changelogs/40100150.txt | 2 ++ fastlane/metadata/android/cs/changelogs/40100160.txt | 2 ++ fastlane/metadata/android/cs/changelogs/40100170.txt | 2 ++ 4 files changed, 8 insertions(+) create mode 100644 fastlane/metadata/android/cs/changelogs/40100140.txt create mode 100644 fastlane/metadata/android/cs/changelogs/40100150.txt create mode 100644 fastlane/metadata/android/cs/changelogs/40100160.txt create mode 100644 fastlane/metadata/android/cs/changelogs/40100170.txt diff --git a/fastlane/metadata/android/cs/changelogs/40100140.txt b/fastlane/metadata/android/cs/changelogs/40100140.txt new file mode 100644 index 0000000000..2c9c568c8d --- /dev/null +++ b/fastlane/metadata/android/cs/changelogs/40100140.txt @@ -0,0 +1,2 @@ +Hlavní změny v této verzi: Úpravy práv místností, automatický tmavý/světlý vzhled a řada oprav chyb. +Úplný záznam změn: https://github.com/vector-im/element-android/releases/tag/v1.0.14 diff --git a/fastlane/metadata/android/cs/changelogs/40100150.txt b/fastlane/metadata/android/cs/changelogs/40100150.txt new file mode 100644 index 0000000000..7976d97411 --- /dev/null +++ b/fastlane/metadata/android/cs/changelogs/40100150.txt @@ -0,0 +1,2 @@ +Hlavní změny v této verzi: Podpora přihlášení v sociálních sítích. +Úplný záznam změn: https://github.com/vector-im/element-android/releases/tag/v1.0.15 diff --git a/fastlane/metadata/android/cs/changelogs/40100160.txt b/fastlane/metadata/android/cs/changelogs/40100160.txt new file mode 100644 index 0000000000..2cc6c65207 --- /dev/null +++ b/fastlane/metadata/android/cs/changelogs/40100160.txt @@ -0,0 +1,2 @@ +Hlavní změny v této verzi: Podpora přihlášení v sociálních sítích. +Úplný záznam změn: https://github.com/vector-im/element-android/releases/tag/v1.0.15 a https://github.com/vector-im/element-android/releases/tag/v1.0.16 diff --git a/fastlane/metadata/android/cs/changelogs/40100170.txt b/fastlane/metadata/android/cs/changelogs/40100170.txt new file mode 100644 index 0000000000..693ff3fbaf --- /dev/null +++ b/fastlane/metadata/android/cs/changelogs/40100170.txt @@ -0,0 +1,2 @@ +Hlavní změny v této verzi: Opravy chyb! +Úplný záznam změn: https://github.com/vector-im/element-android/releases/tag/v1.0.17 From cccaf669a5ee4112e235e3338c7fd5756bc0dfcf Mon Sep 17 00:00:00 2001 From: vachan-maker Date: Mon, 22 Feb 2021 09:02:37 +0000 Subject: [PATCH 066/578] Translated using Weblate (Malayalam) Currently translated at 16.3% (340 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/ml/ --- vector/src/main/res/values-ml/strings.xml | 151 +++++++++++++++++++++- 1 file changed, 150 insertions(+), 1 deletion(-) diff --git a/vector/src/main/res/values-ml/strings.xml b/vector/src/main/res/values-ml/strings.xml index 1f66b9ec40..c09b6a5649 100644 --- a/vector/src/main/res/values-ml/strings.xml +++ b/vector/src/main/res/values-ml/strings.xml @@ -92,7 +92,7 @@ മുറി സന്ദേശങ്ങൾ നിശബ്‌ദ അറിയിപ്പുകൾ - സമന്വയിപ്പിക്കുന്നു + സമന്വയിപ്പിക്കുന്നു… ഫോൺ നമ്പർ (നിർബന്ധമല്ല) ഫോൺ നമ്പർ ഒഴിവാക്കൂ @@ -207,4 +207,153 @@ സ്വീകരിക്കുക പിന്നീട് വോയ്സ് + Matrix ഉപയോക്താക്കൾ മാത്രം + ക്ഷണം റദ്ദാക്കൂ + സൂചിപ്പിക്കൂ + നേരിട്ടുള്ള സന്ദേശങ്ങൾ + വിളിക്കൂ + അഡ്മിൻ ഉപകരണ്ങ്ങൾ + അംഗങ്ങളെ കാണിക്കൂ + ഒരു ചിത്രം അല്ലെങ്കിൽ വീഡിയോ എടുക്കൂ + കോൾ അവസാനിച്ചൂ + വിളിക്കുന്നൂ… + വിളിക്കൂ + ഡൗൺലോഡ് റദ്ദാക്കണോ\? + ഒരു പുതിയ രഹസ്യവാക്ക് നൽകണം. + ഞാൻ എന്റെ ഈമെയിൽ വിലാസം ഉറപ്പാക്കി + രഹസ്യവാക്ക് മറന്നോ\? + രഹസ്യവാക്കുകൾ പൊരുത്തപെടുന്നില്ല + നിങ്ങളുടെ പുതിയ രഹസ്യവാക്ക് ഉറപ്പാക്കൂ + രഹസ്യവാക്ക് ആവർത്തിക്കൂ + ഈ - മെയിൽ വിലാസം (നിർബന്ധമല്ല) + ക്യാമറ മാറ്റുക + ഉപയോക്തൃനാമം + പുതിയ രഹസ്യവാക്ക് + രഹസ്യവാക്ക് + ഇമെയിൽ അല്ലെങ്കിൽ ഉപയോക്തൃനാമം + തുടരുക… + Element കോൾ പരാജയപ്പെട്ടു + ശബ്ദം അയയ്ക്കൂ + ഹോം സെർവർ URL + പൊതു മുറിക‍ൾ ഒന്നും ലഭ്യമല്ല + മടങ്ങുക + ഈ മുറിയിൽ ഒരു കോൾ ആരംഭിക്കാൻ നിങ്ങൾക്ക് അനുവാദമില്ല + സജീവ കോൾ + HD ഓൺ ആക്കൂ + HD ഓഫ് ആക്കൂ + %s ഉപയോഗിച്ച് നോക്കൂ + ബഗ്ഗ് റിപ്പോർട്ട് ചെയ്യൂ + + %d ഉപയോക്താവ് + %d ഉപയോക്താക്കൾ + + മുറി നാമങ്ങൾ ഫിൽറ്റർ ചെയ്യൂ + എന്തായാലും അയയ്ക്കൂ + കീ ബാക്കപ്പ് + Status.im തീം + കറുത്ത തീം + ഡാ൪ക്ക് തീം + ലൈറ്റ് തീം + സേവനം സമാരംഭിക്കുന്നു + സിസ്റ്റം സ്ഥിരസ്ഥിതി + വിഷയം + കോഡ് + രാജ്യം + ഭാഷ + സമർപ്പിക്കൂ + സെഷനുകൾ + വിപുലമായ + മറ്റുള്ളവ + അറിയിപ്പുകൾ + സാധാരണ + ക്രമീകരണങ്ങൾ + സന്ദേശങ്ങൾ + മറക്കൂ + മുറികൾ + ഫയലുകൾ + ആളുകൾ + സന്ദേശങ്ങൾ + മുറികൾ + ചേർന്നു + ക്ഷണിച്ചു + ക്രമീകരണങ്ങൾ + ഫയലുകൾ + ആളുകൾ + അനുമതികൾ + കാരണം + പുറത്താക്കൂ + നിരോധിക്കൂ + പുനഃസജ്ജമാക്കൂ + ഒന്നുമില്ല + സജീവ കോൾ () + %1$s ഈ കോൾ നിരസിച്ചു + അത് ഞാൻ ആയിരുന്നു + പൂർത്തിയാക്കൂ + നിങ്ങൾ ചെയ്തു! + %s ഉറപ്പാക്കൂ + പുതിയ പ്രവേശനം. ഇത് നിങ്ങളാണോ\? + തിരയുക + കൂടുതൽ ഫലങ്ങളൊന്നുമില്ല + സിസ്റ്റം അലേർട്ടുകൾ + ഹോം + എന്തായാലും വിളിക്കൂ + ആഗോള തിരയൽ + നിരസിക്കുക + പ്ലേ + പെർമാലിങ്ക് + മൂന്നാം കക്ഷി ലൈസൻസുകൾ + മുന്നറിയിപ്പ് + ഉറപ്പാക്കൂ + ഈ പ്രവേശനം ഉറപ്പാക്കൂ + എല്ലാ സെഷനുകളും കാണിക്കൂ + സജീവ സെഷനുകൾ + എൻ‌ക്രിപ്ഷൻ പ്രാപ്തമാക്കൂ + സമയരേഖ + മറ്റ് മുറികൾ + സമീപകാല മുറികൾ + നേരിട്ടുള്ള സന്ദേശം + %1$s-ലെ അഡ്മിൻ + ഉപയോക്താക്കൾ + അഡ്‌മിനുകൾ + അപ്‌ലോഡുകൾ + + ഒരു വ്യക്തി + %1$d ആളുകൾ + + അറിയിപ്പുകൾ + ക്രമീകരണങ്ങൾ + മുറി ക്രമീകരണങ്ങൾ + അഡ്മിൻ പ്രവർത്തനങ്ങൾ + കൂടുതൽ + കൂടുതൽ അറിയുക + അവരുടെ കോഡ് സ്കാൻ ചെയ്യൂ + നിങ്ങൾ + സ്റ്റിക്കർ + ഫയൽ + ഓഡിയോ + സുരക്ഷിതമല്ല + അവ പൊരുത്തപ്പെടുന്നു + മുറി സൃഷ്ടിക്കുന്നൂ… + മുറിയുടെ വിലാസം + വിപുലമായത് കാണിക്കൂ + വിപുലമായത് കാണിക്കൂ + എൻ‌ക്രിപ്ഷൻ പ്രാപ്തമാക്കൂ + ക്രമീകരണങ്ങൾ + വിപുല ക്രമീകരണങ്ങൾ + എന്റെ എല്ലാ സെഷനുകളും കാണുക + സ്വകാര്യ ഡാറ്റ മായ്ക്കൂ + കണ്ടവർ + ഡാറ്റ മായ്ക്കൂ + എല്ലാ ഡാറ്റയും മായ്ക്കൂ + വിവരണം വളരെ ചെറുതാണ് + മറ്റ് സെഷനുകൾ + നിലവിലെ സെഷൻ + ദയവായി ഒരു മുറിയുടെ വിലാസം നൽകുക + ചിത്രം. + വീഡിയോ. + നിങ്ങൾ സ്വീകരിച്ചു + %s സ്വീകരിച്ചു + നിങ്ങൾ റദ്ദാക്കി + %s റദ്ദാക്കി + കാത്തിരിക്കുന്നൂ… \ No newline at end of file From c938795576b098a4288a1f4025e59a689ed64701 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 22 Jan 2021 17:17:42 +0100 Subject: [PATCH 067/578] Read init sync to a file and split into smaller files to handle it --- CHANGES.md | 1 + ...ventInsertType.java => EventInsertType.kt} | 4 +- .../android/sdk/internal/di/MoshiProvider.kt | 2 + .../notification/ProcessEventForPushTask.kt | 4 +- .../sync/InitialSyncStatusRepository.kt | 111 +++++++++++++ .../session/sync/InitialSyncStrategy.kt | 53 ++++++ .../internal/session/sync/RoomSyncHandler.kt | 70 ++++++-- .../sdk/internal/session/sync/SyncAPI.kt | 13 ++ .../sdk/internal/session/sync/SyncTask.kt | 152 +++++++++++++++++- .../session/sync/model/LazyRoomSync.kt | 44 +++++ .../sync/model/LazyRoomSyncJsonAdapter.kt | 90 +++++++++++ .../session/sync/model/RoomsSyncResponse.kt | 2 +- .../android/sdk/internal/util/LogUtil.kt | 29 ++++ .../src/main/res/values/strings.xml | 2 + .../vector/app/features/home/HomeActivity.kt | 18 +++ vector/src/main/res/menu/home.xml | 13 +- 16 files changed, 583 insertions(+), 25 deletions(-) rename matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/{EventInsertType.java => EventInsertType.kt} (88%) create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/InitialSyncStatusRepository.kt create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/InitialSyncStrategy.kt create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/LazyRoomSync.kt create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/LazyRoomSyncJsonAdapter.kt create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/LogUtil.kt diff --git a/CHANGES.md b/CHANGES.md index 46057a37ec..930068dd6c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -90,6 +90,7 @@ Improvements 🙌: - SSO support for cross signing (#1062) - Deactivate account when logged in with SSO (#1264) - SSO UIA doesn't work (#2754) + - Improve initial sync performance (#983) Bugfix 🐛: - Fix clear cache issue: sometimes, after a clear cache, there is still a token, so the init sync service is not started. diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EventInsertType.java b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EventInsertType.kt similarity index 88% rename from matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EventInsertType.java rename to matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EventInsertType.kt index 05153c5734..463ccb2f46 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EventInsertType.java +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EventInsertType.kt @@ -14,9 +14,9 @@ * limitations under the License. */ -package org.matrix.android.sdk.internal.database.model; +package org.matrix.android.sdk.internal.database.model -public enum EventInsertType { +internal enum class EventInsertType { INITIAL_SYNC, INCREMENTAL_SYNC, PAGINATION, diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/MoshiProvider.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/MoshiProvider.kt index 48fa41b350..c0595a9273 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/MoshiProvider.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/MoshiProvider.kt @@ -36,6 +36,7 @@ import org.matrix.android.sdk.internal.network.parsing.ForceToBooleanJsonAdapter import org.matrix.android.sdk.internal.network.parsing.RuntimeJsonAdapterFactory import org.matrix.android.sdk.internal.network.parsing.TlsVersionMoshiAdapter import org.matrix.android.sdk.internal.network.parsing.UriMoshiAdapter +import org.matrix.android.sdk.internal.session.sync.model.LazyRoomSyncJsonAdapter object MoshiProvider { @@ -44,6 +45,7 @@ object MoshiProvider { .add(ForceToBooleanJsonAdapter()) .add(CipherSuiteMoshiAdapter()) .add(TlsVersionMoshiAdapter()) + .add(LazyRoomSyncJsonAdapter()) .add(RuntimeJsonAdapterFactory.of(MessageContent::class.java, "msgtype", MessageDefaultContent::class.java) .registerSubtype(MessageTextContent::class.java, MessageType.MSGTYPE_TEXT) .registerSubtype(MessageNoticeContent::class.java, MessageType.MSGTYPE_NOTICE) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/notification/ProcessEventForPushTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/notification/ProcessEventForPushTask.kt index 7763251a01..4754265c49 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/notification/ProcessEventForPushTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/notification/ProcessEventForPushTask.kt @@ -50,7 +50,7 @@ internal class DefaultProcessEventForPushTask @Inject constructor( } val newJoinEvents = params.syncResponse.join .mapNotNull { (key, value) -> - value.timeline?.events?.map { it.copy(roomId = key) } + value.roomSync.timeline?.events?.map { it.copy(roomId = key) } } .flatten() val inviteEvents = params.syncResponse.invite @@ -80,7 +80,7 @@ internal class DefaultProcessEventForPushTask @Inject constructor( val allRedactedEvents = params.syncResponse.join .asSequence() - .mapNotNull { (_, value) -> value.timeline?.events } + .mapNotNull { (_, value) -> value.roomSync.timeline?.events } .flatten() .filter { it.type == EventType.REDACTION } .mapNotNull { it.redacts } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/InitialSyncStatusRepository.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/InitialSyncStatusRepository.kt new file mode 100644 index 0000000000..4b82ecc3e5 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/InitialSyncStatusRepository.kt @@ -0,0 +1,111 @@ +/* + * Copyright 2020 The Matrix.org Foundation C.I.C. + * + * 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. + */ + +package org.matrix.android.sdk.internal.session.sync + +import com.squareup.moshi.JsonClass +import okio.buffer +import okio.source +import org.matrix.android.sdk.internal.di.MoshiProvider +import timber.log.Timber +import java.io.File + +@JsonClass(generateAdapter = true) +internal data class InitialSyncStatus( + val step: Int = STEP_INIT, + val downloadedDate: Long = 0 +) { + companion object { + const val STEP_INIT = 0 + const val STEP_DOWNLOADING = 1 + const val STEP_DOWNLOADED = 2 + const val STEP_PARSED = 3 + const val STEP_SUCCESS = 4 + } +} + +internal interface InitialSyncStatusRepository { + fun getStep(): Int + + fun setStep(step: Int) +} + +/** + * This class handle the current status of an initial sync and persist it on the disk, to be robust against crash + */ +internal class FileInitialSyncStatusRepository(directory: File) : InitialSyncStatusRepository { + + companion object { + // After 2 hours, we consider that the downloaded file is outdated: + // - if a problem occurs, it's for big accounts, and big accounts have lots of new events in 2 hours + // - For small accounts, there should be no problem, so 2 hours delay will never be used. + private const val INIT_SYNC_FILE_LIFETIME = 2 * 60 * 60 * 1_000L + } + + private val file = File(directory, "status.json") + private val jsonAdapter = MoshiProvider.providesMoshi().adapter(InitialSyncStatus::class.java) + + private var cache: InitialSyncStatus? = null + + override fun getStep(): Int { + ensureCache() + val state = cache?.step ?: InitialSyncStatus.STEP_INIT + return if (state >= InitialSyncStatus.STEP_DOWNLOADED + && System.currentTimeMillis() > (cache?.downloadedDate ?: 0) + INIT_SYNC_FILE_LIFETIME) { + Timber.v("INIT_SYNC downloaded file is outdated, download it again") + // The downloaded file is outdated + setStep(InitialSyncStatus.STEP_INIT) + InitialSyncStatus.STEP_INIT + } else { + state + } + } + + override fun setStep(step: Int) { + var newStatus = cache?.copy(step = step) ?: InitialSyncStatus(step = step) + if (step == InitialSyncStatus.STEP_DOWNLOADED) { + // Also store the downloaded date + newStatus = newStatus.copy( + downloadedDate = System.currentTimeMillis() + ) + } + cache = newStatus + writeFile() + } + + private fun ensureCache() { + if (cache == null) readFile() + } + + /** + * File -> Cache + */ + private fun readFile() { + cache = file + .takeIf { it.exists() } + ?.let { jsonAdapter.fromJson(it.source().buffer()) } + } + + /** + * Cache -> File + */ + private fun writeFile() { + file.delete() + cache + ?.let { jsonAdapter.toJson(it) } + ?.let { file.writeText(it) } + } +} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/InitialSyncStrategy.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/InitialSyncStrategy.kt new file mode 100644 index 0000000000..fca92870ca --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/InitialSyncStrategy.kt @@ -0,0 +1,53 @@ +/* + * Copyright 2020 The Matrix.org Foundation C.I.C. + * + * 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. + */ + +package org.matrix.android.sdk.internal.session.sync + +var initialSyncStrategy: InitialSyncStrategy = InitialSyncStrategy.Optimized() + +sealed class InitialSyncStrategy { + /** + * Parse the result in its entirety + * Pros: + * - Faster to handle parsed data + * Cons: + * - Slower to download and parse data + * - big RAM usage + * - not robust to crash + */ + object Legacy : InitialSyncStrategy() + + /** + * Optimized. + * First store the request result in a file, to avoid doing it again in case of crash + */ + data class Optimized( + /** + * Limit to reach to decide to split the init sync response into smaller files + * Empiric value: 1 megabytes + */ + val minSizeToSplit: Long = 1024 * 1024, + /** + * Limit per room to reach to decide to store a join room into a file + * Empiric value: 10 kilobytes + */ + val minSizeToStoreInFile: Long = 10 * 1024, + /** + * Max number of rooms to insert at a time in database (to avoid too much RAM usage) + */ + val maxRoomsToInsert: Int = 100 + ) : InitialSyncStrategy() +} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomSyncHandler.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomSyncHandler.kt index 6d1b3ae034..979c2888d3 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomSyncHandler.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomSyncHandler.kt @@ -51,6 +51,7 @@ import org.matrix.android.sdk.internal.di.UserId import org.matrix.android.sdk.internal.extensions.clearWith import org.matrix.android.sdk.internal.session.DefaultInitialSyncProgressService import org.matrix.android.sdk.internal.session.mapWithProgress +import org.matrix.android.sdk.internal.session.reportSubtask import org.matrix.android.sdk.internal.session.room.membership.RoomChangeMembershipStateDataSource import org.matrix.android.sdk.internal.session.room.membership.RoomMemberEventHandler import org.matrix.android.sdk.internal.session.room.read.FullyReadContent @@ -59,12 +60,14 @@ import org.matrix.android.sdk.internal.session.room.timeline.PaginationDirection import org.matrix.android.sdk.internal.session.room.timeline.TimelineInput import org.matrix.android.sdk.internal.session.room.typing.TypingEventContent import org.matrix.android.sdk.internal.session.sync.model.InvitedRoomSync +import org.matrix.android.sdk.internal.session.sync.model.LazyRoomSync import org.matrix.android.sdk.internal.session.sync.model.RoomSync import org.matrix.android.sdk.internal.session.sync.model.RoomSyncAccountData import org.matrix.android.sdk.internal.session.sync.model.RoomSyncEphemeral import org.matrix.android.sdk.internal.session.sync.model.RoomsSyncResponse import timber.log.Timber import javax.inject.Inject +import kotlin.math.ceil internal class RoomSyncHandler @Inject constructor(private val readReceiptHandler: ReadReceiptHandler, private val roomSummaryUpdater: RoomSummaryUpdater, @@ -78,7 +81,7 @@ internal class RoomSyncHandler @Inject constructor(private val readReceiptHandle private val timelineInput: TimelineInput) { sealed class HandlingStrategy { - data class JOINED(val data: Map) : HandlingStrategy() + data class JOINED(val data: Map) : HandlingStrategy() data class INVITED(val data: Map) : HandlingStrategy() data class LEFT(val data: Map) : HandlingStrategy() } @@ -105,10 +108,17 @@ internal class RoomSyncHandler @Inject constructor(private val readReceiptHandle } val syncLocalTimeStampMillis = System.currentTimeMillis() val rooms = when (handlingStrategy) { - is HandlingStrategy.JOINED -> - handlingStrategy.data.mapWithProgress(reporter, R.string.initial_sync_start_importing_account_joined_rooms, 0.6f) { - handleJoinedRoom(realm, it.key, it.value, isInitialSync, insertType, syncLocalTimeStampMillis) + is HandlingStrategy.JOINED -> { + if (isInitialSync && initialSyncStrategy is InitialSyncStrategy.Optimized) { + insertJoinRooms(realm, handlingStrategy, insertType, syncLocalTimeStampMillis, reporter) + // Rooms are already inserted, return an empty list + emptyList() + } else { + handlingStrategy.data.mapWithProgress(reporter, R.string.initial_sync_start_importing_account_joined_rooms, 0.6f) { + handleJoinedRoom(realm, it.key, it.value.roomSync, insertType, syncLocalTimeStampMillis) + } } + } is HandlingStrategy.INVITED -> handlingStrategy.data.mapWithProgress(reporter, R.string.initial_sync_start_importing_account_invited_rooms, 0.1f) { handleInvitedRoom(realm, it.key, it.value, insertType, syncLocalTimeStampMillis) @@ -123,17 +133,57 @@ internal class RoomSyncHandler @Inject constructor(private val readReceiptHandle realm.insertOrUpdate(rooms) } + private fun insertJoinRooms(realm: Realm, + handlingStrategy: HandlingStrategy.JOINED, + insertType: EventInsertType, + syncLocalTimeStampMillis: Long, + reporter: DefaultInitialSyncProgressService?) { + val maxSize = (initialSyncStrategy as? InitialSyncStrategy.Optimized)?.maxRoomsToInsert ?: Int.MAX_VALUE + val listSize = handlingStrategy.data.keys.size + val numberOfChunks = ceil(listSize / maxSize.toDouble()).toInt() + + if (numberOfChunks > 1) { + reportSubtask(reporter, R.string.initial_sync_start_importing_account_joined_rooms, numberOfChunks, 0.6f) { + val chunkSize = listSize / numberOfChunks + Timber.v("INIT_SYNC $listSize rooms to insert, split into $numberOfChunks sublists of $chunkSize items") + // I cannot find a better way to chunk a map, so chunk the keys and then create new maps + handlingStrategy.data.keys + .chunked(chunkSize) + .forEachIndexed { index, roomIds -> + val roomEntities = roomIds + .also { Timber.v("INIT_SYNC insert ${roomIds.size} rooms") } + .map { + handleJoinedRoom( + realm, + it, + (handlingStrategy.data[it] ?: error("Should not happen")).roomSync, + insertType, + syncLocalTimeStampMillis + ) + } + realm.insertOrUpdate(roomEntities) + reporter?.reportProgress(index + 1) + } + } + } else { + // No need to split + val rooms = handlingStrategy.data.mapWithProgress(reporter, R.string.initial_sync_start_importing_account_joined_rooms, 0.6f) { + handleJoinedRoom(realm, it.key, it.value.roomSync, insertType, syncLocalTimeStampMillis) + } + realm.insertOrUpdate(rooms) + } + } + private fun handleJoinedRoom(realm: Realm, roomId: String, roomSync: RoomSync, - isInitialSync: Boolean, insertType: EventInsertType, syncLocalTimestampMillis: Long): RoomEntity { Timber.v("Handle join sync for room $roomId") var ephemeralResult: EphemeralResult? = null if (roomSync.ephemeral?.events?.isNotEmpty() == true) { - ephemeralResult = handleEphemeral(realm, roomId, roomSync.ephemeral, isInitialSync) + ephemeralResult = handleEphemeral(realm, roomId, roomSync.ephemeral, insertType == EventInsertType.INITIAL_SYNC) } if (roomSync.accountData?.events?.isNotEmpty() == true) { @@ -173,8 +223,7 @@ internal class RoomSyncHandler @Inject constructor(private val readReceiptHandle roomSync.timeline.prevToken, roomSync.timeline.limited, insertType, - syncLocalTimestampMillis, - isInitialSync + syncLocalTimestampMillis ) roomEntity.addIfNecessary(chunkEntity) } @@ -278,8 +327,7 @@ internal class RoomSyncHandler @Inject constructor(private val readReceiptHandle prevToken: String? = null, isLimited: Boolean = true, insertType: EventInsertType, - syncLocalTimestampMillis: Long, - isInitialSync: Boolean): ChunkEntity { + syncLocalTimestampMillis: Long): ChunkEntity { val lastChunk = ChunkEntity.findLastForwardChunkOfRoom(realm, roomEntity.roomId) val chunkEntity = if (!isLimited && lastChunk != null) { lastChunk @@ -299,7 +347,7 @@ internal class RoomSyncHandler @Inject constructor(private val readReceiptHandle } eventIds.add(event.eventId) - if (event.isEncrypted() && !isInitialSync) { + if (event.isEncrypted() && insertType != EventInsertType.INITIAL_SYNC) { decryptIfNeeded(event, roomId) } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncAPI.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncAPI.kt index 77289f04b4..8e3523bc57 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncAPI.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncAPI.kt @@ -16,6 +16,7 @@ package org.matrix.android.sdk.internal.session.sync +import okhttp3.ResponseBody import org.matrix.android.sdk.internal.network.NetworkConstants import org.matrix.android.sdk.internal.network.TimeOutInterceptor import org.matrix.android.sdk.internal.session.sync.model.SyncResponse @@ -23,6 +24,7 @@ import retrofit2.Call import retrofit2.http.GET import retrofit2.http.Header import retrofit2.http.QueryMap +import retrofit2.http.Streaming internal interface SyncAPI { /** @@ -34,4 +36,15 @@ internal interface SyncAPI { @Header(TimeOutInterceptor.READ_TIMEOUT) readTimeOut: Long = TimeOutInterceptor.DEFAULT_LONG_TIMEOUT, @Header(TimeOutInterceptor.WRITE_TIMEOUT) writeTimeOut: Long = TimeOutInterceptor.DEFAULT_LONG_TIMEOUT ): Call + + /** + * Set all the timeouts to 1 minute by default + */ + @Streaming + @GET(NetworkConstants.URI_API_PREFIX_PATH_R0 + "sync") + fun syncStream(@QueryMap params: Map, + @Header(TimeOutInterceptor.CONNECT_TIMEOUT) connectTimeOut: Long = TimeOutInterceptor.DEFAULT_LONG_TIMEOUT, + @Header(TimeOutInterceptor.READ_TIMEOUT) readTimeOut: Long = TimeOutInterceptor.DEFAULT_LONG_TIMEOUT, + @Header(TimeOutInterceptor.WRITE_TIMEOUT) writeTimeOut: Long = TimeOutInterceptor.DEFAULT_LONG_TIMEOUT + ): Call } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTask.kt index bfe3799771..ef766f6d42 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTask.kt @@ -16,18 +16,32 @@ package org.matrix.android.sdk.internal.session.sync +import okhttp3.ResponseBody +import okio.buffer +import okio.source import org.matrix.android.sdk.R +import org.matrix.android.sdk.internal.di.MoshiProvider +import org.matrix.android.sdk.internal.di.SessionFilesDirectory import org.matrix.android.sdk.internal.di.UserId import org.matrix.android.sdk.internal.network.GlobalErrorReceiver import org.matrix.android.sdk.internal.network.TimeOutInterceptor import org.matrix.android.sdk.internal.network.executeRequest +import org.matrix.android.sdk.internal.network.toFailure import org.matrix.android.sdk.internal.session.DefaultInitialSyncProgressService import org.matrix.android.sdk.internal.session.filter.FilterRepository import org.matrix.android.sdk.internal.session.homeserver.GetHomeServerCapabilitiesTask +import org.matrix.android.sdk.internal.session.reportSubtask +import org.matrix.android.sdk.internal.session.sync.model.LazyRoomSync +import org.matrix.android.sdk.internal.session.sync.model.LazyRoomSyncJsonAdapter import org.matrix.android.sdk.internal.session.sync.model.SyncResponse import org.matrix.android.sdk.internal.session.user.UserStore import org.matrix.android.sdk.internal.task.Task +import org.matrix.android.sdk.internal.util.logDuration +import retrofit2.Response +import retrofit2.awaitResponse import timber.log.Timber +import java.io.File +import java.net.SocketTimeoutException import javax.inject.Inject internal interface SyncTask : Task { @@ -48,9 +62,14 @@ internal class DefaultSyncTask @Inject constructor( private val getHomeServerCapabilitiesTask: GetHomeServerCapabilitiesTask, private val userStore: UserStore, private val syncTaskSequencer: SyncTaskSequencer, - private val globalErrorReceiver: GlobalErrorReceiver + private val globalErrorReceiver: GlobalErrorReceiver, + @SessionFilesDirectory + private val fileDirectory: File ) : SyncTask { + private val workingDir = File(fileDirectory, "is") + private val initialSyncStatusRepository: InitialSyncStatusRepository = FileInitialSyncStatusRepository(workingDir) + override suspend fun execute(params: SyncTask.Params) = syncTaskSequencer.post { doSync(params) } @@ -81,20 +100,137 @@ internal class DefaultSyncTask @Inject constructor( val readTimeOut = (params.timeout + TIMEOUT_MARGIN).coerceAtLeast(TimeOutInterceptor.DEFAULT_LONG_TIMEOUT) - val syncResponse = executeRequest(globalErrorReceiver) { - apiCall = syncAPI.sync( - params = requestParams, - readTimeOut = readTimeOut - ) - } - syncResponseHandler.handleResponse(syncResponse, token) if (isInitialSync) { + logDuration("INIT_SYNC strategy: $initialSyncStrategy") { + if (initialSyncStrategy is InitialSyncStrategy.Optimized) { + safeInitialSync(requestParams) + } else { + val syncResponse = logDuration("INIT_SYNC Request") { + executeRequest(globalErrorReceiver) { + apiCall = syncAPI.sync( + params = requestParams, + readTimeOut = readTimeOut + ) + } + } + + logDuration("INIT_SYNC Database insertion") { + syncResponseHandler.handleResponse(syncResponse, token) + } + } + } initialSyncProgressService.endAll() + } else { + val syncResponse = executeRequest(globalErrorReceiver) { + apiCall = syncAPI.sync( + params = requestParams, + readTimeOut = readTimeOut + ) + } + syncResponseHandler.handleResponse(syncResponse, token) } Timber.v("Sync task finished on Thread: ${Thread.currentThread().name}") } + private suspend fun safeInitialSync(requestParams: Map) { + workingDir.mkdirs() + val workingFile = File(workingDir, "initSync.json") + val status = initialSyncStatusRepository.getStep() + if (workingFile.exists() && status >= InitialSyncStatus.STEP_DOWNLOADED) { + // Go directly to the parse step + Timber.v("INIT_SYNC file is already here") + } else { + initialSyncStatusRepository.setStep(InitialSyncStatus.STEP_DOWNLOADING) + val syncResponse = logDuration("INIT_SYNC Perform server request") { + reportSubtask(initialSyncProgressService, R.string.initial_sync_start_server_computing, 0, 0.5f) { + getSyncResponse(requestParams, MAX_NUMBER_OF_RETRY_AFTER_TIMEOUT) + } + } + + if (syncResponse.isSuccessful) { + logDuration("INIT_SYNC Download and save to file") { + reportSubtask(initialSyncProgressService, R.string.initial_sync_start_downloading, 0, 0.5f) { + syncResponse.body()?.byteStream()?.use { inputStream -> + workingFile.outputStream().use { outputStream -> + inputStream.copyTo(outputStream) + } + } + } + } + } else { + throw syncResponse.toFailure(globalErrorReceiver) + .also { Timber.w("INIT_SYNC request failure: $this") } + } + initialSyncStatusRepository.setStep(InitialSyncStatus.STEP_DOWNLOADED) + } + handleSyncFile(workingFile) + + // Delete all files + workingDir.deleteRecursively() + } + + private suspend fun getSyncResponse(requestParams: Map, maxNumberOfRetries: Int): Response { + var retry = maxNumberOfRetries + while (true) { + retry-- + try { + return syncAPI.syncStream( + params = requestParams + ).awaitResponse() + } catch (throwable: Throwable) { + if (throwable is SocketTimeoutException && retry > 0) { + Timber.w("INIT_SYNC timeout retry left: $retry") + } else { + Timber.e(throwable, "INIT_SYNC timeout, no retry left, or other error") + throw throwable + } + } + } + } + + private suspend fun handleSyncFile(workingFile: File) { + val syncResponseLength = workingFile.length().toInt() + + logDuration("INIT_SYNC handleSyncFile() file size $syncResponseLength bytes") { + if (syncResponseLength < (initialSyncStrategy as? InitialSyncStrategy.Optimized)?.minSizeToSplit ?: Long.MAX_VALUE) { + // OK, no need to split just handle as a regular sync response + Timber.v("INIT_SYNC no need to split") + handleInitialSyncFile(workingFile) + } else { + Timber.v("INIT_SYNC Split into several smaller files") + // Set file mode + // TODO This is really ugly, I should improve that + LazyRoomSyncJsonAdapter.initWith(workingFile) + + handleInitialSyncFile(workingFile) + + // Reset file mode + LazyRoomSyncJsonAdapter.reset() + } + } + } + + private suspend fun handleInitialSyncFile(workingFile: File) { + val syncResponse = logDuration("INIT_SYNC Read file and parse") { + MoshiProvider.providesMoshi().adapter(SyncResponse::class.java) + .fromJson(workingFile.source().buffer())!! + } + initialSyncStatusRepository.setStep(InitialSyncStatus.STEP_PARSED) + + // Log some stats + val nbOfJoinedRooms = syncResponse.rooms?.join?.size ?: 0 + val nbOfJoinedRoomsInFile = syncResponse.rooms?.join?.values?.count { it is LazyRoomSync.Stored } + Timber.v("INIT_SYNC $nbOfJoinedRooms rooms, $nbOfJoinedRoomsInFile stored into files") + + logDuration("INIT_SYNC Database insertion") { + syncResponseHandler.handleResponse(syncResponse, null) + } + initialSyncStatusRepository.setStep(InitialSyncStatus.STEP_SUCCESS) + } + companion object { + private const val MAX_NUMBER_OF_RETRY_AFTER_TIMEOUT = 50 + private const val TIMEOUT_MARGIN: Long = 10_000 } } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/LazyRoomSync.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/LazyRoomSync.kt new file mode 100644 index 0000000000..e7e0dcb8b9 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/LazyRoomSync.kt @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2021 The Matrix.org Foundation C.I.C. + * + * 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. + */ + +package org.matrix.android.sdk.internal.session.sync.model + +import com.squareup.moshi.JsonClass +import com.squareup.moshi.JsonReader +import okio.buffer +import okio.source +import org.matrix.android.sdk.internal.di.MoshiProvider +import java.io.File + +@JsonClass(generateAdapter = false) +internal sealed class LazyRoomSync { + data class Parsed(val _roomSync: RoomSync) : LazyRoomSync() + data class Stored(val file: File) : LazyRoomSync() + + val roomSync: RoomSync + get() { + return when (this) { + is Parsed -> _roomSync + is Stored -> { + // Parse the file now + file.inputStream().use { pos -> + MoshiProvider.providesMoshi().adapter(RoomSync::class.java) + .fromJson(JsonReader.of(pos.source().buffer()))!! + } + } + } + } +} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/LazyRoomSyncJsonAdapter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/LazyRoomSyncJsonAdapter.kt new file mode 100644 index 0000000000..edf76d2e77 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/LazyRoomSyncJsonAdapter.kt @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2021 The Matrix.org Foundation C.I.C. + * + * 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. + */ + +package org.matrix.android.sdk.internal.session.sync.model + +import com.squareup.moshi.FromJson +import com.squareup.moshi.JsonAdapter +import com.squareup.moshi.JsonReader +import com.squareup.moshi.JsonWriter +import com.squareup.moshi.ToJson +import org.matrix.android.sdk.internal.di.MoshiProvider +import org.matrix.android.sdk.internal.session.sync.InitialSyncStrategy +import org.matrix.android.sdk.internal.session.sync.initialSyncStrategy +import timber.log.Timber +import java.io.File +import java.util.concurrent.atomic.AtomicInteger + +internal class LazyRoomSyncJsonAdapter : JsonAdapter() { + + @FromJson + override fun fromJson(reader: JsonReader): LazyRoomSync { + return if (workingDirectory != null) { + val path = reader.path + // val roomId = reader.path.substringAfter("\$.rooms.join.") + + // inputStream.available() return 0... So read it to a String then decide to store in a file or to parse it now + val json = reader.nextSource().inputStream().bufferedReader().use { + it.readText() + } + + val limit = (initialSyncStrategy as? InitialSyncStrategy.Optimized)?.minSizeToStoreInFile ?: Long.MAX_VALUE + if (json.length > limit) { + Timber.v("INIT_SYNC $path content length: ${json.length} copy to a file") + // Copy the source to a file + val file = createFile() + file.writeText(json) + LazyRoomSync.Stored(file) + } else { + Timber.v("INIT_SYNC $path content length: ${json.length} parse it now") + // Parse it now + val roomSync = MoshiProvider.providesMoshi().adapter(RoomSync::class.java).fromJson(json)!! + LazyRoomSync.Parsed(roomSync) + } + } else { + // Parse it now + val roomSync = MoshiProvider.providesMoshi().adapter(RoomSync::class.java).fromJson(reader)!! + LazyRoomSync.Parsed(roomSync) + } + } + + @ToJson + override fun toJson(writer: JsonWriter, value: LazyRoomSync?) { + // This Adapter is not supposed to serialize object + throw UnsupportedOperationException() + } + + companion object { + fun initWith(file: File) { + workingDirectory = file.parentFile + atomicInteger.set(0) + } + + fun reset() { + workingDirectory = null + } + + private fun createFile(): File { + val parent = workingDirectory ?: error("workingDirectory is not initialized") + val index = atomicInteger.getAndIncrement() + + return File(parent, "room_$index.json") + } + + private var workingDirectory: File? = null + private val atomicInteger = AtomicInteger(0) + } +} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomsSyncResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomsSyncResponse.kt index dd2f96c988..a62d80a088 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomsSyncResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomsSyncResponse.kt @@ -24,7 +24,7 @@ internal data class RoomsSyncResponse( /** * Joined rooms: keys are rooms ids. */ - @Json(name = "join") val join: Map = emptyMap(), + @Json(name = "join") val join: Map = emptyMap(), /** * Invitations. The rooms that the user has been invited to: keys are rooms ids. diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/LogUtil.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/LogUtil.kt new file mode 100644 index 0000000000..1a4f42a533 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/LogUtil.kt @@ -0,0 +1,29 @@ +/* + * Copyright 2020 The Matrix.org Foundation C.I.C. + * + * 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. + */ + +package org.matrix.android.sdk.internal.util + +import timber.log.Timber + +internal suspend fun logDuration(message: String, + block: suspend () -> T): T { + Timber.v("$message -- BEGIN") + val start = System.currentTimeMillis() + val result = block() + val duration = System.currentTimeMillis() - start + Timber.v("$message -- END duration: $duration ms") + return result +} diff --git a/matrix-sdk-android/src/main/res/values/strings.xml b/matrix-sdk-android/src/main/res/values/strings.xml index 26b9bc19d9..b93d9b680e 100644 --- a/matrix-sdk-android/src/main/res/values/strings.xml +++ b/matrix-sdk-android/src/main/res/values/strings.xml @@ -199,6 +199,8 @@ Empty room Empty room (was %s) + Initial Sync:\nWaiting for server response… + Initial Sync:\nDownloading data… Initial Sync:\nImporting account… Initial Sync:\nImporting crypto Initial Sync:\nImporting Rooms diff --git a/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt b/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt index 6a381ec049..2d884f1ba7 100644 --- a/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt +++ b/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt @@ -40,6 +40,8 @@ import im.vector.app.core.platform.ToolbarConfigurable import im.vector.app.core.platform.VectorBaseActivity import im.vector.app.core.pushers.PushersManager import im.vector.app.databinding.ActivityHomeBinding +import im.vector.app.features.MainActivity +import im.vector.app.features.MainActivityArgs import im.vector.app.features.disclaimer.showDisclaimerDialog import im.vector.app.features.matrixto.MatrixToBottomSheet import im.vector.app.features.notifications.NotificationDrawerManager @@ -60,6 +62,8 @@ import kotlinx.parcelize.Parcelize import org.matrix.android.sdk.api.session.InitialSyncProgressService import org.matrix.android.sdk.api.session.permalinks.PermalinkService import org.matrix.android.sdk.api.util.MatrixItem +import org.matrix.android.sdk.internal.session.sync.InitialSyncStrategy +import org.matrix.android.sdk.internal.session.sync.initialSyncStrategy import timber.log.Timber import javax.inject.Inject @@ -368,6 +372,20 @@ class HomeActivity : bugReporter.openBugReportScreen(this, false) return true } + R.id.menu_home_init_sync_legacy -> { + // Configure the SDK + initialSyncStrategy = InitialSyncStrategy.Legacy + // And clear cache + MainActivity.restartApp(this, MainActivityArgs(clearCache = true)) + return true + } + R.id.menu_home_init_sync_optimized -> { + // Configure the SDK + initialSyncStrategy = InitialSyncStrategy.Optimized() + // And clear cache + MainActivity.restartApp(this, MainActivityArgs(clearCache = true)) + return true + } R.id.menu_home_filter -> { navigator.openRoomsFiltering(this) return true diff --git a/vector/src/main/res/menu/home.xml b/vector/src/main/res/menu/home.xml index 7a77c45240..66cbf53bfd 100644 --- a/vector/src/main/res/menu/home.xml +++ b/vector/src/main/res/menu/home.xml @@ -1,6 +1,7 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools"> + + + + Date: Tue, 26 Jan 2021 13:45:17 +0100 Subject: [PATCH 068/578] Try to log RAM usage --- .../org/matrix/android/sdk/internal/util/LogUtil.kt | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/LogUtil.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/LogUtil.kt index 1a4f42a533..2bd9f46a4c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/LogUtil.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/LogUtil.kt @@ -20,10 +20,18 @@ import timber.log.Timber internal suspend fun logDuration(message: String, block: suspend () -> T): T { + val runtime = Runtime.getRuntime() + runtime.gc() + val usedMemInMBStart = (runtime.totalMemory() - runtime.freeMemory()) / 1048576L + Timber.v("$message -- BEGIN") val start = System.currentTimeMillis() val result = block() val duration = System.currentTimeMillis() - start - Timber.v("$message -- END duration: $duration ms") + runtime.gc() + val usedMemInMBEnd = (runtime.totalMemory() - runtime.freeMemory()) / 1048576L + val usedMemInMBDiff = usedMemInMBEnd - usedMemInMBStart + + Timber.v("$message -- END duration: $duration ms RAM usage: $usedMemInMBDiff MB") return result } From 8e2161bd9ee71823473f5e2ba97e3cd85d296c0e Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 3 Feb 2021 15:37:46 +0100 Subject: [PATCH 069/578] Log free memory before starting a task --- .../java/org/matrix/android/sdk/internal/util/LogUtil.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/LogUtil.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/LogUtil.kt index 2bd9f46a4c..4dc71655ab 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/LogUtil.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/LogUtil.kt @@ -22,9 +22,10 @@ internal suspend fun logDuration(message: String, block: suspend () -> T): T { val runtime = Runtime.getRuntime() runtime.gc() - val usedMemInMBStart = (runtime.totalMemory() - runtime.freeMemory()) / 1048576L + val freeMemoryInMb = runtime.freeMemory() / 1048576L + val usedMemInMBStart = runtime.totalMemory() / 1048576L - freeMemoryInMb - Timber.v("$message -- BEGIN") + Timber.v("$message -- BEGIN (free memory: $freeMemoryInMb MB)") val start = System.currentTimeMillis() val result = block() val duration = System.currentTimeMillis() - start From 3633199e683cfc308167d8dda4e5cc3890724d57 Mon Sep 17 00:00:00 2001 From: ganfra Date: Thu, 4 Feb 2021 14:01:21 +0100 Subject: [PATCH 070/578] Sync : clean a bit by introducing 2 moshi adapters --- matrix-sdk-android/build.gradle | 2 + .../android/sdk/internal/di/MoshiProvider.kt | 5 +- .../sdk/internal/session/sync/SyncTask.kt | 67 +++++--------- .../session/sync/model/LazyRoomSync.kt | 7 +- .../sync/model/LazyRoomSyncJsonAdapter.kt | 90 ------------------- .../sync/parsing/InitialSyncResponseParser.kt | 48 ++++++++++ .../sync/parsing/LazyRoomSyncJsonAdapters.kt | 85 ++++++++++++++++++ 7 files changed, 163 insertions(+), 141 deletions(-) delete mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/LazyRoomSyncJsonAdapter.kt create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/parsing/InitialSyncResponseParser.kt create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/parsing/LazyRoomSyncJsonAdapters.kt diff --git a/matrix-sdk-android/build.gradle b/matrix-sdk-android/build.gradle index 3ade9f7214..4f8604bfc1 100644 --- a/matrix-sdk-android/build.gradle +++ b/matrix-sdk-android/build.gradle @@ -13,6 +13,7 @@ buildscript { } } + android { compileSdkVersion 30 testOptions.unitTests.includeAndroidResources = true @@ -88,6 +89,7 @@ android { java.srcDirs += "src/sharedTest/java" } } + } static def gitRevision() { diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/MoshiProvider.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/MoshiProvider.kt index c0595a9273..b6bc17eaa0 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/MoshiProvider.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/MoshiProvider.kt @@ -36,7 +36,7 @@ import org.matrix.android.sdk.internal.network.parsing.ForceToBooleanJsonAdapter import org.matrix.android.sdk.internal.network.parsing.RuntimeJsonAdapterFactory import org.matrix.android.sdk.internal.network.parsing.TlsVersionMoshiAdapter import org.matrix.android.sdk.internal.network.parsing.UriMoshiAdapter -import org.matrix.android.sdk.internal.session.sync.model.LazyRoomSyncJsonAdapter +import org.matrix.android.sdk.internal.session.sync.parsing.DefaultLazyRoomSyncJsonAdapter object MoshiProvider { @@ -45,7 +45,8 @@ object MoshiProvider { .add(ForceToBooleanJsonAdapter()) .add(CipherSuiteMoshiAdapter()) .add(TlsVersionMoshiAdapter()) - .add(LazyRoomSyncJsonAdapter()) + // Use addLast here so we can inject a SplitLazyRoomSyncJsonAdapter later to override the default parsing. + .addLast(DefaultLazyRoomSyncJsonAdapter()) .add(RuntimeJsonAdapterFactory.of(MessageContent::class.java, "msgtype", MessageDefaultContent::class.java) .registerSubtype(MessageTextContent::class.java, MessageType.MSGTYPE_TEXT) .registerSubtype(MessageNoticeContent::class.java, MessageType.MSGTYPE_NOTICE) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTask.kt index ef766f6d42..dde3da48c6 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTask.kt @@ -17,10 +17,7 @@ package org.matrix.android.sdk.internal.session.sync import okhttp3.ResponseBody -import okio.buffer -import okio.source import org.matrix.android.sdk.R -import org.matrix.android.sdk.internal.di.MoshiProvider import org.matrix.android.sdk.internal.di.SessionFilesDirectory import org.matrix.android.sdk.internal.di.UserId import org.matrix.android.sdk.internal.network.GlobalErrorReceiver @@ -32,8 +29,8 @@ import org.matrix.android.sdk.internal.session.filter.FilterRepository import org.matrix.android.sdk.internal.session.homeserver.GetHomeServerCapabilitiesTask import org.matrix.android.sdk.internal.session.reportSubtask import org.matrix.android.sdk.internal.session.sync.model.LazyRoomSync -import org.matrix.android.sdk.internal.session.sync.model.LazyRoomSyncJsonAdapter import org.matrix.android.sdk.internal.session.sync.model.SyncResponse +import org.matrix.android.sdk.internal.session.sync.parsing.InitialSyncResponseParser import org.matrix.android.sdk.internal.session.user.UserStore import org.matrix.android.sdk.internal.task.Task import org.matrix.android.sdk.internal.util.logDuration @@ -64,7 +61,8 @@ internal class DefaultSyncTask @Inject constructor( private val syncTaskSequencer: SyncTaskSequencer, private val globalErrorReceiver: GlobalErrorReceiver, @SessionFilesDirectory - private val fileDirectory: File + private val fileDirectory: File, + private val syncResponseParser: InitialSyncResponseParser ) : SyncTask { private val workingDir = File(fileDirectory, "is") @@ -101,9 +99,10 @@ internal class DefaultSyncTask @Inject constructor( val readTimeOut = (params.timeout + TIMEOUT_MARGIN).coerceAtLeast(TimeOutInterceptor.DEFAULT_LONG_TIMEOUT) if (isInitialSync) { - logDuration("INIT_SYNC strategy: $initialSyncStrategy") { - if (initialSyncStrategy is InitialSyncStrategy.Optimized) { - safeInitialSync(requestParams) + val initSyncStrategy = initialSyncStrategy + logDuration("INIT_SYNC strategy: $initSyncStrategy") { + if (initSyncStrategy is InitialSyncStrategy.Optimized) { + safeInitialSync(requestParams, initSyncStrategy) } else { val syncResponse = logDuration("INIT_SYNC Request") { executeRequest(globalErrorReceiver) { @@ -132,7 +131,7 @@ internal class DefaultSyncTask @Inject constructor( Timber.v("Sync task finished on Thread: ${Thread.currentThread().name}") } - private suspend fun safeInitialSync(requestParams: Map) { + private suspend fun safeInitialSync(requestParams: Map, initSyncStrategy: InitialSyncStrategy.Optimized) { workingDir.mkdirs() val workingFile = File(workingDir, "initSync.json") val status = initialSyncStatusRepository.getStep() @@ -163,7 +162,7 @@ internal class DefaultSyncTask @Inject constructor( } initialSyncStatusRepository.setStep(InitialSyncStatus.STEP_DOWNLOADED) } - handleSyncFile(workingFile) + handleSyncFile(workingFile, initSyncStrategy) // Delete all files workingDir.deleteRecursively() @@ -188,44 +187,22 @@ internal class DefaultSyncTask @Inject constructor( } } - private suspend fun handleSyncFile(workingFile: File) { - val syncResponseLength = workingFile.length().toInt() - - logDuration("INIT_SYNC handleSyncFile() file size $syncResponseLength bytes") { - if (syncResponseLength < (initialSyncStrategy as? InitialSyncStrategy.Optimized)?.minSizeToSplit ?: Long.MAX_VALUE) { - // OK, no need to split just handle as a regular sync response - Timber.v("INIT_SYNC no need to split") - handleInitialSyncFile(workingFile) - } else { - Timber.v("INIT_SYNC Split into several smaller files") - // Set file mode - // TODO This is really ugly, I should improve that - LazyRoomSyncJsonAdapter.initWith(workingFile) - - handleInitialSyncFile(workingFile) - - // Reset file mode - LazyRoomSyncJsonAdapter.reset() + private suspend fun handleSyncFile(workingFile: File, initSyncStrategy: InitialSyncStrategy.Optimized) { + logDuration("INIT_SYNC handleSyncFile()") { + val syncResponse = logDuration("INIT_SYNC Read file and parse") { + syncResponseParser.parse(initSyncStrategy, workingFile) } - } - } + initialSyncStatusRepository.setStep(InitialSyncStatus.STEP_PARSED) + // Log some stats + val nbOfJoinedRooms = syncResponse.rooms?.join?.size ?: 0 + val nbOfJoinedRoomsInFile = syncResponse.rooms?.join?.values?.count { it is LazyRoomSync.Stored } + Timber.v("INIT_SYNC $nbOfJoinedRooms rooms, $nbOfJoinedRoomsInFile stored into files") - private suspend fun handleInitialSyncFile(workingFile: File) { - val syncResponse = logDuration("INIT_SYNC Read file and parse") { - MoshiProvider.providesMoshi().adapter(SyncResponse::class.java) - .fromJson(workingFile.source().buffer())!! + logDuration("INIT_SYNC Database insertion") { + syncResponseHandler.handleResponse(syncResponse, null) + } + initialSyncStatusRepository.setStep(InitialSyncStatus.STEP_SUCCESS) } - initialSyncStatusRepository.setStep(InitialSyncStatus.STEP_PARSED) - - // Log some stats - val nbOfJoinedRooms = syncResponse.rooms?.join?.size ?: 0 - val nbOfJoinedRoomsInFile = syncResponse.rooms?.join?.values?.count { it is LazyRoomSync.Stored } - Timber.v("INIT_SYNC $nbOfJoinedRooms rooms, $nbOfJoinedRoomsInFile stored into files") - - logDuration("INIT_SYNC Database insertion") { - syncResponseHandler.handleResponse(syncResponse, null) - } - initialSyncStatusRepository.setStep(InitialSyncStatus.STEP_SUCCESS) } companion object { diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/LazyRoomSync.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/LazyRoomSync.kt index e7e0dcb8b9..1f6e3de9a4 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/LazyRoomSync.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/LazyRoomSync.kt @@ -16,17 +16,17 @@ package org.matrix.android.sdk.internal.session.sync.model +import com.squareup.moshi.JsonAdapter import com.squareup.moshi.JsonClass import com.squareup.moshi.JsonReader import okio.buffer import okio.source -import org.matrix.android.sdk.internal.di.MoshiProvider import java.io.File @JsonClass(generateAdapter = false) internal sealed class LazyRoomSync { data class Parsed(val _roomSync: RoomSync) : LazyRoomSync() - data class Stored(val file: File) : LazyRoomSync() + data class Stored(val roomSyncAdapter: JsonAdapter, val file: File) : LazyRoomSync() val roomSync: RoomSync get() { @@ -35,8 +35,7 @@ internal sealed class LazyRoomSync { is Stored -> { // Parse the file now file.inputStream().use { pos -> - MoshiProvider.providesMoshi().adapter(RoomSync::class.java) - .fromJson(JsonReader.of(pos.source().buffer()))!! + roomSyncAdapter.fromJson(JsonReader.of(pos.source().buffer()))!! } } } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/LazyRoomSyncJsonAdapter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/LazyRoomSyncJsonAdapter.kt deleted file mode 100644 index edf76d2e77..0000000000 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/LazyRoomSyncJsonAdapter.kt +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (c) 2021 The Matrix.org Foundation C.I.C. - * - * 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. - */ - -package org.matrix.android.sdk.internal.session.sync.model - -import com.squareup.moshi.FromJson -import com.squareup.moshi.JsonAdapter -import com.squareup.moshi.JsonReader -import com.squareup.moshi.JsonWriter -import com.squareup.moshi.ToJson -import org.matrix.android.sdk.internal.di.MoshiProvider -import org.matrix.android.sdk.internal.session.sync.InitialSyncStrategy -import org.matrix.android.sdk.internal.session.sync.initialSyncStrategy -import timber.log.Timber -import java.io.File -import java.util.concurrent.atomic.AtomicInteger - -internal class LazyRoomSyncJsonAdapter : JsonAdapter() { - - @FromJson - override fun fromJson(reader: JsonReader): LazyRoomSync { - return if (workingDirectory != null) { - val path = reader.path - // val roomId = reader.path.substringAfter("\$.rooms.join.") - - // inputStream.available() return 0... So read it to a String then decide to store in a file or to parse it now - val json = reader.nextSource().inputStream().bufferedReader().use { - it.readText() - } - - val limit = (initialSyncStrategy as? InitialSyncStrategy.Optimized)?.minSizeToStoreInFile ?: Long.MAX_VALUE - if (json.length > limit) { - Timber.v("INIT_SYNC $path content length: ${json.length} copy to a file") - // Copy the source to a file - val file = createFile() - file.writeText(json) - LazyRoomSync.Stored(file) - } else { - Timber.v("INIT_SYNC $path content length: ${json.length} parse it now") - // Parse it now - val roomSync = MoshiProvider.providesMoshi().adapter(RoomSync::class.java).fromJson(json)!! - LazyRoomSync.Parsed(roomSync) - } - } else { - // Parse it now - val roomSync = MoshiProvider.providesMoshi().adapter(RoomSync::class.java).fromJson(reader)!! - LazyRoomSync.Parsed(roomSync) - } - } - - @ToJson - override fun toJson(writer: JsonWriter, value: LazyRoomSync?) { - // This Adapter is not supposed to serialize object - throw UnsupportedOperationException() - } - - companion object { - fun initWith(file: File) { - workingDirectory = file.parentFile - atomicInteger.set(0) - } - - fun reset() { - workingDirectory = null - } - - private fun createFile(): File { - val parent = workingDirectory ?: error("workingDirectory is not initialized") - val index = atomicInteger.getAndIncrement() - - return File(parent, "room_$index.json") - } - - private var workingDirectory: File? = null - private val atomicInteger = AtomicInteger(0) - } -} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/parsing/InitialSyncResponseParser.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/parsing/InitialSyncResponseParser.kt new file mode 100644 index 0000000000..760f25270f --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/parsing/InitialSyncResponseParser.kt @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2021 New Vector Ltd + * + * 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. + */ + +package org.matrix.android.sdk.internal.session.sync.parsing + +import com.squareup.moshi.Moshi +import okio.buffer +import okio.source +import org.matrix.android.sdk.internal.session.sync.InitialSyncStrategy +import org.matrix.android.sdk.internal.session.sync.model.SyncResponse +import timber.log.Timber +import java.io.File +import javax.inject.Inject + +internal class InitialSyncResponseParser @Inject constructor(private val moshi: Moshi) { + + fun parse(syncStrategy: InitialSyncStrategy.Optimized, workingFile: File): SyncResponse { + val syncResponseLength = workingFile.length().toInt() + Timber.v("Sync file size is $syncResponseLength bytes") + val shouldSplit = syncResponseLength >= syncStrategy.minSizeToSplit + Timber.v("INIT_SYNC should split in several files: $shouldSplit") + return getMoshi(syncStrategy, workingFile, shouldSplit) + .adapter(SyncResponse::class.java) + .fromJson(workingFile.source().buffer())!! + } + + private fun getMoshi(syncStrategy: InitialSyncStrategy.Optimized, workingFile: File, shouldSplit: Boolean): Moshi { + // If we don't have to split we'll rely on the already default moshi + if (!shouldSplit) return moshi + // Otherwise, we create a new adapter for handling Map of Lazy sync + return moshi.newBuilder() + .add(SplitLazyRoomSyncJsonAdapter(workingFile, syncStrategy)) + .build() + } +} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/parsing/LazyRoomSyncJsonAdapters.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/parsing/LazyRoomSyncJsonAdapters.kt new file mode 100644 index 0000000000..232e2fe99e --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/parsing/LazyRoomSyncJsonAdapters.kt @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2021 New Vector Ltd + * + * 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. + */ + +package org.matrix.android.sdk.internal.session.sync.parsing + +import com.squareup.moshi.FromJson +import com.squareup.moshi.JsonAdapter +import com.squareup.moshi.JsonReader +import com.squareup.moshi.JsonWriter +import com.squareup.moshi.ToJson +import org.matrix.android.sdk.internal.session.sync.InitialSyncStrategy +import org.matrix.android.sdk.internal.session.sync.model.LazyRoomSync +import org.matrix.android.sdk.internal.session.sync.model.RoomSync +import timber.log.Timber +import java.io.File +import java.util.concurrent.atomic.AtomicInteger + +internal class DefaultLazyRoomSyncJsonAdapter() { + + @FromJson + fun fromJson(reader: JsonReader, delegate: JsonAdapter): LazyRoomSync? { + val roomSync = delegate.fromJson(reader) ?: return null + return LazyRoomSync.Parsed(roomSync) + } + + @ToJson + fun toJson(writer: JsonWriter, value: LazyRoomSync?) { + // This Adapter is not supposed to serialize object + Timber.v("To json $value with $writer") + throw UnsupportedOperationException() + } +} + +internal class SplitLazyRoomSyncJsonAdapter( + private val workingDirectory: File, + private val syncStrategy: InitialSyncStrategy.Optimized +) { + + private val atomicInteger = AtomicInteger(0) + + private fun createFile(): File { + val index = atomicInteger.getAndIncrement() + return File(workingDirectory.parentFile, "room_$index.json") + } + + @FromJson + fun fromJson(reader: JsonReader, delegate: JsonAdapter): LazyRoomSync? { + val path = reader.path + val json = reader.nextSource().inputStream().bufferedReader().use { + it.readText() + } + val limit = syncStrategy.minSizeToStoreInFile + return if (json.length > limit) { + Timber.v("INIT_SYNC $path content length: ${json.length} copy to a file") + // Copy the source to a file + val file = createFile() + file.writeText(json) + LazyRoomSync.Stored(delegate, file) + } else { + Timber.v("INIT_SYNC $path content length: ${json.length} parse it now") + val roomSync = delegate.fromJson(json) ?: return null + LazyRoomSync.Parsed(roomSync) + } + } + + @ToJson + fun toJson(writer: JsonWriter, value: LazyRoomSync?) { + // This Adapter is not supposed to serialize object + Timber.v("To json $value with $writer") + throw UnsupportedOperationException() + } +} From 218be86c683cadc6c864214df9287367da881c87 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 8 Feb 2021 18:14:57 +0100 Subject: [PATCH 071/578] Cleanup --- matrix-sdk-android/build.gradle | 2 -- .../session/sync/parsing/InitialSyncResponseParser.kt | 2 +- .../session/sync/parsing/LazyRoomSyncJsonAdapters.kt | 5 ++--- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/matrix-sdk-android/build.gradle b/matrix-sdk-android/build.gradle index 4f8604bfc1..3ade9f7214 100644 --- a/matrix-sdk-android/build.gradle +++ b/matrix-sdk-android/build.gradle @@ -13,7 +13,6 @@ buildscript { } } - android { compileSdkVersion 30 testOptions.unitTests.includeAndroidResources = true @@ -89,7 +88,6 @@ android { java.srcDirs += "src/sharedTest/java" } } - } static def gitRevision() { diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/parsing/InitialSyncResponseParser.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/parsing/InitialSyncResponseParser.kt index 760f25270f..8368351419 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/parsing/InitialSyncResponseParser.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/parsing/InitialSyncResponseParser.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 New Vector Ltd + * Copyright (c) 2021 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/parsing/LazyRoomSyncJsonAdapters.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/parsing/LazyRoomSyncJsonAdapters.kt index 232e2fe99e..2d25d0bc2e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/parsing/LazyRoomSyncJsonAdapters.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/parsing/LazyRoomSyncJsonAdapters.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 New Vector Ltd + * Copyright (c) 2021 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,7 +28,7 @@ import timber.log.Timber import java.io.File import java.util.concurrent.atomic.AtomicInteger -internal class DefaultLazyRoomSyncJsonAdapter() { +internal class DefaultLazyRoomSyncJsonAdapter { @FromJson fun fromJson(reader: JsonReader, delegate: JsonAdapter): LazyRoomSync? { @@ -48,7 +48,6 @@ internal class SplitLazyRoomSyncJsonAdapter( private val workingDirectory: File, private val syncStrategy: InitialSyncStrategy.Optimized ) { - private val atomicInteger = AtomicInteger(0) private fun createFile(): File { From 440d01c5525c3848b7a4cb78daf45d6ffad3e449 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 8 Feb 2021 18:29:22 +0100 Subject: [PATCH 072/578] Do not log RAM usage in release --- .../android/sdk/internal/util/LogUtil.kt | 35 +++++++++++++------ 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/LogUtil.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/LogUtil.kt index 4dc71655ab..fe68b49a5c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/LogUtil.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/LogUtil.kt @@ -16,23 +16,36 @@ package org.matrix.android.sdk.internal.util +import org.matrix.android.sdk.BuildConfig import timber.log.Timber internal suspend fun logDuration(message: String, block: suspend () -> T): T { - val runtime = Runtime.getRuntime() - runtime.gc() - val freeMemoryInMb = runtime.freeMemory() / 1048576L - val usedMemInMBStart = runtime.totalMemory() / 1048576L - freeMemoryInMb - - Timber.v("$message -- BEGIN (free memory: $freeMemoryInMb MB)") + Timber.v("$message -- BEGIN") val start = System.currentTimeMillis() - val result = block() + val result = logRamUsage(message) { + block() + } val duration = System.currentTimeMillis() - start - runtime.gc() - val usedMemInMBEnd = (runtime.totalMemory() - runtime.freeMemory()) / 1048576L - val usedMemInMBDiff = usedMemInMBEnd - usedMemInMBStart + Timber.v("$message -- END duration: $duration ms") - Timber.v("$message -- END duration: $duration ms RAM usage: $usedMemInMBDiff MB") return result } + +internal suspend fun logRamUsage(message: String, block: suspend () -> T): T { + return if (BuildConfig.DEBUG) { + val runtime = Runtime.getRuntime() + runtime.gc() + val freeMemoryInMb = runtime.freeMemory() / 1048576L + val usedMemInMBStart = runtime.totalMemory() / 1048576L - freeMemoryInMb + Timber.v("$message -- BEGIN (free memory: $freeMemoryInMb MB)") + val result = block() + runtime.gc() + val usedMemInMBEnd = (runtime.totalMemory() - runtime.freeMemory()) / 1048576L + val usedMemInMBDiff = usedMemInMBEnd - usedMemInMBStart + Timber.v("$message -- END RAM usage: $usedMemInMBDiff MB") + result + } else { + block() + } +} From e069e196af71e4c3d0a737f9cf3add080f699f5d Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 8 Feb 2021 18:42:49 +0100 Subject: [PATCH 073/578] Improve log --- .../internal/session/sync/parsing/InitialSyncResponseParser.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/parsing/InitialSyncResponseParser.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/parsing/InitialSyncResponseParser.kt index 8368351419..6145793178 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/parsing/InitialSyncResponseParser.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/parsing/InitialSyncResponseParser.kt @@ -29,7 +29,7 @@ internal class InitialSyncResponseParser @Inject constructor(private val moshi: fun parse(syncStrategy: InitialSyncStrategy.Optimized, workingFile: File): SyncResponse { val syncResponseLength = workingFile.length().toInt() - Timber.v("Sync file size is $syncResponseLength bytes") + Timber.v("INIT_SYNC Sync file size is $syncResponseLength bytes") val shouldSplit = syncResponseLength >= syncStrategy.minSizeToSplit Timber.v("INIT_SYNC should split in several files: $shouldSplit") return getMoshi(syncStrategy, workingFile, shouldSplit) From a2225b3f760ae56702719ec44a48f1e39de3db23 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 8 Feb 2021 18:56:41 +0100 Subject: [PATCH 074/578] Improve code about path --- .../session/sync/parsing/InitialSyncResponseParser.kt | 6 +++--- .../session/sync/parsing/LazyRoomSyncJsonAdapters.kt | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/parsing/InitialSyncResponseParser.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/parsing/InitialSyncResponseParser.kt index 6145793178..ae7b2a4468 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/parsing/InitialSyncResponseParser.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/parsing/InitialSyncResponseParser.kt @@ -32,17 +32,17 @@ internal class InitialSyncResponseParser @Inject constructor(private val moshi: Timber.v("INIT_SYNC Sync file size is $syncResponseLength bytes") val shouldSplit = syncResponseLength >= syncStrategy.minSizeToSplit Timber.v("INIT_SYNC should split in several files: $shouldSplit") - return getMoshi(syncStrategy, workingFile, shouldSplit) + return getMoshi(syncStrategy, workingFile.parentFile!!, shouldSplit) .adapter(SyncResponse::class.java) .fromJson(workingFile.source().buffer())!! } - private fun getMoshi(syncStrategy: InitialSyncStrategy.Optimized, workingFile: File, shouldSplit: Boolean): Moshi { + private fun getMoshi(syncStrategy: InitialSyncStrategy.Optimized, workingDirectory: File, shouldSplit: Boolean): Moshi { // If we don't have to split we'll rely on the already default moshi if (!shouldSplit) return moshi // Otherwise, we create a new adapter for handling Map of Lazy sync return moshi.newBuilder() - .add(SplitLazyRoomSyncJsonAdapter(workingFile, syncStrategy)) + .add(SplitLazyRoomSyncJsonAdapter(workingDirectory, syncStrategy)) .build() } } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/parsing/LazyRoomSyncJsonAdapters.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/parsing/LazyRoomSyncJsonAdapters.kt index 2d25d0bc2e..951fdf86aa 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/parsing/LazyRoomSyncJsonAdapters.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/parsing/LazyRoomSyncJsonAdapters.kt @@ -52,7 +52,7 @@ internal class SplitLazyRoomSyncJsonAdapter( private fun createFile(): File { val index = atomicInteger.getAndIncrement() - return File(workingDirectory.parentFile, "room_$index.json") + return File(workingDirectory, "room_$index.json") } @FromJson From 4e1fcf87ae2c4e4cd276fd24875642f1809554ea Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 8 Feb 2021 19:44:02 +0100 Subject: [PATCH 075/578] Improve DefaultInitialSyncProgressService --- .../DefaultInitialSyncProgressService.kt | 51 ++++++++++--------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultInitialSyncProgressService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultInitialSyncProgressService.kt index 9918e83fbc..9c816964db 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultInitialSyncProgressService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultInitialSyncProgressService.kt @@ -19,11 +19,14 @@ import androidx.annotation.StringRes import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import org.matrix.android.sdk.api.session.InitialSyncProgressService +import org.matrix.android.sdk.internal.util.StringProvider import timber.log.Timber import javax.inject.Inject @SessionScope -class DefaultInitialSyncProgressService @Inject constructor() : InitialSyncProgressService { +internal class DefaultInitialSyncProgressService @Inject constructor( + private val stringProvider: StringProvider +) : InitialSyncProgressService { private val status = MutableLiveData() @@ -40,10 +43,12 @@ class DefaultInitialSyncProgressService @Inject constructor() : InitialSyncProgr } else { val currentLeaf = rootTask!!.leaf() - val newTask = TaskInfo(nameRes, - totalProgress, - currentLeaf, - parentWeight) + val newTask = TaskInfo( + nameRes = nameRes, + totalProgress = totalProgress, + parent = currentLeaf, + parentWeight = parentWeight + ) currentLeaf.child = newTask } @@ -72,11 +77,11 @@ class DefaultInitialSyncProgressService @Inject constructor() : InitialSyncProgr status.postValue(InitialSyncProgressService.Status.Idle) } - private inner class TaskInfo(@StringRes var nameRes: Int, - var totalProgress: Int, - var parent: TaskInfo? = null, - var parentWeight: Float = 1f, - var offset: Int = parent?.currentProgress ?: 0) { + private inner class TaskInfo(@StringRes val nameRes: Int, + val totalProgress: Int, + val parent: TaskInfo? = null, + val parentWeight: Float = 1f, + val offset: Int = parent?.currentProgress ?: 0) { var child: TaskInfo? = null var currentProgress: Int = 0 @@ -97,32 +102,32 @@ class DefaultInitialSyncProgressService @Inject constructor() : InitialSyncProgr fun setProgress(progress: Int) { currentProgress = progress // val newProgress = Math.min(currentProgress + progress, totalProgress) - parent?.let { + if (parent != null) { val parentProgress = (currentProgress * parentWeight).toInt() - it.setProgress(offset + parentProgress) - } ?: run { - Timber.v("--- ${leaf().nameRes}: $currentProgress") + parent.setProgress(offset + parentProgress) + } else { + Timber.v("--- ${stringProvider.getString(leaf().nameRes)}: $currentProgress") status.postValue(InitialSyncProgressService.Status.Progressing(leaf().nameRes, currentProgress)) } } } } -inline fun reportSubtask(reporter: DefaultInitialSyncProgressService?, - @StringRes nameRes: Int, - totalProgress: Int, - parentWeight: Float = 1f, - block: () -> T): T { +internal inline fun reportSubtask(reporter: DefaultInitialSyncProgressService?, + @StringRes nameRes: Int, + totalProgress: Int, + parentWeight: Float = 1f, + block: () -> T): T { reporter?.startTask(nameRes, totalProgress, parentWeight) return block().also { reporter?.endTask(nameRes) } } -inline fun Map.mapWithProgress(reporter: DefaultInitialSyncProgressService?, - taskId: Int, - weight: Float, - transform: (Map.Entry) -> R): List { +internal inline fun Map.mapWithProgress(reporter: DefaultInitialSyncProgressService?, + taskId: Int, + weight: Float, + transform: (Map.Entry) -> R): List { val total = count().toFloat() var current = 0 reporter?.startTask(taskId, 100, weight) From 5e7b36d319d54920610af47d6b49871376754c40 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 8 Feb 2021 22:49:07 +0100 Subject: [PATCH 076/578] Fix issue with progress --- .../DefaultInitialSyncProgressService.kt | 40 +++++++++---------- .../session/sync/CryptoSyncHandler.kt | 2 +- .../internal/session/sync/RoomSyncHandler.kt | 2 +- .../session/sync/SyncResponseHandler.kt | 12 +++--- .../sdk/internal/session/sync/SyncTask.kt | 19 +++++---- 5 files changed, 39 insertions(+), 36 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultInitialSyncProgressService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultInitialSyncProgressService.kt index 9c816964db..d84a39f462 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultInitialSyncProgressService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultInitialSyncProgressService.kt @@ -36,7 +36,7 @@ internal class DefaultInitialSyncProgressService @Inject constructor( return status } - fun startTask(@StringRes nameRes: Int, totalProgress: Int, parentWeight: Float = 1f) { + fun startTask(@StringRes nameRes: Int, totalProgress: Int, parentWeight: Float) { // Create a rootTask, or add a child to the leaf if (rootTask == null) { rootTask = TaskInfo(nameRes, totalProgress) @@ -52,20 +52,20 @@ internal class DefaultInitialSyncProgressService @Inject constructor( currentLeaf.child = newTask } - reportProgress(0) + reportProgress(0F) } - fun reportProgress(progress: Int) { + fun reportProgress(progress: Float) { rootTask?.leaf()?.setProgress(progress) } fun endTask(nameRes: Int) { val endedTask = rootTask?.leaf() if (endedTask?.nameRes == nameRes) { - // close it - val parent = endedTask.parent - parent?.child = null - parent?.setProgress(endedTask.offset + (endedTask.totalProgress * endedTask.parentWeight).toInt()) + // Ensure the task progress is complete + endedTask.setProgress(endedTask.totalProgress.toFloat()) + // And close it + endedTask.parent?.child = null } if (endedTask?.parent == null) { status.postValue(InitialSyncProgressService.Status.Idle) @@ -81,9 +81,9 @@ internal class DefaultInitialSyncProgressService @Inject constructor( val totalProgress: Int, val parent: TaskInfo? = null, val parentWeight: Float = 1f, - val offset: Int = parent?.currentProgress ?: 0) { + val offset: Float = parent?.currentProgress ?: 0F) { var child: TaskInfo? = null - var currentProgress: Int = 0 + private var currentProgress: Float = 0F /** * Get the further child @@ -97,17 +97,18 @@ internal class DefaultInitialSyncProgressService @Inject constructor( } /** - * Set progress of the parent if any (which will post value), or post the value + * Set progress of this task and update the parent progress. Last parent will post value. */ - fun setProgress(progress: Int) { + fun setProgress(progress: Float) { + Timber.v("setProgress: $progress / $totalProgress") currentProgress = progress // val newProgress = Math.min(currentProgress + progress, totalProgress) if (parent != null) { - val parentProgress = (currentProgress * parentWeight).toInt() + val parentProgress = (currentProgress / totalProgress) * (parentWeight * parent.totalProgress) parent.setProgress(offset + parentProgress) } else { - Timber.v("--- ${stringProvider.getString(leaf().nameRes)}: $currentProgress") - status.postValue(InitialSyncProgressService.Status.Progressing(leaf().nameRes, currentProgress)) + Timber.v("--- ${stringProvider.getString(leaf().nameRes)}: ${currentProgress.toInt()}") + status.postValue(InitialSyncProgressService.Status.Progressing(leaf().nameRes, currentProgress.toInt())) } } } @@ -116,7 +117,7 @@ internal class DefaultInitialSyncProgressService @Inject constructor( internal inline fun reportSubtask(reporter: DefaultInitialSyncProgressService?, @StringRes nameRes: Int, totalProgress: Int, - parentWeight: Float = 1f, + parentWeight: Float, block: () -> T): T { reporter?.startTask(nameRes, totalProgress, parentWeight) return block().also { @@ -126,13 +127,12 @@ internal inline fun reportSubtask(reporter: DefaultInitialSyncProgressServic internal inline fun Map.mapWithProgress(reporter: DefaultInitialSyncProgressService?, taskId: Int, - weight: Float, + parentWeight: Float, transform: (Map.Entry) -> R): List { - val total = count().toFloat() - var current = 0 - reporter?.startTask(taskId, 100, weight) + var current = 0F + reporter?.startTask(taskId, count() + 1, parentWeight) return map { - reporter?.reportProgress((current / total * 100).toInt()) + reporter?.reportProgress(current) current++ transform.invoke(it) }.also { diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/CryptoSyncHandler.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/CryptoSyncHandler.kt index fc476a3dd6..42477e1dd8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/CryptoSyncHandler.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/CryptoSyncHandler.kt @@ -38,7 +38,7 @@ internal class CryptoSyncHandler @Inject constructor(private val cryptoService: fun handleToDevice(toDevice: ToDeviceSyncResponse, initialSyncProgressService: DefaultInitialSyncProgressService? = null) { val total = toDevice.events?.size ?: 0 toDevice.events?.forEachIndexed { index, event -> - initialSyncProgressService?.reportProgress(((index / total.toFloat()) * 100).toInt()) + initialSyncProgressService?.reportProgress(index * 100F / total) // Decrypt event if necessary Timber.i("## CRYPTO | To device event from ${event.senderId} of type:${event.type}") decryptToDeviceEvent(event, null) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomSyncHandler.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomSyncHandler.kt index 979c2888d3..ef2212cdab 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomSyncHandler.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomSyncHandler.kt @@ -162,7 +162,7 @@ internal class RoomSyncHandler @Inject constructor(private val readReceiptHandle ) } realm.insertOrUpdate(roomEntities) - reporter?.reportProgress(index + 1) + reporter?.reportProgress(index + 1F) } } } else { diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncResponseHandler.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncResponseHandler.kt index a80b062427..c9376eb9f2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncResponseHandler.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncResponseHandler.kt @@ -51,13 +51,11 @@ internal class SyncResponseHandler @Inject constructor(@SessionDatabase private private val cryptoService: DefaultCryptoService, private val tokenStore: SyncTokenStore, private val processEventForPushTask: ProcessEventForPushTask, - private val pushRuleService: PushRuleService, - private val initialSyncProgressService: DefaultInitialSyncProgressService) { + private val pushRuleService: PushRuleService) { - suspend fun handleResponse(syncResponse: SyncResponse, fromToken: String?) { + suspend fun handleResponse(syncResponse: SyncResponse, fromToken: String?, reporter: DefaultInitialSyncProgressService?) { val isInitialSync = fromToken == null Timber.v("Start handling sync, is InitialSync: $isInitialSync") - val reporter = initialSyncProgressService.takeIf { isInitialSync } measureTimeMillis { if (!cryptoService.isStarted()) { @@ -85,7 +83,7 @@ internal class SyncResponseHandler @Inject constructor(@SessionDatabase private monarchy.awaitTransaction { realm -> measureTimeMillis { Timber.v("Handle rooms") - reportSubtask(reporter, R.string.initial_sync_start_importing_account_rooms, 100, 0.7f) { + reportSubtask(reporter, R.string.initial_sync_start_importing_account_rooms, 1, 0.7f) { if (syncResponse.rooms != null) { roomSyncHandler.handle(realm, syncResponse.rooms, isInitialSync, reporter) } @@ -95,7 +93,7 @@ internal class SyncResponseHandler @Inject constructor(@SessionDatabase private } measureTimeMillis { - reportSubtask(reporter, R.string.initial_sync_start_importing_account_groups, 100, 0.1f) { + reportSubtask(reporter, R.string.initial_sync_start_importing_account_groups, 1, 0.1f) { Timber.v("Handle groups") if (syncResponse.groups != null) { groupSyncHandler.handle(realm, syncResponse.groups, reporter) @@ -106,7 +104,7 @@ internal class SyncResponseHandler @Inject constructor(@SessionDatabase private } measureTimeMillis { - reportSubtask(reporter, R.string.initial_sync_start_importing_account_data, 100, 0.1f) { + reportSubtask(reporter, R.string.initial_sync_start_importing_account_data, 1, 0.1f) { Timber.v("Handle accountData") userAccountDataSyncHandler.handle(realm, syncResponse.accountData) } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTask.kt index dde3da48c6..ea06db7071 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTask.kt @@ -91,7 +91,7 @@ internal class DefaultSyncTask @Inject constructor( // We might want to get the user information in parallel too userStore.createOrUpdate(userId) initialSyncProgressService.endAll() - initialSyncProgressService.startTask(R.string.initial_sync_start_importing_account, 100) + initialSyncProgressService.startTask(R.string.initial_sync_start_importing_account, 100, 1F) } // Maybe refresh the home server capabilities data we know getHomeServerCapabilitiesTask.execute(GetHomeServerCapabilitiesTask.Params(forceRefresh = false)) @@ -114,7 +114,7 @@ internal class DefaultSyncTask @Inject constructor( } logDuration("INIT_SYNC Database insertion") { - syncResponseHandler.handleResponse(syncResponse, token) + syncResponseHandler.handleResponse(syncResponse, token, initialSyncProgressService) } } } @@ -126,7 +126,7 @@ internal class DefaultSyncTask @Inject constructor( readTimeOut = readTimeOut ) } - syncResponseHandler.handleResponse(syncResponse, token) + syncResponseHandler.handleResponse(syncResponse, token, null) } Timber.v("Sync task finished on Thread: ${Thread.currentThread().name}") } @@ -138,17 +138,20 @@ internal class DefaultSyncTask @Inject constructor( if (workingFile.exists() && status >= InitialSyncStatus.STEP_DOWNLOADED) { // Go directly to the parse step Timber.v("INIT_SYNC file is already here") + reportSubtask(initialSyncProgressService, R.string.initial_sync_start_downloading, 1, 0.3f) { + // Empty task + } } else { initialSyncStatusRepository.setStep(InitialSyncStatus.STEP_DOWNLOADING) val syncResponse = logDuration("INIT_SYNC Perform server request") { - reportSubtask(initialSyncProgressService, R.string.initial_sync_start_server_computing, 0, 0.5f) { + reportSubtask(initialSyncProgressService, R.string.initial_sync_start_server_computing, 1, 0.2f) { getSyncResponse(requestParams, MAX_NUMBER_OF_RETRY_AFTER_TIMEOUT) } } if (syncResponse.isSuccessful) { logDuration("INIT_SYNC Download and save to file") { - reportSubtask(initialSyncProgressService, R.string.initial_sync_start_downloading, 0, 0.5f) { + reportSubtask(initialSyncProgressService, R.string.initial_sync_start_downloading, 1, 0.1f) { syncResponse.body()?.byteStream()?.use { inputStream -> workingFile.outputStream().use { outputStream -> inputStream.copyTo(outputStream) @@ -162,7 +165,9 @@ internal class DefaultSyncTask @Inject constructor( } initialSyncStatusRepository.setStep(InitialSyncStatus.STEP_DOWNLOADED) } - handleSyncFile(workingFile, initSyncStrategy) + reportSubtask(initialSyncProgressService, R.string.initial_sync_start_importing_account, 1, 0.7F) { + handleSyncFile(workingFile, initSyncStrategy) + } // Delete all files workingDir.deleteRecursively() @@ -199,7 +204,7 @@ internal class DefaultSyncTask @Inject constructor( Timber.v("INIT_SYNC $nbOfJoinedRooms rooms, $nbOfJoinedRoomsInFile stored into files") logDuration("INIT_SYNC Database insertion") { - syncResponseHandler.handleResponse(syncResponse, null) + syncResponseHandler.handleResponse(syncResponse, null, initialSyncProgressService) } initialSyncStatusRepository.setStep(InitialSyncStatus.STEP_SUCCESS) } From 1c83ee086a2db25acb3364f01733513611d0036f Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 9 Feb 2021 09:55:28 +0100 Subject: [PATCH 077/578] More rework of DefaultInitialSyncProgressService --- .../DefaultInitialSyncProgressService.kt | 109 +++++++++--------- 1 file changed, 56 insertions(+), 53 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultInitialSyncProgressService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultInitialSyncProgressService.kt index d84a39f462..fb7ba7c58f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultInitialSyncProgressService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultInitialSyncProgressService.kt @@ -19,14 +19,11 @@ import androidx.annotation.StringRes import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import org.matrix.android.sdk.api.session.InitialSyncProgressService -import org.matrix.android.sdk.internal.util.StringProvider import timber.log.Timber import javax.inject.Inject @SessionScope -internal class DefaultInitialSyncProgressService @Inject constructor( - private val stringProvider: StringProvider -) : InitialSyncProgressService { +internal class DefaultInitialSyncProgressService @Inject constructor() : InitialSyncProgressService { private val status = MutableLiveData() @@ -36,39 +33,47 @@ internal class DefaultInitialSyncProgressService @Inject constructor( return status } - fun startTask(@StringRes nameRes: Int, totalProgress: Int, parentWeight: Float) { + fun startTask(@StringRes nameRes: Int, + totalProgress: Int, + parentWeight: Float) { // Create a rootTask, or add a child to the leaf if (rootTask == null) { - rootTask = TaskInfo(nameRes, totalProgress) + rootTask = TaskInfo(nameRes, totalProgress, null, 1F) } else { val currentLeaf = rootTask!!.leaf() - - val newTask = TaskInfo( + currentLeaf.child = TaskInfo( nameRes = nameRes, totalProgress = totalProgress, parent = currentLeaf, parentWeight = parentWeight ) - - currentLeaf.child = newTask } reportProgress(0F) } fun reportProgress(progress: Float) { - rootTask?.leaf()?.setProgress(progress) + rootTask?.let { root -> + root.leaf().let { leaf -> + // Update the progress of the leaf and all its parents + leaf.setProgress(progress) + // Then update the live data using leaf wording and root progress + status.postValue(InitialSyncProgressService.Status.Progressing(leaf.nameRes, root.currentProgress.toInt())) + } + } } - fun endTask(nameRes: Int) { - val endedTask = rootTask?.leaf() - if (endedTask?.nameRes == nameRes) { + fun endTask() { + rootTask?.leaf()?.let { endedTask -> // Ensure the task progress is complete - endedTask.setProgress(endedTask.totalProgress.toFloat()) - // And close it + reportProgress(endedTask.totalProgress.toFloat()) endedTask.parent?.child = null - } - if (endedTask?.parent == null) { - status.postValue(InitialSyncProgressService.Status.Idle) + + if (endedTask.parent != null) { + // And close it + endedTask.parent.child = null + } else { + status.postValue(InitialSyncProgressService.Status.Idle) + } } } @@ -76,40 +81,38 @@ internal class DefaultInitialSyncProgressService @Inject constructor( rootTask = null status.postValue(InitialSyncProgressService.Status.Idle) } +} - private inner class TaskInfo(@StringRes val nameRes: Int, - val totalProgress: Int, - val parent: TaskInfo? = null, - val parentWeight: Float = 1f, - val offset: Float = parent?.currentProgress ?: 0F) { - var child: TaskInfo? = null - private var currentProgress: Float = 0F +private class TaskInfo(@StringRes val nameRes: Int, + val totalProgress: Int, + val parent: TaskInfo?, + val parentWeight: Float) { + var child: TaskInfo? = null + var currentProgress = 0F + private set + private val offset = parent?.currentProgress ?: 0F - /** - * Get the further child - */ - fun leaf(): TaskInfo { - var last = this - while (last.child != null) { - last = last.child!! - } - return last + /** + * Get the further child + */ + fun leaf(): TaskInfo { + var last = this + while (last.child != null) { + last = last.child!! } + return last + } - /** - * Set progress of this task and update the parent progress. Last parent will post value. - */ - fun setProgress(progress: Float) { - Timber.v("setProgress: $progress / $totalProgress") - currentProgress = progress -// val newProgress = Math.min(currentProgress + progress, totalProgress) - if (parent != null) { - val parentProgress = (currentProgress / totalProgress) * (parentWeight * parent.totalProgress) - parent.setProgress(offset + parentProgress) - } else { - Timber.v("--- ${stringProvider.getString(leaf().nameRes)}: ${currentProgress.toInt()}") - status.postValue(InitialSyncProgressService.Status.Progressing(leaf().nameRes, currentProgress.toInt())) - } + /** + * Set progress of this task and update the parent progress iteratively + */ + fun setProgress(progress: Float) { + Timber.v("setProgress: $progress / $totalProgress") + currentProgress = progress + + parent?.let { + val parentProgress = (currentProgress / totalProgress) * (parentWeight * it.totalProgress) + it.setProgress(offset + parentProgress) } } } @@ -121,21 +124,21 @@ internal inline fun reportSubtask(reporter: DefaultInitialSyncProgressServic block: () -> T): T { reporter?.startTask(nameRes, totalProgress, parentWeight) return block().also { - reporter?.endTask(nameRes) + reporter?.endTask() } } internal inline fun Map.mapWithProgress(reporter: DefaultInitialSyncProgressService?, - taskId: Int, + @StringRes nameRes: Int, parentWeight: Float, transform: (Map.Entry) -> R): List { var current = 0F - reporter?.startTask(taskId, count() + 1, parentWeight) + reporter?.startTask(nameRes, count() + 1, parentWeight) return map { reporter?.reportProgress(current) current++ transform.invoke(it) }.also { - reporter?.endTask(taskId) + reporter?.endTask() } } From b870a8b791c040afdca121cb16e6487dad74a08d Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 9 Feb 2021 10:30:11 +0100 Subject: [PATCH 078/578] Create ProgressReporter interface --- .../DefaultInitialSyncProgressService.kt | 28 +++++++++++++------ .../session/sync/CryptoSyncHandler.kt | 8 +++--- .../internal/session/sync/GroupSyncHandler.kt | 14 ++++------ .../internal/session/sync/RoomSyncHandler.kt | 16 +++++------ .../session/sync/SyncResponseHandler.kt | 6 ++-- 5 files changed, 41 insertions(+), 31 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultInitialSyncProgressService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultInitialSyncProgressService.kt index fb7ba7c58f..e74d905436 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultInitialSyncProgressService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultInitialSyncProgressService.kt @@ -22,8 +22,20 @@ import org.matrix.android.sdk.api.session.InitialSyncProgressService import timber.log.Timber import javax.inject.Inject +internal interface ProgressReporter { + fun startTask(@StringRes nameRes: Int, + totalProgress: Int, + parentWeight: Float) + + fun reportProgress(progress: Float) + + fun endTask() +} + @SessionScope -internal class DefaultInitialSyncProgressService @Inject constructor() : InitialSyncProgressService { +internal class DefaultInitialSyncProgressService @Inject constructor() + : InitialSyncProgressService, + ProgressReporter { private val status = MutableLiveData() @@ -33,9 +45,9 @@ internal class DefaultInitialSyncProgressService @Inject constructor() : Initial return status } - fun startTask(@StringRes nameRes: Int, - totalProgress: Int, - parentWeight: Float) { + override fun startTask(@StringRes nameRes: Int, + totalProgress: Int, + parentWeight: Float) { // Create a rootTask, or add a child to the leaf if (rootTask == null) { rootTask = TaskInfo(nameRes, totalProgress, null, 1F) @@ -51,7 +63,7 @@ internal class DefaultInitialSyncProgressService @Inject constructor() : Initial reportProgress(0F) } - fun reportProgress(progress: Float) { + override fun reportProgress(progress: Float) { rootTask?.let { root -> root.leaf().let { leaf -> // Update the progress of the leaf and all its parents @@ -62,7 +74,7 @@ internal class DefaultInitialSyncProgressService @Inject constructor() : Initial } } - fun endTask() { + override fun endTask() { rootTask?.leaf()?.let { endedTask -> // Ensure the task progress is complete reportProgress(endedTask.totalProgress.toFloat()) @@ -117,7 +129,7 @@ private class TaskInfo(@StringRes val nameRes: Int, } } -internal inline fun reportSubtask(reporter: DefaultInitialSyncProgressService?, +internal inline fun reportSubtask(reporter: ProgressReporter?, @StringRes nameRes: Int, totalProgress: Int, parentWeight: Float, @@ -128,7 +140,7 @@ internal inline fun reportSubtask(reporter: DefaultInitialSyncProgressServic } } -internal inline fun Map.mapWithProgress(reporter: DefaultInitialSyncProgressService?, +internal inline fun Map.mapWithProgress(reporter: ProgressReporter?, @StringRes nameRes: Int, parentWeight: Float, transform: (Map.Entry) -> R): List { diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/CryptoSyncHandler.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/CryptoSyncHandler.kt index 42477e1dd8..a244e7a273 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/CryptoSyncHandler.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/CryptoSyncHandler.kt @@ -26,7 +26,7 @@ import org.matrix.android.sdk.internal.crypto.MXEventDecryptionResult import org.matrix.android.sdk.internal.crypto.algorithms.olm.OlmDecryptionResult import org.matrix.android.sdk.internal.crypto.model.event.OlmEventContent import org.matrix.android.sdk.internal.crypto.verification.DefaultVerificationService -import org.matrix.android.sdk.internal.session.DefaultInitialSyncProgressService +import org.matrix.android.sdk.internal.session.ProgressReporter import org.matrix.android.sdk.internal.session.sync.model.SyncResponse import org.matrix.android.sdk.internal.session.sync.model.ToDeviceSyncResponse import timber.log.Timber @@ -35,10 +35,10 @@ import javax.inject.Inject internal class CryptoSyncHandler @Inject constructor(private val cryptoService: DefaultCryptoService, private val verificationService: DefaultVerificationService) { - fun handleToDevice(toDevice: ToDeviceSyncResponse, initialSyncProgressService: DefaultInitialSyncProgressService? = null) { + fun handleToDevice(toDevice: ToDeviceSyncResponse, progressReporter: ProgressReporter? = null) { val total = toDevice.events?.size ?: 0 toDevice.events?.forEachIndexed { index, event -> - initialSyncProgressService?.reportProgress(index * 100F / total) + progressReporter?.reportProgress(index * 100F / total) // Decrypt event if necessary Timber.i("## CRYPTO | To device event from ${event.senderId} of type:${event.type}") decryptToDeviceEvent(event, null) @@ -75,7 +75,7 @@ internal class CryptoSyncHandler @Inject constructor(private val cryptoService: // try to find device id to ease log reading val deviceId = cryptoService.getCryptoDeviceInfo(event.senderId!!).firstOrNull { it.identityKey() == senderKey - }?.deviceId ?: senderKey + }?.deviceId ?: senderKey Timber.e("## CRYPTO | Failed to decrypt to device event from ${event.senderId}|$deviceId reason:<${event.mCryptoError ?: exception}>") } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/GroupSyncHandler.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/GroupSyncHandler.kt index 135f711a6c..03ad76e19a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/GroupSyncHandler.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/GroupSyncHandler.kt @@ -16,17 +16,17 @@ package org.matrix.android.sdk.internal.session.sync +import io.realm.Realm import org.matrix.android.sdk.R import org.matrix.android.sdk.api.session.room.model.Membership import org.matrix.android.sdk.internal.database.model.GroupEntity import org.matrix.android.sdk.internal.database.model.GroupSummaryEntity import org.matrix.android.sdk.internal.database.query.getOrCreate import org.matrix.android.sdk.internal.database.query.where -import org.matrix.android.sdk.internal.session.DefaultInitialSyncProgressService +import org.matrix.android.sdk.internal.session.ProgressReporter import org.matrix.android.sdk.internal.session.mapWithProgress import org.matrix.android.sdk.internal.session.sync.model.GroupsSyncResponse import org.matrix.android.sdk.internal.session.sync.model.InvitedGroupSync -import io.realm.Realm import javax.inject.Inject internal class GroupSyncHandler @Inject constructor() { @@ -37,11 +37,9 @@ internal class GroupSyncHandler @Inject constructor() { data class LEFT(val data: Map) : HandlingStrategy() } - fun handle( - realm: Realm, - roomsSyncResponse: GroupsSyncResponse, - reporter: DefaultInitialSyncProgressService? = null - ) { + fun handle(realm: Realm, + roomsSyncResponse: GroupsSyncResponse, + reporter: ProgressReporter? = null) { handleGroupSync(realm, HandlingStrategy.JOINED(roomsSyncResponse.join), reporter) handleGroupSync(realm, HandlingStrategy.INVITED(roomsSyncResponse.invite), reporter) handleGroupSync(realm, HandlingStrategy.LEFT(roomsSyncResponse.leave), reporter) @@ -49,7 +47,7 @@ internal class GroupSyncHandler @Inject constructor() { // PRIVATE METHODS ***************************************************************************** - private fun handleGroupSync(realm: Realm, handlingStrategy: HandlingStrategy, reporter: DefaultInitialSyncProgressService?) { + private fun handleGroupSync(realm: Realm, handlingStrategy: HandlingStrategy, reporter: ProgressReporter?) { val groups = when (handlingStrategy) { is HandlingStrategy.JOINED -> handlingStrategy.data.mapWithProgress(reporter, R.string.initial_sync_start_importing_account_groups, 0.6f) { diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomSyncHandler.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomSyncHandler.kt index ef2212cdab..7d8966579e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomSyncHandler.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomSyncHandler.kt @@ -49,7 +49,7 @@ import org.matrix.android.sdk.internal.database.query.where import org.matrix.android.sdk.internal.di.MoshiProvider import org.matrix.android.sdk.internal.di.UserId import org.matrix.android.sdk.internal.extensions.clearWith -import org.matrix.android.sdk.internal.session.DefaultInitialSyncProgressService +import org.matrix.android.sdk.internal.session.ProgressReporter import org.matrix.android.sdk.internal.session.mapWithProgress import org.matrix.android.sdk.internal.session.reportSubtask import org.matrix.android.sdk.internal.session.room.membership.RoomChangeMembershipStateDataSource @@ -86,12 +86,10 @@ internal class RoomSyncHandler @Inject constructor(private val readReceiptHandle data class LEFT(val data: Map) : HandlingStrategy() } - fun handle( - realm: Realm, - roomsSyncResponse: RoomsSyncResponse, - isInitialSync: Boolean, - reporter: DefaultInitialSyncProgressService? = null - ) { + fun handle(realm: Realm, + roomsSyncResponse: RoomsSyncResponse, + isInitialSync: Boolean, + reporter: ProgressReporter? = null) { Timber.v("Execute transaction from $this") handleRoomSync(realm, HandlingStrategy.JOINED(roomsSyncResponse.join), isInitialSync, reporter) handleRoomSync(realm, HandlingStrategy.INVITED(roomsSyncResponse.invite), isInitialSync, reporter) @@ -100,7 +98,7 @@ internal class RoomSyncHandler @Inject constructor(private val readReceiptHandle // PRIVATE METHODS ***************************************************************************** - private fun handleRoomSync(realm: Realm, handlingStrategy: HandlingStrategy, isInitialSync: Boolean, reporter: DefaultInitialSyncProgressService?) { + private fun handleRoomSync(realm: Realm, handlingStrategy: HandlingStrategy, isInitialSync: Boolean, reporter: ProgressReporter?) { val insertType = if (isInitialSync) { EventInsertType.INITIAL_SYNC } else { @@ -137,7 +135,7 @@ internal class RoomSyncHandler @Inject constructor(private val readReceiptHandle handlingStrategy: HandlingStrategy.JOINED, insertType: EventInsertType, syncLocalTimeStampMillis: Long, - reporter: DefaultInitialSyncProgressService?) { + reporter: ProgressReporter?) { val maxSize = (initialSyncStrategy as? InitialSyncStrategy.Optimized)?.maxRoomsToInsert ?: Int.MAX_VALUE val listSize = handlingStrategy.data.keys.size val numberOfChunks = ceil(listSize / maxSize.toDouble()).toInt() diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncResponseHandler.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncResponseHandler.kt index c9376eb9f2..a80b733dcc 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncResponseHandler.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncResponseHandler.kt @@ -25,7 +25,7 @@ import org.matrix.android.sdk.internal.crypto.DefaultCryptoService import org.matrix.android.sdk.internal.di.SessionDatabase import org.matrix.android.sdk.internal.di.SessionId import org.matrix.android.sdk.internal.di.WorkManagerProvider -import org.matrix.android.sdk.internal.session.DefaultInitialSyncProgressService +import org.matrix.android.sdk.internal.session.ProgressReporter import org.matrix.android.sdk.internal.session.group.GetGroupDataWorker import org.matrix.android.sdk.internal.session.notification.ProcessEventForPushTask import org.matrix.android.sdk.internal.session.reportSubtask @@ -53,7 +53,9 @@ internal class SyncResponseHandler @Inject constructor(@SessionDatabase private private val processEventForPushTask: ProcessEventForPushTask, private val pushRuleService: PushRuleService) { - suspend fun handleResponse(syncResponse: SyncResponse, fromToken: String?, reporter: DefaultInitialSyncProgressService?) { + suspend fun handleResponse(syncResponse: SyncResponse, + fromToken: String?, + reporter: ProgressReporter?) { val isInitialSync = fromToken == null Timber.v("Start handling sync, is InitialSync: $isInitialSync") From 649edffa30cbdadf5d2009f5072841e84160220f Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 9 Feb 2021 11:04:47 +0100 Subject: [PATCH 079/578] Hide menu if not in developer mode --- .../main/java/im/vector/app/features/home/HomeActivity.kt | 7 +++++++ vector/src/main/res/menu/home.xml | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt b/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt index 2d884f1ba7..2a0ef0bdd6 100644 --- a/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt +++ b/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt @@ -21,6 +21,7 @@ import android.content.Intent import android.net.Uri import android.os.Bundle import android.os.Parcelable +import android.view.Menu import android.view.MenuItem import androidx.appcompat.app.AlertDialog import androidx.appcompat.widget.Toolbar @@ -362,6 +363,12 @@ class HomeActivity : override fun getMenuRes() = R.menu.home + override fun onPrepareOptionsMenu(menu: Menu): Boolean { + menu.findItem(R.id.menu_home_init_sync_legacy)?.isVisible = vectorPreferences.developerMode() + menu.findItem(R.id.menu_home_init_sync_optimized)?.isVisible = vectorPreferences.developerMode() + return super.onPrepareOptionsMenu(menu) + } + override fun onOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { R.id.menu_home_suggestion -> { diff --git a/vector/src/main/res/menu/home.xml b/vector/src/main/res/menu/home.xml index 66cbf53bfd..463b8a9e0d 100644 --- a/vector/src/main/res/menu/home.xml +++ b/vector/src/main/res/menu/home.xml @@ -21,12 +21,12 @@ Date: Tue, 9 Feb 2021 11:36:04 +0100 Subject: [PATCH 080/578] Move to dedicated package and split into several files --- .../matrix/android/sdk/api/session/Session.kt | 1 + .../InitialSyncProgressService.kt | 4 +- .../sdk/internal/session/DefaultSession.kt | 2 +- .../sdk/internal/session/SessionModule.kt | 3 +- .../DefaultInitialSyncProgressService.kt | 78 +------------------ .../internal/session/initsync/Extensions.kt | 45 +++++++++++ .../session/initsync/ProgressReporter.kt | 29 +++++++ .../sdk/internal/session/initsync/TaskInfo.kt | 54 +++++++++++++ .../session/sync/CryptoSyncHandler.kt | 2 +- .../internal/session/sync/GroupSyncHandler.kt | 4 +- .../internal/session/sync/RoomSyncHandler.kt | 6 +- .../session/sync/SyncResponseHandler.kt | 4 +- .../sdk/internal/session/sync/SyncTask.kt | 4 +- .../vector/app/features/home/HomeActivity.kt | 2 +- .../features/home/HomeActivityViewModel.kt | 4 +- .../features/home/HomeActivityViewState.kt | 2 +- 16 files changed, 152 insertions(+), 92 deletions(-) rename matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/{ => initsync}/InitialSyncProgressService.kt (90%) rename matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/{ => initsync}/DefaultInitialSyncProgressService.kt (54%) create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/initsync/Extensions.kt create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/initsync/ProgressReporter.kt create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/initsync/TaskInfo.kt diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/Session.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/Session.kt index 86ac0056e2..7a24ccac11 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/Session.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/Session.kt @@ -35,6 +35,7 @@ import org.matrix.android.sdk.api.session.file.FileService import org.matrix.android.sdk.api.session.group.GroupService import org.matrix.android.sdk.api.session.homeserver.HomeServerCapabilitiesService import org.matrix.android.sdk.api.session.identity.IdentityService +import org.matrix.android.sdk.api.session.initsync.InitialSyncProgressService import org.matrix.android.sdk.api.session.integrationmanager.IntegrationManagerService import org.matrix.android.sdk.api.session.media.MediaService import org.matrix.android.sdk.api.session.permalinks.PermalinkService diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/InitialSyncProgressService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/initsync/InitialSyncProgressService.kt similarity index 90% rename from matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/InitialSyncProgressService.kt rename to matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/initsync/InitialSyncProgressService.kt index 09c6b8e94c..0953696bc1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/InitialSyncProgressService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/initsync/InitialSyncProgressService.kt @@ -5,7 +5,7 @@ * 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 + * 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, @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.matrix.android.sdk.api.session +package org.matrix.android.sdk.api.session.initsync import androidx.annotation.StringRes import androidx.lifecycle.LiveData diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultSession.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultSession.kt index 06bb4bd929..1204a9ccac 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultSession.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultSession.kt @@ -24,7 +24,7 @@ import org.matrix.android.sdk.api.auth.data.SessionParams import org.matrix.android.sdk.api.failure.GlobalError import org.matrix.android.sdk.api.federation.FederationService import org.matrix.android.sdk.api.pushrules.PushRuleService -import org.matrix.android.sdk.api.session.InitialSyncProgressService +import org.matrix.android.sdk.api.session.initsync.InitialSyncProgressService import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.account.AccountService import org.matrix.android.sdk.api.session.accountdata.AccountDataService diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionModule.kt index 468c193ad3..57c2336331 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionModule.kt @@ -32,7 +32,7 @@ import org.matrix.android.sdk.api.auth.data.HomeServerConnectionConfig import org.matrix.android.sdk.api.auth.data.SessionParams import org.matrix.android.sdk.api.auth.data.sessionId import org.matrix.android.sdk.api.crypto.MXCryptoConfig -import org.matrix.android.sdk.api.session.InitialSyncProgressService +import org.matrix.android.sdk.api.session.initsync.InitialSyncProgressService import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.accountdata.AccountDataService import org.matrix.android.sdk.api.session.homeserver.HomeServerCapabilitiesService @@ -77,6 +77,7 @@ import org.matrix.android.sdk.internal.session.call.CallEventProcessor import org.matrix.android.sdk.internal.session.download.DownloadProgressInterceptor import org.matrix.android.sdk.internal.session.homeserver.DefaultHomeServerCapabilitiesService import org.matrix.android.sdk.internal.session.identity.DefaultIdentityService +import org.matrix.android.sdk.internal.session.initsync.DefaultInitialSyncProgressService import org.matrix.android.sdk.internal.session.integrationmanager.IntegrationManager import org.matrix.android.sdk.internal.session.permalinks.DefaultPermalinkService import org.matrix.android.sdk.internal.session.room.EventRelationsAggregationProcessor diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultInitialSyncProgressService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/initsync/DefaultInitialSyncProgressService.kt similarity index 54% rename from matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultInitialSyncProgressService.kt rename to matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/initsync/DefaultInitialSyncProgressService.kt index e74d905436..fd3c629866 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultInitialSyncProgressService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/initsync/DefaultInitialSyncProgressService.kt @@ -5,7 +5,7 @@ * 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 + * 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, @@ -13,25 +13,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.matrix.android.sdk.internal.session +package org.matrix.android.sdk.internal.session.initsync import androidx.annotation.StringRes import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData -import org.matrix.android.sdk.api.session.InitialSyncProgressService -import timber.log.Timber +import org.matrix.android.sdk.api.session.initsync.InitialSyncProgressService +import org.matrix.android.sdk.internal.session.SessionScope import javax.inject.Inject -internal interface ProgressReporter { - fun startTask(@StringRes nameRes: Int, - totalProgress: Int, - parentWeight: Float) - - fun reportProgress(progress: Float) - - fun endTask() -} - @SessionScope internal class DefaultInitialSyncProgressService @Inject constructor() : InitialSyncProgressService, @@ -94,63 +84,3 @@ internal class DefaultInitialSyncProgressService @Inject constructor() status.postValue(InitialSyncProgressService.Status.Idle) } } - -private class TaskInfo(@StringRes val nameRes: Int, - val totalProgress: Int, - val parent: TaskInfo?, - val parentWeight: Float) { - var child: TaskInfo? = null - var currentProgress = 0F - private set - private val offset = parent?.currentProgress ?: 0F - - /** - * Get the further child - */ - fun leaf(): TaskInfo { - var last = this - while (last.child != null) { - last = last.child!! - } - return last - } - - /** - * Set progress of this task and update the parent progress iteratively - */ - fun setProgress(progress: Float) { - Timber.v("setProgress: $progress / $totalProgress") - currentProgress = progress - - parent?.let { - val parentProgress = (currentProgress / totalProgress) * (parentWeight * it.totalProgress) - it.setProgress(offset + parentProgress) - } - } -} - -internal inline fun reportSubtask(reporter: ProgressReporter?, - @StringRes nameRes: Int, - totalProgress: Int, - parentWeight: Float, - block: () -> T): T { - reporter?.startTask(nameRes, totalProgress, parentWeight) - return block().also { - reporter?.endTask() - } -} - -internal inline fun Map.mapWithProgress(reporter: ProgressReporter?, - @StringRes nameRes: Int, - parentWeight: Float, - transform: (Map.Entry) -> R): List { - var current = 0F - reporter?.startTask(nameRes, count() + 1, parentWeight) - return map { - reporter?.reportProgress(current) - current++ - transform.invoke(it) - }.also { - reporter?.endTask() - } -} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/initsync/Extensions.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/initsync/Extensions.kt new file mode 100644 index 0000000000..f58559117c --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/initsync/Extensions.kt @@ -0,0 +1,45 @@ +/* + * Copyright 2021 The Matrix.org Foundation C.I.C. + * + * 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. + */ + +package org.matrix.android.sdk.internal.session.initsync + +import androidx.annotation.StringRes + +internal inline fun reportSubtask(reporter: ProgressReporter?, + @StringRes nameRes: Int, + totalProgress: Int, + parentWeight: Float, + block: () -> T): T { + reporter?.startTask(nameRes, totalProgress, parentWeight) + return block().also { + reporter?.endTask() + } +} + +internal inline fun Map.mapWithProgress(reporter: ProgressReporter?, + @StringRes nameRes: Int, + parentWeight: Float, + transform: (Map.Entry) -> R): List { + var current = 0F + reporter?.startTask(nameRes, count() + 1, parentWeight) + return map { + reporter?.reportProgress(current) + current++ + transform.invoke(it) + }.also { + reporter?.endTask() + } +} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/initsync/ProgressReporter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/initsync/ProgressReporter.kt new file mode 100644 index 0000000000..5361d107d2 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/initsync/ProgressReporter.kt @@ -0,0 +1,29 @@ +/* + * Copyright 2021 The Matrix.org Foundation C.I.C. + * + * 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. + */ + +package org.matrix.android.sdk.internal.session.initsync + +import androidx.annotation.StringRes + +internal interface ProgressReporter { + fun startTask(@StringRes nameRes: Int, + totalProgress: Int, + parentWeight: Float) + + fun reportProgress(progress: Float) + + fun endTask() +} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/initsync/TaskInfo.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/initsync/TaskInfo.kt new file mode 100644 index 0000000000..37c2b152a9 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/initsync/TaskInfo.kt @@ -0,0 +1,54 @@ +/* + * Copyright 2021 The Matrix.org Foundation C.I.C. + * + * 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. + */ + +package org.matrix.android.sdk.internal.session.initsync + +import androidx.annotation.StringRes +import timber.log.Timber + +internal class TaskInfo(@StringRes val nameRes: Int, + val totalProgress: Int, + val parent: TaskInfo?, + val parentWeight: Float) { + var child: TaskInfo? = null + var currentProgress = 0F + private set + private val offset = parent?.currentProgress ?: 0F + + /** + * Get the further child + */ + fun leaf(): TaskInfo { + var last = this + while (last.child != null) { + last = last.child!! + } + return last + } + + /** + * Set progress of this task and update the parent progress iteratively + */ + fun setProgress(progress: Float) { + Timber.v("setProgress: $progress / $totalProgress") + currentProgress = progress + + parent?.let { + val parentProgress = (currentProgress / totalProgress) * (parentWeight * it.totalProgress) + it.setProgress(offset + parentProgress) + } + } +} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/CryptoSyncHandler.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/CryptoSyncHandler.kt index a244e7a273..ae60faf905 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/CryptoSyncHandler.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/CryptoSyncHandler.kt @@ -26,7 +26,7 @@ import org.matrix.android.sdk.internal.crypto.MXEventDecryptionResult import org.matrix.android.sdk.internal.crypto.algorithms.olm.OlmDecryptionResult import org.matrix.android.sdk.internal.crypto.model.event.OlmEventContent import org.matrix.android.sdk.internal.crypto.verification.DefaultVerificationService -import org.matrix.android.sdk.internal.session.ProgressReporter +import org.matrix.android.sdk.internal.session.initsync.ProgressReporter import org.matrix.android.sdk.internal.session.sync.model.SyncResponse import org.matrix.android.sdk.internal.session.sync.model.ToDeviceSyncResponse import timber.log.Timber diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/GroupSyncHandler.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/GroupSyncHandler.kt index 03ad76e19a..112236b14f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/GroupSyncHandler.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/GroupSyncHandler.kt @@ -23,8 +23,8 @@ import org.matrix.android.sdk.internal.database.model.GroupEntity import org.matrix.android.sdk.internal.database.model.GroupSummaryEntity import org.matrix.android.sdk.internal.database.query.getOrCreate import org.matrix.android.sdk.internal.database.query.where -import org.matrix.android.sdk.internal.session.ProgressReporter -import org.matrix.android.sdk.internal.session.mapWithProgress +import org.matrix.android.sdk.internal.session.initsync.ProgressReporter +import org.matrix.android.sdk.internal.session.initsync.mapWithProgress import org.matrix.android.sdk.internal.session.sync.model.GroupsSyncResponse import org.matrix.android.sdk.internal.session.sync.model.InvitedGroupSync import javax.inject.Inject diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomSyncHandler.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomSyncHandler.kt index 7d8966579e..648dd2d88f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomSyncHandler.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomSyncHandler.kt @@ -49,9 +49,9 @@ import org.matrix.android.sdk.internal.database.query.where import org.matrix.android.sdk.internal.di.MoshiProvider import org.matrix.android.sdk.internal.di.UserId import org.matrix.android.sdk.internal.extensions.clearWith -import org.matrix.android.sdk.internal.session.ProgressReporter -import org.matrix.android.sdk.internal.session.mapWithProgress -import org.matrix.android.sdk.internal.session.reportSubtask +import org.matrix.android.sdk.internal.session.initsync.ProgressReporter +import org.matrix.android.sdk.internal.session.initsync.mapWithProgress +import org.matrix.android.sdk.internal.session.initsync.reportSubtask import org.matrix.android.sdk.internal.session.room.membership.RoomChangeMembershipStateDataSource import org.matrix.android.sdk.internal.session.room.membership.RoomMemberEventHandler import org.matrix.android.sdk.internal.session.room.read.FullyReadContent diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncResponseHandler.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncResponseHandler.kt index a80b733dcc..3f501858b1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncResponseHandler.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncResponseHandler.kt @@ -25,10 +25,10 @@ import org.matrix.android.sdk.internal.crypto.DefaultCryptoService import org.matrix.android.sdk.internal.di.SessionDatabase import org.matrix.android.sdk.internal.di.SessionId import org.matrix.android.sdk.internal.di.WorkManagerProvider -import org.matrix.android.sdk.internal.session.ProgressReporter +import org.matrix.android.sdk.internal.session.initsync.ProgressReporter import org.matrix.android.sdk.internal.session.group.GetGroupDataWorker import org.matrix.android.sdk.internal.session.notification.ProcessEventForPushTask -import org.matrix.android.sdk.internal.session.reportSubtask +import org.matrix.android.sdk.internal.session.initsync.reportSubtask import org.matrix.android.sdk.internal.session.sync.model.GroupsSyncResponse import org.matrix.android.sdk.internal.session.sync.model.RoomsSyncResponse import org.matrix.android.sdk.internal.session.sync.model.SyncResponse diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTask.kt index ea06db7071..bc63b991b2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTask.kt @@ -24,10 +24,10 @@ import org.matrix.android.sdk.internal.network.GlobalErrorReceiver import org.matrix.android.sdk.internal.network.TimeOutInterceptor import org.matrix.android.sdk.internal.network.executeRequest import org.matrix.android.sdk.internal.network.toFailure -import org.matrix.android.sdk.internal.session.DefaultInitialSyncProgressService +import org.matrix.android.sdk.internal.session.initsync.DefaultInitialSyncProgressService import org.matrix.android.sdk.internal.session.filter.FilterRepository import org.matrix.android.sdk.internal.session.homeserver.GetHomeServerCapabilitiesTask -import org.matrix.android.sdk.internal.session.reportSubtask +import org.matrix.android.sdk.internal.session.initsync.reportSubtask import org.matrix.android.sdk.internal.session.sync.model.LazyRoomSync import org.matrix.android.sdk.internal.session.sync.model.SyncResponse import org.matrix.android.sdk.internal.session.sync.parsing.InitialSyncResponseParser diff --git a/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt b/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt index 2a0ef0bdd6..74399d9215 100644 --- a/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt +++ b/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt @@ -60,7 +60,7 @@ import im.vector.app.features.workers.signout.ServerBackupStatusViewState import im.vector.app.push.fcm.FcmHelper import io.reactivex.android.schedulers.AndroidSchedulers import kotlinx.parcelize.Parcelize -import org.matrix.android.sdk.api.session.InitialSyncProgressService +import org.matrix.android.sdk.api.session.initsync.InitialSyncProgressService import org.matrix.android.sdk.api.session.permalinks.PermalinkService import org.matrix.android.sdk.api.util.MatrixItem import org.matrix.android.sdk.internal.session.sync.InitialSyncStrategy diff --git a/vector/src/main/java/im/vector/app/features/home/HomeActivityViewModel.kt b/vector/src/main/java/im/vector/app/features/home/HomeActivityViewModel.kt index 62bdc61b63..ad61928509 100644 --- a/vector/src/main/java/im/vector/app/features/home/HomeActivityViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/HomeActivityViewModel.kt @@ -40,7 +40,7 @@ import org.matrix.android.sdk.api.auth.registration.RegistrationFlowResponse import org.matrix.android.sdk.api.auth.registration.nextUncompletedStage import org.matrix.android.sdk.api.extensions.tryOrNull import org.matrix.android.sdk.api.pushrules.RuleIds -import org.matrix.android.sdk.api.session.InitialSyncProgressService +import org.matrix.android.sdk.api.session.initsync.InitialSyncProgressService import org.matrix.android.sdk.api.session.room.model.Membership import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams import org.matrix.android.sdk.api.util.toMatrixItem @@ -130,7 +130,7 @@ class HomeActivityViewModel @AssistedInject constructor( // Schedule a check of the bootstrap when the init sync will be finished checkBootstrap = true } - is InitialSyncProgressService.Status.Idle -> { + is InitialSyncProgressService.Status.Idle -> { if (checkBootstrap) { checkBootstrap = false maybeBootstrapCrossSigningAfterInitialSync() diff --git a/vector/src/main/java/im/vector/app/features/home/HomeActivityViewState.kt b/vector/src/main/java/im/vector/app/features/home/HomeActivityViewState.kt index 0f80fa29ef..d4df7cd073 100644 --- a/vector/src/main/java/im/vector/app/features/home/HomeActivityViewState.kt +++ b/vector/src/main/java/im/vector/app/features/home/HomeActivityViewState.kt @@ -17,7 +17,7 @@ package im.vector.app.features.home import com.airbnb.mvrx.MvRxState -import org.matrix.android.sdk.api.session.InitialSyncProgressService +import org.matrix.android.sdk.api.session.initsync.InitialSyncProgressService data class HomeActivityViewState( val initialSyncProgressServiceStatus: InitialSyncProgressService.Status = InitialSyncProgressService.Status.Idle From c3192d9f7cc5b8c44b7f252c63b86b962aa56634 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 9 Feb 2021 11:41:26 +0100 Subject: [PATCH 081/578] Latest improvement --- .../DefaultInitialSyncProgressService.kt | 32 ++++++++++++------- .../sdk/internal/session/sync/SyncTask.kt | 5 ++- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/initsync/DefaultInitialSyncProgressService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/initsync/DefaultInitialSyncProgressService.kt index fd3c629866..dc069d3e5e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/initsync/DefaultInitialSyncProgressService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/initsync/DefaultInitialSyncProgressService.kt @@ -35,21 +35,29 @@ internal class DefaultInitialSyncProgressService @Inject constructor() return status } + /** + * Create a rootTask + */ + fun startRoot(@StringRes nameRes: Int, + totalProgress: Int) { + endAll() + rootTask = TaskInfo(nameRes, totalProgress, null, 1F) + reportProgress(0F) + } + + /** + * Add a child to the leaf + */ override fun startTask(@StringRes nameRes: Int, totalProgress: Int, parentWeight: Float) { - // Create a rootTask, or add a child to the leaf - if (rootTask == null) { - rootTask = TaskInfo(nameRes, totalProgress, null, 1F) - } else { - val currentLeaf = rootTask!!.leaf() - currentLeaf.child = TaskInfo( - nameRes = nameRes, - totalProgress = totalProgress, - parent = currentLeaf, - parentWeight = parentWeight - ) - } + val currentLeaf = rootTask?.leaf() ?: return + currentLeaf.child = TaskInfo( + nameRes = nameRes, + totalProgress = totalProgress, + parent = currentLeaf, + parentWeight = parentWeight + ) reportProgress(0F) } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTask.kt index bc63b991b2..dea047f7d0 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTask.kt @@ -24,9 +24,9 @@ import org.matrix.android.sdk.internal.network.GlobalErrorReceiver import org.matrix.android.sdk.internal.network.TimeOutInterceptor import org.matrix.android.sdk.internal.network.executeRequest import org.matrix.android.sdk.internal.network.toFailure -import org.matrix.android.sdk.internal.session.initsync.DefaultInitialSyncProgressService import org.matrix.android.sdk.internal.session.filter.FilterRepository import org.matrix.android.sdk.internal.session.homeserver.GetHomeServerCapabilitiesTask +import org.matrix.android.sdk.internal.session.initsync.DefaultInitialSyncProgressService import org.matrix.android.sdk.internal.session.initsync.reportSubtask import org.matrix.android.sdk.internal.session.sync.model.LazyRoomSync import org.matrix.android.sdk.internal.session.sync.model.SyncResponse @@ -90,8 +90,7 @@ internal class DefaultSyncTask @Inject constructor( if (isInitialSync) { // We might want to get the user information in parallel too userStore.createOrUpdate(userId) - initialSyncProgressService.endAll() - initialSyncProgressService.startTask(R.string.initial_sync_start_importing_account, 100, 1F) + initialSyncProgressService.startRoot(R.string.initial_sync_start_importing_account, 100) } // Maybe refresh the home server capabilities data we know getHomeServerCapabilitiesTask.execute(GetHomeServerCapabilitiesTask.Params(forceRefresh = false)) From 29359ad119f96cf58563eef0851a31b5152fe650 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 16 Feb 2021 12:04:00 +0100 Subject: [PATCH 082/578] Update change after rebase --- CHANGES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 930068dd6c..9d1ba6ce07 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -6,6 +6,7 @@ Features ✨: Improvements 🙌: - Fetch homeserver type and version and display in a new setting screen and add info in rageshakes (#2831) + - Improve initial sync performance (#983) Bugfix 🐛: - @@ -90,7 +91,6 @@ Improvements 🙌: - SSO support for cross signing (#1062) - Deactivate account when logged in with SSO (#1264) - SSO UIA doesn't work (#2754) - - Improve initial sync performance (#983) Bugfix 🐛: - Fix clear cache issue: sometimes, after a clear cache, there is still a token, so the init sync service is not started. From c181f7e4218e5cfc684723320dd5ad4874727fad Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 17 Feb 2021 11:06:32 +0100 Subject: [PATCH 083/578] Please code quality check --- tools/check/forbidden_strings_in_code.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/check/forbidden_strings_in_code.txt b/tools/check/forbidden_strings_in_code.txt index e9b29d99ba..a5127dc8aa 100644 --- a/tools/check/forbidden_strings_in_code.txt +++ b/tools/check/forbidden_strings_in_code.txt @@ -161,7 +161,7 @@ Formatter\.formatShortFileSize===1 # android\.text\.TextUtils ### This is not a rule, but a warning: the number of "enum class" has changed. For Json classes, it is mandatory that they have `@JsonClass(generateAdapter = false)`. If the enum is not used as a Json class, change the value in file forbidden_strings_in_code.txt -enum class===88 +enum class===89 ### Do not import temporary legacy classes import org.matrix.android.sdk.internal.legacy.riot===3 From 486815b9ab4535c059c218d69a8a8b7cd8fd08c3 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 23 Feb 2021 10:31:00 +0100 Subject: [PATCH 084/578] Pip --- CHANGES.md | 1 + vector/src/main/AndroidManifest.xml | 39 +++++++------- .../call/conference/JitsiCallViewEvents.kt | 11 +++- .../call/conference/JitsiCallViewModel.kt | 53 +++++++++++-------- .../call/conference/JitsiCallViewState.kt | 6 --- .../call/conference/VectorJitsiActivity.kt | 27 ++++++---- 6 files changed, 79 insertions(+), 58 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 9d1ba6ce07..036bec8537 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -7,6 +7,7 @@ Features ✨: Improvements 🙌: - Fetch homeserver type and version and display in a new setting screen and add info in rageshakes (#2831) - Improve initial sync performance (#983) + - PIP support for Jitsi call (#2418) Bugfix 🐛: - diff --git a/vector/src/main/AndroidManifest.xml b/vector/src/main/AndroidManifest.xml index 52932920d4..bb56c4532e 100644 --- a/vector/src/main/AndroidManifest.xml +++ b/vector/src/main/AndroidManifest.xml @@ -37,7 +37,7 @@ tools:node="remove" /> - + @@ -83,8 +83,7 @@ android:resource="@xml/shortcuts" /> - + - + + android:configChanges="orientation|smallestScreenSize|screenLayout|screenSize" + android:resizeableActivity="true" + android:supportsPictureInPicture="true" /> @@ -247,27 +249,28 @@ - + - - + + - - + + - - - - + + + + - + jitsiMeetPropertiesFactory.create(url) } setState { - copy( - widget = Success(jitsiWidget), - jitsiUrl = "https://${ppt?.domain}", - confId = ppt?.confId ?: "", - subject = roomName ?: "" - ) + copy(widget = Success(jitsiWidget)) + } + + if (!confIsStarted) { + confIsStarted = true + startConference(jitsiWidget) } } else { setState { @@ -87,6 +77,26 @@ class JitsiCallViewModel @AssistedInject constructor( .disposeOnClear() } + private fun startConference(jitsiWidget: Widget) { + val me = session.getRoomMember(session.myUserId, args.roomId)?.toMatrixItem() + val userInfo = JitsiMeetUserInfo().apply { + displayName = me?.getBestName() + avatar = me?.avatarUrl?.let { session.contentUrlResolver().resolveFullSize(it) }?.let { URL(it) } + } + val roomName = session.getRoomSummary(args.roomId)?.displayName + + val ppt = widgetService.getWidgetComputedUrl(jitsiWidget, themeProvider.isLightTheme()) + ?.let { url -> jitsiMeetPropertiesFactory.create(url) } + + _viewEvents.post(JitsiCallViewEvents.StartConference( + enableVideo = args.enableVideo, + jitsiUrl = "https://${ppt?.domain}", + subject = roomName ?: "", + confId = ppt?.confId ?: "", + userInfo = userInfo + )) + } + override fun handle(action: JitsiCallViewActions) { } @@ -106,8 +116,7 @@ class JitsiCallViewModel @AssistedInject constructor( return JitsiCallViewState( roomId = args.roomId, - widgetId = args.widgetId, - enableVideo = args.enableVideo + widgetId = args.widgetId ) } } diff --git a/vector/src/main/java/im/vector/app/features/call/conference/JitsiCallViewState.kt b/vector/src/main/java/im/vector/app/features/call/conference/JitsiCallViewState.kt index 72b87e7f1b..fe327f5867 100644 --- a/vector/src/main/java/im/vector/app/features/call/conference/JitsiCallViewState.kt +++ b/vector/src/main/java/im/vector/app/features/call/conference/JitsiCallViewState.kt @@ -19,16 +19,10 @@ package im.vector.app.features.call.conference import com.airbnb.mvrx.Async import com.airbnb.mvrx.MvRxState import com.airbnb.mvrx.Uninitialized -import org.jitsi.meet.sdk.JitsiMeetUserInfo import org.matrix.android.sdk.api.session.widgets.model.Widget data class JitsiCallViewState( val roomId: String = "", val widgetId: String = "", - val enableVideo: Boolean = true, - val jitsiUrl: String = "", - val subject: String = "", - val confId: String = "", - val userInfo: JitsiMeetUserInfo = JitsiMeetUserInfo(), val widget: Async = Uninitialized ) : MvRxState diff --git a/vector/src/main/java/im/vector/app/features/call/conference/VectorJitsiActivity.kt b/vector/src/main/java/im/vector/app/features/call/conference/VectorJitsiActivity.kt index caece858aa..7fe2c2da0b 100644 --- a/vector/src/main/java/im/vector/app/features/call/conference/VectorJitsiActivity.kt +++ b/vector/src/main/java/im/vector/app/features/call/conference/VectorJitsiActivity.kt @@ -80,6 +80,12 @@ class VectorJitsiActivity : VectorBaseActivity(), JitsiMee renderState(it) } + jitsiViewModel.observeViewEvents { + when(it) { + is JitsiCallViewEvents.StartConference -> configureJitsiView(it) + } + } + registerForBroadcastMessages() } @@ -96,7 +102,6 @@ class VectorJitsiActivity : VectorBaseActivity(), JitsiMee is Success -> { views.jitsiProgressLayout.isVisible = false jitsiMeetView?.isVisible = true - configureJitsiView(viewState) } else -> { jitsiMeetView?.isVisible = false @@ -105,12 +110,12 @@ class VectorJitsiActivity : VectorBaseActivity(), JitsiMee } } - private fun configureJitsiView(viewState: JitsiCallViewState) { + private fun configureJitsiView(startConference: JitsiCallViewEvents.StartConference) { val jitsiMeetConferenceOptions = JitsiMeetConferenceOptions.Builder() - .setVideoMuted(!viewState.enableVideo) - .setUserInfo(viewState.userInfo) + .setVideoMuted(!startConference.enableVideo) + .setUserInfo(startConference.userInfo) .apply { - tryOrNull { URL(viewState.jitsiUrl) }?.let { + tryOrNull { URL(startConference.jitsiUrl) }?.let { setServerURL(it) } } @@ -120,8 +125,8 @@ class VectorJitsiActivity : VectorBaseActivity(), JitsiMee .setFeatureFlag("add-people.enabled", false) .setFeatureFlag("video-share.enabled", false) .setFeatureFlag("call-integration.enabled", false) - .setRoom(viewState.confId) - .setSubject(viewState.subject) + .setRoom(startConference.confId) + .setSubject(startConference.subject) .build() jitsiMeetView?.join(jitsiMeetConferenceOptions) } @@ -147,10 +152,10 @@ class VectorJitsiActivity : VectorBaseActivity(), JitsiMee super.onDestroy() } -// override fun onUserLeaveHint() { -// super.onUserLeaveHint() -// jitsiMeetView?.enterPictureInPicture() -// } + override fun onUserLeaveHint() { + super.onUserLeaveHint() + jitsiMeetView?.enterPictureInPicture() + } override fun onNewIntent(intent: Intent?) { JitsiMeetActivityDelegate.onNewIntent(intent) From 9c1475d2f19c5c3924784add9d29cb5c326c8a9a Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 23 Feb 2021 11:27:04 +0100 Subject: [PATCH 085/578] To squash --- vector/src/main/AndroidManifest.xml | 3 ++- .../call/conference/VectorJitsiActivity.kt | 21 ++++++++++++++----- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/vector/src/main/AndroidManifest.xml b/vector/src/main/AndroidManifest.xml index bb56c4532e..07606d315c 100644 --- a/vector/src/main/AndroidManifest.xml +++ b/vector/src/main/AndroidManifest.xml @@ -235,10 +235,11 @@ + diff --git a/vector/src/main/java/im/vector/app/features/call/conference/VectorJitsiActivity.kt b/vector/src/main/java/im/vector/app/features/call/conference/VectorJitsiActivity.kt index 7fe2c2da0b..a8b3230954 100644 --- a/vector/src/main/java/im/vector/app/features/call/conference/VectorJitsiActivity.kt +++ b/vector/src/main/java/im/vector/app/features/call/conference/VectorJitsiActivity.kt @@ -20,6 +20,8 @@ import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.content.IntentFilter +import android.content.pm.PackageManager +import android.content.res.Configuration import android.os.Bundle import android.os.Parcelable import android.widget.FrameLayout @@ -31,6 +33,7 @@ import com.airbnb.mvrx.Success import com.airbnb.mvrx.viewModel import com.facebook.react.modules.core.PermissionListener import im.vector.app.core.di.ScreenComponent +import im.vector.app.core.extensions.exhaustive import im.vector.app.core.platform.VectorBaseActivity import im.vector.app.databinding.ActivityJitsiBinding import kotlinx.parcelize.Parcelize @@ -81,14 +84,20 @@ class VectorJitsiActivity : VectorBaseActivity(), JitsiMee } jitsiViewModel.observeViewEvents { - when(it) { + when (it) { is JitsiCallViewEvents.StartConference -> configureJitsiView(it) - } + }.exhaustive } registerForBroadcastMessages() } + override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean, + newConfig: Configuration) { + super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig) + Timber.w("onPictureInPictureModeChanged($isInPictureInPictureMode)") + } + override fun initUiAndData() { super.initUiAndData() jitsiMeetView = JitsiMeetView(this) @@ -131,9 +140,9 @@ class VectorJitsiActivity : VectorBaseActivity(), JitsiMee jitsiMeetView?.join(jitsiMeetConferenceOptions) } - override fun onPause() { + override fun onStop() { JitsiMeetActivityDelegate.onHostPause(this) - super.onPause() + super.onStop() } override fun onResume() { @@ -154,7 +163,9 @@ class VectorJitsiActivity : VectorBaseActivity(), JitsiMee override fun onUserLeaveHint() { super.onUserLeaveHint() - jitsiMeetView?.enterPictureInPicture() + if (packageManager.hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE)) { + jitsiMeetView?.enterPictureInPicture() + } } override fun onNewIntent(intent: Intent?) { From d2a1041a51c381363d914e5a068d7933d75d30a6 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 9 Feb 2021 15:39:14 +0100 Subject: [PATCH 086/578] Simpler code --- .../app/core/ui/views/ActiveConferenceView.kt | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/vector/src/main/java/im/vector/app/core/ui/views/ActiveConferenceView.kt b/vector/src/main/java/im/vector/app/core/ui/views/ActiveConferenceView.kt index 00c7bc16df..256f2d963e 100644 --- a/vector/src/main/java/im/vector/app/core/ui/views/ActiveConferenceView.kt +++ b/vector/src/main/java/im/vector/app/core/ui/views/ActiveConferenceView.kt @@ -46,7 +46,7 @@ class ActiveConferenceView @JvmOverloads constructor( } var callback: Callback? = null - var jitsiWidget: Widget? = null + private var jitsiWidget: Widget? = null private lateinit var views: ViewActiveConferenceViewBinding @@ -95,18 +95,12 @@ class ActiveConferenceView @JvmOverloads constructor( val summary = state.asyncRoomSummary() if (summary?.membership == Membership.JOIN) { // We only display banner for 'live' widgets - val activeConf = - state.activeRoomWidgets()?.firstOrNull { - // for now only jitsi? - it.type == WidgetType.Jitsi - } - - if (activeConf == null) { - isVisible = false - } else { - isVisible = true - jitsiWidget = activeConf + jitsiWidget = state.activeRoomWidgets()?.firstOrNull { + // for now only jitsi? + it.type == WidgetType.Jitsi } + + isVisible = jitsiWidget != null // if sent by me or if i can moderate? views.deleteWidgetButton.isVisible = state.isAllowedToManageWidgets } else { From 0607f835aa554be90c577768993edb2993b98cf3 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 23 Feb 2021 11:39:56 +0100 Subject: [PATCH 087/578] It's now in the manifest --- .../vector/app/features/call/conference/VectorJitsiActivity.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/vector/src/main/java/im/vector/app/features/call/conference/VectorJitsiActivity.kt b/vector/src/main/java/im/vector/app/features/call/conference/VectorJitsiActivity.kt index a8b3230954..45e5f5a2da 100644 --- a/vector/src/main/java/im/vector/app/features/call/conference/VectorJitsiActivity.kt +++ b/vector/src/main/java/im/vector/app/features/call/conference/VectorJitsiActivity.kt @@ -219,7 +219,6 @@ class VectorJitsiActivity : VectorBaseActivity(), JitsiMee fun newIntent(context: Context, roomId: String, widgetId: String, enableVideo: Boolean): Intent { return Intent(context, VectorJitsiActivity::class.java).apply { putExtra(MvRx.KEY_ARG, Args(roomId, widgetId, enableVideo)) - addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP) } } } From d5f0a6d66a31c9acd2be1ac763408a5b9d7f1666 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 23 Feb 2021 11:52:15 +0100 Subject: [PATCH 088/578] Remove log, I do not understand when this code has disappeared. --- vector/src/main/java/im/vector/app/VectorApplication.kt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/vector/src/main/java/im/vector/app/VectorApplication.kt b/vector/src/main/java/im/vector/app/VectorApplication.kt index 1a7fe35745..f8cda2c417 100644 --- a/vector/src/main/java/im/vector/app/VectorApplication.kt +++ b/vector/src/main/java/im/vector/app/VectorApplication.kt @@ -58,6 +58,7 @@ import im.vector.app.features.settings.VectorPreferences import im.vector.app.features.themes.ThemeUtils import im.vector.app.features.version.VersionProvider import im.vector.app.push.fcm.FcmHelper +import org.jitsi.meet.sdk.log.JitsiMeetDefaultLogHandler import org.matrix.android.sdk.api.Matrix import org.matrix.android.sdk.api.MatrixConfiguration import org.matrix.android.sdk.api.auth.AuthenticationService @@ -117,6 +118,11 @@ class VectorApplication : vectorUncaughtExceptionHandler.activate(this) rxConfig.setupRxPlugin() + // Remove Log handler statically added by Jitsi + Timber.forest() + .filterIsInstance(JitsiMeetDefaultLogHandler::class.java) + .forEach { Timber.uproot(it) } + if (BuildConfig.DEBUG) { Timber.plant(Timber.DebugTree()) } From 5e4219cf8e9e0884bdc2bb70cb0e442e698bbf7c Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 23 Feb 2021 12:36:45 +0100 Subject: [PATCH 089/578] Jitsi: handle switch to another conference, now possible since we support PiP --- .../call/conference/JitsiCallViewActions.kt | 10 ++- .../call/conference/JitsiCallViewEvents.kt | 7 ++ .../call/conference/JitsiCallViewModel.kt | 71 ++++++++++++++++--- .../call/conference/JitsiCallViewState.kt | 1 + .../call/conference/VectorJitsiActivity.kt | 32 ++++++++- vector/src/main/res/values/strings.xml | 3 + 6 files changed, 110 insertions(+), 14 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/call/conference/JitsiCallViewActions.kt b/vector/src/main/java/im/vector/app/features/call/conference/JitsiCallViewActions.kt index 6554e50d63..830af7de01 100644 --- a/vector/src/main/java/im/vector/app/features/call/conference/JitsiCallViewActions.kt +++ b/vector/src/main/java/im/vector/app/features/call/conference/JitsiCallViewActions.kt @@ -18,4 +18,12 @@ package im.vector.app.features.call.conference import im.vector.app.core.platform.VectorViewModelAction -sealed class JitsiCallViewActions : VectorViewModelAction +sealed class JitsiCallViewActions : VectorViewModelAction { + data class SwitchTo(val args: VectorJitsiActivity.Args, + val withConfirmation: Boolean) : JitsiCallViewActions() + + /** + * The ViewModel will either ask the View to finish, or to join another conf. + */ + object OnConferenceLeft: JitsiCallViewActions() +} diff --git a/vector/src/main/java/im/vector/app/features/call/conference/JitsiCallViewEvents.kt b/vector/src/main/java/im/vector/app/features/call/conference/JitsiCallViewEvents.kt index 4c62e34da1..d41f758f52 100644 --- a/vector/src/main/java/im/vector/app/features/call/conference/JitsiCallViewEvents.kt +++ b/vector/src/main/java/im/vector/app/features/call/conference/JitsiCallViewEvents.kt @@ -27,4 +27,11 @@ sealed class JitsiCallViewEvents : VectorViewEvents { val confId: String, val userInfo: JitsiMeetUserInfo ) : JitsiCallViewEvents() + + data class ConfirmSwitchingConference( + val args: VectorJitsiActivity.Args + ) : JitsiCallViewEvents() + + object LeaveConference : JitsiCallViewEvents() + object Finish : JitsiCallViewEvents() } diff --git a/vector/src/main/java/im/vector/app/features/call/conference/JitsiCallViewModel.kt b/vector/src/main/java/im/vector/app/features/call/conference/JitsiCallViewModel.kt index b46bdd50e5..cf330ee4d6 100644 --- a/vector/src/main/java/im/vector/app/features/call/conference/JitsiCallViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/call/conference/JitsiCallViewModel.kt @@ -19,12 +19,15 @@ package im.vector.app.features.call.conference import com.airbnb.mvrx.Fail import com.airbnb.mvrx.MvRxViewModelFactory import com.airbnb.mvrx.Success +import com.airbnb.mvrx.Uninitialized import com.airbnb.mvrx.ViewModelContext import dagger.assisted.Assisted -import dagger.assisted.AssistedInject import dagger.assisted.AssistedFactory +import dagger.assisted.AssistedInject +import im.vector.app.core.extensions.exhaustive import im.vector.app.core.platform.VectorViewModel import im.vector.app.features.themes.ThemeProvider +import io.reactivex.disposables.Disposable import org.jitsi.meet.sdk.JitsiMeetUserInfo import org.matrix.android.sdk.api.query.QueryStringValue import org.matrix.android.sdk.api.session.Session @@ -36,7 +39,6 @@ import java.net.URL class JitsiCallViewModel @AssistedInject constructor( @Assisted initialState: JitsiCallViewState, - @Assisted private val args: VectorJitsiActivity.Args, private val session: Session, private val jitsiMeetPropertiesFactory: JitsiWidgetPropertiesFactory, private val themeProvider: ThemeProvider @@ -44,15 +46,23 @@ class JitsiCallViewModel @AssistedInject constructor( @AssistedFactory interface Factory { - fun create(initialState: JitsiCallViewState, args: VectorJitsiActivity.Args): JitsiCallViewModel + fun create(initialState: JitsiCallViewState): JitsiCallViewModel } + private var currentWidgetObserver: Disposable? = null private val widgetService = session.widgetService() private var confIsStarted = false + private var pendingArgs: VectorJitsiActivity.Args? = null init { - widgetService.getRoomWidgetsLive(args.roomId, QueryStringValue.Equals(args.widgetId), WidgetType.Jitsi.values()) + observeWidget(initialState.roomId, initialState.widgetId) + } + + private fun observeWidget(roomId: String, widgetId: String) { + confIsStarted = false + currentWidgetObserver?.dispose() + currentWidgetObserver = widgetService.getRoomWidgetsLive(roomId, QueryStringValue.Equals(widgetId), WidgetType.Jitsi.values()) .asObservable() .distinctUntilChanged() .subscribe { @@ -77,19 +87,19 @@ class JitsiCallViewModel @AssistedInject constructor( .disposeOnClear() } - private fun startConference(jitsiWidget: Widget) { - val me = session.getRoomMember(session.myUserId, args.roomId)?.toMatrixItem() + private fun startConference(jitsiWidget: Widget) = withState { state -> + val me = session.getRoomMember(session.myUserId, state.roomId)?.toMatrixItem() val userInfo = JitsiMeetUserInfo().apply { displayName = me?.getBestName() avatar = me?.avatarUrl?.let { session.contentUrlResolver().resolveFullSize(it) }?.let { URL(it) } } - val roomName = session.getRoomSummary(args.roomId)?.displayName + val roomName = session.getRoomSummary(state.roomId)?.displayName val ppt = widgetService.getWidgetComputedUrl(jitsiWidget, themeProvider.isLightTheme()) ?.let { url -> jitsiMeetPropertiesFactory.create(url) } _viewEvents.post(JitsiCallViewEvents.StartConference( - enableVideo = args.enableVideo, + enableVideo = state.enableVideo, jitsiUrl = "https://${ppt?.domain}", subject = roomName ?: "", confId = ppt?.confId ?: "", @@ -98,6 +108,45 @@ class JitsiCallViewModel @AssistedInject constructor( } override fun handle(action: JitsiCallViewActions) { + when (action) { + is JitsiCallViewActions.SwitchTo -> handleSwitchTo(action) + JitsiCallViewActions.OnConferenceLeft -> handleOnConferenceLeft() + }.exhaustive + } + + private fun handleSwitchTo(action: JitsiCallViewActions.SwitchTo) = withState { state -> + // Check if it is the same conf + if (action.args.roomId != state.roomId + || action.args.widgetId != state.widgetId) { + if (action.withConfirmation) { + // Ask confirmation to switch + _viewEvents.post(JitsiCallViewEvents.ConfirmSwitchingConference(action.args)) + } else { + // Ask the view to leave the conf, then the view will tell us when it's done, to join the new conf + pendingArgs = action.args + _viewEvents.post(JitsiCallViewEvents.LeaveConference) + } + } + } + + private fun handleOnConferenceLeft() { + val safePendingArgs = pendingArgs + pendingArgs = null + + if (safePendingArgs == null) { + // Quit + _viewEvents.post(JitsiCallViewEvents.Finish) + } else { + setState { + copy( + roomId = safePendingArgs.roomId, + widgetId = safePendingArgs.widgetId, + enableVideo = safePendingArgs.enableVideo, + widget = Uninitialized + ) + } + observeWidget(safePendingArgs.roomId, safePendingArgs.widgetId) + } } companion object : MvRxViewModelFactory { @@ -107,8 +156,7 @@ class JitsiCallViewModel @AssistedInject constructor( @JvmStatic override fun create(viewModelContext: ViewModelContext, state: JitsiCallViewState): JitsiCallViewModel? { val callActivity: VectorJitsiActivity = viewModelContext.activity() - val callArgs: VectorJitsiActivity.Args = viewModelContext.args() - return callActivity.viewModelFactory.create(state, callArgs) + return callActivity.viewModelFactory.create(state) } override fun initialState(viewModelContext: ViewModelContext): JitsiCallViewState? { @@ -116,7 +164,8 @@ class JitsiCallViewModel @AssistedInject constructor( return JitsiCallViewState( roomId = args.roomId, - widgetId = args.widgetId + widgetId = args.widgetId, + enableVideo = args.enableVideo ) } } diff --git a/vector/src/main/java/im/vector/app/features/call/conference/JitsiCallViewState.kt b/vector/src/main/java/im/vector/app/features/call/conference/JitsiCallViewState.kt index fe327f5867..1fd04542e0 100644 --- a/vector/src/main/java/im/vector/app/features/call/conference/JitsiCallViewState.kt +++ b/vector/src/main/java/im/vector/app/features/call/conference/JitsiCallViewState.kt @@ -24,5 +24,6 @@ import org.matrix.android.sdk.api.session.widgets.model.Widget data class JitsiCallViewState( val roomId: String = "", val widgetId: String = "", + val enableVideo: Boolean = false, val widget: Async = Uninitialized ) : MvRxState diff --git a/vector/src/main/java/im/vector/app/features/call/conference/VectorJitsiActivity.kt b/vector/src/main/java/im/vector/app/features/call/conference/VectorJitsiActivity.kt index 45e5f5a2da..16478192f7 100644 --- a/vector/src/main/java/im/vector/app/features/call/conference/VectorJitsiActivity.kt +++ b/vector/src/main/java/im/vector/app/features/call/conference/VectorJitsiActivity.kt @@ -25,6 +25,7 @@ import android.content.res.Configuration import android.os.Bundle import android.os.Parcelable import android.widget.FrameLayout +import androidx.appcompat.app.AlertDialog import androidx.core.view.isVisible import androidx.localbroadcastmanager.content.LocalBroadcastManager import com.airbnb.mvrx.Fail @@ -32,6 +33,7 @@ import com.airbnb.mvrx.MvRx import com.airbnb.mvrx.Success import com.airbnb.mvrx.viewModel import com.facebook.react.modules.core.PermissionListener +import im.vector.app.R import im.vector.app.core.di.ScreenComponent import im.vector.app.core.extensions.exhaustive import im.vector.app.core.platform.VectorBaseActivity @@ -85,13 +87,31 @@ class VectorJitsiActivity : VectorBaseActivity(), JitsiMee jitsiViewModel.observeViewEvents { when (it) { - is JitsiCallViewEvents.StartConference -> configureJitsiView(it) + is JitsiCallViewEvents.StartConference -> configureJitsiView(it) + is JitsiCallViewEvents.ConfirmSwitchingConference -> handleConfirmSwitching(it) + JitsiCallViewEvents.Finish -> finish() + JitsiCallViewEvents.LeaveConference -> handleLeaveConference() }.exhaustive } registerForBroadcastMessages() } + private fun handleLeaveConference() { + jitsiMeetView?.leave() + } + + private fun handleConfirmSwitching(action: JitsiCallViewEvents.ConfirmSwitchingConference) { + AlertDialog.Builder(this) + .setTitle(R.string.dialog_title_warning) + .setMessage(R.string.jitsi_leave_conf_to_join_another_one_content) + .setPositiveButton(R.string.action_switch) { _, _ -> + jitsiViewModel.handle(JitsiCallViewActions.SwitchTo(action.args, false)) + } + .setNegativeButton(R.string.cancel, null) + .show() + } + override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean, newConfig: Configuration) { super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig) @@ -170,6 +190,14 @@ class VectorJitsiActivity : VectorBaseActivity(), JitsiMee override fun onNewIntent(intent: Intent?) { JitsiMeetActivityDelegate.onNewIntent(intent) + + // Is it a switch to another conf? + intent?.takeIf { it.hasExtra(MvRx.KEY_ARG) } + ?.let { intent.getParcelableExtra(MvRx.KEY_ARG) } + ?.let { + jitsiViewModel.handle(JitsiCallViewActions.SwitchTo(it, true)) + } + super.onNewIntent(intent) } @@ -211,7 +239,7 @@ class VectorJitsiActivity : VectorBaseActivity(), JitsiMee Timber.v("JitsiMeetViewListener.onConferenceTerminated()") // Do not finish if there is an error if (data["error"] == null) { - finish() + jitsiViewModel.handle(JitsiCallViewActions.OnConferenceLeft) } } diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index a3eade1f02..320f14eccd 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -133,6 +133,7 @@ Close Copy Add + Switch Unpublish Copied to clipboard Disable @@ -1318,6 +1319,8 @@ Sorry, conference calls with Jitsi are not supported on old devices (devices with Android OS below 6.0) + Leave the current conference and switch to the other one? + This widget wants to use the following resources: Allow Block All From dee3676640e6447c52176392366d27759a81288d Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 23 Feb 2021 13:13:15 +0100 Subject: [PATCH 090/578] Add a delay to avoid glitch when displaying the dialog --- .../app/features/call/conference/JitsiCallViewModel.kt | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/call/conference/JitsiCallViewModel.kt b/vector/src/main/java/im/vector/app/features/call/conference/JitsiCallViewModel.kt index cf330ee4d6..92dd2ebcd0 100644 --- a/vector/src/main/java/im/vector/app/features/call/conference/JitsiCallViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/call/conference/JitsiCallViewModel.kt @@ -16,6 +16,7 @@ package im.vector.app.features.call.conference +import androidx.lifecycle.viewModelScope import com.airbnb.mvrx.Fail import com.airbnb.mvrx.MvRxViewModelFactory import com.airbnb.mvrx.Success @@ -28,6 +29,8 @@ import im.vector.app.core.extensions.exhaustive import im.vector.app.core.platform.VectorViewModel import im.vector.app.features.themes.ThemeProvider import io.reactivex.disposables.Disposable +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch import org.jitsi.meet.sdk.JitsiMeetUserInfo import org.matrix.android.sdk.api.query.QueryStringValue import org.matrix.android.sdk.api.session.Session @@ -119,8 +122,11 @@ class JitsiCallViewModel @AssistedInject constructor( if (action.args.roomId != state.roomId || action.args.widgetId != state.widgetId) { if (action.withConfirmation) { - // Ask confirmation to switch - _viewEvents.post(JitsiCallViewEvents.ConfirmSwitchingConference(action.args)) + // Ask confirmation to switch, but wait a bit for the Activity to quit the PiP mode + viewModelScope.launch { + delay(500) + _viewEvents.post(JitsiCallViewEvents.ConfirmSwitchingConference(action.args)) + } } else { // Ask the view to leave the conf, then the view will tell us when it's done, to join the new conf pendingArgs = action.args From ba1c9aa5cd59422f672569516707eaaabbcdd3bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20L=C3=B8vbr=C3=B8tte=20Olsen?= Date: Tue, 23 Feb 2021 17:06:50 +0000 Subject: [PATCH 091/578] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?= =?UTF-8?q?an=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 69.4% (1446 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/nb_NO/ --- vector/src/main/res/values-nb-rNO/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vector/src/main/res/values-nb-rNO/strings.xml b/vector/src/main/res/values-nb-rNO/strings.xml index c9161369cb..091ad16fa8 100644 --- a/vector/src/main/res/values-nb-rNO/strings.xml +++ b/vector/src/main/res/values-nb-rNO/strings.xml @@ -1158,7 +1158,7 @@ Nøkkelforespørsel sendt. SSL-feil: identiteten til jevnaldrende er ikke bekreftet. Kan ikke nå en hjemmeserver på denne URL-en, sjekk den - Dette er ikke en gyldig Matrix-serveradresse + Dette er ikke en gyldig adresse for en Matrix tjener Denne URL-en er ikke tilgjengelig, sjekk den Kan ikke registrere: e-post eierskap feil Fjern publiseringen From ec99b952312746600b7fb2b2d80556349ab75495 Mon Sep 17 00:00:00 2001 From: William Date: Tue, 23 Feb 2021 17:01:27 +0000 Subject: [PATCH 092/578] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?= =?UTF-8?q?an=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 69.4% (1446 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/nb_NO/ --- vector/src/main/res/values-nb-rNO/strings.xml | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/vector/src/main/res/values-nb-rNO/strings.xml b/vector/src/main/res/values-nb-rNO/strings.xml index 091ad16fa8..1ff7b91ee8 100644 --- a/vector/src/main/res/values-nb-rNO/strings.xml +++ b/vector/src/main/res/values-nb-rNO/strings.xml @@ -596,7 +596,7 @@ Om mulig, vennligst beskriv på engelsk. Forklar problemet ditt her For å diagnotisere feil, logger fra denne klienten vil bli sendt med denne feilmeldingen. Feilmeldingen, som inkluderer loggene og skjermdumper, blir ikke offentlig synlig. Hvis du foretrekker å bare sende teksten over, vennligst fjern merkene fra boksene: - Det ser ut som du rister på telefonen i frustrasjon. Har du list til å åpne feilrapporteringsskjermen\? + Det ser ut som du rister på telefonen i frustrasjon. Har du lyst til å åpne feilrapporteringsskjermen\? Applikasjonen kræsjet sist gang. Har du lyst til å åpne kræsjskjermen\? Sinnarist for å rapportere feil Feilrapport har blitt sendt @@ -934,7 +934,7 @@ Gjennomgå innstillingene dine for å aktivere push-varsler Feil kode, %d gjenværende forsøk - Feil kode, %d gjenværende forsøker + Feil kode, %d gjenværende forsøk Advarsel! Siste gjenværende forsøk før avlogging! For mange feil, du er logget ut @@ -1022,7 +1022,7 @@ Alle meldinger (støyende) %1$s rom funnet for %2$s - %1$s rommer funnet for %2$s + %1$s rom funnet for %2$s Bla gjennom katalogen Skriv inn et rom-ID eller et romalias @@ -1170,17 +1170,17 @@ \n \nMerk at denne handlingen starter appen på nytt, og det kan ta litt tid. Er du sikker på at du vil invitere %s til denne chatten\? - ekstern side kunne ikke plukke opp. - Videoanrop i prosess… - Anrop i prosess… - Brukeren kansellerte bekreftelsen + Ekstern vert kunne ikke plukke opp. + Pågående videosamtale… + Pågående samtale… + Brukeren kansellerte verifikasjonen Ingen identitetsserver er konfigurert, det er nødvendig å tilbakestille passordet ditt. Det ser ut til at du prøver å koble til en annen hjemmeserver. Vil du logge av\? Bli med i et rom for å begynne å bruke appen. Du har ikke flere uleste meldinger Velkommen hjem! - Dine direktemeldingssamtaler vises her. Trykk på + nederst til høyre for å starte noen. - Rommene dine vises her. Trykk på + nederst til høyre for å finne eksisterende eller starte noen av dine egne. + Dine direktemeldinger vises her. Trykk på + nederst til høyre for å starte noen. + Rommene dine vises her. Trykk på + nederst til høyre for å finne eksisterende eller start din egen. Godta Se reaksjoner Arrangement slettet av bruker @@ -1193,7 +1193,7 @@ Romnavn Romemne (valgfritt) Emne - Alle vil være med på dette rommet + Hvem som helst kan bli med i dette rommet Rominnstillinger Andre tredjepartsmeldinger Du ser allerede på dette rommet! @@ -1210,11 +1210,11 @@ Søk etter navn eller ID Aktiver sveip for å svare på tidslinjen Link kopiert til utklippstavlen - Legg til etter matrix-ID + Legg til med matrix-ID QR kode Legg til med QR-kode Oppretter rom… - Ingen resultater funnet, bruk Legg til etter matrix-ID for å søke på serveren. + Ingen resultater funnet, bruk Legg til med matrix-ID for å søke på serveren. Begynn å skrive for å få resultater Nylig Kjente brukere @@ -1564,4 +1564,6 @@ Uautorisert, mangler gyldig autentiseringslegitimasjon Tilbake System standard + Filtrer utestengte brukere + Endre widgets \ No newline at end of file From f49777ef566feb00cfb3fbaa7e91151331f46e79 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 24 Feb 2021 07:15:07 +0000 Subject: [PATCH 093/578] Bump olm from 3.2.1 to 3.2.2 Bumps olm from 3.2.1 to 3.2.2. Signed-off-by: dependabot[bot] --- matrix-sdk-android/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/matrix-sdk-android/build.gradle b/matrix-sdk-android/build.gradle index 3ade9f7214..62db4a5a9f 100644 --- a/matrix-sdk-android/build.gradle +++ b/matrix-sdk-android/build.gradle @@ -155,7 +155,7 @@ dependencies { implementation "io.arrow-kt:arrow-instances-core:$arrow_version" // olm lib is now hosted by jitpack: https://jitpack.io/#org.matrix.gitlab.matrix-org/olm - implementation 'org.matrix.gitlab.matrix-org:olm:3.2.1' + implementation 'org.matrix.gitlab.matrix-org:olm:3.2.2' // DI implementation "com.google.dagger:dagger:$daggerVersion" From 368e1fe9c18deb3ffaf8816d8696371a42448b63 Mon Sep 17 00:00:00 2001 From: William Date: Tue, 23 Feb 2021 18:52:39 +0000 Subject: [PATCH 094/578] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?= =?UTF-8?q?an=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 70.4% (1466 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/nb_NO/ --- vector/src/main/res/values-nb-rNO/strings.xml | 54 ++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/vector/src/main/res/values-nb-rNO/strings.xml b/vector/src/main/res/values-nb-rNO/strings.xml index 1ff7b91ee8..6865537fbb 100644 --- a/vector/src/main/res/values-nb-rNO/strings.xml +++ b/vector/src/main/res/values-nb-rNO/strings.xml @@ -1193,7 +1193,7 @@ Romnavn Romemne (valgfritt) Emne - Hvem som helst kan bli med i dette rommet + Hvem som helst vil kunne bli med i dette rommet Rominnstillinger Andre tredjepartsmeldinger Du ser allerede på dette rommet! @@ -1566,4 +1566,56 @@ System standard Filtrer utestengte brukere Endre widgets + Aktiver analyse for å hjelpe med å forbedre Element. + Varsel Personvern + Inkluderer avatar og visningsnavnendringer. + Vis kontohendelser + Invitasjoner, spark og utestengelser er ikke påvirket. + Vis delta og forlate arrangementer + Inkluderer invitasjoner/delta/forlot/spark/utesteng hendelser og avatar/visningsnavnendringer. + Vis chateffekter + Vis statens medlemsarrangementer + Vis tidsstempler i 12-timers format + Markdown formatering + Forhåndsvis lenker i chatten når hjemmeserveren din støtter denne funksjonen. + Forhåndsvisning av innebygd URL + Fest rom med uleste meldinger + Fest rom med tapte varsler + Hjemmeskjerm + Varslingsmål + Administrer kryptografinøkler + Bruk en Integration Manager til å administrere roboter, broer, widgets og klistremerkepakker. +\nIntegration Managers mottar konfigurasjonsdata, og kan endre moduler, sende rominvitasjoner og angi strømnivåer på dine vegne. + Forsinkelse mellom hver synkronisering + %s +\nSynkroniseringen kan bli utsatt avhengig av ressursene (batteriet) eller enhetens tilstand (hvilemodus). + Foretrukket synkroniseringsintervall + Tidsavbrudd for synkronisering forespørsel + Aktiver synkronisering i bakgrunnen + Du vil ikke bli varslet om innkommende meldinger når appen er i bakgrunnen. + Element vil synkroniseres i bakgrunnen med jevne mellomrom på presis tid (konfigurerbar). +\nDette vil påvirke radio og batteribruk, det vises en permanent melding om at Element lytter etter hendelser. + Element synkroniseres i bakgrunnen på en måte som bevarer enhetens begrensede ressurser (batteri). +\nAvhengig av enhetens ressurstilstand, kan synkroniseringen bli utsatt av operativsystemet. + Msgs i gruppechatter + Msgs som inneholder brukernavnet mitt + Msgs som inneholder visningsnavnet mitt + Konfigurer stille varsler + Konfigurer anropsvarsler + Konfigurer lyd varsler + • Varsler vil <b>ikke vise meldingsinnhold<b> + Ignorer optimalisering + Aktiver Start ved oppstart + Tjenesten starter når enheten startes på nytt. + Tjenesten kunne ikke startes på nytt + Tjenesten stoppet og startet på nytt automatisk. + Varslingstjeneste automatisk omstart + Start Tjeneste + Varslingstjenesten kjører ikke. +\nPrøv å starte programmet på nytt. + Varslingstjenesten kjører. + Varslingstjeneste + Play Tjenester Sjekk + Søker i katalogen… + INVITASJONER \ No newline at end of file From 6b0e66ce1f5cca13d5bc41dcacc3e7c58e65c585 Mon Sep 17 00:00:00 2001 From: ppnplusdf0eb2eb726b4bb3 Date: Tue, 23 Feb 2021 12:21:43 +0000 Subject: [PATCH 095/578] Translated using Weblate (Thai) Currently translated at 11.7% (244 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/th/ --- vector/src/main/res/values-th/strings.xml | 99 +++++++++++++++++++++++ 1 file changed, 99 insertions(+) diff --git a/vector/src/main/res/values-th/strings.xml b/vector/src/main/res/values-th/strings.xml index f583723f75..ac0b01b91d 100644 --- a/vector/src/main/res/values-th/strings.xml +++ b/vector/src/main/res/values-th/strings.xml @@ -164,4 +164,103 @@ คุณแน่ใจหรือไม่\? ข้อมูลชุมชน ค่าเริ่มต้นของระบบ + เพิ่มที่อยู่อีเมล + หมายเลขโทรศัพท์ + + พบ %1$s ห้องสำหรับ %2$s + + + %d ห้อง + + เข้าร่วม + ยังไม่รองรับการค้นหาในห้องที่เข้ารหัส + ไฟล์ + ผู้คน + ข้อความ + ห้อง + ไม่มีผลลัพธ์ + ค้นหา + เหตุผลที่รายงานเนื้อหานี้ + เชิญแล้ว + + เลือก %d รายการ + + การตั้งค่า + ไฟล์ + ผู้คน + ข้อมูลห้อง + เปลี่ยนหัวข้อ + อัปเกรดห้อง + เปิดใช้การเข้ารหัสห้อง + เปลี่ยนการตั้งค่า + เชิญผู้ใช้ + ส่งข้อความ + ไม่เชื่อถือ + เชื่อถือ + ออกจากระบบ + + %d ข้อความใหม่ + + ส่งข้อความ (ไม่เข้ารหัส)… + ส่งข้อความที่เข้ารหัส… + %1$s และ %2$s และคนอื่น ๆ กำลังพิมพ์… + %1$s และ %2$s กำลังพิมพ์… + %s กำลังพิมพ์… + ค้นหา + %1$s และ %2$s + %1$s %2$s + เหตุผล + เตะ + เลิกแบน + แบน + ออกจากห้องนี้ + เชิญ + ข้อความโดยตรง + โทร + เครื่องมือผู้ดูแล + %1$s %2$s ที่ผ่านมา + %1$s ตอนนี้ + ว่าง + ออฟไลน์ + ออนไลน์ + สร้าง + คุณแน่ใจหรือไม่ว่าต้องการออกจากห้อง + ออกจากห้อง + + %d วิ + + + %d นาที + + + %d ชม. + + + %d วัน + + เพิ่มสมาชิก + แชทใหม่ + ห้อง + ไปที่ข้อความแรกที่ยังไม่ได้อ่าน + แสดงรายชื่อสมาชิก + ปฏิเสธ + ตัวอย่าง + เข้าร่วม + ดำเนินการต่อ + ไม่ + ใช่ + บันทึกแล้ว + ต้องยืนยันว่าต้องการโทรจริง ๆ ก่อนที่จะเริ่มการโทร + ป้องกันการโทรโดยไม่ได้ตั้งใจ + หัวข้อห้อง + ยกเลิกการอัปโหลดหรือไม่\? + ยกเลิกการดาวน์โหลดหรือไม่\? + ส่งคำขอแล้ว + โปรดระบุ URL ที่ถูกต้อง + URL ต้องขึ้นต้นด้วย http[s]:// + ส่งข้อความเสียง + เฉพาะรายชื่อผู้ติดต่อ Matrix + ไม่มีห้องสาธารณะ + ยกเลิก + ระบุทั้งหมดว่าอ่านแล้ว \ No newline at end of file From 20c692fddfbf3b8ca863ce3e8745cbe4263bf028 Mon Sep 17 00:00:00 2001 From: Argetlami Date: Wed, 24 Feb 2021 14:19:33 +0000 Subject: [PATCH 096/578] Translated using Weblate (Finnish) Currently translated at 100.0% (11 of 11 strings) Translation: Element Android/Element Android Store Translate-URL: https://translate.element.io/projects/element-android/element-store/fi/ --- fastlane/metadata/android/fi/changelogs/40100120.txt | 2 +- fastlane/metadata/android/fi/changelogs/40100130.txt | 4 ++-- fastlane/metadata/android/fi/changelogs/40100140.txt | 2 ++ fastlane/metadata/android/fi/changelogs/40100150.txt | 2 ++ fastlane/metadata/android/fi/changelogs/40100160.txt | 2 ++ fastlane/metadata/android/fi/changelogs/40100170.txt | 2 ++ 6 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 fastlane/metadata/android/fi/changelogs/40100140.txt create mode 100644 fastlane/metadata/android/fi/changelogs/40100150.txt create mode 100644 fastlane/metadata/android/fi/changelogs/40100160.txt create mode 100644 fastlane/metadata/android/fi/changelogs/40100170.txt diff --git a/fastlane/metadata/android/fi/changelogs/40100120.txt b/fastlane/metadata/android/fi/changelogs/40100120.txt index 19b06d436a..cc47bb0ceb 100644 --- a/fastlane/metadata/android/fi/changelogs/40100120.txt +++ b/fastlane/metadata/android/fi/changelogs/40100120.txt @@ -1,2 +1,2 @@ -Tärkeimmät muutokset tässä versiossa: URL-esikatselu, uusi emoji-näppäimistö, uudet huoneasetukset ja lunta jouluna! +Tärkeimmät muutokset tässä versiossa: URL-esikatselu, uusi emoji-näppäimistö, uudet huoneasetukset ja lunta jouluksi! Täysi muutosloki: https://github.com/vector-im/element-android/releases/tag/v1.0.12 diff --git a/fastlane/metadata/android/fi/changelogs/40100130.txt b/fastlane/metadata/android/fi/changelogs/40100130.txt index 19b06d436a..f96792957b 100644 --- a/fastlane/metadata/android/fi/changelogs/40100130.txt +++ b/fastlane/metadata/android/fi/changelogs/40100130.txt @@ -1,2 +1,2 @@ -Tärkeimmät muutokset tässä versiossa: URL-esikatselu, uusi emoji-näppäimistö, uudet huoneasetukset ja lunta jouluna! -Täysi muutosloki: https://github.com/vector-im/element-android/releases/tag/v1.0.12 +Tärkeimmät muutokset tässä versiossa: URL-esikatselu, uusi emoji-näppäimistö, uudet huoneasetukset ja lunta jouluksi! +Täysi muutosloki: https://github.com/vector-im/element-android/releases/tag/v1.0.13 diff --git a/fastlane/metadata/android/fi/changelogs/40100140.txt b/fastlane/metadata/android/fi/changelogs/40100140.txt new file mode 100644 index 0000000000..b01b7e7325 --- /dev/null +++ b/fastlane/metadata/android/fi/changelogs/40100140.txt @@ -0,0 +1,2 @@ +Tärkeimmät muutokset tässä versiossa: Huoneoikeuksien muokkaus, automaattinen valoisa/tumma teema ja läjäpäin virheenkorjauksia. +Täysi muutosloki: https://github.com/vector-im/element-android/releases/tag/v1.0.14 diff --git a/fastlane/metadata/android/fi/changelogs/40100150.txt b/fastlane/metadata/android/fi/changelogs/40100150.txt new file mode 100644 index 0000000000..6ae0b1abf4 --- /dev/null +++ b/fastlane/metadata/android/fi/changelogs/40100150.txt @@ -0,0 +1,2 @@ +Tärkeimmät muutokset tässä versiossa: Social Login -tuki. +Täysi muutosloki: https://github.com/vector-im/element-android/releases/tag/v1.0.15 diff --git a/fastlane/metadata/android/fi/changelogs/40100160.txt b/fastlane/metadata/android/fi/changelogs/40100160.txt new file mode 100644 index 0000000000..ab143642a8 --- /dev/null +++ b/fastlane/metadata/android/fi/changelogs/40100160.txt @@ -0,0 +1,2 @@ +Tärkeimmät muutokset tässä versiossa: Social Login -tuki. +Täysi muutosloki: https://github.com/vector-im/element-android/releases/tag/v1.0.15 and https://github.com/vector-im/element-android/releases/tag/v1.0.16 diff --git a/fastlane/metadata/android/fi/changelogs/40100170.txt b/fastlane/metadata/android/fi/changelogs/40100170.txt new file mode 100644 index 0000000000..22a851b495 --- /dev/null +++ b/fastlane/metadata/android/fi/changelogs/40100170.txt @@ -0,0 +1,2 @@ +Tärkeimmät muutokset tässä versiossa: Virheenkorjauksia! +Täysi muutosloki: https://github.com/vector-im/element-android/releases/tag/v1.0.17 From 6ec8be0d3595f475bc37060e6f0c9322cc182c47 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 25 Feb 2021 07:18:51 +0000 Subject: [PATCH 097/578] Bump epoxy_version from 4.4.0 to 4.4.1 Bumps `epoxy_version` from 4.4.0 to 4.4.1. Updates `epoxy` from 4.4.0 to 4.4.1 - [Release notes](https://github.com/airbnb/epoxy/releases) - [Changelog](https://github.com/airbnb/epoxy/blob/master/CHANGELOG.md) - [Commits](https://github.com/airbnb/epoxy/compare/4.4.0...4.4.1) Updates `epoxy-glide-preloading` from 4.4.0 to 4.4.1 - [Release notes](https://github.com/airbnb/epoxy/releases) - [Changelog](https://github.com/airbnb/epoxy/blob/master/CHANGELOG.md) - [Commits](https://github.com/airbnb/epoxy/compare/4.4.0...4.4.1) Updates `epoxy-processor` from 4.4.0 to 4.4.1 - [Release notes](https://github.com/airbnb/epoxy/releases) - [Changelog](https://github.com/airbnb/epoxy/blob/master/CHANGELOG.md) - [Commits](https://github.com/airbnb/epoxy/compare/4.4.0...4.4.1) Updates `epoxy-paging` from 4.4.0 to 4.4.1 - [Release notes](https://github.com/airbnb/epoxy/releases) - [Changelog](https://github.com/airbnb/epoxy/blob/master/CHANGELOG.md) - [Commits](https://github.com/airbnb/epoxy/compare/4.4.0...4.4.1) Signed-off-by: dependabot[bot] --- vector/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vector/build.gradle b/vector/build.gradle index 2c5dc01e37..41da51a32c 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -287,7 +287,7 @@ android { dependencies { - def epoxy_version = '4.4.0' + def epoxy_version = '4.4.1' def fragment_version = '1.3.0' def arrow_version = "0.8.2" def markwon_version = '4.1.2' From 8c23b0561b6aae1f1fa9acc4d488517d78aa0dd5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 25 Feb 2021 07:20:31 +0000 Subject: [PATCH 098/578] Bump recyclerview from 1.2.0-beta01 to 1.2.0-beta02 Bumps recyclerview from 1.2.0-beta01 to 1.2.0-beta02. Signed-off-by: dependabot[bot] --- attachment-viewer/build.gradle | 2 +- vector/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/attachment-viewer/build.gradle b/attachment-viewer/build.gradle index 8f9785e77c..7725bf23db 100644 --- a/attachment-viewer/build.gradle +++ b/attachment-viewer/build.gradle @@ -69,7 +69,7 @@ dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" implementation 'androidx.core:core-ktx:1.3.2' implementation 'androidx.appcompat:appcompat:1.2.0' - implementation "androidx.recyclerview:recyclerview:1.2.0-beta01" + implementation "androidx.recyclerview:recyclerview:1.2.0-beta02" implementation 'com.google.android.material:material:1.3.0' } \ No newline at end of file diff --git a/vector/build.gradle b/vector/build.gradle index 2c5dc01e37..f797ccc608 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -317,7 +317,7 @@ dependencies { implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlin_coroutines_version" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlin_coroutines_version" - implementation "androidx.recyclerview:recyclerview:1.2.0-beta01" + implementation "androidx.recyclerview:recyclerview:1.2.0-beta02" implementation 'androidx.appcompat:appcompat:1.2.0' implementation "androidx.fragment:fragment-ktx:$fragment_version" implementation 'androidx.constraintlayout:constraintlayout:2.0.4' From c54a9a3b88b2f331acdd29668fab3bf0aa7e0738 Mon Sep 17 00:00:00 2001 From: Lucas_c Date: Thu, 25 Feb 2021 22:11:07 +0000 Subject: [PATCH 099/578] Translated using Weblate (Spanish) Currently translated at 95.9% (1997 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/es/ --- vector/src/main/res/values-es/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vector/src/main/res/values-es/strings.xml b/vector/src/main/res/values-es/strings.xml index 8a05b0dfd3..0ecfc2c098 100644 --- a/vector/src/main/res/values-es/strings.xml +++ b/vector/src/main/res/values-es/strings.xml @@ -2301,5 +2301,5 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Editar historial de visibilidad Editar permisos Cambiar el nombre de la sala - Administración de sala + Permisos de chat \ No newline at end of file From e8a461dbb0ead3da33477671b91a462d42a4705a Mon Sep 17 00:00:00 2001 From: Ricardo Date: Thu, 25 Feb 2021 22:09:54 +0000 Subject: [PATCH 100/578] Translated using Weblate (Spanish) Currently translated at 95.9% (1997 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/es/ --- vector/src/main/res/values-es/strings.xml | 26 +++++++++++++++++------ 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/vector/src/main/res/values-es/strings.xml b/vector/src/main/res/values-es/strings.xml index 0ecfc2c098..58f15010c0 100644 --- a/vector/src/main/res/values-es/strings.xml +++ b/vector/src/main/res/values-es/strings.xml @@ -503,8 +503,8 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua \'%s\' no es un formato de alias válido No tendrás una dirección principal especificada para esta sala. Advertencias de la dirección principal - Establecer como Dirección Principal - Dejar de Establecer como Dirección Principal + Establecer como dirección principal + Dejar de Establecer como dirección principal Copiar ID de Sala Copiar Dirección de Sala La encriptación está habilitada en esta sala. @@ -1221,7 +1221,7 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Conversaciones Tus conversaciones se mostrarán aquí. Toque + en la derecha para comenzar. Salas - Tus salas se mostrarán aquí + Tus salas se mostrarán aquí. Pulsa el botón + abajo a la derecha para buscar o crear salas propias. Reacciones De acuerdo Me gusta @@ -2267,9 +2267,9 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Agregar un tema %s para dar a saber de qué se trata la sala. Este es el inicio de mensajes con %s. - Iniciar Chat + Empieza a hablar Despublicar - Adicionar + Añadir No tiene permisos para encryptar esta sala. No es un ID matrix valido Mi codigo @@ -2291,15 +2291,27 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Contactos Usuarios conocidos Mostrar efectos de chat - Para escanear el codigo QR , necesita darle permisos a su cámara. + Para leer el código QR , necesita dar permisos de acceso a su cámara. Invitar contactos Modifique los roles y privilegios de la sala. Sala no pública. No puede acceder sin una invitacion. Actualizar sala Cambiar tema Enviar mensajes - Editar historial de visibilidad + Editar visibilidad del historial Editar permisos Cambiar el nombre de la sala Permisos de chat + Habilitar cifrado de la sala + Cambiar la dirección principal de la sala + Cambiar el avatar de la sala + Modificar widgets + Notificar a todos + Eliminar mensajes enviados por otros + Banear usuarios + Echar usuarios + Cambiar ajustes + Invitar usuarios + Rol por defecto + Permisos \ No newline at end of file From f6123d8dfd77db0a133304a2720640def3931e23 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 26 Feb 2021 07:14:10 +0000 Subject: [PATCH 101/578] Bump daggerVersion from 2.32 to 2.33 Bumps `daggerVersion` from 2.32 to 2.33. Updates `dagger` from 2.32 to 2.33 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.32...dagger-2.33) Updates `dagger-compiler` from 2.32 to 2.33 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.32...dagger-2.33) Signed-off-by: dependabot[bot] --- matrix-sdk-android/build.gradle | 2 +- vector/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/matrix-sdk-android/build.gradle b/matrix-sdk-android/build.gradle index 3ade9f7214..7a8a2e8dfb 100644 --- a/matrix-sdk-android/build.gradle +++ b/matrix-sdk-android/build.gradle @@ -112,7 +112,7 @@ dependencies { def lifecycle_version = '2.2.0' def arch_version = '2.1.0' def markwon_version = '3.1.0' - def daggerVersion = '2.32' + def daggerVersion = '2.33' def work_version = '2.5.0' def retrofit_version = '2.9.0' diff --git a/vector/build.gradle b/vector/build.gradle index 2c5dc01e37..1061a5caee 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -294,7 +294,7 @@ dependencies { def big_image_viewer_version = '1.7.0' def glide_version = '4.12.0' def moshi_version = '1.11.0' - def daggerVersion = '2.32' + def daggerVersion = '2.33' def autofill_version = "1.1.0" def work_version = '2.5.0' def arch_version = '2.1.0' From bcf5481ad589efb834fd34672cff8a0992f7e3c8 Mon Sep 17 00:00:00 2001 From: Mouath Ibrahim Date: Sat, 27 Feb 2021 17:14:54 +0000 Subject: [PATCH 102/578] Translated using Weblate (Arabic) Currently translated at 34.7% (723 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/ar/ --- vector/src/main/res/values-ar/strings.xml | 190 +++------------------- 1 file changed, 22 insertions(+), 168 deletions(-) diff --git a/vector/src/main/res/values-ar/strings.xml b/vector/src/main/res/values-ar/strings.xml index 247801ae12..390a68c24b 100644 --- a/vector/src/main/res/values-ar/strings.xml +++ b/vector/src/main/res/values-ar/strings.xml @@ -1,10 +1,8 @@ - + - السمة الفاتحة السمة الداكنة السمة السوداء - يُزامن يستمع للأحداث الرسائل @@ -12,7 +10,6 @@ تفاصيل الأعضاء الأرشيف أبلِغ عن علة - حسنا ألغِ احفظ @@ -47,14 +44,11 @@ أغلِق نُسخ إلى الحافظة عطّل - أكّد تحذير - الرئيسيّة المفضلة الغرف - الدعوات المحادثات دفتر العناوين المحلي @@ -62,7 +56,6 @@ لا محادثات لم تسمح لِ‍ Element بمطالعة متراسليك المحليين لا نتائج - الغرف دليل الغرف لا غرف @@ -75,7 +68,6 @@ %d مستخدما %d مستخدم - أرسِل السجلات أرسِل سجلات الانهيار أرسِل لقطة شاشة @@ -83,7 +75,6 @@ صِف المشكلة هنا لنقدر على تحليل المشاكل، ستُرسل السجلات من هذا العميل مع بلاغ العلة هذا. سوف لن يُنشر بلاغ العلة (وذلك يشمل السجلات ولقطات الشاشة) لعموم الناس. إن أردت إرسال النص أعلاه فقط، رجاءً أزل تأشير: انهار التطبيق في آخر مرة. أتريد إرسال بلاغ انهيار؟ - أُرسل بلاغ العلة بنجاح فشل إرسال بلاغ العلة (%s) اسم المستخدم @@ -93,12 +84,10 @@ ابدأ دردشة جديدة ابدأ مكالمة صوتية ابدأ مكالمة صورية - أرسِل ملفات خُذ صورة أو ڤديو خُذ صورة خُذ ڤديو - لِج سجّل أرسِل @@ -136,70 +125,53 @@ لقد صُفّرت كلمة السر. لقد خرجت من كل الأجهزة ولم تعد تستقبل الإخطارات بعد الآن. لإعادة تفعيل الإخطارات عليك الولوج في كل جهاز ثانيةً. - تعذّر الولوج: خطأ في الشبكة تعذّر الولوج تعذّر التسجيل: خطأ في الشبكة تعذّر التسجيل تعذّر التسجيل: فشل في ملكية البريد أدخِل مسارا صالحا - اسم المستخدم/كلمة السر غير صالحة لم يحتوي JSON صالح أُرسلت الكثير من الطلبات اسم المستخدم هذا مستخدم بالفعل لم يُنقر بعد على الرابط في البريد - أأُلغي التنزيل؟ أأُلغي الرفع؟ %d ثا %1$dدق %2$dثا - الأمس اليوم - اسم الغرفة موضوع الغرفة - انتهت المكالمة مكالمة واردة مكالمة صورية واردة مكالمة صوتية واردة المكالمة جارية - تعذّر تمهيد الكمرة - خُذ صورة أو ڤديو تعذّر تسجيل الڤديو - معلومات نأسف، لم يُنفّذ الإجراء بسبب عدم وجود بعض التصاريح - أأحفظ في التنزيلات؟ نعم لا تابع - أزِل انضم ارفض - انتقل إلى أول رسالة غير مقروءة. - لقد دعاك ⁨%s⁩ للانضمام إلى هذه الغرفة هذه معاينة عن الغرفة. عُطّل التفاعل مع الغرفة. - دردشة جديدة أضِف عضوا - ترك الغرفة أمتأكّد من ترك الغرفة؟ أمتأكّد من إزالة ⁨%s⁩ من هذه الدردشة؟ أنشئ - أدوات الإدارة الأجهزة - اترك هذه الغرفة أزِل من هذه الغرفة امنع @@ -211,10 +183,8 @@ اعرض كل رسائل هذا المستخدم اعرض قائمة الأجهزة أمتأكد من دعوة ⁨%s⁩ لهذه الدردشة؟ - المتراسلون المحليون (%d) مستخدمو «ماترِكس» فقط - ‏⁨%1$s⁩ يكتب… أرسِل رسالة معمّاة… أرسِل رسالة (غير معمّاة)… @@ -229,24 +199,20 @@ اخرج البصمة (⁨%s⁩): تعذّر التحقق من معرّف الخادوم البعيد. - تفاصيل الغرفة الملفات إعدادات المدعوّون المنضمون - أتريد إخفاء كل رسائل هذا العضو؟ سيُعيد هذا الإجراء تشغيل التطبيق وقد يأخذ بعض الوقت. ألغِ الرفع ألغِ التنزيل - لا نتائج الغرف الرسائل الملفات - الدليل المفضلة الغرف @@ -255,18 +221,14 @@ انضم إلى غرفة انضم إلى غرفة اكتب معرّف غرفة أو اختصارها - يبحث في الدليل.. - اترك المحادثة انسَ - الرسائل إعدادات الإصدارة حقوق النسخ سياسة الخصوصية - صورة اللاحة اسم العرض البريد الإلكتروني @@ -274,10 +236,8 @@ الهاتف أضِف رقم هاتف معلومات التطبيق - صوت الإخطارات شغّل الشاشة لمدة ٣ ثواني - الرسائل التي فيها اسم العرض الرسائل التي فيها اسم المستخدم الرسائل في محادثات الطرفين @@ -298,9 +258,7 @@ الأجهزة اعرض أختام الرسائل الزمنية دائما اعرض الأختام الزمنية بنسق ١٢ ساعة (مثلا ٢:٣٠م) - وضع حفظ البيانات - تفاصيل الجهاز المعرّف الاسم @@ -308,11 +266,9 @@ آخر ظهور كلمة السر: أرسِل - واجهة المستخدم لغة الواجهة اختر لغة - غيّر كلمة السر كلمة السر القديمة كلمة السر الجديدة @@ -322,34 +278,27 @@ أأعرض كل رسائل ⁨%s⁩؟ سيُعيد هذا الإجراء تشغيل التطبيق وقد يأخذ بعض الوقت. - اختر دولة - الدولة رجاءً اختر دولة رقم الهاتف أدخِل رمز التأكيد خطأ في التحقق من رقم الهاتف الرمز - ٣ أيام أسبوع واحد شهر واحد للأبد - صورة الغرفة اسم الغرفة الموضوع - إمكانيّة قراءة تأريخ الغرفة من يمكنه قراءة التأريخ؟ الكل الأعضاء فقط (من لحظة اختيار هذا الخيار) الأعضاء فقط (من لحظة دعوتهم) الأعضاء فقط (من لحظة انضمامهم) - المستخدمون الممنوعون - متقدم مختبرات تعمية الطرفية @@ -362,35 +311,28 @@ لست في هذه الغرفة. ليس لديك تصريح لفعل هذا في هذه الغرفة. استخدم الكمرة الأصيلة - تحذير! - لم تُرسل الرسائل بسبب وجود أجهزة مجهولة. ماذا أفعل؟ %1$s. ‏%2$s. ليس ’⁨%s⁩‘ تنسيقا صالحا لاختصار لن يُحدّد عنوان رئيسي. سيُنتقى العنوان الرئيسي المبدئي لهذه الغرفة عشوائيا تحذيرات بشأن العنوان الرئيسي - اضبطه كعنوان رئيسي ألغِ ضبطه كعنوان رئيسي انسخ معرّف الغرفة انسخ عنوان الغرفة - التعمية مفعّلة في هذه الغرفة. التعمية معطّلة في هذه الغرفة. فعّل التعمية (احترس: لا يمكنك تعطيلها ثانيةً!) الدليل السمة - معلومات تعمية الطرفين - معلومات الحدث معرّف المستخدم الخوارزميّة معرّف الجلسة خطأ في فكّ التعمية - معلومات الجهاز المرسل اسم الجهاز الاسم @@ -403,21 +345,18 @@ حُفظت مفاتيح الطرفين للغرفة في ’⁨%s⁩‘ تحذير: يمكن أن يُحذف الملف إن أزلت تثبيت التطبيق. - استورد مفاتيح الطرفين لغرفة استورد مفاتيح الغرفة استورد المفاتيح من ملف محلي جهاز مجهول امنع أزِل المنع - أكّد الجهاز قد لا يكون الخادوم متوفّرا أو أنه مشغول اكتب خادوم منزل لسرد الغرف العمومية فيه مسار خادوم المنزل كل الغرف في خادوم ⁨%s⁩ كل غرف ⁨%s⁩ الأصيلة - حجم الخط ضئيل صغير @@ -426,18 +365,15 @@ كبير جدا ضخم ضخم جدا - تحتاج تصريحا لإدارة الودجات في هذه الغرفة المعرّف room_id ناقص في الطلب. المعرّف user_id ناقص في الطلب. الغرفة ⁨%s⁩ غير ظاهرة. لقد أضفت جهازا جديدا ’⁨%s⁩‘ يطلب مفاتيح التعمية. تجاهل الطلب - خطأ في الأمر لم يُفهم الأمر: ⁨%s⁩ - هذّب تحتاج تصريح الدعوة لبدء اجتماع في هذه الغرفة @@ -448,17 +384,14 @@ ابحث في المفضّلة ابحث في الأشخاص ابحث في الغرف - دليل المستخدمين بلاغ علة يبدو أنك تهزّ الهاتف وأنت مُحبط. أتريد إرسال بلاغ علة؟ التقدم (%s٪) - رجاءً اسمح بالنفاذ في المنبثقة الآتية لتتمكن من إجراء محادثة. يحمّل… - لا أعضاء نشطين عضو واحد نشط @@ -485,8 +418,6 @@ %d رسالة جديدة %d رسالة جديدة - - لا غرف غرفة واحدة @@ -497,33 +428,23 @@ الأرشيف المجتمعات - ابحث عن مجتمعات - أولوية منخفضة - المجتمعات لا مجموعات - هزّ الجهاز بجنون يُرسل بلاغًا بعلة - الإخطارات المزعجة الإخطارات الصامتة - تفاصيل المجتمع - لاحقا اخرج قُرأت - عنوان خادوم المنزل عنوان خادوم التعريف ابحث - أمتأكد من بدء دردشة جديدة مع ⁨%s⁩؟ أمتأكد من بدء محادثة صوتية؟ أمتأكد من بدء محادثة صورية؟ - عنوان البريد مُعرّف بالفعل. الأمارة غير صالحة التسجيل عبر البريد ورقم الهاتف معا ليس مدعوما إلى حين توفر واجهة API لذلك. سيُستخدم رقم الهاتف فقط دون البريد. @@ -537,7 +458,6 @@ تعذر التعرف على أمارة الوصول المحددة JSON‏ معطوب قائمة المجموعات - لا تغييرات ملكية تغيير واحد على الملكية @@ -546,11 +466,9 @@ %d تغييرا على الملكية %d تغيير على الملكية - "أرسِل كَ‍ " فشل اتصال الوسائط رُدّ على المكالة في مكان آخر - يحتاج Element تصريحا منك للوصول إلى مكتبتي الصور والفديو لإرسال المرفقات وحفظها. رجاءً اسمح بالوصول في المنبثقة التالية لتقدر على إرسال الملفات من هاتفك. @@ -577,26 +495,21 @@ انضم إلى الغرفة لقد أكّدت عنوان بريدي الإلكتروني قائمة علامات القراءة - الأصلي لم يُجب الطرف البعيد. يحتاج Element تصريحا منك للوصول إلى دفتر العناوين للعثور على مستخدمي ماترِكس الآخرين وذلك حسب البريد الإلكتروني ورقم الهاتف. أتسمح بأن يصل Element إلى متراسليك؟ - الدردشات المباشرة معرّف المستخدم أو اسمه أو بريده أشِر إليه لن تستطيع العودة عن هذا التغيير إذ أنك تمنح المستخدم نفس مستوى السلطة الذي لك. أمتأكد؟ - أمتأكد من منع هذا المستخدم من هذه الدردشة؟ - ادعُ باستخدام المعرّف دعوة المستخدم حسب معرّفه رجاءً أدخِل عنوان بريد أو معرّف ماترِكس واحد أو أكثر عنوان البريد أو معرّف ماترِكس - ابحث ثِق لا تثق @@ -621,26 +534,20 @@ المدعوّون فقط كل من يجد رابط الغرفة، عدى الزوار كل من يجد رابط الغرفة، مع الزوار - معرّف الغرفة الداخلي العناوين هذه مزايا اختبارية قد تعطب وبشكل غير متوقع. احتط وأنت تستخدمها. ليس لهذه الغرفة عناوين محلية عنوان جديد (مثلا ⁨#foo:matrix.org⁩) - معرّف مجتمع جديد (مثلا ⁨+foo:matrix.org⁩) معرّف المجتمع غير صالح ‏”⁨%s⁩“ ليس معرّف مجتمع صالح - - حاول ‏⁨%s⁩ أن يحمّل نقطة معينة في الخط الزمني ولكن تعذر عليه العثور عليها. - للتحقق فيما إذا كان يمكن الوثوق بالجهاز أم لا، رجاءً راسل مالكه مستخدما طريقة أخرى (وجها لوجه أو عبر مكالمة هاتفية) واسأله فيما إذا كان المفتاح في صفحة ”إعدادات المستخدم“ على جهازه يطابق المفتاح أدناه أم لا: إن كان يتطابق، فانقر زر التأكيد أدناه. وإلا فناك من يعترض هذا الجهاز وأغلب الظن أنه من الأفضل منعه. ستتحسن عملية التأكيد في المستقبل وتصبح أفضل وأرقى. أؤكّد بأن المفتاح يتطابق - تحتوي الغرفة أجهزة مجهولة اختر دليل غرف ابدأ مكالمات الاجتماعات مستخدما Jitsi @@ -652,14 +559,12 @@ %d ودجة نشطة %d ودجة نشطة - أضِف تطبيقات ماترِكس يطلب جهازك غير المؤكّد ”‏⁨%s⁩“ مفاتيح التعمية. ابدأ التأكيد شارِك دون تأكيد رسالة معمّاة - أنشئ اسم المجتمع @@ -668,29 +573,23 @@ الناس الغرف لا مستخدمين - الغرف المنضمّون المدعوّون رشّح أعضاء المجموعة رشّح غرف المجموعة - لم يقدّم مدير المجتمع وصفا طويلا عن مجتمعه. - لقد طُردت من ⁨%1$s⁩ على يد ⁨%2$s⁩ لقد مُنعت من ⁨%1$s⁩ على يد ⁨%2$s⁩ السبب: ⁨%1$s⁩ أعِد الانضمام انسَ الغرفة - الإجراءات كبير متوسط صغير - مكالمة افتح الترويسة - المكالمة التأخير بين كل طلبي مزامنة الإصدارة @@ -698,7 +597,6 @@ الأحكام والشروط إشعارات الأطراف الثالثة أبقِ الوسائط - المستخدمون المتجاهلون أخرى التعمية @@ -708,9 +606,7 @@ ثبّت الغرف التي فيها رسائل غير مقروءة فعّل معاينات العناوين ضمن السياق مبدئيا هُزّ الجهاز عند الإشارة إليّ - التحاليل - ‏⁨%1$s⁩ في ⁨%2$s⁩ تطلب هذه العملية تخويلا إضافيا. رجاءً أدخِل كلمة السر للمتابعة. @@ -718,19 +614,15 @@ والج كَ‍ خادوم المنزل خادوم التعريف - رجاءً افحص بريدك وانقر على الرابط في الرسالة. ما إن تفعل انقر ”تابع“. تعذر تأكيد عنوان البريد الإلكتروني. رجاءً افحص بريدك وانقر على الرابط في الرسالة. ما إن تفعل انقر ”تابع“ عنوان البريد مستخدم بالفعل فشل إرسال البريد: لم يُعثر على عنوان البريد الإلكتروني رقم الهاتف مستخدم بالفعل - أمتأكد من إزالة هدف الإخطار هذا؟ - لقد أرسلنا رسالة نصية فيها رمز التنشيط. رجاءً أدخِل هذا الرمز أدناه. وسم الغرفة موسومة بِ‍: - مفضلة أولوية منخفضة بلا @@ -739,26 +631,20 @@ الإخطارات الوصول إلى الغرفة مَن يمكنه أن يصل إلى هذه الغرفة؟ - عمِّ إلى الأجهزة المؤكّدة فقط لا تميل هذه الغرفة إلى أي من المجتمعات الميل - إنشاء مجتمع معطّل مزعج - ما زالت مكالمات الاجتماعات قيد التطوير وقد لا يُعتمد عليها. - تحتوي هذه الغرفة أجهزة مجهولة لم يُتأكّد منها. يعني هذا عدم وجود أي ضمانات بأن الأجهزة هي فعلا ملك لمن يستخدمها. ننصحك بأن تبدأ عملية التأكيد لكل جهاز وذلك قبل أن تتابع. يمكنك طبعا إرسال الرسالة دون تأكيد إن أردت ذلك. الأجهزة المجهولة: - لا ترسل من هذا الجهاز الرسائل المعمّاة إلى الأجهزة غير المؤكّدة - عمِّ إلى الأجهزة المؤكّدة فقط التأكيد مُرجأ تأكيد الهاتف @@ -768,14 +654,12 @@ أكّد ألغِ التأكيد غير متّصل - اسرد الأعضاء ادعُ دليل المستخدمين (⁨%s⁩) قد يعني هذا بأن أحدهم يعترض الاتصال بعدوانية، أو أن هاتفك لا يثق بالشهادة التي قدّمها الخادوم البعيد. إن قال مدير الخادوم بأن هذا متوقع، فتأكد من أن البصمة أدناه تطابق البصمة التي وفّرها. تغيّرت الشهادة من شهادة كنت تثق بها إلى شهادة لا تثق بها. لربما جدّد الخادوم شهادته. راسل إدارة الخادوم واسألهم عن البصمة المتوقعة. - انضم ابدأ دردشة تصفح الدليل @@ -789,31 +673,23 @@ دردشة مباشرة أضِف اختصارا إلى الشاشة الرئيسية - الأحكام والشروط إشعارات الأطراف الثالثة شاشة معلومات التطبيق في النظام دعوات المكالمات ابدأ عن الإقلاع أمتأكّد من إزالة ⁨%1$s⁩ ⁨%2$s⁩؟ - رقم الهاتف غير صالح حسب الدولة المنتقاة - يجب أن يكون للغرفة عنوان للربط بها. لا ترسل من هذا الجهاز الرسائل المعمّاة في هذه الغرفة إلى الأجهزة غير المؤكّدة. - تنسيق الاسم المختصر غير صالح - مفتاح تعريف Curve25519 بصمة Ed25519 - صدّر مفاتيح تعمية الطرفين لغرفة صدّر استورد في القائمة السوداء - بلا - صفر غرفة غرفة واحدة @@ -823,44 +699,32 @@ %d غرفة ‏⁨%1$s⁩ في ‏⁨%2$s⁩ - ابحث في الأرشيف - يجب أن يكون مستوى السلطة عددا صحيحا موجبا. مثال مثال - الغرفة دعوة أرسل إلى أرسِل ملصقا - رُخص الأطراف الثالثة - نزِّل أرسِل صوتًا - أرسِل ملصقًا ليس ثمة أية حزمة ملصقات مفعّلة حاليًا. أتريد إضافة حزمة الآن؟ - نأسف، لم نجد أي تطبيق خارجي لإكمال هذا الإجراء. - أعِد طلب مفاتيح التعميةمن أجهزتك الأخرى. - أُرسل طلب المفتاح. - أُرسل الطلب رجاءً أطلِق Element في جهاز آخر يقدر على فك تعمية الرسالة ليُرسل المفاتيح إلى هذا الجهاز. - انطِق امسح متّصل غير متّصل خامل - خصوصيّة الإخطارات طبيعية خصوصية أقل @@ -869,39 +733,29 @@ • تحتوي الإخطارات بيانات وصفية فحسب • تحتوي الإخطارات بيانات وصفية وبيانات الرسائل • سوف لن تعرض الإخطارات محتوى الرسائل - الرسائل التي أرسلها بوت - انتهت مهلة طلب المزامنة ألغِ تنشيط الحساب ألغِ تنشيط حسابي - خصوصيّة الإخطارات امنح التصريح اختر خيارا آخر - أرسِل بيانات التحاليل يجمع Element التحاليل بشكل مجهّل فيتيح لنا ذلك تحسين التطبيق. رجاءً فعّل التحاليل لمساعدتنا في تحسين Element. نعم أريد المساعدة! - اكتب هنا… - ثمة معامل مطلوب ناقص. ثمة معامل غير صالح. أرسِل رسالة صوتية (يتطلب تطبيقا من طرف ثالث لتسجيل الرسائل الصوتية) - لمتابعة استخدام خادوم المنزل ⁨%1$s⁩ عليك مراجعة الشروط والقوانين والموافقة عليها. سأراجعها الآن - ألغِ تفعيل الحساب رجاءً اكتب كلمة السر للمتابعة: رجاءً اكتب كلمة السر. - رجاءً اكتب الوصف بالإنجليزية إن أمكن. نظرًا لكون بعض التصاريح ناقصة، هذا الإجراء ليس ممكنًا. تنبيهات النظام - %d ثانية ثانية واحدة @@ -934,14 +788,11 @@ %d يومًا %d يوم - %1$s الآن %1$s منذ %2$s - "⁨%1$s⁩ و " ⁨%1$s⁩ و ⁨%2$s⁩ %1$s %2$s - أرسِل ردًا غير معمّى… أرسِل ردًا (بلا تعمية)… @@ -952,12 +803,9 @@ %d محدّدة %d محدّدة - عايِن الوسيط قبل إرساله - يمكن أن يعمل Element في الخلفية ليُدير الإخطارات بأمان وخصوصية (قد يؤثّر هذا على استهلاك البطارية). لست عضوًا في أي مجتمع حاليًا. - لا رسائل إخطار غير مقروءة رسالة إخطار واحدة غير مقروءة @@ -988,7 +836,6 @@ %d عضوًا %d عضو - لا غرف غرفة واحدة @@ -998,19 +845,14 @@ %d غرفة ألغِ تفعيل الحساب - استُبدلت هذه الغرفة ولم تعد نشطة بعد الآن هذه الغرفة هي استمرار لمحادثة أخرى انقر هنا لرؤية الرسائل الأقدم - وصلت إلى حدّ الموارد راسِل المدير - راسِل مدير الخدمة - رجاءً %s لزيادة هذا الحدّ. رجاءً %s لمتابعة استخدام هذه الخدمة. - تابِع مستخدمًا… يعرض إجراءً يُلغي إدارية المستخدم حسب المعرّف المعطى @@ -1020,19 +862,15 @@ يطرد المستخدم حسب المعرّف المعطى يُغيّر اسم العرض لحسابك لإصلاح إدارة تطبيقات «ماترِكس» - شعار الرصيد شعار إخطار شعار - رجاءً انسَ كل الرسائل التي أرسلتها عندما كان حسابي غير مفعّل (تحذير: سيتسبب هذا بأن يرى المستخدمون اللاحقون عرضًا غير كاملًا للمحادثات) استمرت المحادثة هنا تخطّ خادوم المنزل هذا حدود الموارد لديه بذلك لن يستطيع بعض المستخدمين الولوج. تخطّ خادوم المنزل هذا أحد حدود الموارد لديه. - وصل خادوم المنزل هذا حدّ المستخدمين النشطين شهريًا بذلك لن يستطيع بعض المستخدمين الولوج. وصل خادوم المنزل هذا حدّ المستخدمين النشطين شهريًا. - جرى وصل الاتصال يجري وصل الاتصال… يُجري الاتصال… @@ -1046,20 +884,36 @@ الرسائل الآمنة تخطي تم - خطأ - المكالمات طرد السبب - الإصدار %s الإعدادات المتقدمة للإشعارات توثق من الجهاز - تأمين المفاتيح لم ينته، يرجى الانتظار عند تسجيل الخروج الآن ستخسر مفاتيحك تأمين المفاتيح ما زال جاريا. في حال خروجك الآن لن تتمكن لاحقا من قراءة الرسائل المشفرة تأكد من تفعيل تأمين المفاتيح على كل أجهزتك كي لا تخسر رسائلك المشفرة يتم تأمين المفاتيح - + لا يوجد لديك أذن لبدء مكالمة إجتماع + لا يوجد لديك أذن لبدء إجتماع في هذه الغرفة + إبدأ بالمحادثة + إعادة ضبط + إصرف + أوقف + شغل + إفصل + أبّطل + لاشيء + إبقى + ستفقد الوصول إلى رسائلك المشفرة إلا إذا أخذت نسخة إحتياطية من مفاتيحك قبل تسجيلك للخروج. + نسخة إحتياطية + هل أنت متأكد؟ + إستخدم المفتاح الإحتياطي + لا أريد رسائلي المشفرة + نسخ إحتياطي للمفتاح + جاري إعداد الخدمة + سمة Status.im + إفتراضي النظام + \ No newline at end of file From 2f55bb7e524d7284cf3be4640eda15ccef09a4e9 Mon Sep 17 00:00:00 2001 From: "Auri B. P" Date: Wed, 24 Feb 2021 23:17:14 +0000 Subject: [PATCH 103/578] Translated using Weblate (Catalan) Currently translated at 100.0% (2081 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/ca/ --- vector/src/main/res/values-ca/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vector/src/main/res/values-ca/strings.xml b/vector/src/main/res/values-ca/strings.xml index 20eb222f83..961a2b8731 100644 --- a/vector/src/main/res/values-ca/strings.xml +++ b/vector/src/main/res/values-ca/strings.xml @@ -161,7 +161,7 @@ Falta el correu electrònic o el número de telefon El token és invàlid Les contrasenyes no coincideixen - Heu oblidat la contrasenya? + Contrasenya oblidada\? Usa les opcions personalitzades del servidor (avançat) Comproveu el correu electrònic per continuar el procés de registre Registrar-se amb correu electrònic i número de telèfon alhora no es podrà fer fins que existeixi l\'api. Només es tindrà en compte el número de telèfon. From 7de9993204ab4ae3d01079519d678a690a80c12d Mon Sep 17 00:00:00 2001 From: Ricardo Date: Sat, 27 Feb 2021 11:21:14 +0000 Subject: [PATCH 104/578] Translated using Weblate (Spanish) Currently translated at 96.3% (2006 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/es/ --- vector/src/main/res/values-es/strings.xml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/vector/src/main/res/values-es/strings.xml b/vector/src/main/res/values-es/strings.xml index 58f15010c0..a0f66d1af9 100644 --- a/vector/src/main/res/values-es/strings.xml +++ b/vector/src/main/res/values-es/strings.xml @@ -2314,4 +2314,13 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Invitar usuarios Rol por defecto Permisos + Usa el comando /confetti o envía un mensaje que contenga ❄️ o 🎉 + Envía los eventos m.room.server_acl + No tienes permiso para actualizar los roles necesarios para cambiar varias partes de la sala + Seleciona los roles necesarios para cambiar varias partes de la sala + Tú has puesto la llamada en espera + %s ha puesto la llamada en espera + Esperar + Continuar + Volver \ No newline at end of file From a10b14dcc3079a5f72ddd7e7b3d6a74172ce7492 Mon Sep 17 00:00:00 2001 From: Lucas_c Date: Thu, 25 Feb 2021 22:13:09 +0000 Subject: [PATCH 105/578] Translated using Weblate (Spanish) Currently translated at 96.3% (2006 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/es/ --- vector/src/main/res/values-es/strings.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/vector/src/main/res/values-es/strings.xml b/vector/src/main/res/values-es/strings.xml index a0f66d1af9..9dec86234d 100644 --- a/vector/src/main/res/values-es/strings.xml +++ b/vector/src/main/res/values-es/strings.xml @@ -2267,7 +2267,7 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Agregar un tema %s para dar a saber de qué se trata la sala. Este es el inicio de mensajes con %s. - Empieza a hablar + Empezar a chatear Despublicar Añadir No tiene permisos para encryptar esta sala. @@ -2298,7 +2298,7 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Actualizar sala Cambiar tema Enviar mensajes - Editar visibilidad del historial + Cambiar la visibilidad del historial Editar permisos Cambiar el nombre de la sala Permisos de chat @@ -2306,11 +2306,11 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Cambiar la dirección principal de la sala Cambiar el avatar de la sala Modificar widgets - Notificar a todos - Eliminar mensajes enviados por otros + Notificar a todos los participantes + Eliminar mensajes enviados por otros usuarios Banear usuarios Echar usuarios - Cambiar ajustes + Modificar ajustes Invitar usuarios Rol por defecto Permisos From 4091a8612d8d8b3367e479a5a99c5569eabef0b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Priit=20J=C3=B5er=C3=BC=C3=BCt?= Date: Thu, 25 Feb 2021 16:44:41 +0000 Subject: [PATCH 106/578] Translated using Weblate (Estonian) Currently translated at 100.0% (2081 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/et/ --- vector/src/main/res/values-et/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vector/src/main/res/values-et/strings.xml b/vector/src/main/res/values-et/strings.xml index 539d5d4017..928aa9a9b3 100644 --- a/vector/src/main/res/values-et/strings.xml +++ b/vector/src/main/res/values-et/strings.xml @@ -1003,7 +1003,7 @@ %d jututuba - %1$s: %d sõnum + %1$s: %2$d sõnum %1$s: %2$d sõnumit @@ -1264,7 +1264,7 @@ %d lugemata teavitatud sõnum - %s lugemata teavitatud sõnumit + %d lugemata teavitatud sõnumit Selle valiku kasutamine eeldab kolmanda osapoole rakendust sõnumite salvestamiseks. Jätkamaks pead nõustuma kasutustingimustega. From 03cf89f8cd01633f7ad9e4eb6a5dc8f227b440a5 Mon Sep 17 00:00:00 2001 From: Marcelo Filho Date: Fri, 26 Feb 2021 17:11:59 +0000 Subject: [PATCH 107/578] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (2081 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/pt_BR/ --- vector/src/main/res/values-pt-rBR/strings.xml | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/vector/src/main/res/values-pt-rBR/strings.xml b/vector/src/main/res/values-pt-rBR/strings.xml index cb34acd429..ff35ff868c 100644 --- a/vector/src/main/res/values-pt-rBR/strings.xml +++ b/vector/src/main/res/values-pt-rBR/strings.xml @@ -2037,7 +2037,7 @@ Convites enviados para %1$s e %2$s Convites enviados para %1$s e mais um - Convites enviados para %1$s e %2$s e mais + Convites enviados para %1$s e %2$d mais Não foi possível convidar os usuários. Por favor, verifique os usuários que você deseja convidar e tente novamente. Idioma atual @@ -2380,4 +2380,33 @@ O Element precisa que você insira suas credenciais para executar esta ação. Necessário autenticar-se novamente Não autorizado, sem credenciais de autenticação válidas + Pessoas + Ocorreu um erro ao transferir a chamada + Transferir + Conectar + Consultar primeiro + + 1 chamada em andamento (%1$s) · 1 chamada pausada + 1 chamada em andamento (%1$s) · %2$d chamadas pausadas + + + Chamada pausada + %1$d chamadas pausadas + + Chamada em andamento (%1$s) + Ocorreu um erro ao pesquisar o número de telefone + Teclado de discagem + Ligar de volta + Essa chamada foi encerrada + %1$s recusou essa chamada + Você recusou essa chamada %1$s + Você está nessa chamada + %1$s começou uma chamada + Você começou uma chamada + Falha ao fazer a autoverificação + Você pausou a chamada + %s pausou a chamada + Pausar + Retomar + Voltar \ No newline at end of file From 71a8d46e29166b471cb5766a8322ca822effcab6 Mon Sep 17 00:00:00 2001 From: Besnik Bleta Date: Fri, 26 Feb 2021 16:40:27 +0000 Subject: [PATCH 108/578] Translated using Weblate (Albanian) Currently translated at 99.6% (2073 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/sq/ --- vector/src/main/res/values-sq/strings.xml | 72 +++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/vector/src/main/res/values-sq/strings.xml b/vector/src/main/res/values-sq/strings.xml index 27245ea122..cc94d538e8 100644 --- a/vector/src/main/res/values-sq/strings.xml +++ b/vector/src/main/res/values-sq/strings.xml @@ -2269,4 +2269,76 @@ Ndryshimet se cili mund të lexojë historikun do të aplikohen vetëm për mesazhe të ardhshëm në këtë dhomë. Dukshmëria e historikut ekzistues do të mbesë e pandryshuar. Hiqi botimin Shto + S’u arrit të bëhej mirëfilltësimi + Që të kryejë këtë veprim, Element-i lyp dhënien prej jush të kredencialeve tuaja. + Lypset Rimirëfilltësim + Përdorues + Ndodhi një gabim teksa shpërngulej thirrja + Shpërngule + Lidhe + Konsultohu së pari + + 1 thirrje aktive (%1$s) · 1 thirrje e ndalur + 1 thirrje aktive (%1$s) · %2$d thirrje të ndalura + + + Thirrja u ndal + U ndalën %1$d thirrje + + Thirrje aktive (%1$s) + Pati një gabim gjatë kërkimit të numrit të telefonit + Pjesa e numrave + Ktheji thirrjen + Kjo thirrje ka përfunduar + %1$d hodhi poshtë këtë thirrje + Hodhët poshtë këtë thirrje %1$s + Gjendeni në këtë thirrje + %1$s nisi një thirrje + Filluat një thirrje + S’u arrit të ujdisej “Cross Signing” + dërgon dëborë ❄️ + dërgon bonbone 🎉 + E dërgon mesazhin e dhënë me dëborë + E dërgon mesazhin e dhënë me bonbone + Aktivizoni Cross Signing + Spastroje historikun + hyrje njëshe + Hyni me %s + Regjistrohuni me %s + Vazhdo me %s + Ose + Shtoni një buton te hartuesi i mesazheve për të hapur tastierën e emoji-ve + Shfaq tastierë emoji-sh + Përdorni urdhrin /confetti ose dërgoni një mesazh që përmban ❄️ ose 🎉 + Shfaq efekte fjalosjeje + Të ndryshojë temë + Të përmirësojë dhomën + Të dërgojë akte m.room.server_acl + Të ndryshojë leje + Të ndryshojë emër dhome + Të ndryshojë dukshmëri historiku + Të aktivizojë fshehtëzim dhome + Të ndryshojë adresë kryesore për dhomën + Të ndryshojë avatar dhome + Të ndryshojë widget-e + Të njoftojë gjithkënd + Të heqë mesazhe dërguar nga të tjerët + Të dëbojë përdorues + Të përzërë përdorues + Të ndryshojë rregullime + Të ftojë përdorues + Të dërgojë mesazhe + Rol parazgjedhje + S’keni leje të përditësoni rolet e domosdoshëm për të ndryshuar anë të ndryshme të dhomës + Të përzgjedhë rolet e domosdoshme për të ndryshuar anë të ndryshme të dhomës + Leje + Të shohë dhe përditësojë role të domosdoshëm për të ndryshuar anë të ndryshme të dhomës. + Leje dhome + Kjo dhomë s’është publike. S’do të jeni në gjendje të rihyni në të pa një ftesë. + E mbajtët thirrjen + %s e mbajti thirrjen + Mbaje + Rimerre + E paautorizuar, i mungojnë kredenciale të vlefshme mirëfilltësimi + Parazgjedhje Sistemi \ No newline at end of file From c6426565773bceb39a2c79911c73d96ff28f6632 Mon Sep 17 00:00:00 2001 From: linsui Date: Thu, 25 Feb 2021 05:42:09 +0000 Subject: [PATCH 109/578] Translated using Weblate (Chinese (Simplified)) Currently translated at 97.9% (2039 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/zh_Hans/ --- vector/src/main/res/values-zh-rCN/strings.xml | 107 +++++++++++++++++- 1 file changed, 106 insertions(+), 1 deletion(-) diff --git a/vector/src/main/res/values-zh-rCN/strings.xml b/vector/src/main/res/values-zh-rCN/strings.xml index 8bffa6e437..6bb20eb94f 100644 --- a/vector/src/main/res/values-zh-rCN/strings.xml +++ b/vector/src/main/res/values-zh-rCN/strings.xml @@ -698,7 +698,7 @@ 请允许资料分析以帮助我们改进 Element。 是的,我愿意帮助! 停用账户 - + 这将使您的账户永远不再可用。您将不能登录,或使用相同的用户 ID 重新注册。您的账户将退出所有已加入的聊天室,身份服务器上的账户信息也会被删除。此操作是不可逆的。 停用您的账户不会默认忘记您发送的消息。如果您希望我们忘记您发送的消息,请勾选下面的选择框。 Matrix 中的消息可见性类似于电子邮件。我们忘记您的消息意味着您发送的消息不会被发给新注册或未注册的用户,但是已收到您的消息的注册用户依旧可以看到他们的副本。 请在我停用账户的同时忘记我发送的所有消息(警告:这将导致未来的用户看到残缺的对话) 请输入您的密码以继续: 停用账户 @@ -2164,4 +2164,109 @@ 发送密钥共享请求历史记录 取消发布 添加 + 设置交叉签名失败 + 发送雪花 ❄️ + 发送撒花 🎉 + 发送带有雪花的给定消息 + 使用 confetti 发送给定消息 + "话题: " + 添加一个话题 + %s 使人们知道此聊天室关于什么。 + 这是您和 %s 的私聊消息历史记录的开始。 + 这是此对话的开始。 + 这是 %s 的开始。 + 导出审计 + 您没有权限在此聊天室启用加密。 + 私聊消息 + 正在创建聊天室… + 一些字符不被允许 + 请提供一个聊天室地址 + 此地址已被使用 + 聊天室地址 + 您可以启用此选项如果此聊天室将仅用于您的主服务器上的内部团队协作。此选项之后无法更改。 + 屏蔽不是 %s 一部分的任何人加入此聊天室 + 隐藏高级 + 显示高级 + 清除历史记录 + 单点登录 + 通过 %s 登录 + 通过 %s 登录 + 以 %s 继续 + + 从低优先级移除 + 添加到低优先级 + %2$d 的 %1$d + 旋转和裁剪 + 添加图像自 + 通过扫描二维码创建新的私聊对话 + 通过 Matrix ID 创建新的私聊对话 + 为发现您已知的现存联系人,您是否接受发送您的联系人数据(电话号码和/或电子邮件)到已配置的身份服务器(%1$s)? +\n +\n为加强隐私,发送的数据将在发送前计算散列值。 + 发送电子邮件和电话号码 + 授予许可 + 撤销我的许可 + 您尚未同意发送电子邮件和电话号码到身份服务器以从您的联系人发现其他用户。 + 您已同意发送电子邮件和电话号码到身份服务器以从您的联系人发现其他用户。 + 发送电子邮件和电话号码 + 建议 + 联系人 + 已知用户 + 最近 + 二维码 + 通过二维码添加 + 通过名称或 ID 搜索 + 聊天室设置 + 主题 + 聊天室话题(可选) + 聊天室名称 + 此聊天室无法预览。您想加入吗? + 此聊天室当前不可访问。请稍候重试,或向聊天室管理员询问以检查您是否拥有访问权限。 + 无法获取当前聊天室目录可见性(%1$s)。 + 是否将此聊天室发布至 %1$s 的聊天室目录中? + 取消发布此地址 + 发布此地址 + 添加本地地址 + 此聊天室没有本地地址 + 为此聊天室设置地址以便用户通过您的主服务器(%1$s)找到此聊天室 + 本地地址 + 新的发布的地址(例如 #alias:server) + 尚无其他已发布地址。 + 还没有别的发布的地址,可在下方添加。 + 是否将此聊天室发布至 %1$s 的聊天室目录中? + 在消息框添加打开表情键盘的按钮 + 显示表情键盘 + 使用 /confetti 命令或发送包含 ❄️ 或 🎉 的消息 + 显示聊天效果 + 更改话题 + 更新聊天室 + 发送 m.room.server_acl 事件 + 更改权限 + 更改聊天室名称 + 更改历史记录可见性 + 启用聊天室加密 + 更改聊天室主地址 + 更改聊天室头像 + 修改小部件 + 通知每个人 + 移除其他人发送的消息 + 封禁用户 + 踢掉用户 + 更改设置 + 邀请用户 + 发送消息 + 默认角色 + 您没有权限更新更改聊天室多个部分所需角色 + 选择更改聊天室各个部分所需的角色 + 权限 + 需要查看和更新角色以更改聊天室多个部分。 + 聊天室权限 + 此聊天室不公开。您没有邀请将无法重新加入。 + 您保持通话 + %s 保持通话 + 保持 + 继续 + 未验证,缺少有效验证凭证 + 返回 + 系统默认 \ No newline at end of file From 152397baad0bad3527e52aa08f2b08a0e8c6ae54 Mon Sep 17 00:00:00 2001 From: sr093906 Date: Thu, 25 Feb 2021 00:42:36 +0000 Subject: [PATCH 110/578] Translated using Weblate (Chinese (Simplified)) Currently translated at 97.9% (2039 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/zh_Hans/ --- vector/src/main/res/values-zh-rCN/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vector/src/main/res/values-zh-rCN/strings.xml b/vector/src/main/res/values-zh-rCN/strings.xml index 6bb20eb94f..a854fbaa7f 100644 --- a/vector/src/main/res/values-zh-rCN/strings.xml +++ b/vector/src/main/res/values-zh-rCN/strings.xml @@ -1952,7 +1952,7 @@ 邀请已发送到 %1$s 邀请已发送到 %1$s 和 %2$s - 邀请已发送到 %1$s 和 %2$s 等 + 邀请已发送到 %1$s 和 %2$d等 我们无法邀请用户,请检查您想要邀请的用户并重试。 当前语言 @@ -2105,7 +2105,7 @@ 使用 PIN 和生物特征识别保护访问。 保护访问 - 显示您现在可以验证的 %d 个设备 + 显示 %d 部设备,这些设备是你现在可以验证的 您将重新启动,没有历史记录,消息,受信任的设备或受信任的用户 如果您重置一切 From 257fc08404bbdfd2a1bfc61d1c5566f5871a3738 Mon Sep 17 00:00:00 2001 From: Ricardo Date: Thu, 25 Feb 2021 22:04:51 +0000 Subject: [PATCH 111/578] Translated using Weblate (Spanish) Currently translated at 100.0% (226 of 226 strings) Translation: Element Android/Element Android Sdk Translate-URL: https://translate.element.io/projects/element-android/element-sdk/es/ --- .../src/main/res/values-es/strings.xml | 63 +++++++++++++++++-- 1 file changed, 57 insertions(+), 6 deletions(-) diff --git a/matrix-sdk-android/src/main/res/values-es/strings.xml b/matrix-sdk-android/src/main/res/values-es/strings.xml index 3648ca3a72..22b640e58b 100644 --- a/matrix-sdk-android/src/main/res/values-es/strings.xml +++ b/matrix-sdk-android/src/main/res/values-es/strings.xml @@ -29,9 +29,9 @@ todos. desconocido (%s). %1$s ha activado la encriptación de Extremo-a-Extremo (%2$s) - %1$s solicitó una conferencia de vozIP - conferencia de vozIP iniciada - conferencia de vozIP finalizada + %1$s solicitó una conferencia de VozIP + Conferencia de VozIP iniciada + Conferencia de VozIP finalizada (el avatar también se cambió) %1$s eliminó el nombre de la sala %1$s eliminó el tema de la sala @@ -148,7 +148,7 @@ Hiciste visible el futuro historial de la %1$s Has activado la encriptación de Extremo-a-Extremo (%1$s) Has actualizado esta sala. - Solicitaste una conferencia de VoIP + Solicitaste una conferencia de VozIP Quitaste el nombre de la sala Quitaste el tema de la sala %1$s eliminó el avatar de la sala @@ -168,8 +168,8 @@ Por defecto Personalizado (%1$d) Personalizado - Cambiaste el nivel de potencia de %1$s. - %1$s cambió el nivel de potencia de %2$s. + Cambiaste el nivel de permisos de %1$s. + %1$s cambió el nivel de permisos de %2$s. %1$s de %2$s a %3$s Tu invitación. Razón: %1$s Invitaste a %1$s. Razón: %2$s @@ -221,4 +221,55 @@ %1$s ha salido de la sala %1$s se ha unido %1$s ha creado la conversación + Cambiaste el alias de esta sala. + %1$s cambió el alias de esta sala. + Cambiaste los alias principal y alternativos de esta sala. + %1$s cambió los alias principal y alternativos de esta sala. + Cambiaste los alias alternativos de esta sala. + %1$s cambió los alias alternativos de esta sala. + + Eliminaste el alias alternativo %1$s para esta sala. + Eliminaste los alias alternativos %1$s para esta sala. + + + %1$s eliminó el alias alternativo %2$s para esta sala. + %1$s eliminó los alias alternativos %2$s para esta sala. + + + Añadiste el alias alternativo %1$s para esta sala. + Añadiste los alias alternativos %1$s para esta sala. + + + %1$s añadió el alias alternativo %2$s para esta sala. + %1$s añadió los alias alternativos %2$s para esta sala. + + Sala vacía (%s) + + %1$s, %2$s, %3$s y %4$d otro + %1$s, %2$s, %3$s y %4$d otros + + %1$s, %2$s, %3$s y %4$s + %1$s, %2$s y %3$s + 🎉 Todos los servidores tienen prohibido participar! Esta sala ya no puede ser usada. + Sin cambios. + • Los servidores con literales IP coincidentes ahora están prohibidos. + • Los servidores con literales IP coincidentes ahora están permitidos. + • Los servidores con %s coincidentes se han eliminado de la lista de permitidos. + • Los servidores con %s coincidentes ahora están permitidos. + • Los servidores con %s coincidentes se han eliminado de la lista de baneos. + • Los servidores con %s coincidentes ahora están prohibidos. + Has cambiado la lista de control de acceso para esta sala. + %s ha cambiado la lista de control de acceso para esta sala. + • Los servidores con %s coincidentes están permitidos. + • Los servidores con %s coincidentes están prohibidos. + • Los servidores con literales IP coincidentes están prohibidos. + • Los servidores con literales IP coincidentes están permitidos. + Has fijado la lista de control de acceso para esta sala. + %s ha fijado la lista de control de acceso para esta sala. + Has modificado la videoconferencia + Videoconferencia modificada por %1$s + Has terminado la videoconferencia + Videoconferencia terminada por %1$s + Has empezado una videoconferencia + Videoconferencia empezada por %1$s \ No newline at end of file From 3d5a15fb1b530ada5e89859bd0bef1e3e5993b13 Mon Sep 17 00:00:00 2001 From: Marcelo Filho Date: Fri, 26 Feb 2021 17:04:27 +0000 Subject: [PATCH 112/578] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (226 of 226 strings) Translation: Element Android/Element Android Sdk Translate-URL: https://translate.element.io/projects/element-android/element-sdk/pt_BR/ --- matrix-sdk-android/src/main/res/values-pt-rBR/strings.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/matrix-sdk-android/src/main/res/values-pt-rBR/strings.xml b/matrix-sdk-android/src/main/res/values-pt-rBR/strings.xml index 5e3282a305..af4004666c 100644 --- a/matrix-sdk-android/src/main/res/values-pt-rBR/strings.xml +++ b/matrix-sdk-android/src/main/res/values-pt-rBR/strings.xml @@ -266,4 +266,10 @@ %1$s alterou os endereços desta sala. Você alterou os endereços principal e alternativos desta sala. %1$s alterou os endereços principal e alternativos desta sala. + Você modificou a chamada de vídeo + Chamada de vídeo modificada por %1$s + Você encerrou a chamada de vídeo + Chamada de vídeo encerrada por %1$s + Você começou uma chamada de vídeo + Chamada de vídeo iniciada por %1$s \ No newline at end of file From f65c9cf81240b0ac1c74439a9cd1930166623216 Mon Sep 17 00:00:00 2001 From: Besnik Bleta Date: Fri, 26 Feb 2021 20:03:24 +0000 Subject: [PATCH 113/578] Translated using Weblate (Albanian) Currently translated at 98.2% (222 of 226 strings) Translation: Element Android/Element Android Sdk Translate-URL: https://translate.element.io/projects/element-android/element-sdk/sq/ --- matrix-sdk-android/src/main/res/values-sq/strings.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/matrix-sdk-android/src/main/res/values-sq/strings.xml b/matrix-sdk-android/src/main/res/values-sq/strings.xml index 0d4b2888ba..11734bf16a 100644 --- a/matrix-sdk-android/src/main/res/values-sq/strings.xml +++ b/matrix-sdk-android/src/main/res/values-sq/strings.xml @@ -254,4 +254,10 @@ %1$s shtoi adresën alternative %2$s për këtë dhomë. %1$s shtoi adresat alternative %2$s për këtë dhomë. + Ndryshuat konferencën video + Konferenca video u ndryshua nga %1$s + Përfunduat konferencën video + Konferenca video u përfundua nga %1$s + Nisët një konferencë video + Konferencë video nisur nga %1$s \ No newline at end of file From ba74faa562b78c8d2cbb92e3e432f8b1cb27ea1f Mon Sep 17 00:00:00 2001 From: Marcelo Filho Date: Fri, 26 Feb 2021 17:03:37 +0000 Subject: [PATCH 114/578] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (11 of 11 strings) Translation: Element Android/Element Android Store Translate-URL: https://translate.element.io/projects/element-android/element-store/pt_BR/ --- fastlane/metadata/android/pt_BR/changelogs/40100170.txt | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 fastlane/metadata/android/pt_BR/changelogs/40100170.txt diff --git a/fastlane/metadata/android/pt_BR/changelogs/40100170.txt b/fastlane/metadata/android/pt_BR/changelogs/40100170.txt new file mode 100644 index 0000000000..15081f160f --- /dev/null +++ b/fastlane/metadata/android/pt_BR/changelogs/40100170.txt @@ -0,0 +1,2 @@ +Principais mudanças nessa versão: correções de erros! +Registro de todas as alterações: https://github.com/vector-im/element-android/releases/tag/v1.0.17 From 5cf904fb4af4d4c2377cc3ff232314ee7c7d948d Mon Sep 17 00:00:00 2001 From: vachan-maker Date: Fri, 26 Feb 2021 05:19:00 +0000 Subject: [PATCH 115/578] Translated using Weblate (Malayalam) Currently translated at 16.6% (346 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/ml/ --- vector/src/main/res/values-ml/strings.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/vector/src/main/res/values-ml/strings.xml b/vector/src/main/res/values-ml/strings.xml index c09b6a5649..867f91d586 100644 --- a/vector/src/main/res/values-ml/strings.xml +++ b/vector/src/main/res/values-ml/strings.xml @@ -356,4 +356,11 @@ നിങ്ങൾ റദ്ദാക്കി %s റദ്ദാക്കി കാത്തിരിക്കുന്നൂ… + പ്രവേശന സ്ക്രീനിലേക്ക് മടങ്ങുക + നിങ്ങൾക്ക് ഒരു വിഡിയോ കോൾ ആരംഭിക്കണമെന്ന് ഉറപ്പാണോ\? + തിരിച്ചറിയൽ സെർവറിന്റെ URL + കഴിയുമെങ്കിൽ, വിവരണം ഇംഗ്ലീഷിൽ എഴുതുക. + ആളുകളെ ഫിൽറ്റർ + കീ ബാക്കപ്പ് ഉപയൊഗിക്കുക + കീ ബാക്കപ്പ് പൂർത്തിയായിട്ടില്ല, കാത്തിരിക്കൂ… \ No newline at end of file From 6f6f76b36b5b37893c310d8f6902cac56e54f4a0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Mar 2021 08:55:44 +0000 Subject: [PATCH 116/578] Bump kotlin_version from 1.4.30 to 1.4.31 Bumps `kotlin_version` from 1.4.30 to 1.4.31. Updates `kotlin-gradle-plugin` from 1.4.30 to 1.4.31 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/v1.4.31/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.4.30...v1.4.31) Updates `kotlin-stdlib-jdk7` from 1.4.30 to 1.4.31 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/v1.4.31/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.4.30...v1.4.31) Updates `kotlin-stdlib` from 1.4.30 to 1.4.31 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/v1.4.31/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.4.30...v1.4.31) Signed-off-by: dependabot[bot] --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 5f4650ee23..b918750a08 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,7 @@ buildscript { // Ref: https://kotlinlang.org/releases.html - ext.kotlin_version = '1.4.30' + ext.kotlin_version = '1.4.31' ext.kotlin_coroutines_version = "1.4.2" repositories { google() From 8b34caa0b1b773b2e62c433ec0e2f0ea48d91cb8 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 1 Mar 2021 11:51:56 +0100 Subject: [PATCH 117/578] Move capability section above Server name and version section --- .../settings/homeserver/HomeserverSettingsController.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vector/src/main/java/im/vector/app/features/settings/homeserver/HomeserverSettingsController.kt b/vector/src/main/java/im/vector/app/features/settings/homeserver/HomeserverSettingsController.kt index e90f711edc..514311315d 100644 --- a/vector/src/main/java/im/vector/app/features/settings/homeserver/HomeserverSettingsController.kt +++ b/vector/src/main/java/im/vector/app/features/settings/homeserver/HomeserverSettingsController.kt @@ -48,6 +48,7 @@ class HomeserverSettingsController @Inject constructor( data ?: return buildHeader(data) + buildCapabilities(data) when (val federationVersion = data.federationVersion) { is Loading, is Uninitialized -> @@ -63,7 +64,6 @@ class HomeserverSettingsController @Inject constructor( is Success -> buildFederationVersion(federationVersion()) } - buildCapabilities(data) } private fun buildHeader(state: HomeServerSettingsViewState) { From d3b2306b3d8c45183bf66ba774dec4044469fdc4 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 1 Mar 2021 14:33:52 +0100 Subject: [PATCH 118/578] Remove unused file --- .../main/res/layout/view_image_attachment.xml | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100644 attachment-viewer/src/main/res/layout/view_image_attachment.xml diff --git a/attachment-viewer/src/main/res/layout/view_image_attachment.xml b/attachment-viewer/src/main/res/layout/view_image_attachment.xml deleted file mode 100644 index 3518a4472d..0000000000 --- a/attachment-viewer/src/main/res/layout/view_image_attachment.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - \ No newline at end of file From 9a635dd906e31c8033626da4e927d951b380d9af Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 1 Mar 2021 15:10:27 +0100 Subject: [PATCH 119/578] Move VerificationState to a dedicated file and in the correct package --- .../sdk/api/crypto/VerificationState.kt | 25 +++++++++++++++++++ .../room/model/ReferencesAggregatedContent.kt | 2 +- .../EventRelationsAggregationProcessor.kt | 9 +------ .../factory/VerificationItemFactory.kt | 2 +- .../helper/MessageInformationDataFactory.kt | 2 +- .../timeline/item/MessageInformationData.kt | 2 +- .../timeline/item/VerificationRequestItem.kt | 2 +- 7 files changed, 31 insertions(+), 13 deletions(-) create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/crypto/VerificationState.kt diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/crypto/VerificationState.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/crypto/VerificationState.kt new file mode 100644 index 0000000000..8a3515740b --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/crypto/VerificationState.kt @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2021 The Matrix.org Foundation C.I.C. + * + * 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. + */ + +package org.matrix.android.sdk.api.crypto + +enum class VerificationState { + REQUEST, + WAITING, + CANCELED_BY_ME, + CANCELED_BY_OTHER, + DONE +} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/ReferencesAggregatedContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/ReferencesAggregatedContent.kt index 0947c96bb0..664d042e18 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/ReferencesAggregatedContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/ReferencesAggregatedContent.kt @@ -17,7 +17,7 @@ package org.matrix.android.sdk.api.session.room.model import com.squareup.moshi.Json import com.squareup.moshi.JsonClass -import org.matrix.android.sdk.internal.session.room.VerificationState +import org.matrix.android.sdk.api.crypto.VerificationState /** * Contains an aggregated summary info of the references. diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/EventRelationsAggregationProcessor.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/EventRelationsAggregationProcessor.kt index d090ba5296..eefab74136 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/EventRelationsAggregationProcessor.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/EventRelationsAggregationProcessor.kt @@ -16,6 +16,7 @@ package org.matrix.android.sdk.internal.session.room import io.realm.Realm +import org.matrix.android.sdk.api.crypto.VerificationState import org.matrix.android.sdk.api.session.events.model.AggregatedAnnotation import org.matrix.android.sdk.api.session.events.model.Event import org.matrix.android.sdk.api.session.events.model.EventType @@ -50,14 +51,6 @@ import org.matrix.android.sdk.internal.session.EventInsertLiveProcessor import timber.log.Timber import javax.inject.Inject -enum class VerificationState { - REQUEST, - WAITING, - CANCELED_BY_ME, - CANCELED_BY_OTHER, - DONE -} - fun VerificationState.isCanceled(): Boolean { return this == VerificationState.CANCELED_BY_ME || this == VerificationState.CANCELED_BY_OTHER } diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/VerificationItemFactory.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/VerificationItemFactory.kt index 0b623d78f1..eb539d2b8a 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/VerificationItemFactory.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/VerificationItemFactory.kt @@ -26,6 +26,7 @@ import im.vector.app.features.home.room.detail.timeline.helper.MessageInformatio import im.vector.app.features.home.room.detail.timeline.helper.MessageItemAttributesFactory import im.vector.app.features.home.room.detail.timeline.item.StatusTileTimelineItem import im.vector.app.features.home.room.detail.timeline.item.StatusTileTimelineItem_ +import org.matrix.android.sdk.api.crypto.VerificationState import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.crypto.verification.CancelCode import org.matrix.android.sdk.api.session.crypto.verification.safeValueOf @@ -35,7 +36,6 @@ import org.matrix.android.sdk.api.session.events.model.toModel import org.matrix.android.sdk.api.session.room.model.message.MessageRelationContent import org.matrix.android.sdk.api.session.room.model.message.MessageVerificationCancelContent import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent -import org.matrix.android.sdk.internal.session.room.VerificationState import javax.inject.Inject /** diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/MessageInformationDataFactory.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/MessageInformationDataFactory.kt index 802c177197..951a4d3fa0 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/MessageInformationDataFactory.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/MessageInformationDataFactory.kt @@ -26,6 +26,7 @@ import im.vector.app.features.home.room.detail.timeline.item.ReactionInfoData import im.vector.app.features.home.room.detail.timeline.item.ReadReceiptData import im.vector.app.features.home.room.detail.timeline.item.ReferencesInfoData import im.vector.app.features.settings.VectorPreferences +import org.matrix.android.sdk.api.crypto.VerificationState import org.matrix.android.sdk.api.extensions.orFalse import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.events.model.EventType @@ -37,7 +38,6 @@ import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent import org.matrix.android.sdk.api.session.room.timeline.getLastMessageContent import org.matrix.android.sdk.api.session.room.timeline.hasBeenEdited import org.matrix.android.sdk.internal.crypto.model.event.EncryptedEventContent -import org.matrix.android.sdk.internal.session.room.VerificationState import javax.inject.Inject /** diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageInformationData.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageInformationData.kt index 38575f0cc9..48bd4db94c 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageInformationData.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageInformationData.kt @@ -18,9 +18,9 @@ package im.vector.app.features.home.room.detail.timeline.item import android.os.Parcelable import kotlinx.parcelize.Parcelize +import org.matrix.android.sdk.api.crypto.VerificationState import org.matrix.android.sdk.api.session.room.send.SendState import org.matrix.android.sdk.api.util.MatrixItem -import org.matrix.android.sdk.internal.session.room.VerificationState @Parcelize data class MessageInformationData( diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/VerificationRequestItem.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/VerificationRequestItem.kt index c7a279979b..9ec1d825df 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/VerificationRequestItem.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/VerificationRequestItem.kt @@ -35,8 +35,8 @@ import im.vector.app.features.home.AvatarRenderer import im.vector.app.features.home.room.detail.RoomDetailAction import im.vector.app.features.home.room.detail.timeline.MessageColorProvider import im.vector.app.features.home.room.detail.timeline.TimelineEventController +import org.matrix.android.sdk.api.crypto.VerificationState import org.matrix.android.sdk.api.session.crypto.verification.VerificationService -import org.matrix.android.sdk.internal.session.room.VerificationState @EpoxyModelClass(layout = R.layout.item_timeline_event_base_state) abstract class VerificationRequestItem : AbsBaseMessageItem() { From c7e7bf4d2c6debc327e0ddd86da0bcf9fd099c1a Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 1 Mar 2021 15:14:03 +0100 Subject: [PATCH 120/578] Move VerificationState?.toState() to a dedicated file and in the correct package --- .../sdk/api/crypto/VerificationState.kt | 4 +++ .../verification/VerificationStateExt.kt | 36 +++++++++++++++++++ .../EventRelationsAggregationProcessor.kt | 20 +---------- 3 files changed, 41 insertions(+), 19 deletions(-) create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationStateExt.kt diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/crypto/VerificationState.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/crypto/VerificationState.kt index 8a3515740b..54276a6b51 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/crypto/VerificationState.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/crypto/VerificationState.kt @@ -23,3 +23,7 @@ enum class VerificationState { CANCELED_BY_OTHER, DONE } + +fun VerificationState.isCanceled(): Boolean { + return this == VerificationState.CANCELED_BY_ME || this == VerificationState.CANCELED_BY_OTHER +} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationStateExt.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationStateExt.kt new file mode 100644 index 0000000000..b5fba0d54c --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationStateExt.kt @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2021 The Matrix.org Foundation C.I.C. + * + * 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. + */ + +package org.matrix.android.sdk.internal.crypto.verification + +import org.matrix.android.sdk.api.crypto.VerificationState +import org.matrix.android.sdk.api.crypto.isCanceled + +// State transition with control +internal fun VerificationState?.toState(newState: VerificationState): VerificationState { + // Cancel is always prioritary ? + // Eg id i found that mac or keys mismatch and send a cancel and the other send a done, i have to + // consider as canceled + if (newState.isCanceled()) { + return newState + } + // never move out of cancel + if (this?.isCanceled() == true) { + return this + } + return newState +} + diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/EventRelationsAggregationProcessor.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/EventRelationsAggregationProcessor.kt index eefab74136..8df865b104 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/EventRelationsAggregationProcessor.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/EventRelationsAggregationProcessor.kt @@ -32,6 +32,7 @@ import org.matrix.android.sdk.api.session.room.model.message.MessagePollResponse import org.matrix.android.sdk.api.session.room.model.message.MessageRelationContent import org.matrix.android.sdk.api.session.room.model.relation.ReactionContent import org.matrix.android.sdk.internal.crypto.model.event.EncryptedEventContent +import org.matrix.android.sdk.internal.crypto.verification.toState import org.matrix.android.sdk.internal.database.mapper.ContentMapper import org.matrix.android.sdk.internal.database.mapper.EventMapper import org.matrix.android.sdk.internal.database.model.EditAggregatedSummaryEntity @@ -51,25 +52,6 @@ import org.matrix.android.sdk.internal.session.EventInsertLiveProcessor import timber.log.Timber import javax.inject.Inject -fun VerificationState.isCanceled(): Boolean { - return this == VerificationState.CANCELED_BY_ME || this == VerificationState.CANCELED_BY_OTHER -} - -// State transition with control -private fun VerificationState?.toState(newState: VerificationState): VerificationState { - // Cancel is always prioritary ? - // Eg id i found that mac or keys mismatch and send a cancel and the other send a done, i have to - // consider as canceled - if (newState.isCanceled()) { - return newState - } - // never move out of cancel - if (this?.isCanceled() == true) { - return this - } - return newState -} - internal class EventRelationsAggregationProcessor @Inject constructor(@UserId private val userId: String) : EventInsertLiveProcessor { From bdec23f740608915538b0d164b05f86926918d2c Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 1 Mar 2021 15:03:47 +0100 Subject: [PATCH 121/578] Rework edition of event management --- .../EventAnnotationsSummaryEntityQuery.kt | 2 +- .../EventRelationsAggregationProcessor.kt | 44 +++++++++++++------ 2 files changed, 31 insertions(+), 15 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/EventAnnotationsSummaryEntityQuery.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/EventAnnotationsSummaryEntityQuery.kt index 9a298b7e79..b96fc54a42 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/EventAnnotationsSummaryEntityQuery.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/EventAnnotationsSummaryEntityQuery.kt @@ -50,5 +50,5 @@ internal fun EventAnnotationsSummaryEntity.Companion.create(realm: Realm, roomId internal fun EventAnnotationsSummaryEntity.Companion.getOrCreate(realm: Realm, roomId: String, eventId: String): EventAnnotationsSummaryEntity { return EventAnnotationsSummaryEntity.where(realm, eventId).findFirst() - ?: EventAnnotationsSummaryEntity.create(realm, roomId, eventId).apply { this.roomId = roomId } + ?: EventAnnotationsSummaryEntity.create(realm, roomId, eventId) } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/EventRelationsAggregationProcessor.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/EventRelationsAggregationProcessor.kt index 8df865b104..dd6b16de59 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/EventRelationsAggregationProcessor.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/EventRelationsAggregationProcessor.kt @@ -191,29 +191,45 @@ internal class EventRelationsAggregationProcessor @Inject constructor(@UserId pr // OPT OUT serer aggregation until API mature enough private val SHOULD_HANDLE_SERVER_AGREGGATION = false - private fun handleReplace(realm: Realm, event: Event, content: MessageContent, roomId: String, isLocalEcho: Boolean, relatedEventId: String? = null) { + private fun handleReplace(realm: Realm, + event: Event, + content: MessageContent, + roomId: String, + isLocalEcho: Boolean, + relatedEventId: String? = null) { val eventId = event.eventId ?: return val targetEventId = relatedEventId ?: content.relatesTo?.eventId ?: return val newContent = content.newContent ?: return + + // Check that the sender is the same + val editedEvent = EventEntity.where(realm, targetEventId).findFirst() + if (editedEvent == null) { + // We do not know yet about the edited event + } else if (editedEvent.sender != event.senderId) { + // Edited by someone else, ignore + Timber.w("Ignore edition by someone else") + return + } + // ok, this is a replace - val existing = EventAnnotationsSummaryEntity.getOrCreate(realm, roomId, targetEventId) + val eventAnnotationsSummaryEntity = EventAnnotationsSummaryEntity.getOrCreate(realm, roomId, targetEventId) // we have it - val existingSummary = existing.editSummary + val existingSummary = eventAnnotationsSummaryEntity.editSummary if (existingSummary == null) { Timber.v("###REPLACE new edit summary for $targetEventId, creating one (localEcho:$isLocalEcho)") // create the edit summary - val editSummary = realm.createObject(EditAggregatedSummaryEntity::class.java) - editSummary.aggregatedContent = ContentMapper.map(newContent) - if (isLocalEcho) { - editSummary.lastEditTs = 0 - editSummary.sourceLocalEchoEvents.add(eventId) - } else { - editSummary.lastEditTs = event.originServerTs ?: 0 - editSummary.sourceEvents.add(eventId) - } - - existing.editSummary = editSummary + eventAnnotationsSummaryEntity.editSummary = realm.createObject(EditAggregatedSummaryEntity::class.java) + .also { editSummary -> + editSummary.aggregatedContent = ContentMapper.map(newContent) + if (isLocalEcho) { + editSummary.lastEditTs = 0 + editSummary.sourceLocalEchoEvents.add(eventId) + } else { + editSummary.lastEditTs = event.originServerTs ?: 0 + editSummary.sourceEvents.add(eventId) + } + } } else { if (existingSummary.sourceEvents.contains(eventId)) { // ignore this event, we already know it (??) From 1bfd78753a825d8739b98fb0030eeb3fa705d567 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 1 Mar 2021 17:52:56 +0100 Subject: [PATCH 122/578] Ensure we do not edit an Event from another room --- .../database/helper/ChunkEntityHelper.kt | 2 +- .../EventAnnotationsSummaryEntityQuery.kt | 18 ++++--------- .../EventRelationsAggregationProcessor.kt | 25 ++++++++----------- .../room/relation/DefaultRelationService.kt | 4 +-- .../relation/FindReactionEventForUndoTask.kt | 8 +++--- .../room/relation/UpdateQuickReactionTask.kt | 14 +++++------ 6 files changed, 30 insertions(+), 41 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/helper/ChunkEntityHelper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/helper/ChunkEntityHelper.kt index b4935cfdcc..c2b729e593 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/helper/ChunkEntityHelper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/helper/ChunkEntityHelper.kt @@ -97,7 +97,7 @@ internal fun ChunkEntity.addTimelineEvent(roomId: String, this.root = eventEntity this.eventId = eventId this.roomId = roomId - this.annotations = EventAnnotationsSummaryEntity.where(realm, eventId).findFirst() + this.annotations = EventAnnotationsSummaryEntity.where(realm, roomId, eventId).findFirst() this.readReceipts = readReceiptsSummaryEntity this.displayIndex = displayIndex val roomMemberContent = roomMemberContentsByUser[senderId] diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/EventAnnotationsSummaryEntityQuery.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/EventAnnotationsSummaryEntityQuery.kt index b96fc54a42..c3cae3d268 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/EventAnnotationsSummaryEntityQuery.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/EventAnnotationsSummaryEntityQuery.kt @@ -23,18 +23,10 @@ import io.realm.Realm import io.realm.RealmQuery import io.realm.kotlin.where -internal fun EventAnnotationsSummaryEntity.Companion.where(realm: Realm, eventId: String): RealmQuery { - val query = realm.where() - query.equalTo(EventAnnotationsSummaryEntityFields.EVENT_ID, eventId) - return query -} - -internal fun EventAnnotationsSummaryEntity.Companion.whereInRoom(realm: Realm, roomId: String?): RealmQuery { - val query = realm.where() - if (roomId != null) { - query.equalTo(EventAnnotationsSummaryEntityFields.ROOM_ID, roomId) - } - return query +internal fun EventAnnotationsSummaryEntity.Companion.where(realm: Realm, roomId: String, eventId: String): RealmQuery { + return realm.where() + .equalTo(EventAnnotationsSummaryEntityFields.ROOM_ID, roomId) + .equalTo(EventAnnotationsSummaryEntityFields.EVENT_ID, eventId) } internal fun EventAnnotationsSummaryEntity.Companion.create(realm: Realm, roomId: String, eventId: String): EventAnnotationsSummaryEntity { @@ -49,6 +41,6 @@ internal fun EventAnnotationsSummaryEntity.Companion.create(realm: Realm, roomId } internal fun EventAnnotationsSummaryEntity.Companion.getOrCreate(realm: Realm, roomId: String, eventId: String): EventAnnotationsSummaryEntity { - return EventAnnotationsSummaryEntity.where(realm, eventId).findFirst() + return EventAnnotationsSummaryEntity.where(realm, roomId, eventId).findFirst() ?: EventAnnotationsSummaryEntity.create(realm, roomId, eventId) } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/EventRelationsAggregationProcessor.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/EventRelationsAggregationProcessor.kt index dd6b16de59..c274ccb244 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/EventRelationsAggregationProcessor.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/EventRelationsAggregationProcessor.kt @@ -93,13 +93,11 @@ internal class EventRelationsAggregationProcessor @Inject constructor(@UserId pr Timber.v("###REACTION Agreggation in room $roomId for event ${event.eventId}") handleInitialAggregatedRelations(event, roomId, event.unsignedData.relations.annotations, realm) - EventAnnotationsSummaryEntity.where(realm, event.eventId - ?: "").findFirst()?.let { - TimelineEventEntity.where(realm, roomId = roomId, eventId = event.eventId - ?: "").findFirst()?.let { tet -> - tet.annotations = it - } - } + EventAnnotationsSummaryEntity.where(realm, roomId, event.eventId ?: "").findFirst() + ?.let { + TimelineEventEntity.where(realm, roomId = roomId, eventId = event.eventId ?: "").findFirst() + ?.let { tet -> tet.annotations = it } + } } val content: MessageContent? = event.content.toModel() @@ -281,7 +279,7 @@ internal class EventRelationsAggregationProcessor @Inject constructor(@UserId pr val eventTimestamp = event.originServerTs ?: return // ok, this is a poll response - var existing = EventAnnotationsSummaryEntity.where(realm, targetEventId).findFirst() + var existing = EventAnnotationsSummaryEntity.where(realm, roomId, targetEventId).findFirst() if (existing == null) { Timber.v("## POLL creating new relation summary for $targetEventId") existing = EventAnnotationsSummaryEntity.create(realm, roomId, targetEventId) @@ -361,7 +359,7 @@ internal class EventRelationsAggregationProcessor @Inject constructor(@UserId pr aggregation.chunk?.forEach { if (it.type == EventType.REACTION) { val eventId = event.eventId ?: "" - val existing = EventAnnotationsSummaryEntity.where(realm, eventId).findFirst() + val existing = EventAnnotationsSummaryEntity.where(realm, roomId, eventId).findFirst() if (existing == null) { val eventSummary = EventAnnotationsSummaryEntity.create(realm, roomId, eventId) val sum = realm.createObject(ReactionAggregatedSummaryEntity::class.java) @@ -445,7 +443,7 @@ internal class EventRelationsAggregationProcessor @Inject constructor(@UserId pr */ private fun handleRedactionOfReplace(redacted: EventEntity, relatedEventId: String, realm: Realm) { Timber.d("Handle redaction of m.replace") - val eventSummary = EventAnnotationsSummaryEntity.where(realm, relatedEventId).findFirst() + val eventSummary = EventAnnotationsSummaryEntity.where(realm, redacted.roomId, relatedEventId).findFirst() if (eventSummary == null) { Timber.w("Redaction of a replace targeting an unknown event $relatedEventId") return @@ -475,16 +473,15 @@ internal class EventRelationsAggregationProcessor @Inject constructor(@UserId pr } } - fun handleReactionRedact(eventToPrune: EventEntity, realm: Realm, userId: String) { + private fun handleReactionRedact(eventToPrune: EventEntity, realm: Realm, userId: String) { Timber.v("REDACTION of reaction ${eventToPrune.eventId}") // delete a reaction, need to update the annotation summary if any - val reactionContent: ReactionContent = EventMapper.map(eventToPrune).content.toModel() - ?: return + val reactionContent: ReactionContent = EventMapper.map(eventToPrune).content.toModel() ?: return val eventThatWasReacted = reactionContent.relatesTo?.eventId ?: return val reactionKey = reactionContent.relatesTo.key Timber.v("REMOVE reaction for key $reactionKey") - val summary = EventAnnotationsSummaryEntity.where(realm, eventThatWasReacted).findFirst() + val summary = EventAnnotationsSummaryEntity.where(realm, eventToPrune.roomId, eventThatWasReacted).findFirst() if (summary != null) { summary.reactionsSummary.where() .equalTo(ReactionAggregatedSummaryEntityFields.KEY, reactionKey) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/DefaultRelationService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/DefaultRelationService.kt index b7caf62865..bbcad3a4fe 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/DefaultRelationService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/DefaultRelationService.kt @@ -159,7 +159,7 @@ internal class DefaultRelationService @AssistedInject constructor( override fun getEventAnnotationsSummary(eventId: String): EventAnnotationsSummary? { return monarchy.fetchCopyMap( - { EventAnnotationsSummaryEntity.where(it, eventId).findFirst() }, + { EventAnnotationsSummaryEntity.where(it, roomId, eventId).findFirst() }, { entity, _ -> entity.asDomain() } @@ -168,7 +168,7 @@ internal class DefaultRelationService @AssistedInject constructor( override fun getEventAnnotationsSummaryLive(eventId: String): LiveData> { val liveData = monarchy.findAllMappedWithChanges( - { EventAnnotationsSummaryEntity.where(it, eventId) }, + { EventAnnotationsSummaryEntity.where(it, roomId, eventId) }, { it.asDomain() } ) return Transformations.map(liveData) { results -> diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/FindReactionEventForUndoTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/FindReactionEventForUndoTask.kt index fa6db2ee37..863ae4f5ce 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/FindReactionEventForUndoTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/FindReactionEventForUndoTask.kt @@ -45,16 +45,16 @@ internal class DefaultFindReactionEventForUndoTask @Inject constructor( override suspend fun execute(params: FindReactionEventForUndoTask.Params): FindReactionEventForUndoTask.Result { val eventId = Realm.getInstance(monarchy.realmConfiguration).use { realm -> - getReactionToRedact(realm, params.reaction, params.eventId)?.eventId + getReactionToRedact(realm, params)?.eventId } return FindReactionEventForUndoTask.Result(eventId) } - private fun getReactionToRedact(realm: Realm, reaction: String, eventId: String): EventEntity? { - val summary = EventAnnotationsSummaryEntity.where(realm, eventId).findFirst() ?: return null + private fun getReactionToRedact(realm: Realm, params: FindReactionEventForUndoTask.Params): EventEntity? { + val summary = EventAnnotationsSummaryEntity.where(realm, params.roomId, params.eventId).findFirst() ?: return null val rase = summary.reactionsSummary.where() - .equalTo(ReactionAggregatedSummaryEntityFields.KEY, reaction) + .equalTo(ReactionAggregatedSummaryEntityFields.KEY, params.reaction) .findFirst() ?: return null // want to find the event originated by me! diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/UpdateQuickReactionTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/UpdateQuickReactionTask.kt index 1f68a700ad..32d6c5aa7e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/UpdateQuickReactionTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/UpdateQuickReactionTask.kt @@ -47,22 +47,22 @@ internal class DefaultUpdateQuickReactionTask @Inject constructor(@SessionDataba override suspend fun execute(params: UpdateQuickReactionTask.Params): UpdateQuickReactionTask.Result { var res: Pair?>? = null monarchy.doWithRealm { realm -> - res = updateQuickReaction(realm, params.reaction, params.oppositeReaction, params.eventId) + res = updateQuickReaction(realm, params) } return UpdateQuickReactionTask.Result(res?.first, res?.second.orEmpty()) } - private fun updateQuickReaction(realm: Realm, reaction: String, oppositeReaction: String, eventId: String): Pair?> { + private fun updateQuickReaction(realm: Realm, params: UpdateQuickReactionTask.Params): Pair?> { // the emoji reaction has been selected, we need to check if we have reacted it or not - val existingSummary = EventAnnotationsSummaryEntity.where(realm, eventId).findFirst() - ?: return Pair(reaction, null) + val existingSummary = EventAnnotationsSummaryEntity.where(realm, params.roomId, params.eventId).findFirst() + ?: return Pair(params.reaction, null) // Ok there is already reactions on this event, have we reacted to it val aggregationForReaction = existingSummary.reactionsSummary.where() - .equalTo(ReactionAggregatedSummaryEntityFields.KEY, reaction) + .equalTo(ReactionAggregatedSummaryEntityFields.KEY, params.reaction) .findFirst() val aggregationForOppositeReaction = existingSummary.reactionsSummary.where() - .equalTo(ReactionAggregatedSummaryEntityFields.KEY, oppositeReaction) + .equalTo(ReactionAggregatedSummaryEntityFields.KEY, params.oppositeReaction) .findFirst() if (aggregationForReaction == null || !aggregationForReaction.addedByMe) { @@ -72,7 +72,7 @@ internal class DefaultUpdateQuickReactionTask @Inject constructor(@SessionDataba val entity = EventEntity.where(realm, it).findFirst() if (entity?.sender == userId) entity.eventId else null } - return Pair(reaction, toRedact) + return Pair(params.reaction, toRedact) } else { // I already added it, so i need to undo it (like a toggle) // find all m.redaction coming from me to readact them From 097668b762d7426c4e1ca175f1e09ac0c9e2e4ce Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 1 Mar 2021 19:59:55 +0100 Subject: [PATCH 123/578] Rework edition of event management - step 2 --- CHANGES.md | 2 +- .../database/RealmSessionStoreMigration.kt | 30 ++++++- .../database/helper/ChunkEntityHelper.kt | 1 + .../mapper/EventAnnotationsSummaryMapper.kt | 55 ++---------- .../model/EditAggregatedSummaryEntity.kt | 19 +++-- .../model/EventAnnotationsSummaryEntity.kt | 16 ++++ .../database/model/SessionRealmModule.kt | 1 + .../EventRelationsAggregationProcessor.kt | 84 ++++++++----------- 8 files changed, 102 insertions(+), 106 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 5125d158ec..d9c2c01bea 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -25,7 +25,7 @@ Test: - Other changes: - - + - Rework edition of event management Changes in Element 1.1.0 (2021-02-19) =================================================== diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmSessionStoreMigration.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmSessionStoreMigration.kt index 57002b5a60..820588b1ab 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmSessionStoreMigration.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmSessionStoreMigration.kt @@ -18,6 +18,8 @@ package org.matrix.android.sdk.internal.database import io.realm.DynamicRealm import io.realm.RealmMigration +import org.matrix.android.sdk.internal.database.model.EditAggregatedSummaryEntityFields +import org.matrix.android.sdk.internal.database.model.EditionOfEventFields import org.matrix.android.sdk.internal.database.model.HomeServerCapabilitiesEntityFields import org.matrix.android.sdk.internal.database.model.PendingThreePidEntityFields import org.matrix.android.sdk.internal.database.model.PreviewUrlCacheEntityFields @@ -30,7 +32,7 @@ import javax.inject.Inject class RealmSessionStoreMigration @Inject constructor() : RealmMigration { companion object { - const val SESSION_STORE_SCHEMA_VERSION = 7L + const val SESSION_STORE_SCHEMA_VERSION = 8L } override fun migrate(realm: DynamicRealm, oldVersion: Long, newVersion: Long) { @@ -43,6 +45,7 @@ class RealmSessionStoreMigration @Inject constructor() : RealmMigration { if (oldVersion <= 4) migrateTo5(realm) if (oldVersion <= 5) migrateTo6(realm) if (oldVersion <= 6) migrateTo7(realm) + if (oldVersion <= 7) migrateTo8(realm) } private fun migrateTo1(realm: DynamicRealm) { @@ -122,4 +125,29 @@ class RealmSessionStoreMigration @Inject constructor() : RealmMigration { } ?.removeField("areAllMembersLoaded") } + + private fun migrateTo8(realm: DynamicRealm) { + Timber.d("Step 7 -> 8") + + val editionOfEventSchema = realm.schema.create("EditionOfEvent") + .apply { + // setEmbedded does not return `this`... + isEmbedded = true + } + .addField(EditionOfEventFields.CONTENT, String::class.java) + .addField(EditionOfEventFields.EVENT_ID, String::class.java) + .setRequired(EditionOfEventFields.EVENT_ID, true) + .addField(EditionOfEventFields.SENDER_ID, String::class.java) + .setRequired(EditionOfEventFields.SENDER_ID, true) + .addField(EditionOfEventFields.TIMESTAMP, Long::class.java) + .addField(EditionOfEventFields.IS_LOCAL_ECHO, Boolean::class.java) + + + realm.schema.get("EditAggregatedSummaryEntity") + ?.removeField("aggregatedContent") + ?.removeField("sourceEvents") + ?.removeField("lastEditTs") + ?.removeField("sourceLocalEchoEvents") + ?.addRealmListField(EditAggregatedSummaryEntityFields.EDITIONS.`$`, editionOfEventSchema) + } } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/helper/ChunkEntityHelper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/helper/ChunkEntityHelper.kt index c2b729e593..e262b40419 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/helper/ChunkEntityHelper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/helper/ChunkEntityHelper.kt @@ -98,6 +98,7 @@ internal fun ChunkEntity.addTimelineEvent(roomId: String, this.eventId = eventId this.roomId = roomId this.annotations = EventAnnotationsSummaryEntity.where(realm, roomId, eventId).findFirst() + ?.also { it.cleanUp(eventEntity.sender) } this.readReceipts = readReceiptsSummaryEntity this.displayIndex = displayIndex val roomMemberContent = roomMemberContentsByUser[senderId] diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/EventAnnotationsSummaryMapper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/EventAnnotationsSummaryMapper.kt index 9ed2664068..f4d3d74150 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/EventAnnotationsSummaryMapper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/EventAnnotationsSummaryMapper.kt @@ -20,11 +20,7 @@ import org.matrix.android.sdk.api.session.room.model.EditAggregatedSummary import org.matrix.android.sdk.api.session.room.model.EventAnnotationsSummary import org.matrix.android.sdk.api.session.room.model.ReactionAggregatedSummary import org.matrix.android.sdk.api.session.room.model.ReferencesAggregatedSummary -import org.matrix.android.sdk.internal.database.model.EditAggregatedSummaryEntity import org.matrix.android.sdk.internal.database.model.EventAnnotationsSummaryEntity -import org.matrix.android.sdk.internal.database.model.ReactionAggregatedSummaryEntity -import org.matrix.android.sdk.internal.database.model.ReferencesAggregatedSummaryEntity -import io.realm.RealmList internal object EventAnnotationsSummaryMapper { fun map(annotationsSummary: EventAnnotationsSummaryEntity): EventAnnotationsSummary { @@ -41,11 +37,14 @@ internal object EventAnnotationsSummaryMapper { ) }, editSummary = annotationsSummary.editSummary?.let { + val latestEdition = it.editions.maxByOrNull { editionOfEvent -> editionOfEvent.timestamp } EditAggregatedSummary( - ContentMapper.map(it.aggregatedContent), - it.sourceEvents.toList(), - it.sourceLocalEchoEvents.toList(), - it.lastEditTs + ContentMapper.map(latestEdition?.content), + it.editions.filter { editionOfEvent -> !editionOfEvent.isLocalEcho } + .map { editionOfEvent -> editionOfEvent.eventId }, + it.editions.filter { editionOfEvent -> editionOfEvent.isLocalEcho } + .map { editionOfEvent -> editionOfEvent.eventId }, + latestEdition?.timestamp ?: 0L ) }, referencesAggregatedSummary = annotationsSummary.referencesSummaryEntity?.let { @@ -62,46 +61,6 @@ internal object EventAnnotationsSummaryMapper { ) } - - fun map(annotationsSummary: EventAnnotationsSummary, roomId: String): EventAnnotationsSummaryEntity { - val eventAnnotationsSummaryEntity = EventAnnotationsSummaryEntity() - eventAnnotationsSummaryEntity.eventId = annotationsSummary.eventId - eventAnnotationsSummaryEntity.roomId = roomId - eventAnnotationsSummaryEntity.editSummary = annotationsSummary.editSummary?.let { - EditAggregatedSummaryEntity( - ContentMapper.map(it.aggregatedContent), - RealmList().apply { addAll(it.sourceEvents) }, - RealmList().apply { addAll(it.localEchos) }, - it.lastEditTs - ) - } - eventAnnotationsSummaryEntity.reactionsSummary = annotationsSummary.reactionsSummary.let { - RealmList().apply { - addAll(it.map { - ReactionAggregatedSummaryEntity( - it.key, - it.count, - it.addedByMe, - it.firstTimestamp, - RealmList().apply { addAll(it.sourceEvents) }, - RealmList().apply { addAll(it.localEchoEvents) } - ) - }) - } - } - eventAnnotationsSummaryEntity.referencesSummaryEntity = annotationsSummary.referencesAggregatedSummary?.let { - ReferencesAggregatedSummaryEntity( - it.eventId, - ContentMapper.map(it.content), - RealmList().apply { addAll(it.sourceEvents) }, - RealmList().apply { addAll(it.localEchos) } - ) - } - eventAnnotationsSummaryEntity.pollResponseSummary = annotationsSummary.pollResponseSummary?.let { - PollResponseAggregatedSummaryEntityMapper.map(it) - } - return eventAnnotationsSummaryEntity - } } internal fun EventAnnotationsSummaryEntity.asDomain(): EventAnnotationsSummary { diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EditAggregatedSummaryEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EditAggregatedSummaryEntity.kt index 604afc1ab1..0ed927a6b8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EditAggregatedSummaryEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EditAggregatedSummaryEntity.kt @@ -17,17 +17,24 @@ package org.matrix.android.sdk.internal.database.model import io.realm.RealmList import io.realm.RealmObject +import io.realm.annotations.RealmClass /** - * Keep the latest state of edition of a message + * Keep all the editions of a message */ internal open class EditAggregatedSummaryEntity( - var aggregatedContent: String? = null, - // The list of the eventIDs used to build the summary (might be out of sync if chunked received from message chunk) - var sourceEvents: RealmList = RealmList(), - var sourceLocalEchoEvents: RealmList = RealmList(), - var lastEditTs: Long = 0 + // The list of the editions used to build the summary (might be out of sync if chunked received from message chunk) + var editions: RealmList = RealmList() ) : RealmObject() { companion object } + +@RealmClass(embedded = true) +internal open class EditionOfEvent( + var senderId: String = "", + var eventId: String = "", + var content: String? = null, + var timestamp: Long = 0, + var isLocalEcho: Boolean = false +) : RealmObject() diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EventAnnotationsSummaryEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EventAnnotationsSummaryEntity.kt index 33f26d439f..3e88130420 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EventAnnotationsSummaryEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EventAnnotationsSummaryEntity.kt @@ -18,6 +18,7 @@ package org.matrix.android.sdk.internal.database.model import io.realm.RealmList import io.realm.RealmObject import io.realm.annotations.PrimaryKey +import timber.log.Timber internal open class EventAnnotationsSummaryEntity( @PrimaryKey @@ -29,6 +30,21 @@ internal open class EventAnnotationsSummaryEntity( var pollResponseSummary: PollResponseAggregatedSummaryEntity? = null ) : RealmObject() { + /** + * Cleanup undesired editions, done by users different from the originalEventSender + */ + fun cleanUp(originalEventSenderId: String?) { + originalEventSenderId ?: return + + editSummary?.editions?.filter { + it.senderId != originalEventSenderId + } + ?.forEach { + Timber.w("Deleting an edition from ${it.senderId} of event sent by $originalEventSenderId") + it.deleteFromRealm() + } + } + companion object } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/SessionRealmModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/SessionRealmModule.kt index bca2c42c9e..6e6096cf8a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/SessionRealmModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/SessionRealmModule.kt @@ -43,6 +43,7 @@ import io.realm.annotations.RealmModule EventAnnotationsSummaryEntity::class, ReactionAggregatedSummaryEntity::class, EditAggregatedSummaryEntity::class, + EditionOfEvent::class, PollResponseAggregatedSummaryEntity::class, ReferencesAggregatedSummaryEntity::class, PushRulesEntity::class, diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/EventRelationsAggregationProcessor.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/EventRelationsAggregationProcessor.kt index c274ccb244..8269643d39 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/EventRelationsAggregationProcessor.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/EventRelationsAggregationProcessor.kt @@ -36,6 +36,7 @@ import org.matrix.android.sdk.internal.crypto.verification.toState import org.matrix.android.sdk.internal.database.mapper.ContentMapper import org.matrix.android.sdk.internal.database.mapper.EventMapper import org.matrix.android.sdk.internal.database.model.EditAggregatedSummaryEntity +import org.matrix.android.sdk.internal.database.model.EditionOfEvent import org.matrix.android.sdk.internal.database.model.EventAnnotationsSummaryEntity import org.matrix.android.sdk.internal.database.model.EventEntity import org.matrix.android.sdk.internal.database.model.EventInsertType @@ -219,49 +220,48 @@ internal class EventRelationsAggregationProcessor @Inject constructor(@UserId pr // create the edit summary eventAnnotationsSummaryEntity.editSummary = realm.createObject(EditAggregatedSummaryEntity::class.java) .also { editSummary -> - editSummary.aggregatedContent = ContentMapper.map(newContent) - if (isLocalEcho) { - editSummary.lastEditTs = 0 - editSummary.sourceLocalEchoEvents.add(eventId) - } else { - editSummary.lastEditTs = event.originServerTs ?: 0 - editSummary.sourceEvents.add(eventId) - } + editSummary.editions.add( + EditionOfEvent( + senderId = event.senderId ?: "", + eventId = event.eventId, + content = ContentMapper.map(newContent), + timestamp = if (isLocalEcho) 0 else event.originServerTs ?: 0, + isLocalEcho = isLocalEcho + ) + ) } } else { - if (existingSummary.sourceEvents.contains(eventId)) { + if (existingSummary.editions.any { it.eventId == eventId }) { // ignore this event, we already know it (??) Timber.v("###REPLACE ignoring event for summary, it's known $eventId") return } val txId = event.unsignedData?.transactionId // is it a remote echo? - if (!isLocalEcho && existingSummary.sourceLocalEchoEvents.contains(txId)) { + if (!isLocalEcho && existingSummary.editions.any { it.eventId == txId }) { // ok it has already been managed Timber.v("###REPLACE Receiving remote echo of edit (edit already done)") - existingSummary.sourceLocalEchoEvents.remove(txId) - existingSummary.sourceEvents.add(event.eventId) - } else if ( - isLocalEcho // do not rely on ts for local echo, take it - || event.originServerTs ?: 0 >= existingSummary.lastEditTs - ) { - Timber.v("###REPLACE Computing aggregated edit summary (isLocalEcho:$isLocalEcho)") - if (!isLocalEcho) { - // Do not take local echo originServerTs here, could mess up ordering (keep old ts) - existingSummary.lastEditTs = event.originServerTs ?: System.currentTimeMillis() - } - existingSummary.aggregatedContent = ContentMapper.map(newContent) - if (isLocalEcho) { - existingSummary.sourceLocalEchoEvents.add(eventId) - } else { - existingSummary.sourceEvents.add(eventId) + existingSummary.editions.firstOrNull { it.eventId == txId }?.let { + it.eventId = event.eventId + it.timestamp = event.originServerTs ?: System.currentTimeMillis() + it.isLocalEcho = false } } else { - // ignore this event for the summary (back paginate) - if (!isLocalEcho) { - existingSummary.sourceEvents.add(eventId) - } - Timber.v("###REPLACE ignoring event for summary, it's to old $eventId") + Timber.v("###REPLACE Computing aggregated edit summary (isLocalEcho:$isLocalEcho)") + existingSummary.editions.add( + EditionOfEvent( + senderId = event.senderId ?: "", + eventId = event.eventId, + content = ContentMapper.map(newContent), + timestamp = if (isLocalEcho) { + System.currentTimeMillis() + } else { + // Do not take local echo originServerTs here, could mess up ordering (keep old ts) + event.originServerTs ?: System.currentTimeMillis() + }, + isLocalEcho = isLocalEcho + ) + ) } } } @@ -448,29 +448,13 @@ internal class EventRelationsAggregationProcessor @Inject constructor(@UserId pr Timber.w("Redaction of a replace targeting an unknown event $relatedEventId") return } - val sourceEvents = eventSummary.editSummary?.sourceEvents - val sourceToDiscard = sourceEvents?.indexOf(redacted.eventId) + val sourceToDiscard = eventSummary.editSummary?.editions?.firstOrNull {it.eventId == redacted.eventId } if (sourceToDiscard == null) { Timber.w("Redaction of a replace that was not known in aggregation $sourceToDiscard") return } - // Need to remove this event from the redaction list and compute new aggregation state - sourceEvents.removeAt(sourceToDiscard) - val previousEdit = sourceEvents.mapNotNull { EventEntity.where(realm, it).findFirst() }.sortedBy { it.originServerTs }.lastOrNull() - if (previousEdit == null) { - // revert to original - eventSummary.editSummary?.deleteFromRealm() - } else { - // I have the last event - ContentMapper.map(previousEdit.content)?.toModel()?.newContent?.let { newContent -> - eventSummary.editSummary?.lastEditTs = previousEdit.originServerTs - ?: System.currentTimeMillis() - eventSummary.editSummary?.aggregatedContent = ContentMapper.map(newContent) - } ?: run { - Timber.e("Failed to udate edited summary") - // TODO how to reccover that - } - } + // Need to remove this event from the edition list + sourceToDiscard.deleteFromRealm() } private fun handleReactionRedact(eventToPrune: EventEntity, realm: Realm, userId: String) { From bda776e2010c8d64c16db9c12f44f2a0d785016e Mon Sep 17 00:00:00 2001 From: sx0d Date: Tue, 2 Mar 2021 06:07:54 +0000 Subject: [PATCH 124/578] Added translation using Weblate (Uzbek) --- vector/src/main/res/values-uz/strings.xml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 vector/src/main/res/values-uz/strings.xml diff --git a/vector/src/main/res/values-uz/strings.xml b/vector/src/main/res/values-uz/strings.xml new file mode 100644 index 0000000000..a6b3daec93 --- /dev/null +++ b/vector/src/main/res/values-uz/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file From 5f29668c272679517970e0c1004004f4c3a25c44 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Mar 2021 06:57:55 +0000 Subject: [PATCH 125/578] Bump epoxy_version from 4.4.1 to 4.4.2 Bumps `epoxy_version` from 4.4.1 to 4.4.2. Updates `epoxy` from 4.4.1 to 4.4.2 - [Release notes](https://github.com/airbnb/epoxy/releases) - [Changelog](https://github.com/airbnb/epoxy/blob/master/CHANGELOG.md) - [Commits](https://github.com/airbnb/epoxy/commits) Updates `epoxy-glide-preloading` from 4.4.1 to 4.4.2 - [Release notes](https://github.com/airbnb/epoxy/releases) - [Changelog](https://github.com/airbnb/epoxy/blob/master/CHANGELOG.md) - [Commits](https://github.com/airbnb/epoxy/commits) Updates `epoxy-processor` from 4.4.1 to 4.4.2 - [Release notes](https://github.com/airbnb/epoxy/releases) - [Changelog](https://github.com/airbnb/epoxy/blob/master/CHANGELOG.md) - [Commits](https://github.com/airbnb/epoxy/commits) Updates `epoxy-paging` from 4.4.1 to 4.4.2 - [Release notes](https://github.com/airbnb/epoxy/releases) - [Changelog](https://github.com/airbnb/epoxy/blob/master/CHANGELOG.md) - [Commits](https://github.com/airbnb/epoxy/commits) Signed-off-by: dependabot[bot] --- vector/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vector/build.gradle b/vector/build.gradle index 51b848137b..391676058e 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -287,7 +287,7 @@ android { dependencies { - def epoxy_version = '4.4.1' + def epoxy_version = '4.4.2' def fragment_version = '1.3.0' def arrow_version = "0.8.2" def markwon_version = '4.1.2' From 8c8771601346a73ffe8ced8b84a28968c4385060 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Mar 2021 06:59:54 +0000 Subject: [PATCH 126/578] Bump libphonenumber from 8.12.18 to 8.12.19 Bumps [libphonenumber](https://github.com/google/libphonenumber) from 8.12.18 to 8.12.19. - [Release notes](https://github.com/google/libphonenumber/releases) - [Changelog](https://github.com/google/libphonenumber/blob/master/making-metadata-changes.md) - [Commits](https://github.com/google/libphonenumber/compare/v8.12.18...v8.12.19) Signed-off-by: dependabot[bot] --- matrix-sdk-android/build.gradle | 2 +- vector/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/matrix-sdk-android/build.gradle b/matrix-sdk-android/build.gradle index 12aca0b6d1..c9918cceaf 100644 --- a/matrix-sdk-android/build.gradle +++ b/matrix-sdk-android/build.gradle @@ -166,7 +166,7 @@ dependencies { implementation 'com.facebook.stetho:stetho-okhttp3:1.5.1' // Phone number https://github.com/google/libphonenumber - implementation 'com.googlecode.libphonenumber:libphonenumber:8.12.18' + implementation 'com.googlecode.libphonenumber:libphonenumber:8.12.19' testImplementation 'junit:junit:4.13.2' testImplementation 'org.robolectric:robolectric:4.5.1' diff --git a/vector/build.gradle b/vector/build.gradle index 51b848137b..22183336a1 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -339,7 +339,7 @@ dependencies { implementation 'com.facebook.stetho:stetho:1.5.1' // Phone number https://github.com/google/libphonenumber - implementation 'com.googlecode.libphonenumber:libphonenumber:8.12.18' + implementation 'com.googlecode.libphonenumber:libphonenumber:8.12.19' // rx implementation 'io.reactivex.rxjava2:rxkotlin:2.4.0' From fc468564dcb22115b6b1bb5d879ee77fbb164292 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 2 Mar 2021 10:46:11 +0100 Subject: [PATCH 127/578] Extract state from view model --- .../edithistory/ViewEditHistoryViewModel.kt | 16 +-------- .../edithistory/ViewEditHistoryViewState.kt | 33 +++++++++++++++++++ 2 files changed, 34 insertions(+), 15 deletions(-) create mode 100644 vector/src/main/java/im/vector/app/features/home/room/detail/timeline/edithistory/ViewEditHistoryViewState.kt diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/edithistory/ViewEditHistoryViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/edithistory/ViewEditHistoryViewModel.kt index fff1c8a0ff..02fb8c66f2 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/edithistory/ViewEditHistoryViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/edithistory/ViewEditHistoryViewModel.kt @@ -15,23 +15,19 @@ */ package im.vector.app.features.home.room.detail.timeline.edithistory -import com.airbnb.mvrx.Async import com.airbnb.mvrx.Fail import com.airbnb.mvrx.FragmentViewModelContext import com.airbnb.mvrx.Loading -import com.airbnb.mvrx.MvRxState import com.airbnb.mvrx.MvRxViewModelFactory import com.airbnb.mvrx.Success -import com.airbnb.mvrx.Uninitialized import com.airbnb.mvrx.ViewModelContext import dagger.assisted.Assisted -import dagger.assisted.AssistedInject import dagger.assisted.AssistedFactory +import dagger.assisted.AssistedInject import im.vector.app.core.date.VectorDateFormatter import im.vector.app.core.platform.EmptyAction import im.vector.app.core.platform.EmptyViewEvents import im.vector.app.core.platform.VectorViewModel -import im.vector.app.features.home.room.detail.timeline.action.TimelineEventFragmentArgs import org.matrix.android.sdk.api.MatrixCallback import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.crypto.MXCryptoError @@ -41,16 +37,6 @@ import org.matrix.android.sdk.internal.crypto.algorithms.olm.OlmDecryptionResult import timber.log.Timber import java.util.UUID -data class ViewEditHistoryViewState( - val eventId: String, - val roomId: String, - val isOriginalAReply: Boolean = false, - val editList: Async> = Uninitialized) - : MvRxState { - - constructor(args: TimelineEventFragmentArgs) : this(roomId = args.roomId, eventId = args.eventId) -} - class ViewEditHistoryViewModel @AssistedInject constructor(@Assisted initialState: ViewEditHistoryViewState, val session: Session, diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/edithistory/ViewEditHistoryViewState.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/edithistory/ViewEditHistoryViewState.kt new file mode 100644 index 0000000000..62f08eef7f --- /dev/null +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/edithistory/ViewEditHistoryViewState.kt @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 New Vector Ltd + * + * 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. + */ + +package im.vector.app.features.home.room.detail.timeline.edithistory + +import com.airbnb.mvrx.Async +import com.airbnb.mvrx.MvRxState +import com.airbnb.mvrx.Uninitialized +import im.vector.app.features.home.room.detail.timeline.action.TimelineEventFragmentArgs +import org.matrix.android.sdk.api.session.events.model.Event + +data class ViewEditHistoryViewState( + val eventId: String, + val roomId: String, + val isOriginalAReply: Boolean = false, + val editList: Async> = Uninitialized) + : MvRxState { + + constructor(args: TimelineEventFragmentArgs) : this(roomId = args.roomId, eventId = args.eventId) +} From d2b39e5cb86ac29bb87c559273d9e73cdebd2b69 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 2 Mar 2021 10:52:03 +0100 Subject: [PATCH 128/578] Convert RelationService to suspend (#2449) --- .../room/model/relation/RelationService.kt | 2 +- .../room/relation/DefaultRelationService.kt | 9 +-- .../edithistory/ViewEditHistoryViewModel.kt | 70 ++++++++++--------- 3 files changed, 39 insertions(+), 42 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/relation/RelationService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/relation/RelationService.kt index 49aa95924c..4638dd204a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/relation/RelationService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/relation/RelationService.kt @@ -93,7 +93,7 @@ interface RelationService { /** * Get the edit history of the given event */ - fun fetchEditHistory(eventId: String, callback: MatrixCallback>) + suspend fun fetchEditHistory(eventId: String): List /** * Reply to an event in the timeline (must be in same room) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/DefaultRelationService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/DefaultRelationService.kt index bbcad3a4fe..da0cf45946 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/DefaultRelationService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/DefaultRelationService.kt @@ -140,13 +140,8 @@ internal class DefaultRelationService @AssistedInject constructor( return eventSenderProcessor.postEvent(event, cryptoSessionInfoProvider.isRoomEncrypted(roomId)) } - override fun fetchEditHistory(eventId: String, callback: MatrixCallback>) { - val params = FetchEditHistoryTask.Params(roomId, eventId) - fetchEditHistoryTask - .configureWith(params) { - this.callback = callback - } - .executeBy(taskExecutor) + override suspend fun fetchEditHistory(eventId: String): List { + return fetchEditHistoryTask.execute(FetchEditHistoryTask.Params(roomId, eventId)) } override fun replyToMessage(eventReplied: TimelineEvent, replyText: CharSequence, autoMarkdown: Boolean): Cancelable? { diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/edithistory/ViewEditHistoryViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/edithistory/ViewEditHistoryViewModel.kt index 02fb8c66f2..061743e163 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/edithistory/ViewEditHistoryViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/edithistory/ViewEditHistoryViewModel.kt @@ -15,6 +15,7 @@ */ package im.vector.app.features.home.room.detail.timeline.edithistory +import androidx.lifecycle.viewModelScope import com.airbnb.mvrx.Fail import com.airbnb.mvrx.FragmentViewModelContext import com.airbnb.mvrx.Loading @@ -28,10 +29,9 @@ import im.vector.app.core.date.VectorDateFormatter import im.vector.app.core.platform.EmptyAction import im.vector.app.core.platform.EmptyViewEvents import im.vector.app.core.platform.VectorViewModel -import org.matrix.android.sdk.api.MatrixCallback +import kotlinx.coroutines.launch import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.crypto.MXCryptoError -import org.matrix.android.sdk.api.session.events.model.Event import org.matrix.android.sdk.api.session.events.model.isReply import org.matrix.android.sdk.internal.crypto.algorithms.olm.OlmDecryptionResult import timber.log.Timber @@ -68,48 +68,50 @@ class ViewEditHistoryViewModel @AssistedInject constructor(@Assisted private fun loadHistory() { setState { copy(editList = Loading()) } - room.fetchEditHistory(eventId, object : MatrixCallback> { - override fun onFailure(failure: Throwable) { + + viewModelScope.launch { + val data = try { + room.fetchEditHistory(eventId) + } catch (failure: Throwable) { setState { copy(editList = Fail(failure)) } + return@launch } - override fun onSuccess(data: List) { - var originalIsReply = false + var originalIsReply = false - val events = data.map { event -> - val timelineID = event.roomId + UUID.randomUUID().toString() - event.also { - // We need to check encryption - if (it.isEncrypted() && it.mxDecryptionResult == null) { - // for now decrypt sync - try { - val result = session.cryptoService().decryptEvent(it, timelineID) - it.mxDecryptionResult = OlmDecryptionResult( - payload = result.clearEvent, - senderKey = result.senderCurve25519Key, - keysClaimed = result.claimedEd25519Key?.let { k -> mapOf("ed25519" to k) }, - forwardingCurve25519KeyChain = result.forwardingCurve25519KeyChain - ) - } catch (e: MXCryptoError) { - Timber.w("Failed to decrypt event in history") - } - } - - if (event.eventId == it.eventId) { - originalIsReply = it.isReply() + val events = data.map { event -> + val timelineID = event.roomId + UUID.randomUUID().toString() + event.also { + // We need to check encryption + if (it.isEncrypted() && it.mxDecryptionResult == null) { + // for now decrypt sync + try { + val result = session.cryptoService().decryptEvent(it, timelineID) + it.mxDecryptionResult = OlmDecryptionResult( + payload = result.clearEvent, + senderKey = result.senderCurve25519Key, + keysClaimed = result.claimedEd25519Key?.let { k -> mapOf("ed25519" to k) }, + forwardingCurve25519KeyChain = result.forwardingCurve25519KeyChain + ) + } catch (e: MXCryptoError) { + Timber.w("Failed to decrypt event in history") } } - } - setState { - copy( - editList = Success(events), - isOriginalAReply = originalIsReply - ) + + if (event.eventId == it.eventId) { + originalIsReply = it.isReply() + } } } - }) + setState { + copy( + editList = Success(events), + isOriginalAReply = originalIsReply + ) + } + } } override fun handle(action: EmptyAction) { From 7c0acc8ccf3e63ad43cff6477de69a28505c53d1 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 2 Mar 2021 10:54:37 +0100 Subject: [PATCH 129/578] Simplify code --- .../edithistory/ViewEditHistoryViewModel.kt | 34 +++++++++---------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/edithistory/ViewEditHistoryViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/edithistory/ViewEditHistoryViewModel.kt index 061743e163..1307341446 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/edithistory/ViewEditHistoryViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/edithistory/ViewEditHistoryViewModel.kt @@ -83,26 +83,24 @@ class ViewEditHistoryViewModel @AssistedInject constructor(@Assisted val events = data.map { event -> val timelineID = event.roomId + UUID.randomUUID().toString() - event.also { - // We need to check encryption - if (it.isEncrypted() && it.mxDecryptionResult == null) { - // for now decrypt sync - try { - val result = session.cryptoService().decryptEvent(it, timelineID) - it.mxDecryptionResult = OlmDecryptionResult( - payload = result.clearEvent, - senderKey = result.senderCurve25519Key, - keysClaimed = result.claimedEd25519Key?.let { k -> mapOf("ed25519" to k) }, - forwardingCurve25519KeyChain = result.forwardingCurve25519KeyChain - ) - } catch (e: MXCryptoError) { - Timber.w("Failed to decrypt event in history") - } + // We need to check encryption + if (event.isEncrypted() && event.mxDecryptionResult == null) { + // for now decrypt sync + try { + val result = session.cryptoService().decryptEvent(event, timelineID) + event.mxDecryptionResult = OlmDecryptionResult( + payload = result.clearEvent, + senderKey = result.senderCurve25519Key, + keysClaimed = result.claimedEd25519Key?.let { k -> mapOf("ed25519" to k) }, + forwardingCurve25519KeyChain = result.forwardingCurve25519KeyChain + ) + } catch (e: MXCryptoError) { + Timber.w("Failed to decrypt event in history") } + } - if (event.eventId == it.eventId) { - originalIsReply = it.isReply() - } + if (event.eventId == event.eventId) { + originalIsReply = event.isReply() } } setState { From 237545622fe1952b1aaeedd979cca649e103f43d Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 2 Mar 2021 10:55:22 +0100 Subject: [PATCH 130/578] Fix a bug I can see thanks to rework --- .../detail/timeline/edithistory/ViewEditHistoryViewModel.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/edithistory/ViewEditHistoryViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/edithistory/ViewEditHistoryViewModel.kt index 1307341446..3ce4a44812 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/edithistory/ViewEditHistoryViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/edithistory/ViewEditHistoryViewModel.kt @@ -99,7 +99,7 @@ class ViewEditHistoryViewModel @AssistedInject constructor(@Assisted } } - if (event.eventId == event.eventId) { + if (event.eventId == eventId) { originalIsReply = event.isReply() } } From f5fad8a0828e4491ce479e228b14622435d4aa55 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 2 Mar 2021 11:00:29 +0100 Subject: [PATCH 131/578] Make it compiles --- .../detail/timeline/edithistory/ViewEditHistoryViewModel.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/edithistory/ViewEditHistoryViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/edithistory/ViewEditHistoryViewModel.kt index 3ce4a44812..af814f5856 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/edithistory/ViewEditHistoryViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/edithistory/ViewEditHistoryViewModel.kt @@ -81,7 +81,7 @@ class ViewEditHistoryViewModel @AssistedInject constructor(@Assisted var originalIsReply = false - val events = data.map { event -> + data.forEach { event -> val timelineID = event.roomId + UUID.randomUUID().toString() // We need to check encryption if (event.isEncrypted() && event.mxDecryptionResult == null) { @@ -105,7 +105,7 @@ class ViewEditHistoryViewModel @AssistedInject constructor(@Assisted } setState { copy( - editList = Success(events), + editList = Success(data), isOriginalAReply = originalIsReply ) } From c33af6de6a9f1adda23cfbf33cadc177a96d0265 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 2 Mar 2021 11:11:28 +0100 Subject: [PATCH 132/578] Do not show edition from other users --- .../api/session/room/model/relation/RelationService.kt | 3 +++ .../session/room/relation/FetchEditHistoryTask.kt | 9 ++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/relation/RelationService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/relation/RelationService.kt index 4638dd204a..b83391fa06 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/relation/RelationService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/relation/RelationService.kt @@ -92,6 +92,9 @@ interface RelationService { /** * Get the edit history of the given event + * The return list will contain the original event and all the editions of this event, done by the + * same sender, sorted in the reverse order (so the original event is the latest element, and the + * latest edition is the first element of the list) */ suspend fun fetchEditHistory(eventId: String): List diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/FetchEditHistoryTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/FetchEditHistoryTask.kt index 854585ca29..f1c8fd49a4 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/FetchEditHistoryTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/FetchEditHistoryTask.kt @@ -49,8 +49,11 @@ internal class DefaultFetchEditHistoryTask @Inject constructor( ) } - val events = response.chunks.toMutableList() - response.originalEvent?.let { events.add(it) } - return events + // Filter out edition form other users + val originalSenderId = response.originalEvent?.senderId + val events = response.chunks.filter { + it.senderId == originalSenderId + } + return events + listOfNotNull(response.originalEvent) } } From 95395945f21397bef9bba407a1b2a3f79eb0e3b2 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 2 Mar 2021 11:18:06 +0100 Subject: [PATCH 133/578] Also filter redacted events --- .../session/room/relation/FetchEditHistoryTask.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/FetchEditHistoryTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/FetchEditHistoryTask.kt index f1c8fd49a4..f9fd5f9348 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/FetchEditHistoryTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/FetchEditHistoryTask.kt @@ -49,11 +49,11 @@ internal class DefaultFetchEditHistoryTask @Inject constructor( ) } - // Filter out edition form other users + // Filter out edition form other users, and redacted editions val originalSenderId = response.originalEvent?.senderId - val events = response.chunks.filter { - it.senderId == originalSenderId - } + val events = response.chunks + .filter { it.senderId == originalSenderId } + .filter { !it.isRedacted() } return events + listOfNotNull(response.originalEvent) } } From 5d69a1ab919457fe0e4e8358720de2d38807cb2f Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 2 Mar 2021 11:30:30 +0100 Subject: [PATCH 134/578] Fix a last bug when all editions has been deleted --- .../mapper/EventAnnotationsSummaryMapper.kt | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/EventAnnotationsSummaryMapper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/EventAnnotationsSummaryMapper.kt index f4d3d74150..08d98ce3b8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/EventAnnotationsSummaryMapper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/EventAnnotationsSummaryMapper.kt @@ -36,17 +36,18 @@ internal object EventAnnotationsSummaryMapper { it.sourceLocalEcho.toList() ) }, - editSummary = annotationsSummary.editSummary?.let { - val latestEdition = it.editions.maxByOrNull { editionOfEvent -> editionOfEvent.timestamp } - EditAggregatedSummary( - ContentMapper.map(latestEdition?.content), - it.editions.filter { editionOfEvent -> !editionOfEvent.isLocalEcho } - .map { editionOfEvent -> editionOfEvent.eventId }, - it.editions.filter { editionOfEvent -> editionOfEvent.isLocalEcho } - .map { editionOfEvent -> editionOfEvent.eventId }, - latestEdition?.timestamp ?: 0L - ) - }, + editSummary = annotationsSummary.editSummary + ?.let { + val latestEdition = it.editions.maxByOrNull { editionOfEvent -> editionOfEvent.timestamp } ?: return@let null + EditAggregatedSummary( + aggregatedContent = ContentMapper.map(latestEdition.content), + sourceEvents = it.editions.filter { editionOfEvent -> !editionOfEvent.isLocalEcho } + .map { editionOfEvent -> editionOfEvent.eventId }, + localEchos = it.editions.filter { editionOfEvent -> editionOfEvent.isLocalEcho } + .map { editionOfEvent -> editionOfEvent.eventId }, + lastEditTs = latestEdition.timestamp + ) + }, referencesAggregatedSummary = annotationsSummary.referencesSummaryEntity?.let { ReferencesAggregatedSummary( it.eventId, From a8ba125bd2ad7f78483df16107ec063dc8d18db1 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 2 Mar 2021 11:37:13 +0100 Subject: [PATCH 135/578] Rename val for code clarity, and use facility --- .../sdk/api/session/room/model/EditAggregatedSummary.kt | 2 +- .../sdk/api/session/room/timeline/TimelineEvent.kt | 3 +-- .../database/mapper/EventAnnotationsSummaryMapper.kt | 2 +- .../app/features/home/room/detail/RoomDetailViewModel.kt | 9 +++------ .../detail/timeline/action/MessageActionsViewModel.kt | 3 +-- 5 files changed, 7 insertions(+), 12 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/EditAggregatedSummary.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/EditAggregatedSummary.kt index 10fb81dc7f..67bab626cb 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/EditAggregatedSummary.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/EditAggregatedSummary.kt @@ -18,7 +18,7 @@ package org.matrix.android.sdk.api.session.room.model import org.matrix.android.sdk.api.session.events.model.Content data class EditAggregatedSummary( - val aggregatedContent: Content? = null, + val latestContent: Content? = null, // The list of the eventIDs used to build the summary (might be out of sync if chunked received from message chunk) val sourceEvents: List, val localEchos: List, diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/timeline/TimelineEvent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/timeline/TimelineEvent.kt index 53f0e5a8d3..7010a80233 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/timeline/TimelineEvent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/timeline/TimelineEvent.kt @@ -123,8 +123,7 @@ fun TimelineEvent.getLastMessageContent(): MessageContent? { return if (root.getClearType() == EventType.STICKER) { root.getClearContent().toModel() } else { - annotations?.editSummary?.aggregatedContent?.toModel() - ?: root.getClearContent().toModel() + (annotations?.editSummary?.latestContent ?: root.getClearContent()).toModel() } } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/EventAnnotationsSummaryMapper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/EventAnnotationsSummaryMapper.kt index 08d98ce3b8..4a26b4c4bf 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/EventAnnotationsSummaryMapper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/EventAnnotationsSummaryMapper.kt @@ -40,7 +40,7 @@ internal object EventAnnotationsSummaryMapper { ?.let { val latestEdition = it.editions.maxByOrNull { editionOfEvent -> editionOfEvent.timestamp } ?: return@let null EditAggregatedSummary( - aggregatedContent = ContentMapper.map(latestEdition.content), + latestContent = ContentMapper.map(latestEdition.content), sourceEvents = it.editions.filter { editionOfEvent -> !editionOfEvent.isLocalEcho } .map { editionOfEvent -> editionOfEvent.eventId }, localEchos = it.editions.filter { editionOfEvent -> editionOfEvent.isLocalEcho } diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt index 601891b15a..bb700bcb0d 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt @@ -89,6 +89,7 @@ import org.matrix.android.sdk.api.session.room.read.ReadService import org.matrix.android.sdk.api.session.room.send.UserDraft import org.matrix.android.sdk.api.session.room.timeline.Timeline import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent +import org.matrix.android.sdk.api.session.room.timeline.getLastMessageContent import org.matrix.android.sdk.api.session.room.timeline.getRelationContent import org.matrix.android.sdk.api.session.room.timeline.getTextEditableContent import org.matrix.android.sdk.api.session.widgets.model.Widget @@ -785,9 +786,7 @@ class RoomDetailViewModel @AssistedInject constructor( room.editReply(state.sendMode.timelineEvent, it, action.text.toString()) } } else { - val messageContent: MessageContent? = - state.sendMode.timelineEvent.annotations?.editSummary?.aggregatedContent.toModel() - ?: state.sendMode.timelineEvent.root.getClearContent().toModel() + val messageContent = state.sendMode.timelineEvent.getLastMessageContent() val existingBody = messageContent?.body ?: "" if (existingBody != action.text) { room.editTextMessage(state.sendMode.timelineEvent.root.eventId ?: "", @@ -802,9 +801,7 @@ class RoomDetailViewModel @AssistedInject constructor( popDraft() } is SendMode.QUOTE -> { - val messageContent: MessageContent? = - state.sendMode.timelineEvent.annotations?.editSummary?.aggregatedContent.toModel() - ?: state.sendMode.timelineEvent.root.getClearContent().toModel() + val messageContent = state.sendMode.timelineEvent.getLastMessageContent() val textMsg = messageContent?.body val finalText = legacyRiotQuoteText(textMsg, action.text.toString()) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/action/MessageActionsViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/action/MessageActionsViewModel.kt index 1697d9250e..363899c4f9 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/action/MessageActionsViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/action/MessageActionsViewModel.kt @@ -229,8 +229,7 @@ class MessageActionsViewModel @AssistedInject constructor(@Assisted } private fun actionsForEvent(timelineEvent: TimelineEvent, actionPermissions: ActionPermissions): List { - val messageContent: MessageContent? = timelineEvent.annotations?.editSummary?.aggregatedContent.toModel() - ?: timelineEvent.root.getClearContent().toModel() + val messageContent = timelineEvent.getLastMessageContent() val msgType = messageContent?.msgType return arrayListOf().apply { From 161804be0d33010566a8294cd454536b6d7e90ec Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Mar 2021 10:39:41 +0000 Subject: [PATCH 136/578] Bump big_image_viewer_version from 1.7.0 to 1.7.1 Bumps `big_image_viewer_version` from 1.7.0 to 1.7.1. Updates `BigImageViewer` from 1.7.0 to 1.7.1 - [Release notes](https://github.com/Piasy/BigImageViewer/releases) - [Changelog](https://github.com/Piasy/BigImageViewer/blob/master/CHANGELOG.md) - [Commits](https://github.com/Piasy/BigImageViewer/compare/1.7.0...v1.7.1) Updates `GlideImageLoader` from 1.7.0 to 1.7.1 - [Release notes](https://github.com/Piasy/BigImageViewer/releases) - [Changelog](https://github.com/Piasy/BigImageViewer/blob/master/CHANGELOG.md) - [Commits](https://github.com/Piasy/BigImageViewer/compare/1.7.0...v1.7.1) Updates `ProgressPieIndicator` from 1.7.0 to 1.7.1 - [Release notes](https://github.com/Piasy/BigImageViewer/releases) - [Changelog](https://github.com/Piasy/BigImageViewer/blob/master/CHANGELOG.md) - [Commits](https://github.com/Piasy/BigImageViewer/compare/1.7.0...v1.7.1) Updates `GlideImageViewFactory` from 1.7.0 to 1.7.1 - [Release notes](https://github.com/Piasy/BigImageViewer/releases) - [Changelog](https://github.com/Piasy/BigImageViewer/blob/master/CHANGELOG.md) - [Commits](https://github.com/Piasy/BigImageViewer/compare/1.7.0...v1.7.1) Signed-off-by: dependabot[bot] --- vector/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vector/build.gradle b/vector/build.gradle index 391676058e..305c286e4d 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -291,7 +291,7 @@ dependencies { def fragment_version = '1.3.0' def arrow_version = "0.8.2" def markwon_version = '4.1.2' - def big_image_viewer_version = '1.7.0' + def big_image_viewer_version = '1.7.1' def glide_version = '4.12.0' def moshi_version = '1.11.0' def daggerVersion = '2.33' From b027e43615d4bbbd46333e844256156e98532a14 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 2 Mar 2021 11:41:20 +0100 Subject: [PATCH 137/578] Cleanup --- .../sdk/api/session/room/model/relation/RelationService.kt | 1 - .../sdk/internal/crypto/verification/VerificationStateExt.kt | 1 - .../android/sdk/internal/database/RealmSessionStoreMigration.kt | 1 - .../internal/session/room/EventRelationsAggregationProcessor.kt | 2 +- .../vector/app/features/home/room/detail/RoomDetailViewModel.kt | 1 - 5 files changed, 1 insertion(+), 5 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/relation/RelationService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/relation/RelationService.kt index b83391fa06..2c0e378efb 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/relation/RelationService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/relation/RelationService.kt @@ -16,7 +16,6 @@ package org.matrix.android.sdk.api.session.room.model.relation import androidx.lifecycle.LiveData -import org.matrix.android.sdk.api.MatrixCallback import org.matrix.android.sdk.api.session.events.model.Event import org.matrix.android.sdk.api.session.room.model.EventAnnotationsSummary import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationStateExt.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationStateExt.kt index b5fba0d54c..0617f32c24 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationStateExt.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationStateExt.kt @@ -33,4 +33,3 @@ internal fun VerificationState?.toState(newState: VerificationState): Verificati } return newState } - diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmSessionStoreMigration.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmSessionStoreMigration.kt index 820588b1ab..c7fe7ab447 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmSessionStoreMigration.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmSessionStoreMigration.kt @@ -142,7 +142,6 @@ class RealmSessionStoreMigration @Inject constructor() : RealmMigration { .addField(EditionOfEventFields.TIMESTAMP, Long::class.java) .addField(EditionOfEventFields.IS_LOCAL_ECHO, Boolean::class.java) - realm.schema.get("EditAggregatedSummaryEntity") ?.removeField("aggregatedContent") ?.removeField("sourceEvents") diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/EventRelationsAggregationProcessor.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/EventRelationsAggregationProcessor.kt index 8269643d39..60440c6359 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/EventRelationsAggregationProcessor.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/EventRelationsAggregationProcessor.kt @@ -448,7 +448,7 @@ internal class EventRelationsAggregationProcessor @Inject constructor(@UserId pr Timber.w("Redaction of a replace targeting an unknown event $relatedEventId") return } - val sourceToDiscard = eventSummary.editSummary?.editions?.firstOrNull {it.eventId == redacted.eventId } + val sourceToDiscard = eventSummary.editSummary?.editions?.firstOrNull { it.eventId == redacted.eventId } if (sourceToDiscard == null) { Timber.w("Redaction of a replace that was not known in aggregation $sourceToDiscard") return diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt index bb700bcb0d..4247ffdd54 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt @@ -79,7 +79,6 @@ import org.matrix.android.sdk.api.session.room.model.Membership import org.matrix.android.sdk.api.session.room.model.PowerLevelsContent import org.matrix.android.sdk.api.session.room.model.RoomMemberSummary import org.matrix.android.sdk.api.session.room.model.RoomSummary -import org.matrix.android.sdk.api.session.room.model.message.MessageContent import org.matrix.android.sdk.api.session.room.model.message.MessageType import org.matrix.android.sdk.api.session.room.model.message.OptionItem import org.matrix.android.sdk.api.session.room.model.message.getFileUrl From 33b3f0650caf6ebf5b8858d63ece83b59e491ff2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20H=C3=A4ger?= Date: Tue, 2 Mar 2021 01:50:25 +0100 Subject: [PATCH 138/578] Permit cleartext for .onion addresses MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Tor and Onion service protocols provide encryption and authentication respectively. Since Domain Validation certificates aren't currently being issued for .onion addresses, the HTTPS requirement makes Element practically incompatible with homeservers operated by individuals on Tor. Signed-off-by: Martin Häger --- CHANGES.md | 1 + vector/src/main/res/xml/network_security_config.xml | 2 ++ 2 files changed, 3 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 5125d158ec..8ec0b79bfe 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -5,6 +5,7 @@ Features ✨: - Improvements 🙌: + - Allow non-HTTPS connections to homeservers on Tor (#2941) - Fetch homeserver type and version and display in a new setting screen and add info in rageshakes (#2831) - Improve initial sync performance (#983) - PIP support for Jitsi call (#2418) diff --git a/vector/src/main/res/xml/network_security_config.xml b/vector/src/main/res/xml/network_security_config.xml index 1f323dffd1..4bf79f16ba 100644 --- a/vector/src/main/res/xml/network_security_config.xml +++ b/vector/src/main/res/xml/network_security_config.xml @@ -11,6 +11,8 @@ 127.0.0.1 10.0.2.2 + + onion From 3357c78375dbda42dc20ebec03a3b92a88fb9826 Mon Sep 17 00:00:00 2001 From: Kafji Date: Tue, 2 Mar 2021 18:54:00 +0700 Subject: [PATCH 139/578] Add tooltip for room quick actions Add tooltip for low priority, favorite, and room settings quick actions. Signed-off-by: Kafji --- CHANGES.md | 1 + .../bottomsheet/BottomSheetRoomPreviewItem.kt | 28 ++++++++++++++----- vector/src/main/res/values/strings.xml | 2 ++ 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 5125d158ec..79bd629fcb 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -8,6 +8,7 @@ Improvements 🙌: - Fetch homeserver type and version and display in a new setting screen and add info in rageshakes (#2831) - Improve initial sync performance (#983) - PIP support for Jitsi call (#2418) + - Add tooltip for room quick actions Bugfix 🐛: - Try to fix crash about UrlPreview (#2640) diff --git a/vector/src/main/java/im/vector/app/core/epoxy/bottomsheet/BottomSheetRoomPreviewItem.kt b/vector/src/main/java/im/vector/app/core/epoxy/bottomsheet/BottomSheetRoomPreviewItem.kt index 1c80e6a85c..819669c8f4 100644 --- a/vector/src/main/java/im/vector/app/core/epoxy/bottomsheet/BottomSheetRoomPreviewItem.kt +++ b/vector/src/main/java/im/vector/app/core/epoxy/bottomsheet/BottomSheetRoomPreviewItem.kt @@ -20,6 +20,7 @@ import android.content.res.ColorStateList import android.view.View import android.widget.ImageView import android.widget.TextView +import androidx.appcompat.widget.TooltipCompat import androidx.core.content.ContextCompat import androidx.core.widget.ImageViewCompat import com.airbnb.epoxy.EpoxyAttribute @@ -78,33 +79,46 @@ abstract class BottomSheetRoomPreviewItem : VectorEpoxyModel"Add to low priority" "Remove from low priority" "Leave the room" + "Room settings" + "%1$s made no changes" "You made no changes" Sends the given message as a spoiler From 4e2e73637a45a0be0f0921a8bfb48a763cb5f61b Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 2 Mar 2021 16:14:57 +0100 Subject: [PATCH 140/578] Be robust if Event.type is missing (#2946) --- CHANGES.md | 1 + .../android/sdk/api/session/events/model/Event.kt | 4 ++-- .../android/sdk/api/session/events/model/EventType.kt | 2 ++ .../sdk/internal/crypto/tasks/EncryptEventTask.kt | 2 +- .../sdk/internal/crypto/tasks/SendEventTask.kt | 2 +- .../crypto/tasks/SendVerificationMessageTask.kt | 2 +- .../sdk/internal/database/mapper/EventMapper.kt | 11 ++++++----- .../session/room/membership/LoadRoomMembersTask.kt | 9 +++++++-- .../session/room/relation/SendRelationWorker.kt | 2 +- .../internal/session/room/send/LocalEchoRepository.kt | 8 ++++---- .../sdk/internal/session/sync/RoomSyncHandler.kt | 10 +++++----- .../app/features/devtools/RoomStateListController.kt | 2 +- .../features/notifications/NotifiableEventResolver.kt | 2 +- 13 files changed, 33 insertions(+), 24 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 5125d158ec..146db2c5d8 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -11,6 +11,7 @@ Improvements 🙌: Bugfix 🐛: - Try to fix crash about UrlPreview (#2640) + - Be robust if Event.type is missing (#2946) Translations 🗣: - diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/Event.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/Event.kt index 8f9f409b74..a208b15364 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/Event.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/Event.kt @@ -66,7 +66,7 @@ inline fun T.toContent(): Content { */ @JsonClass(generateAdapter = true) data class Event( - @Json(name = "type") val type: String, + @Json(name = "type") val type: String? = null, @Json(name = "event_id") val eventId: String? = null, @Json(name = "content") val content: Content? = null, @Json(name = "prev_content") val prevContent: Content? = null, @@ -135,7 +135,7 @@ data class Event( * @return the event type */ fun getClearType(): String { - return mxDecryptionResult?.payload?.get("type")?.toString() ?: type + return mxDecryptionResult?.payload?.get("type")?.toString() ?: type ?: EventType.MISSING_TYPE } /** diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/EventType.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/EventType.kt index d79117ad87..905e18b8e8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/EventType.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/EventType.kt @@ -20,6 +20,8 @@ package org.matrix.android.sdk.api.session.events.model * Constants defining known event types from Matrix specifications. */ object EventType { + // Used when the type is missing, which should not happen + const val MISSING_TYPE = "org.matrix.android.sdk.missing_type" const val PRESENCE = "m.presence" const val MESSAGE = "m.room.message" diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/EncryptEventTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/EncryptEventTask.kt index 56b267decd..627352f568 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/EncryptEventTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/EncryptEventTask.kt @@ -45,7 +45,7 @@ internal class DefaultEncryptEventTask @Inject constructor( // don't want to wait for any query // if (!params.crypto.isRoomEncrypted(params.roomId)) return params.event val localEvent = params.event - if (localEvent.eventId == null) { + if (localEvent.eventId == null || localEvent.type == null) { throw IllegalArgumentException() } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/SendEventTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/SendEventTask.kt index b772bfbce2..1fbc30d6f6 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/SendEventTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/SendEventTask.kt @@ -58,7 +58,7 @@ internal class DefaultSendEventTask @Inject constructor( localId, roomId = event.roomId ?: "", content = event.content, - eventType = event.type + eventType = event.type ?: "" ) } localEchoRepository.updateSendState(localId, params.event.roomId, SendState.SENT) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/SendVerificationMessageTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/SendVerificationMessageTask.kt index c39dfb1016..ab125135bb 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/SendVerificationMessageTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/SendVerificationMessageTask.kt @@ -50,7 +50,7 @@ internal class DefaultSendVerificationMessageTask @Inject constructor( localId, roomId = event.roomId ?: "", content = event.content, - eventType = event.type + eventType = event.type ?: "" ) } localEchoRepository.updateSendState(localId, event.roomId, SendState.SENT) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/EventMapper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/EventMapper.kt index 66eccdfba0..a4a2fadd21 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/EventMapper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/EventMapper.kt @@ -19,6 +19,7 @@ package org.matrix.android.sdk.internal.database.mapper import com.squareup.moshi.JsonDataException import org.matrix.android.sdk.api.session.crypto.MXCryptoError import org.matrix.android.sdk.api.session.events.model.Event +import org.matrix.android.sdk.api.session.events.model.EventType import org.matrix.android.sdk.api.session.events.model.UnsignedData import org.matrix.android.sdk.api.session.room.send.SendState import org.matrix.android.sdk.internal.crypto.algorithms.olm.OlmDecryptionResult @@ -29,8 +30,6 @@ import timber.log.Timber internal object EventMapper { fun map(event: Event, roomId: String): EventEntity { - val uds = if (event.unsignedData == null) null - else MoshiProvider.providesMoshi().adapter(UnsignedData::class.java).toJson(event.unsignedData) val eventEntity = EventEntity() // TODO change this as we shouldn't use event everywhere eventEntity.eventId = event.eventId ?: "$$roomId-${System.currentTimeMillis()}-${event.hashCode()}" @@ -39,14 +38,16 @@ internal object EventMapper { eventEntity.prevContent = ContentMapper.map(event.resolvedPrevContent()) eventEntity.isUseless = IsUselessResolver.isUseless(event) eventEntity.stateKey = event.stateKey - eventEntity.type = event.type + eventEntity.type = event.type ?: EventType.MISSING_TYPE eventEntity.sender = event.senderId eventEntity.originServerTs = event.originServerTs eventEntity.redacts = event.redacts eventEntity.age = event.unsignedData?.age ?: event.originServerTs - eventEntity.unsignedData = uds + eventEntity.unsignedData = event.unsignedData?.let { + MoshiProvider.providesMoshi().adapter(UnsignedData::class.java).toJson(it) + } eventEntity.decryptionResultJson = event.mxDecryptionResult?.let { - MoshiProvider.providesMoshi().adapter(OlmDecryptionResult::class.java).toJson(it) + MoshiProvider.providesMoshi().adapter(OlmDecryptionResult::class.java).toJson(it) } eventEntity.decryptionErrorReason = event.mCryptoErrorReason eventEntity.decryptionErrorCode = event.mCryptoError?.name diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/LoadRoomMembersTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/LoadRoomMembersTask.kt index 2be90bf8e3..97cfcdaa44 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/LoadRoomMembersTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/LoadRoomMembersTask.kt @@ -105,12 +105,17 @@ internal class DefaultLoadRoomMembersTask @Inject constructor( ?: realm.createObject(roomId) val now = System.currentTimeMillis() for (roomMemberEvent in response.roomMemberEvents) { - if (roomMemberEvent.eventId == null || roomMemberEvent.stateKey == null) { + if (roomMemberEvent.eventId == null || roomMemberEvent.stateKey == null || roomMemberEvent.type == null) { continue } val ageLocalTs = roomMemberEvent.unsignedData?.age?.let { now - it } val eventEntity = roomMemberEvent.toEntity(roomId, SendState.SYNCED, ageLocalTs).copyToRealmOrIgnore(realm, EventInsertType.PAGINATION) - CurrentStateEventEntity.getOrCreate(realm, roomId, roomMemberEvent.stateKey, roomMemberEvent.type).apply { + CurrentStateEventEntity.getOrCreate( + realm, + roomId, + roomMemberEvent.stateKey, + roomMemberEvent.type + ).apply { eventId = roomMemberEvent.eventId root = eventEntity } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/SendRelationWorker.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/SendRelationWorker.kt index c12597bea0..403aa274fe 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/SendRelationWorker.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/SendRelationWorker.kt @@ -89,7 +89,7 @@ internal class SendRelationWorker(context: Context, params: WorkerParameters) roomId = roomId, parentId = relatedEventId, relationType = relationType, - eventType = localEvent.type, + eventType = localEvent.type!!, content = localEvent.content ) } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/LocalEchoRepository.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/LocalEchoRepository.kt index f742271fa7..1277e81fe3 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/LocalEchoRepository.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/LocalEchoRepository.kt @@ -56,10 +56,10 @@ internal class LocalEchoRepository @Inject constructor(@SessionDatabase private fun createLocalEcho(event: Event) { val roomId = event.roomId ?: throw IllegalStateException("You should have set a roomId for your event") - val senderId = event.senderId ?: throw IllegalStateException("You should have set a senderIf for your event") - if (event.eventId == null) { - throw IllegalStateException("You should have set an eventId for your event") - } + val senderId = event.senderId ?: throw IllegalStateException("You should have set a senderId for your event") + event.eventId ?: throw IllegalStateException("You should have set an eventId for your event") + event.type ?: throw IllegalStateException("You should have set a type for your event") + val timelineEventEntity = realmSessionProvider.withRealm { realm -> val eventEntity = event.toEntity(roomId, SendState.UNSENT, System.currentTimeMillis()) val roomMemberHelper = RoomMemberHelper(realm, roomId) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomSyncHandler.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomSyncHandler.kt index 648dd2d88f..9f54d0b86c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomSyncHandler.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomSyncHandler.kt @@ -198,7 +198,7 @@ internal class RoomSyncHandler @Inject constructor(private val readReceiptHandle // State event if (roomSync.state?.events?.isNotEmpty() == true) { for (event in roomSync.state.events) { - if (event.eventId == null || event.stateKey == null) { + if (event.eventId == null || event.stateKey == null || event.type == null) { continue } val ageLocalTs = event.unsignedData?.age?.let { syncLocalTimestampMillis - it } @@ -254,7 +254,7 @@ internal class RoomSyncHandler @Inject constructor(private val readReceiptHandle roomEntity.membership = Membership.INVITE if (roomSync.inviteState != null && roomSync.inviteState.events.isNotEmpty()) { roomSync.inviteState.events.forEach { event -> - if (event.stateKey == null) { + if (event.stateKey == null || event.type == null) { return@forEach } val ageLocalTs = event.unsignedData?.age?.let { syncLocalTimestampMillis - it } @@ -281,7 +281,7 @@ internal class RoomSyncHandler @Inject constructor(private val readReceiptHandle syncLocalTimestampMillis: Long): RoomEntity { val roomEntity = RoomEntity.where(realm, roomId).findFirst() ?: realm.createObject(roomId) for (event in roomSync.state?.events.orEmpty()) { - if (event.eventId == null || event.stateKey == null) { + if (event.eventId == null || event.stateKey == null || event.type == null) { continue } val ageLocalTs = event.unsignedData?.age?.let { syncLocalTimestampMillis - it } @@ -293,7 +293,7 @@ internal class RoomSyncHandler @Inject constructor(private val readReceiptHandle roomMemberEventHandler.handle(realm, roomId, event) } for (event in roomSync.timeline?.events.orEmpty()) { - if (event.eventId == null || event.senderId == null) { + if (event.eventId == null || event.senderId == null || event.type == null) { continue } val ageLocalTs = event.unsignedData?.age?.let { syncLocalTimestampMillis - it } @@ -340,7 +340,7 @@ internal class RoomSyncHandler @Inject constructor(private val readReceiptHandle val roomMemberContentsByUser = HashMap() for (event in eventList) { - if (event.eventId == null || event.senderId == null) { + if (event.eventId == null || event.senderId == null || event.type == null) { continue } eventIds.add(event.eventId) diff --git a/vector/src/main/java/im/vector/app/features/devtools/RoomStateListController.kt b/vector/src/main/java/im/vector/app/features/devtools/RoomStateListController.kt index 69070c509b..38138474d9 100644 --- a/vector/src/main/java/im/vector/app/features/devtools/RoomStateListController.kt +++ b/vector/src/main/java/im/vector/app/features/devtools/RoomStateListController.kt @@ -37,7 +37,7 @@ class RoomStateListController @Inject constructor( override fun buildModels(data: RoomDevToolViewState?) { when (data?.displayMode) { RoomDevToolViewState.Mode.StateEventList -> { - val stateEventsGroups = data.stateEvents.invoke().orEmpty().groupBy { it.type } + val stateEventsGroups = data.stateEvents.invoke().orEmpty().groupBy { it.getClearType() } if (stateEventsGroups.isEmpty()) { noResultItem { diff --git a/vector/src/main/java/im/vector/app/features/notifications/NotifiableEventResolver.kt b/vector/src/main/java/im/vector/app/features/notifications/NotifiableEventResolver.kt index c1bb1dde36..a4f617bf5b 100644 --- a/vector/src/main/java/im/vector/app/features/notifications/NotifiableEventResolver.kt +++ b/vector/src/main/java/im/vector/app/features/notifications/NotifiableEventResolver.kt @@ -68,7 +68,7 @@ class NotifiableEventResolver @Inject constructor(private val stringProvider: St // If the event can be displayed, display it as is Timber.w("NotifiableEventResolver Received an unsupported event matching a bing rule") // TODO Better event text display - val bodyPreview = event.type + val bodyPreview = event.type ?: EventType.MISSING_TYPE return SimpleNotifiableEvent( session.myUserId, From 2d664c423d54e09f3b915ec4dda2ffd0f6cda13c Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 2 Mar 2021 16:21:40 +0100 Subject: [PATCH 141/578] Simplify code --- .../fcm/VectorFirebaseMessagingService.kt | 26 ++++++------------- 1 file changed, 8 insertions(+), 18 deletions(-) diff --git a/vector/src/gplay/java/im/vector/app/gplay/push/fcm/VectorFirebaseMessagingService.kt b/vector/src/gplay/java/im/vector/app/gplay/push/fcm/VectorFirebaseMessagingService.kt index cfd241d4f9..4d2cbecfe4 100755 --- a/vector/src/gplay/java/im/vector/app/gplay/push/fcm/VectorFirebaseMessagingService.kt +++ b/vector/src/gplay/java/im/vector/app/gplay/push/fcm/VectorFirebaseMessagingService.kt @@ -253,25 +253,15 @@ class VectorFirebaseMessagingService : FirebaseMessagingService() { * Try to create an event from the FCM data * * @param data the FCM data - * @return the event + * @return the event or null if required data are missing */ private fun parseEvent(data: Map?): Event? { - // accept only event with room id. - if (null == data || !data.containsKey("room_id") || !data.containsKey("event_id")) { - return null - } - - try { - return Event(eventId = data["event_id"], - senderId = data["sender"], - roomId = data["room_id"], - type = data.getValue("type"), - // TODO content = data.getValue("content"), - originServerTs = System.currentTimeMillis()) - } catch (e: Exception) { - Timber.e(e, "buildEvent fails ") - } - - return null + return Event( + eventId = data?.get("event_id") ?: return null, + senderId = data["sender"], + roomId = data["room_id"] ?: return null, + type = data["type"] ?: return null, + originServerTs = System.currentTimeMillis() + ) } } From a9f923591d470ec73f97a1cd701a4e85aee9ce3e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Mar 2021 15:32:08 +0000 Subject: [PATCH 142/578] Bump barista from 3.7.0 to 3.8.0 Bumps barista from 3.7.0 to 3.8.0. Signed-off-by: dependabot[bot] --- vector/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vector/build.gradle b/vector/build.gradle index 1c3f4d09c8..5543d27d95 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -473,7 +473,7 @@ dependencies { // Plant Timber tree for test androidTestImplementation 'net.lachlanmckee:timber-junit-rule:1.0.1' // "The one who serves a great Espresso" - androidTestImplementation('com.schibsted.spain:barista:3.7.0') { + androidTestImplementation('com.schibsted.spain:barista:3.8.0') { exclude group: 'org.jetbrains.kotlin' } } From 2bef459107365e389c0be1878923b191f03ec0fb Mon Sep 17 00:00:00 2001 From: HelaBasa Date: Tue, 2 Mar 2021 17:29:26 +0000 Subject: [PATCH 143/578] Added translation using Weblate (Sinhala) --- vector/src/main/res/values-si/strings.xml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 vector/src/main/res/values-si/strings.xml diff --git a/vector/src/main/res/values-si/strings.xml b/vector/src/main/res/values-si/strings.xml new file mode 100644 index 0000000000..a6b3daec93 --- /dev/null +++ b/vector/src/main/res/values-si/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file From e6265c277e45ba47585ffee6969ef466006f6f29 Mon Sep 17 00:00:00 2001 From: HelaBasa Date: Tue, 2 Mar 2021 17:32:24 +0000 Subject: [PATCH 144/578] Added translation using Weblate (Sinhala) --- matrix-sdk-android/src/main/res/values-si/strings.xml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 matrix-sdk-android/src/main/res/values-si/strings.xml diff --git a/matrix-sdk-android/src/main/res/values-si/strings.xml b/matrix-sdk-android/src/main/res/values-si/strings.xml new file mode 100644 index 0000000000..a6b3daec93 --- /dev/null +++ b/matrix-sdk-android/src/main/res/values-si/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file From ae648c3e116635c7590113312ec07e092c17131c Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Thu, 4 Feb 2021 11:47:24 +0300 Subject: [PATCH 145/578] Make outbound key sharing strategy configurable. --- CHANGES.md | 1 + .../android/sdk/api/MatrixConfiguration.kt | 2 ++ .../OutboundSessionKeySharingStrategy.kt | 34 +++++++++++++++++++ .../sdk/api/session/crypto/CryptoService.kt | 2 ++ .../internal/crypto/DefaultCryptoService.kt | 15 ++++++++ .../crypto/algorithms/IMXEncrypting.kt | 7 ++++ .../algorithms/megolm/MXMegolmEncryption.kt | 9 +++-- .../crypto/algorithms/olm/MXOlmEncryption.kt | 4 +++ .../session/room/timeline/DefaultTimeline.kt | 16 +++++++-- .../session/room/typing/SendTypingTask.kt | 16 ++++++++- vector/build.gradle | 2 ++ .../java/im/vector/app/VectorApplication.kt | 2 +- 12 files changed, 101 insertions(+), 9 deletions(-) create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/crypto/OutboundSessionKeySharingStrategy.kt diff --git a/CHANGES.md b/CHANGES.md index ba3ad08037..a3eb4bfdf9 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -41,6 +41,7 @@ Improvements 🙌: - Improve room profile UX - Upgrade Jitsi library from 2.9.3 to 3.1.0 - a11y improvements + - Pre-share session keys when opening a room or start typing (#2771) Bugfix 🐛: - VoIP : fix audio devices output diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/MatrixConfiguration.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/MatrixConfiguration.kt index 93a1b962ed..c01aeab6dd 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/MatrixConfiguration.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/MatrixConfiguration.kt @@ -17,6 +17,7 @@ package org.matrix.android.sdk.api import org.matrix.android.sdk.api.crypto.MXCryptoConfig +import org.matrix.android.sdk.api.crypto.OutboundSessionKeySharingStrategy import java.net.Proxy data class MatrixConfiguration( @@ -40,6 +41,7 @@ data class MatrixConfiguration( * True to advertise support for call transfers to other parties on Matrix calls. */ val supportsCallTransfer: Boolean = false + val outboundSessionKeySharingStrategy: OutboundSessionKeySharingStrategy = OutboundSessionKeySharingStrategy.WhenSendingEvent ) { /** diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/crypto/OutboundSessionKeySharingStrategy.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/crypto/OutboundSessionKeySharingStrategy.kt new file mode 100644 index 0000000000..9ef1f538b8 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/crypto/OutboundSessionKeySharingStrategy.kt @@ -0,0 +1,34 @@ +/* + * Copyright 2020 The Matrix.org Foundation C.I.C. + * + * 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. + */ + +package org.matrix.android.sdk.api.crypto + +enum class OutboundSessionKeySharingStrategy { + /** + * Keys will be sent for the first time when the first message is sent + */ + WhenSendingEvent, + + /** + * Keys will be sent for the first time when the timeline displayed + */ + WhenEnteringRoom, + + /** + * Keys will be sent for the first time when a typing started + */ + WhenTyping +} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/CryptoService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/CryptoService.kt index eead9b4ab7..1c5bfb1a7b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/CryptoService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/CryptoService.kt @@ -156,4 +156,6 @@ interface CryptoService { fun getWithHeldMegolmSession(roomId: String, sessionId: String): RoomKeyWithHeldContent? fun logDbUsageInfo() + + fun ensureOutboundSession(roomId: String) } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt index 67229a5eae..821ac18e3a 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt @@ -1290,6 +1290,21 @@ internal class DefaultCryptoService @Inject constructor( cryptoStore.logDbUsageInfo() } + override fun ensureOutboundSession(roomId: String) { + cryptoCoroutineScope.launch(coroutineDispatchers.crypto) { + roomEncryptorsStore + .get(roomId) + ?.let { + getEncryptionAlgorithm(roomId)?.let { safeAlgorithm -> + val userIds = getRoomUserIds(roomId) + if (setEncryptionInRoom(roomId, safeAlgorithm, false, userIds)) { + roomEncryptorsStore.get(roomId)?.ensureOutboundSession(getRoomUserIds(roomId)) + } + } + } + } + } + /* ========================================================================================== * For test only * ========================================================================================== */ diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/IMXEncrypting.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/IMXEncrypting.kt index fc3ea08a21..008ef1b084 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/IMXEncrypting.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/IMXEncrypting.kt @@ -62,4 +62,11 @@ internal interface IMXEncrypting { userId: String, deviceId: String, senderKey: String): Boolean + + /** + * Ensure the outbound session + * + * @param usersInRoom the users in the room + */ + suspend fun ensureOutboundSession(usersInRoom: List) } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryption.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryption.kt index fa8acafb83..3a07dbcfb6 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryption.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryption.kt @@ -137,11 +137,10 @@ internal class MXMegolmEncryption( return MXOutboundSessionInfo(sessionId, SharedWithHelper(roomId, sessionId, cryptoStore)) } - /** - * Ensure the outbound session - * - * @param devicesInRoom the devices list - */ + override suspend fun ensureOutboundSession(usersInRoom: List) { + getDevicesInRoom(usersInRoom).allowedDevices + } + private suspend fun ensureOutboundSession(devicesInRoom: MXUsersDevicesMap): MXOutboundSessionInfo { Timber.v("## CRYPTO | ensureOutboundSession start") var session = outboundSession diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/olm/MXOlmEncryption.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/olm/MXOlmEncryption.kt index 9acc9bc1b2..acea6ff3fe 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/olm/MXOlmEncryption.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/olm/MXOlmEncryption.kt @@ -85,4 +85,8 @@ internal class MXOlmEncryption( // No need for olm return false } + + override suspend fun ensureOutboundSession(usersInRoom: List) { + // NOOP + } } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultTimeline.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultTimeline.kt index ca272a3520..e75beb4b21 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultTimeline.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultTimeline.kt @@ -24,9 +24,13 @@ import io.realm.RealmQuery import io.realm.RealmResults import io.realm.Sort import org.matrix.android.sdk.api.MatrixCallback +import org.matrix.android.sdk.api.MatrixConfiguration import org.matrix.android.sdk.api.NoOpMatrixCallback +import org.matrix.android.sdk.api.crypto.OutboundSessionKeySharingStrategy import org.matrix.android.sdk.api.extensions.orFalse import org.matrix.android.sdk.api.extensions.tryOrNull +import org.matrix.android.sdk.api.session.Session +import org.matrix.android.sdk.api.session.crypto.CryptoService import org.matrix.android.sdk.api.session.events.model.EventType import org.matrix.android.sdk.api.session.events.model.RelationType import org.matrix.android.sdk.api.session.events.model.toModel @@ -80,8 +84,11 @@ internal class DefaultTimeline( private val timelineInput: TimelineInput, private val eventDecryptor: TimelineEventDecryptor, private val realmSessionProvider: RealmSessionProvider, - private val loadRoomMembersTask: LoadRoomMembersTask -) : Timeline, + private val loadRoomMembersTask: LoadRoomMembersTask, + private val session: Session, + private val matrixConfiguration: MatrixConfiguration, + private val cryptoService: CryptoService + ) : Timeline, TimelineHiddenReadReceipts.Delegate, TimelineInput.Listener { @@ -188,6 +195,11 @@ internal class DefaultTimeline( } .executeBy(taskExecutor) + if (session.getRoom(roomId)?.isEncrypted().orFalse() + && matrixConfiguration.outboundSessionKeySharingStrategy == OutboundSessionKeySharingStrategy.WhenEnteringRoom) { + cryptoService.ensureOutboundSession(roomId) + } + isReady.set(true) } } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/typing/SendTypingTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/typing/SendTypingTask.kt index 3b56d04872..aa8dcf6013 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/typing/SendTypingTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/typing/SendTypingTask.kt @@ -21,6 +21,11 @@ import org.matrix.android.sdk.internal.network.executeRequest import org.matrix.android.sdk.internal.session.room.RoomAPI import org.matrix.android.sdk.internal.task.Task import kotlinx.coroutines.delay +import org.matrix.android.sdk.api.MatrixConfiguration +import org.matrix.android.sdk.api.crypto.OutboundSessionKeySharingStrategy +import org.matrix.android.sdk.api.extensions.orFalse +import org.matrix.android.sdk.api.session.Session +import org.matrix.android.sdk.api.session.crypto.CryptoService import org.matrix.android.sdk.internal.network.GlobalErrorReceiver import javax.inject.Inject @@ -38,12 +43,21 @@ internal interface SendTypingTask : Task { internal class DefaultSendTypingTask @Inject constructor( private val roomAPI: RoomAPI, @UserId private val userId: String, - private val globalErrorReceiver: GlobalErrorReceiver + private val globalErrorReceiver: GlobalErrorReceiver, + private val matrixConfiguration: MatrixConfiguration, + private val session: Session, + private val cryptoService: CryptoService ) : SendTypingTask { override suspend fun execute(params: SendTypingTask.Params) { delay(params.delay ?: -1) + if (params.isTyping + && session.getRoom(params.roomId)?.isEncrypted().orFalse() + && matrixConfiguration.outboundSessionKeySharingStrategy == OutboundSessionKeySharingStrategy.WhenTyping) { + cryptoService.ensureOutboundSession(params.roomId) + } + executeRequest(globalErrorReceiver) { apiCall = roomAPI.sendTypingState( params.roomId, diff --git a/vector/build.gradle b/vector/build.gradle index 5543d27d95..a257f6aaf6 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -136,6 +136,8 @@ android { buildConfigField "String", "BUILD_NUMBER", "\"${buildNumber}\"" resValue "string", "build_number", "\"${buildNumber}\"" + buildConfigField "org.matrix.android.sdk.api.crypto.OutboundSessionKeySharingStrategy", "OutboundSessionKeySharingStrategy", "org.matrix.android.sdk.api.crypto.OutboundSessionKeySharingStrategy.WhenTyping" + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" // Keep abiFilter for the universalApk diff --git a/vector/src/main/java/im/vector/app/VectorApplication.kt b/vector/src/main/java/im/vector/app/VectorApplication.kt index f8cda2c417..1926a35c9c 100644 --- a/vector/src/main/java/im/vector/app/VectorApplication.kt +++ b/vector/src/main/java/im/vector/app/VectorApplication.kt @@ -205,7 +205,7 @@ class VectorApplication : } } - override fun providesMatrixConfiguration() = MatrixConfiguration(BuildConfig.FLAVOR_DESCRIPTION) + override fun providesMatrixConfiguration() = MatrixConfiguration(applicationFlavor = BuildConfig.FLAVOR_DESCRIPTION, outboundSessionKeySharingStrategy = BuildConfig.OutboundSessionKeySharingStrategy) override fun getWorkManagerConfiguration(): WorkConfiguration { return WorkConfiguration.Builder() From e92edc7cb1c90566cca19df868716a9c6ade1381 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Thu, 4 Feb 2021 12:18:32 +0300 Subject: [PATCH 146/578] Fix remember to call the function. --- .../sdk/internal/crypto/algorithms/megolm/MXMegolmEncryption.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryption.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryption.kt index 3a07dbcfb6..42c19925ae 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryption.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryption.kt @@ -138,7 +138,7 @@ internal class MXMegolmEncryption( } override suspend fun ensureOutboundSession(usersInRoom: List) { - getDevicesInRoom(usersInRoom).allowedDevices + ensureOutboundSession(getDevicesInRoom(usersInRoom).allowedDevices) } private suspend fun ensureOutboundSession(devicesInRoom: MXUsersDevicesMap): MXOutboundSessionInfo { From a2de80091d3d588e029f362645b7166d2430768d Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Fri, 5 Feb 2021 11:56:42 +0300 Subject: [PATCH 147/578] Code review fixes. --- .../internal/crypto/DefaultCryptoService.kt | 15 ++++- .../crypto/IncomingGossipingRequestManager.kt | 13 +++-- .../crypto/algorithms/IMXEncrypting.kt | 37 ------------ .../crypto/algorithms/IMXGroupEncryption.kt | 57 +++++++++++++++++++ .../algorithms/megolm/MXMegolmEncryption.kt | 3 +- .../crypto/algorithms/olm/MXOlmEncryption.kt | 13 ----- .../session/room/DefaultRoomService.kt | 23 +++++++- .../session/room/timeline/DefaultTimeline.kt | 23 +------- .../room/typing/DefaultTypingService.kt | 15 ++++- .../session/room/typing/SendTypingTask.kt | 16 +----- 10 files changed, 119 insertions(+), 96 deletions(-) create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/IMXGroupEncryption.kt diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt index 821ac18e3a..72cf8b261d 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt @@ -53,6 +53,7 @@ import org.matrix.android.sdk.api.session.room.model.RoomMemberContent import org.matrix.android.sdk.internal.crypto.actions.MegolmSessionDataImporter import org.matrix.android.sdk.internal.crypto.actions.SetDeviceVerificationAction import org.matrix.android.sdk.internal.crypto.algorithms.IMXEncrypting +import org.matrix.android.sdk.internal.crypto.algorithms.IMXGroupEncryption import org.matrix.android.sdk.internal.crypto.algorithms.IMXWithHeldExtension import org.matrix.android.sdk.internal.crypto.algorithms.megolm.MXMegolmEncryptionFactory import org.matrix.android.sdk.internal.crypto.algorithms.olm.MXOlmEncryptionFactory @@ -667,7 +668,12 @@ internal class DefaultCryptoService @Inject constructor( override fun discardOutboundSession(roomId: String) { cryptoCoroutineScope.launch(coroutineDispatchers.crypto) { - roomEncryptorsStore.get(roomId)?.discardSessionKey() + val roomEncryptor = roomEncryptorsStore.get(roomId) + if (roomEncryptor is IMXGroupEncryption) { + roomEncryptor.discardSessionKey() + } else { + Timber.e("## CRYPTO | discardOutboundSession() for:$roomId: Unable to handle IMXGroupEncryption") + } } } @@ -1298,7 +1304,12 @@ internal class DefaultCryptoService @Inject constructor( getEncryptionAlgorithm(roomId)?.let { safeAlgorithm -> val userIds = getRoomUserIds(roomId) if (setEncryptionInRoom(roomId, safeAlgorithm, false, userIds)) { - roomEncryptorsStore.get(roomId)?.ensureOutboundSession(getRoomUserIds(roomId)) + val roomEncryptor = roomEncryptorsStore.get(roomId) + if (roomEncryptor is IMXGroupEncryption) { + roomEncryptor.ensureOutboundSession(getRoomUserIds(roomId)) + } else { + Timber.e("## CRYPTO | ensureOutboundSession() for:$roomId: Unable to handle IMXGroupEncryption for $safeAlgorithm") + } } } } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingGossipingRequestManager.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingGossipingRequestManager.kt index c075c90eb9..4a0a274f4f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingGossipingRequestManager.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingGossipingRequestManager.kt @@ -28,6 +28,7 @@ import org.matrix.android.sdk.api.session.crypto.keyshare.GossipingRequestListen import org.matrix.android.sdk.api.session.events.model.Event import org.matrix.android.sdk.api.session.events.model.EventType import org.matrix.android.sdk.api.session.events.model.toModel +import org.matrix.android.sdk.internal.crypto.algorithms.IMXGroupEncryption import org.matrix.android.sdk.internal.crypto.crosssigning.toBase64NoPadding import org.matrix.android.sdk.internal.crypto.keysbackup.util.extractCurveKeyFromRecoveryKey import org.matrix.android.sdk.internal.crypto.model.rest.GossipingDefaultContent @@ -290,12 +291,16 @@ internal class IncomingGossipingRequestManager @Inject constructor( .also { cryptoStore.updateGossipingRequestState(request, GossipingRequestState.REJECTED) } cryptoCoroutineScope.launch(coroutineDispatchers.crypto) { - val isSuccess = roomEncryptor.reshareKey(sessionId, userId, deviceId, senderKey) + if (roomEncryptor is IMXGroupEncryption) { + val isSuccess = roomEncryptor.reshareKey(sessionId, userId, deviceId, senderKey) - if (isSuccess) { - cryptoStore.updateGossipingRequestState(request, GossipingRequestState.ACCEPTED) + if (isSuccess) { + cryptoStore.updateGossipingRequestState(request, GossipingRequestState.ACCEPTED) + } else { + cryptoStore.updateGossipingRequestState(request, GossipingRequestState.UNABLE_TO_PROCESS) + } } else { - cryptoStore.updateGossipingRequestState(request, GossipingRequestState.UNABLE_TO_PROCESS) + Timber.e("## CRYPTO | handleKeyRequestFromOtherUser() from:$userId: Unable to handle IMXGroupEncryption.reshareKey for $alg") } } cryptoStore.updateGossipingRequestState(request, GossipingRequestState.RE_REQUESTED) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/IMXEncrypting.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/IMXEncrypting.kt index 008ef1b084..5294429198 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/IMXEncrypting.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/IMXEncrypting.kt @@ -32,41 +32,4 @@ internal interface IMXEncrypting { * @return the encrypted content */ suspend fun encryptEventContent(eventContent: Content, eventType: String, userIds: List): Content - - /** - * In Megolm, each recipient maintains a record of the ratchet value which allows - * them to decrypt any messages sent in the session after the corresponding point - * in the conversation. If this value is compromised, an attacker can similarly - * decrypt past messages which were encrypted by a key derived from the - * compromised or subsequent ratchet values. This gives 'partial' forward - * secrecy. - * - * To mitigate this issue, the application should offer the user the option to - * discard historical conversations, by winding forward any stored ratchet values, - * or discarding sessions altogether. - */ - fun discardSessionKey() - - /** - * Re-shares a session key with devices if the key has already been - * sent to them. - * - * @param sessionId The id of the outbound session to share. - * @param userId The id of the user who owns the target device. - * @param deviceId The id of the target device. - * @param senderKey The key of the originating device for the session. - * - * @return true in case of success - */ - suspend fun reshareKey(sessionId: String, - userId: String, - deviceId: String, - senderKey: String): Boolean - - /** - * Ensure the outbound session - * - * @param usersInRoom the users in the room - */ - suspend fun ensureOutboundSession(usersInRoom: List) } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/IMXGroupEncryption.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/IMXGroupEncryption.kt new file mode 100644 index 0000000000..97b005659d --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/IMXGroupEncryption.kt @@ -0,0 +1,57 @@ +/* + * Copyright 2020 The Matrix.org Foundation C.I.C. + * + * 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. + */ + +package org.matrix.android.sdk.internal.crypto.algorithms + +internal interface IMXGroupEncryption { + + /** + * In Megolm, each recipient maintains a record of the ratchet value which allows + * them to decrypt any messages sent in the session after the corresponding point + * in the conversation. If this value is compromised, an attacker can similarly + * decrypt past messages which were encrypted by a key derived from the + * compromised or subsequent ratchet values. This gives 'partial' forward + * secrecy. + * + * To mitigate this issue, the application should offer the user the option to + * discard historical conversations, by winding forward any stored ratchet values, + * or discarding sessions altogether. + */ + fun discardSessionKey() + + /** + * Re-shares a session key with devices if the key has already been + * sent to them. + * + * @param sessionId The id of the outbound session to share. + * @param userId The id of the user who owns the target device. + * @param deviceId The id of the target device. + * @param senderKey The key of the originating device for the session. + * + * @return true in case of success + */ + suspend fun reshareKey(sessionId: String, + userId: String, + deviceId: String, + senderKey: String): Boolean + + /** + * Ensure the outbound session + * + * @param usersInRoom the users in the room + */ + suspend fun ensureOutboundSession(usersInRoom: List) +} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryption.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryption.kt index 42c19925ae..be85fcec8e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryption.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryption.kt @@ -30,6 +30,7 @@ import org.matrix.android.sdk.internal.crypto.MXOlmDevice import org.matrix.android.sdk.internal.crypto.actions.EnsureOlmSessionsForDevicesAction import org.matrix.android.sdk.internal.crypto.actions.MessageEncrypter import org.matrix.android.sdk.internal.crypto.algorithms.IMXEncrypting +import org.matrix.android.sdk.internal.crypto.algorithms.IMXGroupEncryption import org.matrix.android.sdk.internal.crypto.keysbackup.DefaultKeysBackupService import org.matrix.android.sdk.internal.crypto.model.CryptoDeviceInfo import org.matrix.android.sdk.internal.crypto.model.MXUsersDevicesMap @@ -61,7 +62,7 @@ internal class MXMegolmEncryption( private val taskExecutor: TaskExecutor, private val coroutineDispatchers: MatrixCoroutineDispatchers, private val cryptoCoroutineScope: CoroutineScope -) : IMXEncrypting { +) : IMXEncrypting, IMXGroupEncryption { // OutboundSessionInfo. Null if we haven't yet started setting one up. Note // that even if this is non-null, it may not be ready for use (in which diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/olm/MXOlmEncryption.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/olm/MXOlmEncryption.kt index acea6ff3fe..65f78e11f0 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/olm/MXOlmEncryption.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/olm/MXOlmEncryption.kt @@ -76,17 +76,4 @@ internal class MXOlmEncryption( deviceListManager.downloadKeys(users, false) ensureOlmSessionsForUsersAction.handle(users) } - - override fun discardSessionKey() { - // No need for olm - } - - override suspend fun reshareKey(sessionId: String, userId: String, deviceId: String, senderKey: String): Boolean { - // No need for olm - return false - } - - override suspend fun ensureOutboundSession(usersInRoom: List) { - // NOOP - } } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoomService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoomService.kt index 383dd876d3..c60150004f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoomService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoomService.kt @@ -20,6 +20,11 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.Transformations import com.zhuinden.monarchy.Monarchy import org.matrix.android.sdk.api.MatrixCallback +import org.matrix.android.sdk.api.MatrixConfiguration +import org.matrix.android.sdk.api.NoOpMatrixCallback +import org.matrix.android.sdk.api.crypto.OutboundSessionKeySharingStrategy +import org.matrix.android.sdk.api.extensions.orFalse +import org.matrix.android.sdk.api.session.crypto.CryptoService import org.matrix.android.sdk.api.session.events.model.Event import org.matrix.android.sdk.api.session.room.Room import org.matrix.android.sdk.api.session.room.RoomService @@ -39,6 +44,7 @@ import org.matrix.android.sdk.internal.session.room.alias.DeleteRoomAliasTask import org.matrix.android.sdk.internal.session.room.alias.GetRoomIdByAliasTask import org.matrix.android.sdk.internal.session.room.alias.RoomAliasDescription import org.matrix.android.sdk.internal.session.room.create.CreateRoomTask +import org.matrix.android.sdk.internal.session.room.membership.LoadRoomMembersTask import org.matrix.android.sdk.internal.session.room.membership.RoomChangeMembershipStateDataSource import org.matrix.android.sdk.internal.session.room.membership.RoomMemberHelper import org.matrix.android.sdk.internal.session.room.membership.joining.JoinRoomTask @@ -65,7 +71,10 @@ internal class DefaultRoomService @Inject constructor( private val roomGetter: RoomGetter, private val roomSummaryDataSource: RoomSummaryDataSource, private val roomChangeMembershipStateDataSource: RoomChangeMembershipStateDataSource, - private val taskExecutor: TaskExecutor + private val taskExecutor: TaskExecutor, + private val loadRoomMembersTask: LoadRoomMembersTask, + private val matrixConfiguration: MatrixConfiguration, + private val cryptoService: CryptoService ) : RoomService { override fun createRoom(createRoomParams: CreateRoomParams, callback: MatrixCallback): Cancelable { @@ -105,6 +114,18 @@ internal class DefaultRoomService @Inject constructor( } override fun onRoomDisplayed(roomId: String): Cancelable { + // Ensure to load all room members + loadRoomMembersTask + .configureWith(LoadRoomMembersTask.Params(roomId)) { + this.callback = NoOpMatrixCallback() + } + .executeBy(taskExecutor) + + // Ensure to share the outbound session keys with all members + if (roomGetter.getRoom(roomId)?.isEncrypted().orFalse() + && matrixConfiguration.outboundSessionKeySharingStrategy == OutboundSessionKeySharingStrategy.WhenEnteringRoom) { + cryptoService.ensureOutboundSession(roomId) + } return updateBreadcrumbsTask .configureWith(UpdateBreadcrumbsTask.Params(roomId)) .executeBy(taskExecutor) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultTimeline.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultTimeline.kt index e75beb4b21..1be5d55cad 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultTimeline.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultTimeline.kt @@ -24,13 +24,8 @@ import io.realm.RealmQuery import io.realm.RealmResults import io.realm.Sort import org.matrix.android.sdk.api.MatrixCallback -import org.matrix.android.sdk.api.MatrixConfiguration -import org.matrix.android.sdk.api.NoOpMatrixCallback -import org.matrix.android.sdk.api.crypto.OutboundSessionKeySharingStrategy import org.matrix.android.sdk.api.extensions.orFalse import org.matrix.android.sdk.api.extensions.tryOrNull -import org.matrix.android.sdk.api.session.Session -import org.matrix.android.sdk.api.session.crypto.CryptoService import org.matrix.android.sdk.api.session.events.model.EventType import org.matrix.android.sdk.api.session.events.model.RelationType import org.matrix.android.sdk.api.session.events.model.toModel @@ -54,7 +49,6 @@ import org.matrix.android.sdk.internal.database.query.filterEvents import org.matrix.android.sdk.internal.database.query.findAllInRoomWithSendStates import org.matrix.android.sdk.internal.database.query.where import org.matrix.android.sdk.internal.database.query.whereRoomId -import org.matrix.android.sdk.internal.session.room.membership.LoadRoomMembersTask import org.matrix.android.sdk.internal.task.TaskExecutor import org.matrix.android.sdk.internal.task.configureWith import org.matrix.android.sdk.internal.util.Debouncer @@ -83,11 +77,7 @@ internal class DefaultTimeline( private val hiddenReadReceipts: TimelineHiddenReadReceipts, private val timelineInput: TimelineInput, private val eventDecryptor: TimelineEventDecryptor, - private val realmSessionProvider: RealmSessionProvider, - private val loadRoomMembersTask: LoadRoomMembersTask, - private val session: Session, - private val matrixConfiguration: MatrixConfiguration, - private val cryptoService: CryptoService + private val realmSessionProvider: RealmSessionProvider ) : Timeline, TimelineHiddenReadReceipts.Delegate, TimelineInput.Listener { @@ -189,17 +179,6 @@ internal class DefaultTimeline( hiddenReadReceipts.start(realm, filteredEvents, nonFilteredEvents, this) } - loadRoomMembersTask - .configureWith(LoadRoomMembersTask.Params(roomId)) { - this.callback = NoOpMatrixCallback() - } - .executeBy(taskExecutor) - - if (session.getRoom(roomId)?.isEncrypted().orFalse() - && matrixConfiguration.outboundSessionKeySharingStrategy == OutboundSessionKeySharingStrategy.WhenEnteringRoom) { - cryptoService.ensureOutboundSession(roomId) - } - isReady.set(true) } } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/typing/DefaultTypingService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/typing/DefaultTypingService.kt index 39b7967bc1..279ab3f334 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/typing/DefaultTypingService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/typing/DefaultTypingService.kt @@ -21,8 +21,13 @@ import dagger.assisted.Assisted import dagger.assisted.AssistedInject import dagger.assisted.AssistedFactory import org.matrix.android.sdk.api.MatrixCallback +import org.matrix.android.sdk.api.MatrixConfiguration +import org.matrix.android.sdk.api.crypto.OutboundSessionKeySharingStrategy +import org.matrix.android.sdk.api.extensions.orFalse +import org.matrix.android.sdk.api.session.crypto.CryptoService import org.matrix.android.sdk.api.session.room.typing.TypingService import org.matrix.android.sdk.api.util.Cancelable +import org.matrix.android.sdk.internal.session.room.RoomGetter import org.matrix.android.sdk.internal.task.TaskExecutor import org.matrix.android.sdk.internal.task.configureWith import timber.log.Timber @@ -36,7 +41,10 @@ import timber.log.Timber internal class DefaultTypingService @AssistedInject constructor( @Assisted private val roomId: String, private val taskExecutor: TaskExecutor, - private val sendTypingTask: SendTypingTask + private val sendTypingTask: SendTypingTask, + private val matrixConfiguration: MatrixConfiguration, + private val cryptoService: CryptoService, + private val roomGetter: RoomGetter ) : TypingService { @AssistedFactory @@ -69,6 +77,11 @@ internal class DefaultTypingService @AssistedInject constructor( currentTask?.cancel() + if (roomGetter.getRoom(roomId)?.isEncrypted().orFalse() + && matrixConfiguration.outboundSessionKeySharingStrategy == OutboundSessionKeySharingStrategy.WhenTyping) { + cryptoService.ensureOutboundSession(roomId) + } + val params = SendTypingTask.Params(roomId, true) currentTask = sendTypingTask .configureWith(params) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/typing/SendTypingTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/typing/SendTypingTask.kt index aa8dcf6013..3b56d04872 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/typing/SendTypingTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/typing/SendTypingTask.kt @@ -21,11 +21,6 @@ import org.matrix.android.sdk.internal.network.executeRequest import org.matrix.android.sdk.internal.session.room.RoomAPI import org.matrix.android.sdk.internal.task.Task import kotlinx.coroutines.delay -import org.matrix.android.sdk.api.MatrixConfiguration -import org.matrix.android.sdk.api.crypto.OutboundSessionKeySharingStrategy -import org.matrix.android.sdk.api.extensions.orFalse -import org.matrix.android.sdk.api.session.Session -import org.matrix.android.sdk.api.session.crypto.CryptoService import org.matrix.android.sdk.internal.network.GlobalErrorReceiver import javax.inject.Inject @@ -43,21 +38,12 @@ internal interface SendTypingTask : Task { internal class DefaultSendTypingTask @Inject constructor( private val roomAPI: RoomAPI, @UserId private val userId: String, - private val globalErrorReceiver: GlobalErrorReceiver, - private val matrixConfiguration: MatrixConfiguration, - private val session: Session, - private val cryptoService: CryptoService + private val globalErrorReceiver: GlobalErrorReceiver ) : SendTypingTask { override suspend fun execute(params: SendTypingTask.Params) { delay(params.delay ?: -1) - if (params.isTyping - && session.getRoom(params.roomId)?.isEncrypted().orFalse() - && matrixConfiguration.outboundSessionKeySharingStrategy == OutboundSessionKeySharingStrategy.WhenTyping) { - cryptoService.ensureOutboundSession(params.roomId) - } - executeRequest(globalErrorReceiver) { apiCall = roomAPI.sendTypingState( params.roomId, From a623395585744c0826421ffe54f506741af1bda0 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Mon, 8 Feb 2021 17:04:50 +0300 Subject: [PATCH 148/578] Code review fixes. --- .../android/sdk/api/MatrixConfiguration.kt | 1 - .../session/room/crypto/RoomCryptoService.kt | 7 ++++ .../internal/crypto/DefaultCryptoService.kt | 42 ++++++++++++------- .../crypto/algorithms/IMXGroupEncryption.kt | 7 ---- .../algorithms/megolm/MXMegolmEncryption.kt | 9 ++-- .../sdk/internal/session/room/DefaultRoom.kt | 4 ++ .../session/room/DefaultRoomService.kt | 23 +--------- .../session/room/timeline/DefaultTimeline.kt | 13 +++++- .../room/typing/DefaultTypingService.kt | 15 +------ vector/build.gradle | 2 +- .../java/im/vector/app/VectorApplication.kt | 2 +- .../home/room/detail/RoomDetailViewModel.kt | 11 +++++ 12 files changed, 68 insertions(+), 68 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/MatrixConfiguration.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/MatrixConfiguration.kt index c01aeab6dd..9f651a21fa 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/MatrixConfiguration.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/MatrixConfiguration.kt @@ -17,7 +17,6 @@ package org.matrix.android.sdk.api import org.matrix.android.sdk.api.crypto.MXCryptoConfig -import org.matrix.android.sdk.api.crypto.OutboundSessionKeySharingStrategy import java.net.Proxy data class MatrixConfiguration( diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/crypto/RoomCryptoService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/crypto/RoomCryptoService.kt index 1251fd9857..bb157ec7ee 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/crypto/RoomCryptoService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/crypto/RoomCryptoService.kt @@ -30,4 +30,11 @@ interface RoomCryptoService { * Enable encryption of the room */ suspend fun enableEncryption(algorithm: String = MXCRYPTO_ALGORITHM_MEGOLM) + + /** + * Ensures all members of the room are loaded and outbound session keys are shared. + * Call this method according to [OutboundSessionKeySharingStrategy]. + * If this method is not called, CryptoService will ensure it before sending events. + */ + fun ensureOutboundSession() } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt index 72cf8b261d..1a90377664 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt @@ -50,6 +50,7 @@ import org.matrix.android.sdk.api.session.room.model.Membership import org.matrix.android.sdk.api.session.room.model.RoomHistoryVisibility import org.matrix.android.sdk.api.session.room.model.RoomHistoryVisibilityContent import org.matrix.android.sdk.api.session.room.model.RoomMemberContent +import org.matrix.android.sdk.api.util.emptyJsonDict import org.matrix.android.sdk.internal.crypto.actions.MegolmSessionDataImporter import org.matrix.android.sdk.internal.crypto.actions.SetDeviceVerificationAction import org.matrix.android.sdk.internal.crypto.algorithms.IMXEncrypting @@ -709,7 +710,7 @@ internal class DefaultCryptoService @Inject constructor( */ @Throws(MXCryptoError::class) private fun internalDecryptEvent(event: Event, timeline: String): MXEventDecryptionResult { - return eventDecryptor.decryptEvent(event, timeline) + return eventDecryptor.decryptEvent(event, timeline) } /** @@ -1297,22 +1298,31 @@ internal class DefaultCryptoService @Inject constructor( } override fun ensureOutboundSession(roomId: String) { + // Ensure to load all room members + loadRoomMembersTask + .configureWith(LoadRoomMembersTask.Params(roomId)) { + this.callback = NoOpMatrixCallback() + } + .executeBy(taskExecutor) + cryptoCoroutineScope.launch(coroutineDispatchers.crypto) { - roomEncryptorsStore - .get(roomId) - ?.let { - getEncryptionAlgorithm(roomId)?.let { safeAlgorithm -> - val userIds = getRoomUserIds(roomId) - if (setEncryptionInRoom(roomId, safeAlgorithm, false, userIds)) { - val roomEncryptor = roomEncryptorsStore.get(roomId) - if (roomEncryptor is IMXGroupEncryption) { - roomEncryptor.ensureOutboundSession(getRoomUserIds(roomId)) - } else { - Timber.e("## CRYPTO | ensureOutboundSession() for:$roomId: Unable to handle IMXGroupEncryption for $safeAlgorithm") - } - } - } - } + val userIds = getRoomUserIds(roomId) + val alg = roomEncryptorsStore.get(roomId) + ?: getEncryptionAlgorithm(roomId) + ?.let { setEncryptionInRoom(roomId, it, false, userIds) } + ?.let { roomEncryptorsStore.get(roomId) } + + if (alg == null) { + val reason = String.format(MXCryptoError.UNABLE_TO_ENCRYPT_REASON, MXCryptoError.NO_MORE_ALGORITHM_REASON) + Timber.e("## CRYPTO | encryptEventContent() : $reason") + return@launch + } + + runCatching { + alg.encryptEventContent(emptyJsonDict, EventType.DUMMY, userIds) + }.onFailure { + Timber.e("## CRYPTO | encryptEventContent() failed.") + } } } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/IMXGroupEncryption.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/IMXGroupEncryption.kt index 97b005659d..2d0cf4bc01 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/IMXGroupEncryption.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/IMXGroupEncryption.kt @@ -47,11 +47,4 @@ internal interface IMXGroupEncryption { userId: String, deviceId: String, senderKey: String): Boolean - - /** - * Ensure the outbound session - * - * @param usersInRoom the users in the room - */ - suspend fun ensureOutboundSession(usersInRoom: List) } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryption.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryption.kt index be85fcec8e..db4f7279c6 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryption.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryption.kt @@ -138,10 +138,11 @@ internal class MXMegolmEncryption( return MXOutboundSessionInfo(sessionId, SharedWithHelper(roomId, sessionId, cryptoStore)) } - override suspend fun ensureOutboundSession(usersInRoom: List) { - ensureOutboundSession(getDevicesInRoom(usersInRoom).allowedDevices) - } - + /** + * Ensure the outbound session + * + * @param devicesInRoom the devices list + */ private suspend fun ensureOutboundSession(devicesInRoom: MXUsersDevicesMap): MXOutboundSessionInfo { Timber.v("## CRYPTO | ensureOutboundSession start") var session = outboundSession diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoom.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoom.kt index 7a819250cf..a2b7a37b9b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoom.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoom.kt @@ -104,6 +104,10 @@ internal class DefaultRoom @Inject constructor(override val roomId: String, return cryptoService.shouldEncryptForInvitedMembers(roomId) } + override fun ensureOutboundSession() { + cryptoService.ensureOutboundSession(roomId) + } + override suspend fun enableEncryption(algorithm: String) { when { isEncrypted() -> { diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoomService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoomService.kt index c60150004f..383dd876d3 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoomService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoomService.kt @@ -20,11 +20,6 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.Transformations import com.zhuinden.monarchy.Monarchy import org.matrix.android.sdk.api.MatrixCallback -import org.matrix.android.sdk.api.MatrixConfiguration -import org.matrix.android.sdk.api.NoOpMatrixCallback -import org.matrix.android.sdk.api.crypto.OutboundSessionKeySharingStrategy -import org.matrix.android.sdk.api.extensions.orFalse -import org.matrix.android.sdk.api.session.crypto.CryptoService import org.matrix.android.sdk.api.session.events.model.Event import org.matrix.android.sdk.api.session.room.Room import org.matrix.android.sdk.api.session.room.RoomService @@ -44,7 +39,6 @@ import org.matrix.android.sdk.internal.session.room.alias.DeleteRoomAliasTask import org.matrix.android.sdk.internal.session.room.alias.GetRoomIdByAliasTask import org.matrix.android.sdk.internal.session.room.alias.RoomAliasDescription import org.matrix.android.sdk.internal.session.room.create.CreateRoomTask -import org.matrix.android.sdk.internal.session.room.membership.LoadRoomMembersTask import org.matrix.android.sdk.internal.session.room.membership.RoomChangeMembershipStateDataSource import org.matrix.android.sdk.internal.session.room.membership.RoomMemberHelper import org.matrix.android.sdk.internal.session.room.membership.joining.JoinRoomTask @@ -71,10 +65,7 @@ internal class DefaultRoomService @Inject constructor( private val roomGetter: RoomGetter, private val roomSummaryDataSource: RoomSummaryDataSource, private val roomChangeMembershipStateDataSource: RoomChangeMembershipStateDataSource, - private val taskExecutor: TaskExecutor, - private val loadRoomMembersTask: LoadRoomMembersTask, - private val matrixConfiguration: MatrixConfiguration, - private val cryptoService: CryptoService + private val taskExecutor: TaskExecutor ) : RoomService { override fun createRoom(createRoomParams: CreateRoomParams, callback: MatrixCallback): Cancelable { @@ -114,18 +105,6 @@ internal class DefaultRoomService @Inject constructor( } override fun onRoomDisplayed(roomId: String): Cancelable { - // Ensure to load all room members - loadRoomMembersTask - .configureWith(LoadRoomMembersTask.Params(roomId)) { - this.callback = NoOpMatrixCallback() - } - .executeBy(taskExecutor) - - // Ensure to share the outbound session keys with all members - if (roomGetter.getRoom(roomId)?.isEncrypted().orFalse() - && matrixConfiguration.outboundSessionKeySharingStrategy == OutboundSessionKeySharingStrategy.WhenEnteringRoom) { - cryptoService.ensureOutboundSession(roomId) - } return updateBreadcrumbsTask .configureWith(UpdateBreadcrumbsTask.Params(roomId)) .executeBy(taskExecutor) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultTimeline.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultTimeline.kt index 1be5d55cad..ca272a3520 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultTimeline.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultTimeline.kt @@ -24,6 +24,7 @@ import io.realm.RealmQuery import io.realm.RealmResults import io.realm.Sort import org.matrix.android.sdk.api.MatrixCallback +import org.matrix.android.sdk.api.NoOpMatrixCallback import org.matrix.android.sdk.api.extensions.orFalse import org.matrix.android.sdk.api.extensions.tryOrNull import org.matrix.android.sdk.api.session.events.model.EventType @@ -49,6 +50,7 @@ import org.matrix.android.sdk.internal.database.query.filterEvents import org.matrix.android.sdk.internal.database.query.findAllInRoomWithSendStates import org.matrix.android.sdk.internal.database.query.where import org.matrix.android.sdk.internal.database.query.whereRoomId +import org.matrix.android.sdk.internal.session.room.membership.LoadRoomMembersTask import org.matrix.android.sdk.internal.task.TaskExecutor import org.matrix.android.sdk.internal.task.configureWith import org.matrix.android.sdk.internal.util.Debouncer @@ -77,8 +79,9 @@ internal class DefaultTimeline( private val hiddenReadReceipts: TimelineHiddenReadReceipts, private val timelineInput: TimelineInput, private val eventDecryptor: TimelineEventDecryptor, - private val realmSessionProvider: RealmSessionProvider - ) : Timeline, + private val realmSessionProvider: RealmSessionProvider, + private val loadRoomMembersTask: LoadRoomMembersTask +) : Timeline, TimelineHiddenReadReceipts.Delegate, TimelineInput.Listener { @@ -179,6 +182,12 @@ internal class DefaultTimeline( hiddenReadReceipts.start(realm, filteredEvents, nonFilteredEvents, this) } + loadRoomMembersTask + .configureWith(LoadRoomMembersTask.Params(roomId)) { + this.callback = NoOpMatrixCallback() + } + .executeBy(taskExecutor) + isReady.set(true) } } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/typing/DefaultTypingService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/typing/DefaultTypingService.kt index 279ab3f334..39b7967bc1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/typing/DefaultTypingService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/typing/DefaultTypingService.kt @@ -21,13 +21,8 @@ import dagger.assisted.Assisted import dagger.assisted.AssistedInject import dagger.assisted.AssistedFactory import org.matrix.android.sdk.api.MatrixCallback -import org.matrix.android.sdk.api.MatrixConfiguration -import org.matrix.android.sdk.api.crypto.OutboundSessionKeySharingStrategy -import org.matrix.android.sdk.api.extensions.orFalse -import org.matrix.android.sdk.api.session.crypto.CryptoService import org.matrix.android.sdk.api.session.room.typing.TypingService import org.matrix.android.sdk.api.util.Cancelable -import org.matrix.android.sdk.internal.session.room.RoomGetter import org.matrix.android.sdk.internal.task.TaskExecutor import org.matrix.android.sdk.internal.task.configureWith import timber.log.Timber @@ -41,10 +36,7 @@ import timber.log.Timber internal class DefaultTypingService @AssistedInject constructor( @Assisted private val roomId: String, private val taskExecutor: TaskExecutor, - private val sendTypingTask: SendTypingTask, - private val matrixConfiguration: MatrixConfiguration, - private val cryptoService: CryptoService, - private val roomGetter: RoomGetter + private val sendTypingTask: SendTypingTask ) : TypingService { @AssistedFactory @@ -77,11 +69,6 @@ internal class DefaultTypingService @AssistedInject constructor( currentTask?.cancel() - if (roomGetter.getRoom(roomId)?.isEncrypted().orFalse() - && matrixConfiguration.outboundSessionKeySharingStrategy == OutboundSessionKeySharingStrategy.WhenTyping) { - cryptoService.ensureOutboundSession(roomId) - } - val params = SendTypingTask.Params(roomId, true) currentTask = sendTypingTask .configureWith(params) diff --git a/vector/build.gradle b/vector/build.gradle index a257f6aaf6..c539ebb648 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -136,7 +136,7 @@ android { buildConfigField "String", "BUILD_NUMBER", "\"${buildNumber}\"" resValue "string", "build_number", "\"${buildNumber}\"" - buildConfigField "org.matrix.android.sdk.api.crypto.OutboundSessionKeySharingStrategy", "OutboundSessionKeySharingStrategy", "org.matrix.android.sdk.api.crypto.OutboundSessionKeySharingStrategy.WhenTyping" + buildConfigField "org.matrix.android.sdk.api.crypto.OutboundSessionKeySharingStrategy", "outboundSessionKeySharingStrategy", "org.matrix.android.sdk.api.crypto.OutboundSessionKeySharingStrategy.WhenTyping" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/vector/src/main/java/im/vector/app/VectorApplication.kt b/vector/src/main/java/im/vector/app/VectorApplication.kt index 1926a35c9c..dd94be77ba 100644 --- a/vector/src/main/java/im/vector/app/VectorApplication.kt +++ b/vector/src/main/java/im/vector/app/VectorApplication.kt @@ -205,7 +205,7 @@ class VectorApplication : } } - override fun providesMatrixConfiguration() = MatrixConfiguration(applicationFlavor = BuildConfig.FLAVOR_DESCRIPTION, outboundSessionKeySharingStrategy = BuildConfig.OutboundSessionKeySharingStrategy) + override fun providesMatrixConfiguration() = MatrixConfiguration(applicationFlavor = BuildConfig.FLAVOR_DESCRIPTION) override fun getWorkManagerConfiguration(): WorkConfiguration { return WorkConfiguration.Builder() diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt index 601891b15a..099f2eefff 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt @@ -28,6 +28,7 @@ import com.jakewharton.rxrelay2.PublishRelay import dagger.assisted.Assisted import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject +import im.vector.app.BuildConfig import im.vector.app.R import im.vector.app.core.extensions.exhaustive import im.vector.app.core.platform.VectorViewModel @@ -60,6 +61,7 @@ import org.commonmark.renderer.html.HtmlRenderer import org.matrix.android.sdk.api.MatrixCallback import org.matrix.android.sdk.api.MatrixPatterns import org.matrix.android.sdk.api.NoOpMatrixCallback +import org.matrix.android.sdk.api.crypto.OutboundSessionKeySharingStrategy import org.matrix.android.sdk.api.extensions.tryOrNull import org.matrix.android.sdk.api.query.QueryStringValue import org.matrix.android.sdk.api.raw.RawService @@ -179,6 +181,11 @@ class RoomDetailViewModel @AssistedInject constructor( callManager.addPstnSupportListener(this) callManager.checkForPSTNSupportIfNeeded() chatEffectManager.delegate = this + + // Ensure to share the outbound session keys with all members + if (room.isEncrypted() && BuildConfig.outboundSessionKeySharingStrategy == OutboundSessionKeySharingStrategy.WhenEnteringRoom) { + room.ensureOutboundSession() + } } private fun observePowerLevel() { @@ -591,6 +598,10 @@ class RoomDetailViewModel @AssistedInject constructor( room.userStopsTyping() } } + // Ensure outbound session keys + if (room.isEncrypted() && BuildConfig.outboundSessionKeySharingStrategy == OutboundSessionKeySharingStrategy.WhenTyping) { + room.ensureOutboundSession() + } } private fun handleTombstoneEvent(action: RoomDetailAction.HandleTombstoneEvent) { From 8b39eabc0fae60f7f7fa16ea6bbd09d064068688 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Mon, 8 Feb 2021 17:26:09 +0300 Subject: [PATCH 149/578] Code review fixes. --- .../sdk/internal/crypto/DefaultCryptoService.kt | 14 +++++++------- vector/build.gradle | 2 +- .../OutboundSessionKeySharingStrategy.kt | 2 +- .../home/room/detail/RoomDetailViewModel.kt | 4 ++-- 4 files changed, 11 insertions(+), 11 deletions(-) rename {matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/crypto => vector/src/main/java/im/vector/app/features/crypto/keysrequest}/OutboundSessionKeySharingStrategy.kt (95%) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt index 1a90377664..14542a1ea8 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt @@ -1298,14 +1298,14 @@ internal class DefaultCryptoService @Inject constructor( } override fun ensureOutboundSession(roomId: String) { - // Ensure to load all room members - loadRoomMembersTask - .configureWith(LoadRoomMembersTask.Params(roomId)) { - this.callback = NoOpMatrixCallback() - } - .executeBy(taskExecutor) - cryptoCoroutineScope.launch(coroutineDispatchers.crypto) { + // Ensure to load all room members + loadRoomMembersTask + .configureWith(LoadRoomMembersTask.Params(roomId)) { + this.callback = NoOpMatrixCallback() + } + .executeBy(taskExecutor) + val userIds = getRoomUserIds(roomId) val alg = roomEncryptorsStore.get(roomId) ?: getEncryptionAlgorithm(roomId) diff --git a/vector/build.gradle b/vector/build.gradle index c539ebb648..dc2a16ccc5 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -136,7 +136,7 @@ android { buildConfigField "String", "BUILD_NUMBER", "\"${buildNumber}\"" resValue "string", "build_number", "\"${buildNumber}\"" - buildConfigField "org.matrix.android.sdk.api.crypto.OutboundSessionKeySharingStrategy", "outboundSessionKeySharingStrategy", "org.matrix.android.sdk.api.crypto.OutboundSessionKeySharingStrategy.WhenTyping" + buildConfigField "im.vector.app.features.crypto.keysrequest.OutboundSessionKeySharingStrategy", "outboundSessionKeySharingStrategy", "im.vector.app.features.crypto.keysrequest.OutboundSessionKeySharingStrategy.WhenTyping" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/crypto/OutboundSessionKeySharingStrategy.kt b/vector/src/main/java/im/vector/app/features/crypto/keysrequest/OutboundSessionKeySharingStrategy.kt similarity index 95% rename from matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/crypto/OutboundSessionKeySharingStrategy.kt rename to vector/src/main/java/im/vector/app/features/crypto/keysrequest/OutboundSessionKeySharingStrategy.kt index 9ef1f538b8..e797f4622c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/crypto/OutboundSessionKeySharingStrategy.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/keysrequest/OutboundSessionKeySharingStrategy.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.matrix.android.sdk.api.crypto +package im.vector.app.features.crypto.keysrequest enum class OutboundSessionKeySharingStrategy { /** diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt index 099f2eefff..ea5787de46 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt @@ -61,7 +61,7 @@ import org.commonmark.renderer.html.HtmlRenderer import org.matrix.android.sdk.api.MatrixCallback import org.matrix.android.sdk.api.MatrixPatterns import org.matrix.android.sdk.api.NoOpMatrixCallback -import org.matrix.android.sdk.api.crypto.OutboundSessionKeySharingStrategy +import im.vector.app.features.crypto.keysrequest.OutboundSessionKeySharingStrategy import org.matrix.android.sdk.api.extensions.tryOrNull import org.matrix.android.sdk.api.query.QueryStringValue import org.matrix.android.sdk.api.raw.RawService @@ -599,7 +599,7 @@ class RoomDetailViewModel @AssistedInject constructor( } } // Ensure outbound session keys - if (room.isEncrypted() && BuildConfig.outboundSessionKeySharingStrategy == OutboundSessionKeySharingStrategy.WhenTyping) { + if (action.isTyping && room.isEncrypted() && BuildConfig.outboundSessionKeySharingStrategy == OutboundSessionKeySharingStrategy.WhenTyping) { room.ensureOutboundSession() } } From 11dffacc485e196baa9a3a71a7f4eab4e7a980ca Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Mon, 8 Feb 2021 17:39:25 +0300 Subject: [PATCH 150/578] Code review fixes. --- .../android/sdk/internal/crypto/DefaultCryptoService.kt | 6 +----- .../crypto/keysrequest/OutboundSessionKeySharingStrategy.kt | 2 +- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt index 14542a1ea8..08991b2d5f 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt @@ -1300,11 +1300,7 @@ internal class DefaultCryptoService @Inject constructor( override fun ensureOutboundSession(roomId: String) { cryptoCoroutineScope.launch(coroutineDispatchers.crypto) { // Ensure to load all room members - loadRoomMembersTask - .configureWith(LoadRoomMembersTask.Params(roomId)) { - this.callback = NoOpMatrixCallback() - } - .executeBy(taskExecutor) + loadRoomMembersTask.execute(LoadRoomMembersTask.Params(roomId)) val userIds = getRoomUserIds(roomId) val alg = roomEncryptorsStore.get(roomId) diff --git a/vector/src/main/java/im/vector/app/features/crypto/keysrequest/OutboundSessionKeySharingStrategy.kt b/vector/src/main/java/im/vector/app/features/crypto/keysrequest/OutboundSessionKeySharingStrategy.kt index e797f4622c..19c62ed572 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/keysrequest/OutboundSessionKeySharingStrategy.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/keysrequest/OutboundSessionKeySharingStrategy.kt @@ -1,5 +1,5 @@ /* - * Copyright 2020 The Matrix.org Foundation C.I.C. + * Copyright (c) 2021 New Vector Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From fae484cb9593f385fc5c868246f4e526ec621de9 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Tue, 9 Feb 2021 22:37:48 +0300 Subject: [PATCH 151/578] Create test for ensureOutboundSession function. --- .../sdk/internal/crypto/CryptoServiceTest.kt | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/CryptoServiceTest.kt diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/CryptoServiceTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/CryptoServiceTest.kt new file mode 100644 index 0000000000..6467705b01 --- /dev/null +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/CryptoServiceTest.kt @@ -0,0 +1,62 @@ +/* + * Copyright 2020 The Matrix.org Foundation C.I.C. + * + * 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. + */ + +package org.matrix.android.sdk.internal.crypto + +import androidx.test.ext.junit.runners.AndroidJUnit4 +import org.junit.FixMethodOrder +import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.MethodSorters +import org.matrix.android.sdk.InstrumentedTest +import org.matrix.android.sdk.common.CommonTestHelper +import org.matrix.android.sdk.common.CryptoTestHelper +import org.matrix.android.sdk.common.SessionTestParams +import org.matrix.android.sdk.common.TestConstants +import kotlin.test.assertTrue + +@RunWith(AndroidJUnit4::class) +@FixMethodOrder(MethodSorters.JVM) +class CryptoServiceTest : InstrumentedTest { + + private val mTestHelper = CommonTestHelper(context()) + private val mCryptoTestHelper = CryptoTestHelper(mTestHelper) + + @Test + fun ensure_outbound_session_happy_path() { + val aliceSession = mTestHelper.createAccount(TestConstants.USER_ALICE, SessionTestParams(true)) + val bobSession = mTestHelper.createAccount(TestConstants.USER_ALICE, SessionTestParams(true)) + + // Initialize cross signing on both + mCryptoTestHelper.initializeCrossSigning(aliceSession) + mCryptoTestHelper.initializeCrossSigning(bobSession) + + val roomId = mCryptoTestHelper.createDM(aliceSession, bobSession) + mCryptoTestHelper.verifySASCrossSign(aliceSession, bobSession, roomId) + + aliceSession.cryptoService().ensureOutboundSession(roomId) + + assertTrue( + aliceSession + .cryptoService() + .getGossipingEvents() + .map { it.senderId } + .containsAll( + listOf(aliceSession.myUserId, bobSession.myUserId) + ) + ) + } +} From 4450f51d7846f7bd8462592c4a27f812d8782a1b Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Wed, 10 Feb 2021 11:53:47 +0300 Subject: [PATCH 152/578] runCatching added to loadMembersTask execution. --- .../android/sdk/internal/crypto/DefaultCryptoService.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt index 08991b2d5f..e254be74ed 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt @@ -1300,7 +1300,9 @@ internal class DefaultCryptoService @Inject constructor( override fun ensureOutboundSession(roomId: String) { cryptoCoroutineScope.launch(coroutineDispatchers.crypto) { // Ensure to load all room members - loadRoomMembersTask.execute(LoadRoomMembersTask.Params(roomId)) + runCatching { + loadRoomMembersTask.execute(LoadRoomMembersTask.Params(roomId)) + } val userIds = getRoomUserIds(roomId) val alg = roomEncryptorsStore.get(roomId) From 533a7bb180669ee5347a17126bc23a56f1e66946 Mon Sep 17 00:00:00 2001 From: Valere Date: Wed, 17 Feb 2021 16:47:40 +0100 Subject: [PATCH 153/578] Code Review --- .../sdk/internal/crypto/CryptoServiceTest.kt | 62 ----------- .../sdk/internal/crypto/PreShareKeysTest.kt | 103 ++++++++++++++++++ .../crypto/gossiping/WithHeldTests.kt | 2 +- .../android/sdk/api/MatrixConfiguration.kt | 1 - .../sdk/api/session/crypto/CryptoService.kt | 6 +- .../session/room/crypto/RoomCryptoService.kt | 2 +- .../internal/crypto/DefaultCryptoService.kt | 26 +++-- .../sdk/internal/crypto/EventDecryptor.kt | 2 +- .../crypto/algorithms/IMXGroupEncryption.kt | 2 + .../algorithms/megolm/MXMegolmEncryption.kt | 21 +++- .../sdk/internal/session/room/DefaultRoom.kt | 7 +- .../home/room/detail/RoomDetailAction.kt | 2 + .../home/room/detail/RoomDetailFragment.kt | 7 ++ .../home/room/detail/RoomDetailViewModel.kt | 39 ++++++- 14 files changed, 197 insertions(+), 85 deletions(-) delete mode 100644 matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/CryptoServiceTest.kt create mode 100644 matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/PreShareKeysTest.kt diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/CryptoServiceTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/CryptoServiceTest.kt deleted file mode 100644 index 6467705b01..0000000000 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/CryptoServiceTest.kt +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 2020 The Matrix.org Foundation C.I.C. - * - * 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. - */ - -package org.matrix.android.sdk.internal.crypto - -import androidx.test.ext.junit.runners.AndroidJUnit4 -import org.junit.FixMethodOrder -import org.junit.Test -import org.junit.runner.RunWith -import org.junit.runners.MethodSorters -import org.matrix.android.sdk.InstrumentedTest -import org.matrix.android.sdk.common.CommonTestHelper -import org.matrix.android.sdk.common.CryptoTestHelper -import org.matrix.android.sdk.common.SessionTestParams -import org.matrix.android.sdk.common.TestConstants -import kotlin.test.assertTrue - -@RunWith(AndroidJUnit4::class) -@FixMethodOrder(MethodSorters.JVM) -class CryptoServiceTest : InstrumentedTest { - - private val mTestHelper = CommonTestHelper(context()) - private val mCryptoTestHelper = CryptoTestHelper(mTestHelper) - - @Test - fun ensure_outbound_session_happy_path() { - val aliceSession = mTestHelper.createAccount(TestConstants.USER_ALICE, SessionTestParams(true)) - val bobSession = mTestHelper.createAccount(TestConstants.USER_ALICE, SessionTestParams(true)) - - // Initialize cross signing on both - mCryptoTestHelper.initializeCrossSigning(aliceSession) - mCryptoTestHelper.initializeCrossSigning(bobSession) - - val roomId = mCryptoTestHelper.createDM(aliceSession, bobSession) - mCryptoTestHelper.verifySASCrossSign(aliceSession, bobSession, roomId) - - aliceSession.cryptoService().ensureOutboundSession(roomId) - - assertTrue( - aliceSession - .cryptoService() - .getGossipingEvents() - .map { it.senderId } - .containsAll( - listOf(aliceSession.myUserId, bobSession.myUserId) - ) - ) - } -} diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/PreShareKeysTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/PreShareKeysTest.kt new file mode 100644 index 0000000000..122584142e --- /dev/null +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/PreShareKeysTest.kt @@ -0,0 +1,103 @@ +/* + * Copyright 2020 The Matrix.org Foundation C.I.C. + * + * 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. + */ + +package org.matrix.android.sdk.internal.crypto + +import android.util.Log +import androidx.test.ext.junit.runners.AndroidJUnit4 +import org.junit.FixMethodOrder +import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.MethodSorters +import org.matrix.android.sdk.InstrumentedTest +import org.matrix.android.sdk.api.session.events.model.EventType +import org.matrix.android.sdk.api.session.events.model.toModel +import org.matrix.android.sdk.common.CommonTestHelper +import org.matrix.android.sdk.common.CryptoTestHelper +import org.matrix.android.sdk.internal.crypto.model.event.EncryptedEventContent +import org.matrix.android.sdk.internal.crypto.model.event.RoomKeyContent +import kotlin.test.assertEquals +import kotlin.test.assertNotNull + +@RunWith(AndroidJUnit4::class) +@FixMethodOrder(MethodSorters.JVM) +class PreShareKeysTest : InstrumentedTest { + + private val mTestHelper = CommonTestHelper(context()) + private val mCryptoTestHelper = CryptoTestHelper(mTestHelper) + + @Test + fun ensure_outbound_session_happy_path() { + val testData = mCryptoTestHelper.doE2ETestWithAliceAndBobInARoom(true) + val e2eRoomID = testData.roomId + val aliceSession = testData.firstSession + val bobSession = testData.secondSession!! + + // clear any outbound session + aliceSession.cryptoService().discardOutboundSession(e2eRoomID) + + val preShareCount = bobSession.cryptoService().getGossipingEvents().count { + it.senderId == aliceSession.myUserId + && it.getClearType() == EventType.ROOM_KEY + } + + assertEquals(0, preShareCount, "Bob should not have receive any key from alice at this point") + Log.d("#Test", "Room Key Received from alice $preShareCount") + + // Force presharing of new outbound key + mTestHelper.doSync { + aliceSession.cryptoService().prepareToEncrypt(e2eRoomID, it) + } + + mTestHelper.waitWithLatch { latch -> + mTestHelper.retryPeriodicallyWithLatch(latch) { + val newGossipCount = bobSession.cryptoService().getGossipingEvents().count { + it.senderId == aliceSession.myUserId + && it.getClearType() == EventType.ROOM_KEY + } + newGossipCount > preShareCount + } + } + + val latest = bobSession.cryptoService().getGossipingEvents().lastOrNull { + it.senderId == aliceSession.myUserId + && it.getClearType() == EventType.ROOM_KEY + } + + val content = latest?.getClearContent().toModel() + assertNotNull(content, "Bob should have received and decrypted a room key event from alice") + assertEquals(e2eRoomID, content.roomId, "Wrong room") + val megolmSessionId = content.sessionId!! + + val sharedIndex = aliceSession.cryptoService().getSharedWithInfo(e2eRoomID, megolmSessionId) + .getObject(bobSession.myUserId, bobSession.sessionParams.deviceId) + + assertEquals(0, sharedIndex, "The session received by bob should match what alice sent") + + // Just send a real message as test + val sentEvent = mTestHelper.sendTextMessage(aliceSession.getRoom(e2eRoomID)!!, "Allo", 1).first() + + assertEquals(megolmSessionId, sentEvent.root.content.toModel()?.sessionId, "Unexpected megolm session") + mTestHelper.waitWithLatch { latch -> + mTestHelper.retryPeriodicallyWithLatch(latch) { + bobSession.getRoom(e2eRoomID)?.getTimeLineEvent(sentEvent.eventId)?.root?.getClearType() == EventType.MESSAGE + } + } + + mTestHelper.signOutAndClose(aliceSession) + mTestHelper.signOutAndClose(bobSession) + } +} diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/gossiping/WithHeldTests.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/gossiping/WithHeldTests.kt index 80cc14fcb6..b2516ea2be 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/gossiping/WithHeldTests.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/gossiping/WithHeldTests.kt @@ -51,7 +51,7 @@ class WithHeldTests : InstrumentedTest { // ============================= val aliceSession = mTestHelper.createAccount(TestConstants.USER_ALICE, SessionTestParams(true)) - val bobSession = mTestHelper.createAccount(TestConstants.USER_ALICE, SessionTestParams(true)) + val bobSession = mTestHelper.createAccount(TestConstants.USER_BOB, SessionTestParams(true)) // Initialize cross signing on both mCryptoTestHelper.initializeCrossSigning(aliceSession) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/MatrixConfiguration.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/MatrixConfiguration.kt index 9f651a21fa..93a1b962ed 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/MatrixConfiguration.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/MatrixConfiguration.kt @@ -40,7 +40,6 @@ data class MatrixConfiguration( * True to advertise support for call transfers to other parties on Matrix calls. */ val supportsCallTransfer: Boolean = false - val outboundSessionKeySharingStrategy: OutboundSessionKeySharingStrategy = OutboundSessionKeySharingStrategy.WhenSendingEvent ) { /** diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/CryptoService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/CryptoService.kt index 1c5bfb1a7b..1b7a5243e2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/CryptoService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/CryptoService.kt @@ -157,5 +157,9 @@ interface CryptoService { fun logDbUsageInfo() - fun ensureOutboundSession(roomId: String) + /** + * Perform any background tasks that can be done before a message is ready to + * send, in order to speed up sending of the message. + */ + fun prepareToEncrypt(roomId: String, callback: MatrixCallback) } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/crypto/RoomCryptoService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/crypto/RoomCryptoService.kt index bb157ec7ee..d8bec878a1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/crypto/RoomCryptoService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/crypto/RoomCryptoService.kt @@ -36,5 +36,5 @@ interface RoomCryptoService { * Call this method according to [OutboundSessionKeySharingStrategy]. * If this method is not called, CryptoService will ensure it before sending events. */ - fun ensureOutboundSession() + suspend fun prepareToEncrypt() } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt index e254be74ed..17d25736eb 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt @@ -50,7 +50,6 @@ import org.matrix.android.sdk.api.session.room.model.Membership import org.matrix.android.sdk.api.session.room.model.RoomHistoryVisibility import org.matrix.android.sdk.api.session.room.model.RoomHistoryVisibilityContent import org.matrix.android.sdk.api.session.room.model.RoomMemberContent -import org.matrix.android.sdk.api.util.emptyJsonDict import org.matrix.android.sdk.internal.crypto.actions.MegolmSessionDataImporter import org.matrix.android.sdk.internal.crypto.actions.SetDeviceVerificationAction import org.matrix.android.sdk.internal.crypto.algorithms.IMXEncrypting @@ -99,7 +98,6 @@ import org.matrix.olm.OlmManager import timber.log.Timber import java.util.concurrent.atomic.AtomicBoolean import javax.inject.Inject -import kotlin.jvm.Throws import kotlin.math.max /** @@ -1297,11 +1295,16 @@ internal class DefaultCryptoService @Inject constructor( cryptoStore.logDbUsageInfo() } - override fun ensureOutboundSession(roomId: String) { + override fun prepareToEncrypt(roomId: String, callback: MatrixCallback) { cryptoCoroutineScope.launch(coroutineDispatchers.crypto) { + Timber.d("## CRYPTO | prepareToEncrypt() : Check room members up to date") // Ensure to load all room members - runCatching { + try { loadRoomMembersTask.execute(LoadRoomMembersTask.Params(roomId)) + } catch (failure: Throwable) { + Timber.e("## CRYPTO | prepareToEncrypt() : Failed to load room members") + callback.onFailure(failure) + return@launch } val userIds = getRoomUserIds(roomId) @@ -1312,15 +1315,20 @@ internal class DefaultCryptoService @Inject constructor( if (alg == null) { val reason = String.format(MXCryptoError.UNABLE_TO_ENCRYPT_REASON, MXCryptoError.NO_MORE_ALGORITHM_REASON) - Timber.e("## CRYPTO | encryptEventContent() : $reason") + Timber.e("## CRYPTO | prepareToEncrypt() : $reason") + callback.onFailure(IllegalArgumentException("Missing algorithm")) return@launch } runCatching { - alg.encryptEventContent(emptyJsonDict, EventType.DUMMY, userIds) - }.onFailure { - Timber.e("## CRYPTO | encryptEventContent() failed.") - } + (alg as? IMXGroupEncryption)?.preshareKey(userIds) + }.fold( + { callback.onSuccess(Unit) }, + { + Timber.e("## CRYPTO | prepareToEncrypt() failed.") + callback.onFailure(it) + } + ) } } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/EventDecryptor.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/EventDecryptor.kt index 92b7728890..32324896fa 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/EventDecryptor.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/EventDecryptor.kt @@ -105,7 +105,7 @@ internal class EventDecryptor @Inject constructor( try { return alg.decryptEvent(event, timeline) } catch (mxCryptoError: MXCryptoError) { - Timber.d("## CRYPTO | internalDecryptEvent : Failed to decrypt ${event.eventId} reason: $mxCryptoError") + Timber.v("## CRYPTO | internalDecryptEvent : Failed to decrypt ${event.eventId} reason: $mxCryptoError") if (algorithm == MXCRYPTO_ALGORITHM_OLM) { if (mxCryptoError is MXCryptoError.Base && mxCryptoError.errorType == MXCryptoError.ErrorType.BAD_ENCRYPTED_MESSAGE) { diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/IMXGroupEncryption.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/IMXGroupEncryption.kt index 2d0cf4bc01..1fd5061a65 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/IMXGroupEncryption.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/IMXGroupEncryption.kt @@ -32,6 +32,8 @@ internal interface IMXGroupEncryption { */ fun discardSessionKey() + suspend fun preshareKey(userIds: List) + /** * Re-shares a session key with devices if the key has already been * sent to them. diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryption.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryption.kt index db4f7279c6..bb75d014ff 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryption.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryption.kt @@ -94,6 +94,7 @@ internal class MXMegolmEncryption( // annoyingly we have to serialize again the saved outbound session to store message index :/ // if not we would see duplicate message index errors olmDevice.storeOutboundGroupSessionForRoom(roomId, outboundSession.sessionId) + Timber.v("## CRYPTO | encryptEventContent: Finished in ${System.currentTimeMillis() - ts} millis") } } @@ -118,6 +119,16 @@ internal class MXMegolmEncryption( olmDevice.discardOutboundGroupSessionForRoom(roomId) } + override suspend fun preshareKey(userIds: List) { + val ts = System.currentTimeMillis() + Timber.v("## CRYPTO | preshareKey : getDevicesInRoom") + val devices = getDevicesInRoom(userIds) + val outboundSession = ensureOutboundSession(devices.allowedDevices) + + notifyWithheldForSession(devices.withHeldDevices, outboundSession) + + Timber.v("## CRYPTO | preshareKey ${System.currentTimeMillis() - ts} millis") + } /** * Prepare a new session. * @@ -253,7 +264,7 @@ internal class MXMegolmEncryption( continue } - Timber.i("## CRYPTO | shareUserDevicesKey() : Sharing keys with device $userId:$deviceID") + Timber.i("## CRYPTO | shareUserDevicesKey() : Add to share keys contentMap for $userId:$deviceID") contentMap.setObject(userId, deviceID, messageEncrypter.encryptMessage(payload, listOf(sessionResult.deviceInfo))) haveTargets = true } @@ -264,10 +275,12 @@ internal class MXMegolmEncryption( // attempted to share with) rather than the contentMap (those we did // share with), because we don't want to try to claim a one-time-key // for dead devices on every message. + val gossipingEventBuffer = arrayListOf() for ((userId, devicesToShareWith) in devicesByUser) { for ((deviceId) in devicesToShareWith) { session.sharedWithHelper.markedSessionAsShared(userId, deviceId, chainIndex) - cryptoStore.saveGossipingEvent(Event( + gossipingEventBuffer.add( + Event( type = EventType.ROOM_KEY, senderId = credentials.userId, content = submap.apply { @@ -279,6 +292,8 @@ internal class MXMegolmEncryption( } } + cryptoStore.saveGossipingEvents(gossipingEventBuffer) + if (haveTargets) { t0 = System.currentTimeMillis() Timber.i("## CRYPTO | shareUserDevicesKey() ${session.sessionId} : has target") @@ -296,7 +311,7 @@ internal class MXMegolmEncryption( } private fun notifyKeyWithHeld(targets: List, sessionId: String, senderKey: String?, code: WithHeldCode) { - Timber.i("## CRYPTO | notifyKeyWithHeld() :sending withheld key for $targets session:$sessionId ") + Timber.i("## CRYPTO | notifyKeyWithHeld() :sending withheld key for $targets session:$sessionId and code $code ") val withHeldContent = RoomKeyWithHeldContent( roomId = roomId, senderKey = senderKey, diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoom.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoom.kt index a2b7a37b9b..8e817ec31a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoom.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoom.kt @@ -45,6 +45,7 @@ import org.matrix.android.sdk.internal.session.room.summary.RoomSummaryDataSourc import org.matrix.android.sdk.internal.session.search.SearchTask import org.matrix.android.sdk.internal.task.TaskExecutor import org.matrix.android.sdk.internal.task.configureWith +import org.matrix.android.sdk.internal.util.awaitCallback import java.security.InvalidParameterException import javax.inject.Inject @@ -104,8 +105,10 @@ internal class DefaultRoom @Inject constructor(override val roomId: String, return cryptoService.shouldEncryptForInvitedMembers(roomId) } - override fun ensureOutboundSession() { - cryptoService.ensureOutboundSession(roomId) + override suspend fun prepareToEncrypt() { + awaitCallback { + cryptoService.prepareToEncrypt(roomId, it) + } } override suspend fun enableEncryption(algorithm: String) { diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailAction.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailAction.kt index 98ad6c454c..efc495a379 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailAction.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailAction.kt @@ -104,4 +104,6 @@ sealed class RoomDetailAction : VectorViewModelAction { // Preview URL data class DoNotShowPreviewUrlFor(val eventId: String, val url: String) : RoomDetailAction() + + data class ComposerFocusChange(val focused: Boolean) : RoomDetailAction() } diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt index c511c9e666..d51ed08083 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt @@ -70,6 +70,7 @@ import com.airbnb.mvrx.args import com.airbnb.mvrx.fragmentViewModel import com.airbnb.mvrx.withState import com.google.android.material.snackbar.Snackbar +import com.jakewharton.rxbinding3.view.focusChanges import com.jakewharton.rxbinding3.widget.textChanges import com.vanniktech.emoji.EmojiPopup import im.vector.app.R @@ -1144,6 +1145,12 @@ class RoomDetailFragment @Inject constructor( roomDetailViewModel.handle(RoomDetailAction.UserIsTyping(it)) } .disposeOnDestroyView() + + views.composerLayout.views.composerEditText.focusChanges() + .subscribe { + roomDetailViewModel.handle(RoomDetailAction.ComposerFocusChange(it)) + } + .disposeOnDestroyView() } private fun sendUri(uri: Uri): Boolean { diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt index ea5787de46..977efebb38 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt @@ -19,9 +19,13 @@ package im.vector.app.features.home.room.detail import android.net.Uri import androidx.annotation.IdRes import androidx.lifecycle.viewModelScope +import com.airbnb.mvrx.Async +import com.airbnb.mvrx.Fail import com.airbnb.mvrx.FragmentViewModelContext +import com.airbnb.mvrx.Loading import com.airbnb.mvrx.MvRxViewModelFactory import com.airbnb.mvrx.Success +import com.airbnb.mvrx.Uninitialized import com.airbnb.mvrx.ViewModelContext import com.jakewharton.rxrelay2.BehaviorRelay import com.jakewharton.rxrelay2.PublishRelay @@ -37,6 +41,7 @@ import im.vector.app.features.call.dialpad.DialPadLookup import im.vector.app.features.call.webrtc.WebRtcCallManager import im.vector.app.features.command.CommandParser import im.vector.app.features.command.ParsedCommand +import im.vector.app.features.crypto.keysrequest.OutboundSessionKeySharingStrategy import im.vector.app.features.createdirect.DirectRoomHelper import im.vector.app.features.crypto.verification.SupportedVerificationMethodsProvider import im.vector.app.features.home.room.detail.composer.rainbow.RainbowGenerator @@ -61,7 +66,6 @@ import org.commonmark.renderer.html.HtmlRenderer import org.matrix.android.sdk.api.MatrixCallback import org.matrix.android.sdk.api.MatrixPatterns import org.matrix.android.sdk.api.NoOpMatrixCallback -import im.vector.app.features.crypto.keysrequest.OutboundSessionKeySharingStrategy import org.matrix.android.sdk.api.extensions.tryOrNull import org.matrix.android.sdk.api.query.QueryStringValue import org.matrix.android.sdk.api.raw.RawService @@ -142,6 +146,8 @@ class RoomDetailViewModel @AssistedInject constructor( private var trackUnreadMessages = AtomicBoolean(false) private var mostRecentDisplayedEvent: TimelineEvent? = null + private var prepareToEncrypt: Async = Uninitialized + @AssistedFactory interface Factory { fun create(initialState: RoomDetailViewState): RoomDetailViewModel @@ -184,7 +190,23 @@ class RoomDetailViewModel @AssistedInject constructor( // Ensure to share the outbound session keys with all members if (room.isEncrypted() && BuildConfig.outboundSessionKeySharingStrategy == OutboundSessionKeySharingStrategy.WhenEnteringRoom) { - room.ensureOutboundSession() + prepareForEncryption() + } + } + + private fun prepareForEncryption() { + // check if there is not already a call made + if (prepareToEncrypt !is Loading) { + prepareToEncrypt = Loading() + viewModelScope.launch { + kotlin.runCatching { + room.prepareToEncrypt() + }.fold({ + prepareToEncrypt = Success(Unit) + }, { + prepareToEncrypt = Fail(it) + }) + } } } @@ -241,6 +263,7 @@ class RoomDetailViewModel @AssistedInject constructor( override fun handle(action: RoomDetailAction) { when (action) { is RoomDetailAction.UserIsTyping -> handleUserIsTyping(action) + is RoomDetailAction.ComposerFocusChange -> handleComposerFocusChange(action) is RoomDetailAction.SaveDraft -> handleSaveDraft(action) is RoomDetailAction.SendMessage -> handleSendMessage(action) is RoomDetailAction.SendMedia -> handleSendMedia(action) @@ -598,9 +621,17 @@ class RoomDetailViewModel @AssistedInject constructor( room.userStopsTyping() } } + } + + private fun handleComposerFocusChange(action: RoomDetailAction.ComposerFocusChange) { // Ensure outbound session keys - if (action.isTyping && room.isEncrypted() && BuildConfig.outboundSessionKeySharingStrategy == OutboundSessionKeySharingStrategy.WhenTyping) { - room.ensureOutboundSession() + if (BuildConfig.outboundSessionKeySharingStrategy == OutboundSessionKeySharingStrategy.WhenTyping && room.isEncrypted()) { + if (action.focused) { + // Should we add some rate limit here, or do it only once per model lifecycle? + prepareForEncryption() + } else { + // we could eventually cancel here :/ + } } } From 91872fe6734c893c0b552967a77bfe0574a22958 Mon Sep 17 00:00:00 2001 From: Valere Date: Wed, 17 Feb 2021 17:08:10 +0100 Subject: [PATCH 154/578] cleaning --- .../app/features/home/room/detail/RoomDetailViewModel.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt index 977efebb38..7365801589 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt @@ -189,7 +189,7 @@ class RoomDetailViewModel @AssistedInject constructor( chatEffectManager.delegate = this // Ensure to share the outbound session keys with all members - if (room.isEncrypted() && BuildConfig.outboundSessionKeySharingStrategy == OutboundSessionKeySharingStrategy.WhenEnteringRoom) { + if (OutboundSessionKeySharingStrategy.WhenEnteringRoom == BuildConfig.outboundSessionKeySharingStrategy && room.isEncrypted()) { prepareForEncryption() } } @@ -625,7 +625,7 @@ class RoomDetailViewModel @AssistedInject constructor( private fun handleComposerFocusChange(action: RoomDetailAction.ComposerFocusChange) { // Ensure outbound session keys - if (BuildConfig.outboundSessionKeySharingStrategy == OutboundSessionKeySharingStrategy.WhenTyping && room.isEncrypted()) { + if (OutboundSessionKeySharingStrategy.WhenTyping == BuildConfig.outboundSessionKeySharingStrategy && room.isEncrypted()) { if (action.focused) { // Should we add some rate limit here, or do it only once per model lifecycle? prepareForEncryption() From 5c9750fb0741fb2db5cb818e4d3e379d85f18480 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 2 Mar 2021 19:18:19 +0100 Subject: [PATCH 155/578] Moar cleanup after rebase and before merge --- CHANGES.md | 2 +- .../session/room/crypto/RoomCryptoService.kt | 1 - .../algorithms/megolm/MXMegolmEncryption.kt | 31 ++++++++--------- .../megolm/MXMegolmEncryptionFactory.kt | 34 +++++++++---------- .../home/room/detail/RoomDetailViewModel.kt | 8 ++--- 5 files changed, 35 insertions(+), 41 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index a3eb4bfdf9..8692a2cff8 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -10,6 +10,7 @@ Improvements 🙌: - Improve initial sync performance (#983) - PIP support for Jitsi call (#2418) - Add tooltip for room quick actions + - Pre-share session keys when opening a room or start typing (#2771) Bugfix 🐛: - Try to fix crash about UrlPreview (#2640) @@ -41,7 +42,6 @@ Improvements 🙌: - Improve room profile UX - Upgrade Jitsi library from 2.9.3 to 3.1.0 - a11y improvements - - Pre-share session keys when opening a room or start typing (#2771) Bugfix 🐛: - VoIP : fix audio devices output diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/crypto/RoomCryptoService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/crypto/RoomCryptoService.kt index d8bec878a1..6581247b90 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/crypto/RoomCryptoService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/crypto/RoomCryptoService.kt @@ -33,7 +33,6 @@ interface RoomCryptoService { /** * Ensures all members of the room are loaded and outbound session keys are shared. - * Call this method according to [OutboundSessionKeySharingStrategy]. * If this method is not called, CryptoService will ensure it before sending events. */ suspend fun prepareToEncrypt() diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryption.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryption.kt index bb75d014ff..6b91c0b859 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryption.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryption.kt @@ -18,8 +18,6 @@ package org.matrix.android.sdk.internal.crypto.algorithms.megolm import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import org.matrix.android.sdk.api.MatrixCallback -import org.matrix.android.sdk.api.auth.data.Credentials import org.matrix.android.sdk.api.session.crypto.MXCryptoError import org.matrix.android.sdk.api.session.events.model.Content import org.matrix.android.sdk.api.session.events.model.Event @@ -40,8 +38,6 @@ import org.matrix.android.sdk.internal.crypto.model.forEach import org.matrix.android.sdk.internal.crypto.repository.WarnOnUnknownDeviceRepository import org.matrix.android.sdk.internal.crypto.store.IMXCryptoStore import org.matrix.android.sdk.internal.crypto.tasks.SendToDeviceTask -import org.matrix.android.sdk.internal.task.TaskExecutor -import org.matrix.android.sdk.internal.task.configureWith import org.matrix.android.sdk.internal.util.JsonCanonicalizer import org.matrix.android.sdk.internal.util.MatrixCoroutineDispatchers import org.matrix.android.sdk.internal.util.convertToUTF8 @@ -55,11 +51,11 @@ internal class MXMegolmEncryption( private val cryptoStore: IMXCryptoStore, private val deviceListManager: DeviceListManager, private val ensureOlmSessionsForDevicesAction: EnsureOlmSessionsForDevicesAction, - private val credentials: Credentials, + private val userId: String, + private val deviceId: String, private val sendToDeviceTask: SendToDeviceTask, private val messageEncrypter: MessageEncrypter, private val warnOnUnknownDevicesRepository: WarnOnUnknownDeviceRepository, - private val taskExecutor: TaskExecutor, private val coroutineDispatchers: MatrixCoroutineDispatchers, private val cryptoCoroutineScope: CoroutineScope ) : IMXEncrypting, IMXGroupEncryption { @@ -282,7 +278,7 @@ internal class MXMegolmEncryption( gossipingEventBuffer.add( Event( type = EventType.ROOM_KEY, - senderId = credentials.userId, + senderId = this.userId, content = submap.apply { this["session_key"] = "" // we add a fake key for trail @@ -310,8 +306,11 @@ internal class MXMegolmEncryption( } } - private fun notifyKeyWithHeld(targets: List, sessionId: String, senderKey: String?, code: WithHeldCode) { - Timber.i("## CRYPTO | notifyKeyWithHeld() :sending withheld key for $targets session:$sessionId and code $code ") + private suspend fun notifyKeyWithHeld(targets: List, + sessionId: String, + senderKey: String?, + code: WithHeldCode) { + Timber.i("## CRYPTO | notifyKeyWithHeld() :sending withheld key for $targets session:$sessionId and code $code") val withHeldContent = RoomKeyWithHeldContent( roomId = roomId, senderKey = senderKey, @@ -327,13 +326,11 @@ internal class MXMegolmEncryption( } } ) - sendToDeviceTask.configureWith(params) { - callback = object : MatrixCallback { - override fun onFailure(failure: Throwable) { - Timber.e("## CRYPTO | notifyKeyWithHeld() : Failed to notify withheld key for $targets session: $sessionId ") - } - } - }.executeBy(taskExecutor) + try { + sendToDeviceTask.execute(params) + } catch (failure: Throwable) { + Timber.e("## CRYPTO | notifyKeyWithHeld() : Failed to notify withheld key for $targets session: $sessionId ") + } } /** @@ -359,7 +356,7 @@ internal class MXMegolmEncryption( // Include our device ID so that recipients can send us a // m.new_device message if they don't have our session key. - map["device_id"] = credentials.deviceId!! + map["device_id"] = deviceId session.useCount++ return map } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryptionFactory.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryptionFactory.kt index f0cc15fb63..9f6312ea97 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryptionFactory.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryptionFactory.kt @@ -17,7 +17,6 @@ package org.matrix.android.sdk.internal.crypto.algorithms.megolm import kotlinx.coroutines.CoroutineScope -import org.matrix.android.sdk.api.auth.data.Credentials import org.matrix.android.sdk.internal.crypto.DeviceListManager import org.matrix.android.sdk.internal.crypto.MXOlmDevice import org.matrix.android.sdk.internal.crypto.actions.EnsureOlmSessionsForDevicesAction @@ -26,7 +25,8 @@ import org.matrix.android.sdk.internal.crypto.keysbackup.DefaultKeysBackupServic import org.matrix.android.sdk.internal.crypto.repository.WarnOnUnknownDeviceRepository import org.matrix.android.sdk.internal.crypto.store.IMXCryptoStore import org.matrix.android.sdk.internal.crypto.tasks.SendToDeviceTask -import org.matrix.android.sdk.internal.task.TaskExecutor +import org.matrix.android.sdk.internal.di.DeviceId +import org.matrix.android.sdk.internal.di.UserId import org.matrix.android.sdk.internal.util.MatrixCoroutineDispatchers import javax.inject.Inject @@ -36,29 +36,29 @@ internal class MXMegolmEncryptionFactory @Inject constructor( private val cryptoStore: IMXCryptoStore, private val deviceListManager: DeviceListManager, private val ensureOlmSessionsForDevicesAction: EnsureOlmSessionsForDevicesAction, - private val credentials: Credentials, + @UserId private val userId: String, + @DeviceId private val deviceId: String?, private val sendToDeviceTask: SendToDeviceTask, private val messageEncrypter: MessageEncrypter, private val warnOnUnknownDevicesRepository: WarnOnUnknownDeviceRepository, - private val taskExecutor: TaskExecutor, private val coroutineDispatchers: MatrixCoroutineDispatchers, private val cryptoCoroutineScope: CoroutineScope) { fun create(roomId: String): MXMegolmEncryption { return MXMegolmEncryption( - roomId, - olmDevice, - defaultKeysBackupService, - cryptoStore, - deviceListManager, - ensureOlmSessionsForDevicesAction, - credentials, - sendToDeviceTask, - messageEncrypter, - warnOnUnknownDevicesRepository, - taskExecutor, - coroutineDispatchers, - cryptoCoroutineScope + roomId = roomId, + olmDevice = olmDevice, + defaultKeysBackupService = defaultKeysBackupService, + cryptoStore = cryptoStore, + deviceListManager = deviceListManager, + ensureOlmSessionsForDevicesAction = ensureOlmSessionsForDevicesAction, + userId = userId, + deviceId = deviceId!!, + sendToDeviceTask = sendToDeviceTask, + messageEncrypter = messageEncrypter, + warnOnUnknownDevicesRepository = warnOnUnknownDevicesRepository, + coroutineDispatchers = coroutineDispatchers, + cryptoCoroutineScope = cryptoCoroutineScope ) } } diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt index 7365801589..935b4ca2f8 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt @@ -195,11 +195,11 @@ class RoomDetailViewModel @AssistedInject constructor( } private fun prepareForEncryption() { - // check if there is not already a call made - if (prepareToEncrypt !is Loading) { + // check if there is not already a call made, or if there has been an error + if (prepareToEncrypt.shouldLoad) { prepareToEncrypt = Loading() viewModelScope.launch { - kotlin.runCatching { + runCatching { room.prepareToEncrypt() }.fold({ prepareToEncrypt = Success(Unit) @@ -629,8 +629,6 @@ class RoomDetailViewModel @AssistedInject constructor( if (action.focused) { // Should we add some rate limit here, or do it only once per model lifecycle? prepareForEncryption() - } else { - // we could eventually cancel here :/ } } } From 259ead106fe96559b9c6c00c28532f7558ead583 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 3 Mar 2021 09:28:35 +0100 Subject: [PATCH 156/578] Fix code quality issue --- tools/check/forbidden_strings_in_code.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/check/forbidden_strings_in_code.txt b/tools/check/forbidden_strings_in_code.txt index a5127dc8aa..567e24a849 100644 --- a/tools/check/forbidden_strings_in_code.txt +++ b/tools/check/forbidden_strings_in_code.txt @@ -161,7 +161,7 @@ Formatter\.formatShortFileSize===1 # android\.text\.TextUtils ### This is not a rule, but a warning: the number of "enum class" has changed. For Json classes, it is mandatory that they have `@JsonClass(generateAdapter = false)`. If the enum is not used as a Json class, change the value in file forbidden_strings_in_code.txt -enum class===89 +enum class===90 ### Do not import temporary legacy classes import org.matrix.android.sdk.internal.legacy.riot===3 From 3cbee586bd769847890983a8785cc85c9ef770f9 Mon Sep 17 00:00:00 2001 From: Danial Behzadi Date: Mon, 1 Mar 2021 19:08:19 +0000 Subject: [PATCH 157/578] Translated using Weblate (Persian) Currently translated at 99.9% (2080 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/fa/ --- vector/src/main/res/values-fa/strings.xml | 136 +++++++++++----------- 1 file changed, 68 insertions(+), 68 deletions(-) diff --git a/vector/src/main/res/values-fa/strings.xml b/vector/src/main/res/values-fa/strings.xml index 5418d32c0c..5185b9a278 100644 --- a/vector/src/main/res/values-fa/strings.xml +++ b/vector/src/main/res/values-fa/strings.xml @@ -73,26 +73,26 @@ ساخت حساب ارسال رد شدن - ارسال ایمیل بازنشانی - ایمیل یا نام کاربری + فرستادن رایانامهٔ بازنشانی + رایانامه یا نام کاربری گذرواژه گذرواژه جدید نام کاربری - نشانی ایمیل - نشانی ایمیل (اختیاری) + نشانی رایانامه + نشانی رایانامه (اختیاری) شماره تلفن شماره تلفن (اختیاری) گذرواژه را تکرار کنید گذرواژه جدید خود را تأیید کنید نام کاربری یا گذرواژه نامعتبر است گذرواژه کوتاه است (حداقل ۶) - آدرس ایمیل نامعتبر به نظر می‌رسد + شبیه یک نشانی رایانامهٔ معتبر نیست شماره تلفن نامعتبر به نظر می‌رسد گذرواژه‌ها مطابقت ندارد گذرواژه را فراموش کردید؟ - استفاده از گزینه‌های سفارشی سرور (پیش‌رفته) - برای ادامه‌ی ثبت‌نام، لطفاً ایمیل خود را بررسی کنید - من آدرس ایمیلم را تایید کرده‌ام + استفاده از گزینه‌های سفارشی کارساز (پیش‌رفته) + برای ادامهٔ ثبت‌نام، لطفاً رایانامه‌تان را بررسی کنید + نشانی رایانامه‌ام را تأیید کرده‌ام نمی‌توان وارد شد: خطای شبکه نام کاربری/گذرواژه نامعتبر است این نام کاربری قبلا استفاده شده است @@ -149,8 +149,8 @@ امکان ارسال گزارش اشکال وجود نداشت، دوباره تلاش کنید (%s) پیشرفت (%s%%) ارسال در - نشانی سرور خانه - نشانی سرور هویتی + نشانی کارساز خانگی + نشانی کارساز هویت ارسال صدا آیا مطمئنید می‌خواهید با %s یک گپ جدید را آغاز کنید؟ آیا مطمئنید می‌خواهید که یک تماس صوتی را آغاز کنید؟ @@ -165,12 +165,12 @@ بازگشت به صفحه ورود گذرواژه وارد نشده است شماره تلفن وارد نشده است - نشانی ایمیل وارد نشده است + نشانی رایانامه وارد نشده توکن نامعتبر است - آدرس ایمیل یا شماره تلفن وارد نشده است - این نشانی ایمیل قبلاً ثبت شده است. - سرور خانه: - سرور هویتی: + نشانی رایانامه یا شماره تلفن وارد نشده + این نشانی رایانامه قبلاً ثبت شده. + کارساز خانگی: + کارساز هویت: امکان ورود وجود ندارد %1$dد %2$dث موضوع اتاق @@ -282,7 +282,7 @@ ثبت‌نام با ورود همزمان ایمیل و شماره تلفن در حال حاضر پشتیبانی نمی‌شود. تنها شماره تلفن شما برای حساب‌تان ثبت خواهد شد. \n \nمی‌توانید در ادامه ایمیل خود را در تنظیمات برنامه به پروفایل خود اضافه کنید. - این سرور خانه می‌خواهد مطمئن شود که شما ربات نیستید + این کارساز خانگی می‌خواهد مطمئن شود که روبات نیستید نام کاربری قبلاً استفاده شده است بازدرخواست کلیدهای رمزنگاری از دیگر نشست‌هایتان. درخواست کلید ارسال شد. @@ -550,27 +550,27 @@ تأیید نشست هیچ ابطال - هیچ سرور هویتی پیکربندی نشده. - تماس بدلیل سرور بد پیکربندی شده شکست خورد + هیچ کارساز هویتی پیکربندی نشده. + تماس به دلیل پیکربندی بد کارساز، شکست خورد از %s استفاده کنید رایانامه‌ای برای بازیابی تنظیم کنید. برای کشف شدن به دست افرادی که می‌شناسید، از رایانامه یا تلفن بعدی استفاده کنید. رایانامه‌ای برای بازیابی تنظیم کنید. برای کشف شدن به دست افرادی که می‌شناسید، از رایانامه یا تلفن بعدی استفاده کنید. - نشانی ایمیل پیوست شده به حساب شما باید وارد شده باشد. + باید نشانی رایانامهٔ پیوسته به حسابتان وارد شود. گذرواژه جدیدی باید وارد شود. - یک ایمیل به %s فرستاده شد. هنگامی که پیوند همراه را دنبال کردید، در زیر کلیک کنید. - تایید نشانی ایمیل ناموفق بود: مطمئن شوید که روی پیوند در ایمیل کلیک کرده‌اید + رایانامه‌ای به %s فرستاده شد. هنگامی که پیوند داخلش را دنبال کردید، پایین را کلیک کنید. + شکست در تأیید نشانی رایانامه: مطمئن شوید که پیوند درون رایانامه را کلیک کرده‌اید گذرواژه بازنشانی شد. \n \nشما از همه نشست‌ها خارج شدید و دیگر آگاهی ها را دریافت نخواهید کرد. برای فعال‌سازی دوباره آگاهی‌ها، در هر دستگاه دوباره وارد شوید. - لطفا سیاست‌های این سرور خانه را بررسی کنید و بپذیرید: + لطفاً سیاست‌های این کارساز خانگی را بررسی کرده و بپذیرید: نشانی باید با http[s]:// آغاز شود نمی‌توان ثبت‌نام کرد: خطای شبکه نمی‎توان ثبت‌نام کرد - نمی‌توان ثبت‌نام کرد : مالکیت ایمیل تایید نشد + نمی‌توان ثبت‌نام کرد : شکست مالکیت رایانامه لطفا یک نشانی معتبر وارد کنید نشانی قابل دسترس نیست، لطفا آن را بررسی کنید این یک نشانی کارساز ماتریکس معتبر نیست - نمی‌توان به این نشانی سرور خانه دست یافت، لطفا آن را بررسی کنید + روی این نشانی نمی‌توان به کارساز خانگی‌ای رسید. لطفاً بررسیش کنید افزاره‌تان از یک قرارداد امنیتی TLS تاریخ‌گذشته که به حمله آسیپ‌پذیر است استفاده می‌کند. برای امنیتتان، نخواهید توانست وصل شوید توکن دسترسی مشخص شده، شناخته نشد JSON ناهنجار @@ -636,7 +636,7 @@ توقف رونوشت موفقیت - اعلان‌ها + آگاهی‌ها خاتمه اجازهٔ شروع تماس کنفرانسی در این اتاق را ندارید اجازهٔ شروع تماس در این اتاق را ندارید @@ -1478,7 +1478,7 @@ بازنشانی انتخاب گزینه‌ی دیگر مجوز دادن - المنت می تواند در پس‌زمینه اجرا شود تا اعلان های شما را به صورت ایمن و اختصاصی مدیریت کند. این ممکن است بر میزان مصرف باتری شما تأثیر منفی بگذارد. + المنت می تواند در پس‌زمینه اجرا شده تا آگاهی‌هایتان را به صورت ایمن و محرمانه مدیریت کند. ممکن است بر مصرف باتری تأثیر بگذارد. این کار کلید امنیتی قبلی شما را حذف می‌کند. یک کلید امنیتی جدید به صورت تصادفی ایجاد کنید یا یک عبارت امنیتی جدید برای فایل‌های پشتیبان موجود خود تنظیم کنید. فشردن اینتر به جای رفتن به خط بعد، پیام را ارسال خواهد کرد @@ -1500,14 +1500,14 @@ • آگاهی‌ها محتوای پیام را نشان نخواهند داد • آگاهی‌ها شاکل فراداده و محتوای پیام هستند • محتوای پیام آگاهی به طور ایمن و مستقیم از کارساز خانگی ماتریکس دریافت می‌شود - • اعلان ها فقط حاوی فرا داده هستند - • اعلان ها از طریق سرور Firebase ارسال می شوند + • آگاهی‌ها فقط دارای فراداده هستند + • آگاهی‌ها با پیام‌رسانی ابری Firebase فرستاده می‌شوند اگر دستگاه برای مدتی از شارژر جدا باشد و از دستگاه نیز استفاده نشود، گوشی وارد حالت غیر هوشیار می‌شود. در این حالت از دسترسی برنامه‌ها به اینترنت جلوگیری می‌شود و همگام سازی و هشدارهای استاندارد آن‌ها به تعویق می‌افتد. - این سرویس با ری‌استارت دستگاه شروع نمی‌شود. تا وقتی المنت را یک بار باز نکنید اعلانی دریافت نخواهید کرد. - بر روی اعلان کلیک شد! - لطفا بر روی اعلان کلیک کنید. اگر اعلان را نمی‌بینید، تنظیمات دستگاه را بررسی نمائید. - نمایش اعلان - شما اعلان را مشاهده می‌کنید! کلیک کنید! + خدمت، هنگام شروع دوبارهٔ افزاره اجرا نخواهد شد. تا وقتی یک بار المنت باز نشود، آگاهی‌ها را دریافت نخواهید کرد. + روی آگاهی کلیک شد! + لطفاً روی آگاهی کلیک کنید. اگر آگاهی را نمی‌بینید، لطفاً تنظیمات سامانه را بررسی کنید. + نمایش آگاهی + دارید آگاهی را مشاهده می‌کنید! کلیک کنید! دریافت Push با خطا مواجه شد. نصب مجدد برنامه می‌تواند یکی از راه‌حل‌های احتمالی باشد. برنامه Push دریافت کرد برنامه منتظر دریافت Push است @@ -1529,11 +1529,11 @@ \n%1$s توکن Firebase مشکل Google Play Services را برطرف کنید - المنت از Google Play Services برای ارسال اعلان‌ها استفاده می‌کند اما به نظر می‌رسد به درستی پیکربندی نشده است: + المنت برای ارسال آگاهی‌ها از خدمات پلی گوگل استفاده می‌کند اما به نظر می‌رسد به درستی پیکربندی نشده است: \n%1$s Google Play Services در دسترس و بروز است. تنظیمات سفارشی بارگذاری نشد، لطفاً دوباره امتحان کنید. - عیب‌یابی اولیه مشکلی را نشان نمی‌دهد. اگر همچنان در دریافت اعلان‌ها مشکل دارید لطفا خطا را گزارش کرده تا آن را بررسی کنیم. + عیب‌یابی اولیه مشکلی را نشان نمی‌دهد. اگر همچنان در دریافت آگاهی‌ها مشکل دارید، لطفا خطا را گزارش کرده تا آن را بررسی کنیم. یک یا چند تست ناموفق بودند، لطفا خطا را گزارش کرده تا آن را بررسی کنیم. یک یا چند تست ناموفق بودند، راه حل(های) پیشنهادی را امتحان کنید. در حال اجرا (%1$d از %2$d) @@ -1556,7 +1556,7 @@ دلیل گزارش این محتوا عضو شد دعوت‌شدگان - شناسه نامعتبر است. باید یک آدرس ایمیل یا شناسه‌ای در قالب \\\'@localpart:domain\\\' وارد نمایید + شناسه بدریخت. باید یک نشانی رایانامه یا شناسهٔ ماتریکسی در قالب \'@localpart:domain\' باشد %d مورد %d مورد @@ -1565,10 +1565,10 @@ افراد اطلاعات اتاق گواهی را تنها در صورتی تایید کنید که اثر انگشت آن با اثر انگشتی که ادمین سرور ارائه کرده‌است برابر باشد. - گواهی سرور تغییر کرده‌است. ممکن است این اتفاق به دلیل تمدید گواهی سرور رخ داده باشد. توصیه می‌شود از ادمین سرور سوال کنید. - گواهی سرور تغییر کرده است. این مورد بسیار نادر است. توصیه می شود گواهی جدید را قبول نکنید. - اگر مدیر سرور گفته است که این مسئله اشکالی ندارد، اطمینان حاصل کنید که اثر انگشت زیر با اثر انگشت ارائه شده توسط آنها مطابقت دارد. - این می‌تواند به این معنی باشد که حمله‌ی مرد میانی رخ داده است و یا اینکه گوشی شما، گواهی سرور را معتبر نمی‌داند. + گواهی از آنی که مورد اطمینان بوده، تغییر کرده. ممکن است کارساز، گواهیش را نوسازی کرده باشد. برای دریافت اثر انگشت مورد انتظار، با مدیر کارساز تماس بگیرید. + گواهی از آنی که مورد اطمینان تلفنتان است، تغییر کرده. این مورد بسیار نامعمول است. توصیه می شود این گواهی جدید را نپذیرید. + اگر مدیر کارساز خبر از مورد انتظار بودنش داده، مطمئن شوید که اثر انگشت زیر با اثر انگشت ارائه شده به دستشان مطابق است. + می‌تواند به این معنی باشد که کسی شدامدتان را بدخواهانه دستکاری کرده یا تلفنتان، به گواهی فراهم‌شده به دست کارساز دوردست، اطمینان ندارد. پیام به دلیل حضور یک دستگاه ناشناس ارسال نشد. %1$s یا %2$s؟ پیام ارسال نشد. %1$s یا %2$s؟ با لغو مسدودیت، کاربر می‌تواند مجددا به اتاق اضافه شود. @@ -1602,14 +1602,14 @@ المنت برای ارسال و ذخیره‌ی فایل‌ها نیاز به دسترسی به گالری شما را دارد. \n \nلطفا در پنجره‌ای که باز می‌شود این دسترسی را بدهید. - هنگامی که سرور شما قابلیت تماس ندارد، از سرور %s استفاده کن - اجازه استفاده از سرور تماس پشتیبان + هنگامی که کارساز خانگیتان قابلیت تماس نداشته باشد، از %s استفاده خواهد شد (نشانی IPتان در طول تماس هم‌رسانی خواهد شد) + اجازه استفاده از کارساز تماس پشتیبان خطای SSL: هویت طرف مقابل تأیید نشد. - اتصال برقرار نشد. -\nلطفا از ادمین سرور بخواهید جهت برقراری مطمئن تماس‌ها، سرور turn را پیکربندی کند. - لطفا از ادمین سرور (%1$s) بخواهید جهت برقراری مطمئن تماس‌ها، turn server را پیکربندی کند. + شکست در برقراری ارتباط همزمان. +\nلطاً از مدیر کارساز بخواهید برای برقراری مطمئن تماس‌ها، کارساز turn را پیکربندی کند. + لطفا از مدیر کارساز خانگیتان (%1$s) بخواهید برای برقراری مطمئن تماس‌ها، کارساز turn را پیکربندی کند. \n -\nبه عنوان جایگزین می‌توانید از سرور عمومی %2$s استفاده کنید، اما این راه مطمئنی نیست چرا که آدرس IP شما در اختیار آن سرور قرار خواهد گرفت. برای مدیریت این بخش می‌توانید به تنظیمات مراجعه نمائید. +\nهمین‌طور می‌توانید از کارساز عمومی %2$s استفاده کنید، گرچه به همان اطمینان نبوده و نشانی IP شما را با آن کارساز هم‌رسانی خواهد کرد. همچنین می‌توانید این بخش را در تنظیمات مدیریت کنید. بعد از راه‌اندازی مجدد، هیچ تاریخچه، پیام، دستگاه تائید شده یا کاربر تائید شده‌ای در حساب شما وجود نخواهد داشت اگر همه چیز را بازنشانی کنید تنها در صورتی این کار را انجام دهید که از هیچ دستگاه دیگری نمی‌توانید این دستگاه را تائید نمائید. @@ -1654,7 +1654,7 @@ انتشار کلید‌های هویتی ایجاد شده در صورتی که %2$s را فراموش کردید از %1$s به عنوان safety net استفاده کنید. این ممکن است چند ثانیه طول بکشد، لطفاً صبور باشید. - یک کلید امنیتی وارد کنید. از این عبارت جهت ذخیره امن کلید‌ها در سمت سرور استفاده می‌شود. + عبارت امنیتی‌ای را که فقط خودتان می‌دانید، وارد کنید. استفاده‌شده برای امن کردن رمزها روی کارسازتان. ترجیحا از گذرواژه حساب خود استفاده نکنید. برای تایید، %s خود را دوباره وارد کنید. افزایش امنیت و رمزگشایی پیام‌های رمزشده و اعتماد به %s. @@ -1694,7 +1694,7 @@ شکلک‌ها را مقایسه کنید، از ترتیب نمایش آنان نیز مطمئن شوید. بهتر است اینکار را به صورت حضوری و یا با استفاده از یک روش ارتباطی مطمئن انجام دهید. برای امنیت بیشتر، %s را با بررسی یک کد یکبارمصرف تایید کنید. - پس از فعال‌شدن ، نمی‌توان رمزگذاری برای یک اتاق را غیرفعال کرد. پیام های ارسالی در یک اتاق رمزگذاری شده توسط سرور قابل مشاهده نیست و فقط توسط اعضای اتاق قابل مشاهده است. فعال کردن رمزنگاری ممکن است از کارکرد بسیاری از ربات ها و پل ها جلوگیری کند. + پس از به‌کار افتادن، نمی‌توان رمزگذاری اتاق را از کار انداخت. پیام‌های ارسالی در اتاقی رمزشده، به دست کارساز قابل مشاهده نبوده و فقط اعضای اتاق قادر به دیدنشان هستند. به‌کار انداختن رمزنگاری ممکن است از کارکرد درست بسیاری از روبات‌ها و پل‌ها جلوگیری کند. رمزگذاری فعال شود؟ به کار انداختن رمزنگاری سرتاسری… شکلک را با رنگ‌بندی رنگین گمان ارسال می کند @@ -1713,7 +1713,7 @@ برای اطمینان از صحت هویت کاربران، به رنگ آیکون سپر آنان توجه کنید. رنگ سبز به معنای هویت تائید شده‌ی است. برای اطمینان از امنیت اتاق، همه کاربران آن اتاق را تائید کنید. برای امنیت بالا ، از یک روش ارتباطی امن دیگر استفاده کنید یا این کار را حضوری انجام دهید. با تأیید شکلک‌های منحصر به فرد زیر در صفحه نمایش طرف مقابل به همان ترتیب، این کاربر را تأئید کنید. - دامنه ایمیل شما مجاز به ثبت نام در این سرور نیست + دامنهٔ رایانامه‌تان مجاز به ثبت‌نام روی این کارساز نیست ¯\\\\_(ツ)_/¯ را به یک پیام متنی ساده تغییر می دهد لینک مشکل دارد نشست فعلی مربوط به کاربر %1$s است و شما اطلاعات حساب کاربر %2$s را ارائه داده‌اید. این مورد توسط المنت پشتیبانی نمی‌شود . @@ -1733,10 +1733,10 @@ \n• این نشست را در یکی از نشست دیگر خود حذف کرده‌اید. \n \n• ادمین سرور حساب شما را غیرفعال کرده‌است. - سرور معتبر نیست. لطفا شناسه‌کاربری خود را بررسی کنید + ناتوان در یافتن یک کارساز خانگی معتبر. لطفاً شناسه‌تان را بررسی کنید این یک شناسه کاربری معتبر نیست. قالب صحیح: \\\'@user:homeserver.org\\\' اگر گذرواژه خود را نمی‌دانید، برای تنظیم مجدد آن بازگردید. - اگر یک حساب کاربری بر روی یک سرور دارید، از شناسه ماتریکس (به عنوان مثال @user:domain.com) و گذرواژه برای ورود استفاده کنید. + اگر زوی یک کارساز خانگی خسابی برپا کرده‌اید، در پایین از شناسهٔ ماتریکس (مثلاً @user:domain.com) و گذرواژه‌تان استفاده کنید. همچنین اگر قبلاً حساب کاربری داشته و از نام‌کاربری و گذرواژه خود اطلاع دارید، می توانید از این روش استفاده کنید: درخواست های زیادی ارسال شده است. می توانید در %1$d ثانیه دوباره امتحان کنید… @@ -1744,15 +1744,15 @@ این نسخه سرور بسیار قدیمی است. از ادمین خود بخواهید که آن را ارتقا دهد. البته شما می‌توانید ادامه دهید ، اما برخی از ویژگی ها ممکن است به درستی کار نکنند. این نسخه سرور بسیار قدیمی است. از ادمین خود بخواهید که آن را ارتقا دهد. - سرور به روز نشده + کارساز خانگی قدیمی کد وارد شده صحیح نیست. لطفا بررسی فرمائید. ما ایمیلی به %1$s ارسال کردیم. \nلطفاً برای ادامه فرآیند ایجاد حساب‌کاربری بر روی لینک موجود در آن کلیک کنید. لطفا ایمیل خود را بررسی کنید برای ادامه، شرایط را قبول کنید لطفا کپچا را حل کنید - انتخاب سرور دلخواه - انتخاب سرورهای المنت + گزینش یک کارساز خانگی سفارشی + گزینش خدمات ماتریکس المنت انتخاب matrix.org حساب شما هنوز ایجاد نشده‌است. \n @@ -1766,7 +1766,7 @@ گذرواژه شما هنوز تغییر نکرده‌است. \n \nفرآیند تغییر گذرواژه را متوقف می‌کنید؟ - شما از همه نشست‌ها خارج شده‌اید و دیگر اعلان‌ها را دریافت نخواهید کرد. برای فعال کردن مجدد اعلان‌ها، در دستگاه‌های خود وارد حسابتان شوید. + از تمام نشست‌ها خارج شده و دیگر آگاهی‌ای دریافت نخواهید کرد. برای به کار انداختن دوبارهٔ آگاهی‌ها، روی هر دستگاهی، دوباره وارد شوید. ایمیل را تایید کردم برای تایید گذرواژه جدید لینک ارسالی را باز کرده، سپس روی متن زیر کلیک کنید. یک ایمیل تائید به %1$s ارسال شد. @@ -1780,17 +1780,17 @@ برنامه قادر به ایجاد حساب در این سرور نیست. \n \nآیا می خواهید با استفاده از مرورگر حساب کاربری بسازید؟ - متأسفیم، این سرور حساب‌های جدید را نمی پذیرد. + متأسفانه این کارساز، حساب جدید نمی‌پذیرد. برنامه نمی‌تواند به این سرور متصل شود. سرور از این مکانیزم‌(ها) برای ورود پشتیبانی می کند: %1$s. \n \nآیا می خواهید با استفاده از مرورگر وارد شوید؟ هنگام بارگیری صفحه، خطایی روی داد: %1$s (%2$d) - آدرس سرور مورد نظر خود را وارد کنید - آدرس سروری را که می‌‌خواهید به آن متصل شوید، وارد کنید - آدرس سروری را که می‌‌خواهید از آن استفاده کنید، وارد کنید - به میلیون ها نفر در بزرگترین سرور عمومی بپیوندید + نشانی کارسازی که می‌خواهید استفاده کنید را وارد کنید + نشانی المنت یا کارسازی را که می‌‌خواهید به آن وصل شوید، وارد کنید + نشانی کارساز یا المنت ماژولاری که می‌خواهید استفاده کنید را وارد کنید + به میلیون‌ها نفر در بزرگ‌ترین کارساز عمومی بپیوندید درست مانند ایمیل، حساب‌های کاربری یک خانه دارند؛ اگرچه می توانید با هر کسی که دوست دارید، صحبت کنید - یک سرور انتخاب کنید + کارسازی برگزینید شروع کنید تجارب خود را گسترش داده و شخصی‌سازی کنید گفتگوهای خصوصی خود را با رمزگذاری محافظت کنید @@ -1851,10 +1851,10 @@ کد پیامکی به %s ارسال شده است. لطفاً کد تأیید موجود در آن را وارد کنید. سرور هویت‌سنجی‌ای که انتخاب کرده‌اید هیچگونه شرایط و ضوابطی ندارد. فقط اگر به صاحب سرویس اعتماد دارید ادامه دهید - سرور هویت‌سنجی شرایط و ضوابط استفاده ندارد - آدرس سرور هویت‌سنجی را وارد کنید - اتصال به سرور هویت‌سنجی امکان پذیر نیست - آدرس سرور هویت‌سنجی را وارد کنید + کارساز هویت، شرایط و ضوابط استفاده ندارد + لطفاً نشانی کارساز هویت را وارد کنید + نتوانست به کارساز هویت وصل شود + یک نشانی کارساز هویت وارد کنید ما یک ایمیل تأیید به %s ارسال کردیم، ابتدا ایمیل خود را بررسی کرده و روی لینک تأیید کلیک کنید ما یک ایمیل تأیید به %s ارسال کردیم، ایمیل خود را بررسی کرده و روی لینک تأیید کلیک کنید قطع ارتباط با سرور هویت‌سنجی به این معنی است که توسط کاربران دیگر قابل شناسایی نخواهید بود و نمی توانید دیگران را از طریق ایمیل یا تلفن دعوت کنید. @@ -2011,7 +2011,7 @@ ورود عبارت عبور تأیید عبارت عبور ایجاد عبارت عبور - APK معتبر Google Play Services پیدا نشد. اعلان‌ها ممکن است به درستی کار نکنند. + بستهٔ اندرویدی معتبر خدمات پلی گوگل پیدا نشد. ممکن است آگاهی‌ها درست کار نکنند. %d+ +%d %1$s: %2$s @@ -2038,7 +2038,7 @@ \nغیرفعال کردن حساب شما به طور پیش فرض باعث نمی شود پیام های ارسالی شما را حذف کنیم . اگر می خواهید پیام های شما را فراموش کنیم ، لطفاً کادر زیر را علامت بزنید. \n \nقابلیت مشاهده پیام در المنت مانند ایمیل است. حذف کردن پیام‌های شما به این معنی است که پیام‌هایی که ارسال کرده‌اید به هیچ کاربر جدید یا ثبت نشده‌ای نمایش داده نمی شود، اما کاربران ثبت‌نام شده که از قبل به این پیام ها دسترسی داشتند همچنان به نسخه خود دسترسی خواهند داشت. - برای ادامه استفاده از سرور %1$s باید شرایط و ضوابط را خوانده و موافقت کنید. + برای ادامهٔ استفاده از کارساز خانگی %1$s باید شرایط و ضوابط را خوانده و بپذیرید. Markdown غیرفعال شده است. Markdown فعال شده است. جهت رفع مشکلات مدیریت برنامه‌های ماتریکس @@ -2141,7 +2141,7 @@ به‌روزرسانی نام عمومی شناسه اطلاعات دستگاه - حالت صرفه‌جویی داده یک فیلتر خاص را اعمال می کند، که در نتیجه‌ی آن به‌روزرسانی‌های وضعیت آنلاین بودن و اعلان‌های تایپ فیلتر می شوند. + حالت صرفه‌جویی داده، پالایهٔ خاصی را اعمال می‌کند که در نتیجهٔ آن، به‌روزرسانی‌های حضور و آگاهی‌های نوشتن، پالوده می‌شوند. حالت صرفه‌جویی در مصرف دیتا بله ، من می خواهم کمک کنم! لطفاً برای کمک به ما در بهبود المنت، ارسال ناشناس تجزیه و تحلیل را فعال کنید. From d1e59abcf07a3ab0f79f294b6a93ca697ec539a1 Mon Sep 17 00:00:00 2001 From: Hivaa Date: Mon, 1 Mar 2021 14:43:17 +0000 Subject: [PATCH 158/578] Translated using Weblate (Persian) Currently translated at 99.9% (2080 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/fa/ --- vector/src/main/res/values-fa/strings.xml | 36 +++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/vector/src/main/res/values-fa/strings.xml b/vector/src/main/res/values-fa/strings.xml index 5185b9a278..e852025e89 100644 --- a/vector/src/main/res/values-fa/strings.xml +++ b/vector/src/main/res/values-fa/strings.xml @@ -944,7 +944,7 @@ شناسهٔ کاربریتان شناسهٔ ابزارک شناسهٔ اتاق - متأسّفانه تماس‌های کنفرانسی با جیتسی روی افزاره‌های قدیمی (افزاره‌هایی با سیستم‌عامل اندروید زیر ۵) پشتیبانی نمی‌شود + متأسّفانه تماس‌های کنفرانسی با جیتسی روی دستگاه‌های قدیمی (دستگاه‌هایی با سیستم‌عامل اندروید زیر ۶) پشتیبانی نمی‌شود این ابزارک می‌خواهد از منابع زیر استفاده کند: اجازه انسداد همه @@ -1215,7 +1215,7 @@ مدیر کارسازتان رمزنگاری سرتاسری پیش‌گزیده را در اتاق‌های خصوصی و پیام‌های مستقیم از کار انداخته است. خروج از این نشست تأیید این ورود - ممکن است دیگر کاربران، به آن اعتماد نکنند + شما در حال حاضر در این تماس هستید تکمیل امنیت استفاده از نشستی موجود برای تأییدش که به پیام‌های رمزشده دسترسی می‌دهد. تأیید @@ -2315,4 +2315,36 @@ فرستادن پیام داده با برف فرستادن کاغذ رنگی 🎉 فرستادن برف ❄️ + احراز هویت انجام نشد + المنت برای انجام این عمل نیاز دارد که گذواژه‌ی خود را وارد کنید. + احراز هویت مجدد مورد نیاز است + کاربران + هنگام انتقال تماس خطایی روی داد + انتقال + متصل شوید + + ۱ تماس فعال (%1$s) . ۱ تماس متوقف شده + ۱ تماس فعال (%1$s) . %2$d تماس متوقف شده + + + تماس متوقف شده + %1$d تماس متوقف شده + + تماس فعال (%1$s) + هنگام جستجوی شماره تلفن خطایی روی داد + ‬پد شماره گیری + تماس بگیرید + این تماس پایان یافته است + %1$s تماس را رد کرد + شما این تماس را رد کردید %1$s + شما در حال حاضر در این تماس هستید + خطا در تنظیم امضای متقابل + %1$s یک تماس را شروع کرد + شما یک تماس را شروع کردید + شما تماس را در حالت انتظار قرار داده‌اید + %s تماس را در حالت انتظار قرار داده‌است + حالت انتظار + از سرگیری + غیر مجاز، اطلاعات هویت‌سنجی موجود نمی‌باشد + بازگشت \ No newline at end of file From f5baa8ac914a4ebd8751a71066773254ad1ebcbd Mon Sep 17 00:00:00 2001 From: Niels Bouma Date: Wed, 3 Mar 2021 09:00:23 +0000 Subject: [PATCH 159/578] Translated using Weblate (Dutch) Currently translated at 54.0% (1124 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/nl/ --- vector/src/main/res/values-nl/strings.xml | 49 +++++++++++------------ 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/vector/src/main/res/values-nl/strings.xml b/vector/src/main/res/values-nl/strings.xml index d15f7870a4..76bf7e6e80 100644 --- a/vector/src/main/res/values-nl/strings.xml +++ b/vector/src/main/res/values-nl/strings.xml @@ -79,7 +79,7 @@ Geen gesprekken Geen publieke gesprekken beschikbaar - 1 gebruiker + %d gebruiker %d gebruikers Logboek versturen @@ -225,8 +225,7 @@ Element heeft toegang nodig tot uw camera en microfoon om video-oproepen te maken. \n \nVerleen toegang op de volgende pop-ups om de oproep te maken. - Element kan uw adresboek benaderen om andere Matrix-gebruikers te vinden aan de hand van hun e-mailadressen en telefoonnummers. -\nAls u het goed vindt om uw adresboek hiervoor te delen, verleen dan toegang op de volgende pop-up. + Element kan uw adresboek benaderen om andere Matrix-gebruikers te vinden aan de hand van hun e-mailadressen en telefoonnummers. Als u het goed vindt om uw adresboek hiervoor te delen, verleen dan toegang op de volgende pop-up. Element kan uw adresboek gebruiken om andere Matrix-gebruikers te vinden aan de hand van hun e-mailadressen en telefoonnummers. \n \nWilt u uw adresboek hiervoor delen\? @@ -526,7 +525,7 @@ Informatie over sessie van afzender Publieke naam Publieke naam - ID + Sessie ID Sessiesleutel Verificatie Ed25519-vingerafdruk @@ -660,27 +659,27 @@ Weet u zeker dat u een video-oproep wilt beginnen\? Groepenlijst - 1 verandering in lidmaatschap + %d verandering in lidmaatschap %d veranderingen in lidmaatschap Ledenlijst Opschrift openen Synchroniseren… - 1 actieve deelnemer + %d actieve deelnemer %d actieve deelnemers - 1 deelnemer + %d deelnemer %d deelnemers Weet u zeker dat u deze gebruiker uit dit gesprek wilt verbannen\? - 1 nieuw bericht + %d nieuw bericht %d nieuwe berichten - 1 gesprek + %d gesprek %d gesprekken @@ -701,16 +700,16 @@ Ongeldige gemeenschaps-ID ‘%s’ is geen geldige gemeenschaps-ID - 1 ongelezen bericht waarin u vermeld staat + %d ongelezen bericht waarin u vermeld staat %d ongelezen berichten waarin u vermeld staat - 1 gesprek + %d gesprek %d gesprekken %1$s in %2$s - 1 actieve widget + %d actieve widget %d actieve widgets @@ -739,7 +738,7 @@ Ontvangst-avatar Avatar - 1 ongelezen bericht waarin u vermeld bent + %d ongelezen bericht waarin u vermeld bent %d ongelezen berichten waarin u vermeld bent Vermeldingsavatar @@ -819,19 +818,19 @@ Deze actie is niet mogelijk wegens ontbrekende rechten. Systeemmeldingen - 1s + %ds %ds - 1m + %dm %dm - 1u + %du %du - 1d + %dd %dd nu %1$s @@ -840,16 +839,16 @@ %1$s en %2$s %1$s %2$s - 1 geselecteerd + %d geselecteerd %d geselecteerd Om Matrix-appbeheer te herstellen - 1 deelnemer + %d deelnemer %d deelnemers - 1 gesprek + %d gesprek %d gesprekken Bronlimiet overschreden @@ -1011,7 +1010,7 @@ Herstel van versleutelde berichten Sleutelback-up beheren - %1$s: 1 bericht + %1$s: %2$d bericht %1$s: %2$d berichten @@ -1137,7 +1136,7 @@ Nieuwe sleutelback-up Er is een nieuwe sleutelback-up voor versleutelde berichten gedetecteerd. \n -\nAls u deze nieuwe herstelmethode niet heeft ingesteld, is het mogelijk dat er een aanvaller toegang tot uw account probeert te verkrijgen. Wijzig onmiddellijk uw accountwachtwoord en stel een nieuwe herstelmethode in in de instellingen. +\nAls u deze nieuwe herstelmethode niet heeft ingesteld, is het mogelijk dat er een aanvaller toegang tot uw account probeert te verkrijgen. Wijzig onmiddellijk uw accountwachtwoord en stel in de instellingen een nieuwe herstelmethode in. Ik was het Verlies nooit uw versleutelde berichten Begin sleutelback-up te gebruiken @@ -1233,7 +1232,7 @@ Voeg een identiteitsserver toe in de instellingen om dit te doen. Bevestig uw wachtwoord U kunt dit niet doen vanaf de mobiele Element - Synchroniseren op de achtergrond (experimenteel) + Synchroniseren op de achtergrond Geoptimaliseerd voor batterij Element zal op een batterijzuinige manier synchroniseren op de achtergrond. \nAfhankelijk van de staat van uw apparaat kan het besturingssysteem de synchronisatie uitstellen. @@ -1301,9 +1300,9 @@ Welkom thuis! Ongelezen berichten inhalen Gesprekken - Je directe gesprekken zullen hier worden weergegeven + Je directe gesprekken zullen hier worden weergegeven. Gebruik de + knop om een gesprek te starten. Kamers - Je kamers zullen hier worden weergegeven + Je kamers zullen hier worden weergegeven. Gebruik de + knop rechtsonder om een bestaande kamer te openen of een nieuwe aan te maken. Reacties Bevestigen Leuk vinden From 5e0ba452aa56cf494563c224ead87925e3063359 Mon Sep 17 00:00:00 2001 From: Ihor Hordiichuk Date: Tue, 2 Mar 2021 01:01:48 +0000 Subject: [PATCH 160/578] Translated using Weblate (Ukrainian) Currently translated at 61.7% (1285 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/uk/ --- vector/src/main/res/values-uk/strings.xml | 59 +++++++++++++++++++++-- 1 file changed, 55 insertions(+), 4 deletions(-) diff --git a/vector/src/main/res/values-uk/strings.xml b/vector/src/main/res/values-uk/strings.xml index ac06e1ed0a..34dd2b1462 100644 --- a/vector/src/main/res/values-uk/strings.xml +++ b/vector/src/main/res/values-uk/strings.xml @@ -57,7 +57,7 @@ Швидка відповідь Відкрити Закрити - Скопійовано у сховок + Скопійовано до буфера обміну Вимкнути Підтвердження @@ -504,8 +504,8 @@ Адреси Експериментальні Це експериментальні функції, що можуть несподівано ламатись. Використовуйте з обережністю. - Наскрізне Шифрування - Наскрізне Шифрування увімкнено + Наскрізне шифрування + Наскрізне шифрування увімкнено Вийдіть з облікового запису, щоб отримати змогу увімкнути шифрування. Шифрувати лише до перевірених пристроїв Ніколи не надсилати шифровані повідомлення з цього пристрою неперевіреним пристроям у цій кімнаті. @@ -1340,7 +1340,7 @@ Безпечне резервне копіювання Включає події запрошення/приєднання/виходу/видалення/заборони та зміни зображень профілю/видимих імен. Показати стан подій учасників кімнати - Управління ключами криптографії + Керування криптографічними ключами Використовуйте Менеджер інтеграції для керування ботами, мостами, віджетами та пакетами наклейок. \nМенеджери інтеграції отримують дані конфігурації та можуть змінювати віджети, надсилати запрошення до кімнати та надавати права від вашого імені. Інтеграції @@ -1480,4 +1480,55 @@ Адреса Ви можете втратити доступ до своїх повідомлень, якщо вийдете з облікового запису або загубите цей пристрій. Ви впевнені\? + Увімкніть біометричні дані для певного пристрою, такі як відбитки пальців та розпізнавання обличчя. + Увімкнути біометрію + Виберіть PIN-код для безпеки + Підтвердьте PIN-код + Не вдалося підтвердити PIN-код, торкніться нового. + Введіть свій PIN-код + Забули PIN-код\? + Відновити PIN-код + Новий PIN-код + Щоб відновити PIN-код, потрібно буде повторно ввійти в систему та створити новий. + Увімкнути PIN-код + Якщо хочете відновити PIN-код, торкніться «Забули PIN-код», щоб вийти та відновити. + PIN-код — єдиний спосіб розблокувати Element. + Вимагати PIN-код через 2 хвилини + PIN-код вимагається після 2 хвилин не використання Element. + PIN-код потрібно вводити за кожного відкриття Element. + Змінити PIN-код + Зміна поточного PIN-коду + Підтвердьте PIN-код, щоб вимкнути його + Налаштування захисту + Захистіть доступ PIN-кодом та біометричними даними. + Захист доступу + Цей сеанс довірений для безпечного обміну повідомленнями, оскільки ви його підтвердили: + + %d активний сеанс + %d активні сеанси + %d активних сеансів + %d активних сеансів + + Активні сеанси + Переглянути всі сеанси + Показати всі сеанси + Помилка автентифікації + Потрібна повторна автентифікація + Для виконання цієї дії Element вимагає ввести свої облікові дані. + Якщо скасувати, ви не зможете читати зашифровані повідомлення на новому пристрої, а інші користувачі не довірятимуть йому + Якщо скасувати, ви не зможете читати зашифровані повідомлення на цьому пристрої, а інші користувачі довірятимуть йому + Керування сеансами + Просимо зачекати… + Перевірка входу + Вийти з цього сеансу + Це був не я + Повідомлення в цій кімнаті не захищено наскрізним шифруванням. + Повідомлення тут не захищено наскрізним шифруванням. + Увімкнути наскрізне шифрування… + Повідомлення в цій кімнаті наскрізно зашифровані. + Перевірити цей сеанс + Перевірте цей сеанс, підтвердивши, що на екрані партнера з’являються такі цифри + Перевірте цей сеанс, підтвердивши, що на екрані партнера з’являються ці емоджі + Перевірте цей сеанс, щоб позначити його надійним. Довірені сеанси партнерів дають вам додаткову впевненість під час використання наскрізно зашифрованих повідомлень. + Перевірте цей сеанс, щоб позначити його надійним та надати йому доступ до зашифрованих повідомлень. Якщо ви не входили в цей сеанс, ваш обліковий запис може бути зламано: \ No newline at end of file From c79e81347914efa9c5e2500c50c5fe9e88a8f83c Mon Sep 17 00:00:00 2001 From: vachan-maker Date: Mon, 1 Mar 2021 06:51:23 +0000 Subject: [PATCH 161/578] Translated using Weblate (Malayalam) Currently translated at 18.8% (393 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/ml/ --- vector/src/main/res/values-ml/strings.xml | 50 +++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/vector/src/main/res/values-ml/strings.xml b/vector/src/main/res/values-ml/strings.xml index 867f91d586..7a85a8906f 100644 --- a/vector/src/main/res/values-ml/strings.xml +++ b/vector/src/main/res/values-ml/strings.xml @@ -363,4 +363,54 @@ ആളുകളെ ഫിൽറ്റർ കീ ബാക്കപ്പ് ഉപയൊഗിക്കുക കീ ബാക്കപ്പ് പൂർത്തിയായിട്ടില്ല, കാത്തിരിക്കൂ… + ഫോൺ നമ്പറുകൾ + ഈമെയിൽ വിലാസം + അപ്ലിക്കേഷൻ വിവരം + ഫോൺ നമ്പർ ചേർക്കുക + ഫോൺ + ഈ - മെയിൽ വിലാസം ചേർക്കുക + ഈ - മെയിൽ + പ്രദർശന നാമം + പ്രൊഫൈൽ ചിത്രം + സ്വകാര്യതാ നയം + മൂന്നാം കക്ഷി അറിയിപ്പുകൾ + നിബന്ധനകളും വ്യവസ്ഥകളും + പതിപ്പ് %s + പതിപ്പ് + സൂചനകൾ മാത്രം + എല്ലാ സന്ദേശങ്ങളും + + %d മുറി + %d മുറികൾ + + ഒരു മുറിയിൽ ചേരുക + മുറിയിൽ ചേരുക + മുറി സൃഷ്ടിക്കൂ + ചാറ്റ് ആരംഭിക്കുക + ഫലങ്ങളൊന്നുമില്ല + മുറി വിശദാംശങ്ങൾ + വിഷയം മാറ്റുക + മുറിയുടെ പേര് മാറ്റുക + എല്ലാവരേയും അറിയിക്കുക + ഉപയോക്താക്കളെ നിരോധിക്കുക + ഉപയോക്താക്കളെ പുറത്താക്കുക + ക്രമീകരണങ്ങൾ മാറ്റുക + ഉപയോക്താക്കളെ ക്ഷണിക്കുക + സന്ദേശങ്ങൾ അയയ്ക്കൂ + മുറിയുടെ അനുമതികൾ + വിശ്വസിക്കുക + ഫയൽ കണ്ടെത്തിയില്ല + ഒരു മറുപടി അയയ്‌ക്കുക(എൻ‌ക്രിപ്റ്റ് ചെയ്യാത്ത)… + നിരോനിരോധിക്കാനുള്ള കാരണം + ഉപയോക്താവിനെ നിരോധിക്കുക + പുറത്താക്കാനുള്ള കാരണം + ഉപയോക്താവിനെ പുറത്താക്കുക + അവഗണിക്കൂ + ഉപയോക്താവിനെ അവഗണിക്കുക + തരംതാഴ്ത്തുക + സ്വയം തരംതാഴ്ത്തണോ\? + സെഷൻ പട്ടിക കാണിക്കുക + പുറത്തിറങ്ങുക + പുറത്തിറങ്ങുക + കീ ബാക്കപ്പ് ഉപയൊഗിക്കൂ \ No newline at end of file From b899753d0747f7371c59f894f199e54ab19064e6 Mon Sep 17 00:00:00 2001 From: sx0d Date: Tue, 2 Mar 2021 15:31:27 +0000 Subject: [PATCH 162/578] Translated using Weblate (Uzbek) Currently translated at 4.9% (104 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/uz/ --- vector/src/main/res/values-uz/strings.xml | 112 +++++++++++++++++++++- 1 file changed, 111 insertions(+), 1 deletion(-) diff --git a/vector/src/main/res/values-uz/strings.xml b/vector/src/main/res/values-uz/strings.xml index a6b3daec93..1205d099e5 100644 --- a/vector/src/main/res/values-uz/strings.xml +++ b/vector/src/main/res/values-uz/strings.xml @@ -1,2 +1,112 @@ - \ No newline at end of file + + Koʻtarish + Rad etish + Koʻrib chiqish + Eʼtiborsiz qoldirish + Tugatish + Bajarildi + O\'tkazib yuborish + Qabul qilish + Taklif qilish + yoki + Baribir joʻnatish + Baribir qo\'ng\'iroq qilish + Shifrlangan xonalarda konferents-qo\'ng\'iroqlar qo\'llab-quvvatlanmaydi + Siz o\'zingiz bilan qo\'ng\'iroq qila olmaysiz, ishtirokchilar taklifnomani qabul qilishini kuting + Siz o\'zingiz bilan qo\'ng\'iroq qila olmaysiz + Uchrashuvlarda Jitsi xavfsizlik va ruxsat berish qoidalari qo\'llaniladi. Xonada hozir bo\'lgan barcha odamlar sizning uchrashuvingiz o\'tayotganda qo\'shilishga taklifni ko\'rishadi. + Konferentsiya allaqachon davom etmoqda! + Sizda qo\'ng\'iroqni boshlash uchun ruxsat yo\'q + Ushbu xonada qoʻngʻiroqni amalga oshirishga ruxsatingiz yo‘q + Konferentsiya qo\'ng\'irog\'ini boshlash uchun sizning ruxsatingiz yo\'q + Ushbu xonada konferents-aloqani boshlashga ruxsatingiz yo‘q + Ushbu xonada konferentsiya boshlash uchun taklif qilish uchun sizga ruxsat kerak + Ruxsat yoʻqligi sababli bu harakat amalga oshirilmaydi + Ruxsat yoʻqligi sababli ayrim imkoniyatlar yo‘q bo‘lishi mumkin… + Joriy konferts-aloaqa. +\n%1$s yoki %2$s sifatida qoʻshilish + Chatni boshlash + Qayta oʻrnatish + Bekor qilish + Ijro etmoq + Faol qo\'ng\'iroq + Hisobot mazmuni + Ajratish + Bekor qilish + Yoʻq + Shifrlangan manbani ko‘rish + Manbani ko‘rish + Doimiy aloqa + Oldinga + Keyinroq + Uchinchi tomonlarning litsenziyalari + Chiqishdan oldin kalitlarning zaxira nusxasini yaratmasangiz, shifrlangan xabarlardan foydalanishni yo‘qotishingiz mumkin. + Zaxiraga nusxa olish + Ishonchingiz komilmi\? + Kalitlarni rezervlashdan foydalanish + Kalitlar rezervga olinmoqda… + Shifrlangan xabar kerak emas + Kalitlarni xavfsiz nusxa olish faoliyati shifrlangan xabarlardan foydalanishni yo‘qotmaslik uchun barcha seanslarda faol bo‘lishi kerak. + Kalitni saqlash amalga oshirilmoqda. Ayni paytda chiqsangiz, shifrlangan xabarlaringizni yoʻqotishingiz mumkin. + Kalitlarni arxivlash yakunlanmadi, kuting… + Kalitlarni rezervlashdan foydalanish + Kalitlarni rezervga olish + Hamjamiyat haqida ma’lumot + Ishtirokchi haqida ma’lumot + Sozlamalar + Tovushsiz bildirishnomalar + Shovqinli bildirishnomalar + Hodisalarni tinglash + Xizmat ishga tushirilmoqda + Status.im temasi + Qop-qora tema + Qora tema + Oq tema + Tizim tanlovi boʻyicha + Agar hozir chiqsangiz shifrlangan xabarlaringizni yoʻqotasiz + Sinxronizatsiya… + Xatolik toʻgʻrisida xabar berish + Loglarni joʻnatish + Xonalar yoʻq + Guruhlar yoʻq + Chaqirish + Boshqa natijalar yoʻq + Natija yoʻq + Faqat Matrix kontaktlari uchun + Xonalar + Xato + Ogohlantirish + Buferga koʻchirildi + Qoʻshish + Offlayn + Vidjetni oʻchirib boʻlmadi + Vidjet qoʻshib boʻlmadi + Sessiya haqida informatsiya + Qoʻngʻiroqni amalga oshirish imkoniyati yoʻq + Audio suhbatni boshlash + Video suhbatni boshlash + Qoʻngʻiroqni amalga oshirish imkoniyati yoʻq, iltimos keyinroq urunib koʻring + Video + Ovoz + Pauza + Qayta nomlash + Oʻchirib tashlash + Tozalash + Gapirish + Tarqatish + Yuklash + Oʻchirish + Qayta joʻnatish + Joʻnatish + Qolish + Chiqish + Saqlash + Bekor qilish + OK + Yuklanmoqda… + Sessiyani verifikatsiya qilish + Stiker joʻnatish + Xabarlar + Xona + \ No newline at end of file From 755fad780849ec26f4d866783a2324d59524c8f8 Mon Sep 17 00:00:00 2001 From: HelaBasa Date: Tue, 2 Mar 2021 17:27:20 +0000 Subject: [PATCH 163/578] Translated using Weblate (Sinhala) Currently translated at 9.0% (1 of 11 strings) Translation: Element Android/Element Android Store Translate-URL: https://translate.element.io/projects/element-android/element-store/si/ --- fastlane/metadata/android/si/title.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 fastlane/metadata/android/si/title.txt diff --git a/fastlane/metadata/android/si/title.txt b/fastlane/metadata/android/si/title.txt new file mode 100644 index 0000000000..83955cd75e --- /dev/null +++ b/fastlane/metadata/android/si/title.txt @@ -0,0 +1 @@ +ඉලෙමන්ට් (මීට පෙර Riot.im) From 36dae971617225d19a0e2612e1f6164aa0e923b9 Mon Sep 17 00:00:00 2001 From: HelaBasa Date: Tue, 2 Mar 2021 17:32:11 +0000 Subject: [PATCH 164/578] Translated using Weblate (Sinhala) Currently translated at 0.1% (4 of 2081 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/si/ --- vector/src/main/res/values-si/strings.xml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/vector/src/main/res/values-si/strings.xml b/vector/src/main/res/values-si/strings.xml index a6b3daec93..6ce16c8d85 100644 --- a/vector/src/main/res/values-si/strings.xml +++ b/vector/src/main/res/values-si/strings.xml @@ -1,2 +1,7 @@ - \ No newline at end of file + + පණිවිඩ + සැකසුම් + කාමරය + අඳුරු තේමාව + \ No newline at end of file From 7864707699df41a866e5ea0644427166830b0ee1 Mon Sep 17 00:00:00 2001 From: HelaBasa Date: Tue, 2 Mar 2021 17:32:41 +0000 Subject: [PATCH 165/578] Translated using Weblate (Sinhala) Currently translated at 0.4% (1 of 226 strings) Translation: Element Android/Element Android Sdk Translate-URL: https://translate.element.io/projects/element-android/element-sdk/si/ --- matrix-sdk-android/src/main/res/values-si/strings.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/matrix-sdk-android/src/main/res/values-si/strings.xml b/matrix-sdk-android/src/main/res/values-si/strings.xml index a6b3daec93..c0c6522ed4 100644 --- a/matrix-sdk-android/src/main/res/values-si/strings.xml +++ b/matrix-sdk-android/src/main/res/values-si/strings.xml @@ -1,2 +1,4 @@ - \ No newline at end of file + + %1$s: %2$s + \ No newline at end of file From 3f10be2ad355b2e18bf68a997e3737f4c8a1c0bc Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 3 Mar 2021 11:14:18 +0100 Subject: [PATCH 166/578] Fix lint issue --- vector/src/main/res/values-ml/strings.xml | 2 +- vector/src/main/res/values-nb-rNO/strings.xml | 4 ++-- vector/src/main/res/values-sq/strings.xml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/vector/src/main/res/values-ml/strings.xml b/vector/src/main/res/values-ml/strings.xml index 7a85a8906f..6197c74568 100644 --- a/vector/src/main/res/values-ml/strings.xml +++ b/vector/src/main/res/values-ml/strings.xml @@ -285,7 +285,7 @@ നിരോധിക്കൂ പുനഃസജ്ജമാക്കൂ ഒന്നുമില്ല - സജീവ കോൾ () + സജീവ കോൾ (%1$s) %1$s ഈ കോൾ നിരസിച്ചു അത് ഞാൻ ആയിരുന്നു പൂർത്തിയാക്കൂ diff --git a/vector/src/main/res/values-nb-rNO/strings.xml b/vector/src/main/res/values-nb-rNO/strings.xml index 6865537fbb..830fb79dea 100644 --- a/vector/src/main/res/values-nb-rNO/strings.xml +++ b/vector/src/main/res/values-nb-rNO/strings.xml @@ -1503,7 +1503,7 @@ Legg til en knapp på meldingskomponisten for å åpne emoji-tastaturet Vis emoji-tastatur Enter-knappen på det myke tastaturet vil sende melding i stedet for å legge til en linjeskift - Forhåndsvis media før sending + Forhåndsvis medier før sending Vibrer når du nevner en bruker Bruk kommandoen /confetti eller send en melding som inneholder ❄️ eller 🎉 Klikk på lest kvitteringene for en detaljert liste. @@ -1512,7 +1512,7 @@ La andre brukere vite at du skriver. Telefonbok land Kontakter tillatelse - Behold media + Behold medier Tredjeparts varsler %d sekund diff --git a/vector/src/main/res/values-sq/strings.xml b/vector/src/main/res/values-sq/strings.xml index cc94d538e8..8e61371808 100644 --- a/vector/src/main/res/values-sq/strings.xml +++ b/vector/src/main/res/values-sq/strings.xml @@ -2290,7 +2290,7 @@ Pjesa e numrave Ktheji thirrjen Kjo thirrje ka përfunduar - %1$d hodhi poshtë këtë thirrje + %1$s hodhi poshtë këtë thirrje Hodhët poshtë këtë thirrje %1$s Gjendeni në këtë thirrje %1$s nisi një thirrje From 19288f29509cdee7f9eff5097fe88522345fd67a Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 3 Mar 2021 11:17:25 +0100 Subject: [PATCH 167/578] Remove unused string --- vector/src/main/res/values-ar/strings.xml | 1 - vector/src/main/res/values-b+sr+Latn/strings.xml | 1 - vector/src/main/res/values-bg/strings.xml | 1 - vector/src/main/res/values-bn-rIN/strings.xml | 1 - vector/src/main/res/values-ca/strings.xml | 1 - vector/src/main/res/values-cs/strings.xml | 1 - vector/src/main/res/values-cy/strings.xml | 1 - vector/src/main/res/values-de/strings.xml | 1 - vector/src/main/res/values-el/strings.xml | 1 - vector/src/main/res/values-eo/strings.xml | 1 - vector/src/main/res/values-es-rMX/strings.xml | 1 - vector/src/main/res/values-es/strings.xml | 1 - vector/src/main/res/values-et/strings.xml | 1 - vector/src/main/res/values-eu/strings.xml | 2 -- vector/src/main/res/values-fa/strings.xml | 1 - vector/src/main/res/values-fi/strings.xml | 1 - vector/src/main/res/values-fr/strings.xml | 1 - vector/src/main/res/values-fy/strings.xml | 1 - vector/src/main/res/values-gl/strings.xml | 1 - vector/src/main/res/values-he/strings.xml | 1 - vector/src/main/res/values-hr/strings.xml | 1 - vector/src/main/res/values-hu/strings.xml | 1 - vector/src/main/res/values-id/strings.xml | 1 - vector/src/main/res/values-in/strings.xml | 1 - vector/src/main/res/values-it/strings.xml | 1 - vector/src/main/res/values-iw/strings.xml | 1 - vector/src/main/res/values-ja/strings.xml | 1 - vector/src/main/res/values-kab/strings.xml | 1 - vector/src/main/res/values-ko/strings.xml | 1 - vector/src/main/res/values-lv/strings.xml | 1 - vector/src/main/res/values-ml/strings.xml | 1 - vector/src/main/res/values-nb-rNO/strings.xml | 1 - vector/src/main/res/values-nl/strings.xml | 1 - vector/src/main/res/values-nn/strings.xml | 1 - vector/src/main/res/values-pl/strings.xml | 1 - vector/src/main/res/values-pt-rBR/strings.xml | 1 - vector/src/main/res/values-pt/strings.xml | 1 - vector/src/main/res/values-ro/strings.xml | 1 - vector/src/main/res/values-ru/strings.xml | 1 - vector/src/main/res/values-sk/strings.xml | 2 -- vector/src/main/res/values-sq/strings.xml | 1 - vector/src/main/res/values-sr/strings.xml | 1 - vector/src/main/res/values-sv/strings.xml | 1 - vector/src/main/res/values-szl/strings.xml | 1 - vector/src/main/res/values-tr/strings.xml | 1 - vector/src/main/res/values-tzm/strings.xml | 1 - vector/src/main/res/values-uk/strings.xml | 1 - vector/src/main/res/values-uz/strings.xml | 1 - vector/src/main/res/values-vls/strings.xml | 1 - vector/src/main/res/values-zh-rCN/strings.xml | 1 - vector/src/main/res/values-zh-rTW/strings.xml | 1 - vector/src/main/res/values/strings.xml | 1 - 52 files changed, 54 deletions(-) diff --git a/vector/src/main/res/values-ar/strings.xml b/vector/src/main/res/values-ar/strings.xml index 390a68c24b..9503e002d7 100644 --- a/vector/src/main/res/values-ar/strings.xml +++ b/vector/src/main/res/values-ar/strings.xml @@ -914,6 +914,5 @@ لا أريد رسائلي المشفرة نسخ إحتياطي للمفتاح جاري إعداد الخدمة - سمة Status.im إفتراضي النظام \ No newline at end of file diff --git a/vector/src/main/res/values-b+sr+Latn/strings.xml b/vector/src/main/res/values-b+sr+Latn/strings.xml index 29bd40b977..4f0e663297 100644 --- a/vector/src/main/res/values-b+sr+Latn/strings.xml +++ b/vector/src/main/res/values-b+sr+Latn/strings.xml @@ -4,7 +4,6 @@ Svetla Tema Tamna Tema Crna Tema - Status.im Tema Inicijalizacija servisa Sinhronizacija u toku… diff --git a/vector/src/main/res/values-bg/strings.xml b/vector/src/main/res/values-bg/strings.xml index c2235f3cd0..4f1848394e 100644 --- a/vector/src/main/res/values-bg/strings.xml +++ b/vector/src/main/res/values-bg/strings.xml @@ -811,7 +811,6 @@ Подобрява производителността като зарежда членовете в стаите при първи преглед. Сървърът Ви все още не поддържа постепенно зареждане на членовете в стаи. Опитайте по-късно. Съжаляваме, възникна грешка - Status.im тема Версия %s Моля, въведете парола за шифроване на екпортираните ключове. Ще е нужно да въведете същата парола за да можете да ги импортирате. Създай парола diff --git a/vector/src/main/res/values-bn-rIN/strings.xml b/vector/src/main/res/values-bn-rIN/strings.xml index afb13b26f0..9cbe122897 100644 --- a/vector/src/main/res/values-bn-rIN/strings.xml +++ b/vector/src/main/res/values-bn-rIN/strings.xml @@ -4,7 +4,6 @@ হালকা থিম গাঢ় থিম কালো থিম - Status.im থিম সিংক্রোনাইজ হচ্ছে… ইভেন্টের জন্য শোনা হচ্ছে diff --git a/vector/src/main/res/values-ca/strings.xml b/vector/src/main/res/values-ca/strings.xml index 961a2b8731..46a7514f62 100644 --- a/vector/src/main/res/values-ca/strings.xml +++ b/vector/src/main/res/values-ca/strings.xml @@ -759,7 +759,6 @@ Sol·licitud enviada Si us plau, obre Element a un altre dispositiu que pugui desxifrar el missatge de manera que pugui enviar les claus a aquesta sessió. Normal - Tema Status.im No es pot dur a terme aquesta acció per falta de permisos. Error Alertes de sistema diff --git a/vector/src/main/res/values-cs/strings.xml b/vector/src/main/res/values-cs/strings.xml index 2277157028..bac765be5a 100644 --- a/vector/src/main/res/values-cs/strings.xml +++ b/vector/src/main/res/values-cs/strings.xml @@ -177,7 +177,6 @@ Poškozený JSON Bylo odesláno příliš mnoho požadavků Toto uživatelské jméno je již použito - Motiv vzhledu Status.im Odeslat nálepku Licenční smlouvy třetích stran Stáhnout diff --git a/vector/src/main/res/values-cy/strings.xml b/vector/src/main/res/values-cy/strings.xml index ccfefa7c0d..db0ff9b498 100644 --- a/vector/src/main/res/values-cy/strings.xml +++ b/vector/src/main/res/values-cy/strings.xml @@ -4,7 +4,6 @@ Thema Golau Thema Tywyll Thema Du - Thema Status.im Yn paratoi gwasanaeth diff --git a/vector/src/main/res/values-de/strings.xml b/vector/src/main/res/values-de/strings.xml index a5015b2117..ffa4acac7f 100644 --- a/vector/src/main/res/values-de/strings.xml +++ b/vector/src/main/res/values-de/strings.xml @@ -863,7 +863,6 @@ Dein Home-Server unterstützt noch nicht das Nachladen von Raummitgliedern. Versuche es später. Entschuldige, ein Fehler trat auf Version %s - Status.im-Design Bitte eine Passphrase erstellen um exportierte Schlüssel zu verschlüsseln. Du musst dieselbe Passphrase eingeben um die Schlüssel importieren zu können. Erzeuge Passphrase Passphrasen stimmen nicht überein diff --git a/vector/src/main/res/values-el/strings.xml b/vector/src/main/res/values-el/strings.xml index 98907a6a53..1b38a9553a 100644 --- a/vector/src/main/res/values-el/strings.xml +++ b/vector/src/main/res/values-el/strings.xml @@ -44,7 +44,6 @@ Ανοιχτόχρωμο θέμα Σκουρόχρωμο θέμα Μαύρο θέμα - Θέμα Status.im Αποστολή αυτοκόλλητου Άδειες τρίτων Αργότερα diff --git a/vector/src/main/res/values-eo/strings.xml b/vector/src/main/res/values-eo/strings.xml index 51c0c4ee50..f6cca89791 100644 --- a/vector/src/main/res/values-eo/strings.xml +++ b/vector/src/main/res/values-eo/strings.xml @@ -84,7 +84,6 @@ Uzi savkopiadon de ŝlosiloj Kontroli salutaĵon Kontroli salutaĵon - Haŭto de Status.im Savkopio de ŝlosiloj ne finiĝis; bonvolu atendi… Vi perdos viajn ĉifritajn mesaĝojn se vi nun adiaŭos Progresas savkopio de ŝlosiloj. Se vi nun adiaŭos, vi perdos aliron al viaj ĉifritaj mesaĝoj. diff --git a/vector/src/main/res/values-es-rMX/strings.xml b/vector/src/main/res/values-es-rMX/strings.xml index 6ddb1d53ac..fd7d9fe790 100644 --- a/vector/src/main/res/values-es-rMX/strings.xml +++ b/vector/src/main/res/values-es-rMX/strings.xml @@ -622,7 +622,6 @@ Dispositivos desconocidos: Borrar Debido a que faltan permisos, esta acción no es posible. Informe de error - Tema de Status.im Detalles sobre la comunidad Enviar una calcomanía Licencias de terceros diff --git a/vector/src/main/res/values-es/strings.xml b/vector/src/main/res/values-es/strings.xml index 9dec86234d..0d24729a57 100644 --- a/vector/src/main/res/values-es/strings.xml +++ b/vector/src/main/res/values-es/strings.xml @@ -862,7 +862,6 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Este servidor doméstico ha alcanzado su límite Mensual de Usuarios Activos. Por favor, %s para aumentar este límite. Por favor, %s para continuar utilizando este servicio. - Tema de Status.im Error Versión %s Por favor, crea una frase de contraseña para cifrar las claves exportadas. Necesitarás ingresar la misma frase de contraseña para poder importar las claves. diff --git a/vector/src/main/res/values-et/strings.xml b/vector/src/main/res/values-et/strings.xml index 928aa9a9b3..e04af0f5df 100644 --- a/vector/src/main/res/values-et/strings.xml +++ b/vector/src/main/res/values-et/strings.xml @@ -3,7 +3,6 @@ Hele teema Tume teema Must teema - Status.im teema Käivitan teenuse Sünkroniseerin… Kuulan, kas leidub sündmusi diff --git a/vector/src/main/res/values-eu/strings.xml b/vector/src/main/res/values-eu/strings.xml index cf14fee03f..5ac7769e07 100644 --- a/vector/src/main/res/values-eu/strings.xml +++ b/vector/src/main/res/values-eu/strings.xml @@ -974,8 +974,6 @@ Matrix-eko mezuen ikusgaitasuna e-mail sistemaren antekoa da. Guk zure mezuak ah Errore bat gertatu da - Status.im azala - %s bertsioa Sortu esportatutako gakoak zifratzeko pasaesaldi bat. Pasaesaldi hori gakoak inportatzeko sartu beharko duzu. Sortu pasaesaldia diff --git a/vector/src/main/res/values-fa/strings.xml b/vector/src/main/res/values-fa/strings.xml index e852025e89..906b5cfb07 100644 --- a/vector/src/main/res/values-fa/strings.xml +++ b/vector/src/main/res/values-fa/strings.xml @@ -252,7 +252,6 @@ آیا می‌خواهید از حساب کاربری خود خارج شوید؟ علامت‌گذاری به عنوان خوانده شده ورود با سامانه‌های احراز هویت مرکزی - زمینهٔ Status.im در حال راه‌اندازی سرویس آگاهی‌های پرصدا آگاهی‌های صامت diff --git a/vector/src/main/res/values-fi/strings.xml b/vector/src/main/res/values-fi/strings.xml index 3b945069f7..e721291a4a 100644 --- a/vector/src/main/res/values-fi/strings.xml +++ b/vector/src/main/res/values-fi/strings.xml @@ -715,7 +715,6 @@ Salasana Kirjoita salasanasi jatkaaksesi: Kirjoita salasanasi. - Status.im-teema Lähetä kirjoitusilmoitukset Näytä lukukuittaukset Näytä liittymiset ja poistumiset diff --git a/vector/src/main/res/values-fr/strings.xml b/vector/src/main/res/values-fr/strings.xml index 2d11932681..0bebb626e9 100644 --- a/vector/src/main/res/values-fr/strings.xml +++ b/vector/src/main/res/values-fr/strings.xml @@ -810,7 +810,6 @@ Améliore les performances en ne chargeant les membres des salons qu’au premier affichage. Votre serveur d’accueil ne prend pas encore en charge le chargement en différé des membres des salons. Réessayez ultérieurement. Désolé, une erreur est survenue - Thème Status.im Version %s Veuillez créer une phrase secrète pour chiffrer les clés exportées. Vous devrez saisir cette même phrase secrète afin de pouvoir importer les clés. Créer la phrase secrète diff --git a/vector/src/main/res/values-fy/strings.xml b/vector/src/main/res/values-fy/strings.xml index bd6631a0d9..af264e5723 100644 --- a/vector/src/main/res/values-fy/strings.xml +++ b/vector/src/main/res/values-fy/strings.xml @@ -3,7 +3,6 @@ Ljocht tema Donker tema Swart tema - Status.im-tema Tsjinst inisjalisearje Syngronisearje… diff --git a/vector/src/main/res/values-gl/strings.xml b/vector/src/main/res/values-gl/strings.xml index 2fec2ecf61..f0c7832dc6 100644 --- a/vector/src/main/res/values-gl/strings.xml +++ b/vector/src/main/res/values-gl/strings.xml @@ -567,6 +567,5 @@ Usar copia da Chave Copia de apoio da chave Iniciando o servizo - Decorado Status.im Por defecto no sistema \ No newline at end of file diff --git a/vector/src/main/res/values-he/strings.xml b/vector/src/main/res/values-he/strings.xml index 81d89ff563..3a5e86445b 100644 --- a/vector/src/main/res/values-he/strings.xml +++ b/vector/src/main/res/values-he/strings.xml @@ -120,7 +120,6 @@ האזנה לאירועים מסנכרן… אתחול השירות - ערכת נושא Status.im ערכת נושא שחורה ערכת נושא כהה ערכת נושא בהירה diff --git a/vector/src/main/res/values-hr/strings.xml b/vector/src/main/res/values-hr/strings.xml index 3feac0f644..d672a48c50 100644 --- a/vector/src/main/res/values-hr/strings.xml +++ b/vector/src/main/res/values-hr/strings.xml @@ -3,7 +3,6 @@ Svijetla tema Tamna tema Crna tema - Tema Status.im-a Inicijalizacija servisa Sinkronizacija u tijeku… Osluškivanje događaja diff --git a/vector/src/main/res/values-hu/strings.xml b/vector/src/main/res/values-hu/strings.xml index e25626c2e6..78b446c53a 100644 --- a/vector/src/main/res/values-hu/strings.xml +++ b/vector/src/main/res/values-hu/strings.xml @@ -810,7 +810,6 @@ Matrixban az üzenetek láthatósága hasonlít az e-mailre. Az üzenet törlés Teljesítmény növelése a szoba tagjainak késleltetett betöltésével. A Matrix szervered jelenleg nem támogatja a szoba tagság késleltetett betöltését. Próbáld meg később. Ne haragudj, hiba történt - Status.im téma Verzió: %s Adj meg egy jelmondatot a kimentett kulcsok titkosításához. Ezt a jelmondatot kell majd megadnod a kulcsok betöltéséhez. Jelmondat lekészítése diff --git a/vector/src/main/res/values-id/strings.xml b/vector/src/main/res/values-id/strings.xml index 24f9cea581..97ff704aa4 100644 --- a/vector/src/main/res/values-id/strings.xml +++ b/vector/src/main/res/values-id/strings.xml @@ -930,7 +930,6 @@ Tindakan ini akan memulai ulang aplikasi dan mungkin cukup memakan waktu.Avatar pemberitahu Avatar penerima Demosi pengguna dengan id berikut - Tema Status.im Tetap Panggil Terima diff --git a/vector/src/main/res/values-in/strings.xml b/vector/src/main/res/values-in/strings.xml index 24f9cea581..97ff704aa4 100644 --- a/vector/src/main/res/values-in/strings.xml +++ b/vector/src/main/res/values-in/strings.xml @@ -930,7 +930,6 @@ Tindakan ini akan memulai ulang aplikasi dan mungkin cukup memakan waktu.Avatar pemberitahu Avatar penerima Demosi pengguna dengan id berikut - Tema Status.im Tetap Panggil Terima diff --git a/vector/src/main/res/values-it/strings.xml b/vector/src/main/res/values-it/strings.xml index b3e6992439..060ea56a52 100644 --- a/vector/src/main/res/values-it/strings.xml +++ b/vector/src/main/res/values-it/strings.xml @@ -868,7 +868,6 @@ Il tuo Home Server non supporta ancora il caricamento differito dei membri delle stanze. Prova più avanti. Spiacente, si è verificato un errore Caricamento differito dei membri della stanza - Tema Status.im Versione %s Crea una password per mettere al sicuro le chiavi esportate. La stessa password dovrà essere usata per poter importare le chiavi. Crea una password diff --git a/vector/src/main/res/values-iw/strings.xml b/vector/src/main/res/values-iw/strings.xml index 81d89ff563..3a5e86445b 100644 --- a/vector/src/main/res/values-iw/strings.xml +++ b/vector/src/main/res/values-iw/strings.xml @@ -120,7 +120,6 @@ האזנה לאירועים מסנכרן… אתחול השירות - ערכת נושא Status.im ערכת נושא שחורה ערכת נושא כהה ערכת נושא בהירה diff --git a/vector/src/main/res/values-ja/strings.xml b/vector/src/main/res/values-ja/strings.xml index 66a57da12a..259982025f 100644 --- a/vector/src/main/res/values-ja/strings.xml +++ b/vector/src/main/res/values-ja/strings.xml @@ -788,7 +788,6 @@ Matrixでのメッセージの可視性は電子メールと同様です。メ あなたのホームサーバは部屋のメンバーの簡易読み込みをサポートしていません。後で試してください。 部屋のメンバーの簡易読み込み 申し訳ありません、エラーが発生しました - Status.im テーマ Version %s エクスポートされた鍵を暗号化するパスフレーズを作成してください。 キーをインポートするには、同じパスフレーズを入力する必要があります。 パスフレーズの作成 diff --git a/vector/src/main/res/values-kab/strings.xml b/vector/src/main/res/values-kab/strings.xml index 74075318d4..8988c4ade1 100644 --- a/vector/src/main/res/values-kab/strings.xml +++ b/vector/src/main/res/values-kab/strings.xml @@ -413,7 +413,6 @@ Isem n texxamt Tura, Riot d aferdis! Sefesex tinnubga - Asentel Status.im Amtawi… Timesliwt i yineḍruyen Ilɣa s tsusmi diff --git a/vector/src/main/res/values-ko/strings.xml b/vector/src/main/res/values-ko/strings.xml index c14f0466fa..51ddb6850d 100644 --- a/vector/src/main/res/values-ko/strings.xml +++ b/vector/src/main/res/values-ko/strings.xml @@ -111,7 +111,6 @@ 비밀번호 새 비밀번호 사용자 이름 - Status.im 테마 서비스 초기화 중 소리로 알림 diff --git a/vector/src/main/res/values-lv/strings.xml b/vector/src/main/res/values-lv/strings.xml index 88975c01f4..180d6d748d 100644 --- a/vector/src/main/res/values-lv/strings.xml +++ b/vector/src/main/res/values-lv/strings.xml @@ -1002,7 +1002,6 @@ Nākotnē šī pārbaudes procedūra plānota sarežģītāka. Palikt Vai tiešām to vēlaties\? Verificēt ierīci - Status.im tēma Sistēmas noklusējuma Pielāgots (%1$d) iekš %2$s Noklusējums iekš %1$s diff --git a/vector/src/main/res/values-ml/strings.xml b/vector/src/main/res/values-ml/strings.xml index 6197c74568..20ee803f30 100644 --- a/vector/src/main/res/values-ml/strings.xml +++ b/vector/src/main/res/values-ml/strings.xml @@ -250,7 +250,6 @@ മുറി നാമങ്ങൾ ഫിൽറ്റർ ചെയ്യൂ എന്തായാലും അയയ്ക്കൂ കീ ബാക്കപ്പ് - Status.im തീം കറുത്ത തീം ഡാ൪ക്ക് തീം ലൈറ്റ് തീം diff --git a/vector/src/main/res/values-nb-rNO/strings.xml b/vector/src/main/res/values-nb-rNO/strings.xml index 830fb79dea..3f96911403 100644 --- a/vector/src/main/res/values-nb-rNO/strings.xml +++ b/vector/src/main/res/values-nb-rNO/strings.xml @@ -380,7 +380,6 @@ Ja Advarsel: Bekreft fjerning - Status.im-tema Lytter etter hendelser Verifiser økten Aktiv samtale diff --git a/vector/src/main/res/values-nl/strings.xml b/vector/src/main/res/values-nl/strings.xml index 76bf7e6e80..5d2c847e27 100644 --- a/vector/src/main/res/values-nl/strings.xml +++ b/vector/src/main/res/values-nl/strings.xml @@ -861,7 +861,6 @@ Gelieve %s om deze limiet te verhogen. Gelieve %s om deze dienst te blijven gebruiken. Foutmelding - Status.im-thema Toch bellen Aanvaarden Gelieve het beleid van deze thuisserver te lezen en aanvaarden: diff --git a/vector/src/main/res/values-nn/strings.xml b/vector/src/main/res/values-nn/strings.xml index af2c42051f..203cd0834d 100644 --- a/vector/src/main/res/values-nn/strings.xml +++ b/vector/src/main/res/values-nn/strings.xml @@ -789,7 +789,6 @@ Meldingssynlegheit på Matrix liknar på epost. At vi gløymer meldingane dine t Heimtenaren har truffe den Månadlege Grensa si for Aktive Brukarar. Ver venleg og %s for å heva grensa. Ver venleg og %s for å halda fram med å bruka tenesten. - Status.im-tema Ring likevel Aksepter Feil diff --git a/vector/src/main/res/values-pl/strings.xml b/vector/src/main/res/values-pl/strings.xml index f69dc1d5d2..95b624df9a 100644 --- a/vector/src/main/res/values-pl/strings.xml +++ b/vector/src/main/res/values-pl/strings.xml @@ -774,7 +774,6 @@ Widoczność wiadomości w Matrix jest podobna do wiadomości e-mail. Nasze zapo Kliknij tutaj, aby zobaczyć starsze wiadomości Przepraszamy, wystąpił błąd - Motyw Status.im Z powodu braku uprawnień to działanie nie jest możliwe. Alerty systemowe Jeżeli to możliwe, proszę napisz opis w języku angielskim. diff --git a/vector/src/main/res/values-pt-rBR/strings.xml b/vector/src/main/res/values-pt-rBR/strings.xml index ff35ff868c..59b5ea9405 100644 --- a/vector/src/main/res/values-pt-rBR/strings.xml +++ b/vector/src/main/res/values-pt-rBR/strings.xml @@ -864,7 +864,6 @@ Por favor, %s para que este limite seja aumentado. Por favor, %s para seguir usando este serviço. Crie uma frase secreta para criptografar as chaves exportadas. Você precisará inserir essa frase secreta para importar chaves criptografadas. - Tema Status.im Aceitar Erro Por favor, revise e aceite as políticas deste servidor local: diff --git a/vector/src/main/res/values-pt/strings.xml b/vector/src/main/res/values-pt/strings.xml index d2e181dbe7..a19e3fe56f 100644 --- a/vector/src/main/res/values-pt/strings.xml +++ b/vector/src/main/res/values-pt/strings.xml @@ -619,7 +619,6 @@ Dispositivos desconhecidos: Adicionar apps Matrix A sincronizar… À escuta de eventos - Tema Status.im Notificações ruidosas Notificações silenciosas Relatório de bug diff --git a/vector/src/main/res/values-ro/strings.xml b/vector/src/main/res/values-ro/strings.xml index dcb3f33dee..39cce6c5b1 100644 --- a/vector/src/main/res/values-ro/strings.xml +++ b/vector/src/main/res/values-ro/strings.xml @@ -3,7 +3,6 @@ Temă luminoasă Temă întunecată Temă Neagră - Tema Status.im Inițializează serviciu Sincronizează… diff --git a/vector/src/main/res/values-ru/strings.xml b/vector/src/main/res/values-ru/strings.xml index 5025da3bdd..319f9bb14b 100644 --- a/vector/src/main/res/values-ru/strings.xml +++ b/vector/src/main/res/values-ru/strings.xml @@ -887,7 +887,6 @@ Системные оповещения Лимит ресурсов исчерпан Связаться с администратором - Тема status.im Ошибка Версия %s Создать парольную фразу diff --git a/vector/src/main/res/values-sk/strings.xml b/vector/src/main/res/values-sk/strings.xml index 1a4418e3a3..4268d2ce33 100644 --- a/vector/src/main/res/values-sk/strings.xml +++ b/vector/src/main/res/values-sk/strings.xml @@ -997,8 +997,6 @@ Viditeľnosť správ odoslaných cez matrix funguje podobne ako viditeľnosť sp Prepáčte, vyskytla sa chyba - Vzhľad Status.im - Verzia %s Prosím vytvorte si heslo, ktorým zašifrujete exportované kľúče. Toto isté heslo budete musieť zadať aj pri importe kľúčov z uloženého súboru. Vytvoriť heslo diff --git a/vector/src/main/res/values-sq/strings.xml b/vector/src/main/res/values-sq/strings.xml index 8e61371808..66b3da80c3 100644 --- a/vector/src/main/res/values-sq/strings.xml +++ b/vector/src/main/res/values-sq/strings.xml @@ -3,7 +3,6 @@ Temë e Çelët Temë e Errët Temë e Zezë - Temë Status.im Njoftime të zhurmshme Njoftime të heshtura Mesazhe diff --git a/vector/src/main/res/values-sr/strings.xml b/vector/src/main/res/values-sr/strings.xml index 37a3213ce3..5cb61732b2 100644 --- a/vector/src/main/res/values-sr/strings.xml +++ b/vector/src/main/res/values-sr/strings.xml @@ -3,7 +3,6 @@ светла тема тамна тема црна тема - Status.im тема Иницијализација сервиса Синхронизујем… Бучна обавештења diff --git a/vector/src/main/res/values-sv/strings.xml b/vector/src/main/res/values-sv/strings.xml index b2bf64234c..ee7589d22a 100644 --- a/vector/src/main/res/values-sv/strings.xml +++ b/vector/src/main/res/values-sv/strings.xml @@ -3,7 +3,6 @@ Ljust tema Mörkt tema Svart tema - Status.im-tema Initialiserar tjänst Synkroniserar… Lyssnar efter händelser diff --git a/vector/src/main/res/values-szl/strings.xml b/vector/src/main/res/values-szl/strings.xml index d24e516fd3..2ad61d1f87 100644 --- a/vector/src/main/res/values-szl/strings.xml +++ b/vector/src/main/res/values-szl/strings.xml @@ -56,7 +56,6 @@ Nasuchowanie zdarzyń Synchrōnizowanie… Inicjalizacyjo usugi - Tymat Status.im Czorny tymat Ciymny tymat Jasny tymat diff --git a/vector/src/main/res/values-tr/strings.xml b/vector/src/main/res/values-tr/strings.xml index 1d5b8ed277..0e1237ad33 100644 --- a/vector/src/main/res/values-tr/strings.xml +++ b/vector/src/main/res/values-tr/strings.xml @@ -147,7 +147,6 @@ Şifre Yeni şifre Kullanıcı adı - Status.im Teması Anahtar Yedekleme Anahtar Yedekleme\'yi Kullan Anahtar yedekleme tamamlanmadı, lütfen bekleyiniz… diff --git a/vector/src/main/res/values-tzm/strings.xml b/vector/src/main/res/values-tzm/strings.xml index 9054e9e2b1..befe8dd878 100644 --- a/vector/src/main/res/values-tzm/strings.xml +++ b/vector/src/main/res/values-tzm/strings.xml @@ -2,7 +2,6 @@ Tisɣal Tuzinin - Asgum Status.im Tisɣal Tisɣal Tisɣal diff --git a/vector/src/main/res/values-uk/strings.xml b/vector/src/main/res/values-uk/strings.xml index 34dd2b1462..6de37cec86 100644 --- a/vector/src/main/res/values-uk/strings.xml +++ b/vector/src/main/res/values-uk/strings.xml @@ -709,7 +709,6 @@ Для відправлення ключа на цей пристрій, запустіть Element на іншому пристрої, що може дешифрувати повідомлення. Вибачте, жодного стороннього застосунку не знайдено для завершення цієї дії. Відправити голосове повідомлення - Status.im Тема Ця дія неможлива через відсутність дозволів. Помилка Системні сповіщення diff --git a/vector/src/main/res/values-uz/strings.xml b/vector/src/main/res/values-uz/strings.xml index 1205d099e5..4bc6eb2047 100644 --- a/vector/src/main/res/values-uz/strings.xml +++ b/vector/src/main/res/values-uz/strings.xml @@ -59,7 +59,6 @@ Shovqinli bildirishnomalar Hodisalarni tinglash Xizmat ishga tushirilmoqda - Status.im temasi Qop-qora tema Qora tema Oq tema diff --git a/vector/src/main/res/values-vls/strings.xml b/vector/src/main/res/values-vls/strings.xml index 2fc4c40be7..896dbcaf23 100644 --- a/vector/src/main/res/values-vls/strings.xml +++ b/vector/src/main/res/values-vls/strings.xml @@ -5,7 +5,6 @@ Licht thema Dounker thema Zwart thema - Status.im-thema Dienst wor geïnitialiseerd Bezig me synchroniseern… diff --git a/vector/src/main/res/values-zh-rCN/strings.xml b/vector/src/main/res/values-zh-rCN/strings.xml index a854fbaa7f..89c84a0998 100644 --- a/vector/src/main/res/values-zh-rCN/strings.xml +++ b/vector/src/main/res/values-zh-rCN/strings.xml @@ -792,7 +792,6 @@ 本服务器已达到每月活跃用户限制。 请 %s 以继续使用本服务。 请 %s 以增加此限制的额度。 - Status.im 主题 仍然呼叫 接受 错误 diff --git a/vector/src/main/res/values-zh-rTW/strings.xml b/vector/src/main/res/values-zh-rTW/strings.xml index e246c0ae8a..4fae3868eb 100644 --- a/vector/src/main/res/values-zh-rTW/strings.xml +++ b/vector/src/main/res/values-zh-rTW/strings.xml @@ -789,7 +789,6 @@ 透過僅載入在第一次看到的地方的聊天室成員來增進效能。 您的家伺服器尚不支援延遲載入聊天室成員。請稍後再試。 抱歉,遇到錯誤 - Status.im 主題 版本 %s 請建立密語以加密您匯出的金鑰。您將需要輸入這些密語以匯入金鑰。 建立密語 diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index 65c5abaa2d..b4ed3aca81 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -6,7 +6,6 @@ Light Theme Dark Theme Black Theme - Status.im Theme Initializing service From e96bdba752b6ecf15d3bc4401d6e1d8e6431e66e Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 3 Mar 2021 11:18:50 +0100 Subject: [PATCH 168/578] Fix typo in resource name --- vector/src/main/res/values-ar/strings.xml | 2 +- vector/src/main/res/values-b+sr+Latn/strings.xml | 2 +- vector/src/main/res/values-bg/strings.xml | 2 +- vector/src/main/res/values-bn-rIN/strings.xml | 2 +- vector/src/main/res/values-bs/strings.xml | 2 +- vector/src/main/res/values-ca/strings.xml | 2 +- vector/src/main/res/values-cs/strings.xml | 2 +- vector/src/main/res/values-cy/strings.xml | 2 +- vector/src/main/res/values-da/strings.xml | 2 +- vector/src/main/res/values-de/strings.xml | 2 +- vector/src/main/res/values-el/strings.xml | 2 +- vector/src/main/res/values-eo/strings.xml | 2 +- vector/src/main/res/values-es-rMX/strings.xml | 2 +- vector/src/main/res/values-es/strings.xml | 2 +- vector/src/main/res/values-et/strings.xml | 2 +- vector/src/main/res/values-eu/strings.xml | 2 +- vector/src/main/res/values-fa/strings.xml | 2 +- vector/src/main/res/values-fi/strings.xml | 2 +- vector/src/main/res/values-fr/strings.xml | 2 +- vector/src/main/res/values-fy/strings.xml | 2 +- vector/src/main/res/values-gl/strings.xml | 2 +- vector/src/main/res/values-he/strings.xml | 2 +- vector/src/main/res/values-hr/strings.xml | 2 +- vector/src/main/res/values-hu/strings.xml | 2 +- vector/src/main/res/values-id/strings.xml | 2 +- vector/src/main/res/values-in/strings.xml | 2 +- vector/src/main/res/values-is/strings.xml | 2 +- vector/src/main/res/values-it/strings.xml | 2 +- vector/src/main/res/values-iw/strings.xml | 2 +- vector/src/main/res/values-ja/strings.xml | 2 +- vector/src/main/res/values-kab/strings.xml | 2 +- vector/src/main/res/values-ko/strings.xml | 2 +- vector/src/main/res/values-lv/strings.xml | 2 +- vector/src/main/res/values-ml/strings.xml | 2 +- vector/src/main/res/values-nb-rNO/strings.xml | 2 +- vector/src/main/res/values-nl/strings.xml | 2 +- vector/src/main/res/values-nn/strings.xml | 2 +- vector/src/main/res/values-pl/strings.xml | 2 +- vector/src/main/res/values-pt-rBR/strings.xml | 2 +- vector/src/main/res/values-pt/strings.xml | 2 +- vector/src/main/res/values-ro/strings.xml | 2 +- vector/src/main/res/values-ru/strings.xml | 2 +- vector/src/main/res/values-sk/strings.xml | 2 +- vector/src/main/res/values-sq/strings.xml | 2 +- vector/src/main/res/values-sr/strings.xml | 2 +- vector/src/main/res/values-sv/strings.xml | 2 +- vector/src/main/res/values-szl/strings.xml | 2 +- vector/src/main/res/values-tlh/strings.xml | 2 +- vector/src/main/res/values-tr/strings.xml | 2 +- vector/src/main/res/values-uk/strings.xml | 2 +- vector/src/main/res/values-uz/strings.xml | 2 +- vector/src/main/res/values-vi/strings.xml | 2 +- vector/src/main/res/values-vls/strings.xml | 2 +- vector/src/main/res/values-zh-rCN/strings.xml | 2 +- vector/src/main/res/values-zh-rTW/strings.xml | 2 +- vector/src/main/res/values/array.xml | 2 +- vector/src/main/res/values/strings.xml | 2 +- 57 files changed, 57 insertions(+), 57 deletions(-) diff --git a/vector/src/main/res/values-ar/strings.xml b/vector/src/main/res/values-ar/strings.xml index 9503e002d7..86e8c889e9 100644 --- a/vector/src/main/res/values-ar/strings.xml +++ b/vector/src/main/res/values-ar/strings.xml @@ -2,7 +2,7 @@ السمة الفاتحة السمة الداكنة - السمة السوداء + السمة السوداء يُزامن يستمع للأحداث الرسائل diff --git a/vector/src/main/res/values-b+sr+Latn/strings.xml b/vector/src/main/res/values-b+sr+Latn/strings.xml index 4f0e663297..ad749f1177 100644 --- a/vector/src/main/res/values-b+sr+Latn/strings.xml +++ b/vector/src/main/res/values-b+sr+Latn/strings.xml @@ -3,7 +3,7 @@ Svetla Tema Tamna Tema - Crna Tema + Crna Tema Inicijalizacija servisa Sinhronizacija u toku… diff --git a/vector/src/main/res/values-bg/strings.xml b/vector/src/main/res/values-bg/strings.xml index 4f1848394e..56caef9cca 100644 --- a/vector/src/main/res/values-bg/strings.xml +++ b/vector/src/main/res/values-bg/strings.xml @@ -4,7 +4,7 @@ Светла тема Тъмна тема - Черна тема + Черна тема Синхронизиране… Съобщения Стая diff --git a/vector/src/main/res/values-bn-rIN/strings.xml b/vector/src/main/res/values-bn-rIN/strings.xml index 9cbe122897..0436e5f8cd 100644 --- a/vector/src/main/res/values-bn-rIN/strings.xml +++ b/vector/src/main/res/values-bn-rIN/strings.xml @@ -3,7 +3,7 @@ হালকা থিম গাঢ় থিম - কালো থিম + কালো থিম সিংক্রোনাইজ হচ্ছে… ইভেন্টের জন্য শোনা হচ্ছে diff --git a/vector/src/main/res/values-bs/strings.xml b/vector/src/main/res/values-bs/strings.xml index 21c429d69c..92363e9210 100644 --- a/vector/src/main/res/values-bs/strings.xml +++ b/vector/src/main/res/values-bs/strings.xml @@ -2,7 +2,7 @@ Svijetla Tema Tamna Tema - Crna Tema + Crna Tema Sinkronizacija Budući Događaji Glasne notifikacije diff --git a/vector/src/main/res/values-ca/strings.xml b/vector/src/main/res/values-ca/strings.xml index 46a7514f62..296216b15b 100644 --- a/vector/src/main/res/values-ca/strings.xml +++ b/vector/src/main/res/values-ca/strings.xml @@ -3,7 +3,7 @@ Tema clar Tema fosc - Tema negre + Tema negre Sincronitzant… Escoltant esdeveniments diff --git a/vector/src/main/res/values-cs/strings.xml b/vector/src/main/res/values-cs/strings.xml index bac765be5a..04d338c7ca 100644 --- a/vector/src/main/res/values-cs/strings.xml +++ b/vector/src/main/res/values-cs/strings.xml @@ -1,7 +1,7 @@ Světlý vzhled - Černý vzhled + Černý vzhled Tmavý vzhled Zprávy Místnost diff --git a/vector/src/main/res/values-cy/strings.xml b/vector/src/main/res/values-cy/strings.xml index db0ff9b498..db4aa089e2 100644 --- a/vector/src/main/res/values-cy/strings.xml +++ b/vector/src/main/res/values-cy/strings.xml @@ -3,7 +3,7 @@ Thema Golau Thema Tywyll - Thema Du + Thema Du Yn paratoi gwasanaeth diff --git a/vector/src/main/res/values-da/strings.xml b/vector/src/main/res/values-da/strings.xml index 14b44a616b..198e4a60c1 100644 --- a/vector/src/main/res/values-da/strings.xml +++ b/vector/src/main/res/values-da/strings.xml @@ -3,7 +3,7 @@ Lyst Tema Mørkt Tema - Sort Tema + Sort Tema Synkroniserer Lyt efter begivenheder diff --git a/vector/src/main/res/values-de/strings.xml b/vector/src/main/res/values-de/strings.xml index ffa4acac7f..d543d179b4 100644 --- a/vector/src/main/res/values-de/strings.xml +++ b/vector/src/main/res/values-de/strings.xml @@ -613,7 +613,7 @@ Anfrage enthält keine user_id. Helles Design Dunkles Design - Schwarzes Design + Schwarzes Design Synchronisiere… Auf Ereignisse lauschen Nachrichten, die meinen Anzeigenamen enthalten diff --git a/vector/src/main/res/values-el/strings.xml b/vector/src/main/res/values-el/strings.xml index 1b38a9553a..2737ce5c09 100644 --- a/vector/src/main/res/values-el/strings.xml +++ b/vector/src/main/res/values-el/strings.xml @@ -43,7 +43,7 @@ Κρυπτογραφημένο μήνυμα Ανοιχτόχρωμο θέμα Σκουρόχρωμο θέμα - Μαύρο θέμα + Μαύρο θέμα Αποστολή αυτοκόλλητου Άδειες τρίτων Αργότερα diff --git a/vector/src/main/res/values-eo/strings.xml b/vector/src/main/res/values-eo/strings.xml index f6cca89791..713e269254 100644 --- a/vector/src/main/res/values-eo/strings.xml +++ b/vector/src/main/res/values-eo/strings.xml @@ -2,7 +2,7 @@ Hela haŭto Malhela haŭto - Nigra haŭto + Nigra haŭto Spegulante… Atentante eventojn Laŭtaj sciigoj diff --git a/vector/src/main/res/values-es-rMX/strings.xml b/vector/src/main/res/values-es-rMX/strings.xml index fd7d9fe790..d9a0040181 100644 --- a/vector/src/main/res/values-es-rMX/strings.xml +++ b/vector/src/main/res/values-es-rMX/strings.xml @@ -615,7 +615,7 @@ Dispositivos desconocidos: Activar/desactivar Markdown Tema Claro Tema Oscuro - Tema Negro + Tema Negro Detectar eventos Notificaciones ruidosas Notificaciones silenciosas diff --git a/vector/src/main/res/values-es/strings.xml b/vector/src/main/res/values-es/strings.xml index 0d24729a57..dc6a5ced52 100644 --- a/vector/src/main/res/values-es/strings.xml +++ b/vector/src/main/res/values-es/strings.xml @@ -601,7 +601,7 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua DIRECTORIO DE USUARIOS (%s) Tema Claro Tema Oscuro - Tema Negro + Tema Negro Sincronizando… Captando eventos Notificaciones ruidosas diff --git a/vector/src/main/res/values-et/strings.xml b/vector/src/main/res/values-et/strings.xml index e04af0f5df..f570f3afa8 100644 --- a/vector/src/main/res/values-et/strings.xml +++ b/vector/src/main/res/values-et/strings.xml @@ -2,7 +2,7 @@ Hele teema Tume teema - Must teema + Must teema Käivitan teenuse Sünkroniseerin… Kuulan, kas leidub sündmusi diff --git a/vector/src/main/res/values-eu/strings.xml b/vector/src/main/res/values-eu/strings.xml index 5ac7769e07..15a5c317d6 100644 --- a/vector/src/main/res/values-eu/strings.xml +++ b/vector/src/main/res/values-eu/strings.xml @@ -637,7 +637,7 @@ Abisua: Fitxategi hau ezabatu daiteke aplikazioa desinstalatzen bada. Erraldoia Azal argia Azal iluna - Azal beltza + Azal beltza Sinkronizatzen… Entzun gertaerak diff --git a/vector/src/main/res/values-fa/strings.xml b/vector/src/main/res/values-fa/strings.xml index 906b5cfb07..1cfd61644c 100644 --- a/vector/src/main/res/values-fa/strings.xml +++ b/vector/src/main/res/values-fa/strings.xml @@ -2,7 +2,7 @@ زمینهٔ روشن زمینهٔ تیره - زمینهٔ سیاه + زمینهٔ سیاه در حال گوش دادن به رویدادها پیام‌ها اتاق diff --git a/vector/src/main/res/values-fi/strings.xml b/vector/src/main/res/values-fi/strings.xml index e721291a4a..19013de106 100644 --- a/vector/src/main/res/values-fi/strings.xml +++ b/vector/src/main/res/values-fi/strings.xml @@ -613,7 +613,7 @@ Yhteydetön Vaalea teema Tumma teema - Musta teema + Musta teema Synkronoidaan… Kuunnellaan tapahtumia Äänekkäät ilmoitukset diff --git a/vector/src/main/res/values-fr/strings.xml b/vector/src/main/res/values-fr/strings.xml index 0bebb626e9..fa47d881c4 100644 --- a/vector/src/main/res/values-fr/strings.xml +++ b/vector/src/main/res/values-fr/strings.xml @@ -545,7 +545,7 @@ Énorme Thème clair Thème sombre - Thème noir + Thème noir Synchronisation… Écoute d’évènements Son de notification diff --git a/vector/src/main/res/values-fy/strings.xml b/vector/src/main/res/values-fy/strings.xml index af264e5723..bce5836731 100644 --- a/vector/src/main/res/values-fy/strings.xml +++ b/vector/src/main/res/values-fy/strings.xml @@ -2,7 +2,7 @@ Ljocht tema Donker tema - Swart tema + Swart tema Tsjinst inisjalisearje Syngronisearje… diff --git a/vector/src/main/res/values-gl/strings.xml b/vector/src/main/res/values-gl/strings.xml index f0c7832dc6..fcbf0aa122 100644 --- a/vector/src/main/res/values-gl/strings.xml +++ b/vector/src/main/res/values-gl/strings.xml @@ -2,7 +2,7 @@ Decorado claro Decorado escuro - Decorado negro + Decorado negro Sincronizando… Notificacións con son Notificacións silenciosas diff --git a/vector/src/main/res/values-he/strings.xml b/vector/src/main/res/values-he/strings.xml index 3a5e86445b..dd91c10740 100644 --- a/vector/src/main/res/values-he/strings.xml +++ b/vector/src/main/res/values-he/strings.xml @@ -120,7 +120,7 @@ האזנה לאירועים מסנכרן… אתחול השירות - ערכת נושא שחורה + ערכת נושא שחורה ערכת נושא כהה ערכת נושא בהירה diff --git a/vector/src/main/res/values-hr/strings.xml b/vector/src/main/res/values-hr/strings.xml index d672a48c50..444e3f722b 100644 --- a/vector/src/main/res/values-hr/strings.xml +++ b/vector/src/main/res/values-hr/strings.xml @@ -2,7 +2,7 @@ Svijetla tema Tamna tema - Crna tema + Crna tema Inicijalizacija servisa Sinkronizacija u tijeku… Osluškivanje događaja diff --git a/vector/src/main/res/values-hu/strings.xml b/vector/src/main/res/values-hu/strings.xml index 78b446c53a..12294a4094 100644 --- a/vector/src/main/res/values-hu/strings.xml +++ b/vector/src/main/res/values-hu/strings.xml @@ -545,7 +545,7 @@ Figyelmeztetés: ez a fájl törlésre kerülhet, ha az alkalmazást törli.Felhasználói címjegyzék Világos téma Sötét téma - Fekete téma + Fekete téma Értesítés hangja Időbélyegek mutatása 12 órás formátumban Engedélyre van szükséged a kisalkalmazások ebben a szobában való kezeléséhez diff --git a/vector/src/main/res/values-id/strings.xml b/vector/src/main/res/values-id/strings.xml index 97ff704aa4..b96d08030f 100644 --- a/vector/src/main/res/values-id/strings.xml +++ b/vector/src/main/res/values-id/strings.xml @@ -257,7 +257,7 @@ Harap berikan akses pada halaman berikut agar dapat melakukan panggilan. Tema Terang Tema Kelam - Tema Gelap + Tema Gelap Sedang Sinkronisasi Pemberitahuan Berisik diff --git a/vector/src/main/res/values-in/strings.xml b/vector/src/main/res/values-in/strings.xml index 97ff704aa4..b96d08030f 100644 --- a/vector/src/main/res/values-in/strings.xml +++ b/vector/src/main/res/values-in/strings.xml @@ -257,7 +257,7 @@ Harap berikan akses pada halaman berikut agar dapat melakukan panggilan. Tema Terang Tema Kelam - Tema Gelap + Tema Gelap Sedang Sinkronisasi Pemberitahuan Berisik diff --git a/vector/src/main/res/values-is/strings.xml b/vector/src/main/res/values-is/strings.xml index c1c016fed0..1edc352a4b 100644 --- a/vector/src/main/res/values-is/strings.xml +++ b/vector/src/main/res/values-is/strings.xml @@ -2,7 +2,7 @@ Ljóst þema Dökkt þema - Svart þema + Svart þema Samstilli Hlusta eftir atburðum diff --git a/vector/src/main/res/values-it/strings.xml b/vector/src/main/res/values-it/strings.xml index 060ea56a52..eb080ba7ad 100644 --- a/vector/src/main/res/values-it/strings.xml +++ b/vector/src/main/res/values-it/strings.xml @@ -602,7 +602,7 @@ Enorme Tema Chiaro Tema Scuro - Tema Nero + Tema Nero Sincronizzazione… Suono delle notifiche Mostra gli orari in formato 12 ore diff --git a/vector/src/main/res/values-iw/strings.xml b/vector/src/main/res/values-iw/strings.xml index 3a5e86445b..dd91c10740 100644 --- a/vector/src/main/res/values-iw/strings.xml +++ b/vector/src/main/res/values-iw/strings.xml @@ -120,7 +120,7 @@ האזנה לאירועים מסנכרן… אתחול השירות - ערכת נושא שחורה + ערכת נושא שחורה ערכת נושא כהה ערכת נושא בהירה diff --git a/vector/src/main/res/values-ja/strings.xml b/vector/src/main/res/values-ja/strings.xml index 259982025f..5919bb8df2 100644 --- a/vector/src/main/res/values-ja/strings.xml +++ b/vector/src/main/res/values-ja/strings.xml @@ -107,7 +107,7 @@ 暗号文を送信… 明るいテーマ 暗いテーマ - 黒いテーマ + 黒いテーマ 同期中… メッセージ メンバー詳細 diff --git a/vector/src/main/res/values-kab/strings.xml b/vector/src/main/res/values-kab/strings.xml index 8988c4ade1..c374253000 100644 --- a/vector/src/main/res/values-kab/strings.xml +++ b/vector/src/main/res/values-kab/strings.xml @@ -2,7 +2,7 @@ Asentel aceɛlal Asentel n yiḍ - Asentel aberkan + Asentel aberkan Awennez n umeẓlu Iznan Taxxamt diff --git a/vector/src/main/res/values-ko/strings.xml b/vector/src/main/res/values-ko/strings.xml index 51ddb6850d..0f3cbf4ff5 100644 --- a/vector/src/main/res/values-ko/strings.xml +++ b/vector/src/main/res/values-ko/strings.xml @@ -2,7 +2,7 @@ 밝은 테마 어두운 테마 - 검정 테마 + 검정 테마 동기화 중… 메시지 diff --git a/vector/src/main/res/values-lv/strings.xml b/vector/src/main/res/values-lv/strings.xml index 180d6d748d..06b9ce4c02 100644 --- a/vector/src/main/res/values-lv/strings.xml +++ b/vector/src/main/res/values-lv/strings.xml @@ -115,7 +115,7 @@ Lietotājvārds Gaiša tēma Tumša tēma - Melna tēma + Melna tēma Sinhronizācija… Notikumu monitorings Skaņi paziņojumi diff --git a/vector/src/main/res/values-ml/strings.xml b/vector/src/main/res/values-ml/strings.xml index 20ee803f30..64c469592c 100644 --- a/vector/src/main/res/values-ml/strings.xml +++ b/vector/src/main/res/values-ml/strings.xml @@ -250,7 +250,7 @@ മുറി നാമങ്ങൾ ഫിൽറ്റർ ചെയ്യൂ എന്തായാലും അയയ്ക്കൂ കീ ബാക്കപ്പ് - കറുത്ത തീം + കറുത്ത തീം ഡാ൪ക്ക് തീം ലൈറ്റ് തീം സേവനം സമാരംഭിക്കുന്നു diff --git a/vector/src/main/res/values-nb-rNO/strings.xml b/vector/src/main/res/values-nb-rNO/strings.xml index 3f96911403..7ca1368cfd 100644 --- a/vector/src/main/res/values-nb-rNO/strings.xml +++ b/vector/src/main/res/values-nb-rNO/strings.xml @@ -2,7 +2,7 @@ Lyst tema Mørkt tema - Svart tema + Svart tema Klargjør tjenesten Synkroniserer … Meldinger diff --git a/vector/src/main/res/values-nl/strings.xml b/vector/src/main/res/values-nl/strings.xml index 5d2c847e27..40f604eb1d 100644 --- a/vector/src/main/res/values-nl/strings.xml +++ b/vector/src/main/res/values-nl/strings.xml @@ -599,7 +599,7 @@ Gigantisch Licht thema Donker thema - Zwart thema + Zwart thema Bezig met synchroniseren… Luisteren voor evenementen Meldingsgeluid diff --git a/vector/src/main/res/values-nn/strings.xml b/vector/src/main/res/values-nn/strings.xml index 203cd0834d..c4c5d7d9a9 100644 --- a/vector/src/main/res/values-nn/strings.xml +++ b/vector/src/main/res/values-nn/strings.xml @@ -2,7 +2,7 @@ Lyst tema Mørkt tema - Svart tema + Svart tema Synkroniserar… Lyttar etter hendingar Bråkete varsel diff --git a/vector/src/main/res/values-pl/strings.xml b/vector/src/main/res/values-pl/strings.xml index 95b624df9a..9748bcdf6b 100644 --- a/vector/src/main/res/values-pl/strings.xml +++ b/vector/src/main/res/values-pl/strings.xml @@ -444,7 +444,7 @@ Zauważ, że ta czynność spowoduje ponowne uruchomienie aplikacji i może to t P O T Ę Ż N Y Jasny motyw Ciemny motyw - Czarny motyw + Czarny motyw Zadzwoń Awatar Powód: %1$s diff --git a/vector/src/main/res/values-pt-rBR/strings.xml b/vector/src/main/res/values-pt-rBR/strings.xml index 59b5ea9405..48a4dae763 100644 --- a/vector/src/main/res/values-pt-rBR/strings.xml +++ b/vector/src/main/res/values-pt-rBR/strings.xml @@ -601,7 +601,7 @@ Gigantesco Tema claro Tema escuro - Tema preto + Tema preto Sincronizando… Escutando eventos Notificações com som diff --git a/vector/src/main/res/values-pt/strings.xml b/vector/src/main/res/values-pt/strings.xml index a19e3fe56f..3db77cf60f 100644 --- a/vector/src/main/res/values-pt/strings.xml +++ b/vector/src/main/res/values-pt/strings.xml @@ -600,7 +600,7 @@ Dispositivos desconhecidos: Limpar cache de multimédia Tema Claro Tema Escuro - Tema Preto + Tema Preto Som de notificação Utilizar formato de 12 horas (ex. 2:30pm) Precisa de permissão para gerir os widgets nesta sala diff --git a/vector/src/main/res/values-ro/strings.xml b/vector/src/main/res/values-ro/strings.xml index 39cce6c5b1..8ed9df6f47 100644 --- a/vector/src/main/res/values-ro/strings.xml +++ b/vector/src/main/res/values-ro/strings.xml @@ -2,7 +2,7 @@ Temă luminoasă Temă întunecată - Temă Neagră + Temă Neagră Inițializează serviciu Sincronizează… diff --git a/vector/src/main/res/values-ru/strings.xml b/vector/src/main/res/values-ru/strings.xml index 319f9bb14b..878105c1fe 100644 --- a/vector/src/main/res/values-ru/strings.xml +++ b/vector/src/main/res/values-ru/strings.xml @@ -600,7 +600,7 @@ Сохранить медиа Светлая тема Тёмная тема - Чёрная тема + Чёрная тема Звук уведомлений Показывать метки времени в 12-часовом формате Вам нужно разрешение на управление виджетами в этой комнате diff --git a/vector/src/main/res/values-sk/strings.xml b/vector/src/main/res/values-sk/strings.xml index 4268d2ce33..3f9abae610 100644 --- a/vector/src/main/res/values-sk/strings.xml +++ b/vector/src/main/res/values-sk/strings.xml @@ -2,7 +2,7 @@ Svetlý vzhľad Tmavý vzhľad - Čierny vzhľad + Čierny vzhľad Prebieha synchronizácia… Spracovanie udalostí diff --git a/vector/src/main/res/values-sq/strings.xml b/vector/src/main/res/values-sq/strings.xml index 66b3da80c3..a06bf6f141 100644 --- a/vector/src/main/res/values-sq/strings.xml +++ b/vector/src/main/res/values-sq/strings.xml @@ -2,7 +2,7 @@ Temë e Çelët Temë e Errët - Temë e Zezë + Temë e Zezë Njoftime të zhurmshme Njoftime të heshtura Mesazhe diff --git a/vector/src/main/res/values-sr/strings.xml b/vector/src/main/res/values-sr/strings.xml index 5cb61732b2..2f5e124948 100644 --- a/vector/src/main/res/values-sr/strings.xml +++ b/vector/src/main/res/values-sr/strings.xml @@ -2,7 +2,7 @@ светла тема тамна тема - црна тема + црна тема Иницијализација сервиса Синхронизујем… Бучна обавештења diff --git a/vector/src/main/res/values-sv/strings.xml b/vector/src/main/res/values-sv/strings.xml index ee7589d22a..fbe8aa9289 100644 --- a/vector/src/main/res/values-sv/strings.xml +++ b/vector/src/main/res/values-sv/strings.xml @@ -2,7 +2,7 @@ Ljust tema Mörkt tema - Svart tema + Svart tema Initialiserar tjänst Synkroniserar… Lyssnar efter händelser diff --git a/vector/src/main/res/values-szl/strings.xml b/vector/src/main/res/values-szl/strings.xml index 2ad61d1f87..e060344ae4 100644 --- a/vector/src/main/res/values-szl/strings.xml +++ b/vector/src/main/res/values-szl/strings.xml @@ -56,7 +56,7 @@ Nasuchowanie zdarzyń Synchrōnizowanie… Inicjalizacyjo usugi - Czorny tymat + Czorny tymat Ciymny tymat Jasny tymat \ No newline at end of file diff --git a/vector/src/main/res/values-tlh/strings.xml b/vector/src/main/res/values-tlh/strings.xml index 2d0c94a5f1..0f7f1ac8e9 100644 --- a/vector/src/main/res/values-tlh/strings.xml +++ b/vector/src/main/res/values-tlh/strings.xml @@ -2,7 +2,7 @@ tu\'qom wov tu\'qom Hurgh - tu\'qom qIj + tu\'qom qIj vIrapmoHltaH wanI\' vInejtaH diff --git a/vector/src/main/res/values-tr/strings.xml b/vector/src/main/res/values-tr/strings.xml index 0e1237ad33..2eb31a80d5 100644 --- a/vector/src/main/res/values-tr/strings.xml +++ b/vector/src/main/res/values-tr/strings.xml @@ -2,7 +2,7 @@ Açık Tema Koyu Tema - Siyah Tema + Siyah Tema Senkronize ediliyor… Etkinlikler dinleniyor Sesli bildirimler diff --git a/vector/src/main/res/values-uk/strings.xml b/vector/src/main/res/values-uk/strings.xml index 6de37cec86..c3dc489054 100644 --- a/vector/src/main/res/values-uk/strings.xml +++ b/vector/src/main/res/values-uk/strings.xml @@ -3,7 +3,7 @@ Світла Тема Темна Тема - OLED Тема + OLED Тема Синхронізація… Слухати події diff --git a/vector/src/main/res/values-uz/strings.xml b/vector/src/main/res/values-uz/strings.xml index 4bc6eb2047..b705987cdf 100644 --- a/vector/src/main/res/values-uz/strings.xml +++ b/vector/src/main/res/values-uz/strings.xml @@ -59,7 +59,7 @@ Shovqinli bildirishnomalar Hodisalarni tinglash Xizmat ishga tushirilmoqda - Qop-qora tema + Qop-qora tema Qora tema Oq tema Tizim tanlovi boʻyicha diff --git a/vector/src/main/res/values-vi/strings.xml b/vector/src/main/res/values-vi/strings.xml index 1b0dddc4e6..b665fb925d 100644 --- a/vector/src/main/res/values-vi/strings.xml +++ b/vector/src/main/res/values-vi/strings.xml @@ -151,7 +151,7 @@ Theo dõi sự kiện Đang đồng bộ hóa… Đang khởi tạo dịch vụ - Nền đen + Nền đen Nền tối Nền sáng Vui lòng kiểm tra email của bạn để tiếp tục quá trình đăng ký diff --git a/vector/src/main/res/values-vls/strings.xml b/vector/src/main/res/values-vls/strings.xml index 896dbcaf23..4e30374a81 100644 --- a/vector/src/main/res/values-vls/strings.xml +++ b/vector/src/main/res/values-vls/strings.xml @@ -4,7 +4,7 @@ Licht thema Dounker thema - Zwart thema + Zwart thema Dienst wor geïnitialiseerd Bezig me synchroniseern… diff --git a/vector/src/main/res/values-zh-rCN/strings.xml b/vector/src/main/res/values-zh-rCN/strings.xml index 89c84a0998..3d9186d599 100644 --- a/vector/src/main/res/values-zh-rCN/strings.xml +++ b/vector/src/main/res/values-zh-rCN/strings.xml @@ -551,7 +551,7 @@ 巨大 浅色主题 深色主题 - 黑色主题 + 黑色主题 通知声音 使用12小时制显示时间戳 您需要权限来管理这个聊天室的小部件 diff --git a/vector/src/main/res/values-zh-rTW/strings.xml b/vector/src/main/res/values-zh-rTW/strings.xml index 4fae3868eb..b915f2d97d 100644 --- a/vector/src/main/res/values-zh-rTW/strings.xml +++ b/vector/src/main/res/values-zh-rTW/strings.xml @@ -2,7 +2,7 @@ 淺色主題 深色主題 - 黑色主題 + 黑色主題 正在同步…… 聆聽事件 接受 diff --git a/vector/src/main/res/values/array.xml b/vector/src/main/res/values/array.xml index c2cd0b4cc5..26f7a39bf1 100644 --- a/vector/src/main/res/values/array.xml +++ b/vector/src/main/res/values/array.xml @@ -40,7 +40,7 @@ @string/system_theme @string/light_theme @string/dark_theme - @string/black_them + @string/black_theme diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index b4ed3aca81..feaad8bf1f 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -5,7 +5,7 @@ System Default Light Theme Dark Theme - Black Theme + Black Theme Initializing service From 898c2d514cac8f683dc61a0770049743e3086b57 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 3 Mar 2021 11:26:12 +0100 Subject: [PATCH 169/578] Add configuration for new languages --- vector/src/main/res/values-si/strings_no_weblate.xml | 8 ++++++++ vector/src/main/res/values-uz/strings_no_weblate.xml | 8 ++++++++ 2 files changed, 16 insertions(+) create mode 100644 vector/src/main/res/values-si/strings_no_weblate.xml create mode 100644 vector/src/main/res/values-uz/strings_no_weblate.xml diff --git a/vector/src/main/res/values-si/strings_no_weblate.xml b/vector/src/main/res/values-si/strings_no_weblate.xml new file mode 100644 index 0000000000..14f7be6a94 --- /dev/null +++ b/vector/src/main/res/values-si/strings_no_weblate.xml @@ -0,0 +1,8 @@ + + + + si + LK + Latn + + \ No newline at end of file diff --git a/vector/src/main/res/values-uz/strings_no_weblate.xml b/vector/src/main/res/values-uz/strings_no_weblate.xml new file mode 100644 index 0000000000..080541f37a --- /dev/null +++ b/vector/src/main/res/values-uz/strings_no_weblate.xml @@ -0,0 +1,8 @@ + + + + uz + UZ + Latn + + \ No newline at end of file From c42b42cb6107c9b78c36a17f1ef1be46acbaff1e Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 3 Mar 2021 12:13:08 +0100 Subject: [PATCH 170/578] Remove string usage from SDK - step 1 - Role Lint will also be able to detect more possible errors with this change --- .../sdk/api/session/room/powerlevels/Role.kt | 13 +++---- .../timeline/format/NoticeEventFormatter.kt | 6 ++-- .../roomprofile/permissions/RoleFormatter.kt | 35 +++++++++++++++++++ .../permissions/RoomPermissionsController.kt | 12 ++----- 4 files changed, 46 insertions(+), 20 deletions(-) create mode 100644 vector/src/main/java/im/vector/app/features/roomprofile/permissions/RoleFormatter.kt diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/powerlevels/Role.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/powerlevels/Role.kt index ecfddad0a4..5fe9bf6993 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/powerlevels/Role.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/powerlevels/Role.kt @@ -17,14 +17,11 @@ package org.matrix.android.sdk.api.session.room.powerlevels -import androidx.annotation.StringRes -import org.matrix.android.sdk.R - -sealed class Role(open val value: Int, @StringRes val res: Int) : Comparable { - object Admin : Role(100, R.string.power_level_admin) - object Moderator : Role(50, R.string.power_level_moderator) - object Default : Role(0, R.string.power_level_default) - data class Custom(override val value: Int) : Role(value, R.string.power_level_custom) +sealed class Role(open val value: Int) : Comparable { + object Admin : Role(100) + object Moderator : Role(50) + object Default : Role(0) + data class Custom(override val value: Int) : Role(value) override fun compareTo(other: Role): Int { return value.compareTo(other.value) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/format/NoticeEventFormatter.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/format/NoticeEventFormatter.kt index 1c86749abc..878cec0a07 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/format/NoticeEventFormatter.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/format/NoticeEventFormatter.kt @@ -20,6 +20,7 @@ import im.vector.app.ActiveSessionDataSource import im.vector.app.R import im.vector.app.core.resources.StringProvider import im.vector.app.features.home.room.detail.timeline.helper.RoomSummariesHolder +import im.vector.app.features.roomprofile.permissions.RoleFormatter import im.vector.app.features.settings.VectorPreferences import org.matrix.android.sdk.api.extensions.appendNl import org.matrix.android.sdk.api.extensions.orFalse @@ -55,6 +56,7 @@ import javax.inject.Inject class NoticeEventFormatter @Inject constructor( private val activeSessionDataSource: ActiveSessionDataSource, private val roomHistoryVisibilityFormatter: RoomHistoryVisibilityFormatter, + private val roleFormatter: RoleFormatter, private val vectorPreferences: VectorPreferences, private val roomSummariesHolder: RoomSummariesHolder, private val sp: StringProvider @@ -124,8 +126,8 @@ class NoticeEventFormatter @Inject constructor( val from = PowerLevelsHelper(previousPowerLevelsContent).getUserRole(userId) val to = PowerLevelsHelper(powerLevelsContent).getUserRole(userId) if (from != to) { - val fromStr = sp.getString(from.res, from.value) - val toStr = sp.getString(to.res, to.value) + val fromStr = roleFormatter.format(from) + val toStr = roleFormatter.format(to) val diff = sp.getString(R.string.notice_power_level_diff, userId, fromStr, toStr) diffs.add(diff) } diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/permissions/RoleFormatter.kt b/vector/src/main/java/im/vector/app/features/roomprofile/permissions/RoleFormatter.kt new file mode 100644 index 0000000000..699cdd29e2 --- /dev/null +++ b/vector/src/main/java/im/vector/app/features/roomprofile/permissions/RoleFormatter.kt @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 New Vector Ltd + * + * 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. + */ + +package im.vector.app.features.roomprofile.permissions + +import im.vector.app.R +import im.vector.app.core.resources.StringProvider +import org.matrix.android.sdk.api.session.room.powerlevels.Role +import javax.inject.Inject + +class RoleFormatter @Inject constructor( + private val stringProvider: StringProvider +) { + fun format(role: Role): String { + return when (role) { + Role.Admin -> stringProvider.getString(R.string.power_level_admin) + Role.Moderator -> stringProvider.getString(R.string.power_level_moderator) + Role.Default -> stringProvider.getString(R.string.power_level_default) + is Role.Custom -> stringProvider.getString(R.string.power_level_custom, role.value) + } + } +} diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/permissions/RoomPermissionsController.kt b/vector/src/main/java/im/vector/app/features/roomprofile/permissions/RoomPermissionsController.kt index 92bdac7ae0..8f99132bc9 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/permissions/RoomPermissionsController.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/permissions/RoomPermissionsController.kt @@ -32,6 +32,7 @@ import javax.inject.Inject class RoomPermissionsController @Inject constructor( private val stringProvider: StringProvider, + private val roleFormatter: RoleFormatter, colorProvider: ColorProvider ) : TypedEpoxyController() { @@ -124,7 +125,7 @@ class RoomPermissionsController @Inject constructor( buildProfileAction( id = editablePermission.labelResId.toString(), title = stringProvider.getString(editablePermission.labelResId), - subtitle = getSubtitle(currentRole), + subtitle = roleFormatter.format(currentRole), dividerColor = dividerColor, divider = true, editable = editable, @@ -136,15 +137,6 @@ class RoomPermissionsController @Inject constructor( ) } - private fun getSubtitle(currentRole: Role): String { - return when (currentRole) { - Role.Admin, - Role.Moderator, - Role.Default -> stringProvider.getString(currentRole.res) - is Role.Custom -> stringProvider.getString(currentRole.res, currentRole.value) - } - } - private fun getCurrentRole(editablePermission: EditablePermission, content: PowerLevelsContent): Role { val value = when (editablePermission) { is EditablePermission.EventTypeEditablePermission -> content.events[editablePermission.eventType] ?: content.stateDefault From e2e7516a99f63773550bfee67c176f5ad4e3e88b Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 3 Mar 2021 12:43:05 +0100 Subject: [PATCH 171/578] Remove string usage from SDK - step 2 - InitSyncStep --- .../sdk/api/session/initsync/InitSyncStep.kt | 30 +++++++++++++ .../initsync/InitialSyncProgressService.kt | 3 +- .../DefaultInitialSyncProgressService.kt | 12 +++--- .../internal/session/initsync/Extensions.kt | 10 ++--- .../session/initsync/ProgressReporter.kt | 4 +- .../sdk/internal/session/initsync/TaskInfo.kt | 4 +- .../internal/session/sync/GroupSyncHandler.kt | 8 ++-- .../internal/session/sync/RoomSyncHandler.kt | 12 +++--- .../session/sync/SyncResponseHandler.kt | 10 ++--- .../sdk/internal/session/sync/SyncTask.kt | 12 +++--- .../vector/app/features/home/HomeActivity.kt | 8 ++-- .../features/home/InitSyncStepFormatter.kt | 43 +++++++++++++++++++ 12 files changed, 115 insertions(+), 41 deletions(-) create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/initsync/InitSyncStep.kt create mode 100644 vector/src/main/java/im/vector/app/features/home/InitSyncStepFormatter.kt diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/initsync/InitSyncStep.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/initsync/InitSyncStep.kt new file mode 100644 index 0000000000..296f2bafaf --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/initsync/InitSyncStep.kt @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2021 New Vector Ltd + * + * 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. + */ + +package org.matrix.android.sdk.api.session.initsync + +enum class InitSyncStep { + ServerComputing, + Downloading, + ImportingAccount, + ImportingAccountCrypto, + ImportingAccountRoom, + ImportingAccountGroups, + ImportingAccountData, + ImportingAccountJoinedRooms, + ImportingAccountInvitedRooms, + ImportingAccountLeftRooms +} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/initsync/InitialSyncProgressService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/initsync/InitialSyncProgressService.kt index 0953696bc1..b5d4ef4dbb 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/initsync/InitialSyncProgressService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/initsync/InitialSyncProgressService.kt @@ -15,7 +15,6 @@ */ package org.matrix.android.sdk.api.session.initsync -import androidx.annotation.StringRes import androidx.lifecycle.LiveData interface InitialSyncProgressService { @@ -25,7 +24,7 @@ interface InitialSyncProgressService { sealed class Status { object Idle : Status() data class Progressing( - @StringRes val statusText: Int, + val initSyncStep: InitSyncStep, val percentProgress: Int = 0 ) : Status() } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/initsync/DefaultInitialSyncProgressService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/initsync/DefaultInitialSyncProgressService.kt index dc069d3e5e..eb3e3066b1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/initsync/DefaultInitialSyncProgressService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/initsync/DefaultInitialSyncProgressService.kt @@ -15,9 +15,9 @@ */ package org.matrix.android.sdk.internal.session.initsync -import androidx.annotation.StringRes import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData +import org.matrix.android.sdk.api.session.initsync.InitSyncStep import org.matrix.android.sdk.api.session.initsync.InitialSyncProgressService import org.matrix.android.sdk.internal.session.SessionScope import javax.inject.Inject @@ -38,22 +38,22 @@ internal class DefaultInitialSyncProgressService @Inject constructor() /** * Create a rootTask */ - fun startRoot(@StringRes nameRes: Int, + fun startRoot(initSyncStep: InitSyncStep, totalProgress: Int) { endAll() - rootTask = TaskInfo(nameRes, totalProgress, null, 1F) + rootTask = TaskInfo(initSyncStep, totalProgress, null, 1F) reportProgress(0F) } /** * Add a child to the leaf */ - override fun startTask(@StringRes nameRes: Int, + override fun startTask(initSyncStep: InitSyncStep, totalProgress: Int, parentWeight: Float) { val currentLeaf = rootTask?.leaf() ?: return currentLeaf.child = TaskInfo( - nameRes = nameRes, + initSyncStep = initSyncStep, totalProgress = totalProgress, parent = currentLeaf, parentWeight = parentWeight @@ -67,7 +67,7 @@ internal class DefaultInitialSyncProgressService @Inject constructor() // Update the progress of the leaf and all its parents leaf.setProgress(progress) // Then update the live data using leaf wording and root progress - status.postValue(InitialSyncProgressService.Status.Progressing(leaf.nameRes, root.currentProgress.toInt())) + status.postValue(InitialSyncProgressService.Status.Progressing(leaf.initSyncStep, root.currentProgress.toInt())) } } } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/initsync/Extensions.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/initsync/Extensions.kt index f58559117c..b40b1a56bf 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/initsync/Extensions.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/initsync/Extensions.kt @@ -16,25 +16,25 @@ package org.matrix.android.sdk.internal.session.initsync -import androidx.annotation.StringRes +import org.matrix.android.sdk.api.session.initsync.InitSyncStep internal inline fun reportSubtask(reporter: ProgressReporter?, - @StringRes nameRes: Int, + initSyncStep: InitSyncStep, totalProgress: Int, parentWeight: Float, block: () -> T): T { - reporter?.startTask(nameRes, totalProgress, parentWeight) + reporter?.startTask(initSyncStep, totalProgress, parentWeight) return block().also { reporter?.endTask() } } internal inline fun Map.mapWithProgress(reporter: ProgressReporter?, - @StringRes nameRes: Int, + initSyncStep: InitSyncStep, parentWeight: Float, transform: (Map.Entry) -> R): List { var current = 0F - reporter?.startTask(nameRes, count() + 1, parentWeight) + reporter?.startTask(initSyncStep, count() + 1, parentWeight) return map { reporter?.reportProgress(current) current++ diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/initsync/ProgressReporter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/initsync/ProgressReporter.kt index 5361d107d2..8a7b26b4b8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/initsync/ProgressReporter.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/initsync/ProgressReporter.kt @@ -16,10 +16,10 @@ package org.matrix.android.sdk.internal.session.initsync -import androidx.annotation.StringRes +import org.matrix.android.sdk.api.session.initsync.InitSyncStep internal interface ProgressReporter { - fun startTask(@StringRes nameRes: Int, + fun startTask(initSyncStep: InitSyncStep, totalProgress: Int, parentWeight: Float) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/initsync/TaskInfo.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/initsync/TaskInfo.kt index 37c2b152a9..3e4cce2e1f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/initsync/TaskInfo.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/initsync/TaskInfo.kt @@ -16,10 +16,10 @@ package org.matrix.android.sdk.internal.session.initsync -import androidx.annotation.StringRes +import org.matrix.android.sdk.api.session.initsync.InitSyncStep import timber.log.Timber -internal class TaskInfo(@StringRes val nameRes: Int, +internal class TaskInfo(val initSyncStep: InitSyncStep, val totalProgress: Int, val parent: TaskInfo?, val parentWeight: Float) { diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/GroupSyncHandler.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/GroupSyncHandler.kt index 112236b14f..02362bf050 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/GroupSyncHandler.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/GroupSyncHandler.kt @@ -17,7 +17,7 @@ package org.matrix.android.sdk.internal.session.sync import io.realm.Realm -import org.matrix.android.sdk.R +import org.matrix.android.sdk.api.session.initsync.InitSyncStep import org.matrix.android.sdk.api.session.room.model.Membership import org.matrix.android.sdk.internal.database.model.GroupEntity import org.matrix.android.sdk.internal.database.model.GroupSummaryEntity @@ -50,17 +50,17 @@ internal class GroupSyncHandler @Inject constructor() { private fun handleGroupSync(realm: Realm, handlingStrategy: HandlingStrategy, reporter: ProgressReporter?) { val groups = when (handlingStrategy) { is HandlingStrategy.JOINED -> - handlingStrategy.data.mapWithProgress(reporter, R.string.initial_sync_start_importing_account_groups, 0.6f) { + handlingStrategy.data.mapWithProgress(reporter, InitSyncStep.ImportingAccountGroups, 0.6f) { handleJoinedGroup(realm, it.key) } is HandlingStrategy.INVITED -> - handlingStrategy.data.mapWithProgress(reporter, R.string.initial_sync_start_importing_account_groups, 0.3f) { + handlingStrategy.data.mapWithProgress(reporter, InitSyncStep.ImportingAccountGroups, 0.3f) { handleInvitedGroup(realm, it.key) } is HandlingStrategy.LEFT -> - handlingStrategy.data.mapWithProgress(reporter, R.string.initial_sync_start_importing_account_groups, 0.1f) { + handlingStrategy.data.mapWithProgress(reporter, InitSyncStep.ImportingAccountGroups, 0.1f) { handleLeftGroup(realm, it.key) } } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomSyncHandler.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomSyncHandler.kt index 9f54d0b86c..eac5e7e6ba 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomSyncHandler.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomSyncHandler.kt @@ -18,11 +18,11 @@ package org.matrix.android.sdk.internal.session.sync import io.realm.Realm import io.realm.kotlin.createObject -import org.matrix.android.sdk.R import org.matrix.android.sdk.api.session.crypto.MXCryptoError import org.matrix.android.sdk.api.session.events.model.Event import org.matrix.android.sdk.api.session.events.model.EventType import org.matrix.android.sdk.api.session.events.model.toModel +import org.matrix.android.sdk.api.session.initsync.InitSyncStep import org.matrix.android.sdk.api.session.room.model.Membership import org.matrix.android.sdk.api.session.room.model.RoomMemberContent import org.matrix.android.sdk.api.session.room.model.tag.RoomTagContent @@ -112,18 +112,18 @@ internal class RoomSyncHandler @Inject constructor(private val readReceiptHandle // Rooms are already inserted, return an empty list emptyList() } else { - handlingStrategy.data.mapWithProgress(reporter, R.string.initial_sync_start_importing_account_joined_rooms, 0.6f) { + handlingStrategy.data.mapWithProgress(reporter, InitSyncStep.ImportingAccountJoinedRooms, 0.6f) { handleJoinedRoom(realm, it.key, it.value.roomSync, insertType, syncLocalTimeStampMillis) } } } is HandlingStrategy.INVITED -> - handlingStrategy.data.mapWithProgress(reporter, R.string.initial_sync_start_importing_account_invited_rooms, 0.1f) { + handlingStrategy.data.mapWithProgress(reporter, InitSyncStep.ImportingAccountInvitedRooms, 0.1f) { handleInvitedRoom(realm, it.key, it.value, insertType, syncLocalTimeStampMillis) } is HandlingStrategy.LEFT -> { - handlingStrategy.data.mapWithProgress(reporter, R.string.initial_sync_start_importing_account_left_rooms, 0.3f) { + handlingStrategy.data.mapWithProgress(reporter, InitSyncStep.ImportingAccountLeftRooms, 0.3f) { handleLeftRoom(realm, it.key, it.value, insertType, syncLocalTimeStampMillis) } } @@ -141,7 +141,7 @@ internal class RoomSyncHandler @Inject constructor(private val readReceiptHandle val numberOfChunks = ceil(listSize / maxSize.toDouble()).toInt() if (numberOfChunks > 1) { - reportSubtask(reporter, R.string.initial_sync_start_importing_account_joined_rooms, numberOfChunks, 0.6f) { + reportSubtask(reporter, InitSyncStep.ImportingAccountJoinedRooms, numberOfChunks, 0.6f) { val chunkSize = listSize / numberOfChunks Timber.v("INIT_SYNC $listSize rooms to insert, split into $numberOfChunks sublists of $chunkSize items") // I cannot find a better way to chunk a map, so chunk the keys and then create new maps @@ -165,7 +165,7 @@ internal class RoomSyncHandler @Inject constructor(private val readReceiptHandle } } else { // No need to split - val rooms = handlingStrategy.data.mapWithProgress(reporter, R.string.initial_sync_start_importing_account_joined_rooms, 0.6f) { + val rooms = handlingStrategy.data.mapWithProgress(reporter, InitSyncStep.ImportingAccountJoinedRooms, 0.6f) { handleJoinedRoom(realm, it.key, it.value.roomSync, insertType, syncLocalTimeStampMillis) } realm.insertOrUpdate(rooms) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncResponseHandler.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncResponseHandler.kt index 3f501858b1..167e45031c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncResponseHandler.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncResponseHandler.kt @@ -18,9 +18,9 @@ package org.matrix.android.sdk.internal.session.sync import androidx.work.ExistingPeriodicWorkPolicy import com.zhuinden.monarchy.Monarchy -import org.matrix.android.sdk.R import org.matrix.android.sdk.api.pushrules.PushRuleService import org.matrix.android.sdk.api.pushrules.RuleScope +import org.matrix.android.sdk.api.session.initsync.InitSyncStep import org.matrix.android.sdk.internal.crypto.DefaultCryptoService import org.matrix.android.sdk.internal.di.SessionDatabase import org.matrix.android.sdk.internal.di.SessionId @@ -73,7 +73,7 @@ internal class SyncResponseHandler @Inject constructor(@SessionDatabase private // to ensure to decrypt them properly measureTimeMillis { Timber.v("Handle toDevice") - reportSubtask(reporter, R.string.initial_sync_start_importing_account_crypto, 100, 0.1f) { + reportSubtask(reporter, InitSyncStep.ImportingAccountCrypto, 100, 0.1f) { if (syncResponse.toDevice != null) { cryptoSyncHandler.handleToDevice(syncResponse.toDevice, reporter) } @@ -85,7 +85,7 @@ internal class SyncResponseHandler @Inject constructor(@SessionDatabase private monarchy.awaitTransaction { realm -> measureTimeMillis { Timber.v("Handle rooms") - reportSubtask(reporter, R.string.initial_sync_start_importing_account_rooms, 1, 0.7f) { + reportSubtask(reporter, InitSyncStep.ImportingAccountRoom, 1, 0.7f) { if (syncResponse.rooms != null) { roomSyncHandler.handle(realm, syncResponse.rooms, isInitialSync, reporter) } @@ -95,7 +95,7 @@ internal class SyncResponseHandler @Inject constructor(@SessionDatabase private } measureTimeMillis { - reportSubtask(reporter, R.string.initial_sync_start_importing_account_groups, 1, 0.1f) { + reportSubtask(reporter, InitSyncStep.ImportingAccountGroups, 1, 0.1f) { Timber.v("Handle groups") if (syncResponse.groups != null) { groupSyncHandler.handle(realm, syncResponse.groups, reporter) @@ -106,7 +106,7 @@ internal class SyncResponseHandler @Inject constructor(@SessionDatabase private } measureTimeMillis { - reportSubtask(reporter, R.string.initial_sync_start_importing_account_data, 1, 0.1f) { + reportSubtask(reporter, InitSyncStep.ImportingAccountData, 1, 0.1f) { Timber.v("Handle accountData") userAccountDataSyncHandler.handle(realm, syncResponse.accountData) } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTask.kt index dea047f7d0..3d0368ef03 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTask.kt @@ -17,7 +17,7 @@ package org.matrix.android.sdk.internal.session.sync import okhttp3.ResponseBody -import org.matrix.android.sdk.R +import org.matrix.android.sdk.api.session.initsync.InitSyncStep import org.matrix.android.sdk.internal.di.SessionFilesDirectory import org.matrix.android.sdk.internal.di.UserId import org.matrix.android.sdk.internal.network.GlobalErrorReceiver @@ -90,7 +90,7 @@ internal class DefaultSyncTask @Inject constructor( if (isInitialSync) { // We might want to get the user information in parallel too userStore.createOrUpdate(userId) - initialSyncProgressService.startRoot(R.string.initial_sync_start_importing_account, 100) + initialSyncProgressService.startRoot(InitSyncStep.ImportingAccount, 100) } // Maybe refresh the home server capabilities data we know getHomeServerCapabilitiesTask.execute(GetHomeServerCapabilitiesTask.Params(forceRefresh = false)) @@ -137,20 +137,20 @@ internal class DefaultSyncTask @Inject constructor( if (workingFile.exists() && status >= InitialSyncStatus.STEP_DOWNLOADED) { // Go directly to the parse step Timber.v("INIT_SYNC file is already here") - reportSubtask(initialSyncProgressService, R.string.initial_sync_start_downloading, 1, 0.3f) { + reportSubtask(initialSyncProgressService, InitSyncStep.Downloading, 1, 0.3f) { // Empty task } } else { initialSyncStatusRepository.setStep(InitialSyncStatus.STEP_DOWNLOADING) val syncResponse = logDuration("INIT_SYNC Perform server request") { - reportSubtask(initialSyncProgressService, R.string.initial_sync_start_server_computing, 1, 0.2f) { + reportSubtask(initialSyncProgressService, InitSyncStep.ServerComputing, 1, 0.2f) { getSyncResponse(requestParams, MAX_NUMBER_OF_RETRY_AFTER_TIMEOUT) } } if (syncResponse.isSuccessful) { logDuration("INIT_SYNC Download and save to file") { - reportSubtask(initialSyncProgressService, R.string.initial_sync_start_downloading, 1, 0.1f) { + reportSubtask(initialSyncProgressService, InitSyncStep.Downloading, 1, 0.1f) { syncResponse.body()?.byteStream()?.use { inputStream -> workingFile.outputStream().use { outputStream -> inputStream.copyTo(outputStream) @@ -164,7 +164,7 @@ internal class DefaultSyncTask @Inject constructor( } initialSyncStatusRepository.setStep(InitialSyncStatus.STEP_DOWNLOADED) } - reportSubtask(initialSyncProgressService, R.string.initial_sync_start_importing_account, 1, 0.7F) { + reportSubtask(initialSyncProgressService, InitSyncStep.ImportingAccount, 1, 0.7F) { handleSyncFile(workingFile, initSyncStrategy) } diff --git a/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt b/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt index 74399d9215..60a8836be5 100644 --- a/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt +++ b/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt @@ -99,6 +99,7 @@ class HomeActivity : @Inject lateinit var unknownDeviceViewModelFactory: UnknownDeviceDetectorSharedViewModel.Factory @Inject lateinit var permalinkHandler: PermalinkHandler @Inject lateinit var avatarRenderer: AvatarRenderer + @Inject lateinit var initSyncStepFormatter: InitSyncStepFormatter private val drawerListener = object : DrawerLayout.SimpleDrawerListener() { override fun onDrawerStateChanged(newState: Int) { @@ -208,11 +209,12 @@ class HomeActivity : private fun renderState(state: HomeActivityViewState) { when (val status = state.initialSyncProgressServiceStatus) { - is InitialSyncProgressService.Status.Idle -> { + is InitialSyncProgressService.Status.Idle -> { views.waitingView.root.isVisible = false } is InitialSyncProgressService.Status.Progressing -> { - Timber.v("${getString(status.statusText)} ${status.percentProgress}") + val initSyncStepStr = initSyncStepFormatter.format(status.initSyncStep) + Timber.v("$initSyncStepStr ${status.percentProgress}") views.waitingView.root.setOnClickListener { // block interactions } @@ -223,7 +225,7 @@ class HomeActivity : isVisible = true } views.waitingView.waitingStatusText.apply { - text = getString(status.statusText) + text = initSyncStepStr isVisible = true } views.waitingView.root.isVisible = true diff --git a/vector/src/main/java/im/vector/app/features/home/InitSyncStepFormatter.kt b/vector/src/main/java/im/vector/app/features/home/InitSyncStepFormatter.kt new file mode 100644 index 0000000000..51ca96341e --- /dev/null +++ b/vector/src/main/java/im/vector/app/features/home/InitSyncStepFormatter.kt @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2021 New Vector Ltd + * + * 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. + */ + +package im.vector.app.features.home + +import im.vector.app.R +import im.vector.app.core.resources.StringProvider +import org.matrix.android.sdk.api.session.initsync.InitSyncStep +import javax.inject.Inject + +class InitSyncStepFormatter @Inject constructor( + private val stringProvider: StringProvider +) { + fun format(initSyncStep: InitSyncStep): String { + return stringProvider.getString( + when (initSyncStep) { + InitSyncStep.ServerComputing -> R.string.initial_sync_start_server_computing + InitSyncStep.Downloading -> R.string.initial_sync_start_downloading + InitSyncStep.ImportingAccount -> R.string.initial_sync_start_importing_account + InitSyncStep.ImportingAccountCrypto -> R.string.initial_sync_start_importing_account_crypto + InitSyncStep.ImportingAccountRoom -> R.string.initial_sync_start_importing_account_rooms + InitSyncStep.ImportingAccountGroups -> R.string.initial_sync_start_importing_account_groups + InitSyncStep.ImportingAccountData -> R.string.initial_sync_start_importing_account_data + InitSyncStep.ImportingAccountJoinedRooms -> R.string.initial_sync_start_importing_account_joined_rooms + InitSyncStep.ImportingAccountInvitedRooms -> R.string.initial_sync_start_importing_account_invited_rooms + InitSyncStep.ImportingAccountLeftRooms -> R.string.initial_sync_start_importing_account_left_rooms + } + ) + } +} From 8682c95c1993944980768c9351a631df958cb505 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 3 Mar 2021 12:52:49 +0100 Subject: [PATCH 172/578] Do not leak user's local in fallback for verification request --- .../VerificationTransportRoomMessage.kt | 6 ++--- .../room/send/LocalEchoEventFactory.kt | 23 ------------------- .../src/main/res/values-bg/strings.xml | 1 - .../src/main/res/values-bn-rIN/strings.xml | 1 - .../src/main/res/values-ca/strings.xml | 1 - .../src/main/res/values-cs/strings.xml | 1 - .../src/main/res/values-de/strings.xml | 1 - .../src/main/res/values-eo/strings.xml | 1 - .../src/main/res/values-es/strings.xml | 1 - .../src/main/res/values-et/strings.xml | 1 - .../src/main/res/values-eu/strings.xml | 2 -- .../src/main/res/values-fa/strings.xml | 1 - .../src/main/res/values-fi/strings.xml | 1 - .../src/main/res/values-fr/strings.xml | 1 - .../src/main/res/values-gl/strings.xml | 1 - .../src/main/res/values-hu/strings.xml | 1 - .../src/main/res/values-it/strings.xml | 1 - .../src/main/res/values-kab/strings.xml | 1 - .../src/main/res/values-lv/strings.xml | 1 - .../src/main/res/values-nl/strings.xml | 1 - .../src/main/res/values-pt-rBR/strings.xml | 1 - .../src/main/res/values-ru/strings.xml | 1 - .../src/main/res/values-sk/strings.xml | 1 - .../src/main/res/values-sq/strings.xml | 1 - .../src/main/res/values-sr/strings.xml | 1 - .../src/main/res/values-sv/strings.xml | 1 - .../src/main/res/values-zh-rCN/strings.xml | 1 - .../src/main/res/values-zh-rTW/strings.xml | 1 - .../src/main/res/values/strings.xml | 2 -- 29 files changed, 2 insertions(+), 56 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransportRoomMessage.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransportRoomMessage.kt index a447e659f5..54cc0e8161 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransportRoomMessage.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransportRoomMessage.kt @@ -24,7 +24,6 @@ import androidx.work.WorkInfo import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch -import org.matrix.android.sdk.R import org.matrix.android.sdk.api.session.crypto.verification.CancelCode import org.matrix.android.sdk.api.session.crypto.verification.ValidVerificationInfoRequest import org.matrix.android.sdk.api.session.crypto.verification.VerificationTxState @@ -52,7 +51,6 @@ import org.matrix.android.sdk.internal.di.UserId import org.matrix.android.sdk.internal.di.WorkManagerProvider import org.matrix.android.sdk.internal.session.room.send.LocalEchoEventFactory import org.matrix.android.sdk.internal.task.TaskExecutor -import org.matrix.android.sdk.internal.util.StringProvider import org.matrix.android.sdk.internal.worker.SessionSafeCoroutineWorker import org.matrix.android.sdk.internal.worker.WorkerParamsFactory import timber.log.Timber @@ -62,7 +60,6 @@ import javax.inject.Inject internal class VerificationTransportRoomMessage( private val workManagerProvider: WorkManagerProvider, - private val stringProvider: StringProvider, private val sessionId: String, private val userId: String, private val userDeviceId: String?, @@ -167,7 +164,8 @@ internal class VerificationTransportRoomMessage( ) val info = MessageVerificationRequestContent( - body = stringProvider.getString(R.string.key_verification_request_fallback_message, userId), + body = "$userId is requesting to verify your key, but your client does not support in-chat key verification." + + " You will need to use legacy key verification to verify keys.", fromDevice = validInfo.fromDevice, toUserId = otherUserId, timestamp = validInfo.timestamp, diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/LocalEchoEventFactory.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/LocalEchoEventFactory.kt index c01923055b..432a4af062 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/LocalEchoEventFactory.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/LocalEchoEventFactory.kt @@ -20,7 +20,6 @@ import android.content.Context import android.graphics.Bitmap import android.media.MediaMetadataRetriever import androidx.exifinterface.media.ExifInterface -import org.matrix.android.sdk.R import org.matrix.android.sdk.api.session.content.ContentAttachmentData import org.matrix.android.sdk.api.session.events.model.Content import org.matrix.android.sdk.api.session.events.model.Event @@ -42,7 +41,6 @@ import org.matrix.android.sdk.api.session.room.model.message.MessageOptionsConte import org.matrix.android.sdk.api.session.room.model.message.MessagePollResponseContent import org.matrix.android.sdk.api.session.room.model.message.MessageTextContent import org.matrix.android.sdk.api.session.room.model.message.MessageType -import org.matrix.android.sdk.api.session.room.model.message.MessageVerificationRequestContent import org.matrix.android.sdk.api.session.room.model.message.MessageVideoContent import org.matrix.android.sdk.api.session.room.model.message.OPTION_TYPE_POLL import org.matrix.android.sdk.api.session.room.model.message.OptionItem @@ -59,7 +57,6 @@ import org.matrix.android.sdk.internal.di.UserId import org.matrix.android.sdk.internal.session.content.ThumbnailExtractor import org.matrix.android.sdk.internal.session.permalinks.PermalinkFactory import org.matrix.android.sdk.internal.session.room.send.pills.TextPillsUtils -import org.matrix.android.sdk.internal.util.StringProvider import javax.inject.Inject /** @@ -74,7 +71,6 @@ import javax.inject.Inject internal class LocalEchoEventFactory @Inject constructor( private val context: Context, @UserId private val userId: String, - private val stringProvider: StringProvider, private val markdownParser: MarkdownParser, private val textPillsUtils: TextPillsUtils, private val localEchoRepository: LocalEchoRepository, @@ -334,25 +330,6 @@ internal class LocalEchoEventFactory @Inject constructor( ) } - fun createVerificationRequest(roomId: String, fromDevice: String, toUserId: String, methods: List): Event { - val localId = LocalEcho.createLocalEchoId() - return Event( - roomId = roomId, - originServerTs = dummyOriginServerTs(), - senderId = userId, - eventId = localId, - type = EventType.MESSAGE, - content = MessageVerificationRequestContent( - body = stringProvider.getString(R.string.key_verification_request_fallback_message, userId), - fromDevice = fromDevice, - toUserId = toUserId, - timestamp = System.currentTimeMillis(), - methods = methods - ).toContent(), - unsignedData = UnsignedData(age = null, transactionId = localId) - ) - } - private fun dummyOriginServerTs(): Long { return System.currentTimeMillis() } diff --git a/matrix-sdk-android/src/main/res/values-bg/strings.xml b/matrix-sdk-android/src/main/res/values-bg/strings.xml index c3a5f3be82..12f1a85860 100644 --- a/matrix-sdk-android/src/main/res/values-bg/strings.xml +++ b/matrix-sdk-android/src/main/res/values-bg/strings.xml @@ -110,7 +110,6 @@ %1$s предотврати присъединяването на гости в стаята. %1$s включи шифроване от-край-до-край. %1$s включи шифроване от-край-до-край (неразпознат алгоритъм %2$s). - %s изпрати запитване за потвърждение на ключа ви, но клиентът ви не поддържа верифициране посредством чат. Ще трябва да използвате стария метод за верифициране на ключове. %1$s създаде стаята Изпратихте снимка. Изпратихте стикер. diff --git a/matrix-sdk-android/src/main/res/values-bn-rIN/strings.xml b/matrix-sdk-android/src/main/res/values-bn-rIN/strings.xml index 35f8feaf0f..38be316df8 100644 --- a/matrix-sdk-android/src/main/res/values-bn-rIN/strings.xml +++ b/matrix-sdk-android/src/main/res/values-bn-rIN/strings.xml @@ -190,5 +190,4 @@ আপনি শেষ থেকে শেষ এনক্রিপশন চালু করেছেন। %1$s এন্ড-টু-এন্ড এনক্রিপশন চালু করেছে (অজানা অ্যালগরিদম %2$s)। আপনি শেষ-থেকে-শেষ এনক্রিপশন চালু করেছেন (অজানা অ্যালগরিদম %1$s )। - %s আপনার কীটি যাচাই করার জন্য অনুরোধ করছে, তবে আপনার ক্লায়েন্ট ইন-চ্যাট কী যাচাইকরণ সমর্থন করে না। কীগুলি যাচাই করতে আপনাকে লিগ্যাসি কী যাচাইকরণ ব্যবহার করতে হবে। \ No newline at end of file diff --git a/matrix-sdk-android/src/main/res/values-ca/strings.xml b/matrix-sdk-android/src/main/res/values-ca/strings.xml index 98bda2c4ed..32f482724f 100644 --- a/matrix-sdk-android/src/main/res/values-ca/strings.xml +++ b/matrix-sdk-android/src/main/res/values-ca/strings.xml @@ -61,7 +61,6 @@ %1$s ha enviat un adhesiu. %s s\'ha actualitzat aquí. Ho has actualitzat aquí. - %s està sol·licitant la verificació de la teva clau, però el teu client no admet la verificació de clau des del xat. Hauràs d\'utilitzar la verificació de claus heretada per fer la verificació. Has activat el xifrat d\'extrem a extrem (algorisme %1$s no reconegut). %1$s ha activat el xifrat d\'extrem a extrem (algorisme %2$s no reconegut). Has activat el xifrat d\'extrem a extrem. diff --git a/matrix-sdk-android/src/main/res/values-cs/strings.xml b/matrix-sdk-android/src/main/res/values-cs/strings.xml index b1ab4ea77f..018f0598fa 100644 --- a/matrix-sdk-android/src/main/res/values-cs/strings.xml +++ b/matrix-sdk-android/src/main/res/values-cs/strings.xml @@ -195,7 +195,6 @@ Zapnuli jste end-to-end šifrování. %1$s zapnuli end-to-end šifrování (neznámý algoritmus %2$s). Zapnuli jste end-to-end šifrování (neznámý algoritmus %1$s). - %s žádá ověření Vašeho klíče, ale Váš klient nepodporuje ověření klíče v chatu. Budete muset k ověření klíčů použít zastaralý způsob ověření. Zamezili jste hostům vstoupit do této místnosti. %1$s zamezil hostům vstoupit do této místnosti. Povolili jste hostům vstoupit. diff --git a/matrix-sdk-android/src/main/res/values-de/strings.xml b/matrix-sdk-android/src/main/res/values-de/strings.xml index fdfb264f49..406f4a7102 100644 --- a/matrix-sdk-android/src/main/res/values-de/strings.xml +++ b/matrix-sdk-android/src/main/res/values-de/strings.xml @@ -118,7 +118,6 @@ %1$s hat Gästen untersagt den Raum zu betreten. %1$s aktivierte Ende-zu-Ende-Verschlüsselung. %1$s aktivierte Ende-zu-Ende-Verschlüsselung (unbekannter Algorithmus %2$s). - %s fordert zur Überprüfung deines Schlüssels auf, jedoch unterstützt dein Client nicht die Schlüsselüberprüfung im Chat. Du musst die herkömmliche Schlüsselüberprüfung verwenden, um die Schlüssel zu überprüfen. Du hast ein Bild gesendet. Du hast einen Sticker gesendet. Deine Einladung diff --git a/matrix-sdk-android/src/main/res/values-eo/strings.xml b/matrix-sdk-android/src/main/res/values-eo/strings.xml index 10be2103cf..8dacd87157 100644 --- a/matrix-sdk-android/src/main/res/values-eo/strings.xml +++ b/matrix-sdk-android/src/main/res/values-eo/strings.xml @@ -110,7 +110,6 @@ %1$s malpermesis al gastoj enveni. %1$s ŝaltis tutvojan ĉifradon. %1$s ŝaltis tutvojan ĉifradon (kun nerekonita algoritmo %2$s). - %s petas kontrolon de via ŝlosilo, sed via kliento ne subtenas kontrolon de ŝlosiloj en la babilujo. Vi devos uzi malnovan kontrolmanieron de ŝlosiloj. Vi ŝanĝis la povnivelon de %1$s. %1$s sanĝis la povnivelon de %2$s. Vi ŝaltis tutvojan ĉifradon (kun nerekonita algoritmo %1$s). diff --git a/matrix-sdk-android/src/main/res/values-es/strings.xml b/matrix-sdk-android/src/main/res/values-es/strings.xml index 22b640e58b..10911dde68 100644 --- a/matrix-sdk-android/src/main/res/values-es/strings.xml +++ b/matrix-sdk-android/src/main/res/values-es/strings.xml @@ -117,7 +117,6 @@ %1$s ha impedido que los invitados se unan a la sala. %1$s ha activado la encriptación extremo a extremo. %1$s ha activado la encriptación de extremo a extremo (algoritmo no reconocido %2$s). - %s solicita verificar su clave, pero su cliente no soporta la verificación de la clave en chat. Necesitará usar la verificación de claves clásica para poder verificar las claves. Enviaste una imagen. Enviaste un sticker. Tu invitación diff --git a/matrix-sdk-android/src/main/res/values-et/strings.xml b/matrix-sdk-android/src/main/res/values-et/strings.xml index 0cf5c3e438..2232e01ff4 100644 --- a/matrix-sdk-android/src/main/res/values-et/strings.xml +++ b/matrix-sdk-android/src/main/res/values-et/strings.xml @@ -106,7 +106,6 @@ %1$s eemaldas selle jututoa põhiaadressi. %1$s lubas külalistel selle jututoaga liituda. %1$s seadistas, et külalised ei või selle jututoaga liituda. - %s soovib verifitseerida sinu võtmeid, kuid sinu kasutatav klient ei oska vestluse-sisest verifitseerimist teha. Sa pead kasutama traditsioonilist verifitseerimislahendust. Kasutaja %1$s lõi jututoa Sina saatsid pildi. Sina saatsid kleepsu. diff --git a/matrix-sdk-android/src/main/res/values-eu/strings.xml b/matrix-sdk-android/src/main/res/values-eu/strings.xml index bc61035c24..778761808e 100644 --- a/matrix-sdk-android/src/main/res/values-eu/strings.xml +++ b/matrix-sdk-android/src/main/res/values-eu/strings.xml @@ -137,7 +137,5 @@ %1$s erabiltzaileak muturretik muturrerako zifratzea gaitu du. %1$s erabiltzaileak muturretik muturrerako zifratzea gaitu du. (%2$s algoritmo ezezaguna). - %s(e)k zure gakoa egiaztatzea eskatu du, baina zure bezeroak ez du txatean gakoa egiaztatzea onartzen. Gako egiaztaketa zaharra erabili beharko duzu. - %1$s erabiltzaileak gela sortu du diff --git a/matrix-sdk-android/src/main/res/values-fa/strings.xml b/matrix-sdk-android/src/main/res/values-fa/strings.xml index 50446b9708..dbbb890b01 100644 --- a/matrix-sdk-android/src/main/res/values-fa/strings.xml +++ b/matrix-sdk-android/src/main/res/values-fa/strings.xml @@ -108,7 +108,6 @@ %1$s جلوی پیوستن میمهانان به گروه را گرفت. %1$s رمزنگاری سرتاسری را روشن کرد. %1$s رمزنگاری سرتاسری را روشن کرد (الگوریتم تشخیص‌داده‌نشده %2$s ). - %s درخواست تأیید کلیدتان را دارد، ولی کارخواهتان تأیید کلید درون گپ را پشتیبانی نمی‌کند. برای تأیید کلیدها لازم است از تأییدیهٔ کلید قدیمی استفاده کنید. %1$s اتاق را ایجاد کرد %1$s نمایه‌اش را به‌روز کرد %2$s نمی‌توان ویرایش کرد diff --git a/matrix-sdk-android/src/main/res/values-fi/strings.xml b/matrix-sdk-android/src/main/res/values-fi/strings.xml index 1e3788476f..044cbd3633 100644 --- a/matrix-sdk-android/src/main/res/values-fi/strings.xml +++ b/matrix-sdk-android/src/main/res/values-fi/strings.xml @@ -112,7 +112,6 @@ %1$s esti vieraita liittymästä huoneeseen. %1$s laittoi päälle osapuolten välisen salauksen. %1$s laittoi päälle osapuolisten välisen salauksen (tuntematon algoritmi %2$s). - %s haluaa varmentaa salausavaimesi, mutta asiakasohjelmasi ei tue keskustelun aikana tapahtuvaa avainten varmennusta. Joudut käyttämään perinteistä varmennustapaa. Hyväksyit käyttäjän %1$s kutsun. Syy: %2$s Peruutit kutsun liittyä huoneeseen käyttäjältä %1$s. Syy: %2$s Lähetit kutsun liittyä huoneeseen käyttäjälle %1$s. Syy: %2$s diff --git a/matrix-sdk-android/src/main/res/values-fr/strings.xml b/matrix-sdk-android/src/main/res/values-fr/strings.xml index f49c54a8ba..4f0c1fa2b1 100644 --- a/matrix-sdk-android/src/main/res/values-fr/strings.xml +++ b/matrix-sdk-android/src/main/res/values-fr/strings.xml @@ -110,7 +110,6 @@ %1$s a empêché les visiteurs de rejoindre le salon. %1$s a activé le chiffrement de bout en bout. %1$s a activé le chiffrement de bout en bout (algorithme %2$s inconnu). - %s demande à vérifier votre clé, mais votre client ne supporte pas la vérification de clés dans les discussions. Vous devrez utiliser l’ancienne vérification de clés pour vérifier les clés. %1$s a créé le salon Vous avez mis cet endroit à niveau. %s a mis cet endroit à niveau. diff --git a/matrix-sdk-android/src/main/res/values-gl/strings.xml b/matrix-sdk-android/src/main/res/values-gl/strings.xml index 208b1e9d13..61c42229cc 100644 --- a/matrix-sdk-android/src/main/res/values-gl/strings.xml +++ b/matrix-sdk-android/src/main/res/values-gl/strings.xml @@ -211,7 +211,6 @@ %1$s engadiu %2$s como enderezo desta sala. %1$s engadiu %2$s como enderezos desta sala. - %s solicita verificar a túa chave, pero o teu cliente non soporta a verificación de chaves nos chats. Necesitarás usar o método antigo de verificación de chaves. Activaches o cifrado extremo-a-extremo (algoritmo non recoñecido %1$s). %1$s activou o cifrado extremo-a-extrem (algoritmo non recoñecible %2$s). Activaches o cifrado extremo-a-extremo. diff --git a/matrix-sdk-android/src/main/res/values-hu/strings.xml b/matrix-sdk-android/src/main/res/values-hu/strings.xml index 6c06c11813..62e0c5f90c 100644 --- a/matrix-sdk-android/src/main/res/values-hu/strings.xml +++ b/matrix-sdk-android/src/main/res/values-hu/strings.xml @@ -110,7 +110,6 @@ %1$s megtiltotta a vendégeknek, hogy belépjenek ebbe a szobába. %1$s bekapcsolta a végpontok közötti titkosítást. %1$s bekapcsolta a végpontok közötti titkosítást (ismeretlen algoritmus %2$s). - %s kéri a kulcsok ellenőrzését de a kliens nem támogatja a szobán belüli kulcs ellenőrzést. A hagyományos módon kell ellenőrizned a kulcsokat. %1$s szobát készített Fogadtad a hívást. Befejezted a hívást. diff --git a/matrix-sdk-android/src/main/res/values-it/strings.xml b/matrix-sdk-android/src/main/res/values-it/strings.xml index e1f57ddac0..fe846bdb2c 100644 --- a/matrix-sdk-android/src/main/res/values-it/strings.xml +++ b/matrix-sdk-android/src/main/res/values-it/strings.xml @@ -111,7 +111,6 @@ %1$s ha impedito l\'accesso alla stanza per gli ospiti. %1$s ha attivato la cifratura end-to-end. %1$s ha attivato la cifratura end-to-end (algoritmo %2$s non riconosciuto). - %s sta chiedendo di verificare la tua chiave, ma il tuo client non supporta la verifica in-chat. Dovrai usare il metodo di verifica obsoleto per verificare le chiavi. %1$s ha creato la stanza Hai inviato un\'immagine. Hai inviato un adesivo. diff --git a/matrix-sdk-android/src/main/res/values-kab/strings.xml b/matrix-sdk-android/src/main/res/values-kab/strings.xml index 8b94fad9eb..ea0c78da5a 100644 --- a/matrix-sdk-android/src/main/res/values-kab/strings.xml +++ b/matrix-sdk-android/src/main/res/values-kab/strings.xml @@ -116,7 +116,6 @@ %1$s d %2$d wiyaḍ Tremdeḍ awgelhen seg yixef ɣer yixef (alguritm %1$s ur yettwassen ara). - %s isuter-d ad isenqed tasarut-ik·im, maca amsaɣ-ik·im ur issefrak ara asenqed n tsura deg yidiwenniyen. Ilaq-ak·am useqdec asenqed iqdim n tsura i usenqed n tsura. Taxxamt tilemt Amtawi n tazwara: \nAktar n umiḍan… diff --git a/matrix-sdk-android/src/main/res/values-lv/strings.xml b/matrix-sdk-android/src/main/res/values-lv/strings.xml index 815760f394..8aee2dcded 100644 --- a/matrix-sdk-android/src/main/res/values-lv/strings.xml +++ b/matrix-sdk-android/src/main/res/values-lv/strings.xml @@ -81,7 +81,6 @@ Jūs nosūtījāt uzlīmi. %1$s nosūtīja uzlīmi. Jūs nosūtījāt attēlu. - %s pieprasa verificēt jūsu atslēgu, taču jūsu klients neatbalsta tērzēšanas atslēgas verifikāciju. Lai verificētu atslēgas, jums būs jāizmanto atslēgu verifikācija novecojušā veidā. Jūs ieslēdzāt pilnīgu šifrēšanu (neatpazīts algoritms %1$s). %1$s ieslēdza pilnīgu šifrēšanu (neatpazīts algoritms %2$s). Jūs ieslēdzāt pilnīgu šifrēšanu. diff --git a/matrix-sdk-android/src/main/res/values-nl/strings.xml b/matrix-sdk-android/src/main/res/values-nl/strings.xml index 1b05052ba6..3216fdb720 100644 --- a/matrix-sdk-android/src/main/res/values-nl/strings.xml +++ b/matrix-sdk-android/src/main/res/values-nl/strings.xml @@ -146,6 +146,5 @@ %1$s heeft eind-tot-eind-versleuteling ingeschakeld. %1$s heeft eind-tot-eind-versleuteling ingeschakeld (onbekend algoritme %2$s). - %s vraagt om uw sleutel te verifiëren, maar uw cliënt biedt geen ondersteuning voor verificatie in het gesprek. U zult de verouderde sleutelverificatie moeten gebruiken om de sleutels te verifiëren. diff --git a/matrix-sdk-android/src/main/res/values-pt-rBR/strings.xml b/matrix-sdk-android/src/main/res/values-pt-rBR/strings.xml index af4004666c..95c1331690 100644 --- a/matrix-sdk-android/src/main/res/values-pt-rBR/strings.xml +++ b/matrix-sdk-android/src/main/res/values-pt-rBR/strings.xml @@ -198,7 +198,6 @@ Você ativou a criptografia de ponta a ponta. %1$s ativou a criptografia de ponta a ponta (algoritmo não reconhecido %2$s). Você ativou a criptografia de ponta a ponta (algoritmo não reconhecido %1$s). - %s deseja confirmar a sua chave, mas o seu aplicativo não suporta a confirmação da chave da conversa. Você precisará usar a confirmação tradicional de chaves para confirmar chaves. Você impediu que desconhecidos entrem na sala. %1$s impediu que desconhecidos entrem na sala. Você permitiu que desconhecidos entrem aqui. diff --git a/matrix-sdk-android/src/main/res/values-ru/strings.xml b/matrix-sdk-android/src/main/res/values-ru/strings.xml index b317e04908..1236dd358a 100644 --- a/matrix-sdk-android/src/main/res/values-ru/strings.xml +++ b/matrix-sdk-android/src/main/res/values-ru/strings.xml @@ -123,7 +123,6 @@ %1$s запретил(а) гостям входить в комнату. %1$s включил(а) сквозное шифрование. %1$s включил(а) сквозное шифрование (неизвестный алгоритм %2$s). - %s запрашивает подтверждение вашего ключа, но ваш клиент не поддерживает подтверждение в чате. Используйте устаревшую проверку для сверки ключей. Вы отправили изображение. Вы отправили стикер. Ваше приглашение diff --git a/matrix-sdk-android/src/main/res/values-sk/strings.xml b/matrix-sdk-android/src/main/res/values-sk/strings.xml index a40654f7bf..390a3e9ba3 100644 --- a/matrix-sdk-android/src/main/res/values-sk/strings.xml +++ b/matrix-sdk-android/src/main/res/values-sk/strings.xml @@ -196,7 +196,6 @@ Povolili ste E2E šifrovanie. %1$s povolil/a E2E šifrovanie (Nerozpoznaný algorytmus %2$s). Povolili ste E2E šifrovanie (Nerozpoznaný algorytmus %1$s). - %s požaduje overenie vašich šifrovacích kľúčov, ale váš klient nepodporuje overenie kľúčov v konverzácii. Budete musieť použiť zastaralú metódu overenia. nastavili ste na servery pravidlá ACL tejto miestnosti. %s nastavil(a) na servery pravidlá ACL tejto miestnosti. Aktualizovali ste sem. diff --git a/matrix-sdk-android/src/main/res/values-sq/strings.xml b/matrix-sdk-android/src/main/res/values-sq/strings.xml index 11734bf16a..33ed9f4e0a 100644 --- a/matrix-sdk-android/src/main/res/values-sq/strings.xml +++ b/matrix-sdk-android/src/main/res/values-sq/strings.xml @@ -110,7 +110,6 @@ %1$s ka penguar vizitorë të marrin pjesë në dhomë. %1$s aktivizoi fshehtëzim skaj-më-skaj. %1$s aktivizoi fshehtëzim skaj-më-skaj (algoritëm i papranuar %2$s). - %s po kërkon të verifikojë kyçin tuaj, por klienti juaj nuk mbulon verifikim kyçesh brenda fjalosjeje. Që të verifikoni kyça, do t’ju duhet të përdorni verifikim të dikurshëm kyçesh. %1$s krijo dhomën Dërguat një figurë. Dërguat një ngjitës. diff --git a/matrix-sdk-android/src/main/res/values-sr/strings.xml b/matrix-sdk-android/src/main/res/values-sr/strings.xml index c55c92d58a..cf4aecaad1 100644 --- a/matrix-sdk-android/src/main/res/values-sr/strings.xml +++ b/matrix-sdk-android/src/main/res/values-sr/strings.xml @@ -43,7 +43,6 @@ Напустили сте собу %1$s напусти собу Напустили сте собу - %s тражи да провери ваш кључ али ваш клијент не подржава верификацију унутар ћаскања. Мораћете да употребите старији начин за оверу кључева. Укључили сте шифровање с краја на крај (непознат алгоритам %1$s). %1$s укључи шифровање с краја на крај (непознат алгоритам %2$s). %1$s искључи шифровање с краја на крај. diff --git a/matrix-sdk-android/src/main/res/values-sv/strings.xml b/matrix-sdk-android/src/main/res/values-sv/strings.xml index df36a47533..d202670c49 100644 --- a/matrix-sdk-android/src/main/res/values-sv/strings.xml +++ b/matrix-sdk-android/src/main/res/values-sv/strings.xml @@ -190,7 +190,6 @@ Du aktiverade totalsträckskryptering. %1$s aktiverade totalsträckskryptering (okänd algoritm %2$s). Du aktiverade totalsträckskryptering (okänd algoritm %1$s). - %s begär att verifiera din nyckel, men din klient stöder inte nyckelverifiering i chatten. Du behöver använda legacynyckelverifiering för att verifiera nycklar. Du hindrade gäster från att gå med i rummet. %1$s hindrade gäster från att gå med i rummet. Du tillät gäster att gå med här. diff --git a/matrix-sdk-android/src/main/res/values-zh-rCN/strings.xml b/matrix-sdk-android/src/main/res/values-zh-rCN/strings.xml index 478970a334..585ac625cb 100644 --- a/matrix-sdk-android/src/main/res/values-zh-rCN/strings.xml +++ b/matrix-sdk-android/src/main/res/values-zh-rCN/strings.xml @@ -107,7 +107,6 @@ %1$s 已禁止访客加入聊天室。 %1$s 已开启端到端加密。 %1$s 已开启端到端加密(无法识别的演算法 %2$s)。 - %s 正在请求验证您的密钥,但您的客户端不支援聊天中密钥验证。 您将必须使用旧版的密钥验证来验证金钥。 %1$s 创建了这个聊天室 您发送了一张图片。 您发送了一张贴纸。 diff --git a/matrix-sdk-android/src/main/res/values-zh-rTW/strings.xml b/matrix-sdk-android/src/main/res/values-zh-rTW/strings.xml index 6f73f88279..d525d4b4bd 100644 --- a/matrix-sdk-android/src/main/res/values-zh-rTW/strings.xml +++ b/matrix-sdk-android/src/main/res/values-zh-rTW/strings.xml @@ -107,7 +107,6 @@ %1$s 已禁止訪客加入聊天室。 %1$s 已開啟端到端加密。 %1$s 已開啟端到端加密(無法識別的演算法 %2$s)。 - %s 正在請求驗證您的金鑰,但您的客戶端不支援聊天中金鑰驗證。您將必須使用舊版的金鑰驗證來驗證金鑰。 %1$s 建立了聊天室 您傳送了圖片。 您傳送了貼圖。 diff --git a/matrix-sdk-android/src/main/res/values/strings.xml b/matrix-sdk-android/src/main/res/values/strings.xml index b93d9b680e..08275fba36 100644 --- a/matrix-sdk-android/src/main/res/values/strings.xml +++ b/matrix-sdk-android/src/main/res/values/strings.xml @@ -312,6 +312,4 @@ %1$s turned on end-to-end encryption (unrecognised algorithm %2$s). You turned on end-to-end encryption (unrecognised algorithm %1$s). - %s is requesting to verify your key, but your client does not support in-chat key verification. You will need to use legacy key verification to verify keys. - From c13ff6a392e7be765c7760dc9aa9f1620f4c4b31 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 3 Mar 2021 13:49:50 +0100 Subject: [PATCH 173/578] Extract Factories to dedicated files --- .../VerificationTransportRoomMessage.kt | 30 ------------ ...VerificationTransportRoomMessageFactory.kt | 49 +++++++++++++++++++ .../VerificationTransportToDevice.kt | 13 +---- .../VerificationTransportToDeviceFactory.kt | 32 ++++++++++++ 4 files changed, 82 insertions(+), 42 deletions(-) create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransportRoomMessageFactory.kt create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransportToDeviceFactory.kt diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransportRoomMessage.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransportRoomMessage.kt index 54cc0e8161..957ff2d50c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransportRoomMessage.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransportRoomMessage.kt @@ -45,18 +45,13 @@ import org.matrix.android.sdk.api.session.room.model.message.MessageVerification import org.matrix.android.sdk.api.session.room.model.relation.RelationDefaultContent import org.matrix.android.sdk.internal.crypto.model.rest.VERIFICATION_METHOD_RECIPROCATE import org.matrix.android.sdk.internal.crypto.model.rest.VERIFICATION_METHOD_SAS -import org.matrix.android.sdk.internal.di.DeviceId -import org.matrix.android.sdk.internal.di.SessionId -import org.matrix.android.sdk.internal.di.UserId import org.matrix.android.sdk.internal.di.WorkManagerProvider import org.matrix.android.sdk.internal.session.room.send.LocalEchoEventFactory -import org.matrix.android.sdk.internal.task.TaskExecutor import org.matrix.android.sdk.internal.worker.SessionSafeCoroutineWorker import org.matrix.android.sdk.internal.worker.WorkerParamsFactory import timber.log.Timber import java.util.UUID import java.util.concurrent.TimeUnit -import javax.inject.Inject internal class VerificationTransportRoomMessage( private val workManagerProvider: WorkManagerProvider, @@ -386,28 +381,3 @@ internal class VerificationTransportRoomMessage( } } -internal class VerificationTransportRoomMessageFactory @Inject constructor( - private val workManagerProvider: WorkManagerProvider, - private val stringProvider: StringProvider, - @SessionId - private val sessionId: String, - @UserId - private val userId: String, - @DeviceId - private val deviceId: String?, - private val localEchoEventFactory: LocalEchoEventFactory, - private val taskExecutor: TaskExecutor -) { - - fun createTransport(roomId: String, tx: DefaultVerificationTransaction?): VerificationTransportRoomMessage { - return VerificationTransportRoomMessage(workManagerProvider, - stringProvider, - sessionId, - userId, - deviceId, - roomId, - localEchoEventFactory, - tx, - taskExecutor.executorScope) - } -} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransportRoomMessageFactory.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransportRoomMessageFactory.kt new file mode 100644 index 0000000000..f89127273b --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransportRoomMessageFactory.kt @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2021 The Matrix.org Foundation C.I.C. + * + * 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. + */ + +package org.matrix.android.sdk.internal.crypto.verification + +import org.matrix.android.sdk.internal.di.DeviceId +import org.matrix.android.sdk.internal.di.SessionId +import org.matrix.android.sdk.internal.di.UserId +import org.matrix.android.sdk.internal.di.WorkManagerProvider +import org.matrix.android.sdk.internal.session.room.send.LocalEchoEventFactory +import org.matrix.android.sdk.internal.task.TaskExecutor +import javax.inject.Inject + +internal class VerificationTransportRoomMessageFactory @Inject constructor( + private val workManagerProvider: WorkManagerProvider, + @SessionId + private val sessionId: String, + @UserId + private val userId: String, + @DeviceId + private val deviceId: String?, + private val localEchoEventFactory: LocalEchoEventFactory, + private val taskExecutor: TaskExecutor +) { + + fun createTransport(roomId: String, tx: DefaultVerificationTransaction?): VerificationTransportRoomMessage { + return VerificationTransportRoomMessage(workManagerProvider, + sessionId, + userId, + deviceId, + roomId, + localEchoEventFactory, + tx, + taskExecutor.executorScope) + } +} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransportToDevice.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransportToDevice.kt index 5fd1c5d650..8acd4faecf 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransportToDevice.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransportToDevice.kt @@ -16,8 +16,8 @@ package org.matrix.android.sdk.internal.crypto.verification import org.matrix.android.sdk.api.MatrixCallback -import org.matrix.android.sdk.api.session.crypto.verification.ValidVerificationInfoRequest import org.matrix.android.sdk.api.session.crypto.verification.CancelCode +import org.matrix.android.sdk.api.session.crypto.verification.ValidVerificationInfoRequest import org.matrix.android.sdk.api.session.crypto.verification.VerificationTxState import org.matrix.android.sdk.api.session.events.model.EventType import org.matrix.android.sdk.api.session.room.model.message.MessageType @@ -33,11 +33,9 @@ import org.matrix.android.sdk.internal.crypto.model.rest.KeyVerificationStart import org.matrix.android.sdk.internal.crypto.model.rest.VERIFICATION_METHOD_RECIPROCATE import org.matrix.android.sdk.internal.crypto.model.rest.VERIFICATION_METHOD_SAS import org.matrix.android.sdk.internal.crypto.tasks.SendToDeviceTask -import org.matrix.android.sdk.internal.di.DeviceId import org.matrix.android.sdk.internal.task.TaskExecutor import org.matrix.android.sdk.internal.task.configureWith import timber.log.Timber -import javax.inject.Inject internal class VerificationTransportToDevice( private var tx: DefaultVerificationTransaction?, @@ -249,12 +247,3 @@ internal class VerificationTransportToDevice( } } -internal class VerificationTransportToDeviceFactory @Inject constructor( - private val sendToDeviceTask: SendToDeviceTask, - @DeviceId val myDeviceId: String?, - private val taskExecutor: TaskExecutor) { - - fun createTransport(tx: DefaultVerificationTransaction?): VerificationTransportToDevice { - return VerificationTransportToDevice(tx, sendToDeviceTask, myDeviceId, taskExecutor) - } -} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransportToDeviceFactory.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransportToDeviceFactory.kt new file mode 100644 index 0000000000..e9a2c65ef7 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransportToDeviceFactory.kt @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 The Matrix.org Foundation C.I.C. + * + * 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. + */ + +package org.matrix.android.sdk.internal.crypto.verification + +import org.matrix.android.sdk.internal.crypto.tasks.SendToDeviceTask +import org.matrix.android.sdk.internal.di.DeviceId +import org.matrix.android.sdk.internal.task.TaskExecutor +import javax.inject.Inject + +internal class VerificationTransportToDeviceFactory @Inject constructor( + private val sendToDeviceTask: SendToDeviceTask, + @DeviceId val myDeviceId: String?, + private val taskExecutor: TaskExecutor) { + + fun createTransport(tx: DefaultVerificationTransaction?): VerificationTransportToDevice { + return VerificationTransportToDevice(tx, sendToDeviceTask, myDeviceId, taskExecutor) + } +} From a3b1c348efa791dda52b8380a97b3bfa254ddb0b Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 3 Mar 2021 14:15:40 +0100 Subject: [PATCH 174/578] Create VectorRoomDisplayNameFallbackProvider to provide default room names --- .../android/sdk/api/MatrixConfiguration.kt | 6 +- .../api/RoomDisplayNameFallbackProvider.kt | 26 +++++++++ .../membership/RoomDisplayNameResolver.kt | 21 ++++--- .../java/im/vector/app/VectorApplication.kt | 8 ++- .../VectorRoomDisplayNameFallbackProvider.kt | 57 +++++++++++++++++++ 5 files changed, 105 insertions(+), 13 deletions(-) create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/RoomDisplayNameFallbackProvider.kt create mode 100644 vector/src/main/java/im/vector/app/features/room/VectorRoomDisplayNameFallbackProvider.kt diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/MatrixConfiguration.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/MatrixConfiguration.kt index 93a1b962ed..ed809cdb04 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/MatrixConfiguration.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/MatrixConfiguration.kt @@ -39,7 +39,11 @@ data class MatrixConfiguration( /** * True to advertise support for call transfers to other parties on Matrix calls. */ - val supportsCallTransfer: Boolean = false + val supportsCallTransfer: Boolean = false, + /** + * RoomDisplayNameFallbackProvider to provide default room display name. + */ + val roomDisplayNameFallbackProvider: RoomDisplayNameFallbackProvider ) { /** diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/RoomDisplayNameFallbackProvider.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/RoomDisplayNameFallbackProvider.kt new file mode 100644 index 0000000000..4ac14d5f63 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/RoomDisplayNameFallbackProvider.kt @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2021 The Matrix.org Foundation C.I.C. + * + * 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. + */ + +package org.matrix.android.sdk.api + +interface RoomDisplayNameFallbackProvider { + fun getNameForRoomInvite(): String + fun getNameForEmptyRoom(): String + fun getNameFor2members(name1: String?, name2: String?): String + fun getNameFor3members(name1: String?, name2: String?, name3: String?): String + fun getNameFor4members(name1: String?, name2: String?, name3: String?, name4: String?): String + fun getNameFor4membersAndMore(name1: String?, name2: String?, name3: String?, remainingCount: Int): String +} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/RoomDisplayNameResolver.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/RoomDisplayNameResolver.kt index 784b610af7..6948dd956a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/RoomDisplayNameResolver.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/RoomDisplayNameResolver.kt @@ -17,7 +17,7 @@ package org.matrix.android.sdk.internal.session.room.membership import io.realm.Realm -import org.matrix.android.sdk.R +import org.matrix.android.sdk.api.MatrixConfiguration import org.matrix.android.sdk.api.session.events.model.EventType import org.matrix.android.sdk.api.session.events.model.toModel import org.matrix.android.sdk.api.session.room.model.Membership @@ -32,17 +32,18 @@ import org.matrix.android.sdk.internal.database.model.RoomSummaryEntity import org.matrix.android.sdk.internal.database.query.getOrNull import org.matrix.android.sdk.internal.database.query.where import org.matrix.android.sdk.internal.di.UserId -import org.matrix.android.sdk.internal.util.StringProvider import javax.inject.Inject /** * This class computes room display name */ internal class RoomDisplayNameResolver @Inject constructor( - private val stringProvider: StringProvider, + matrixConfiguration: MatrixConfiguration, @UserId private val userId: String ) { + private val roomDisplayNameFallbackProvider= matrixConfiguration.roomDisplayNameFallbackProvider + /** * Compute the room display name * @@ -82,7 +83,7 @@ internal class RoomDisplayNameResolver @Inject constructor( .findFirst() ?.displayName } else { - stringProvider.getString(R.string.room_displayname_room_invite) + roomDisplayNameFallbackProvider.getNameForRoomInvite() } } else if (roomEntity?.membership == Membership.JOIN) { val roomSummary = RoomSummaryEntity.where(realm, roomId).findFirst() @@ -104,25 +105,25 @@ internal class RoomDisplayNameResolver @Inject constructor( val otherMembersCount = otherMembersSubset.count() name = when (otherMembersCount) { 0 -> { - stringProvider.getString(R.string.room_displayname_empty_room) + roomDisplayNameFallbackProvider.getNameForEmptyRoom() // TODO (was xx and yyy) ... } 1 -> resolveRoomMemberName(otherMembersSubset[0], roomMembers) 2 -> { - stringProvider.getString(R.string.room_displayname_two_members, + roomDisplayNameFallbackProvider.getNameFor2members( resolveRoomMemberName(otherMembersSubset[0], roomMembers), resolveRoomMemberName(otherMembersSubset[1], roomMembers) ) } 3 -> { - stringProvider.getString(R.string.room_displayname_3_members, + roomDisplayNameFallbackProvider.getNameFor3members( resolveRoomMemberName(otherMembersSubset[0], roomMembers), resolveRoomMemberName(otherMembersSubset[1], roomMembers), resolveRoomMemberName(otherMembersSubset[2], roomMembers) ) } 4 -> { - stringProvider.getString(R.string.room_displayname_4_members, + roomDisplayNameFallbackProvider.getNameFor4members( resolveRoomMemberName(otherMembersSubset[0], roomMembers), resolveRoomMemberName(otherMembersSubset[1], roomMembers), resolveRoomMemberName(otherMembersSubset[2], roomMembers), @@ -131,9 +132,7 @@ internal class RoomDisplayNameResolver @Inject constructor( } else -> { val remainingCount = invitedCount + joinedCount - otherMembersCount + 1 - stringProvider.getQuantityString( - R.plurals.room_displayname_four_and_more_members, - remainingCount, + roomDisplayNameFallbackProvider.getNameFor4membersAndMore( resolveRoomMemberName(otherMembersSubset[0], roomMembers), resolveRoomMemberName(otherMembersSubset[1], roomMembers), resolveRoomMemberName(otherMembersSubset[2], roomMembers), diff --git a/vector/src/main/java/im/vector/app/VectorApplication.kt b/vector/src/main/java/im/vector/app/VectorApplication.kt index dd94be77ba..f3e2f8740e 100644 --- a/vector/src/main/java/im/vector/app/VectorApplication.kt +++ b/vector/src/main/java/im/vector/app/VectorApplication.kt @@ -53,6 +53,7 @@ import im.vector.app.features.notifications.NotificationUtils import im.vector.app.features.pin.PinLocker import im.vector.app.features.popup.PopupAlertManager import im.vector.app.features.rageshake.VectorUncaughtExceptionHandler +import im.vector.app.features.room.VectorRoomDisplayNameFallbackProvider import im.vector.app.features.settings.VectorLocale import im.vector.app.features.settings.VectorPreferences import im.vector.app.features.themes.ThemeUtils @@ -205,7 +206,12 @@ class VectorApplication : } } - override fun providesMatrixConfiguration() = MatrixConfiguration(applicationFlavor = BuildConfig.FLAVOR_DESCRIPTION) + override fun providesMatrixConfiguration(): MatrixConfiguration { + return MatrixConfiguration( + applicationFlavor = BuildConfig.FLAVOR_DESCRIPTION, + roomDisplayNameFallbackProvider = VectorRoomDisplayNameFallbackProvider(this) + ) + } override fun getWorkManagerConfiguration(): WorkConfiguration { return WorkConfiguration.Builder() diff --git a/vector/src/main/java/im/vector/app/features/room/VectorRoomDisplayNameFallbackProvider.kt b/vector/src/main/java/im/vector/app/features/room/VectorRoomDisplayNameFallbackProvider.kt new file mode 100644 index 0000000000..ca18e1d4c8 --- /dev/null +++ b/vector/src/main/java/im/vector/app/features/room/VectorRoomDisplayNameFallbackProvider.kt @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2021 New Vector Ltd + * + * 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. + */ + +package im.vector.app.features.room + +import android.content.Context +import org.matrix.android.sdk.R +import org.matrix.android.sdk.api.RoomDisplayNameFallbackProvider + +class VectorRoomDisplayNameFallbackProvider( + private val context: Context +) : RoomDisplayNameFallbackProvider { + + override fun getNameForRoomInvite(): String { + return context.getString(R.string.room_displayname_room_invite) + } + + override fun getNameForEmptyRoom(): String { + return context.getString(R.string.room_displayname_empty_room) + } + + override fun getNameFor2members(name1: String?, name2: String?): String { + return context.getString(R.string.room_displayname_two_members, name1, name2) + } + + override fun getNameFor3members(name1: String?, name2: String?, name3: String?): String { + return context.getString(R.string.room_displayname_3_members, name1, name2, name3) + } + + override fun getNameFor4members(name1: String?, name2: String?, name3: String?, name4: String?): String { + return context.getString(R.string.room_displayname_4_members, name1, name2, name3, name4) + } + + override fun getNameFor4membersAndMore(name1: String?, name2: String?, name3: String?, remainingCount: Int): String { + return context.resources.getQuantityString( + R.plurals.room_displayname_four_and_more_members, + remainingCount, + name1, + name2, + name3, + remainingCount + ) + } +} From dc63d6ae7396610fd7155dd73845ad396a1d5ec8 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 3 Mar 2021 14:16:11 +0100 Subject: [PATCH 175/578] Remove StringProvider from SDK --- .../sdk/internal/util/StringProvider.kt | 62 ------------------- 1 file changed, 62 deletions(-) delete mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/StringProvider.kt diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/StringProvider.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/StringProvider.kt deleted file mode 100644 index 69d50680a7..0000000000 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/StringProvider.kt +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 2020 The Matrix.org Foundation C.I.C. - * - * 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. - */ - -package org.matrix.android.sdk.internal.util - -import android.content.res.Resources -import androidx.annotation.NonNull -import androidx.annotation.PluralsRes -import androidx.annotation.StringRes -import dagger.Reusable -import javax.inject.Inject - -@Reusable -internal class StringProvider @Inject constructor(private val resources: Resources) { - - /** - * Returns a localized string from the application's package's - * default string table. - * - * @param resId Resource id for the string - * @return The string data associated with the resource, stripped of styled - * text information. - */ - @NonNull - fun getString(@StringRes resId: Int): String { - return resources.getString(resId) - } - - /** - * Returns a localized formatted string from the application's package's - * default string table, substituting the format arguments as defined in - * [java.util.Formatter] and [java.lang.String.format]. - * - * @param resId Resource id for the format string - * @param formatArgs The format arguments that will be used for - * substitution. - * @return The string data associated with the resource, formatted and - * stripped of styled text information. - */ - @NonNull - fun getString(@StringRes resId: Int, vararg formatArgs: Any?): String { - return resources.getString(resId, *formatArgs) - } - - @NonNull - fun getQuantityString(@PluralsRes resId: Int, quantity: Int, vararg formatArgs: Any?): String { - return resources.getQuantityString(resId, quantity, *formatArgs) - } -} From 9c76ee97eb1b806051b3fc8d7d23be22934ad988 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 3 Mar 2021 14:34:43 +0100 Subject: [PATCH 176/578] Move SDK strings to the application --- .../src/main/res/values-ar/strings.xml | 218 ------------ .../src/main/res/values-az/strings.xml | 116 ------- .../src/main/res/values-bg/strings.xml | 215 ------------ .../src/main/res/values-bn-rIN/strings.xml | 193 ----------- .../src/main/res/values-bs/strings.xml | 7 - .../src/main/res/values-ca/strings.xml | 267 --------------- .../src/main/res/values-cs/strings.xml | 276 --------------- .../src/main/res/values-da/strings.xml | 75 ----- .../src/main/res/values-de/strings.xml | 274 --------------- .../src/main/res/values-el/strings.xml | 76 ----- .../src/main/res/values-eo/strings.xml | 215 ------------ .../src/main/res/values-es-rMX/strings.xml | 92 ----- .../src/main/res/values-es/strings.xml | 274 --------------- .../src/main/res/values-et/strings.xml | 266 --------------- .../src/main/res/values-eu/strings.xml | 141 -------- .../src/main/res/values-fa/strings.xml | 221 ------------ .../src/main/res/values-fi/strings.xml | 212 ------------ .../src/main/res/values-fr/strings.xml | 238 ------------- .../src/main/res/values-gl/strings.xml | 266 --------------- .../src/main/res/values-he/strings.xml | 2 - .../src/main/res/values-hu/strings.xml | 196 ----------- .../src/main/res/values-id/strings.xml | 12 - .../src/main/res/values-in/strings.xml | 12 - .../src/main/res/values-is/strings.xml | 76 ----- .../src/main/res/values-it/strings.xml | 267 --------------- .../src/main/res/values-ja/strings.xml | 86 ----- .../src/main/res/values-kab/strings.xml | 193 ----------- .../src/main/res/values-ko/strings.xml | 101 ------ .../src/main/res/values-lt/strings.xml | 35 -- .../src/main/res/values-lv/strings.xml | 244 -------------- .../src/main/res/values-nl/strings.xml | 150 --------- .../src/main/res/values-nn/strings.xml | 68 ---- .../src/main/res/values-pl/strings.xml | 104 ------ .../src/main/res/values-pt-rBR/strings.xml | 274 --------------- .../src/main/res/values-pt/strings.xml | 87 ----- .../src/main/res/values-ru/strings.xml | 290 ---------------- .../src/main/res/values-si/strings.xml | 4 - .../src/main/res/values-sk/strings.xml | 211 ------------ .../src/main/res/values-sq/strings.xml | 262 --------------- .../src/main/res/values-sr/strings.xml | 276 --------------- .../src/main/res/values-sv/strings.xml | 266 --------------- .../src/main/res/values-szl/strings.xml | 2 - .../src/main/res/values-te/strings.xml | 71 ---- .../src/main/res/values-th/strings.xml | 4 - .../src/main/res/values-uk/strings.xml | 176 ---------- .../src/main/res/values-vls/strings.xml | 103 ------ .../src/main/res/values-zh-rCN/strings.xml | 210 ------------ .../src/main/res/values-zh-rTW/strings.xml | 256 -------------- .../src/main/res/values/strings.xml | 315 ------------------ vector/src/main/res/values-ar/strings.xml | 215 ++++++++++++ vector/src/main/res/values-az/strings.xml | 115 ++++++- vector/src/main/res/values-bg/strings.xml | 212 ++++++++++++ vector/src/main/res/values-bn-rIN/strings.xml | 190 +++++++++++ vector/src/main/res/values-bs/strings.xml | 4 + vector/src/main/res/values-ca/strings.xml | 264 +++++++++++++++ vector/src/main/res/values-cs/strings.xml | 273 +++++++++++++++ vector/src/main/res/values-da/strings.xml | 69 ++++ vector/src/main/res/values-de/strings.xml | 271 +++++++++++++++ vector/src/main/res/values-el/strings.xml | 72 ++++ vector/src/main/res/values-eo/strings.xml | 212 ++++++++++++ vector/src/main/res/values-es-rMX/strings.xml | 88 +++++ vector/src/main/res/values-es/strings.xml | 271 +++++++++++++++ vector/src/main/res/values-et/strings.xml | 263 +++++++++++++++ vector/src/main/res/values-eu/strings.xml | 136 ++++++++ vector/src/main/res/values-fa/strings.xml | 218 ++++++++++++ vector/src/main/res/values-fi/strings.xml | 209 ++++++++++++ vector/src/main/res/values-fr/strings.xml | 235 +++++++++++++ vector/src/main/res/values-gl/strings.xml | 263 +++++++++++++++ vector/src/main/res/values-hu/strings.xml | 193 +++++++++++ vector/src/main/res/values-id/strings.xml | 9 + vector/src/main/res/values-in/strings.xml | 9 + vector/src/main/res/values-is/strings.xml | 72 ++++ vector/src/main/res/values-it/strings.xml | 264 +++++++++++++++ vector/src/main/res/values-ja/strings.xml | 83 +++++ vector/src/main/res/values-kab/strings.xml | 190 +++++++++++ vector/src/main/res/values-ko/strings.xml | 98 ++++++ vector/src/main/res/values-lt/strings.xml | 35 +- vector/src/main/res/values-lv/strings.xml | 241 ++++++++++++++ .../src/main/res/values-nb/strings.xml | 0 vector/src/main/res/values-nl/strings.xml | 144 ++++++++ vector/src/main/res/values-nn/strings.xml | 65 ++++ vector/src/main/res/values-pl/strings.xml | 100 ++++++ vector/src/main/res/values-pt-rBR/strings.xml | 271 +++++++++++++++ vector/src/main/res/values-pt/strings.xml | 83 +++++ vector/src/main/res/values-ru/strings.xml | 287 ++++++++++++++++ vector/src/main/res/values-si/strings.xml | 1 + vector/src/main/res/values-sk/strings.xml | 208 ++++++++++++ vector/src/main/res/values-sq/strings.xml | 259 ++++++++++++++ vector/src/main/res/values-sr/strings.xml | 273 +++++++++++++++ vector/src/main/res/values-sv/strings.xml | 263 +++++++++++++++ vector/src/main/res/values-te/strings.xml | 66 ++++ vector/src/main/res/values-th/strings.xml | 1 + vector/src/main/res/values-uk/strings.xml | 173 ++++++++++ vector/src/main/res/values-vls/strings.xml | 100 ++++++ vector/src/main/res/values-zh-rCN/strings.xml | 207 ++++++++++++ vector/src/main/res/values-zh-rTW/strings.xml | 253 ++++++++++++++ vector/src/main/res/values/strings.xml | 311 +++++++++++++++++ 97 files changed, 7837 insertions(+), 7997 deletions(-) delete mode 100644 matrix-sdk-android/src/main/res/values-ar/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-az/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-bg/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-bn-rIN/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-bs/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-ca/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-cs/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-da/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-de/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-el/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-eo/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-es-rMX/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-es/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-et/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-eu/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-fa/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-fi/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-fr/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-gl/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-he/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-hu/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-id/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-in/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-is/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-it/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-ja/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-kab/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-ko/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-lt/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-lv/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-nl/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-nn/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-pl/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-pt-rBR/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-pt/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-ru/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-si/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-sk/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-sq/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-sr/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-sv/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-szl/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-te/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-th/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-uk/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-vls/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-zh-rCN/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values-zh-rTW/strings.xml delete mode 100644 matrix-sdk-android/src/main/res/values/strings.xml rename {matrix-sdk-android => vector}/src/main/res/values-nb/strings.xml (100%) diff --git a/matrix-sdk-android/src/main/res/values-ar/strings.xml b/matrix-sdk-android/src/main/res/values-ar/strings.xml deleted file mode 100644 index 6e017f9d23..0000000000 --- a/matrix-sdk-android/src/main/res/values-ar/strings.xml +++ /dev/null @@ -1,218 +0,0 @@ - - - إنَّ %1$s قد أرسلَ صُّورة. - دعوة مِن %s - إنَّ %1$s قد دَعى %2$s - إنَّ %1$s قد دعاكَ أنت - إنَّ %1$s قد إنضّم إلى الغُرفة - إنَّ %1$s قد غادر الغرفة - إنَّ %1$s قد رفضَ الدعوة - إنَّ %1$s قد طردَ %2$s - إنَّ %1$s قد رفعَ الحظر عن %2$s - إنَّ %1$s قد حظرَ %2$s - إنَّ %1$s قد غيَّرَ صورته الشخصية - إنَّ %1$s قد عيَّنَ اسمه الظاهر إلى %2$s - إنَّ %1$s قد غيَّرَ اسمه الظاهر من %2$s إلى %3$s - إنَّ %1$s قد أزالَ اسمه الظاهر (لقد كان %2$s) - إنَّ %1$s قد غيَّرَ الموضوع إلى: %2$s - إنَّ %1$s قد غيَّرَ اسم الغُرفة إلى: %2$s - إنَّ %s قد أجابَ على المُكالمة. - إنَّ %s قد أنهى المُكالمة. - إنَّ %1$s قد جعلَ التأريخ المُستقبلي للغُرفة مرئيًا لـ %2$s - جميع أعضاء الغُرفة، مِنَ اللَّحظة التي تمَّت دعوتهم. - جميع أعضاء الغُرفة، مِن لحظة انضمامهم. - جميع أعضاء الغُرفة. - أيُّ شخص. - غير معروف (%s). - إنَّ %1$s قد فعَّلَ تعمية النهاية-إلى-النهاية (%2$s) - إنَّ %1$s قد طلبَ اجتماع VoIP - إنَّ اجتماع VoIP قد بدأ - إنَّ اجتماع VoIP قد انتهى - إنَّ %1$s قد أزالَ اسم الغُرفة - إنَّ %1$s قد أزالَ موضوع الغُرفة - إنَّ %1$s قد حدَّثَ ملفه الشخصي %2$s - إنَّ %1$s قد أرسلَ دعوة إلى %2$s للإنضمام إلى الغُرفة - ** يتعذَّر فك تعمية: ⁨%s⁩ ** - إنَّ جِهاز المُرسل لم يُرسل لنا المفاتيح لهذه الرِّسالة. - يتعذَّ إرسال الرِّسالة - فَشلَ رفع الصُّورة - خطأ في الشَّبكة - خطأ في Matrix - حاليًا مِن غير المُمكِن إعادة الاِنضمام إلى غُرفة فارِغة. - رِسالة مُعمَّاة - عُنوان البريد الإلكتروني - رقم الهاتف - ‏‏⁨%1$s⁩: ‏⁨%2$s⁩ - إنَّ %1$s قد سحبَ دعوة %2$s - إنَّ %s قد أجرى مُكالمة مرئية. - إنَّ %s قد أجرى مُكالمة صوتية. - إنَّ %1$s قد قَبَل دعوة %2$s - يتعذَّر التنقيح - إنَّ %1$s قد أرسلَ مُلصقًا. - (تمَّ تغيِّير الصُّورة أيضًا) - دَعوة مِن ⁨%s⁩ - غُرفة فارِغة - %1$s وَ %2$s - دَعوة غُرفة - - - %1$s وواحد آخر - %1$s و%2$d آخران - %1$s و%2$d آخرين - %1$s و%2$d آخرون - %1$s و%2$d آخرون - - أنتَ قد أرسلتَ صُّورة. - أنتَ قد أرسلتَ مُلصقًا. - دعوة مِنكَ أنت - إنَّ %1$s قد أنشأ الغُرفة - أنتَ قد أنشأتَ الغُرفة - أنتَ قد دعوتَ %1$s - أنتَ قد انضممت إلى الغُرفة - أنتَ قد غادرتَ الغُرفة - أنت قد رفضت الدعوة - أنتَ قد طردتَ %1$s - أنتَ قد رفعتَ الحظر عن %1$s - أنتَ قد حظرتَ %1$s - أنتَ قد سحبتَ دعوة %1$s - أنتَ قد غيّرتَ صورتك الشخصية - أنتَ قد عيَّنتَ اسمك الظاهر إلى %1$s - أنتَ قد غيّرتَ اسمك الظاهر من ⁨%1$s⁩ إلى ⁨%2$s⁩ - أنتَ قد أزلتَ اسمك الظاهر (لقد كان ⁨%1$s⁩) - أنتَ قد غيَّرتَ الموضوع إلى: ⁨%1$s⁩ - إنَّ %1$s قد غيَّرَ صورة الغُرفة - أنتَ قد غيَّرتَ صورة الغُرفة - أنتَ قد غيَّرتَ اسم الغُرفة إلى: %1$s - أنتَ قد أجريتَ مُكالمة مرئية. - أنتَ قد أجريتَ مُكالمة صوتية. - إنَّ %s قد أرسلَ بيانات لإعداد مُكالمة. - أنتَ قد أرسلتَ بيانات لإعداد مُكالمة. - أنتَ قد أجبتَ على المُكالمة. - أنتَ قد أنهيتَ المُكالمة. - أنتَ قد جعلتَ التأريخ المُستقبلي للغُرفة مرئيًا لـ %1$s - أنتَ قد فعَّلتَ تعيمية النهاية-إلى-النهاية (%1$s) - إنَّ %s قد قامَ بترقية هذه الغرفة. - أنتَ قد رقَّيتَ هذه الغرفة. - أنتَ قد طلبتَ اجتماع VoIP - أنتَ قد أزلتَ اسم الغُرفة - أنتَ قد أزلتَ موضوع الغُرفة - إنَّ %1$s قد أزالَ صورة الغُرفة - أنتَ قد أزلتَ صورة الغُرفة - تمَّت إزالة الرسالة - الرسالة قد أُزيلت بواسطة %1$s - أُزيلت الرسالة [السبب: ⁨%1$s⁩] - الرِّسالة أُزيلت بِواسطة %1$s [السبب: ⁨%2$s⁩] - أنتَ قد أرسلتَ دعوة إلى %1$s للإنضمام إلى الغُرفة - إنَّ %1$s قد سحب دعوة %2$s للإنضمام إلى الغُرفة - أنتَ قد سحبت دعوة %1$s للإنضمام إلى الغُرفة - أنتَ قد قبلتَ دعوة %1$s - إنَّ %1$s قد أضافَ القطعة %2$s - أنتَّ قد أضفتَ القطعة %1$s - إنَّ %1$s قد أزال القطعة %2$s - أنتَ قد أزلتَ القطعة %1$s - إنَّ %1$s قد عدَّلَ القطعة %2$s - أنتَ قد عدَّلتَ القطعة %1$s - مسؤول - الاِفتراضي - مُخصَّص (⁨%1$d⁩) - مخصَّص - أنتَ قد غيَّرتَ مُستوى قوة %1$s. - إنَّ %1$s قد غيَّرَ مُستوى قوة %2$s. - %1$s مِن %2$s إلى %3$s - المُزامنة الأولية: -\nيجري إستيرد الحِساب… - 🎉 جميع الخوادِم محظورة مِنَ المُشاركة! لم يعُد من المُمكِن استخدام هذه الغُرفة. - لا تغيير. - • خوادِم مُطابقة IP الحرفية محظورة الآن. - • الخادِم المُطابق لـ %s قد أُزيل مِن قائمة السماح. - • الخادِم المُطابق لـ %s مسموح الآن. - • الخادِم المُطابق لـ %s قد أُزيل مِن قائمة الحظر. - • الخادِم المُطابق لـ %s محظور الآن. - • خوادِم مُطابقة IP الحرفية مسموحة الآن. - أنتَ قد غيَّرتَ خادِم الـACLs لهذه الغُرفة. - إنَّ %s قد غيَّرَ خادِم الـACLs لهذه الغُرفة. - • الخادِم يحظُر مُطابقة القيم الحرفية للـIP. - • الخادِم المُطابق لـ %s مسموح. - • الخادِم المُطابق لـ %s محظور. - • الخادِم يسمح بمُطابقة القيم الحرفية للـIP. - أنتَ قد عيَّنتَ خادِم الـACLs لهذه الغُرفة. - إنَّ %s قد عيَّنَ خادِم الـACLs لهذه الغُرفة. - أنتَ قد قمتَ بالترقية هُنا. - إنَّ %s قد قامَ بالترقية هُنا. - أنتَ قد جعلتَ الرسائل المُستقبلية مرئية لـ %1$s - إنَّ %1$s قد جعلَ الرسائل المُستقبلية مرئية لـ %2$s - أنتَ قد غادرتَ الغُرفة - إنَّ %1$s قد غادر الغرفة - أنت قد انضممت - إنَّ %1$s قد انضم - أنتَ قد أنشأتَ المُناقشة - إنَّ %1$s قد أنشأ المُناقشة - أنتَ قد سحبتَ دعوة %1$s. السبب: %2$s - إنَّ %1$s قد سحبَ دعوة %2$s. السبب: %3$s - أنتَ قد ألغيتَ دعوة %1$s للإنضمام إلى الغُرفة. السبب: %2$s - إنَّ %1$s قد ألغيت دعوة %2$s للإنضمام إلى الغُرفة. السبب: %3$s - أنتَ قد قبلتَ دعوة %1$s. السبب: %2$s - إنَّ %1$s قد قبلَ دعوة %2$s. السبب: %3$s - أنتَ قد أرسلتَ دعوة إلى %1$s للإنضمام إلى الغُرفة. السبب: %2$s - إنَّ %1$s قد أرسل دعوة إلى %2$s للإنضمام إلى الغُرغة. السبب: %3$s - أنتَ قد حظرتَ %1$s. السبب: %2$s - إنَّ %1$s قد حَظر %2$s. السبب: %3$s - أنتَ قد رفعتَ الحظر عن %1$s. السبب: %2$s - إنَّ %1$s قد رفع الحظر عن %2$s. السبب: %3$s - أنتَ قد طردتَ %1$s. السبب: %2$s - إنَّ %1$s قد طرد %2$s. السبب: %3$s - أنتَ قد رفضتَ الدعوة. السبب: %1$s - إنَّ %1$s قد رفض الدعوة. السبب: %2$s - أنتَ قد غادرت. السبب: %1$s - إنَّ %1$s قد غادر. السبب: %2$s - أنتَ قد غادرتَ الغُرفة. السبب: %1$s - إنَّ %1$s قد غادر الغُرفة. السبب: %2$s - أنتَ قد إنضممت. السبب: %1$s - إنَّ %1$s قد إنضم. السبب: %2$s - أنتَ قد إنضممتَ إلى الغُرفة. السبب: %1$s - إنَّ %1$s قد إنضم إلى الغُرفة. السبب: %2$s - إنَّ %1$s قد دعاكَ أنت. السبب: %2$s - أنتَ قد دعوتَ %1$s. السبب: %2$s - إنَّ %1$s قد دعا %2$s. السبب: %3$s - دعوتُكَ أنت. السبب: %1$s - دعوة %1$s. السبب: %2$s - محو قائمة انتظار الإرسال - يجري إرسال الرِّسالة… - المُزامنة الأولية: -\nيجري إستيرد مَعلومات الحِساب - المُزامنة الأولية: -\nيجري إستيرد المُجتمعات - المُزامنة الأولية: -\nيجري إستيرد الغُرف المُغادَر مِنها - المُزامنة الأولية: -\nيجري إستيرد الغُرف المَدعو إليها - المُزامنة الأولية: -\nيجري إستيرد الغُرف المُنضم فيها - المُزامنة الأولية: -\nيجري إستيرد الغُرف - المُزامنة الأولية: -\nيجري إستيرد التَعمية - غُرفة فارِغة (كانت %s) - - %1$s، %2$s و%3$s - %1$s، %2$s، %3$s و%4$d آخر - %1$s، %2$s، %3$s و%4$d آخران - %1$s، %2$s، %3$s و%4$d آخرين - %1$s، %2$s، %3$s و%4$d آخرون - %1$s،%2$s،%3$s و%4$d آخرون - - الأعضاء %1$s، %2$s، %3$s و %4$s - الأعضاء %1$s، %2$s و %3$s - مُشرِف - أنتَ قد عدَّلتَ اجتماع الفيديو - لقد عُدِّلَ اجتماع الفيديو بواسطة %1$s - أنتَ قد أنهيتَ اجتماع الفيديو - لقد أُنهيَ اجتماع الفيديو بواسطة %1$s - أنتَ قد بدأتَ اجتماع الفيديو - لقد بدأ اجتماع الفيديو بواسطة %1$s - أنتَ قد سحبتَ دعوة %1$s - إنَّ %1$s قد سحب دعوة %2$s - أنتَ قد دعوتَ %1$s - إنَّ %1$s قد دعى %2$s - أنتَ قد حدَّثتَ ملفك الشخصي %1$s - \ No newline at end of file diff --git a/matrix-sdk-android/src/main/res/values-az/strings.xml b/matrix-sdk-android/src/main/res/values-az/strings.xml deleted file mode 100644 index 1f366c647f..0000000000 --- a/matrix-sdk-android/src/main/res/values-az/strings.xml +++ /dev/null @@ -1,116 +0,0 @@ - - - %1$s: %2$s - %1$s şəkil göndərdi. - %1$s stiker göndərdi. - - %s-nin dəvəti - %1$s dəvət etdi %2$s - %1$s sizi dəvət etdi - %1$s qoşuldu - %1$s qalıb - %1$s dəvəti rədd etdi - %1$s %2$s-i xaric etdi - %1$s %2$s-i blokdan açdı - %1$s %2$s-i blokladı - %1$s %2$s-in dəvətini geri götürdü - %1$s avatarı dəyişdi - %1$s ekran adını %2$s olaraq təyin etdi - %1$s ekran adını %2$s-dan %3$s-ya dəyişdi - %1$s onların göstərilən adlarını sildi (%2$s) - %1$s mövzunu dəyişdi: %2$s - %1$s otaq adını dəyişdirdi: %2$s - %s video zəng etdi. - %s səsli zəng etdi. - %s zəngə cavab verdi. - %s zəng başa çatdı. - "%1$s gələcək otaq tarixçəsini %2$s-ə görünən etdi" - bütün otaq üzvləri, dəvət olunduğu andan. - bütün otaq üzvləri, qoşulduğu andan. - bütün otaq üzvləri. - hər kəs. - naməlum (%s). - %1$s sondan-sona şifrələmə açdı (%2$s) - %s bu otağı təkmilləşdirdi. - - %1$s VoIP konfrans istədi - VoIP konfransı başladı - VoIP konfransı başa çatdı - - (avatar da dəyişdirilib) - %1$s otaq adını sildi - %1$s otaq mövzusunu sildi - Mesaj silindi - Mesaj %1$s tərəfindən silindi - Mesaj silindi [səbəb: %1$s] - Mesaj %1$s tərəfindən qaldırıldı [səbəb: %2$s] - %1$s profilini %2$s yenilədi - %1$s otağa qoşulmaq üçün %2$s dəvətnamə göndərdi - %1$s otağa qoşulmaq üçün %2$s dəvətini ləğv etdi - %1$s %2$s üçün dəvəti qəbul etdi - - ** Şifrəni aça bilmir: %s ** - Göndərənin cihazı bu mesaj üçün açarları bizə göndərməyib. - - Redaktə etmək olmur - Mesaj göndərmək olmur - - Şəkil yükləmək olmur - - Şəbəkə xətası - Matris xətası - - Boş bir otağa yenidən qoşulmaq hazırda mümkün deyil. - - Şifrəli mesaj - - Elektron poçt ünvanı - Telefon nömrəsi - - %s-dən dəvət - Otağa dəvət - - %1$s və %2$s - - - %1$s və 1 digər - %1$s və %2$d digərləri - - - Boş otaq - - İlkin sinxronizasiya: -\nHesab idxal olunur… - İlkin sinxronizasiya: -\nKriptografiyanın idxalı - İlkin sinxronizasiya: -\nOtaqlar idxalı - İlkin sinxronizasiya: -\nOtaqlara daxil olmaq - İlkin sinxronizasiya: -\nDəvət olunmuş otaqların idxalı - İlkin sinxronizasiya: -\nTərk olunmuş otaqların idxalı - İlkin sinxronizasiya: -\nİcmaların idxalı - İlkin sinxronizasiya: -\nHesab məlumatlarının idxalı - - Mesaj göndərilir… - Göndərmə növbəsini təmizləyin - - %1$s-nin dəvəti. Səbəb: %2$s - %1$s dəvət olunmuş %2$s. Səbəb: %3$s - %1$s sizi dəvət etdi. Səbəb: %2$s - %1$s qoşuldu. Səbəb: %2$s - %1$s qalıb. Səbəb: %2$s - %1$s dəvəti rədd etdi. Səbəb: %2$s - %1$s %2$s-i xaric etdi. Səbəb: %3$s - %1$s blokdan açdı %2$s. Səbəb: %3$s - %1$s blokladı %2$s. Səbəb: %3$s - %1$s otağa qoşulmaq üçün %2$s dəvətnamə göndərdi. Səbəb: %3$s - %1$s otağa qoşulmaq üçün %2$s dəvətini ləğv etdi. Səbəb: %3$s - %1$s %2$s üçün dəvəti qəbul etdi. Səbəb: %3$s - %1$s %2$s dəvətini geri götürdü. Səbəb: %3$s - - diff --git a/matrix-sdk-android/src/main/res/values-bg/strings.xml b/matrix-sdk-android/src/main/res/values-bg/strings.xml deleted file mode 100644 index 12f1a85860..0000000000 --- a/matrix-sdk-android/src/main/res/values-bg/strings.xml +++ /dev/null @@ -1,215 +0,0 @@ - - - %1$s: %2$s - %1$s изпрати снимка. - Поканата на %s - %1$s покани %2$s - %1$s Ви покани - %1$s се присъедини в стаята - %1$s напусна стаята - %1$s отхвърли поканата - %1$s изгони %2$s - %1$s отблокира %2$s - %1$s блокира %2$s - %1$s оттегли поканата си за %2$s - %1$s смени своята профилна снимка - %1$s си сложи име %2$s - %1$s смени своето име от %2$s на %3$s - %1$s премахна своето име (%2$s) - %1$s смени темата на: %2$s - %1$s смени името на стаята на: %2$s - %s започна видео разговор. - %s започна гласов разговор. - %s отговори на обаждането. - %s прекрати разговора. - %1$s направи бъдещата история на стаята видима за %2$s - всички членове, от момента на поканването им в нея. - всички членове, от момента на присъединяването им в нея. - всички членове в нея. - всеки. - непозната (%s). - %1$s включи шифроване от край до край (%2$s) - %1$s заяви VoIP групов разговор - Започна VoIP групов разговор - Груповият разговор приключи - (профилната снимка също беше сменена) - %1$s премахна името на стаята - %1$s премахна темата на стаята - %1$s обнови своя профил %2$s - %1$s изпрати покана на %2$s да се присъедини към стаята - %1$s прие поканата за %2$s - ** Неуспешно разшифроване: %s ** - Неуспешно премахване - Неуспешно изпращане на съобщението - Неуспешно качване на снимката - Грешка в мрежата - Matrix грешка - В момента не е възможно да се присъедините отново към празна стая. - Шифровано съобщение - Имейл адрес - Телефонен номер - Устройството на подателя не изпрати ключовете за това съобщение. - %1$s изпрати стикер. - Покана от %s - Покана за стая - %1$s и %2$s - - %1$s и 1 друг - %1$s и %2$d други - - Празна стая - Премахнато съобщение - Съобщение премахнато от %1$s - Премахнато съобщение [причина: %1$s] - Съобщение премахнато от %1$s [причина: %2$s] - Начална синхронизация: -\nИмпортиране на профил… - Начална синхронизация: -\nИмпортиране на данни за шифроване - Начална синхронизация: -\nИмпортиране на стаи - Начална синхронизация: -\nИмпортиране на стаи, от които съм част - Начална синхронизация: -\nИмпортиране на стаи, към които съм поканен - Начална синхронизация: -\nИмпортиране на стаи, които съм напуснал - Начална синхронизация: -\nИмпортиране на общности - Начална синхронизация: -\nИмпортиране на данни за профила - %s обнови тази стая. - Изпращане на съобщение… - Изчисти опашката за изпращане - %1$s оттегли поканата за присъединяване на %2$s към стаята - поканата на %1$s. Причина: %2$s - %1$s покани %2$s. Причина: %3$s - %1$s ви покани. Причина: %2$s - %1$s се присъедини в стаята. Причина: %2$s - %1$s напусна стаята. Причина: %2$s - %1$s отхвърли поканата. Причина: %2$s - %1$s изгони %2$s. Причина: %3$s - %1$s блокира %2$s. Причина: %3$s - %1$s блокира %2$s. Причина: %3$s - %1$s изпрати покана до %2$s да се присъедини в стаята. Причина: %3$s - %1$s премахна поканата за присъединяване на %2$s в стаята. Причина: %3$s - %1$s прие поканата за %2$s. Причина: %3$s - %1$s оттегли поканата на %2$s. Причина: %3$s - - %1$s добави %2$s като адрес за тази стая. - %1$s добави %2$s като адреси за тази стая. - - - %1$s премахна %2$s като адрес за тази стая. - %1$s премахна %2$s като адреси за тази стая. - - %1$s добави %2$s и премахна %3$s като адреси за тази стая. - %1$s настрой %2$s като основен адрес за тази стая. - %1$s премахна основния адрес за тази стая. - %1$s разреши на гости да се присъединяват в стаята. - %1$s предотврати присъединяването на гости в стаята. - %1$s включи шифроване от-край-до-край. - %1$s включи шифроване от-край-до-край (неразпознат алгоритъм %2$s). - %1$s създаде стаята - Изпратихте снимка. - Изпратихте стикер. - Ваша покана - Създадохте стаята - Поканихте %1$s - Присъединихте се в стаята - Напуснахте стаята - Отхвърлихте поканата - Изгонихте %1$s - Отблокирахте %1$s - Блокирахте %1$s - Включихте шифроване от-край-до-край (непознат алгоритъм: %1$s). - Включихте шифроване от-край-до-край. - Спряхте възможността гости да се присъединяват в стаята. - %1$s спря възможността гости да се присъединяват в стаята. - Спряхте възможността гости да се присъединяват в стаята. - Позволихте на гости да се присъединяват тук. - %1$s позволи на гости да се присъединяват тук. - Позволихте на гости да се присъединяват към стаята. - Премахнахте основния адрес на стаята. - Зададохте %1$s като основен адрес на стаята. - Добавихте %1$s и премахнахте %2$s от адресите за стаята. - - Премахнахте %1$s от адресите на стаята. - Премахнахте %1$s от адресите на стаята. - - - Добавихте %1$s като адрес за тази стая. - Добавихте %1$s като адреси за тази стая. - - Оттеглихте поканата на %1$s. Причина: %2$s - Приехте поканата за %1$s. Причина: %2$s - Оттеглихте поканата за присъединяване в стаята от %1$s. Причина: %2$s - Изпратихте покана към %1$s за присъединяване в стаята. Причина: %2$s - Блокирахте %1$s. Причина: %2$s - Отблокирахте %1$s. Причина: %2$s - Изгонихте %1$s. Причина: %2$s - Отхвърлихте поканата. Причина: %1$s - Напуснахте. Причина: %1$s - %1$s напусна. Причина: %2$s - Напуснахте стаята. Причина: %1$s - Присъединихте се. Причина: %1$s - %1$s се присъедини. Причина: %2$s - Присъединихте се в стаята. Причина: %1$s - Поканихте %1$s. Причина: %2$s - Ваша покана. Причина: %1$s - %1$s от %2$s на %3$s - %1$s промени нивото на достъп на %2$s. - Променихте нивото на достъп на %1$s. - Собствено ниво - Собствено ниво (%1$d) - По подразбиране - Модератор - Администратор - Променихте %1$s приспособлението - %1$s промени %2$s приспособлението - Премахнахте %1$s приспособлението - %1$s премахна %2$s приспособлението - Добавихте %1$s приспособление - %1$s добави %2$s приспособление - Приехте поканата за %1$s - Оттеглихте поканата от %1$s - %1$s оттегли поканата от %2$s - Оттеглихте поканата за присъединяване в стаята от %1$s - Поканихте %1$s - %1$s покани %2$s - Изпратихте покана към %1$s за присъединяване в стаята - Обновихте профила си %1$s - Премахнахте снимката на стаята - %1$s премахна снимката на стаята - Премахнахте темата на стаята - Премахнахте името на стаята - Заявихте VoIP конференция - Обновихте чата. - %s обнови чата. - Обновихте стаята. - Включихте шифроване от-край-до-край (%1$s) - Направихте бъдещите съобщения видими за %1$s - %1$s направи бъдещите съобщения видими за %2$s - Направихте бъдещата история на стаята видима за %1$s - Прекратихте разговора. - Започнахте видео разговор. - Отговорихте на обаждането. - Изпратихте данни за настройка на разговора. - %s изпрати данни за настройка на разговора. - Започнахте гласов разговор. - Променихте името на стаята на: %1$s - Променихте снимката на стаята - %1$s промени снимката на стаята - Променихте темата на: %1$s - Премахнахте името си (%1$s) - Променихте името си от %1$s на %2$s - Променихте името си на %1$s - Променихте снимката си - Оттеглихте поканата от %1$s - Напуснахте стаята - %1$s напусна стаята - Присъединихте се - %1$s се присъедини - Създадохте дискусията - %1$s създаде дискусията - \ No newline at end of file diff --git a/matrix-sdk-android/src/main/res/values-bn-rIN/strings.xml b/matrix-sdk-android/src/main/res/values-bn-rIN/strings.xml deleted file mode 100644 index 38be316df8..0000000000 --- a/matrix-sdk-android/src/main/res/values-bn-rIN/strings.xml +++ /dev/null @@ -1,193 +0,0 @@ - - - %1$s একটি ফটো পাঠিয়েছে। - %1$s একটি স্তিকার পাঠিয়েছে। - %s এর আমন্ত্রণ - %1$s %2$s কে আমন্ত্রণ করেছে - %1$s আপনাকে আমন্ত্রণ করেছে - %1$s রুম এ যোগ দিয়েছে - %1$s রুম ছেড়ে দিয়েছে - %1$s আমন্ত্রণ টি বাতিল করেছে - %1$s %2$s কে কিক করেছে - %1$s %2$s কে নিষিদ্ধ তালিকা থেকে মুক্ত করেছে - %1$s %2$s কে নিষিদ্ধ করেছে - %1$s %2$s এর আমন্ত্রণ ফেরত নিয়েছে - %1$s নিজের অবতার পরিবর্তন করেছে - %1$s নিজের প্রদর্শন নাম %2$s রেখেছে - %1$s নিজের প্রদর্শন নাম %2$s থেকে %3$s তে পরিবর্তন করেছে - %1$s নিজের প্রদর্শন নাম মুছে দিয়েছে (%2$s) - %1$s বিষয় টি এতে পরিবর্তন করেছে: %2$s - %1$s রুম এর নাম এতে পরিবর্তন করেছে: %2$s - %s একটি ভিডিও কল স্থাপন করেছিল। - %s একটি ভয়েস কল দিয়েছে। - %1$s: %2$s - আপনি একটি ছবি প্রেরণ করেছেন। - আপনি একটি স্তিকার পাঠিয়েছেন। - আপনার আমন্ত্রণ - %1$s কক্ষটি তৈরি করেছেন - আপনি কক্ষটি তৈরি করেছেন - আপনি %1$s কে আমন্ত্রিত করেছেন - আপনি কক্ষে যোগ দিয়েছেন - আপনি কক্ষ ছেড়ে দিয়েছেন - আপনি আমন্ত্রণটি বাতিল করেছেন - আপনি %1$s কে কীক করেছেন - আপনি %1$s কে নিষিদ্ধ মুক্ত করেছেন - আপনি %1$s কে নিষিদ্ধ করেছেন - আপনি %1$s এর আমন্ত্রণ প্রত্যাহার করেছেন - আপনি আপনার অবতারটি পরিবর্তন করেছেন - আপনি আপনার প্রদর্শনের নামটি %1$s তে সেট করেছেন - আপনি আপনার প্রদর্শনের নামটি %1$s থেকে %2$s এ পরিবর্তন করেছেন - আপনি আপনার প্রদর্শনের নামটি সরিয়ে দিয়েছেন (যেটা ছিল %1$s) - আপনি বিষয়টিকে এতে পরিবর্তন করেছেন: %1$s - %1$s কক্ষের অবতারটি পরিবর্তন করেছে - আপনি কক্ষের অবতারটি পরিবর্তন করেছেন - আপনি কক্ষের নাম এতে পরিবর্তন করেছেন:%1$s - আপনি একটি ভিডিও কল করেছেন। - আপনি একটি ভয়েস কল দিয়েছেন। - কল সেটআপ করার জন্য %s ডেটা প্রেরণ করেছে। - আপনি কল সেটআপ করার জন্য ডেটা প্রেরণ করেছেন। - %s কলটির উত্তর দিয়েছে। - আপনি কলটি উত্তর দিয়েছেন। - %s কলটি শেষ করেছেন। - আপনি কলটি শেষ করেছেন। - %1$s ভবিষ্যতের ঘরের ইতিহাস %2$s এর কাছে দৃশ্যমান করে তুলেছে - আপনি ভবিষ্যতের কক্ষ ইতিহাস %1$s এর কাছে দৃশ্যমান করেছেন - কক্ষের সমস্ত সদস্য, যখন থেকে তারা আমন্ত্রিত। - কক্ষের সমস্ত সদস্য, যখন থেকে তারা যোগদান করেছিল। - সমস্ত কক্ষের সদস্য। - যে কেউ। - অজানা (%s)। - %1$s এন্ড-টু-এন্ড এনক্রিপশন চালু করেছে (%2$s) - আপনি শেষ-থেকে-শেষ এনক্রিপশন চালু করেছেন (%1$s) - %s এই কক্ষটিকে আপগ্রেড করেছে। - আপনি এই কক্ষটি আপগ্রেড করেছেন। - %1$s একটি ভিওআইপি সম্মেলনের জন্য অনুরোধ করেছে - আপনি একটি ভিওআইপি সম্মেলনের অনুরোধ করেছেন - ভিওআইপি সম্মেলন শুরু হয়েছে - ভিওআইপি সম্মেলন শেষ হয়েছে - (আবতারটিও পরিবর্তন করা হয়েছিল) - %1$s কক্ষের নাম সরিয়েছে - আপনি কক্ষের নাম সরিয়েছেন - %1$s কক্ষের বিষয় মুছে ফেলেছে - আপনি কক্ষের বিষয়টিকে সরিয়ে দিয়েছেন - %1$s কক্ষের অবতার সরিয়ে নিয়েছে - আপনি কক্ষের অবতার সরিয়েছেন - বার্তা সরানো হয়েছে - %1$s দ্বারা বার্তা সরানো হয়েছে - বার্তা সরানো হয়েছে [কারণ:%1$s] - %1$s দ্বারা বার্তা সরানো হয়েছে [কারণ: %2$s] - %1$s তাদের প্রোফাইল %2$s আপডেট করেছে - আপনি আপনার প্রোফাইল %1$s আপডেট করেছেন - %1$s %2$s কে ঘরে যোগদানের জন্য একটি আমন্ত্রণ পাঠিয়েছে - আপনি %1$s কে ঘরে যোগদানের জন্য একটি আমন্ত্রণ প্রেরণ করেছেন - %1$s %2$s এর কক্ষে যোগদানের আমন্ত্রণ বাতিল করে দিয়েছিল - আপনি %1$s এর কক্ষে যোগদানের জন্য আমন্ত্রণটি বাতিল করেছেন - %1$s %2$s এর জন্য আমন্ত্রণটি গ্রহণ করেছে - আপনি %1$s এর জন্য আমন্ত্রণটি গ্রহণ করেছেন - %1$s %2$s উইজেট যুক্ত করেছে - আপনি %1$s উইজেট যুক্ত করেছেন - %1$s %2$s উইজেট সরিয়ে দিয়েছেন - আপনি %1$s উইজেট সরিয়েছেন - %1$s %2$s উইজেট পরিবর্তন করেছেন - আপনি %1$s উইজেট পরিবর্তন করেছেন - অ্যাডমিন - নিয়ামক - ডিফল্ট - কাস্টম (%1$d) - কাস্টম - আপনি %1$s এর পাওয়ার স্তর পরিবর্তন করেছেন। - %1$s %2$s এর পাওয়ার স্তর পরিবর্তন করেছে। - %1$s %2$s থেকে %3$s পর্যন্ত - ** ডিক্রিপ্ট করতে অক্ষম: %s ** - প্রেরকের ডিভাইস আমাদের এই বার্তার জন্য কীগুলি প্রেরণ করেনি। - পুনরায় প্রতিক্রিয়া করতে পারেনি - বার্তা পাঠাতে অক্ষম - চিত্র আপলোড করতে ব্যর্থ - নেটওয়ার্ক ত্রুটি - ম্যাট্রিক্স ত্রুটি - খালি কক্ষে পুনরায় যোগদান করা বর্তমানে সম্ভব নয়। - এনক্রিপ্ট করা বার্তা - ইমেল ঠিকানা - ফোন নম্বর - %s থেকে আমন্ত্রণ করুন - কক্ষ আমন্ত্রণ - %1$s এবং %2$s - - %1$s এবং অন্য ১ জন - %1$s এবং অন্যান্য %2$d জন - - খালি কক্ষ - প্রাথমিক সিঙ্ক: -\nঅ্যাকাউন্ট আমদানি করা হচ্ছে… - প্রাথমিক সিঙ্ক: -\nক্রিপ্টো আমদানি হচ্ছে - প্রাথমিক সিঙ্ক: -\nকক্ষগুলি আমদানি করা হচ্ছে - প্রাথমিক সিঙ্ক: -\nযোগ করা কক্ষগুলিতে আমদানি করা হিচ্ছে - প্রাথমিক সিঙ্ক: -\nআমন্ত্রিত করা কক্ষগুলিতে আমদানি করা হিচ্ছে - প্রাথমিক সিঙ্ক: -\nছেড়ে দেওয়া কক্ষগুলিতে আমদানি করা হিচ্ছে - প্রাথমিক সিঙ্ক: -\nসম্প্রদায়গুলি আমদানি করা হচ্ছে - প্রাথমিক সিঙ্ক: -\nঅ্যাকাউন্ট ডেটা আমদানি করা হচ্ছে - বার্তা প্রেরণ করা হচ্ছে … - প্রেরণ সারি পরিষ্কার করুন - %1$s এর আমন্ত্রণ। কারণ: %2$s - আপনার আমন্ত্রণ। কারণ: %1$s - %1$s আমন্ত্রিত করেছেন %2$s কে। কারণ: %3$s - আপনি %1$s কে আমন্ত্রিত করেছেন। কারণ: %2$s - %1$s আপনাকে আমন্ত্রণ করেছে। কারণ: %2$s - %1$s রুম এ যোগ দিয়েছে। কারণ: %2$s - আপনি কক্ষে যোগ দিয়েছেন। কারণ: %1$s - %1$s রুম ছেড়ে দিয়েছে। কারণ: %2$s - আপনি কক্ষ ছেড়ে দিয়েছেন। কারণ: %1$s - %1$s আমন্ত্রণ বাতিল করেছেন। কারণ: %2$s - আপনি আমন্ত্রণটি বাতিল করেছেন। কারণ: %1$s - %1$s %2$s কে কিক করেছে। কারণ: %3$s - আপনি %1$s কে কীক করেছেন। কারণ: %2$s - %1$s %2$s কে নিষিদ্ধ তালিকা থেকে মুক্ত করেছে। কারণ: %3$s - আপনি %1$s কে নিষিদ্ধ মুক্ত করেছেন। কারণ: %2$s - %1$s %2$s কে নিষিদ্ধ করেছে। কারণ: %3$s - আপনি %1$s কে নিষিদ্ধ করেছেন। কারণ: %2$s - %1$s রুমের সাথে যোগ দিতে %2$s কে একটি আমন্ত্রণ পাঠিয়েছেন। কারণ: %3$s - আপনি %1$s কে ঘরে যোগদানের জন্য একটি আমন্ত্রণ প্রেরণ করেছেন। কারণ: %2$s - %1$s %2$s এর কক্ষে যোগদানের আমন্ত্রণ বাতিল করে দিয়েছিল। কারণ: %3$s - আপনি %1$s এর কক্ষে যোগদানের জন্য আমন্ত্রণটি বাতিল করেছেন। কারণ: %2$s - %1$s %2$s এর জন্য আমন্ত্রণ গ্রহণ করেছেন। কারণ: %3$s - আপনি %1$s এর জন্য আমন্ত্রণটি গ্রহণ করেছেন। কারণ: %2$s - %1$s %2$s এর আমন্ত্রণ ফেরত নিয়েছে। কারণ: %3$s - আপনি %1$s এর আমন্ত্রণ প্রত্যাহার করেছেন। কারণ: %2$s - - %1$s এই ঘরের ঠিকানা হিসাবে %2$s যুক্ত করেছে। - %1$s এই ঘরের ঠিকানাগুলি হিসাবে %2$s যুক্ত করেছে। - - - আপনি এই কক্ষের জন্য ঠিকানা হিসাবে %1$s যুক্ত করেছেন। - আপনি এই কক্ষের ঠিকানা হিসাবে %1$s যুক্ত করেছেন। - - - %1$s এই ঘরের ঠিকানা হিসাবে %2$s সরানো হয়েছে। - %1$s %3$s কে এই ঘরের ঠিকানা হিসাবে সরানো হয়েছে। - - - আপনি এই ঘরের ঠিকানা হিসাবে %1$s সরিয়েছেন। - আপনি এই ঘরের ঠিকানা হিসাবে %1$s গুলি সরিয়েছেন। - - %1$s %2$s যোগ করেছে এবং %3$s গুলি এই ঘরের ঠিকানা হিসাবে সরানো হয়েছে। - আপনি %1$s যোগ করেছেন এবং %2$s কে এই ঘরের ঠিকানা হিসাবে সরিয়ে দিয়েছেন। - %1$s এই ঘরের মূল ঠিকানাটি %2$s তে সেট করে। - আপনি এই ঘরের মূল ঠিকানাটি %1$s তে সেট করেছেন। - %1$s এই ঘরের মূল ঠিকানা সরিয়ে নিয়েছে। - আপনি এই ঘরের মূল ঠিকানা সরিয়েছেন। - %1$s অতিথিদের ঘরে যোগদানের অনুমতি দিয়েছে। - আপনি অতিথিদের ঘরে যোগদানের অনুমতি দিয়েছেন। - %1$s অতিথিদের ঘরে যোগদান করতে বাধা দিয়েছে। - আপনি অতিথিদের ঘরে যোগদান করতে বাধা দিয়েছেন। - %1$s এন্ড-টু-এন্ড এনক্রিপশন চালু করেছে। - আপনি শেষ থেকে শেষ এনক্রিপশন চালু করেছেন। - %1$s এন্ড-টু-এন্ড এনক্রিপশন চালু করেছে (অজানা অ্যালগরিদম %2$s)। - আপনি শেষ-থেকে-শেষ এনক্রিপশন চালু করেছেন (অজানা অ্যালগরিদম %1$s )। - \ No newline at end of file diff --git a/matrix-sdk-android/src/main/res/values-bs/strings.xml b/matrix-sdk-android/src/main/res/values-bs/strings.xml deleted file mode 100644 index 6a6ee46d32..0000000000 --- a/matrix-sdk-android/src/main/res/values-bs/strings.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - Pozovite iz %s - Poziv u Sobu - %1$s i %2$s - Prazna soba - \ No newline at end of file diff --git a/matrix-sdk-android/src/main/res/values-ca/strings.xml b/matrix-sdk-android/src/main/res/values-ca/strings.xml deleted file mode 100644 index 32f482724f..0000000000 --- a/matrix-sdk-android/src/main/res/values-ca/strings.xml +++ /dev/null @@ -1,267 +0,0 @@ - - - %1$s: %2$s - %1$s ha enviat una imatge. - %1$s ha marxat de la sala - %1$s s\'ha unit a la sala - Número de telèfon - Correu electrònic - Missatge xifrat - invitació de %s - %1$s ha convidat a %2$s - %1$s t\'ha convidat - %1$s ha rebutjat la invitació - %1$s ha expulsat %2$s - %1$s ha canviat el seu àlies de %2$s a %3$s - %1$s ha eliminat el àlies (era %2$s) - %1$s ha canviat el tema a: %2$s - %1$s ha canviat el nom de la sala a: %2$s - %s ha respost a la trucada. - %s ha finalitzat la trucada. - tots el participants de la sala, des de que són convidats. - tots els participants de la sala. - desconegut (%s). - %1$s ha activat el xifrat d\'extrem a extrem (%2$s) - %1$s ha sol·licitat una conferència VoIP - %1$s ha tret el vet a %2$s - %1$s ha vetat %2$s - %1$s ha retirat la invitació de %2$s - %1$s ha canviat la seva icona - %1$s ha establert la visibilitat de l\'històric futur de la sala a %2$s - tots els participants de la sala, des de que s\'hi uneixen. - qualsevol. - S\'ha iniciat la conferència VoIP - Ha finalitzat la conferència VoIP - (també ha canviat la icona) - %1$s ha eliminat el nom de la sala - %1$s ha eliminat el tema de la sala - %1$s ha actualitzat el seu perfil %2$s - %1$s ha enviat una invitació a %2$s perquè s\'uneixi a la sala - %1$s ha acceptat la invitació de %2$s - ** No s\'ha pogut desxifrar: %s ** - El dispositiu del remitent no ens ha enviat les claus per aquest missatge. - No s\'ha pogut redactar - No s\'ha pogut enviar el missatge - No s\'ha pogut pujar la imatge - Error de xarxa - Error de Matrix - Ara per ara no és possible tornar a unir-se a una sala buida. - %1$s a canviat el seu àlies a %2$s - %s ha realitzat una videotrucada. - %s ha realitzat una trucada de veu. - - Invitació de %s - Convida a la sala - %1$s i %2$s - Sala buida - - %1$s i 1 altre - %1$s i %2$d altres - - %1$s ha enviat un adhesiu. - %s s\'ha actualitzat aquí. - Ho has actualitzat aquí. - Has activat el xifrat d\'extrem a extrem (algorisme %1$s no reconegut). - %1$s ha activat el xifrat d\'extrem a extrem (algorisme %2$s no reconegut). - Has activat el xifrat d\'extrem a extrem. - %1$s ha activat el xifrat d\'extrem a extrem. - Has impedit que els convidats es puguin unir a la sala. - %1$s ha impedit que els convidats es puguin unir a la sala. - Has impedit que els convidats es puguin unir a la sala. - %1$s ha impedit que els convidats es puguin unir a la sala. - Has permès que els convidats s\'uneixin aquí. - %1$s ha permès que els convidats s\'uneixin aquí. - Has permès que els convidats s\'uneixin a la sala. - %1$s ha permès que els convidats s\'uneixin a la sala. - Has eliminat l\'adreça principal d\'aquesta sala. - %1$s ha eliminat l\'adreça principal d\'aquesta sala. - Has establert l\'adreça principal d\'aquesta sala a %1$s. - %1$s ha establert l\'adreça principal d\'aquesta sala a %2$s. - Has afegit %1$s i has eliminat %2$s d\'aquesta sala (adreces). - %1$s ha afegit %2$s i ha eliminat %3$s d\'aquesta sala (adreces). - - Has eliminat l\'adreça %1$s d\'aquesta sala. - Has eliminat les adreces %1$s d\'aquesta sala. - - - %1$s ha eliminat %2$s com a adreça d\'aquesta sala. - %1$s ha eliminat %2$s com a adreces d\'aquesta sala. - - - Has afegit l\'adreça %1$s a aquesta sala. - Has afegit les adreces %1$s a aquesta sala. - - - %1$s ha afegit l\'adreça %2$s a aquesta sala. - %1$s ha afegit les adreces %2$s a aquesta sala. - - Has revocat la invitació de %1$s perquè s\'uneixi a la sala. Motiu: %2$s - %1$s ha revocat la invitació de %2$s perquè s\'uneixi a la sala. Motiu: %3$s - Has revocat la invitació de %1$s - %1$s ha revocat la invitació de %2$s - Has revocat la invitació de %1$s perquè s\'uneixi a la sala - %1$s ha revocat la invitació de %2$s perquè s\'uneixi a la sala - Has retirat la invitació de %1$s. Motiu: %2$s - %1$s ha retirat la invitació de %2$s. Motiu: %3$s - Has acceptat la invitació de %1$s. Motiu: %2$s - %1$s ha acceptat la invitació de %2$s. Motiu: %3$s - Has enviat una invitació a %1$s perquè s\'uneixi a la sala. Motiu: %2$s - %1$s ha enviat una invitació a %2$s perquè s\'uneixi a la sala. Motiu: %3$s - Has vetat %1$s. Motiu: %2$s - %1$s ha vetat %2$s. Motiu: %3$s - Has tret el vet a %1$s. Motiu: %2$s - %1$s ha tret el vet a %2$s. Motiu: %3$s - Has vetat %1$s - Has marxat de la sala. Motiu: %1$s - %1$s ha marxat de la sala. Motiu: %2$s - Has marxat de la sala - %1$s ha marxat de la sala - Has marxat de la sala - Has expulsat %1$s - Has expulsat %1$s. Motiu: %2$s - %1$s ha expulsat %2$s. Motiu: %3$s - Has rebutjat la invitació. Motiu: %1$s - %1$s ha rebutjat la invitació. Motiu: %2$s - Has marxat. Motiu: %1$s - %1$s ha marxat. Motiu: %2$s - T\'has unit. Motiu: %1$s - %1$s s\'ha unit. Motiu: %2$s - T\'has unit a la sala. Motiu: %1$s - %1$s s\'ha unit a la sala. Motiu: %2$s - %1$s t\'ha convidat. Motiu: %2$s - Has convidat %1$s. Motiu: %2$s - %1$s ha convidat %2$s. Motiu: %3$s - La teva invitació. Motiu: %1$s - la invitació de %1$s. Motiu: %2$s - Esborra la cua d\'enviament - Enviant missatge… - Sincronització inicial: -\nImportant dades del compte - Sincronització inicial: -\nImportant comunitats - Sincronització inicial: -\nImportant sales que deixat - Sincronització inicial: -\nImportant compte… - Sincronització inicial: -\nImportant xifrat - Sincronització inicial: -\nImportant sales - Sincronització inicial: -\nImportant sales on hi estàs convidat - Sincronització inicial: -\nImportant sales on hi estàs unit - %1$s de %2$s a %3$s - %1$s ha canviat el nivell d\'autoritat de %2$s. - Has canviat el nivell d\'autoritat de %1$s. - Personalitzat - Personalitzat (%1$d) - Predeterminat - Moderador - Administrador - Has modificat el giny %1$s - %1$s ha modificat el giny %2$s - Has eliminat el giny %1$s - %1$s ha eliminat el giny %2$s - Has afegit el giny %1$s - %1$s ha afegit el giny %2$s - Has acceptat la invitació de %1$s - Has convidat a %1$s - %1$s ha convidat a %2$s - Has enviat una invitació a %1$s perquè s\'uneixi a la sala - Has actualitzat el teu perfil %1$s - Missatge eliminat per %1$s [motiu: %2$s] - Missatge eliminat [motiu: %1$s] - Missatge eliminat per %1$s - Missatge eliminat - Has eliminat la icona de la sala - %1$s ha eliminat la icona de la sala - Has eliminat el tema de la sala - Has eliminat el nom de la sala - Has sol·licitat una conferència VoIP - Has actualitzat aquesta sala. - %s ha actualitzat aquesta sala. - Has activat el xifrat d\'extrem a extrem (%1$s) - Has establert la visibilitat dels missatges futurs a %1$s - %1$s ha establert la visibilitat dels missatges futurs a %2$s - Has establert la visibilitat de l\'històric futur de la sala a %1$s - Has finalitzat la trucada. - Has respost a la trucada. - Has enviat dades per configurar la trucada. - %s ha enviat dades per configurar la trucada. - Has realitzat una trucada de veu. - Has realitzat una videotrucada. - Has canviat el nom de la sala a: %1$s - Has canviat la icona de la sala - %1$s ha canviat la icona de la sala - Has canviat el tema a: %1$s - Has eliminat el teu àlies (era %1$s) - Has canviat el teu àlies de %1$s a %2$s - Has canviat el teu àlies a %1$s - Has canviat la teva icona - Has retirat la invitació de %1$s - Has tret el vet a %1$s - Has rebutjat la invitació - Has creat la discussió - %1$s ha creat la discussió - T\'has unit - %1$s s\'ha unit - T\'has unit a la sala - Has convidat a %1$s - Has creat la sala - %1$s ha creat la sala - La teva invitació - Has enviat un adhesiu. - Has enviat una imatge. - • Servidors coincidents amb literals IP ara estan vetats. - • Servidors coincidents amb literals IP ara estan permesos. - • Servidors coincidents amb %s han estat eliminats de la llista de permesos. - • Servidors coincidents amb %s ara estan permesos. - • Servidors coincidents amb %s han estat eliminats del llista de vetats. - • Servidors coincidents amb %s ara estan vetats. - • Servidors coincidents amb literals IP estan vetats. - • Servidors coincidents amb literals IP estan permesos. - • Servidors coincidents amb %s estan permesos. - • Servidors coincidents amb %s estan vetats. - Has canviat les adreces d\'aquesta sala. - %1$s ha canviat les adreces d\'aquesta sala. - Has canviat l\'adreça principal i les adreces alternatives d\'aquesta sala. - %1$s ha canviat l\'adreça principal i les adreces alternatives d\'aquesta sala. - Has canviat les adreces alternatives d\'aquesta sala. - %1$s ha canviat les adreces alternatives d\'aquesta sala. - - Has eliminat l\'adreça alternativa %1$s d\'aquesta sala. - Has eliminat les adreces alternatives %1$s d\'aquesta sala. - - - %1$s ha eliminat l\'adreça alternativa %2$s d\'aquesta sala. - %1$s ha eliminat les adreces alternatives %2$s d\'aquesta sala. - - - Has afegit l\'adreça alternativa %1$s per aquesta sala. - Has afegit les adreces alternatives %1$s per aquesta sala. - - - %1$s ha afegit l\'adreça alternativa %2$s per aquesta sala. - %1$s ha afegit les adreces alternatives %2$s per aquesta sala. - - Sala buida (era %s) - - %1$s, %2$s, %3$s i %4$d altre - %1$s, %2$s, %3$s i %4$d altres - - %1$s, %2$s, %3$s i %4$s - %1$s, %2$s i %3$s - 🎉 Tots els servidors tenen la participació vetada! Aquesta sala ja no pot ser utilitzada. - Sense canvis. - Has canviat les ACLs de servidor d\'aquesta sala. - %s ha canviat les ACLs de servidor d\'aquesta sala. - Has establert les ACLs de servidor per aquesta sala. - %s ha establert les ACLs de servidor d\'aquesta sala. - Has modificat la videoconferència - %1$s ha modificat la videoconferència - Has finalitzat la videoconferència - %1$s ha iniciat una videoconferència - Has iniciat una videoconferència - %1$s ha finalitzat la videoconferència - \ No newline at end of file diff --git a/matrix-sdk-android/src/main/res/values-cs/strings.xml b/matrix-sdk-android/src/main/res/values-cs/strings.xml deleted file mode 100644 index 018f0598fa..0000000000 --- a/matrix-sdk-android/src/main/res/values-cs/strings.xml +++ /dev/null @@ -1,276 +0,0 @@ - - - %1$s: %2$s - Uživatel %1$s poslal obrázek. - Uživatel %1$s poslal nálepku. - Pozvání od uživatele %s - Uživatel %1$s pozval uživatele %2$s - Uživatel %1$s vás pozval - %1$s vstoupil do místnosti - Uživatel %1$s odešel - %1$s odmítli pozvání - %1$s vykopli %2$s - %1$s zrušil vykázání %2$s - %1$s vykázali %2$s - %1$s zrušili pozvání pro %2$s - %1$s změnili svůj profilový obrázek - %1$s nastavili své veřejné jméno na %2$s - %1$s změnili své veřejné jméno z %2$s na %3$s - %1$s odstranili své veřejné jméno (%2$s) - %1$s změnili téma na: %2$s - %1$s změnili název místnosti na: %2$s - %s uskutečnili videohovor. - %s uskutečnili hlasový hovor. - %s přijali hovor. - %s ukončili hovor. - %1$s nastavili viditelnost budoucí historie místnosti pro %2$s - všechny členy místnosti od chvíle, kdy budou pozváni. - všechny členy místnosti od chvíle, kdy se připojí. - všechny členy místnosti. - kohokoliv. - neznámým (%s). - %1$s zapnuli end-to-end šifrování (%2$s) - %1$s požádali o VoIP konferenci - Začala VoIP konference - VoIP konference skončila - (profilový obrázek byl také změněn) - %1$s odstranili název místnosti - %1$s odstranili téma místnosti - %1$s aktualizovali svůj profil %2$s - %1$s do této místnosti pozvali %2$s - %1$s přijali pozvání pro %2$s - ** Nelze dešifrovat: %s ** - Odesílatelovo zařízení nám neposlalo klíče pro tuto zprávu. - Nelze vymazat - Zprávu nelze odeslat - Obrázek nelze nahrát - Chyba sítě - Chyba v Matrixu - V současnosti není možné znovu vstoupit do prázdné místnosti. - Šifrovaná zpráva - E-mailová adresa - Telefonní číslo - Pozvání od %s - Pozvání do místnosti - %1$s a %2$s - - %1$s a jeden další - %1$s a %2$d další - %1$s a %2$d dalších - - Prázdná místnost - %s povýšili tuto místnost. - Zpráva byla smazána [důvod: %1$s] - Zpráva smazána uživatelem %1$s [důvod: %2$s] - %1$s zrušili pozvánku do místnosti pro %2$s - Úvodní synchronizace: -\nImportuji účet… - Úvodní synchronizace: -\nImportuji klíče - Úvodní synchronizace: -\nImportuji místnosti - Úvodní synchronizace: -\nImportuji místností, jichž jste členy - Úvodní synchronizace: -\nImportuji místnost, jež jste opustili - Úvodní synchronizace: -\nImportuji skupiny - Úvodní synchronizace: -\nImportuji data účtu - Odesílám zprávu… - Úvodní synchronizace: -\nImportuji pozvání - Vymazat frontu neodeslaných zpráv - %1$s pozvali %2$s. Důvod: %3$s - %1$s vás pozvali. Důvod: %2$s - %1$s opustil místnost. Důvod: %2$s - Zpráva odstraněna - Zprávu odstranil/a %1$s - Poslali jste obrázek. - Poslali jste nálepku. - Vaše pozvání - %1$s založil místnost - Založili jste místnost - Pozvali jste %1$s - Vstoupili jste do místnosti - Opustili jste místnost - Odmítli jste pozvání - Vykopli jste %1$s - Zrušili jste vykázání pro %1$s - Vykázali jste %1$s - Stáhli jste pozvánku od %1$s zpět - Změnili jste svůj profilový obrázek - Změnili jste své veřejné jméno na %1$s - Změnili jste své veřejné jméno z %1$s na %2$s - Odstranili jste své veřejné jméno (%1$s) - Změnili jste téma na: %1$s - %1$s změnili obrázek místnosti - Změnili jste obrázek místnosti - Změnili jste jméno místnosti na: %1$s - Zahájili jste video hovor. - Zahájili jste hlasový hovor. - %s poslali data, aby mohli zahájit hovor. - Poslali jste data, abyste mohli zahájit hovor. - Přijali jste hovor. - Ukončili jste hovor. - Učinili jste budoucí historii místnosti viditelnou pro %1$s - Zapnuli jste end-to-end šifrování (%1$s) - Povýšili jste tuto místnost. - Požádali jste o VoIP konferenci - Odstranili jste jméno místnosti - Odstranili jste téma místnosti - %1$s odstranili obrázek místnosti - Odstranili jste obrázek místnosti - Aktualizovali jste svů profil %1$s - Poslali jste %1$s pozvání ke vstupu do místnosti - Zrušili jste pozvánku ke vstupu do místnosti pro %1$s - Přijali jste pozvání pro %1$s - %1$s přidali widget %2$s - Přidali jste widget %1$s - %1$s odstranili widget %2$s - Odstranili jste widget %1$s - %1$s změnil widget %2$s - Změnili jste widget %1$s - Správce - Moderátor - Výchozí - Vlastní (%1$d) - Vlastní - Změnili jste %1$s stupeň oprávnění. - %1$s změnili %2$s stupeň oprávnění. - %1$s z %2$s na %3$s - Pozvání od %1$s. Důvod: %2$s - Vaše pozvání. Důvod: %1$s - Pozvali jste %1$s. Důvod: %2$s - %1$s vstoupili do místnosti. Důvod: %2$s - Vstoupili jste do místnosti. Důvod: %1$s - Opustili jste místnost. Důvod: %1$s - %1$s pozvání odmítli. Důvod: %2$s - Odmítli jste pozvání. Důvod: %1$s - %1$s vykopnuli %2$s. Důvod: %3$s - Vykopnuli jste %1$s. Důvod: %2$s - %1$s zrušili %2$s vykázání. Důvod: %3$s - Zrušili jste %1$s vykázání. Důvod: %2$s - %1$s vykázali %2$s. Důvod: %3$s - Vykázali jste %1$s. Důvod: %2$s - %1$s poslali %2$s pozvání, aby vstoupili do místnosti. Důvod: %3$s - Poslali jste %1$s pozvání, aby vstoupili do místnosti. Důvod: %2$s - %1$s zrušili pozvání do místnosti pro %2$s. Důvod: %3$s - Zrušili jste pozvání do místnosti pro %1$s. Důvod: %2$s - %1$s přijali pozvání pro %2$s. Důvod: %3$s - Přijali jste pozvání pro %1$s. Důvod: %2$s - %1$s zrušili pozvání pro %2$s. Důvod: %3$s - Zrušili jste pozvání od %1$s. Důvod: %2$s - - %1$s přidali %2$s jako adresu pro tuto místnost. - %1$s přidali %2$s jako adresy pro tuto místnost. - %1$s přidali %2$s jako adresy pro tuto místnost. - - - Přidali jste %1$s jako adresu pro tuto místnost. - Přidali jste %1$s jako adresy pro tuto místnost. - Přidali jste %1$s jako adresy pro tuto místnost. - - - %1$s odstranili %2$s jako adresu pro tuto místnost. - %1$s odstranili %2$s jako adresy pro tuto místnost. - %1$s odstranili %2$s jako adresy pro tuto místnost. - - - Odstranili jste %1$s jako adresu pro tuto místnost. - Odstranili jste %1$s jako adresuy pro tuto místnost. - Odstranili jste %1$s jako adresy pro tuto místnost. - - %1$s přidali %2$s a odstranili %3$s jako adresy pro tuto místnost. - Přidali jste %1$s a odstranili %2$s jako adresy pro tuto místnost. - %1$s nastavili hlavní adresu této místnosti na %2$s. - Nastavili jste %1$s na hlavní adresu této místnosti. - %1$s odstranili hlavní adresu této místnosti. - Odstranili jste hlavní adresu této místnosti. - %1$s povolili hostům vstoupit do místnosti. - Povolili jste hostům vstoupit do místnosti. - %1$s zamezili hostům vstoupit do místnosti. - Zamezili jste hostům vstoupit do místnosti. - %1$s zapnuli end-to-end šifrování. - Zapnuli jste end-to-end šifrování. - %1$s zapnuli end-to-end šifrování (neznámý algoritmus %2$s). - Zapnuli jste end-to-end šifrování (neznámý algoritmus %1$s). - Zamezili jste hostům vstoupit do této místnosti. - %1$s zamezil hostům vstoupit do této místnosti. - Povolili jste hostům vstoupit. - %1$s povolil hostům vstoupit. - Odešli jste. Důvod: %1$s - %1$s odešli. Důvod: %2$s - Vstoupili jste. Důvod: %1$s - %1$s vstoupili. Důvod: %2$s - Zrušili jste pozvání pro %1$s - %1$s zrušili pozvání pro %2$s - Pozvali jste %1$s - %1$s pozvali %2$s - Tady jste provedli upgrade. - %s tady provedli upgrade. - Učinili jste budoucí zprávy viditelné pro %1$s - %1$s učinili budoucí zprávy viditelné pro %2$s - Odešli jste z místnosti - %1$s odešli z místnosti - Vstoupili jste - %1$s vstoupili - Založili jste diskusi - %1$s založil diskusi - Prázdná místnost (byla %s) - - %1$s, %2$s, %3$s a %4$d další - %1$s, %2$s, %3$s a %4$d další - %1$s, %2$s, %3$s a %4$d dalších - - %1$s, %2$s, %3$s a %4$s - %1$s, %2$s a %3$s - 🎉 Účast všech serverů je zakázána! Tuto místnost již nelze použít. - Beze změny. - • Servery shodující se doslovně s IP jsou nyní zakázány. - • Servery shodující se doslovně s IP jsou nyní povoleny. - • Servery shodující se s %s byly odstraněny ze seznamu povolených. - • Servery shodující se s %s jsou nyní povoleny. - • Servery shodující se s %s byly odstraněny ze seznamu zakázaných. - • Servery shodující se s %s jsou nyní zakázány. - Změnili jste ACL serveru pro tuto místnost. - %s změnili ACL serveru pro tuto místnost. - • Server shodující se doslovně s IP je povolen. - • Server shodující se doslovně s IP je zakázán. - • Server shodující se s %s je povolen. - • Server shodující se s %s je zakázán. - Nastavili jste ACL serveru pro tuto místnost. - %s nastavili ACL serveru pro tuto místnost. - Změnili jste adresy pro tuto místnost. - %1$s změnili adresy pro tuto místnost. - Změnili jste hlavní a alternativní adresu pro tuto místnost. - %1$s změnili hlavní a alternativní adresu pro tuto místnost. - Změnili jste alternativní adresu pro tuto místnost. - %1$s změnili alternativní adresu pro tuto místnost. - - Odstranili jste alternativní adresu %1$s pro tuto místnost. - Odstranili jste alternativní adresy %1$s pro tuto místnost. - Odstranili jste alternativní adresy %1$s pro tuto místnost. - - - %1$s odstranili alternativní adresu %2$s pro tuto místnost. - %1$s odstranili alternativní adresy %2$s pro tuto místnost. - %1$s odstranili alternativní adresy %2$s pro tuto místnost. - - - Přidali jste alternativní adresu %1$s pro tuto místnost. - Přidali jste alternativní adresy %1$s pro tuto místnost. - Přidali jste alternativní adresy %1$s pro tuto místnost. - - - %1$s přidali alternativní adresu %2$s pro tuto místnost. - %1$s přidali alternativní adresy %2$s pro tuto místnost. - %1$s přidali alternativní adresy %2$s pro tuto místnost. - - Upravili jste videokonferenci - Videokonference byla upravena uživatelem %1$s - Ukončili jste videokonferenci - Videokonference byla ukončena uživatelem %1$s - Zahájili jste videokonferenci - Videokonference byla zahájena uživatelem %1$s - \ No newline at end of file diff --git a/matrix-sdk-android/src/main/res/values-da/strings.xml b/matrix-sdk-android/src/main/res/values-da/strings.xml deleted file mode 100644 index 510fa231af..0000000000 --- a/matrix-sdk-android/src/main/res/values-da/strings.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - - %1$s: %2$s - %1$s sendte et billede. - - %ss invitation - %1$s inviterede %2$s - %1$s inviterede dig - %1$s forbandt - %1$s forlod rummet - %1$s afviste invitationen - %1$s kickede %2$s - %1$s unbannede %2$s - %1$s bannede %2$s - %1$s trak %2$ss invitation tilbage - %1$s skiftede sin avatar - %1$s satte sit viste navn til %2$s - %1$s ændrede sit viste navn fra %2$s til %3$s - %1$s fjernede sit viste navn (%2$s) - %1$s ændrede emnet til: %2$s - %1$s ændrede rumnavnet til: %2$s - %s startede et videoopkald. - %s startede et stemmeopkald. - %s svarede opkaldet. - %s stoppede opkaldet. - %1$s gjorde den fremtidige rum historik synlig for %2$s - alle medlemmer af rummet, fra det tidspunkt de er inviteret. - alle medlemmer af rummet, fra det tidspunkt de er forbundede. - Alle medlemmer af rummet. - alle. - ukendt (%s). - %1$s slog ende-til-ende kryptering til (%2$s) - - %1$s forespurgte en VoIP konference - VoIP konference startet - VoIP konference afsluttet - - (avatar blev også ændret) - %1$s fjernede navnet på rummet - %1$s fjernede emnet for rummet - %1$s opdaterede sin profil %2$s - %1$s inviterede %2$s til rummet - %1$s accepterede invitationen til %2$s - - ** Kunne ikke dekryptere: %s ** - Afsenderens enhed har ikke sendt os nøglerne til denne besked. - - Kunne ikke hemmeligholde - Kunne ikke sende besked - - Kunne ikke uploade billede - - Netværks fejl - Matrix fejl - - Det er i øjeblikket ikke muligt at genforbinde til et tomt rum. - - Krypteret besked - - mailadresse - Telefonnummer - - Invitation fra %s - Invitation til rum - %1$s og %2$s - - - %1$s og 1 anden - %1$s og %2$d andre - - - Tomt rum - - diff --git a/matrix-sdk-android/src/main/res/values-de/strings.xml b/matrix-sdk-android/src/main/res/values-de/strings.xml deleted file mode 100644 index 406f4a7102..0000000000 --- a/matrix-sdk-android/src/main/res/values-de/strings.xml +++ /dev/null @@ -1,274 +0,0 @@ - - - %1$s: %2$s - %1$s hat ein Bild gesendet. - Einladung von %s - %1$s hat %2$s eingeladen - %1$s hat dich eingeladen - %1$s hat den Raum betreten - %1$s hat den Raum verlassen - %1$s hat die Einladung abgelehnt - %1$s hat %2$s gekickt - %1$s hat die Sperre von %2$s aufgehoben - %1$s hat %2$s verbannt - %1$s hat die Einladung für %2$s zurückgezogen - %1$s hat das Profilbild geändert - %1$s hat den Anzeigenamen geändert in %2$s - %1$s hat den Anzeigenamen von %2$s auf %3$s geändert - %1$s hat den Anzeigenamen gelöscht (%2$s) - %1$s hat das Raumthema geändert auf: %2$s - %1$s hat den Raumnamen geändert in: %2$s - %s hat einen Videoanruf durchgeführt. - %s hat einen Sprachanruf getätigt. - %s hat den Anruf angenommen. - %s hat den Anruf beendet. - %1$s hat den zukünftigen Chatverlauf sichtbar gemacht für %2$s - Alle Mitglieder (ab dem Zeitpunkt, an dem sie eingeladen wurden). - Alle Mitglieder (ab dem Zeitpunkt, an dem sie den Raum betreten haben). - alle Raum-Mitglieder. - Jeder. - Unbekannt (%s). - %1$s hat die Ende-zu-Ende-Verschlüsselung aktiviert (%2$s) - %1$s möchte eine VoIP-Konferenz beginnen - VoIP-Konferenz gestartet - VoIP-Konferenz beendet - (Profilbild wurde ebenfalls geändert) - %1$s hat den Raumnamen entfernt - %1$s hat das Raum-Thema entfernt - %1$s hat das Benutzerprofil aktualisiert %2$s - %1$s hat eine Einladung an %2$s gesendet - %1$s hat die Einladung in %2$s akzeptiert - ** Nicht entschlüsselbar: %s ** - Das absendende Gerät hat uns keine Schlüssel für diese Nachricht übermittelt. - - Entfernen nicht möglich - Nachricht kann nicht gesendet werden - Bild konnte nicht hochgeladen werden - - Netzwerk-Fehler - Matrix-Fehler - - - - - Es ist aktuell nicht möglich, einen leeren Raum erneut zu betreten. - Verschlüsselte Nachricht - - E-Mail-Adresse - Telefonnummer - %1$s hat einen Sticker gesendet. - - Einladung von %s - Raumeinladung - %1$s und %2$s - Leerer Raum - - %1$s und 1 andere(r) - %1$s und %2$d andere - - Nachricht entfernt - Nachricht entfernt von %1$s - Nachricht entfernt [Grund: %1$s] - Nachricht entfernt von %1$s [Grund: %2$s] - %s hat diesen Raum aufgewertet. - Sende eine Nachricht… - Sendewarteschlange leeren - Erste Synchronisation: -\nImportiere Benutzerkonto… - Erste Synchronisation: -\nImportiere Cryptoschlüssel - Erste Synchronisation: -\nImportiere Räume - Erste Synchronisation: -\nImportiere betretene Räume - Erste Synchronisation: -\nImportiere eingeladene Räume - Erste Synchronisation: -\nImportiere verlassene Räume - Erste Synchronisation: -\nImportiere Communities - Erste Synchronisation: -\nImportiere Benutzerdaten - %1$s hat die Einladung an %2$s, den Raum zu betreten, zurückgezogen - %1$s\'s Einladung. Grund: %2$s - %1$s hat %2$s eingeladen. Grund: %3$s - %1$s hat dich eingeladen. Grund: %2$s - %1$s ist dem Raum beigetreten. Grund: %2$s - %1$s hat den Raum verlassen. Grund: %2$s - %1$s hat die Einladung abgelehnt. Grund: %2$s - %1$s hat %2$s gekickt. Grund: %3$s - %1$s hat Sperre von %2$s aufgehoben. Grund: %3$s - %1$s hat %2$s verbannt. Grund: %3$s - %1$s hat eine Einladung an %2$s gesandt um diesem Raum beizutreten. Grund: %3$s - %1$s hat Einladung an %2$s zu Betreten dieses Raumes zurückgezogen. Grund: %3$s - %1$s hat die Einladung für %2$s angenommen. Grund: %3$s - %1$s hat Einladung für %2$s verworfen. Grund: %3$s - - %1$s fügt %2$s als eine Adresse für diesen Raum hinzu. - %1$s fügt %2$s als Adressen für diesen Raum hinzu. - - - %1$s entfernt %2$s als eine Adresse für diesen Raum. - %1$s entfernt %2$s als Adressen für diesen Raum. - - %1$s fügt %2$s als Adresse für diesen Raum hinzu und entfernt %3$s. - %1$s legt die Hauptadresse fest für diesen Raum als %2$s fest. - %1$s entfernte die Hauptadresse für diesen Raum. - %1$s hat Gästen erlaubt den Raum zu betreten. - %1$s hat Gästen untersagt den Raum zu betreten. - %1$s aktivierte Ende-zu-Ende-Verschlüsselung. - %1$s aktivierte Ende-zu-Ende-Verschlüsselung (unbekannter Algorithmus %2$s). - Du hast ein Bild gesendet. - Du hast einen Sticker gesendet. - Deine Einladung - %1$s hat den Raum erstellt - Du hast den Raum erstellt - Du hast %1$s eingeladen - Du bist dem Raum beigetreten - Du hast den Raum verlassen - Du hast die Einladung abgelehnt - Du hast %1$s aus dem Raum entfernt - Du hast den Bann von %1$s aufgehoben - Du hast %1$s gebannt - Du hast die Einladung von %1$s zurückgenommen - Du hast dein Profilbild geändert - Du hast deinen Anzeigenamen zu %1$s geändert - Du hast deinen Anzeigenamen von %1$s zu %2$s geändert - Du hast deinen Anzeigenamen entfernt (er war %1$s) - Du hast das Thema geändert auf: %1$s - %1$s hat das Bild des Raumes geändert - Du hast das Bild des Raumes geändert - Du hast den Raumnamen zu %1$s geändert - Du hast einen Videoanruf gestartet. - Du hast einen Audioanruf gestartet. - Du hast den Anruf angenommen. - Du hast den Anruf beendet. - Du hast den zukünftigen Nachrichtenverlauf für %1$s sichtbar gemacht - Du hast Ende-zu-Ende-Verschlüsselung aktiviert (%1$s) - Du hast den Raum aufgwertet. - Du hast eine VoIP-Konferenz angefordert - Du hast den Raumnamen entfernt - Du hast das Raumthema entfernt - %1$s hat das Bild des Raumes entfernt - Du hast das Bild des Raumes entfernt - Du hast dein Profil %1$s aktualisiert - Du hast %1$s in den Raum eingeladen - Du hast die Einladung für %1$s zurückgenommen - Du hast die Einladung für %1$s akzeptiert - %1$s hat das %2$s Widget hinzugefügt - Du hast das %1$s Widget hinzugefügt - %1$s hat das %2$s Widget entfernt - Du hast das %1$s Widget entfernt - %1$s hat das %2$s Widget modifiziert - Du hast das %1$s Widget modifiziert - Administrator - Moderator - Standard - Benutzerdefiniert (%1$d) - Benutzerdefiniert - Du hast die Berechtigungsstufe von %1$s geändert. - %1$s hat die Berechtigungsstufe von %2$s geändert. - %1$s von %2$s zu %3$s - Deine Einladung. Grund: %1$s - Du hast %1$s eingeladen. Grund: %2$s - Du bist dem Raum beigetreten. Grund: %1$s - Du hast den Raum verlassen. Grund: %1$s - Du hast die Einladung abgelehnt. Grund: %1$s - Du hast %1$s aus dem Raum entfernt. Grund %2$s - Du hast den Bann von %1$s aufgehoben. Grund: %2$s - Du hast %1$s gebannt. Grund: %2$s - Du hast %1$s in den Raum eingeladen. Grund: %2$s - Du hast die Einladung für %1$s zurückgenommen. Grund: %2$s - Du hast die Einladung von %1$s angenommen. Grund: %2$s - Du hast die Einladung von %1$s abgelehnt. Grund: %2$s - - Du hast die Raumaddresse %1$s hinzugefügt. - Du hast die Raumaddressen %1$s hinzugefügt. - - - Du hast die Raum-Adresse %1$s vom Raum entfernt. - Du hast die Raum-Adressen %1$s vom Raum entfernt. - - Du hast den Raumaddressen %1$s hinzugefügt und %2$s entfernt. - Du hast die Hauptaddresse für diesen Raum auf %1$s gesetzt. - Du hast die Hauptaddresse des Raums entfernt. - Du hast Gästen erlaubt dem Raum beizutreten. - Du hast Gästen untersagt dem Raum beizutreten. - Du hast Ende-zu-Ende-Verschlüsselung aktiviert. - Du hast Ende-zu-Ende-Verschlüsselung aktiviert (unbekannter Algorithmus %1$s). - %s hat Daten gesendet, um einen Anruf zu starten. - Du hast Daten geschickt, um eine Anruf zu starten. - Du hast Gästen erlaubt hier beizutreten. - %1$s hat Gästen erlaubt hier beizutreten. - Du bist beigetreten. Grund: %1$s - %1$s ist beigetreten. Grund: %2$s - Du hast die Einladung für %1$s zurückgezogen - %1$s hat die Einladung für %2$s zurückgezogen - Du hast %1$s eingeladen - %1$s hat %2$s eingeladen - Du hast zukünftige Nachrichten für %1$s sichtbar gemacht - %1$s hat zukünftige Nachrichten für %2$s sichtbar gemacht - Du hast den Raum verlassen - %1$s hat den Raum verlassen - Du bist beigetreten - %1$s ist beigetreten - Du hast eine Diskussion erstellt - %1$s hat eine Diskussion erstellt - %s hat hier ein Upgrade durchgeführt. - Du hast hier ein Upgrade durchgeführt. - Du hast Gästen untersagt den Raum zu betreten. - %1$s hat Gästen untersagt den Raum zu betreten. - Du bist gegangen. Grund: %1$s - %1$s ist gegangen. Grund: %2$s - Du hast die Adressen für diesen Raum geändert. - %1$s hat die Adressen für diesen Raum geändert. - Du hast die Haupt- und die alternativen Adressen für diesen Raum geändert. - %1$s hat die Haupt- und die alternativen Adressen für diesen Raum geändert. - Du hast die alternativen Adressen für diesen Raum geändert. - %1$s hat die alternativen Adressen für diesen Raum geändert. - - Du entferntest die alternative Adresse %1$s für diesen Raum. - Du entferntest die alternativen Adressen %1$s für diesen Raum. - - - %1$s entfernte die alternative Adresse %2$s für diesen Raum. - %1$s entfernte die alternativen Adressen %2$s für diesen Raum. - - - Du hast die alternative Adresse %1$s für diesen Raum hinzugefügt. - Du hast die alternativen Adressen %1$s für diesen Raum hinzufügt. - - - %1$s fügte die alternative Adresse %2$s für diesen Raum hinzu. - %1$s fügte die alternativen Adressen %2$s für diesen Raum hinzu. - - Leerer Raum (war %s) - - %1$s, %2$s, %3$s und %4$d andere/r - %1$s, %2$s, %3$s und %4$d andere - - %1$s, %2$s, %3$s und %4$s - %1$s, %2$s und %3$s - 🎉 Alle Server sind von der Teilnahme ausgeschlossen! Dieser Raum kann nicht mehr genutzt werden. - Keine Änderung. - • Server, die mit IPs übereinstimmen, sind jetzt gesperrt. - • Server, die mit IPs übereinstimmen, sind nicht erlaubt. - • Server, die mit %s übereinstimmen, wurden von der Elaubten-Liste entfernt. - • Server, die mit %s übereinstimmen, sind jetzt erlaubt. - • Server, die mit %s übereinstimmen, werden von der Sperrliste entfernt. - • Server, die mit %s übereinstimmen, sind jetzt gesperrt. - Du hast die Server-ACL für diesen Raum geändert. - %s hat die Server-Zugriffssteuerungsliste (ACL) für diesen Raum geändert. - • Server, die mit IPs übereinstimmen, sind gesperrt. - • Server, die mit IPs übereinstimmen, sind erlaubt. - • Server, die mit %s übereinstimmen, sind erlaubt. - • Server, die mit %s übereinstimmen, sind gesperrt. - Du hast die Server-ACL für diesen Raum gesetzt. - %s hat die Server-Zugriffssteuerungsliste (ACL) für diesen Raum gesetzt. - Du hast eine Videokonferenz geändert - Videokonferenz von %1$s geändert - Videokonferenz von %1$s beendet - Du hast eine Videokonferenz beendet - Du hast eine Videokonferenz gestartet - Videokonferenz von %1$s gestartet - \ No newline at end of file diff --git a/matrix-sdk-android/src/main/res/values-el/strings.xml b/matrix-sdk-android/src/main/res/values-el/strings.xml deleted file mode 100644 index 9db4e91849..0000000000 --- a/matrix-sdk-android/src/main/res/values-el/strings.xml +++ /dev/null @@ -1,76 +0,0 @@ - - - Ηλεκτρονική διεύθυνση - %1$s: %2$s - Ο/Η %1$s έστειλε μια εικόνα. - Ο/Η %1$s έστειλε ένα αυτοκόλλητο. - - Ο/Η %1$s σας προσκάλεσε - Ο/Η %1$s αποχώρησε - Ο/Η %1$s απέρριψε την πρόσκληση - Ο/Η %1$s έδιωξε τον/την %2$s - Ο/Η %1$s προσκάλεσε τον/την %2$s - Η πρόσκληση του/της %s - Αριθμός τηλεφώνου - - Ο/Η %1$s απέκλεισε τον/την %2$s - Ο/Η %1$s απέσυρε την πρόσκληση του/της %2$s - Ο/Η %1$s άλλαξε εικονίδιο χρήστη - Ο/Η %1$s άλλαξε το εμφανιζόμενό του/της όνομα σε %2$s - Ο/Η %1$s άλλαξε το εμφανιζόμενό του/της όνομα από %2$s σε %3$s - Ο/Η %1$s αφαίρεσε το εμφανιζόμενό του/της όνομα (%2$s) - Ο/Η %1$s άλλαξε το θέμα σε: %2$s - Ο/Η %1$s άλλαξε το όνομα του δωματίου σε: %2$s - Ο/Η %s απάντησε στην κλήση. - Ο/Η %s τερμάτισε την κλήση. - - Ο/Η %s πραγματοποίησε μια κλήση βίντεο. - Ο/Η %s πραγματοποίησε μια κλήση ήχου. - Ο/Η %1$s κατέστησε το μελλοντικό ιστορικό του δωματίου ορατό στον/στην %2$s - όλα τα μέλη του δωματίου, από την στιγμή που προσκλήθηκαν. - όλα τα μέλη του δωματίου. - οποιοσδήποτε. - άγνωστος/η (%s). - (έγινε αλλαγή και του εικονιδίου χρήστη) - Ο/Η %1$s αφαίρεσε το όνομα του δωματίου - Ο/Η %1$s αφαίρεσε το θέμα του δωματίου - Ο/Η %1$s ανανέωσε το προφίλ του/της %2$s - Ο/Η %1$s δέχτηκε την πρόσκληση για το %2$s - - ** Αδυναμία αποκρυπτογράφησης: %s ** - Η συσκευή του/της αποστολέα δεν μας έχει στείλει τα κλειδιά για αυτό το μήνυμα. - - Αποτυχία αποστολής μηνύματος - - Αποτυχία αναφόρτωσης εικόνας - - Σφάλμα δικτύου - Σφάλμα του Matrix - - Κρυπτογραφημένο μήνυμα - - Ο/Η %1$s ζήτησε μια VoIP διάσκεψη - Η VoIP διάσκεψη ξεκίνησε - Η VoIP διάσκεψη έληξε - - Ο/Η %1$s εισήλθε στο δωμάτιο - - Πρόσκληση από %s - Πρόσκληση στο δωμάτιο - - %1$s και %2$s - - - %1$s και 1 ακόμα - %1$s και %2$d ακόμα - - - Άδειο δωμάτιο - - όλα τα μέλη του δωματίου από την στιγμή που εισήλθαν. - Ο/Η %1$s ενεργοποίησε την κρυπτογράφηση απ\'άκρη σ\'άκρη (%2$s) - - Ο/Η %1$s έστειλε μία πρόσκληση στον/στην %2$s για να εισέλθει στο δωμάτιο - Δεν είναι δυνατή ακόμα η επανείσοδος σε ένα άδειο δωμάτιο. - - diff --git a/matrix-sdk-android/src/main/res/values-eo/strings.xml b/matrix-sdk-android/src/main/res/values-eo/strings.xml deleted file mode 100644 index 8dacd87157..0000000000 --- a/matrix-sdk-android/src/main/res/values-eo/strings.xml +++ /dev/null @@ -1,215 +0,0 @@ - - - %1$s sendis bildon. - %1$s sendis glumarkon. - Invito de %s - %1$s invitis uzanton %2$s - %1$s invitis vin - %1$s envenis - %1$s foriris de la ĉambro - %1$s rifuzis la inviton - %1$s forpelis uzanton %2$s - %1$s malforbaris uzanton %2$s - %1$s forbaris uzanton %2$s - %1$s nuligis inviton por %2$s - %1$s ŝanĝis sian profilbildon - ** Ne eblas malĉifri: %s ** - La aparato de la sendinto ne sendis al ni la ŝlosilojn por tiu mesaĝo. - %1$s: %2$s - %1$s ŝanĝis sian prezentan nomon al %2$s - %1$s ŝanĝis sian prezentan nomon de %2$s al %3$s - %1$s forigis sian prezentan nomon (%2$s) - %1$s ŝanĝis la temon al: %2$s - %1$s ŝanĝis nomon de la ĉambro al: %2$s - %s vidvokis. - %s voĉvokis. - %s respondis la vokon. - %s finis la vokon. - %1$s videbligis estontan historion de ĉambro al %2$s - ĉiuj ĉambranoj, ekde siaj invitoj. - ĉiuj ĉambranoj, ekde siaj aliĝoj. - ĉiuj ĉambranoj. - ĉiu ajn. - nekonata (%s). - %1$s ŝaltis tutvojan ĉifradon (%2$s) - %s gradaltigis la ĉambron. - Mesaĝo foriĝis - Mesaĝon forigis %1$s - Mesaĝo foriĝis [kialo: %1$s] - Mesaĝon forigis %1$s [kialo: %2$s] - %1$s ĝisdatigis sian profilon %2$s - %1$s sendis aliĝan inviton al %2$s - %1$s nuligis la aliĝan inviton por %2$s - %1$s akceptis la inviton por %2$s - Ne povis redakti - Ne povas sendi mesaĝon - Malsukcesis alŝuti bildon - Reta eraro - Matrix-eraro - Nun ne eblas re-aliĝi al malplena ĉambro. - Ĉifrita mesaĝo - Retpoŝtadreso - Telefonnumero - Invito de %s - Invito al ĉambro - %1$s kaj %2$s - - %1$s kaj 1 alia - %1$s kaj %2$d aliaj - - Malplena ĉambro - Komenca spegulado: -\nEnportante konton… - Komenca spegulado: -\nEnportante ĉifrilojn - Komenca spegulado: -\nEnportante ĉambrojn - Komenca spegulado: -\nEnportante aliĝitajn ĉambrojn - Komenca spegulado: -\nEnportante ĉambrojn de invitoj - Komenca spegulado: -\nEnportante forlasitajn ĉambrojn - Komenca spegulado: -\nEnportante komunumojn - Komenca spegulado: -\nEnportante datumojn de konto - Sendante mesaĝon… - Vakigi sendan atendovicon - %1$s petis grupan vokon - Grupa voko komenciĝis - Grupa voko finiĝis - (ankaŭ profilbildo ŝanĝiĝis) - %1$s forigis nomon de la ĉambro - %1$s forigis temon de la ĉambro - Invito de %1$s. Kialo: %2$s - %1$s invitis uzanton %2$s. Kialo: %3$s - %1$s invitis vin. Kialo: %2$s - %1$s envenis. Kialo: %2$s - %1$s foriris de la ĉambro. Kialo: %2$s - %1$s rifuzis la inviton. Kialo: %2$s - %1$s forpelis uzanton %2$s. Kialo: %3$s - %1$s malforbaris uzanton %2$s. Kialo: %3$s - %1$s forbaris uzanton %2$s. Kialo: %3$s - %1$s sendis al %2$s inviton al la ĉambro. Kialo: %3$s - %1$s nuligis la inviton al la ĉambro por %2$s. Kialo: %3$s - %1$s akceptis la inviton por %2$s. Kialo: %3$s - %1$s nuligis la inviton por %2$s. Kialo: %3$s - - %1$s aldonis %2$s kiel adreson por ĉi tiu ĉambro. - %1$s aldonis %2$s kiel adresojn por ĉi tiu ĉambro. - - - %1$s forigis %2$s kiel adreson por ĉi tiu ĉambro. - %1$s forigis %2$s kiel adresojn por ĉi tiu ĉambro. - - %1$s aldonis %2$s kaj forigis %3$s kiel adresojn por ĉi tiu ĉambro. - %1$s agordis la ĉefadreson de ĉi tiu ĉambro al %2$s. - %1$s forigis la ĉefadreson de ĉi tiu ĉambro. - %1$s permesis al gastoj enveni. - %1$s malpermesis al gastoj enveni. - %1$s ŝaltis tutvojan ĉifradon. - %1$s ŝaltis tutvojan ĉifradon (kun nerekonita algoritmo %2$s). - Vi ŝanĝis la povnivelon de %1$s. - %1$s sanĝis la povnivelon de %2$s. - Vi ŝaltis tutvojan ĉifradon (kun nerekonita algoritmo %1$s). - Vi ŝaltis tutvojan ĉifradon. - Vi malpermesis al gastoj aliĝi. - %1$s malpermesis al gastoj aliĝi. - Vi malpermesis al gastoj enveni. - Vi permesis al gastoj aliĝi. - %1$s permesis al gastoj aliĝi. - Vi permesis al gastoj enveni. - Vi forigis la ĉefadreson de ĉi tiu ĉambro. - Vi agordis al ĉefadreson de ĉi tiu ĉambro al %1$s. - Vi aldonis %1$s kaj forigis %2$s kiel adresojn por ĉi tiu ĉambro. - - Vi forigis %1$s kiel adreson por ĉi tiu ĉambro. - Vi forigis %1$s kiel adresojn por ĉi tiu ĉambro. - - - Vi aldonis %1$s kiel adreson por ĉi tiu ĉambro. - Vi aldonis %1$s kiel adresojn por ĉi tiu ĉambro. - - Vi nuligis la inviton por %1$s. Kialo: %2$s - Vi akceptis la inviton por %1$s. Kialo: %2$s - Vi nuligis inviton al la ĉambro por %1$s. Kialo: %2$s - Vi sendis al %1$s inviton al la ĉambro. Kialo: %2$s - Vi forbaris uzanton %1$s. Kialo: %2$s - Vi malforbaris uzanton %1$s. Kialo: %2$s - Vi forpelis uzanton %1$s. Kialo: %2$s - Vi rifuzis la inviton. Kialo: %1$s - Vi foriris. Kialo: %1$s - %1$s foriris. Kialo: %2$s - Vi foriris de la ĉambro. Kialo: %1$s - Vi envenis. Kialo: %1$s - Vi aliĝis. Kialo: %1$s - %1$s aliĝis. Kialo: %2$s - Vi invitis uzanton %1$s. Kialo: %2$s - Via invito. Kialo: %1$s - %1$s de %2$s al %3$s - Propra - Ordinara - Propra (%1$d) - Reguligisto - Administranto - Vi ŝanĝis la fenestraĵon %1$s - %1$s ŝanĝis la fenestraĵon %2$s - Vi forigis la fenestraĵon %1$s - %1$s forigis la fenestraĵon %2$s - Vi aldonis la fenestraĵon %1$s - %1$s aldonis la fenestraĵon %2$s - Vi akceptis la inviton por %1$s - Vi nuligis la inviton por %1$s - %1$s nuligis la inviton por %2$s - Vi nuligis la aliĝan inviton por %1$s - Vi invitis uzanton %1$s - %1$s invitis uzanton %2$s - Vi sendis aliĝan inviton al %1$s - Vi ĝisdatigis vian profilon %1$s - Vi forigis bildon de la ĉambro - %1$s forigis bildon de la ĉambro - Vi forigis temon de la ĉambro - Vi forigis nomon de la ĉambro - Vi petis grupan vokon - Vi gradaltigis la interparolon. - %s gradaltigis la interparolon. - Vi gradaltigis la ĉambron. - Vi ŝaltis tutvojan ĉifradon (%1$s) - %1$s videbligis al %2$s estontajn mesaĝojn - Vi videbligis al %1$s estontajn mesaĝojn - Vi videbligis estontan historion de ĉambro al %1$s - Vi finis la vokon. - Vi respondis la vokon. - Vi sendis datumojn por prepari la vokon. - %s sendis datumojn por prepari la vokon. - Vi voĉvokis. - Vi vidvokis. - Vi ŝanĝis la nomon de la ĉambro al: %1$s - Vi ŝanĝis la bildon de la ĉambro - %1$s ŝanĝis la bildon de la ĉambro - Vi ŝanĝis la temon al: %1$s - Vi forigis vian prezentan nomon (%1$s) - Vi ŝanĝis vian prezentan nomon de %1$s al %2$s - Vi ŝanĝis vian prezentan nomon al %1$s - Vi ŝanĝis vian profilbildon - Vi nuligis inviton por %1$s - Vi forbaris uzanton %1$s - Vi malforbaris uzanton %1$s - Vi forpelis uzanton %1$s - Vi rifuzis la inviton - Vi foriris de la ĉambro - %1$s foriris de la ĉambro - Vi foriris de la ĉambro - Vi envenis - %1$s envenis - Vi envenis - Vi invitis uzanton %1$s - Vi kreis la diskuton - %1$s kreis la diskuton - Vi kreis la ĉambron - %1$s kreis la ĉambron - Via invito - Vi sendis glumarkon. - Vi sendis bildon. - \ No newline at end of file diff --git a/matrix-sdk-android/src/main/res/values-es-rMX/strings.xml b/matrix-sdk-android/src/main/res/values-es-rMX/strings.xml deleted file mode 100644 index a8e8477005..0000000000 --- a/matrix-sdk-android/src/main/res/values-es-rMX/strings.xml +++ /dev/null @@ -1,92 +0,0 @@ - - - - %1$s: %2$s - %1$s envió una imagen. - - la invitación de %s - %1$s invitó a %2$s - %1$s te invitó - %1$s se unió - %1$s salió - %1$s rechazó la invitación - %1$s quitó a %2$s - %1$s desprohibió a %2$s - %1$s prohibió %2$s - %1$s retiró la invitación de %2$s - %1$s cambió su foto de perfil - %1$s estableció %2$s como su nombre visible - %1$s cambió su nombre visible de %2$s a %3$s - %1$s eliminó su nombre visible (%2$s) - %1$s cambió el tema a: %2$s - %1$s cambió el nombre de la sala a: %2$s - %s comenzó una llamada de video. - %s comenzó una llamada de voz. - %s recibió la llamada. - %s terminó la llamada. - %1$s dejó que %2$s vea el historial del futuro - todos los miembros de la sala, desde su invitación. - todos los miembros de la sala, desde cuando entraron. - todos los miembros de la sala. - todos. - desconocido (%s). - %1$s encendió el cifrado de extremo a extremo (%2$s) - - %1$s solicitó una conferencia VoIP - conferencia VoIP comenzó - conferencia VoIP finalizó - - (foto de perfil también se cambió) - %1$s eliminó el nombre de la sala - %1$s retiró el tema de la sala - %1$s actualizó su perfil %2$s - %1$s envió una invitación a %2$s para entrar a la sala - %1$s aceptó la invitación de %2$s - - ** No se puede descifrar: %s ** - El dispositivo del remitente no nos ha enviado las claves de este mensaje. - - - No se pudo redactar - No se puede enviar el mensaje - - La subida de la imagen falló - - - Error de la red - Error de Matrix - - - - - - - - - No es posible volver a unirse a una sala vacía. - - Mensaje cifrado - - - Correo electrónico - Número telefónico - - %1$s envió una calcomanía. - - - Invitación de %s - Invitación de Sala - %1$s y %2$s - Sala vacía - - - - %1$s y otro - %1$s y %2$d otros - - - Mensaje eliminado - Mensaje eliminado por %1$s - Mensaje eliminado [motivo: %1$s] - Mensaje eliminado por %1$s [motivo: %2$s] - diff --git a/matrix-sdk-android/src/main/res/values-es/strings.xml b/matrix-sdk-android/src/main/res/values-es/strings.xml deleted file mode 100644 index 10911dde68..0000000000 --- a/matrix-sdk-android/src/main/res/values-es/strings.xml +++ /dev/null @@ -1,274 +0,0 @@ - - - %1$s: %2$s - %1$s envió una imagen. - la invitación de %s - %1$s invitó a %2$s - %1$s te ha invitado - %1$s se ha unido - %1$s salió - %1$s rechazó la invitación - %1$s expulsó a %2$s - %1$s le quitó el veto a %2$s - %1$s vetó a %2$s - %1$s retiró la invitación de %2$s - %1$s cambió su avatar - %1$s estableció %2$s como su nombre público - %1$s cambió su nombre público de %2$s a %3$s - %1$s eliminó su nombre público (%2$s) - %1$s cambió el tema a: %2$s - %1$s cambió el nombre de la sala a: %2$s - %s realizó una llamada de vídeo. - %s realizó una llamada de voz. - %s contestó la llamada. - %s finalizó la llamada. - %1$s hizo visible el historial futuro de la sala para %2$s - todos los miembros de la sala, desde su invitación. - todos los miembros de la sala, desde el momento en que se unieron. - todos los miembros de la sala. - todos. - desconocido (%s). - %1$s ha activado la encriptación de Extremo-a-Extremo (%2$s) - %1$s solicitó una conferencia de VozIP - Conferencia de VozIP iniciada - Conferencia de VozIP finalizada - (el avatar también se cambió) - %1$s eliminó el nombre de la sala - %1$s eliminó el tema de la sala - %1$s actualizó su perfil %2$s - %1$s invitó a %2$s a unirse a la sala - %1$s aceptó la invitación para %2$s - ** No es posible descifrar: %s ** - El dispositivo emisor no nos ha enviado las claves para este mensaje. - - No se pudo redactar - No es posible enviar el mensaje - No se pudo cargar la imagen - - Error de red - Error de Matrix - - - - - Actualmente no es posible volver a unirse a una sala vacía. - Mensaje encriptado - - Dirección de correo electrónico - Número telefónico - %1$s envió una pegatina. - - Invitación de %s - Invitación a Sala - %1$s y %2$s - Sala vacía - - %1$s y 1 otro - %1$s y %2$d otros - - Mensaje eliminado - Mensaje eliminado por %1$s - Mensaje eliminado [motivo: %1$s] - Mensaje eliminado por %1$s [motivo: %2$s] - %1$s ha revocado la invitación a unirse a la sala para %2$s - Sincronización Inicial -\nImportando cuenta… - Sincronización Inicial: -\nImportando Salas - Sincronización Inicial: -\nImportando Comunidades - Sincronización Inicial: -\nImportando Datos de la Cuenta - Enviando mensaje… - Borrar cola de envío - %1$s ha invitado a %2$s. Razón: %3$s - %1$s te ha invitado. Razón: %2$s - %1$s se ha unido. Razón: %2$s - %1$s se ha ido. Razón: %2$s - %1$s ha rechadazo la invitación. Razón: %2$s - %1$s expulsó a %2$s. Razón: %3$s - %1$s ha baneado a %2$s. Razón: %3$s - %1$s ha aceptado la invitación para %2$s. Razón: %3$s - %1$s ha eliminado la dirección principal para esta sala. - %s ha actualizado la sala. - Sincronización Inicial: -\nImportando criptografía - Sincronización Inicial: -\nImportando Salas a las que te has unido - Sincronización Inicial: -\nImportando Salas a las que has sido invitada - Sincronización Inicial: -\nImportando Salas Abandonadas - Invitación de %1$s. Razón: %2$s - %1$s ha desbaneado a %2$s. Razón: %3$s - %1$s envió una invitación a %2$s para que se una a la sala. Razón: %3$s - %1$s revocó la invitación de %2$s para unirse a la sala. Razón: %3$s - %1$s ha retirado la invitación de %2$s. Razón: %3$s - - %1$s ha añadido %2$s como alias de esta sala. - %1$s ha añadido %2$s como alias de esta sala. - - - %1$s ha quitado %2$s como alias de esta sala. - %1$s ha quitado %2$s como alias de esta sala. - - %1$s ha establecido la dirección principal de esta sala a %2$s. - %1$s ha permitido que los invitados se unan a la sala. - %1$s ha impedido que los invitados se unan a la sala. - %1$s ha activado la encriptación extremo a extremo. - %1$s ha activado la encriptación de extremo a extremo (algoritmo no reconocido %2$s). - Enviaste una imagen. - Enviaste un sticker. - Tu invitación - %1$s creó la sala - Creaste la sala - Invitaste a %1$s - Te uniste a la Sala - Dejaste la Sala - Rechazaste la invitación - Tu pateaste a %1$s - Tu desbanaste a %1$s - Usted prohibió a %1$s - Retiró la invitación de %1$s\'s - Cambiaste tu avatar - Establece su nombre de visualización en %1$s - Cambiaste tu nombre para mostrar de %1$s a %2$s - Quitaste tu nombre para mostrar (era %1$s) - Cambiaste el tema a: %1$s - %1$s cambió el avatar de la sala - Cambiaste el avatar de la sala - Cambiaste el nombre de la sala a: %1$s - Hiciste una videollamada. - Hiciste una llamada de voz. - %s envió datos para configurar la llamada. - Enviaste datos para configurar la llamada. - Respondiste la llamada. - Terminaste la llamada. - Hiciste visible el futuro historial de la %1$s - Has activado la encriptación de Extremo-a-Extremo (%1$s) - Has actualizado esta sala. - Solicitaste una conferencia de VozIP - Quitaste el nombre de la sala - Quitaste el tema de la sala - %1$s eliminó el avatar de la sala - Quitaste el avatar de la sala - Actualizaste tu perfil %1$s - Enviaste una invitación a %1$s para unirse a la sala - Revocaste la invitación para que %1$s se una a la sala - Aceptaste la invitación para %1$s - %1$s agrego el widget %2$s - Agregaste el widget %1$s - %1$s eliminó el widget %2$s - Quitaste el widget %1$s - %1$s modifico el widget %2$s - Modificaste el widget %1$s - Administrador - Moderador - Por defecto - Personalizado (%1$d) - Personalizado - Cambiaste el nivel de permisos de %1$s. - %1$s cambió el nivel de permisos de %2$s. - %1$s de %2$s a %3$s - Tu invitación. Razón: %1$s - Invitaste a %1$s. Razón: %2$s - Te uniste a la sala. Razón: %1$s - Dejaste la sala. Razón: %1$s - Rechazaste la invitación. Razón: %1$s - Pateaste a %1$s. Motivo: %2$s - Has desactivado a %1$s. Motivo: %2$s - Prohibiste a %1$s. Motivo: %2$s - Enviaste una invitación a %1$s para unirse a la sala. Motivo: %2$s - Revocaste la invitación para que %1$s se una a la sala. Motivo: %2$s - Aceptaste la invitación para %1$s. Motivo: %2$s - Retiró la invitación de %1$s\'s. Motivo: %2$s - - Agregaste %1$s como dirección para esta sala. - Agregaste %1$s como direcciones para esta sala. - - - Quitaste %1$s como dirección para esta sala. - Quitaste %1$s como direcciones para esta sala. - - %1$s añadió %2$s y eliminó %3$s como alias para esta sala. - Agregaste %1$s y quitaste %2$s como direcciones para esta sala. - Estableciste la dirección principal de esta sala en %1$s. - Quitaste la dirección principal de esta sala. - Ha permitido que los invitados se unan a la sala. - Ha impedido que los invitados se unan a la sala. - Tu has activado la encriptación de Extremo-a-Extremo. - Has activado la encriptación de Extremo-a-Extremo (algoritmo %1$s no reconocido). - Has impedido que invitados se unan a la sala. - Has permitido a invitados unirse aquí. - Te has ido. Razón: %1$s - Has revocado la invitación de %1$s - Has invitado a %1$s - Has actualizado aquí. - Has hecho futuros mensajes visibles a %1$s - Te saliste de la sala - Te uniste - Creaste la conversación - %1$s ha impedido que invitados se unan a la sala. - %1$s ha permitido a invitados a unirse aquí. - %1$s se ha ido. Razón: %2$s - Tu te has unido. Razón: %1$s - %1$s se ha unido. Razón: %2$s - %1$s ha revocado la invitación de %2$s - %1$s ha invitado %2$s - %s ha actualizado aquí. - %1$s ha hecho futuros mensajes visibles a %2$s - %1$s ha salido de la sala - %1$s se ha unido - %1$s ha creado la conversación - Cambiaste el alias de esta sala. - %1$s cambió el alias de esta sala. - Cambiaste los alias principal y alternativos de esta sala. - %1$s cambió los alias principal y alternativos de esta sala. - Cambiaste los alias alternativos de esta sala. - %1$s cambió los alias alternativos de esta sala. - - Eliminaste el alias alternativo %1$s para esta sala. - Eliminaste los alias alternativos %1$s para esta sala. - - - %1$s eliminó el alias alternativo %2$s para esta sala. - %1$s eliminó los alias alternativos %2$s para esta sala. - - - Añadiste el alias alternativo %1$s para esta sala. - Añadiste los alias alternativos %1$s para esta sala. - - - %1$s añadió el alias alternativo %2$s para esta sala. - %1$s añadió los alias alternativos %2$s para esta sala. - - Sala vacía (%s) - - %1$s, %2$s, %3$s y %4$d otro - %1$s, %2$s, %3$s y %4$d otros - - %1$s, %2$s, %3$s y %4$s - %1$s, %2$s y %3$s - 🎉 Todos los servidores tienen prohibido participar! Esta sala ya no puede ser usada. - Sin cambios. - • Los servidores con literales IP coincidentes ahora están prohibidos. - • Los servidores con literales IP coincidentes ahora están permitidos. - • Los servidores con %s coincidentes se han eliminado de la lista de permitidos. - • Los servidores con %s coincidentes ahora están permitidos. - • Los servidores con %s coincidentes se han eliminado de la lista de baneos. - • Los servidores con %s coincidentes ahora están prohibidos. - Has cambiado la lista de control de acceso para esta sala. - %s ha cambiado la lista de control de acceso para esta sala. - • Los servidores con %s coincidentes están permitidos. - • Los servidores con %s coincidentes están prohibidos. - • Los servidores con literales IP coincidentes están prohibidos. - • Los servidores con literales IP coincidentes están permitidos. - Has fijado la lista de control de acceso para esta sala. - %s ha fijado la lista de control de acceso para esta sala. - Has modificado la videoconferencia - Videoconferencia modificada por %1$s - Has terminado la videoconferencia - Videoconferencia terminada por %1$s - Has empezado una videoconferencia - Videoconferencia empezada por %1$s - \ No newline at end of file diff --git a/matrix-sdk-android/src/main/res/values-et/strings.xml b/matrix-sdk-android/src/main/res/values-et/strings.xml deleted file mode 100644 index 2232e01ff4..0000000000 --- a/matrix-sdk-android/src/main/res/values-et/strings.xml +++ /dev/null @@ -1,266 +0,0 @@ - - - %1$s: %2$s - %1$s saatis pildi. - %1$s saatis kleepsu. - Kasutaja %s kutse - %1$s kutsus kasutajat %2$s - %1$s kutsus sind - %1$s liitus jututoaga - %1$s lahkus jututoast - %1$s lükkas tagasi kutse - %1$s müksas kasutajat %2$s - %1$s võttis tagasi kutse kasutajale %2$s - %1$s muutis oma avatari - %1$s määras oma kuvatavaks nimeks %2$s - %1$s muutis senise kuvatava nime %2$s uueks nimeks %3$s - %1$s eemaldas oma kuvatava nime (%2$s) - %1$s muutis uueks teemaks %2$s - %1$s muutis jututoa uueks nimeks %2$s - %s alustas videokõnet. - %s alustas häälkõnet. - %s vastas kõnele. - %s lõpetas kõne. - %1$s seadistas, et tulevane jututoa ajalugu on nähtav kasutajale %2$s - kõikidele jututoa liikmetele alates kutsumise hetkest. - kõikidele jututoa liikmetele alates liitumise hetkest. - kõikidele jututoa liikmetele. - kõikidele. - teadmata (%s). - %1$s lülitas sisse läbiva krüptimise (%2$s) - %s uuendas seda jututuba. - %1$s saatis VoIP konverentsi kutse - VoIP-konverents algas - VoIP-konverents lõppes - (samuti sai avatar muudetud) - %1$s eemaldas jututoa nime - %1$s eemaldas jututoa teema - Sõnum on eemaldatud - Sõnum on eemaldatud %1$s poolt - Sõnum on eemaldatud [põhjus: %1$s] - Sõnum on eemaldatud %1$s poolt [põhjus: %2$s] - %1$s uuendas oma profiili %2$s - %1$s saatis jututoaga liitumiseks kutse kasutajale %2$s - %1$s võttis tagasi jututoaga liitumise kutse kasutajalt %2$s - %1$s võttis vastu kutse %2$s nimel - ** Ei õnnestu dekrüptida: %s ** - Sõnumi saatja seade ei ole selle sõnumi jaoks saatnud dekrüptimisvõtmeid. - Ei saanud muuta sõnumit - Sõnumi saatmine ei õnnestunud - Pildi üleslaadimine ei õnnestunud - Võrguühenduse viga - Matrix\'i viga - Hetkel ei ole võimalik uuesti liituda tühja jututoaga. - Krüptitud sõnum - E-posti aadress - Telefoninumber - Kutse kasutajalt %s - Kutse jututuppa - %1$s ja %2$s - - %1$s ja üks muu - %1$s ja %2$d muud - - Tühi jututuba - Alglaadimine: -\nImpordin kontot… - Alglaadimine: -\nImpordin krüptoseadistusi - Alglaadimine: -\nImpordin jututubasid - Alglaadimine: -\nImpordin liitutud jututubasid - Alglaadimine: -\nImpordin kutsutud jututubasid - Alglaadimine: -\nImpordin lahkutud jututubasid - Alglaadimine: -\nImpordin kogukondi - Alglaadimine: -\nImpordin kontoandmeid - Saadan sõnumit… - Tühjenda saatmisjärjekord - Kasutaja %1$s kutse. Põhjus: %2$s - %1$s kutsus kasutajat %2$s. Põhjus: %3$s - %1$s kutsus sind. Põhjus: %2$s - %1$s liitus jututoaga. Põhjus: %2$s - %1$s lahkus jututoast. Põhjus: %2$s - %1$s lükkas kutse tagasi. Põhjus: %2$s - %1$s müksas välja kasutaja %2$s. Põhjus: %3$s - %1$s saatis kasutajale %2$s kutse jututoaga liitumiseks. Põhjus: %3$s - %1$s tühistas kasutajale %2$s saadetud kutse jututoaga liitumiseks. Põhjus: %3$s - %1$s võttis vastu kutse %2$s jututoaga liitumiseks. Põhjus: %3$s - %1$s võttis tagasi kasutajale %2$s saadetud kutse. Põhjus: %3$s - %1$s lülitas sisse läbiva krüptimise. - %1$s lülitas sisse läbiva krüptimise (tundmatu algoritm %2$s). - - %1$s lisas %2$s selle jututoa aadressiks. - %1$s lisas %2$s selle jututoa aadressideks. - - - %1$s eemaldas %2$s kui selle jututoa aadressi. - %1$s eemaldas %2$s selle jututoa aadresside hulgast. - - %1$s lisas %2$s ja eemaldas %3$s selle jututoa aadresside loendist. - %1$s seadistas selle jututoa põhiaadressiks %2$s. - %1$s eemaldas selle jututoa põhiaadressi. - %1$s lubas külalistel selle jututoaga liituda. - %1$s seadistas, et külalised ei või selle jututoaga liituda. - Kasutaja %1$s lõi jututoa - Sina saatsid pildi. - Sina saatsid kleepsu. - Sinu kutse - Sa lõid jututoa - Sina kutsusid kasutajat %1$s - Sina liitusid jututoaga - Sina lahkusid jututoast - Sina lükkasid kutse tagasi - Sina müksasid %1$s välja - %1$s taastas %2$s ligipääsu - Sina taastasid %1$s ligipääsu - %1$s keelas %2$s ligipääsu - Sina keelasid %1$s ligipääsu - Sina võtsid tagasi %1$s kutse - Sina muutsid oma tunnuspilti - Sina määrasid oma kuvatavaks nimeks %1$s - Sina muutsid senise kuvatava nime %1$s uueks nimeks %2$s - Sina eemaldasid oma kuvatava nime (oli %1$s) - Sina muutsid uueks teemaks %1$s - %1$s muutis jututoa tunnuspilti - Sina muutsid jututoa tunnuspilti - Sina muutsid jututoa uueks nimeks %1$s - Sa alustasid videokõnet. - Sa alustasid häälkõnet. - %s saatis info kõne algatamiseks. - Sa saatsid info kõne algatamiseks. - Sa vastasid kõnele. - Sa lõpetasid kõne. - Sa seadistasid, et tulevane jututoa ajalugu on nähtav kasutajale %1$s - Sa lülitasid sisse läbiva krüptimise (%1$s) - Sa uuendasid seda jututuba. - Sa algatasid VoIP rühmakõne - Sa eemaldasid jututoa nime - Sa eemaldasid jututoa teema - %1$s eemaldas jututoa tunnuspildi - Sa eemaldasid jututoa tunnuspildi - Sa uuendasid oma profiili %1$s - Sina saatsid kasutajale %1$s kutse jututoaga liitumiseks - Sina võtsid tagasi jututoaga liitumise kutse kasutajalt %1$s - Sina võtsid vastu kutse %1$s nimel - %1$s lisas %2$s vidina - Sina lisasid %1$s vidina - %1$s eemaldas %2$s vidina - Sina eemdaldasid %1$s vidina - %1$s muutis %2$s vidinat - Sa muutsid %1$s vidinat - Peakasutaja - Moderaator - Tavakasutaja - Kohandatud kasutajaõigused (%1$d) - Kohandatud õigused - Sina muutsid kasutaja %1$s õigusi. - %1$s muutis kasutaja %2$s õigusi. - %1$s õiguste muutus %2$s -> %3$s - Sinu kutse. Põhjus %1$s - Sina kutsusid kasutajat %1$s. Põhjus: %2$s - Sina liitusid jututoaga. Põhjus: %1$s - Sina lahkusid jututoast. Põhjus: %1$s - Sina lükkasid kutse tagasi. Põhjus: %1$s - Sina müksasid kasutaja %1$s välja. Põhjus: %2$s - %1$s taastas ligipääsu kasutajale %2$s. Põhjus: %3$s - Sina taastasid kasutaja %1$s ligipääsu. Põhjus: %2$s - %1$s keelas kasutaja %2$s ligipääsu. Põhjus: %3$s - Sina keelasid kasutaja %1$s ligipääsu. Põhjus: %2$s - Sina saatsid kasutajale %1$s kutse jututoaga liitumiseks. Põhjus: %2$s - Sina võtsid tagasi jututoaga liitumise kutse kasutajalt %1$s. Põhjus: %2$s - Sina võtsid vastu kutse %1$s nimel. Põhjus: %2$s - Sina võtsid tagasi kasutaja %1$s kutse. Põhjus: %2$s - - Sina lisasid %1$s selle jututoa aadressiks. - Sina lisasid %1$s selle jututoa aadressideks. - - - Sina eemaldasid %1$s, kui selle jututoa aadressi. - Sina eemaldasid %1$s selle jututoa aadresside hulgast. - - Sina lisasid %1$s selle jututoa aadressiks ning eemaldasid %2$s aadresside hulgast. - Sina seadistasid selle jututoa põhiaadressiks %1$s. - Sina eemaldasid selle jututoa põhiaadressi. - Sina lubasid külalistel selle jututoaga liituda. - Sina seadistasid, et külalised ei või selle jututoaga liituda. - Sa lülitasid sisse läbiva krüptimise. - Sa lülitasid sisse läbiva krüptimise (kasutusel on tundmatu algoritm %1$s). - Sina seadistasid, et külalised ei või selle jututoaga liituda. - %1$s seadistas, et külalised ei või selle jututoaga liituda. - Sina lubasid külalistel selle jututoaga liituda. - %1$s lubas külalistel selle jututoaga liituda. - Sina lahkusid jututoast. Põhjus: %1$s - %1$s lahkus jututoast. Põhjus: %2$s - Sina liitusid jututoaga. Põhjus: %1$s - %1$s liitus jututoaga. Põhjus: %2$s - Sina võtsid tagasi jututoaga liitumise kutse kasutajalt %1$s - %1$s võttis tagasi jututoaga liitumise kutse kasutajalt %2$s - Sina kutsusid kasutajat %1$s - %1$s kutsus kasutajat %2$s - Sa uuendasid seda jututuba. - %s uuendas seda jututuba. - Sina seadistasid, et tulevased jututoa sõnumid on nähtavad kasutajale %1$s - %1$s seadistas, et tulevased jututoa sõnumid on nähtavad kasutajale %2$s - Sina lahkusid jututoast - %1$s lahkus jututoast - Sina liitusid - %1$s liitus - Sina alustasid vestlust - %1$s alustas vestlust - Tühi jututuba (oli %s) - - %1$s, %2$s, %3$s ja %4$d muu - %1$s, %2$s, %3$s ja %4$d muud - - %1$s, %2$s, %3$s ja %4$s - %1$s, %2$s ja %3$s - 🎉 Kõikide serverite osalemine on keelatud! Seda jututuba ei saa enam kasutada. - Muudatusi ei ole. - • Nüüd on keelatud serverid, mille ip-aadress vastab mustrile. - • Nüüd on lubatud serverid, mille ip-aadress vastab mustrile. - • Server, mille nimes leidub %s, eemaldati lubatud serverite loendist. - • Nüüd on lubatud serverid, mille nimes leidub %s. - • Server, mille nimes leidub %s eemaldati keeluloendist. - • Keelatud on server, mille nimes leidub %s. - Sina muutsid selle jututoa jaoks serverite pääsuloendit. - %s muutis selle jututoa jaoks serverite pääsuloendit. - Sina kirjeldasid selle jututoa jaoks serverite pääsuloendi. - %s kirjeldas selle jututoa jaoks serverite pääsuloendi. - • Keelatud on serverid, mille ip-aadress vastab mustrile. - • Lubatud on serverid, mille ip-aadress vastab mustrile. - • Lubatud on serverid, mille nimes leidub %s. - • Keelatud on serverid, mille nimes leidub %s. - %1$s muutis selle jututoa aadresse. - Sa muutsid selle jututoa põhiaadressi ja täiendavaid aadresse. - %1$s muutis selle jututoa täiendavaid aadresse. - Sa muutsid selle jututoa täiendavaid aadresse. - %1$s muutis selle jututoa põhiaadressi ja täiendavaid aadresse. - - Sa eemaldasid selle jututoa täiendava aadressi %1$s. - Sa eemaldasid selle jututoa täiendavad aadressid %1$s. - - - %1$s eemaldas selle jututoa täiendava aadressi %2$s. - %1$s eemaldas selle jututoa täiendavad aadressid %2$s. - - - Sa lisasid sellele jututoale täiendava aadressi %1$s. - Sa lisasid sellele jututoale täiendavad aadressid %1$s. - - - %1$s lisas sellele jututoale täiendava aadressi %2$s. - %1$s lisas sellele jututoale täiendavad aadressid %2$s. - - Sa muutsid selle jututoa aadresse. - Sina muutsid videokoosolekut - Sina lõpetasid videokoosoleku - %1$s lõpetas videokoosoleku - Sina algatasid videokoosoleku - %1$s algatas videokoosoleku - %1$s muutis videokoosolekut - \ No newline at end of file diff --git a/matrix-sdk-android/src/main/res/values-eu/strings.xml b/matrix-sdk-android/src/main/res/values-eu/strings.xml deleted file mode 100644 index 778761808e..0000000000 --- a/matrix-sdk-android/src/main/res/values-eu/strings.xml +++ /dev/null @@ -1,141 +0,0 @@ - - - - %1$s: %2$s - %1$s erabiltzaileak irudi bat bidali du. - - %s erabiltzailearen gonbidapena - %1$s erabiltzaileak %2$s gonbidatu du - %1$s erabiltzaileak gonbidatu zaitu - %1$s gelara elkartu da - %1$s gelatik atera da - %1$s erabiltzaileak gonbidapena baztertu du - %1$s erabiltzaileak %2$s kanporatu du - %1$s erabiltzaileak debekua kendu dio %2$s erabiltzaileari - %1$s erabiltzaileak %2$s debekatu du - %1$s erabiltzaileak %2$s erabiltzailearen gonbidapena atzera bota du - %1$s erabiltzaileak abatarra aldatu du - %1$s erabiltzaileak bere pantaila-izena aldatu du beste honetara: %2$s - %1$s erabiltzaileak bere pantaila-izena aldatu du, honetatik: %2$s honetara: %3$s - %1$s erabiltzaileak bere pantaila-izena kendu du (%2$s) - %1$s erabiltzaileak mintzagaia honetara aldatu du: %2$s - %1$s erabiltzaileak gelaren izena honetara aldatu du: %2$s - %s erabiltzaileak bideo deia hasi du. - %s erabiltzaileak ahots deia hasi du. - %s erabiltzaileak deia erantzun du. - %s erabiltzaileak deia amaitu du. - %1$s erabiltzaileak gelaren historiala ikusgai jarri du hauentzat: %2$s - gelako kide guztiak, gonbidatu zitzaienetik. - gelako kide guztiak, elkartu zirenetik. - gelako kide guztiak. - edonor. - ezezaguna (%s). - %1$s erabiltzaileak muturretik muturrera zifratzea aktibatu du (%2$s) - - %1$s erabiltzaileak VoIP konferentzia bat eskatu du - VoIP konferentzia hasita - VoIP konferentzia amaituta - - (abatarra ere aldatu da) - %1$s erabiltzaileak gelaren izena kendu du - %1$s erabiltzaileak gelaren mintzagaia kendu du - %1$s erabiltzaileak bere profila eguneratu du %2$s - %1$s erabiltzaileak gelara elkartzeko gonbidapen bat bidali dio %2$s erabiltzaileari - %1$s erabiltzaileak %2$s gelarako gonbidapena onartu du - - ** Ezin izan da deszifratu: %s ** - Igorlearen gailuak ez dizkigu mezu honetarako gakoak bidali. - - Ezin izan da kendu - Ezin izan da mezua bidali - - Huts egin du irudia igotzean - - Sare errorea - Matrix errorea - - Ezin da oraingoz hutsik dagoen gela batetara berriro sartu. - - Zifratutako mezua - - E-mail helbidea - Telefono zenbakia - - %1$s erabiltzaileak eranskailu bat bidali du. - - %s gelarako gonbidapena - Gela gonbidapena - %1$s eta %2$s - Gela hutsa - - - %1$s eta beste bat - %1$s eta beste %2$d - - - - Mezua kendu da - %1$s erabiltzaileak mezua kendu du - Mezua kendu da [arrazoia: %1$s] - %1$s erabiltzaileak mezua kendu du [arrazoia: %2$s] - - Hasierako sinkronizazioa: -\nKontua inportatzen… - Hasierako sinkronizazioa: -\nZifratzea inportatzen - Hasierako sinkronizazioa: -\nGelak inportatzen - Hasierako sinkronizazioa: -\nElkartutako gelak inportatzen - Hasierako sinkronizazioa: -\nGonbidatutako gelak inportatzen - Hasierako sinkronizazioa: -\nUtzitako gelak inportatzen - Hasierako sinkronizazioa: -\nKomunitateak inportatzen - Hasierako sinkronizazioa: -\nKontuaren datuak inportatzen - - %s erabiltzaileak gela hau eguneratu du. - - Mezua bidaltzen… - Garbitu bidalketa-ilara - - %1$s erabiltzaileak %2$s gelara elkartzeko gonbidapena indargabetu du - %1$s erabiltzailearen gonbidapena. Arrazoia: %2$s - %1$s erabiltzaileak %2$s gonbidatu du. Arrazoia: %3$s - %1$s erabiltzaileak gonbidatu zaitu. Arrazoia: %2$s - %1$s gelara elkartu da. Arrazoia: %2$s - %1$s gelatik atera da. Arrazoia: %2$s - %1$s erabiltzaileak gonbidapena baztertu du. Arrazoia: %2$s - %1$s erabiltzaileak %2$s kanporatu du. Arrazoia: %3$s - %1$s erabiltzaileak debekua kendu dio %2$s erabiltzaileari. Arrazoia: %3$s - %1$s erabiltzaileak %2$s debekatu du. Arrazoia: %3$s - "%1$s erabiltzaileak gelara elkartzeko gonbidapen bat bidali dio %2$s erabiltzaileari. Arrazoia: %3$s" - "%1$s erabiltzaileak %2$s gelara elkartzeko gonbidapena indargabetu du. Arrazoia: %3$s" - "%1$s erabiltzaileak %2$s gelarako gonbidapena onartu du. Arrazoia: %3$s" - "%1$s erabiltzaileak %2$s erabiltzailearen gonbidapena indargabetu du. Arrazoia: %3$s" - - - %1$s erabiltzaileak %2$s gehitu du gela honen helbide gisa. - %1$s erabiltzaileak %2$s gehitu ditu gela honen helbide gisa. - - - - %1$s erabiltzaileak %2$s kendu du gela honen helbide gisa. - %1$s erabiltzaileak %3$s kendu ditu gela honen helbide gisa. - - - %1$s erabiltzaileak %2$s gehitu %3$s eta kendu ditu gela honen helbide gisa. - - %1$s erabiltzaileak %2$s ezarri du gela honen helbide nagusi gisa. - %1$s erabiltzaileak gela honen helbide nagusia kendu du. - - %1$k gonbidatuak gelara sartzea onartu du. - %1%k gonbidatuak gelara sartzea galerazi du. - - %1$s erabiltzaileak muturretik muturrerako zifratzea gaitu du. - %1$s erabiltzaileak muturretik muturrerako zifratzea gaitu du. (%2$s algoritmo ezezaguna). - - %1$s erabiltzaileak gela sortu du - diff --git a/matrix-sdk-android/src/main/res/values-fa/strings.xml b/matrix-sdk-android/src/main/res/values-fa/strings.xml deleted file mode 100644 index dbbb890b01..0000000000 --- a/matrix-sdk-android/src/main/res/values-fa/strings.xml +++ /dev/null @@ -1,221 +0,0 @@ - - - %1$s: %2$s - %1$s تصویری فرستاد. - %1$s برچسبی فرستاد. - دعوت %s - ‫%1$s، %2$s را دعوت کرد - %1$s دعوتتان کرد - %1$s به اتاق پیوست - %1$s اتاق را ترک کرد - %1$s دعوت را رد کرد - %1$s، %2$s را اخراج کرد - %1$s، انسداد %2$s را رفع کرد - %1$s، %2$s را مسدود کرد - %1$s دعوت %2$s را نپذیرفت - %1$s تصویرش را عوض کرد - %1$s نام نمایشی خود را به %2$s تنظیم کرد - %1$s نام نمایشیش را از %2$s به %3$s تغییر داد - %1$s نام نمایشیش (%2$s) را پاک کرد - %1$s موضوع را به %2$s تغییر داد - %1$s نام اتاق را به %2$s تغییر داد - %s یک تماس تصویری برقرار کرد. - %s یک تماس صوتی برقرار کرد. - %s تماس را پاسخ داد. - %s به تماس پایان داد. - %1$s تاریخچهٔ آیندهٔ اتاق را برای %2$s نمایان کرد - همهٔ اعضای اتاق، از زمان دعوت شدنشان. - همهٔ اعضای اتاق، از زمان پیوستنشان. - همهٔ اعضای اتاق. - هرکسی. - ناشناخته (%s). - %1$s رمزنگاری سرتاسری را روشن کرد (%2$s) - %s این اتاق را ارتقا داد. - %1$s درخواست یک گردهمایی صوتی داد - گردهمایی صوتی آغاز شد - گردهمایی صوتی پایان یافت - (تصویر هم عوض شد) - %1$s نام اتاق را پاک کرد - %1$s موضوع اتاق را پاک کرد - پیام برداشته شد - پیام به دست %1$s برداشته شد - پیام برداشته شد [دلیل: %1$s] - پیام به دست %1$s برداشته شد [دلیل: %2$s] - %1$s دعوتی برای پیوستن %2$s به اتاق فرستاد - %1$s دعوت پیوستن به اتاق %2$s را باطل کرد - %1$s دعوت برای %2$s را پذیرفت - ** ناتوان در رمزگشایی: %s ** - دستگاه فرستنده، کلیدهای این پیام را برایمان نفرستاده است. - ناتوان در فرستادن پیام - شکست در بارگذاری تصویر - خطای شبکه - خطای ماتریکس - در حال حاضر امکان بازپیوست به اتاقی خالی وجود ندارد‌‌. - پیام رمزنگاری شده - نشانی رایانامه - شماره تلفن - دعوت از %s - دعوت اتاق - %1$s و %2$s - - %1$s و ۱ نفر دیگر - %1$s و %2$d نفر دیگر - - اتاق خالی - همگام‌سازی نخستین: -\nدر حال درون‌ریزی حساب… - همگام‌سازی نخستین: -\nدر حال درون‌ریزی رمزنگاری - همگام‌سازی نخستین: -\nدر حال درون‌ریزی اتاق‌ها - همگام‌سازی نخستین: -\nدر حال درون‌ریزی اتاق‌های پیوسته - همگام‌سازی نخستین: -\nدر حال درون‌ریزی اتاق‌های دعوت‌شده - همگام‌سازی نخستین: -\nدر حال درون‌ریزی اتاق‌های ترک‌شده - همگام‌سازی نخستین: -\nدر حال درون‌ریزی انجمن‌ها - همگام‌سازی نخستین: -\nدر حال درون‌ریزی داده‌های حساب - در حال فرستادن پیام… - پاک‌سازی صفِ در حال ارسال - دعوت %1$s. دلیل: %2$s - %1$s، %2$s را دعوت کرد. دلیل: %3$s - %1$s دعوتتان کرد. دلیل: %2$s - %1$s به اتاق پیوست. دلیل: %2$s - %1$s اتاق را ترک کرد. دلیل: %2$s - %1$s دعوت را رد کرد. دلیل: %2$s - %1$s، %2$s را اخراج کرد. دلیل: %3$s - %1$s انسداد %2$s را رفع کرد. دلیل: %3$s - %1$s، %2$s را مسدود کرد. دلیل: %3$s - %1$s دعوتی برای پیوستن %2$s به اتاق فرستاد. دلیل: %3$s - %1$s دعوت %2$s برای پیوستن به اتاق را باطل کرد. دلیل: %3$s - %1$s دعوت برای %2$s را پذیرفت. دلیل: %3$s - %1$s دعوت %2$s را نپذیرفت. دلیل: %3$s - - %1$s، %2$s را به عنوان نشانی‌ای برای این اتاق افزود. - %1$s، %2$s را به عنوان نشانی‌هایی برای این اتاق افزود. - - - %1$s، %2$s را به عنوان نشانی‌ای برای این اتاق پاک کرد. - %1$s، %3$s را به عنوان نشانی‌هایی برای این اتاق پاک کرد. - - %1$s برای نشانی این اتاق، %2$s را افزود و %3$s را پاک کرد. - %1$s نشانی اصلی این اتاق را به %2$s تنظیم کرد. - %1$s نشانی اصلی را برای این اتاق پاک کرد. - %1$s اجازه داد میمهانان به گروه بپیوندند. - %1$s جلوی پیوستن میمهانان به گروه را گرفت. - %1$s رمزنگاری سرتاسری را روشن کرد. - %1$s رمزنگاری سرتاسری را روشن کرد (الگوریتم تشخیص‌داده‌نشده %2$s ). - %1$s اتاق را ایجاد کرد - %1$s نمایه‌اش را به‌روز کرد %2$s - نمی‌توان ویرایش کرد - تصویری فرستادید. - برچسبی فرستادید. - دعوتتان - اتاق را ایجاد کردید - از %1$s دعوت کردید - به اتاق پیوستید - اتاق را ترک کردید - دعوت را رد کردید - %1$s را اخراج کردید - تحریم %1$s را برداشتید - %1$s را تحریم کردید - دعوت %1$s را پس‌گرفتید - آواتارتان را عوض کردید - نام نمایشیتان را به %1$s تغییر دادید - نام نمایشیتان را از %1$s به %2$s تغییر دادید - نام نمایشیتان را برداشتید (%1$s بود) - موضوع را به %1$s تغییر دادید - %1$s آواتار اتاق را تغییر داد - آواتار اتاق را تغییر دادید - نام اتاق را به %1$s تغییر دادید - تماس تصویری گرفتید. - تماس صوتی گرفتید. - %s برای برپایی تماس، داده فرستاد. - برای برپایی تماس، داده فرستادید. - تماس را پاسخ دادید. - به تماس پایان دادید. - تاریخچهٔ آتی اتاق را برای %1$s نمایان کردید - رمزنگاری سرتاسری را روشن کردید (%1$s) - این اتاق را ارتقا دادید. - دارخواست کنفرانس ویپ دادید - نام اتاق را برداشتید - موضوع اتاق را برداشتید - %1$s آواتار اتاق را برداشت - آواتار اتاق را برداشتید - نمایه‌تان را به‌روز کردید %1$s - برای %1$s دعوت پیوستن به اتاق فرستادید - دعوت پیوستن %1$s به اتاق را پس گرفتید - دعوت برای %1$s را پذیرفتید - %1$s ابزارک %2$s را افزود - ابزارک %1$s را افزودید - %1$s ابزارک %2$s را برداشت - ابزارک %1$s را برداشتید - %1$s ابزارک %2$s را دستکاری کرد - ابزارک %1$s را دستکاری کردید - مدیر - ناظم - پیش‌گزیده - سفارشی (%1$d) - سفارشی - سطح قدرت %1$s را تغییر دادید. - %1$s سطح قدرت %2$s را تغییر داد. - %1$s از %2$s به %3$s - دعوتتان. دلیل: %1$s - %1$s را دعوت کردید. دلیل: %2$s - به اتاق پیوستید. دلیل: %1$s - اتاق را ترک کردید. دلیل: %1$s - دعوت را رد کردید. دلیل: %1$s - %1$s را اخراج کردید. دلیل: %2$s - تحریم %1$s را برداشتید. دلیل: %2$s - %1$s را تحریم کردید. دلیل: %2$s - دعوتی به %1$s برای پیوستن به اتاق فرستادید. دلیل: %2$s - دعوت %1$s برای پیوستن به اتاق را پس گرفتید. دلیل: %2$s - دعوت برای %1$s را پذیرفتید. دلیل: %2$s - دعوت %1$s را رد کردید. دلیل: %2$s - - نشانی %1$s را به این اتاق افزودید. - نشانی‌های %1$s را به این اتاق افزودید. - - - نشانی %1$s را از این اتاق برداشتید. - نشانی‌های %1$s را از این اتاق برداشتید. - - نشانی %1$s ار افزوده و %2$s را از این اتاق برداشتید. - نشانی اصلی این اتاق را به %1$s تنظیم کردید. - نشانی اصلی این اتاق را برداشتید. - به میهمانان اجازهٔ پیوستن به گروه دادید. - میمهانان را از پیوستن به گروه بازداشتید. - رمزنگاری سرتاسری را روشن کردید. - رمزنگاری سرتاسری را روشن کردید (الگوریتم ناشناخته %1$s). - مهمان‌ها را از پیوستن به اتاق بازداشتید. - %1$s مهمان‌ها را از پیوستن به اتاق بازداشت. - به مهمان‌ها اجازه دادید به این‌جا بپیوندند. - %1$s به مهمان‌ها اجازه داد به این‌جا بپیوندند. - رفتید. دلیل: %1$s - %1$s رفت. دلیل: %2$s - پیوستید. دلیل: %1$s - %1$sپیوست. دلیل: %2$s - دعوت %1$s را پس گرفتید - %1$s دعوت %2$s را پس گرفت - %1$s را دعوت کردید - %1$s، %2$s را دعوت کرد - این‌جا را ارتقا دادید. - %s این‌جا را ارتقا داد. - پیام‌های آینده را برای %1$s نمایان کردید - %1$s پیام‌های آینده را برای %2$s نمایان کرد - اتاق را ترک کردید - %1$s اتاق را ترک کرد - پیوستید - %1$s پیوست - گفت‌وگو را ایجاد کردید - %1$s گفت‌وگو را ایجاد کرد - - %1$s، %2$s، %3$s و %4$d نفر دیگر - %1$s، %2$s، %3$s و %4$d نفر دیگر - - %1$s، %2$s و %3$s - %1$s، %2$s، %3$s و %4$s - \ No newline at end of file diff --git a/matrix-sdk-android/src/main/res/values-fi/strings.xml b/matrix-sdk-android/src/main/res/values-fi/strings.xml deleted file mode 100644 index 044cbd3633..0000000000 --- a/matrix-sdk-android/src/main/res/values-fi/strings.xml +++ /dev/null @@ -1,212 +0,0 @@ - - - %1$s lähetti kuvan. - Käyttäjän %s kutsu - %1$s kutsui käyttäjän %2$s - %1$s kutsui sinut - %1$s liittyi huoneeseen - %1$s poistui huoneesta - %1$s hylkäsi kutsun - %1$s poisti käyttäjän %2$s - %1$s poisti porttikiellon käyttäjältä %2$s - %1$s antoi porttikiellon käyttäjälle %2$s - %1$s veti takaisin kutsun käyttäjälle %2$s - %1$s vaihtoi profiilikuvaansa - %1$s asetti näyttönimekseen %2$s - %1$s muutti näyttönimensä nimestä %2$s nimeen %3$s - %1$s poisti näyttönimensä (%2$s) - %1$s vaihtoi aiheeksi: %2$s - %1$s vaihtoi huoneen nimeksi %2$s - %s soitti videopuhelun. - %s soitti äänipuhelun. - %s vastasi puheluun. - %s lopetti puhelun. - %1$s muutti tulevan huonehistorian näkyväksi seuraaville: %2$s - kaikki huoneen jäsenet, kutsumisestaan asti. - kaikki huoneen jäsenet, liittymisestään asti. - kaikki huoneen jäsenet. - kaikki. - tuntematon (%s). - %1$s otti käyttöön osapuolten välisen salauksen (%2$s) - %1$s lähetti VoIP-konferenssipyynnön - VoIP-konferenssi alkoi - VoIP-konferenssi päättyi - (myös kuva vaihdettiin) - %1$s poisti huoneen nimen - %1$s poisti huoneen aiheen - %1$s päivitti profiilinsa %2$s - %1$s lähetti liittymiskutsun huoneeseen käyttäjälle %2$s - %1$s hyväksyi kutsun käyttäjän %2$s puolesta - ** Salauksen purku epäonnistui: %s ** - Lähettäjän laite ei ole lähettänyt avaimia tähän viestiin. - Viestin lähetys epäonnistui - Kuvan lataaminen epäonnistui - Verkkovirhe - Matrix-virhe - Tällä hetkellä ei ole mahdollista liittyä uudelleen tyhjään huoneeseen. - Salattu viesti - Sähköpostiosoite - Puhelinnumero - Takaisinveto epäonnistui - %1$s: %2$s - - Kutsu käyttäjältä %s - - Huonekutsu - %1$s ja %2$s - Tyhjä huone - %1$s lähetti tarran. - - %1$s ja yksi muu - %1$s ja %2$d muuta - - Viesti poistettu - %1$s poisti viestin - Viesti poistettu [syy: %1$s] - %1$s poisti viestin [syy: %2$s] - Alkusynkronointi: -\nTuodaan tiliä… - Alkusynkronointi: -\nTuodaan kryptoa - Alkusynkronointi: -\nTuodaan huoneita - Alkusynkronointi: -\nTuodaan liityttyjä huoneita - Alkusynkronointi: -\nTuodaan kutsuttuja huoneita - Alkusynkronointi: -\nTuodaan poistuttuja huoneita - Alkusynkronointi: -\nTuodaan yhteisöjä - Alkusynkronointi: -\nTuodaan tilin tietoja - %s päivitti tämän huoneen. - Lähetetään viestiä… - Tyhjennä lähetysjono - %1$s veti takaisin käyttäjän %2$s liittymiskutsun huoneeseen - Henkilön %1$s kutsu. Syy: %2$s - %1$s kutsui henkilön %2$s. Syy: %3$s - %1$s kutsui sinut. Syy: %2$s - %1$s liittyi huoneeseen. Syy: %2$s - %1$s poistui huoneesta. Syy: %2$s - %1$s hylkäsi kutsun. Syy: %2$s - %1$s poisti käyttäjän %2$s huoneesta. Syy: %3$s - %1$s poisti porttikiellon käyttäjältä %2$s. Syy: %3$s - %1$s antoi porttikiellon käyttäjälle %2$s. Syy: %3$s - %1$s lähetti kutsun liittyä huoneeseen käyttäjälle %2$s. Syy: %3$s - %1$s kumosi kutsun liittyä huoneeseen käyttäjälle %2$s. Syy: %3$s - %1$s hyväksyi kutsun liityäkseen huoneeseen %2$s. Syy: %3$s - %1$s veti takaisin käyttäjän %2$s kutsun. Syy: %3$s - - %1$s lisäsi tälle huoneelle osoitteen %2$s. - %1$s lisäsi tälle huoneelle osoitteet %2$s. - - - %1$s poisti tältä huoneelta osoitteen %2$s. - %1$s poisti tältä huoneelta osoitteet %3$s. - - %1$s lisäsi tälle huoneelle osoitteen %2$s ja poisti osoitteen %3$s. - %1$s asetti tämän huoneen pääosoitteeksi %2$s. - %1$s poisti tämän huoneen pääosoitteen. - %1$s salli vieraiden liittyä huoneeseen. - %1$s esti vieraita liittymästä huoneeseen. - %1$s laittoi päälle osapuolten välisen salauksen. - %1$s laittoi päälle osapuolisten välisen salauksen (tuntematon algoritmi %2$s). - Hyväksyit käyttäjän %1$s kutsun. Syy: %2$s - Peruutit kutsun liittyä huoneeseen käyttäjältä %1$s. Syy: %2$s - Lähetit kutsun liittyä huoneeseen käyttäjälle %1$s. Syy: %2$s - Estit käyttäjän %1$s. Syy: %2$s - Peruutit eston %1$s. Syy: %2$s - Poistit käyttäjän %1$s. Syy: %2$s - Hylkäsit kutsun. Syy: %1$s - Lähdit. Syy: %1$s - %1$s lähti. Syy: %2$s - Poistuit huoneesta. Syy: %1$s - Liityit. Syy: %1$s - %1$s liittyi. Syy: %2$s - Liityit ryhmään. Syy: %1$s - Kutsuit %1$s. Syy: %2$s - Kutsusi. Syy: %1$s - Tyhjä huone (oli %s) - %1$s, %2$s, %3$s ja %4$s - %1$s, %2$s ja %3$s - Mukautettu - Mukautettu (%1$d) - Oletus - Valvoja - Ylläpitäjä - %1$s muutti %2$s sovelmaa - Poistit %1$s sovelman - %1$s poisti %2$s sovelman - Lisäsit %1$s sovelman - %1$s lisäsi %2$s sovelman - Muutit %1$s sovelmaa - Hyväksyit kutsun henkilölle %1$s - Peruutit kutsun henkilöltä %1$s - %1$s peruutti kutsun henkilöltä %2$s - Peruutit henkilön %1$s kutsun liittyä ryhmään - Kutsuit %1$s - %1$s kutsui %2$s - Lähetit henkilölle %1$s kutsun liittyä huoneeseen - Päivitit profiilisi %1$s - Poistit huoneen profiilikuvan - %1$s poisti huoneen profiilikuvan - Poistit huoneen aiheen - Poistit huoneen nimen - Pyysit ryhmäpuhelua - 🎉 Kaikki palvelimet on estetty osallistumasta! Tätä huonetta ei voi enää käyttää. - Ei muutosta. - • Palvelimet jotka %s poistettiin estolistalta. - • Palvelimen haku %s on nyt kielletty. - • Palvelimen haku %s on sallittu. - • Palvelimen haku %s on kielletty. - %1$s on estänyt vieraita liittymästä huoneeseen. - Estit vieraita liittymästä huoneeseen. - Annoit vieraille luvan liittyä huoneeseen. - Annoit vieraille luvan liittyä tänne. - %1$s on antanut vieraille luvan liittyä tänne. - Poistit tämän huoneen pääosoitteen. - Otit käyttöön päästä päähän -salauksen. - Olet estänyt vieraiden liittymisen huoneeseen. - Otit päästä päähän -salauksen käyttöön (tuntematon algoritmi %1$s). - Päivitit tässä. - %s päivitti täällä. - Päivitit tämän huoneen. - Otit päästä päähän -salauksen käyttöön (%1$s) - Teit tulevista viesteistä näkyviä käyttäjälle %1$s - %1$s teki tulevista viesteistä näkyviä käyttäjälle %2$s - Teit tulevan huonehistorian näkyväksi %1$s - Lopetit puhelun. - Vastasit puheluun. - Lähetit tietoja puhelun valmistelemiseksi. - %s lähetti tietoja puhelun valmistelemiseksi. - Aloitit äänipuhelun. - Aloitit videopuhelun. - Vaihdoit huoneen nimeksi: %1$s - Vaihdoit huoneen profiilikuvaa - %1$s muutti huoneen profiilikuvaa - Vaihdoit aiheen: %1$s - Poistit nimimerkkisi (se oli %1$s) - Vaihdoit nimimerkkisi %1$s nimeen %2$s - Asetit nimimerkiksesi %1$s - Kutsusi - Vaihdoit profiilikuvaasi - Peruutit %1$sn kutsun - Estit %1$s - Poistit eston %1$s - Poistit %1$s - Hylkäsit kutsun - Poistuit huoneesta - %1$s poistui huoneesta - Poistuit huoneesta - Liityit - %1$s liittyi - Liityit huoneeseen - Kutsuit %1$s - Loit keskustelun - %1$s loi keskustelun - Loit huoneen - %1$s loi huoneen - Lähetit tarran. - Lähetit kuvan. - \ No newline at end of file diff --git a/matrix-sdk-android/src/main/res/values-fr/strings.xml b/matrix-sdk-android/src/main/res/values-fr/strings.xml deleted file mode 100644 index 4f0c1fa2b1..0000000000 --- a/matrix-sdk-android/src/main/res/values-fr/strings.xml +++ /dev/null @@ -1,238 +0,0 @@ - - - %1$s : %2$s - %1$s a envoyé une image. - invitation de %s - %1$s a invité %2$s - %1$s vous a invité - %1$s a rejoint le salon - %1$s est parti du salon - %1$s a rejeté l’invitation - %1$s a expulsé %2$s - %1$s a révoqué l\'exclusion de %2$s - %1$s a exclus %2$s - %1$s a annulé l’invitation de %2$s - %1$s a changé d’avatar - %1$s a modifié son nom affiché en %2$s - %1$s a modifié son nom affiché de %2$s en %3$s - %1$s a supprimé son nom affiché (précédemment %2$s) - %1$s a changé le sujet en : %2$s - %1$s a changé le nom du salon en : %2$s - %s a passé un appel vidéo. - %s a passé un appel vocal. - %s a répondu à l’appel. - %s a raccroché. - %1$s a rendu l’historique futur du salon visible pour %2$s - tous les membres du salon, depuis qu’ils ont été invités. - tous les membres du salon, depuis qu’ils l’ont rejoint. - tous les membres du salon. - n’importe qui. - inconnu (%s). - %1$s a activé le chiffrement de bout en bout (%2$s) - %1$s a demandé une téléconférence VoIP - Téléconférence VoIP démarrée - Téléconférence VoIP terminée - (l’avatar a aussi changé) - %1$s a supprimé le nom du salon - %1$s a supprimé le sujet du salon - %1$s a mis à jour son profil %2$s - %1$s a envoyé une invitation à %2$s pour rejoindre le salon - %1$s a accepté l’invitation pour %2$s - ** Déchiffrement impossible : %s ** - L’appareil de l’expéditeur ne nous a pas envoyé les clés pour ce message. - Effacement impossible - Envoi du message impossible - L’envoi de l’image a échoué - Erreur de réseau - Erreur de Matrix - Il est impossible pour le moment de revenir dans un salon vide. - Message chiffré - Adresse e-mail - Numéro de téléphone - %1$s a envoyé un sticker. - Invitation de %s - Invitation au salon - Salon vide - %1$s et %2$s - - %1$s et 1 autre - %1$s et %2$d autres - - Message supprimé - Message supprimé par %1$s - Message supprimé [motif : %1$s] - Message supprimé par %1$s [motif : %2$s] - Synchronisation initiale : -\nImportation du compte… - Synchronisation initiale : -\nImportation de la cryptographie - Synchronisation initiale : -\nImportation des salons - Synchronisation initiale : -\nImportation des salons que vous avez rejoints - Synchronisation initiale : -\nImportation des salons où vous avez été invités - Synchronisation initiale : -\nImportation des salons que vous avez quittés - Synchronisation initiale : -\nImportation des communautés - Synchronisation initiale : -\nImportation des données du compte - %s a mis à niveau ce salon. - Envoi du message… - Vider la file d’envoi - %1$s a révoqué l’invitation pour %2$s à rejoindre le salon - Invitation de %1$s. Raison : %2$s - %1$s a invité %2$s. Raison : %3$s - %1$s vous a invité. Raison : %2$s - %1$s a rejoint le salon. Raison : %2$s - %1$s est parti du salon. Raison : %2$s - %1$s a refusé l’invitation. Raison : %2$s - %1$s a expulsé %2$s. Raison : %3$s - %1$s a révoqué l\'exclusion de %2$s. Raison : %3$s - %1$s a exclus %2$s. Raison : %3$s - %1$s a envoyé une invitation à %2$s pour rejoindre le salon. Raison : %3$s - %1$s a révoqué l’invitation de %2$s à rejoindre le salon. Raison : %3$s - %1$s a accepté l’invitation pour %2$s. Raison : %3$s - %1$s a annulé l’invitation de %2$s. Raison : %3$s - - %1$s a ajouté %2$s comme adresse pour ce salon. - %1$s a ajouté %2$s comme adresses pour ce salon. - - - %1$s a supprimé %2$s comme adresse pour ce salon. - %1$s a supprimé %3$s comme adresses pour ce salon. - - %1$s a ajouté %2$s et supprimé %3$s comme adresses pour ce salon. - %1$s a défini %2$s comme adresse principale pour ce salon. - %1$s a supprimé l’adresse principale de ce salon. - %1$s a autorisé les visiteurs à rejoindre le salon. - %1$s a empêché les visiteurs de rejoindre le salon. - %1$s a activé le chiffrement de bout en bout. - %1$s a activé le chiffrement de bout en bout (algorithme %2$s inconnu). - %1$s a créé le salon - Vous avez mis cet endroit à niveau. - %s a mis cet endroit à niveau. - Vous avez mis à niveau ce salon. - Vous avez expulsé %1$s - Vous avez rejeté l\'invitation - Vous avez quitté le salon - %1$s a quitté le salon - Vous avez quitté le salon - Vous avez rejoint le salon - %1$s a rejoint le salon - Vous avez rejoint le salon - Vous avez invité %1$s - Vous avez créé la discussion - %1$s a créé la discussion - Vous avez créé le salon - Votre invitation - Vous avez envoyé un autocollant. - Vous avez envoyé une image. - Vous avez activé le chiffrement de bout en bout (algorithme %1$s inconnu). - Vous avez activé le chiffrement de bout en bout. - Vous avez empêché les visiteurs de rejoindre le salon. - %1$s a empêché les visiteurs de rejoindre le salon. - Vous avez empêché les visiteurs de rejoindre le salon. - Vous avez autorisé les visiteurs à venir ici. - %1$s a autorisé les visiteurs à venir ici. - Vous avez autorisé les visiteurs à rejoindre le salon. - Vous avez supprimé l’adresse principale de ce salon. - Vous avez défini %1$s comme adresse principale pour ce salon. - Vous avez ajouté %1$s et supprimé %2$s comme adresses pour ce salon. - - Vous avez supprimé %1$s comme adresse pour ce salon. - Vous avez supprimé %1$s comme adresses pour ce salon. - - - Vous avez ajouté %1$s comme adresse pour ce salon. - Vous avez ajouté %1$s comme adresses pour ce salon. - - Vous avez annulé l’invitation de %1$s. Raison : %2$s - Vous avez accepté l’invitation pour %1$s. Raison : %2$s - Vous avez révoqué l’invitation de %1$s à rejoindre le salon. Raison : %2$s - Vous avez envoyé une invitation à %1$s pour rejoindre le salon. Raison : %2$s - Vous avez refusé l’invitation. Raison : %1$s - Vous êtes parti. Raison : %1$s - %1$s est parti. Raison : %2$s - Vous êtes parti du salon. Raison : %1$s - %1$s rejoint. Raison : %2$s - Vous avez rejoint. Raison : %1$s - Vous avez rejoint le salon. Raison : %1$s - Vous avez invité %1$s. Raison : %2$s - Votre invitation. Raison %1$s - %1$s de %2$s à %3$s - %1$s a modifié le niveau de pouvoir de %2$s. - Vous avez modifié le niveau de pouvoir de %1$s. - Personnalisé - Personnalisé (%1$d) - Défaut - Modérateur - Admin - Vous avez modifié le widget %1$s - %1$s a modifié le widget %2$s - Vous avez supprimé le widget %1$s - %1$s a supprimé le widget %2$s - Vous avez ajouté le widget %1$s - %1$s a ajouté le widget %2$s - Vous avez accepté l’invitation pour %1$s - Vous avez révoqué l\'invitation pour %1$s - %1$s a révoqué l\'invitation pour %2$s - Vous avez rendu les futurs messages visible pour %1$s - %1$s a rendu les futurs messages visible pour %2$s - Vous avez supprimé l\'avatar du salon - %1$s a supprimé l\'avatar du salon - Vous avez supprimé le nom du salon - Vous avez demandé une téléconférence VoIP - Vous avez activé le chiffrement de bout en bout (%1$s) - Vous avez rendu l’historique futur du salon visible pour %1$s - Vous avez raccroché. - Vous avez répondu à l’appel. - Vous avez envoyé les données pour configurer l\'appel. - %s a envoyé les données pour configurer l\'appel. - Vous avez passé un appel vocal. - Vous avez passé un appel vidéo. - Vous avez changé le nom du salon en : %1$s - Vous avez modifié l\'avatar du salon - %1$s a modifié l\'avatar du salon - Vous avez modifié votre nom affiché de %1$s en %2$s - Vous avez modifié votre nom affiché en %1$s - Vous avez changé votre avatar - Vous avez annulé l’invitation de %1$s - Vous avez changé le sujet en : %1$s - Vous avez supprimé votre nom affiché (précédemment %1$s) - Vous avez révoqué l’invitation pour %1$s à rejoindre le salon - Vous avez invité %1$s - %1$s a invité %2$s - Vous avez envoyé une invitation à %1$s pour rejoindre le salon - Vous avez mis à jour votre profile %1$s - Vous avez supprimé le sujet du salon - Vous avez exclus %1$s. Raison : %2$s - Vous avez révoqué l\'exclusion de %1$s. Raison : %2$s - Vous avez exclus %1$s - Vous avez révoqué l\'exclusion de %1$s - Vous avez expulsé %1$s. Raison : %2$s - Salon vide (était %s) - - %1$s, %2$s, %3$s et %4$d autre - %1$s, %2$s, %3$s et %4$d autres - - %1$s, %2$s, %3$s et %4$s - %1$s, %2$s et %3$s - 🎉 Tous les serveurs sont interdits de participer ! Ce salon ne peut plus être utilisé. - Aucun changement. - • Les serveurs correspondant à des IP littérales sont maintenant interdits. - • Les serveurs correspondant à %s sont interdits. - • Les serveurs correspondants à des IP littérales sont interdites. - • Les serveurs correspondants à des IP littérales sont autorisés. - • Les serveurs correspondants à des IP littérales sont maintenant autorisées. - • Les serveurs correspondant à %s sont supprimés de la liste autorisée. - • les serveur correspondant à %s sont maintenant autorisés. - • Les serveurs correspondant à %s étaient supprimés de la liste des interdits. - • Les serveurs correspondant à %s sont maintenant interdits. - Vous avez changé les droits ACL du serveur pour ce salon. - %s a changé les droits ACL du serveur pour ce salon. - • Les serveurs correspondant à %s sont autorisés. - Vous avez paramétré les ACL pour ce salon. - %s paramètre les autorisations étendues (ACL) du serveur pour ce salon. - \ No newline at end of file diff --git a/matrix-sdk-android/src/main/res/values-gl/strings.xml b/matrix-sdk-android/src/main/res/values-gl/strings.xml deleted file mode 100644 index 61c42229cc..0000000000 --- a/matrix-sdk-android/src/main/res/values-gl/strings.xml +++ /dev/null @@ -1,266 +0,0 @@ - - - Enderezo de correo - Fallo ao subir a páxina - %1$s: %2$s - %1$s enviou unha imaxe. - %1$s enviou unha icona. - Convite de %s - %1$s convidou a %2$s - %1$s convidouno - %1$s entrou - %1$s saíu - %1$s rexeitou o convite - %1$s expulsou a %2$s - %1$s desbloqueou a %2$s - %1$s bloqueou a %2$s - %1$s cancelou o convite de %2$s - %1$s cambiou o seu avatar - %1$s cambiou o seu nome a %2$s - %1$s cambiou o seu nome de %2$s a %3$s - %1$s borrou o seu nome público (%2$s) - %1$s cambiou o tema desta sala para: %2$s - %1$s cambiou o nome desta sala para: %2$s - %s iniciou unha chamada de vídeo. - %s iniciou unha chamada de voz. - %s respondeu á chamada. - %s terminou a chamada. - %1$s fixo visible os próximos históricos para %2$s - toda a xente que integran esta sala, desde o momento en que foron convidados. - todas a xente da sala, desde o momento en que entraron. - todas os membros da sala. - todos. - descoñecido (%s). - %1$s activou a criptografía par-a-par (%2$s) - %1$s solicitou unha conferencia VoIP - A conferencia VoIP comenzou - A conferencia VoIP terminou - (o avatar tamén foi cambiado) - %1$s borrou o nome da sala - %1$s removeu o tema da sala - %1$s actualizou o seu perfil %2$s - %1$s envioulle un convite a %2$s para que entre na sala - %1$s aceptou o convite para %2$s - ** Imposíbel descifrar: %s ** - O dispositivo do que envía non enviou as chaves desta mensaxe. - Non se puido redactar - Non foi posíbel enviar a mensaxe - Erro da conexión - Erro de Matrix - Aínda non é posíbel volver a entrar nunha sala baleira. - Mensaxe cifrada - Número de teléfono - %1$s e %2$s - Fixeches unha chamada de audio. - Fixeches unha chamada de vídeo. - Cambiaches o nome da sala a: %1$s - Cambiaches o avatar da sala - %1$s cambiou o avatar da sala - Cambiaches o asunto a: %1$s - Eliminaches o teu nome público (era %1$s) - Cambiaches o teu nome público de %1$s a %2$s - Estableceches o nome público a %1$s - Cambiaches o teu avatar - Retirácheslle o convite a %1$s - Vetaches a %1$s - Readmitiches a %1$s - Expulsaches a %1$s - Rexeitaches o convite - Deixaches a sala - %1$s deixou a sala - Saíches da sala - Unícheste - %1$s iniuse - Unícheste a sala - Convidaches a %1$s - Creaches a conversa - %1$s creou a conversa - Creaches a sala - %1$s creou a sala - O teu convite - Enviaches un adhesivo. - Enviaches unha imaxe. - • Servidores con literais IP están vetados. - • Servidores con IP literais están permitidos. - • Servidores con %s están vetados. - • Servidores con %s están permitidos. - Estableceches os ACLs do servidor para esta sala. - %s estableceu os ACLs do servidor para esta sala. - %s actualizou aquí. - Actualizaches aquí. - Actualizaches esta sala. - %s actualizou esta sala. - Activaches o cifrado extremo-a-extremo (%1$s) - Fixeches visibles as mensaxes futuras para %1$s - %1$s fixo visibles as mensaxes futuras para %2$s - Fixeches visible no futuro o historial da sala para %1$s - Remataches a chamada. - Respondeches á chamada. - Enviaches datos para configurar a chamada. - %s enviou datos para configurar a chamada. - Retiraches o convite de %1$s. Razón: %2$s - %1$s retirou o convite de %2$s. Razón: %3$s - Aceptaches o convite para %1$s. Razón: %2$s - %1$s aceptou o convite para %2$s. Razón: %3$s - Revogaches o convite para que %1$s se una á sala. Razón: %2$s - %1$s revogou o convite para que %2$s se una á sala. Razón: %3$s - Convidaches a %1$s para que se una á sala. Razón: %2$s - %1$s convidou a %2$s para que se una á sala. Razón: %3$s - Vetaches a %1$s. Razón: %2$s - %1$s vetou a %2$s. Razón: %3$s - Retirácheslle o veto a %1$s. Razón: %2$s - %1$s retirou o veto a %2$s. Razón: %3$s - Expulsaches a %1$s. Razón: %2$s - %1$s expulsou a %2$s. Razón: %3$s - Rexeitaches o convite. Razón: %1$s - %1$s rexeitou o convite. Razón: %2$s - Saíches. Razón: %1$s - %1$s saíu. Razón: %2$s - Saíches da sala. Razón: %1$s - %1$s deixou a sala. Razón: %2$s - Unícheste. Razón: %1$s - %1$s uníuse. Razón: %2$s - Unícheste á sala. Razón: %1$s - %1$s uniuse á sala. Razón: %2$s - %1$s convidoute. Razón: %2$s - Convidaches a %1$s. Razón: %2$s - %1$s convidou a %2$s. Razón: %3$s - O teu convite. Razón: %1$s - Convite de %1$s. Razón: %2$s - Baleirar cola de envíos - Enviando mensaxe… - Sincr. inicial: -\nImportando datos da conta - Sincr. inicial: -\nImportando comunidades - Sincr. inicial: -\nImportando salas das que saíches - Sincr. inicial: -\nImportando convites a salas - Sincr. inicial: -\nImportando Salas - Sincr. inicial: -\nImportando salas - Sincr. inicial: -\nImportando cifrado - Sincr. inicial: -\nImportando conta… - Sala baleira (estaba %s) - Sala baleira - - %1$s e 1 máis - %1$s e %2$d outras - - - %1$s, %2$s, %3$s e %4$d máis - %1$s, %2$s, %3$s e %4$d outras - - %1$s, %2$s, %3$s e %4$s - %1$s, %2$s e %3$s - Convite de sala - Convite desde %s - %1$s de %2$s a %3$s - %1$s cambiou de categoría a %2$s. - Cambiaches a categoría de %1$s. - Personalizado - Personalizado (%1$d) - Por defecto - Moderadora - Admin - Modificaches a conferencia de vídeo - Conferencia de vídeo modificada por %1$s - Finalizaches a conferencia de vídeo - Conferencia de vídeo finalizada por %1$s - Iniciaches unha conferencia de vídeo - Conferencia de vídeo iniciada por %1$s - Modificaches o widget %1$s - %1$s modificou o widget %2$s - Eliminaches o widget %1$s - %1$s eliminou o widget %2$s - Engadiches o widget %1$s - %1$s engadiu o widget %2$s - Aceptaches o convite para %1$s - Revogaches o convite para %1$s - %1$s revogou o convite para %2$s - Revogaches o convite para que %1$s se una á sala - %1$s revogou o convite para que %2$s se una á sala - Convidaches a %1$s - %1$s convidou a %2$s - Enviácheslle un convite a %1$s para unirse á sala - Actualizaches o teu perfil %1$s - Mensaxe eliminada por %1$s [razón: %2$s] - Mensaxe eliminada [razón: %1$s] - Mensaxe eliminada por %1$s - Mensaxe eliminada - Eliminaches o avatar da sala - %1$s eliminou o avatar da sala - Eliminaches o asunto da sala - Eliminaches o nome da sala - Solicitaches unha conferencia VoIP - 🎉 Vetouse a participación de tódolos servidores! Xa non se pode utilizar esta sala. - Sen cambio. - • Os servidores con literais IP concordantes están vetados. - • Os servidores cos literais IP concordantes están permitidos. - • Servidores con %s foron eliminados da lista de permitidos. - • Os servidores con %s agora están permitidos. - • Os servidores con %s xa non están la lista de vetados. - • Os servidores con %s están agora vetados. - Cambiaches os ACLs do servidor para esta sala. - %s cambiou os ACLs do servidor para esta sala. - - %1$s engadiu %2$s como enderezo desta sala. - %1$s engadiu %2$s como enderezos desta sala. - - Activaches o cifrado extremo-a-extremo (algoritmo non recoñecido %1$s). - %1$s activou o cifrado extremo-a-extrem (algoritmo non recoñecible %2$s). - Activaches o cifrado extremo-a-extremo. - %1$s activou o cifrado extremo-a-extremo. - Non permites que as convidadas se unan á sala. - %1$s non permite que as usuarias se unan á sala. - Non permites que as convidadas se unan á sala. - %1$s non permite que as convidadas se unan á sala. - Permitiches que as convidadas se unan aquí. - %1$s permitiu que as convidadas se unan aquí. - Permitiches que as convidadas se unan á sala. - %1$s permite que as convidadas se unan á sala. - Cambiaches os enderezos desta sala. - %1$s cambiou os enderezos desta sala. - Cambiaches os enderezos principal e alternativo para esta sala. - %1$s cambiou os enderezos alternativo e principal para esta sala. - Cambiaches os enderezos alternativos para esta sala. - %1$s cambiou os enderezos alternativos para esta sala. - - Eliminaches o enderezo alternativo %1$s para esta sala. - Eliminaches os enderezos alternativos %1$s para esta sala. - - - %1$s eliminou o enderezo alternativo %2$s para esta sala. - %1$s eliminou os enderezos alternativos %2$s para esta sala. - - - Engadiches o enderezo alternativo %1$s para esta sala. - Engadiches os enderezos alternativos %1$s para esta sala. - - - %1$s engadiu o enderezo alternativo %2$s para esta sala. - %1$s engadiu os enderezos alternativos %2$s para esta sala. - - Eliminaches o enderezo principal desta sala. - %1$s eliminou o enderezo principal desta sala. - Estableceches %1$s como enderezo principal desta sala. - %1$s estableceu %2$s como enderezo principal desta sala. - Engadiches %1$s e eliminaches %2$s como enderezos desta sala. - %1$s engadiu %2$s e eliminou %3$s como enderezos desta sala. - - Eliminaches %1$s como enderezo desta sala. - Eliminaches %1$s como enderezos desta sala. - - - %1$s eliminou %2$s como enderezo desta sala. - %1$s eliminou %2$s como enderezos desta sala. - - - Engadiches %1$s como enderezo para esta sala. - Engadiches %1$s como enderezos para esta sala. - - \ No newline at end of file diff --git a/matrix-sdk-android/src/main/res/values-he/strings.xml b/matrix-sdk-android/src/main/res/values-he/strings.xml deleted file mode 100644 index a6b3daec93..0000000000 --- a/matrix-sdk-android/src/main/res/values-he/strings.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/matrix-sdk-android/src/main/res/values-hu/strings.xml b/matrix-sdk-android/src/main/res/values-hu/strings.xml deleted file mode 100644 index 62e0c5f90c..0000000000 --- a/matrix-sdk-android/src/main/res/values-hu/strings.xml +++ /dev/null @@ -1,196 +0,0 @@ - - - %1$s: %2$s - %1$s küldött egy képet. - %s meghívója - %1$s meghívta: %2$s - %1$s meghívott - %1$s belépett a szobába - %1$s kilépett a szobából - %1$s elutasította a meghívást - %1$s kidobta: %2$s - %1$s feloldotta %2$s tiltását - %1$s kitiltotta: %2$s - %1$s visszavonta %2$s meghívását - %1$s megváltoztatta a profilképét - %1$s megváltoztatta a megjelenő nevét erre: %2$s - %1$s megváltoztatta a megjelenítendő nevét erről: %2$s, erre: %3$s - %1$s eltávolította a megjelenítendő nevét (%2$s) - %1$s megváltoztatta a témát erre: %2$s - %1$s megváltoztatta a szoba nevét erre: %2$s - %s videóhívást kezdeményezett. - %s hanghívást indított. - %s fogadta a hívást. - %s befejezte a hívást. - %1$s láthatóvá tette a jövőbeli előzményeket %2$s - a szoba összes tagja számára, a meghívásuk időpontjától kezdve. - a szoba összes tagja számára, a csatlakozásuk időpontjától kezdve. - az összes szobatag számára. - bárki. - ismeretlen (%s). - %1$s bekapcsolta a végpontok közötti titkosítást (%2$s) - %1$s hanghívás konferenciát kérelmezett - Hanghívás konferencia elindult - Hanghívás konferencia befejeződött - (a profilkép is megváltozott) - %1$s eltávolította a szoba nevét - %1$s eltávolította a szoba témáját - %1$s megváltoztatta a(z) %2$s profilját - %1$s meghívót küldött %2$s számára, hogy csatlakozzon a szobához - %1$s elfogadta a meghívót ebbe: %2$s - ** Visszafejtés sikertelen: %s ** - A küldő eszköze nem küldte el a kulcsokat ehhez az üzenethez. - Kitakarás sikertelen - Üzenet küldése sikertelen - Kép feltöltése sikertelen - Hálózati hiba - Matrix hiba - Jelenleg nem lehetséges újracsatlakozni egy üres szobához. - Titkosított üzenet - E-mail cím - Telefonszám - %1$s küldött egy matricát. - Meghívó tőle: %s - Meghívó egy szobába - %1$s és %2$s - Üres szoba - - %1$s és 1 másik - %1$s és %2$d másik - - Üzenet eltávolítva - Üzenetet eltávolította: %1$s - Üzenet eltávolítva [ok: %1$s] - Üzenetet eltávolította: %1$s [ok: %2$s] - Induló szinkronizáció: -\nFiók betöltése… - Induló szinkronizáció: -\nTitkosítás betöltése - Induló szinkronizáció: -\nSzobák betöltése - Induló szinkronizáció: -\nCsatlakozott szobák betöltése - Induló szinkronizáció: -\nMeghívott szobák betöltése - Induló szinkronizáció: -\nElhagyott szobák betöltése - Induló szinkronizáció: -\nKözösségek betöltése - Induló szinkronizáció: -\nFiók adatok betöltése - %s frissítette ezt a szobát. - Üzenet küldése… - Küldő sor ürítése - %1$s visszavonta %2$s meghívását, hogy csatlakozzon a szobához - %1$s meghívója. Ok: %2$s - %1$s meghívta őt: %2$s. Ok: %3$s - %1$s meghívott. Ok: %2$s - %1$s belépett a szobába. Mert: %2$s - %1$s kilépett a szobából. Ok: %2$s - %1$s visszautasította a meghívót. Ok: %2$s - %1$s kirúgta őt: %2$s. Ok: %3$s - %1$s visszaengedte őt: %2$s. Ok: %3$s - %1$s kitiltotta őt: %2$s. Ok: %3$s - %1$s meghívót küldött neki: %2$s, hogy lépjen be a szobába. Ok: %3$s - %1$s visszavonta %2$s meghívóját a szobába való belépéshez. Ok: %3$s - %1$s elfogadta a meghívót ide: %2$s. Ok: %3$s - %1$s visszavonta %2$s meghívóját. Ok: %3$s - - %1$s ezt a címet adta a szobához: %2$s. - %1$s ezeket a címeket adta a szobához: %2$s. - - - %1$s ezt a címet törölte a szobából: %3$s. - %1$s ezeket a címeket törölte a szobából: %3$s. - - %1$s a szobához adta ezeket:%2$s és törölte ezeket: %3$s. - %1$s a szoba elsődleges címét erre állította be: %2$s. - %1$s eltávolította a szoba elsődleges címét. - %1$s megengedte a vendégeknek, hogy belépjenek ebbe a szobába. - %1$s megtiltotta a vendégeknek, hogy belépjenek ebbe a szobába. - %1$s bekapcsolta a végpontok közötti titkosítást. - %1$s bekapcsolta a végpontok közötti titkosítást (ismeretlen algoritmus %2$s). - %1$s szobát készített - Fogadtad a hívást. - Befejezted a hívást. - Hívási adatokat küldtél. - %s hívási adatokat küldött. - Hanghívást indítottál. - Videóhívást indítottál. - Megváltoztattad a szoba képét - %1$s megváltoztatta a szoba képét - Megváltoztattad a témát erre: %1$s - Megváltoztattad a profilképed - Visszavontad %1$s meghívóját - Kitiltottad %1$s felhasználót - Visszaengedted %1$s felhasználót - Kirúgtad %1$s felhasználót - Visszautasítottad a meghívót - Elhagytad a szobát - %1$s elhagyta a szobát - Elhagytad a szobát - Csatlakoztál - %1$s csatlakozott - Beléptél a szobába - Meghívtad: %1$s - Létrehoztad a beszélgetést - %1$s létrehozta a beszélgetést - Létrehoztad a szobát - Matricát küldtél. - Képet küldtél. - Saját - Saját (%1$d) - Alapértelmezett - Moderátor - Admin - Ön megváltoztatta a %1$s kisalkalmazást - %1$s megváltoztatta a %2$s kisalkalmazást - Ön eltávolította a %1$s kisalkalmazást - %1$s eltávolította a %2$s kisalkalmazást - Ön hozzáadott egy %1$s kisalkalmazást - %1$s hozzáadott egy %2$s kisalkalmazást - Ön elfogadta a meghívót ehhez: %1$s - Ön visszavonta %1$s felhasználó meghívóját - %1$s visszavonta %2$s felhasználó meghívóját - Ön visszavonta %1$s felhasználó meghívóját - Ön meghívta %1$s felhasználót - %1$s meghívta %2$s felhasználót - Ön meghívót küldött %1$s felhasználónak, hogy csatlakozzon a szobához - Ön frissítette a saját profilját %1$s - Ön eltávolította a szoba képét - %1$s eltávolította a szoba képét - Ön eltávolította a szoba témáját - Ön eltávolította a szoba nevét - Ön videókonferencia kezdeményezését kérte - Ön frissítette ezt a szobát. - %s frissítette a szobát. - Ön frissítette ezt a szobát. - Ön bekapcsolta a végpontok közötti titkosítást (%1$s) - Ön elérhetővé tette a jövőbeni üzeneteket %1$s - Ön elérhetővé tette a jövőbeni üzeneteket %1$s - %1$s elérhetővé tette a jövőbeni üzeneteket %2$s - Ön megváltoztatta a szoba nevét erre: %1$s - Ön eltávolította a saját megjelenített nevét (%1$s volt) - Ön megváltoztatta a saját megjelenítési nevét erről: %1$s, erre: %2$s - Ön beállította a saját megjelenítési nevét erre: %1$s - Az ön meghívása - %1$s felhasználó hozzáférési szintjét erről: %2$s, erre: %3$s - %1$s megváltoztatta %2$s. - Megváltoztattad %1$s hozzáférési szintjét. - 🎉 Minden szerver ki lett tiltva a szobából! Ez a szoba többé nem használható. - Nincs változás. - • Most már tiltva vannak az IP címet hosztnévként használó szerverek. - • Az IP címet hosztnévként használó szerverek most már engedélyezve vannak. - • El lettek távolítva a tiltólistából az erre illeszkedő szerverek: %s - • Most már engedélyezve vannak az erre illeszkedő szerverek: %s - • El lettek távolítva a tiltólistából az erre illeszkedő szerverek: %s - • Most már tiltva vannak az erre a kifejezésre illeszkedő szerverek: %s - Megváltoztattad a szerver ACL-eket ehhez a szobához. - %s megváltoztatta a szerver ACL-eket ehhez a szobához. - • IP címet hosztnévként használó szerverek tiltva vannak. - • IP címet hosztnévként használó szerverek engedélyezve vannak. - • Engedélyezve vannak azok a szerverek, amik illeszkednek erre: %s - • Tiltva vannak azok a szerverek, amik illeszkednek erre: %s - Beállítottad a szerver ACL-eket ehhez a szobához. - %s beállította a szerver ACL-eket ehhez a szobához. - \ No newline at end of file diff --git a/matrix-sdk-android/src/main/res/values-id/strings.xml b/matrix-sdk-android/src/main/res/values-id/strings.xml deleted file mode 100644 index 157b23d401..0000000000 --- a/matrix-sdk-android/src/main/res/values-id/strings.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - Undang dari %s - Undangan Ruang - %1$s dan %2$s - - Ruang kosong - - - %1$s dan %2$d yang lain - - \ No newline at end of file diff --git a/matrix-sdk-android/src/main/res/values-in/strings.xml b/matrix-sdk-android/src/main/res/values-in/strings.xml deleted file mode 100644 index 157b23d401..0000000000 --- a/matrix-sdk-android/src/main/res/values-in/strings.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - Undang dari %s - Undangan Ruang - %1$s dan %2$s - - Ruang kosong - - - %1$s dan %2$d yang lain - - \ No newline at end of file diff --git a/matrix-sdk-android/src/main/res/values-is/strings.xml b/matrix-sdk-android/src/main/res/values-is/strings.xml deleted file mode 100644 index ecf19edb8a..0000000000 --- a/matrix-sdk-android/src/main/res/values-is/strings.xml +++ /dev/null @@ -1,76 +0,0 @@ - - - %1$s: %2$s - %1$s sendi mynd. - %1$s sendi límmerki. - - %s sendi boð um þátttöku - %1$s bauð %2$s - %1$s bauð þér - %1$s gekk í hópinn - %1$s hætti - %1$s hafnaði boðinu - %1$s sparkaði %2$s - %1$s afbannaði %2$s - %1$s bannaði %2$s - %1$s breyttu auðkennismynd sinni - allir meðlimir spjallrásar, síðan þeim var boðið. - allir meðlimir spjallrásar, síðan þeir skráðu sig. - allir meðlimir spjallrásar. - hver sem er. - óþekktur (%s). - VoIP-símafundur hafinn - VoIP-símafundi lokið - - (einnig var skipt um auðkennismynd) - ** Mistókst að afkóða: %s ** - - Gat ekki sent skilaboð - - Gat ekki sent inn mynd - - Villa í netkerfi - Villa í Matrix - - Dulrituð skilaboð - - Tölvupóstfang - Símanúmer - - %1$s tók til baka boð frá %2$s - %1$s setti birtingarnafn sitt sem %2$s - %1$s breytti birtingarnafni sínu úr %2$s í %3$s - %1$s fjarlægði birtingarnafn sitt (%2$s) - %1$s breytti umræðuefninu í: %2$s - %1$s breytti heiti spjallrásarinnar í: %2$s - %s hringdi myndsamtal. - %s hringdi raddsamtal. - %s svaraði símtalinu. - %s lauk símtalinu. - %1$s kveikti á enda-í-enda dulritun (%2$s) - - %1$s bað um VoIP-símafund - %1$s fjarlægði heiti spjallrásar - %1$s fjarlægði umfjöllunarefni spjallrásar - %1$s gerði ferilskrá spjallrásar héðan í frá sýnilega fyrir %2$s - %1$s uppfærði notandasniðið sitt %2$s - %1$s sendi boð til %2$s um þátttöku í spjallrásinni - %1$s samþykkti boð um að taka þátt í %2$s - - Tæki sendandans hefur ekki sent okkur dulritunarlyklana fyrir þessi skilaboð. - - Gat ekki ritstýrt - Ekki er í augnablikinu hægt að taka aftur þátt í spjallrás sem er tóm. - - Boð á spjallrás - %1$s og %2$s - - - %1$s og 1 annar - %1$s og %2$d aðrir - - - Tóm spjallrás - Boð frá %s - - diff --git a/matrix-sdk-android/src/main/res/values-it/strings.xml b/matrix-sdk-android/src/main/res/values-it/strings.xml deleted file mode 100644 index fe846bdb2c..0000000000 --- a/matrix-sdk-android/src/main/res/values-it/strings.xml +++ /dev/null @@ -1,267 +0,0 @@ - - - %1$s: %2$s - %1$s ha inviato un\'immagine. - Invito di %s - %1$s ha invitato %2$s - %1$s ti ha invitato - %1$s è entrato nella stanza - %1$s è uscito dalla stanza - %1$s ha rifiutato l\'invito - %1$s ha buttato fuori %2$s - %1$s ha tolto il bando a %2$s - %1$s ha bandito %2$s - %1$s ha revocato l\'invito per %2$s - %1$s ha modificato il suo avatar - %1$s hanno cambiato il nome visualizzato con %2$s - %1$s ha cambiato il nome visualizzato da %2$s a %3$s - %1$s ha rimosso il nome visibile (%2$s) - %1$s ha cambiato l\'argomento con: %2$s - %1$s ha cambiato il nome della stanza con: %2$s - %s ha iniziato una chiamata video. - %s ha iniziato una chiamata vocale. - %s ha risposto alla chiamata. - %s ha terminato la chiamata. - %1$s ha reso la futura cronologia della stanza visibile a %2$s - tutti i membri della stanza, dal momento del loro invito. - tutti i membri della stanza, dal momento in cui sono entrati. - tutti i membri della stanza. - chiunque. - sconosciuto (%s). - %1$s ha attivato la crittografia end-to-end (%2$s) - %1$s ha richiesto una conferenza VoIP - Conferenza VoIP iniziata - Conferenza VoIP terminata - (anche l\'avatar è cambiato) - %1$s ha rimosso il nome della stanza - %1$s ha rimosso l\'argomento della stanza - %1$s ha aggiornato il profilo %2$s - %1$s ha mandato un invito a %2$s per unirsi alla stanza - %1$s ha accettato l\'invito per %2$s - ** Impossibile decriptare: %s ** - Il dispositivo del mittente non ci ha inviato le chiavi per questo messaggio. - Impossibile revisionare - Impossibile inviare il messaggio - Invio dell\'immagine fallito - Errore di rete - Errore di Matrix - Al momento non è possibile rientrare in una stanza vuota. - Messaggio criptato - Indirizzo email - Numero di telefono - %1$s ha inviato un adesivo. - - Invito da %s - Invito nella stanza - %1$s e %2$s - Stanza vuota - - %1$s e 1 altro - %1$s e %2$d altri - - Messaggio rimosso - Messaggio rimosso da %1$s - Messaggio rimosso [motivo: %1$s] - Messaggio rimosso da %1$s [motivo: %2$s] - Sync iniziale: -\nImportazione account… - Sync iniziale: -\nImportazione cifratura - Sync iniziale: -\nImportazione stanze - Sync iniziale: -\nImportazione stanze partecipate - Sync iniziale: -\nImportazione stanze invitate - Sync iniziale: -\nImportazione stanze lasciate - Sync iniziale: -\nImportazione comunità - Sync iniziale: -\nImportazione dati account - %s ha aggiornato questa stanza. - Invio messaggio in corso … - Cancella la coda di invio - %1$s ha revocato l\'invito a %2$s di unirsi alla stanza - Invito di %1$s. Motivo: %2$s - %1$s ha invitato %2$s. Motivo: %3$s - %1$s ti ha invitato. Motivo: %2$s - %1$s è entrato nella stanza. Motivo: %2$s - %1$s è uscito dalla stanza. Motivo: %2$s - %1$s ha rifiutato l\'invito. Motivo: %2$s - %1$s ha buttato fuori %2$s. Motivo: %3$s - %1$s ha riammesso %2$s. Motivo: %3$s - %1$s ha bandito %2$s. Motivo: %3$s - %1$s ha inviato un invito a %2$s di unirsi alla stanza. Motivo: %3$s - %1$s ha revocato l\'invito a %2$s di unirsi alla stanza. Motivo: %3$s - %1$s ha accettato l\'invito per %2$s. Motivo: %3$s - %1$s ha rifiutato l\'invito di %2$s. Motivo: %3$s - - %1$s ha aggiunto %2$s come indirizzo per questa stanza. - %1$s ha aggiunto %2$s come indirizzi per questa stanza. - - - %1$s ha rimosso %2$s come indirizzo per questa stanza. - %1$s ha rimosso %2$s come indirizzi per questa stanza. - - %1$s ha aggiunto %2$s e rimosso %3$s come indirizzi per questa stanza. - %1$s ha impostato l\'indirizzo principale per questa stanza a %2$s. - %1$s ha rimosso l\'indirizzo principale per questa stanza. - %1$s ha permesso l\'accesso alla stanza per gli ospiti. - %1$s ha impedito l\'accesso alla stanza per gli ospiti. - %1$s ha attivato la cifratura end-to-end. - %1$s ha attivato la cifratura end-to-end (algoritmo %2$s non riconosciuto). - %1$s ha creato la stanza - Hai inviato un\'immagine. - Hai inviato un adesivo. - Il tuo invito - Hai creato la stanza - Hai invitato %1$s - Sei entrato nella stanza - Sei uscito dalla stanza - Hai rifiutato l\'invito - Hai buttato fuori %1$s - Hai riammesso %1$s - Hai bandito %1$s - Hai ritirato l\'invito di %1$s - Hai cambiato il tuo avatar - Hai impostato il tuo nome visualizzato a %1$s - Hai cambiato il tuo nome visualizzato da %1$s a %2$s - Hai rimosso il tuo nome visibile (era %1$s) - Hai cambiato l\'argomento a: %1$s - %1$s ha modificato l\'avatar della stanza - Hai modificato l\'avatar della stanza - Hai cambiato il nome della stanza a: %1$s - Hai iniziato una videochiamata. - Hai iniziato una telefonata. - %s ha inviato dati per impostare la chiamata. - Hai inviato dati per impostare la chiamata. - Hai risposto alla chiamata. - Hai terminato la chiamata. - Hai reso visibile la futura cronologia della stanza a %1$s - Hai attivato la crittografia end-to-end (%1$s) - Hai aggiornato questa stanza. - Hai richiesto una conferenza VoIP - Hai rimosso il nome della stanza - Hai rimosso l\'argomento della stanza - %1$s ha rimosso l\'avatar della stanza - Hai rimosso l\'avatar della stanza - Hai aggiornato il tuo profilo %1$s - Hai mandato un invito a %1$s a unirsi alla stanza - Hai revocato l\'invito per %1$s a unirsi alla stanza - Hai accettato l\'invito per %1$s - %1$s ha aggiunto il widget %2$s - Hai aggiunto il widget %1$s - %1$s ha rimosso il widget %2$s - Hai rimosso il widget %1$s - %1$s ha modificato il widget %2$s - Hai modificato il widget %1$s - Amministratore - Moderatore - Predefinito - Personalizzato (%1$d) - Personalizzato - Hai cambiato il livello di potere di %1$s. - %1$s ha cambiato il livello di potere di %2$s. - %1$s da %2$s a %3$s - Il tuo invito. Motivo: %1$s - Hai invitato %1$s. Motivo: %2$s - Sei entrato nella stanza. Motivo: %1$s - Sei uscito dalla stanza. Motivo: %1$s - Hai rifiutato l\'invito. Motivo: %1$s - Hai buttato fuori %1$s. Motivo: %2$s - Hai riammesso %1$s. Motivo: %2$s - Hai bandito %1$s. Motivo: %2$s - Hai mandato un invito a %1$s a unirsi alla stanza. Motivo: %2$s - Hai revocato l\'invito a %1$s a unirsi alla stanza. Motivo: %2$s - Hai accettato l\'invito per %1$s. Motivo: %2$s - Hai ritirato l\'invito di %1$s. Motivo: %2$s - - Hai aggiunto %1$s come indirizzo per questa stanza. - Hai aggiunto %1$s come indirizzi per questa stanza. - - - Hai rimosso %1$s come indirizzo per questa stanza. - Hai rimosso %1$s come indirizzi per questa stanza. - - Hai aggiunto %1$s e rimosso %2$s come indirizzi per questa stanza. - Hai impostato l\'indirizzo principale per questa stanza a %1$s. - Hai rimosso l\'indirizzo principale per questa stanza. - Hai permesso l\'accesso alla stanza per gli ospiti. - Hai impedito l\'accesso alla stanza per gli ospiti. - Hai attivato la crittografia end-to-end. - Hai attivato la crittografia end-to-end (algoritmo %1$s sconosciuto). - Hai impedito l\'accesso alla stanza agli ospiti. - %1$s ha impedito l\'accesso alla stanza agli ospiti. - Hai permesso l\'accesso agli ospiti. - %1$s ha permesso l\'accesso agli ospiti. - Sei entrato. Motivo: %1$s - Sei uscito. Motivo: %1$s - %1$s è uscito. Motivo: %2$s - %1$s è entrato. Motivo: %2$s - Hai revocato l\'invito per %1$s - %1$s ha revocato l\'invito per %2$s - Hai invitato %1$s - %1$s ha invitato %2$s - Hai aggiornato la stanza. - %s ha aggiornato la stanza. - Hai reso visibili i messaggi futuri a %1$s - %1$s ha reso visibili i messaggi futuri a %2$s - Sei uscito dalla stanza - %1$s è uscito dalla stanza - Sei entrato - %1$s è entrato - Hai creato la discussione - %1$s ha creato la discussione - Stanza vuota (era %s) - - %1$s, %2$s, %3$s e %4$d altro - %1$s, %2$s, %3$s e altri %4$d - - %1$s, %2$s, %3$s e %4$s - %1$s, %2$s e %3$s - 🎉 Tutti i server sono banditi dalla partecipazione! Questa stanza non può più essere usata. - Nessuna modifica. - • I server che corrispondono a IP letterali ora sono banditi. - • I server che corrispondono a IP letterali ora sono permessi. - • I server che corrispondono a %s sono stati rimossi dalla lista dei consentiti. - • I server che corrispondono a %s ora sono permessi. - • I server che corrispondono a %s sono stati rimossi dalla lista di ban. - • I server che corrispondono a %s ora sono banditi. - Hai cambiato le ACL del server per questa stanza. - %s ha cambiato le ACL del server per questa stanza. - • I server che corrispondono a IP letterali sono banditi. - • I server che corrispondono a IP letterali sono permessi. - • I server che corrispondono a %s sono permessi. - • I server che corrispondono a %s sono banditi. - Hai impostato le ACL del server per questa stanza. - %s ha impostato le ACL del server per questa stanza. - Hai cambiato gli indirizzi per questa stanza. - %1$s ha cambiato gli indirizzi per questa stanza. - Hai cambiato gli indirizzi principali ed alternativi per questa stanza. - %1$s ha cambiato gli indirizzi principali ed alternativi per questa stanza. - Hai cambiato gli indirizzi alternativi per questa stanza. - %1$s ha cambiato gli indirizzi alternativi per questa stanza. - - Hai rimosso l\'indirizzo alternativo %1$s per questa stanza. - Hai rimosso gli indirizzi alternativi %1$s per questa stanza. - - - %1$s ha rimosso l\'indirizzo alternativo %2$s per questa stanza. - %1$s ha rimosso gli indirizzi alternativi %2$s per questa stanza. - - - Hai aggiunto l\'indirizzo alternativo %1$s per questa stanza. - Hai aggiunto gli indirizzi alternativi %1$s per questa stanza. - - - %1$s ha aggiunto l\'indirizzo alternativo %2$s per questa stanza. - %1$s ha aggiunto gli indirizzi alternativi %2$s per questa stanza. - - Hai modificato la video conferenza - Video conferenza modificata da %1$s - Hai iniziato la video conferenza - Hai terminato la video conferenza - Video conferenza terminata da %1$s - Video conferenza iniziata da %1$s - \ No newline at end of file diff --git a/matrix-sdk-android/src/main/res/values-ja/strings.xml b/matrix-sdk-android/src/main/res/values-ja/strings.xml deleted file mode 100644 index add19edfaf..0000000000 --- a/matrix-sdk-android/src/main/res/values-ja/strings.xml +++ /dev/null @@ -1,86 +0,0 @@ - - - %1$s: %2$s - %1$sが画像を送信しました。 - %1$sがスタンプを送信しました。 - %sの招待 - %1$sが%2$sを招待しました - %1$sがあなたを招待しました - %1$sが参加しました - %1$sが退出しました - %1$sが招待を断りました - %1$sが%2$sを追放しました - %1$sが%2$sをブロック解除しました - %1$sが%2$sをブロックしました - %1$sが%2$sの招待を撤回しました - %1$sがアバターを変更しました - %1$sが表示名を%2$sに設定しました - %1$sが表示名を%2$sから%3$sに変更しました - %1$sが表示名 (%2$s) を削除しました - %1$sがテーマを%2$sに変更しました - %1$sが部屋名を%2$sに変更しました - %sがビデオ通話を開始しました。 - %sが音声通話を開始しました。 - %sが電話に出ました。 - %sが通話を終了しました。 - %sさんからの招待 - 部屋への招待 - %1$sと%2$s - 空の部屋 - - %1$sと他%2$d名 - - %1$sは、今後の部屋履歴を%2$sに表示させました - 部屋のメンバー全員、招待された時点から。 - 部屋のメンバー全員、参加した時点から。 - 部屋のメンバー全員。 - 誰でも。 - 不明 (%s)。 - %1$s がエンドツーエンド暗号化を有効にしました (%2$s) - %1$s がVoIP会議をリクエストしました - VoIP会議が開始されました - VoIP会議が終了しました - (アバターも変更された) - %1$s が部屋名を削除しました - %1$s がルームトピックを削除しました - %1$s がプロフィール %2$s を更新しました - %1$s は %2$s に部屋に参加するよう招待状を送りました - %1$sは%2$sの招待を受け入れました - ** 解読できません: %s ** - 送信者の端末からこのメッセージのキーが送信されていません。 - 修正できませんでした - メッセージを送信できません - 画像のアップロードに失敗しました - ネットワークエラー - Matrixエラー - 現在空の部屋に再参加することはできません。 - 暗号化されたメッセージ - メールアドレス - 電話番号 - ルームのアバターを変更しました - %1$sがルームのアバターを変更しました - トピックを%1$sに変更しました - 表示名を削除しました(%1$sでした) - 表示名を%1$sから%2$sに変更しました - 表示名を%1$sに設定しました - アバターを変更しました - %1$sの招待を取り下げました - %1$sをBANしました - %1$sのBANを解除しました - %1$sを退出させました - 招待を拒否しました - ルームから退出しました - %1$sがルームから退出しました - ルームから退出しました - 参加しました - %1$sが参加しました - ルームに参加しました - %1$sを招待しました - ディスカッションを作成しました - %1$sがディスカッションを作成しました - ルームを作成しました - %1$sがルームを作成しました - 招待 - ステッカーを送信しました。 - 画像を送信しました。 - \ No newline at end of file diff --git a/matrix-sdk-android/src/main/res/values-kab/strings.xml b/matrix-sdk-android/src/main/res/values-kab/strings.xml deleted file mode 100644 index ea0c78da5a..0000000000 --- a/matrix-sdk-android/src/main/res/values-kab/strings.xml +++ /dev/null @@ -1,193 +0,0 @@ - - - %1$s: %2$s - %1$s t.yuzen tugna. - Tuzneḍ tugna. - Tinubga n %s - Tinubga-k•m - %1$s yesnulfa-d taxxamt - Tesnulfaḍ-d taxxamt-a - %1$s inced-d %2$s - Tnecdeḍ-d %1$s - %1$s inced-ik-id - %1$s yedda ɣer texxamt - Teddiḍ ɣer texxamt - %1$s yeǧǧa taxxamt - Teǧǧiḍ taxxamt - %1$s yugi/tugi tinubga - Tufiḍ tinubga - %1$s yessufeɣ %2$s - Tessufɣeḍ %1$s - Tbeddleḍ avatar-inek·inem - Anedbal - Aseɣyad - Amezwer - Sagen - %1$s seg %2$s ɣer %3$s - Tegguma ad d-tali tugna - Tansa n yimayl - %1$s azen astiker. - Tuzneḍ amenṭaḍ. - %1$s yekkes agdal i %2$s - Tekkseḍ agdal i %1$s - %1$s igdel %2$s - Tgedleḍ %1$s - %1$s issefsex tinubga n %2$s - Tesfesxeḍ tinubga n %1$s - %1$s ibeddel avatar-is - %1$s isbadu isem-is i d-ittuseknen ɣer %2$s - Tesbaduḍ isem-ik•im i d-ittuseknen ɣer %1$s - %1$s ibeddel isem-is i d-ittuseknen seg %2$s ɣer %3$s - Tbeddleḍ isem-ik•im i d-ittuseknen seg %1$s ɣer %2$s - %1$s yekkes isem-is i d-ittuseknen (yella %2$s) - Tekkseḍ isem-ik·im yettwaskanen (d %1$s) - %1$s isnifel asentel s: %2$s - Tesnifleḍ asentel s: %1$s - %1$s ibeddel avaṭar n texxamt - Tbeddleḍ avaṭar n texxamt - %1$s ibeddel isem n texxamt s: %2$s - Tbeddleḍ isem n texxamt s: %1$s - %s isɛedda siwel s tvidyut. - Tesɛeddaḍ siwel s tvidyut. - %s isɛedda asiwel s taɣect. - Tesɛeddaḍ siwel s taɣect. - %s yuzen isefka i usbadu n usiwel. - Tuzneḍ isefka i usbadu n usiwel. - %s yerra ɣef usiwel. - Terriḍ ɣef usiwel. - %s iḥbes asiwel. - Tḥebseḍ asiwel. - meṛṛa iɛeggalen n texxamt, segmi ara d-ttwanecden. - meṛṛa iɛeggalen n texamt, segmi ara d-rnun. - meṛṛa iɛeggalen n texxamt. - yal yiwen. - arussin (%s). - %1$s isermed awgelhen seg yixef ɣer yixef (%2$s) - Tesremdeḍ awgelhen seg yixef ɣer yixef (%1$s) - %s ileqqem taxxamt-a. - Tleqqmeḍ taxxamt-a. - %1$s isuter-d asarag VoIP - Tsutreḍ-d asarag VoIP - Asarag VoIP yebda - Asarag VoIP yekfa - (avatar daɣen ibeddel) - %1$s yekkes isem n texxamt - Tekkseḍ isem n texxamt - %1$s yekkes asentel n texxamt - Tekkseḍ asentel n texxamt - %1$s yekkes avatar n texxamt - Tekkseḍ avatar n texxamt - Izen ittwakkes - Izen ittwakkes sɣur %1$s - Izen ittwakkes [tamentilt: %1$s] - Izen ittwakkes sɣur %1$s [tamentilt: %2$s] - %1$s ileqqem amaɣnu-ines %2$s - Tleqqmeḍ amaɣnu-inek•inem %1$s - %1$s yuzen tinubga i %2$s akken ad yeddu ɣer texxamt - Tuzneḍ tinubga i %1$s akken ad yeddu ɣer texxamt - %1$s iqbel tinubga i %2$s - Tqebleḍ tinubga i %1$s - %1$s yerna awiǧit %2$s - Terniḍ awiǧit %1$s - %1$s yekkes awiǧit %2$s - Tekkseḍ awiǧit %1$s - %1$s ibeddel awiǧit %2$s - Tbeddleḍ awiǧit %1$s - Sagen (%1$d) - Tbeddleḍ aswir n tezmert n %1$s. - %1$s ibeddel aswir n tezmert n %2$s. - ** Awgelhen d awezɣi: %s ** - Ibenk n umazan ur aɣ-d-yuzin ara tisura i yizen-a. - Tuzna n yizen d tawezɣit - Tuccḍa deg uẓeṭṭa - Tuccḍa deg Matrix - %1$s iga amazray n texxamyt i d-iteddun yettban i %2$s - Tgiḍ amazray n texxamyt i d-iteddun yettban i %1$s - %1$s issefsax tinubga i %2$s i wakken ad d-yekcem ɣer texxamt - Tesfesxeḍ tinubga i %1$s i wakken ad d-yernu ɣer texxamt - D awezɣi tura ad nales ad nuɣal ɣer texxamt tilemt. - Izen yettwawgelhen - Uṭṭun n tiliɣri - Tinubga sɣur %s - Tinubga ɣer texxamt - %1$s d %2$s - - %1$s d 1 wayeḍ - %1$s d %2$d wiyaḍ - - Tremdeḍ awgelhen seg yixef ɣer yixef (alguritm %1$s ur yettwassen ara). - Taxxamt tilemt - Amtawi n tazwara: -\nAktar n umiḍan… - Amtawi n tazwara: -\nAktar n uwgelhen - Amtawi n tazwara: -\nAktar n texxamin - Amtawi n tazwara: -\nAktar n texxamin iɣer terniḍ - Amtawi n tazwara: -\nAktar n texxamin iɣer tettwanecdeḍ - Amtawi n tazwara: -\nAktar n texxamin i teǧǧiḍ - Amtawi n tazwara: -\nAktar n tmezdagnutin - Amtawi n tazwara: -\nAktar n yisefka n umiḍan - Tuzzna n yizen… - Tinubga n %1$s. Tamentilt: %2$s - Tinubga-k•m. Tamentilt: %1$s - %1$s inced %2$s. Tamentilt: %3$s - Tnecdeḍ %1$s. Tamentilt: %2$s - %1$s inced-ik•ikem. Tamentilt: %2$s - %1$s yedda ɣer texxamt. Tamentilt: %2$s - Teddiḍ ɣer texxamt. Tamentilt: %1$s - %1$s yeǧǧa taxxamt. Tamentilt: %2$s - Teǧǧiḍ taxxamt. Tamentilt: %1$s - %1$s yugi tinubga. Tamentilt: %2$s - Tugiḍ tinubga. Tamentilt: %1$s - %1$s yessufeɣ %2$s. Tamentilt: %3$s - Tessufɣeḍ %1$s. Tamentilt: %2$s - %1$s yekkes agdal i %2$s. Tamentilt: %3$s - Tekkseḍ agdal i %1$s. Tamentilt: %2$s - %1$s igdel %2$s. Tamentilt: %3$s - Tgedleḍ %1$s. Tamentilt: %2$s - %1$s yuzen tinubga i %2$s akken ad yeddu ɣer texxamt. Tamentilt: %3$s - Tuzneḍ tinubga i %1$s iwakken ad yeddu ɣer texxamt. Tamentilt: %2$s - %1$s iqbel tinubga i %2$s. Tamentilt: %3$s - Tqebleḍ tinubga i %1$s. Tamentilt: %2$s - %1$s issefsex tinubga n %2$s. Tamentilt: %3$s - Tesfesxeḍ tinubga n %1$s. Tamentilt: %2$s - - %1$s yerna %2$s d tansa i texxamt-a. - %1$s yerna %2$s d tansiwin i texxamt-a. - - - Terniḍ %1$s d tansa i texxamt-a. - Terniḍ %1$s d tansiwin i texxamt-a. - - - %1$s yekkes %2$s am tansa i texxamt-a. - %1$s yekkes %3$s am tansiwin i texxamt-a. - - - Tekkseḍ %1$s am tansa i texxamt-a. - Tekkseḍ %1$s am tansiwin i texxamt-a. - - %1$s yerna %2$s terniḍ tekkseḍ %3$s am tansiwin i texxamt-a. - Terniḍ %1$s terniḍ tekkseḍ %2$s am tansiwin i texxamt-a. - %1$s isbadu %2$s am tansa tagejdant i texxamt-a. - Tesbaduḍ %1$s am tansa tagejdant i texxamt-a. - %1$s yekkes tansa tagejdant i texxamt-a. - Tekkseḍ tansa tagejdant i texxamt-a. - %1$s isireg inebgawen ad ddun ɣer texxamt. - Tsirgeḍ inebgawen ad ddun ɣer texxamt. - %1$s issewḥel inebgawen iwakken ur tteddun ara ɣer texxamt. - Tesweḥleḍ inebgawen iwakken ur tteddun ara ɣer texxamt. - %1$s yermed awgelhen seg yixef ɣer yixef. - Tremdeḍ awgelhen seg yixef ɣer yixef. - %1$s yermed awgelhen seg yixef ɣer yixef (alguritm %2$s ur yettwassen ara). - Sfeḍ tabdart n uraǧu n tuzzna - %1$s issefsex tinubga n %2$s i tmerniwt ɣer texxamt. Tamentilt: %3$s - Tesfesxeḍ tinubga n %1$s i tmerna ɣer texxamt. Tamentilt: %2$s - Yegguma ad yaru - \ No newline at end of file diff --git a/matrix-sdk-android/src/main/res/values-ko/strings.xml b/matrix-sdk-android/src/main/res/values-ko/strings.xml deleted file mode 100644 index eee67628eb..0000000000 --- a/matrix-sdk-android/src/main/res/values-ko/strings.xml +++ /dev/null @@ -1,101 +0,0 @@ - - - %1$s: %2$s - %s님의 초대 - %1$s님이 사진을 보냈습니다. - %1$s님이 스티커를 보냈습니다. - - %1$s님이 %2$s님을 초대했습니다 - %1$s님이 당신을 초대했습니다 - %1$s님이 참가했습니다 - %1$s님이 떠났습니다 - %1$s님이 초대를 거부했습니다 - %1$s님이 %2$s님을 추방했습니다 - %1$s님이 %2$s님의 출입 금지를 풀었습니다 - %1$s님이 %2$s님을 출입 금지했습니다 - %1$s님이 %2$s님의 초대를 취소했습니다 - %1$s님이 아바타를 변경했습니다 - %1$s님이 표시 이름을 %2$s(으)로 설정했습니다 - %1$s님이 표시 이름을 %2$s에서 %3$s(으)로 변경했습니다 - %1$s님이 표시 이름을 삭제했습니다 (%2$s) - %1$s님이 주제를 다음으로 변경했습니다: %2$s - %1$s님이 방 이름을 다음으로 변경했습니다: %2$s - %s님이 영상 통화를 걸었습니다. - %s님이 음성 통화를 걸었습니다. - %s님이 전화를 받았습니다. - %s님이 전화를 끊었습니다. - %1$s님이 이후 %2$s에게 방 기록을 공개했습니다 - 초대된 시점부터 모든 방 구성원 - 들어온 시점부터 모든 방 구성원 - 모든 방 구성원 - 누구나. - 알 수 없음 (%s). - %1$s님이 종단간 암호화를 켰습니다 (%2$s) - %s님이 방을 업그레이드했습니다. - - %1$s님이 VoIP 회의를 요청했습니다 - VoIP 회의가 시작했습니다 - VoIP 회의가 끝났습니다 - - (아바타도 변경됨) - %1$s님이 방 이름을 삭제했습니다 - %1$s님이 방 주제를 삭제했습니다 - 메시지가 삭제되었습니다 - 메시지가 %1$s님에 의해 삭제되었습니다 - 메시지가 삭제되었습니다 [이유: %1$s] - 메시지가 %1$s님에 의해 삭제되었습니다 [이유: %2$s] - %1$s님이 프로필 %2$s을(를) 업데이트했습니다 - %1$s님이 %2$s님에게 방 초대를 보냈습니다 - %1$s님이 %2$s의 초대를 수락했습니다 - - ** 암호를 복호화할 수 없음: %s ** - 발신인의 기기에서 이 메시지의 키를 보내지 않았습니다. - - 검열할 수 없습니다 - 메시지를 보낼 수 없습니다 - - 사진 업로드에 실패했습니다 - - 네트워크 오류 - Matrix 오류 - - 현재 빈 방에 다시 들어갈 수 없습니다. - - 암호화된 메시지 - - 이메일 주소 - 전화번호 - - %s에서 초대함 - 방 초대 - - %1$s님과 %2$s님 - - - %1$s님 외 %2$d명 - - - 빈 방 - - 초기 동기화: -\n계정 가져오는 중… - 초기 동기화: -\n암호 가져오는 중 - 초기 동기화: -\n방 가져오는 중 - 초기 동기화: -\n들어간 방 가져오는 중 - 초기 동기화: -\n초대받은 방 가져오는 중 - 초기 동기화: -\n떠난 방 가져오는 중 - 초기 동기화: -\n커뮤니티 가져오는 중 - 초기 동기화: -\n계정 데이터 가져오는 중 - - 메시지 보내는 중… - 전송 대기 열 지우기 - - %1$s님이 %2$s님에게 방에 참가하라고 보낸 초대를 취소했습니다 - diff --git a/matrix-sdk-android/src/main/res/values-lt/strings.xml b/matrix-sdk-android/src/main/res/values-lt/strings.xml deleted file mode 100644 index db63c9385a..0000000000 --- a/matrix-sdk-android/src/main/res/values-lt/strings.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - %1$s: %2$s - %1$s išsiuntė vaizdą. - %1$s išsiuntė lipduką. - %s pakvietimas - Jūs prisijungėte prie kambario - %1$s prisijungė prie kambario - %1$s pakvietė jus - Jūs pakvietėte %1$s - %1$s pakvietė %2$s - Jūs sukūrėte diskusiją - %1$s sukūrė diskusiją - Jūs sukūrėte kambarį - %1$s sukūrė kambarį - Jūsų pakvietimas - Jūs išsiuntėte lipduką. - Jūs išsiuntėte vaizdą. - Jūs atšaukėte %1$s pakvietimą - %1$s atšaukė %2$s pakvietimą - Jūs užblokavote %1$s - %1$s užblokavo %2$s - Jūs atblokavote %1$s - %1$s atblokavo %2$s - Jūs išmetėte %1$s - %1$s išmetė %2$s - Jūs atmetėte pakvietimą - %1$s atmetė pakvietimą - Jūs išėjote iš kambario - %1$s išėjo iš kambario - Jūs išėjote iš kambario - %1$s išėjo iš kambario - Jūs prisijungėte - %1$s prisijungė - \ No newline at end of file diff --git a/matrix-sdk-android/src/main/res/values-lv/strings.xml b/matrix-sdk-android/src/main/res/values-lv/strings.xml deleted file mode 100644 index 8aee2dcded..0000000000 --- a/matrix-sdk-android/src/main/res/values-lv/strings.xml +++ /dev/null @@ -1,244 +0,0 @@ - - - %1$s: %2$s - %1$s nosūtīja attēlu. - Uzaicinājums no %s - %1$s uzaicināja %2$s - %1$s uzaicināja jūs - %1$s pievienojās - %1$s pameta istabu - %1$s noraidīja uzaicinājumu - %1$s padzina %2$s - %1$s atcēla pieejas liegumu %2$s - %1$s liedza pieeju %2$s - %1$s atsauca %2$s uzaicinājumu - %1$s nomainīja avataru - %1$s uzstādīja parādāmo vārdu uz %2$s - %1$s nomainīja parādāmo vārdu no %2$s uz %3$s - %1$s dzēsa savu parādāmo vārdu (iepriekš %2$s) - %1$s nomainīja tematu uz %2$s - %1$s nomainīja istabas nosaukumu uz %2$s - %s veica video zvanu. - %s veica audio zvanu. - %s atbildēja uz zvanu. - %s beidza zvanu. - %1$s padarīja istabas turpmāko ziņu vēsturi redzamu %2$s - visi istabas biedri no brīža, kad tika uzaicināti. - visi istabas biedri no brīža, kad tika pievienojušies. - visi istabas biedri. - ikviens. - nezināms (%s). - %1$s ieslēdza pilnīgu šifrēšanu (%2$s) - %1$s pieprasīja VoIP konferenci - VoIP konference sākās - VoIP konference beidzās - (arī avatars tika nomainīts) - %1$s dzēsa istabas nosaukumu - %1$s izdzēsa istabas tematu - %1$s atjaunoja savu profilu %2$s - %1$s nosūtīja %2$s uzaicinājumu pievienoties istabai - %1$s pieņēma uzaicinājumu %2$s - ** Neizdodas atšifrēt: %s ** - Sūtītāja ierīce mums nav nenosūtījusi atslēgas priekš šīs ziņas. - Nevarēja rediģēt - Neizdodas nosūtīt ziņu - Neizdevās augšuplādēt attēlu - Tīkla kļūda - Matrix kļūda - Šobrīd nav iespējams atkārtoti pievienoties tukšai istabai. - Šifrēta ziņa - Epasta adrese - Telefona numurs - Uzaicinājums no %s - Uzaicinājums uz istabu - %1$s un %2$s - Tukša istaba - - %1$s un 1 cits - %1$s un %2$d citi - %1$s un %2$d citu - - Jūs nomainījāt savu parādāmo vārdu no %1$s uz %2$s - Jūs nomainījāt savu parādāmo vārdu uz %1$s - Jūs nomainījāt savu avataru - Jūs atsaucāt %1$s uzaicinājumu - Jūs liedzāt pieeju %1$s - Jūs atcēlāt pieejas liegumu %1$s - Jūs padzināt %1$s - Jūs noraidījāt uzaicinājumu - Jūs pametāt istabu - %1$s pameta istabu - Jūs pametāt istabu - Jūs pievienojāties - %1$s pievienojās istabai - Jūs pievienojāties istabai - Jūs uzaicinājāt %1$s - Jūs izveidojāt diskusiju - %1$s izveidoja diskusiju - Jūs izveidojāt istabu - %1$s izveidoja istabu - Jūsu uzaicinājums - Jūs nosūtījāt uzlīmi. - %1$s nosūtīja uzlīmi. - Jūs nosūtījāt attēlu. - Jūs ieslēdzāt pilnīgu šifrēšanu (neatpazīts algoritms %1$s). - %1$s ieslēdza pilnīgu šifrēšanu (neatpazīts algoritms %2$s). - Jūs ieslēdzāt pilnīgu šifrēšanu. - %1$s ieslēdza pilnīgu šifrēšanu. - Jūs esat novērsis iespēju viesiem pievienoties istabai. - %1$s ir novērsis iespēju viesiem pievienoties istabai. - Jūs esat novērsis iespēju viesiem pievienoties istabai. - %1$s ir novērsis iespēju viesiem pievienoties istabai. - Jūs esat atļāvis viesiem pievienoties istabai. - %1$s ir atļāvis viesiem pievienoties istabai. - Jūs esat atļāvis viesiem pievienoties istabai. - %1$s ir atļāvis viesiem pievienoties istabai. - Jūs nomainījāt adreses šai istabai. - %1$s nomainīja adreses šai istabai. - Jūs nomainījāt galveno un alternatīvās adreses šai istabai. - %1$s nomainīja galveno un alternatīvās adreses šai istabai. - Jūs nomainījāt alternatīvās adreses šai istabai. - %1$s nomainīja alternatīvās adreses šai istabai. - - Jūs izdzēsāt šīs istabas alternatīvo adresi %1$s. - Jūs izdzēsāt šīs istabas alternatīvās adreses %1$s. - Jūs izdzēsāt šīs istabas alternatīvās adreses %1$s. - - - %1$s izdzēsa šīs istabas alternatīvo adresi %2$s. - %1$s izdzēsa šīs istabas alternatīvās adreses %2$s. - %1$s izdzēsa šīs istabas alternatīvās adreses %2$s. - - - Jūs pievienojāt šīs istabas alternatīvo adresi %1$s. - Jūs pievienojāt šīs istabas alternatīvās adreses %1$s. - Jūs pievienojāt šīs istabas alternatīvās adreses %1$s. - - - %1$s pievienoja šīs istabas alternatīvo adresi %2$s. - %1$s pievienoja šīs istabas alternatīvās adreses %2$s. - %1$s pievienoja šīs istabas alternatīvās adreses %2$s. - - Jūs izdzēsāt šis istabas galveno adresi. - %1$s izdzēsa šis istabas galveno adresi. - Jūs iestatījāt %1$s kā šis istabas galveno adresi. - %1$s iestatīja %2$s kā šis istabas galveno adresi. - Jūs pievienojāt %1$s un izdzēsāt %2$s kā šīs istabas adreses. - %1$s pievienoja %2$s un izdzēsa %3$s kā šīs istabas adreses. - - Jūs izdzēsāt %1$s kā šīs istabas adresi. - Jūs izdzēsāt %1$s kā šīs istabas adreses. - Jūs izdzēsāt %1$s kā šīs istabas adreses. - - - %1$s izdzēsa %2$s kā šīs istabas adresi. - %1$s izdzēsa %2$s kā šīs istabas adreses. - %1$s izdzēsa %2$s kā šīs istabas adreses. - - - Jūs pievienojāt %1$s kā šīs istabas adresi. - Jūs pievienojāt %1$s kā šīs istabas adreses. - Jūs pievienojāt %1$s kā šīs istabas adreses. - - - %1$s pievienoja %2$s kā šīs istabas adresi. - %1$s pievienoja %2$s kā šis istabas adreses. - %1$s pievienoja %2$s kā šīs istabas adreses. - - Jūs atsaucāt %1$s uzaicinājumu. Iemesls: %2$s - %1$s atsauca uzaicinājumu %2$s. Iemesls: %3$s - Jūs pieņēmāt uzaicinājumu %1$s. Iemesls: %2$s - %1$s pieņēma uzaicinājumu %2$s. Iemesls: %3$s - Jūs atsaucāt uzaicinājumu %1$s pievienoties istabai. Iemesls: %2$s - %1$s atsauca uzaicinājumu %2$s pievienoties istabai. Iemesls: %3$s - Jūs nosūtījāt uzaicinājumu %1$s pievienoties istabai. Iemesls: %2$s - %1$s nosūtīja uzaicinājumu %2$s pievienoties istabai. Iemesls: %3$s - Jūs liedzāt pieeju %1$s. Iemesls: %2$s - %1$s liedza pieeju %2$s. Iemesls: %3$s - Jūs atcēlāt pieejas liegumu %1$s. Iemesls: %2$s - %1$s atcēla %2$s pieejas liegumu. Iemesls: %3$s - Jūs padzināt %1$s. Iemesls: %2$s - %1$s padzina %2$s. Iemesls: %3$s - Jūs noraidījāt uzaicinājumu. Iemesls: %1$s - %1$s noraidīja uzaicinājumu. Iemesls: %2$s - Jūs izgājāt. Iemesls: %1$s - %1$s izgāja. Iemels: %2$s - Jūs pametāt istabu. Iemesls: %1$s - %1$s pameta istabu. Iemesls: %2$s - Jūs pievienojāties. Iemesls: %1$s - %1$s pievienojās. Iemesls: %2$s - Jūs pievienojāties istabai. Iemesls: %1$s - %1$s pievienojās istabai. Iemesls: %2$s - %1$s uzaicināja jūs. Iemesls: %2$s - Jūs uzaicinājāt %1$s. Iemesls: %2$s - %1$s uzaicināja %2$s. Iemesls: %3$s - Jūsu uzaicinājums. Iemesls: %1$s - %1$s uzaicinājums. Iemesls: %2$s - Notīrīt sūtīšanas rindu - Sūta ziņu… - Sākotnējā sinhronizācija: -\nImportē konta datus - Sākotnējā sinhronizācija: -\nImportē kopienas - Sākotnējā sinhronizācija: -\nImportē pamestās istabas - Sākotnējā sinhronizācija: -\nImportē istabas, uz kurām uzaicināts - Sākotnējā sinhronizācija: -\nImportē istabas, kurās ieiets - Sākotnējā sinhronizācija: -\nImportē istabas - Sākotnējā sinhronizācija: -\nImportē kriptogrāfiju - Sākotnējā sinhronizācija: -\nImportē kontu… - Tukša istaba (bija %s) - - %1$s, %2$s, %3$s un %4$d citi - %1$s, %2$s, %3$s un %4$d cits - %1$s, %2$s, %3$s un %4$d citi - - %1$s, %2$s, %3$s un %4$s - %1$s, %2$s un %3$s - %1$s no %2$s uz %3$s - %1$s nomainīja %2$s pieejas līmeni. - Jūs nomainījāt %1$s pieejas līmeni. - Pielāgots - Pielāgots (%1$d) - Noklusējuma - Moderators - Administrators - Jūs pieņēmāt uzaicinājumu %1$s - Jūs atsaucāt uzaicinājumu %1$s - %1$s atsauca uzaicinājumu %2$s - Jūs atsaucāt uzaicinājumu %1$s pievienoties istabai - %1$s atsauca uzaicinājumu %2$s pievienoties istabai - Jūs uzaicinājāt %1$s - %1$s uzaicināja %2$s - Jūs nosūtījāt %1$s uzaicinājumu pievienoties istabai - Jūs atjaunojāt savu profilu %1$s - %1$s izdzēsa ziņu [iemesls: %2$s] - Ziņa izdzēsta [iemesls: %1$s] - %1$s izdzēsa ziņu - Ziņa izdzēsta - Jūs izdzēsāt istabas avataru - %1$s izdzēsa istabas avataru - Jūs izdzēsāt istabas tematu - Jūs dzēsāt istabas nosaukumu - Jūs pieprasījāt VoIP konferenci - Jūs ieslēdzāt pilnīgu šifrēšanu (%1$s) - Jūs padarījāt turpmākās ziņas redzamas %1$s - %1$s padarīja turpmākās ziņas redzamas %2$s - Jūs padarījāt istabas turpmāko ziņu vēsturi redzamu %1$s - Jūs beidzāt zvanu. - Jūs atbildējāt uz zvanu. - Jūs nosūtījāt datus zvana uzsākšanai. - %s nosūtīja datus zvana uzsākšanai. - Jūs veicāt balss zvanu. - Jūs veicāt video zvanu. - Jūs nomainījāt istabas nosaukumu uz %1$s - Jūs nomainījāt istabas avataru - %1$s nomainīja istabas avataru - Jūs nomainījāt tematu uz %1$s - Jūs dzēsāt savu parādāmo vārdu (iepriekš %1$s) - \ No newline at end of file diff --git a/matrix-sdk-android/src/main/res/values-nl/strings.xml b/matrix-sdk-android/src/main/res/values-nl/strings.xml deleted file mode 100644 index 3216fdb720..0000000000 --- a/matrix-sdk-android/src/main/res/values-nl/strings.xml +++ /dev/null @@ -1,150 +0,0 @@ - - - - %1$s: %2$s - %1$s heeft een afbeelding gestuurd. - - Uitnodiging van %s - %1$s heeft %2$s uitgenodigd - %1$s heeft u uitgenodigd - %1$s neemt nu deel aan het gesprek - %1$s heeft het gesprek verlaten - %1$s heeft de uitnodiging geweigerd - %1$s heeft %2$s uit het gesprek verwijderd - %1$s heeft %2$s ontbannen - %1$s heeft %2$s verbannen - %1$s heeft de uitnodiging van %2$s ingetrokken - %1$s heeft zijn/haar avatar aangepast - %1$s heeft zijn/haar naam aangepast naar %2$s - %1$s heeft zijn/haar naam aangepast van %2$s naar %3$s - %1$s heeft zijn/haar naam verwijderd (%2$s) - %1$s heeft het onderwerp veranderd naar: %2$s - %1$s heeft de gespreksnaam veranderd naar: %2$s - %s heeft een video-oproep gemaakt. - %s heeft een spraakoproep gemaakt. - %s heeft de oproep beantwoord. - %s heeft opgehangen. - %1$s heeft de toekomstige gespreksgeschiedenis zichtbaar gemaakt voor %2$s - alle deelnemers aan het gesprek, vanaf het punt dat ze zijn uitgenodigd. - alle deelnemers aan het gesprek, vanaf het punt dat ze zijn toegetreden. - alle deelnemers aan het gesprek. - iedereen. - onbekend (%s). - %1$s heeft eind-tot-eind-versleuteling aangezet (%2$s) - - %1$s heeft een VoIP-vergadering aangevraagd - VoIP-vergadering gestart - VoIP-vergadering gestopt - - (avatar is ook veranderd) - %1$s heeft de gespreksnaam verwijderd - %1$s heeft het gespreksonderwerp verwijderd - %1$s heeft zijn/haar profiel %2$s bijgewerkt - %1$s heeft een uitnodiging naar %2$s gestuurd om het gesprek toe te treden - %1$s heeft de uitnodiging voor %2$s aanvaard - - ** Kan niet ontsleutelen: %s ** - Het apparaat van de afzender heeft geen sleutels voor dit bericht gestuurd. - - - Kon niet verwijderd worden - Kan bericht niet verzenden - - Uploaden van de afbeelding mislukt - - - Netwerkfout - Matrix-fout - - - - - - - Het is momenteel niet mogelijk om een leeg gesprek opnieuw toe te treden. - - Versleuteld bericht - - - E-mailadres - Telefoonnummer - - %1$s heeft een sticker gestuurd. - - - Uitnodiging van %s - Gespreksuitnodiging - %1$s en %2$s - Leeg gesprek - - - %1$s en 1 andere - %1$s en %2$d anderen - - - - Bericht verwijderd - Bericht verwijderd door %1$s - Bericht verwijderd [reden: %1$s] - Bericht verwijderd door %1$s [reden: %2$s] - - Initiële synchronisatie: -\nAccount wordt geïmporteerd… - Initiële synchronisatie: -\nCrypto wordt geïmporteerd - Initiële synchronisatie: -\nGesprekken worden geïmporteerd - Initiële synchronisatie: -\nDeelgenomen gesprekken worden geïmporteerd - Initiële synchronisatie: -\nUitgenodigde gesprekken worden geïmporteerd - Initiële synchronisatie: -\nVerlaten gesprekken worden geïmporteerd - Initiële synchronisatie: -\nGemeenschappen worden geïmporteerd - Initiële synchronisatie: -\nAccountgegevens worden geïmporteerd - - %s heeft dit gesprek opgewaardeerd. - - Bericht wordt verstuurd… - Uitgaande wachtrij legen - - %1$s heeft de uitnodiging voor %2$s om het gesprek toe te treden ingetrokken - Uitnodiging van %1$s. Reden: %2$s - %1$s heeft %2$s uitgenodigd. Reden: %3$s - %1$s heeft u uitgenodigd. Reden: %2$s - %1$s neemt nu deel. Reden: %2$s - %1$s is weggegaan. Reden: %2$s - %1$s heeft de uitnodiging geweigerd. Reden: %2$s - %1$s heeft %2$s verwijderd. Reden: %3$s - %1$s heeft %2$s ontbannen. Reden: %3$s - %1$s heeft %2$s verbannen. Reden: %3$s - %1$s heeft %2$s een uitnodiging voor het gesprek gestuurd. Reden: %3$s - %1$s heeft de uitnodiging voor %2$s ingetrokken. Reden: %3$s - %1$s heeft de uitnodiging voor %2$s aanvaard. Reden: %3$s - %1$s heeft de uitnodiging van %2$s ingetrokken. Reden: %3$s - - - %1$s heeft %2$s als gespreksadres toegevoegd. - %1$s heeft %2$s als gespreksadressen toegevoegd. - - - - %1$s heeft %2$s als gespreksadres verwijderd. - %1$s heeft %3$s als gespreksadressen verwijderd. - - - %1$s heeft %2$s als gespreksadres toegevoegd en %3$s verwijderd. - - %1$s heeft het hoofdadres voor dit gesprek ingesteld op %2$s. - %1$s heeft het hoofdadres voor dit gesprek verwijderd. - - %1$s heeft gasten de toegang tot het gesprek verleend. - %1$s heeft gasten de toegang tot het gesprek verhinderd. - - %1$s heeft eind-tot-eind-versleuteling ingeschakeld. - %1$s heeft eind-tot-eind-versleuteling ingeschakeld (onbekend algoritme %2$s). - - - diff --git a/matrix-sdk-android/src/main/res/values-nn/strings.xml b/matrix-sdk-android/src/main/res/values-nn/strings.xml deleted file mode 100644 index 441d568fc3..0000000000 --- a/matrix-sdk-android/src/main/res/values-nn/strings.xml +++ /dev/null @@ -1,68 +0,0 @@ - - - Kryptert melding - %1$s: %2$s - %1$s sende eit bilæte. - %1$s sende eit klistremerke. - %s si innbjoding - %1$s inviterte %2$s - %1$s inviterte deg - %1$s kom inn - %1$s forlot rommet - %1$s sa nei til innbjodingi - %1$s sparka %2$s - %1$s slapp %2$s inn att - %1$s stengde %2$s ute - %1$s tok attende %2$s si innbjoding - %1$s byta avataren sin - %1$s sette visingsnamnet sitt som %2$s - %1$s byta visingsnamnet sitt frå %2$s til %3$s - %1$s tok burt visingsnamnet sitt (%2$s) - %1$s gjorde emnet til: %2$s - %1$s gjorde romnamnet til: %2$s - %s starta ei videosamtala. - %s starta ein talesamtale. - %s tok røyret. - %s la på røyret. - %1$s gjorde den framtidige romsoga synleg for %2$s - alle rommedlemmar, frå då dei vart invitert inn. - alle rommedlemmar, frå då dei kom inn. - alle rommedlemmar. - kven som heldst. - uvisst (%s). - %1$s skrudde ende-til-ende-kryptering på (%2$s) - %1$s bad um ei VoIP-gruppasamtala - VoIP-gruppasamtala er starta - VoIP-gruppasamtala er ferdug - (avataren vart au byta) - %1$s tok burt romnamnet - %1$s tok burt romemnet - %1$s gjorde um på skildringi si %2$s - %1$s inviterte %2$s til rommet - %1$s sa ja til innbjodingi til %2$s - ** Fekk ikkje til å dekryptera: %s ** - Avsendareiningi hev ikkje sendt oss nyklane fyr denna meldingi. - Kunde ikkje gjera um - Fekk ikkje til å senda meldingi - Fekk ikkje til å lasta biletet upp - Noko gjekk gale med netverket - Noko gjekk gale med Matrix - Det lèt seg fyrebils ikkje gjera å fara inn att i eit tomt rom. - Epostadresse - Telefonnummer - Innbjoding frå %s - Rominnbjoding - %1$s og %2$s - - %1$s og 1 til - %1$s og %2$d til - - Tomt rom - Ei melding vart stroki - %1$s strauk meldingi - Meldingi vart stroki [av di: %1$s] - %1$s strauk meldingi [av di: %2$s] - %s oppgraderte rommet. - Nullstill sendingskø - %1$s forlot rommet. Grunn: %2$s - \ No newline at end of file diff --git a/matrix-sdk-android/src/main/res/values-pl/strings.xml b/matrix-sdk-android/src/main/res/values-pl/strings.xml deleted file mode 100644 index 0d79edc658..0000000000 --- a/matrix-sdk-android/src/main/res/values-pl/strings.xml +++ /dev/null @@ -1,104 +0,0 @@ - - - %1$s: %2$s - %1$s wysłał(a) zdjęcie. - - Zaproszenie od %s - %1$s zaprosił(a) %2$s - %1$s zaprosił(a) Cię - %1$s dołączył(a) - %1$s opuścił(a) - %1$s odrzucił(a) zaproszenie - %1$s wyrzucił(a) %2$s - %1$s odblokował(a) %2$s - %1$s zablokował(a) %2$s - %1$s zmienił(a) awatar - %1$s zmienił(a) wyświetlaną nazwę na %2$s - %1$s zmienił(a) wyświetlaną nazwę z %2$s na %3$s - %1$s usunął(-ęła) swoją wyświetlaną nazwę (%2$s) - %1$s zmienił(a) temat na: %2$s - Nie można wysłać wiadomości - - Przesyłanie zdjęcia nie powiodło się - - Błąd sieci - Błąd Matrixa - - Wiadomość zaszyfrowana - - Adres e-mail - Numer telefonu - - wszyscy członkowie pokoju. - wszyscy. - %1$s zmienił(a) nazwę pokoju na: %2$s - %s zakończył(a) rozmowę. - %1$s usunął(-ęła) nazwę pokoju - %1$s usunął(-ęła) temat pokoju - %1$s wysłał(a) naklejkę. - - %1$s włączył(a) szyfrowanie end-to-end (%2$s) - - %1$s wycofał(a) zaproszenie %2$s - %s odebrał(a) połączenie. - (awatar też został zmieniony) - - Zaproszenie od %s - Zaproszenie do pokoju - %1$s i %2$s - Pusty pokój - - - %1$s i jeden inny - %1$s i kilku innych - %1$s i %2$d innych - - - - ** Nie można odszyfrować: %s ** - %s wykonał(a) rozmowę wideo. - %s wykonał(a) połączenie głosowe. - %1$s uczynił(a) przyszłą historię pokoju widoczną dla %2$s - wszyscy członkowie pokoju, od momentu w którym zostali zaproszeni. - wszyscy członkowie pokoju, od momentu w którym dołączyli. - nieznane (%s). - %1$s zażądał(a) grupowego połączenia VoIP - Rozpoczęto grupowe połączenie głosowe VoIP - Zakończono grupowe połączenie głosowe VoIP - - %1$s zaktualizował swój profil %2$s - %1$s wysłał(a) zaproszenie do %2$s aby dołączył(a) do tego pokoju - %1$s zaakceptował(a) zaproszenie dla %2$s - - Urządzenie nadawcy nie wysłało nam kluczy do tej wiadomości. - - Nie można zredagować - Obecnie nie jest możliwe ponowne dołączenie do pustego pokoju. - - Wiadomość usunięta - Wiadomość usunięta przez %1$s - Wiadomość usunięta [powód: %1$s] - Wiadomość usunięta przez %1$s [powód: %2$s] - %s zakutalizował(a) ten pokój. - - Synchronizacja początkowa: -\nImportowanie konta… - Synchronizacja początkowa: -\nImportowanie kryptografii - Synchronizacja początkowa: -\nImportowanie Pokoi - Synchronizacja początkowa: -\nImportowanie dołączonych Pokoi - Synchronizacja początkowa: -\nImportowanie zaproszonych Pokoi - Synchronizacja początkowa: -\nImportowanie opuszczonych Pokoi - Synchronizacja początkowa: -\nImportowanie Społeczności - Synchronizacja początkowa: -\nImportowanie danych Konta - - Wysyłanie wiadomości… - Wyczyść kolejkę wysyłania - - diff --git a/matrix-sdk-android/src/main/res/values-pt-rBR/strings.xml b/matrix-sdk-android/src/main/res/values-pt-rBR/strings.xml deleted file mode 100644 index 95c1331690..0000000000 --- a/matrix-sdk-android/src/main/res/values-pt-rBR/strings.xml +++ /dev/null @@ -1,274 +0,0 @@ - - - %1$s: %2$s - %1$s enviou uma foto. - convite de %s - %1$s convidou %2$s - %1$s convidou você - %1$s entrou na sala - %1$s saiu da sala - %1$s recusou o convite - %1$s removeu %2$s - %1$s removeu o banimento de %2$s - %1$s baniu %2$s - %1$s desfez o convite a %2$s - %1$s alterou a foto de perfil - %1$s definiu o nome e sobrenome como %2$s - %1$s alterou o nome e sobrenome de %2$s para %3$s - %1$s removeu o nome e sobrenome (era %2$s) - %1$s alterou a descrição para: %2$s - %1$s alterou o nome da sala para: %2$s - %s iniciou uma chamada de vídeo. - %s iniciou uma chamada de voz. - %s aceitou a chamada. - %s encerrou a chamada. - %1$s deixou o histórico futuro da sala visível para %2$s - todos os participantes da sala, a partir do momento em que foram convidados. - todos os participantes da sala, a partir do momento em que entraram nela. - todos os participantes da sala. - qualquer pessoa. - desconhecido (%s). - %1$s ativou a criptografia de ponta a ponta (%2$s) - %1$s deseja iniciar uma chamada em grupo - Chamada em grupo iniciada - Chamada em grupo encerrada - (a foto de perfil também foi alterada) - %1$s removeu o nome da sala - %1$s removeu a descrição da sala - %1$s atualizou o perfil %2$s - %1$s enviou um convite para %2$s entrar na sala - %1$s aceitou o convite para %2$s - ** Não foi possível descriptografar: %s ** - O aparelho do remetente não nos enviou as chaves para esta mensagem. - - Não foi possível redigir - Não foi possível enviar a mensagem - O envio da imagem falhou - - Erro de conexão à internet - Erro no servidor Matrix - - - - - Atualmente, não é possível entrar novamente em uma sala vazia. - Mensagem criptografada - - Endereço de e-mail - Número de telefone - %1$s enviou uma figurinha. - - Convite de %s - Convite para sala - %1$s e %2$s - Sala vazia - - %1$s e 1 outro - %1$s e %2$d outros - - Você enviou uma foto. - Você enviou uma figurinha. - Seu convite - %1$s criou a sala - Você criou a sala - Você convidou %1$s - Você entrou na sala - Você saiu da sala - Você recusou o convite - Você removeu %1$s - Você removeu o banimento de %1$s - Você baniu %1$s - Você desfez o convite a %1$s - Você alterou a sua foto de perfil - Você definiu o seu nome e sobrenome como %1$s - Você alterou o seu nome e sobrenome de %1$s para %2$s - Você removeu o seu nome e sobrenome (era %1$s) - Você alterou a descrição para: %1$s - %1$s alterou a foto da sala - Você alterou a foto da sala - Você alterou o nome da sala para: %1$s - Você iniciou uma chamada de vídeo. - Você iniciou uma chamada de voz. - %s enviou dados para configurar a chamada. - Você enviou dados para configurar a chamada. - Você aceitou a chamada. - Você encerrou a chamada. - Você deixou o histórico futuro da sala visível para %1$s - Você ativou a criptografia de ponta a ponta (%1$s) - %s atualizou esta sala. - Você atualizou esta sala. - Você solicitou uma chamada em grupo - Você removeu o nome da sala - Você removeu a descrição da sala - %1$s removeu a foto da sala - Você removeu a foto da sala - Mensagem apagada - Mensagem apagada por %1$s - Mensagem apagada [motivo: %1$s] - Mensagem apagada por %1$s [motivo: %2$s] - Você atualizou o seu perfil %1$s - Você enviou um convite para %1$s entrar na sala - %1$s cancelou o convite a %2$s para entrar na sala - Você cancelou o convite a %1$s para entrar na sala - Você aceitou o convite para %1$s - %1$s adicionou o widget %2$s - Você adicionou o widget %1$s - %1$s removeu o widget %2$s - Você removeu o widget %1$s - %1$s editou o widget %2$s - Você editou o widget %1$s - Administrador - Moderador - Padrão - Personalizado (%1$d) - Personalizado - Você alterou o nível de permissão de %1$s. - %1$s alterou o nível de permissão de %2$s. - %1$s de %2$s para %3$s - Primeira sincronização: -\nImportando a conta… - Primeira sincronização: -\nImportando as chaves de criptografia - Primeira sincronização: -\nImportando as salas - Primeira sincronização: -\nImportando as salas em que você entrou - Primeira sincronização: -\nImportando as salas em que você foi convidado - Primeira sincronização: -\nImportando as salas em que você saiu - Primeira sincronização: -\nImportando as comunidades - Primeira sincronização: -\nImportando os dados da conta - Enviando mensagem… - Limpar a fila de envio - Convite de %1$s. Motivo: %2$s - O seu convite. Motivo: %1$s - %1$s convidou %2$s. Motivo: %3$s - Você convidou %1$s. Motivo: %2$s - %1$s convidou você. Motivo: %2$s - %1$s entrou na sala. Motivo: %2$s - Você entrou na sala. Motivo: %1$s - %1$s saiu da sala. Motivo: %2$s - Você saiu da sala. Motivo: %1$s - %1$s recusou o convite. Motivo: %2$s - Você recusou o convite. Motivo: %1$s - %1$s removeu %2$s. Motivo: %3$s - Você removeu %1$s. Motivo: %2$s - %1$s removeu o banimento de %2$s. Motivo: %3$s - Você removeu o banimento de %1$s. Motivo: %2$s - %1$s baniu %2$s. Motivo: %3$s - Você baniu %1$s. Motivo: %2$s - %1$s enviou um convite para %2$s entrar na sala. Motivo: %3$s - Você enviou um convite para %1$s entrar na sala. Motivo: %2$s - %1$s revogou o convite para %2$s entrar na sala. Motivo: %3$s - Você revogou o convite para %1$s entrar na sala. Motivo: %2$s - %1$s aceitou o convite para %2$s. Motivo: %3$s - Você aceitou o convite para %1$s. Motivo: %2$s - %1$s desfez o convite de %2$s. Motivo: %3$s - Você desfez o convite de %1$s. Motivo: %2$s - - %1$s adicionou %2$s como um endereço desta sala. - %1$s adicionou %2$s como endereços desta sala. - - - Você adicionou %1$s como um endereço desta sala. - Você adicionou %1$s como endereços desta sala. - - - %1$s removeu %2$s como um endereço desta sala. - %1$s removeu %2$s como endereços desta sala. - - - Você removeu %1$s como um endereço desta sala. - Você removeu %1$s como endereços desta sala. - - %1$s adicionou %2$s e removeu %3$s como endereços desta sala. - Você adicionou %1$s e removeu %2$s como endereços desta sala. - %1$s definiu o endereço principal desta sala como %2$s. - Você definiu o endereço principal desta sala como %1$s. - %1$s removeu o endereço principal desta sala. - Você removeu o endereço principal desta sala. - %1$s permitiu que convidados entrem na sala. - Você permitiu que convidados entrem na sala. - %1$s impediu que convidados entrassem na sala. - Você impediu que convidados entrassem na sala. - %1$s ativou a criptografia de ponta a ponta. - Você ativou a criptografia de ponta a ponta. - %1$s ativou a criptografia de ponta a ponta (algoritmo não reconhecido %2$s). - Você ativou a criptografia de ponta a ponta (algoritmo não reconhecido %1$s). - Você impediu que desconhecidos entrem na sala. - %1$s impediu que desconhecidos entrem na sala. - Você permitiu que desconhecidos entrem aqui. - %1$s permitiu que desconhecidos entrem aqui. - Você saiu. Motivo: %1$s - %1$s saiu. Motivo: %2$s - Você entrou. Motivo: %1$s - %1$s entrou. Motivo: %2$s - Você cancelou o convite para %1$s - %1$s cancelou o convite para %2$s - Você convidou %1$s - %1$s convidou %2$s - Você atualizou esta sala. - %s atualizou esta sala. - Você definiu que as mensagens enviadas a partir do presente momento estarão disponíveis para %1$s - %1$s definiu que as mensagens enviadas a partir do presente momento estarão disponíveis para %2$s - Você saiu da sala - %1$s saiu da sala - Você entrou - %1$s entrou - Você criou a sala - %1$s criou a sala - Sala vazia (era %s) - - %1$s, %2$s, %3$s e %4$d outro - %1$s, %2$s, %3$s e %4$d outros - - %1$s, %2$s, %3$s e %4$s - %1$s, %2$s e %3$s - 🎉 Todos os servidores estão proibidos de participar! Esta sala não pode mais ser usada. - Nenhuma alteração. - • Servidores correspondentes aos IP literais agora estão banidos. - • Servidores correspondentes aos IP literais agora estão permitidos. - • Servidores correspondentes à %s foram removidos da lista de permitidos. - • Servidores correspondentes à %s agora são permitidos. - • Servidores correspondente à %s foram removidos da lista de banidos. - • Servidores correspondentes à %s foram banidos. - Você alterou a lista de controle de acesso (ACL) do servidor para esta sala. - %s alterou a lista de controle de acesso (ACL) do servidor para esta sala. - • Servidores correspondentes aos IP literais estão banidos. - • Servidores correspondentes aos IP literais estão permitidos. - • Servidores correspondentes à %s estão permitidos. - • Servidores correspondentes à %s estão banidos. - Você definiu a lista de controle de acesso (ACL) do servidor para esta sala. - %s definiu a lista de controle de acesso (ACL) do servidor para esta sala. - Você alterou os endereços alternativos desta sala. - %1$s alterou os endereços alternativos desta sala. - - Você removeu o endereço alternativo %1$s para esta sala. - Você removeu os endereços alternativos %1$s para esta sala. - - - %1$s removeu o endereço alternativo %2$s para esta sala. - %1$s removeu os endereços alternativos %2$s para esta sala. - - - Você adicionou o endereço alternativo %1$s para esta sala. - Você adicionou os endereços alternativos %1$s para esta sala. - - - %1$s adicionou o endereço alternativo %2$s para esta sala. - %1$s adicionou os endereços alternativos %2$s para esta sala. - - Você alterou os endereços desta sala. - %1$s alterou os endereços desta sala. - Você alterou os endereços principal e alternativos desta sala. - %1$s alterou os endereços principal e alternativos desta sala. - Você modificou a chamada de vídeo - Chamada de vídeo modificada por %1$s - Você encerrou a chamada de vídeo - Chamada de vídeo encerrada por %1$s - Você começou uma chamada de vídeo - Chamada de vídeo iniciada por %1$s - \ No newline at end of file diff --git a/matrix-sdk-android/src/main/res/values-pt/strings.xml b/matrix-sdk-android/src/main/res/values-pt/strings.xml deleted file mode 100644 index 4bc90cf0cb..0000000000 --- a/matrix-sdk-android/src/main/res/values-pt/strings.xml +++ /dev/null @@ -1,87 +0,0 @@ - - - - %1$s: %2$s - %1$s enviou uma imagem. - - convite de %s - %1$s convidou %2$s - %1$s convidou-o - %1$s entrou - %1$s saiu - %1$s recusou o convite - %1$s expulsou %2$s - %1$s des-baniu %2$s - %1$s baniu %2$s - %1$s cancelou o convite de %2$s - %1$s mudou o seu avatar - %1$s definiu seu nome público como %2$s - %1$s alterou seu nome público de %2$s para %3$s - %1$s apagou o seu nome público (%2$s) - %1$s alterou o tópico desta sala para: %2$s - %1$s alterou o nome desta sala para: %2$s - %s iniciou uma chamada de vídeo. - %s iniciou uma chamada de voz. - %s respondeu à chamada. - %s terminou a chamada. - %1$s tornou o histórico futuro desta sala visível para %2$s - todas os membros que integram esta sala, a partir do momento em que foram convidados. - todas os membros da sala, a partir do momento em que entraram. - todas os membros da sala. - todos. - desconhecida (%s). - %1$s ativou a criptografia ponta-a-ponta (%2$s) - - %1$s solicitou uma conferência VoIP - A conferência VoIP começou - A conferência VoIP terminou - - (o avatar também foi alterado) - %1$s removeu o nome da sala - %1$s removeu o tópico da sala - %1$s atualizou o seu perfil %2$s - %1$s enviou um convite para que %2$s se junte à sala - %1$s aceitou o convite para %2$s - - ** Impossível decifrar: %s ** - O dispositivo de quem enviou a mensagem não nos enviou as chaves para esta mensagem. - - - Não foi possível apagar - Não foi possível enviar a mensagem - - O envio da imagem falhou - - - Erro de conexão à Internet - Erro do Matrix - - - - - - - - - Ainda não é possível voltar a entrar numa sala vazia. - - Mensagem cifrada - - - Endereço de e-mail - Número de telefone - - - Convite de %s - Convite para sala - %1$s e %2$s - Sala vazia - - - %1$s enviou um sticker. - - %s fez o upgrade da sala. - - Mensagem removida - Mensagem removida por %1$s - diff --git a/matrix-sdk-android/src/main/res/values-ru/strings.xml b/matrix-sdk-android/src/main/res/values-ru/strings.xml deleted file mode 100644 index 1236dd358a..0000000000 --- a/matrix-sdk-android/src/main/res/values-ru/strings.xml +++ /dev/null @@ -1,290 +0,0 @@ - - - %1$s: %2$s - %1$s отправил(а) изображение. - %s приглашение - %1$s пригласил(а) %2$s - %1$s пригласил(а) вас - %1$s вошёл(ла) в комнату - %1$s покинул(а) комнату - %1$s отклонил(а) приглашение - %1$s выгнан %2$s - %1$s разблокировал(а) %2$s - %1$s заблокировал(а) %2$s - %1$s отозвал(а) приглашение %2$s - %1$s изменил(а) свой аватар - %1$s установил(а) имя %2$s - %1$s изменил(а) имя с %2$s на %3$s - %1$s удалил(а) свое имя (%2$s) - %1$s изменил(а) тему на: %2$s - %1$s изменил(а) название комнаты: %2$s - %s начал(а) видеовызов. - %s начал(а) голосовой вызов. - %s ответил(а) на звонок. - %s завершил(а) вызов. - %1$s сделал(а) будущую историю комнаты видимой %2$s - всем членам, с момента их приглашения. - всем членам, с момента присоединения. - всем членам. - всем. - неизвестно (%s). - %1$s включил(а) сквозное шифрование (%2$s) - %1$s запросил(а) VoIP конференцию - VoIP-конференция начата - VoIP-конференция завершена - (аватар также был изменен) - %1$s удалил(а) название комнаты - %1$s удалил(а) тему комнаты - %1$s обновил(а) свой профиль %2$s - %1$s отправил(а) приглашение %2$s присоединиться к комнате - %1$s принял(а) приглашение от %2$s - ** Невозможно расшифровать: %s ** - Устройство отправителя не предоставило нам ключ для расшифровки этого сообщения. - - Не удалось изменить - Не удалось отправить сообщение - Не удалось загрузить изображение - - Сетевая ошибка - Ошибка Matrix - - - - - В настоящее время невозможно вновь присоединиться к пустой комнате. - Зашифрованное сообщение - - Адрес электронной почты - Номер телефона - %1$s отправил стикер. - - Приглашение от %s - Приглашение в комнату - %1$s и %2$s - Пустая комната - - %1$s и 1 другой - %1$s и %2$d другие - %1$s и %2$d других - - - Сообщение удалено - %1$s удалил(а) сообщение - Сообщение удалено [причина: %1$s] - %1$s удалил(а) сообщение [причина: %2$s] - Начальная синхронизация: -\nИмпорт учетной записи… - Начальная синхронизация: -\nИмпорт криптографии - Начальная синхронизация: -\nИмпорт комнат - Синхронизация начата: -\nИмпорт присоединенных комнат - Синхронизация начата: -\nИмпорт приглашенных комнат - Начальная синхронизация: -\nИмпорт покинутых комнат - Начальная синхронизация: -\nИмпорт сообществ - Начальная синхронизация: -\nИмпорт данных учетной записи - %s обновил эту комнату. - Отправка сообщения… - Очистить очередь отправки - %1$s отозвал приглашение %2$s присоединиться к комнате - Приглашение %1$s. Причина: %2$s - %1$s приглашен %2$s. Причина: %3$s - %1$s пригласил вас. Причина: %2$s - %1$s вошёл(ла) в комнату. Причина: %2$s - %1$s покинул(а) комнату. Причина: %2$s - %1$s отклонил приглашение. Причина: %2$s - %1$s выгнали %2$s. Причина: %3$s - %1$s разблокировано %2$s. Причина: %3$s - %1$s забанен %2$s. Причина: %3$s - %1$s отправил приглашение %2$s в комнату. Причина: %3$s - %1$s отозвал приглашение %2$s присоединиться к комнате. Причина: %3$s - %1$s принял приглашение для %2$s. Причина: %3$s - %1$s отозвал приглашение %2$s. Причина: %3$s - %1$s создал(а) комнату - - %1$s добавил(а) %2$s в качестве адреса для этой комнаты. - %1$s добавил(а) %2$s в качестве адресов для этой комнаты. - %1$s добавил(а) %2$s в качестве адресов для этой комнаты. - - - %1$s удалил(а) адрес %2$s для комнаты. - %1$s удалил(а) адреса %2$s для комнаты. - %1$s удалил(а) адреса %2$s для комнаты. - - %1$s добавил(а) адреса %2$s и удалил(а) %3$s для комнаты. - %1$s сделал(а) %2$s главным адресом комнаты. - %1$s удалил(а) главный адрес комнаты. - %1$s разрешил(а) гостям входить в комнату. - %1$s запретил(а) гостям входить в комнату. - %1$s включил(а) сквозное шифрование. - %1$s включил(а) сквозное шифрование (неизвестный алгоритм %2$s). - Вы отправили изображение. - Вы отправили стикер. - Ваше приглашение - Вы создали комнату - Вы пригласили %1$s - Вы вошли в комнату - Вы покинули комнату - Вы отклонили приглашение - Вы выгнали %1$s - Вы разбанили %1$s - Вы забанили %1$s - Вы отозвали приглашение %1$s - Вы сменили свой аватар - Вы сменили своё отображаемое имя на %1$s - Вы сменили своё отображаемое имя с %1$s на %2$s - Вы удалили своё отображаемое имя (%1$s) - Вы сменили тему на: %1$s - Вы сменили название комнаты на: %1$s - Вы начали видеозвонок. - Вы начали звонок. - Вы ответили на звонок. - Вы закончили звонок. - Вы сделали будущую историю комнаты видимой для %1$s - Вы включили сквозное шифрование (%1$s) - Вы обновили эту комнату. - Вы начали групповой звонок - Вы удалили название комнаты - Вы удалили тему комнаты - Вы обновили свой профиль %1$s - Вы отправили %1$s приглашение в эту комнату - Вы отозвали у %1$s приглашение в эту комнату - Вы приняли приглашение для %1$s - %1$s добавил(а) виджет %2$s - Вы добавили виджет %1$s - %1$s удалил(а) виджет %2$s - Вы удалили виджет %1$s - %1$s изменил(а) виджет %2$s - Вы изменили виджет %1$s - Администратор - Модератор - По умолчанию - Пользовательский (%1$d) - Пользовательский - Вы изменили уровни доступа %1$s. - %1$s изменил(а) уровни доступа %2$s. - %1$s с %2$s на %3$s - Ваше приглашение. Причина: %1$s - Вы пригласили %1$s. Причина: %2$s - Вы вошли в комнату. Причина: %1$s - Вы покинули комнату. Причина: %1$s - Вы отклонили приглашение. Причина: %1$s - Вы выгнали %1$s. Причина: %2$s - Вы разбанили %1$s. Причина: %2$s - Вы забанили %1$s. Причина: %2$s - Вы отправили %1$s приглашение в эту комнату. Причина: %2$s - Вы отозвали у %1$s приглашение в эту комнату. Причина: %2$s - Вы приняли приглашение для %1$s. Причина: %2$s - Вы отозвали приглашение %1$s. Причина: %2$s - - Вы добавили адрес %1$s для этой комнаты. - Вы добавили %1$s в качестве адресов для этой комнаты. - Вы добавили %1$s в качестве адресов для этой комнаты. - - - Вы удалили адрес этой комнаты: %1$s. - Вы удалили адреса этой комнаты: %1$s. - Вы удалили адреса этой комнаты: %1$s. - - Вы добавили адреса %1$s и удалили %2$s для этой комнаты. - Вы задали главный адрес этой комнаты %1$s. - Вы удалили главный адрес этой комнаты. - Вы разрешили гостям входить в комнату. - Вы запретили гостям входить в комнату. - Вы включили сквозное шифрование. - Вы включили сквозное шифрование (неизвестный алгоритм %1$s). - %1$s изменил(а) аватар комнаты - Вы изменили аватар комнаты - %s отправил(а) данные для начала звонка. - Вы отправили данные для начала звонка. - %1$s удалил(а) аватар комнаты - Вы удалили аватар комнаты - Вы запретили гостям входить в комнату. - %1$s запретил(а) гостям входить в комнату. - Вы разрешили гостям присоединяться сюда. - %1$s разрешил(а) гостям присоединиться сюда. - Вы вышли. Причина: %1$s - %1$s вышел(-ла). Причина: %2$s - Вы вошли. Причина: %1$s - %1$s вошел(-ла). Причина: %2$s - Вы отозвали приглашение %1$s - %1$s отозвал(а) приглашение %2$s - Вы пригласили %1$s - %1$s пригласил(а) %2$s - Вы сделали будущие сообщения видимыми для %1$s - %1$s сделал(а) будущие сообщения видимыми для %2$s - Вы покинули комнату - %1$s покинул(а) комнату - Вы вошли - %1$s вошел(ла) - Вы создали обсуждение - %1$s создал(а) обсуждение - Вы обновили эту комнату. - %s обновил(а) эту комнату. - - %1$s, %2$s, %3$s и %4$d другой - %1$s, %2$s, %3$s и %4$d других - %1$s, %2$s, %3$s и %4$d другие - %1$s, %2$s, %3$s и %4$d другие - - %1$s, %2$s, %3$s и %4$s - %1$s, %2$s и %3$s - 🎉 Всем серверам запрещено участвовать! Эта комната больше не может быть использована. - Без изменений. - Пустая комната (была %s) - • Соответствующий сервер %s заблокирован. - • Сервер, соответствующий буквальным IP-адресам, теперь запрещён. - • Сервер, соответствующий буквальным IP-адресам, теперь разрешён. - • Сервер, соответствующий %s, теперь запрещён. - • Сервер, соответствующий %s, теперь разрешён. - • Сервер, соответствующий %s, был удалён из списка блокировки. - • Сервер, соответствующий буквальным IP-адресам, запрещён. - • Сервер, соответствующий буквальным IP-адресам, разрешён. - • Сервер, соответствующий %s, разрешён. - • Сервер, соответствующий %s, был удалён из разрешённого списка. - Вы изменили права доступа сервера (ACL) для этой комнаты. - %s изменил права доступа сервера (ACL) для этой комнаты. - Вы настроили права доступа сервера (ACL) для этой комнаты. - %s устанавливает права доступа сервера (ACL) для этой комнаты. - Вы изменили адреса этой комнаты. - %1$s изменил(а) адреса этой комнаты. - Вы изменили основной и альтернативный адреса этой комнаты. - %1$s изменил(а) основной и альтернативный адреса этой комнаты. - Вы изменили альтернативные адреса для этой комнаты. - %1$s изменил(а) альтернативные адреса для этой комнаты. - - Вы удалили альтернативный адрес %1$s для этой комнаты. - Вы удалили альтернативные адреса %1$s для этой комнаты. - Вы удалили альтернативные адреса %1$s для этой комнаты. - Вы удалили альтернативные адреса %1$s для этой комнаты. - - - %1$s удалил(а) альтернативный адрес %2$s для этой комнаты. - %1$s удалил(а) альтернативные адреса %2$s для этой комнаты. - %1$s удалил(а) альтернативные адреса %2$s для этой комнаты. - %1$s удалил(а) альтернативные адреса %2$s для этой комнаты. - - - Вы добавили альтернативный адрес %1$s для этой комнаты. - Вы добавили альтернативные адреса %1$s для этой комнаты. - Вы добавили альтернативные адреса %1$s для этой комнаты. - Вы добавили альтернативные адреса %1$s для этой комнаты. - - - %1$s добавил(а) альтернативный адрес %2$s для этой комнаты. - %1$s добавил(а) альтернативные адреса %2$s для этой комнаты. - %1$s добавил(а) альтернативные адреса %2$s для этой комнаты. - %1$s добавил(а) альтернативные адреса %2$s для этой комнаты. - - Вы изменили видеоконференцию - %1$s изменил(а) видеоконференцию - Вы завершили видеоконференцию - %1$s завершил(а) видеоконференцию - Вы начали видеоконференцию - %1$s начал(а) видеоконференцию - \ No newline at end of file diff --git a/matrix-sdk-android/src/main/res/values-si/strings.xml b/matrix-sdk-android/src/main/res/values-si/strings.xml deleted file mode 100644 index c0c6522ed4..0000000000 --- a/matrix-sdk-android/src/main/res/values-si/strings.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - %1$s: %2$s - \ No newline at end of file diff --git a/matrix-sdk-android/src/main/res/values-sk/strings.xml b/matrix-sdk-android/src/main/res/values-sk/strings.xml deleted file mode 100644 index 390a3e9ba3..0000000000 --- a/matrix-sdk-android/src/main/res/values-sk/strings.xml +++ /dev/null @@ -1,211 +0,0 @@ - - - %1$s: %2$s - %1$s poslal/a obrázok. - Pozvanie od %s - %1$s pozval/a %2$s - %1$s vás pozval/a - %1$s vstúpil/a do miestnosti - %1$s opustil/a miestnosť - %1$s odmietol/a pozvanie - %1$s vykázal/a %2$s - %1$s povolil/a vstupovať %2$s - %1$s zakázal/a vstupovať %2$s - %1$s vzal/a späť pozvanie %2$s - %1$s si zmenil/a obrázok v profile - %1$s si nastavil/a zobrazované meno %2$s - %1$s si zmenil/a zobrazované meno %2$s na %3$s - %1$s odstránil/a svoje zobrazované meno (%2$s) - %1$s zmenil/a tému na: %2$s - %1$s zmenil/a názov miestnosti na: %2$s - %s uskutočnil/a video hovor. - %s zatelefonoval/a. - %s prijal/a hovor. - %s ukončil/a hovor. - %1$s sprístupnil/a budúcu históriu miestnosti %2$s - pre všetkých členov, od kedy boli pozvaní. - pre všetkých členov, od kedy vstúpili. - pre všetkých členov. - pre každého. - neznámym (%s). - %1$s povolil/a E2E šifrovanie (%2$s) - %1$s požiadal/a o VoIP konferenciu - Začala sa VoIP konferencia - Skončila sa VoIP konferencia - (aj obrázok v profile) - %1$s odstránil/a názov miestnosti - %1$s odstránil/a tému miestnosti - %1$s aktualizoval/a svoj profil %2$s - %1$s pozval/a %2$s vstúpiť do miestnosti - %1$s prijal/a pozvanie pre %2$s - ** Nie je možné dešifrovať: %s ** - Zo zariadenia odosieľateľa nebolo možné získať kľúče potrebné na dešifrovanie tejto správy. - Nie je možné vymazať - Nie je možné odoslať správu - Nepodarilo sa nahrať obrázok - Chyba siete - Chyba Matrix - V súčasnosti nie je možné znovu vstúpiť do prázdnej miestnosti. - Šifrovaná správa - Emailová adresa - Telefónne číslo - %1$s poslal/a nálepku. - Pozvanie od %s - Pozvanie do miestnosti - %1$s a %2$s - Prázdna miestnosť - - %1$s a 1 ďalší - %1$s a %2$d ďalší - %1$s a %2$d ďalších - - - %s aktualizoval/a túto miestnosť. - Odstránená správa - Odstránená správa používateľom %1$s - Odstránená správa [dôvod: %1$s] - Odstránená správa používateľom %1$s [dôvod: %2$s] - Úvodná synchronizácia: -\nPrebieha import účtu… - Úvodná synchronizácia: -\nPrebieha import šifrovacích kľúčov - Úvodná synchronizácia: -\nPrebieha import miestností - Úvodná synchronizácia: -\nPrebieha import miestností, do ktorých ste vstúpili - Úvodná synchronizácia: -\nPrebieha import pozvaní - Úvodná synchronizácia: -\nPrebieha import opustených miestností - Úvodná synchronizácia: -\nPrebieha import komunít - Úvodná synchronizácia: -\nPrebieha import údajov účtu - Odosielanie správy… - Vymazať správy na odoslanie - %1$s zamietol/a pozvanie používateľa %2$s vstúpiť do miestnosti - Pozvanie od %1$s. Dôvod: %2$s - %1$s pozval/a %2$s. Dôvod: %3$s - %1$s vás pozval/a. Dôvod: %2$s - %1$s vstúpil/a do miestnosti. Dôvod: %2$s - %1$s opustil/a miestnosť. Dôvod: %2$s - %1$s odmietol/a pozvanie. Dôvod: %2$s - %1$s vykázal/a %2$s. Dôvod: %3$s - %1$s povolil/a vstupovať %2$s. Dôvod: %3$s - %1$s zakázal/a vstupovať %2$s. Dôvod: %3$s - %1$s pozval/a %2$s vstúpiť do miestnosti. Dôvod: %3$s - %1$s zamietol/a pozvanie používateľa %2$s vstúpiť do miestnosti. Dôvod: %3$s - %1$s prijal/a pozvanie pre %2$s. Dôvod: %3$s - %1$s vzal/a späť pozvanie %2$s. Dôvod: %3$s - - %1$s pridal/a adresu %2$s pre túto miestnosť. - %1$s pridal/a adresy %2$s pre túto miestnosť. - %1$s pridal/a adresy %2$s pre túto miestnosť. - - - %1$s odstránil/a adresu %2$s pre túto miestnosť. - %1$s odstránil/a adresy %3$s pre túto miestnosť. - %1$s odstránil/a adresy %3$s pre túto miestnosť. - - %1$s pridal/a adresy %2$s a odstránil/a adresy %3$s pre túto miestnosť. - %1$s nastavil/a hlavnú adresu tejto miestnosti %2$s. - %1$s odstránil/a hlavnú adresu tejto miestnosti. - %1$s povolil/a hosťom///návštevníkom prístup do tejto miestnosti. - Poslali ste obrázok. - Poslali ste nálepku. - Pozvanie od vás - %1$s vytvoril/a miestnosť - Vytvorili ste miestnosť - Pozvali ste %1$s - Vstúpili ste do miestnosti - Opustili ste miestnosť - Odmietli ste pozvanie - Vykázali ste %1$s - Povolili ste vstupovať %1$s - Zakázali ste vstupovať %1$s - Vzali ste späť pozvanie %1$s - Zmenili ste si obrázok v profile - Nastavili ste si zobrazované meno %1$s - Zmenili ste si zobrazované meno %1$s na %2$s - Odstránili ste svoje zobrazované meno %1$s - Zmenili ste tému na: %1$s - %1$s zmenil/a obrázok miestnosti - Zmenili ste obrázok miestnosti - Zmenili ste názov miestnosti na: %1$s - Uskutočnili ste video hovor. - Zatelefonovali ste. - %s poslal údaje pre nastavenie hovoru. - Poslali ste údaje na nastavenie hovoru. - Prijali ste hovor. - Ukončili ste hovor. - Sprístupnili ste budúcu históriu miestnosti %1$s - Povolili ste E2E šifrovanie (%1$s) - Aktualizovali ste túto miestnosť. - Požiadali ste o VoIP konferenciu - Odstránili ste názov miestnosti - Odstránili ste tému miestnosti - %1$s odstránil obrázok miestnosti - Odstránili ste obrázok miestnosti - Aktualizovali ste svoj profil %1$s - Pozvali ste %1$s vstúpiť do miestnosti - Zamietli ste pozvanie používateľa %1$s vstúpiť do miestnosti - Prijali ste pozvanie pre %1$s - %1$s pridal/a widget %2$s - Pridali ste widget %1$s - %1$s odstránil/a widget %2$s - Odstránili ste widget %1$s - %1$s upravil/a widget %2$s - Upravili ste widget %1$s - Správca - Moderátor - Predvolený - Vlastná úroveň (%1$d) - Vlastná úroveň - Zmenili ste úroveň moci používateľa %1$s. - %1$s zmenil úroveň moci používateľa %2$s. - %1$s z %2$s na %3$s - Pozvanie od vás. Dôvod: %1$s - Pozvali ste %1$s. Dôvod: %2$s - Vstúpili ste do miestnosti. Dôvod: %1$s - Opustili ste miestnosť. Dôvod: %1$s - Odmietli ste pozvanie. Dôvod: %1$s - Vykázali ste %1$s. Dôvod: %2$s - Povolili ste vstupovať %1$s. Dôvod: %2$s - Zakázali ste vstupovať %1$s. Dôvod: %2$s - Pozvali ste %1$s vstúpiť do miestnosti. Dôvod: %2$s - Zamietli ste pozvanie používateľa %1$s vstúpiť do miestnosti. Dôvod: %2$s - Prijali ste pozvanie pre %1$s. Dôvod: %2$s - Vzali ste späť pozvanie %1$s. Dôvod: %2$s - - Pridali ste adresu %1$s pre túto miestnosť. - Pridali ste adresy %1$s pre túto miestnosť. - Pridali ste adresy %1$s pre túto miestnosť. - - - Odstránili ste adresu %1$s pre túto miestnosť. - Odstránili ste adresy %1$s pre túto miestnosť. - Odstránili ste adresy %1$s pre túto miestnosť. - - Pridali ste %1$s a odstránili adresy %2$s pre túto miestnosť. - Nastavili ste hlavnú adresu tejto miestnosti %1$s. - Odstránili ste hlavnú adresu tejto miestnosti. - Povolili ste hosťom///návštevníkom prístup do tejto miestnosti. - %1$s zakázal/a hosťom///návštevníkom prístup do tejto miestnosti. - Zakázali ste hosťom///návštevníkom prístup do tejto miestnosti. - %1$s povolil/a E2E šifrovanie. - Povolili ste E2E šifrovanie. - %1$s povolil/a E2E šifrovanie (Nerozpoznaný algorytmus %2$s). - Povolili ste E2E šifrovanie (Nerozpoznaný algorytmus %1$s). - nastavili ste na servery pravidlá ACL tejto miestnosti. - %s nastavil(a) na servery pravidlá ACL tejto miestnosti. - Aktualizovali ste sem. - %s aktualizoval(a) sem. - %1$s sprístupnil(a) budúce správy %2$s - Sprístupnili ste budúce správy %1$s - Opustili ste miestnosť - %1$s opustil(a) miestnosť - Vstúpili ste - %1$s vstúpil(a) - Vytvorili ste konverzáciu - %1$s vytvoril(a) konverzáciu - \ No newline at end of file diff --git a/matrix-sdk-android/src/main/res/values-sq/strings.xml b/matrix-sdk-android/src/main/res/values-sq/strings.xml deleted file mode 100644 index 33ed9f4e0a..0000000000 --- a/matrix-sdk-android/src/main/res/values-sq/strings.xml +++ /dev/null @@ -1,262 +0,0 @@ - - - %1$s: %2$s - %1$s dërgoi një figurë. - %1$s ftoi %2$s - %1$s ju ftoi - %1$s hyri në dhomë - %1$s doli nga dhoma - %1$s hodhi tej ftesën - %1$s përzuri %2$s - %1$s dëboi %2$s - %1$s ndryshoi avatarin e vet - %1$s ndryshoi temën në: %2$s - %1$s ndryshoi emrin e dhomës në: %2$s - %s bëri një thirrje video. - %s bëri një thirrje zanore. - %s iu përgjigj thirrjes. - %s e përfundoi thirrjen. - %1$s e bëri historikun e ardhshëm të dhomës të dukshëm për %2$s - për krejt anëtarët e dhomës, prej çastit kur janë ftuar. - për krejt anëtarët e dhomës, prej çastit kur morën pjesë. - krejt anëtarët e dhomës. - cilido. - e panjohur (%s). - %1$s kërkoi një konferencë VoIP - Konferenca VoIP filloi - Konferenca VoIP përfundoi - (u ndryshua edhe avatari) - %1$s hoqi emrin e dhomës - %1$s përditësoi profilin e tij %2$s - %1$s pranoi ftesën tuaj për %2$s - ** S’arrihet të shfshehtëzohet: %s ** - Pajisja e dërguesit nuk na ka dërguar kyçet për këtë mesazh. - S’u redaktua dot - S’arrihet të dërgohet mesazh - Ngarkimi i figurës dështoi - Gabim rrjeti - Gabim Matrix - Hëpërhë s’është e mundur të rihyhet në një dhomë të zbrazët. - Mesazh i fshehtëzuar - Adresë email - Numër telefoni - Ftesë nga %s - Ftesë Dhome - %1$s dhe %2$s - Dhomë e zbrazët - %1$s dërgoi një ngjitës. - Ftesë e %s - %1$s hoqi dëbimin për %2$s - %1$s tërhoqi mbrapsht ftesën për %2$s - %1$s caktoi për veten emër ekrani %2$s - %1$s ndryshoi emrin e tyre në ekran nga %2$s në %3$s - %1$s hoqi emrin e tij në ekran (%2$s) - %1$s aktivizoi fshehtëzim skaj-më-skaj (%2$s) - %1$s hoqi temën e dhomës - %1$s dërgoi një ftesë për %2$s që të marrë pjesë në dhomë - - %1$s dhe 1 tjetër - %1$s dhe %2$d të tjerë - - Mesazhi u hoq - Mesazhi u hoq nga %1$s - Mesazh i hequr [arsye: %1$s] - Mesazh i hequr nga %1$s [arsye: %2$s] - %s e përmirësoi këtë dhomë. - Njëkohësimi Fillestar: -\nPo importohet llogaria… - Njëkohësimi Fillestar: -\nPo importohet kriptografi - Njëkohësimi Fillestar: -\nPo importohen Dhoma - Njëkohësimi Fillestar: -\nPo importohen Dhoma Ku Është Bërë Hyrje - Njëkohësimi Fillestar: -\nPo importohen Dhoma Me Ftesë - Njëkohësimi Fillestar: -\nPo importohen Dhoma të Braktisura - Njëkohësimi Fillestar: -\nPo importohen Bashkësi - Njëkohësimi Fillestar: -\nPo importohet të Dhëna Llogarie - Po dërgohet mesazh… - Spastro radhë pritjeje - %1$s shfuqizoi ftesën për %2$s për pjesëmarrje te dhoma - Ftesë e %1$s. Arsye: %2$s - %1$s ftoi %2$s. Arsye: %3$s - %1$s ju ftoi. Arsye: %2$s - %1$s erdhi në dhomë. Arsye: %2$s - %1$s doli nga dhoma. Arsye: %2$s - %1$s hodhi poshtë ftesën. Arsye: %2$s - %1$s përzuri %2$s. Arsye: %3$s - %1$s hoqi dëbimin për %2$s. Arsye: %3$s - %1$s dëboi %2$s. Arsye: %3$s - %1$s dërgoi një ftesë për %2$s për të ardhur në dhomë. Arsye: %3$s - %1$s shfuqizoi ftesën për %2$s për të ardhur në dhomë. Arsye: %3$s - %1$s pranoi ftesën për %2$s. Arsye: %3$s - %1$s tërhoqi mbrapsht ftesën për %2$s. Arsye: %3$s - - %1$s shtoi %2$s si një adresë për këtë dhomë. - %1$s shtoi %2$s si adresa për këtë dhomë. - - - %1$s hoqi %2$s si adresë për këtë dhomë. - %1$s hoqi %2$s si adresa për këtë dhomë. - - %1$s shtoi %2$s dhe hoqi %3$s si adresa për këtë dhomë. - %1$s caktoi %2$s si adresë kryesore për këtë dhomë. - %1$s hoqi adresën kryesore për këtë dhomë. - %1$s ka lejuar vizitorë të marrin pjesë në dhomë. - %1$s ka penguar vizitorë të marrin pjesë në dhomë. - %1$s aktivizoi fshehtëzim skaj-më-skaj. - %1$s aktivizoi fshehtëzim skaj-më-skaj (algoritëm i papranuar %2$s). - %1$s krijo dhomën - Dërguat një figurë. - Dërguat një ngjitës. - Ftesa juaj - Krijuat dhomën - Ftuat %1$s - Hytë në dhomë - Dolët nga dhoma - Hodhët poshtë ftesën - Përzutë %1$s - Hoqët dëbimin për %1$s - Dëbuat %1$s - Tërhoqët mbrapsht ftesën për %1$s - Ndryshuat avatarin tuaj - Caktuat si emrin tuaj në ekran %1$s - E ndryshuat emrin tuaj në ekran nga %1$s në %2$s - Hoqët emrin tuaj në ekran (qe %1$s) - E ndryshuat temën në: %1$s - %1$s ndryshoi avatarin e dhomës - Ndryshuat avatarin e dhomës - Ndryshuat emrin e dhomës në: %1$s - Filluat një thirrje video. - Filluat një thirrje zanore. - %s dërgoi të dhëna për ujdisjen e thirrjes. - Dërguat të dhëna për ujdisjen e thirrjes. - Iu përgjigjët thirrjes. - E përfunduat thirrjen. - E bëtë historikun e ardhshëm të dhomë të dukshëm për %1$s - Aktivizuat fshehtëzim skaj-më-skaj (%1$s) - Përmirësuat këtë dhomë. - Kërkuat një konferencë VoIP - Hoqët emrin e dhomës - Hoqët temën e dhomës - %1$s hoqi avatarin e dhomës - Hoqët avatarin e dhomës - Përditësuat profilin tuaj %1$s - Dërguat një ftesë te %1$s për të ardhur te dhoma - Shfuqizuat ftesën për ardhjen në dhomë të %1$s - Pranuat ftesën për %1$s - %1$s shtoi widget-in %2$s - Shtuat widget-in %1$s - %1$s hoqi widget-in %2$s - Hoqët widget-in %1$s - %1$s ndryshoi widget-in %2$s - Ndryshuat widget-in %1$s - Përgjegjës - Moderator - Parazgjedhje - Vetjake (%1$d) - Vetjake - Ndryshuat shkallën e pushtetit për %1$s. - %1$s ndryshoi shkallën e pushtetit për %2$s. - %1$s nga %2$s në %3$s - Ftesa juaj. Arsye: %1$s - Ftuat %1$s. Arsye: %2$s - Erdhët në dhomë, Arsye: %1$s - Ikët nga dhoma. Arsye: %1$s - Hodhët poshtë ftesën. Arsye: %1$s - Përzutë %1$s. Arsye: %2$s - Hoqët dëbimin për %1$s. Arsye: %2$s - Dëbuat %1$s. Arsye: %2$s - Dërguat një ftesë për %1$s të vijë në dhomë. Arsye: %2$s - Shfuqizuat ftesën për ardhjen në dhomë të %1$s. Arsye: %2$s - Pranuat ftesën për %1$s. Arsye: %2$s - Tërhoqët mbrapsht ftesën për %1$s. Arsye: %2$s - - Shtuat %1$s si një adresë për këtë dhomë. - Shtuat %1$s si adresa për këtë dhomë. - - - Hoqët %1$s si një adresë për këtë dhomë. - Hoqët %1$s si adresa për këtë dhomë. - - Shtuat %1$s dhe hoqët %2$s si adresa për këtë dhomë. - Caktuat si adresë kryesore për këtë dhomë %1$s. - Hoqët adresën kryesore për këtë dhomë. - Keni lejuar të vijnë mysafirë në dhomë. - U keni penguar mysafirëve të vijnë në dhomë. - Aktivizuat fshehtëzimin skaj-më-skaj. - Aktivizuat fshehtëzimin skaj-më-skaj (algoritëm %1$s i panjohur). - Keni penguar të vijnë në dhomë mysafirë. - %1$s ka penguar të vijnë në dhomë mysafirë. - Keni lejuar të vijnë mysafirë këtu. - %1$s ka lejuar të vijnë këtu mysafirë. - Dolët. Arsye: %1$s - %1$s doli. Arsye: %2$s - Erdhët. Arsye: %1$s - %1$s erdhi. Arsye: %2$s - Shfuqizuat ftesën për %1$s - %1$s shfuqizoi ftesën për %2$s - Ftuat %1$s - %1$s ftoi %2$s - U përmirësuat këtu. - %s këtu u përmirësua. - I bëtë mesazhet e ardhshëm të dukshëm për %1$s - %1$s i bëri mesazhet e ardhshëm të dukshëm për %2$s - Dolët nga dhoma - %1$s doli nga dhoma - Erdhët - %1$s erdhi - Krijuat diskutimin - %1$s krijoi diskutimin - Dhomë e zbrazët (was %s) - - %1$s, %2$s, %3$s dhe %4$d tjetër - %1$s, %2$s, %3$s dhe %4$d të tjerë - - %1$s, %2$s, %3$s dhe %4$s - %1$s, %2$s dhe %3$s - 🎉 U është penguar pjesëmarrja krejt shërbyesve! Kjo dhomë s’mund të përdoret më. - Pa ndryshim. - Ndryshuat ACL-ra shërbyesi për këtë dhomë. - %s ndryshoi ACL-ra shërbyesi për këtë dhomë. - Ujdisët ACL-ra shërbyesi për këtë dhomë. - %s ujdisi ACL-ra shërbyesi për këtë dhomë. - • Shërbyes që kanë përputhje me %s u hoqën nga lista e të lejuarve. - • Shërbyesit që kanë përputhje me %s tani janë të lejuar. - • Shërbyesit që kanë përputhje me %s u hoqën nga lista e ndalimeve. - • Shërbyesit që kanë përputhje me %s tani janë të ndaluar. - • Shërbyesit që kanë përputhje me %s janë të ndaluar. - • Shërbyesit që kanë përputhje me %s janë të ndaluar. - Ndryshuat adresat për këtë dhomë. - %1$s ndryshoi adresat për këtë dhomë. - Ndryshuat adresat kryesore dhe alternative për këtë dhomë. - %1$s ndryshoi adresat kryesore dhe alternative për këtë dhomë. - Ndryshuat adresat alternative për këtë dhomë. - %1$s ndryshoi adresat alternative për këtë dhomë. - - Hoqët adresën alternative %1$s për këtë dhomë. - Hoqët adresat alternative %1$s për këtë dhomë. - - - %1$s hoqët adresën alternative %2$s për këtë dhomë. - %1$s hoqët adresat alternative %2$s për këtë dhomë. - - - Shtuat adresën alternative %1$s për këtë dhomë. - Shtuat adresat alternative %1$s për këtë dhomë. - - - %1$s shtoi adresën alternative %2$s për këtë dhomë. - %1$s shtoi adresat alternative %2$s për këtë dhomë. - - Ndryshuat konferencën video - Konferenca video u ndryshua nga %1$s - Përfunduat konferencën video - Konferenca video u përfundua nga %1$s - Nisët një konferencë video - Konferencë video nisur nga %1$s - \ No newline at end of file diff --git a/matrix-sdk-android/src/main/res/values-sr/strings.xml b/matrix-sdk-android/src/main/res/values-sr/strings.xml deleted file mode 100644 index cf4aecaad1..0000000000 --- a/matrix-sdk-android/src/main/res/values-sr/strings.xml +++ /dev/null @@ -1,276 +0,0 @@ - - - %1$s напусти собу - Ви се придружисте - %1$s се придружи - Ви се придружисте - %1$s се придружи - %1$s позва вас - Ви позвасте корисника %1$s - %1$s позва корисника %2$s - Направили сте дискусију - %1$s: %2$s - Почетна синхронизација: -\nувозим налог… - Празна соба (била је %s) - Празна соба - - %1$s и још %2$d - %1$s и још %2$d - %1$s и још %2$d - - %1$s направи дискусију - Направили сте собу - %1$s направи собу - Ваша позивница - %s шаље позивницу - Послали сте налепницу. - %1$s посла налепницу. - Послали сте слику. - %1$s посла слику. - Изменили сте свој аватар - %1$s измени свој аватар - Повукли сте позивницу за корисника %1$s - %1$s повуче позивницу за корисника %2$s - Забранили сте корисника %1$s - %1$s забрани корисника %2$s - Укинули сте забрану кориснику %1$s - %1$s укину забрану кориснику %2$s - Избацили сте корисника %1$s - %1$s избаци %2$s - Одбили сте позивницу - %1$s одби позивницу - Напустили сте собу - %1$s напусти собу - Напустили сте собу - Укључили сте шифровање с краја на крај (непознат алгоритам %1$s). - %1$s укључи шифровање с краја на крај (непознат алгоритам %2$s). - %1$s искључи шифровање с краја на крај. - Спречили сте да се гости придруже у собу. - Укључили сте шифровање с краја на крај. - Дозволили сте гостима да се придруже соби. - Изменили сте алтернативну адресу за ову собу. - Очисти ред за слање - Шаљем поруку… - - %1$s, %2$s, %3$s и још %4$d - %1$s, %2$s, %3$s и још %4$d - %1$s, %2$s, %3$s и још %4$d - - %1$s, %2$s, %3$s и %4$s - %1$s, %2$s и %3$s - %1$s и %2$s - Број телефона - Адреса е-поште - Шифрована порука - Тренутно није могуће да се вратите у празну собу. - Грешка Матрикса - Мрежна грешка - Неуспело слање слике - Не могу да пошаљем поруку - Уређај пошиљаоца није нам послао кључеве за ову поруку. - Изменили сте ниво снаге корисника %1$s. - посебно - посебно (%1$d) - подразумевано - модератор - админ - Порука уклоњена [разлог: %1$s] - Поруку уклони %1$s - Порука уклоњена - Уклонили сте аватар собе - %1$s уклони аватар собе - Уклонили сте тему собе - %1$s уклони тему собе - Уклонили сте назив собе - %1$s уклони назив собе - (аватар је такође промењен) - 🎉 Свим серверима је забрањено учествовање! Ова соба се више не може користити. - Без измене. - Надоградили сте ову собу. - непознато (%s). - Учинили сте да од сада, историјат буде видљив за %1$s - %1$s учини да од сада, историјат буде видљив за %2$s - Учинили сте да будуће поруке буду видљиве за %1$s - %1$s учини да будуће поруке буду видљиве за %2$s - свакога. - све чланове. - све чланове, од кад се придруже. - све чланове, од када су позвани. - Завршили сте позив. - %s заврши позив. - Одговорили сте на позив. - %s одговори на позив. - Послали сте податке за поставку позива. - %s посла податке за поставку позива. - Позвали сте гласовним позивом. - %s позва видео позивом. - Позвали сте видео позивом. - Изменили сте аватар собе - Поставили сте своје приказно име на %1$s - %1$s постави своје приказно име на %2$s - - Додали сте %1$s као адресу ове собе. - Додали сте %1$s као адресе ове собе. - Додали сте %1$s као адресе ове собе. - - - %1$s додаде %2$s као адресу ове собе. - %1$s додаде %2$s као адресе ове собе. - %1$s додаде %2$s као адресе ове собе. - - Повукли сте позивницу корисника %1$s. Разлог: %2$s - %1$s повлачи позивницу корисника %2$s. Разлог: %3$s - Прихватили сте позивницу за %1$s. Разлог: %2$s - %1$s прихвата позивницу за %2$s. Разлог:%3$s - Повукли сте позивницу да се %1$s придружи соби. Разлог: %2$s - %1$s повуче позивницу да се %2$s придружи соби. Разлог: %3$s - Послали сте позивницу да се %1$s придружи соби. Разлог: %2$s - %1$s посла позивницу да се %2$s придружи соби. Разлог: %3$s - Забранили сте корисника %1$s. Разлог: %2$s - %1$s забрани корисника %2$s. Разлог: %3$s - Одблокирали сте корисника %1$s. Разлог: %2$s - %1$s одблокира корисника %2$s. Разлог: %3$s - Избацили сте корисника %1$s. Разлог: %2$s - %1$s избаци корисника %2$s. Разлог: %3$s - Одбили сте позивницу. Разлог: %1$s - %1$s одби позивницу. Разлог: %2$s - Изашли сте. Разлог: %1$s - %1$s изађе. Разлог: %2$s - Напустили сте собу. Разлог: %1$s - %1$s напусти собу. Разлог: %2$s - Придружили сте се. Разлог: %1$s - %1$s се придружи. Разлог: %2$s - Придружили сте се соби. Разлог: %1$s - %1$s се придружи соби. Разлог: %2$s - %1$s вас позива. Разлог: %2$s - Позвали сте корисника %1$s. Разлог: %2$s - %1$s позва корисника %2$s. Разлог: %3$s - Ваша позивница. Разлог: %1$s - %1$s - позивница. Разлог: %2$s - Почетна синхронизација: -\nувозим податке о налогу - Почетна синхронизација: -\nувозим заједнице - Почетна синхронизација: -\nувозим напуштене собе - Почетна синхронизација: -\nувозим собе са позивницом - Почетна синхронизација: -\nувозим собе у којима сте - Почетна синхронизација: -\nувоз шифровања - Почетна синхронизација: -\nувозим собе - Позивница за собу - %s вас позива - Не могу да редигујем - ** Не могу да дешифрујем: %s ** - %1$s са %2$s на %3$s - %1$s измени ниво снаге кориснику %2$s. - Изменили сте %1$s виџет - %1$s измени %2$s виџет - Уклонили сте %1$s виџет - %1$s уклони %2$s виџет - Додали сте %1$s виџет - %1$s додаде %2$s виџет - Прихватили сте позивницу за %1$s - %1$s прихвати позивницу за %2$s - Повукли сте позивницу за корисника %1$s - %1$s повуче позивницу за корисника %2$s - Повукли сте позивницу да се %1$s придружи у собу - %1$s повуче позивницу да се %2$s придружи у собу - Позвали сте корисника %1$s - %1$s позва корисника %2$s - Послали сте позивницу да се %1$s придружи у собу - %1$s посла позивницу да се %2$s придружи у собу - Освежили сте свој профил %1$s - %1$s освежи свој профил %2$s - Поруку уклони %1$s [разлог: %2$s] - ВоИП конференција завршена - ВоИП конференција започела - Затражили сте ВоИП конференцију - %1$s затражи ВоИП конференцију - • Сервери који садрже ИП бројеве су сада забрањени. - • Сервери који садрже ИП бројеве су сада дозвољени. - • Сервери који садрже %s су уклоњени са листе дозвољених. - • Сервери који садрже %s су сада дозвољени. - • Сервери који садрже %s су уклоњени са листе забрањених. - • Сервери који садрже %s су сада забрањени. - Изменили сте АЦЛ сервера за ову собу. - %s измени АЦЛ сервера за ову собу. - • Сервери са ИП бројевима су забрањени. - • Сервери са ИП бројевима су дозвољени. - • Сервери који садрже %s су дозвољени. - • Сервери који садрже %s су забрањени. - Поставили сте АЦЛ сервера за ову собу. - %s постави АЦЛ сервера за ову собу. - Надоградили сте овде. - %s надогради овде. - %s надогради ову собу. - Укључили сте шифровање с краја на крај (%1$s) - %1$s укључи шифровање с краја на крај (%2$s) - %s упути видео позив. - Изменили сте назив собе у: %1$s - %1$s измени назив собе у: %2$s - %1$s измени аватар собе - Изменили сте тему на: %1$s - %1$s измени тему на: %2$s - Уклонили сте своје приказно име (било је %1$s) - %1$s уклони своје приказно име (било је %2$s) - Изменили сте приказно име са %1$s на %2$s - %1$s измени приказно име са %2$s на %3$s - %1$s забрани гостима да се придруже у собу. - Забранили сте гостима да се придруже у собу. - %1$s забрани гостима да се придруже у собу. - Дозволили сте гостима да се придруже овде. - %1$s дозволи гостима да се придруже овде. - %1$s дозволи гостима да се придруже у собу. - Изменили сте адресе за ову собу. - %1$s измени адресе за ову собу. - Изменили сте главну и алтернативне адресе за ову собу. - %1$s измени главну и алтернативне адресе за ову собу. - %1$s измени алтернативне адресе за ову собу. - - Уклонили сте алтернативну адресу %1$s за ову собу. - Уклонили сте алтернативне адресе %1$s за ову собу. - Уклонили сте алтернативне адресе %1$s за ову собу. - - - %1$s уклони алтернативну адресу %2$s за ову собу. - %1$s уклони алтернативне адресе %2$s за ову собу. - %1$s уклони алтернативне адресе %2$s за ову собу. - - - Додали сте алтернативну адресу %1$s за ову собу. - Додали сте алтернативне адресе %1$s за ову собу. - Додали сте алтернативне адресе %1$s за ову собу. - - - %1$s додаде алтернативну адресу %2$s за ову собу. - %1$s додаде алтернативне адресе %2$s за ову собу. - %1$s додаде алтернативне адресе %2$s за ову собу. - - Уклонили сте главну адресу за ову собу. - %1$s уклони главну адресу за ову собу. - Поставили сте главну адресу ове собе на %1$s. - %1$s постави главну адресу ове собе на %2$s. - Додали сте %1$s и уклонили %2$s као адресе ове собе. - %1$s додаде %2$s и уклони %3$s као адресе ове собе. - - Уклонили сте %1$s као адресу ове собе. - Уклонили сте %1$s као адресе ове собе. - Уклонили сте %1$s као адресе ове собе. - - - %1$s уклони %2$s као адресу ове собе. - %1$s уклони %2$s као адресе ове собе. - %1$s уклони %2$s као адресе ове собе. - - Изменили сте видео конференцију - %1$s измени видео конференцију - Завршили сте видео конференцију - %1$s заврши видео конференцију - Покренули сте видео конференцију - %1$s покрену видео конференцију - \ No newline at end of file diff --git a/matrix-sdk-android/src/main/res/values-sv/strings.xml b/matrix-sdk-android/src/main/res/values-sv/strings.xml deleted file mode 100644 index d202670c49..0000000000 --- a/matrix-sdk-android/src/main/res/values-sv/strings.xml +++ /dev/null @@ -1,266 +0,0 @@ - - - %1$s: %2$s - %1$s skickade en bild. - Du skickade en bild. - %1$s skickade en dekal. - Du skickade en dekal. - Inbjudan från %s - Inbjudan från dig - %1$s skapade rummet - Du skapade rummet - %1$s bjöd in %2$s - Du bjöd in %1$s - %1$s bjöd in dig - %1$s gick med i rummet - Du gick med i rummet - %1$s lämnade rummet - Du lämnade rummet - %1$s avböjde inbjudan - Du avböjde inbjudan - %1$s kickade %2$s - Du kickade %1$s - %1$s avbannade %2$s - Du avbannade %1$s - %1$s avbannade %2$s - Du bannade %1$s - %1$s drog tillbaka inbjudan för %2$s - Du drog tillbaka inbjudan för %1$s - %1$s bytte sin avatar - Du bytte din avatar - %1$s satte sitt visningsnamn till %2$s - Du satte ditt visningsnamn till %1$s - %1$s bytte sitt visningsnamn från %2$s till %3$s - Du bytte ditt visningsnamn från %1$s till %2$s - %1$s tog bort sitt visningsnamn (det var %2$s) - Du tog bort ditt visningsnamn (det var %1$s) - %1$s bytte ämnet till: %2$s - Du bytte ämnet till: %1$s - %1$s bytte rummets avatar - Du bytte rummets avatar - %1$s bytte rummets namn till: %2$s - Du bytte rummets namnet till: %1$s - %s startade ett videosamtal. - Du startade ett videosamtal. - %s startade ett röstsamtal. - Du startade ett röstsamtal. - %s skickade data för att sätta upp samtalet. - Du skickade data för att sätta upp samtalet. - %s svarade på samtalet. - Du svarade på samtalet. - %s avslutade samtalet. - Du avslutade samtalet. - %1$s gjorde framtida rumshistorik synlig för %2$s - Du gjorde framtida rumshistorik synlig för %1$s - alla rumsmedlemmar, från tiden de bjöds in. - alla rumsmedlemmar, från tiden de gick med. - alla rumsmedlemmar. - vem som helst. - okänt (%s). - %1$s aktiverade totalsträckskryptering (%2$s) - Du aktiverade totalsträckskryptering (%1$s) - %s uppgraderade det här rummet. - Du uppgraderade det här rummet. - %1$s begärde ett VoIP-gruppsamtal - Du begärde ett VoIP-gruppsamtal - VoIP-gruppsamtal startat - VoIP-gruppsamtal avslutat - (avataren blev även bytt) - %1$s tog bort rummets namn - Du tog bort rummets namn - %1$s tog bort rummets ämne - Du tog bort rummets ämne - %1$s tog bort rummets avatar - Du tog bort rummets avatar - Meddelande borttaget - Meddelande borttaget av %1$s - Meddelande borttaget [anledning: %1$s] - Meddelande borttaget av %1$s [anledning: %2$s] - %1$s uppdaterade sim profil %2$s - Du uppdaterade din profil %1$s - %1$s bjöd in %2$s att gå med i rummet - Du bjöd in %1$s att gå med i rummet - %1$s drog tillbaka inbjudan för %2$s att gå med i rummet - Du drog tillbaka inbjudan för %1$s att gå med i rummet - %1$s accepterade inbjudan för %2$s - Du accepterade inbjudan för %1$s - %1$s lade till %2$s-widget - Du lade till %1$s-widget - %1$s tog bort %2$s-widget - Du tog bort %1$s-widget - %1$s modifierade %2$s-widget - Du modifierade %1$s-widget - Admin - Moderator - Standard - Anpassad (%1$d) - Anpassad - Du ändrade behörighetsnivå för %1$s. - %1$s ändrade behörighetsnivå för %2$s. - %1$s från %2$s till %3$s - ** Kan inte avkryptera: %s ** - Avsändarens enhet har inte gett oss nycklarna för det här meddelandet. - Kunde inte dölja - Kunde inte skicka meddelandet - Misslyckades att ladda upp bilden - Nätverksfel - Matrixfel - Det går för närvarande inte att gå med i ett tomt rum igen. - Krypterat meddelande - E-postadress - Telefonnummer - Inbjudan från %s - Rumsinbjudan - %1$s och %2$s - - %1$s och en till - %1$s och %2$d till - - Tomt rum - Inledande synk: -\nImporterar konto… - Inledande synk: -\nImporterar krypto - Inledande synk: -\nImporterar rum - Inledande synk: -\nImporterar anslutna rum - Inledande synk: -\nImporterar inbjudna rum - Inledande synk: -\nImporterar lämnade rum - Inledande synk: -\nImporterar gemenskaper - Inledande synk: -\nImporterar kontodata - Skickar meddelande… - Rensa sändningskö - Inbjudan från %1$s. Anledning: %2$s - Inbjudan från dig. Anledning: %1$s - %1$s bjöd in %2$s. Anledning: %3$s - Du bjöd in %1$s. Anledning: %2$s - %1$s bjöd in dig. Anledning: %2$s - %1$s gick med i rummet. Anledning: %2$s - Du gick med i rummet. Anledning: %1$s - %1$s lämnade rummet. Anledning: %2$s - Du lämnade rummet. Anledning: %1$s - %1$s avböjde inbjudan. Anledning: %2$s - Du avböjde inbjudan. Anledning: %1$s - %1$s kickade %2$s. Anledning: %3$s - Du kickade %1$s. Anledning: %2$s - %1$s avbannade %2$s. Anledning: %3$s - Du avbannade %1$s. Anledning: %2$s - %1$s bannade %2$s. Anledning: %3$s - Du bannade %1$s. Anledning: %2$s - %1$s bjöd in %2$s att gå med i rummet. Anledning: %3$s - Du bjöd in %1$s att gå med i rummet. Anledning: %2$s - %1$s drog tillbaka inbjudan för %2$s att gå med i rummet. Anledning: %3$s - Du drog tillbaka inbjudan för %1$s att gå med i rummet. Anledning: %2$s - %1$s accepterade inbjudan för %2$s. Anledning: %3$s - Du accepterade inbjudan för %1$s. Anledning: %2$s - %1$s drog tillbaka inbjudan för %2$s. Anledning: %3$s - Du drog tillbaka inbjudan för %1$s. Anledning: %2$s - - %1$s lade till %2$s som en adress för det här rummet. - %1$s lade till %2$s som adresser för det här rummet. - - - Du lade till %1$s som en adress för det här rummet. - Du lade till %1$s som adresser för det här rummet. - - - %1$s tog bort %2$s som en adress för det här rummet. - %1$s tog bort %2$s som adresser för det här rummet. - - - Du tog bort %1$s som en adress för det här rummet. - Du tog bort %1$s som adresser för det här rummet. - - %1$s lade till %2$s och tog bort %3$s som adresser för det här rummet. - Du lade till %1$s och tog bort %2$s som adresser för det här rummet. - %1$s satta huvudadressen för det här rummet till %2$s. - Du satta huvudadressen för det här rummet till %1$s. - %1$s tog bort huvudadressen för det här rummet. - Du tog bort huvudadressen för det här rummet. - %1$s tillät gäster att gå med i rummet. - Du tillät gäster att gå med i rummet. - %1$s hindrade gäster från att gå med i rummet. - Du hindrade gäster från att gå med i rummet. - %1$s aktiverade totalsträckskryptering. - Du aktiverade totalsträckskryptering. - %1$s aktiverade totalsträckskryptering (okänd algoritm %2$s). - Du aktiverade totalsträckskryptering (okänd algoritm %1$s). - Du hindrade gäster från att gå med i rummet. - %1$s hindrade gäster från att gå med i rummet. - Du tillät gäster att gå med här. - %1$s tillät gäster att gå med här. - Du lämnade. Anledning: %1$s - %1$s Lämnade. Anledning: %2$s - Du gick med. Anledning: %1$s - %1$s gick med. Anledning: %2$s - Du drog tillbaka inbjudan för %1$s - %1$s drog tillbaka inbjudan för %2$s - Du bjöd in %1$s - %1$s bjöd in %2$s - Du uppgraderade här. - %s uppgraderade här. - Du gjorde framtida meddelanden synliga för %1$s - %1$s gjorde framtida meddelanden synliga för %2$s - Du lämnade rummet - %1$s lämnade rummet - Du gick med - %1$s gick med - Du skapade diskussionen - %1$s skapade diskussionen - Du ändrade adresserna för det här rummet. - %1$s ändrade adresserna för det här rummet. - Du ändrade huvudadressen och de alternativa adresserna för det här rummet. - %1$s ändrade huvudadressen och de alternativa adresserna för det här rummet. - Du ändrade de alternativa adresserna för det här rummet. - %1$s ändrade de alternativa adresserna för det här rummet. - - Du tog bort den alternativa adressen %1$s för det här rummet. - Du tog bort de alternativa adresserna %1$s för det här rummet. - - - %1$s tog bort den alternativa adressen %2$s för det här rummet. - %1$s tog bort de alternativa adresserna %2$s för det här rummet. - - - Du lade till den alternativa adressen %1$s för det här rummet. - Du lade till de alternativa adresserna %1$s för det här rummet. - - - %1$s lade till den alternativa adressen %2$s för det här rummet. - %1$s lade till de alternativa adresserna %2$s för det här rummet. - - Tomt rum (var %s) - - %1$s, %2$s, %3$s och %4$d till - %1$s, %2$s, %3$s och %4$d till - - %1$s, %2$s, %3$s och %4$s - %1$s, %2$s och %3$s - 🎉 Alla servrar har bannats från att delta! Det här rummet kan inte användas längre. - Ingen ändring. - • Servrar som matchar IP-adresser är nu bannade. - • Servrar som matchar IP-adresser är nu tillåtna. - • Servrar som matchar %s togs bort från tillåtelselistan. - • Servrar som matchar %s är nu tillåtna. - • Servrar som matchar %s togs bort från bannlistan. - • Servrar som matchar %s är nu bannade. - Du ändrade server-ACLer för det här rummet. - %s ändrade server-ACLer för det här rummet. - • Servrar som matchar IP-adresser är tillåtna. - • Servrar som matchar IP-adresser är bannade. - • Servrar som matchar %s är tillåtna. - • Servrar som matchar %s är bannade. - Du satte server-ACLer för det här rummet. - %s satte server-ACLer för det här rummet. - Du ändrade videogruppsamtal - Videogruppsamtal ändrades av %1$s - Du avslutade videogruppsamtal - Videogruppsamtal avslutades av %1$s - Du startade videogruppsamtal - Videogruppsamtal startades av %1$s - \ No newline at end of file diff --git a/matrix-sdk-android/src/main/res/values-szl/strings.xml b/matrix-sdk-android/src/main/res/values-szl/strings.xml deleted file mode 100644 index a6b3daec93..0000000000 --- a/matrix-sdk-android/src/main/res/values-szl/strings.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/matrix-sdk-android/src/main/res/values-te/strings.xml b/matrix-sdk-android/src/main/res/values-te/strings.xml deleted file mode 100644 index 62f58c9e26..0000000000 --- a/matrix-sdk-android/src/main/res/values-te/strings.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - %s\'s ఆహ్వానం - %1$s ఆహ్వానించారు %2$s - %1$s వదిలి వెళారు - %1$s ఆహ్వానాన్ని తిరస్కరించారు - %1$s తన్నాడు %2$s - %1$s నిషేధాన్ని %2$s - %1$s నిషేధించారు %2$s - %1$s ఉపసంహరించుకుంది %2$s\'s ఆహ్వానం - %1$s వారి అవతార్ను మార్చారు - %1$s వారి డిస్ప్లే పేరును ని సెట్ చేసారు %2$s - %1$s వారి ప్రదర్శన పేరును %2$s నుండి %3$s మార్చారు - %1$s వారి ప్రదర్శన పేరుని తీసివేసారు (%2$s) - %1$s అంశం మార్చబడింది:%2$s - %1$s గది పెరు మార్చబడింది %2$s - %s ఒక వీడియో కాల్ని ఉంచింది. - %s వాయిస్ కాల్ని ఉంచారు. - %s కాల్కి సమాధానం ఇచ్చారు. - %s కాల్ ముగిసింది. - %1$s భవిష్యత్ గది చరిత్రను %2$s కి కనిపించేలా చేసింది - పాయింట్నుండి, అన్ని గది సభ్యుల వారు ఆహ్వానించబడ్డారు. - పాయింట్ నుండి, అన్ని గదుల సభ్యుల వారు చేరారు. - అన్ని గదుల సభ్యులు. - ఎవరైనా. - తెలియని (%s). - %1$s ఎండ్-టు-ఎండ్ ఎన్క్రిప్షన్ ఆన్ చెయ్యబడింది (%2$s) - - %1$s వి ఓ ఇ పి సమావేశాన్ని అభ్యర్థించారు - వి ఓ ఇ పి సమావేశం ప్రారంభమైంది - వి ఓ ఇ పి సమావేశం ముగిసింది - - (అవతార్ మార్చబడింది) - %1$s గది పేరు తొలగించబడింది - %1$s గది అంశాన్ని తీసివేసారు - %1$s వారి ప్రొఫైల్ నవీకరించబడింది %2$s - %1$s గదిలో చేరడానికి %2$s కు ఆహ్వానాన్ని పంపారు - %2$sకోసం %1$s ఆహ్వానాన్ని అంగీకరించారు - - ** వ్యక్తీకరించడానికి సాధ్యం కాలేదు: %s ** - ఈ సందేశానికి పంపేవారి పరికరం మాకు కీలను పంపలేదు. - - గది స్క్రీన్ - సందేశం పంపడం సాధ్యం కాలేదు - - చిత్రాన్ని అప్లోడ్ చేయడంలో విఫలమైంది - - సాధారణ లోపాలు - మాట్రిక్స్ లోపం - - మళ్లీ ఖాళీ గది ని చేరడానికి ప్రస్తుతం ఇది సాధ్యం కాదు. - - ఎన్క్రిప్టెడ్ సందేశం - - ఇమెయిల్ చిరునామా - ఫోను నంబరు - - - %1$s: %2$s - %1$s ఒక చిత్రం పంపారు. - - %1$s మిమ్మల్ని ఆహ్వానించారు - %1$s చేరారు - - %s నుండి ఆహ్వానించు - %1$s మరియు %2$s - గదికి ఆహ్వానం - ఖాళీ గది - - - diff --git a/matrix-sdk-android/src/main/res/values-th/strings.xml b/matrix-sdk-android/src/main/res/values-th/strings.xml deleted file mode 100644 index 3abd948f77..0000000000 --- a/matrix-sdk-android/src/main/res/values-th/strings.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - %1$s: %2$s - diff --git a/matrix-sdk-android/src/main/res/values-uk/strings.xml b/matrix-sdk-android/src/main/res/values-uk/strings.xml deleted file mode 100644 index 0624ae3cd7..0000000000 --- a/matrix-sdk-android/src/main/res/values-uk/strings.xml +++ /dev/null @@ -1,176 +0,0 @@ - - - %1$s: %2$s - %1$s надсилає зображення. - %s запрошення - %1$s запрошує %2$s - Зашифроване повідомлення - - Запрошення від %s - Запрошення до кімнати - %1$s і %2$s - Порожня кімната - %1$s надсилає наліпку. - %1$s запрошує вас - %1$s приєднується - %1$s залишає кімнату - %1$s відхиляє запрошення - %1$s викидає %2$s - %1$s розблоковує %2$s - %1$s блокує %2$s - %1$s відкликає запрошення для %2$s - %1$s змінює свій аватар - %1$s встановлюють собі назву %2$s - %1$s змінює своє ім’я з %2$s на %3$s - %1$s прибирає своє ім’я (%2$s) - %1$s змінює тему на: %2$s - %1$s змінює назву кімнати на: %2$s - %s починає відеовиклик. - %s розпочинає голосовий виклик. - %s відповідає на виклик. - %s завершує дзвінок. - %1$s робить майбутню історію кімнати видимою для %2$s - всіх учасників кімнати, з моменту їх запрошення. - всіх учасників кімнати, з моменту їх приєднання. - всіх учасників кімнати. - будь-кого. - невідомо (%s). - %1$s вмикає наскрізне шифрування (%2$s) - %1$s запросив(ла) VoIP конференцію - VoIP конференція розпочалась - VoIP конференція завершилась - (аватар також змінено) - %1$s прибирає назву кімнати - %1$s прибирає тему кімнати - %1$s оновлює свій профіль %2$s - %1$s надсилає запрошення %2$s приєднатися до кімнати - %1$s приймає запрошення до %2$s - ** Неможливо розшифрувати: %s ** - Пристрій відправника не надіслав нам ключ для цього повідомлення. - Неможливо відредагувати - Не вдалося надіслати повідомлення - Не вдалося завантажити зображення - Помилка мережі - Помилка Matrix - Наразі неможливо переприєднатися до порожньої кімнати. - Адреса електронної пошти - Номер телефону - - %1$s та 1 інший - %1$s та %2$d інші - %1$s та %2$d інших - - - %s оновлює цю кімнату. - Повідомлення вилучено - %1$s вилучає повідомлення - Повідомлення вилучено [причина: %1$s] - Початкове налаштування: -\nІмпортування даних облікового запису - Ви вийшли. Причина: %1$s - %1$s виходить. Причина: %2$s - Ви залишили кімнату. Причина: %1$s - %1$s залишає кімнату. Причина: %2$s - %1$s залишає кімнату - Ви залишили кімнату - Ви залишили кімнату - Ви змінили адреси цієї кімнати. - Ви змінили основну та альтернативну адреси цієї кімнати. - Ви змінили альтернативні адреси для цієї кімнати. - Ви змінили рівень доступу на %1$s. - Ви змінили серверні списки контролю доступу для цієї кімнати. - Ви змінили назву кімнати на: %1$s - Ви змінили світлину кімнати - Ви змінили тему на: %1$s - Ви змінили показуване ім\'я з %1$s на %2$s - Ви змінили світлину профілю - - %1$s, %2$s, %3$s та %4$d інший - %1$s, %2$s, %3$s та %4$d інші - %1$s, %2$s, %3$s та %4$d інших - %1$s, %2$s, %3$s та %4$d інших - - %1$s, %2$s, %3$s та %4$s - %1$s, %2$s та %3$s - Типово - Модератор - Адміністратор - Ви вилучили %1$s віджет - %1$s вилучає %2$s віджет - Ви додали %1$s віджет - %1$s додає %2$s віджет - Ви прийняли запрошення до %1$s - Ви надіслали запрошення для %1$s приєднатися до кімнати - Ви оновили свій профіль %1$s - %1$s вилучає повідомлення [причина: %2$s] - Ви прибрали аватар кімнати - %1$s прибирає аватар кімнати - Ви прибрали тему кімнати - Ви прибрали назву кімнати - %s оновлює кімнату. - Ви оновили цю кімнату. - Ви увімкнули наскрізне шифрування (%1$s) - Ви починаєте голосовий виклик. - Ви починаєте відеовиклик. - %1$s змінює аватар кімнати - Ви прибрали показуване ім\'я (%1$s) - Ви викинули %1$s - %1$s запрошує %2$s - Ви відхилили запрошення - Ви приєдналися - %1$s приєднується - Ви приєдналися до кімнати - Ви запросили %1$s - Ви запросили %1$s - Ви створили обговорення - %1$s створює обговорення - Ви створили кімнату - %1$s створює кімнату - Ваше запрошення - Ви надіслали наліпку. - Ви надіслали зображення. - Ви відхилили запрошення. Причина: %1$s - %1$s відхиляє запрошення. Причина: %2$s - Ви приєдналися. Причина: %1$s - %1$s приєднується. Причина: %2$s - Ви приєднуєтеся до кімнати. Причина: %1$s - %1$s приєднується до кімнати. Причина: %2$s - %1$s запрошує вас. Причина: %2$s - Ви запросили %1$s. Причина: %2$s - %1$s запрошує %2$s. Причина: %3$s - Ваше запрошення. Причина: %1$s - Запрошення від %1$s. Причина: %2$s - Очистити чергу надсилання - Надсилання повідомлень… - Початкова синхронізація: -\nІмпортування спільнот - Початкова синхронізація: -\nІмпортування кімнат, які ви залишили - Початкова синхронізація: -\nІмпортування запрошень до кімнат - Початкова синхронізація: -\nІмпортування кімнат, до яких ви приєдналися - Початкова синхронізація: -\nІмпортування кімнат - Початкова синхронізація: -\nІмпортування криптографічних даних - Початкова синхронізація: -\nІмпортування даних облікового запису… - Порожня кімната (була %s) - Власний - Власний (%1$d) - Ви змінили віджет %1$s - %1$s змінює віджет %2$s - Ви оновили кімнату. - Ви зробили майбутню історію кімнати видимою для %1$s - Ви зробили майбутні повідомлення видимими для %1$s - %1$s робить майбутні повідомлення видимими для %2$s - Ви завершили дзвінок. - Ви відповіли на виклик. - Ви надіслали дані для налаштування виклику. - %s надсилає дані для налаштування виклику. - Ви встановили собі показуване ім\'я %1$s - Ви відкликали запрошення для %1$s - Ви заблокували %1$s - Ви заблокували %1$s - \ No newline at end of file diff --git a/matrix-sdk-android/src/main/res/values-vls/strings.xml b/matrix-sdk-android/src/main/res/values-vls/strings.xml deleted file mode 100644 index f0f2287a8d..0000000000 --- a/matrix-sdk-android/src/main/res/values-vls/strings.xml +++ /dev/null @@ -1,103 +0,0 @@ - - - %1$s: %2$s - %1$s èt e fotootje gesteurd. - %1$s èt e sticker gesteurd. - - Uutnodigienge van %s - %1$s èt %2$s uutgenodigd - %1$s èt joun uitgenodigd - %1$s neemt nu deel an ’t gesprek - %1$s èt ’t gesprek verloatn - %1$s èt d’uitnodigienge geweigerd - %1$s èt %2$s uut ’t gesprek verwyderd - %1$s èt %2$s ountbann - %1$s èt %2$s verbann - %1$s èt d’uutnodigienge van %2$s ingetrokkn - %1$s èt zyn/heur avatar angepast - %1$s èt zyn/heur noame angepast noa %2$s - %1$s èt zyn/heur noame angepast van %2$s noa %3$s - %1$s èt zyn/heur noame verwyderd (%2$s) - %1$s èt ’t ounderwerp veranderd noa: %2$s - %1$s èt de gespreksnoame veranderd noa: %2$s - %s èt e video-iproep gemakt. - %s èt e sproakiproep gemakt. - %s èt den iproep beantwoord. - %s èt ipgehangn. - %1$s èt de toekomstige gespreksgeschiedenisse zichtboar gemakt vo %2$s - alle deelnemers an ’t gesprek, vanaf ’t punt dan ze zyn uutgenodigd. - alle deelnemers an ’t gesprek, vanaf ’t punt dan ze zyn toegetreedn. - alle deelnemers an ’t gesprek. - iedereen. - ounbekend (%s). - %1$s èt eind-tout-eind-versleutelienge angezet (%2$s) - - %1$s èt e VoIP-vergoaderienge angevroagd - VoIP-vergoaderienge begunn - VoIP-vergoaderienge gestopt - - (avatar es ook veranderd) - %1$s èt de gespreksnoame verwyderd - %1$s èt ’t gespreksounderwerp verwyderd - Bericht verwyderd - Bericht verwyderd deur %1$s - Bericht verwyderd [reden: %1$s] - Bericht verwyderd deur %1$s [reden: %2$s] - %1$s èt zyn/heur profiel %2$s bygewerkt - %1$s èt een uutnodigienge noa %2$s gesteurd vo ’t gesprek toe te treedn - %1$s èt d’uutnodigienge vo %2$s anveird - - ** Kun nie ountsleuteln: %s ** - ’t Toestel van den afzender èt geen sleutels vo da bericht hier gesteurd. - - Kosteg nie verwyderd wordn - Kosteg ’t bericht nie verzendn - - Iploadn van ’t fotootje es mislukt - - Netwerkfout - Matrix-fout - - ’t Es vo de moment nie meuglik van e leeg gesprek were toe te treedn. - - Versleuteld bericht - - E-mailadresse - Telefongnumero - - Uutnodigienge van %s - Gespreksuutnodigienge - - %1$s en %2$s - - - %1$s en 1 andere - %1$s en %2$d anderen - - - Leeg gesprek - - Initiële synchronisoasje: -\nAccount wor geïmporteerd… - Initiële synchronisoasje: -\nCrypto wor geïmporteerd - Initiële synchronisoasje: -\nGesprekkn wordn geïmporteerd - Initiële synchronisoasje: -\nDeelgenoomn gesprekken wordn geïmporteerd - Initiële synchronisoasje: -\nUutgenodigde gesprekkn wordn geïmporteerd - Initiële synchronisoasje: -\nVerloatn gesprekkn wordn geïmporteerd - Initiële synchronisoasje: -\nGemeenschappn wordn geïmporteerd - Initiële synchronisoasje: -\nAccountgegeevns wordn geïmporteerd - - %s èt da gesprek hier ipgewoardeerd. - - Bericht wor verstuurd… - Uutgoande wachtreeke leegn - - %1$s èt d’uutnodigienge vo %2$s vo ’t gesprek toe te treedn ingetrokkn - diff --git a/matrix-sdk-android/src/main/res/values-zh-rCN/strings.xml b/matrix-sdk-android/src/main/res/values-zh-rCN/strings.xml deleted file mode 100644 index 585ac625cb..0000000000 --- a/matrix-sdk-android/src/main/res/values-zh-rCN/strings.xml +++ /dev/null @@ -1,210 +0,0 @@ - - - %1$s 发送了一张图片。 - %s 的邀请 - %1$s 邀请了 %2$s - %1$s 邀请了您 - %1$s 加入了聊天室 - %1$s 离开了聊天室 - %1$s 拒绝了邀请 - %1$s 移除了 %2$s - %1$s 解封了 %2$s - %1$s 封禁了 %2$s - %1$s 更换了他们的头像 - %1$s 将他们的昵称设置为 %2$s - %1$s 把他们的昵称从 %2$s 改为 %3$s - %1$s 移除了他们的昵称 (%2$s) - %1$s 把主题改为: %2$s - %1$s 把聊天室名称改为: %2$s - %s 发起了一次视频通话。 - %s 发起了一次语音通话。 - %s 已接听通话。 - %s 已结束通话。 - 所有聊天室成员,从他们被邀请开始。 - 所有聊天室成员,从他们加入开始。 - 所有聊天室成员。 - 任何人。 - 未知(%s)。 - %1$s 开启了端到端加密(%2$s) - %1$s 请求了一次 VoIP 会议 - VoIP 会议已开始 - VoIP 会议已结束 - (头像也被更改) - %1$s 移除了聊天室名称 - %1$s 移除了聊天室主题 - ** 无法解密:%s ** - 发送者的设备没有向我们发送此消息的密钥。 - 无法发送消息 - 上传图像失败 - 网络错误 - Matrix 错误 - 目前无法重新加入一个空的聊天室。 - 已加密消息 - 电子邮箱地址 - 手机号码 - %1$s 撤回了对 %2$s 的邀请 - %1$s 让未来的聊天室历史记录对 %2$s 可见 - %1$s 更新了他的个人档案 %2$s - %1$s 向 %2$s 发送了加入聊天室的邀请 - %1$s 接受了 %2$s 的邀请 - 无法撤回 - %1$s:%2$s - %1$s 发送了一张贴纸。 - 空聊天室 - 来自 %s 的邀请 - 聊天室邀请 - %1$s 和 %2$s - - %1$s 与其他 %2$d 位 - - 消息已被移除 - 消息已被 %1$s 移除 - 消息已被移除 [原因: %1$s] - 消息已被 %1$s 移除 [原因: %2$s] - 初始化同步: -\n正在导入账号… - 初始化同步: -\n正在导入加密数据 - 初始化同步: -\n正在导入聊天室 - 初始化同步: -\n正在导入已加入的聊天室 - 初始化同步: -\n正在导入已邀请的聊天室 - 初始化同步: -\n正在导入已离开的聊天室 - 初始化同步: -\n正在导入社区 - 初始化同步: -\n正在导入账号数据 - %s 升级了此聊天室。 - 正在发送消息… - 清除正在发送队列 - %1$s 撤回了对 %2$s 加入聊天室的邀请 - %1$s 的邀请。理由:%2$s - %1$s 邀请了 %2$s。理由:%3$s - %1$s 邀请了您。理由:%2$s - %1$s 加入了聊天室。理由:%2$s - %1$s 离开了聊天室。理由:%2$s - %1$s 已拒绝邀请。理由:%2$s - %1$s 踢走了 %2$s。理由:%3$s - %1$s 解封了 %2$s。理由:%3$s - %1$s 封禁了 %2$s。理由:%3$s - %1$s 已发送邀请给 %2$s 来加入聊天室。理由:%3$s - %1$s 撤销了 %2$s 加入聊天室的邀請。理由:%3$s - %1$s 接受 %2$s 的邀請。理由:%3$s - %1$s 撤回了对 %2$s 的邀请。理由:%3$s - - %1$s 新增了 %2$s 为此聊天室的地址。 - - - %1$s 移除了 %2$s 作为此聊天室额地址。 - - %1$s 为此聊天室新增了 %2$s 并移除 %3$s 地址。 - %1$s 将此聊天室的主地址设为了 %2$s。 - %1$s 为此聊天室移除了主地址。 - %1$s 已允许访客加入聊天室。 - %1$s 已禁止访客加入聊天室。 - %1$s 已开启端到端加密。 - %1$s 已开启端到端加密(无法识别的演算法 %2$s)。 - %1$s 创建了这个聊天室 - 您发送了一张图片。 - 您发送了一张贴纸。 - 您的邀请 - 您创建了这个聊天室 - 您邀请了 %1$s - 您加入了聊天室 - 您离开了聊天室 - 您拒绝了邀请 - 您移除了 %1$s - 您解封了 %1$s - 您封禁了 %1$s - 您撤回了对 %1$s 的邀请 - 您更换了您的头像 - 您将您的昵称设置为 %1$s - 您将您的昵称从 %1$s 改为 %2$s - 您移除了您的昵称 (%1$s) - 您把主题改为:%1$s - %1$s 变更了聊天室头像 - 您变更了聊天室头像 - 您把聊天室名称改为:%1$s - 您发起了一次视频通话。 - 您发起了一次语音通话。 - %s 发送了数据以建立通话。 - 您发送了数据以建立通话。 - 您接听了通话。 - 您结束了通话。 - 您已让未来的聊天室记录对 %1$s 可见 - 您开启了端到端加密(%1$s) - 您升级了此聊天室。 - 您请求了 VoIP 会议 - 您移除了聊天室名称 - 您移除了聊天室主题 - %1$s 移除了聊天室头像 - 您移除了聊天室头像 - 您更新了您的个人档案 %1$s - 您向 %1$s 发送了加入聊天室的邀请 - 您已撤回了对 %1$s 加入聊天室的邀请 - 您接受了 %1$s 的邀请 - %1$s 添加了 %2$s 小部件 - 您添加了 %1$s 小部件 - %1$s 移除了 %2$s 小部件 - 您移除了 %1$s 小部件 - %1$s 修改了 %2$s 小部件 - 您修改了 %1$s 小部件 - 管理员 - 审核员 - 默认 - 自定义(%1$d) - 自定义 - 您更改了%1$s 的权力等级。 - %1$s 更改了 %2$s 的权力等级。 - %1$s 从 %2$s 到 %3$s - 您的邀请。理由:%1$s - 您邀请了 %1$s。理由:%2$s - 您加入了聊天室。理由:%1$s - 您离开了聊天室。理由:%1$s - 您拒绝了邀请。理由:%1$s - 您踢走了 %1$s。理由:%2$s - 您解封了 %1$s。理由:%2$s - 您封禁了 %1$s。理由:%2$s - 您已发送邀请给 %1$s 来加入聊天室。理由:%2$s - 您撤销了 %1$s 加入聊天室的邀请。理由:%2$s - 您接受了 %1$s 的邀请。理由:%2$s - 您撤回了 %1$s 的邀请。理由:%2$s - - 您新增了 %1$s 为此聊天室的地址。 - - - 您移除了此聊天室的 %1$s 地址。 - - 您为此聊天室新增了 %1$s 并移除了 %2$s 地址。 - 您将此聊天室的主地址设为了 %1$s。 - 您移除了此聊天室的主地址。 - 您已允许访客加入聊天室。 - 您已禁止访客加入聊天室。 - 您已开启端到端加密。 - 您已开启端到端加密(无法识别的算法 %1$s)。 - 您已离开。理由:%1$s - %1$s 已离开。理由:%2$s - 您已加入。理由:%1$s - %1$s 已加入。理由:%2$s - 您撤回了对 %1$s 的邀请 - %1$s 撤回了对 %2$s 的邀请 - 您邀请了 %1$s - %1$s 邀请了 %2$s - 您在此处升级。 - %s 在此处升级。 - 您使未来的消息对 %1$s 可见 - %1$s 使未来的消息对 %2$s 可见 - 您离开了聊天室 - %1$s 离开了聊天室 - 您已加入 - %1$s 已加入 - 您创建了讨论 - %1$s 创建了讨论 - 你已阻止客人加入房间。 - %1$s已阻止客人加入房间。 - 你已允许客人加入这里。 - %1$s 已允许客人加入这里。 - \ No newline at end of file diff --git a/matrix-sdk-android/src/main/res/values-zh-rTW/strings.xml b/matrix-sdk-android/src/main/res/values-zh-rTW/strings.xml deleted file mode 100644 index d525d4b4bd..0000000000 --- a/matrix-sdk-android/src/main/res/values-zh-rTW/strings.xml +++ /dev/null @@ -1,256 +0,0 @@ - - - %1$s:%2$s - %1$s 傳送了一張圖片。 - %s 的邀請 - %1$s 邀請了 %2$s - %1$s 邀請您 - %1$s 已加入聊天室 - %1$s 已離開聊天室 - %1$s 拒絕邀請 - %1$s 踢出 %2$s - %1$s 解除禁止 %2$s - %1$s 禁止 %2$s - %1$s 收回了對 %2$s 的邀請 - %1$s 變更了他們的大頭貼 - %1$s 設定了他們的顯示名稱為 %2$s - %1$s 變更了他們的顯示名稱從 %2$s 到 %3$s - %1$s 移除了他們的顯示名稱 (%2$s) - %1$s 變更主題為:%2$s - %1$s 變更房間名稱為:%2$s - %s 撥出了視訊通話。 - %s 撥出了語音通話。 - %s 回覆了通話。 - %s 結束通話。 - %1$s 讓房間未來可讓 %2$s 看到歷史紀錄 - 所有的房間成員,從他們被邀請的時間開始。 - 所有的房間成員,從他們加入的時間開始。 - 所有的房間成員。 - 任何人。 - 未知 (%s)。 - %1$s 開啟了端對端加密 (%2$s) - %1$s 請求了 VoIP 會議通話 - VoIP 會議通話已開始 - VoIP 會議通話已結束 - (大頭貼也變更了) - %1$s 移除了房間名稱 - %1$s 移除了房間主題 - %1$s 更新了他們的基本資料 %2$s - %1$s 傳送加入房間的邀請給 %2$s - %1$s 接受 %2$s 的邀請 - ** 無法解密:%s ** - 傳送者的裝置並未在此訊息傳送他們的金鑰。 - 無法編輯 - 無法傳送訊息 - 上傳圖片失敗 - 網路錯誤 - Matrix 錯誤 - 目前無法重新加入空房間。 - 已加密的訊息 - 電子郵件 - 電話號碼 - %1$s 傳送了一張貼圖。 - 來自%s 的邀請 - 聊天室邀請 - %1$s 和 %2$s - 空聊天室 - - %1$s 和 和其他 %2$d 個人 - - 訊息已移除 - 訊息已被 %1$s 移除 - 訊息已移除 [理由:%1$s] - 訊息已被 %1$s 移除 [理由:%2$s] - 初始化同步: -\n正在匯入帳號…… - 初始化同步: -\n正在匯入 crypto - 初始化同步: -\n正在匯入聊天室 - 初始化同步: -\n正在匯入已加入的聊天室 - 初始化同步: -\n正在匯入已邀請的聊天室 - 初始化同步: -\n正在匯入已離開的聊天室 - 初始化同步: -\n正在匯入社群 - 初始化同步: -\n正在匯入帳號資料 - %s 已升級此聊天室。 - 正在傳送訊息…… - 清除傳送佇列 - %1$s 撤銷了 %2$s 加入聊天室的邀請 - %1$s 的邀請。理由:%2$s - %1$s 邀請了 %2$s。理由:%3$s - %1$s 邀請了您。理由:%2$s - %1$s 已加入聊天室。理由:%2$s - %1$s 已離開聊天室。理由:%2$s - %1$s 已回絕邀請。理由:%2$s - %1$s 踢走了 %2$s。理由:%3$s - %1$s 取消封鎖了 %2$s。理由:%3$s - %1$s 封鎖了 %2$s。理由:%3$s - %1$s 已傳送邀請給 %2$s 來加入聊天室。理由:%3$s - %1$s 撤銷了 %2$s 加入聊天室的邀請。理由:%3$s - %1$s 接受 %2$s 的邀請。理由:%3$s - %1$s 撤回了對 %2$s 的邀請。理由:%3$s - - %1$s 新增了 %2$s 為此聊天室的地址。 - - - %1$s 移除了此聊天室的 %2$s 地址。 - - %1$s 為此聊天室新增 %2$s 並移除 %3$s 地址。 - %1$s 為此聊天室設定了 %2$s 為主地址。 - %1$s 為此聊天室移除了主要地址。 - %1$s 已允許訪客加入聊天室。 - %1$s 已禁止訪客加入聊天室。 - %1$s 已開啟端到端加密。 - %1$s 已開啟端到端加密(無法識別的演算法 %2$s)。 - %1$s 建立了聊天室 - 您傳送了圖片。 - 您傳送了貼圖。 - 您的邀請 - 您建立了聊天室 - 您邀請了 %1$s - 您加入了聊天室 - 您離開的聊天室 - 您回絕了邀請 - 您踢除了 %1$s - 您取消封鎖了 %1$s - 您封鎖了 %1$s - 您撤銷了 %1$s 的邀請 - 您變更了您的大頭貼 - 您將您的顯示名稱設定為 %1$s - 您將您的顯示名稱從 %1$s 變更為 %2$s - 您移除了您的顯示名稱(其曾為 %1$s) - 您將主題變更為:%1$s - %1$s 變更了聊天室大頭貼 - 您變更了聊天室大頭貼 - 您將聊天室名稱變更為:%1$s - 您發起了視訊通話。 - 您發起了音訊通話。 - %s 傳送了資料以建立通話。 - 您傳送了資料以建立通話。 - 您接了通話。 - 您結束了通話。 - 您已將未來的聊天室歷史設定為對 %1$s 可見 - 您開啟了端到端加密 (%1$s) - 您升級了此聊天室。 - 您請求了 VoIP 會議 - 您移除了聊天室名稱 - 您移除了聊天室主題 - %1$s 移除了聊天室大頭貼 - 您移除了聊天室大頭貼 - 您更新了您的個人檔案 %1$s - 您傳送了邀請給 %1$s 以加入聊天室 - 您已撤銷對 %1$s 加入聊天室的邀請 - 您接受了 %1$s 的邀請 - %1$s 新增了 %2$s 小工具 - 您新增了 %1$s 小工具 - %1$s 移除了 %2$s 小工具 - 您移除了 %1$s 小工具 - %1$s 修改了 %2$s 小工具 - 您修改了 %1$s 小工具 - 管理員 - 板主 - 預設 - 自訂 (%1$d) - 自訂 - 您變更了 %1$s 的權力等級。 - %1$s 變更了 %2$s 的權力等級。 - %1$s 從 %2$s 到 %3$s - 您的邀請。理由:%1$s - 您邀請了 %1$s。理由:%2$s - 您加入了聊天室。理由:%1$s - 您離開了聊天室。理由:%1$s - 您回絕了邀請。理由:%1$s - 您踢除了 %1$s。理由:%2$s - 您取消封鎖了 %1$s。理由:%2$s - 您封鎖了 %1$s。理由:%2$s - 您傳甕了邀請給 %1$s 以加入聊天室。理由:%2$s - 您撤銷了 %1$s 加入聊天室的邀請。理由:%2$s - 您接受了 %1$s 的邀請。理由:%2$s - 您撤回了 %1$s 的邀請。理由:%2$s - - 您為此聊天室新增了 %1$s 作為地址。 - - - 您為此聊天室移除了 %1$s 作為地址。 - - 您為此聊天室新增了 %1$s 並移除了 %2$s 作為地址。 - 您將此聊天室的主要地址設定為 %1$s。 - 您將此聊天室的主要地址移除。 - 您已允許訪客加入聊天室。 - 您已阻止訪客加入聊天室。 - 您開啟了端到端加密。 - 您開啟了端到端加密(無法識別的演算法 %1$s)。 - 您已避免訪客加入此聊天室。 - %1$s 已避免訪客加入此聊天室。 - 您已允許訪客加入這裡。 - %1$s 已允許訪客加入這裡。 - 您已離開。理由:%1$s - %1$s 已離開。理由:%2$s - 您已加入。理由:%1$s - %1$s 已加入。理由:%2$s - 您已撤銷對 %1$s 的邀請 - %1$s 已撤銷對 %2$s 的邀請 - 您已邀請了 %1$s - %1$s 邀請了 %2$s - 您已在此升級。 - %s 已在此升級。 - 您讓未來的訊息對 %1$s 可見 - %1$s 已讓未來的訊息對 %2$s 可見 - 您已離開聊天室 - %1$s 已離開聊天室 - 您已加入 - %1$s 已加入 - 您已建立此討論 - %1$s 已建立此討論 - 空的聊天室(曾為 %s) - - %1$s, %2$s, %3$s 與 %4$d 個其他 - - %1$s, %2$s, %3$s 與 %4$s - %1$s, %2$s 與 %3$s - 🎉 禁止所有伺服器參與!無法再使用此聊天室。 - 無變更。 - • 禁止伺服器符合 IP 文字。 - • 允許伺服器符合 IP 文字。 - • 伺服器符合 %s 已從允許清單中移除。 - • 允許伺服器符合 %s。 - • 伺服器符合 %s 已從禁止清單中移除。 - • 現在禁止伺服器符合 %s。 - 您為此聊天室變更了伺服器 ACL。 - %s 為此聊天是變更了伺服器 ACL。 - • 禁止伺服器符合 IP 文字。 - • 允許伺服器符合 IP 文字。 - • 已允許伺服器符合 %s。 - • 已禁止伺服器符合 %s。 - 您為此聊天是設定了伺服器 ACL。 - %s 為此聊天是設定了伺服器 ACL。 - 您變更了此聊天室的地址。 - %1$s 變更了此聊天室的地址。 - 您為此聊天室變更了主要及備用地址。 - %1$s 為此聊天室變更了主要及備用地址。 - 您為此聊天室變更了備用地址。 - %1$s 變更了此聊天室的備用地址。 - - 您為此聊天室移除了備用地址 %1$s。 - - - %1$s 已為此聊天室移除備用地址 %2$s。 - - - 您為此聊天室新增了備用地址 %1$s。 - - - %1$s 已為此聊天室新增了備用地址 %2$s。 - - 您修改了視訊會議 - %1$s 修改了視訊會議 - 您結束了視訊會議 - %1$s 結束了視訊會議 - 您開始了視訊會議 - 由 %1$s 開始的視訊會議 - \ No newline at end of file diff --git a/matrix-sdk-android/src/main/res/values/strings.xml b/matrix-sdk-android/src/main/res/values/strings.xml deleted file mode 100644 index 08275fba36..0000000000 --- a/matrix-sdk-android/src/main/res/values/strings.xml +++ /dev/null @@ -1,315 +0,0 @@ - - - %1$s: %2$s - %1$s sent an image. - You sent an image. - %1$s sent a sticker. - You sent a sticker. - - %s\'s invitation - Your invitation - %1$s created the room - You created the room - %1$s created the discussion - You created the discussion - %1$s invited %2$s - You invited %1$s - %1$s invited you - %1$s joined the room - You joined the room - %1$s joined - You joined - %1$s left the room - You left the room - %1$s left the room - You left the room - %1$s rejected the invitation - You rejected the invitation - %1$s kicked %2$s - You kicked %1$s - %1$s unbanned %2$s - You unbanned %1$s - %1$s banned %2$s - You banned %1$s - %1$s withdrew %2$s\'s invitation - You withdrew %1$s\'s invitation - %1$s changed their avatar - You changed your avatar - %1$s set their display name to %2$s - You set your display name to %1$s - %1$s changed their display name from %2$s to %3$s - You changed your display name from %1$s to %2$s - %1$s removed their display name (it was %2$s) - You removed your display name (it was %1$s) - %1$s changed the topic to: %2$s - You changed the topic to: %1$s - %1$s changed the room avatar - You changed the room avatar - %1$s changed the room name to: %2$s - You changed the room name to: %1$s - %s placed a video call. - You placed a video call. - %s placed a voice call. - You placed a voice call. - %s sent data to setup the call. - You sent data to setup the call. - %s answered the call. - You answered the call. - %s ended the call. - You ended the call. - %1$s made future room history visible to %2$s - You made future room history visible to %1$s - %1$s made future messages visible to %2$s - You made future messages visible to %1$s - all room members, from the point they are invited. - all room members, from the point they joined. - all room members. - anyone. - unknown (%s). - %1$s turned on end-to-end encryption (%2$s) - You turned on end-to-end encryption (%1$s) - %s upgraded this room. - You upgraded this room. - %s upgraded here. - You upgraded here. - %s set the server ACLs for this room. - You set the server ACLs for this room. - • Server matching %s are banned. - • Server matching %s are allowed. - • Server matching IP literals are allowed. - • Server matching IP literals are banned. - - %s changed the server ACLs for this room. - You changed the server ACLs for this room. - • Server matching %s are now banned. - • Server matching %s were removed from the ban list. - • Server matching %s are now allowed. - • Server matching %s were removed from the allowed list. - • Server matching IP literals are now allowed. - • Server matching IP literals are now banned. - No change. - 🎉 All servers are banned from participating! This room can no longer be used. - - %1$s requested a VoIP conference - You requested a VoIP conference - VoIP conference started - VoIP conference finished - - (avatar was changed too) - %1$s removed the room name - You removed the room name - %1$s removed the room topic - You removed the room topic - %1$s removed the room avatar - You removed the room avatar - Message removed - Message removed by %1$s - Message removed [reason: %1$s] - Message removed by %1$s [reason: %2$s] - %1$s updated their profile %2$s - You updated your profile %1$s - %1$s sent an invitation to %2$s to join the room - You sent an invitation to %1$s to join the room - %1$s invited %2$s - You invited %1$s - %1$s revoked the invitation for %2$s to join the room - You revoked the invitation for %1$s to join the room - %1$s revoked the invitation for %2$s - You revoked the invitation for %1$s - %1$s accepted the invitation for %2$s - You accepted the invitation for %1$s - - %1$s added %2$s widget - You added %1$s widget - %1$s removed %2$s widget - You removed %1$s widget - %1$s modified %2$s widget - You modified %1$s widget - - Video conference started by %1$s - You started video conference - Video conference ended by %1$s - You ended video conference - Video conference modified by %1$s - You modified video conference - - Admin - Moderator - Default - Custom (%1$d) - Custom - - - You changed the power level of %1$s. - - %1$s changed the power level of %2$s. - - %1$s from %2$s to %3$s - - ** Unable to decrypt: %s ** - The sender\'s device has not sent us the keys for this message. - - - - - Could not redact - Unable to send message - - Failed to upload image - - - Network error - Matrix error - - - - - - - - - It is not currently possible to re-join an empty room. - - Encrypted message - - - Email address - Phone number - - - Invite from %s - Room Invite - - - %1$s and %2$s - - %1$s, %2$s and %3$s - - %1$s, %2$s, %3$s and %4$s - - - %1$s, %2$s, %3$s and %4$d other - %1$s, %2$s, %3$s and %4$d others - - - %1$s and 1 other - %1$s and %2$d others - - - Empty room - Empty room (was %s) - - Initial Sync:\nWaiting for server response… - Initial Sync:\nDownloading data… - Initial Sync:\nImporting account… - Initial Sync:\nImporting crypto - Initial Sync:\nImporting Rooms - Initial Sync:\nImporting Joined Rooms - Initial Sync:\nImporting Invited Rooms - Initial Sync:\nImporting Left Rooms - Initial Sync:\nImporting Communities - Initial Sync:\nImporting Account Data - - Sending message… - Clear sending queue - - %1$s\'s invitation. Reason: %2$s - Your invitation. Reason: %1$s - %1$s invited %2$s. Reason: %3$s - You invited %1$s. Reason: %2$s - %1$s invited you. Reason: %2$s - %1$s joined the room. Reason: %2$s - You joined the room. Reason: %1$s - %1$s joined. Reason: %2$s - You joined. Reason: %1$s - %1$s left the room. Reason: %2$s - You left the room. Reason: %1$s - %1$s left. Reason: %2$s - You left. Reason: %1$s - %1$s rejected the invitation. Reason: %2$s - You rejected the invitation. Reason: %1$s - %1$s kicked %2$s. Reason: %3$s - You kicked %1$s. Reason: %2$s - %1$s unbanned %2$s. Reason: %3$s - You unbanned %1$s. Reason: %2$s - %1$s banned %2$s. Reason: %3$s - You banned %1$s. Reason: %2$s - %1$s sent an invitation to %2$s to join the room. Reason: %3$s - You sent an invitation to %1$s to join the room. Reason: %2$s - %1$s revoked the invitation for %2$s to join the room. Reason: %3$s - You revoked the invitation for %1$s to join the room. Reason: %2$s - %1$s accepted the invitation for %2$s. Reason: %3$s - You accepted the invitation for %1$s. Reason: %2$s - %1$s withdrew %2$s\'s invitation. Reason: %3$s - You withdrew %1$s\'s invitation. Reason: %2$s - - - %1$s added %2$s as an address for this room. - %1$s added %2$s as addresses for this room. - - - - You added %1$s as an address for this room. - You added %1$s as addresses for this room. - - - - %1$s removed %2$s as an address for this room. - %1$s removed %2$s as addresses for this room. - - - - You removed %1$s as an address for this room. - You removed %1$s as addresses for this room. - - - %1$s added %2$s and removed %3$s as addresses for this room. - You added %1$s and removed %2$s as addresses for this room. - - "%1$s set the main address for this room to %2$s." - "You set the main address for this room to %1$s." - "%1$s removed the main address for this room." - "You removed the main address for this room." - - - %1$s added the alternative address %2$s for this room. - %1$s added the alternative addresses %2$s for this room. - - - - You added the alternative address %1$s for this room. - You added the alternative addresses %1$s for this room. - - - - %1$s removed the alternative address %2$s for this room. - %1$s removed the alternative addresses %2$s for this room. - - - - You removed the alternative address %1$s for this room. - You removed the alternative addresses %1$s for this room. - - - %1$s changed the alternative addresses for this room. - You changed the alternative addresses for this room. - %1$s changed the main and alternative addresses for this room. - You changed the main and alternative addresses for this room. - %1$s changed the addresses for this room. - You changed the addresses for this room. - - "%1$s has allowed guests to join the room." - "You have allowed guests to join the room." - "%1$s has allowed guests to join here." - "You have allowed guests to join here." - "%1$s has prevented guests from joining the room." - "You have prevented guests from joining the room." - "%1$s has prevented guests from joining the room." - "You have prevented guests from joining the room." - - %1$s turned on end-to-end encryption. - You turned on end-to-end encryption. - %1$s turned on end-to-end encryption (unrecognised algorithm %2$s). - You turned on end-to-end encryption (unrecognised algorithm %1$s). - - diff --git a/vector/src/main/res/values-ar/strings.xml b/vector/src/main/res/values-ar/strings.xml index 86e8c889e9..60c7506810 100644 --- a/vector/src/main/res/values-ar/strings.xml +++ b/vector/src/main/res/values-ar/strings.xml @@ -1,5 +1,220 @@ + إنَّ %1$s قد أرسلَ صُّورة. + دعوة مِن %s + إنَّ %1$s قد دَعى %2$s + إنَّ %1$s قد دعاكَ أنت + إنَّ %1$s قد إنضّم إلى الغُرفة + إنَّ %1$s قد غادر الغرفة + إنَّ %1$s قد رفضَ الدعوة + إنَّ %1$s قد طردَ %2$s + إنَّ %1$s قد رفعَ الحظر عن %2$s + إنَّ %1$s قد حظرَ %2$s + إنَّ %1$s قد غيَّرَ صورته الشخصية + إنَّ %1$s قد عيَّنَ اسمه الظاهر إلى %2$s + إنَّ %1$s قد غيَّرَ اسمه الظاهر من %2$s إلى %3$s + إنَّ %1$s قد أزالَ اسمه الظاهر (لقد كان %2$s) + إنَّ %1$s قد غيَّرَ الموضوع إلى: %2$s + إنَّ %1$s قد غيَّرَ اسم الغُرفة إلى: %2$s + إنَّ %s قد أجابَ على المُكالمة. + إنَّ %s قد أنهى المُكالمة. + إنَّ %1$s قد جعلَ التأريخ المُستقبلي للغُرفة مرئيًا لـ %2$s + جميع أعضاء الغُرفة، مِنَ اللَّحظة التي تمَّت دعوتهم. + جميع أعضاء الغُرفة، مِن لحظة انضمامهم. + جميع أعضاء الغُرفة. + أيُّ شخص. + غير معروف (%s). + إنَّ %1$s قد فعَّلَ تعمية النهاية-إلى-النهاية (%2$s) + إنَّ %1$s قد طلبَ اجتماع VoIP + إنَّ اجتماع VoIP قد بدأ + إنَّ اجتماع VoIP قد انتهى + إنَّ %1$s قد أزالَ اسم الغُرفة + إنَّ %1$s قد أزالَ موضوع الغُرفة + إنَّ %1$s قد حدَّثَ ملفه الشخصي %2$s + إنَّ %1$s قد أرسلَ دعوة إلى %2$s للإنضمام إلى الغُرفة + ** يتعذَّر فك تعمية: ⁨%s⁩ ** + إنَّ جِهاز المُرسل لم يُرسل لنا المفاتيح لهذه الرِّسالة. + يتعذَّ إرسال الرِّسالة + فَشلَ رفع الصُّورة + خطأ في الشَّبكة + خطأ في Matrix + حاليًا مِن غير المُمكِن إعادة الاِنضمام إلى غُرفة فارِغة. + رِسالة مُعمَّاة + عُنوان البريد الإلكتروني + رقم الهاتف + ‏‏⁨%1$s⁩: ‏⁨%2$s⁩ + إنَّ %1$s قد سحبَ دعوة %2$s + إنَّ %s قد أجرى مُكالمة مرئية. + إنَّ %s قد أجرى مُكالمة صوتية. + إنَّ %1$s قد قَبَل دعوة %2$s + يتعذَّر التنقيح + إنَّ %1$s قد أرسلَ مُلصقًا. + (تمَّ تغيِّير الصُّورة أيضًا) + دَعوة مِن ⁨%s⁩ + غُرفة فارِغة + %1$s وَ %2$s + دَعوة غُرفة + + + %1$s وواحد آخر + %1$s و%2$d آخران + %1$s و%2$d آخرين + %1$s و%2$d آخرون + %1$s و%2$d آخرون + + أنتَ قد أرسلتَ صُّورة. + أنتَ قد أرسلتَ مُلصقًا. + دعوة مِنكَ أنت + إنَّ %1$s قد أنشأ الغُرفة + أنتَ قد أنشأتَ الغُرفة + أنتَ قد دعوتَ %1$s + أنتَ قد انضممت إلى الغُرفة + أنتَ قد غادرتَ الغُرفة + أنت قد رفضت الدعوة + أنتَ قد طردتَ %1$s + أنتَ قد رفعتَ الحظر عن %1$s + أنتَ قد حظرتَ %1$s + أنتَ قد سحبتَ دعوة %1$s + أنتَ قد غيّرتَ صورتك الشخصية + أنتَ قد عيَّنتَ اسمك الظاهر إلى %1$s + أنتَ قد غيّرتَ اسمك الظاهر من ⁨%1$s⁩ إلى ⁨%2$s⁩ + أنتَ قد أزلتَ اسمك الظاهر (لقد كان ⁨%1$s⁩) + أنتَ قد غيَّرتَ الموضوع إلى: ⁨%1$s⁩ + إنَّ %1$s قد غيَّرَ صورة الغُرفة + أنتَ قد غيَّرتَ صورة الغُرفة + أنتَ قد غيَّرتَ اسم الغُرفة إلى: %1$s + أنتَ قد أجريتَ مُكالمة مرئية. + أنتَ قد أجريتَ مُكالمة صوتية. + إنَّ %s قد أرسلَ بيانات لإعداد مُكالمة. + أنتَ قد أرسلتَ بيانات لإعداد مُكالمة. + أنتَ قد أجبتَ على المُكالمة. + أنتَ قد أنهيتَ المُكالمة. + أنتَ قد جعلتَ التأريخ المُستقبلي للغُرفة مرئيًا لـ %1$s + أنتَ قد فعَّلتَ تعيمية النهاية-إلى-النهاية (%1$s) + إنَّ %s قد قامَ بترقية هذه الغرفة. + أنتَ قد رقَّيتَ هذه الغرفة. + أنتَ قد طلبتَ اجتماع VoIP + أنتَ قد أزلتَ اسم الغُرفة + أنتَ قد أزلتَ موضوع الغُرفة + إنَّ %1$s قد أزالَ صورة الغُرفة + أنتَ قد أزلتَ صورة الغُرفة + تمَّت إزالة الرسالة + الرسالة قد أُزيلت بواسطة %1$s + أُزيلت الرسالة [السبب: ⁨%1$s⁩] + الرِّسالة أُزيلت بِواسطة %1$s [السبب: ⁨%2$s⁩] + أنتَ قد أرسلتَ دعوة إلى %1$s للإنضمام إلى الغُرفة + إنَّ %1$s قد سحب دعوة %2$s للإنضمام إلى الغُرفة + أنتَ قد سحبت دعوة %1$s للإنضمام إلى الغُرفة + أنتَ قد قبلتَ دعوة %1$s + إنَّ %1$s قد أضافَ القطعة %2$s + أنتَّ قد أضفتَ القطعة %1$s + إنَّ %1$s قد أزال القطعة %2$s + أنتَ قد أزلتَ القطعة %1$s + إنَّ %1$s قد عدَّلَ القطعة %2$s + أنتَ قد عدَّلتَ القطعة %1$s + مسؤول + الاِفتراضي + مُخصَّص (⁨%1$d⁩) + مخصَّص + أنتَ قد غيَّرتَ مُستوى قوة %1$s. + إنَّ %1$s قد غيَّرَ مُستوى قوة %2$s. + %1$s مِن %2$s إلى %3$s + المُزامنة الأولية: +\nيجري إستيرد الحِساب… + 🎉 جميع الخوادِم محظورة مِنَ المُشاركة! لم يعُد من المُمكِن استخدام هذه الغُرفة. + لا تغيير. + • خوادِم مُطابقة IP الحرفية محظورة الآن. + • الخادِم المُطابق لـ %s قد أُزيل مِن قائمة السماح. + • الخادِم المُطابق لـ %s مسموح الآن. + • الخادِم المُطابق لـ %s قد أُزيل مِن قائمة الحظر. + • الخادِم المُطابق لـ %s محظور الآن. + • خوادِم مُطابقة IP الحرفية مسموحة الآن. + أنتَ قد غيَّرتَ خادِم الـACLs لهذه الغُرفة. + إنَّ %s قد غيَّرَ خادِم الـACLs لهذه الغُرفة. + • الخادِم يحظُر مُطابقة القيم الحرفية للـIP. + • الخادِم المُطابق لـ %s مسموح. + • الخادِم المُطابق لـ %s محظور. + • الخادِم يسمح بمُطابقة القيم الحرفية للـIP. + أنتَ قد عيَّنتَ خادِم الـACLs لهذه الغُرفة. + إنَّ %s قد عيَّنَ خادِم الـACLs لهذه الغُرفة. + أنتَ قد قمتَ بالترقية هُنا. + إنَّ %s قد قامَ بالترقية هُنا. + أنتَ قد جعلتَ الرسائل المُستقبلية مرئية لـ %1$s + إنَّ %1$s قد جعلَ الرسائل المُستقبلية مرئية لـ %2$s + أنتَ قد غادرتَ الغُرفة + إنَّ %1$s قد غادر الغرفة + أنت قد انضممت + إنَّ %1$s قد انضم + أنتَ قد أنشأتَ المُناقشة + إنَّ %1$s قد أنشأ المُناقشة + أنتَ قد سحبتَ دعوة %1$s. السبب: %2$s + إنَّ %1$s قد سحبَ دعوة %2$s. السبب: %3$s + أنتَ قد ألغيتَ دعوة %1$s للإنضمام إلى الغُرفة. السبب: %2$s + إنَّ %1$s قد ألغيت دعوة %2$s للإنضمام إلى الغُرفة. السبب: %3$s + أنتَ قد قبلتَ دعوة %1$s. السبب: %2$s + إنَّ %1$s قد قبلَ دعوة %2$s. السبب: %3$s + أنتَ قد أرسلتَ دعوة إلى %1$s للإنضمام إلى الغُرفة. السبب: %2$s + إنَّ %1$s قد أرسل دعوة إلى %2$s للإنضمام إلى الغُرغة. السبب: %3$s + أنتَ قد حظرتَ %1$s. السبب: %2$s + إنَّ %1$s قد حَظر %2$s. السبب: %3$s + أنتَ قد رفعتَ الحظر عن %1$s. السبب: %2$s + إنَّ %1$s قد رفع الحظر عن %2$s. السبب: %3$s + أنتَ قد طردتَ %1$s. السبب: %2$s + إنَّ %1$s قد طرد %2$s. السبب: %3$s + أنتَ قد رفضتَ الدعوة. السبب: %1$s + إنَّ %1$s قد رفض الدعوة. السبب: %2$s + أنتَ قد غادرت. السبب: %1$s + إنَّ %1$s قد غادر. السبب: %2$s + أنتَ قد غادرتَ الغُرفة. السبب: %1$s + إنَّ %1$s قد غادر الغُرفة. السبب: %2$s + أنتَ قد إنضممت. السبب: %1$s + إنَّ %1$s قد إنضم. السبب: %2$s + أنتَ قد إنضممتَ إلى الغُرفة. السبب: %1$s + إنَّ %1$s قد إنضم إلى الغُرفة. السبب: %2$s + إنَّ %1$s قد دعاكَ أنت. السبب: %2$s + أنتَ قد دعوتَ %1$s. السبب: %2$s + إنَّ %1$s قد دعا %2$s. السبب: %3$s + دعوتُكَ أنت. السبب: %1$s + دعوة %1$s. السبب: %2$s + محو قائمة انتظار الإرسال + يجري إرسال الرِّسالة… + المُزامنة الأولية: +\nيجري إستيرد مَعلومات الحِساب + المُزامنة الأولية: +\nيجري إستيرد المُجتمعات + المُزامنة الأولية: +\nيجري إستيرد الغُرف المُغادَر مِنها + المُزامنة الأولية: +\nيجري إستيرد الغُرف المَدعو إليها + المُزامنة الأولية: +\nيجري إستيرد الغُرف المُنضم فيها + المُزامنة الأولية: +\nيجري إستيرد الغُرف + المُزامنة الأولية: +\nيجري إستيرد التَعمية + غُرفة فارِغة (كانت %s) + + %1$s، %2$s و%3$s + %1$s، %2$s، %3$s و%4$d آخر + %1$s، %2$s، %3$s و%4$d آخران + %1$s، %2$s، %3$s و%4$d آخرين + %1$s، %2$s، %3$s و%4$d آخرون + %1$s،%2$s،%3$s و%4$d آخرون + + الأعضاء %1$s، %2$s، %3$s و %4$s + الأعضاء %1$s، %2$s و %3$s + مُشرِف + أنتَ قد عدَّلتَ اجتماع الفيديو + لقد عُدِّلَ اجتماع الفيديو بواسطة %1$s + أنتَ قد أنهيتَ اجتماع الفيديو + لقد أُنهيَ اجتماع الفيديو بواسطة %1$s + أنتَ قد بدأتَ اجتماع الفيديو + لقد بدأ اجتماع الفيديو بواسطة %1$s + أنتَ قد سحبتَ دعوة %1$s + إنَّ %1$s قد سحب دعوة %2$s + أنتَ قد دعوتَ %1$s + إنَّ %1$s قد دعى %2$s + أنتَ قد حدَّثتَ ملفك الشخصي %1$s السمة الفاتحة السمة الداكنة السمة السوداء diff --git a/vector/src/main/res/values-az/strings.xml b/vector/src/main/res/values-az/strings.xml index a6b3daec93..3821dcfb73 100644 --- a/vector/src/main/res/values-az/strings.xml +++ b/vector/src/main/res/values-az/strings.xml @@ -1,2 +1,115 @@ - \ No newline at end of file + + %1$s: %2$s + %1$s şəkil göndərdi. + %1$s stiker göndərdi. + + %s-nin dəvəti + %1$s dəvət etdi %2$s + %1$s sizi dəvət etdi + %1$s qoşuldu + %1$s qalıb + %1$s dəvəti rədd etdi + %1$s %2$s-i xaric etdi + %1$s %2$s-i blokdan açdı + %1$s %2$s-i blokladı + %1$s %2$s-in dəvətini geri götürdü + %1$s avatarı dəyişdi + %1$s ekran adını %2$s olaraq təyin etdi + %1$s ekran adını %2$s-dan %3$s-ya dəyişdi + %1$s onların göstərilən adlarını sildi (%2$s) + %1$s mövzunu dəyişdi: %2$s + %1$s otaq adını dəyişdirdi: %2$s + %s video zəng etdi. + %s səsli zəng etdi. + %s zəngə cavab verdi. + %s zəng başa çatdı. + "%1$s gələcək otaq tarixçəsini %2$s-ə görünən etdi" + bütün otaq üzvləri, dəvət olunduğu andan. + bütün otaq üzvləri, qoşulduğu andan. + bütün otaq üzvləri. + hər kəs. + naməlum (%s). + %1$s sondan-sona şifrələmə açdı (%2$s) + %s bu otağı təkmilləşdirdi. + + %1$s VoIP konfrans istədi + VoIP konfransı başladı + VoIP konfransı başa çatdı + + (avatar da dəyişdirilib) + %1$s otaq adını sildi + %1$s otaq mövzusunu sildi + Mesaj silindi + Mesaj %1$s tərəfindən silindi + Mesaj silindi [səbəb: %1$s] + Mesaj %1$s tərəfindən qaldırıldı [səbəb: %2$s] + %1$s profilini %2$s yenilədi + %1$s otağa qoşulmaq üçün %2$s dəvətnamə göndərdi + %1$s otağa qoşulmaq üçün %2$s dəvətini ləğv etdi + %1$s %2$s üçün dəvəti qəbul etdi + + ** Şifrəni aça bilmir: %s ** + Göndərənin cihazı bu mesaj üçün açarları bizə göndərməyib. + + Redaktə etmək olmur + Mesaj göndərmək olmur + + Şəkil yükləmək olmur + + Şəbəkə xətası + Matris xətası + + Boş bir otağa yenidən qoşulmaq hazırda mümkün deyil. + + Şifrəli mesaj + + Elektron poçt ünvanı + Telefon nömrəsi + + %s-dən dəvət + Otağa dəvət + + %1$s və %2$s + + + %1$s və 1 digər + %1$s və %2$d digərləri + + + Boş otaq + + İlkin sinxronizasiya: +\nHesab idxal olunur… + İlkin sinxronizasiya: +\nKriptografiyanın idxalı + İlkin sinxronizasiya: +\nOtaqlar idxalı + İlkin sinxronizasiya: +\nOtaqlara daxil olmaq + İlkin sinxronizasiya: +\nDəvət olunmuş otaqların idxalı + İlkin sinxronizasiya: +\nTərk olunmuş otaqların idxalı + İlkin sinxronizasiya: +\nİcmaların idxalı + İlkin sinxronizasiya: +\nHesab məlumatlarının idxalı + + Mesaj göndərilir… + Göndərmə növbəsini təmizləyin + + %1$s-nin dəvəti. Səbəb: %2$s + %1$s dəvət olunmuş %2$s. Səbəb: %3$s + %1$s sizi dəvət etdi. Səbəb: %2$s + %1$s qoşuldu. Səbəb: %2$s + %1$s qalıb. Səbəb: %2$s + %1$s dəvəti rədd etdi. Səbəb: %2$s + %1$s %2$s-i xaric etdi. Səbəb: %3$s + %1$s blokdan açdı %2$s. Səbəb: %3$s + %1$s blokladı %2$s. Səbəb: %3$s + %1$s otağa qoşulmaq üçün %2$s dəvətnamə göndərdi. Səbəb: %3$s + %1$s otağa qoşulmaq üçün %2$s dəvətini ləğv etdi. Səbəb: %3$s + %1$s %2$s üçün dəvəti qəbul etdi. Səbəb: %3$s + %1$s %2$s dəvətini geri götürdü. Səbəb: %3$s + \ No newline at end of file diff --git a/vector/src/main/res/values-bg/strings.xml b/vector/src/main/res/values-bg/strings.xml index 56caef9cca..569cb50a9c 100644 --- a/vector/src/main/res/values-bg/strings.xml +++ b/vector/src/main/res/values-bg/strings.xml @@ -1,5 +1,217 @@ + %1$s: %2$s + %1$s изпрати снимка. + Поканата на %s + %1$s покани %2$s + %1$s Ви покани + %1$s се присъедини в стаята + %1$s напусна стаята + %1$s отхвърли поканата + %1$s изгони %2$s + %1$s отблокира %2$s + %1$s блокира %2$s + %1$s оттегли поканата си за %2$s + %1$s смени своята профилна снимка + %1$s си сложи име %2$s + %1$s смени своето име от %2$s на %3$s + %1$s премахна своето име (%2$s) + %1$s смени темата на: %2$s + %1$s смени името на стаята на: %2$s + %s започна видео разговор. + %s започна гласов разговор. + %s отговори на обаждането. + %s прекрати разговора. + %1$s направи бъдещата история на стаята видима за %2$s + всички членове, от момента на поканването им в нея. + всички членове, от момента на присъединяването им в нея. + всички членове в нея. + всеки. + непозната (%s). + %1$s включи шифроване от край до край (%2$s) + %1$s заяви VoIP групов разговор + Започна VoIP групов разговор + Груповият разговор приключи + (профилната снимка също беше сменена) + %1$s премахна името на стаята + %1$s премахна темата на стаята + %1$s обнови своя профил %2$s + %1$s изпрати покана на %2$s да се присъедини към стаята + %1$s прие поканата за %2$s + ** Неуспешно разшифроване: %s ** + Неуспешно премахване + Неуспешно изпращане на съобщението + Неуспешно качване на снимката + Грешка в мрежата + Matrix грешка + В момента не е възможно да се присъедините отново към празна стая. + Шифровано съобщение + Имейл адрес + Телефонен номер + Устройството на подателя не изпрати ключовете за това съобщение. + %1$s изпрати стикер. + Покана от %s + Покана за стая + %1$s и %2$s + + %1$s и 1 друг + %1$s и %2$d други + + Празна стая + Премахнато съобщение + Съобщение премахнато от %1$s + Премахнато съобщение [причина: %1$s] + Съобщение премахнато от %1$s [причина: %2$s] + Начална синхронизация: +\nИмпортиране на профил… + Начална синхронизация: +\nИмпортиране на данни за шифроване + Начална синхронизация: +\nИмпортиране на стаи + Начална синхронизация: +\nИмпортиране на стаи, от които съм част + Начална синхронизация: +\nИмпортиране на стаи, към които съм поканен + Начална синхронизация: +\nИмпортиране на стаи, които съм напуснал + Начална синхронизация: +\nИмпортиране на общности + Начална синхронизация: +\nИмпортиране на данни за профила + %s обнови тази стая. + Изпращане на съобщение… + Изчисти опашката за изпращане + %1$s оттегли поканата за присъединяване на %2$s към стаята + поканата на %1$s. Причина: %2$s + %1$s покани %2$s. Причина: %3$s + %1$s ви покани. Причина: %2$s + %1$s се присъедини в стаята. Причина: %2$s + %1$s напусна стаята. Причина: %2$s + %1$s отхвърли поканата. Причина: %2$s + %1$s изгони %2$s. Причина: %3$s + %1$s блокира %2$s. Причина: %3$s + %1$s блокира %2$s. Причина: %3$s + %1$s изпрати покана до %2$s да се присъедини в стаята. Причина: %3$s + %1$s премахна поканата за присъединяване на %2$s в стаята. Причина: %3$s + %1$s прие поканата за %2$s. Причина: %3$s + %1$s оттегли поканата на %2$s. Причина: %3$s + + %1$s добави %2$s като адрес за тази стая. + %1$s добави %2$s като адреси за тази стая. + + + %1$s премахна %2$s като адрес за тази стая. + %1$s премахна %2$s като адреси за тази стая. + + %1$s добави %2$s и премахна %3$s като адреси за тази стая. + %1$s настрой %2$s като основен адрес за тази стая. + %1$s премахна основния адрес за тази стая. + %1$s разреши на гости да се присъединяват в стаята. + %1$s предотврати присъединяването на гости в стаята. + %1$s включи шифроване от-край-до-край. + %1$s включи шифроване от-край-до-край (неразпознат алгоритъм %2$s). + %1$s създаде стаята + Изпратихте снимка. + Изпратихте стикер. + Ваша покана + Създадохте стаята + Поканихте %1$s + Присъединихте се в стаята + Напуснахте стаята + Отхвърлихте поканата + Изгонихте %1$s + Отблокирахте %1$s + Блокирахте %1$s + Включихте шифроване от-край-до-край (непознат алгоритъм: %1$s). + Включихте шифроване от-край-до-край. + Спряхте възможността гости да се присъединяват в стаята. + %1$s спря възможността гости да се присъединяват в стаята. + Спряхте възможността гости да се присъединяват в стаята. + Позволихте на гости да се присъединяват тук. + %1$s позволи на гости да се присъединяват тук. + Позволихте на гости да се присъединяват към стаята. + Премахнахте основния адрес на стаята. + Зададохте %1$s като основен адрес на стаята. + Добавихте %1$s и премахнахте %2$s от адресите за стаята. + + Премахнахте %1$s от адресите на стаята. + Премахнахте %1$s от адресите на стаята. + + + Добавихте %1$s като адрес за тази стая. + Добавихте %1$s като адреси за тази стая. + + Оттеглихте поканата на %1$s. Причина: %2$s + Приехте поканата за %1$s. Причина: %2$s + Оттеглихте поканата за присъединяване в стаята от %1$s. Причина: %2$s + Изпратихте покана към %1$s за присъединяване в стаята. Причина: %2$s + Блокирахте %1$s. Причина: %2$s + Отблокирахте %1$s. Причина: %2$s + Изгонихте %1$s. Причина: %2$s + Отхвърлихте поканата. Причина: %1$s + Напуснахте. Причина: %1$s + %1$s напусна. Причина: %2$s + Напуснахте стаята. Причина: %1$s + Присъединихте се. Причина: %1$s + %1$s се присъедини. Причина: %2$s + Присъединихте се в стаята. Причина: %1$s + Поканихте %1$s. Причина: %2$s + Ваша покана. Причина: %1$s + %1$s от %2$s на %3$s + %1$s промени нивото на достъп на %2$s. + Променихте нивото на достъп на %1$s. + Собствено ниво + Собствено ниво (%1$d) + По подразбиране + Модератор + Администратор + Променихте %1$s приспособлението + %1$s промени %2$s приспособлението + Премахнахте %1$s приспособлението + %1$s премахна %2$s приспособлението + Добавихте %1$s приспособление + %1$s добави %2$s приспособление + Приехте поканата за %1$s + Оттеглихте поканата от %1$s + %1$s оттегли поканата от %2$s + Оттеглихте поканата за присъединяване в стаята от %1$s + Поканихте %1$s + %1$s покани %2$s + Изпратихте покана към %1$s за присъединяване в стаята + Обновихте профила си %1$s + Премахнахте снимката на стаята + %1$s премахна снимката на стаята + Премахнахте темата на стаята + Премахнахте името на стаята + Заявихте VoIP конференция + Обновихте чата. + %s обнови чата. + Обновихте стаята. + Включихте шифроване от-край-до-край (%1$s) + Направихте бъдещите съобщения видими за %1$s + %1$s направи бъдещите съобщения видими за %2$s + Направихте бъдещата история на стаята видима за %1$s + Прекратихте разговора. + Започнахте видео разговор. + Отговорихте на обаждането. + Изпратихте данни за настройка на разговора. + %s изпрати данни за настройка на разговора. + Започнахте гласов разговор. + Променихте името на стаята на: %1$s + Променихте снимката на стаята + %1$s промени снимката на стаята + Променихте темата на: %1$s + Премахнахте името си (%1$s) + Променихте името си от %1$s на %2$s + Променихте името си на %1$s + Променихте снимката си + Оттеглихте поканата от %1$s + Напуснахте стаята + %1$s напусна стаята + Присъединихте се + %1$s се присъедини + Създадохте дискусията + %1$s създаде дискусията Шифровано съобщение Светла тема diff --git a/vector/src/main/res/values-bn-rIN/strings.xml b/vector/src/main/res/values-bn-rIN/strings.xml index 0436e5f8cd..3002e4c056 100644 --- a/vector/src/main/res/values-bn-rIN/strings.xml +++ b/vector/src/main/res/values-bn-rIN/strings.xml @@ -1,5 +1,195 @@ + %1$s একটি ফটো পাঠিয়েছে। + %1$s একটি স্তিকার পাঠিয়েছে। + %s এর আমন্ত্রণ + %1$s %2$s কে আমন্ত্রণ করেছে + %1$s আপনাকে আমন্ত্রণ করেছে + %1$s রুম এ যোগ দিয়েছে + %1$s রুম ছেড়ে দিয়েছে + %1$s আমন্ত্রণ টি বাতিল করেছে + %1$s %2$s কে কিক করেছে + %1$s %2$s কে নিষিদ্ধ তালিকা থেকে মুক্ত করেছে + %1$s %2$s কে নিষিদ্ধ করেছে + %1$s %2$s এর আমন্ত্রণ ফেরত নিয়েছে + %1$s নিজের অবতার পরিবর্তন করেছে + %1$s নিজের প্রদর্শন নাম %2$s রেখেছে + %1$s নিজের প্রদর্শন নাম %2$s থেকে %3$s তে পরিবর্তন করেছে + %1$s নিজের প্রদর্শন নাম মুছে দিয়েছে (%2$s) + %1$s বিষয় টি এতে পরিবর্তন করেছে: %2$s + %1$s রুম এর নাম এতে পরিবর্তন করেছে: %2$s + %s একটি ভিডিও কল স্থাপন করেছিল। + %s একটি ভয়েস কল দিয়েছে। + %1$s: %2$s + আপনি একটি ছবি প্রেরণ করেছেন। + আপনি একটি স্তিকার পাঠিয়েছেন। + আপনার আমন্ত্রণ + %1$s কক্ষটি তৈরি করেছেন + আপনি কক্ষটি তৈরি করেছেন + আপনি %1$s কে আমন্ত্রিত করেছেন + আপনি কক্ষে যোগ দিয়েছেন + আপনি কক্ষ ছেড়ে দিয়েছেন + আপনি আমন্ত্রণটি বাতিল করেছেন + আপনি %1$s কে কীক করেছেন + আপনি %1$s কে নিষিদ্ধ মুক্ত করেছেন + আপনি %1$s কে নিষিদ্ধ করেছেন + আপনি %1$s এর আমন্ত্রণ প্রত্যাহার করেছেন + আপনি আপনার অবতারটি পরিবর্তন করেছেন + আপনি আপনার প্রদর্শনের নামটি %1$s তে সেট করেছেন + আপনি আপনার প্রদর্শনের নামটি %1$s থেকে %2$s এ পরিবর্তন করেছেন + আপনি আপনার প্রদর্শনের নামটি সরিয়ে দিয়েছেন (যেটা ছিল %1$s) + আপনি বিষয়টিকে এতে পরিবর্তন করেছেন: %1$s + %1$s কক্ষের অবতারটি পরিবর্তন করেছে + আপনি কক্ষের অবতারটি পরিবর্তন করেছেন + আপনি কক্ষের নাম এতে পরিবর্তন করেছেন:%1$s + আপনি একটি ভিডিও কল করেছেন। + আপনি একটি ভয়েস কল দিয়েছেন। + কল সেটআপ করার জন্য %s ডেটা প্রেরণ করেছে। + আপনি কল সেটআপ করার জন্য ডেটা প্রেরণ করেছেন। + %s কলটির উত্তর দিয়েছে। + আপনি কলটি উত্তর দিয়েছেন। + %s কলটি শেষ করেছেন। + আপনি কলটি শেষ করেছেন। + %1$s ভবিষ্যতের ঘরের ইতিহাস %2$s এর কাছে দৃশ্যমান করে তুলেছে + আপনি ভবিষ্যতের কক্ষ ইতিহাস %1$s এর কাছে দৃশ্যমান করেছেন + কক্ষের সমস্ত সদস্য, যখন থেকে তারা আমন্ত্রিত। + কক্ষের সমস্ত সদস্য, যখন থেকে তারা যোগদান করেছিল। + সমস্ত কক্ষের সদস্য। + যে কেউ। + অজানা (%s)। + %1$s এন্ড-টু-এন্ড এনক্রিপশন চালু করেছে (%2$s) + আপনি শেষ-থেকে-শেষ এনক্রিপশন চালু করেছেন (%1$s) + %s এই কক্ষটিকে আপগ্রেড করেছে। + আপনি এই কক্ষটি আপগ্রেড করেছেন। + %1$s একটি ভিওআইপি সম্মেলনের জন্য অনুরোধ করেছে + আপনি একটি ভিওআইপি সম্মেলনের অনুরোধ করেছেন + ভিওআইপি সম্মেলন শুরু হয়েছে + ভিওআইপি সম্মেলন শেষ হয়েছে + (আবতারটিও পরিবর্তন করা হয়েছিল) + %1$s কক্ষের নাম সরিয়েছে + আপনি কক্ষের নাম সরিয়েছেন + %1$s কক্ষের বিষয় মুছে ফেলেছে + আপনি কক্ষের বিষয়টিকে সরিয়ে দিয়েছেন + %1$s কক্ষের অবতার সরিয়ে নিয়েছে + আপনি কক্ষের অবতার সরিয়েছেন + বার্তা সরানো হয়েছে + %1$s দ্বারা বার্তা সরানো হয়েছে + বার্তা সরানো হয়েছে [কারণ:%1$s] + %1$s দ্বারা বার্তা সরানো হয়েছে [কারণ: %2$s] + %1$s তাদের প্রোফাইল %2$s আপডেট করেছে + আপনি আপনার প্রোফাইল %1$s আপডেট করেছেন + %1$s %2$s কে ঘরে যোগদানের জন্য একটি আমন্ত্রণ পাঠিয়েছে + আপনি %1$s কে ঘরে যোগদানের জন্য একটি আমন্ত্রণ প্রেরণ করেছেন + %1$s %2$s এর কক্ষে যোগদানের আমন্ত্রণ বাতিল করে দিয়েছিল + আপনি %1$s এর কক্ষে যোগদানের জন্য আমন্ত্রণটি বাতিল করেছেন + %1$s %2$s এর জন্য আমন্ত্রণটি গ্রহণ করেছে + আপনি %1$s এর জন্য আমন্ত্রণটি গ্রহণ করেছেন + %1$s %2$s উইজেট যুক্ত করেছে + আপনি %1$s উইজেট যুক্ত করেছেন + %1$s %2$s উইজেট সরিয়ে দিয়েছেন + আপনি %1$s উইজেট সরিয়েছেন + %1$s %2$s উইজেট পরিবর্তন করেছেন + আপনি %1$s উইজেট পরিবর্তন করেছেন + অ্যাডমিন + নিয়ামক + ডিফল্ট + কাস্টম (%1$d) + কাস্টম + আপনি %1$s এর পাওয়ার স্তর পরিবর্তন করেছেন। + %1$s %2$s এর পাওয়ার স্তর পরিবর্তন করেছে। + %1$s %2$s থেকে %3$s পর্যন্ত + ** ডিক্রিপ্ট করতে অক্ষম: %s ** + প্রেরকের ডিভাইস আমাদের এই বার্তার জন্য কীগুলি প্রেরণ করেনি। + পুনরায় প্রতিক্রিয়া করতে পারেনি + বার্তা পাঠাতে অক্ষম + চিত্র আপলোড করতে ব্যর্থ + নেটওয়ার্ক ত্রুটি + ম্যাট্রিক্স ত্রুটি + খালি কক্ষে পুনরায় যোগদান করা বর্তমানে সম্ভব নয়। + এনক্রিপ্ট করা বার্তা + ইমেল ঠিকানা + ফোন নম্বর + %s থেকে আমন্ত্রণ করুন + কক্ষ আমন্ত্রণ + %1$s এবং %2$s + + %1$s এবং অন্য ১ জন + %1$s এবং অন্যান্য %2$d জন + + খালি কক্ষ + প্রাথমিক সিঙ্ক: +\nঅ্যাকাউন্ট আমদানি করা হচ্ছে… + প্রাথমিক সিঙ্ক: +\nক্রিপ্টো আমদানি হচ্ছে + প্রাথমিক সিঙ্ক: +\nকক্ষগুলি আমদানি করা হচ্ছে + প্রাথমিক সিঙ্ক: +\nযোগ করা কক্ষগুলিতে আমদানি করা হিচ্ছে + প্রাথমিক সিঙ্ক: +\nআমন্ত্রিত করা কক্ষগুলিতে আমদানি করা হিচ্ছে + প্রাথমিক সিঙ্ক: +\nছেড়ে দেওয়া কক্ষগুলিতে আমদানি করা হিচ্ছে + প্রাথমিক সিঙ্ক: +\nসম্প্রদায়গুলি আমদানি করা হচ্ছে + প্রাথমিক সিঙ্ক: +\nঅ্যাকাউন্ট ডেটা আমদানি করা হচ্ছে + বার্তা প্রেরণ করা হচ্ছে … + প্রেরণ সারি পরিষ্কার করুন + %1$s এর আমন্ত্রণ। কারণ: %2$s + আপনার আমন্ত্রণ। কারণ: %1$s + %1$s আমন্ত্রিত করেছেন %2$s কে। কারণ: %3$s + আপনি %1$s কে আমন্ত্রিত করেছেন। কারণ: %2$s + %1$s আপনাকে আমন্ত্রণ করেছে। কারণ: %2$s + %1$s রুম এ যোগ দিয়েছে। কারণ: %2$s + আপনি কক্ষে যোগ দিয়েছেন। কারণ: %1$s + %1$s রুম ছেড়ে দিয়েছে। কারণ: %2$s + আপনি কক্ষ ছেড়ে দিয়েছেন। কারণ: %1$s + %1$s আমন্ত্রণ বাতিল করেছেন। কারণ: %2$s + আপনি আমন্ত্রণটি বাতিল করেছেন। কারণ: %1$s + %1$s %2$s কে কিক করেছে। কারণ: %3$s + আপনি %1$s কে কীক করেছেন। কারণ: %2$s + %1$s %2$s কে নিষিদ্ধ তালিকা থেকে মুক্ত করেছে। কারণ: %3$s + আপনি %1$s কে নিষিদ্ধ মুক্ত করেছেন। কারণ: %2$s + %1$s %2$s কে নিষিদ্ধ করেছে। কারণ: %3$s + আপনি %1$s কে নিষিদ্ধ করেছেন। কারণ: %2$s + %1$s রুমের সাথে যোগ দিতে %2$s কে একটি আমন্ত্রণ পাঠিয়েছেন। কারণ: %3$s + আপনি %1$s কে ঘরে যোগদানের জন্য একটি আমন্ত্রণ প্রেরণ করেছেন। কারণ: %2$s + %1$s %2$s এর কক্ষে যোগদানের আমন্ত্রণ বাতিল করে দিয়েছিল। কারণ: %3$s + আপনি %1$s এর কক্ষে যোগদানের জন্য আমন্ত্রণটি বাতিল করেছেন। কারণ: %2$s + %1$s %2$s এর জন্য আমন্ত্রণ গ্রহণ করেছেন। কারণ: %3$s + আপনি %1$s এর জন্য আমন্ত্রণটি গ্রহণ করেছেন। কারণ: %2$s + %1$s %2$s এর আমন্ত্রণ ফেরত নিয়েছে। কারণ: %3$s + আপনি %1$s এর আমন্ত্রণ প্রত্যাহার করেছেন। কারণ: %2$s + + %1$s এই ঘরের ঠিকানা হিসাবে %2$s যুক্ত করেছে। + %1$s এই ঘরের ঠিকানাগুলি হিসাবে %2$s যুক্ত করেছে। + + + আপনি এই কক্ষের জন্য ঠিকানা হিসাবে %1$s যুক্ত করেছেন। + আপনি এই কক্ষের ঠিকানা হিসাবে %1$s যুক্ত করেছেন। + + + %1$s এই ঘরের ঠিকানা হিসাবে %2$s সরানো হয়েছে। + %1$s %3$s কে এই ঘরের ঠিকানা হিসাবে সরানো হয়েছে। + + + আপনি এই ঘরের ঠিকানা হিসাবে %1$s সরিয়েছেন। + আপনি এই ঘরের ঠিকানা হিসাবে %1$s গুলি সরিয়েছেন। + + %1$s %2$s যোগ করেছে এবং %3$s গুলি এই ঘরের ঠিকানা হিসাবে সরানো হয়েছে। + আপনি %1$s যোগ করেছেন এবং %2$s কে এই ঘরের ঠিকানা হিসাবে সরিয়ে দিয়েছেন। + %1$s এই ঘরের মূল ঠিকানাটি %2$s তে সেট করে। + আপনি এই ঘরের মূল ঠিকানাটি %1$s তে সেট করেছেন। + %1$s এই ঘরের মূল ঠিকানা সরিয়ে নিয়েছে। + আপনি এই ঘরের মূল ঠিকানা সরিয়েছেন। + %1$s অতিথিদের ঘরে যোগদানের অনুমতি দিয়েছে। + আপনি অতিথিদের ঘরে যোগদানের অনুমতি দিয়েছেন। + %1$s অতিথিদের ঘরে যোগদান করতে বাধা দিয়েছে। + আপনি অতিথিদের ঘরে যোগদান করতে বাধা দিয়েছেন। + %1$s এন্ড-টু-এন্ড এনক্রিপশন চালু করেছে। + আপনি শেষ থেকে শেষ এনক্রিপশন চালু করেছেন। + %1$s এন্ড-টু-এন্ড এনক্রিপশন চালু করেছে (অজানা অ্যালগরিদম %2$s)। + আপনি শেষ-থেকে-শেষ এনক্রিপশন চালু করেছেন (অজানা অ্যালগরিদম %1$s )। হালকা থিম গাঢ় থিম diff --git a/vector/src/main/res/values-bs/strings.xml b/vector/src/main/res/values-bs/strings.xml index 92363e9210..691d439f45 100644 --- a/vector/src/main/res/values-bs/strings.xml +++ b/vector/src/main/res/values-bs/strings.xml @@ -1,5 +1,9 @@ + Pozovite iz %s + Poziv u Sobu + %1$s i %2$s + Prazna soba Svijetla Tema Tamna Tema Crna Tema diff --git a/vector/src/main/res/values-ca/strings.xml b/vector/src/main/res/values-ca/strings.xml index 296216b15b..144d218e61 100644 --- a/vector/src/main/res/values-ca/strings.xml +++ b/vector/src/main/res/values-ca/strings.xml @@ -1,5 +1,269 @@ + %1$s: %2$s + %1$s ha enviat una imatge. + %1$s ha marxat de la sala + %1$s s\'ha unit a la sala + Número de telèfon + Correu electrònic + Missatge xifrat + invitació de %s + %1$s ha convidat a %2$s + %1$s t\'ha convidat + %1$s ha rebutjat la invitació + %1$s ha expulsat %2$s + %1$s ha canviat el seu àlies de %2$s a %3$s + %1$s ha eliminat el àlies (era %2$s) + %1$s ha canviat el tema a: %2$s + %1$s ha canviat el nom de la sala a: %2$s + %s ha respost a la trucada. + %s ha finalitzat la trucada. + tots el participants de la sala, des de que són convidats. + tots els participants de la sala. + desconegut (%s). + %1$s ha activat el xifrat d\'extrem a extrem (%2$s) + %1$s ha sol·licitat una conferència VoIP + %1$s ha tret el vet a %2$s + %1$s ha vetat %2$s + %1$s ha retirat la invitació de %2$s + %1$s ha canviat la seva icona + %1$s ha establert la visibilitat de l\'històric futur de la sala a %2$s + tots els participants de la sala, des de que s\'hi uneixen. + qualsevol. + S\'ha iniciat la conferència VoIP + Ha finalitzat la conferència VoIP + (també ha canviat la icona) + %1$s ha eliminat el nom de la sala + %1$s ha eliminat el tema de la sala + %1$s ha actualitzat el seu perfil %2$s + %1$s ha enviat una invitació a %2$s perquè s\'uneixi a la sala + %1$s ha acceptat la invitació de %2$s + ** No s\'ha pogut desxifrar: %s ** + El dispositiu del remitent no ens ha enviat les claus per aquest missatge. + No s\'ha pogut redactar + No s\'ha pogut enviar el missatge + No s\'ha pogut pujar la imatge + Error de xarxa + Error de Matrix + Ara per ara no és possible tornar a unir-se a una sala buida. + %1$s a canviat el seu àlies a %2$s + %s ha realitzat una videotrucada. + %s ha realitzat una trucada de veu. + + Invitació de %s + Convida a la sala + %1$s i %2$s + Sala buida + + %1$s i 1 altre + %1$s i %2$d altres + + %1$s ha enviat un adhesiu. + %s s\'ha actualitzat aquí. + Ho has actualitzat aquí. + Has activat el xifrat d\'extrem a extrem (algorisme %1$s no reconegut). + %1$s ha activat el xifrat d\'extrem a extrem (algorisme %2$s no reconegut). + Has activat el xifrat d\'extrem a extrem. + %1$s ha activat el xifrat d\'extrem a extrem. + Has impedit que els convidats es puguin unir a la sala. + %1$s ha impedit que els convidats es puguin unir a la sala. + Has impedit que els convidats es puguin unir a la sala. + %1$s ha impedit que els convidats es puguin unir a la sala. + Has permès que els convidats s\'uneixin aquí. + %1$s ha permès que els convidats s\'uneixin aquí. + Has permès que els convidats s\'uneixin a la sala. + %1$s ha permès que els convidats s\'uneixin a la sala. + Has eliminat l\'adreça principal d\'aquesta sala. + %1$s ha eliminat l\'adreça principal d\'aquesta sala. + Has establert l\'adreça principal d\'aquesta sala a %1$s. + %1$s ha establert l\'adreça principal d\'aquesta sala a %2$s. + Has afegit %1$s i has eliminat %2$s d\'aquesta sala (adreces). + %1$s ha afegit %2$s i ha eliminat %3$s d\'aquesta sala (adreces). + + Has eliminat l\'adreça %1$s d\'aquesta sala. + Has eliminat les adreces %1$s d\'aquesta sala. + + + %1$s ha eliminat %2$s com a adreça d\'aquesta sala. + %1$s ha eliminat %2$s com a adreces d\'aquesta sala. + + + Has afegit l\'adreça %1$s a aquesta sala. + Has afegit les adreces %1$s a aquesta sala. + + + %1$s ha afegit l\'adreça %2$s a aquesta sala. + %1$s ha afegit les adreces %2$s a aquesta sala. + + Has revocat la invitació de %1$s perquè s\'uneixi a la sala. Motiu: %2$s + %1$s ha revocat la invitació de %2$s perquè s\'uneixi a la sala. Motiu: %3$s + Has revocat la invitació de %1$s + %1$s ha revocat la invitació de %2$s + Has revocat la invitació de %1$s perquè s\'uneixi a la sala + %1$s ha revocat la invitació de %2$s perquè s\'uneixi a la sala + Has retirat la invitació de %1$s. Motiu: %2$s + %1$s ha retirat la invitació de %2$s. Motiu: %3$s + Has acceptat la invitació de %1$s. Motiu: %2$s + %1$s ha acceptat la invitació de %2$s. Motiu: %3$s + Has enviat una invitació a %1$s perquè s\'uneixi a la sala. Motiu: %2$s + %1$s ha enviat una invitació a %2$s perquè s\'uneixi a la sala. Motiu: %3$s + Has vetat %1$s. Motiu: %2$s + %1$s ha vetat %2$s. Motiu: %3$s + Has tret el vet a %1$s. Motiu: %2$s + %1$s ha tret el vet a %2$s. Motiu: %3$s + Has vetat %1$s + Has marxat de la sala. Motiu: %1$s + %1$s ha marxat de la sala. Motiu: %2$s + Has marxat de la sala + %1$s ha marxat de la sala + Has marxat de la sala + Has expulsat %1$s + Has expulsat %1$s. Motiu: %2$s + %1$s ha expulsat %2$s. Motiu: %3$s + Has rebutjat la invitació. Motiu: %1$s + %1$s ha rebutjat la invitació. Motiu: %2$s + Has marxat. Motiu: %1$s + %1$s ha marxat. Motiu: %2$s + T\'has unit. Motiu: %1$s + %1$s s\'ha unit. Motiu: %2$s + T\'has unit a la sala. Motiu: %1$s + %1$s s\'ha unit a la sala. Motiu: %2$s + %1$s t\'ha convidat. Motiu: %2$s + Has convidat %1$s. Motiu: %2$s + %1$s ha convidat %2$s. Motiu: %3$s + La teva invitació. Motiu: %1$s + la invitació de %1$s. Motiu: %2$s + Esborra la cua d\'enviament + Enviant missatge… + Sincronització inicial: +\nImportant dades del compte + Sincronització inicial: +\nImportant comunitats + Sincronització inicial: +\nImportant sales que deixat + Sincronització inicial: +\nImportant compte… + Sincronització inicial: +\nImportant xifrat + Sincronització inicial: +\nImportant sales + Sincronització inicial: +\nImportant sales on hi estàs convidat + Sincronització inicial: +\nImportant sales on hi estàs unit + %1$s de %2$s a %3$s + %1$s ha canviat el nivell d\'autoritat de %2$s. + Has canviat el nivell d\'autoritat de %1$s. + Personalitzat + Personalitzat (%1$d) + Predeterminat + Moderador + Administrador + Has modificat el giny %1$s + %1$s ha modificat el giny %2$s + Has eliminat el giny %1$s + %1$s ha eliminat el giny %2$s + Has afegit el giny %1$s + %1$s ha afegit el giny %2$s + Has acceptat la invitació de %1$s + Has convidat a %1$s + %1$s ha convidat a %2$s + Has enviat una invitació a %1$s perquè s\'uneixi a la sala + Has actualitzat el teu perfil %1$s + Missatge eliminat per %1$s [motiu: %2$s] + Missatge eliminat [motiu: %1$s] + Missatge eliminat per %1$s + Missatge eliminat + Has eliminat la icona de la sala + %1$s ha eliminat la icona de la sala + Has eliminat el tema de la sala + Has eliminat el nom de la sala + Has sol·licitat una conferència VoIP + Has actualitzat aquesta sala. + %s ha actualitzat aquesta sala. + Has activat el xifrat d\'extrem a extrem (%1$s) + Has establert la visibilitat dels missatges futurs a %1$s + %1$s ha establert la visibilitat dels missatges futurs a %2$s + Has establert la visibilitat de l\'històric futur de la sala a %1$s + Has finalitzat la trucada. + Has respost a la trucada. + Has enviat dades per configurar la trucada. + %s ha enviat dades per configurar la trucada. + Has realitzat una trucada de veu. + Has realitzat una videotrucada. + Has canviat el nom de la sala a: %1$s + Has canviat la icona de la sala + %1$s ha canviat la icona de la sala + Has canviat el tema a: %1$s + Has eliminat el teu àlies (era %1$s) + Has canviat el teu àlies de %1$s a %2$s + Has canviat el teu àlies a %1$s + Has canviat la teva icona + Has retirat la invitació de %1$s + Has tret el vet a %1$s + Has rebutjat la invitació + Has creat la discussió + %1$s ha creat la discussió + T\'has unit + %1$s s\'ha unit + T\'has unit a la sala + Has convidat a %1$s + Has creat la sala + %1$s ha creat la sala + La teva invitació + Has enviat un adhesiu. + Has enviat una imatge. + • Servidors coincidents amb literals IP ara estan vetats. + • Servidors coincidents amb literals IP ara estan permesos. + • Servidors coincidents amb %s han estat eliminats de la llista de permesos. + • Servidors coincidents amb %s ara estan permesos. + • Servidors coincidents amb %s han estat eliminats del llista de vetats. + • Servidors coincidents amb %s ara estan vetats. + • Servidors coincidents amb literals IP estan vetats. + • Servidors coincidents amb literals IP estan permesos. + • Servidors coincidents amb %s estan permesos. + • Servidors coincidents amb %s estan vetats. + Has canviat les adreces d\'aquesta sala. + %1$s ha canviat les adreces d\'aquesta sala. + Has canviat l\'adreça principal i les adreces alternatives d\'aquesta sala. + %1$s ha canviat l\'adreça principal i les adreces alternatives d\'aquesta sala. + Has canviat les adreces alternatives d\'aquesta sala. + %1$s ha canviat les adreces alternatives d\'aquesta sala. + + Has eliminat l\'adreça alternativa %1$s d\'aquesta sala. + Has eliminat les adreces alternatives %1$s d\'aquesta sala. + + + %1$s ha eliminat l\'adreça alternativa %2$s d\'aquesta sala. + %1$s ha eliminat les adreces alternatives %2$s d\'aquesta sala. + + + Has afegit l\'adreça alternativa %1$s per aquesta sala. + Has afegit les adreces alternatives %1$s per aquesta sala. + + + %1$s ha afegit l\'adreça alternativa %2$s per aquesta sala. + %1$s ha afegit les adreces alternatives %2$s per aquesta sala. + + Sala buida (era %s) + + %1$s, %2$s, %3$s i %4$d altre + %1$s, %2$s, %3$s i %4$d altres + + %1$s, %2$s, %3$s i %4$s + %1$s, %2$s i %3$s + 🎉 Tots els servidors tenen la participació vetada! Aquesta sala ja no pot ser utilitzada. + Sense canvis. + Has canviat les ACLs de servidor d\'aquesta sala. + %s ha canviat les ACLs de servidor d\'aquesta sala. + Has establert les ACLs de servidor per aquesta sala. + %s ha establert les ACLs de servidor d\'aquesta sala. + Has modificat la videoconferència + %1$s ha modificat la videoconferència + Has finalitzat la videoconferència + %1$s ha iniciat una videoconferència + Has iniciat una videoconferència + %1$s ha finalitzat la videoconferència Tema clar Tema fosc diff --git a/vector/src/main/res/values-cs/strings.xml b/vector/src/main/res/values-cs/strings.xml index 04d338c7ca..9ba5b268d7 100644 --- a/vector/src/main/res/values-cs/strings.xml +++ b/vector/src/main/res/values-cs/strings.xml @@ -1,5 +1,278 @@ + %1$s: %2$s + Uživatel %1$s poslal obrázek. + Uživatel %1$s poslal nálepku. + Pozvání od uživatele %s + Uživatel %1$s pozval uživatele %2$s + Uživatel %1$s vás pozval + %1$s vstoupil do místnosti + Uživatel %1$s odešel + %1$s odmítli pozvání + %1$s vykopli %2$s + %1$s zrušil vykázání %2$s + %1$s vykázali %2$s + %1$s zrušili pozvání pro %2$s + %1$s změnili svůj profilový obrázek + %1$s nastavili své veřejné jméno na %2$s + %1$s změnili své veřejné jméno z %2$s na %3$s + %1$s odstranili své veřejné jméno (%2$s) + %1$s změnili téma na: %2$s + %1$s změnili název místnosti na: %2$s + %s uskutečnili videohovor. + %s uskutečnili hlasový hovor. + %s přijali hovor. + %s ukončili hovor. + %1$s nastavili viditelnost budoucí historie místnosti pro %2$s + všechny členy místnosti od chvíle, kdy budou pozváni. + všechny členy místnosti od chvíle, kdy se připojí. + všechny členy místnosti. + kohokoliv. + neznámým (%s). + %1$s zapnuli end-to-end šifrování (%2$s) + %1$s požádali o VoIP konferenci + Začala VoIP konference + VoIP konference skončila + (profilový obrázek byl také změněn) + %1$s odstranili název místnosti + %1$s odstranili téma místnosti + %1$s aktualizovali svůj profil %2$s + %1$s do této místnosti pozvali %2$s + %1$s přijali pozvání pro %2$s + ** Nelze dešifrovat: %s ** + Odesílatelovo zařízení nám neposlalo klíče pro tuto zprávu. + Nelze vymazat + Zprávu nelze odeslat + Obrázek nelze nahrát + Chyba sítě + Chyba v Matrixu + V současnosti není možné znovu vstoupit do prázdné místnosti. + Šifrovaná zpráva + E-mailová adresa + Telefonní číslo + Pozvání od %s + Pozvání do místnosti + %1$s a %2$s + + %1$s a jeden další + %1$s a %2$d další + %1$s a %2$d dalších + + Prázdná místnost + %s povýšili tuto místnost. + Zpráva byla smazána [důvod: %1$s] + Zpráva smazána uživatelem %1$s [důvod: %2$s] + %1$s zrušili pozvánku do místnosti pro %2$s + Úvodní synchronizace: +\nImportuji účet… + Úvodní synchronizace: +\nImportuji klíče + Úvodní synchronizace: +\nImportuji místnosti + Úvodní synchronizace: +\nImportuji místností, jichž jste členy + Úvodní synchronizace: +\nImportuji místnost, jež jste opustili + Úvodní synchronizace: +\nImportuji skupiny + Úvodní synchronizace: +\nImportuji data účtu + Odesílám zprávu… + Úvodní synchronizace: +\nImportuji pozvání + Vymazat frontu neodeslaných zpráv + %1$s pozvali %2$s. Důvod: %3$s + %1$s vás pozvali. Důvod: %2$s + %1$s opustil místnost. Důvod: %2$s + Zpráva odstraněna + Zprávu odstranil/a %1$s + Poslali jste obrázek. + Poslali jste nálepku. + Vaše pozvání + %1$s založil místnost + Založili jste místnost + Pozvali jste %1$s + Vstoupili jste do místnosti + Opustili jste místnost + Odmítli jste pozvání + Vykopli jste %1$s + Zrušili jste vykázání pro %1$s + Vykázali jste %1$s + Stáhli jste pozvánku od %1$s zpět + Změnili jste svůj profilový obrázek + Změnili jste své veřejné jméno na %1$s + Změnili jste své veřejné jméno z %1$s na %2$s + Odstranili jste své veřejné jméno (%1$s) + Změnili jste téma na: %1$s + %1$s změnili obrázek místnosti + Změnili jste obrázek místnosti + Změnili jste jméno místnosti na: %1$s + Zahájili jste video hovor. + Zahájili jste hlasový hovor. + %s poslali data, aby mohli zahájit hovor. + Poslali jste data, abyste mohli zahájit hovor. + Přijali jste hovor. + Ukončili jste hovor. + Učinili jste budoucí historii místnosti viditelnou pro %1$s + Zapnuli jste end-to-end šifrování (%1$s) + Povýšili jste tuto místnost. + Požádali jste o VoIP konferenci + Odstranili jste jméno místnosti + Odstranili jste téma místnosti + %1$s odstranili obrázek místnosti + Odstranili jste obrázek místnosti + Aktualizovali jste svů profil %1$s + Poslali jste %1$s pozvání ke vstupu do místnosti + Zrušili jste pozvánku ke vstupu do místnosti pro %1$s + Přijali jste pozvání pro %1$s + %1$s přidali widget %2$s + Přidali jste widget %1$s + %1$s odstranili widget %2$s + Odstranili jste widget %1$s + %1$s změnil widget %2$s + Změnili jste widget %1$s + Správce + Moderátor + Výchozí + Vlastní (%1$d) + Vlastní + Změnili jste %1$s stupeň oprávnění. + %1$s změnili %2$s stupeň oprávnění. + %1$s z %2$s na %3$s + Pozvání od %1$s. Důvod: %2$s + Vaše pozvání. Důvod: %1$s + Pozvali jste %1$s. Důvod: %2$s + %1$s vstoupili do místnosti. Důvod: %2$s + Vstoupili jste do místnosti. Důvod: %1$s + Opustili jste místnost. Důvod: %1$s + %1$s pozvání odmítli. Důvod: %2$s + Odmítli jste pozvání. Důvod: %1$s + %1$s vykopnuli %2$s. Důvod: %3$s + Vykopnuli jste %1$s. Důvod: %2$s + %1$s zrušili %2$s vykázání. Důvod: %3$s + Zrušili jste %1$s vykázání. Důvod: %2$s + %1$s vykázali %2$s. Důvod: %3$s + Vykázali jste %1$s. Důvod: %2$s + %1$s poslali %2$s pozvání, aby vstoupili do místnosti. Důvod: %3$s + Poslali jste %1$s pozvání, aby vstoupili do místnosti. Důvod: %2$s + %1$s zrušili pozvání do místnosti pro %2$s. Důvod: %3$s + Zrušili jste pozvání do místnosti pro %1$s. Důvod: %2$s + %1$s přijali pozvání pro %2$s. Důvod: %3$s + Přijali jste pozvání pro %1$s. Důvod: %2$s + %1$s zrušili pozvání pro %2$s. Důvod: %3$s + Zrušili jste pozvání od %1$s. Důvod: %2$s + + %1$s přidali %2$s jako adresu pro tuto místnost. + %1$s přidali %2$s jako adresy pro tuto místnost. + %1$s přidali %2$s jako adresy pro tuto místnost. + + + Přidali jste %1$s jako adresu pro tuto místnost. + Přidali jste %1$s jako adresy pro tuto místnost. + Přidali jste %1$s jako adresy pro tuto místnost. + + + %1$s odstranili %2$s jako adresu pro tuto místnost. + %1$s odstranili %2$s jako adresy pro tuto místnost. + %1$s odstranili %2$s jako adresy pro tuto místnost. + + + Odstranili jste %1$s jako adresu pro tuto místnost. + Odstranili jste %1$s jako adresuy pro tuto místnost. + Odstranili jste %1$s jako adresy pro tuto místnost. + + %1$s přidali %2$s a odstranili %3$s jako adresy pro tuto místnost. + Přidali jste %1$s a odstranili %2$s jako adresy pro tuto místnost. + %1$s nastavili hlavní adresu této místnosti na %2$s. + Nastavili jste %1$s na hlavní adresu této místnosti. + %1$s odstranili hlavní adresu této místnosti. + Odstranili jste hlavní adresu této místnosti. + %1$s povolili hostům vstoupit do místnosti. + Povolili jste hostům vstoupit do místnosti. + %1$s zamezili hostům vstoupit do místnosti. + Zamezili jste hostům vstoupit do místnosti. + %1$s zapnuli end-to-end šifrování. + Zapnuli jste end-to-end šifrování. + %1$s zapnuli end-to-end šifrování (neznámý algoritmus %2$s). + Zapnuli jste end-to-end šifrování (neznámý algoritmus %1$s). + Zamezili jste hostům vstoupit do této místnosti. + %1$s zamezil hostům vstoupit do této místnosti. + Povolili jste hostům vstoupit. + %1$s povolil hostům vstoupit. + Odešli jste. Důvod: %1$s + %1$s odešli. Důvod: %2$s + Vstoupili jste. Důvod: %1$s + %1$s vstoupili. Důvod: %2$s + Zrušili jste pozvání pro %1$s + %1$s zrušili pozvání pro %2$s + Pozvali jste %1$s + %1$s pozvali %2$s + Tady jste provedli upgrade. + %s tady provedli upgrade. + Učinili jste budoucí zprávy viditelné pro %1$s + %1$s učinili budoucí zprávy viditelné pro %2$s + Odešli jste z místnosti + %1$s odešli z místnosti + Vstoupili jste + %1$s vstoupili + Založili jste diskusi + %1$s založil diskusi + Prázdná místnost (byla %s) + + %1$s, %2$s, %3$s a %4$d další + %1$s, %2$s, %3$s a %4$d další + %1$s, %2$s, %3$s a %4$d dalších + + %1$s, %2$s, %3$s a %4$s + %1$s, %2$s a %3$s + 🎉 Účast všech serverů je zakázána! Tuto místnost již nelze použít. + Beze změny. + • Servery shodující se doslovně s IP jsou nyní zakázány. + • Servery shodující se doslovně s IP jsou nyní povoleny. + • Servery shodující se s %s byly odstraněny ze seznamu povolených. + • Servery shodující se s %s jsou nyní povoleny. + • Servery shodující se s %s byly odstraněny ze seznamu zakázaných. + • Servery shodující se s %s jsou nyní zakázány. + Změnili jste ACL serveru pro tuto místnost. + %s změnili ACL serveru pro tuto místnost. + • Server shodující se doslovně s IP je povolen. + • Server shodující se doslovně s IP je zakázán. + • Server shodující se s %s je povolen. + • Server shodující se s %s je zakázán. + Nastavili jste ACL serveru pro tuto místnost. + %s nastavili ACL serveru pro tuto místnost. + Změnili jste adresy pro tuto místnost. + %1$s změnili adresy pro tuto místnost. + Změnili jste hlavní a alternativní adresu pro tuto místnost. + %1$s změnili hlavní a alternativní adresu pro tuto místnost. + Změnili jste alternativní adresu pro tuto místnost. + %1$s změnili alternativní adresu pro tuto místnost. + + Odstranili jste alternativní adresu %1$s pro tuto místnost. + Odstranili jste alternativní adresy %1$s pro tuto místnost. + Odstranili jste alternativní adresy %1$s pro tuto místnost. + + + %1$s odstranili alternativní adresu %2$s pro tuto místnost. + %1$s odstranili alternativní adresy %2$s pro tuto místnost. + %1$s odstranili alternativní adresy %2$s pro tuto místnost. + + + Přidali jste alternativní adresu %1$s pro tuto místnost. + Přidali jste alternativní adresy %1$s pro tuto místnost. + Přidali jste alternativní adresy %1$s pro tuto místnost. + + + %1$s přidali alternativní adresu %2$s pro tuto místnost. + %1$s přidali alternativní adresy %2$s pro tuto místnost. + %1$s přidali alternativní adresy %2$s pro tuto místnost. + + Upravili jste videokonferenci + Videokonference byla upravena uživatelem %1$s + Ukončili jste videokonferenci + Videokonference byla ukončena uživatelem %1$s + Zahájili jste videokonferenci + Videokonference byla zahájena uživatelem %1$s Světlý vzhled Černý vzhled Tmavý vzhled diff --git a/vector/src/main/res/values-da/strings.xml b/vector/src/main/res/values-da/strings.xml index 198e4a60c1..1210d4da90 100644 --- a/vector/src/main/res/values-da/strings.xml +++ b/vector/src/main/res/values-da/strings.xml @@ -1,6 +1,75 @@ + %1$s: %2$s + %1$s sendte et billede. + %ss invitation + %1$s inviterede %2$s + %1$s inviterede dig + %1$s forbandt + %1$s forlod rummet + %1$s afviste invitationen + %1$s kickede %2$s + %1$s unbannede %2$s + %1$s bannede %2$s + %1$s trak %2$ss invitation tilbage + %1$s skiftede sin avatar + %1$s satte sit viste navn til %2$s + %1$s ændrede sit viste navn fra %2$s til %3$s + %1$s fjernede sit viste navn (%2$s) + %1$s ændrede emnet til: %2$s + %1$s ændrede rumnavnet til: %2$s + %s startede et videoopkald. + %s startede et stemmeopkald. + %s svarede opkaldet. + %s stoppede opkaldet. + %1$s gjorde den fremtidige rum historik synlig for %2$s + alle medlemmer af rummet, fra det tidspunkt de er inviteret. + alle medlemmer af rummet, fra det tidspunkt de er forbundede. + Alle medlemmer af rummet. + alle. + ukendt (%s). + %1$s slog ende-til-ende kryptering til (%2$s) + + %1$s forespurgte en VoIP konference + VoIP konference startet + VoIP konference afsluttet + + (avatar blev også ændret) + %1$s fjernede navnet på rummet + %1$s fjernede emnet for rummet + %1$s opdaterede sin profil %2$s + %1$s inviterede %2$s til rummet + %1$s accepterede invitationen til %2$s + + ** Kunne ikke dekryptere: %s ** + Afsenderens enhed har ikke sendt os nøglerne til denne besked. + + Kunne ikke hemmeligholde + Kunne ikke sende besked + + Kunne ikke uploade billede + + Netværks fejl + Matrix fejl + + Det er i øjeblikket ikke muligt at genforbinde til et tomt rum. + + Krypteret besked + + mailadresse + Telefonnummer + + Invitation fra %s + Invitation til rum + %1$s og %2$s + + + %1$s og 1 anden + %1$s og %2$d andre + + + Tomt rum Lyst Tema Mørkt Tema Sort Tema diff --git a/vector/src/main/res/values-de/strings.xml b/vector/src/main/res/values-de/strings.xml index d543d179b4..1ca3ee3320 100644 --- a/vector/src/main/res/values-de/strings.xml +++ b/vector/src/main/res/values-de/strings.xml @@ -1,5 +1,276 @@ + %1$s: %2$s + %1$s hat ein Bild gesendet. + Einladung von %s + %1$s hat %2$s eingeladen + %1$s hat dich eingeladen + %1$s hat den Raum betreten + %1$s hat den Raum verlassen + %1$s hat die Einladung abgelehnt + %1$s hat %2$s gekickt + %1$s hat die Sperre von %2$s aufgehoben + %1$s hat %2$s verbannt + %1$s hat die Einladung für %2$s zurückgezogen + %1$s hat das Profilbild geändert + %1$s hat den Anzeigenamen geändert in %2$s + %1$s hat den Anzeigenamen von %2$s auf %3$s geändert + %1$s hat den Anzeigenamen gelöscht (%2$s) + %1$s hat das Raumthema geändert auf: %2$s + %1$s hat den Raumnamen geändert in: %2$s + %s hat einen Videoanruf durchgeführt. + %s hat einen Sprachanruf getätigt. + %s hat den Anruf angenommen. + %s hat den Anruf beendet. + %1$s hat den zukünftigen Chatverlauf sichtbar gemacht für %2$s + Alle Mitglieder (ab dem Zeitpunkt, an dem sie eingeladen wurden). + Alle Mitglieder (ab dem Zeitpunkt, an dem sie den Raum betreten haben). + alle Raum-Mitglieder. + Jeder. + Unbekannt (%s). + %1$s hat die Ende-zu-Ende-Verschlüsselung aktiviert (%2$s) + %1$s möchte eine VoIP-Konferenz beginnen + VoIP-Konferenz gestartet + VoIP-Konferenz beendet + (Profilbild wurde ebenfalls geändert) + %1$s hat den Raumnamen entfernt + %1$s hat das Raum-Thema entfernt + %1$s hat das Benutzerprofil aktualisiert %2$s + %1$s hat eine Einladung an %2$s gesendet + %1$s hat die Einladung in %2$s akzeptiert + ** Nicht entschlüsselbar: %s ** + Das absendende Gerät hat uns keine Schlüssel für diese Nachricht übermittelt. + + Entfernen nicht möglich + Nachricht kann nicht gesendet werden + Bild konnte nicht hochgeladen werden + + Netzwerk-Fehler + Matrix-Fehler + + + + + Es ist aktuell nicht möglich, einen leeren Raum erneut zu betreten. + Verschlüsselte Nachricht + + E-Mail-Adresse + Telefonnummer + %1$s hat einen Sticker gesendet. + + Einladung von %s + Raumeinladung + %1$s und %2$s + Leerer Raum + + %1$s und 1 andere(r) + %1$s und %2$d andere + + Nachricht entfernt + Nachricht entfernt von %1$s + Nachricht entfernt [Grund: %1$s] + Nachricht entfernt von %1$s [Grund: %2$s] + %s hat diesen Raum aufgewertet. + Sende eine Nachricht… + Sendewarteschlange leeren + Erste Synchronisation: +\nImportiere Benutzerkonto… + Erste Synchronisation: +\nImportiere Cryptoschlüssel + Erste Synchronisation: +\nImportiere Räume + Erste Synchronisation: +\nImportiere betretene Räume + Erste Synchronisation: +\nImportiere eingeladene Räume + Erste Synchronisation: +\nImportiere verlassene Räume + Erste Synchronisation: +\nImportiere Communities + Erste Synchronisation: +\nImportiere Benutzerdaten + %1$s hat die Einladung an %2$s, den Raum zu betreten, zurückgezogen + %1$s\'s Einladung. Grund: %2$s + %1$s hat %2$s eingeladen. Grund: %3$s + %1$s hat dich eingeladen. Grund: %2$s + %1$s ist dem Raum beigetreten. Grund: %2$s + %1$s hat den Raum verlassen. Grund: %2$s + %1$s hat die Einladung abgelehnt. Grund: %2$s + %1$s hat %2$s gekickt. Grund: %3$s + %1$s hat Sperre von %2$s aufgehoben. Grund: %3$s + %1$s hat %2$s verbannt. Grund: %3$s + %1$s hat eine Einladung an %2$s gesandt um diesem Raum beizutreten. Grund: %3$s + %1$s hat Einladung an %2$s zu Betreten dieses Raumes zurückgezogen. Grund: %3$s + %1$s hat die Einladung für %2$s angenommen. Grund: %3$s + %1$s hat Einladung für %2$s verworfen. Grund: %3$s + + %1$s fügt %2$s als eine Adresse für diesen Raum hinzu. + %1$s fügt %2$s als Adressen für diesen Raum hinzu. + + + %1$s entfernt %2$s als eine Adresse für diesen Raum. + %1$s entfernt %2$s als Adressen für diesen Raum. + + %1$s fügt %2$s als Adresse für diesen Raum hinzu und entfernt %3$s. + %1$s legt die Hauptadresse fest für diesen Raum als %2$s fest. + %1$s entfernte die Hauptadresse für diesen Raum. + %1$s hat Gästen erlaubt den Raum zu betreten. + %1$s hat Gästen untersagt den Raum zu betreten. + %1$s aktivierte Ende-zu-Ende-Verschlüsselung. + %1$s aktivierte Ende-zu-Ende-Verschlüsselung (unbekannter Algorithmus %2$s). + Du hast ein Bild gesendet. + Du hast einen Sticker gesendet. + Deine Einladung + %1$s hat den Raum erstellt + Du hast den Raum erstellt + Du hast %1$s eingeladen + Du bist dem Raum beigetreten + Du hast den Raum verlassen + Du hast die Einladung abgelehnt + Du hast %1$s aus dem Raum entfernt + Du hast den Bann von %1$s aufgehoben + Du hast %1$s gebannt + Du hast die Einladung von %1$s zurückgenommen + Du hast dein Profilbild geändert + Du hast deinen Anzeigenamen zu %1$s geändert + Du hast deinen Anzeigenamen von %1$s zu %2$s geändert + Du hast deinen Anzeigenamen entfernt (er war %1$s) + Du hast das Thema geändert auf: %1$s + %1$s hat das Bild des Raumes geändert + Du hast das Bild des Raumes geändert + Du hast den Raumnamen zu %1$s geändert + Du hast einen Videoanruf gestartet. + Du hast einen Audioanruf gestartet. + Du hast den Anruf angenommen. + Du hast den Anruf beendet. + Du hast den zukünftigen Nachrichtenverlauf für %1$s sichtbar gemacht + Du hast Ende-zu-Ende-Verschlüsselung aktiviert (%1$s) + Du hast den Raum aufgwertet. + Du hast eine VoIP-Konferenz angefordert + Du hast den Raumnamen entfernt + Du hast das Raumthema entfernt + %1$s hat das Bild des Raumes entfernt + Du hast das Bild des Raumes entfernt + Du hast dein Profil %1$s aktualisiert + Du hast %1$s in den Raum eingeladen + Du hast die Einladung für %1$s zurückgenommen + Du hast die Einladung für %1$s akzeptiert + %1$s hat das %2$s Widget hinzugefügt + Du hast das %1$s Widget hinzugefügt + %1$s hat das %2$s Widget entfernt + Du hast das %1$s Widget entfernt + %1$s hat das %2$s Widget modifiziert + Du hast das %1$s Widget modifiziert + Administrator + Moderator + Standard + Benutzerdefiniert (%1$d) + Benutzerdefiniert + Du hast die Berechtigungsstufe von %1$s geändert. + %1$s hat die Berechtigungsstufe von %2$s geändert. + %1$s von %2$s zu %3$s + Deine Einladung. Grund: %1$s + Du hast %1$s eingeladen. Grund: %2$s + Du bist dem Raum beigetreten. Grund: %1$s + Du hast den Raum verlassen. Grund: %1$s + Du hast die Einladung abgelehnt. Grund: %1$s + Du hast %1$s aus dem Raum entfernt. Grund %2$s + Du hast den Bann von %1$s aufgehoben. Grund: %2$s + Du hast %1$s gebannt. Grund: %2$s + Du hast %1$s in den Raum eingeladen. Grund: %2$s + Du hast die Einladung für %1$s zurückgenommen. Grund: %2$s + Du hast die Einladung von %1$s angenommen. Grund: %2$s + Du hast die Einladung von %1$s abgelehnt. Grund: %2$s + + Du hast die Raumaddresse %1$s hinzugefügt. + Du hast die Raumaddressen %1$s hinzugefügt. + + + Du hast die Raum-Adresse %1$s vom Raum entfernt. + Du hast die Raum-Adressen %1$s vom Raum entfernt. + + Du hast den Raumaddressen %1$s hinzugefügt und %2$s entfernt. + Du hast die Hauptaddresse für diesen Raum auf %1$s gesetzt. + Du hast die Hauptaddresse des Raums entfernt. + Du hast Gästen erlaubt dem Raum beizutreten. + Du hast Gästen untersagt dem Raum beizutreten. + Du hast Ende-zu-Ende-Verschlüsselung aktiviert. + Du hast Ende-zu-Ende-Verschlüsselung aktiviert (unbekannter Algorithmus %1$s). + %s hat Daten gesendet, um einen Anruf zu starten. + Du hast Daten geschickt, um eine Anruf zu starten. + Du hast Gästen erlaubt hier beizutreten. + %1$s hat Gästen erlaubt hier beizutreten. + Du bist beigetreten. Grund: %1$s + %1$s ist beigetreten. Grund: %2$s + Du hast die Einladung für %1$s zurückgezogen + %1$s hat die Einladung für %2$s zurückgezogen + Du hast %1$s eingeladen + %1$s hat %2$s eingeladen + Du hast zukünftige Nachrichten für %1$s sichtbar gemacht + %1$s hat zukünftige Nachrichten für %2$s sichtbar gemacht + Du hast den Raum verlassen + %1$s hat den Raum verlassen + Du bist beigetreten + %1$s ist beigetreten + Du hast eine Diskussion erstellt + %1$s hat eine Diskussion erstellt + %s hat hier ein Upgrade durchgeführt. + Du hast hier ein Upgrade durchgeführt. + Du hast Gästen untersagt den Raum zu betreten. + %1$s hat Gästen untersagt den Raum zu betreten. + Du bist gegangen. Grund: %1$s + %1$s ist gegangen. Grund: %2$s + Du hast die Adressen für diesen Raum geändert. + %1$s hat die Adressen für diesen Raum geändert. + Du hast die Haupt- und die alternativen Adressen für diesen Raum geändert. + %1$s hat die Haupt- und die alternativen Adressen für diesen Raum geändert. + Du hast die alternativen Adressen für diesen Raum geändert. + %1$s hat die alternativen Adressen für diesen Raum geändert. + + Du entferntest die alternative Adresse %1$s für diesen Raum. + Du entferntest die alternativen Adressen %1$s für diesen Raum. + + + %1$s entfernte die alternative Adresse %2$s für diesen Raum. + %1$s entfernte die alternativen Adressen %2$s für diesen Raum. + + + Du hast die alternative Adresse %1$s für diesen Raum hinzugefügt. + Du hast die alternativen Adressen %1$s für diesen Raum hinzufügt. + + + %1$s fügte die alternative Adresse %2$s für diesen Raum hinzu. + %1$s fügte die alternativen Adressen %2$s für diesen Raum hinzu. + + Leerer Raum (war %s) + + %1$s, %2$s, %3$s und %4$d andere/r + %1$s, %2$s, %3$s und %4$d andere + + %1$s, %2$s, %3$s und %4$s + %1$s, %2$s und %3$s + 🎉 Alle Server sind von der Teilnahme ausgeschlossen! Dieser Raum kann nicht mehr genutzt werden. + Keine Änderung. + • Server, die mit IPs übereinstimmen, sind jetzt gesperrt. + • Server, die mit IPs übereinstimmen, sind nicht erlaubt. + • Server, die mit %s übereinstimmen, wurden von der Elaubten-Liste entfernt. + • Server, die mit %s übereinstimmen, sind jetzt erlaubt. + • Server, die mit %s übereinstimmen, werden von der Sperrliste entfernt. + • Server, die mit %s übereinstimmen, sind jetzt gesperrt. + Du hast die Server-ACL für diesen Raum geändert. + %s hat die Server-Zugriffssteuerungsliste (ACL) für diesen Raum geändert. + • Server, die mit IPs übereinstimmen, sind gesperrt. + • Server, die mit IPs übereinstimmen, sind erlaubt. + • Server, die mit %s übereinstimmen, sind erlaubt. + • Server, die mit %s übereinstimmen, sind gesperrt. + Du hast die Server-ACL für diesen Raum gesetzt. + %s hat die Server-Zugriffssteuerungsliste (ACL) für diesen Raum gesetzt. + Du hast eine Videokonferenz geändert + Videokonferenz von %1$s geändert + Videokonferenz von %1$s beendet + Du hast eine Videokonferenz beendet + Du hast eine Videokonferenz gestartet + Videokonferenz von %1$s gestartet Nachrichten "Raum diff --git a/vector/src/main/res/values-el/strings.xml b/vector/src/main/res/values-el/strings.xml index 2737ce5c09..401ee237be 100644 --- a/vector/src/main/res/values-el/strings.xml +++ b/vector/src/main/res/values-el/strings.xml @@ -1,5 +1,77 @@ + Ηλεκτρονική διεύθυνση + %1$s: %2$s + Ο/Η %1$s έστειλε μια εικόνα. + Ο/Η %1$s έστειλε ένα αυτοκόλλητο. + + Ο/Η %1$s σας προσκάλεσε + Ο/Η %1$s αποχώρησε + Ο/Η %1$s απέρριψε την πρόσκληση + Ο/Η %1$s έδιωξε τον/την %2$s + Ο/Η %1$s προσκάλεσε τον/την %2$s + Η πρόσκληση του/της %s + Αριθμός τηλεφώνου + + Ο/Η %1$s απέκλεισε τον/την %2$s + Ο/Η %1$s απέσυρε την πρόσκληση του/της %2$s + Ο/Η %1$s άλλαξε εικονίδιο χρήστη + Ο/Η %1$s άλλαξε το εμφανιζόμενό του/της όνομα σε %2$s + Ο/Η %1$s άλλαξε το εμφανιζόμενό του/της όνομα από %2$s σε %3$s + Ο/Η %1$s αφαίρεσε το εμφανιζόμενό του/της όνομα (%2$s) + Ο/Η %1$s άλλαξε το θέμα σε: %2$s + Ο/Η %1$s άλλαξε το όνομα του δωματίου σε: %2$s + Ο/Η %s απάντησε στην κλήση. + Ο/Η %s τερμάτισε την κλήση. + + Ο/Η %s πραγματοποίησε μια κλήση βίντεο. + Ο/Η %s πραγματοποίησε μια κλήση ήχου. + Ο/Η %1$s κατέστησε το μελλοντικό ιστορικό του δωματίου ορατό στον/στην %2$s + όλα τα μέλη του δωματίου, από την στιγμή που προσκλήθηκαν. + όλα τα μέλη του δωματίου. + οποιοσδήποτε. + άγνωστος/η (%s). + (έγινε αλλαγή και του εικονιδίου χρήστη) + Ο/Η %1$s αφαίρεσε το όνομα του δωματίου + Ο/Η %1$s αφαίρεσε το θέμα του δωματίου + Ο/Η %1$s ανανέωσε το προφίλ του/της %2$s + Ο/Η %1$s δέχτηκε την πρόσκληση για το %2$s + + ** Αδυναμία αποκρυπτογράφησης: %s ** + Η συσκευή του/της αποστολέα δεν μας έχει στείλει τα κλειδιά για αυτό το μήνυμα. + + Αποτυχία αποστολής μηνύματος + + Αποτυχία αναφόρτωσης εικόνας + + Σφάλμα δικτύου + Σφάλμα του Matrix + + Κρυπτογραφημένο μήνυμα + + Ο/Η %1$s ζήτησε μια VoIP διάσκεψη + Η VoIP διάσκεψη ξεκίνησε + Η VoIP διάσκεψη έληξε + + Ο/Η %1$s εισήλθε στο δωμάτιο + + Πρόσκληση από %s + Πρόσκληση στο δωμάτιο + + %1$s και %2$s + + + %1$s και 1 ακόμα + %1$s και %2$d ακόμα + + + Άδειο δωμάτιο + + όλα τα μέλη του δωματίου από την στιγμή που εισήλθαν. + Ο/Η %1$s ενεργοποίησε την κρυπτογράφηση απ\'άκρη σ\'άκρη (%2$s) + + Ο/Η %1$s έστειλε μία πρόσκληση στον/στην %2$s για να εισέλθει στο δωμάτιο + Δεν είναι δυνατή ακόμα η επανείσοδος σε ένα άδειο δωμάτιο. Ακύρωση Κλείσιμο Απευθείας συνομιλία diff --git a/vector/src/main/res/values-eo/strings.xml b/vector/src/main/res/values-eo/strings.xml index 713e269254..36e7c86694 100644 --- a/vector/src/main/res/values-eo/strings.xml +++ b/vector/src/main/res/values-eo/strings.xml @@ -1,5 +1,217 @@ + %1$s sendis bildon. + %1$s sendis glumarkon. + Invito de %s + %1$s invitis uzanton %2$s + %1$s invitis vin + %1$s envenis + %1$s foriris de la ĉambro + %1$s rifuzis la inviton + %1$s forpelis uzanton %2$s + %1$s malforbaris uzanton %2$s + %1$s forbaris uzanton %2$s + %1$s nuligis inviton por %2$s + %1$s ŝanĝis sian profilbildon + ** Ne eblas malĉifri: %s ** + La aparato de la sendinto ne sendis al ni la ŝlosilojn por tiu mesaĝo. + %1$s: %2$s + %1$s ŝanĝis sian prezentan nomon al %2$s + %1$s ŝanĝis sian prezentan nomon de %2$s al %3$s + %1$s forigis sian prezentan nomon (%2$s) + %1$s ŝanĝis la temon al: %2$s + %1$s ŝanĝis nomon de la ĉambro al: %2$s + %s vidvokis. + %s voĉvokis. + %s respondis la vokon. + %s finis la vokon. + %1$s videbligis estontan historion de ĉambro al %2$s + ĉiuj ĉambranoj, ekde siaj invitoj. + ĉiuj ĉambranoj, ekde siaj aliĝoj. + ĉiuj ĉambranoj. + ĉiu ajn. + nekonata (%s). + %1$s ŝaltis tutvojan ĉifradon (%2$s) + %s gradaltigis la ĉambron. + Mesaĝo foriĝis + Mesaĝon forigis %1$s + Mesaĝo foriĝis [kialo: %1$s] + Mesaĝon forigis %1$s [kialo: %2$s] + %1$s ĝisdatigis sian profilon %2$s + %1$s sendis aliĝan inviton al %2$s + %1$s nuligis la aliĝan inviton por %2$s + %1$s akceptis la inviton por %2$s + Ne povis redakti + Ne povas sendi mesaĝon + Malsukcesis alŝuti bildon + Reta eraro + Matrix-eraro + Nun ne eblas re-aliĝi al malplena ĉambro. + Ĉifrita mesaĝo + Retpoŝtadreso + Telefonnumero + Invito de %s + Invito al ĉambro + %1$s kaj %2$s + + %1$s kaj 1 alia + %1$s kaj %2$d aliaj + + Malplena ĉambro + Komenca spegulado: +\nEnportante konton… + Komenca spegulado: +\nEnportante ĉifrilojn + Komenca spegulado: +\nEnportante ĉambrojn + Komenca spegulado: +\nEnportante aliĝitajn ĉambrojn + Komenca spegulado: +\nEnportante ĉambrojn de invitoj + Komenca spegulado: +\nEnportante forlasitajn ĉambrojn + Komenca spegulado: +\nEnportante komunumojn + Komenca spegulado: +\nEnportante datumojn de konto + Sendante mesaĝon… + Vakigi sendan atendovicon + %1$s petis grupan vokon + Grupa voko komenciĝis + Grupa voko finiĝis + (ankaŭ profilbildo ŝanĝiĝis) + %1$s forigis nomon de la ĉambro + %1$s forigis temon de la ĉambro + Invito de %1$s. Kialo: %2$s + %1$s invitis uzanton %2$s. Kialo: %3$s + %1$s invitis vin. Kialo: %2$s + %1$s envenis. Kialo: %2$s + %1$s foriris de la ĉambro. Kialo: %2$s + %1$s rifuzis la inviton. Kialo: %2$s + %1$s forpelis uzanton %2$s. Kialo: %3$s + %1$s malforbaris uzanton %2$s. Kialo: %3$s + %1$s forbaris uzanton %2$s. Kialo: %3$s + %1$s sendis al %2$s inviton al la ĉambro. Kialo: %3$s + %1$s nuligis la inviton al la ĉambro por %2$s. Kialo: %3$s + %1$s akceptis la inviton por %2$s. Kialo: %3$s + %1$s nuligis la inviton por %2$s. Kialo: %3$s + + %1$s aldonis %2$s kiel adreson por ĉi tiu ĉambro. + %1$s aldonis %2$s kiel adresojn por ĉi tiu ĉambro. + + + %1$s forigis %2$s kiel adreson por ĉi tiu ĉambro. + %1$s forigis %2$s kiel adresojn por ĉi tiu ĉambro. + + %1$s aldonis %2$s kaj forigis %3$s kiel adresojn por ĉi tiu ĉambro. + %1$s agordis la ĉefadreson de ĉi tiu ĉambro al %2$s. + %1$s forigis la ĉefadreson de ĉi tiu ĉambro. + %1$s permesis al gastoj enveni. + %1$s malpermesis al gastoj enveni. + %1$s ŝaltis tutvojan ĉifradon. + %1$s ŝaltis tutvojan ĉifradon (kun nerekonita algoritmo %2$s). + Vi ŝanĝis la povnivelon de %1$s. + %1$s sanĝis la povnivelon de %2$s. + Vi ŝaltis tutvojan ĉifradon (kun nerekonita algoritmo %1$s). + Vi ŝaltis tutvojan ĉifradon. + Vi malpermesis al gastoj aliĝi. + %1$s malpermesis al gastoj aliĝi. + Vi malpermesis al gastoj enveni. + Vi permesis al gastoj aliĝi. + %1$s permesis al gastoj aliĝi. + Vi permesis al gastoj enveni. + Vi forigis la ĉefadreson de ĉi tiu ĉambro. + Vi agordis al ĉefadreson de ĉi tiu ĉambro al %1$s. + Vi aldonis %1$s kaj forigis %2$s kiel adresojn por ĉi tiu ĉambro. + + Vi forigis %1$s kiel adreson por ĉi tiu ĉambro. + Vi forigis %1$s kiel adresojn por ĉi tiu ĉambro. + + + Vi aldonis %1$s kiel adreson por ĉi tiu ĉambro. + Vi aldonis %1$s kiel adresojn por ĉi tiu ĉambro. + + Vi nuligis la inviton por %1$s. Kialo: %2$s + Vi akceptis la inviton por %1$s. Kialo: %2$s + Vi nuligis inviton al la ĉambro por %1$s. Kialo: %2$s + Vi sendis al %1$s inviton al la ĉambro. Kialo: %2$s + Vi forbaris uzanton %1$s. Kialo: %2$s + Vi malforbaris uzanton %1$s. Kialo: %2$s + Vi forpelis uzanton %1$s. Kialo: %2$s + Vi rifuzis la inviton. Kialo: %1$s + Vi foriris. Kialo: %1$s + %1$s foriris. Kialo: %2$s + Vi foriris de la ĉambro. Kialo: %1$s + Vi envenis. Kialo: %1$s + Vi aliĝis. Kialo: %1$s + %1$s aliĝis. Kialo: %2$s + Vi invitis uzanton %1$s. Kialo: %2$s + Via invito. Kialo: %1$s + %1$s de %2$s al %3$s + Propra + Ordinara + Propra (%1$d) + Reguligisto + Administranto + Vi ŝanĝis la fenestraĵon %1$s + %1$s ŝanĝis la fenestraĵon %2$s + Vi forigis la fenestraĵon %1$s + %1$s forigis la fenestraĵon %2$s + Vi aldonis la fenestraĵon %1$s + %1$s aldonis la fenestraĵon %2$s + Vi akceptis la inviton por %1$s + Vi nuligis la inviton por %1$s + %1$s nuligis la inviton por %2$s + Vi nuligis la aliĝan inviton por %1$s + Vi invitis uzanton %1$s + %1$s invitis uzanton %2$s + Vi sendis aliĝan inviton al %1$s + Vi ĝisdatigis vian profilon %1$s + Vi forigis bildon de la ĉambro + %1$s forigis bildon de la ĉambro + Vi forigis temon de la ĉambro + Vi forigis nomon de la ĉambro + Vi petis grupan vokon + Vi gradaltigis la interparolon. + %s gradaltigis la interparolon. + Vi gradaltigis la ĉambron. + Vi ŝaltis tutvojan ĉifradon (%1$s) + %1$s videbligis al %2$s estontajn mesaĝojn + Vi videbligis al %1$s estontajn mesaĝojn + Vi videbligis estontan historion de ĉambro al %1$s + Vi finis la vokon. + Vi respondis la vokon. + Vi sendis datumojn por prepari la vokon. + %s sendis datumojn por prepari la vokon. + Vi voĉvokis. + Vi vidvokis. + Vi ŝanĝis la nomon de la ĉambro al: %1$s + Vi ŝanĝis la bildon de la ĉambro + %1$s ŝanĝis la bildon de la ĉambro + Vi ŝanĝis la temon al: %1$s + Vi forigis vian prezentan nomon (%1$s) + Vi ŝanĝis vian prezentan nomon de %1$s al %2$s + Vi ŝanĝis vian prezentan nomon al %1$s + Vi ŝanĝis vian profilbildon + Vi nuligis inviton por %1$s + Vi forbaris uzanton %1$s + Vi malforbaris uzanton %1$s + Vi forpelis uzanton %1$s + Vi rifuzis la inviton + Vi foriris de la ĉambro + %1$s foriris de la ĉambro + Vi foriris de la ĉambro + Vi envenis + %1$s envenis + Vi envenis + Vi invitis uzanton %1$s + Vi kreis la diskuton + %1$s kreis la diskuton + Vi kreis la ĉambron + %1$s kreis la ĉambron + Via invito + Vi sendis glumarkon. + Vi sendis bildon. Hela haŭto Malhela haŭto Nigra haŭto diff --git a/vector/src/main/res/values-es-rMX/strings.xml b/vector/src/main/res/values-es-rMX/strings.xml index d9a0040181..71b4fb1002 100644 --- a/vector/src/main/res/values-es-rMX/strings.xml +++ b/vector/src/main/res/values-es-rMX/strings.xml @@ -1,5 +1,93 @@ + %1$s: %2$s + %1$s envió una imagen. + + la invitación de %s + %1$s invitó a %2$s + %1$s te invitó + %1$s se unió + %1$s salió + %1$s rechazó la invitación + %1$s quitó a %2$s + %1$s desprohibió a %2$s + %1$s prohibió %2$s + %1$s retiró la invitación de %2$s + %1$s cambió su foto de perfil + %1$s estableció %2$s como su nombre visible + %1$s cambió su nombre visible de %2$s a %3$s + %1$s eliminó su nombre visible (%2$s) + %1$s cambió el tema a: %2$s + %1$s cambió el nombre de la sala a: %2$s + %s comenzó una llamada de video. + %s comenzó una llamada de voz. + %s recibió la llamada. + %s terminó la llamada. + %1$s dejó que %2$s vea el historial del futuro + todos los miembros de la sala, desde su invitación. + todos los miembros de la sala, desde cuando entraron. + todos los miembros de la sala. + todos. + desconocido (%s). + %1$s encendió el cifrado de extremo a extremo (%2$s) + + %1$s solicitó una conferencia VoIP + conferencia VoIP comenzó + conferencia VoIP finalizó + + (foto de perfil también se cambió) + %1$s eliminó el nombre de la sala + %1$s retiró el tema de la sala + %1$s actualizó su perfil %2$s + %1$s envió una invitación a %2$s para entrar a la sala + %1$s aceptó la invitación de %2$s + + ** No se puede descifrar: %s ** + El dispositivo del remitente no nos ha enviado las claves de este mensaje. + + + No se pudo redactar + No se puede enviar el mensaje + + La subida de la imagen falló + + + Error de la red + Error de Matrix + + + + + + + + + No es posible volver a unirse a una sala vacía. + + Mensaje cifrado + + + Correo electrónico + Número telefónico + + %1$s envió una calcomanía. + + + Invitación de %s + Invitación de Sala + %1$s y %2$s + Sala vacía + + + + %1$s y otro + %1$s y %2$d otros + + + Mensaje eliminado + Mensaje eliminado por %1$s + Mensaje eliminado [motivo: %1$s] + Mensaje eliminado por %1$s [motivo: %2$s] Mensajes Sala diff --git a/vector/src/main/res/values-es/strings.xml b/vector/src/main/res/values-es/strings.xml index dc6a5ced52..139b840e2b 100644 --- a/vector/src/main/res/values-es/strings.xml +++ b/vector/src/main/res/values-es/strings.xml @@ -1,5 +1,276 @@ + %1$s: %2$s + %1$s envió una imagen. + la invitación de %s + %1$s invitó a %2$s + %1$s te ha invitado + %1$s se ha unido + %1$s salió + %1$s rechazó la invitación + %1$s expulsó a %2$s + %1$s le quitó el veto a %2$s + %1$s vetó a %2$s + %1$s retiró la invitación de %2$s + %1$s cambió su avatar + %1$s estableció %2$s como su nombre público + %1$s cambió su nombre público de %2$s a %3$s + %1$s eliminó su nombre público (%2$s) + %1$s cambió el tema a: %2$s + %1$s cambió el nombre de la sala a: %2$s + %s realizó una llamada de vídeo. + %s realizó una llamada de voz. + %s contestó la llamada. + %s finalizó la llamada. + %1$s hizo visible el historial futuro de la sala para %2$s + todos los miembros de la sala, desde su invitación. + todos los miembros de la sala, desde el momento en que se unieron. + todos los miembros de la sala. + todos. + desconocido (%s). + %1$s ha activado la encriptación de Extremo-a-Extremo (%2$s) + %1$s solicitó una conferencia de VozIP + Conferencia de VozIP iniciada + Conferencia de VozIP finalizada + (el avatar también se cambió) + %1$s eliminó el nombre de la sala + %1$s eliminó el tema de la sala + %1$s actualizó su perfil %2$s + %1$s invitó a %2$s a unirse a la sala + %1$s aceptó la invitación para %2$s + ** No es posible descifrar: %s ** + El dispositivo emisor no nos ha enviado las claves para este mensaje. + + No se pudo redactar + No es posible enviar el mensaje + No se pudo cargar la imagen + + Error de red + Error de Matrix + + + + + Actualmente no es posible volver a unirse a una sala vacía. + Mensaje encriptado + + Dirección de correo electrónico + Número telefónico + %1$s envió una pegatina. + + Invitación de %s + Invitación a Sala + %1$s y %2$s + Sala vacía + + %1$s y 1 otro + %1$s y %2$d otros + + Mensaje eliminado + Mensaje eliminado por %1$s + Mensaje eliminado [motivo: %1$s] + Mensaje eliminado por %1$s [motivo: %2$s] + %1$s ha revocado la invitación a unirse a la sala para %2$s + Sincronización Inicial +\nImportando cuenta… + Sincronización Inicial: +\nImportando Salas + Sincronización Inicial: +\nImportando Comunidades + Sincronización Inicial: +\nImportando Datos de la Cuenta + Enviando mensaje… + Borrar cola de envío + %1$s ha invitado a %2$s. Razón: %3$s + %1$s te ha invitado. Razón: %2$s + %1$s se ha unido. Razón: %2$s + %1$s se ha ido. Razón: %2$s + %1$s ha rechadazo la invitación. Razón: %2$s + %1$s expulsó a %2$s. Razón: %3$s + %1$s ha baneado a %2$s. Razón: %3$s + %1$s ha aceptado la invitación para %2$s. Razón: %3$s + %1$s ha eliminado la dirección principal para esta sala. + %s ha actualizado la sala. + Sincronización Inicial: +\nImportando criptografía + Sincronización Inicial: +\nImportando Salas a las que te has unido + Sincronización Inicial: +\nImportando Salas a las que has sido invitada + Sincronización Inicial: +\nImportando Salas Abandonadas + Invitación de %1$s. Razón: %2$s + %1$s ha desbaneado a %2$s. Razón: %3$s + %1$s envió una invitación a %2$s para que se una a la sala. Razón: %3$s + %1$s revocó la invitación de %2$s para unirse a la sala. Razón: %3$s + %1$s ha retirado la invitación de %2$s. Razón: %3$s + + %1$s ha añadido %2$s como alias de esta sala. + %1$s ha añadido %2$s como alias de esta sala. + + + %1$s ha quitado %2$s como alias de esta sala. + %1$s ha quitado %2$s como alias de esta sala. + + %1$s ha establecido la dirección principal de esta sala a %2$s. + %1$s ha permitido que los invitados se unan a la sala. + %1$s ha impedido que los invitados se unan a la sala. + %1$s ha activado la encriptación extremo a extremo. + %1$s ha activado la encriptación de extremo a extremo (algoritmo no reconocido %2$s). + Enviaste una imagen. + Enviaste un sticker. + Tu invitación + %1$s creó la sala + Creaste la sala + Invitaste a %1$s + Te uniste a la Sala + Dejaste la Sala + Rechazaste la invitación + Tu pateaste a %1$s + Tu desbanaste a %1$s + Usted prohibió a %1$s + Retiró la invitación de %1$s\'s + Cambiaste tu avatar + Establece su nombre de visualización en %1$s + Cambiaste tu nombre para mostrar de %1$s a %2$s + Quitaste tu nombre para mostrar (era %1$s) + Cambiaste el tema a: %1$s + %1$s cambió el avatar de la sala + Cambiaste el avatar de la sala + Cambiaste el nombre de la sala a: %1$s + Hiciste una videollamada. + Hiciste una llamada de voz. + %s envió datos para configurar la llamada. + Enviaste datos para configurar la llamada. + Respondiste la llamada. + Terminaste la llamada. + Hiciste visible el futuro historial de la %1$s + Has activado la encriptación de Extremo-a-Extremo (%1$s) + Has actualizado esta sala. + Solicitaste una conferencia de VozIP + Quitaste el nombre de la sala + Quitaste el tema de la sala + %1$s eliminó el avatar de la sala + Quitaste el avatar de la sala + Actualizaste tu perfil %1$s + Enviaste una invitación a %1$s para unirse a la sala + Revocaste la invitación para que %1$s se una a la sala + Aceptaste la invitación para %1$s + %1$s agrego el widget %2$s + Agregaste el widget %1$s + %1$s eliminó el widget %2$s + Quitaste el widget %1$s + %1$s modifico el widget %2$s + Modificaste el widget %1$s + Administrador + Moderador + Por defecto + Personalizado (%1$d) + Personalizado + Cambiaste el nivel de permisos de %1$s. + %1$s cambió el nivel de permisos de %2$s. + %1$s de %2$s a %3$s + Tu invitación. Razón: %1$s + Invitaste a %1$s. Razón: %2$s + Te uniste a la sala. Razón: %1$s + Dejaste la sala. Razón: %1$s + Rechazaste la invitación. Razón: %1$s + Pateaste a %1$s. Motivo: %2$s + Has desactivado a %1$s. Motivo: %2$s + Prohibiste a %1$s. Motivo: %2$s + Enviaste una invitación a %1$s para unirse a la sala. Motivo: %2$s + Revocaste la invitación para que %1$s se una a la sala. Motivo: %2$s + Aceptaste la invitación para %1$s. Motivo: %2$s + Retiró la invitación de %1$s\'s. Motivo: %2$s + + Agregaste %1$s como dirección para esta sala. + Agregaste %1$s como direcciones para esta sala. + + + Quitaste %1$s como dirección para esta sala. + Quitaste %1$s como direcciones para esta sala. + + %1$s añadió %2$s y eliminó %3$s como alias para esta sala. + Agregaste %1$s y quitaste %2$s como direcciones para esta sala. + Estableciste la dirección principal de esta sala en %1$s. + Quitaste la dirección principal de esta sala. + Ha permitido que los invitados se unan a la sala. + Ha impedido que los invitados se unan a la sala. + Tu has activado la encriptación de Extremo-a-Extremo. + Has activado la encriptación de Extremo-a-Extremo (algoritmo %1$s no reconocido). + Has impedido que invitados se unan a la sala. + Has permitido a invitados unirse aquí. + Te has ido. Razón: %1$s + Has revocado la invitación de %1$s + Has invitado a %1$s + Has actualizado aquí. + Has hecho futuros mensajes visibles a %1$s + Te saliste de la sala + Te uniste + Creaste la conversación + %1$s ha impedido que invitados se unan a la sala. + %1$s ha permitido a invitados a unirse aquí. + %1$s se ha ido. Razón: %2$s + Tu te has unido. Razón: %1$s + %1$s se ha unido. Razón: %2$s + %1$s ha revocado la invitación de %2$s + %1$s ha invitado %2$s + %s ha actualizado aquí. + %1$s ha hecho futuros mensajes visibles a %2$s + %1$s ha salido de la sala + %1$s se ha unido + %1$s ha creado la conversación + Cambiaste el alias de esta sala. + %1$s cambió el alias de esta sala. + Cambiaste los alias principal y alternativos de esta sala. + %1$s cambió los alias principal y alternativos de esta sala. + Cambiaste los alias alternativos de esta sala. + %1$s cambió los alias alternativos de esta sala. + + Eliminaste el alias alternativo %1$s para esta sala. + Eliminaste los alias alternativos %1$s para esta sala. + + + %1$s eliminó el alias alternativo %2$s para esta sala. + %1$s eliminó los alias alternativos %2$s para esta sala. + + + Añadiste el alias alternativo %1$s para esta sala. + Añadiste los alias alternativos %1$s para esta sala. + + + %1$s añadió el alias alternativo %2$s para esta sala. + %1$s añadió los alias alternativos %2$s para esta sala. + + Sala vacía (%s) + + %1$s, %2$s, %3$s y %4$d otro + %1$s, %2$s, %3$s y %4$d otros + + %1$s, %2$s, %3$s y %4$s + %1$s, %2$s y %3$s + 🎉 Todos los servidores tienen prohibido participar! Esta sala ya no puede ser usada. + Sin cambios. + • Los servidores con literales IP coincidentes ahora están prohibidos. + • Los servidores con literales IP coincidentes ahora están permitidos. + • Los servidores con %s coincidentes se han eliminado de la lista de permitidos. + • Los servidores con %s coincidentes ahora están permitidos. + • Los servidores con %s coincidentes se han eliminado de la lista de baneos. + • Los servidores con %s coincidentes ahora están prohibidos. + Has cambiado la lista de control de acceso para esta sala. + %s ha cambiado la lista de control de acceso para esta sala. + • Los servidores con %s coincidentes están permitidos. + • Los servidores con %s coincidentes están prohibidos. + • Los servidores con literales IP coincidentes están prohibidos. + • Los servidores con literales IP coincidentes están permitidos. + Has fijado la lista de control de acceso para esta sala. + %s ha fijado la lista de control de acceso para esta sala. + Has modificado la videoconferencia + Videoconferencia modificada por %1$s + Has terminado la videoconferencia + Videoconferencia terminada por %1$s + Has empezado una videoconferencia + Videoconferencia empezada por %1$s Mensajes Sala diff --git a/vector/src/main/res/values-et/strings.xml b/vector/src/main/res/values-et/strings.xml index f570f3afa8..eabb935b25 100644 --- a/vector/src/main/res/values-et/strings.xml +++ b/vector/src/main/res/values-et/strings.xml @@ -1,5 +1,268 @@ + %1$s: %2$s + %1$s saatis pildi. + %1$s saatis kleepsu. + Kasutaja %s kutse + %1$s kutsus kasutajat %2$s + %1$s kutsus sind + %1$s liitus jututoaga + %1$s lahkus jututoast + %1$s lükkas tagasi kutse + %1$s müksas kasutajat %2$s + %1$s võttis tagasi kutse kasutajale %2$s + %1$s muutis oma avatari + %1$s määras oma kuvatavaks nimeks %2$s + %1$s muutis senise kuvatava nime %2$s uueks nimeks %3$s + %1$s eemaldas oma kuvatava nime (%2$s) + %1$s muutis uueks teemaks %2$s + %1$s muutis jututoa uueks nimeks %2$s + %s alustas videokõnet. + %s alustas häälkõnet. + %s vastas kõnele. + %s lõpetas kõne. + %1$s seadistas, et tulevane jututoa ajalugu on nähtav kasutajale %2$s + kõikidele jututoa liikmetele alates kutsumise hetkest. + kõikidele jututoa liikmetele alates liitumise hetkest. + kõikidele jututoa liikmetele. + kõikidele. + teadmata (%s). + %1$s lülitas sisse läbiva krüptimise (%2$s) + %s uuendas seda jututuba. + %1$s saatis VoIP konverentsi kutse + VoIP-konverents algas + VoIP-konverents lõppes + (samuti sai avatar muudetud) + %1$s eemaldas jututoa nime + %1$s eemaldas jututoa teema + Sõnum on eemaldatud + Sõnum on eemaldatud %1$s poolt + Sõnum on eemaldatud [põhjus: %1$s] + Sõnum on eemaldatud %1$s poolt [põhjus: %2$s] + %1$s uuendas oma profiili %2$s + %1$s saatis jututoaga liitumiseks kutse kasutajale %2$s + %1$s võttis tagasi jututoaga liitumise kutse kasutajalt %2$s + %1$s võttis vastu kutse %2$s nimel + ** Ei õnnestu dekrüptida: %s ** + Sõnumi saatja seade ei ole selle sõnumi jaoks saatnud dekrüptimisvõtmeid. + Ei saanud muuta sõnumit + Sõnumi saatmine ei õnnestunud + Pildi üleslaadimine ei õnnestunud + Võrguühenduse viga + Matrix\'i viga + Hetkel ei ole võimalik uuesti liituda tühja jututoaga. + Krüptitud sõnum + E-posti aadress + Telefoninumber + Kutse kasutajalt %s + Kutse jututuppa + %1$s ja %2$s + + %1$s ja üks muu + %1$s ja %2$d muud + + Tühi jututuba + Alglaadimine: +\nImpordin kontot… + Alglaadimine: +\nImpordin krüptoseadistusi + Alglaadimine: +\nImpordin jututubasid + Alglaadimine: +\nImpordin liitutud jututubasid + Alglaadimine: +\nImpordin kutsutud jututubasid + Alglaadimine: +\nImpordin lahkutud jututubasid + Alglaadimine: +\nImpordin kogukondi + Alglaadimine: +\nImpordin kontoandmeid + Saadan sõnumit… + Tühjenda saatmisjärjekord + Kasutaja %1$s kutse. Põhjus: %2$s + %1$s kutsus kasutajat %2$s. Põhjus: %3$s + %1$s kutsus sind. Põhjus: %2$s + %1$s liitus jututoaga. Põhjus: %2$s + %1$s lahkus jututoast. Põhjus: %2$s + %1$s lükkas kutse tagasi. Põhjus: %2$s + %1$s müksas välja kasutaja %2$s. Põhjus: %3$s + %1$s saatis kasutajale %2$s kutse jututoaga liitumiseks. Põhjus: %3$s + %1$s tühistas kasutajale %2$s saadetud kutse jututoaga liitumiseks. Põhjus: %3$s + %1$s võttis vastu kutse %2$s jututoaga liitumiseks. Põhjus: %3$s + %1$s võttis tagasi kasutajale %2$s saadetud kutse. Põhjus: %3$s + %1$s lülitas sisse läbiva krüptimise. + %1$s lülitas sisse läbiva krüptimise (tundmatu algoritm %2$s). + + %1$s lisas %2$s selle jututoa aadressiks. + %1$s lisas %2$s selle jututoa aadressideks. + + + %1$s eemaldas %2$s kui selle jututoa aadressi. + %1$s eemaldas %2$s selle jututoa aadresside hulgast. + + %1$s lisas %2$s ja eemaldas %3$s selle jututoa aadresside loendist. + %1$s seadistas selle jututoa põhiaadressiks %2$s. + %1$s eemaldas selle jututoa põhiaadressi. + %1$s lubas külalistel selle jututoaga liituda. + %1$s seadistas, et külalised ei või selle jututoaga liituda. + Kasutaja %1$s lõi jututoa + Sina saatsid pildi. + Sina saatsid kleepsu. + Sinu kutse + Sa lõid jututoa + Sina kutsusid kasutajat %1$s + Sina liitusid jututoaga + Sina lahkusid jututoast + Sina lükkasid kutse tagasi + Sina müksasid %1$s välja + %1$s taastas %2$s ligipääsu + Sina taastasid %1$s ligipääsu + %1$s keelas %2$s ligipääsu + Sina keelasid %1$s ligipääsu + Sina võtsid tagasi %1$s kutse + Sina muutsid oma tunnuspilti + Sina määrasid oma kuvatavaks nimeks %1$s + Sina muutsid senise kuvatava nime %1$s uueks nimeks %2$s + Sina eemaldasid oma kuvatava nime (oli %1$s) + Sina muutsid uueks teemaks %1$s + %1$s muutis jututoa tunnuspilti + Sina muutsid jututoa tunnuspilti + Sina muutsid jututoa uueks nimeks %1$s + Sa alustasid videokõnet. + Sa alustasid häälkõnet. + %s saatis info kõne algatamiseks. + Sa saatsid info kõne algatamiseks. + Sa vastasid kõnele. + Sa lõpetasid kõne. + Sa seadistasid, et tulevane jututoa ajalugu on nähtav kasutajale %1$s + Sa lülitasid sisse läbiva krüptimise (%1$s) + Sa uuendasid seda jututuba. + Sa algatasid VoIP rühmakõne + Sa eemaldasid jututoa nime + Sa eemaldasid jututoa teema + %1$s eemaldas jututoa tunnuspildi + Sa eemaldasid jututoa tunnuspildi + Sa uuendasid oma profiili %1$s + Sina saatsid kasutajale %1$s kutse jututoaga liitumiseks + Sina võtsid tagasi jututoaga liitumise kutse kasutajalt %1$s + Sina võtsid vastu kutse %1$s nimel + %1$s lisas %2$s vidina + Sina lisasid %1$s vidina + %1$s eemaldas %2$s vidina + Sina eemdaldasid %1$s vidina + %1$s muutis %2$s vidinat + Sa muutsid %1$s vidinat + Peakasutaja + Moderaator + Tavakasutaja + Kohandatud kasutajaõigused (%1$d) + Kohandatud õigused + Sina muutsid kasutaja %1$s õigusi. + %1$s muutis kasutaja %2$s õigusi. + %1$s õiguste muutus %2$s -> %3$s + Sinu kutse. Põhjus %1$s + Sina kutsusid kasutajat %1$s. Põhjus: %2$s + Sina liitusid jututoaga. Põhjus: %1$s + Sina lahkusid jututoast. Põhjus: %1$s + Sina lükkasid kutse tagasi. Põhjus: %1$s + Sina müksasid kasutaja %1$s välja. Põhjus: %2$s + %1$s taastas ligipääsu kasutajale %2$s. Põhjus: %3$s + Sina taastasid kasutaja %1$s ligipääsu. Põhjus: %2$s + %1$s keelas kasutaja %2$s ligipääsu. Põhjus: %3$s + Sina keelasid kasutaja %1$s ligipääsu. Põhjus: %2$s + Sina saatsid kasutajale %1$s kutse jututoaga liitumiseks. Põhjus: %2$s + Sina võtsid tagasi jututoaga liitumise kutse kasutajalt %1$s. Põhjus: %2$s + Sina võtsid vastu kutse %1$s nimel. Põhjus: %2$s + Sina võtsid tagasi kasutaja %1$s kutse. Põhjus: %2$s + + Sina lisasid %1$s selle jututoa aadressiks. + Sina lisasid %1$s selle jututoa aadressideks. + + + Sina eemaldasid %1$s, kui selle jututoa aadressi. + Sina eemaldasid %1$s selle jututoa aadresside hulgast. + + Sina lisasid %1$s selle jututoa aadressiks ning eemaldasid %2$s aadresside hulgast. + Sina seadistasid selle jututoa põhiaadressiks %1$s. + Sina eemaldasid selle jututoa põhiaadressi. + Sina lubasid külalistel selle jututoaga liituda. + Sina seadistasid, et külalised ei või selle jututoaga liituda. + Sa lülitasid sisse läbiva krüptimise. + Sa lülitasid sisse läbiva krüptimise (kasutusel on tundmatu algoritm %1$s). + Sina seadistasid, et külalised ei või selle jututoaga liituda. + %1$s seadistas, et külalised ei või selle jututoaga liituda. + Sina lubasid külalistel selle jututoaga liituda. + %1$s lubas külalistel selle jututoaga liituda. + Sina lahkusid jututoast. Põhjus: %1$s + %1$s lahkus jututoast. Põhjus: %2$s + Sina liitusid jututoaga. Põhjus: %1$s + %1$s liitus jututoaga. Põhjus: %2$s + Sina võtsid tagasi jututoaga liitumise kutse kasutajalt %1$s + %1$s võttis tagasi jututoaga liitumise kutse kasutajalt %2$s + Sina kutsusid kasutajat %1$s + %1$s kutsus kasutajat %2$s + Sa uuendasid seda jututuba. + %s uuendas seda jututuba. + Sina seadistasid, et tulevased jututoa sõnumid on nähtavad kasutajale %1$s + %1$s seadistas, et tulevased jututoa sõnumid on nähtavad kasutajale %2$s + Sina lahkusid jututoast + %1$s lahkus jututoast + Sina liitusid + %1$s liitus + Sina alustasid vestlust + %1$s alustas vestlust + Tühi jututuba (oli %s) + + %1$s, %2$s, %3$s ja %4$d muu + %1$s, %2$s, %3$s ja %4$d muud + + %1$s, %2$s, %3$s ja %4$s + %1$s, %2$s ja %3$s + 🎉 Kõikide serverite osalemine on keelatud! Seda jututuba ei saa enam kasutada. + Muudatusi ei ole. + • Nüüd on keelatud serverid, mille ip-aadress vastab mustrile. + • Nüüd on lubatud serverid, mille ip-aadress vastab mustrile. + • Server, mille nimes leidub %s, eemaldati lubatud serverite loendist. + • Nüüd on lubatud serverid, mille nimes leidub %s. + • Server, mille nimes leidub %s eemaldati keeluloendist. + • Keelatud on server, mille nimes leidub %s. + Sina muutsid selle jututoa jaoks serverite pääsuloendit. + %s muutis selle jututoa jaoks serverite pääsuloendit. + Sina kirjeldasid selle jututoa jaoks serverite pääsuloendi. + %s kirjeldas selle jututoa jaoks serverite pääsuloendi. + • Keelatud on serverid, mille ip-aadress vastab mustrile. + • Lubatud on serverid, mille ip-aadress vastab mustrile. + • Lubatud on serverid, mille nimes leidub %s. + • Keelatud on serverid, mille nimes leidub %s. + %1$s muutis selle jututoa aadresse. + Sa muutsid selle jututoa põhiaadressi ja täiendavaid aadresse. + %1$s muutis selle jututoa täiendavaid aadresse. + Sa muutsid selle jututoa täiendavaid aadresse. + %1$s muutis selle jututoa põhiaadressi ja täiendavaid aadresse. + + Sa eemaldasid selle jututoa täiendava aadressi %1$s. + Sa eemaldasid selle jututoa täiendavad aadressid %1$s. + + + %1$s eemaldas selle jututoa täiendava aadressi %2$s. + %1$s eemaldas selle jututoa täiendavad aadressid %2$s. + + + Sa lisasid sellele jututoale täiendava aadressi %1$s. + Sa lisasid sellele jututoale täiendavad aadressid %1$s. + + + %1$s lisas sellele jututoale täiendava aadressi %2$s. + %1$s lisas sellele jututoale täiendavad aadressid %2$s. + + Sa muutsid selle jututoa aadresse. + Sina muutsid videokoosolekut + Sina lõpetasid videokoosoleku + %1$s lõpetas videokoosoleku + Sina algatasid videokoosoleku + %1$s algatas videokoosoleku + %1$s muutis videokoosolekut Hele teema Tume teema Must teema diff --git a/vector/src/main/res/values-eu/strings.xml b/vector/src/main/res/values-eu/strings.xml index 15a5c317d6..56540de8ce 100644 --- a/vector/src/main/res/values-eu/strings.xml +++ b/vector/src/main/res/values-eu/strings.xml @@ -1,6 +1,142 @@ + %1$s: %2$s + %1$s erabiltzaileak irudi bat bidali du. + %s erabiltzailearen gonbidapena + %1$s erabiltzaileak %2$s gonbidatu du + %1$s erabiltzaileak gonbidatu zaitu + %1$s gelara elkartu da + %1$s gelatik atera da + %1$s erabiltzaileak gonbidapena baztertu du + %1$s erabiltzaileak %2$s kanporatu du + %1$s erabiltzaileak debekua kendu dio %2$s erabiltzaileari + %1$s erabiltzaileak %2$s debekatu du + %1$s erabiltzaileak %2$s erabiltzailearen gonbidapena atzera bota du + %1$s erabiltzaileak abatarra aldatu du + %1$s erabiltzaileak bere pantaila-izena aldatu du beste honetara: %2$s + %1$s erabiltzaileak bere pantaila-izena aldatu du, honetatik: %2$s honetara: %3$s + %1$s erabiltzaileak bere pantaila-izena kendu du (%2$s) + %1$s erabiltzaileak mintzagaia honetara aldatu du: %2$s + %1$s erabiltzaileak gelaren izena honetara aldatu du: %2$s + %s erabiltzaileak bideo deia hasi du. + %s erabiltzaileak ahots deia hasi du. + %s erabiltzaileak deia erantzun du. + %s erabiltzaileak deia amaitu du. + %1$s erabiltzaileak gelaren historiala ikusgai jarri du hauentzat: %2$s + gelako kide guztiak, gonbidatu zitzaienetik. + gelako kide guztiak, elkartu zirenetik. + gelako kide guztiak. + edonor. + ezezaguna (%s). + %1$s erabiltzaileak muturretik muturrera zifratzea aktibatu du (%2$s) + + %1$s erabiltzaileak VoIP konferentzia bat eskatu du + VoIP konferentzia hasita + VoIP konferentzia amaituta + + (abatarra ere aldatu da) + %1$s erabiltzaileak gelaren izena kendu du + %1$s erabiltzaileak gelaren mintzagaia kendu du + %1$s erabiltzaileak bere profila eguneratu du %2$s + %1$s erabiltzaileak gelara elkartzeko gonbidapen bat bidali dio %2$s erabiltzaileari + %1$s erabiltzaileak %2$s gelarako gonbidapena onartu du + + ** Ezin izan da deszifratu: %s ** + Igorlearen gailuak ez dizkigu mezu honetarako gakoak bidali. + + Ezin izan da kendu + Ezin izan da mezua bidali + + Huts egin du irudia igotzean + + Sare errorea + Matrix errorea + + Ezin da oraingoz hutsik dagoen gela batetara berriro sartu. + + Zifratutako mezua + + E-mail helbidea + Telefono zenbakia + + %1$s erabiltzaileak eranskailu bat bidali du. + + %s gelarako gonbidapena + Gela gonbidapena + %1$s eta %2$s + Gela hutsa + + + %1$s eta beste bat + %1$s eta beste %2$d + + + + Mezua kendu da + %1$s erabiltzaileak mezua kendu du + Mezua kendu da [arrazoia: %1$s] + %1$s erabiltzaileak mezua kendu du [arrazoia: %2$s] + + Hasierako sinkronizazioa: +\nKontua inportatzen… + Hasierako sinkronizazioa: +\nZifratzea inportatzen + Hasierako sinkronizazioa: +\nGelak inportatzen + Hasierako sinkronizazioa: +\nElkartutako gelak inportatzen + Hasierako sinkronizazioa: +\nGonbidatutako gelak inportatzen + Hasierako sinkronizazioa: +\nUtzitako gelak inportatzen + Hasierako sinkronizazioa: +\nKomunitateak inportatzen + Hasierako sinkronizazioa: +\nKontuaren datuak inportatzen + + %s erabiltzaileak gela hau eguneratu du. + + Mezua bidaltzen… + Garbitu bidalketa-ilara + + %1$s erabiltzaileak %2$s gelara elkartzeko gonbidapena indargabetu du + %1$s erabiltzailearen gonbidapena. Arrazoia: %2$s + %1$s erabiltzaileak %2$s gonbidatu du. Arrazoia: %3$s + %1$s erabiltzaileak gonbidatu zaitu. Arrazoia: %2$s + %1$s gelara elkartu da. Arrazoia: %2$s + %1$s gelatik atera da. Arrazoia: %2$s + %1$s erabiltzaileak gonbidapena baztertu du. Arrazoia: %2$s + %1$s erabiltzaileak %2$s kanporatu du. Arrazoia: %3$s + %1$s erabiltzaileak debekua kendu dio %2$s erabiltzaileari. Arrazoia: %3$s + %1$s erabiltzaileak %2$s debekatu du. Arrazoia: %3$s + "%1$s erabiltzaileak gelara elkartzeko gonbidapen bat bidali dio %2$s erabiltzaileari. Arrazoia: %3$s" + "%1$s erabiltzaileak %2$s gelara elkartzeko gonbidapena indargabetu du. Arrazoia: %3$s" + "%1$s erabiltzaileak %2$s gelarako gonbidapena onartu du. Arrazoia: %3$s" + "%1$s erabiltzaileak %2$s erabiltzailearen gonbidapena indargabetu du. Arrazoia: %3$s" + + + %1$s erabiltzaileak %2$s gehitu du gela honen helbide gisa. + %1$s erabiltzaileak %2$s gehitu ditu gela honen helbide gisa. + + + + %1$s erabiltzaileak %2$s kendu du gela honen helbide gisa. + %1$s erabiltzaileak %3$s kendu ditu gela honen helbide gisa. + + + %1$s erabiltzaileak %2$s gehitu %3$s eta kendu ditu gela honen helbide gisa. + + %1$s erabiltzaileak %2$s ezarri du gela honen helbide nagusi gisa. + %1$s erabiltzaileak gela honen helbide nagusia kendu du. + + %1$k gonbidatuak gelara sartzea onartu du. + %1%k gonbidatuak gelara sartzea galerazi du. + + %1$s erabiltzaileak muturretik muturrerako zifratzea gaitu du. + %1$s erabiltzaileak muturretik muturrerako zifratzea gaitu du. (%2$s algoritmo ezezaguna). + + %1$s erabiltzaileak gela sortu du Mezuak Gela Ezarpenak diff --git a/vector/src/main/res/values-fa/strings.xml b/vector/src/main/res/values-fa/strings.xml index 1cfd61644c..8a0f1bf77b 100644 --- a/vector/src/main/res/values-fa/strings.xml +++ b/vector/src/main/res/values-fa/strings.xml @@ -1,5 +1,223 @@ + %1$s: %2$s + %1$s تصویری فرستاد. + %1$s برچسبی فرستاد. + دعوت %s + ‫%1$s، %2$s را دعوت کرد + %1$s دعوتتان کرد + %1$s به اتاق پیوست + %1$s اتاق را ترک کرد + %1$s دعوت را رد کرد + %1$s، %2$s را اخراج کرد + %1$s، انسداد %2$s را رفع کرد + %1$s، %2$s را مسدود کرد + %1$s دعوت %2$s را نپذیرفت + %1$s تصویرش را عوض کرد + %1$s نام نمایشی خود را به %2$s تنظیم کرد + %1$s نام نمایشیش را از %2$s به %3$s تغییر داد + %1$s نام نمایشیش (%2$s) را پاک کرد + %1$s موضوع را به %2$s تغییر داد + %1$s نام اتاق را به %2$s تغییر داد + %s یک تماس تصویری برقرار کرد. + %s یک تماس صوتی برقرار کرد. + %s تماس را پاسخ داد. + %s به تماس پایان داد. + %1$s تاریخچهٔ آیندهٔ اتاق را برای %2$s نمایان کرد + همهٔ اعضای اتاق، از زمان دعوت شدنشان. + همهٔ اعضای اتاق، از زمان پیوستنشان. + همهٔ اعضای اتاق. + هرکسی. + ناشناخته (%s). + %1$s رمزنگاری سرتاسری را روشن کرد (%2$s) + %s این اتاق را ارتقا داد. + %1$s درخواست یک گردهمایی صوتی داد + گردهمایی صوتی آغاز شد + گردهمایی صوتی پایان یافت + (تصویر هم عوض شد) + %1$s نام اتاق را پاک کرد + %1$s موضوع اتاق را پاک کرد + پیام برداشته شد + پیام به دست %1$s برداشته شد + پیام برداشته شد [دلیل: %1$s] + پیام به دست %1$s برداشته شد [دلیل: %2$s] + %1$s دعوتی برای پیوستن %2$s به اتاق فرستاد + %1$s دعوت پیوستن به اتاق %2$s را باطل کرد + %1$s دعوت برای %2$s را پذیرفت + ** ناتوان در رمزگشایی: %s ** + دستگاه فرستنده، کلیدهای این پیام را برایمان نفرستاده است. + ناتوان در فرستادن پیام + شکست در بارگذاری تصویر + خطای شبکه + خطای ماتریکس + در حال حاضر امکان بازپیوست به اتاقی خالی وجود ندارد‌‌. + پیام رمزنگاری شده + نشانی رایانامه + شماره تلفن + دعوت از %s + دعوت اتاق + %1$s و %2$s + + %1$s و ۱ نفر دیگر + %1$s و %2$d نفر دیگر + + اتاق خالی + همگام‌سازی نخستین: +\nدر حال درون‌ریزی حساب… + همگام‌سازی نخستین: +\nدر حال درون‌ریزی رمزنگاری + همگام‌سازی نخستین: +\nدر حال درون‌ریزی اتاق‌ها + همگام‌سازی نخستین: +\nدر حال درون‌ریزی اتاق‌های پیوسته + همگام‌سازی نخستین: +\nدر حال درون‌ریزی اتاق‌های دعوت‌شده + همگام‌سازی نخستین: +\nدر حال درون‌ریزی اتاق‌های ترک‌شده + همگام‌سازی نخستین: +\nدر حال درون‌ریزی انجمن‌ها + همگام‌سازی نخستین: +\nدر حال درون‌ریزی داده‌های حساب + در حال فرستادن پیام… + پاک‌سازی صفِ در حال ارسال + دعوت %1$s. دلیل: %2$s + %1$s، %2$s را دعوت کرد. دلیل: %3$s + %1$s دعوتتان کرد. دلیل: %2$s + %1$s به اتاق پیوست. دلیل: %2$s + %1$s اتاق را ترک کرد. دلیل: %2$s + %1$s دعوت را رد کرد. دلیل: %2$s + %1$s، %2$s را اخراج کرد. دلیل: %3$s + %1$s انسداد %2$s را رفع کرد. دلیل: %3$s + %1$s، %2$s را مسدود کرد. دلیل: %3$s + %1$s دعوتی برای پیوستن %2$s به اتاق فرستاد. دلیل: %3$s + %1$s دعوت %2$s برای پیوستن به اتاق را باطل کرد. دلیل: %3$s + %1$s دعوت برای %2$s را پذیرفت. دلیل: %3$s + %1$s دعوت %2$s را نپذیرفت. دلیل: %3$s + + %1$s، %2$s را به عنوان نشانی‌ای برای این اتاق افزود. + %1$s، %2$s را به عنوان نشانی‌هایی برای این اتاق افزود. + + + %1$s، %2$s را به عنوان نشانی‌ای برای این اتاق پاک کرد. + %1$s، %3$s را به عنوان نشانی‌هایی برای این اتاق پاک کرد. + + %1$s برای نشانی این اتاق، %2$s را افزود و %3$s را پاک کرد. + %1$s نشانی اصلی این اتاق را به %2$s تنظیم کرد. + %1$s نشانی اصلی را برای این اتاق پاک کرد. + %1$s اجازه داد میمهانان به گروه بپیوندند. + %1$s جلوی پیوستن میمهانان به گروه را گرفت. + %1$s رمزنگاری سرتاسری را روشن کرد. + %1$s رمزنگاری سرتاسری را روشن کرد (الگوریتم تشخیص‌داده‌نشده %2$s ). + %1$s اتاق را ایجاد کرد + %1$s نمایه‌اش را به‌روز کرد %2$s + نمی‌توان ویرایش کرد + تصویری فرستادید. + برچسبی فرستادید. + دعوتتان + اتاق را ایجاد کردید + از %1$s دعوت کردید + به اتاق پیوستید + اتاق را ترک کردید + دعوت را رد کردید + %1$s را اخراج کردید + تحریم %1$s را برداشتید + %1$s را تحریم کردید + دعوت %1$s را پس‌گرفتید + آواتارتان را عوض کردید + نام نمایشیتان را به %1$s تغییر دادید + نام نمایشیتان را از %1$s به %2$s تغییر دادید + نام نمایشیتان را برداشتید (%1$s بود) + موضوع را به %1$s تغییر دادید + %1$s آواتار اتاق را تغییر داد + آواتار اتاق را تغییر دادید + نام اتاق را به %1$s تغییر دادید + تماس تصویری گرفتید. + تماس صوتی گرفتید. + %s برای برپایی تماس، داده فرستاد. + برای برپایی تماس، داده فرستادید. + تماس را پاسخ دادید. + به تماس پایان دادید. + تاریخچهٔ آتی اتاق را برای %1$s نمایان کردید + رمزنگاری سرتاسری را روشن کردید (%1$s) + این اتاق را ارتقا دادید. + دارخواست کنفرانس ویپ دادید + نام اتاق را برداشتید + موضوع اتاق را برداشتید + %1$s آواتار اتاق را برداشت + آواتار اتاق را برداشتید + نمایه‌تان را به‌روز کردید %1$s + برای %1$s دعوت پیوستن به اتاق فرستادید + دعوت پیوستن %1$s به اتاق را پس گرفتید + دعوت برای %1$s را پذیرفتید + %1$s ابزارک %2$s را افزود + ابزارک %1$s را افزودید + %1$s ابزارک %2$s را برداشت + ابزارک %1$s را برداشتید + %1$s ابزارک %2$s را دستکاری کرد + ابزارک %1$s را دستکاری کردید + مدیر + ناظم + پیش‌گزیده + سفارشی (%1$d) + سفارشی + سطح قدرت %1$s را تغییر دادید. + %1$s سطح قدرت %2$s را تغییر داد. + %1$s از %2$s به %3$s + دعوتتان. دلیل: %1$s + %1$s را دعوت کردید. دلیل: %2$s + به اتاق پیوستید. دلیل: %1$s + اتاق را ترک کردید. دلیل: %1$s + دعوت را رد کردید. دلیل: %1$s + %1$s را اخراج کردید. دلیل: %2$s + تحریم %1$s را برداشتید. دلیل: %2$s + %1$s را تحریم کردید. دلیل: %2$s + دعوتی به %1$s برای پیوستن به اتاق فرستادید. دلیل: %2$s + دعوت %1$s برای پیوستن به اتاق را پس گرفتید. دلیل: %2$s + دعوت برای %1$s را پذیرفتید. دلیل: %2$s + دعوت %1$s را رد کردید. دلیل: %2$s + + نشانی %1$s را به این اتاق افزودید. + نشانی‌های %1$s را به این اتاق افزودید. + + + نشانی %1$s را از این اتاق برداشتید. + نشانی‌های %1$s را از این اتاق برداشتید. + + نشانی %1$s ار افزوده و %2$s را از این اتاق برداشتید. + نشانی اصلی این اتاق را به %1$s تنظیم کردید. + نشانی اصلی این اتاق را برداشتید. + به میهمانان اجازهٔ پیوستن به گروه دادید. + میمهانان را از پیوستن به گروه بازداشتید. + رمزنگاری سرتاسری را روشن کردید. + رمزنگاری سرتاسری را روشن کردید (الگوریتم ناشناخته %1$s). + مهمان‌ها را از پیوستن به اتاق بازداشتید. + %1$s مهمان‌ها را از پیوستن به اتاق بازداشت. + به مهمان‌ها اجازه دادید به این‌جا بپیوندند. + %1$s به مهمان‌ها اجازه داد به این‌جا بپیوندند. + رفتید. دلیل: %1$s + %1$s رفت. دلیل: %2$s + پیوستید. دلیل: %1$s + %1$sپیوست. دلیل: %2$s + دعوت %1$s را پس گرفتید + %1$s دعوت %2$s را پس گرفت + %1$s را دعوت کردید + %1$s، %2$s را دعوت کرد + این‌جا را ارتقا دادید. + %s این‌جا را ارتقا داد. + پیام‌های آینده را برای %1$s نمایان کردید + %1$s پیام‌های آینده را برای %2$s نمایان کرد + اتاق را ترک کردید + %1$s اتاق را ترک کرد + پیوستید + %1$s پیوست + گفت‌وگو را ایجاد کردید + %1$s گفت‌وگو را ایجاد کرد + + %1$s، %2$s، %3$s و %4$d نفر دیگر + %1$s، %2$s، %3$s و %4$d نفر دیگر + + %1$s، %2$s و %3$s + %1$s، %2$s، %3$s و %4$s زمینهٔ روشن زمینهٔ تیره زمینهٔ سیاه diff --git a/vector/src/main/res/values-fi/strings.xml b/vector/src/main/res/values-fi/strings.xml index 19013de106..dadba4a077 100644 --- a/vector/src/main/res/values-fi/strings.xml +++ b/vector/src/main/res/values-fi/strings.xml @@ -1,5 +1,214 @@ + %1$s lähetti kuvan. + Käyttäjän %s kutsu + %1$s kutsui käyttäjän %2$s + %1$s kutsui sinut + %1$s liittyi huoneeseen + %1$s poistui huoneesta + %1$s hylkäsi kutsun + %1$s poisti käyttäjän %2$s + %1$s poisti porttikiellon käyttäjältä %2$s + %1$s antoi porttikiellon käyttäjälle %2$s + %1$s veti takaisin kutsun käyttäjälle %2$s + %1$s vaihtoi profiilikuvaansa + %1$s asetti näyttönimekseen %2$s + %1$s muutti näyttönimensä nimestä %2$s nimeen %3$s + %1$s poisti näyttönimensä (%2$s) + %1$s vaihtoi aiheeksi: %2$s + %1$s vaihtoi huoneen nimeksi %2$s + %s soitti videopuhelun. + %s soitti äänipuhelun. + %s vastasi puheluun. + %s lopetti puhelun. + %1$s muutti tulevan huonehistorian näkyväksi seuraaville: %2$s + kaikki huoneen jäsenet, kutsumisestaan asti. + kaikki huoneen jäsenet, liittymisestään asti. + kaikki huoneen jäsenet. + kaikki. + tuntematon (%s). + %1$s otti käyttöön osapuolten välisen salauksen (%2$s) + %1$s lähetti VoIP-konferenssipyynnön + VoIP-konferenssi alkoi + VoIP-konferenssi päättyi + (myös kuva vaihdettiin) + %1$s poisti huoneen nimen + %1$s poisti huoneen aiheen + %1$s päivitti profiilinsa %2$s + %1$s lähetti liittymiskutsun huoneeseen käyttäjälle %2$s + %1$s hyväksyi kutsun käyttäjän %2$s puolesta + ** Salauksen purku epäonnistui: %s ** + Lähettäjän laite ei ole lähettänyt avaimia tähän viestiin. + Viestin lähetys epäonnistui + Kuvan lataaminen epäonnistui + Verkkovirhe + Matrix-virhe + Tällä hetkellä ei ole mahdollista liittyä uudelleen tyhjään huoneeseen. + Salattu viesti + Sähköpostiosoite + Puhelinnumero + Takaisinveto epäonnistui + %1$s: %2$s + + Kutsu käyttäjältä %s + + Huonekutsu + %1$s ja %2$s + Tyhjä huone + %1$s lähetti tarran. + + %1$s ja yksi muu + %1$s ja %2$d muuta + + Viesti poistettu + %1$s poisti viestin + Viesti poistettu [syy: %1$s] + %1$s poisti viestin [syy: %2$s] + Alkusynkronointi: +\nTuodaan tiliä… + Alkusynkronointi: +\nTuodaan kryptoa + Alkusynkronointi: +\nTuodaan huoneita + Alkusynkronointi: +\nTuodaan liityttyjä huoneita + Alkusynkronointi: +\nTuodaan kutsuttuja huoneita + Alkusynkronointi: +\nTuodaan poistuttuja huoneita + Alkusynkronointi: +\nTuodaan yhteisöjä + Alkusynkronointi: +\nTuodaan tilin tietoja + %s päivitti tämän huoneen. + Lähetetään viestiä… + Tyhjennä lähetysjono + %1$s veti takaisin käyttäjän %2$s liittymiskutsun huoneeseen + Henkilön %1$s kutsu. Syy: %2$s + %1$s kutsui henkilön %2$s. Syy: %3$s + %1$s kutsui sinut. Syy: %2$s + %1$s liittyi huoneeseen. Syy: %2$s + %1$s poistui huoneesta. Syy: %2$s + %1$s hylkäsi kutsun. Syy: %2$s + %1$s poisti käyttäjän %2$s huoneesta. Syy: %3$s + %1$s poisti porttikiellon käyttäjältä %2$s. Syy: %3$s + %1$s antoi porttikiellon käyttäjälle %2$s. Syy: %3$s + %1$s lähetti kutsun liittyä huoneeseen käyttäjälle %2$s. Syy: %3$s + %1$s kumosi kutsun liittyä huoneeseen käyttäjälle %2$s. Syy: %3$s + %1$s hyväksyi kutsun liityäkseen huoneeseen %2$s. Syy: %3$s + %1$s veti takaisin käyttäjän %2$s kutsun. Syy: %3$s + + %1$s lisäsi tälle huoneelle osoitteen %2$s. + %1$s lisäsi tälle huoneelle osoitteet %2$s. + + + %1$s poisti tältä huoneelta osoitteen %2$s. + %1$s poisti tältä huoneelta osoitteet %3$s. + + %1$s lisäsi tälle huoneelle osoitteen %2$s ja poisti osoitteen %3$s. + %1$s asetti tämän huoneen pääosoitteeksi %2$s. + %1$s poisti tämän huoneen pääosoitteen. + %1$s salli vieraiden liittyä huoneeseen. + %1$s esti vieraita liittymästä huoneeseen. + %1$s laittoi päälle osapuolten välisen salauksen. + %1$s laittoi päälle osapuolisten välisen salauksen (tuntematon algoritmi %2$s). + Hyväksyit käyttäjän %1$s kutsun. Syy: %2$s + Peruutit kutsun liittyä huoneeseen käyttäjältä %1$s. Syy: %2$s + Lähetit kutsun liittyä huoneeseen käyttäjälle %1$s. Syy: %2$s + Estit käyttäjän %1$s. Syy: %2$s + Peruutit eston %1$s. Syy: %2$s + Poistit käyttäjän %1$s. Syy: %2$s + Hylkäsit kutsun. Syy: %1$s + Lähdit. Syy: %1$s + %1$s lähti. Syy: %2$s + Poistuit huoneesta. Syy: %1$s + Liityit. Syy: %1$s + %1$s liittyi. Syy: %2$s + Liityit ryhmään. Syy: %1$s + Kutsuit %1$s. Syy: %2$s + Kutsusi. Syy: %1$s + Tyhjä huone (oli %s) + %1$s, %2$s, %3$s ja %4$s + %1$s, %2$s ja %3$s + Mukautettu + Mukautettu (%1$d) + Oletus + Valvoja + Ylläpitäjä + %1$s muutti %2$s sovelmaa + Poistit %1$s sovelman + %1$s poisti %2$s sovelman + Lisäsit %1$s sovelman + %1$s lisäsi %2$s sovelman + Muutit %1$s sovelmaa + Hyväksyit kutsun henkilölle %1$s + Peruutit kutsun henkilöltä %1$s + %1$s peruutti kutsun henkilöltä %2$s + Peruutit henkilön %1$s kutsun liittyä ryhmään + Kutsuit %1$s + %1$s kutsui %2$s + Lähetit henkilölle %1$s kutsun liittyä huoneeseen + Päivitit profiilisi %1$s + Poistit huoneen profiilikuvan + %1$s poisti huoneen profiilikuvan + Poistit huoneen aiheen + Poistit huoneen nimen + Pyysit ryhmäpuhelua + 🎉 Kaikki palvelimet on estetty osallistumasta! Tätä huonetta ei voi enää käyttää. + Ei muutosta. + • Palvelimet jotka %s poistettiin estolistalta. + • Palvelimen haku %s on nyt kielletty. + • Palvelimen haku %s on sallittu. + • Palvelimen haku %s on kielletty. + %1$s on estänyt vieraita liittymästä huoneeseen. + Estit vieraita liittymästä huoneeseen. + Annoit vieraille luvan liittyä huoneeseen. + Annoit vieraille luvan liittyä tänne. + %1$s on antanut vieraille luvan liittyä tänne. + Poistit tämän huoneen pääosoitteen. + Otit käyttöön päästä päähän -salauksen. + Olet estänyt vieraiden liittymisen huoneeseen. + Otit päästä päähän -salauksen käyttöön (tuntematon algoritmi %1$s). + Päivitit tässä. + %s päivitti täällä. + Päivitit tämän huoneen. + Otit päästä päähän -salauksen käyttöön (%1$s) + Teit tulevista viesteistä näkyviä käyttäjälle %1$s + %1$s teki tulevista viesteistä näkyviä käyttäjälle %2$s + Teit tulevan huonehistorian näkyväksi %1$s + Lopetit puhelun. + Vastasit puheluun. + Lähetit tietoja puhelun valmistelemiseksi. + %s lähetti tietoja puhelun valmistelemiseksi. + Aloitit äänipuhelun. + Aloitit videopuhelun. + Vaihdoit huoneen nimeksi: %1$s + Vaihdoit huoneen profiilikuvaa + %1$s muutti huoneen profiilikuvaa + Vaihdoit aiheen: %1$s + Poistit nimimerkkisi (se oli %1$s) + Vaihdoit nimimerkkisi %1$s nimeen %2$s + Asetit nimimerkiksesi %1$s + Kutsusi + Vaihdoit profiilikuvaasi + Peruutit %1$sn kutsun + Estit %1$s + Poistit eston %1$s + Poistit %1$s + Hylkäsit kutsun + Poistuit huoneesta + %1$s poistui huoneesta + Poistuit huoneesta + Liityit + %1$s liittyi + Liityit huoneeseen + Kutsuit %1$s + Loit keskustelun + %1$s loi keskustelun + Loit huoneen + %1$s loi huoneen + Lähetit tarran. + Lähetit kuvan. Viestit Huone diff --git a/vector/src/main/res/values-fr/strings.xml b/vector/src/main/res/values-fr/strings.xml index fa47d881c4..ddbaa410df 100644 --- a/vector/src/main/res/values-fr/strings.xml +++ b/vector/src/main/res/values-fr/strings.xml @@ -1,5 +1,240 @@ + %1$s : %2$s + %1$s a envoyé une image. + invitation de %s + %1$s a invité %2$s + %1$s vous a invité + %1$s a rejoint le salon + %1$s est parti du salon + %1$s a rejeté l’invitation + %1$s a expulsé %2$s + %1$s a révoqué l\'exclusion de %2$s + %1$s a exclus %2$s + %1$s a annulé l’invitation de %2$s + %1$s a changé d’avatar + %1$s a modifié son nom affiché en %2$s + %1$s a modifié son nom affiché de %2$s en %3$s + %1$s a supprimé son nom affiché (précédemment %2$s) + %1$s a changé le sujet en : %2$s + %1$s a changé le nom du salon en : %2$s + %s a passé un appel vidéo. + %s a passé un appel vocal. + %s a répondu à l’appel. + %s a raccroché. + %1$s a rendu l’historique futur du salon visible pour %2$s + tous les membres du salon, depuis qu’ils ont été invités. + tous les membres du salon, depuis qu’ils l’ont rejoint. + tous les membres du salon. + n’importe qui. + inconnu (%s). + %1$s a activé le chiffrement de bout en bout (%2$s) + %1$s a demandé une téléconférence VoIP + Téléconférence VoIP démarrée + Téléconférence VoIP terminée + (l’avatar a aussi changé) + %1$s a supprimé le nom du salon + %1$s a supprimé le sujet du salon + %1$s a mis à jour son profil %2$s + %1$s a envoyé une invitation à %2$s pour rejoindre le salon + %1$s a accepté l’invitation pour %2$s + ** Déchiffrement impossible : %s ** + L’appareil de l’expéditeur ne nous a pas envoyé les clés pour ce message. + Effacement impossible + Envoi du message impossible + L’envoi de l’image a échoué + Erreur de réseau + Erreur de Matrix + Il est impossible pour le moment de revenir dans un salon vide. + Message chiffré + Adresse e-mail + Numéro de téléphone + %1$s a envoyé un sticker. + Invitation de %s + Invitation au salon + Salon vide + %1$s et %2$s + + %1$s et 1 autre + %1$s et %2$d autres + + Message supprimé + Message supprimé par %1$s + Message supprimé [motif : %1$s] + Message supprimé par %1$s [motif : %2$s] + Synchronisation initiale : +\nImportation du compte… + Synchronisation initiale : +\nImportation de la cryptographie + Synchronisation initiale : +\nImportation des salons + Synchronisation initiale : +\nImportation des salons que vous avez rejoints + Synchronisation initiale : +\nImportation des salons où vous avez été invités + Synchronisation initiale : +\nImportation des salons que vous avez quittés + Synchronisation initiale : +\nImportation des communautés + Synchronisation initiale : +\nImportation des données du compte + %s a mis à niveau ce salon. + Envoi du message… + Vider la file d’envoi + %1$s a révoqué l’invitation pour %2$s à rejoindre le salon + Invitation de %1$s. Raison : %2$s + %1$s a invité %2$s. Raison : %3$s + %1$s vous a invité. Raison : %2$s + %1$s a rejoint le salon. Raison : %2$s + %1$s est parti du salon. Raison : %2$s + %1$s a refusé l’invitation. Raison : %2$s + %1$s a expulsé %2$s. Raison : %3$s + %1$s a révoqué l\'exclusion de %2$s. Raison : %3$s + %1$s a exclus %2$s. Raison : %3$s + %1$s a envoyé une invitation à %2$s pour rejoindre le salon. Raison : %3$s + %1$s a révoqué l’invitation de %2$s à rejoindre le salon. Raison : %3$s + %1$s a accepté l’invitation pour %2$s. Raison : %3$s + %1$s a annulé l’invitation de %2$s. Raison : %3$s + + %1$s a ajouté %2$s comme adresse pour ce salon. + %1$s a ajouté %2$s comme adresses pour ce salon. + + + %1$s a supprimé %2$s comme adresse pour ce salon. + %1$s a supprimé %3$s comme adresses pour ce salon. + + %1$s a ajouté %2$s et supprimé %3$s comme adresses pour ce salon. + %1$s a défini %2$s comme adresse principale pour ce salon. + %1$s a supprimé l’adresse principale de ce salon. + %1$s a autorisé les visiteurs à rejoindre le salon. + %1$s a empêché les visiteurs de rejoindre le salon. + %1$s a activé le chiffrement de bout en bout. + %1$s a activé le chiffrement de bout en bout (algorithme %2$s inconnu). + %1$s a créé le salon + Vous avez mis cet endroit à niveau. + %s a mis cet endroit à niveau. + Vous avez mis à niveau ce salon. + Vous avez expulsé %1$s + Vous avez rejeté l\'invitation + Vous avez quitté le salon + %1$s a quitté le salon + Vous avez quitté le salon + Vous avez rejoint le salon + %1$s a rejoint le salon + Vous avez rejoint le salon + Vous avez invité %1$s + Vous avez créé la discussion + %1$s a créé la discussion + Vous avez créé le salon + Votre invitation + Vous avez envoyé un autocollant. + Vous avez envoyé une image. + Vous avez activé le chiffrement de bout en bout (algorithme %1$s inconnu). + Vous avez activé le chiffrement de bout en bout. + Vous avez empêché les visiteurs de rejoindre le salon. + %1$s a empêché les visiteurs de rejoindre le salon. + Vous avez empêché les visiteurs de rejoindre le salon. + Vous avez autorisé les visiteurs à venir ici. + %1$s a autorisé les visiteurs à venir ici. + Vous avez autorisé les visiteurs à rejoindre le salon. + Vous avez supprimé l’adresse principale de ce salon. + Vous avez défini %1$s comme adresse principale pour ce salon. + Vous avez ajouté %1$s et supprimé %2$s comme adresses pour ce salon. + + Vous avez supprimé %1$s comme adresse pour ce salon. + Vous avez supprimé %1$s comme adresses pour ce salon. + + + Vous avez ajouté %1$s comme adresse pour ce salon. + Vous avez ajouté %1$s comme adresses pour ce salon. + + Vous avez annulé l’invitation de %1$s. Raison : %2$s + Vous avez accepté l’invitation pour %1$s. Raison : %2$s + Vous avez révoqué l’invitation de %1$s à rejoindre le salon. Raison : %2$s + Vous avez envoyé une invitation à %1$s pour rejoindre le salon. Raison : %2$s + Vous avez refusé l’invitation. Raison : %1$s + Vous êtes parti. Raison : %1$s + %1$s est parti. Raison : %2$s + Vous êtes parti du salon. Raison : %1$s + %1$s rejoint. Raison : %2$s + Vous avez rejoint. Raison : %1$s + Vous avez rejoint le salon. Raison : %1$s + Vous avez invité %1$s. Raison : %2$s + Votre invitation. Raison %1$s + %1$s de %2$s à %3$s + %1$s a modifié le niveau de pouvoir de %2$s. + Vous avez modifié le niveau de pouvoir de %1$s. + Personnalisé + Personnalisé (%1$d) + Défaut + Modérateur + Admin + Vous avez modifié le widget %1$s + %1$s a modifié le widget %2$s + Vous avez supprimé le widget %1$s + %1$s a supprimé le widget %2$s + Vous avez ajouté le widget %1$s + %1$s a ajouté le widget %2$s + Vous avez accepté l’invitation pour %1$s + Vous avez révoqué l\'invitation pour %1$s + %1$s a révoqué l\'invitation pour %2$s + Vous avez rendu les futurs messages visible pour %1$s + %1$s a rendu les futurs messages visible pour %2$s + Vous avez supprimé l\'avatar du salon + %1$s a supprimé l\'avatar du salon + Vous avez supprimé le nom du salon + Vous avez demandé une téléconférence VoIP + Vous avez activé le chiffrement de bout en bout (%1$s) + Vous avez rendu l’historique futur du salon visible pour %1$s + Vous avez raccroché. + Vous avez répondu à l’appel. + Vous avez envoyé les données pour configurer l\'appel. + %s a envoyé les données pour configurer l\'appel. + Vous avez passé un appel vocal. + Vous avez passé un appel vidéo. + Vous avez changé le nom du salon en : %1$s + Vous avez modifié l\'avatar du salon + %1$s a modifié l\'avatar du salon + Vous avez modifié votre nom affiché de %1$s en %2$s + Vous avez modifié votre nom affiché en %1$s + Vous avez changé votre avatar + Vous avez annulé l’invitation de %1$s + Vous avez changé le sujet en : %1$s + Vous avez supprimé votre nom affiché (précédemment %1$s) + Vous avez révoqué l’invitation pour %1$s à rejoindre le salon + Vous avez invité %1$s + %1$s a invité %2$s + Vous avez envoyé une invitation à %1$s pour rejoindre le salon + Vous avez mis à jour votre profile %1$s + Vous avez supprimé le sujet du salon + Vous avez exclus %1$s. Raison : %2$s + Vous avez révoqué l\'exclusion de %1$s. Raison : %2$s + Vous avez exclus %1$s + Vous avez révoqué l\'exclusion de %1$s + Vous avez expulsé %1$s. Raison : %2$s + Salon vide (était %s) + + %1$s, %2$s, %3$s et %4$d autre + %1$s, %2$s, %3$s et %4$d autres + + %1$s, %2$s, %3$s et %4$s + %1$s, %2$s et %3$s + 🎉 Tous les serveurs sont interdits de participer ! Ce salon ne peut plus être utilisé. + Aucun changement. + • Les serveurs correspondant à des IP littérales sont maintenant interdits. + • Les serveurs correspondant à %s sont interdits. + • Les serveurs correspondants à des IP littérales sont interdites. + • Les serveurs correspondants à des IP littérales sont autorisés. + • Les serveurs correspondants à des IP littérales sont maintenant autorisées. + • Les serveurs correspondant à %s sont supprimés de la liste autorisée. + • les serveur correspondant à %s sont maintenant autorisés. + • Les serveurs correspondant à %s étaient supprimés de la liste des interdits. + • Les serveurs correspondant à %s sont maintenant interdits. + Vous avez changé les droits ACL du serveur pour ce salon. + %s a changé les droits ACL du serveur pour ce salon. + • Les serveurs correspondant à %s sont autorisés. + Vous avez paramétré les ACL pour ce salon. + %s paramètre les autorisations étendues (ACL) du serveur pour ce salon. Messages Paramètres Informations sur ce participant diff --git a/vector/src/main/res/values-gl/strings.xml b/vector/src/main/res/values-gl/strings.xml index fcbf0aa122..e701ce6fdb 100644 --- a/vector/src/main/res/values-gl/strings.xml +++ b/vector/src/main/res/values-gl/strings.xml @@ -1,5 +1,268 @@ + Enderezo de correo + Fallo ao subir a páxina + %1$s: %2$s + %1$s enviou unha imaxe. + %1$s enviou unha icona. + Convite de %s + %1$s convidou a %2$s + %1$s convidouno + %1$s entrou + %1$s saíu + %1$s rexeitou o convite + %1$s expulsou a %2$s + %1$s desbloqueou a %2$s + %1$s bloqueou a %2$s + %1$s cancelou o convite de %2$s + %1$s cambiou o seu avatar + %1$s cambiou o seu nome a %2$s + %1$s cambiou o seu nome de %2$s a %3$s + %1$s borrou o seu nome público (%2$s) + %1$s cambiou o tema desta sala para: %2$s + %1$s cambiou o nome desta sala para: %2$s + %s iniciou unha chamada de vídeo. + %s iniciou unha chamada de voz. + %s respondeu á chamada. + %s terminou a chamada. + %1$s fixo visible os próximos históricos para %2$s + toda a xente que integran esta sala, desde o momento en que foron convidados. + todas a xente da sala, desde o momento en que entraron. + todas os membros da sala. + todos. + descoñecido (%s). + %1$s activou a criptografía par-a-par (%2$s) + %1$s solicitou unha conferencia VoIP + A conferencia VoIP comenzou + A conferencia VoIP terminou + (o avatar tamén foi cambiado) + %1$s borrou o nome da sala + %1$s removeu o tema da sala + %1$s actualizou o seu perfil %2$s + %1$s envioulle un convite a %2$s para que entre na sala + %1$s aceptou o convite para %2$s + ** Imposíbel descifrar: %s ** + O dispositivo do que envía non enviou as chaves desta mensaxe. + Non se puido redactar + Non foi posíbel enviar a mensaxe + Erro da conexión + Erro de Matrix + Aínda non é posíbel volver a entrar nunha sala baleira. + Mensaxe cifrada + Número de teléfono + %1$s e %2$s + Fixeches unha chamada de audio. + Fixeches unha chamada de vídeo. + Cambiaches o nome da sala a: %1$s + Cambiaches o avatar da sala + %1$s cambiou o avatar da sala + Cambiaches o asunto a: %1$s + Eliminaches o teu nome público (era %1$s) + Cambiaches o teu nome público de %1$s a %2$s + Estableceches o nome público a %1$s + Cambiaches o teu avatar + Retirácheslle o convite a %1$s + Vetaches a %1$s + Readmitiches a %1$s + Expulsaches a %1$s + Rexeitaches o convite + Deixaches a sala + %1$s deixou a sala + Saíches da sala + Unícheste + %1$s iniuse + Unícheste a sala + Convidaches a %1$s + Creaches a conversa + %1$s creou a conversa + Creaches a sala + %1$s creou a sala + O teu convite + Enviaches un adhesivo. + Enviaches unha imaxe. + • Servidores con literais IP están vetados. + • Servidores con IP literais están permitidos. + • Servidores con %s están vetados. + • Servidores con %s están permitidos. + Estableceches os ACLs do servidor para esta sala. + %s estableceu os ACLs do servidor para esta sala. + %s actualizou aquí. + Actualizaches aquí. + Actualizaches esta sala. + %s actualizou esta sala. + Activaches o cifrado extremo-a-extremo (%1$s) + Fixeches visibles as mensaxes futuras para %1$s + %1$s fixo visibles as mensaxes futuras para %2$s + Fixeches visible no futuro o historial da sala para %1$s + Remataches a chamada. + Respondeches á chamada. + Enviaches datos para configurar a chamada. + %s enviou datos para configurar a chamada. + Retiraches o convite de %1$s. Razón: %2$s + %1$s retirou o convite de %2$s. Razón: %3$s + Aceptaches o convite para %1$s. Razón: %2$s + %1$s aceptou o convite para %2$s. Razón: %3$s + Revogaches o convite para que %1$s se una á sala. Razón: %2$s + %1$s revogou o convite para que %2$s se una á sala. Razón: %3$s + Convidaches a %1$s para que se una á sala. Razón: %2$s + %1$s convidou a %2$s para que se una á sala. Razón: %3$s + Vetaches a %1$s. Razón: %2$s + %1$s vetou a %2$s. Razón: %3$s + Retirácheslle o veto a %1$s. Razón: %2$s + %1$s retirou o veto a %2$s. Razón: %3$s + Expulsaches a %1$s. Razón: %2$s + %1$s expulsou a %2$s. Razón: %3$s + Rexeitaches o convite. Razón: %1$s + %1$s rexeitou o convite. Razón: %2$s + Saíches. Razón: %1$s + %1$s saíu. Razón: %2$s + Saíches da sala. Razón: %1$s + %1$s deixou a sala. Razón: %2$s + Unícheste. Razón: %1$s + %1$s uníuse. Razón: %2$s + Unícheste á sala. Razón: %1$s + %1$s uniuse á sala. Razón: %2$s + %1$s convidoute. Razón: %2$s + Convidaches a %1$s. Razón: %2$s + %1$s convidou a %2$s. Razón: %3$s + O teu convite. Razón: %1$s + Convite de %1$s. Razón: %2$s + Baleirar cola de envíos + Enviando mensaxe… + Sincr. inicial: +\nImportando datos da conta + Sincr. inicial: +\nImportando comunidades + Sincr. inicial: +\nImportando salas das que saíches + Sincr. inicial: +\nImportando convites a salas + Sincr. inicial: +\nImportando Salas + Sincr. inicial: +\nImportando salas + Sincr. inicial: +\nImportando cifrado + Sincr. inicial: +\nImportando conta… + Sala baleira (estaba %s) + Sala baleira + + %1$s e 1 máis + %1$s e %2$d outras + + + %1$s, %2$s, %3$s e %4$d máis + %1$s, %2$s, %3$s e %4$d outras + + %1$s, %2$s, %3$s e %4$s + %1$s, %2$s e %3$s + Convite de sala + Convite desde %s + %1$s de %2$s a %3$s + %1$s cambiou de categoría a %2$s. + Cambiaches a categoría de %1$s. + Personalizado + Personalizado (%1$d) + Por defecto + Moderadora + Admin + Modificaches a conferencia de vídeo + Conferencia de vídeo modificada por %1$s + Finalizaches a conferencia de vídeo + Conferencia de vídeo finalizada por %1$s + Iniciaches unha conferencia de vídeo + Conferencia de vídeo iniciada por %1$s + Modificaches o widget %1$s + %1$s modificou o widget %2$s + Eliminaches o widget %1$s + %1$s eliminou o widget %2$s + Engadiches o widget %1$s + %1$s engadiu o widget %2$s + Aceptaches o convite para %1$s + Revogaches o convite para %1$s + %1$s revogou o convite para %2$s + Revogaches o convite para que %1$s se una á sala + %1$s revogou o convite para que %2$s se una á sala + Convidaches a %1$s + %1$s convidou a %2$s + Enviácheslle un convite a %1$s para unirse á sala + Actualizaches o teu perfil %1$s + Mensaxe eliminada por %1$s [razón: %2$s] + Mensaxe eliminada [razón: %1$s] + Mensaxe eliminada por %1$s + Mensaxe eliminada + Eliminaches o avatar da sala + %1$s eliminou o avatar da sala + Eliminaches o asunto da sala + Eliminaches o nome da sala + Solicitaches unha conferencia VoIP + 🎉 Vetouse a participación de tódolos servidores! Xa non se pode utilizar esta sala. + Sen cambio. + • Os servidores con literais IP concordantes están vetados. + • Os servidores cos literais IP concordantes están permitidos. + • Servidores con %s foron eliminados da lista de permitidos. + • Os servidores con %s agora están permitidos. + • Os servidores con %s xa non están la lista de vetados. + • Os servidores con %s están agora vetados. + Cambiaches os ACLs do servidor para esta sala. + %s cambiou os ACLs do servidor para esta sala. + + %1$s engadiu %2$s como enderezo desta sala. + %1$s engadiu %2$s como enderezos desta sala. + + Activaches o cifrado extremo-a-extremo (algoritmo non recoñecido %1$s). + %1$s activou o cifrado extremo-a-extrem (algoritmo non recoñecible %2$s). + Activaches o cifrado extremo-a-extremo. + %1$s activou o cifrado extremo-a-extremo. + Non permites que as convidadas se unan á sala. + %1$s non permite que as usuarias se unan á sala. + Non permites que as convidadas se unan á sala. + %1$s non permite que as convidadas se unan á sala. + Permitiches que as convidadas se unan aquí. + %1$s permitiu que as convidadas se unan aquí. + Permitiches que as convidadas se unan á sala. + %1$s permite que as convidadas se unan á sala. + Cambiaches os enderezos desta sala. + %1$s cambiou os enderezos desta sala. + Cambiaches os enderezos principal e alternativo para esta sala. + %1$s cambiou os enderezos alternativo e principal para esta sala. + Cambiaches os enderezos alternativos para esta sala. + %1$s cambiou os enderezos alternativos para esta sala. + + Eliminaches o enderezo alternativo %1$s para esta sala. + Eliminaches os enderezos alternativos %1$s para esta sala. + + + %1$s eliminou o enderezo alternativo %2$s para esta sala. + %1$s eliminou os enderezos alternativos %2$s para esta sala. + + + Engadiches o enderezo alternativo %1$s para esta sala. + Engadiches os enderezos alternativos %1$s para esta sala. + + + %1$s engadiu o enderezo alternativo %2$s para esta sala. + %1$s engadiu os enderezos alternativos %2$s para esta sala. + + Eliminaches o enderezo principal desta sala. + %1$s eliminou o enderezo principal desta sala. + Estableceches %1$s como enderezo principal desta sala. + %1$s estableceu %2$s como enderezo principal desta sala. + Engadiches %1$s e eliminaches %2$s como enderezos desta sala. + %1$s engadiu %2$s e eliminou %3$s como enderezos desta sala. + + Eliminaches %1$s como enderezo desta sala. + Eliminaches %1$s como enderezos desta sala. + + + %1$s eliminou %2$s como enderezo desta sala. + %1$s eliminou %2$s como enderezos desta sala. + + + Engadiches %1$s como enderezo para esta sala. + Engadiches %1$s como enderezos para esta sala. + Decorado claro Decorado escuro Decorado negro diff --git a/vector/src/main/res/values-hu/strings.xml b/vector/src/main/res/values-hu/strings.xml index 12294a4094..f475e4426c 100644 --- a/vector/src/main/res/values-hu/strings.xml +++ b/vector/src/main/res/values-hu/strings.xml @@ -1,5 +1,198 @@ + %1$s: %2$s + %1$s küldött egy képet. + %s meghívója + %1$s meghívta: %2$s + %1$s meghívott + %1$s belépett a szobába + %1$s kilépett a szobából + %1$s elutasította a meghívást + %1$s kidobta: %2$s + %1$s feloldotta %2$s tiltását + %1$s kitiltotta: %2$s + %1$s visszavonta %2$s meghívását + %1$s megváltoztatta a profilképét + %1$s megváltoztatta a megjelenő nevét erre: %2$s + %1$s megváltoztatta a megjelenítendő nevét erről: %2$s, erre: %3$s + %1$s eltávolította a megjelenítendő nevét (%2$s) + %1$s megváltoztatta a témát erre: %2$s + %1$s megváltoztatta a szoba nevét erre: %2$s + %s videóhívást kezdeményezett. + %s hanghívást indított. + %s fogadta a hívást. + %s befejezte a hívást. + %1$s láthatóvá tette a jövőbeli előzményeket %2$s + a szoba összes tagja számára, a meghívásuk időpontjától kezdve. + a szoba összes tagja számára, a csatlakozásuk időpontjától kezdve. + az összes szobatag számára. + bárki. + ismeretlen (%s). + %1$s bekapcsolta a végpontok közötti titkosítást (%2$s) + %1$s hanghívás konferenciát kérelmezett + Hanghívás konferencia elindult + Hanghívás konferencia befejeződött + (a profilkép is megváltozott) + %1$s eltávolította a szoba nevét + %1$s eltávolította a szoba témáját + %1$s megváltoztatta a(z) %2$s profilját + %1$s meghívót küldött %2$s számára, hogy csatlakozzon a szobához + %1$s elfogadta a meghívót ebbe: %2$s + ** Visszafejtés sikertelen: %s ** + A küldő eszköze nem küldte el a kulcsokat ehhez az üzenethez. + Kitakarás sikertelen + Üzenet küldése sikertelen + Kép feltöltése sikertelen + Hálózati hiba + Matrix hiba + Jelenleg nem lehetséges újracsatlakozni egy üres szobához. + Titkosított üzenet + E-mail cím + Telefonszám + %1$s küldött egy matricát. + Meghívó tőle: %s + Meghívó egy szobába + %1$s és %2$s + Üres szoba + + %1$s és 1 másik + %1$s és %2$d másik + + Üzenet eltávolítva + Üzenetet eltávolította: %1$s + Üzenet eltávolítva [ok: %1$s] + Üzenetet eltávolította: %1$s [ok: %2$s] + Induló szinkronizáció: +\nFiók betöltése… + Induló szinkronizáció: +\nTitkosítás betöltése + Induló szinkronizáció: +\nSzobák betöltése + Induló szinkronizáció: +\nCsatlakozott szobák betöltése + Induló szinkronizáció: +\nMeghívott szobák betöltése + Induló szinkronizáció: +\nElhagyott szobák betöltése + Induló szinkronizáció: +\nKözösségek betöltése + Induló szinkronizáció: +\nFiók adatok betöltése + %s frissítette ezt a szobát. + Üzenet küldése… + Küldő sor ürítése + %1$s visszavonta %2$s meghívását, hogy csatlakozzon a szobához + %1$s meghívója. Ok: %2$s + %1$s meghívta őt: %2$s. Ok: %3$s + %1$s meghívott. Ok: %2$s + %1$s belépett a szobába. Mert: %2$s + %1$s kilépett a szobából. Ok: %2$s + %1$s visszautasította a meghívót. Ok: %2$s + %1$s kirúgta őt: %2$s. Ok: %3$s + %1$s visszaengedte őt: %2$s. Ok: %3$s + %1$s kitiltotta őt: %2$s. Ok: %3$s + %1$s meghívót küldött neki: %2$s, hogy lépjen be a szobába. Ok: %3$s + %1$s visszavonta %2$s meghívóját a szobába való belépéshez. Ok: %3$s + %1$s elfogadta a meghívót ide: %2$s. Ok: %3$s + %1$s visszavonta %2$s meghívóját. Ok: %3$s + + %1$s ezt a címet adta a szobához: %2$s. + %1$s ezeket a címeket adta a szobához: %2$s. + + + %1$s ezt a címet törölte a szobából: %3$s. + %1$s ezeket a címeket törölte a szobából: %3$s. + + %1$s a szobához adta ezeket:%2$s és törölte ezeket: %3$s. + %1$s a szoba elsődleges címét erre állította be: %2$s. + %1$s eltávolította a szoba elsődleges címét. + %1$s megengedte a vendégeknek, hogy belépjenek ebbe a szobába. + %1$s megtiltotta a vendégeknek, hogy belépjenek ebbe a szobába. + %1$s bekapcsolta a végpontok közötti titkosítást. + %1$s bekapcsolta a végpontok közötti titkosítást (ismeretlen algoritmus %2$s). + %1$s szobát készített + Fogadtad a hívást. + Befejezted a hívást. + Hívási adatokat küldtél. + %s hívási adatokat küldött. + Hanghívást indítottál. + Videóhívást indítottál. + Megváltoztattad a szoba képét + %1$s megváltoztatta a szoba képét + Megváltoztattad a témát erre: %1$s + Megváltoztattad a profilképed + Visszavontad %1$s meghívóját + Kitiltottad %1$s felhasználót + Visszaengedted %1$s felhasználót + Kirúgtad %1$s felhasználót + Visszautasítottad a meghívót + Elhagytad a szobát + %1$s elhagyta a szobát + Elhagytad a szobát + Csatlakoztál + %1$s csatlakozott + Beléptél a szobába + Meghívtad: %1$s + Létrehoztad a beszélgetést + %1$s létrehozta a beszélgetést + Létrehoztad a szobát + Matricát küldtél. + Képet küldtél. + Saját + Saját (%1$d) + Alapértelmezett + Moderátor + Admin + Ön megváltoztatta a %1$s kisalkalmazást + %1$s megváltoztatta a %2$s kisalkalmazást + Ön eltávolította a %1$s kisalkalmazást + %1$s eltávolította a %2$s kisalkalmazást + Ön hozzáadott egy %1$s kisalkalmazást + %1$s hozzáadott egy %2$s kisalkalmazást + Ön elfogadta a meghívót ehhez: %1$s + Ön visszavonta %1$s felhasználó meghívóját + %1$s visszavonta %2$s felhasználó meghívóját + Ön visszavonta %1$s felhasználó meghívóját + Ön meghívta %1$s felhasználót + %1$s meghívta %2$s felhasználót + Ön meghívót küldött %1$s felhasználónak, hogy csatlakozzon a szobához + Ön frissítette a saját profilját %1$s + Ön eltávolította a szoba képét + %1$s eltávolította a szoba képét + Ön eltávolította a szoba témáját + Ön eltávolította a szoba nevét + Ön videókonferencia kezdeményezését kérte + Ön frissítette ezt a szobát. + %s frissítette a szobát. + Ön frissítette ezt a szobát. + Ön bekapcsolta a végpontok közötti titkosítást (%1$s) + Ön elérhetővé tette a jövőbeni üzeneteket %1$s + Ön elérhetővé tette a jövőbeni üzeneteket %1$s + %1$s elérhetővé tette a jövőbeni üzeneteket %2$s + Ön megváltoztatta a szoba nevét erre: %1$s + Ön eltávolította a saját megjelenített nevét (%1$s volt) + Ön megváltoztatta a saját megjelenítési nevét erről: %1$s, erre: %2$s + Ön beállította a saját megjelenítési nevét erre: %1$s + Az ön meghívása + %1$s felhasználó hozzáférési szintjét erről: %2$s, erre: %3$s + %1$s megváltoztatta %2$s. + Megváltoztattad %1$s hozzáférési szintjét. + 🎉 Minden szerver ki lett tiltva a szobából! Ez a szoba többé nem használható. + Nincs változás. + • Most már tiltva vannak az IP címet hosztnévként használó szerverek. + • Az IP címet hosztnévként használó szerverek most már engedélyezve vannak. + • El lettek távolítva a tiltólistából az erre illeszkedő szerverek: %s + • Most már engedélyezve vannak az erre illeszkedő szerverek: %s + • El lettek távolítva a tiltólistából az erre illeszkedő szerverek: %s + • Most már tiltva vannak az erre a kifejezésre illeszkedő szerverek: %s + Megváltoztattad a szerver ACL-eket ehhez a szobához. + %s megváltoztatta a szerver ACL-eket ehhez a szobához. + • IP címet hosztnévként használó szerverek tiltva vannak. + • IP címet hosztnévként használó szerverek engedélyezve vannak. + • Engedélyezve vannak azok a szerverek, amik illeszkednek erre: %s + • Tiltva vannak azok a szerverek, amik illeszkednek erre: %s + Beállítottad a szerver ACL-eket ehhez a szobához. + %s beállította a szerver ACL-eket ehhez a szobához. Üzenetek Szoba Beállítások diff --git a/vector/src/main/res/values-id/strings.xml b/vector/src/main/res/values-id/strings.xml index b96d08030f..91fdb38426 100644 --- a/vector/src/main/res/values-id/strings.xml +++ b/vector/src/main/res/values-id/strings.xml @@ -1,5 +1,14 @@ + Undang dari %s + Undangan Ruang + %1$s dan %2$s + + Ruang kosong + + + %1$s dan %2$d yang lain + Pesan Ruang Pengaturan diff --git a/vector/src/main/res/values-in/strings.xml b/vector/src/main/res/values-in/strings.xml index b96d08030f..91fdb38426 100644 --- a/vector/src/main/res/values-in/strings.xml +++ b/vector/src/main/res/values-in/strings.xml @@ -1,5 +1,14 @@ + Undang dari %s + Undangan Ruang + %1$s dan %2$s + + Ruang kosong + + + %1$s dan %2$d yang lain + Pesan Ruang Pengaturan diff --git a/vector/src/main/res/values-is/strings.xml b/vector/src/main/res/values-is/strings.xml index 1edc352a4b..5969940e82 100644 --- a/vector/src/main/res/values-is/strings.xml +++ b/vector/src/main/res/values-is/strings.xml @@ -1,5 +1,77 @@ + %1$s: %2$s + %1$s sendi mynd. + %1$s sendi límmerki. + + %s sendi boð um þátttöku + %1$s bauð %2$s + %1$s bauð þér + %1$s gekk í hópinn + %1$s hætti + %1$s hafnaði boðinu + %1$s sparkaði %2$s + %1$s afbannaði %2$s + %1$s bannaði %2$s + %1$s breyttu auðkennismynd sinni + allir meðlimir spjallrásar, síðan þeim var boðið. + allir meðlimir spjallrásar, síðan þeir skráðu sig. + allir meðlimir spjallrásar. + hver sem er. + óþekktur (%s). + VoIP-símafundur hafinn + VoIP-símafundi lokið + + (einnig var skipt um auðkennismynd) + ** Mistókst að afkóða: %s ** + + Gat ekki sent skilaboð + + Gat ekki sent inn mynd + + Villa í netkerfi + Villa í Matrix + + Dulrituð skilaboð + + Tölvupóstfang + Símanúmer + + %1$s tók til baka boð frá %2$s + %1$s setti birtingarnafn sitt sem %2$s + %1$s breytti birtingarnafni sínu úr %2$s í %3$s + %1$s fjarlægði birtingarnafn sitt (%2$s) + %1$s breytti umræðuefninu í: %2$s + %1$s breytti heiti spjallrásarinnar í: %2$s + %s hringdi myndsamtal. + %s hringdi raddsamtal. + %s svaraði símtalinu. + %s lauk símtalinu. + %1$s kveikti á enda-í-enda dulritun (%2$s) + + %1$s bað um VoIP-símafund + %1$s fjarlægði heiti spjallrásar + %1$s fjarlægði umfjöllunarefni spjallrásar + %1$s gerði ferilskrá spjallrásar héðan í frá sýnilega fyrir %2$s + %1$s uppfærði notandasniðið sitt %2$s + %1$s sendi boð til %2$s um þátttöku í spjallrásinni + %1$s samþykkti boð um að taka þátt í %2$s + + Tæki sendandans hefur ekki sent okkur dulritunarlyklana fyrir þessi skilaboð. + + Gat ekki ritstýrt + Ekki er í augnablikinu hægt að taka aftur þátt í spjallrás sem er tóm. + + Boð á spjallrás + %1$s og %2$s + + + %1$s og 1 annar + %1$s og %2$d aðrir + + + Tóm spjallrás + Boð frá %s Ljóst þema Dökkt þema Svart þema diff --git a/vector/src/main/res/values-it/strings.xml b/vector/src/main/res/values-it/strings.xml index eb080ba7ad..3c5ff68b25 100644 --- a/vector/src/main/res/values-it/strings.xml +++ b/vector/src/main/res/values-it/strings.xml @@ -1,5 +1,269 @@ + %1$s: %2$s + %1$s ha inviato un\'immagine. + Invito di %s + %1$s ha invitato %2$s + %1$s ti ha invitato + %1$s è entrato nella stanza + %1$s è uscito dalla stanza + %1$s ha rifiutato l\'invito + %1$s ha buttato fuori %2$s + %1$s ha tolto il bando a %2$s + %1$s ha bandito %2$s + %1$s ha revocato l\'invito per %2$s + %1$s ha modificato il suo avatar + %1$s hanno cambiato il nome visualizzato con %2$s + %1$s ha cambiato il nome visualizzato da %2$s a %3$s + %1$s ha rimosso il nome visibile (%2$s) + %1$s ha cambiato l\'argomento con: %2$s + %1$s ha cambiato il nome della stanza con: %2$s + %s ha iniziato una chiamata video. + %s ha iniziato una chiamata vocale. + %s ha risposto alla chiamata. + %s ha terminato la chiamata. + %1$s ha reso la futura cronologia della stanza visibile a %2$s + tutti i membri della stanza, dal momento del loro invito. + tutti i membri della stanza, dal momento in cui sono entrati. + tutti i membri della stanza. + chiunque. + sconosciuto (%s). + %1$s ha attivato la crittografia end-to-end (%2$s) + %1$s ha richiesto una conferenza VoIP + Conferenza VoIP iniziata + Conferenza VoIP terminata + (anche l\'avatar è cambiato) + %1$s ha rimosso il nome della stanza + %1$s ha rimosso l\'argomento della stanza + %1$s ha aggiornato il profilo %2$s + %1$s ha mandato un invito a %2$s per unirsi alla stanza + %1$s ha accettato l\'invito per %2$s + ** Impossibile decriptare: %s ** + Il dispositivo del mittente non ci ha inviato le chiavi per questo messaggio. + Impossibile revisionare + Impossibile inviare il messaggio + Invio dell\'immagine fallito + Errore di rete + Errore di Matrix + Al momento non è possibile rientrare in una stanza vuota. + Messaggio criptato + Indirizzo email + Numero di telefono + %1$s ha inviato un adesivo. + + Invito da %s + Invito nella stanza + %1$s e %2$s + Stanza vuota + + %1$s e 1 altro + %1$s e %2$d altri + + Messaggio rimosso + Messaggio rimosso da %1$s + Messaggio rimosso [motivo: %1$s] + Messaggio rimosso da %1$s [motivo: %2$s] + Sync iniziale: +\nImportazione account… + Sync iniziale: +\nImportazione cifratura + Sync iniziale: +\nImportazione stanze + Sync iniziale: +\nImportazione stanze partecipate + Sync iniziale: +\nImportazione stanze invitate + Sync iniziale: +\nImportazione stanze lasciate + Sync iniziale: +\nImportazione comunità + Sync iniziale: +\nImportazione dati account + %s ha aggiornato questa stanza. + Invio messaggio in corso … + Cancella la coda di invio + %1$s ha revocato l\'invito a %2$s di unirsi alla stanza + Invito di %1$s. Motivo: %2$s + %1$s ha invitato %2$s. Motivo: %3$s + %1$s ti ha invitato. Motivo: %2$s + %1$s è entrato nella stanza. Motivo: %2$s + %1$s è uscito dalla stanza. Motivo: %2$s + %1$s ha rifiutato l\'invito. Motivo: %2$s + %1$s ha buttato fuori %2$s. Motivo: %3$s + %1$s ha riammesso %2$s. Motivo: %3$s + %1$s ha bandito %2$s. Motivo: %3$s + %1$s ha inviato un invito a %2$s di unirsi alla stanza. Motivo: %3$s + %1$s ha revocato l\'invito a %2$s di unirsi alla stanza. Motivo: %3$s + %1$s ha accettato l\'invito per %2$s. Motivo: %3$s + %1$s ha rifiutato l\'invito di %2$s. Motivo: %3$s + + %1$s ha aggiunto %2$s come indirizzo per questa stanza. + %1$s ha aggiunto %2$s come indirizzi per questa stanza. + + + %1$s ha rimosso %2$s come indirizzo per questa stanza. + %1$s ha rimosso %2$s come indirizzi per questa stanza. + + %1$s ha aggiunto %2$s e rimosso %3$s come indirizzi per questa stanza. + %1$s ha impostato l\'indirizzo principale per questa stanza a %2$s. + %1$s ha rimosso l\'indirizzo principale per questa stanza. + %1$s ha permesso l\'accesso alla stanza per gli ospiti. + %1$s ha impedito l\'accesso alla stanza per gli ospiti. + %1$s ha attivato la cifratura end-to-end. + %1$s ha attivato la cifratura end-to-end (algoritmo %2$s non riconosciuto). + %1$s ha creato la stanza + Hai inviato un\'immagine. + Hai inviato un adesivo. + Il tuo invito + Hai creato la stanza + Hai invitato %1$s + Sei entrato nella stanza + Sei uscito dalla stanza + Hai rifiutato l\'invito + Hai buttato fuori %1$s + Hai riammesso %1$s + Hai bandito %1$s + Hai ritirato l\'invito di %1$s + Hai cambiato il tuo avatar + Hai impostato il tuo nome visualizzato a %1$s + Hai cambiato il tuo nome visualizzato da %1$s a %2$s + Hai rimosso il tuo nome visibile (era %1$s) + Hai cambiato l\'argomento a: %1$s + %1$s ha modificato l\'avatar della stanza + Hai modificato l\'avatar della stanza + Hai cambiato il nome della stanza a: %1$s + Hai iniziato una videochiamata. + Hai iniziato una telefonata. + %s ha inviato dati per impostare la chiamata. + Hai inviato dati per impostare la chiamata. + Hai risposto alla chiamata. + Hai terminato la chiamata. + Hai reso visibile la futura cronologia della stanza a %1$s + Hai attivato la crittografia end-to-end (%1$s) + Hai aggiornato questa stanza. + Hai richiesto una conferenza VoIP + Hai rimosso il nome della stanza + Hai rimosso l\'argomento della stanza + %1$s ha rimosso l\'avatar della stanza + Hai rimosso l\'avatar della stanza + Hai aggiornato il tuo profilo %1$s + Hai mandato un invito a %1$s a unirsi alla stanza + Hai revocato l\'invito per %1$s a unirsi alla stanza + Hai accettato l\'invito per %1$s + %1$s ha aggiunto il widget %2$s + Hai aggiunto il widget %1$s + %1$s ha rimosso il widget %2$s + Hai rimosso il widget %1$s + %1$s ha modificato il widget %2$s + Hai modificato il widget %1$s + Amministratore + Moderatore + Predefinito + Personalizzato (%1$d) + Personalizzato + Hai cambiato il livello di potere di %1$s. + %1$s ha cambiato il livello di potere di %2$s. + %1$s da %2$s a %3$s + Il tuo invito. Motivo: %1$s + Hai invitato %1$s. Motivo: %2$s + Sei entrato nella stanza. Motivo: %1$s + Sei uscito dalla stanza. Motivo: %1$s + Hai rifiutato l\'invito. Motivo: %1$s + Hai buttato fuori %1$s. Motivo: %2$s + Hai riammesso %1$s. Motivo: %2$s + Hai bandito %1$s. Motivo: %2$s + Hai mandato un invito a %1$s a unirsi alla stanza. Motivo: %2$s + Hai revocato l\'invito a %1$s a unirsi alla stanza. Motivo: %2$s + Hai accettato l\'invito per %1$s. Motivo: %2$s + Hai ritirato l\'invito di %1$s. Motivo: %2$s + + Hai aggiunto %1$s come indirizzo per questa stanza. + Hai aggiunto %1$s come indirizzi per questa stanza. + + + Hai rimosso %1$s come indirizzo per questa stanza. + Hai rimosso %1$s come indirizzi per questa stanza. + + Hai aggiunto %1$s e rimosso %2$s come indirizzi per questa stanza. + Hai impostato l\'indirizzo principale per questa stanza a %1$s. + Hai rimosso l\'indirizzo principale per questa stanza. + Hai permesso l\'accesso alla stanza per gli ospiti. + Hai impedito l\'accesso alla stanza per gli ospiti. + Hai attivato la crittografia end-to-end. + Hai attivato la crittografia end-to-end (algoritmo %1$s sconosciuto). + Hai impedito l\'accesso alla stanza agli ospiti. + %1$s ha impedito l\'accesso alla stanza agli ospiti. + Hai permesso l\'accesso agli ospiti. + %1$s ha permesso l\'accesso agli ospiti. + Sei entrato. Motivo: %1$s + Sei uscito. Motivo: %1$s + %1$s è uscito. Motivo: %2$s + %1$s è entrato. Motivo: %2$s + Hai revocato l\'invito per %1$s + %1$s ha revocato l\'invito per %2$s + Hai invitato %1$s + %1$s ha invitato %2$s + Hai aggiornato la stanza. + %s ha aggiornato la stanza. + Hai reso visibili i messaggi futuri a %1$s + %1$s ha reso visibili i messaggi futuri a %2$s + Sei uscito dalla stanza + %1$s è uscito dalla stanza + Sei entrato + %1$s è entrato + Hai creato la discussione + %1$s ha creato la discussione + Stanza vuota (era %s) + + %1$s, %2$s, %3$s e %4$d altro + %1$s, %2$s, %3$s e altri %4$d + + %1$s, %2$s, %3$s e %4$s + %1$s, %2$s e %3$s + 🎉 Tutti i server sono banditi dalla partecipazione! Questa stanza non può più essere usata. + Nessuna modifica. + • I server che corrispondono a IP letterali ora sono banditi. + • I server che corrispondono a IP letterali ora sono permessi. + • I server che corrispondono a %s sono stati rimossi dalla lista dei consentiti. + • I server che corrispondono a %s ora sono permessi. + • I server che corrispondono a %s sono stati rimossi dalla lista di ban. + • I server che corrispondono a %s ora sono banditi. + Hai cambiato le ACL del server per questa stanza. + %s ha cambiato le ACL del server per questa stanza. + • I server che corrispondono a IP letterali sono banditi. + • I server che corrispondono a IP letterali sono permessi. + • I server che corrispondono a %s sono permessi. + • I server che corrispondono a %s sono banditi. + Hai impostato le ACL del server per questa stanza. + %s ha impostato le ACL del server per questa stanza. + Hai cambiato gli indirizzi per questa stanza. + %1$s ha cambiato gli indirizzi per questa stanza. + Hai cambiato gli indirizzi principali ed alternativi per questa stanza. + %1$s ha cambiato gli indirizzi principali ed alternativi per questa stanza. + Hai cambiato gli indirizzi alternativi per questa stanza. + %1$s ha cambiato gli indirizzi alternativi per questa stanza. + + Hai rimosso l\'indirizzo alternativo %1$s per questa stanza. + Hai rimosso gli indirizzi alternativi %1$s per questa stanza. + + + %1$s ha rimosso l\'indirizzo alternativo %2$s per questa stanza. + %1$s ha rimosso gli indirizzi alternativi %2$s per questa stanza. + + + Hai aggiunto l\'indirizzo alternativo %1$s per questa stanza. + Hai aggiunto gli indirizzi alternativi %1$s per questa stanza. + + + %1$s ha aggiunto l\'indirizzo alternativo %2$s per questa stanza. + %1$s ha aggiunto gli indirizzi alternativi %2$s per questa stanza. + + Hai modificato la video conferenza + Video conferenza modificata da %1$s + Hai iniziato la video conferenza + Hai terminato la video conferenza + Video conferenza terminata da %1$s + Video conferenza iniziata da %1$s Messaggi Stanza diff --git a/vector/src/main/res/values-ja/strings.xml b/vector/src/main/res/values-ja/strings.xml index 5919bb8df2..fbac648a40 100644 --- a/vector/src/main/res/values-ja/strings.xml +++ b/vector/src/main/res/values-ja/strings.xml @@ -1,5 +1,88 @@ + %1$s: %2$s + %1$sが画像を送信しました。 + %1$sがスタンプを送信しました。 + %sの招待 + %1$sが%2$sを招待しました + %1$sがあなたを招待しました + %1$sが参加しました + %1$sが退出しました + %1$sが招待を断りました + %1$sが%2$sを追放しました + %1$sが%2$sをブロック解除しました + %1$sが%2$sをブロックしました + %1$sが%2$sの招待を撤回しました + %1$sがアバターを変更しました + %1$sが表示名を%2$sに設定しました + %1$sが表示名を%2$sから%3$sに変更しました + %1$sが表示名 (%2$s) を削除しました + %1$sがテーマを%2$sに変更しました + %1$sが部屋名を%2$sに変更しました + %sがビデオ通話を開始しました。 + %sが音声通話を開始しました。 + %sが電話に出ました。 + %sが通話を終了しました。 + %sさんからの招待 + 部屋への招待 + %1$sと%2$s + 空の部屋 + + %1$sと他%2$d名 + + %1$sは、今後の部屋履歴を%2$sに表示させました + 部屋のメンバー全員、招待された時点から。 + 部屋のメンバー全員、参加した時点から。 + 部屋のメンバー全員。 + 誰でも。 + 不明 (%s)。 + %1$s がエンドツーエンド暗号化を有効にしました (%2$s) + %1$s がVoIP会議をリクエストしました + VoIP会議が開始されました + VoIP会議が終了しました + (アバターも変更された) + %1$s が部屋名を削除しました + %1$s がルームトピックを削除しました + %1$s がプロフィール %2$s を更新しました + %1$s は %2$s に部屋に参加するよう招待状を送りました + %1$sは%2$sの招待を受け入れました + ** 解読できません: %s ** + 送信者の端末からこのメッセージのキーが送信されていません。 + 修正できませんでした + メッセージを送信できません + 画像のアップロードに失敗しました + ネットワークエラー + Matrixエラー + 現在空の部屋に再参加することはできません。 + 暗号化されたメッセージ + メールアドレス + 電話番号 + ルームのアバターを変更しました + %1$sがルームのアバターを変更しました + トピックを%1$sに変更しました + 表示名を削除しました(%1$sでした) + 表示名を%1$sから%2$sに変更しました + 表示名を%1$sに設定しました + アバターを変更しました + %1$sの招待を取り下げました + %1$sをBANしました + %1$sのBANを解除しました + %1$sを退出させました + 招待を拒否しました + ルームから退出しました + %1$sがルームから退出しました + ルームから退出しました + 参加しました + %1$sが参加しました + ルームに参加しました + %1$sを招待しました + ディスカッションを作成しました + %1$sがディスカッションを作成しました + ルームを作成しました + %1$sがルームを作成しました + 招待 + ステッカーを送信しました。 + 画像を送信しました。 部屋 設定 履歴 diff --git a/vector/src/main/res/values-kab/strings.xml b/vector/src/main/res/values-kab/strings.xml index c374253000..3561ec153f 100644 --- a/vector/src/main/res/values-kab/strings.xml +++ b/vector/src/main/res/values-kab/strings.xml @@ -1,5 +1,195 @@ + %1$s: %2$s + %1$s t.yuzen tugna. + Tuzneḍ tugna. + Tinubga n %s + Tinubga-k•m + %1$s yesnulfa-d taxxamt + Tesnulfaḍ-d taxxamt-a + %1$s inced-d %2$s + Tnecdeḍ-d %1$s + %1$s inced-ik-id + %1$s yedda ɣer texxamt + Teddiḍ ɣer texxamt + %1$s yeǧǧa taxxamt + Teǧǧiḍ taxxamt + %1$s yugi/tugi tinubga + Tufiḍ tinubga + %1$s yessufeɣ %2$s + Tessufɣeḍ %1$s + Tbeddleḍ avatar-inek·inem + Anedbal + Aseɣyad + Amezwer + Sagen + %1$s seg %2$s ɣer %3$s + Tegguma ad d-tali tugna + Tansa n yimayl + %1$s azen astiker. + Tuzneḍ amenṭaḍ. + %1$s yekkes agdal i %2$s + Tekkseḍ agdal i %1$s + %1$s igdel %2$s + Tgedleḍ %1$s + %1$s issefsex tinubga n %2$s + Tesfesxeḍ tinubga n %1$s + %1$s ibeddel avatar-is + %1$s isbadu isem-is i d-ittuseknen ɣer %2$s + Tesbaduḍ isem-ik•im i d-ittuseknen ɣer %1$s + %1$s ibeddel isem-is i d-ittuseknen seg %2$s ɣer %3$s + Tbeddleḍ isem-ik•im i d-ittuseknen seg %1$s ɣer %2$s + %1$s yekkes isem-is i d-ittuseknen (yella %2$s) + Tekkseḍ isem-ik·im yettwaskanen (d %1$s) + %1$s isnifel asentel s: %2$s + Tesnifleḍ asentel s: %1$s + %1$s ibeddel avaṭar n texxamt + Tbeddleḍ avaṭar n texxamt + %1$s ibeddel isem n texxamt s: %2$s + Tbeddleḍ isem n texxamt s: %1$s + %s isɛedda siwel s tvidyut. + Tesɛeddaḍ siwel s tvidyut. + %s isɛedda asiwel s taɣect. + Tesɛeddaḍ siwel s taɣect. + %s yuzen isefka i usbadu n usiwel. + Tuzneḍ isefka i usbadu n usiwel. + %s yerra ɣef usiwel. + Terriḍ ɣef usiwel. + %s iḥbes asiwel. + Tḥebseḍ asiwel. + meṛṛa iɛeggalen n texxamt, segmi ara d-ttwanecden. + meṛṛa iɛeggalen n texamt, segmi ara d-rnun. + meṛṛa iɛeggalen n texxamt. + yal yiwen. + arussin (%s). + %1$s isermed awgelhen seg yixef ɣer yixef (%2$s) + Tesremdeḍ awgelhen seg yixef ɣer yixef (%1$s) + %s ileqqem taxxamt-a. + Tleqqmeḍ taxxamt-a. + %1$s isuter-d asarag VoIP + Tsutreḍ-d asarag VoIP + Asarag VoIP yebda + Asarag VoIP yekfa + (avatar daɣen ibeddel) + %1$s yekkes isem n texxamt + Tekkseḍ isem n texxamt + %1$s yekkes asentel n texxamt + Tekkseḍ asentel n texxamt + %1$s yekkes avatar n texxamt + Tekkseḍ avatar n texxamt + Izen ittwakkes + Izen ittwakkes sɣur %1$s + Izen ittwakkes [tamentilt: %1$s] + Izen ittwakkes sɣur %1$s [tamentilt: %2$s] + %1$s ileqqem amaɣnu-ines %2$s + Tleqqmeḍ amaɣnu-inek•inem %1$s + %1$s yuzen tinubga i %2$s akken ad yeddu ɣer texxamt + Tuzneḍ tinubga i %1$s akken ad yeddu ɣer texxamt + %1$s iqbel tinubga i %2$s + Tqebleḍ tinubga i %1$s + %1$s yerna awiǧit %2$s + Terniḍ awiǧit %1$s + %1$s yekkes awiǧit %2$s + Tekkseḍ awiǧit %1$s + %1$s ibeddel awiǧit %2$s + Tbeddleḍ awiǧit %1$s + Sagen (%1$d) + Tbeddleḍ aswir n tezmert n %1$s. + %1$s ibeddel aswir n tezmert n %2$s. + ** Awgelhen d awezɣi: %s ** + Ibenk n umazan ur aɣ-d-yuzin ara tisura i yizen-a. + Tuzna n yizen d tawezɣit + Tuccḍa deg uẓeṭṭa + Tuccḍa deg Matrix + %1$s iga amazray n texxamyt i d-iteddun yettban i %2$s + Tgiḍ amazray n texxamyt i d-iteddun yettban i %1$s + %1$s issefsax tinubga i %2$s i wakken ad d-yekcem ɣer texxamt + Tesfesxeḍ tinubga i %1$s i wakken ad d-yernu ɣer texxamt + D awezɣi tura ad nales ad nuɣal ɣer texxamt tilemt. + Izen yettwawgelhen + Uṭṭun n tiliɣri + Tinubga sɣur %s + Tinubga ɣer texxamt + %1$s d %2$s + + %1$s d 1 wayeḍ + %1$s d %2$d wiyaḍ + + Tremdeḍ awgelhen seg yixef ɣer yixef (alguritm %1$s ur yettwassen ara). + Taxxamt tilemt + Amtawi n tazwara: +\nAktar n umiḍan… + Amtawi n tazwara: +\nAktar n uwgelhen + Amtawi n tazwara: +\nAktar n texxamin + Amtawi n tazwara: +\nAktar n texxamin iɣer terniḍ + Amtawi n tazwara: +\nAktar n texxamin iɣer tettwanecdeḍ + Amtawi n tazwara: +\nAktar n texxamin i teǧǧiḍ + Amtawi n tazwara: +\nAktar n tmezdagnutin + Amtawi n tazwara: +\nAktar n yisefka n umiḍan + Tuzzna n yizen… + Tinubga n %1$s. Tamentilt: %2$s + Tinubga-k•m. Tamentilt: %1$s + %1$s inced %2$s. Tamentilt: %3$s + Tnecdeḍ %1$s. Tamentilt: %2$s + %1$s inced-ik•ikem. Tamentilt: %2$s + %1$s yedda ɣer texxamt. Tamentilt: %2$s + Teddiḍ ɣer texxamt. Tamentilt: %1$s + %1$s yeǧǧa taxxamt. Tamentilt: %2$s + Teǧǧiḍ taxxamt. Tamentilt: %1$s + %1$s yugi tinubga. Tamentilt: %2$s + Tugiḍ tinubga. Tamentilt: %1$s + %1$s yessufeɣ %2$s. Tamentilt: %3$s + Tessufɣeḍ %1$s. Tamentilt: %2$s + %1$s yekkes agdal i %2$s. Tamentilt: %3$s + Tekkseḍ agdal i %1$s. Tamentilt: %2$s + %1$s igdel %2$s. Tamentilt: %3$s + Tgedleḍ %1$s. Tamentilt: %2$s + %1$s yuzen tinubga i %2$s akken ad yeddu ɣer texxamt. Tamentilt: %3$s + Tuzneḍ tinubga i %1$s iwakken ad yeddu ɣer texxamt. Tamentilt: %2$s + %1$s iqbel tinubga i %2$s. Tamentilt: %3$s + Tqebleḍ tinubga i %1$s. Tamentilt: %2$s + %1$s issefsex tinubga n %2$s. Tamentilt: %3$s + Tesfesxeḍ tinubga n %1$s. Tamentilt: %2$s + + %1$s yerna %2$s d tansa i texxamt-a. + %1$s yerna %2$s d tansiwin i texxamt-a. + + + Terniḍ %1$s d tansa i texxamt-a. + Terniḍ %1$s d tansiwin i texxamt-a. + + + %1$s yekkes %2$s am tansa i texxamt-a. + %1$s yekkes %3$s am tansiwin i texxamt-a. + + + Tekkseḍ %1$s am tansa i texxamt-a. + Tekkseḍ %1$s am tansiwin i texxamt-a. + + %1$s yerna %2$s terniḍ tekkseḍ %3$s am tansiwin i texxamt-a. + Terniḍ %1$s terniḍ tekkseḍ %2$s am tansiwin i texxamt-a. + %1$s isbadu %2$s am tansa tagejdant i texxamt-a. + Tesbaduḍ %1$s am tansa tagejdant i texxamt-a. + %1$s yekkes tansa tagejdant i texxamt-a. + Tekkseḍ tansa tagejdant i texxamt-a. + %1$s isireg inebgawen ad ddun ɣer texxamt. + Tsirgeḍ inebgawen ad ddun ɣer texxamt. + %1$s issewḥel inebgawen iwakken ur tteddun ara ɣer texxamt. + Tesweḥleḍ inebgawen iwakken ur tteddun ara ɣer texxamt. + %1$s yermed awgelhen seg yixef ɣer yixef. + Tremdeḍ awgelhen seg yixef ɣer yixef. + %1$s yermed awgelhen seg yixef ɣer yixef (alguritm %2$s ur yettwassen ara). + Sfeḍ tabdart n uraǧu n tuzzna + %1$s issefsex tinubga n %2$s i tmerniwt ɣer texxamt. Tamentilt: %3$s + Tesfesxeḍ tinubga n %1$s i tmerna ɣer texxamt. Tamentilt: %2$s + Yegguma ad yaru Asentel aceɛlal Asentel n yiḍ Asentel aberkan diff --git a/vector/src/main/res/values-ko/strings.xml b/vector/src/main/res/values-ko/strings.xml index 0f3cbf4ff5..030786056c 100644 --- a/vector/src/main/res/values-ko/strings.xml +++ b/vector/src/main/res/values-ko/strings.xml @@ -1,5 +1,103 @@ + %1$s: %2$s + %s님의 초대 + %1$s님이 사진을 보냈습니다. + %1$s님이 스티커를 보냈습니다. + + %1$s님이 %2$s님을 초대했습니다 + %1$s님이 당신을 초대했습니다 + %1$s님이 참가했습니다 + %1$s님이 떠났습니다 + %1$s님이 초대를 거부했습니다 + %1$s님이 %2$s님을 추방했습니다 + %1$s님이 %2$s님의 출입 금지를 풀었습니다 + %1$s님이 %2$s님을 출입 금지했습니다 + %1$s님이 %2$s님의 초대를 취소했습니다 + %1$s님이 아바타를 변경했습니다 + %1$s님이 표시 이름을 %2$s(으)로 설정했습니다 + %1$s님이 표시 이름을 %2$s에서 %3$s(으)로 변경했습니다 + %1$s님이 표시 이름을 삭제했습니다 (%2$s) + %1$s님이 주제를 다음으로 변경했습니다: %2$s + %1$s님이 방 이름을 다음으로 변경했습니다: %2$s + %s님이 영상 통화를 걸었습니다. + %s님이 음성 통화를 걸었습니다. + %s님이 전화를 받았습니다. + %s님이 전화를 끊었습니다. + %1$s님이 이후 %2$s에게 방 기록을 공개했습니다 + 초대된 시점부터 모든 방 구성원 + 들어온 시점부터 모든 방 구성원 + 모든 방 구성원 + 누구나. + 알 수 없음 (%s). + %1$s님이 종단간 암호화를 켰습니다 (%2$s) + %s님이 방을 업그레이드했습니다. + + %1$s님이 VoIP 회의를 요청했습니다 + VoIP 회의가 시작했습니다 + VoIP 회의가 끝났습니다 + + (아바타도 변경됨) + %1$s님이 방 이름을 삭제했습니다 + %1$s님이 방 주제를 삭제했습니다 + 메시지가 삭제되었습니다 + 메시지가 %1$s님에 의해 삭제되었습니다 + 메시지가 삭제되었습니다 [이유: %1$s] + 메시지가 %1$s님에 의해 삭제되었습니다 [이유: %2$s] + %1$s님이 프로필 %2$s을(를) 업데이트했습니다 + %1$s님이 %2$s님에게 방 초대를 보냈습니다 + %1$s님이 %2$s의 초대를 수락했습니다 + + ** 암호를 복호화할 수 없음: %s ** + 발신인의 기기에서 이 메시지의 키를 보내지 않았습니다. + + 검열할 수 없습니다 + 메시지를 보낼 수 없습니다 + + 사진 업로드에 실패했습니다 + + 네트워크 오류 + Matrix 오류 + + 현재 빈 방에 다시 들어갈 수 없습니다. + + 암호화된 메시지 + + 이메일 주소 + 전화번호 + + %s에서 초대함 + 방 초대 + + %1$s님과 %2$s님 + + + %1$s님 외 %2$d명 + + + 빈 방 + + 초기 동기화: +\n계정 가져오는 중… + 초기 동기화: +\n암호 가져오는 중 + 초기 동기화: +\n방 가져오는 중 + 초기 동기화: +\n들어간 방 가져오는 중 + 초기 동기화: +\n초대받은 방 가져오는 중 + 초기 동기화: +\n떠난 방 가져오는 중 + 초기 동기화: +\n커뮤니티 가져오는 중 + 초기 동기화: +\n계정 데이터 가져오는 중 + + 메시지 보내는 중… + 전송 대기 열 지우기 + + %1$s님이 %2$s님에게 방에 참가하라고 보낸 초대를 취소했습니다 밝은 테마 어두운 테마 검정 테마 diff --git a/vector/src/main/res/values-lt/strings.xml b/vector/src/main/res/values-lt/strings.xml index a6b3daec93..db63c9385a 100644 --- a/vector/src/main/res/values-lt/strings.xml +++ b/vector/src/main/res/values-lt/strings.xml @@ -1,2 +1,35 @@ - \ No newline at end of file + + %1$s: %2$s + %1$s išsiuntė vaizdą. + %1$s išsiuntė lipduką. + %s pakvietimas + Jūs prisijungėte prie kambario + %1$s prisijungė prie kambario + %1$s pakvietė jus + Jūs pakvietėte %1$s + %1$s pakvietė %2$s + Jūs sukūrėte diskusiją + %1$s sukūrė diskusiją + Jūs sukūrėte kambarį + %1$s sukūrė kambarį + Jūsų pakvietimas + Jūs išsiuntėte lipduką. + Jūs išsiuntėte vaizdą. + Jūs atšaukėte %1$s pakvietimą + %1$s atšaukė %2$s pakvietimą + Jūs užblokavote %1$s + %1$s užblokavo %2$s + Jūs atblokavote %1$s + %1$s atblokavo %2$s + Jūs išmetėte %1$s + %1$s išmetė %2$s + Jūs atmetėte pakvietimą + %1$s atmetė pakvietimą + Jūs išėjote iš kambario + %1$s išėjo iš kambario + Jūs išėjote iš kambario + %1$s išėjo iš kambario + Jūs prisijungėte + %1$s prisijungė + \ No newline at end of file diff --git a/vector/src/main/res/values-lv/strings.xml b/vector/src/main/res/values-lv/strings.xml index 06b9ce4c02..1ee9e4ee61 100644 --- a/vector/src/main/res/values-lv/strings.xml +++ b/vector/src/main/res/values-lv/strings.xml @@ -1,5 +1,246 @@ + %1$s: %2$s + %1$s nosūtīja attēlu. + Uzaicinājums no %s + %1$s uzaicināja %2$s + %1$s uzaicināja jūs + %1$s pievienojās + %1$s pameta istabu + %1$s noraidīja uzaicinājumu + %1$s padzina %2$s + %1$s atcēla pieejas liegumu %2$s + %1$s liedza pieeju %2$s + %1$s atsauca %2$s uzaicinājumu + %1$s nomainīja avataru + %1$s uzstādīja parādāmo vārdu uz %2$s + %1$s nomainīja parādāmo vārdu no %2$s uz %3$s + %1$s dzēsa savu parādāmo vārdu (iepriekš %2$s) + %1$s nomainīja tematu uz %2$s + %1$s nomainīja istabas nosaukumu uz %2$s + %s veica video zvanu. + %s veica audio zvanu. + %s atbildēja uz zvanu. + %s beidza zvanu. + %1$s padarīja istabas turpmāko ziņu vēsturi redzamu %2$s + visi istabas biedri no brīža, kad tika uzaicināti. + visi istabas biedri no brīža, kad tika pievienojušies. + visi istabas biedri. + ikviens. + nezināms (%s). + %1$s ieslēdza pilnīgu šifrēšanu (%2$s) + %1$s pieprasīja VoIP konferenci + VoIP konference sākās + VoIP konference beidzās + (arī avatars tika nomainīts) + %1$s dzēsa istabas nosaukumu + %1$s izdzēsa istabas tematu + %1$s atjaunoja savu profilu %2$s + %1$s nosūtīja %2$s uzaicinājumu pievienoties istabai + %1$s pieņēma uzaicinājumu %2$s + ** Neizdodas atšifrēt: %s ** + Sūtītāja ierīce mums nav nenosūtījusi atslēgas priekš šīs ziņas. + Nevarēja rediģēt + Neizdodas nosūtīt ziņu + Neizdevās augšuplādēt attēlu + Tīkla kļūda + Matrix kļūda + Šobrīd nav iespējams atkārtoti pievienoties tukšai istabai. + Šifrēta ziņa + Epasta adrese + Telefona numurs + Uzaicinājums no %s + Uzaicinājums uz istabu + %1$s un %2$s + Tukša istaba + + %1$s un 1 cits + %1$s un %2$d citi + %1$s un %2$d citu + + Jūs nomainījāt savu parādāmo vārdu no %1$s uz %2$s + Jūs nomainījāt savu parādāmo vārdu uz %1$s + Jūs nomainījāt savu avataru + Jūs atsaucāt %1$s uzaicinājumu + Jūs liedzāt pieeju %1$s + Jūs atcēlāt pieejas liegumu %1$s + Jūs padzināt %1$s + Jūs noraidījāt uzaicinājumu + Jūs pametāt istabu + %1$s pameta istabu + Jūs pametāt istabu + Jūs pievienojāties + %1$s pievienojās istabai + Jūs pievienojāties istabai + Jūs uzaicinājāt %1$s + Jūs izveidojāt diskusiju + %1$s izveidoja diskusiju + Jūs izveidojāt istabu + %1$s izveidoja istabu + Jūsu uzaicinājums + Jūs nosūtījāt uzlīmi. + %1$s nosūtīja uzlīmi. + Jūs nosūtījāt attēlu. + Jūs ieslēdzāt pilnīgu šifrēšanu (neatpazīts algoritms %1$s). + %1$s ieslēdza pilnīgu šifrēšanu (neatpazīts algoritms %2$s). + Jūs ieslēdzāt pilnīgu šifrēšanu. + %1$s ieslēdza pilnīgu šifrēšanu. + Jūs esat novērsis iespēju viesiem pievienoties istabai. + %1$s ir novērsis iespēju viesiem pievienoties istabai. + Jūs esat novērsis iespēju viesiem pievienoties istabai. + %1$s ir novērsis iespēju viesiem pievienoties istabai. + Jūs esat atļāvis viesiem pievienoties istabai. + %1$s ir atļāvis viesiem pievienoties istabai. + Jūs esat atļāvis viesiem pievienoties istabai. + %1$s ir atļāvis viesiem pievienoties istabai. + Jūs nomainījāt adreses šai istabai. + %1$s nomainīja adreses šai istabai. + Jūs nomainījāt galveno un alternatīvās adreses šai istabai. + %1$s nomainīja galveno un alternatīvās adreses šai istabai. + Jūs nomainījāt alternatīvās adreses šai istabai. + %1$s nomainīja alternatīvās adreses šai istabai. + + Jūs izdzēsāt šīs istabas alternatīvo adresi %1$s. + Jūs izdzēsāt šīs istabas alternatīvās adreses %1$s. + Jūs izdzēsāt šīs istabas alternatīvās adreses %1$s. + + + %1$s izdzēsa šīs istabas alternatīvo adresi %2$s. + %1$s izdzēsa šīs istabas alternatīvās adreses %2$s. + %1$s izdzēsa šīs istabas alternatīvās adreses %2$s. + + + Jūs pievienojāt šīs istabas alternatīvo adresi %1$s. + Jūs pievienojāt šīs istabas alternatīvās adreses %1$s. + Jūs pievienojāt šīs istabas alternatīvās adreses %1$s. + + + %1$s pievienoja šīs istabas alternatīvo adresi %2$s. + %1$s pievienoja šīs istabas alternatīvās adreses %2$s. + %1$s pievienoja šīs istabas alternatīvās adreses %2$s. + + Jūs izdzēsāt šis istabas galveno adresi. + %1$s izdzēsa šis istabas galveno adresi. + Jūs iestatījāt %1$s kā šis istabas galveno adresi. + %1$s iestatīja %2$s kā šis istabas galveno adresi. + Jūs pievienojāt %1$s un izdzēsāt %2$s kā šīs istabas adreses. + %1$s pievienoja %2$s un izdzēsa %3$s kā šīs istabas adreses. + + Jūs izdzēsāt %1$s kā šīs istabas adresi. + Jūs izdzēsāt %1$s kā šīs istabas adreses. + Jūs izdzēsāt %1$s kā šīs istabas adreses. + + + %1$s izdzēsa %2$s kā šīs istabas adresi. + %1$s izdzēsa %2$s kā šīs istabas adreses. + %1$s izdzēsa %2$s kā šīs istabas adreses. + + + Jūs pievienojāt %1$s kā šīs istabas adresi. + Jūs pievienojāt %1$s kā šīs istabas adreses. + Jūs pievienojāt %1$s kā šīs istabas adreses. + + + %1$s pievienoja %2$s kā šīs istabas adresi. + %1$s pievienoja %2$s kā šis istabas adreses. + %1$s pievienoja %2$s kā šīs istabas adreses. + + Jūs atsaucāt %1$s uzaicinājumu. Iemesls: %2$s + %1$s atsauca uzaicinājumu %2$s. Iemesls: %3$s + Jūs pieņēmāt uzaicinājumu %1$s. Iemesls: %2$s + %1$s pieņēma uzaicinājumu %2$s. Iemesls: %3$s + Jūs atsaucāt uzaicinājumu %1$s pievienoties istabai. Iemesls: %2$s + %1$s atsauca uzaicinājumu %2$s pievienoties istabai. Iemesls: %3$s + Jūs nosūtījāt uzaicinājumu %1$s pievienoties istabai. Iemesls: %2$s + %1$s nosūtīja uzaicinājumu %2$s pievienoties istabai. Iemesls: %3$s + Jūs liedzāt pieeju %1$s. Iemesls: %2$s + %1$s liedza pieeju %2$s. Iemesls: %3$s + Jūs atcēlāt pieejas liegumu %1$s. Iemesls: %2$s + %1$s atcēla %2$s pieejas liegumu. Iemesls: %3$s + Jūs padzināt %1$s. Iemesls: %2$s + %1$s padzina %2$s. Iemesls: %3$s + Jūs noraidījāt uzaicinājumu. Iemesls: %1$s + %1$s noraidīja uzaicinājumu. Iemesls: %2$s + Jūs izgājāt. Iemesls: %1$s + %1$s izgāja. Iemels: %2$s + Jūs pametāt istabu. Iemesls: %1$s + %1$s pameta istabu. Iemesls: %2$s + Jūs pievienojāties. Iemesls: %1$s + %1$s pievienojās. Iemesls: %2$s + Jūs pievienojāties istabai. Iemesls: %1$s + %1$s pievienojās istabai. Iemesls: %2$s + %1$s uzaicināja jūs. Iemesls: %2$s + Jūs uzaicinājāt %1$s. Iemesls: %2$s + %1$s uzaicināja %2$s. Iemesls: %3$s + Jūsu uzaicinājums. Iemesls: %1$s + %1$s uzaicinājums. Iemesls: %2$s + Notīrīt sūtīšanas rindu + Sūta ziņu… + Sākotnējā sinhronizācija: +\nImportē konta datus + Sākotnējā sinhronizācija: +\nImportē kopienas + Sākotnējā sinhronizācija: +\nImportē pamestās istabas + Sākotnējā sinhronizācija: +\nImportē istabas, uz kurām uzaicināts + Sākotnējā sinhronizācija: +\nImportē istabas, kurās ieiets + Sākotnējā sinhronizācija: +\nImportē istabas + Sākotnējā sinhronizācija: +\nImportē kriptogrāfiju + Sākotnējā sinhronizācija: +\nImportē kontu… + Tukša istaba (bija %s) + + %1$s, %2$s, %3$s un %4$d citi + %1$s, %2$s, %3$s un %4$d cits + %1$s, %2$s, %3$s un %4$d citi + + %1$s, %2$s, %3$s un %4$s + %1$s, %2$s un %3$s + %1$s no %2$s uz %3$s + %1$s nomainīja %2$s pieejas līmeni. + Jūs nomainījāt %1$s pieejas līmeni. + Pielāgots + Pielāgots (%1$d) + Noklusējuma + Moderators + Administrators + Jūs pieņēmāt uzaicinājumu %1$s + Jūs atsaucāt uzaicinājumu %1$s + %1$s atsauca uzaicinājumu %2$s + Jūs atsaucāt uzaicinājumu %1$s pievienoties istabai + %1$s atsauca uzaicinājumu %2$s pievienoties istabai + Jūs uzaicinājāt %1$s + %1$s uzaicināja %2$s + Jūs nosūtījāt %1$s uzaicinājumu pievienoties istabai + Jūs atjaunojāt savu profilu %1$s + %1$s izdzēsa ziņu [iemesls: %2$s] + Ziņa izdzēsta [iemesls: %1$s] + %1$s izdzēsa ziņu + Ziņa izdzēsta + Jūs izdzēsāt istabas avataru + %1$s izdzēsa istabas avataru + Jūs izdzēsāt istabas tematu + Jūs dzēsāt istabas nosaukumu + Jūs pieprasījāt VoIP konferenci + Jūs ieslēdzāt pilnīgu šifrēšanu (%1$s) + Jūs padarījāt turpmākās ziņas redzamas %1$s + %1$s padarīja turpmākās ziņas redzamas %2$s + Jūs padarījāt istabas turpmāko ziņu vēsturi redzamu %1$s + Jūs beidzāt zvanu. + Jūs atbildējāt uz zvanu. + Jūs nosūtījāt datus zvana uzsākšanai. + %s nosūtīja datus zvana uzsākšanai. + Jūs veicāt balss zvanu. + Jūs veicāt video zvanu. + Jūs nomainījāt istabas nosaukumu uz %1$s + Jūs nomainījāt istabas avataru + %1$s nomainīja istabas avataru + Jūs nomainījāt tematu uz %1$s + Jūs dzēsāt savu parādāmo vārdu (iepriekš %1$s) Ziņas Istaba Iestatījumi diff --git a/matrix-sdk-android/src/main/res/values-nb/strings.xml b/vector/src/main/res/values-nb/strings.xml similarity index 100% rename from matrix-sdk-android/src/main/res/values-nb/strings.xml rename to vector/src/main/res/values-nb/strings.xml diff --git a/vector/src/main/res/values-nl/strings.xml b/vector/src/main/res/values-nl/strings.xml index 40f604eb1d..66a09447a5 100644 --- a/vector/src/main/res/values-nl/strings.xml +++ b/vector/src/main/res/values-nl/strings.xml @@ -1,5 +1,149 @@ + %1$s: %2$s + %1$s heeft een afbeelding gestuurd. + + Uitnodiging van %s + %1$s heeft %2$s uitgenodigd + %1$s heeft u uitgenodigd + %1$s neemt nu deel aan het gesprek + %1$s heeft het gesprek verlaten + %1$s heeft de uitnodiging geweigerd + %1$s heeft %2$s uit het gesprek verwijderd + %1$s heeft %2$s ontbannen + %1$s heeft %2$s verbannen + %1$s heeft de uitnodiging van %2$s ingetrokken + %1$s heeft zijn/haar avatar aangepast + %1$s heeft zijn/haar naam aangepast naar %2$s + %1$s heeft zijn/haar naam aangepast van %2$s naar %3$s + %1$s heeft zijn/haar naam verwijderd (%2$s) + %1$s heeft het onderwerp veranderd naar: %2$s + %1$s heeft de gespreksnaam veranderd naar: %2$s + %s heeft een video-oproep gemaakt. + %s heeft een spraakoproep gemaakt. + %s heeft de oproep beantwoord. + %s heeft opgehangen. + %1$s heeft de toekomstige gespreksgeschiedenis zichtbaar gemaakt voor %2$s + alle deelnemers aan het gesprek, vanaf het punt dat ze zijn uitgenodigd. + alle deelnemers aan het gesprek, vanaf het punt dat ze zijn toegetreden. + alle deelnemers aan het gesprek. + iedereen. + onbekend (%s). + %1$s heeft eind-tot-eind-versleuteling aangezet (%2$s) + + %1$s heeft een VoIP-vergadering aangevraagd + VoIP-vergadering gestart + VoIP-vergadering gestopt + + (avatar is ook veranderd) + %1$s heeft de gespreksnaam verwijderd + %1$s heeft het gespreksonderwerp verwijderd + %1$s heeft zijn/haar profiel %2$s bijgewerkt + %1$s heeft een uitnodiging naar %2$s gestuurd om het gesprek toe te treden + %1$s heeft de uitnodiging voor %2$s aanvaard + + ** Kan niet ontsleutelen: %s ** + Het apparaat van de afzender heeft geen sleutels voor dit bericht gestuurd. + + + Kon niet verwijderd worden + Kan bericht niet verzenden + + Uploaden van de afbeelding mislukt + + + Netwerkfout + Matrix-fout + + + + + + + Het is momenteel niet mogelijk om een leeg gesprek opnieuw toe te treden. + + Versleuteld bericht + + + E-mailadres + Telefoonnummer + + %1$s heeft een sticker gestuurd. + + + Uitnodiging van %s + Gespreksuitnodiging + %1$s en %2$s + Leeg gesprek + + + %1$s en 1 andere + %1$s en %2$d anderen + + + + Bericht verwijderd + Bericht verwijderd door %1$s + Bericht verwijderd [reden: %1$s] + Bericht verwijderd door %1$s [reden: %2$s] + + Initiële synchronisatie: +\nAccount wordt geïmporteerd… + Initiële synchronisatie: +\nCrypto wordt geïmporteerd + Initiële synchronisatie: +\nGesprekken worden geïmporteerd + Initiële synchronisatie: +\nDeelgenomen gesprekken worden geïmporteerd + Initiële synchronisatie: +\nUitgenodigde gesprekken worden geïmporteerd + Initiële synchronisatie: +\nVerlaten gesprekken worden geïmporteerd + Initiële synchronisatie: +\nGemeenschappen worden geïmporteerd + Initiële synchronisatie: +\nAccountgegevens worden geïmporteerd + + %s heeft dit gesprek opgewaardeerd. + + Bericht wordt verstuurd… + Uitgaande wachtrij legen + + %1$s heeft de uitnodiging voor %2$s om het gesprek toe te treden ingetrokken + Uitnodiging van %1$s. Reden: %2$s + %1$s heeft %2$s uitgenodigd. Reden: %3$s + %1$s heeft u uitgenodigd. Reden: %2$s + %1$s neemt nu deel. Reden: %2$s + %1$s is weggegaan. Reden: %2$s + %1$s heeft de uitnodiging geweigerd. Reden: %2$s + %1$s heeft %2$s verwijderd. Reden: %3$s + %1$s heeft %2$s ontbannen. Reden: %3$s + %1$s heeft %2$s verbannen. Reden: %3$s + %1$s heeft %2$s een uitnodiging voor het gesprek gestuurd. Reden: %3$s + %1$s heeft de uitnodiging voor %2$s ingetrokken. Reden: %3$s + %1$s heeft de uitnodiging voor %2$s aanvaard. Reden: %3$s + %1$s heeft de uitnodiging van %2$s ingetrokken. Reden: %3$s + + + %1$s heeft %2$s als gespreksadres toegevoegd. + %1$s heeft %2$s als gespreksadressen toegevoegd. + + + + %1$s heeft %2$s als gespreksadres verwijderd. + %1$s heeft %3$s als gespreksadressen verwijderd. + + + %1$s heeft %2$s als gespreksadres toegevoegd en %3$s verwijderd. + + %1$s heeft het hoofdadres voor dit gesprek ingesteld op %2$s. + %1$s heeft het hoofdadres voor dit gesprek verwijderd. + + %1$s heeft gasten de toegang tot het gesprek verleend. + %1$s heeft gasten de toegang tot het gesprek verhinderd. + + %1$s heeft eind-tot-eind-versleuteling ingeschakeld. + %1$s heeft eind-tot-eind-versleuteling ingeschakeld (onbekend algoritme %2$s). Berichten Gesprek diff --git a/vector/src/main/res/values-nn/strings.xml b/vector/src/main/res/values-nn/strings.xml index c4c5d7d9a9..6ff80132e7 100644 --- a/vector/src/main/res/values-nn/strings.xml +++ b/vector/src/main/res/values-nn/strings.xml @@ -1,5 +1,70 @@ + Kryptert melding + %1$s: %2$s + %1$s sende eit bilæte. + %1$s sende eit klistremerke. + %s si innbjoding + %1$s inviterte %2$s + %1$s inviterte deg + %1$s kom inn + %1$s forlot rommet + %1$s sa nei til innbjodingi + %1$s sparka %2$s + %1$s slapp %2$s inn att + %1$s stengde %2$s ute + %1$s tok attende %2$s si innbjoding + %1$s byta avataren sin + %1$s sette visingsnamnet sitt som %2$s + %1$s byta visingsnamnet sitt frå %2$s til %3$s + %1$s tok burt visingsnamnet sitt (%2$s) + %1$s gjorde emnet til: %2$s + %1$s gjorde romnamnet til: %2$s + %s starta ei videosamtala. + %s starta ein talesamtale. + %s tok røyret. + %s la på røyret. + %1$s gjorde den framtidige romsoga synleg for %2$s + alle rommedlemmar, frå då dei vart invitert inn. + alle rommedlemmar, frå då dei kom inn. + alle rommedlemmar. + kven som heldst. + uvisst (%s). + %1$s skrudde ende-til-ende-kryptering på (%2$s) + %1$s bad um ei VoIP-gruppasamtala + VoIP-gruppasamtala er starta + VoIP-gruppasamtala er ferdug + (avataren vart au byta) + %1$s tok burt romnamnet + %1$s tok burt romemnet + %1$s gjorde um på skildringi si %2$s + %1$s inviterte %2$s til rommet + %1$s sa ja til innbjodingi til %2$s + ** Fekk ikkje til å dekryptera: %s ** + Avsendareiningi hev ikkje sendt oss nyklane fyr denna meldingi. + Kunde ikkje gjera um + Fekk ikkje til å senda meldingi + Fekk ikkje til å lasta biletet upp + Noko gjekk gale med netverket + Noko gjekk gale med Matrix + Det lèt seg fyrebils ikkje gjera å fara inn att i eit tomt rom. + Epostadresse + Telefonnummer + Innbjoding frå %s + Rominnbjoding + %1$s og %2$s + + %1$s og 1 til + %1$s og %2$d til + + Tomt rom + Ei melding vart stroki + %1$s strauk meldingi + Meldingi vart stroki [av di: %1$s] + %1$s strauk meldingi [av di: %2$s] + %s oppgraderte rommet. + Nullstill sendingskø + %1$s forlot rommet. Grunn: %2$s Lyst tema Mørkt tema Svart tema diff --git a/vector/src/main/res/values-pl/strings.xml b/vector/src/main/res/values-pl/strings.xml index 9748bcdf6b..dae44ade8a 100644 --- a/vector/src/main/res/values-pl/strings.xml +++ b/vector/src/main/res/values-pl/strings.xml @@ -1,5 +1,105 @@ + %1$s: %2$s + %1$s wysłał(a) zdjęcie. + + Zaproszenie od %s + %1$s zaprosił(a) %2$s + %1$s zaprosił(a) Cię + %1$s dołączył(a) + %1$s opuścił(a) + %1$s odrzucił(a) zaproszenie + %1$s wyrzucił(a) %2$s + %1$s odblokował(a) %2$s + %1$s zablokował(a) %2$s + %1$s zmienił(a) awatar + %1$s zmienił(a) wyświetlaną nazwę na %2$s + %1$s zmienił(a) wyświetlaną nazwę z %2$s na %3$s + %1$s usunął(-ęła) swoją wyświetlaną nazwę (%2$s) + %1$s zmienił(a) temat na: %2$s + Nie można wysłać wiadomości + + Przesyłanie zdjęcia nie powiodło się + + Błąd sieci + Błąd Matrixa + + Wiadomość zaszyfrowana + + Adres e-mail + Numer telefonu + + wszyscy członkowie pokoju. + wszyscy. + %1$s zmienił(a) nazwę pokoju na: %2$s + %s zakończył(a) rozmowę. + %1$s usunął(-ęła) nazwę pokoju + %1$s usunął(-ęła) temat pokoju + %1$s wysłał(a) naklejkę. + + %1$s włączył(a) szyfrowanie end-to-end (%2$s) + + %1$s wycofał(a) zaproszenie %2$s + %s odebrał(a) połączenie. + (awatar też został zmieniony) + + Zaproszenie od %s + Zaproszenie do pokoju + %1$s i %2$s + Pusty pokój + + + %1$s i jeden inny + %1$s i kilku innych + %1$s i %2$d innych + + + + ** Nie można odszyfrować: %s ** + %s wykonał(a) rozmowę wideo. + %s wykonał(a) połączenie głosowe. + %1$s uczynił(a) przyszłą historię pokoju widoczną dla %2$s + wszyscy członkowie pokoju, od momentu w którym zostali zaproszeni. + wszyscy członkowie pokoju, od momentu w którym dołączyli. + nieznane (%s). + %1$s zażądał(a) grupowego połączenia VoIP + Rozpoczęto grupowe połączenie głosowe VoIP + Zakończono grupowe połączenie głosowe VoIP + + %1$s zaktualizował swój profil %2$s + %1$s wysłał(a) zaproszenie do %2$s aby dołączył(a) do tego pokoju + %1$s zaakceptował(a) zaproszenie dla %2$s + + Urządzenie nadawcy nie wysłało nam kluczy do tej wiadomości. + + Nie można zredagować + Obecnie nie jest możliwe ponowne dołączenie do pustego pokoju. + + Wiadomość usunięta + Wiadomość usunięta przez %1$s + Wiadomość usunięta [powód: %1$s] + Wiadomość usunięta przez %1$s [powód: %2$s] + %s zakutalizował(a) ten pokój. + + Synchronizacja początkowa: +\nImportowanie konta… + Synchronizacja początkowa: +\nImportowanie kryptografii + Synchronizacja początkowa: +\nImportowanie Pokoi + Synchronizacja początkowa: +\nImportowanie dołączonych Pokoi + Synchronizacja początkowa: +\nImportowanie zaproszonych Pokoi + Synchronizacja początkowa: +\nImportowanie opuszczonych Pokoi + Synchronizacja początkowa: +\nImportowanie Społeczności + Synchronizacja początkowa: +\nImportowanie danych Konta + + Wysyłanie wiadomości… + Wyczyść kolejkę wysyłania Wiadomości Pokój Ustawienia diff --git a/vector/src/main/res/values-pt-rBR/strings.xml b/vector/src/main/res/values-pt-rBR/strings.xml index 48a4dae763..7148636729 100644 --- a/vector/src/main/res/values-pt-rBR/strings.xml +++ b/vector/src/main/res/values-pt-rBR/strings.xml @@ -1,5 +1,276 @@ + %1$s: %2$s + %1$s enviou uma foto. + convite de %s + %1$s convidou %2$s + %1$s convidou você + %1$s entrou na sala + %1$s saiu da sala + %1$s recusou o convite + %1$s removeu %2$s + %1$s removeu o banimento de %2$s + %1$s baniu %2$s + %1$s desfez o convite a %2$s + %1$s alterou a foto de perfil + %1$s definiu o nome e sobrenome como %2$s + %1$s alterou o nome e sobrenome de %2$s para %3$s + %1$s removeu o nome e sobrenome (era %2$s) + %1$s alterou a descrição para: %2$s + %1$s alterou o nome da sala para: %2$s + %s iniciou uma chamada de vídeo. + %s iniciou uma chamada de voz. + %s aceitou a chamada. + %s encerrou a chamada. + %1$s deixou o histórico futuro da sala visível para %2$s + todos os participantes da sala, a partir do momento em que foram convidados. + todos os participantes da sala, a partir do momento em que entraram nela. + todos os participantes da sala. + qualquer pessoa. + desconhecido (%s). + %1$s ativou a criptografia de ponta a ponta (%2$s) + %1$s deseja iniciar uma chamada em grupo + Chamada em grupo iniciada + Chamada em grupo encerrada + (a foto de perfil também foi alterada) + %1$s removeu o nome da sala + %1$s removeu a descrição da sala + %1$s atualizou o perfil %2$s + %1$s enviou um convite para %2$s entrar na sala + %1$s aceitou o convite para %2$s + ** Não foi possível descriptografar: %s ** + O aparelho do remetente não nos enviou as chaves para esta mensagem. + + Não foi possível redigir + Não foi possível enviar a mensagem + O envio da imagem falhou + + Erro de conexão à internet + Erro no servidor Matrix + + + + + Atualmente, não é possível entrar novamente em uma sala vazia. + Mensagem criptografada + + Endereço de e-mail + Número de telefone + %1$s enviou uma figurinha. + + Convite de %s + Convite para sala + %1$s e %2$s + Sala vazia + + %1$s e 1 outro + %1$s e %2$d outros + + Você enviou uma foto. + Você enviou uma figurinha. + Seu convite + %1$s criou a sala + Você criou a sala + Você convidou %1$s + Você entrou na sala + Você saiu da sala + Você recusou o convite + Você removeu %1$s + Você removeu o banimento de %1$s + Você baniu %1$s + Você desfez o convite a %1$s + Você alterou a sua foto de perfil + Você definiu o seu nome e sobrenome como %1$s + Você alterou o seu nome e sobrenome de %1$s para %2$s + Você removeu o seu nome e sobrenome (era %1$s) + Você alterou a descrição para: %1$s + %1$s alterou a foto da sala + Você alterou a foto da sala + Você alterou o nome da sala para: %1$s + Você iniciou uma chamada de vídeo. + Você iniciou uma chamada de voz. + %s enviou dados para configurar a chamada. + Você enviou dados para configurar a chamada. + Você aceitou a chamada. + Você encerrou a chamada. + Você deixou o histórico futuro da sala visível para %1$s + Você ativou a criptografia de ponta a ponta (%1$s) + %s atualizou esta sala. + Você atualizou esta sala. + Você solicitou uma chamada em grupo + Você removeu o nome da sala + Você removeu a descrição da sala + %1$s removeu a foto da sala + Você removeu a foto da sala + Mensagem apagada + Mensagem apagada por %1$s + Mensagem apagada [motivo: %1$s] + Mensagem apagada por %1$s [motivo: %2$s] + Você atualizou o seu perfil %1$s + Você enviou um convite para %1$s entrar na sala + %1$s cancelou o convite a %2$s para entrar na sala + Você cancelou o convite a %1$s para entrar na sala + Você aceitou o convite para %1$s + %1$s adicionou o widget %2$s + Você adicionou o widget %1$s + %1$s removeu o widget %2$s + Você removeu o widget %1$s + %1$s editou o widget %2$s + Você editou o widget %1$s + Administrador + Moderador + Padrão + Personalizado (%1$d) + Personalizado + Você alterou o nível de permissão de %1$s. + %1$s alterou o nível de permissão de %2$s. + %1$s de %2$s para %3$s + Primeira sincronização: +\nImportando a conta… + Primeira sincronização: +\nImportando as chaves de criptografia + Primeira sincronização: +\nImportando as salas + Primeira sincronização: +\nImportando as salas em que você entrou + Primeira sincronização: +\nImportando as salas em que você foi convidado + Primeira sincronização: +\nImportando as salas em que você saiu + Primeira sincronização: +\nImportando as comunidades + Primeira sincronização: +\nImportando os dados da conta + Enviando mensagem… + Limpar a fila de envio + Convite de %1$s. Motivo: %2$s + O seu convite. Motivo: %1$s + %1$s convidou %2$s. Motivo: %3$s + Você convidou %1$s. Motivo: %2$s + %1$s convidou você. Motivo: %2$s + %1$s entrou na sala. Motivo: %2$s + Você entrou na sala. Motivo: %1$s + %1$s saiu da sala. Motivo: %2$s + Você saiu da sala. Motivo: %1$s + %1$s recusou o convite. Motivo: %2$s + Você recusou o convite. Motivo: %1$s + %1$s removeu %2$s. Motivo: %3$s + Você removeu %1$s. Motivo: %2$s + %1$s removeu o banimento de %2$s. Motivo: %3$s + Você removeu o banimento de %1$s. Motivo: %2$s + %1$s baniu %2$s. Motivo: %3$s + Você baniu %1$s. Motivo: %2$s + %1$s enviou um convite para %2$s entrar na sala. Motivo: %3$s + Você enviou um convite para %1$s entrar na sala. Motivo: %2$s + %1$s revogou o convite para %2$s entrar na sala. Motivo: %3$s + Você revogou o convite para %1$s entrar na sala. Motivo: %2$s + %1$s aceitou o convite para %2$s. Motivo: %3$s + Você aceitou o convite para %1$s. Motivo: %2$s + %1$s desfez o convite de %2$s. Motivo: %3$s + Você desfez o convite de %1$s. Motivo: %2$s + + %1$s adicionou %2$s como um endereço desta sala. + %1$s adicionou %2$s como endereços desta sala. + + + Você adicionou %1$s como um endereço desta sala. + Você adicionou %1$s como endereços desta sala. + + + %1$s removeu %2$s como um endereço desta sala. + %1$s removeu %2$s como endereços desta sala. + + + Você removeu %1$s como um endereço desta sala. + Você removeu %1$s como endereços desta sala. + + %1$s adicionou %2$s e removeu %3$s como endereços desta sala. + Você adicionou %1$s e removeu %2$s como endereços desta sala. + %1$s definiu o endereço principal desta sala como %2$s. + Você definiu o endereço principal desta sala como %1$s. + %1$s removeu o endereço principal desta sala. + Você removeu o endereço principal desta sala. + %1$s permitiu que convidados entrem na sala. + Você permitiu que convidados entrem na sala. + %1$s impediu que convidados entrassem na sala. + Você impediu que convidados entrassem na sala. + %1$s ativou a criptografia de ponta a ponta. + Você ativou a criptografia de ponta a ponta. + %1$s ativou a criptografia de ponta a ponta (algoritmo não reconhecido %2$s). + Você ativou a criptografia de ponta a ponta (algoritmo não reconhecido %1$s). + Você impediu que desconhecidos entrem na sala. + %1$s impediu que desconhecidos entrem na sala. + Você permitiu que desconhecidos entrem aqui. + %1$s permitiu que desconhecidos entrem aqui. + Você saiu. Motivo: %1$s + %1$s saiu. Motivo: %2$s + Você entrou. Motivo: %1$s + %1$s entrou. Motivo: %2$s + Você cancelou o convite para %1$s + %1$s cancelou o convite para %2$s + Você convidou %1$s + %1$s convidou %2$s + Você atualizou esta sala. + %s atualizou esta sala. + Você definiu que as mensagens enviadas a partir do presente momento estarão disponíveis para %1$s + %1$s definiu que as mensagens enviadas a partir do presente momento estarão disponíveis para %2$s + Você saiu da sala + %1$s saiu da sala + Você entrou + %1$s entrou + Você criou a sala + %1$s criou a sala + Sala vazia (era %s) + + %1$s, %2$s, %3$s e %4$d outro + %1$s, %2$s, %3$s e %4$d outros + + %1$s, %2$s, %3$s e %4$s + %1$s, %2$s e %3$s + 🎉 Todos os servidores estão proibidos de participar! Esta sala não pode mais ser usada. + Nenhuma alteração. + • Servidores correspondentes aos IP literais agora estão banidos. + • Servidores correspondentes aos IP literais agora estão permitidos. + • Servidores correspondentes à %s foram removidos da lista de permitidos. + • Servidores correspondentes à %s agora são permitidos. + • Servidores correspondente à %s foram removidos da lista de banidos. + • Servidores correspondentes à %s foram banidos. + Você alterou a lista de controle de acesso (ACL) do servidor para esta sala. + %s alterou a lista de controle de acesso (ACL) do servidor para esta sala. + • Servidores correspondentes aos IP literais estão banidos. + • Servidores correspondentes aos IP literais estão permitidos. + • Servidores correspondentes à %s estão permitidos. + • Servidores correspondentes à %s estão banidos. + Você definiu a lista de controle de acesso (ACL) do servidor para esta sala. + %s definiu a lista de controle de acesso (ACL) do servidor para esta sala. + Você alterou os endereços alternativos desta sala. + %1$s alterou os endereços alternativos desta sala. + + Você removeu o endereço alternativo %1$s para esta sala. + Você removeu os endereços alternativos %1$s para esta sala. + + + %1$s removeu o endereço alternativo %2$s para esta sala. + %1$s removeu os endereços alternativos %2$s para esta sala. + + + Você adicionou o endereço alternativo %1$s para esta sala. + Você adicionou os endereços alternativos %1$s para esta sala. + + + %1$s adicionou o endereço alternativo %2$s para esta sala. + %1$s adicionou os endereços alternativos %2$s para esta sala. + + Você alterou os endereços desta sala. + %1$s alterou os endereços desta sala. + Você alterou os endereços principal e alternativos desta sala. + %1$s alterou os endereços principal e alternativos desta sala. + Você modificou a chamada de vídeo + Chamada de vídeo modificada por %1$s + Você encerrou a chamada de vídeo + Chamada de vídeo encerrada por %1$s + Você começou uma chamada de vídeo + Chamada de vídeo iniciada por %1$s Mensagens Sala diff --git a/vector/src/main/res/values-pt/strings.xml b/vector/src/main/res/values-pt/strings.xml index 3db77cf60f..7fe8a9730d 100644 --- a/vector/src/main/res/values-pt/strings.xml +++ b/vector/src/main/res/values-pt/strings.xml @@ -1,5 +1,88 @@ + %1$s: %2$s + %1$s enviou uma imagem. + + convite de %s + %1$s convidou %2$s + %1$s convidou-o + %1$s entrou + %1$s saiu + %1$s recusou o convite + %1$s expulsou %2$s + %1$s des-baniu %2$s + %1$s baniu %2$s + %1$s cancelou o convite de %2$s + %1$s mudou o seu avatar + %1$s definiu seu nome público como %2$s + %1$s alterou seu nome público de %2$s para %3$s + %1$s apagou o seu nome público (%2$s) + %1$s alterou o tópico desta sala para: %2$s + %1$s alterou o nome desta sala para: %2$s + %s iniciou uma chamada de vídeo. + %s iniciou uma chamada de voz. + %s respondeu à chamada. + %s terminou a chamada. + %1$s tornou o histórico futuro desta sala visível para %2$s + todas os membros que integram esta sala, a partir do momento em que foram convidados. + todas os membros da sala, a partir do momento em que entraram. + todas os membros da sala. + todos. + desconhecida (%s). + %1$s ativou a criptografia ponta-a-ponta (%2$s) + + %1$s solicitou uma conferência VoIP + A conferência VoIP começou + A conferência VoIP terminou + + (o avatar também foi alterado) + %1$s removeu o nome da sala + %1$s removeu o tópico da sala + %1$s atualizou o seu perfil %2$s + %1$s enviou um convite para que %2$s se junte à sala + %1$s aceitou o convite para %2$s + + ** Impossível decifrar: %s ** + O dispositivo de quem enviou a mensagem não nos enviou as chaves para esta mensagem. + + + Não foi possível apagar + Não foi possível enviar a mensagem + + O envio da imagem falhou + + + Erro de conexão à Internet + Erro do Matrix + + + + + + + + + Ainda não é possível voltar a entrar numa sala vazia. + + Mensagem cifrada + + + Endereço de e-mail + Número de telefone + + + Convite de %s + Convite para sala + %1$s e %2$s + Sala vazia + + + %1$s enviou um sticker. + + %s fez o upgrade da sala. + + Mensagem removida + Mensagem removida por %1$s Mensagens Sala diff --git a/vector/src/main/res/values-ru/strings.xml b/vector/src/main/res/values-ru/strings.xml index 878105c1fe..7741c155d8 100644 --- a/vector/src/main/res/values-ru/strings.xml +++ b/vector/src/main/res/values-ru/strings.xml @@ -1,5 +1,292 @@ + %1$s: %2$s + %1$s отправил(а) изображение. + %s приглашение + %1$s пригласил(а) %2$s + %1$s пригласил(а) вас + %1$s вошёл(ла) в комнату + %1$s покинул(а) комнату + %1$s отклонил(а) приглашение + %1$s выгнан %2$s + %1$s разблокировал(а) %2$s + %1$s заблокировал(а) %2$s + %1$s отозвал(а) приглашение %2$s + %1$s изменил(а) свой аватар + %1$s установил(а) имя %2$s + %1$s изменил(а) имя с %2$s на %3$s + %1$s удалил(а) свое имя (%2$s) + %1$s изменил(а) тему на: %2$s + %1$s изменил(а) название комнаты: %2$s + %s начал(а) видеовызов. + %s начал(а) голосовой вызов. + %s ответил(а) на звонок. + %s завершил(а) вызов. + %1$s сделал(а) будущую историю комнаты видимой %2$s + всем членам, с момента их приглашения. + всем членам, с момента присоединения. + всем членам. + всем. + неизвестно (%s). + %1$s включил(а) сквозное шифрование (%2$s) + %1$s запросил(а) VoIP конференцию + VoIP-конференция начата + VoIP-конференция завершена + (аватар также был изменен) + %1$s удалил(а) название комнаты + %1$s удалил(а) тему комнаты + %1$s обновил(а) свой профиль %2$s + %1$s отправил(а) приглашение %2$s присоединиться к комнате + %1$s принял(а) приглашение от %2$s + ** Невозможно расшифровать: %s ** + Устройство отправителя не предоставило нам ключ для расшифровки этого сообщения. + + Не удалось изменить + Не удалось отправить сообщение + Не удалось загрузить изображение + + Сетевая ошибка + Ошибка Matrix + + + + + В настоящее время невозможно вновь присоединиться к пустой комнате. + Зашифрованное сообщение + + Адрес электронной почты + Номер телефона + %1$s отправил стикер. + + Приглашение от %s + Приглашение в комнату + %1$s и %2$s + Пустая комната + + %1$s и 1 другой + %1$s и %2$d другие + %1$s и %2$d других + + + Сообщение удалено + %1$s удалил(а) сообщение + Сообщение удалено [причина: %1$s] + %1$s удалил(а) сообщение [причина: %2$s] + Начальная синхронизация: +\nИмпорт учетной записи… + Начальная синхронизация: +\nИмпорт криптографии + Начальная синхронизация: +\nИмпорт комнат + Синхронизация начата: +\nИмпорт присоединенных комнат + Синхронизация начата: +\nИмпорт приглашенных комнат + Начальная синхронизация: +\nИмпорт покинутых комнат + Начальная синхронизация: +\nИмпорт сообществ + Начальная синхронизация: +\nИмпорт данных учетной записи + %s обновил эту комнату. + Отправка сообщения… + Очистить очередь отправки + %1$s отозвал приглашение %2$s присоединиться к комнате + Приглашение %1$s. Причина: %2$s + %1$s приглашен %2$s. Причина: %3$s + %1$s пригласил вас. Причина: %2$s + %1$s вошёл(ла) в комнату. Причина: %2$s + %1$s покинул(а) комнату. Причина: %2$s + %1$s отклонил приглашение. Причина: %2$s + %1$s выгнали %2$s. Причина: %3$s + %1$s разблокировано %2$s. Причина: %3$s + %1$s забанен %2$s. Причина: %3$s + %1$s отправил приглашение %2$s в комнату. Причина: %3$s + %1$s отозвал приглашение %2$s присоединиться к комнате. Причина: %3$s + %1$s принял приглашение для %2$s. Причина: %3$s + %1$s отозвал приглашение %2$s. Причина: %3$s + %1$s создал(а) комнату + + %1$s добавил(а) %2$s в качестве адреса для этой комнаты. + %1$s добавил(а) %2$s в качестве адресов для этой комнаты. + %1$s добавил(а) %2$s в качестве адресов для этой комнаты. + + + %1$s удалил(а) адрес %2$s для комнаты. + %1$s удалил(а) адреса %2$s для комнаты. + %1$s удалил(а) адреса %2$s для комнаты. + + %1$s добавил(а) адреса %2$s и удалил(а) %3$s для комнаты. + %1$s сделал(а) %2$s главным адресом комнаты. + %1$s удалил(а) главный адрес комнаты. + %1$s разрешил(а) гостям входить в комнату. + %1$s запретил(а) гостям входить в комнату. + %1$s включил(а) сквозное шифрование. + %1$s включил(а) сквозное шифрование (неизвестный алгоритм %2$s). + Вы отправили изображение. + Вы отправили стикер. + Ваше приглашение + Вы создали комнату + Вы пригласили %1$s + Вы вошли в комнату + Вы покинули комнату + Вы отклонили приглашение + Вы выгнали %1$s + Вы разбанили %1$s + Вы забанили %1$s + Вы отозвали приглашение %1$s + Вы сменили свой аватар + Вы сменили своё отображаемое имя на %1$s + Вы сменили своё отображаемое имя с %1$s на %2$s + Вы удалили своё отображаемое имя (%1$s) + Вы сменили тему на: %1$s + Вы сменили название комнаты на: %1$s + Вы начали видеозвонок. + Вы начали звонок. + Вы ответили на звонок. + Вы закончили звонок. + Вы сделали будущую историю комнаты видимой для %1$s + Вы включили сквозное шифрование (%1$s) + Вы обновили эту комнату. + Вы начали групповой звонок + Вы удалили название комнаты + Вы удалили тему комнаты + Вы обновили свой профиль %1$s + Вы отправили %1$s приглашение в эту комнату + Вы отозвали у %1$s приглашение в эту комнату + Вы приняли приглашение для %1$s + %1$s добавил(а) виджет %2$s + Вы добавили виджет %1$s + %1$s удалил(а) виджет %2$s + Вы удалили виджет %1$s + %1$s изменил(а) виджет %2$s + Вы изменили виджет %1$s + Администратор + Модератор + По умолчанию + Пользовательский (%1$d) + Пользовательский + Вы изменили уровни доступа %1$s. + %1$s изменил(а) уровни доступа %2$s. + %1$s с %2$s на %3$s + Ваше приглашение. Причина: %1$s + Вы пригласили %1$s. Причина: %2$s + Вы вошли в комнату. Причина: %1$s + Вы покинули комнату. Причина: %1$s + Вы отклонили приглашение. Причина: %1$s + Вы выгнали %1$s. Причина: %2$s + Вы разбанили %1$s. Причина: %2$s + Вы забанили %1$s. Причина: %2$s + Вы отправили %1$s приглашение в эту комнату. Причина: %2$s + Вы отозвали у %1$s приглашение в эту комнату. Причина: %2$s + Вы приняли приглашение для %1$s. Причина: %2$s + Вы отозвали приглашение %1$s. Причина: %2$s + + Вы добавили адрес %1$s для этой комнаты. + Вы добавили %1$s в качестве адресов для этой комнаты. + Вы добавили %1$s в качестве адресов для этой комнаты. + + + Вы удалили адрес этой комнаты: %1$s. + Вы удалили адреса этой комнаты: %1$s. + Вы удалили адреса этой комнаты: %1$s. + + Вы добавили адреса %1$s и удалили %2$s для этой комнаты. + Вы задали главный адрес этой комнаты %1$s. + Вы удалили главный адрес этой комнаты. + Вы разрешили гостям входить в комнату. + Вы запретили гостям входить в комнату. + Вы включили сквозное шифрование. + Вы включили сквозное шифрование (неизвестный алгоритм %1$s). + %1$s изменил(а) аватар комнаты + Вы изменили аватар комнаты + %s отправил(а) данные для начала звонка. + Вы отправили данные для начала звонка. + %1$s удалил(а) аватар комнаты + Вы удалили аватар комнаты + Вы запретили гостям входить в комнату. + %1$s запретил(а) гостям входить в комнату. + Вы разрешили гостям присоединяться сюда. + %1$s разрешил(а) гостям присоединиться сюда. + Вы вышли. Причина: %1$s + %1$s вышел(-ла). Причина: %2$s + Вы вошли. Причина: %1$s + %1$s вошел(-ла). Причина: %2$s + Вы отозвали приглашение %1$s + %1$s отозвал(а) приглашение %2$s + Вы пригласили %1$s + %1$s пригласил(а) %2$s + Вы сделали будущие сообщения видимыми для %1$s + %1$s сделал(а) будущие сообщения видимыми для %2$s + Вы покинули комнату + %1$s покинул(а) комнату + Вы вошли + %1$s вошел(ла) + Вы создали обсуждение + %1$s создал(а) обсуждение + Вы обновили эту комнату. + %s обновил(а) эту комнату. + + %1$s, %2$s, %3$s и %4$d другой + %1$s, %2$s, %3$s и %4$d других + %1$s, %2$s, %3$s и %4$d другие + %1$s, %2$s, %3$s и %4$d другие + + %1$s, %2$s, %3$s и %4$s + %1$s, %2$s и %3$s + 🎉 Всем серверам запрещено участвовать! Эта комната больше не может быть использована. + Без изменений. + Пустая комната (была %s) + • Соответствующий сервер %s заблокирован. + • Сервер, соответствующий буквальным IP-адресам, теперь запрещён. + • Сервер, соответствующий буквальным IP-адресам, теперь разрешён. + • Сервер, соответствующий %s, теперь запрещён. + • Сервер, соответствующий %s, теперь разрешён. + • Сервер, соответствующий %s, был удалён из списка блокировки. + • Сервер, соответствующий буквальным IP-адресам, запрещён. + • Сервер, соответствующий буквальным IP-адресам, разрешён. + • Сервер, соответствующий %s, разрешён. + • Сервер, соответствующий %s, был удалён из разрешённого списка. + Вы изменили права доступа сервера (ACL) для этой комнаты. + %s изменил права доступа сервера (ACL) для этой комнаты. + Вы настроили права доступа сервера (ACL) для этой комнаты. + %s устанавливает права доступа сервера (ACL) для этой комнаты. + Вы изменили адреса этой комнаты. + %1$s изменил(а) адреса этой комнаты. + Вы изменили основной и альтернативный адреса этой комнаты. + %1$s изменил(а) основной и альтернативный адреса этой комнаты. + Вы изменили альтернативные адреса для этой комнаты. + %1$s изменил(а) альтернативные адреса для этой комнаты. + + Вы удалили альтернативный адрес %1$s для этой комнаты. + Вы удалили альтернативные адреса %1$s для этой комнаты. + Вы удалили альтернативные адреса %1$s для этой комнаты. + Вы удалили альтернативные адреса %1$s для этой комнаты. + + + %1$s удалил(а) альтернативный адрес %2$s для этой комнаты. + %1$s удалил(а) альтернативные адреса %2$s для этой комнаты. + %1$s удалил(а) альтернативные адреса %2$s для этой комнаты. + %1$s удалил(а) альтернативные адреса %2$s для этой комнаты. + + + Вы добавили альтернативный адрес %1$s для этой комнаты. + Вы добавили альтернативные адреса %1$s для этой комнаты. + Вы добавили альтернативные адреса %1$s для этой комнаты. + Вы добавили альтернативные адреса %1$s для этой комнаты. + + + %1$s добавил(а) альтернативный адрес %2$s для этой комнаты. + %1$s добавил(а) альтернативные адреса %2$s для этой комнаты. + %1$s добавил(а) альтернативные адреса %2$s для этой комнаты. + %1$s добавил(а) альтернативные адреса %2$s для этой комнаты. + + Вы изменили видеоконференцию + %1$s изменил(а) видеоконференцию + Вы завершили видеоконференцию + %1$s завершил(а) видеоконференцию + Вы начали видеоконференцию + %1$s начал(а) видеоконференцию Сообщения Комната diff --git a/vector/src/main/res/values-si/strings.xml b/vector/src/main/res/values-si/strings.xml index 6ce16c8d85..e1939a1ed6 100644 --- a/vector/src/main/res/values-si/strings.xml +++ b/vector/src/main/res/values-si/strings.xml @@ -1,5 +1,6 @@ + %1$s: %2$s පණිවිඩ සැකසුම් කාමරය diff --git a/vector/src/main/res/values-sk/strings.xml b/vector/src/main/res/values-sk/strings.xml index 3f9abae610..8efda54cf4 100644 --- a/vector/src/main/res/values-sk/strings.xml +++ b/vector/src/main/res/values-sk/strings.xml @@ -1,5 +1,213 @@ + %1$s: %2$s + %1$s poslal/a obrázok. + Pozvanie od %s + %1$s pozval/a %2$s + %1$s vás pozval/a + %1$s vstúpil/a do miestnosti + %1$s opustil/a miestnosť + %1$s odmietol/a pozvanie + %1$s vykázal/a %2$s + %1$s povolil/a vstupovať %2$s + %1$s zakázal/a vstupovať %2$s + %1$s vzal/a späť pozvanie %2$s + %1$s si zmenil/a obrázok v profile + %1$s si nastavil/a zobrazované meno %2$s + %1$s si zmenil/a zobrazované meno %2$s na %3$s + %1$s odstránil/a svoje zobrazované meno (%2$s) + %1$s zmenil/a tému na: %2$s + %1$s zmenil/a názov miestnosti na: %2$s + %s uskutočnil/a video hovor. + %s zatelefonoval/a. + %s prijal/a hovor. + %s ukončil/a hovor. + %1$s sprístupnil/a budúcu históriu miestnosti %2$s + pre všetkých členov, od kedy boli pozvaní. + pre všetkých členov, od kedy vstúpili. + pre všetkých členov. + pre každého. + neznámym (%s). + %1$s povolil/a E2E šifrovanie (%2$s) + %1$s požiadal/a o VoIP konferenciu + Začala sa VoIP konferencia + Skončila sa VoIP konferencia + (aj obrázok v profile) + %1$s odstránil/a názov miestnosti + %1$s odstránil/a tému miestnosti + %1$s aktualizoval/a svoj profil %2$s + %1$s pozval/a %2$s vstúpiť do miestnosti + %1$s prijal/a pozvanie pre %2$s + ** Nie je možné dešifrovať: %s ** + Zo zariadenia odosieľateľa nebolo možné získať kľúče potrebné na dešifrovanie tejto správy. + Nie je možné vymazať + Nie je možné odoslať správu + Nepodarilo sa nahrať obrázok + Chyba siete + Chyba Matrix + V súčasnosti nie je možné znovu vstúpiť do prázdnej miestnosti. + Šifrovaná správa + Emailová adresa + Telefónne číslo + %1$s poslal/a nálepku. + Pozvanie od %s + Pozvanie do miestnosti + %1$s a %2$s + Prázdna miestnosť + + %1$s a 1 ďalší + %1$s a %2$d ďalší + %1$s a %2$d ďalších + + + %s aktualizoval/a túto miestnosť. + Odstránená správa + Odstránená správa používateľom %1$s + Odstránená správa [dôvod: %1$s] + Odstránená správa používateľom %1$s [dôvod: %2$s] + Úvodná synchronizácia: +\nPrebieha import účtu… + Úvodná synchronizácia: +\nPrebieha import šifrovacích kľúčov + Úvodná synchronizácia: +\nPrebieha import miestností + Úvodná synchronizácia: +\nPrebieha import miestností, do ktorých ste vstúpili + Úvodná synchronizácia: +\nPrebieha import pozvaní + Úvodná synchronizácia: +\nPrebieha import opustených miestností + Úvodná synchronizácia: +\nPrebieha import komunít + Úvodná synchronizácia: +\nPrebieha import údajov účtu + Odosielanie správy… + Vymazať správy na odoslanie + %1$s zamietol/a pozvanie používateľa %2$s vstúpiť do miestnosti + Pozvanie od %1$s. Dôvod: %2$s + %1$s pozval/a %2$s. Dôvod: %3$s + %1$s vás pozval/a. Dôvod: %2$s + %1$s vstúpil/a do miestnosti. Dôvod: %2$s + %1$s opustil/a miestnosť. Dôvod: %2$s + %1$s odmietol/a pozvanie. Dôvod: %2$s + %1$s vykázal/a %2$s. Dôvod: %3$s + %1$s povolil/a vstupovať %2$s. Dôvod: %3$s + %1$s zakázal/a vstupovať %2$s. Dôvod: %3$s + %1$s pozval/a %2$s vstúpiť do miestnosti. Dôvod: %3$s + %1$s zamietol/a pozvanie používateľa %2$s vstúpiť do miestnosti. Dôvod: %3$s + %1$s prijal/a pozvanie pre %2$s. Dôvod: %3$s + %1$s vzal/a späť pozvanie %2$s. Dôvod: %3$s + + %1$s pridal/a adresu %2$s pre túto miestnosť. + %1$s pridal/a adresy %2$s pre túto miestnosť. + %1$s pridal/a adresy %2$s pre túto miestnosť. + + + %1$s odstránil/a adresu %2$s pre túto miestnosť. + %1$s odstránil/a adresy %3$s pre túto miestnosť. + %1$s odstránil/a adresy %3$s pre túto miestnosť. + + %1$s pridal/a adresy %2$s a odstránil/a adresy %3$s pre túto miestnosť. + %1$s nastavil/a hlavnú adresu tejto miestnosti %2$s. + %1$s odstránil/a hlavnú adresu tejto miestnosti. + %1$s povolil/a hosťom///návštevníkom prístup do tejto miestnosti. + Poslali ste obrázok. + Poslali ste nálepku. + Pozvanie od vás + %1$s vytvoril/a miestnosť + Vytvorili ste miestnosť + Pozvali ste %1$s + Vstúpili ste do miestnosti + Opustili ste miestnosť + Odmietli ste pozvanie + Vykázali ste %1$s + Povolili ste vstupovať %1$s + Zakázali ste vstupovať %1$s + Vzali ste späť pozvanie %1$s + Zmenili ste si obrázok v profile + Nastavili ste si zobrazované meno %1$s + Zmenili ste si zobrazované meno %1$s na %2$s + Odstránili ste svoje zobrazované meno %1$s + Zmenili ste tému na: %1$s + %1$s zmenil/a obrázok miestnosti + Zmenili ste obrázok miestnosti + Zmenili ste názov miestnosti na: %1$s + Uskutočnili ste video hovor. + Zatelefonovali ste. + %s poslal údaje pre nastavenie hovoru. + Poslali ste údaje na nastavenie hovoru. + Prijali ste hovor. + Ukončili ste hovor. + Sprístupnili ste budúcu históriu miestnosti %1$s + Povolili ste E2E šifrovanie (%1$s) + Aktualizovali ste túto miestnosť. + Požiadali ste o VoIP konferenciu + Odstránili ste názov miestnosti + Odstránili ste tému miestnosti + %1$s odstránil obrázok miestnosti + Odstránili ste obrázok miestnosti + Aktualizovali ste svoj profil %1$s + Pozvali ste %1$s vstúpiť do miestnosti + Zamietli ste pozvanie používateľa %1$s vstúpiť do miestnosti + Prijali ste pozvanie pre %1$s + %1$s pridal/a widget %2$s + Pridali ste widget %1$s + %1$s odstránil/a widget %2$s + Odstránili ste widget %1$s + %1$s upravil/a widget %2$s + Upravili ste widget %1$s + Správca + Moderátor + Predvolený + Vlastná úroveň (%1$d) + Vlastná úroveň + Zmenili ste úroveň moci používateľa %1$s. + %1$s zmenil úroveň moci používateľa %2$s. + %1$s z %2$s na %3$s + Pozvanie od vás. Dôvod: %1$s + Pozvali ste %1$s. Dôvod: %2$s + Vstúpili ste do miestnosti. Dôvod: %1$s + Opustili ste miestnosť. Dôvod: %1$s + Odmietli ste pozvanie. Dôvod: %1$s + Vykázali ste %1$s. Dôvod: %2$s + Povolili ste vstupovať %1$s. Dôvod: %2$s + Zakázali ste vstupovať %1$s. Dôvod: %2$s + Pozvali ste %1$s vstúpiť do miestnosti. Dôvod: %2$s + Zamietli ste pozvanie používateľa %1$s vstúpiť do miestnosti. Dôvod: %2$s + Prijali ste pozvanie pre %1$s. Dôvod: %2$s + Vzali ste späť pozvanie %1$s. Dôvod: %2$s + + Pridali ste adresu %1$s pre túto miestnosť. + Pridali ste adresy %1$s pre túto miestnosť. + Pridali ste adresy %1$s pre túto miestnosť. + + + Odstránili ste adresu %1$s pre túto miestnosť. + Odstránili ste adresy %1$s pre túto miestnosť. + Odstránili ste adresy %1$s pre túto miestnosť. + + Pridali ste %1$s a odstránili adresy %2$s pre túto miestnosť. + Nastavili ste hlavnú adresu tejto miestnosti %1$s. + Odstránili ste hlavnú adresu tejto miestnosti. + Povolili ste hosťom///návštevníkom prístup do tejto miestnosti. + %1$s zakázal/a hosťom///návštevníkom prístup do tejto miestnosti. + Zakázali ste hosťom///návštevníkom prístup do tejto miestnosti. + %1$s povolil/a E2E šifrovanie. + Povolili ste E2E šifrovanie. + %1$s povolil/a E2E šifrovanie (Nerozpoznaný algorytmus %2$s). + Povolili ste E2E šifrovanie (Nerozpoznaný algorytmus %1$s). + nastavili ste na servery pravidlá ACL tejto miestnosti. + %s nastavil(a) na servery pravidlá ACL tejto miestnosti. + Aktualizovali ste sem. + %s aktualizoval(a) sem. + %1$s sprístupnil(a) budúce správy %2$s + Sprístupnili ste budúce správy %1$s + Opustili ste miestnosť + %1$s opustil(a) miestnosť + Vstúpili ste + %1$s vstúpil(a) + Vytvorili ste konverzáciu + %1$s vytvoril(a) konverzáciu Svetlý vzhľad Tmavý vzhľad Čierny vzhľad diff --git a/vector/src/main/res/values-sq/strings.xml b/vector/src/main/res/values-sq/strings.xml index a06bf6f141..e8c6ce8822 100644 --- a/vector/src/main/res/values-sq/strings.xml +++ b/vector/src/main/res/values-sq/strings.xml @@ -1,5 +1,264 @@ + %1$s: %2$s + %1$s dërgoi një figurë. + %1$s ftoi %2$s + %1$s ju ftoi + %1$s hyri në dhomë + %1$s doli nga dhoma + %1$s hodhi tej ftesën + %1$s përzuri %2$s + %1$s dëboi %2$s + %1$s ndryshoi avatarin e vet + %1$s ndryshoi temën në: %2$s + %1$s ndryshoi emrin e dhomës në: %2$s + %s bëri një thirrje video. + %s bëri një thirrje zanore. + %s iu përgjigj thirrjes. + %s e përfundoi thirrjen. + %1$s e bëri historikun e ardhshëm të dhomës të dukshëm për %2$s + për krejt anëtarët e dhomës, prej çastit kur janë ftuar. + për krejt anëtarët e dhomës, prej çastit kur morën pjesë. + krejt anëtarët e dhomës. + cilido. + e panjohur (%s). + %1$s kërkoi një konferencë VoIP + Konferenca VoIP filloi + Konferenca VoIP përfundoi + (u ndryshua edhe avatari) + %1$s hoqi emrin e dhomës + %1$s përditësoi profilin e tij %2$s + %1$s pranoi ftesën tuaj për %2$s + ** S’arrihet të shfshehtëzohet: %s ** + Pajisja e dërguesit nuk na ka dërguar kyçet për këtë mesazh. + S’u redaktua dot + S’arrihet të dërgohet mesazh + Ngarkimi i figurës dështoi + Gabim rrjeti + Gabim Matrix + Hëpërhë s’është e mundur të rihyhet në një dhomë të zbrazët. + Mesazh i fshehtëzuar + Adresë email + Numër telefoni + Ftesë nga %s + Ftesë Dhome + %1$s dhe %2$s + Dhomë e zbrazët + %1$s dërgoi një ngjitës. + Ftesë e %s + %1$s hoqi dëbimin për %2$s + %1$s tërhoqi mbrapsht ftesën për %2$s + %1$s caktoi për veten emër ekrani %2$s + %1$s ndryshoi emrin e tyre në ekran nga %2$s në %3$s + %1$s hoqi emrin e tij në ekran (%2$s) + %1$s aktivizoi fshehtëzim skaj-më-skaj (%2$s) + %1$s hoqi temën e dhomës + %1$s dërgoi një ftesë për %2$s që të marrë pjesë në dhomë + + %1$s dhe 1 tjetër + %1$s dhe %2$d të tjerë + + Mesazhi u hoq + Mesazhi u hoq nga %1$s + Mesazh i hequr [arsye: %1$s] + Mesazh i hequr nga %1$s [arsye: %2$s] + %s e përmirësoi këtë dhomë. + Njëkohësimi Fillestar: +\nPo importohet llogaria… + Njëkohësimi Fillestar: +\nPo importohet kriptografi + Njëkohësimi Fillestar: +\nPo importohen Dhoma + Njëkohësimi Fillestar: +\nPo importohen Dhoma Ku Është Bërë Hyrje + Njëkohësimi Fillestar: +\nPo importohen Dhoma Me Ftesë + Njëkohësimi Fillestar: +\nPo importohen Dhoma të Braktisura + Njëkohësimi Fillestar: +\nPo importohen Bashkësi + Njëkohësimi Fillestar: +\nPo importohet të Dhëna Llogarie + Po dërgohet mesazh… + Spastro radhë pritjeje + %1$s shfuqizoi ftesën për %2$s për pjesëmarrje te dhoma + Ftesë e %1$s. Arsye: %2$s + %1$s ftoi %2$s. Arsye: %3$s + %1$s ju ftoi. Arsye: %2$s + %1$s erdhi në dhomë. Arsye: %2$s + %1$s doli nga dhoma. Arsye: %2$s + %1$s hodhi poshtë ftesën. Arsye: %2$s + %1$s përzuri %2$s. Arsye: %3$s + %1$s hoqi dëbimin për %2$s. Arsye: %3$s + %1$s dëboi %2$s. Arsye: %3$s + %1$s dërgoi një ftesë për %2$s për të ardhur në dhomë. Arsye: %3$s + %1$s shfuqizoi ftesën për %2$s për të ardhur në dhomë. Arsye: %3$s + %1$s pranoi ftesën për %2$s. Arsye: %3$s + %1$s tërhoqi mbrapsht ftesën për %2$s. Arsye: %3$s + + %1$s shtoi %2$s si një adresë për këtë dhomë. + %1$s shtoi %2$s si adresa për këtë dhomë. + + + %1$s hoqi %2$s si adresë për këtë dhomë. + %1$s hoqi %2$s si adresa për këtë dhomë. + + %1$s shtoi %2$s dhe hoqi %3$s si adresa për këtë dhomë. + %1$s caktoi %2$s si adresë kryesore për këtë dhomë. + %1$s hoqi adresën kryesore për këtë dhomë. + %1$s ka lejuar vizitorë të marrin pjesë në dhomë. + %1$s ka penguar vizitorë të marrin pjesë në dhomë. + %1$s aktivizoi fshehtëzim skaj-më-skaj. + %1$s aktivizoi fshehtëzim skaj-më-skaj (algoritëm i papranuar %2$s). + %1$s krijo dhomën + Dërguat një figurë. + Dërguat një ngjitës. + Ftesa juaj + Krijuat dhomën + Ftuat %1$s + Hytë në dhomë + Dolët nga dhoma + Hodhët poshtë ftesën + Përzutë %1$s + Hoqët dëbimin për %1$s + Dëbuat %1$s + Tërhoqët mbrapsht ftesën për %1$s + Ndryshuat avatarin tuaj + Caktuat si emrin tuaj në ekran %1$s + E ndryshuat emrin tuaj në ekran nga %1$s në %2$s + Hoqët emrin tuaj në ekran (qe %1$s) + E ndryshuat temën në: %1$s + %1$s ndryshoi avatarin e dhomës + Ndryshuat avatarin e dhomës + Ndryshuat emrin e dhomës në: %1$s + Filluat një thirrje video. + Filluat një thirrje zanore. + %s dërgoi të dhëna për ujdisjen e thirrjes. + Dërguat të dhëna për ujdisjen e thirrjes. + Iu përgjigjët thirrjes. + E përfunduat thirrjen. + E bëtë historikun e ardhshëm të dhomë të dukshëm për %1$s + Aktivizuat fshehtëzim skaj-më-skaj (%1$s) + Përmirësuat këtë dhomë. + Kërkuat një konferencë VoIP + Hoqët emrin e dhomës + Hoqët temën e dhomës + %1$s hoqi avatarin e dhomës + Hoqët avatarin e dhomës + Përditësuat profilin tuaj %1$s + Dërguat një ftesë te %1$s për të ardhur te dhoma + Shfuqizuat ftesën për ardhjen në dhomë të %1$s + Pranuat ftesën për %1$s + %1$s shtoi widget-in %2$s + Shtuat widget-in %1$s + %1$s hoqi widget-in %2$s + Hoqët widget-in %1$s + %1$s ndryshoi widget-in %2$s + Ndryshuat widget-in %1$s + Përgjegjës + Moderator + Parazgjedhje + Vetjake (%1$d) + Vetjake + Ndryshuat shkallën e pushtetit për %1$s. + %1$s ndryshoi shkallën e pushtetit për %2$s. + %1$s nga %2$s në %3$s + Ftesa juaj. Arsye: %1$s + Ftuat %1$s. Arsye: %2$s + Erdhët në dhomë, Arsye: %1$s + Ikët nga dhoma. Arsye: %1$s + Hodhët poshtë ftesën. Arsye: %1$s + Përzutë %1$s. Arsye: %2$s + Hoqët dëbimin për %1$s. Arsye: %2$s + Dëbuat %1$s. Arsye: %2$s + Dërguat një ftesë për %1$s të vijë në dhomë. Arsye: %2$s + Shfuqizuat ftesën për ardhjen në dhomë të %1$s. Arsye: %2$s + Pranuat ftesën për %1$s. Arsye: %2$s + Tërhoqët mbrapsht ftesën për %1$s. Arsye: %2$s + + Shtuat %1$s si një adresë për këtë dhomë. + Shtuat %1$s si adresa për këtë dhomë. + + + Hoqët %1$s si një adresë për këtë dhomë. + Hoqët %1$s si adresa për këtë dhomë. + + Shtuat %1$s dhe hoqët %2$s si adresa për këtë dhomë. + Caktuat si adresë kryesore për këtë dhomë %1$s. + Hoqët adresën kryesore për këtë dhomë. + Keni lejuar të vijnë mysafirë në dhomë. + U keni penguar mysafirëve të vijnë në dhomë. + Aktivizuat fshehtëzimin skaj-më-skaj. + Aktivizuat fshehtëzimin skaj-më-skaj (algoritëm %1$s i panjohur). + Keni penguar të vijnë në dhomë mysafirë. + %1$s ka penguar të vijnë në dhomë mysafirë. + Keni lejuar të vijnë mysafirë këtu. + %1$s ka lejuar të vijnë këtu mysafirë. + Dolët. Arsye: %1$s + %1$s doli. Arsye: %2$s + Erdhët. Arsye: %1$s + %1$s erdhi. Arsye: %2$s + Shfuqizuat ftesën për %1$s + %1$s shfuqizoi ftesën për %2$s + Ftuat %1$s + %1$s ftoi %2$s + U përmirësuat këtu. + %s këtu u përmirësua. + I bëtë mesazhet e ardhshëm të dukshëm për %1$s + %1$s i bëri mesazhet e ardhshëm të dukshëm për %2$s + Dolët nga dhoma + %1$s doli nga dhoma + Erdhët + %1$s erdhi + Krijuat diskutimin + %1$s krijoi diskutimin + Dhomë e zbrazët (was %s) + + %1$s, %2$s, %3$s dhe %4$d tjetër + %1$s, %2$s, %3$s dhe %4$d të tjerë + + %1$s, %2$s, %3$s dhe %4$s + %1$s, %2$s dhe %3$s + 🎉 U është penguar pjesëmarrja krejt shërbyesve! Kjo dhomë s’mund të përdoret më. + Pa ndryshim. + Ndryshuat ACL-ra shërbyesi për këtë dhomë. + %s ndryshoi ACL-ra shërbyesi për këtë dhomë. + Ujdisët ACL-ra shërbyesi për këtë dhomë. + %s ujdisi ACL-ra shërbyesi për këtë dhomë. + • Shërbyes që kanë përputhje me %s u hoqën nga lista e të lejuarve. + • Shërbyesit që kanë përputhje me %s tani janë të lejuar. + • Shërbyesit që kanë përputhje me %s u hoqën nga lista e ndalimeve. + • Shërbyesit që kanë përputhje me %s tani janë të ndaluar. + • Shërbyesit që kanë përputhje me %s janë të ndaluar. + • Shërbyesit që kanë përputhje me %s janë të ndaluar. + Ndryshuat adresat për këtë dhomë. + %1$s ndryshoi adresat për këtë dhomë. + Ndryshuat adresat kryesore dhe alternative për këtë dhomë. + %1$s ndryshoi adresat kryesore dhe alternative për këtë dhomë. + Ndryshuat adresat alternative për këtë dhomë. + %1$s ndryshoi adresat alternative për këtë dhomë. + + Hoqët adresën alternative %1$s për këtë dhomë. + Hoqët adresat alternative %1$s për këtë dhomë. + + + %1$s hoqët adresën alternative %2$s për këtë dhomë. + %1$s hoqët adresat alternative %2$s për këtë dhomë. + + + Shtuat adresën alternative %1$s për këtë dhomë. + Shtuat adresat alternative %1$s për këtë dhomë. + + + %1$s shtoi adresën alternative %2$s për këtë dhomë. + %1$s shtoi adresat alternative %2$s për këtë dhomë. + + Ndryshuat konferencën video + Konferenca video u ndryshua nga %1$s + Përfunduat konferencën video + Konferenca video u përfundua nga %1$s + Nisët një konferencë video + Konferencë video nisur nga %1$s Temë e Çelët Temë e Errët Temë e Zezë diff --git a/vector/src/main/res/values-sr/strings.xml b/vector/src/main/res/values-sr/strings.xml index 2f5e124948..837eb629cc 100644 --- a/vector/src/main/res/values-sr/strings.xml +++ b/vector/src/main/res/values-sr/strings.xml @@ -1,5 +1,278 @@ + %1$s напусти собу + Ви се придружисте + %1$s се придружи + Ви се придружисте + %1$s се придружи + %1$s позва вас + Ви позвасте корисника %1$s + %1$s позва корисника %2$s + Направили сте дискусију + %1$s: %2$s + Почетна синхронизација: +\nувозим налог… + Празна соба (била је %s) + Празна соба + + %1$s и још %2$d + %1$s и још %2$d + %1$s и још %2$d + + %1$s направи дискусију + Направили сте собу + %1$s направи собу + Ваша позивница + %s шаље позивницу + Послали сте налепницу. + %1$s посла налепницу. + Послали сте слику. + %1$s посла слику. + Изменили сте свој аватар + %1$s измени свој аватар + Повукли сте позивницу за корисника %1$s + %1$s повуче позивницу за корисника %2$s + Забранили сте корисника %1$s + %1$s забрани корисника %2$s + Укинули сте забрану кориснику %1$s + %1$s укину забрану кориснику %2$s + Избацили сте корисника %1$s + %1$s избаци %2$s + Одбили сте позивницу + %1$s одби позивницу + Напустили сте собу + %1$s напусти собу + Напустили сте собу + Укључили сте шифровање с краја на крај (непознат алгоритам %1$s). + %1$s укључи шифровање с краја на крај (непознат алгоритам %2$s). + %1$s искључи шифровање с краја на крај. + Спречили сте да се гости придруже у собу. + Укључили сте шифровање с краја на крај. + Дозволили сте гостима да се придруже соби. + Изменили сте алтернативну адресу за ову собу. + Очисти ред за слање + Шаљем поруку… + + %1$s, %2$s, %3$s и још %4$d + %1$s, %2$s, %3$s и још %4$d + %1$s, %2$s, %3$s и још %4$d + + %1$s, %2$s, %3$s и %4$s + %1$s, %2$s и %3$s + %1$s и %2$s + Број телефона + Адреса е-поште + Шифрована порука + Тренутно није могуће да се вратите у празну собу. + Грешка Матрикса + Мрежна грешка + Неуспело слање слике + Не могу да пошаљем поруку + Уређај пошиљаоца није нам послао кључеве за ову поруку. + Изменили сте ниво снаге корисника %1$s. + посебно + посебно (%1$d) + подразумевано + модератор + админ + Порука уклоњена [разлог: %1$s] + Поруку уклони %1$s + Порука уклоњена + Уклонили сте аватар собе + %1$s уклони аватар собе + Уклонили сте тему собе + %1$s уклони тему собе + Уклонили сте назив собе + %1$s уклони назив собе + (аватар је такође промењен) + 🎉 Свим серверима је забрањено учествовање! Ова соба се више не може користити. + Без измене. + Надоградили сте ову собу. + непознато (%s). + Учинили сте да од сада, историјат буде видљив за %1$s + %1$s учини да од сада, историјат буде видљив за %2$s + Учинили сте да будуће поруке буду видљиве за %1$s + %1$s учини да будуће поруке буду видљиве за %2$s + свакога. + све чланове. + све чланове, од кад се придруже. + све чланове, од када су позвани. + Завршили сте позив. + %s заврши позив. + Одговорили сте на позив. + %s одговори на позив. + Послали сте податке за поставку позива. + %s посла податке за поставку позива. + Позвали сте гласовним позивом. + %s позва видео позивом. + Позвали сте видео позивом. + Изменили сте аватар собе + Поставили сте своје приказно име на %1$s + %1$s постави своје приказно име на %2$s + + Додали сте %1$s као адресу ове собе. + Додали сте %1$s као адресе ове собе. + Додали сте %1$s као адресе ове собе. + + + %1$s додаде %2$s као адресу ове собе. + %1$s додаде %2$s као адресе ове собе. + %1$s додаде %2$s као адресе ове собе. + + Повукли сте позивницу корисника %1$s. Разлог: %2$s + %1$s повлачи позивницу корисника %2$s. Разлог: %3$s + Прихватили сте позивницу за %1$s. Разлог: %2$s + %1$s прихвата позивницу за %2$s. Разлог:%3$s + Повукли сте позивницу да се %1$s придружи соби. Разлог: %2$s + %1$s повуче позивницу да се %2$s придружи соби. Разлог: %3$s + Послали сте позивницу да се %1$s придружи соби. Разлог: %2$s + %1$s посла позивницу да се %2$s придружи соби. Разлог: %3$s + Забранили сте корисника %1$s. Разлог: %2$s + %1$s забрани корисника %2$s. Разлог: %3$s + Одблокирали сте корисника %1$s. Разлог: %2$s + %1$s одблокира корисника %2$s. Разлог: %3$s + Избацили сте корисника %1$s. Разлог: %2$s + %1$s избаци корисника %2$s. Разлог: %3$s + Одбили сте позивницу. Разлог: %1$s + %1$s одби позивницу. Разлог: %2$s + Изашли сте. Разлог: %1$s + %1$s изађе. Разлог: %2$s + Напустили сте собу. Разлог: %1$s + %1$s напусти собу. Разлог: %2$s + Придружили сте се. Разлог: %1$s + %1$s се придружи. Разлог: %2$s + Придружили сте се соби. Разлог: %1$s + %1$s се придружи соби. Разлог: %2$s + %1$s вас позива. Разлог: %2$s + Позвали сте корисника %1$s. Разлог: %2$s + %1$s позва корисника %2$s. Разлог: %3$s + Ваша позивница. Разлог: %1$s + %1$s - позивница. Разлог: %2$s + Почетна синхронизација: +\nувозим податке о налогу + Почетна синхронизација: +\nувозим заједнице + Почетна синхронизација: +\nувозим напуштене собе + Почетна синхронизација: +\nувозим собе са позивницом + Почетна синхронизација: +\nувозим собе у којима сте + Почетна синхронизација: +\nувоз шифровања + Почетна синхронизација: +\nувозим собе + Позивница за собу + %s вас позива + Не могу да редигујем + ** Не могу да дешифрујем: %s ** + %1$s са %2$s на %3$s + %1$s измени ниво снаге кориснику %2$s. + Изменили сте %1$s виџет + %1$s измени %2$s виџет + Уклонили сте %1$s виџет + %1$s уклони %2$s виџет + Додали сте %1$s виџет + %1$s додаде %2$s виџет + Прихватили сте позивницу за %1$s + %1$s прихвати позивницу за %2$s + Повукли сте позивницу за корисника %1$s + %1$s повуче позивницу за корисника %2$s + Повукли сте позивницу да се %1$s придружи у собу + %1$s повуче позивницу да се %2$s придружи у собу + Позвали сте корисника %1$s + %1$s позва корисника %2$s + Послали сте позивницу да се %1$s придружи у собу + %1$s посла позивницу да се %2$s придружи у собу + Освежили сте свој профил %1$s + %1$s освежи свој профил %2$s + Поруку уклони %1$s [разлог: %2$s] + ВоИП конференција завршена + ВоИП конференција започела + Затражили сте ВоИП конференцију + %1$s затражи ВоИП конференцију + • Сервери који садрже ИП бројеве су сада забрањени. + • Сервери који садрже ИП бројеве су сада дозвољени. + • Сервери који садрже %s су уклоњени са листе дозвољених. + • Сервери који садрже %s су сада дозвољени. + • Сервери који садрже %s су уклоњени са листе забрањених. + • Сервери који садрже %s су сада забрањени. + Изменили сте АЦЛ сервера за ову собу. + %s измени АЦЛ сервера за ову собу. + • Сервери са ИП бројевима су забрањени. + • Сервери са ИП бројевима су дозвољени. + • Сервери који садрже %s су дозвољени. + • Сервери који садрже %s су забрањени. + Поставили сте АЦЛ сервера за ову собу. + %s постави АЦЛ сервера за ову собу. + Надоградили сте овде. + %s надогради овде. + %s надогради ову собу. + Укључили сте шифровање с краја на крај (%1$s) + %1$s укључи шифровање с краја на крај (%2$s) + %s упути видео позив. + Изменили сте назив собе у: %1$s + %1$s измени назив собе у: %2$s + %1$s измени аватар собе + Изменили сте тему на: %1$s + %1$s измени тему на: %2$s + Уклонили сте своје приказно име (било је %1$s) + %1$s уклони своје приказно име (било је %2$s) + Изменили сте приказно име са %1$s на %2$s + %1$s измени приказно име са %2$s на %3$s + %1$s забрани гостима да се придруже у собу. + Забранили сте гостима да се придруже у собу. + %1$s забрани гостима да се придруже у собу. + Дозволили сте гостима да се придруже овде. + %1$s дозволи гостима да се придруже овде. + %1$s дозволи гостима да се придруже у собу. + Изменили сте адресе за ову собу. + %1$s измени адресе за ову собу. + Изменили сте главну и алтернативне адресе за ову собу. + %1$s измени главну и алтернативне адресе за ову собу. + %1$s измени алтернативне адресе за ову собу. + + Уклонили сте алтернативну адресу %1$s за ову собу. + Уклонили сте алтернативне адресе %1$s за ову собу. + Уклонили сте алтернативне адресе %1$s за ову собу. + + + %1$s уклони алтернативну адресу %2$s за ову собу. + %1$s уклони алтернативне адресе %2$s за ову собу. + %1$s уклони алтернативне адресе %2$s за ову собу. + + + Додали сте алтернативну адресу %1$s за ову собу. + Додали сте алтернативне адресе %1$s за ову собу. + Додали сте алтернативне адресе %1$s за ову собу. + + + %1$s додаде алтернативну адресу %2$s за ову собу. + %1$s додаде алтернативне адресе %2$s за ову собу. + %1$s додаде алтернативне адресе %2$s за ову собу. + + Уклонили сте главну адресу за ову собу. + %1$s уклони главну адресу за ову собу. + Поставили сте главну адресу ове собе на %1$s. + %1$s постави главну адресу ове собе на %2$s. + Додали сте %1$s и уклонили %2$s као адресе ове собе. + %1$s додаде %2$s и уклони %3$s као адресе ове собе. + + Уклонили сте %1$s као адресу ове собе. + Уклонили сте %1$s као адресе ове собе. + Уклонили сте %1$s као адресе ове собе. + + + %1$s уклони %2$s као адресу ове собе. + %1$s уклони %2$s као адресе ове собе. + %1$s уклони %2$s као адресе ове собе. + + Изменили сте видео конференцију + %1$s измени видео конференцију + Завршили сте видео конференцију + %1$s заврши видео конференцију + Покренули сте видео конференцију + %1$s покрену видео конференцију светла тема тамна тема црна тема diff --git a/vector/src/main/res/values-sv/strings.xml b/vector/src/main/res/values-sv/strings.xml index fbe8aa9289..1f01c04e93 100644 --- a/vector/src/main/res/values-sv/strings.xml +++ b/vector/src/main/res/values-sv/strings.xml @@ -1,5 +1,268 @@ + %1$s: %2$s + %1$s skickade en bild. + Du skickade en bild. + %1$s skickade en dekal. + Du skickade en dekal. + Inbjudan från %s + Inbjudan från dig + %1$s skapade rummet + Du skapade rummet + %1$s bjöd in %2$s + Du bjöd in %1$s + %1$s bjöd in dig + %1$s gick med i rummet + Du gick med i rummet + %1$s lämnade rummet + Du lämnade rummet + %1$s avböjde inbjudan + Du avböjde inbjudan + %1$s kickade %2$s + Du kickade %1$s + %1$s avbannade %2$s + Du avbannade %1$s + %1$s avbannade %2$s + Du bannade %1$s + %1$s drog tillbaka inbjudan för %2$s + Du drog tillbaka inbjudan för %1$s + %1$s bytte sin avatar + Du bytte din avatar + %1$s satte sitt visningsnamn till %2$s + Du satte ditt visningsnamn till %1$s + %1$s bytte sitt visningsnamn från %2$s till %3$s + Du bytte ditt visningsnamn från %1$s till %2$s + %1$s tog bort sitt visningsnamn (det var %2$s) + Du tog bort ditt visningsnamn (det var %1$s) + %1$s bytte ämnet till: %2$s + Du bytte ämnet till: %1$s + %1$s bytte rummets avatar + Du bytte rummets avatar + %1$s bytte rummets namn till: %2$s + Du bytte rummets namnet till: %1$s + %s startade ett videosamtal. + Du startade ett videosamtal. + %s startade ett röstsamtal. + Du startade ett röstsamtal. + %s skickade data för att sätta upp samtalet. + Du skickade data för att sätta upp samtalet. + %s svarade på samtalet. + Du svarade på samtalet. + %s avslutade samtalet. + Du avslutade samtalet. + %1$s gjorde framtida rumshistorik synlig för %2$s + Du gjorde framtida rumshistorik synlig för %1$s + alla rumsmedlemmar, från tiden de bjöds in. + alla rumsmedlemmar, från tiden de gick med. + alla rumsmedlemmar. + vem som helst. + okänt (%s). + %1$s aktiverade totalsträckskryptering (%2$s) + Du aktiverade totalsträckskryptering (%1$s) + %s uppgraderade det här rummet. + Du uppgraderade det här rummet. + %1$s begärde ett VoIP-gruppsamtal + Du begärde ett VoIP-gruppsamtal + VoIP-gruppsamtal startat + VoIP-gruppsamtal avslutat + (avataren blev även bytt) + %1$s tog bort rummets namn + Du tog bort rummets namn + %1$s tog bort rummets ämne + Du tog bort rummets ämne + %1$s tog bort rummets avatar + Du tog bort rummets avatar + Meddelande borttaget + Meddelande borttaget av %1$s + Meddelande borttaget [anledning: %1$s] + Meddelande borttaget av %1$s [anledning: %2$s] + %1$s uppdaterade sim profil %2$s + Du uppdaterade din profil %1$s + %1$s bjöd in %2$s att gå med i rummet + Du bjöd in %1$s att gå med i rummet + %1$s drog tillbaka inbjudan för %2$s att gå med i rummet + Du drog tillbaka inbjudan för %1$s att gå med i rummet + %1$s accepterade inbjudan för %2$s + Du accepterade inbjudan för %1$s + %1$s lade till %2$s-widget + Du lade till %1$s-widget + %1$s tog bort %2$s-widget + Du tog bort %1$s-widget + %1$s modifierade %2$s-widget + Du modifierade %1$s-widget + Admin + Moderator + Standard + Anpassad (%1$d) + Anpassad + Du ändrade behörighetsnivå för %1$s. + %1$s ändrade behörighetsnivå för %2$s. + %1$s från %2$s till %3$s + ** Kan inte avkryptera: %s ** + Avsändarens enhet har inte gett oss nycklarna för det här meddelandet. + Kunde inte dölja + Kunde inte skicka meddelandet + Misslyckades att ladda upp bilden + Nätverksfel + Matrixfel + Det går för närvarande inte att gå med i ett tomt rum igen. + Krypterat meddelande + E-postadress + Telefonnummer + Inbjudan från %s + Rumsinbjudan + %1$s och %2$s + + %1$s och en till + %1$s och %2$d till + + Tomt rum + Inledande synk: +\nImporterar konto… + Inledande synk: +\nImporterar krypto + Inledande synk: +\nImporterar rum + Inledande synk: +\nImporterar anslutna rum + Inledande synk: +\nImporterar inbjudna rum + Inledande synk: +\nImporterar lämnade rum + Inledande synk: +\nImporterar gemenskaper + Inledande synk: +\nImporterar kontodata + Skickar meddelande… + Rensa sändningskö + Inbjudan från %1$s. Anledning: %2$s + Inbjudan från dig. Anledning: %1$s + %1$s bjöd in %2$s. Anledning: %3$s + Du bjöd in %1$s. Anledning: %2$s + %1$s bjöd in dig. Anledning: %2$s + %1$s gick med i rummet. Anledning: %2$s + Du gick med i rummet. Anledning: %1$s + %1$s lämnade rummet. Anledning: %2$s + Du lämnade rummet. Anledning: %1$s + %1$s avböjde inbjudan. Anledning: %2$s + Du avböjde inbjudan. Anledning: %1$s + %1$s kickade %2$s. Anledning: %3$s + Du kickade %1$s. Anledning: %2$s + %1$s avbannade %2$s. Anledning: %3$s + Du avbannade %1$s. Anledning: %2$s + %1$s bannade %2$s. Anledning: %3$s + Du bannade %1$s. Anledning: %2$s + %1$s bjöd in %2$s att gå med i rummet. Anledning: %3$s + Du bjöd in %1$s att gå med i rummet. Anledning: %2$s + %1$s drog tillbaka inbjudan för %2$s att gå med i rummet. Anledning: %3$s + Du drog tillbaka inbjudan för %1$s att gå med i rummet. Anledning: %2$s + %1$s accepterade inbjudan för %2$s. Anledning: %3$s + Du accepterade inbjudan för %1$s. Anledning: %2$s + %1$s drog tillbaka inbjudan för %2$s. Anledning: %3$s + Du drog tillbaka inbjudan för %1$s. Anledning: %2$s + + %1$s lade till %2$s som en adress för det här rummet. + %1$s lade till %2$s som adresser för det här rummet. + + + Du lade till %1$s som en adress för det här rummet. + Du lade till %1$s som adresser för det här rummet. + + + %1$s tog bort %2$s som en adress för det här rummet. + %1$s tog bort %2$s som adresser för det här rummet. + + + Du tog bort %1$s som en adress för det här rummet. + Du tog bort %1$s som adresser för det här rummet. + + %1$s lade till %2$s och tog bort %3$s som adresser för det här rummet. + Du lade till %1$s och tog bort %2$s som adresser för det här rummet. + %1$s satta huvudadressen för det här rummet till %2$s. + Du satta huvudadressen för det här rummet till %1$s. + %1$s tog bort huvudadressen för det här rummet. + Du tog bort huvudadressen för det här rummet. + %1$s tillät gäster att gå med i rummet. + Du tillät gäster att gå med i rummet. + %1$s hindrade gäster från att gå med i rummet. + Du hindrade gäster från att gå med i rummet. + %1$s aktiverade totalsträckskryptering. + Du aktiverade totalsträckskryptering. + %1$s aktiverade totalsträckskryptering (okänd algoritm %2$s). + Du aktiverade totalsträckskryptering (okänd algoritm %1$s). + Du hindrade gäster från att gå med i rummet. + %1$s hindrade gäster från att gå med i rummet. + Du tillät gäster att gå med här. + %1$s tillät gäster att gå med här. + Du lämnade. Anledning: %1$s + %1$s Lämnade. Anledning: %2$s + Du gick med. Anledning: %1$s + %1$s gick med. Anledning: %2$s + Du drog tillbaka inbjudan för %1$s + %1$s drog tillbaka inbjudan för %2$s + Du bjöd in %1$s + %1$s bjöd in %2$s + Du uppgraderade här. + %s uppgraderade här. + Du gjorde framtida meddelanden synliga för %1$s + %1$s gjorde framtida meddelanden synliga för %2$s + Du lämnade rummet + %1$s lämnade rummet + Du gick med + %1$s gick med + Du skapade diskussionen + %1$s skapade diskussionen + Du ändrade adresserna för det här rummet. + %1$s ändrade adresserna för det här rummet. + Du ändrade huvudadressen och de alternativa adresserna för det här rummet. + %1$s ändrade huvudadressen och de alternativa adresserna för det här rummet. + Du ändrade de alternativa adresserna för det här rummet. + %1$s ändrade de alternativa adresserna för det här rummet. + + Du tog bort den alternativa adressen %1$s för det här rummet. + Du tog bort de alternativa adresserna %1$s för det här rummet. + + + %1$s tog bort den alternativa adressen %2$s för det här rummet. + %1$s tog bort de alternativa adresserna %2$s för det här rummet. + + + Du lade till den alternativa adressen %1$s för det här rummet. + Du lade till de alternativa adresserna %1$s för det här rummet. + + + %1$s lade till den alternativa adressen %2$s för det här rummet. + %1$s lade till de alternativa adresserna %2$s för det här rummet. + + Tomt rum (var %s) + + %1$s, %2$s, %3$s och %4$d till + %1$s, %2$s, %3$s och %4$d till + + %1$s, %2$s, %3$s och %4$s + %1$s, %2$s och %3$s + 🎉 Alla servrar har bannats från att delta! Det här rummet kan inte användas längre. + Ingen ändring. + • Servrar som matchar IP-adresser är nu bannade. + • Servrar som matchar IP-adresser är nu tillåtna. + • Servrar som matchar %s togs bort från tillåtelselistan. + • Servrar som matchar %s är nu tillåtna. + • Servrar som matchar %s togs bort från bannlistan. + • Servrar som matchar %s är nu bannade. + Du ändrade server-ACLer för det här rummet. + %s ändrade server-ACLer för det här rummet. + • Servrar som matchar IP-adresser är tillåtna. + • Servrar som matchar IP-adresser är bannade. + • Servrar som matchar %s är tillåtna. + • Servrar som matchar %s är bannade. + Du satte server-ACLer för det här rummet. + %s satte server-ACLer för det här rummet. + Du ändrade videogruppsamtal + Videogruppsamtal ändrades av %1$s + Du avslutade videogruppsamtal + Videogruppsamtal avslutades av %1$s + Du startade videogruppsamtal + Videogruppsamtal startades av %1$s Ljust tema Mörkt tema Svart tema diff --git a/vector/src/main/res/values-te/strings.xml b/vector/src/main/res/values-te/strings.xml index 1e6e138835..56a76fa72c 100644 --- a/vector/src/main/res/values-te/strings.xml +++ b/vector/src/main/res/values-te/strings.xml @@ -1,5 +1,71 @@ + %s\'s ఆహ్వానం + %1$s ఆహ్వానించారు %2$s + %1$s వదిలి వెళారు + %1$s ఆహ్వానాన్ని తిరస్కరించారు + %1$s తన్నాడు %2$s + %1$s నిషేధాన్ని %2$s + %1$s నిషేధించారు %2$s + %1$s ఉపసంహరించుకుంది %2$s\'s ఆహ్వానం + %1$s వారి అవతార్ను మార్చారు + %1$s వారి డిస్ప్లే పేరును ని సెట్ చేసారు %2$s + %1$s వారి ప్రదర్శన పేరును %2$s నుండి %3$s మార్చారు + %1$s వారి ప్రదర్శన పేరుని తీసివేసారు (%2$s) + %1$s అంశం మార్చబడింది:%2$s + %1$s గది పెరు మార్చబడింది %2$s + %s ఒక వీడియో కాల్ని ఉంచింది. + %s వాయిస్ కాల్ని ఉంచారు. + %s కాల్కి సమాధానం ఇచ్చారు. + %s కాల్ ముగిసింది. + %1$s భవిష్యత్ గది చరిత్రను %2$s కి కనిపించేలా చేసింది + పాయింట్నుండి, అన్ని గది సభ్యుల వారు ఆహ్వానించబడ్డారు. + పాయింట్ నుండి, అన్ని గదుల సభ్యుల వారు చేరారు. + అన్ని గదుల సభ్యులు. + ఎవరైనా. + తెలియని (%s). + %1$s ఎండ్-టు-ఎండ్ ఎన్క్రిప్షన్ ఆన్ చెయ్యబడింది (%2$s) + + %1$s వి ఓ ఇ పి సమావేశాన్ని అభ్యర్థించారు + వి ఓ ఇ పి సమావేశం ప్రారంభమైంది + వి ఓ ఇ పి సమావేశం ముగిసింది + + (అవతార్ మార్చబడింది) + %1$s గది పేరు తొలగించబడింది + %1$s గది అంశాన్ని తీసివేసారు + %1$s వారి ప్రొఫైల్ నవీకరించబడింది %2$s + %1$s గదిలో చేరడానికి %2$s కు ఆహ్వానాన్ని పంపారు + %2$sకోసం %1$s ఆహ్వానాన్ని అంగీకరించారు + + ** వ్యక్తీకరించడానికి సాధ్యం కాలేదు: %s ** + ఈ సందేశానికి పంపేవారి పరికరం మాకు కీలను పంపలేదు. + + గది స్క్రీన్ + సందేశం పంపడం సాధ్యం కాలేదు + + చిత్రాన్ని అప్లోడ్ చేయడంలో విఫలమైంది + + సాధారణ లోపాలు + మాట్రిక్స్ లోపం + + మళ్లీ ఖాళీ గది ని చేరడానికి ప్రస్తుతం ఇది సాధ్యం కాదు. + + ఎన్క్రిప్టెడ్ సందేశం + + ఇమెయిల్ చిరునామా + ఫోను నంబరు + + + %1$s: %2$s + %1$s ఒక చిత్రం పంపారు. + + %1$s మిమ్మల్ని ఆహ్వానించారు + %1$s చేరారు + + %s నుండి ఆహ్వానించు + %1$s మరియు %2$s + గదికి ఆహ్వానం + ఖాళీ గది గది అలాగే సభ్యుని వివరాలు diff --git a/vector/src/main/res/values-th/strings.xml b/vector/src/main/res/values-th/strings.xml index ac0b01b91d..7eefd0fbd5 100644 --- a/vector/src/main/res/values-th/strings.xml +++ b/vector/src/main/res/values-th/strings.xml @@ -1,5 +1,6 @@ + %1$s: %2$s หรือ เปิด ปิด diff --git a/vector/src/main/res/values-uk/strings.xml b/vector/src/main/res/values-uk/strings.xml index c3dc489054..f84b97bf5c 100644 --- a/vector/src/main/res/values-uk/strings.xml +++ b/vector/src/main/res/values-uk/strings.xml @@ -1,5 +1,178 @@ + %1$s: %2$s + %1$s надсилає зображення. + %s запрошення + %1$s запрошує %2$s + Зашифроване повідомлення + + Запрошення від %s + Запрошення до кімнати + %1$s і %2$s + Порожня кімната + %1$s надсилає наліпку. + %1$s запрошує вас + %1$s приєднується + %1$s залишає кімнату + %1$s відхиляє запрошення + %1$s викидає %2$s + %1$s розблоковує %2$s + %1$s блокує %2$s + %1$s відкликає запрошення для %2$s + %1$s змінює свій аватар + %1$s встановлюють собі назву %2$s + %1$s змінює своє ім’я з %2$s на %3$s + %1$s прибирає своє ім’я (%2$s) + %1$s змінює тему на: %2$s + %1$s змінює назву кімнати на: %2$s + %s починає відеовиклик. + %s розпочинає голосовий виклик. + %s відповідає на виклик. + %s завершує дзвінок. + %1$s робить майбутню історію кімнати видимою для %2$s + всіх учасників кімнати, з моменту їх запрошення. + всіх учасників кімнати, з моменту їх приєднання. + всіх учасників кімнати. + будь-кого. + невідомо (%s). + %1$s вмикає наскрізне шифрування (%2$s) + %1$s запросив(ла) VoIP конференцію + VoIP конференція розпочалась + VoIP конференція завершилась + (аватар також змінено) + %1$s прибирає назву кімнати + %1$s прибирає тему кімнати + %1$s оновлює свій профіль %2$s + %1$s надсилає запрошення %2$s приєднатися до кімнати + %1$s приймає запрошення до %2$s + ** Неможливо розшифрувати: %s ** + Пристрій відправника не надіслав нам ключ для цього повідомлення. + Неможливо відредагувати + Не вдалося надіслати повідомлення + Не вдалося завантажити зображення + Помилка мережі + Помилка Matrix + Наразі неможливо переприєднатися до порожньої кімнати. + Адреса електронної пошти + Номер телефону + + %1$s та 1 інший + %1$s та %2$d інші + %1$s та %2$d інших + + + %s оновлює цю кімнату. + Повідомлення вилучено + %1$s вилучає повідомлення + Повідомлення вилучено [причина: %1$s] + Початкове налаштування: +\nІмпортування даних облікового запису + Ви вийшли. Причина: %1$s + %1$s виходить. Причина: %2$s + Ви залишили кімнату. Причина: %1$s + %1$s залишає кімнату. Причина: %2$s + %1$s залишає кімнату + Ви залишили кімнату + Ви залишили кімнату + Ви змінили адреси цієї кімнати. + Ви змінили основну та альтернативну адреси цієї кімнати. + Ви змінили альтернативні адреси для цієї кімнати. + Ви змінили рівень доступу на %1$s. + Ви змінили серверні списки контролю доступу для цієї кімнати. + Ви змінили назву кімнати на: %1$s + Ви змінили світлину кімнати + Ви змінили тему на: %1$s + Ви змінили показуване ім\'я з %1$s на %2$s + Ви змінили світлину профілю + + %1$s, %2$s, %3$s та %4$d інший + %1$s, %2$s, %3$s та %4$d інші + %1$s, %2$s, %3$s та %4$d інших + %1$s, %2$s, %3$s та %4$d інших + + %1$s, %2$s, %3$s та %4$s + %1$s, %2$s та %3$s + Типово + Модератор + Адміністратор + Ви вилучили %1$s віджет + %1$s вилучає %2$s віджет + Ви додали %1$s віджет + %1$s додає %2$s віджет + Ви прийняли запрошення до %1$s + Ви надіслали запрошення для %1$s приєднатися до кімнати + Ви оновили свій профіль %1$s + %1$s вилучає повідомлення [причина: %2$s] + Ви прибрали аватар кімнати + %1$s прибирає аватар кімнати + Ви прибрали тему кімнати + Ви прибрали назву кімнати + %s оновлює кімнату. + Ви оновили цю кімнату. + Ви увімкнули наскрізне шифрування (%1$s) + Ви починаєте голосовий виклик. + Ви починаєте відеовиклик. + %1$s змінює аватар кімнати + Ви прибрали показуване ім\'я (%1$s) + Ви викинули %1$s + %1$s запрошує %2$s + Ви відхилили запрошення + Ви приєдналися + %1$s приєднується + Ви приєдналися до кімнати + Ви запросили %1$s + Ви запросили %1$s + Ви створили обговорення + %1$s створює обговорення + Ви створили кімнату + %1$s створює кімнату + Ваше запрошення + Ви надіслали наліпку. + Ви надіслали зображення. + Ви відхилили запрошення. Причина: %1$s + %1$s відхиляє запрошення. Причина: %2$s + Ви приєдналися. Причина: %1$s + %1$s приєднується. Причина: %2$s + Ви приєднуєтеся до кімнати. Причина: %1$s + %1$s приєднується до кімнати. Причина: %2$s + %1$s запрошує вас. Причина: %2$s + Ви запросили %1$s. Причина: %2$s + %1$s запрошує %2$s. Причина: %3$s + Ваше запрошення. Причина: %1$s + Запрошення від %1$s. Причина: %2$s + Очистити чергу надсилання + Надсилання повідомлень… + Початкова синхронізація: +\nІмпортування спільнот + Початкова синхронізація: +\nІмпортування кімнат, які ви залишили + Початкова синхронізація: +\nІмпортування запрошень до кімнат + Початкова синхронізація: +\nІмпортування кімнат, до яких ви приєдналися + Початкова синхронізація: +\nІмпортування кімнат + Початкова синхронізація: +\nІмпортування криптографічних даних + Початкова синхронізація: +\nІмпортування даних облікового запису… + Порожня кімната (була %s) + Власний + Власний (%1$d) + Ви змінили віджет %1$s + %1$s змінює віджет %2$s + Ви оновили кімнату. + Ви зробили майбутню історію кімнати видимою для %1$s + Ви зробили майбутні повідомлення видимими для %1$s + %1$s робить майбутні повідомлення видимими для %2$s + Ви завершили дзвінок. + Ви відповіли на виклик. + Ви надіслали дані для налаштування виклику. + %s надсилає дані для налаштування виклику. + Ви встановили собі показуване ім\'я %1$s + Ви відкликали запрошення для %1$s + Ви заблокували %1$s + Ви заблокували %1$s Світла Тема Темна Тема diff --git a/vector/src/main/res/values-vls/strings.xml b/vector/src/main/res/values-vls/strings.xml index 4e30374a81..0e14a8aa15 100644 --- a/vector/src/main/res/values-vls/strings.xml +++ b/vector/src/main/res/values-vls/strings.xml @@ -1,5 +1,105 @@ + %1$s: %2$s + %1$s èt e fotootje gesteurd. + %1$s èt e sticker gesteurd. + + Uutnodigienge van %s + %1$s èt %2$s uutgenodigd + %1$s èt joun uitgenodigd + %1$s neemt nu deel an ’t gesprek + %1$s èt ’t gesprek verloatn + %1$s èt d’uitnodigienge geweigerd + %1$s èt %2$s uut ’t gesprek verwyderd + %1$s èt %2$s ountbann + %1$s èt %2$s verbann + %1$s èt d’uutnodigienge van %2$s ingetrokkn + %1$s èt zyn/heur avatar angepast + %1$s èt zyn/heur noame angepast noa %2$s + %1$s èt zyn/heur noame angepast van %2$s noa %3$s + %1$s èt zyn/heur noame verwyderd (%2$s) + %1$s èt ’t ounderwerp veranderd noa: %2$s + %1$s èt de gespreksnoame veranderd noa: %2$s + %s èt e video-iproep gemakt. + %s èt e sproakiproep gemakt. + %s èt den iproep beantwoord. + %s èt ipgehangn. + %1$s èt de toekomstige gespreksgeschiedenisse zichtboar gemakt vo %2$s + alle deelnemers an ’t gesprek, vanaf ’t punt dan ze zyn uutgenodigd. + alle deelnemers an ’t gesprek, vanaf ’t punt dan ze zyn toegetreedn. + alle deelnemers an ’t gesprek. + iedereen. + ounbekend (%s). + %1$s èt eind-tout-eind-versleutelienge angezet (%2$s) + + %1$s èt e VoIP-vergoaderienge angevroagd + VoIP-vergoaderienge begunn + VoIP-vergoaderienge gestopt + + (avatar es ook veranderd) + %1$s èt de gespreksnoame verwyderd + %1$s èt ’t gespreksounderwerp verwyderd + Bericht verwyderd + Bericht verwyderd deur %1$s + Bericht verwyderd [reden: %1$s] + Bericht verwyderd deur %1$s [reden: %2$s] + %1$s èt zyn/heur profiel %2$s bygewerkt + %1$s èt een uutnodigienge noa %2$s gesteurd vo ’t gesprek toe te treedn + %1$s èt d’uutnodigienge vo %2$s anveird + + ** Kun nie ountsleuteln: %s ** + ’t Toestel van den afzender èt geen sleutels vo da bericht hier gesteurd. + + Kosteg nie verwyderd wordn + Kosteg ’t bericht nie verzendn + + Iploadn van ’t fotootje es mislukt + + Netwerkfout + Matrix-fout + + ’t Es vo de moment nie meuglik van e leeg gesprek were toe te treedn. + + Versleuteld bericht + + E-mailadresse + Telefongnumero + + Uutnodigienge van %s + Gespreksuutnodigienge + + %1$s en %2$s + + + %1$s en 1 andere + %1$s en %2$d anderen + + + Leeg gesprek + + Initiële synchronisoasje: +\nAccount wor geïmporteerd… + Initiële synchronisoasje: +\nCrypto wor geïmporteerd + Initiële synchronisoasje: +\nGesprekkn wordn geïmporteerd + Initiële synchronisoasje: +\nDeelgenoomn gesprekken wordn geïmporteerd + Initiële synchronisoasje: +\nUutgenodigde gesprekkn wordn geïmporteerd + Initiële synchronisoasje: +\nVerloatn gesprekkn wordn geïmporteerd + Initiële synchronisoasje: +\nGemeenschappn wordn geïmporteerd + Initiële synchronisoasje: +\nAccountgegeevns wordn geïmporteerd + + %s èt da gesprek hier ipgewoardeerd. + + Bericht wor verstuurd… + Uutgoande wachtreeke leegn + + %1$s èt d’uutnodigienge vo %2$s vo ’t gesprek toe te treedn ingetrokkn Versleuteld bericht Licht thema diff --git a/vector/src/main/res/values-zh-rCN/strings.xml b/vector/src/main/res/values-zh-rCN/strings.xml index 3d9186d599..206ec665af 100644 --- a/vector/src/main/res/values-zh-rCN/strings.xml +++ b/vector/src/main/res/values-zh-rCN/strings.xml @@ -1,5 +1,212 @@ + %1$s 发送了一张图片。 + %s 的邀请 + %1$s 邀请了 %2$s + %1$s 邀请了您 + %1$s 加入了聊天室 + %1$s 离开了聊天室 + %1$s 拒绝了邀请 + %1$s 移除了 %2$s + %1$s 解封了 %2$s + %1$s 封禁了 %2$s + %1$s 更换了他们的头像 + %1$s 将他们的昵称设置为 %2$s + %1$s 把他们的昵称从 %2$s 改为 %3$s + %1$s 移除了他们的昵称 (%2$s) + %1$s 把主题改为: %2$s + %1$s 把聊天室名称改为: %2$s + %s 发起了一次视频通话。 + %s 发起了一次语音通话。 + %s 已接听通话。 + %s 已结束通话。 + 所有聊天室成员,从他们被邀请开始。 + 所有聊天室成员,从他们加入开始。 + 所有聊天室成员。 + 任何人。 + 未知(%s)。 + %1$s 开启了端到端加密(%2$s) + %1$s 请求了一次 VoIP 会议 + VoIP 会议已开始 + VoIP 会议已结束 + (头像也被更改) + %1$s 移除了聊天室名称 + %1$s 移除了聊天室主题 + ** 无法解密:%s ** + 发送者的设备没有向我们发送此消息的密钥。 + 无法发送消息 + 上传图像失败 + 网络错误 + Matrix 错误 + 目前无法重新加入一个空的聊天室。 + 已加密消息 + 电子邮箱地址 + 手机号码 + %1$s 撤回了对 %2$s 的邀请 + %1$s 让未来的聊天室历史记录对 %2$s 可见 + %1$s 更新了他的个人档案 %2$s + %1$s 向 %2$s 发送了加入聊天室的邀请 + %1$s 接受了 %2$s 的邀请 + 无法撤回 + %1$s:%2$s + %1$s 发送了一张贴纸。 + 空聊天室 + 来自 %s 的邀请 + 聊天室邀请 + %1$s 和 %2$s + + %1$s 与其他 %2$d 位 + + 消息已被移除 + 消息已被 %1$s 移除 + 消息已被移除 [原因: %1$s] + 消息已被 %1$s 移除 [原因: %2$s] + 初始化同步: +\n正在导入账号… + 初始化同步: +\n正在导入加密数据 + 初始化同步: +\n正在导入聊天室 + 初始化同步: +\n正在导入已加入的聊天室 + 初始化同步: +\n正在导入已邀请的聊天室 + 初始化同步: +\n正在导入已离开的聊天室 + 初始化同步: +\n正在导入社区 + 初始化同步: +\n正在导入账号数据 + %s 升级了此聊天室。 + 正在发送消息… + 清除正在发送队列 + %1$s 撤回了对 %2$s 加入聊天室的邀请 + %1$s 的邀请。理由:%2$s + %1$s 邀请了 %2$s。理由:%3$s + %1$s 邀请了您。理由:%2$s + %1$s 加入了聊天室。理由:%2$s + %1$s 离开了聊天室。理由:%2$s + %1$s 已拒绝邀请。理由:%2$s + %1$s 踢走了 %2$s。理由:%3$s + %1$s 解封了 %2$s。理由:%3$s + %1$s 封禁了 %2$s。理由:%3$s + %1$s 已发送邀请给 %2$s 来加入聊天室。理由:%3$s + %1$s 撤销了 %2$s 加入聊天室的邀請。理由:%3$s + %1$s 接受 %2$s 的邀請。理由:%3$s + %1$s 撤回了对 %2$s 的邀请。理由:%3$s + + %1$s 新增了 %2$s 为此聊天室的地址。 + + + %1$s 移除了 %2$s 作为此聊天室额地址。 + + %1$s 为此聊天室新增了 %2$s 并移除 %3$s 地址。 + %1$s 将此聊天室的主地址设为了 %2$s。 + %1$s 为此聊天室移除了主地址。 + %1$s 已允许访客加入聊天室。 + %1$s 已禁止访客加入聊天室。 + %1$s 已开启端到端加密。 + %1$s 已开启端到端加密(无法识别的演算法 %2$s)。 + %1$s 创建了这个聊天室 + 您发送了一张图片。 + 您发送了一张贴纸。 + 您的邀请 + 您创建了这个聊天室 + 您邀请了 %1$s + 您加入了聊天室 + 您离开了聊天室 + 您拒绝了邀请 + 您移除了 %1$s + 您解封了 %1$s + 您封禁了 %1$s + 您撤回了对 %1$s 的邀请 + 您更换了您的头像 + 您将您的昵称设置为 %1$s + 您将您的昵称从 %1$s 改为 %2$s + 您移除了您的昵称 (%1$s) + 您把主题改为:%1$s + %1$s 变更了聊天室头像 + 您变更了聊天室头像 + 您把聊天室名称改为:%1$s + 您发起了一次视频通话。 + 您发起了一次语音通话。 + %s 发送了数据以建立通话。 + 您发送了数据以建立通话。 + 您接听了通话。 + 您结束了通话。 + 您已让未来的聊天室记录对 %1$s 可见 + 您开启了端到端加密(%1$s) + 您升级了此聊天室。 + 您请求了 VoIP 会议 + 您移除了聊天室名称 + 您移除了聊天室主题 + %1$s 移除了聊天室头像 + 您移除了聊天室头像 + 您更新了您的个人档案 %1$s + 您向 %1$s 发送了加入聊天室的邀请 + 您已撤回了对 %1$s 加入聊天室的邀请 + 您接受了 %1$s 的邀请 + %1$s 添加了 %2$s 小部件 + 您添加了 %1$s 小部件 + %1$s 移除了 %2$s 小部件 + 您移除了 %1$s 小部件 + %1$s 修改了 %2$s 小部件 + 您修改了 %1$s 小部件 + 管理员 + 审核员 + 默认 + 自定义(%1$d) + 自定义 + 您更改了%1$s 的权力等级。 + %1$s 更改了 %2$s 的权力等级。 + %1$s 从 %2$s 到 %3$s + 您的邀请。理由:%1$s + 您邀请了 %1$s。理由:%2$s + 您加入了聊天室。理由:%1$s + 您离开了聊天室。理由:%1$s + 您拒绝了邀请。理由:%1$s + 您踢走了 %1$s。理由:%2$s + 您解封了 %1$s。理由:%2$s + 您封禁了 %1$s。理由:%2$s + 您已发送邀请给 %1$s 来加入聊天室。理由:%2$s + 您撤销了 %1$s 加入聊天室的邀请。理由:%2$s + 您接受了 %1$s 的邀请。理由:%2$s + 您撤回了 %1$s 的邀请。理由:%2$s + + 您新增了 %1$s 为此聊天室的地址。 + + + 您移除了此聊天室的 %1$s 地址。 + + 您为此聊天室新增了 %1$s 并移除了 %2$s 地址。 + 您将此聊天室的主地址设为了 %1$s。 + 您移除了此聊天室的主地址。 + 您已允许访客加入聊天室。 + 您已禁止访客加入聊天室。 + 您已开启端到端加密。 + 您已开启端到端加密(无法识别的算法 %1$s)。 + 您已离开。理由:%1$s + %1$s 已离开。理由:%2$s + 您已加入。理由:%1$s + %1$s 已加入。理由:%2$s + 您撤回了对 %1$s 的邀请 + %1$s 撤回了对 %2$s 的邀请 + 您邀请了 %1$s + %1$s 邀请了 %2$s + 您在此处升级。 + %s 在此处升级。 + 您使未来的消息对 %1$s 可见 + %1$s 使未来的消息对 %2$s 可见 + 您离开了聊天室 + %1$s 离开了聊天室 + 您已加入 + %1$s 已加入 + 您创建了讨论 + %1$s 创建了讨论 + 你已阻止客人加入房间。 + %1$s已阻止客人加入房间。 + 你已允许客人加入这里。 + %1$s 已允许客人加入这里。 接受 拒绝 挂断 diff --git a/vector/src/main/res/values-zh-rTW/strings.xml b/vector/src/main/res/values-zh-rTW/strings.xml index b915f2d97d..2a73f3a596 100644 --- a/vector/src/main/res/values-zh-rTW/strings.xml +++ b/vector/src/main/res/values-zh-rTW/strings.xml @@ -1,5 +1,258 @@ + %1$s:%2$s + %1$s 傳送了一張圖片。 + %s 的邀請 + %1$s 邀請了 %2$s + %1$s 邀請您 + %1$s 已加入聊天室 + %1$s 已離開聊天室 + %1$s 拒絕邀請 + %1$s 踢出 %2$s + %1$s 解除禁止 %2$s + %1$s 禁止 %2$s + %1$s 收回了對 %2$s 的邀請 + %1$s 變更了他們的大頭貼 + %1$s 設定了他們的顯示名稱為 %2$s + %1$s 變更了他們的顯示名稱從 %2$s 到 %3$s + %1$s 移除了他們的顯示名稱 (%2$s) + %1$s 變更主題為:%2$s + %1$s 變更房間名稱為:%2$s + %s 撥出了視訊通話。 + %s 撥出了語音通話。 + %s 回覆了通話。 + %s 結束通話。 + %1$s 讓房間未來可讓 %2$s 看到歷史紀錄 + 所有的房間成員,從他們被邀請的時間開始。 + 所有的房間成員,從他們加入的時間開始。 + 所有的房間成員。 + 任何人。 + 未知 (%s)。 + %1$s 開啟了端對端加密 (%2$s) + %1$s 請求了 VoIP 會議通話 + VoIP 會議通話已開始 + VoIP 會議通話已結束 + (大頭貼也變更了) + %1$s 移除了房間名稱 + %1$s 移除了房間主題 + %1$s 更新了他們的基本資料 %2$s + %1$s 傳送加入房間的邀請給 %2$s + %1$s 接受 %2$s 的邀請 + ** 無法解密:%s ** + 傳送者的裝置並未在此訊息傳送他們的金鑰。 + 無法編輯 + 無法傳送訊息 + 上傳圖片失敗 + 網路錯誤 + Matrix 錯誤 + 目前無法重新加入空房間。 + 已加密的訊息 + 電子郵件 + 電話號碼 + %1$s 傳送了一張貼圖。 + 來自%s 的邀請 + 聊天室邀請 + %1$s 和 %2$s + 空聊天室 + + %1$s 和 和其他 %2$d 個人 + + 訊息已移除 + 訊息已被 %1$s 移除 + 訊息已移除 [理由:%1$s] + 訊息已被 %1$s 移除 [理由:%2$s] + 初始化同步: +\n正在匯入帳號…… + 初始化同步: +\n正在匯入 crypto + 初始化同步: +\n正在匯入聊天室 + 初始化同步: +\n正在匯入已加入的聊天室 + 初始化同步: +\n正在匯入已邀請的聊天室 + 初始化同步: +\n正在匯入已離開的聊天室 + 初始化同步: +\n正在匯入社群 + 初始化同步: +\n正在匯入帳號資料 + %s 已升級此聊天室。 + 正在傳送訊息…… + 清除傳送佇列 + %1$s 撤銷了 %2$s 加入聊天室的邀請 + %1$s 的邀請。理由:%2$s + %1$s 邀請了 %2$s。理由:%3$s + %1$s 邀請了您。理由:%2$s + %1$s 已加入聊天室。理由:%2$s + %1$s 已離開聊天室。理由:%2$s + %1$s 已回絕邀請。理由:%2$s + %1$s 踢走了 %2$s。理由:%3$s + %1$s 取消封鎖了 %2$s。理由:%3$s + %1$s 封鎖了 %2$s。理由:%3$s + %1$s 已傳送邀請給 %2$s 來加入聊天室。理由:%3$s + %1$s 撤銷了 %2$s 加入聊天室的邀請。理由:%3$s + %1$s 接受 %2$s 的邀請。理由:%3$s + %1$s 撤回了對 %2$s 的邀請。理由:%3$s + + %1$s 新增了 %2$s 為此聊天室的地址。 + + + %1$s 移除了此聊天室的 %2$s 地址。 + + %1$s 為此聊天室新增 %2$s 並移除 %3$s 地址。 + %1$s 為此聊天室設定了 %2$s 為主地址。 + %1$s 為此聊天室移除了主要地址。 + %1$s 已允許訪客加入聊天室。 + %1$s 已禁止訪客加入聊天室。 + %1$s 已開啟端到端加密。 + %1$s 已開啟端到端加密(無法識別的演算法 %2$s)。 + %1$s 建立了聊天室 + 您傳送了圖片。 + 您傳送了貼圖。 + 您的邀請 + 您建立了聊天室 + 您邀請了 %1$s + 您加入了聊天室 + 您離開的聊天室 + 您回絕了邀請 + 您踢除了 %1$s + 您取消封鎖了 %1$s + 您封鎖了 %1$s + 您撤銷了 %1$s 的邀請 + 您變更了您的大頭貼 + 您將您的顯示名稱設定為 %1$s + 您將您的顯示名稱從 %1$s 變更為 %2$s + 您移除了您的顯示名稱(其曾為 %1$s) + 您將主題變更為:%1$s + %1$s 變更了聊天室大頭貼 + 您變更了聊天室大頭貼 + 您將聊天室名稱變更為:%1$s + 您發起了視訊通話。 + 您發起了音訊通話。 + %s 傳送了資料以建立通話。 + 您傳送了資料以建立通話。 + 您接了通話。 + 您結束了通話。 + 您已將未來的聊天室歷史設定為對 %1$s 可見 + 您開啟了端到端加密 (%1$s) + 您升級了此聊天室。 + 您請求了 VoIP 會議 + 您移除了聊天室名稱 + 您移除了聊天室主題 + %1$s 移除了聊天室大頭貼 + 您移除了聊天室大頭貼 + 您更新了您的個人檔案 %1$s + 您傳送了邀請給 %1$s 以加入聊天室 + 您已撤銷對 %1$s 加入聊天室的邀請 + 您接受了 %1$s 的邀請 + %1$s 新增了 %2$s 小工具 + 您新增了 %1$s 小工具 + %1$s 移除了 %2$s 小工具 + 您移除了 %1$s 小工具 + %1$s 修改了 %2$s 小工具 + 您修改了 %1$s 小工具 + 管理員 + 板主 + 預設 + 自訂 (%1$d) + 自訂 + 您變更了 %1$s 的權力等級。 + %1$s 變更了 %2$s 的權力等級。 + %1$s 從 %2$s 到 %3$s + 您的邀請。理由:%1$s + 您邀請了 %1$s。理由:%2$s + 您加入了聊天室。理由:%1$s + 您離開了聊天室。理由:%1$s + 您回絕了邀請。理由:%1$s + 您踢除了 %1$s。理由:%2$s + 您取消封鎖了 %1$s。理由:%2$s + 您封鎖了 %1$s。理由:%2$s + 您傳甕了邀請給 %1$s 以加入聊天室。理由:%2$s + 您撤銷了 %1$s 加入聊天室的邀請。理由:%2$s + 您接受了 %1$s 的邀請。理由:%2$s + 您撤回了 %1$s 的邀請。理由:%2$s + + 您為此聊天室新增了 %1$s 作為地址。 + + + 您為此聊天室移除了 %1$s 作為地址。 + + 您為此聊天室新增了 %1$s 並移除了 %2$s 作為地址。 + 您將此聊天室的主要地址設定為 %1$s。 + 您將此聊天室的主要地址移除。 + 您已允許訪客加入聊天室。 + 您已阻止訪客加入聊天室。 + 您開啟了端到端加密。 + 您開啟了端到端加密(無法識別的演算法 %1$s)。 + 您已避免訪客加入此聊天室。 + %1$s 已避免訪客加入此聊天室。 + 您已允許訪客加入這裡。 + %1$s 已允許訪客加入這裡。 + 您已離開。理由:%1$s + %1$s 已離開。理由:%2$s + 您已加入。理由:%1$s + %1$s 已加入。理由:%2$s + 您已撤銷對 %1$s 的邀請 + %1$s 已撤銷對 %2$s 的邀請 + 您已邀請了 %1$s + %1$s 邀請了 %2$s + 您已在此升級。 + %s 已在此升級。 + 您讓未來的訊息對 %1$s 可見 + %1$s 已讓未來的訊息對 %2$s 可見 + 您已離開聊天室 + %1$s 已離開聊天室 + 您已加入 + %1$s 已加入 + 您已建立此討論 + %1$s 已建立此討論 + 空的聊天室(曾為 %s) + + %1$s, %2$s, %3$s 與 %4$d 個其他 + + %1$s, %2$s, %3$s 與 %4$s + %1$s, %2$s 與 %3$s + 🎉 禁止所有伺服器參與!無法再使用此聊天室。 + 無變更。 + • 禁止伺服器符合 IP 文字。 + • 允許伺服器符合 IP 文字。 + • 伺服器符合 %s 已從允許清單中移除。 + • 允許伺服器符合 %s。 + • 伺服器符合 %s 已從禁止清單中移除。 + • 現在禁止伺服器符合 %s。 + 您為此聊天室變更了伺服器 ACL。 + %s 為此聊天是變更了伺服器 ACL。 + • 禁止伺服器符合 IP 文字。 + • 允許伺服器符合 IP 文字。 + • 已允許伺服器符合 %s。 + • 已禁止伺服器符合 %s。 + 您為此聊天是設定了伺服器 ACL。 + %s 為此聊天是設定了伺服器 ACL。 + 您變更了此聊天室的地址。 + %1$s 變更了此聊天室的地址。 + 您為此聊天室變更了主要及備用地址。 + %1$s 為此聊天室變更了主要及備用地址。 + 您為此聊天室變更了備用地址。 + %1$s 變更了此聊天室的備用地址。 + + 您為此聊天室移除了備用地址 %1$s。 + + + %1$s 已為此聊天室移除備用地址 %2$s。 + + + 您為此聊天室新增了備用地址 %1$s。 + + + %1$s 已為此聊天室新增了備用地址 %2$s。 + + 您修改了視訊會議 + %1$s 修改了視訊會議 + 您結束了視訊會議 + %1$s 結束了視訊會議 + 您開始了視訊會議 + 由 %1$s 開始的視訊會議 淺色主題 深色主題 黑色主題 diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index feaad8bf1f..99eef6a8e2 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -1,5 +1,316 @@ + %1$s: %2$s + %1$s sent an image. + You sent an image. + %1$s sent a sticker. + You sent a sticker. + + %s\'s invitation + Your invitation + %1$s created the room + You created the room + %1$s created the discussion + You created the discussion + %1$s invited %2$s + You invited %1$s + %1$s invited you + %1$s joined the room + You joined the room + %1$s joined + You joined + %1$s left the room + You left the room + %1$s left the room + You left the room + %1$s rejected the invitation + You rejected the invitation + %1$s kicked %2$s + You kicked %1$s + %1$s unbanned %2$s + You unbanned %1$s + %1$s banned %2$s + You banned %1$s + %1$s withdrew %2$s\'s invitation + You withdrew %1$s\'s invitation + %1$s changed their avatar + You changed your avatar + %1$s set their display name to %2$s + You set your display name to %1$s + %1$s changed their display name from %2$s to %3$s + You changed your display name from %1$s to %2$s + %1$s removed their display name (it was %2$s) + You removed your display name (it was %1$s) + %1$s changed the topic to: %2$s + You changed the topic to: %1$s + %1$s changed the room avatar + You changed the room avatar + %1$s changed the room name to: %2$s + You changed the room name to: %1$s + %s placed a video call. + You placed a video call. + %s placed a voice call. + You placed a voice call. + %s sent data to setup the call. + You sent data to setup the call. + %s answered the call. + You answered the call. + %s ended the call. + You ended the call. + %1$s made future room history visible to %2$s + You made future room history visible to %1$s + %1$s made future messages visible to %2$s + You made future messages visible to %1$s + all room members, from the point they are invited. + all room members, from the point they joined. + all room members. + anyone. + unknown (%s). + %1$s turned on end-to-end encryption (%2$s) + You turned on end-to-end encryption (%1$s) + %s upgraded this room. + You upgraded this room. + %s upgraded here. + You upgraded here. + %s set the server ACLs for this room. + You set the server ACLs for this room. + • Server matching %s are banned. + • Server matching %s are allowed. + • Server matching IP literals are allowed. + • Server matching IP literals are banned. + + %s changed the server ACLs for this room. + You changed the server ACLs for this room. + • Server matching %s are now banned. + • Server matching %s were removed from the ban list. + • Server matching %s are now allowed. + • Server matching %s were removed from the allowed list. + • Server matching IP literals are now allowed. + • Server matching IP literals are now banned. + No change. + 🎉 All servers are banned from participating! This room can no longer be used. + + %1$s requested a VoIP conference + You requested a VoIP conference + VoIP conference started + VoIP conference finished + + (avatar was changed too) + %1$s removed the room name + You removed the room name + %1$s removed the room topic + You removed the room topic + %1$s removed the room avatar + You removed the room avatar + Message removed + Message removed by %1$s + Message removed [reason: %1$s] + Message removed by %1$s [reason: %2$s] + %1$s updated their profile %2$s + You updated your profile %1$s + %1$s sent an invitation to %2$s to join the room + You sent an invitation to %1$s to join the room + %1$s invited %2$s + You invited %1$s + %1$s revoked the invitation for %2$s to join the room + You revoked the invitation for %1$s to join the room + %1$s revoked the invitation for %2$s + You revoked the invitation for %1$s + %1$s accepted the invitation for %2$s + You accepted the invitation for %1$s + + %1$s added %2$s widget + You added %1$s widget + %1$s removed %2$s widget + You removed %1$s widget + %1$s modified %2$s widget + You modified %1$s widget + + Video conference started by %1$s + You started video conference + Video conference ended by %1$s + You ended video conference + Video conference modified by %1$s + You modified video conference + + Admin + Moderator + Default + Custom (%1$d) + Custom + + + You changed the power level of %1$s. + + %1$s changed the power level of %2$s. + + %1$s from %2$s to %3$s + + ** Unable to decrypt: %s ** + The sender\'s device has not sent us the keys for this message. + + + + + Could not redact + Unable to send message + + Failed to upload image + + + Network error + Matrix error + + + + + + + + + It is not currently possible to re-join an empty room. + + Encrypted message + + + Email address + Phone number + + + Invite from %s + Room Invite + + + %1$s and %2$s + + %1$s, %2$s and %3$s + + %1$s, %2$s, %3$s and %4$s + + + %1$s, %2$s, %3$s and %4$d other + %1$s, %2$s, %3$s and %4$d others + + + %1$s and 1 other + %1$s and %2$d others + + + Empty room + Empty room (was %s) + + Initial Sync:\nWaiting for server response… + Initial Sync:\nDownloading data… + Initial Sync:\nImporting account… + Initial Sync:\nImporting crypto + Initial Sync:\nImporting Rooms + Initial Sync:\nImporting Joined Rooms + Initial Sync:\nImporting Invited Rooms + Initial Sync:\nImporting Left Rooms + Initial Sync:\nImporting Communities + Initial Sync:\nImporting Account Data + + Sending message… + Clear sending queue + + %1$s\'s invitation. Reason: %2$s + Your invitation. Reason: %1$s + %1$s invited %2$s. Reason: %3$s + You invited %1$s. Reason: %2$s + %1$s invited you. Reason: %2$s + %1$s joined the room. Reason: %2$s + You joined the room. Reason: %1$s + %1$s joined. Reason: %2$s + You joined. Reason: %1$s + %1$s left the room. Reason: %2$s + You left the room. Reason: %1$s + %1$s left. Reason: %2$s + You left. Reason: %1$s + %1$s rejected the invitation. Reason: %2$s + You rejected the invitation. Reason: %1$s + %1$s kicked %2$s. Reason: %3$s + You kicked %1$s. Reason: %2$s + %1$s unbanned %2$s. Reason: %3$s + You unbanned %1$s. Reason: %2$s + %1$s banned %2$s. Reason: %3$s + You banned %1$s. Reason: %2$s + %1$s sent an invitation to %2$s to join the room. Reason: %3$s + You sent an invitation to %1$s to join the room. Reason: %2$s + %1$s revoked the invitation for %2$s to join the room. Reason: %3$s + You revoked the invitation for %1$s to join the room. Reason: %2$s + %1$s accepted the invitation for %2$s. Reason: %3$s + You accepted the invitation for %1$s. Reason: %2$s + %1$s withdrew %2$s\'s invitation. Reason: %3$s + You withdrew %1$s\'s invitation. Reason: %2$s + + + %1$s added %2$s as an address for this room. + %1$s added %2$s as addresses for this room. + + + + You added %1$s as an address for this room. + You added %1$s as addresses for this room. + + + + %1$s removed %2$s as an address for this room. + %1$s removed %2$s as addresses for this room. + + + + You removed %1$s as an address for this room. + You removed %1$s as addresses for this room. + + + %1$s added %2$s and removed %3$s as addresses for this room. + You added %1$s and removed %2$s as addresses for this room. + + "%1$s set the main address for this room to %2$s." + "You set the main address for this room to %1$s." + "%1$s removed the main address for this room." + "You removed the main address for this room." + + + %1$s added the alternative address %2$s for this room. + %1$s added the alternative addresses %2$s for this room. + + + + You added the alternative address %1$s for this room. + You added the alternative addresses %1$s for this room. + + + + %1$s removed the alternative address %2$s for this room. + %1$s removed the alternative addresses %2$s for this room. + + + + You removed the alternative address %1$s for this room. + You removed the alternative addresses %1$s for this room. + + + %1$s changed the alternative addresses for this room. + You changed the alternative addresses for this room. + %1$s changed the main and alternative addresses for this room. + You changed the main and alternative addresses for this room. + %1$s changed the addresses for this room. + You changed the addresses for this room. + + "%1$s has allowed guests to join the room." + "You have allowed guests to join the room." + "%1$s has allowed guests to join here." + "You have allowed guests to join here." + "%1$s has prevented guests from joining the room." + "You have prevented guests from joining the room." + "%1$s has prevented guests from joining the room." + "You have prevented guests from joining the room." + + %1$s turned on end-to-end encryption. + You turned on end-to-end encryption. + %1$s turned on end-to-end encryption (unrecognised algorithm %2$s). + You turned on end-to-end encryption (unrecognised algorithm %1$s). System Default From 3c7750c471467c30c6000a5f36020b6c22435f47 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 3 Mar 2021 14:54:20 +0100 Subject: [PATCH 177/578] Remove duplicated string resource and translation --- vector/src/main/res/values-ar/strings.xml | 1 - vector/src/main/res/values-bg/strings.xml | 1 - vector/src/main/res/values-bn-rIN/strings.xml | 1 - vector/src/main/res/values-ca/strings.xml | 1 - vector/src/main/res/values-cs/strings.xml | 1 - vector/src/main/res/values-de/strings.xml | 1 - vector/src/main/res/values-el/strings.xml | 2 -- vector/src/main/res/values-eo/strings.xml | 1 - vector/src/main/res/values-es-rMX/strings.xml | 2 -- vector/src/main/res/values-es/strings.xml | 1 - vector/src/main/res/values-et/strings.xml | 1 - vector/src/main/res/values-eu/strings.xml | 2 -- vector/src/main/res/values-fa/strings.xml | 1 - vector/src/main/res/values-fi/strings.xml | 1 - vector/src/main/res/values-fr/strings.xml | 1 - vector/src/main/res/values-gl/strings.xml | 1 - vector/src/main/res/values-hu/strings.xml | 1 - vector/src/main/res/values-is/strings.xml | 2 -- vector/src/main/res/values-it/strings.xml | 1 - vector/src/main/res/values-ja/strings.xml | 1 - vector/src/main/res/values-kab/strings.xml | 1 - vector/src/main/res/values-ko/strings.xml | 2 -- vector/src/main/res/values-lv/strings.xml | 1 - vector/src/main/res/values-nl/strings.xml | 2 -- vector/src/main/res/values-nn/strings.xml | 1 - vector/src/main/res/values-pl/strings.xml | 2 -- vector/src/main/res/values-pt-rBR/strings.xml | 1 - vector/src/main/res/values-pt/strings.xml | 2 -- vector/src/main/res/values-ru/strings.xml | 1 - vector/src/main/res/values-sk/strings.xml | 1 - vector/src/main/res/values-sq/strings.xml | 1 - vector/src/main/res/values-sr/strings.xml | 1 - vector/src/main/res/values-sv/strings.xml | 1 - vector/src/main/res/values-uk/strings.xml | 1 - vector/src/main/res/values-vls/strings.xml | 2 -- vector/src/main/res/values-zh-rCN/strings.xml | 1 - vector/src/main/res/values-zh-rTW/strings.xml | 1 - vector/src/main/res/values/strings.xml | 2 -- 38 files changed, 48 deletions(-) diff --git a/vector/src/main/res/values-ar/strings.xml b/vector/src/main/res/values-ar/strings.xml index 60c7506810..0909d85efe 100644 --- a/vector/src/main/res/values-ar/strings.xml +++ b/vector/src/main/res/values-ar/strings.xml @@ -39,7 +39,6 @@ خطأ في الشَّبكة خطأ في Matrix حاليًا مِن غير المُمكِن إعادة الاِنضمام إلى غُرفة فارِغة. - رِسالة مُعمَّاة عُنوان البريد الإلكتروني رقم الهاتف ‏‏⁨%1$s⁩: ‏⁨%2$s⁩ diff --git a/vector/src/main/res/values-bg/strings.xml b/vector/src/main/res/values-bg/strings.xml index 569cb50a9c..92c0cc6ef9 100644 --- a/vector/src/main/res/values-bg/strings.xml +++ b/vector/src/main/res/values-bg/strings.xml @@ -45,7 +45,6 @@ Грешка в мрежата Matrix грешка В момента не е възможно да се присъедините отново към празна стая. - Шифровано съобщение Имейл адрес Телефонен номер Устройството на подателя не изпрати ключовете за това съобщение. diff --git a/vector/src/main/res/values-bn-rIN/strings.xml b/vector/src/main/res/values-bn-rIN/strings.xml index 3002e4c056..f8030253e9 100644 --- a/vector/src/main/res/values-bn-rIN/strings.xml +++ b/vector/src/main/res/values-bn-rIN/strings.xml @@ -106,7 +106,6 @@ নেটওয়ার্ক ত্রুটি ম্যাট্রিক্স ত্রুটি খালি কক্ষে পুনরায় যোগদান করা বর্তমানে সম্ভব নয়। - এনক্রিপ্ট করা বার্তা ইমেল ঠিকানা ফোন নম্বর %s থেকে আমন্ত্রণ করুন diff --git a/vector/src/main/res/values-ca/strings.xml b/vector/src/main/res/values-ca/strings.xml index 144d218e61..d65d3be695 100644 --- a/vector/src/main/res/values-ca/strings.xml +++ b/vector/src/main/res/values-ca/strings.xml @@ -6,7 +6,6 @@ %1$s s\'ha unit a la sala Número de telèfon Correu electrònic - Missatge xifrat invitació de %s %1$s ha convidat a %2$s %1$s t\'ha convidat diff --git a/vector/src/main/res/values-cs/strings.xml b/vector/src/main/res/values-cs/strings.xml index 9ba5b268d7..19d144cfc2 100644 --- a/vector/src/main/res/values-cs/strings.xml +++ b/vector/src/main/res/values-cs/strings.xml @@ -47,7 +47,6 @@ Chyba sítě Chyba v Matrixu V současnosti není možné znovu vstoupit do prázdné místnosti. - Šifrovaná zpráva E-mailová adresa Telefonní číslo Pozvání od %s diff --git a/vector/src/main/res/values-de/strings.xml b/vector/src/main/res/values-de/strings.xml index 1ca3ee3320..25174ff3fe 100644 --- a/vector/src/main/res/values-de/strings.xml +++ b/vector/src/main/res/values-de/strings.xml @@ -52,7 +52,6 @@ Es ist aktuell nicht möglich, einen leeren Raum erneut zu betreten. - Verschlüsselte Nachricht E-Mail-Adresse Telefonnummer diff --git a/vector/src/main/res/values-el/strings.xml b/vector/src/main/res/values-el/strings.xml index 401ee237be..ad7c99fd44 100644 --- a/vector/src/main/res/values-el/strings.xml +++ b/vector/src/main/res/values-el/strings.xml @@ -47,8 +47,6 @@ Σφάλμα δικτύου Σφάλμα του Matrix - Κρυπτογραφημένο μήνυμα - Ο/Η %1$s ζήτησε μια VoIP διάσκεψη Η VoIP διάσκεψη ξεκίνησε Η VoIP διάσκεψη έληξε diff --git a/vector/src/main/res/values-eo/strings.xml b/vector/src/main/res/values-eo/strings.xml index 36e7c86694..9409148160 100644 --- a/vector/src/main/res/values-eo/strings.xml +++ b/vector/src/main/res/values-eo/strings.xml @@ -47,7 +47,6 @@ Reta eraro Matrix-eraro Nun ne eblas re-aliĝi al malplena ĉambro. - Ĉifrita mesaĝo Retpoŝtadreso Telefonnumero Invito de %s diff --git a/vector/src/main/res/values-es-rMX/strings.xml b/vector/src/main/res/values-es-rMX/strings.xml index 71b4fb1002..8954f517a0 100644 --- a/vector/src/main/res/values-es-rMX/strings.xml +++ b/vector/src/main/res/values-es-rMX/strings.xml @@ -64,8 +64,6 @@ No es posible volver a unirse a una sala vacía. - Mensaje cifrado - Correo electrónico Número telefónico diff --git a/vector/src/main/res/values-es/strings.xml b/vector/src/main/res/values-es/strings.xml index 139b840e2b..fe85666f52 100644 --- a/vector/src/main/res/values-es/strings.xml +++ b/vector/src/main/res/values-es/strings.xml @@ -52,7 +52,6 @@ Actualmente no es posible volver a unirse a una sala vacía. - Mensaje encriptado Dirección de correo electrónico Número telefónico diff --git a/vector/src/main/res/values-et/strings.xml b/vector/src/main/res/values-et/strings.xml index eabb935b25..9bd24ebd54 100644 --- a/vector/src/main/res/values-et/strings.xml +++ b/vector/src/main/res/values-et/strings.xml @@ -51,7 +51,6 @@ Võrguühenduse viga Matrix\'i viga Hetkel ei ole võimalik uuesti liituda tühja jututoaga. - Krüptitud sõnum E-posti aadress Telefoninumber Kutse kasutajalt %s diff --git a/vector/src/main/res/values-eu/strings.xml b/vector/src/main/res/values-eu/strings.xml index 56540de8ce..e9cf1bcefa 100644 --- a/vector/src/main/res/values-eu/strings.xml +++ b/vector/src/main/res/values-eu/strings.xml @@ -55,8 +55,6 @@ Ezin da oraingoz hutsik dagoen gela batetara berriro sartu. - Zifratutako mezua - E-mail helbidea Telefono zenbakia diff --git a/vector/src/main/res/values-fa/strings.xml b/vector/src/main/res/values-fa/strings.xml index 8a0f1bf77b..95f00f2405 100644 --- a/vector/src/main/res/values-fa/strings.xml +++ b/vector/src/main/res/values-fa/strings.xml @@ -51,7 +51,6 @@ خطای شبکه خطای ماتریکس در حال حاضر امکان بازپیوست به اتاقی خالی وجود ندارد‌‌. - پیام رمزنگاری شده نشانی رایانامه شماره تلفن دعوت از %s diff --git a/vector/src/main/res/values-fi/strings.xml b/vector/src/main/res/values-fi/strings.xml index dadba4a077..2b6483d507 100644 --- a/vector/src/main/res/values-fi/strings.xml +++ b/vector/src/main/res/values-fi/strings.xml @@ -44,7 +44,6 @@ Verkkovirhe Matrix-virhe Tällä hetkellä ei ole mahdollista liittyä uudelleen tyhjään huoneeseen. - Salattu viesti Sähköpostiosoite Puhelinnumero Takaisinveto epäonnistui diff --git a/vector/src/main/res/values-fr/strings.xml b/vector/src/main/res/values-fr/strings.xml index ddbaa410df..6bc9ac7c68 100644 --- a/vector/src/main/res/values-fr/strings.xml +++ b/vector/src/main/res/values-fr/strings.xml @@ -46,7 +46,6 @@ Erreur de réseau Erreur de Matrix Il est impossible pour le moment de revenir dans un salon vide. - Message chiffré Adresse e-mail Numéro de téléphone %1$s a envoyé un sticker. diff --git a/vector/src/main/res/values-gl/strings.xml b/vector/src/main/res/values-gl/strings.xml index e701ce6fdb..ad08235a57 100644 --- a/vector/src/main/res/values-gl/strings.xml +++ b/vector/src/main/res/values-gl/strings.xml @@ -48,7 +48,6 @@ Erro da conexión Erro de Matrix Aínda non é posíbel volver a entrar nunha sala baleira. - Mensaxe cifrada Número de teléfono %1$s e %2$s Fixeches unha chamada de audio. diff --git a/vector/src/main/res/values-hu/strings.xml b/vector/src/main/res/values-hu/strings.xml index f475e4426c..d2e7eed5f0 100644 --- a/vector/src/main/res/values-hu/strings.xml +++ b/vector/src/main/res/values-hu/strings.xml @@ -46,7 +46,6 @@ Hálózati hiba Matrix hiba Jelenleg nem lehetséges újracsatlakozni egy üres szobához. - Titkosított üzenet E-mail cím Telefonszám %1$s küldött egy matricát. diff --git a/vector/src/main/res/values-is/strings.xml b/vector/src/main/res/values-is/strings.xml index 5969940e82..dd8cb20559 100644 --- a/vector/src/main/res/values-is/strings.xml +++ b/vector/src/main/res/values-is/strings.xml @@ -32,8 +32,6 @@ Villa í netkerfi Villa í Matrix - Dulrituð skilaboð - Tölvupóstfang Símanúmer diff --git a/vector/src/main/res/values-it/strings.xml b/vector/src/main/res/values-it/strings.xml index 3c5ff68b25..c8dbf97cc1 100644 --- a/vector/src/main/res/values-it/strings.xml +++ b/vector/src/main/res/values-it/strings.xml @@ -46,7 +46,6 @@ Errore di rete Errore di Matrix Al momento non è possibile rientrare in una stanza vuota. - Messaggio criptato Indirizzo email Numero di telefono %1$s ha inviato un adesivo. diff --git a/vector/src/main/res/values-ja/strings.xml b/vector/src/main/res/values-ja/strings.xml index fbac648a40..3d5cc0c555 100644 --- a/vector/src/main/res/values-ja/strings.xml +++ b/vector/src/main/res/values-ja/strings.xml @@ -54,7 +54,6 @@ ネットワークエラー Matrixエラー 現在空の部屋に再参加することはできません。 - 暗号化されたメッセージ メールアドレス 電話番号 ルームのアバターを変更しました diff --git a/vector/src/main/res/values-kab/strings.xml b/vector/src/main/res/values-kab/strings.xml index 3561ec153f..074f68db1e 100644 --- a/vector/src/main/res/values-kab/strings.xml +++ b/vector/src/main/res/values-kab/strings.xml @@ -106,7 +106,6 @@ %1$s issefsax tinubga i %2$s i wakken ad d-yekcem ɣer texxamt Tesfesxeḍ tinubga i %1$s i wakken ad d-yernu ɣer texxamt D awezɣi tura ad nales ad nuɣal ɣer texxamt tilemt. - Izen yettwawgelhen Uṭṭun n tiliɣri Tinubga sɣur %s Tinubga ɣer texxamt diff --git a/vector/src/main/res/values-ko/strings.xml b/vector/src/main/res/values-ko/strings.xml index 030786056c..e98b406305 100644 --- a/vector/src/main/res/values-ko/strings.xml +++ b/vector/src/main/res/values-ko/strings.xml @@ -61,8 +61,6 @@ 현재 빈 방에 다시 들어갈 수 없습니다. - 암호화된 메시지 - 이메일 주소 전화번호 diff --git a/vector/src/main/res/values-lv/strings.xml b/vector/src/main/res/values-lv/strings.xml index 1ee9e4ee61..a679b455b8 100644 --- a/vector/src/main/res/values-lv/strings.xml +++ b/vector/src/main/res/values-lv/strings.xml @@ -46,7 +46,6 @@ Tīkla kļūda Matrix kļūda Šobrīd nav iespējams atkārtoti pievienoties tukšai istabai. - Šifrēta ziņa Epasta adrese Telefona numurs Uzaicinājums no %s diff --git a/vector/src/main/res/values-nl/strings.xml b/vector/src/main/res/values-nl/strings.xml index 66a09447a5..843d605454 100644 --- a/vector/src/main/res/values-nl/strings.xml +++ b/vector/src/main/res/values-nl/strings.xml @@ -62,8 +62,6 @@ Het is momenteel niet mogelijk om een leeg gesprek opnieuw toe te treden. - Versleuteld bericht - E-mailadres Telefoonnummer diff --git a/vector/src/main/res/values-nn/strings.xml b/vector/src/main/res/values-nn/strings.xml index 6ff80132e7..783778ec6a 100644 --- a/vector/src/main/res/values-nn/strings.xml +++ b/vector/src/main/res/values-nn/strings.xml @@ -1,6 +1,5 @@ - Kryptert melding %1$s: %2$s %1$s sende eit bilæte. %1$s sende eit klistremerke. diff --git a/vector/src/main/res/values-pl/strings.xml b/vector/src/main/res/values-pl/strings.xml index dae44ade8a..297415edc9 100644 --- a/vector/src/main/res/values-pl/strings.xml +++ b/vector/src/main/res/values-pl/strings.xml @@ -24,8 +24,6 @@ Błąd sieci Błąd Matrixa - Wiadomość zaszyfrowana - Adres e-mail Numer telefonu diff --git a/vector/src/main/res/values-pt-rBR/strings.xml b/vector/src/main/res/values-pt-rBR/strings.xml index 7148636729..f3a0e5a926 100644 --- a/vector/src/main/res/values-pt-rBR/strings.xml +++ b/vector/src/main/res/values-pt-rBR/strings.xml @@ -52,7 +52,6 @@ Atualmente, não é possível entrar novamente em uma sala vazia. - Mensagem criptografada Endereço de e-mail Número de telefone diff --git a/vector/src/main/res/values-pt/strings.xml b/vector/src/main/res/values-pt/strings.xml index 7fe8a9730d..8ec938f9e3 100644 --- a/vector/src/main/res/values-pt/strings.xml +++ b/vector/src/main/res/values-pt/strings.xml @@ -64,8 +64,6 @@ Ainda não é possível voltar a entrar numa sala vazia. - Mensagem cifrada - Endereço de e-mail Número de telefone diff --git a/vector/src/main/res/values-ru/strings.xml b/vector/src/main/res/values-ru/strings.xml index 7741c155d8..086c9bec54 100644 --- a/vector/src/main/res/values-ru/strings.xml +++ b/vector/src/main/res/values-ru/strings.xml @@ -52,7 +52,6 @@ В настоящее время невозможно вновь присоединиться к пустой комнате. - Зашифрованное сообщение Адрес электронной почты Номер телефона diff --git a/vector/src/main/res/values-sk/strings.xml b/vector/src/main/res/values-sk/strings.xml index 8efda54cf4..3f62126d2d 100644 --- a/vector/src/main/res/values-sk/strings.xml +++ b/vector/src/main/res/values-sk/strings.xml @@ -46,7 +46,6 @@ Chyba siete Chyba Matrix V súčasnosti nie je možné znovu vstúpiť do prázdnej miestnosti. - Šifrovaná správa Emailová adresa Telefónne číslo %1$s poslal/a nálepku. diff --git a/vector/src/main/res/values-sq/strings.xml b/vector/src/main/res/values-sq/strings.xml index e8c6ce8822..80685a5f88 100644 --- a/vector/src/main/res/values-sq/strings.xml +++ b/vector/src/main/res/values-sq/strings.xml @@ -37,7 +37,6 @@ Gabim rrjeti Gabim Matrix Hëpërhë s’është e mundur të rihyhet në një dhomë të zbrazët. - Mesazh i fshehtëzuar Adresë email Numër telefoni Ftesë nga %s diff --git a/vector/src/main/res/values-sr/strings.xml b/vector/src/main/res/values-sr/strings.xml index 837eb629cc..8f4cae8487 100644 --- a/vector/src/main/res/values-sr/strings.xml +++ b/vector/src/main/res/values-sr/strings.xml @@ -62,7 +62,6 @@ %1$s и %2$s Број телефона Адреса е-поште - Шифрована порука Тренутно није могуће да се вратите у празну собу. Грешка Матрикса Мрежна грешка diff --git a/vector/src/main/res/values-sv/strings.xml b/vector/src/main/res/values-sv/strings.xml index 1f01c04e93..d76a9557b8 100644 --- a/vector/src/main/res/values-sv/strings.xml +++ b/vector/src/main/res/values-sv/strings.xml @@ -106,7 +106,6 @@ Nätverksfel Matrixfel Det går för närvarande inte att gå med i ett tomt rum igen. - Krypterat meddelande E-postadress Telefonnummer Inbjudan från %s diff --git a/vector/src/main/res/values-uk/strings.xml b/vector/src/main/res/values-uk/strings.xml index f84b97bf5c..54d6dfeae9 100644 --- a/vector/src/main/res/values-uk/strings.xml +++ b/vector/src/main/res/values-uk/strings.xml @@ -4,7 +4,6 @@ %1$s надсилає зображення. %s запрошення %1$s запрошує %2$s - Зашифроване повідомлення Запрошення від %s Запрошення до кімнати diff --git a/vector/src/main/res/values-vls/strings.xml b/vector/src/main/res/values-vls/strings.xml index 0e14a8aa15..c8190e7a68 100644 --- a/vector/src/main/res/values-vls/strings.xml +++ b/vector/src/main/res/values-vls/strings.xml @@ -60,8 +60,6 @@ ’t Es vo de moment nie meuglik van e leeg gesprek were toe te treedn. - Versleuteld bericht - E-mailadresse Telefongnumero diff --git a/vector/src/main/res/values-zh-rCN/strings.xml b/vector/src/main/res/values-zh-rCN/strings.xml index 206ec665af..c129a3cb50 100644 --- a/vector/src/main/res/values-zh-rCN/strings.xml +++ b/vector/src/main/res/values-zh-rCN/strings.xml @@ -39,7 +39,6 @@ 网络错误 Matrix 错误 目前无法重新加入一个空的聊天室。 - 已加密消息 电子邮箱地址 手机号码 %1$s 撤回了对 %2$s 的邀请 diff --git a/vector/src/main/res/values-zh-rTW/strings.xml b/vector/src/main/res/values-zh-rTW/strings.xml index 2a73f3a596..e70457723f 100644 --- a/vector/src/main/res/values-zh-rTW/strings.xml +++ b/vector/src/main/res/values-zh-rTW/strings.xml @@ -46,7 +46,6 @@ 網路錯誤 Matrix 錯誤 目前無法重新加入空房間。 - 已加密的訊息 電子郵件 電話號碼 %1$s 傳送了一張貼圖。 diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index 99eef6a8e2..6623567f27 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -170,8 +170,6 @@ It is not currently possible to re-join an empty room. - Encrypted message - Email address Phone number From 57df61dadf8613d70f6d27ddef45e0b137bf61df Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 3 Mar 2021 14:55:45 +0100 Subject: [PATCH 178/578] Changelog --- CHANGES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 8692a2cff8..526ea14b5c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -17,7 +17,7 @@ Bugfix 🐛: - Be robust if Event.type is missing (#2946) Translations 🗣: - - + - All string resources and translations have been moved to the application module. Weblate project for the SDK will be removed. SDK API changes ⚠️: - From 8447bf4a2d15bf2898a71fa234d95766e365695a Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 3 Mar 2021 15:05:57 +0100 Subject: [PATCH 179/578] Fix compilation issue --- .../app/features/room/VectorRoomDisplayNameFallbackProvider.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vector/src/main/java/im/vector/app/features/room/VectorRoomDisplayNameFallbackProvider.kt b/vector/src/main/java/im/vector/app/features/room/VectorRoomDisplayNameFallbackProvider.kt index ca18e1d4c8..92408d59f4 100644 --- a/vector/src/main/java/im/vector/app/features/room/VectorRoomDisplayNameFallbackProvider.kt +++ b/vector/src/main/java/im/vector/app/features/room/VectorRoomDisplayNameFallbackProvider.kt @@ -17,7 +17,7 @@ package im.vector.app.features.room import android.content.Context -import org.matrix.android.sdk.R +import im.vector.app.R import org.matrix.android.sdk.api.RoomDisplayNameFallbackProvider class VectorRoomDisplayNameFallbackProvider( From b8498aecd904d5f43b2a819a79b81110f8cc2138 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 3 Mar 2021 15:16:48 +0100 Subject: [PATCH 180/578] Code quality --- .../org/matrix/android/sdk/api/session/initsync/InitSyncStep.kt | 2 +- .../crypto/verification/VerificationTransportRoomMessage.kt | 1 - .../crypto/verification/VerificationTransportToDevice.kt | 1 - .../internal/session/room/membership/RoomDisplayNameResolver.kt | 2 +- tools/check/forbidden_strings_in_code.txt | 2 +- 5 files changed, 3 insertions(+), 5 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/initsync/InitSyncStep.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/initsync/InitSyncStep.kt index 296f2bafaf..901c1b2ffb 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/initsync/InitSyncStep.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/initsync/InitSyncStep.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 New Vector Ltd + * Copyright (c) 2021 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransportRoomMessage.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransportRoomMessage.kt index 957ff2d50c..ad490bcd27 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransportRoomMessage.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransportRoomMessage.kt @@ -380,4 +380,3 @@ internal class VerificationTransportRoomMessage( Timber.w("## SAS ignored verification ready with methods: ${keyReq.methods}") } } - diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransportToDevice.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransportToDevice.kt index 8acd4faecf..0dbbe656c7 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransportToDevice.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransportToDevice.kt @@ -246,4 +246,3 @@ internal class VerificationTransportToDevice( ) } } - diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/RoomDisplayNameResolver.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/RoomDisplayNameResolver.kt index 6948dd956a..0e18e30b13 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/RoomDisplayNameResolver.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/RoomDisplayNameResolver.kt @@ -42,7 +42,7 @@ internal class RoomDisplayNameResolver @Inject constructor( @UserId private val userId: String ) { - private val roomDisplayNameFallbackProvider= matrixConfiguration.roomDisplayNameFallbackProvider + private val roomDisplayNameFallbackProvider = matrixConfiguration.roomDisplayNameFallbackProvider /** * Compute the room display name diff --git a/tools/check/forbidden_strings_in_code.txt b/tools/check/forbidden_strings_in_code.txt index 567e24a849..9d22f882c6 100644 --- a/tools/check/forbidden_strings_in_code.txt +++ b/tools/check/forbidden_strings_in_code.txt @@ -161,7 +161,7 @@ Formatter\.formatShortFileSize===1 # android\.text\.TextUtils ### This is not a rule, but a warning: the number of "enum class" has changed. For Json classes, it is mandatory that they have `@JsonClass(generateAdapter = false)`. If the enum is not used as a Json class, change the value in file forbidden_strings_in_code.txt -enum class===90 +enum class===91 ### Do not import temporary legacy classes import org.matrix.android.sdk.internal.legacy.riot===3 From 5f01494ed057cf1af8626d9cc9f1fd2a58e1051a Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 3 Mar 2021 16:09:08 +0100 Subject: [PATCH 181/578] Remove unused resource --- vector/src/main/res/values-bg/strings.xml | 1 - vector/src/main/res/values-ca/strings.xml | 1 - vector/src/main/res/values-cs/strings.xml | 1 - vector/src/main/res/values-de/strings.xml | 1 - vector/src/main/res/values-eo/strings.xml | 1 - vector/src/main/res/values-es/strings.xml | 1 - vector/src/main/res/values-et/strings.xml | 1 - vector/src/main/res/values-fa/strings.xml | 1 - vector/src/main/res/values-fi/strings.xml | 1 - vector/src/main/res/values-fr/strings.xml | 1 - vector/src/main/res/values-he/strings.xml | 1 - vector/src/main/res/values-hu/strings.xml | 1 - vector/src/main/res/values-it/strings.xml | 1 - vector/src/main/res/values-iw/strings.xml | 1 - vector/src/main/res/values-kab/strings.xml | 1 - vector/src/main/res/values-nb-rNO/strings.xml | 1 - vector/src/main/res/values-pl/strings.xml | 1 - vector/src/main/res/values-pt-rBR/strings.xml | 1 - vector/src/main/res/values-ru/strings.xml | 1 - vector/src/main/res/values-sq/strings.xml | 1 - vector/src/main/res/values-sv/strings.xml | 1 - vector/src/main/res/values-zh-rCN/strings.xml | 1 - vector/src/main/res/values-zh-rTW/strings.xml | 1 - vector/src/main/res/values/strings.xml | 3 --- 24 files changed, 26 deletions(-) diff --git a/vector/src/main/res/values-bg/strings.xml b/vector/src/main/res/values-bg/strings.xml index 92c0cc6ef9..32b9265f31 100644 --- a/vector/src/main/res/values-bg/strings.xml +++ b/vector/src/main/res/values-bg/strings.xml @@ -2341,7 +2341,6 @@ Телефонния указател е празен Добави от телефонния указател Запази ключа за възстановяване в - element НАУЧИ ПОВЕЧЕ РАЗБРАХ Развълнувани сме да съобщим, че променихме името! Приложението ви е обновено и сте вписани в профила си. diff --git a/vector/src/main/res/values-ca/strings.xml b/vector/src/main/res/values-ca/strings.xml index d65d3be695..eca0fb2614 100644 --- a/vector/src/main/res/values-ca/strings.xml +++ b/vector/src/main/res/values-ca/strings.xml @@ -2456,7 +2456,6 @@ Busca contactes a Matrix Busca als meus contactes - element MÉS INFORMACIÓ Riot ara és Element! No pots accedir al missatge perquè el remitent, intencionadament, no ha enviat les claus diff --git a/vector/src/main/res/values-cs/strings.xml b/vector/src/main/res/values-cs/strings.xml index 19d144cfc2..af48a7d148 100644 --- a/vector/src/main/res/values-cs/strings.xml +++ b/vector/src/main/res/values-cs/strings.xml @@ -2376,7 +2376,6 @@ Jsme nadšení, že smíme oznámit změnu jména! Vaše app je aktuální a jste přihlášeni do svého účtu. ROZUMÍM DOZVĚDĚT SE VÍCE - element Uložit klíče pro obnovu v Přidat z mého adresáře Váš adresář je prázdný diff --git a/vector/src/main/res/values-de/strings.xml b/vector/src/main/res/values-de/strings.xml index 25174ff3fe..8a781860c7 100644 --- a/vector/src/main/res/values-de/strings.xml +++ b/vector/src/main/res/values-de/strings.xml @@ -2357,7 +2357,6 @@ Wir sind begeistert unsere Namensänderung mitteilen zu können! Deine App ist auf dem neusten Stand und du bist mit deinem Account angemeldet. VERSTANDEN MEHR ERFAHREN - element Speichere Wiederherstellungsschlüssel in Füge über Kontaktliste hinzu Deine Kontaktliste ist leer diff --git a/vector/src/main/res/values-eo/strings.xml b/vector/src/main/res/values-eo/strings.xml index 9409148160..32f36d429b 100644 --- a/vector/src/main/res/values-eo/strings.xml +++ b/vector/src/main/res/values-eo/strings.xml @@ -2055,7 +2055,6 @@ Adresaro Via adresaro malplenas Aldoni per mia adresaro - element EKSCIU PLION KOMPRENITE Ni ĝojas anonci, ke ni ŝanĝis nian nomon! Via aplikaĵo estas ĝisdata kaj vi estas salutinta vian konton. diff --git a/vector/src/main/res/values-es/strings.xml b/vector/src/main/res/values-es/strings.xml index fe85666f52..cd43ff9c68 100644 --- a/vector/src/main/res/values-es/strings.xml +++ b/vector/src/main/res/values-es/strings.xml @@ -1833,7 +1833,6 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Riot ahora es Element! Entendido Aprender Mas - Element Buscar en mis contactos Rechazar invitación Confirma PIN para desabilitarlo diff --git a/vector/src/main/res/values-et/strings.xml b/vector/src/main/res/values-et/strings.xml index 9bd24ebd54..f3c41ed726 100644 --- a/vector/src/main/res/values-et/strings.xml +++ b/vector/src/main/res/values-et/strings.xml @@ -2022,7 +2022,6 @@ Meil on hea meel teatada, et oleme muutnud nime! Sinu rakendus on uuendatud ning sa oled oma kontole sisse logitud. Selge lugu Vaata lisateavet - element Salvesta taastevõti järgnevalt Lisa telefoniraamatust Sinu telefoniraamat on tühi diff --git a/vector/src/main/res/values-fa/strings.xml b/vector/src/main/res/values-fa/strings.xml index 95f00f2405..b570a75cb0 100644 --- a/vector/src/main/res/values-fa/strings.xml +++ b/vector/src/main/res/values-fa/strings.xml @@ -1538,7 +1538,6 @@ موضوع گرفتم اطّلاعات بیش‌تر - المنت هشدارهای نشانی اصلی اطّلاعات نشست فرستنده خطای رمزگشایی diff --git a/vector/src/main/res/values-fi/strings.xml b/vector/src/main/res/values-fi/strings.xml index 2b6483d507..cbca322a9e 100644 --- a/vector/src/main/res/values-fi/strings.xml +++ b/vector/src/main/res/values-fi/strings.xml @@ -2221,7 +2221,6 @@ Asetukset Äänestys Koodi - element Aihe Rooli KUTSU diff --git a/vector/src/main/res/values-fr/strings.xml b/vector/src/main/res/values-fr/strings.xml index 6bc9ac7c68..b89962f71e 100644 --- a/vector/src/main/res/values-fr/strings.xml +++ b/vector/src/main/res/values-fr/strings.xml @@ -2212,7 +2212,6 @@ Votre carnet d\'adresses est vide Ajouter depuis mon carnet d\'adresses Enregistrer la clé de récupération - element EN SAVOIR PLUS COMPRIS Nous sommes heureux de vous annoncer que nous avons un nouveau nom ! Votre application est à jour et vous êtes connectés à votre compte. diff --git a/vector/src/main/res/values-he/strings.xml b/vector/src/main/res/values-he/strings.xml index dd91c10740..a8b9588f96 100644 --- a/vector/src/main/res/values-he/strings.xml +++ b/vector/src/main/res/values-he/strings.xml @@ -2282,7 +2282,6 @@ ספר הטלפונים שלך ריק הוסף מפנקס הטלפונים שלי שמור מפתח שחזור פנימה - רכיב למד עוד הבנת אנו שמחים לבשר ששינינו שם! האפליקציה שלך מעודכנת ואתה מחובר לחשבונך. diff --git a/vector/src/main/res/values-hu/strings.xml b/vector/src/main/res/values-hu/strings.xml index d2e7eed5f0..3f708657d8 100644 --- a/vector/src/main/res/values-hu/strings.xml +++ b/vector/src/main/res/values-hu/strings.xml @@ -2251,7 +2251,6 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró Örömmel jelentjük be, hogy nevet változtattunk! Az alkalmazás naprakész, és be vagy jelentkezve a fiókodba. ÉRTEM TOVÁBBI INFORMÁCIÓK - element Helyreállítási kulcs mentése ide: Hozzáadás a telefonkönyvemből A telefonkönyved üres diff --git a/vector/src/main/res/values-it/strings.xml b/vector/src/main/res/values-it/strings.xml index c8dbf97cc1..25617abb6b 100644 --- a/vector/src/main/res/values-it/strings.xml +++ b/vector/src/main/res/values-it/strings.xml @@ -2357,7 +2357,6 @@ Siamo entusiasti di annunciare che abbiamo cambiato nome! La tua app è aggiornata e hai fatto l\'accesso al tuo account. CAPITO MAGGIORI INFO - element Salva chiave di ripristino in Aggiungi dalla mia rubrica La tua rubrica è vuota diff --git a/vector/src/main/res/values-iw/strings.xml b/vector/src/main/res/values-iw/strings.xml index dd91c10740..a8b9588f96 100644 --- a/vector/src/main/res/values-iw/strings.xml +++ b/vector/src/main/res/values-iw/strings.xml @@ -2282,7 +2282,6 @@ ספר הטלפונים שלך ריק הוסף מפנקס הטלפונים שלי שמור מפתח שחזור פנימה - רכיב למד עוד הבנת אנו שמחים לבשר ששינינו שם! האפליקציה שלך מעודכנת ואתה מחובר לחשבונך. diff --git a/vector/src/main/res/values-kab/strings.xml b/vector/src/main/res/values-kab/strings.xml index 074f68db1e..9ed230fe23 100644 --- a/vector/src/main/res/values-kab/strings.xml +++ b/vector/src/main/res/values-kab/strings.xml @@ -951,7 +951,6 @@ Ur yezmir ara ad yekkes awgelhen AWI-T ISSIN UGAR - aferdis Sekles tasarut n tririt deg Rnu seg yidles n tiliɣri Idles-ik·im n tiliɣri d ilem diff --git a/vector/src/main/res/values-nb-rNO/strings.xml b/vector/src/main/res/values-nb-rNO/strings.xml index 7ca1368cfd..d51d954d02 100644 --- a/vector/src/main/res/values-nb-rNO/strings.xml +++ b/vector/src/main/res/values-nb-rNO/strings.xml @@ -923,7 +923,6 @@ Venter på krypteringshistorikk Riot er nå Element! Vi er glade for å kunngjøre at vi har byttet navn! Appen din er oppdatert, og du er logget på kontoen din. - element Lagre gjenopprettingsnøkkel i Henter kontaktene dine… Kontaktboken din er tom diff --git a/vector/src/main/res/values-pl/strings.xml b/vector/src/main/res/values-pl/strings.xml index 297415edc9..751e0ad349 100644 --- a/vector/src/main/res/values-pl/strings.xml +++ b/vector/src/main/res/values-pl/strings.xml @@ -1906,7 +1906,6 @@ Spróbuj uruchomić ponownie aplikację. Twoja książka telefoniczna jest pusta Dodaj z mojej książki telefonicznej Zapisz klucz odzyskiwania w - element DOWIEDZ SIĘ WIĘCEJ Jesteśmy podekscytowani mogąc oznajmić, że zmieniliśmy nazwę! Twoja aplikacja jest aktualna i jesteś zalogowany(-a) do swojego konta. Riot nazywa się teraz Element! diff --git a/vector/src/main/res/values-pt-rBR/strings.xml b/vector/src/main/res/values-pt-rBR/strings.xml index f3a0e5a926..8f9ac6af09 100644 --- a/vector/src/main/res/values-pt-rBR/strings.xml +++ b/vector/src/main/res/values-pt-rBR/strings.xml @@ -2364,7 +2364,6 @@ Estamos felizes em anunciar que mudamos de nome! Seu aplicativo está atualizado e você está conectado à sua conta. OK, ENTENDI APRENDA MAIS - Element Salvar chave de recuperação em Adicionar da minha lista de contatos Sua lista de contatos está vazia diff --git a/vector/src/main/res/values-ru/strings.xml b/vector/src/main/res/values-ru/strings.xml index 086c9bec54..d62d6c65a7 100644 --- a/vector/src/main/res/values-ru/strings.xml +++ b/vector/src/main/res/values-ru/strings.xml @@ -2429,7 +2429,6 @@ Мы рады сообщить, что сменили имя! Ваше приложение обновлено, и вы вошли в свою учетную запись. ПОНЯТНО УЗНАТЬ БОЛЬШЕ - element Сохранить ключ восстановления в Добавить из моей телефонной книги Ваша телефонная книга пуста diff --git a/vector/src/main/res/values-sq/strings.xml b/vector/src/main/res/values-sq/strings.xml index 80685a5f88..d5bfcf0d96 100644 --- a/vector/src/main/res/values-sq/strings.xml +++ b/vector/src/main/res/values-sq/strings.xml @@ -2334,7 +2334,6 @@ Jemi të ngazëllyer t’ju njoftojmë se kemi ndërruar emër! Aplikacioni juaj është i përditësuar dhe jeni i futur në llogarinë tuaj. E MORA VESH MËSONI MË TEPËR - element Ruaje kyçin e rimarrjeve te Shto prej numëratorit tim telefonik Numëratori juaj telefonik është i zbrazët diff --git a/vector/src/main/res/values-sv/strings.xml b/vector/src/main/res/values-sv/strings.xml index d76a9557b8..79cdd21751 100644 --- a/vector/src/main/res/values-sv/strings.xml +++ b/vector/src/main/res/values-sv/strings.xml @@ -2321,7 +2321,6 @@ Vi är glada att meddela att vi har bytt namn! Din app är uppdaterad och du är inloggad på ditt konto. UPPFATTAT LÄR DIG MER - element Spara återställningsnyckel i Lägg till från min telefonbok Din telefonbok är tom diff --git a/vector/src/main/res/values-zh-rCN/strings.xml b/vector/src/main/res/values-zh-rCN/strings.xml index c129a3cb50..8a197b914f 100644 --- a/vector/src/main/res/values-zh-rCN/strings.xml +++ b/vector/src/main/res/values-zh-rCN/strings.xml @@ -2215,7 +2215,6 @@ 我们兴奋地宣布我们改名了!您的应用已经是最新的并且您已登入您的帐户。 明白了 了解更多 - element 将恢复密钥保存到 从我的电话簿添加 您的电话簿是空的 diff --git a/vector/src/main/res/values-zh-rTW/strings.xml b/vector/src/main/res/values-zh-rTW/strings.xml index e70457723f..15b18f2f38 100644 --- a/vector/src/main/res/values-zh-rTW/strings.xml +++ b/vector/src/main/res/values-zh-rTW/strings.xml @@ -2253,7 +2253,6 @@ 我們很高興地我們已變更名稱!您的應用程式是最新的,而您也登入了您的帳號。 知道了 取得更多資訊 - element 儲存復原金鑰於 從我的電話簿新增 您的電話簿是空的 diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index 6623567f27..1e079346f6 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -3046,9 +3046,6 @@ GOT IT LEARN MORE - element - - Save recovery key in Add from my phone book From 263ad899d83c922e512901210fc57e7cc30f5fd0 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 3 Mar 2021 17:26:20 +0100 Subject: [PATCH 182/578] Setup com.likethesalad.android:string-reference to have compilation time build of Strings resource with the app_name --- build.gradle | 1 + vector/build.gradle | 1 + vector/src/main/res/values-ar/strings.xml | 22 +-- .../src/main/res/values-b+sr+Latn/strings.xml | 6 +- vector/src/main/res/values-bg/strings.xml | 106 ++++++------- vector/src/main/res/values-bn-rIN/strings.xml | 60 +++---- vector/src/main/res/values-bs/strings.xml | 14 +- vector/src/main/res/values-ca/strings.xml | 114 +++++++------- vector/src/main/res/values-cs/strings.xml | 112 ++++++------- vector/src/main/res/values-da/strings.xml | 18 +-- vector/src/main/res/values-de/strings.xml | 112 ++++++------- vector/src/main/res/values-el/strings.xml | 10 +- vector/src/main/res/values-eo/strings.xml | 106 ++++++------- vector/src/main/res/values-es-rMX/strings.xml | 18 +-- vector/src/main/res/values-es/strings.xml | 110 ++++++------- vector/src/main/res/values-et/strings.xml | 112 ++++++------- vector/src/main/res/values-eu/strings.xml | 96 ++++++------ vector/src/main/res/values-fa/strings.xml | 96 ++++++------ vector/src/main/res/values-fi/strings.xml | 88 +++++------ vector/src/main/res/values-fr/strings.xml | 108 ++++++------- vector/src/main/res/values-fy/strings.xml | 2 +- vector/src/main/res/values-gl/strings.xml | 8 +- vector/src/main/res/values-he/strings.xml | 90 +++++------ vector/src/main/res/values-hr/strings.xml | 72 ++++----- vector/src/main/res/values-hu/strings.xml | 106 ++++++------- vector/src/main/res/values-id/strings.xml | 54 +++---- vector/src/main/res/values-in/strings.xml | 54 +++---- vector/src/main/res/values-is/strings.xml | 24 +-- vector/src/main/res/values-it/strings.xml | 114 +++++++------- vector/src/main/res/values-iw/strings.xml | 90 +++++------ vector/src/main/res/values-ja/strings.xml | 34 ++-- vector/src/main/res/values-kab/strings.xml | 108 ++++++------- vector/src/main/res/values-ko/strings.xml | 70 ++++----- vector/src/main/res/values-lv/strings.xml | 18 +-- vector/src/main/res/values-ml/strings.xml | 4 +- vector/src/main/res/values-nb-rNO/strings.xml | 68 ++++---- vector/src/main/res/values-nl/strings.xml | 66 ++++---- vector/src/main/res/values-nn/strings.xml | 32 ++-- vector/src/main/res/values-pl/strings.xml | 106 ++++++------- vector/src/main/res/values-pt-rBR/strings.xml | 114 +++++++------- vector/src/main/res/values-pt/strings.xml | 32 ++-- vector/src/main/res/values-ru/strings.xml | 110 ++++++------- vector/src/main/res/values-sk/strings.xml | 74 ++++----- vector/src/main/res/values-sq/strings.xml | 112 ++++++------- vector/src/main/res/values-sr/strings.xml | 2 +- vector/src/main/res/values-sv/strings.xml | 112 ++++++------- vector/src/main/res/values-te/strings.xml | 10 +- vector/src/main/res/values-th/strings.xml | 2 +- vector/src/main/res/values-tr/strings.xml | 70 ++++----- vector/src/main/res/values-uk/strings.xml | 84 +++++----- vector/src/main/res/values-vi/strings.xml | 6 +- vector/src/main/res/values-zh-rCN/strings.xml | 110 ++++++------- vector/src/main/res/values-zh-rTW/strings.xml | 112 ++++++------- vector/src/main/res/values/strings.xml | 148 ++++++++++++------ 54 files changed, 1789 insertions(+), 1739 deletions(-) diff --git a/build.gradle b/build.gradle index b918750a08..ec7ec8c1de 100644 --- a/build.gradle +++ b/build.gradle @@ -17,6 +17,7 @@ buildscript { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:3.1.1' classpath 'com.google.android.gms:oss-licenses-plugin:0.10.2' + classpath "com.likethesalad.android:string-reference:1.2.1" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/vector/build.gradle b/vector/build.gradle index dc2a16ccc5..8bcc5bc02b 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -5,6 +5,7 @@ apply plugin: 'com.google.android.gms.oss-licenses-plugin' apply plugin: 'kotlin-android' apply plugin: 'kotlin-parcelize' apply plugin: 'kotlin-kapt' +apply plugin: 'placeholder-resolver' kapt { correctErrorTypes = true diff --git a/vector/src/main/res/values-ar/strings.xml b/vector/src/main/res/values-ar/strings.xml index 0909d85efe..ac07bc890c 100644 --- a/vector/src/main/res/values-ar/strings.xml +++ b/vector/src/main/res/values-ar/strings.xml @@ -268,7 +268,7 @@ دفتر العناوين المحلي متراسلو «ماترِكس» فقط لا محادثات - لم تسمح لِ‍ Element بمطالعة متراسليك المحليين + لم تسمح لِ‍ Element بمطالعة متراسليك المحليين لا نتائج الغرف دليل الغرف @@ -683,18 +683,18 @@ "أرسِل كَ‍ " فشل اتصال الوسائط رُدّ على المكالة في مكان آخر - يحتاج Element تصريحا منك للوصول إلى مكتبتي الصور والفديو لإرسال المرفقات وحفظها. + يحتاج Element تصريحا منك للوصول إلى مكتبتي الصور والفديو لإرسال المرفقات وحفظها. رجاءً اسمح بالوصول في المنبثقة التالية لتقدر على إرسال الملفات من هاتفك. - يحتاج Element تصريحا منك للوصول إلى الكمرة لأخذ الصور وللمكالمات الصورية. - يحتاج Element تصريحا منك للوصول إلى المِكرفون لإجراء المكالمات الصوتية. + يحتاج Element تصريحا منك للوصول إلى الكمرة لأخذ الصور وللمكالمات الصورية. + يحتاج Element تصريحا منك للوصول إلى المِكرفون لإجراء المكالمات الصوتية. رجاءً اسمح بالنفاذ في المنبثقة الآتية لتتمكن من إجراء محادثة. - يحتاج Element تصريحا منك للوصول إلى الكمرة والمِكرفون لإجراء المكالمات الصورية. + يحتاج Element تصريحا منك للوصول إلى الكمرة والمِكرفون لإجراء المكالمات الصورية. رجاءً اسمح بالوصول في المنبثقة التالية لتقدر على إرسال إجراء المكالمات الصورية. - يحتاج Element تصريحا منك للوصول إلى دفتر العناوين للعثور على مستخدمي ماترِكس الآخرين وذلك حسب البريد الإلكتروني ورقم الهاتف. + يحتاج Element تصريحا منك للوصول إلى دفتر العناوين للعثور على مستخدمي ماترِكس الآخرين وذلك حسب البريد الإلكتروني ورقم الهاتف. رجاءً اسمح بالوصول في المنبثقة التالية لتستكشف مستخدميك في دفتر العناوين من Element. حُفظت @@ -711,7 +711,7 @@ قائمة علامات القراءة الأصلي لم يُجب الطرف البعيد. - يحتاج Element تصريحا منك للوصول إلى دفتر العناوين للعثور على مستخدمي ماترِكس الآخرين وذلك حسب البريد الإلكتروني ورقم الهاتف. + يحتاج Element تصريحا منك للوصول إلى دفتر العناوين للعثور على مستخدمي ماترِكس الآخرين وذلك حسب البريد الإلكتروني ورقم الهاتف. أتسمح بأن يصل Element إلى متراسليك؟ الدردشات المباشرة @@ -933,7 +933,7 @@ أعِد طلب مفاتيح التعميةمن أجهزتك الأخرى. أُرسل طلب المفتاح. أُرسل الطلب - رجاءً أطلِق Element في جهاز آخر يقدر على فك تعمية الرسالة ليُرسل المفاتيح إلى هذا الجهاز. + رجاءً أطلِق Element في جهاز آخر يقدر على فك تعمية الرسالة ليُرسل المفاتيح إلى هذا الجهاز. انطِق امسح متّصل @@ -955,8 +955,8 @@ امنح التصريح اختر خيارا آخر أرسِل بيانات التحاليل - يجمع Element التحاليل بشكل مجهّل فيتيح لنا ذلك تحسين التطبيق. - رجاءً فعّل التحاليل لمساعدتنا في تحسين Element. + يجمع Element التحاليل بشكل مجهّل فيتيح لنا ذلك تحسين التطبيق. + رجاءً فعّل التحاليل لمساعدتنا في تحسين Element. نعم أريد المساعدة! اكتب هنا… ثمة معامل مطلوب ناقص. @@ -1018,7 +1018,7 @@ %d محدّدة عايِن الوسيط قبل إرساله - يمكن أن يعمل Element في الخلفية ليُدير الإخطارات بأمان وخصوصية (قد يؤثّر هذا على استهلاك البطارية). + يمكن أن يعمل Element في الخلفية ليُدير الإخطارات بأمان وخصوصية (قد يؤثّر هذا على استهلاك البطارية). لست عضوًا في أي مجتمع حاليًا. لا رسائل إخطار غير مقروءة diff --git a/vector/src/main/res/values-b+sr+Latn/strings.xml b/vector/src/main/res/values-b+sr+Latn/strings.xml index ad749f1177..c5f3d3b407 100644 --- a/vector/src/main/res/values-b+sr+Latn/strings.xml +++ b/vector/src/main/res/values-b+sr+Latn/strings.xml @@ -178,7 +178,7 @@ Tema sobe Pozivi - Koristi podrazumevani Element zvuk zvona za dolazeće pozive + Koristi podrazumevani ${app_name} zvuk zvona za dolazeće pozive Zvuk zvona dolazećeg poziva Izaberite zvuk zvona za pozive: @@ -208,7 +208,7 @@ Servis će se početi sa radom prilikom ponovnog pokretanja uređaja. Optimizacija potrošnje baterije - Optimizacija potrošnje baterije ne utiče na Element. + Optimizacija potrošnje baterije ne utiče na ${app_name}. Ignoriši optimizacije Normalno @@ -263,7 +263,7 @@ Pronalaženje Upravljajte vašim podešavanjima za pronalaženje. Privatnost obaveštenja - Element može da radi u pozadini kako bi upravljao vašim obaveštenjima sigurno i privatno. Ovo može da utiče na potrošnju baterije. + ${app_name} može da radi u pozadini kako bi upravljao vašim obaveštenjima sigurno i privatno. Ovo može da utiče na potrošnju baterije. Dozvoli Izaberi drugu opciju diff --git a/vector/src/main/res/values-bg/strings.xml b/vector/src/main/res/values-bg/strings.xml index 32b9265f31..e8dc6aa0b4 100644 --- a/vector/src/main/res/values-bg/strings.xml +++ b/vector/src/main/res/values-bg/strings.xml @@ -338,7 +338,7 @@ Директория с потребители Само потребители на Matrix Няма разговори - Не сте дали достъп на Element до локалните ви контакти + Не сте дали достъп на ${app_name} до локалните ви контакти Няма резултати Стаи Директория със стаи @@ -769,22 +769,22 @@ Липсва user_id в заявката. Стая %s не е видима. Добави Matrix приложения - Element иска разрешение за достъп до Вашата галерия със снимки и видеа, за да изпраща и запазва прикачени файлове. + ${app_name} иска разрешение за достъп до Вашата галерия със снимки и видеа, за да изпраща и запазва прикачени файлове. \n \nМоля, разрешете достъпа от следващия прозорец, който се покаже, за да можете да изпращате файлове от телефона си. - Element иска разшерение за достъп до Вашата камера, за да прави снимки или да осъществи видео разговори. + ${app_name} иска разшерение за достъп до Вашата камера, за да прави снимки или да осъществи видео разговори. " \n \nМоля, разрешете достъпа от следващия прозорец, който ще се покаже, за да можете да се обадите." - Element иска разшерение за достъп до Вашия микрофон, за да се извърши звуков разговор. + ${app_name} иска разшерение за достъп до Вашия микрофон, за да се извърши звуков разговор. " \n \nМоля, разрешете достъпа от следващия прозорец, който ще се покаже, за да можете да се обадите." - Element иска разширение за достъп до микрофона и камерата Ви, за да извърши видео разговор. + ${app_name} иска разширение за достъп до микрофона и камерата Ви, за да извърши видео разговор. \n \nМоля, разрешете достъпа от следващия прозорец, който ще се покаже, за да можете да се обадите. - Element може да провери контактите ви, за да намери други Matrix потребители по имейл или телефонен номер. Ако сте съгласни да споделите списъка с контактите си за тази цел, моля разрешете достъп при предстоящото запитване. - Element може да провери контактите ви, за да намери други Matrix потребители по имейл и телефонен номер. + ${app_name} може да провери контактите ви, за да намери други Matrix потребители по имейл или телефонен номер. Ако сте съгласни да споделите списъка с контактите си за тази цел, моля разрешете достъп при предстоящото запитване. + ${app_name} може да провери контактите ви, за да намери други Matrix потребители по имейл и телефонен номер. \n \nРазрешавате ли да се сподели списъка с контакти за тази цел\? Извинете. Операцията не е извършена поради липсващи разрешения за достъп @@ -907,7 +907,7 @@ • Уведомленията съдържат метаданни и съдържания на съобщения • Уведомленията няма да показват съдържания на съобщения Конфиденциалност на известията - Element може да работи във фонов режим за да получава известия по защитен начин. Може да повлияе на консумацията на енергия. + ${app_name} може да работи във фонов режим за да получава известия по защитен начин. Може да повлияе на консумацията на енергия. Разреши достъп Избери друг вариант Конфиденциалност на известията @@ -920,8 +920,8 @@ Деактивиране на акаунт Деактивирай акаунта ми Изпращане на статистически данни - Element събира анонимни статистики за да ни помогне да подобрим приложението. - Моля, включете изпращането на статистики за да ни помогнете да подобрим Element. + ${app_name} събира анонимни статистики за да ни помогне да подобрим приложението. + Моля, включете изпращането на статистики за да ни помогнете да подобрим ${app_name}. Да, искам да помогна! Липсва задължителен параметър. Невалиден параметър. @@ -943,7 +943,7 @@ Изисквай повторно ключове за шифроване от другите ми устройства. Заявката за ключове беше изпратена. Изпратена заявка - Моля стартирайте Element на друго устройство можещо да разшифрова съобщението, за да може то да изпрати ключовете до това устройство. + Моля стартирайте ${app_name} на друго устройство можещо да разшифрова съобщението, за да може то да изпрати ключовете до това устройство. Пишете тук… Изпрати гласово съобщение продължете с… @@ -1040,7 +1040,7 @@ Приемам Моля прегледайте и приемете политиките на сървъра: Обаждания - Използвай мелодията по подразбиране на Element за входящи повиквания + Използвай мелодията по подразбиране на ${app_name} за входящи повиквания Мелодия за входящо повикване Избор на мелодия за обаждания: Изгони @@ -1081,12 +1081,12 @@ Разреши Настройки на устройството. Уведомленията са разрешени за това устройство. - Уведомленията са забранени за тази сесия. -\nМоля, проверете настройките на Element. + Уведомленията са забранени за тази сесия. +\nМоля, проверете настройките на ${app_name}. Разреши Проверка на Google Play услугите APK пакет за Google Play услугите е наличен и с актуална версия. - Element използва Google Play услугите за да доставя известия за съобщения, но изглежда те не са конфигурирани правилно: + ${app_name} използва Google Play услугите за да доставя известия за съобщения, но изглежда те не са конфигурирани правилно: \n%1$s Поправи Google Play услугите Firebase токен @@ -1108,22 +1108,22 @@ Услугата не успя да се рестартира Стартирай при старт на системата Услугата ще стартира когато устройството се рестартира. - Услугата няма да стартира когато устройството се рестартира. Няма да получавате известия докато Element не бъде отворен поне веднъж. + Услугата няма да стартира когато устройството се рестартира. Няма да получавате известия докато ${app_name} не бъде отворен поне веднъж. Стартирай при старт на системата Проверка на фоновите ограничения - Ограниченията във фонов режим са изключени за Element. Тази проверка трябва да се изпълни използвайки мобилни данни (не на Wi-Fi). + Ограниченията във фонов режим са изключени за ${app_name}. Тази проверка трябва да се изпълни използвайки мобилни данни (не на Wi-Fi). \n%1$s - Активирани са ограничения във фонов режим за Element. + Активирани са ограничения във фонов режим за ${app_name}. \nРаботата, която приложението се опитва да извършва във фонов режим бива агресивно ограничена. Това може да повлияе на известяването. \n%1$s Премахни ограниченията Оптимизация на батерията - Element не се влияе от Оптимизация на батерията. + ${app_name} не се влияе от Оптимизация на батерията. Ако потребител остави устройството неподвижно с изключен екран за известно време, то влиза в режим на заспиване. Това предотвратява приложенията да достъпват мрежата и отлага техните задачи, синхронизации и стандартни аларми. Игнорирай оптимизацията Връзка във фонов режим - Element трябва да поддържа ниско-натоварваща връзка във фонов режим, за да може известията да пристигат надеждно. -\nНа следващия екран, ще бъдете попитани дали да позволите на Element винаги да работи във фонов режим. Моля, приемете. + ${app_name} трябва да поддържа ниско-натоварваща връзка във фонов режим, за да може известията да пристигат надеждно. +\nНа следващия екран, ще бъдете попитани дали да позволите на ${app_name} винаги да работи във фонов режим. Моля, приемете. Разреши Възникна грешка при проверката на имейл адреса Ви. Възникна грешка при проверката на телефонния Ви номер. @@ -1142,12 +1142,12 @@ Някои известия са изключени в собствените Ви настройки. Неуспешно зареждане на собствените правила. Опитайте пак. Провери настройките - [%1$s] -\nТази грешка е извън контрола на Element. Според Google, грешката показва, че устройството има прекалено много приложения регистрирани към системата за известия FCM. Проблема се случва само в случай на огромен брой приложения, така че не би трябвало да повлияе средно-статистическия потребител. - [%1$s] -\nТази грешка е извън контрола на Element. Може да се случи поради няколко причини. Възможно е проблема да изчезне, ако опитате по-късно. Също така, може да проверите дали Google Play услугите не са ограничени откъм мобилни данни (вижте системните настройки), или че часовникът на устройството е правилен. Възможно е грешката да възникне и ако използвате модифицирана операционна система (custom ROM). - [%1$s] -\nТази грешка е извън контрола на Element. Няма Google акаунт на телефонът. Отворете системата за управления на акаунти и добавете Google акаунт. + [%1$s] +\nТази грешка е извън контрола на ${app_name}. Според Google, грешката показва, че устройството има прекалено много приложения регистрирани към системата за известия FCM. Проблема се случва само в случай на огромен брой приложения, така че не би трябвало да повлияе средно-статистическия потребител. + [%1$s] +\nТази грешка е извън контрола на ${app_name}. Може да се случи поради няколко причини. Възможно е проблема да изчезне, ако опитате по-късно. Също така, може да проверите дали Google Play услугите не са ограничени откъм мобилни данни (вижте системните настройки), или че часовникът на устройството е правилен. Възможно е грешката да възникне и ако използвате модифицирана операционна система (custom ROM). + [%1$s] +\nТази грешка е извън контрола на ${app_name}. Няма Google акаунт на телефонът. Отворете системата за управления на акаунти и добавете Google акаунт. Добави акаунт Настройка на шумни известия Настройка на известия за разговори @@ -1158,7 +1158,7 @@ Безшумно Моля, въведете парола Паролата е прекалено слаба - Моля, изтрийте паролата, ако искате Element да генерира ключ за възстановяване. + Моля, изтрийте паролата, ако искате ${app_name} да генерира ключ за възстановяване. Не беше открита Matrix сесия Никога не губете шифровани съобщения Съобщения в шифровани стаи са защитени с шифроване от край до край. Само Вие и получателят (получателите) имате ключовете за прочитането им. @@ -1287,7 +1287,7 @@ Паролите не съвпадат Невалиден отговор при опит за откриване на адреса на сървъра Опции за откриване на сървър - Element откри конфигурация за собствен сървър за домейна от потребителското Ви име \"%1$s\": + ${app_name} откри конфигурация за собствен сървър за домейна от потребителското Ви име \"%1$s\": \n%2$s Използвай конфигурацията Инициализиране на услугата @@ -1403,7 +1403,7 @@ Изчакайте… Всички общности Тази стая не може да бъде прегледана - Прегледа на стаи четими от цял свят все още не се поддържа от ElementX + Прегледа на стаи четими от цял свят все още не се поддържа от ${app_name} Стаи Директни съобщения Нова стая @@ -1498,11 +1498,11 @@ Добавете сървър за самоличност в настройки за да извършите това действие. Режим на фонова синхронизация Пестящ батерия - Element ще синхронизира във фонов режим по начин, който пести ограничените ресурси на устройството (батерия). + ${app_name} ще синхронизира във фонов режим по начин, който пести ограничените ресурси на устройството (батерия). \nВ зависимост от състоянието на ресурсите, синхронизацията може да бъде отложена от операционната система. Целящ висока интерактивност - Element ще синхронизира във фонов режим на определен интервал (конфигурируемо). -\nТова ще повлияе на използването на антената и батерията. Ще се показва перманентна нотификация, че Element слуша за събития. + ${app_name} ще синхронизира във фонов режим на определен интервал (конфигурируемо). +\nТова ще повлияе на използването на антената и батерията. Ще се показва перманентна нотификация, че ${app_name} слуша за събития. Без фонова синхронизация Няма да бъдете уведомени за входящи съобщения, когато приложението е във фонов режим. Неуспешно обновяване на настройките. @@ -1586,13 +1586,13 @@ Съдържанието беше докладвано като неподходящо. \n \nАко не искате да виждате повече съдържание от този потребител, може да ги игнорирате за да скриете съобщенията им. - Element се нуждае от привилегии за да запази E2E ключовете върху диска. + ${app_name} се нуждае от привилегии за да запази E2E ключовете върху диска. \n \nПозволете достъп на следващия екран, за да може в бъдеще да експортирате ключовете си ръчно. В момента няма връзка с мрежата Това не е валиден адрес на Matrix сървър Потвърдете паролата - Не може да направите това от мобилно приложение на Element + Не може да направите това от мобилно приложение на ${app_name} Нужна е автентикация Интеграции Използвайте мениджър на интеграции за да управлявате ботове, връзки с други мрежи, приспособления и стикери. @@ -1759,7 +1759,7 @@ \nВлезте отново за да достъпите профила и съобщенията си. Ще загубите достъпа до защитените съобщения, освен ако не влезете за да възстановите ключовете за шифроване. Изчисти данните - Текущата сесия е за потребител %1$s, а вие сте въвели данни за вход за %2$s. Element не поддържа това. + Текущата сесия е за потребител %1$s, а вие сте въвели данни за вход за %2$s. ${app_name} не поддържа това. \nПърво изчистете данните, след това влезте отново с друг профил. matrix.to връзката ви беше невалидна Описанието е прекалено кратко @@ -1777,7 +1777,7 @@ Други устройства Показване само на първите резултати. Въведете още букви… Бърз-провал - Element може да забива по-често когато възникне неочаквана грешка + ${app_name} може да забива по-често когато възникне неочаквана грешка %1$s: %2$s %1$s: %2$s %3$s Съобщението беше изтрито @@ -1818,7 +1818,7 @@ Избор на звуково устройство Неуспешно установяване на връзка в реално време. \nПомолете администратора на сървъра да конфигурира TURN сървър, за да може разговорите да работят надеждно. - Свързването е неуспешно + Свързването е неуспешно Уведомления Успешно Копирай @@ -1860,9 +1860,9 @@ Тази сесия не може да сподели потвърждението с другите ви сесии. \nПотвърждението ще се съхрани локално и ще може да бъде споделено в бъдеща версия на приложението. Махни игнорирането - Element срещна проблем опитвайки се да визуализира съдържанието на събитие с идентификатор \'%1$s\' - Element не може да обработи събитие от тип \'%1$s\' - Element не може да обработва събития от тип \'%1$s\' + ${app_name} срещна проблем опитвайки се да визуализира съдържанието на събитие с идентификатор \'%1$s\' + ${app_name} не може да обработи събитие от тип \'%1$s\' + ${app_name} не може да обработва събития от тип \'%1$s\' Отиди на последното прочетено съобщение Собствено ниво (%1$d) в %2$s По подразбиране в %1$s @@ -2123,7 +2123,7 @@ Кръстосаното-подписване е включено. \nЧастните ключове са на устройството. Операцията е невъзможна. Сървърът е стар. - Този сървър за идентичност е стар. Element поддържа само API V2. + Този сървър за идентичност е стар. ${app_name} поддържа само API V2. Прекъснете връзката със сървъра за идентичност %s\? Отворете условията за %s Зареждане на наличните езици… @@ -2175,13 +2175,13 @@ За да продължите, използвайте %1$s или %2$s. Поддържа се само в шифровани стаи Принудително премахва текущата изходяща групова сесия от шифрованата стая - Използвайте последната версия на Element за устройствата си: + Използвайте последната версия на ${app_name} за устройствата си: или друг Matrix клиент поддържаш кръстосано-подписване - Element iOS -\nElement Android - Element Web -\nElement Desktop - Използвайте последната версия на Element за устройствата си (Element Web, Element Desktop, Element iOS, Element за Android) или друг Matrix клиент поддържаш кръстосано-подписване + ${app_name} iOS +\n${app_name} Android + ${app_name} Web +\n${app_name} Desktop + Използвайте последната версия на ${app_name} за устройствата си (${app_name} Web, ${app_name} Desktop, ${app_name} iOS, ${app_name} за Android) или друг Matrix клиент поддържаш кръстосано-подписване Промяна на паролата за профила… Неуспешно съхраняване на медиен файл Неуспешно добавяне на медиен файл в галерията @@ -2293,19 +2293,19 @@ Обнови Разблокирай шифрованата история на съобщенията Заявки за ключове - Element за Android + ${app_name} за Android Ключовете вече са обновени! Връзката беше с грешен формат Неуспешно откриване на стаята. Потвърдете, че съществува. Не можете да отворите стаи, от които сте били блокирани. Потвърждение на PIN код, за да изключване на PIN кода - PIN код се изисква всеки път когато отворите Element. - Изисква се PIN код след 2 минути неизползване на Element. + PIN код се изисква всеки път когато отворите ${app_name}. + Изисква се PIN код след 2 минути неизползване на ${app_name}. Изисквай PIN код след 2 минути Показвай само броя непрочетени съобщения в опростено уведомление. Показвай подробности, като имена на стаи и съдържание на съобщенията. Показвай съдържанието в уведомленията - PIN кодът е единственият начин да отключите Element. + PIN кодът е единственият начин да отключите ${app_name}. Включване на биометрични данни поддържани от устройството, като пръстов отпечатък и разпознаване на лица. Включване на биометрични данни Ако искате да нулирате PIN кода си, натиснете Забравен PIN код, за да излезете от профила и да го нулирате. @@ -2386,7 +2386,7 @@ Сървърът ви (%1$s) предлага използването на %2$s за сървър за идентичност Няма асоциация с текущия идентификатор. Асоциацията беше неуспешна. - За вашата поверителност, Element поддържа изпращането на адреси и телефонни номера на потребители само в хеширан вид. + За вашата поверителност, ${app_name} поддържа изпращането на адреси и телефонни номера на потребители само в хеширан вид. Първо приемете условията за сървъра за идентичност от Настройки. Конфигурирайте сървъра си за идентичност. Отхвърляне на промените diff --git a/vector/src/main/res/values-bn-rIN/strings.xml b/vector/src/main/res/values-bn-rIN/strings.xml index f8030253e9..0fd00b03fe 100644 --- a/vector/src/main/res/values-bn-rIN/strings.xml +++ b/vector/src/main/res/values-bn-rIN/strings.xml @@ -309,7 +309,7 @@ ব্যবহারকারী ডিরেক্টরি শুধুমাত্র ম্যাট্রিক্সের যোগাযোগগুলি "কথাবার্তা নেই " - আপনি রায়টকে আপনার স্থানীয় পরিচিতি অ্যাক্সেস করার অনুমতি দেয় নি + আপনি রায়টকে আপনার স্থানীয় পরিচিতি অ্যাক্সেস করার অনুমতি দেয় নি কোন ফলাফল নেই রুমগুলি @@ -449,7 +449,7 @@ চাবির অনুরোধ পাঠানো। অনুরোধ পাঠানো - দয়া করে শুরু করুন Element অন্য সেশান যেটা পারে বর্ণনা করতে বার্তা কে সুতরাং এটা পারে পাঠাতে চাবিগুলো কে যন্ত্র তে. + দয়া করে শুরু করুন ${app_name} অন্য সেশান যেটা পারে বর্ণনা করতে বার্তা কে সুতরাং এটা পারে পাঠাতে চাবিগুলো কে যন্ত্র তে. পড়ো প্রাপ্তিগুলি সারি @@ -478,7 +478,7 @@ ঘরএর বিষয় ডাকা - ব্যবহার করছেন অনুপস্থিত Element রিংটোন আগামী ডাক এর জন্য + ব্যবহার করছেন অনুপস্থিত ${app_name} রিংটোন আগামী ডাক এর জন্য আসা কল এর রিংটোন নির্বাচন করুন রিংটোন কল আর জন্য: @@ -502,22 +502,22 @@ পারছেন না দৃশ্য নথি করতে তথা - Element এর প্রয়াজন অনুমতি নিতে আপনার ছবি এবং দৃশ্য রেকর্ড কে গ্রন্থাগার থেকে পাঠিয়ে জমার জায়গায় সংযুক্ত করতে। + ${app_name} এর প্রয়াজন অনুমতি নিতে আপনার ছবি এবং দৃশ্য রেকর্ড কে গ্রন্থাগার থেকে পাঠিয়ে জমার জায়গায় সংযুক্ত করতে। \nদেয়া করে অনুমতি দিন প্রবেশ করতে পরের pop-up কে যেটা সক্ষম আপনার নথি কে আপনার ফোন থেকে পাঠাতে। - Element এর প্রয়োজন অনুমতি নিয়ে প্রবেশে করতে আপনার ছবি তোলার যন্ত্র থেকে ছবি নিতে এবং দৃষ্টি রেকর্ড ডাকতে। + ${app_name} এর প্রয়োজন অনুমতি নিয়ে প্রবেশে করতে আপনার ছবি তোলার যন্ত্র থেকে ছবি নিতে এবং দৃষ্টি রেকর্ড ডাকতে। " \n \nদয়াকরে অনুমতি দিন প্রবেশ করাতে পরের পপ -আপ কে যেটা ডাকতে সক্ষম।" - Element এর প্রয়োজন অনুমতি নিয়ে প্রবেশ করতে আপনার মাইক্রোফোন আর মাধ্যমে শোনার কালএর সঞ্চালনা করতে। + ${app_name} এর প্রয়োজন অনুমতি নিয়ে প্রবেশ করতে আপনার মাইক্রোফোন আর মাধ্যমে শোনার কালএর সঞ্চালনা করতে। " \n \nদেয়া করে অনুমতিদিন প্রবেশ করতে পরের pop-up এ যেটা কল করতে সক্ষম।" সেবা আরম্ভ করা হচ্ছে - ভিডিও কল সম্পাদনের জন্য Element আপনার ক্যামেরা এবং আপনার মাইক্রোফোন অ্যাক্সেস করার অনুমতির প্রয়োজন। + ভিডিও কল সম্পাদনের জন্য ${app_name} আপনার ক্যামেরা এবং আপনার মাইক্রোফোন অ্যাক্সেস করার অনুমতির প্রয়োজন। \n \nকল করতে সক্ষম হতে পরবর্তী পপ আপ অ্যাক্সেস অনুমতি দিন। - রায়ট অন্যান্য ম্যাট্রিক্স ব্যবহারকারীদের তাদের ইমেল এবং ফোন নম্বরগুলির উপর ভিত্তি করে আপনার ঠিকানা বইটি চেক করতে পারে। আপনি যদি এই উদ্দেশ্যে আপনার ঠিকানা বইটি ভাগ করে নিতে সম্মত হন তবে দয়া করে পরবর্তী পপ-আপটিতে অ্যাক্সেসের অনুমতি দিন। - রায়ট অন্যান্য ম্যাট্রিক্স ব্যবহারকারীদের তাদের ইমেল এবং ফোন নম্বরগুলির উপর ভিত্তি করে আপনার ঠিকানা বইটি চেক করতে পারে। + রায়ট অন্যান্য ম্যাট্রিক্স ব্যবহারকারীদের তাদের ইমেল এবং ফোন নম্বরগুলির উপর ভিত্তি করে আপনার ঠিকানা বইটি চেক করতে পারে। আপনি যদি এই উদ্দেশ্যে আপনার ঠিকানা বইটি ভাগ করে নিতে সম্মত হন তবে দয়া করে পরবর্তী পপ-আপটিতে অ্যাক্সেসের অনুমতি দিন। + রায়ট অন্যান্য ম্যাট্রিক্স ব্যবহারকারীদের তাদের ইমেল এবং ফোন নম্বরগুলির উপর ভিত্তি করে আপনার ঠিকানা বইটি চেক করতে পারে। \n \nআপনি এই উদ্দেশ্যে আপনার ঠিকানা বই ভাগ করতে সম্মত হন\? @@ -751,8 +751,8 @@ সেশান সেটিংস। বিজ্ঞপ্তি এই সেশানের জন্য সক্রিয় করা হয়েছে। - বিজ্ঞপ্তি এই সেশানের জন্য অনুমতি দেওয়া হয় নি। -\nElement এর সেটিংস যাচাই করুন। + বিজ্ঞপ্তি এই সেশানের জন্য অনুমতি দেওয়া হয় নি। +\n${app_name} এর সেটিংস যাচাই করুন। সক্ষম কাস্টম সেটিংস। @@ -763,7 +763,7 @@ Play Services পরীক্ষা গুগল প্লে সার্ভিসেস APK পাওয়া গেছে এবং আপ টু ডেট রয়েছে। - Element পুশ বার্তার প্রদানের জন্য Google Play পরিষেবাদি ব্যবহার করে কিন্তু এটি সঠিকভাবে কনফিগার করা বলে মনে হচ্ছে না: + ${app_name} পুশ বার্তার প্রদানের জন্য Google Play পরিষেবাদি ব্যবহার করে কিন্তু এটি সঠিকভাবে কনফিগার করা বলে মনে হচ্ছে না: \n%1$s Play Services ঠিক করুন @@ -772,12 +772,12 @@ \n%1$s FCM টোকেন উদ্ধার করতে ব্যর্থ হয়েছে: \n%1$s - [%1$s] -\nএই ত্রুটিটি Element এর নিয়ন্ত্রণের বাইরে এবং Google এর মতে, এই ত্রুটিটি ইঙ্গিত করে যে ডিভাইসটিতে FCM এর সাথে নিবন্ধিত অনেকগুলি অ্যাপ্লিকেশন রয়েছে। ত্রুটিগুলি কেবলমাত্র অ্যাপ্লিকেশনের চরম সংখ্যাগুলিতে ঘটে থাকে, তাই এটি গড় ব্যবহারকারীকে প্রভাবিত করবে না। - [%1$s] -\nএই ত্রুটি Element এর নিয়ন্ত্রণের বাইরে। এটা বিভিন্ন কারণে ঘটতে পারে। আপনি পরে পুনরায় চেষ্টা করলে হয়তো এটি কাজ করবে, আপনি এটিও পরীক্ষা করতে পারেন যে Google Play পরিষেবাটি সিস্টেম সেটিংসে ডেটা ব্যবহারের ক্ষেত্রে সীমাবদ্ধ নয়, অথবা আপনার ডিভাইসের ঘড়ি সঠিক, বা এটি কাস্টম রমতে ঘটতে পারে। - [%1$s] -\nএই ত্রুটি Element এর নিয়ন্ত্রণের বাইরে। ফোনে কোন গুগল একাউন্ট নেই। অ্যাকাউন্ট ম্যানেজার খুলুন এবং একটি গুগল একাউন্ট যোগ করুন। + [%1$s] +\nএই ত্রুটিটি ${app_name} এর নিয়ন্ত্রণের বাইরে এবং Google এর মতে, এই ত্রুটিটি ইঙ্গিত করে যে ডিভাইসটিতে FCM এর সাথে নিবন্ধিত অনেকগুলি অ্যাপ্লিকেশন রয়েছে। ত্রুটিগুলি কেবলমাত্র অ্যাপ্লিকেশনের চরম সংখ্যাগুলিতে ঘটে থাকে, তাই এটি গড় ব্যবহারকারীকে প্রভাবিত করবে না। + [%1$s] +\nএই ত্রুটি ${app_name} এর নিয়ন্ত্রণের বাইরে। এটা বিভিন্ন কারণে ঘটতে পারে। আপনি পরে পুনরায় চেষ্টা করলে হয়তো এটি কাজ করবে, আপনি এটিও পরীক্ষা করতে পারেন যে Google Play পরিষেবাটি সিস্টেম সেটিংসে ডেটা ব্যবহারের ক্ষেত্রে সীমাবদ্ধ নয়, অথবা আপনার ডিভাইসের ঘড়ি সঠিক, বা এটি কাস্টম রমতে ঘটতে পারে। + [%1$s] +\nএই ত্রুটি ${app_name} এর নিয়ন্ত্রণের বাইরে। ফোনে কোন গুগল একাউন্ট নেই। অ্যাকাউন্ট ম্যানেজার খুলুন এবং একটি গুগল একাউন্ট যোগ করুন। একাউন্ট যোগ করুন টোকেন নিবন্ধন @@ -797,19 +797,19 @@ বুট করার সময় শুরু ডিভাইসটি পুনরায় চালু হলে পরিষেবা শুরু হবে। - ডিভাইসটি পুনরায় চালু হওয়ার সময় পরিষেবাটি শুরু হবে না, আপনি একবার Element টি খোলা না হওয়া পর্যন্ত বিজ্ঞপ্তি পাবেন না। + ডিভাইসটি পুনরায় চালু হওয়ার সময় পরিষেবাটি শুরু হবে না, আপনি একবার ${app_name} টি খোলা না হওয়া পর্যন্ত বিজ্ঞপ্তি পাবেন না। বুট থেকে শুরু করা সক্রিয় করুন ব্যাকগ্রাউন্ড এর সীমাবদ্ধতা চেক করুন - ব্যাকগ্রউন্ডের সীমাবদ্ধতা Element এর জন্য নিষ্ক্রিয় করা হয়েছে। এই পরীক্ষা মোবাইল ডেটা ব্যবহার করে চালানো উচিত (ওয়াইফাই না)। + ব্যাকগ্রউন্ডের সীমাবদ্ধতা ${app_name} এর জন্য নিষ্ক্রিয় করা হয়েছে। এই পরীক্ষা মোবাইল ডেটা ব্যবহার করে চালানো উচিত (ওয়াইফাই না)। \n%1$s - ব্যাকগ্রউন্ডের সীমাবদ্ধতা রিমোট এর জন্য সক্রিয় করা হয়েছে। + ব্যাকগ্রউন্ডের সীমাবদ্ধতা রিমোট এর জন্য সক্রিয় করা হয়েছে। \nঅ্যাপ্লিকেশন যেটি করার চেষ্টা করে সেটি ব্যাকগ্রাউন্ডে থাকা অবস্থায় আক্রমনাত্মকভাবে সীমিত হবে এবং এটি বিজ্ঞপ্তিগুলিতে প্রভাবিত হতে পারে। \n%1$s সীমাবদ্ধগুলি নিষ্ক্রিয় ব্যাটারি অপ্টিমাইজেশান - Element ব্যাটারি অপ্টিমাইজেশান দ্বারা প্রভাবিত হয় না। + ${app_name} ব্যাটারি অপ্টিমাইজেশান দ্বারা প্রভাবিত হয় না। যদি কোনও ব্যবহারকারী কোনও ডিভাইসটিকে নির্দিষ্ট সময়ের জন্য আনপ্লাগ এবং স্থিতিশীল রাখে তবে স্ক্রীন বন্ধের সাথে ডিভাইসটি ডোজ মোডে প্রবেশ করে। এটি অ্যাপ্লিকেশানগুলিকে নেটওয়ার্ক অ্যাক্সেস করতে বাধা দেয় এবং তাদের কাজ, সিঙ্ক এবং মান অ্যালার্মগুলি স্থগিত করে। "অপ্টিমাইজেশান অবহেলা " @@ -937,19 +937,19 @@ আমার একাউন্ট নিষ্ক্রিয় করুন বিজ্ঞপ্তি\'র গোপনীয়তা - সুরক্ষিতভাবে এবং ব্যক্তিগতভাবে আপনার বিজ্ঞপ্তি পরিচালনা করতে Element পটভূমিতে চালাতে পারে। এই ব্যাটারি ব্যবহার প্রভাবিত হতে পারে। + সুরক্ষিতভাবে এবং ব্যক্তিগতভাবে আপনার বিজ্ঞপ্তি পরিচালনা করতে ${app_name} পটভূমিতে চালাতে পারে। এই ব্যাটারি ব্যবহার প্রভাবিত হতে পারে। অনুমতি প্রদান করুন অন্য বিকল্প চয়ন করুন পটভূমি সংযোগ - নির্ভরযোগ্য বিজ্ঞপ্তি পেতে Element কম প্রভাব ব্যাকগ্রাউন্ড সংযোগ রাখা প্রয়োজন। + নির্ভরযোগ্য বিজ্ঞপ্তি পেতে ${app_name} কম প্রভাব ব্যাকগ্রাউন্ড সংযোগ রাখা প্রয়োজন। \nপরবর্তী স্ক্রিনে আপনাকে দাঙ্গাটি সর্বদা ব্যাকগ্রাউন্ডে চালানোর অনুমতি দেওয়া হবে, দয়া করে স্বীকার করুন। অনুমতি প্রদান করুন বৈশ্লেষিক ন্যায় বিশ্লেষণ তথ্য পাঠান - Element আমাদের অ্যাপ্লিকেশন উন্নত করার অনুমতি দেওয়ার জন্য বেনামী বিশ্লেষণ সংগ্রহ করে। - আমাদের Element উন্নত করতে সাহায্য করার জন্য বিশ্লেষণ সক্রিয় করুন। + ${app_name} আমাদের অ্যাপ্লিকেশন উন্নত করার অনুমতি দেওয়ার জন্য বেনামী বিশ্লেষণ সংগ্রহ করে। + আমাদের ${app_name} উন্নত করতে সাহায্য করার জন্য বিশ্লেষণ সক্রিয় করুন। হ্যাঁ, আমি সাহায্য করতে চাই! ডেটা সংরক্ষণ মোড @@ -1289,10 +1289,10 @@ পটভূমি সিঙ্ক মোড (পরীক্ষামূলক) ব্যাটারির জন্য অনুকূলিত - রায়ট এমনভাবে পটভূমিতে সিঙ্ক হবে যা ডিভাইসের সীমিত সংস্থান (ব্যাটারি) সংরক্ষণ করে। + রায়ট এমনভাবে পটভূমিতে সিঙ্ক হবে যা ডিভাইসের সীমিত সংস্থান (ব্যাটারি) সংরক্ষণ করে। \nআপনার ডিভাইস রিসোর্স স্থিতির উপর নির্ভর করে সিঙ্কটি অপারেটিং সিস্টেম দ্বারা পিছিয়ে যেতে পারে। রিয়েল টাইম জন্য অনুকূলিত - রায়ট নির্দিষ্ট সময়ে সময়ে পটভূমিতে সিঙ্ক হবে (কনফিগারযোগ্য)। + রায়ট নির্দিষ্ট সময়ে সময়ে পটভূমিতে সিঙ্ক হবে (কনফিগারযোগ্য)। \nএটি রেডিও এবং ব্যাটারির ব্যবহারকে প্রভাবিত করবে, রায়ট ইভেন্টগুলি শুনছে বলে জানিয়ে একটি স্থায়ী বিজ্ঞপ্তি প্রদর্শিত হবে। কোনও পটভূমি সিঙ্ক না অ্যাপটি ব্যাকগ্রাউন্ডে থাকা অবস্থায় আপনাকে আগত বার্তাগুলি সম্পর্কে অবহিত করা হবে না। @@ -1436,7 +1436,7 @@ সাফল্য বিজ্ঞপ্তিগুলি - এলিমেন্ট কল ব্যর্থ + এলিমেন্ট কল ব্যর্থ রিয়েল টাইম সংযোগ স্থাপন করতে ব্যর্থ। \nকলগুলি নির্ভরযোগ্যতার সাথে কাজ করার জন্য দয়া করে আপনার হোমসার্ভারের প্রশাসককে একটি টার্ন সার্ভার কনফিগার করতে বলুন। @@ -1533,7 +1533,7 @@ দয়া করে একটি পাসফ্রেজ লিখুন পাসফ্রেজটি খুব দুর্বল - আপনি যদি এলিমেন্টটি পুনরুদ্ধার কী তৈরি করতে চান তবে দয়া করে পাসফ্রেজটি মুছুন। + আপনি যদি এলিমেন্টটি পুনরুদ্ধার কী তৈরি করতে চান তবে দয়া করে পাসফ্রেজটি মুছুন। কোনও ম্যাট্রিক্স সেশন উপলব্ধ নেই এনক্রিপ্ট করা বার্তাগুলি কখনই হারাবেন না diff --git a/vector/src/main/res/values-bs/strings.xml b/vector/src/main/res/values-bs/strings.xml index 691d439f45..8628a56a26 100644 --- a/vector/src/main/res/values-bs/strings.xml +++ b/vector/src/main/res/values-bs/strings.xml @@ -76,7 +76,7 @@ Imenik korisnika Samo matriks kontakti Nema razgovora - Niste omogućili Elementu pristup vašim lokalnim kontaktima + Niste omogućili ${app_name}u pristup vašim lokalnim kontaktima Nema rezultata Sobe Imenik soba @@ -200,24 +200,24 @@ Odjavljeni ste sa svih uređaja i više nećete primati obavijesti. Da biste pon Snimi fotografiju ili video Nije moguće snimiti video Informacije - Hepek treba dopuštenje za pristup vašoj biblioteci fotografija i videozapisa za slanje i spremanje privitaka. + Hepek treba dopuštenje za pristup vašoj biblioteci fotografija i videozapisa za slanje i spremanje privitaka. Omogućite pristup sljedećem skočnom prozoru da biste mogli slati datoteke sa telefona. - Hepek treba dopuštenje za pristup vašoj kameri za snimanje fotografija i videopoziva. + Hepek treba dopuštenje za pristup vašoj kameri za snimanje fotografija i videopoziva. Omogućite pristup sljedećem pop-upu kako biste mogli uputiti poziv. - Hepek traži dopuštenje za pristup mikrofonu za obavljanje audio poziva. + Hepek traži dopuštenje za pristup mikrofonu za obavljanje audio poziva. Omogućite pristup sljedećem pop-upu kako biste mogli uputiti poziv. - Hepek treba dopuštenje za pristup vašoj kemeri i mikrofonu za obavljanje video poziva. + Hepek treba dopuštenje za pristup vašoj kemeri i mikrofonu za obavljanje video poziva. Omogućite pristup sljedećim skočnim prozorima da biste mogli uspostaviti poziv. - Hepek treba dopuštenje za pristup kontaktima kako bi pronašao druge Matrix korisnike na temelju njihove email adrese i telefonskih brojeva. + Hepek treba dopuštenje za pristup kontaktima kako bi pronašao druge Matrix korisnike na temelju njihove email adrese i telefonskih brojeva. Dopustite pristup sljedećem skočnom prozoru da biste otkrili kontakte koji koriste Hepek. - Hepek treba dopuštenje za pristup kontaktima kako bi pronašao druge Matrix korisnike na temelju njihove email adrese i telefonskih brojeva. + Hepek treba dopuštenje za pristup kontaktima kako bi pronašao druge Matrix korisnike na temelju njihove email adrese i telefonskih brojeva. Želite li dopustiti da Hepek pristupi vašim kontaktima? Nažalost, akcija nije izvršena zbog nedostatka dozvola diff --git a/vector/src/main/res/values-ca/strings.xml b/vector/src/main/res/values-ca/strings.xml index eca0fb2614..7c09c778c5 100644 --- a/vector/src/main/res/values-ca/strings.xml +++ b/vector/src/main/res/values-ca/strings.xml @@ -348,7 +348,7 @@ Directori d\'usuari Només contactes de Matrix No hi ha xats - No has donat permís a Element perquè pugui accedir als teus contactes locals + No has donat permís a ${app_name} perquè pugui accedir als teus contactes locals Sense resultats Sales @@ -498,24 +498,24 @@ No es poden gravar vídeos" Informació - Per poder enviar i desar fitxers adjunts, Element necessita permís per accedir a la galeria de fotos i vídeos. + Per poder enviar i desar fitxers adjunts, ${app_name} necessita permís per accedir a la galeria de fotos i vídeos. \n \nPermet-li l\'accés en la següent finestra emergent per poder enviar fitxers des del mòbil. - Per poder fer fotos i videotrucades, Element necessita permís per accedir a la càmera. + Per poder fer fotos i videotrucades, ${app_name} necessita permís per accedir a la càmera. " \n \nPermet-li l\'accés en la següent finestra emergent per tal de poder fer la trucada." - Per tal de fer trucades de veu, Element necessita permís per accedir al micròfon. + Per tal de fer trucades de veu, ${app_name} necessita permís per accedir al micròfon. " \n \nPermet-li l\'accés en la següent finestra emergent per tal de poder fer la trucada." - Per tal de fer videotrucades, Element necessita permís per accedir a la càmera i al micròfon. + Per tal de fer videotrucades, ${app_name} necessita permís per accedir a la càmera i al micròfon. \n \nPermet-li l\'accés en la següent finestra emergent per tal de poder fer la trucada. - Element pot revisar la teva llista de contactes per tal de trobar altres usuaris de Matrix basant-se en les seves adreces de correu i números de telèfon. Si acceptes compartir la teva llista de contactes amb aquesta finalitat, permet l\'accés en la següent finestra emergent. - Per tal de trobar altres usuaris de Matrix a partir dels seus correus o dels seus números de telèfon, Element necessita permís d\'accés a la llista de contactes. + ${app_name} pot revisar la teva llista de contactes per tal de trobar altres usuaris de Matrix basant-se en les seves adreces de correu i números de telèfon. Si acceptes compartir la teva llista de contactes amb aquesta finalitat, permet l\'accés en la següent finestra emergent. + Per tal de trobar altres usuaris de Matrix a partir dels seus correus o dels seus números de telèfon, ${app_name} necessita permís d\'accés a la llista de contactes. \n -\nPermets que Element accedeixi als teus contactes amb aquesta finalitat\? +\nPermets que ${app_name} accedeixi als teus contactes amb aquesta finalitat\? No s\'ha realitzat l\'acció per falta de permisos Desat @@ -1020,7 +1020,7 @@ Tornar a demanar les claus de xifrat de les teves altres sessions. Petició de clau enviada. Sol·licitud enviada - Si us plau, obre Element a un altre dispositiu que pugui desxifrar el missatge de manera que pugui enviar les claus a aquesta sessió. + Si us plau, obre ${app_name} a un altre dispositiu que pugui desxifrar el missatge de manera que pugui enviar les claus a aquesta sessió. Normal No es pot dur a terme aquesta acció per falta de permisos. Error @@ -1069,12 +1069,12 @@ Desactivar el compte Desactivar el meu compte Notificació de privacitat - El Element pot funcionar en segon pla per gestionar les vostres notificacions de forma segura i privada. Això podria afectar el consum de bateria. + El ${app_name} pot funcionar en segon pla per gestionar les vostres notificacions de forma segura i privada. Això podria afectar el consum de bateria. Concedir permís Escolliu una altra opció Envia dades d\'anàlisi - Element recopila dades d\'anàlisi anònimes per tal de permetre millorar l\'aplicació. - Si us plau, activa les dades d\'anàlisi per ajudar-nos a millorar Element. + ${app_name} recopila dades d\'anàlisi anònimes per tal de permetre millorar l\'aplicació. + Si us plau, activa les dades d\'anàlisi per ajudar-nos a millorar ${app_name}. Sí, vull ajudar! Ara mateix no ets membre de cap comunitat. Crea una frase per xifrar les claus exportades. Hauràs d\'introduir la mateixa frase per poder importar les claus. @@ -1140,7 +1140,7 @@ plega Accepta Trucada - Utilitza el to de trucada d\'Element predeterminat per trucades entrants + Utilitza el to de trucada d\'${app_name} predeterminat per trucades entrants To de trucada entrant Tria el to per les trucades: Expulsa @@ -1181,12 +1181,12 @@ Inicia\'l a l\'arrencada Inhabilita les restriccions Optimització de bateria - El Element no està afectat per l\'optimització de bateria. + El ${app_name} no està afectat per l\'optimització de bateria. Mostra els esdeveniments d\'unió i sortida Inclou els canvis d\'icona i d\'àlies. Connexió al rerefons - Per poder obtenir notificacions fiables, Element necessita mantenir una connexió en segon pla de baixa incidència. -\nA la pantalla següent se\'t demanarà que permetis a Element executar-se sempre en segon pla, si us plau, accepta-ho. + Per poder obtenir notificacions fiables, ${app_name} necessita mantenir una connexió en segon pla de baixa incidència. +\nA la pantalla següent se\'t demanarà que permetis a ${app_name} executar-se sempre en segon pla, si us plau, accepta-ho. Contrasenya Informació addicional: %s S\'ha habilitat el Markdown. @@ -1211,8 +1211,8 @@ Diagnostica les notificacions Diagnòstic de la resolució de problemes Ha fallat una o més proves, envia un informe d\'errors per ajudar-nos a investigar-ho. - Les notificacions per aquesta sessió no estan activades. -\nComprova la configuració d\'Element. + Les notificacions per aquesta sessió no estan activades. +\nComprova la configuració d\'${app_name}. Configuració personalitzada. Tingues en compte que alguns tipus de missatge estan configurats per ser silenciosos (es produirà una notificació sense so). Algunes notificacions estan desactivades a la configuració personalitzada. @@ -1220,15 +1220,15 @@ Comprova la configuració Comprovació dels serveis de Play L\'APK dels Serveis de Google Play està disponible i està actualitzada. - Element utilitza els serveis de Google Play per lliurar missatges però sembla que no està configurat correctament: + ${app_name} utilitza els serveis de Google Play per lliurar missatges però sembla que no està configurat correctament: \n %1$s Token de Firebase Token FCM obtingut correctament: \n%1$s No s\'ha pogut obtenir el token FCM: \n%1$s - [%1$s] -\nAquest error està fora del control d\'Element i, segons Google, aquest error indica que aquest dispositiu té massa aplicacions registrades amb FCM. L\'error només ocorre en casos en què hi ha un nombre extrem d\'aplicacions i, per tant, no hauria d\'afectar els usuari normals. + [%1$s] +\nAquest error està fora del control d\'${app_name} i, segons Google, aquest error indica que aquest dispositiu té massa aplicacions registrades amb FCM. L\'error només ocorre en casos en què hi ha un nombre extrem d\'aplicacions i, per tant, no hauria d\'afectar els usuari normals. Afegeix un compte Registre de token El token FCM s\'ha registrat correctament al servidor local. @@ -1238,7 +1238,7 @@ El servei s\'ha parat i tornat a iniciar automàticament. No s\'ha pogut iniciar el servei El servei s\'iniciarà quan es reiniciï el dispositiu. - El servei no s\'iniciarà quan el dispositiu es reiniciï, per tant, no rebràs notificacions fins que Element no s\'hagi obert per primera vegada. + El servei no s\'iniciarà quan el dispositiu es reiniciï, per tant, no rebràs notificacions fins que ${app_name} no s\'hagi obert per primera vegada. Habilita l\'inici durant l\'arrencada Comprova les restriccions del rerefons Ignora l\'optimització @@ -1259,7 +1259,7 @@ Silenciós Introduïu una frase de pas La frase de pas és massa feble - Suprimiu la frase si vols que Element generi una clau de recuperació. + Suprimiu la frase si vols que ${app_name} generi una clau de recuperació. No hi ha cap sessió de Matrix disponible No perdeu mai els missatges xifrats Els missatges en sales xifrades estan protegits amb xifrat d\'extrem a extrem. Només tu i el/s destinatari/s teniu les claus per poder llegir aquests missatges. @@ -1287,13 +1287,13 @@ Introdueix la clau de recuperació Recuperació de missatges Has perdut la clau de recuperació\? Pots configurar-ne una de nova a la configuració. - [%1$s] -\nAquest error està fora del control d\'Element. Pot ser causat per diferents motius. És possible que torni a funcionar més endavant. També pots comprovar, a la configuració del sistema, que els Serveis de Google Play no tinguin cap restricció de dades o que l\'hora del dispositiu sigui la correcta. També pot passar si tens una ROM personalitzada. - [%1$s] -\nAquest error està fora del control d\'Element. No hi ha cap compte de Google al telèfon. Vés a la configuració de comptes i afegeix un compte de Google. - Les restriccions en segon pla per a Element estan desactivades. Aquesta prova s\'hauria de fer emprant dades mòbils (sense WiFi). + [%1$s] +\nAquest error està fora del control d\'${app_name}. Pot ser causat per diferents motius. És possible que torni a funcionar més endavant. També pots comprovar, a la configuració del sistema, que els Serveis de Google Play no tinguin cap restricció de dades o que l\'hora del dispositiu sigui la correcta. També pot passar si tens una ROM personalitzada. + [%1$s] +\nAquest error està fora del control d\'${app_name}. No hi ha cap compte de Google al telèfon. Vés a la configuració de comptes i afegeix un compte de Google. + Les restriccions en segon pla per a ${app_name} estan desactivades. Aquesta prova s\'hauria de fer emprant dades mòbils (sense WiFi). \n%1$s - Les restriccions en segon pla per a Element estan activades. + Les restriccions en segon pla per a ${app_name} estan activades. \nLes tasques que l\'aplicació intenta fer en segon pla estaran força restringides, això pot afectar a les notificacions. \n%1$s Si un usuari deixa un dispositiu amb la pantalla apagada, desendollat i quiet durant un període de temps, el dispositiu entra en el mode repòs. Això impedeix que les aplicacions accedeixin a la xarxa i n\'ajorna les seves tasques, sincronitzacions i alarmes estàndard. @@ -1446,7 +1446,7 @@ Aturar Comprovant l\'estat de la còpia de seguretat Opcions de compleció automàtica del servidor - Element ha detectat una configuració de servidor personalitzada pel teu domini d\'ID d\'usuari \"%1$s\": + ${app_name} ha detectat una configuració de servidor personalitzada pel teu domini d\'ID d\'usuari \"%1$s\": \n%2$s Se t\'ha desconnectat a causa de credencials incorrectes o caducades. Verificar comparant una cadena de text curta. @@ -1517,7 +1517,7 @@ Espereu, si us plau… Totes les comunitats Aquesta sala no es pot pre-visualitzar - Element encara no admet la pre-visualització de les sales llegibles per tothom + ${app_name} encara no admet la pre-visualització de les sales llegibles per tothom Sales Xats personals Sala nova @@ -1541,7 +1541,7 @@ Expulsa usuari Aquesta operació encara no està disponible en comptes que utilitzen la inscripció única (SSO). Continua amb SSO - Per a la teva pròpia privadesa, Element només admet l\'enviament del \"hash\" de correus electrònics i números de telèfon. + Per a la teva pròpia privadesa, ${app_name} només admet l\'enviament del \"hash\" de correus electrònics i números de telèfon. Només admès en sales xifrades El xifrat que utilitza aquesta sala no és compatible No pots fer això des del mòbil @@ -1551,7 +1551,7 @@ L\'aplicació no ha pogut iniciar sessió en aquest servidor. El servidor és compatible amb el/s següent/s tipus d\'inici de sessió: %1$s. \n \nVols iniciar sessió utilitzant un client web\? - No pots fer això des d\'Element per a mòbils + No pots fer això des d\'${app_name} per a mòbils La cerca en sales xifrades encara no està disponible. La sala encara no s\'ha acabat de crear. Vols cancel·lar la seva creació\? No s\'ha trobat aquesta sala. Assegura\'t que existeixi. @@ -1641,7 +1641,7 @@ Cancel·la invitació Torna a la trucada Error SSL. - La trucada d\'Element ha fallat + La trucada d\'${app_name} ha fallat Restableix la contrasenya a %1$s Aquest correu electrònic no està associat amb cap compte. Ho sentim, aquest servidor no accepta comptes nous. @@ -1823,10 +1823,10 @@ No s\'ha pogut actualitzar la configuració. No se\'t notificarà de missatges entrants quan l\'aplicació es trobi en segon pla. Sense sincronització en segon pla - Element farà la sincronització en segon pla periòdicament en instants de temps precisos (configurable). -\nAixò tindrà un impacte en l\'ús de la ràdio i la bateria, es mostrarà una notificació permanent informant de que Element està a l\'espera d\'esdeveniments. + ${app_name} farà la sincronització en segon pla periòdicament en instants de temps precisos (configurable). +\nAixò tindrà un impacte en l\'ús de la ràdio i la bateria, es mostrarà una notificació permanent informant de que ${app_name} està a l\'espera d\'esdeveniments. Optimitzat per a temps real - Element farà la sincronització en segon pla de manera que es preservin els recursos limitats del dispositiu (bateria). + ${app_name} farà la sincronització en segon pla de manera que es preservin els recursos limitats del dispositiu (bateria). \nEn funció de l\'estat dels recursos del dispositiu, pot ser que el sistema operatiu endarrereixi la sincronització. Optimitzat per a la bateria Mode de sincronització en segon pla @@ -2013,10 +2013,10 @@ Usuari i/o contrasenya incorrectes. La contrasenya introduïda comença o acaba amb espais, comprova-la. Aquest compte ha estat desactivat. %1$d de %2$d - Element iOS -\nElement Android - Element Web -\nElement per a escriptori + ${app_name} iOS +\n${app_name} Android + ${app_name} Web +\n${app_name} per a escriptori Afegeix gent Afegeix membres Afegeix des de la meva agenda @@ -2027,7 +2027,7 @@ Codi QR Obre el xat Silencia el micròfon - El codi PIN és l\'única manera de desbloquejar Element. + El codi PIN és l\'única manera de desbloquejar ${app_name}. o un altre client Matrix compatible amb la signatura creuada La signatura creuada no està activada La signatura creuada està activada @@ -2043,7 +2043,7 @@ Enviar esdeveniments m.room.server_acl Canviar els permisos Canviar el nom de la sala - Element necessita permís per poder desar les claus E2E al disc. + ${app_name} necessita permís per poder desar les claus E2E al disc. \n \nPermet-li l\'accés en la següent finestra emergent per poder exportar les claus manualment. Ara mateix no hi ha cap connexió @@ -2087,8 +2087,8 @@ Confirma el PIN per poder desactivar el PIN Canvia el teu PIN actual Canvia el PIN - Codi PIN necessari cada vegada que obres Element. - Codi PIN necessari al cap de 2 minuts sense utilitzar Element. + Codi PIN necessari cada vegada que obres ${app_name}. + Codi PIN necessari al cap de 2 minuts sense utilitzar ${app_name}. Demana el PIN al cap de 2 minuts Mostra, només, el nombre de missatges no llegits en les notificacions simples. Mostra el contingut de les notificacions @@ -2169,7 +2169,7 @@ Comença a xatejar Predeterminat pel sistema Utilitza la %1$s o la %2$s per a continuar. - Utilitza l\'última versió d\'Element als teus altres dispositius: + Utilitza l\'última versió d\'${app_name} als teus altres dispositius: L\'administrador del servidor local (%1$s) ha tancat la teva sessió del compte %2$s (%3$s). %d usuari ho ha llegit @@ -2237,7 +2237,7 @@ Clica per revisar i verificar Nou inici de sessió. Has estat tu\? Actualitza - Element Android + ${app_name} Android Les claus ja estan actualitzades! Esdeveniment eliminat per un usuari, motiu: %1$s Esdeveniment moderat per un administrador de sala, motiu: %1$s @@ -2280,7 +2280,7 @@ Adreça de la sala Activa el xifrat Afegeix ¯\\_(ツ)_/¯ a l\'inici d\'un missatge de text pla - Pot ser que Element falli més sovint quan es produeixi un error inesperat + Pot ser que ${app_name} falli més sovint quan es produeixi un error inesperat Altres sessions Sessió actual Configuració @@ -2368,8 +2368,8 @@ Visualització de notificació Inici de %s. Convida amics - Ei, parla amb mi des d\'Element: %s - 🔐️ Uneix-te a Element + Ei, parla amb mi des d\'${app_name}: %s + 🔐️ Uneix-te a ${app_name} Comparteix aquest codi amb la gent perquè puguin escanejar-lo, afegir-te i començar a xatejar amb tu. L\'usuari no s\'ha acceptat el consentiment. Envia el missatge proporcionat amb confetis @@ -2407,7 +2407,7 @@ Com els correus electrònics, els comptes pertanyen a una entitat però els pots fer servir per parlar amb tothom Potser ho hauries d\'activar si la sala només s\'utilitzarà per la interacció de grups interns dins el teu servidor local. Això no es podrà canviar més tard. Bloqueja qualsevol persona que no formi part de %s perquè mai pugui unir-se a la sala - La sessió actual és de l\'usuari %1$s i has introduït les credencials de l\'usuari %2$s. Això no es pot fer amb Element. + La sessió actual és de l\'usuari %1$s i has introduït les credencials de l\'usuari %2$s. Això no es pot fer amb ${app_name}. \nPrimer esborra les dades i després torna a iniciar sessió amb l\'altre compte. Perdràs l\'accés als missatges protegits tret de que iniciïs sessió i obtinguis les teves claus de xifrat. Atenció: les teves dades personals (incloses les claus de xifrat) encara estan desades en aquest dispositiu. @@ -2492,9 +2492,9 @@ Completa la seguretat Pot ser que altres usuaris no hi confiïn Deixa d\'ignorar - Element ha trobat un problema al renderitzar el contingut de l\'esdeveniment amb ID \'%1$s\' - Element no gestiona els missatges de tipus \'%1$s\' - Element no gestiona els esdeveniments de tipus \'%1$s\' + ${app_name} ha trobat un problema al renderitzar el contingut de l\'esdeveniment amb ID \'%1$s\' + ${app_name} no gestiona els missatges de tipus \'%1$s\' + ${app_name} no gestiona els esdeveniments de tipus \'%1$s\' Marxant de la sala… Marxa Marxa de la sala @@ -2570,7 +2570,7 @@ \nSegur que vols continuar\? Comprova aquest enllaç Marca-ho com a segur - Utilitza l\'última versió d\'Element als teus altres dispositius, Element Web, Element per escriptori, Element iOS, Element per Android, o algun altre client de Matrix que admeti signatura creuada + Utilitza l\'última versió d\'${app_name} als teus altres dispositius, ${app_name} Web, ${app_name} per escriptori, ${app_name} iOS, ${app_name} per Android, o algun altre client de Matrix que admeti signatura creuada Desant secret de clau de còpia de seguretat a SSSS Verifica\'t a tu i als altres per mantenir els teus xats segurs Envia un missatge com a text pla, sense tenir en compte la formatació markdown @@ -2598,7 +2598,7 @@ Si ho restableixes tot Fes això només si no tens cap altre dispositiu per poder verificar-ne aquest. - Element necessita que introdueixis les teves credencials per poder realitzar aquesta acció. + ${app_name} necessita que introdueixis les teves credencials per poder realitzar aquesta acció. Re-autenticació necessària Llista de contactes La teva agenda està buida @@ -2619,7 +2619,7 @@ L\'associació ha fallat. Primer configura un servidor d\'identitat. No es pot realitzar aquesta operació. El servidor local no està actualitzat. - Aquest servidor d\'identitat no està actualitzat. Element només és compatible amb l\'API V2. + Aquest servidor d\'identitat no està actualitzat. ${app_name} només és compatible amb l\'API V2. Vols desconnectar-te del servidor d\'identitat %s\? Carregant idiomes disponibles… Altres idiomes disponibles diff --git a/vector/src/main/res/values-cs/strings.xml b/vector/src/main/res/values-cs/strings.xml index af48a7d148..deacdeb266 100644 --- a/vector/src/main/res/values-cs/strings.xml +++ b/vector/src/main/res/values-cs/strings.xml @@ -352,7 +352,7 @@ Uživatelský adresář Pouze kontakty Matrix Žádné konverzace - Nepovolil jste aplikaci Element přístup k místním kontaktům + Nepovolil jste aplikaci ${app_name} přístup k místním kontaktům Žádné výsledky Místnosti Adresář místností @@ -501,7 +501,7 @@ Název místnosti Téma místnosti Hovory - Použít původní vyzvánění Elementu pro příchozí hovory + Použít původní vyzvánění ${app_name}u pro příchozí hovory Vyzvánění příchozího hovoru Vybrat vyzvánění pro hovory: Hovor @@ -520,14 +520,14 @@ Pořídit fotografii nebo video Nemohu natáčet video Informace - Element potřebuje oprávnění pro přístup do Vaší knihovny fotografií a videí, aby mohl odesílat a ukládat přílohy. + ${app_name} potřebuje oprávnění pro přístup do Vaší knihovny fotografií a videí, aby mohl odesílat a ukládat přílohy. \n \nProsím, povolte přístup na následující hlášce pro možnost odesílání souborů z Vašeho telefonu. - Element potřebuje oprávnění pro přístup k Vašemu fotoaparátu pro pořizování fotografií a uskutečňování video hovorů. + ${app_name} potřebuje oprávnění pro přístup k Vašemu fotoaparátu pro pořizování fotografií a uskutečňování video hovorů. " \n \nProsím, povolte přístup na následující hlášce, abyste mohli uskutečnit hovor." - Element potřebuje oprávnění pro přístup k Vašemu mikrofonu pro uskutečnění hlasových hovorů. + ${app_name} potřebuje oprávnění pro přístup k Vašemu mikrofonu pro uskutečnění hlasových hovorů. " \n \nProsím, povolte přístup na následující hlášce, abyste mohli uskutečnit hovor." @@ -541,7 +541,7 @@ Náhled Byli jste pozváni od %s ke vstupu do místnosti Žádost odeslána - Prosím, spusťte Element na jiném zařízení, které může dešifrovat zprávu, aby poslalo klíče této relaci. + Prosím, spusťte ${app_name} na jiném zařízení, které může dešifrovat zprávu, aby poslalo klíče této relaci. Seznam doručenek Seznam skupin Omlouváme se, ale akce nebyla provedena z důvodu chybějících oprávnění @@ -678,11 +678,11 @@ Zrušit Opravdu se chcete odhlásit\? Video hovor probíhá… - Element potřebuje oprávnění pro přístup k Vaší kameře a mikrofonu pro uskutečnění video hovoru. + ${app_name} potřebuje oprávnění pro přístup k Vaší kameře a mikrofonu pro uskutečnění video hovoru. \n \nProsím, povolte přístup na následující hlášce abyste mohli uskutečnit hovor. - Element může nahlédnout do vašeho adresáře, aby nalezl ostatní uživatele Matrixu na základě jejich e-mailu a telefonního čísla. Pokud souhlasíte se sdílením svého adresáře za tímto účelem, prosím, povolte přístup v příští hlášce. - Element může nahlédnout do vašeho adresáře, aby nalezl ostatní uživatele Matrixu na základě jejich e-mailu a telefonního čísla. + ${app_name} může nahlédnout do vašeho adresáře, aby nalezl ostatní uživatele Matrixu na základě jejich e-mailu a telefonního čísla. Pokud souhlasíte se sdílením svého adresáře za tímto účelem, prosím, povolte přístup v příští hlášce. + ${app_name} může nahlédnout do vašeho adresáře, aby nalezl ostatní uživatele Matrixu na základě jejich e-mailu a telefonního čísla. \n \nSouhlasíte se sdílením svého adresáře za tímto účelem\? Pozvánka byla odeslána na %s, což není spárováno s tímto účtem. @@ -793,7 +793,7 @@ Použiiji %s jako nápomoc, pokud Váš homeserver žádnou nenabízí (Vaše IP adresa bude sdělena během hovoru) Pro provedení této akce přidat server identit v nastavení. Potvrďte své heslo - Nelze provést z Element mobile + Nelze provést z ${app_name} mobile Ověření je nutné Soukromí oznámení Odstraňování problémů s oznámeními @@ -815,8 +815,8 @@ Zapnout Nastavení relací. Pro tuto relaci jsou oznámení zapnuta. - Oznámení nejsou zapnuta pro tuto relaci. -\nProsím, prověřte nastavení Elementu. + Oznámení nejsou zapnuta pro tuto relaci. +\nProsím, prověřte nastavení ${app_name}u. Zapnout Vlastní nastavení. Všimněte si, že některé typy zpráv jsou ztišeny (vyvolají oznámeni bez zvuku). @@ -825,7 +825,7 @@ Kontrola nastavení Kontrola služeb Play Google Play Services APK je k dispozici a aktuální. - Element používá Google Play Services pro doručení zpráv push, ale patrně nejsou správně nastaveny: + ${app_name} používá Google Play Services pro doručení zpráv push, ale patrně nejsou správně nastaveny: \n%1$s Opravit Play Services Token Firebase @@ -833,12 +833,12 @@ \n%1$s Načtení FCM tokenu selhalo: \n%1$s - [%1$s] -\nTato chyba je mimo kontrolu Elementu a podle Googlu indikuje, že zařízení má příliš mnoho aplikací registrovaných s FCM. Tato chyba se ukáže jen v případech extrémního množství aplikací, a proto by neměla mít vliv na normálního uživatele. - [%1$s] -\nTato chyba je mimo kontrolu Elementu. Múže k ní dojít z několika důvodů. Snad bude fungovat, když zkusíte znovu později, můžete též zkontrolovat, zda Google Play Service nejsou omezeny v množství dat v systémových nastavení nebo zda hodiny zařízení jdou správné nebo k chybě může dojít na zvláštní ROM. - [%1$s] -\nTato chyba je mimo kontrolu Elementu. V telefonu není žádný účet Google. Prosím, spusťte správce účtů a doplňte účet Google. + [%1$s] +\nTato chyba je mimo kontrolu ${app_name}u a podle Googlu indikuje, že zařízení má příliš mnoho aplikací registrovaných s FCM. Tato chyba se ukáže jen v případech extrémního množství aplikací, a proto by neměla mít vliv na normálního uživatele. + [%1$s] +\nTato chyba je mimo kontrolu ${app_name}u. Múže k ní dojít z několika důvodů. Snad bude fungovat, když zkusíte znovu později, můžete též zkontrolovat, zda Google Play Service nejsou omezeny v množství dat v systémových nastavení nebo zda hodiny zařízení jdou správné nebo k chybě může dojít na zvláštní ROM. + [%1$s] +\nTato chyba je mimo kontrolu ${app_name}u. V telefonu není žádný účet Google. Prosím, spusťte správce účtů a doplňte účet Google. Přidat účet Registrace tokenu FCM token se podařilo úspěšné registrovat na homeserveru. @@ -854,17 +854,17 @@ Restart služby se nezdařil Spustit při zavádění Služba se spustí při restartu zařízení. - Služba se nespustí při startu zařízení, neobdržíte oznámení, dokud jednou neotevřete Element. + Služba se nespustí při startu zařízení, neobdržíte oznámení, dokud jednou neotevřete ${app_name}. Zapnout Spustit při zavádění Zkontrolovat omezení na pozadí - Omezení na pozadí jsou pro Element vypnuta. Tento test by měl běžet s mobilními daty (ne WIFI). + Omezení na pozadí jsou pro ${app_name} vypnuta. Tento test by měl běžet s mobilními daty (ne WIFI). \n%1$s - Omezení na pozadí jsou pro Element zapnuta. + Omezení na pozadí jsou pro ${app_name} zapnuta. \nČinnosti prováděné aplikací budou agresivně omezeny, bude-li v pozadí, a to může mít vliv na oznámení. \n%1$s Vypnout omezení Optimalizace baterie - Optimalizace baterie nemá na Element vliv. + Optimalizace baterie nemá na ${app_name} vliv. Nechá-li uživatel zařízení vytažený ze zásuvky a v klidu po nějakou dobu a s obrazovkou vypnutou, zařízení vstoupí do stavu spánku. Ten zamezí aplikacím přístup k síti a odloží jejich úlohy, synchronizaci a běžná upozornění. Ignorovat optimalizaci Normální @@ -894,11 +894,11 @@ Synchronizace na pozadí Režim synchronizace na pozadí Optimalizován pro baterii - Element bude synchronizovat na pozadí způsobem, který šetří omezené zdroje zařízení (baterii). + ${app_name} bude synchronizovat na pozadí způsobem, který šetří omezené zdroje zařízení (baterii). \nV závislosti na stavu zdrojů zařízení může být sync operačním systémem odložen. Optimalizováno pro reálný čas - Element bude synchronizovat na pozadí periodicky v přesný čas (nastavitelné). -\nTo bude mít vliv na využití rádia a baterie, stálé oznámení o tom, že Element čeká na události, bude zobrazeno. + ${app_name} bude synchronizovat na pozadí periodicky v přesný čas (nastavitelné). +\nTo bude mít vliv na využití rádia a baterie, stálé oznámení o tom, že ${app_name} čeká na události, bude zobrazeno. Žádný sync na pozadí Neobdržíte oznámení o příchozích zprávách, je-li aplikace na pozadí. Aktualizace nastavení se nezdařila. @@ -959,17 +959,17 @@ Odhalení Správa Vašich nastaveni pro odhalení. Soukromí ohledně oznámení - Element může běžet na pozadí, aby spravoval Vaše oznámení bezpečně a v soukromí. To může mít vliv na baterii. + ${app_name} může běžet na pozadí, aby spravoval Vaše oznámení bezpečně a v soukromí. To může mít vliv na baterii. Udělit oprávnění Vybrat jinou volbu Spojení na pozadí - Element potřebuje udržovat spojení na pozadí se slabým vlivem, abyste obdrželi spolehlivá oznámení. -\nNa příští obrazovce budete dotázáni o svolení nechat Element vždy v chodu na pozadí, prosím, souhlaste. + ${app_name} potřebuje udržovat spojení na pozadí se slabým vlivem, abyste obdrželi spolehlivá oznámení. +\nNa příští obrazovce budete dotázáni o svolení nechat ${app_name} vždy v chodu na pozadí, prosím, souhlaste. Udělit oprávění Analýza Odeslat analytická data - Element sbírá anonymní analytická data pro vylepšení aplikace. - Prosím, zapněte analýzu pro vylepšení Elementu. + ${app_name} sbírá anonymní analytická data pro vylepšení aplikace. + Prosím, zapněte analýzu pro vylepšení ${app_name}u. Ano, chci pomoci! Režim úsporných dat Režim úsporných data zavádí specifický filtr, takže aktualizace přítomnosti a oznámení o psaní jsou fitrovány. @@ -1390,7 +1390,7 @@ Přistupová fráze se neshoduje Prosím, zadejte přístupovou frázi Přístupová fráze je příliš slabá - Prosím, smažte přístupovou frázi, přejete-li si, aby Element generoval klíč pro obnovu. + Prosím, smažte přístupovou frázi, přejete-li si, aby ${app_name} generoval klíč pro obnovu. Žádná relace Matrix není dostupná Nikdy neztraťte šifrované zprávy Zprávy v šifrovaných místnostech jsou zabezpečeny pomocí end-to-end šifrováním. Pouze Vy a adresát(i) máte klíče ke čtení těchto zpráv. @@ -1482,7 +1482,7 @@ Podpis Neplatná odpověď z hledání homeserverů Volby serveru automaticky - Element nalezl vlastní konfiguraci serveru pro doménu Vašeho uživatelského Id \"%1$s\": + ${app_name} nalezl vlastní konfiguraci serveru pro doménu Vašeho uživatelského Id \"%1$s\": \n%2$s Použít konfiguraci Byli jste odhlášení kvůli chybným či neplatným ověřovacím údajům. @@ -1557,7 +1557,7 @@ Prosím, čekejte… Všechny komunity Nelze provést náhled této místnosti - Náhled místnosti čitelné pro všechny zatím Element nepodporuje + Náhled místnosti čitelné pro všechny zatím ${app_name} nepodporuje Místnosti Přímé zprávy Nová místnost @@ -1697,7 +1697,7 @@ Obsah byl nahlášen jako nepatřičný. \n \nPokud si dále nepřejete vidět obsah tohoto uživatele, můžete jej ignorovat a tím skrýt jejich zprávy. - Element potřebuje práva k uložení Vašich E2E klíčů na disk. + ${app_name} potřebuje práva k uložení Vašich E2E klíčů na disk. \n \nProsím, povolte přístup v příštím dialogu, abyste mohli exportovat své klíče manuálně. Právě nyní není k dispozici žádné síťové spojení @@ -1839,7 +1839,7 @@ \nPro přístup k účtu a zprávám se znovu se přihlaste. Ztratíte přístup k šifrovaným zprávám, pokud se nepřihlásíte za účelem obnovy šifrovacích klíčů. Vyčistit data - Tato relace je pro uživatele %1$s a Vy jste zadali údaje pro uživatele %2$s. Element toto nepodporuje. + Tato relace je pro uživatele %1$s a Vy jste zadali údaje pro uživatele %2$s. ${app_name} toto nepodporuje. \nProsím, nejdříve vyčistěte data a pak se přihlaste k jinému účtu. Váš odkaz matrix.to byl chybný Popis je příliš krátký @@ -1857,7 +1857,7 @@ Jiné relace Ukazuji jen první výsledky, zadejte více znaků… Fail-fast - Element se může zbořit častěji, když se objeví neočekávané chyby + ${app_name} se může zbořit častěji, když se objeví neočekávané chyby Předsune ¯\\_(ツ)_/¯ do textové zprávy Zapnout šifrování Jakmile zapnuto, šifrování nelze vypnout. @@ -1929,9 +1929,9 @@ Moderátor v %1$s Vlastní (%1$d) in %2$s Přeskočit k potvrzení přečtení - Element neobstarává události typu \'%1$s\' - Element neobstarává zprávy typu \'%1$s\' - Element narazil na chybu při převádění obsahu události s id \'%1$s\' + ${app_name} neobstarává události typu \'%1$s\' + ${app_name} neobstarává zprávy typu \'%1$s\' + ${app_name} narazil na chybu při převádění obsahu události s id \'%1$s\' Odignorovat Tato relace nemůže sdílet toto ověření s jinými z Vašich relací. \nToto ověření bude uloženo místně a sdíleno v budoucí verzi aplikace. @@ -2029,7 +2029,7 @@ Událost smazána uživatelem, důvod: %1$s Událost moderována správcem místnosti, důvod: %1$s Klíče jsou již aktuální! - Element Android + ${app_name} Android Požadavky na klíče Odemknout zašifrovanou historii zpráv Obnovit @@ -2150,13 +2150,13 @@ To není platný identifikátor uživatele. Platný formát: \'@uživatel:homeserver.org\' Nemohu najít platný domovský server. Prosím, zkontrolujte svůj identifikátor Režim letadlo je zapnut - Použijte na svých zařízeních nejnovější Element, Element Web, Element Desktop, Element iOS, Element pro Android nebo jiný Matrix klient schopný křížového přihlášení - Element Web -\nElement Desktop - Element iOS -\nElement Android + Použijte na svých zařízeních nejnovější ${app_name}, ${app_name} Web, ${app_name} Desktop, ${app_name} iOS, ${app_name} pro Android nebo jiný Matrix klient schopný křížového přihlášení + ${app_name} Web +\n${app_name} Desktop + ${app_name} iOS +\n${app_name} Android nebo jiný Matrix klient schopný křížového přihlášení - Použijte na svých zařízeních nejnovější Element: + Použijte na svých zařízeních nejnovější ${app_name}: Vynutí zahození probíhající skupinové relace v šifrované místnosti Podporováno jen v šifrovaných místnostech Použijte své %1$s nebo použijte svůj %2$s a pokračujte. @@ -2198,11 +2198,11 @@ Načítám dostupné jayzky… Otevřít všeobecné podmínky %s Odpojit se od serveru identit %s\? - Tento server identit je zastaralý. Element podporuje jen API V2. + Tento server identit je zastaralý. ${app_name} podporuje jen API V2. Tato operace není možná. Domovský server je zastaralý. Prosím, nejdříve nastavit server identit. Prosím, přijměte nejdříve všeobecné podmínky serveru identit v nastavení. - Pro Vaše soukromí, Element podporuje jen odesílání hašovaných emailových adress a telefonních čísel. + Pro Vaše soukromí, ${app_name} podporuje jen odesílání hašovaných emailových adress a telefonních čísel. Propojení selhalo. S tímto identifikátorem neexistuje žádné propojení. Váš domovský server (%1$s) navrhuje použít %2$s za Váš domovský server @@ -2228,7 +2228,7 @@ Kopírovat Podařilo se Oznámení - Volání Elementu se nezdařilo + Volání ${app_name}u se nezdařilo Založit spojení v reálném čase se nezdařilo. \nProsím, požádejte správce svého homeserveru o konfiguraci TURN serveru, aby volání fungovala spolehlivě. Vybrat zvukové zařízení @@ -2429,13 +2429,13 @@ Změny zavrhnout Zůstávají neuložené změny. Zavrhnout změny\? Místnost nebyla ještě založena. Zrušit založení místnosti\? - Kód PIN se vyžaduje při každém otevření Elementu. - Kód PIN se vyžaduje, pokud se Element nepoužil 2 minuty. + Kód PIN se vyžaduje při každém otevření ${app_name}u. + Kód PIN se vyžaduje, pokud se ${app_name} nepoužil 2 minuty. Žádat PIN po 2 minutách Zobrazit pouze počet nepřečtených zpráv v jednoduchém oznámení. Zobrazit podrobnosti např. názvy místností a obsah zpráv. Zobrazit obsah v oznámení - Kód PIN je jediný způsob, jak odemknout Element. + Kód PIN je jediný způsob, jak odemknout ${app_name}. Zapnout biometriku specifickou pro zařízení, např. otisk prstu nebo rozpoznání obličeje. Zapnout biometriku Nastavit ochranu @@ -2505,8 +2505,8 @@ Sdílet můj kód Skenovat QR kód To není platný matrixový QR kód - 🔐️ Přidej se ke mně v elementu - Ahoj, pojď si povídat v Elementu: %s + 🔐️ Přidej se ke mně v ${app_name}u + Ahoj, pojď si povídat v ${app_name}u: %s Pozvat přátele Přidat lidi "Téma: " @@ -2624,7 +2624,7 @@ Přidat Výchozí téma Ověření se nezdařilo - Element vyžaduje zadání přihlašovacích údajů k provedení této akce. + ${app_name} vyžaduje zadání přihlašovacích údajů k provedení této akce. Je nutné opětovné ověření Nastavení křížového podepisování se nezdařilo Neautorizováno, chybí platné ověřovací údaje diff --git a/vector/src/main/res/values-da/strings.xml b/vector/src/main/res/values-da/strings.xml index 1210d4da90..d74de284f4 100644 --- a/vector/src/main/res/values-da/strings.xml +++ b/vector/src/main/res/values-da/strings.xml @@ -148,7 +148,7 @@ Bruger katalog Kun Matrix kontakter Ingen samtaler - Du gav ikke Element tilladelse til at se dine lokale kontakter + Du gav ikke ${app_name} tilladelse til at se dine lokale kontakter Ingen resultater Rum @@ -299,25 +299,25 @@ Du er blevet logget ud af alle enheder og vil ikke længere modtage pushnotifika Kan ikke optage video Information - Element skal bruge tilladelse til at tilgå dit billed- og videoarkiv for at sende og gemme vedhæftninger. + ${app_name} skal bruge tilladelse til at tilgå dit billed- og videoarkiv for at sende og gemme vedhæftninger. Giv venligst tilladelse ved næste pop-up for at kunne sende filer fra din telefon. - Element skal bruge tilladelse til at bruge dit kamera for at billeder og lave videoopkald. + ${app_name} skal bruge tilladelse til at bruge dit kamera for at billeder og lave videoopkald. Giv venligst tilladelse ved næste pop-up for at kunne lave opkald. - Element skal bruge tilladelse til at bruge din mikrofon for at lave lydopkald. + ${app_name} skal bruge tilladelse til at bruge din mikrofon for at lave lydopkald. Giv venligst tilladelse ved næste pop-up for at kunne lave opkaldet. - Element skal bruge tilladelse til at bruge dit kamera og din mikrofon for at lave videoopkald. + ${app_name} skal bruge tilladelse til at bruge dit kamera og din mikrofon for at lave videoopkald. Giv venligst tilladelse ved næste pop-up for at lave opkaldet. - Element skal bruge adgang til dine kontakter for at finde andre Matrix brugere ud fra deres email og telefonnumre. + ${app_name} skal bruge adgang til dine kontakter for at finde andre Matrix brugere ud fra deres email og telefonnumre. -Giv venligst tilladelse ved næste pop-up for at finde kontakter der er på Element. - Element skal bruge adgang til dine kontakter for at finde andre Matrix brugere ud fra deres email og telefonnumre. +Giv venligst tilladelse ved næste pop-up for at finde kontakter der er på ${app_name}. + ${app_name} skal bruge adgang til dine kontakter for at finde andre Matrix brugere ud fra deres email og telefonnumre. -Vil du give Element adgang til dine kontakter? +Vil du give ${app_name} adgang til dine kontakter? Beklager… Handlingen blev ikke udført fordi der mangler tilladelser diff --git a/vector/src/main/res/values-de/strings.xml b/vector/src/main/res/values-de/strings.xml index 8a781860c7..ee1a204172 100644 --- a/vector/src/main/res/values-de/strings.xml +++ b/vector/src/main/res/values-de/strings.xml @@ -344,7 +344,7 @@ Lokales Adressbuch Nur Matrix-Kontakte Keine Konversationen - Element wurde nicht erlaubt, auf lokale Kontakte zuzugreifen + ${app_name} wurde nicht erlaubt, auf lokale Kontakte zuzugreifen Keine Ergebnisse Räume @@ -482,20 +482,20 @@ Video kann nicht aufgenommen werden Information - Element benötigt die Berechtigung, auf deine Fotos und Videos zugreifen zu können, um Anhänge zu senden und zu speichern.\n\nBitte erlaube den Zugriff im nächsten Dialog, um Dateien von deinem Gerät zu versenden. - Element benötigt die Berechtigung, auf deine Kamera zugreifen zu können, um Bilder aufzunehmen und Video-Anrufe durchzuführen. + ${app_name} benötigt die Berechtigung, auf deine Fotos und Videos zugreifen zu können, um Anhänge zu senden und zu speichern.\n\nBitte erlaube den Zugriff im nächsten Dialog, um Dateien von deinem Gerät zu versenden. + ${app_name} benötigt die Berechtigung, auf deine Kamera zugreifen zu können, um Bilder aufzunehmen und Video-Anrufe durchzuführen. " \n \nBitte erlaube den Zugriff im nächsten Dialog, um den Anruf durchzuführen." - Element benötigt die Berechtigung, auf dein Mikrofon zugreifen zu können, um (Sprach-)Anrufe tätigen zu können. + ${app_name} benötigt die Berechtigung, auf dein Mikrofon zugreifen zu können, um (Sprach-)Anrufe tätigen zu können. " \n \nBitte erlaube den Zugriff im nächsten Dialog, um den Anruf durchzuführen." - Element benötigt die Berechtigung, auf Kamera und Mikrofon zu zugreifen, um Video-Anrufe durchzuführen. + ${app_name} benötigt die Berechtigung, auf Kamera und Mikrofon zu zugreifen, um Video-Anrufe durchzuführen. \n \nBitte erlaube den Zugriff im nächsten Dialog, um den Anruf durchzuführen. - Element kann dein Adressbuch durchsuchen, um andere Matrix-Nutzer:innen anhand ihrer Email-Adresse und Telefonnummer zu finden. Wenn du der Nutzung deines Adressbuchs zu diesem Zweck zustimmst, erlaube den Zugriff im nächsten Popup-Fenster. - Element kann dein Adressbuch durchsuchen, um andere Matrix-Nutzer:innen anhand ihrer E-Mail-Adresse und Telefonnummer zu finden. + ${app_name} kann dein Adressbuch durchsuchen, um andere Matrix-Nutzer:innen anhand ihrer Email-Adresse und Telefonnummer zu finden. Wenn du der Nutzung deines Adressbuchs zu diesem Zweck zustimmst, erlaube den Zugriff im nächsten Popup-Fenster. + ${app_name} kann dein Adressbuch durchsuchen, um andere Matrix-Nutzer:innen anhand ihrer E-Mail-Adresse und Telefonnummer zu finden. \n \nStimmst du der Nutzung deines Adressbuchs zu diesem Zweck zu\? Entschuldige. Die Aktion wurde aufgrund fehlender Berechtigungen nicht ausgeführt @@ -1019,7 +1019,7 @@ • Benachrichtigungen enthalten Metadaten und Nachrichteninhalte • Benachrichtigungen werden den Nachrichteninhalt nicht anzeigen Benachrichtungs-Datenschutz - Element kann im Hintergrund laufen um deine Benachrichtigungen sicher und privat zu verwalten. Dies kann den Energieverbrauch beeinflussen. + ${app_name} kann im Hintergrund laufen um deine Benachrichtigungen sicher und privat zu verwalten. Dies kann den Energieverbrauch beeinflussen. Berechtigung gewähren Wähle eine andere Option Sende einen Sticker @@ -1030,8 +1030,8 @@ Account deaktivieren Deaktiviere meinen Account Sende Analysedaten - Element sammelt anonyme Analysedaten um uns zu helfen, die App zu verbessern. - Bitte aktive Analysedaten um uns zu helfen Element zu verbessern. + ${app_name} sammelt anonyme Analysedaten um uns zu helfen, die App zu verbessern. + Bitte aktive Analysedaten um uns zu helfen ${app_name} zu verbessern. Ja, ich möchte helfen! Ein benötigter Parameter fehlt. Ein Parameter ist nicht valide. @@ -1053,7 +1053,7 @@ Verschlüsselungsschlüssel von deinen anderen Sitzungen erneut anfragen. Schlüsselanfrage gesendet. Anfrage gesendet - Bitte öffne Element auf einem anderen Gerät, das die Nachricht entschlüsseln kann, damit es die Schlüssel an diese Sitzung senden kann. + Bitte öffne ${app_name} auf einem anderen Gerät, das die Nachricht entschlüsseln kann, damit es die Schlüssel an diese Sitzung senden kann. Hier tippen… Sprachnachricht senden fortfahren mit… @@ -1167,7 +1167,7 @@ Zeige Konto-Ereignisse Enthält Änderungen des Profilbilds und des Anzeigenamens. Anrufe - Nutze den Standard-Klingelton von Element für eingehende Anrufe + Nutze den Standard-Klingelton von ${app_name} für eingehende Anrufe Klingelton für eingehende Anrufe Wähle Klingelton für Anrufe: Akzeptieren @@ -1188,10 +1188,10 @@ Aktiviere Sitzungseinstellungen. Benachrichtigungen sind für diese Sitzung aktiviert. - Benachrichtigungen sind für diese Sitzung nicht aktiviert. -\nBitte überprüfe die Einstellungen für Element. + Benachrichtigungen sind für diese Sitzung nicht aktiviert. +\nBitte überprüfe die Einstellungen für ${app_name}. Aktiviere - Element benutzt Google Play Dienste um Push-Nachrichten zu übermitteln, doch scheinen sie nicht korrekt konfiguriert zu sein: + ${app_name} benutzt Google Play Dienste um Push-Nachrichten zu übermitteln, doch scheinen sie nicht korrekt konfiguriert zu sein: \n%1$s Repariere Play-Dienste Firebase-Token @@ -1212,17 +1212,17 @@ Dienst konnte nicht neugestartet werden Starte beim Hochfahren Dienst wird starten, wenn das Gerät neu gestartet wird. - Dieser Dienst wird nicht starten, wenn das Gerät neu gestartet wird. Du wirst keine Benachrichtigungen bekommen bis Element einmal geöffnet wurde. + Dieser Dienst wird nicht starten, wenn das Gerät neu gestartet wird. Du wirst keine Benachrichtigungen bekommen bis ${app_name} einmal geöffnet wurde. Aktiviere das Starten beim Hochfahren Überprüfe Hintergrund-Einschränkungen - Hintergrund-Einschränkungen sind für Element deaktiviert. Dieser Test sollte über mobile Daten ausgeführt werden (kein WLAN). + Hintergrund-Einschränkungen sind für ${app_name} deaktiviert. Dieser Test sollte über mobile Daten ausgeführt werden (kein WLAN). \n%1$s - Hintergrund-Einschränkungen sind für Element aktiviert. + Hintergrund-Einschränkungen sind für ${app_name} aktiviert. \nDie App wird aggressiv eingeschränkt, während sie im Hintergrund arbeiten möchte. Dies könnte Benachrichtigungen beeinflussen. \n%1$s Einschränkungen deaktivieren Batterieoptimierung - Element wird nicht von Batterieoptimierungen beeinflusst. + ${app_name} wird nicht von Batterieoptimierungen beeinflusst. Fehler bei Benachrichtigungen finden Diagnose von Fehlern Basisdiagnose ist OK. Wenn du immer noch keine Benachrichtigungen bekommst, sende bitte einen Fehlerbericht, um uns beim nachforschen zu helfen. @@ -1232,8 +1232,8 @@ Wenn ein:e Benutzer:in ein abgestecktes Gerät mit ausgeschaltetem Bildschirm eine Weile nicht bewegt, wechselt es in den Bereitschaftsmodus. Dies hindert Apps daran, auf das Netzwerk zuzugreifen und verzögert die Ausführung von Aufgaben, Synchronisierungen und Standard-Alarmen. Ignoriere Optimierungen Hintergrundverbindung - Element muss eine Hintergrundverbindung (nur geringe Belastung) aufrechterhalten, um verlässliche Benachrichtigungen zu erhalten. -\nAuf dem nächsten Bildschirm wirst du gefragt, ob du Element erlauben möchtest im Hintergrund zu laufen. Bitte akzeptieren. + ${app_name} muss eine Hintergrundverbindung (nur geringe Belastung) aufrechterhalten, um verlässliche Benachrichtigungen zu erhalten. +\nAuf dem nächsten Bildschirm wirst du gefragt, ob du ${app_name} erlauben möchtest im Hintergrund zu laufen. Bitte akzeptieren. Berechtigung gewähren Beim Verifizieren deiner E-Mail-Adresse trat ein Fehler auf. Beim Verifizieren deiner Telefonnummer trat ein Fehler auf. @@ -1259,7 +1259,7 @@ Stumm Bitte eine Passphrase eingeben Passphrase ist zu schwach - Bitte lösche die Passphrase, wenn Element einen Wiederherstellungs-Schlüssel erzeugen soll. + Bitte lösche die Passphrase, wenn ${app_name} einen Wiederherstellungs-Schlüssel erzeugen soll. Keine Matrix-Sitzung verfügbar Verliere nie wieder verschlüsselte Nachrichten Setze Passphrase @@ -1282,12 +1282,12 @@ Konnte Sicherung nicht löschen (%s) Lösche Sicherung Präferenz der Benachrichtigungen nach Ereignis - [%1$s] -\nDieser Fehler ist außerhalb von Element passiert. Google sagt, dass dieses Gerät zu viele Apps registriert hat um FCM zu nutzen. Der Fehler taucht nur auf, wenn sehr viele Apps installiert sind. Er sollte also den/die Durchschnittsnutzer:in nicht betreffen. - [%1$s] -\nDieser Fehler liegt nicht unter der Kontrolle von Element. Er kann aus verschiedenen Gründen auftreten. Vielleicht wird es funktionieren, wenn du es später noch einmal probierst. Außerdem kannst Du prüfen, ob die Datennutzung der Google Play-Dienste unbeschränkt ist und die Geräteuhr richtig eingestellt ist. Der Fehler kann aber auch unter Custom-ROMs auftreten. - [%1$s] -\nDieser Fehler ist außerhalb von Element passiert. Es gibt kein Google-Konto auf dem Gerät. Bitte füge ein Google-Konto hinzu. + [%1$s] +\nDieser Fehler ist außerhalb von ${app_name} passiert. Google sagt, dass dieses Gerät zu viele Apps registriert hat um FCM zu nutzen. Der Fehler taucht nur auf, wenn sehr viele Apps installiert sind. Er sollte also den/die Durchschnittsnutzer:in nicht betreffen. + [%1$s] +\nDieser Fehler liegt nicht unter der Kontrolle von ${app_name}. Er kann aus verschiedenen Gründen auftreten. Vielleicht wird es funktionieren, wenn du es später noch einmal probierst. Außerdem kannst Du prüfen, ob die Datennutzung der Google Play-Dienste unbeschränkt ist und die Geräteuhr richtig eingestellt ist. Der Fehler kann aber auch unter Custom-ROMs auftreten. + [%1$s] +\nDieser Fehler ist außerhalb von ${app_name} passiert. Es gibt kein Google-Konto auf dem Gerät. Bitte füge ein Google-Konto hinzu. Verwaltung der Krypto-Schlüssel Schlüssel-Sicherung verwalten Nachrichten in verschlüsselten Räumen sind mit Ende-zu-Ende-Verschlüsselung gesichert. Nur du und der/die Empfänger!nnen haben die Schlüssel um diese Nachrichten zu lesen. @@ -1398,7 +1398,7 @@ Passwörter stimmen nicht überein Ungültige Antwort beim Entdecken des Home-Servers Serveroptionen vervollständigen - Element hat eine benutzerdefinierte Serverkonfiguration für die Domäne deines Benutzernamens gefunden \"%1$s\": + ${app_name} hat eine benutzerdefinierte Serverkonfiguration für die Domäne deines Benutzernamens gefunden \"%1$s\": \n%2$s Nutze Konfiguration Initialisiere Dienst @@ -1493,7 +1493,7 @@ Bitte warten… Alle Communities Für diesen Raum kann keine Vorschau angezeigt werden - Die Vorschau von öffentlichen Räumen wird von Element noch nicht unterstützt + Die Vorschau von öffentlichen Räumen wird von ${app_name} noch nicht unterstützt Räume Direktnachrichten Neuer Raum @@ -1626,13 +1626,13 @@ Wir nutzen %s als Assistenten wenn dein Home-Server keinen anbietet (Deine IP-Adresse wird während des Anrufs geteilt) Führe einen Identitätsserver in deinen Einstellungen hinzu um diese Aktion auszuführen. Passwort bestätigen - Du kannst dies nicht auf einem mobilen Element tun + Du kannst dies nicht auf einem mobilen ${app_name} tun Authentifizierung benötigt Hintergrund-Synchronisierungsmodus - Element wird sich im Hintergrund auf eine Art synchronisieren die Ressourcen des Geräts (Akku) schont. + ${app_name} wird sich im Hintergrund auf eine Art synchronisieren die Ressourcen des Geräts (Akku) schont. \nAbhängig vom Ressourcen-Status deines Geräts kann dein System die Synchronisierung verschieben. - Element wird sich im Hintergrund periodisch zu einem bestimmten Zeitpunkt synchronisieren (konfigurierbar). -\nDies wird Funk- und Akkunutzung beeinflussen. Es wird eine permanente Benachrichtigung geben, die sagt, dass Element auf Ereignisse lauscht. + ${app_name} wird sich im Hintergrund periodisch zu einem bestimmten Zeitpunkt synchronisieren (konfigurierbar). +\nDies wird Funk- und Akkunutzung beeinflussen. Es wird eine permanente Benachrichtigung geben, die sagt, dass ${app_name} auf Ereignisse lauscht. %s \nDie Synchronisierung kann aufgrund deiner Ressourcen (Akku) oder Gerätezustands (schlafend) verschoben werden. Integrationen @@ -1722,7 +1722,7 @@ Dieser Inhalt wurde als unangebracht gemeldet. \n \nWenn du keine weiteren Inhalte dieses/r Nutzers/in sehen möchtest, kannst sie/ihn ignorieren, um jene Nachrichten auszublenden. - Element benötigt Berechtigungen, um deine E2E Schlüssel zu speichern. + ${app_name} benötigt Berechtigungen, um deine E2E Schlüssel zu speichern. \n \nBitte erlaube den Zugriff im nächsten Pop-Up sodass du deine Schlüssel manuell exportieren kannst. Aktuell besteht keine Netzwerkverbindung @@ -1869,7 +1869,7 @@ \nMelde dich erneut an, um auf deine Kontodaten und Nachrichten zuzugreifen. Du verlierst den Zugriff auf verschlüsselte Nachrichten, außer, du meldest dich an, um den Verschlüsselungsschlüssel wiederherzustellen. Daten löschen - Die aktuelle Sitzung gehört dem/der Benutzer!n%1$s. Die angegebenen Anmeldeinformationen sind von Benutzer!n %2$s. Dies wird nicht von Element unterstützt. + Die aktuelle Sitzung gehört dem/der Benutzer!n%1$s. Die angegebenen Anmeldeinformationen sind von Benutzer!n %2$s. Dies wird nicht von ${app_name} unterstützt. \nBitte zuerst die Daten löschen und dann erneut anmelden. matrix.to-Link fehlerhaft Die Beschreibung ist zu kurz @@ -1887,7 +1887,7 @@ Andere Sitzungen Zeigt nur die ersten Ergebnisse, gib mehr Buchstaben ein… Ausfallsicher - Element kann häufiger abstürzen, wenn ein unerwarteter Fehler auftritt + ${app_name} kann häufiger abstürzen, wenn ein unerwarteter Fehler auftritt Stellt einer Klartextnachricht ¯\\_(ツ)_/¯ voran Aktiviere Verschlüsselung Nach der Aktivierung kann die Verschlüsselung nicht deaktiviert werden. @@ -1957,9 +1957,9 @@ Admin in %1$s Moderation in %1$s Springen & als gelesen markieren - Element kann keine Ereignisse vom Typ \'%1$s\' - Element beherrscht keine Nachrichten vom Typ \'%1$s\' - Element ist beim verarbeiten des Ereignisinhalts mit der ID \'%1$s\' auf ein Problem gestoßen + ${app_name} kann keine Ereignisse vom Typ \'%1$s\' + ${app_name} beherrscht keine Nachrichten vom Typ \'%1$s\' + ${app_name} ist beim verarbeiten des Ereignisinhalts mit der ID \'%1$s\' auf ein Problem gestoßen Nicht ignorieren Diese Sitzung kann diese Verifizierung nicht mit deinen anderen Sitzungen teilen. \nDie Überprüfung wird lokal gespeichert und in einer zukünftigen Version der App freigegeben. @@ -2055,7 +2055,7 @@ Schlüssel sind bereits aktuell! Spoiler Benutzerdefiniert (%1$d) in %2$s - Element Android + ${app_name} Android Schlüsselanforderungen Schalte den verschlüsselten Nachrichtenverlauf frei Neu laden @@ -2156,13 +2156,13 @@ Datei wurde der Galerie hinzugefügt Datei konnte nicht zur Galerie hinzugefügt werden Neues Benutzerpasswort festlegen… - Nutze die neueste Version von Element auf deinen anderen Geräten, Element Web, Element Desktop, Element iOS, Element für Android oder einen anderen cross-signing fähigen Matrix client - Element Web -\nElement Desktop - Element iOS -\nElement Android + Nutze die neueste Version von ${app_name} auf deinen anderen Geräten, ${app_name} Web, ${app_name} Desktop, ${app_name} iOS, ${app_name} für Android oder einen anderen cross-signing fähigen Matrix client + ${app_name} Web +\n${app_name} Desktop + ${app_name} iOS +\n${app_name} Android oder einen anderen cross-signing fähigen Matrix Client - Nutze die neueste Version von Element auf deinen anderen Geräten: + Nutze die neueste Version von ${app_name} auf deinen anderen Geräten: Erzwingt das Verwerfen der aktuell ausgehende Gruppensitzung in einem verschlüsseltem Raum Wird nur in verschlüsselten Räumen unterstützt Benutze deine %1$s oder deinen %2$s um fortzufahren. @@ -2203,7 +2203,7 @@ Pause Kopieren Benachrichtigungen - Element-Anruf fehlgeschlagen + ${app_name}-Anruf fehlgeschlagen Abspielen Ablehnen Erfolg @@ -2308,11 +2308,11 @@ Lade verfügbare Sprachen… Öffne AGBs von %s Trenne Verbingung zu Identitätsserver %s\? - Dieser Identitätsserver ist veraltet. Element unterstützt nur API V2. + Dieser Identitätsserver ist veraltet. ${app_name} unterstützt nur API V2. Diese Operation is nicht möglich. Der Homeserver ist veraltet. Bitte konfiguriere zuerst einen Identitätsserver. Bitte akzeptiere zuerst die AGB des Identitätsservers in den Einstellungen. - Deiner Privatssphäre wegen unterstützt Element nur das Senden gehashter Emailaddressen und Telefonnummern. + Deiner Privatssphäre wegen unterstützt ${app_name} nur das Senden gehashter Emailaddressen und Telefonnummern. Die Assoziierung ist fehlgeschlagen. Für diese Kennung gibt es aktuell keine Assoziierung. Dein Homeserver (%1$s) schlägt %2$s als Identitätsserver vor @@ -2454,7 +2454,7 @@ Du hast keine Berechtigung ein Konferenzgespräch zu starten Zeige Details wie Raumnamen und Nachrichteninhalt. Zeige Inhalt in Benachrichtigungen - PIN-Code ist die einzige Möglichkeit Element zu entsperren. + PIN-Code ist die einzige Möglichkeit ${app_name} zu entsperren. Aktiviere Gerät-spezifische Biometrie wie Fingerabdrücke und Gesichtserkennung. Biometrie aktivieren Schutz konfigurieren @@ -2492,8 +2492,8 @@ Bitte klicke auf die Benachrichtigung. Wenn die Benachrichtigung nicht angezeigt wird, überprüfe die Systemeinstellungen. Du siehst die Benachrichtigung! Klick mich! Benachrichtigungsanzeige - Bei jedem Öffnen von Element ist der PIN-Code erforderlich. - PIN-Code ist erforderlich, nachdem Element 2 Minuten lang nicht verwendet wurde. + Bei jedem Öffnen von ${app_name} ist der PIN-Code erforderlich. + PIN-Code ist erforderlich, nachdem ${app_name} 2 Minuten lang nicht verwendet wurde. Fordere PIN nach 2 Minuten an Zeige nur die Anzahl von ungelesenen Nachrichten in einer einfachen Benachrichtigung. Bild hinzufügen von @@ -2554,8 +2554,8 @@ Mein Code Scanne einen QR code Das ist kein korrekter QR-Code von Matrix - 🔐️ Komm mit zu Element - Hey, schreibe mit mir auf Element: %s + 🔐️ Komm mit zu ${app_name} + Hey, schreibe mit mir auf ${app_name}: %s Freunde einladen Leute hinzufügen "Thema " @@ -2639,7 +2639,7 @@ m.room.server_acl-Ereignisse senden Berechtigungen ändern Authentifizierung fehlgeschlagen - Deine Anmeldeinformationen müssen für Element eingegeben werden, um diese Aktion auszuführen. + Deine Anmeldeinformationen müssen für ${app_name} eingegeben werden, um diese Aktion auszuführen. Erneute Authentifizierung erforderlich Cross Signing konnte nicht eingerichtet werden Nicht autorisierte, fehlende gültige Authentifizierungsdaten diff --git a/vector/src/main/res/values-el/strings.xml b/vector/src/main/res/values-el/strings.xml index ad7c99fd44..1ae7629fef 100644 --- a/vector/src/main/res/values-el/strings.xml +++ b/vector/src/main/res/values-el/strings.xml @@ -207,7 +207,7 @@ Όνομα δωματίου Θέμα δωματίου Κλήσεις - Χρήση του προεπιλεγμένου ήχου κλήσης του Element για τις εισερχόμενες κλήσεις + Χρήση του προεπιλεγμένου ήχου κλήσης του ${app_name} για τις εισερχόμενες κλήσεις Ήχος εισερχομένων κλήσεων Επιλέξτε ήχο κλήσης: Κλήση @@ -233,8 +233,8 @@ Ενεργοποίηση Ρυθμίσεις συσκευής. Οι ειδοποιήσεις είναι ενεργοποιημένες για αυτή την συσκευή. - Οι ειδοποιήσεις δεν επιτρέπονται για αυτή την συσκευή. -\nΠαρακαλώ ελέγξτε τις ρυθμίσεις του Element. + Οι ειδοποιήσεις δεν επιτρέπονται για αυτή την συσκευή. +\nΠαρακαλώ ελέγξτε τις ρυθμίσεις του ${app_name}. Ενεργοποίηση Συσκευές Προεπισκόπιση συνδέσμων @@ -514,7 +514,7 @@ Αλλαγή Συσκευής Ήχου Αποτυχία σύνδεσης σε πραγματικό χρόνο. \nΖητήστε από τον διαχειριστή του οικιακού σας διακομιστή να διαμορφώσει έναν διακομιστή TURN ώστε οι κλήσεις να λειτουργούν αξιόπιστα. - Η Κλήση Element Aπέτυχε + Η Κλήση ${app_name} Aπέτυχε Να μην ερωτηθώ ξανά Προσπαθήστε να χρησιμοποιήσετε το %s Παρακαλώ ζητήστε απο τον διαχειριστή του ιδιέταιρου διακομιστή (%1$s) να ρυθμίσει ένα διακομιστή TURN ώστε οι κλήσεις να δουλέυουν αξιόπιστα. @@ -545,7 +545,7 @@ Τέλος κλήσης Τρέχουσα κλήση συνδιάσκεψης. \nΣυνδεθείτε με %1$s ή %2$s - Δεν επιτρέψατε στο Element την πρόσβαση στις επαφές σας + Δεν επιτρέψατε στο ${app_name} την πρόσβαση στις επαφές σας Ειδοποιήσεις Αντιγράφηκε στο πρόχειρο Πρόσθεση diff --git a/vector/src/main/res/values-eo/strings.xml b/vector/src/main/res/values-eo/strings.xml index 32f36d429b..54fa6c4007 100644 --- a/vector/src/main/res/values-eo/strings.xml +++ b/vector/src/main/res/values-eo/strings.xml @@ -338,7 +338,7 @@ Interparoloj Loka adresaro Neniuj interparoloj - Vi ne permesis al Element aliron al viaj lokaj kontaktoj + Vi ne permesis al ${app_name} aliron al viaj lokaj kontaktoj Neniuj rezultoj Neniu identiga servilo estas agordita. Ĉambroj @@ -508,11 +508,11 @@ Fona spegulado Reĝimo de fona spegulado Optimumigita por baterio - Element spegulos fone, per maniero konservanta la limigitajn rimedojn de la aparato (ĉefe la baterion). + ${app_name} spegulos fone, per maniero konservanta la limigitajn rimedojn de la aparato (ĉefe la baterion). \nDepende de la stato de la rimedoj de via aparato, la spegulado povus esti prokrastita de la operaciumo. Optimumigita por tujeco - Element spegulos fone, ripete, je preciza tempo (agordebla). -\nĈi tio influos uzadon de baterio kaj radiilo, kaj aperigos ĉiaman sciigon pri tio, ke Element aŭskultas okazojn. + ${app_name} spegulos fone, ripete, je preciza tempo (agordebla). +\nĈi tio influos uzadon de baterio kaj radiilo, kaj aperigos ĉiaman sciigon pri tio, ke ${app_name} aŭskultas okazojn. Neniu fona spegulado Vi ne sciiĝos pri envenaj mesaĝoj dum la aplikaĵo estas fone. Malsukcesis ĝisdatigi agordojn. @@ -604,7 +604,7 @@ Repeti ĉifrajn ŝlosilojn de aliaj viaj salutaĵoj. Peto de ŝlosilo sendiĝis. Peto sendiĝis - Bonvolu ruli Elementon sur alia aparato kiu scipovas malĉifri la mesaĝon, por ke ĝi povu sendi la ŝlosilojn al ĉi tiu salutaĵo. + Bonvolu ruli ${app_name} sur alia aparato kiu scipovas malĉifri la mesaĝon, por ke ĝi povu sendi la ŝlosilojn al ĉi tiu salutaĵo. Envena voko Envena vidvoko Envena voĉvoko @@ -614,22 +614,22 @@ Foti aŭ filmi Ne povas filmi Informoj - Element bezonas permeson aliri viajn fotojn kaj filmojn, por sendi kaj konservi kunsendaĵojn. + ${app_name} bezonas permeson aliri viajn fotojn kaj filmojn, por sendi kaj konservi kunsendaĵojn. \n \nBonvolu permesi aliron per la sekva ŝprucpeto, por povi sendi dosierojn el via telefono. - Element bezonas permeson aliri vian filmilon por foti kaj vidvoki. + ${app_name} bezonas permeson aliri vian filmilon por foti kaj vidvoki. " \n \nBonvolu permesi aliron per la sekva ŝprucpeto, por ebligi la vokon." - Element bezonas permeson aliri vian mikrofonon por fari voĉvokojn. + ${app_name} bezonas permeson aliri vian mikrofonon por fari voĉvokojn. " \n \nBonvolu permesi aliron per la sekva ŝprucpeto, por ebligi la vokon." - Element bezonas premeson aliri viajn filmilon kaj mikrofonon por fari vidvokojn. + ${app_name} bezonas premeson aliri viajn filmilon kaj mikrofonon por fari vidvokojn. \n \nBonvolu permesi aliron per la sekva ŝprucpeto, por ebligi la vokon. - Element povas kontroli vian adresaron por trovi aliajn uzantojn de Matrix per iliaj retpoŝtadresoj kaj telefonnumeroj. Se vi konsentas kunhavi vian adresaron por tiu celo, bonvolu permesi aliron per la sekva ŝprucpeto. - Element povas kontroli vian adresaron por trovi aliajn uzantojn de Matrix per iliaj retpoŝtadresoj kaj telefonnumeroj. + ${app_name} povas kontroli vian adresaron por trovi aliajn uzantojn de Matrix per iliaj retpoŝtadresoj kaj telefonnumeroj. Se vi konsentas kunhavi vian adresaron por tiu celo, bonvolu permesi aliron per la sekva ŝprucpeto. + ${app_name} povas kontroli vian adresaron por trovi aliajn uzantojn de Matrix per iliaj retpoŝtadresoj kaj telefonnumeroj. \n \nĈu vi konsentas kunhavi vian adresaron por tiu celo\? Pardonu. Ago ne efektiviĝis, pro mankantaj permesoj @@ -741,9 +741,9 @@ Tiu ĉi salutaĵo ne povas konigi ĉi tiun kontrolon al aliaj viaj salutaĵoj. \nLa kontrolo konserviĝos loke kaj estos konigota de venonta versio de la aplikaĵo. Reatenti - Element renkontis problemon bildigante enhavon de evento kun la identigilo «%1$s» - Elemento ne traktas mesaĝojn de speco «%1$s» - Element ne traktas eventojn de speco «%1$s» + ${app_name} renkontis problemon bildigante enhavon de evento kun la identigilo «%1$s» + ${app_name} ne traktas mesaĝojn de speco «%1$s» + ${app_name} ne traktas eventojn de speco «%1$s» Salti al legokonfirmo Propra (%1$d) en %2$s Ordinara en %1$s @@ -827,7 +827,7 @@ Post ŝalto, ne eblas ĉifradon malŝalti. Ŝalti ĉifradon Antaŭmetas ¯\\_(ツ)_/¯ al platteksta mesaĝo - Element povas fiaski pli ofte kiam okazas neatendita eraro + ${app_name} povas fiaski pli ofte kiam okazas neatendita eraro Montras nur la unuajn rezultojn; tajpu pliajn literojn… Aliaj salutaĵoj Nuna salutaĵo @@ -842,7 +842,7 @@ Komenca spegulado… La priskribo estas tro mallonga Via ligilo al matrix.to estis misformita - Ĉi tiu salutaĵo estas por uzanto %1$s kaj vi donas salutilojn por uzanto %2$s. Element ne subtenas tion. + Ĉi tiu salutaĵo estas por uzanto %1$s kaj vi donas salutilojn por uzanto %2$s. ${app_name} ne subtenas tion. \nBonvolu unue vakigi datumojn, kaj poste saluti alian konton. Vakigi datumojn Vi perdos aliron al sekuraj mesaĝoj, se vi ne salutos por rehavi viajn ĉifrajn ŝlosilojn. @@ -980,7 +980,7 @@ Ĉiuj mesaĝoj (laŭte) Malatenti uzanton Estas neniu retkonekto nun - Element bezonas rajton konservi viajn tutvoje ĉifrajn ŝlosilojn surdiske. + ${app_name} bezonas rajton konservi viajn tutvoje ĉifrajn ŝlosilojn surdiske. \n \nBonvolu permesi aliron per la venonta ŝprucpeto, por povi elporti viajn ŝlosilojn permane. Ĉi tiu enhavo estis raportita kiel maltaŭga. @@ -1122,7 +1122,7 @@ Nova ĉambro Rektaj interparoloj Ĉambroj - Antaŭrigardo al ĉambro legebla de ĉiuj ankoraŭ ne estas subtenata de Element + Antaŭrigardo al ĉambro legebla de ĉiuj ankoraŭ ne estas subtenata de ${app_name} Ne eblas antaŭrigardi ĉi tiun ĉambron Ĉiuj komunumoj Bonvolu atendi… @@ -1318,7 +1318,7 @@ \nSekure savkopiu viajn ŝlosilojn por eviti ilian perdon. Neniam perdu ĉifritajn mesaĝojn Neniu salutaĵo de Matrix estas disponebla - Bonvolu forigi la pasfrazon se vi volas, ke Element estigu novan rehavan ŝlosilon. + Bonvolu forigi la pasfrazon se vi volas, ke ${app_name} estigu novan rehavan ŝlosilon. Pasfrazo estas tro malforta Bonvolu enigi pasfrazon Pasfrazo ne akordas @@ -1685,17 +1685,17 @@ Datumkonserva reĝimo aplikas sepecialan filtron al sciigoj pri ĉeesto kaj tajpado. Datumkonserva reĝimo Jes, mi volas helpi! - Bonvolu ŝalti analizon por helpi la ni plibonigi ELementon. - Element kolektas sennomajn analizojn por helpi al ni plibonigi la aplikaĵon. + Bonvolu ŝalti analizon por helpi la ni plibonigi ${app_name}. + ${app_name} kolektas sennomajn analizojn por helpi al ni plibonigi la aplikaĵon. Sendi datumojn de analizo Analizo Doni permeson - Element bezonas malpezan fonan konekton por havi dependeblajn sciigojn. -\nLa sekva ekrano petos ĉiam ruli Elementon fone; bonvolu akcepti. + ${app_name} bezonas malpezan fonan konekton por havi dependeblajn sciigojn. +\nLa sekva ekrano petos ĉiam ruli ${app_name} fone; bonvolu akcepti. Fona konekto Elekti alian elekteblon Doni permeson - Element povas ruliĝi fone por mastrumi viajn sciigojn sekure kaj private. Tio povas influi uzadon de la baterio. + ${app_name} povas ruliĝi fone por mastrumi viajn sciigojn sekure kaj private. Tio povas influi uzadon de la baterio. Privateco de sciigoj Administri viajn agordojn de trovado. Trovado @@ -1758,17 +1758,17 @@ Malplia privateco Normala Malatenti optimumigon - Optimumigo de baterio ne influas sur Element. + Optimumigo de baterio ne influas sur ${app_name}. Optimumigo de baterio Malŝalti limigojn - Fonaj limigoj estas ŝaltitaj por Element. + Fonaj limigoj estas ŝaltitaj por ${app_name}. \nAgado de la aplikaĵo estos akre limigita dum ĝi estas fone, kaj tio povus influi sciigojn. \n%1$s - Fonaj limigoj estas malŝaltitaj por Element. Ĉi tiu testo devus esti rulata kun telefonaj datumoj (ne kun Vifio). + Fonaj limigoj estas malŝaltitaj por ${app_name}. Ĉi tiu testo devus esti rulata kun telefonaj datumoj (ne kun Vifio). \n%1$s Kontroli fonajn limigojn Ŝalti ekadon kune kun aparato - La servo ne ekos kiam la aparato reekos, kaj vi ne ricevos sciigojn ĝis vi mem Elementon malfermos. + La servo ne ekos kiam la aparato reekos, kaj vi ne ricevos sciigojn ĝis vi mem ${app_name} malfermos. La servo ekos kiam la aparato reekos. Eki kune kun aparato Servo malsukcesis reeki @@ -1807,19 +1807,19 @@ Ĵetono de FCM sukcese registriĝis ĉe la hejmservilo. Registrado de ĵetono Aldoni konton - [%1$s] -\nTiu ĉi eraro ne dependas de Element. La telefono ne havas konton de Google. Bonvolu malfermi la administrilon de kontoj kaj aldoni konton de Google. - [%1$s] -\nTiu ĉi eraro ne dependas de Element. Ĝi povas okazi pro kelkaj kialoj. Eble ĝi funkcios se vi reprovos poste. Vi ankaŭ povas kontroli, ĉu la servo de Google Play ne estas datume limigita en la sistemaj agordoj, aŭ ĉu la horloĝo de via aparato ĝuste funkcias, aŭ ĉu ĝi ne okazas sur propra ROM. - [%1$s] -\nTiu ĉi eraro ne dependas de Element, kaj laŭ Google ĝi indikas, ke la aparato havas tro multajn aplikaĵojn registritajn je FCM. La eraro nur okazas kiam multegaj aplikaĵoj estas samtempe instalitaj, kaj ne devus koncerni ordinaran uzanton. + [%1$s] +\nTiu ĉi eraro ne dependas de ${app_name}. La telefono ne havas konton de Google. Bonvolu malfermi la administrilon de kontoj kaj aldoni konton de Google. + [%1$s] +\nTiu ĉi eraro ne dependas de ${app_name}. Ĝi povas okazi pro kelkaj kialoj. Eble ĝi funkcios se vi reprovos poste. Vi ankaŭ povas kontroli, ĉu la servo de Google Play ne estas datume limigita en la sistemaj agordoj, aŭ ĉu la horloĝo de via aparato ĝuste funkcias, aŭ ĉu ĝi ne okazas sur propra ROM. + [%1$s] +\nTiu ĉi eraro ne dependas de ${app_name}, kaj laŭ Google ĝi indikas, ke la aparato havas tro multajn aplikaĵojn registritajn je FCM. La eraro nur okazas kiam multegaj aplikaĵoj estas samtempe instalitaj, kaj ne devus koncerni ordinaran uzanton. Malsukcesis akiri ĵetonon de FCM: \n%1$s Ĵetono de FCM sukcese akiriĝis: \n%1$s Ĵetono de Firebase Ripari servojn de Google Play - Element uzas la servojn de Google Play por liveri pasivajn mesaĝojn, sed ili ne ŝajnas ĝuste agorditaj: + ${app_name} uzas la servojn de Google Play por liveri pasivajn mesaĝojn, sed ili ne ŝajnas ĝuste agorditaj: \n%1$s APK de servoj de Google Play estas ĝisdata kaj disponebla. Kontrolo de servoj de Google Play @@ -1829,8 +1829,8 @@ Rimarku, ke iuj specoj de mesaĝoj estas silentaj (sciigas sensone). Propraj agordoj. Ŝalti - Sciigoj ne estas ŝaltitaj por ĉi tiu salutaĵo. -\nBonvolu kontroli la agordojn de Element. + Sciigoj ne estas ŝaltitaj por ĉi tiu salutaĵo. +\nBonvolu kontroli la agordojn de ${app_name}. Sciigoj estas ŝaltitaj por ĉi tiu salutaĵo. Agordoj de salutaĵo. Ŝalti @@ -1856,7 +1856,7 @@ Neniu retpoŝtadreso aldoniĝis al via konto Retpoŝtadresoj Necesas aŭtentikigo - Vi ne povas fari tion per Element por poŝtelefonoj + Vi ne povas fari tion per ${app_name} por poŝtelefonoj Konfirmu vian pasvorton Montri informojn pri aplikaĵo en sistemaj agordoj. Informoj pri aplikaĵo @@ -1974,7 +1974,7 @@ Elekti sonaparaton Malsukcesis fari realtempan konekton. \nBonvolu peti la administranton de via hejmservilo agordi TURN-servilon, por ke vokoj funkciu dependeble. - Malsukcesis voko de Element + Malsukcesis voko de ${app_name} Nur kontaktoj de Matrix Sciigoj Sukceso @@ -2007,20 +2007,20 @@ Hejmekrano Se uzanto lasas aparaton neŝargata kaj senmova por ioma tempo, kun ekrano malaktiva, la aparato eniras dorman reĝimon. Tio malhelpas aplikaĵojn aliri la reton kaj fortenas iliajn taskojn, speguladon, kaj normalajn avertojn. Aldoni al hejmekrano - Uzi implicitan sonoron de Element por envenaj vokoj + Uzi implicitan sonoron de ${app_name} por envenaj vokoj Baskuli filmilon Forgesita numero\? La ligilo estis misformita Ne povas trovi ĉi tiun ĉambron. Certiĝu, ke ĝi ekzistas. Ne povas malfermi ĉambron, de kiu vi forbariĝis. Konfirmu personan identigan numeron por malŝalti ĝin - Persona identiga numero estas postulata je ĉiu malfermo de Element. - Persona identiga numero estas postulata post 2 minutoj de neuzado de Element. + Persona identiga numero estas postulata je ĉiu malfermo de ${app_name}. + Persona identiga numero estas postulata post 2 minutoj de neuzado de ${app_name}. Postuli personan identigan numeron post 2 minutoj Montri nur la nombron de nelegitaj mesaĝoj en simpla sciigo. Montri detalojn kiel nomojn de ĉambroj kaj enhavon de mesaĝoj. Montri enhavon en sciigoj - La persona identiga numero estas la sola maniero malŝlosi Elementon. + La persona identiga numero estas la sola maniero malŝlosi ${app_name}. Ŝalti vivaĵanalizojn de la aparato, kiel ekzemple rekonadon de fingrospuroj aŭ vizaĝo. Ŝalti vivaĵanalizojn Se vi volas restarigi vian personan identigan numeron, tuŝetu je «Forgesita numero» por adiaŭi kaj restarigi. @@ -2100,11 +2100,11 @@ Uzi %1$s Nun efektivas neniu ligo kun ĉi tiu identigilo. Malsukcesis la ligo. - Pro via privateco, Element nur subtenas sendadon de haketitaj retpoŝtadresoj kaj telefonnumeroj. + Pro via privateco, ${app_name} nur subtenas sendadon de haketitaj retpoŝtadresoj kaj telefonnumeroj. Bonvolu unue akcepti la uzokondiĉojn de la identiga servilo per la agordoj. Bonvolu unue agordi identigan servilon. Ĉi tiu ago ne eblas. La hejmservilo estas eksdata. - Ĉi tiu identiga servilo estas eksdata. Elemento suportas nur version 2 de la API. + Ĉi tiu identiga servilo estas eksdata. ${app_name} suportas nur version 2 de la API. Ĉu malkonektiĝi de la identiga servilo %s\? Malfermi uzokondiĉojn de %s Enlegante disponeblajn lingvojn… @@ -2141,13 +2141,13 @@ Uzi rehavan ŝlosilon Por daŭrigi, necesas via %1$s aŭ via %2$s. Subtenata nur en ĉifritaj ĉambroj - Uzu la plej freŝan version de Element per aliaj viaj aparatoj: + Uzu la plej freŝan version de ${app_name} per aliaj viaj aparatoj: aŭ alian klienton de Matrix kapablan je delegaj subskriboj - Element iOS -\nElement Android - Element Web (por TTT) -\nElement Desktop (por labortablo) - Uzu la plej freŝan Elementon per aliaj viaj aparatoj: Element Web, Element Desktop, Element iOS, Element por Android, aŭ alian klienton de Matrix kapablan je delegaj subskriboj + ${app_name} iOS +\n${app_name} Android + ${app_name} Web (por TTT) +\n${app_name} Desktop (por labortablo) + Uzu la plej freŝan ${app_name} per aliaj viaj aparatoj: ${app_name} Web, ${app_name} Desktop, ${app_name} iOS, ${app_name} por Android, aŭ alian klienton de Matrix kapablan je delegaj subskriboj Agordi novan pasvorton de konto… Ne povis konservi dosieron de vidaŭdaĵo Ne povis aldoni dosieron de vidaŭdaĵo al bildaro @@ -2212,7 +2212,7 @@ Aktualigi Malŝlosi historion de ĉifritaj mesĝoj Ŝlosilpetoj - Element por Android + ${app_name} por Android Ŝlosiloj jam estas ĝisdataj! Evento foriĝis de administranto de la ĉambro, kialo: %1$s Evento foriĝis de uzanto, kialo: %1$s @@ -2375,7 +2375,7 @@ Temo Temo de ĉambro (malnepra) Nomo de ĉambro - Element trovis propran servilan agordaron per la retnomo «%1$s» el via identigilo de uzanto: + ${app_name} trovis propran servilan agordaron per la retnomo «%1$s» el via identigilo de uzanto: \n%2$s Nevalidas hejmservil-serĉanta respondo Elektu la rolojn bezonatajn por ŝanĝi diversajn partojn de la ĉambro diff --git a/vector/src/main/res/values-es-rMX/strings.xml b/vector/src/main/res/values-es-rMX/strings.xml index 8954f517a0..b96e90fbe2 100644 --- a/vector/src/main/res/values-es-rMX/strings.xml +++ b/vector/src/main/res/values-es-rMX/strings.xml @@ -156,7 +156,7 @@ Libreta local de direcciones Solamente contactos Matrix Sin conversaciones - No ha permitido a Element acceder a sus contactos locales + No ha permitido a ${app_name} acceder a sus contactos locales Sin resultados Salas @@ -292,16 +292,16 @@ No pudo grabar video" Información - Element necesita tu permiso para entrar en tu almacenaje de fotos y videos para enviar y guardar archivos.\n\nPor favor permite el acceso en el siguiente mensaje para poder enviar archivos desde su dispostivo. - Element necesita tu permiso para usar tu cámara para tomar fotos y hacer llamadas de video. + ${app_name} necesita tu permiso para entrar en tu almacenaje de fotos y videos para enviar y guardar archivos.\n\nPor favor permite el acceso en el siguiente mensaje para poder enviar archivos desde su dispostivo. + ${app_name} necesita tu permiso para usar tu cámara para tomar fotos y hacer llamadas de video. \n\nPor favor permite el acceso en el siguiente mensaje para poder hacer la llamada. - Element necesita tu permiso para usar tu micrófono para hacer llamadas de voz. + ${app_name} necesita tu permiso para usar tu micrófono para hacer llamadas de voz. \n\nPor favor permite el acceso en el siguiente mensaje para poder hacer la llamada. - Element necesita tu permiso para usar su cámara y micrófono para hacer llamadas de video.\n\nPor favor permite el acceso en el siguiente mensaje para poder hacer la llamada. - Element necesita tu permiso para leer tus contactos y directorio para encontrar a otros usuarios por sus correos electrónicos y números telefónicos.\n\nPor favor permite el acceso en el siguiente mensaje para encontrar usuarios de Element en su directorio. - Element necesita tu permiso para leer los contactos de tu directorio para encontrar otros usuarios de Matrix por sus correos electrónicos y números telefónicos. + ${app_name} necesita tu permiso para usar su cámara y micrófono para hacer llamadas de video.\n\nPor favor permite el acceso en el siguiente mensaje para poder hacer la llamada. + ${app_name} necesita tu permiso para leer tus contactos y directorio para encontrar a otros usuarios por sus correos electrónicos y números telefónicos.\n\nPor favor permite el acceso en el siguiente mensaje para encontrar usuarios de ${app_name} en su directorio. + ${app_name} necesita tu permiso para leer los contactos de tu directorio para encontrar otros usuarios de Matrix por sus correos electrónicos y números telefónicos. -¿Permitir el acceso a Element para leer tus contactos ? +¿Permitir el acceso a ${app_name} para leer tus contactos ? Perdón. Operación no realizada debido a permisos faltantes Guardado @@ -725,7 +725,7 @@ Dispositivos desconocidos: Llamar de todos modos Verificar dispositivo Llamadas - Usar el tono de llamada normal de Element para llamadas entrantes + Usar el tono de llamada normal de ${app_name} para llamadas entrantes Tono para llamadas entrantes Elegir sonido de llamadas: Razón diff --git a/vector/src/main/res/values-es/strings.xml b/vector/src/main/res/values-es/strings.xml index cd43ff9c68..2658fd6b88 100644 --- a/vector/src/main/res/values-es/strings.xml +++ b/vector/src/main/res/values-es/strings.xml @@ -341,7 +341,7 @@ Agenda de contactos local Solo contactos de Matrix No hay conversaciones - No permitiste que Element acceda a tus contactos locales + No permitiste que ${app_name} acceda a tus contactos locales No hay resultados Salas @@ -481,26 +481,26 @@ No se puede grabar vídeo Información - Element necesita permiso para acceder a tu biblioteca de fotos y vídeos para enviar y guardar archivos adjuntos. + ${app_name} necesita permiso para acceder a tu biblioteca de fotos y vídeos para enviar y guardar archivos adjuntos. \n \nPor favor permite el acceso en la próxima ventana emergente para poder enviar archivos desde tu teléfono. - Element necesita permiso para acceder a tu cámara para tomar fotos y realizar llamadas de vídeo. + ${app_name} necesita permiso para acceder a tu cámara para tomar fotos y realizar llamadas de vídeo. " \n \nPor favor permite el acceso en la próxima ventana emergente para poder realizar la llamada." - Element necesita permiso para acceder a tu micrófono para realizar llamadas de voz. + ${app_name} necesita permiso para acceder a tu micrófono para realizar llamadas de voz. " \n \nPor favor permite el acceso en la próxima ventana emergente para poder realizar la llamada." - Element necesita permiso para acceder a tu cámara y micrófono para realizar llamadas de vídeo. + ${app_name} necesita permiso para acceder a tu cámara y micrófono para realizar llamadas de vídeo. \n \nPor favor permite el acceso en las próximas ventanas emergentes para poder realizar la llamada. - Element necesita permiso para acceder a tu agenda de contactos para encontrar otros usuarios de Matrix por sus correos electrónicos y números telefónicos. + ${app_name} necesita permiso para acceder a tu agenda de contactos para encontrar otros usuarios de Matrix por sus correos electrónicos y números telefónicos. -Por favor permite el acceso en la próxima ventana emergente para descubrir usuarios accesibles desde Element en tu agenda de contactos. - Element necesita permiso para acceder a tu agenda de contactos para encontrar otros usuarios de Matrix por sus correos electrónicos y números telefónicos. +Por favor permite el acceso en la próxima ventana emergente para descubrir usuarios accesibles desde ${app_name} en tu agenda de contactos. + ${app_name} necesita permiso para acceder a tu agenda de contactos para encontrar otros usuarios de Matrix por sus correos electrónicos y números telefónicos. \n -\n¿Permitir que Element acceda a tus contactos \? +\n¿Permitir que ${app_name} acceda a tus contactos \? Lo sentimos. Acción no realizada, debido a que faltan permisos Guardado @@ -1052,7 +1052,7 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Falta un parámetro requerido. Solicitud enviada Conversar - Por favor, inicia Element en otro dispositivo que pueda descifrar el mensaje para que pueda enviar las claves a esta sesión. + Por favor, inicia ${app_name} en otro dispositivo que pueda descifrar el mensaje para que pueda enviar las claves a esta sesión. Licencias de terceros Borrar continuar con… @@ -1060,10 +1060,10 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Volver a solicitar las claves de encriptado de tus otras sesiones. Solicitud de clave enviada. Privacidad de Notificaciones - Element puede ejecutarse en segundo plano para gestionar tus notificaciones de forma segura y privada. Esto podría afectar la duración de la batería. + ${app_name} puede ejecutarse en segundo plano para gestionar tus notificaciones de forma segura y privada. Esto podría afectar la duración de la batería. Enviar datos de análisis de estadísticas - Element recopila análisis de estadísticas anónimas para permitirnos mejorar la aplicación. - Por favor, habilita los análisis de estadísticas para ayudarnos a mejorar Element. + ${app_name} recopila análisis de estadísticas anónimas para permitirnos mejorar la aplicación. + Por favor, habilita los análisis de estadísticas para ayudarnos a mejorar ${app_name}. Escribe aquí… Si es posible, por favor escribe la descripción en inglés. Enviar una respuesta cifrada… @@ -1147,7 +1147,7 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Aceptar Por favor revisa y acepta las reglas de este servidor doméstico: Llamadas - Usar el tono de llamada normal de Element para llamadas entrantes + Usar el tono de llamada normal de ${app_name} para llamadas entrantes Tono para llamadas entrantes Elegir sonido de llamadas: Llamada de video en proceso… @@ -1189,8 +1189,8 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Activar Ajustes de sesión. Las notificaciones están activadas para esta sesión. - Las notificaciones no están habilitadas para esta sesión. -\nPor favor comprueba los ajustes Element. + Las notificaciones no están habilitadas para esta sesión. +\nPor favor comprueba los ajustes ${app_name}. Activar Ajustes personalizados. Ten en cuenta que algunos mensajes son silenciosos (producen una notificación sin sonido). @@ -1207,16 +1207,16 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Una o más pruebas han fallado, por favor mándanos un informe de error para que podamos investigar. Copia de seguridad en progreso. Si cierras sesión ahora perderás el acceso a tus mensajes encriptados. La copia de seguridad debería estar activa ahora en todas tus sesiones para evitar la pérdida de acceso a tus mensajes encriptados. - Element usa los servicios de Google Play para entregar mensajes Push pero no parece estar configurado correctamente: + ${app_name} usa los servicios de Google Play para entregar mensajes Push pero no parece estar configurado correctamente: \n%1$s solucionar error con los Servicios de Google Play Token Base Token FCM recuperada correctamente:\n%1$s Error al recuperar token FCM:\n%1$s - [%1$s]\nEste error esta fuera del control de Element y de acuerdo con Google, este error indica que el dispositivo tiene demasiadas apps registradas con FCM. Este error solo ocurre cuando existe un numero demasiado alto de apps por lo que no deberia afectar a un usuario promedio. - [%1$s]\nEste error esta fuera del control de Element. Puede ocurrir por numerosas razones. Probablemente funcione si vuelve a intentarlo mas tarde. También puede comprobar si los Servicios de Google Play están limitados por los ajustes del sistema o si la hora del dispositivo es correcta o si puede pasar en ROM personalizada. - [%1$s] -\nEste error esta fuera del control de Element. No hay cuenta de googled registrada en este dispositivo. Por favor abre el gestor dde cuentas y añade una cuenta de Google. + [%1$s]\nEste error esta fuera del control de ${app_name} y de acuerdo con Google, este error indica que el dispositivo tiene demasiadas apps registradas con FCM. Este error solo ocurre cuando existe un numero demasiado alto de apps por lo que no deberia afectar a un usuario promedio. + [%1$s]\nEste error esta fuera del control de ${app_name}. Puede ocurrir por numerosas razones. Probablemente funcione si vuelve a intentarlo mas tarde. También puede comprobar si los Servicios de Google Play están limitados por los ajustes del sistema o si la hora del dispositivo es correcta o si puede pasar en ROM personalizada. + [%1$s] +\nEste error esta fuera del control de ${app_name}. No hay cuenta de googled registrada en este dispositivo. Por favor abre el gestor dde cuentas y añade una cuenta de Google. Añadir cuenta Token de registro Token FCM registrado correctamente en el Servidor. @@ -1245,17 +1245,17 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Error al reiniciar el servicio Inicio automático El servicio funcionará cuando reinicie el dispositivo. - El servicio no se iniciará al reiniciar el dispositivo, no recibirá notificaciones hasta que Element haya sido abierto al menos 1 vez. + El servicio no se iniciará al reiniciar el dispositivo, no recibirá notificaciones hasta que ${app_name} haya sido abierto al menos 1 vez. Activar Inicio automático Comprobar restricciones en segundo plano - Las restricciones de segundo plano están desactivadas para Element. Este debería funcionar con datos móviles (sin WIFI). + Las restricciones de segundo plano están desactivadas para ${app_name}. Este debería funcionar con datos móviles (sin WIFI). \n%1$s - Las restricciones de segundo plano están activadas para Element. + Las restricciones de segundo plano están activadas para ${app_name}. \nLa app estará completamente restringida mientras esté en segundo plano y esto podría afectar a las notificaciones. \n%1$s Desactivar restricciones Optimización de la bateria - A Element no le afecta la Optimización de la bateria. + A ${app_name} no le afecta la Optimización de la bateria. Si un usuario deja el dispositivo desenchufado e inmóvil durante cierto periodo de tiempo con la pantalla apagada, el dispositivo entrará en modo hibernación. Esto evita que las apps accedan a la red y postpone sus tareas, sincronizaciones y alarmas. ignorar optimización Las apps no necesita conectarse al servidor doméstico en segundo plano, esto debería reducir el uso de la batería @@ -1278,8 +1278,8 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Enviar mensaje con intro La tecla Intro enviará el mensaje en vez de añadir un salto de línea Conexión en segundo plano - Element necesita mantener una leve conexión en segundo plano para poder ofrecer notificaciones de confianza. -\nEn la siguiente pantalla se le pedirá permisos para que Element siempre funcione en segundo plano, por favor acepte. + ${app_name} necesita mantener una leve conexión en segundo plano para poder ofrecer notificaciones de confianza. +\nEn la siguiente pantalla se le pedirá permisos para que ${app_name} siempre funcione en segundo plano, por favor acepte. Conceder permiso El modo de guardado de datos aplica un filtro específico para que las actualizaciones de presencia y las notificaciones de escritura sean eliminadas. Ha ocurrido un error mientras se verificaba tu dirección de correo electrónico. @@ -1328,7 +1328,7 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua No se ha encontrado ningún APK válido de Servicios de Google Play. Las notificaciones podrían no funcionar correctamente. Por favor introduzca una contraseña La contraseña que has introducido es muy débil - Por favor borra la contraseña si quieres que Element genere una clave de recuperación. + Por favor borra la contraseña si quieres que ${app_name} genere una clave de recuperación. No hay ninguna sesión de Matrix disponible Nunca perder los mensajes encriptados Los mensajes en salas encriptadas están asegurados con encriptación Extremo-a-Extremo. Solo los integrantes de la sala y tu podéis leer estos mensajes. @@ -1409,7 +1409,7 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Firma autocompletar opciones del servidor - Element ha detectado una configuración personalizada del servidor para el dominio de su ID de usuario \"%1$s\": + ${app_name} ha detectado una configuración personalizada del servidor para el dominio de su ID de usuario \"%1$s\": \n%2$s Configuración de uso Origen predeterminado de medios @@ -1508,7 +1508,7 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Espere por favor… Todas la comunidades Esta sala no se puede previsualizar - La previsualización de salas públicas no es posible todavía con Element + La previsualización de salas públicas no es posible todavía con ${app_name} Salas Chats Nueva sala @@ -1560,10 +1560,10 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Pon un número de teléfono para que las personas que conoces te puedan encontrar. Se usará %s como asistencia cuando el servidor doméstico no la ofrezca (su dirección IP se compartirá durante una llamada) Modo Sincronización en segundo plano - Element se sincronizará en segundo plano de manera que se preserven los recursos del dispositivo (batería). + ${app_name} se sincronizará en segundo plano de manera que se preserven los recursos del dispositivo (batería). \nDependiendo del estado de los recursos del dispositivo, la sincronización puede ser aplazada por el sistema operativo. - Element se sincronizará en segundo plano periódicamente en un momento preciso (configurable). -\nEsto afectará al uso de la radio y la batería, se mostrará una notificación permanente que indica que Element está escuchando a nuevos acontecimientos. + ${app_name} se sincronizará en segundo plano periódicamente en un momento preciso (configurable). +\nEsto afectará al uso de la radio y la batería, se mostrará una notificación permanente que indica que ${app_name} está escuchando a nuevos acontecimientos. No se le notificará de los mensajes entrantes cuando la aplicación esté en segundo plano. Intervalo de sincronización preferido %s @@ -1725,7 +1725,7 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Este contenido fue reportado como inapropiado. \n \nSi no quieres ver más contenido de este usuario, puedes bloquearlo para ocultar sus mensajes. - Element necesita permiso para guardar tus claves E2E en la memória del dispositivo. + ${app_name} necesita permiso para guardar tus claves E2E en la memória del dispositivo. \n \nPorfavor permite el acceso en el siguiente pop-up para poder exportar tus claves manualmente. No hay conexión de red @@ -1784,7 +1784,7 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Copiar Correcto Notificaciones - Element Fallo la Llamada + ${app_name} Fallo la Llamada Fallo al intentar establecer conexion. \nTURN Server fallo. Por favor, contacte con el administrador de su Servidor y notifique el fallo. Seleccionar Dispositivo de Sonido @@ -1827,7 +1827,7 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Cargando lenguajes disponibles… Leer los terminos de %s Desconectarse del servidor de Identidad %s\? - Servidor de identidad desactualizado. Element solo soporta API V2. + Servidor de identidad desactualizado. ${app_name} solo soporta API V2. Operación no posible. Servidor desactualizado. Por favor, configure primero un Servidor de Identidad. Riot ahora es Element! @@ -1867,7 +1867,7 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Otras Sesiones Mostrando solo el primer resultado, agregue mas letras… Fallar rápido (Test) - Element puede fallar con más frecuencia cuando ocurre un error inesperado + ${app_name} puede fallar con más frecuencia cuando ocurre un error inesperado Antepone ¯\\_(ツ)_/¯ a un mensaje de texto sin formato Habilitar crifrado Una vez habilitada, la encriptación no se puede deshabilitar. @@ -1929,9 +1929,9 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Nivel Personalizado en %1$s Nivel Personalizado (%1$d) en %2$s Saltar para leer el recibo - Element no maneja eventos de tipo \'%1$s\' - Element no maneja el mensaje de tipo \'%1$s\' - Element encontró un problema al representar el contenido del evento con el ID \'%1$s\' + ${app_name} no maneja eventos de tipo \'%1$s\' + ${app_name} no maneja el mensaje de tipo \'%1$s\' + ${app_name} encontró un problema al representar el contenido del evento con el ID \'%1$s\' Dejar de ignorar Salas recientes Otras salas @@ -1973,7 +1973,7 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Eliminar… Razón Razón para redactar - Element Android + ${app_name} Android Refrescar Nuevo inicio de sesión detectado . ¿Fue usted\? Toca para revisar y verificar @@ -2181,7 +2181,7 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua \nVuelva a iniciar sesión para acceder a los datos y mensajes de su cuenta. Perderás el acceso a los mensajes seguros a menos que inicies sesión para recuperar tus claves de encriptación. Borrar datos - La sesión actual es para el usuario %1$s y usted proporciona las credenciales para el usuario %2$s. Esto no está suportado por Element. + La sesión actual es para el usuario %1$s y usted proporciona las credenciales para el usuario %2$s. Esto no está suportado por ${app_name}. \nPrimero borre los datos, luego inicie sesión nuevamente con otra cuenta. Su enlace matrix.to estaba mal formado El modo desarrollador activa funciones ocultas y también puede hacer que la aplicación sea menos estable. ¡Solo para desarrolladores! @@ -2338,13 +2338,13 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Al habilitar esta configuración, se agrega FLAG_SECURE a todas las actividades. Reinicie la aplicación para que el cambio surta efecto. Archivo multimedia agregado a la Galería No se pudo agregar el archivo multimedia a la Galería - Utilice la última versión de Element en sus otros dispositivos, Element Web, Element Desktop, Element iOS, Element para Android u otro cliente Matrix con capacidad de firma cruzada - Elemento Web -\nElemento de escritorio - Elemento iOS -\nElemento Android + Utilice la última versión de ${app_name} en sus otros dispositivos, ${app_name} Web, ${app_name} Desktop, ${app_name} iOS, ${app_name} para Android u otro cliente Matrix con capacidad de firma cruzada + ${app_name} Web +\n${app_name} de escritorio + ${app_name} iOS +\${app_name} Android u otro cliente Matrix con capacidad de firma cruzada - Utilice la última versión de Element en sus otros dispositivos: + Utilice la última versión de ${app_name} en sus otros dispositivos: Obliga a descartar la sesión de grupo saliente actual en una sala cifrada Solo se admite en salas cifradas Use su %1$s o use su %2$s para continuar. @@ -2365,7 +2365,7 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Lo sentimos, esta operación aún no es posible para las cuentas conectadas mediante el inicio de sesión único. No pudimos crear tu DM. Marque los usuarios que desea invitar y vuelva a intentarlo. Primero acepta los términos del servidor de identidad en la configuración. - Para su privacidad, Element solo admite el envío de números de teléfono y correos electrónicos de usuario con hash. + Para su privacidad, ${app_name} solo admite el envío de números de teléfono y correos electrónicos de usuario con hash. La asociación ha fallado. No hay asociación actual con este identificador. Su servidor doméstico (%1$s) propone utilizar %2$s para su servidor de identidad @@ -2468,13 +2468,13 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Hay cambios sin salvar. ¿Descartar los cambios\? La sala todavía no ha sido creada. ¿Cancelar la creación\? El link está malformado - PIN es requerido cada vez que se abre Element. - PIN es necesario después de no usar Element por 2 minutos. + PIN es requerido cada vez que se abre ${app_name}. + PIN es necesario después de no usar ${app_name} por 2 minutos. Requerir PIN después de 2 minutos Sólo mostrar el número de mensajes no leídos en una notificación sencilla. Mostrar detalles, como nombres de salas y contenido de mensajes. Mostrar contenido de notificaciones - Element sólo puede ser desbloqueado vía Código PIN. + ${app_name} sólo puede ser desbloqueado vía Código PIN. Activar biometría de este dispositivo en particular, como huellas dactilares o reconocimiento facial. Activar biometría Configurar protecciones @@ -2519,7 +2519,7 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Permitir acceder a sus contactos. Desautorizado, credenciales de autenticación no autorizadas Limpiar Historial - Element requiere que ingrese sus credenciales para realizar esta acción. + ${app_name} requiere que ingrese sus credenciales para realizar esta acción. Se necesita una nueva autenticación Enlace Matrix ¡Código QR no escaneado! @@ -2543,8 +2543,8 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Mi codigo Compartir mi codigo Escanear QR - 🔐️ Unirme a Element - Hey, contactame por Element:%s + 🔐️ Unirme a ${app_name} + Hey, contactame por ${app_name}:%s Adicionar persona Compartir ese codigo para que puedan contactarloa usted. Crear una converzacion por ID Matrix diff --git a/vector/src/main/res/values-et/strings.xml b/vector/src/main/res/values-et/strings.xml index f3c41ed726..0c3f184a3e 100644 --- a/vector/src/main/res/values-et/strings.xml +++ b/vector/src/main/res/values-et/strings.xml @@ -378,7 +378,7 @@ Kasutajate kataloog Vaid need, kellel on Matrixi konto Vestlusi ei leidu - Sa pole Element\'ile andnud ligipääsu kohalikele kontaktidele + Sa pole ${app_name}\'ile andnud ligipääsu kohalikele kontaktidele Tulemusi ei ole Isikutuvastusserver ei ole seadistatud. Jututoad @@ -513,7 +513,7 @@ Kopeeri Õnnestus Teavitused - Kõne ebaõnnestus + Kõne ebaõnnestus Reaalajas ühenduse loomine ei õnnestunud. \nPalu oma koduserveri %@ haldajat, et ta seadistaks kõnede kindlamaks toimimiseks TURN serveri. Vali heliseade @@ -533,7 +533,7 @@ Küsi oma muudest sessioonidest krüptimisvõtmed uuesti. Võtmete jagamise päring on saadetud. Päring on saadetud - Palun käivita Element mõnes muus seadmes, mis suudab neid sõnumeid dekrüptoda ja seega saata krüptovõtmeid siia sessiooni. + Palun käivita ${app_name} mõnes muus seadmes, mis suudab neid sõnumeid dekrüptoda ja seega saata krüptovõtmeid siia sessiooni. Lugemisteatiste loend Gruppide loend @@ -554,7 +554,7 @@ Jututoa nimi Jututoa teema Kõned - Kasuta saabuvate kõnede jaoks Element\'i vaikimisi helinat + Kasuta saabuvate kõnede jaoks ${app_name}\'i vaikimisi helinat Kasuta kõnehõlbustusserverit Saabuva kõne helin Vali helin kõnede jaoks: @@ -576,18 +576,18 @@ Tee foto või video Video salvestamine ei õnnestu Lisateave õiguste kohta - Element vajab õigusi sinu foto- ja videokataloogide lugemiseks ning manuste salvestamiseks. + ${app_name} vajab õigusi sinu foto- ja videokataloogide lugemiseks ning manuste salvestamiseks. \n \nSelleks, et saaksid oma nutiseadmest faile saata palun anna järgmisel lehel vajalikud õigused. - Fotode ja videote salvestamiseks ning videokõnede tegemiseks vajab Element õigusi kasutada sinu kaamerat. + Fotode ja videote salvestamiseks ning videokõnede tegemiseks vajab ${app_name} õigusi kasutada sinu kaamerat. " \n \nKõnede tegemiseks palun anna järgmisel lehel vajalikud õigused." - Kõnede tegemiseks vajab Element õigusi kasutada sinu mikrofoni. + Kõnede tegemiseks vajab ${app_name} õigusi kasutada sinu mikrofoni. " \n \nKõnede tegemiseks palun anna järgmisel lehel vajalikud õigused." - Element vajab videokõnedeks õigusi sinu kaamera ja mikrofoni kasutamiseks. + ${app_name} vajab videokõnedeks õigusi sinu kaamera ja mikrofoni kasutamiseks. \n \nKõnede tegemiseks palun anna järgmisel lehel vajalikud õigused. Vabandust. Kuna vastavaid õigusi ei olnud, siis toimingut ei saanud teha @@ -803,7 +803,7 @@ Palun oota… Kõik kogukonnad Sellel jututoal puudub eelvaade - Element ei toeta veel kõigile nähtavate jututubade eelvaadet + ${app_name} ei toeta veel kõigile nähtavate jututubade eelvaadet Jututoad Isiklikud sõnumid Uus jututuba @@ -849,7 +849,7 @@ Logi sellest sessioonist välja Teave krüptograafia kohta puudub Kuna sina oled selle sessiooni verifitseerinud, siis see sessioon on krüptitud sõnumite saatmiseks usaldusväärne: - See isikutuvastusserver kasutab vana API\'t. Element toetab aga vaid API versiooni 2. + See isikutuvastusserver kasutab vana API\'t. ${app_name} toetab aga vaid API versiooni 2. See tegevus ei ole võimalik. Koduserveri versioon on liiga vana. %d jututuba @@ -886,7 +886,7 @@ Rakenduse teave Näita rakenduse teavet süsteemi seadistustes. Kinnitage oma salasõna - Seda tegevust ei saa teha Element\'i nutirakendusest + Seda tegevust ei saa teha ${app_name}\'i nutirakendusest Autentimine on nõutav Teavituste lisaseadistused Teavituse olulisus sündmuse alusel @@ -899,8 +899,8 @@ Võta kasutusele Sessiooni seadistused. Selles sessioonis on teavitused kasutusel. - Selles sessioonis ei ole teavitusi kasutusel. -\nSeda saad muuta Element\'i seadistuses. + Selles sessioonis ei ole teavitusi kasutusel. +\nSeda saad muuta ${app_name}\'i seadistuses. Võta kasutusele Kohandatud seadistused. Näita ajatempleid 12-tunnises vormingus @@ -1227,7 +1227,7 @@ Palun kontrolli seadistusi Goolge Play teenuste kontrollimine Google Play Services APK on kättesaadav ja uuendatud. - Element kasutab Google Play teenuseid tõuketeavituste edastamiseks, kui see ei tundu olema korrektselt seadistatud: + ${app_name} kasutab Google Play teenuseid tõuketeavituste edastamiseks, kui see ei tundu olema korrektselt seadistatud: \n%1$s Paranda Google Play teenused Firebase tunnusluba @@ -1235,12 +1235,12 @@ \n%1$s FCM tunnusloa laadimine ei õnnestunud: \n%1$s - [%1$s] -\nSee viga on väljaspool Element\'i kontrolli ning vastavalt Google infole liiga palju rakendusi kasutavad FCM\'i. Selline olukord peaks tekkima vaid siis kui kasutusel on hiidpalju selliseid rakendusi ning ei peaks mõjutama tavakasutajaid. - [%1$s] -\nSee viga on väljaspool Element\'i kontrolli ning võib juhtuda eri põhjustel. Võib-olla hilisemal proovimisel seda viga enam ei teki, kuid igaks juhuks vaata, et Google Play teenustele ei oleks süsteemi seadetes määratud andmesidepiirangut ning seadme kell on õige. Samuti võib see viga tekkida, kui sa pruugid kohandatud Androidi varianti (custom ROM). - [%1$s] -\nSee viga on väljaspool Element\'i kontrolli. Telefoni ei ole seadistatud Google\'i kontot. Palun ava seadistustes kontohaldur ning lisa üks Google\'i konto. + [%1$s] +\nSee viga on väljaspool ${app_name}\'i kontrolli ning vastavalt Google infole liiga palju rakendusi kasutavad FCM\'i. Selline olukord peaks tekkima vaid siis kui kasutusel on hiidpalju selliseid rakendusi ning ei peaks mõjutama tavakasutajaid. + [%1$s] +\nSee viga on väljaspool ${app_name}\'i kontrolli ning võib juhtuda eri põhjustel. Võib-olla hilisemal proovimisel seda viga enam ei teki, kuid igaks juhuks vaata, et Google Play teenustele ei oleks süsteemi seadetes määratud andmesidepiirangut ning seadme kell on õige. Samuti võib see viga tekkida, kui sa pruugid kohandatud Androidi varianti (custom ROM). + [%1$s] +\nSee viga on väljaspool ${app_name}\'i kontrolli. Telefoni ei ole seadistatud Google\'i kontot. Palun ava seadistustes kontohaldur ning lisa üks Google\'i konto. Lisa Google\'i konto Tunnusloa registreerimine FCM tunnusloa registreerimine koduserveris õnnestus. @@ -1256,7 +1256,7 @@ Teenuse uuesti käivitamine ei õnnestunud Käivita teenus seadme käivitamisel Teenus käivitatakse nutiseadme käivitamisel. - Seda teenust ei käivitatata nutiseadme käivitamisel. Sa ei saa teavitusi enne, kui Element on vähemalt korra avatud. + Seda teenust ei käivitatata nutiseadme käivitamisel. Sa ei saa teavitusi enne, kui ${app_name} on vähemalt korra avatud. Käivita teenus nutiseadme käivitamisel Kontrolli taustapiiranguid @@ -1304,21 +1304,21 @@ Käivita kohandatud vaate asemel süsteemne kaamera vaade. Kasuta reavahetuse klahvi sõnumi saatmiseks Saada häälsõnumeid - Element saab kontrollida teie aadressiraamatut, et leida teisi Matrixi kasutajaid nende e-posti aadressi ja telefoninumbrite põhjal. Kui sa nõustud oma aadressiraamatut sel eesmärgil jagama, luba juurdepääs järgmisel hüpikaknal. - Element saab kontrollida teie aadressiraamatut, et leida teisi Matrixi kasutajaid nende e-posti aadresside ja telefoninumbrite põhjal. + ${app_name} saab kontrollida teie aadressiraamatut, et leida teisi Matrixi kasutajaid nende e-posti aadressi ja telefoninumbrite põhjal. Kui sa nõustud oma aadressiraamatut sel eesmärgil jagama, luba juurdepääs järgmisel hüpikaknal. + ${app_name} saab kontrollida teie aadressiraamatut, et leida teisi Matrixi kasutajaid nende e-posti aadresside ja telefoninumbrite põhjal. \n \nKas sa oled nõus oma aadressiraamatut sel eesmärgil jagama\? Kas sa soovid peita selle kasutaja kõik sõnumid\? \n \nPane tähele, et antud toiming taaskäivitab rakenduse ja see võib võtta veidi aega. - Taustapiirangud on Elemendi jaoks keelatud. Seda testi tuleks läbi viia mobiilse andmeside abil (WIFI puudub). + Taustapiirangud on Elemendi jaoks keelatud. Seda testi tuleks läbi viia mobiilse andmeside abil (WIFI puudub). \n%1$s - Elemendi jaoks on taustpiirangud lubatud. + Elemendi jaoks on taustpiirangud lubatud. \nTöö, mida rakendus proovib teha, on agressiivselt piiratud, kui see on taustal ja see võib mõjutada teavituste kättesaamist. \n%1$s Keela piirangud Aku optimeerimine - Aku optimeerimine ei mõjuta Elementi. + Aku optimeerimine ei mõjuta ${app_name}. Kui kasutaja jätab seadme mõneks ajaks vooluvõrgust välja ja ühele kohale paigale ning ekraan on välja lülitatud, lülitub seade Doze režiimi. See takistab rakendustel juurdepääsu võrgule ja lükkab edasi nende töö, sünkroonimise ja tavalised teated. Eira optimeerimist Tavaline @@ -1348,11 +1348,11 @@ Andmete sünkroniseerimine taustal Andmete taustal sünkroniseerimise režiim Optimeeritud akukestust silmas pidades - Element sünkroniseerib taustal nii, et see arvestab seadme piiratud ressursse (aku). + ${app_name} sünkroniseerib taustal nii, et see arvestab seadme piiratud ressursse (aku). \nSõltuvalt seadme olekust võib operatsioonisüsteem sünkroniseerimist edasi lükata. Optimeeritud reaalajas - Element sünkroniseerib sõnumeid taustal etteantud aja järel (aeg on seadistatav). -\nSee mõjutab seadme saatjat/vastuvõtjat ja akukasutust ning kuvatakse püsiteade, et Element kuulab sündmusi. + ${app_name} sünkroniseerib sõnumeid taustal etteantud aja järel (aeg on seadistatav). +\nSee mõjutab seadme saatjat/vastuvõtjat ja akukasutust ning kuvatakse püsiteade, et ${app_name} kuulab sündmusi. Taustasünkroonimine puudub Kui rakendus töötab taustal, siis sa ei saa saabunud sõnumite kohta teavitusi. Seadistuste uuendamine ei õnnestunud. @@ -1419,17 +1419,17 @@ Leia kasutajaid Halda kasutajate otsingu seadistusi. Teavituste privaatsus - Element võib taustal töötamise ajal hallata sinu teavitusi turvaliselt ja privaatselt. Aga see võib mõjutada akukasutust. + ${app_name} võib taustal töötamise ajal hallata sinu teavitusi turvaliselt ja privaatselt. Aga see võib mõjutada akukasutust. Anna õigused Tee muu valik Taustaühendus - Selleks et teavitused toimiksid korralikult peab Element kasutama vähese kõrvalmõjuga taustaühendust. -\nKui järgmisel lehel sinult küsitakse kas lubada, et Element töötab kogu aeg taustal, siis palun nõustu. + Selleks et teavitused toimiksid korralikult peab ${app_name} kasutama vähese kõrvalmõjuga taustaühendust. +\nKui järgmisel lehel sinult küsitakse kas lubada, et ${app_name} töötab kogu aeg taustal, siis palun nõustu. Anna õigused Analüütika Saada arendajatele analüütikat - Võimaldamaks meil rakendust parandada kogub Element anonüümset teavet rakenduse kasutuse kohta. - Selleks, et saaksime Element\'i paremaks teha, palun luba analüütika. + Võimaldamaks meil rakendust parandada kogub ${app_name} anonüümset teavet rakenduse kasutuse kohta. + Selleks, et saaksime ${app_name}\'i paremaks teha, palun luba analüütika. Jah, ma soovin aidata! Võrguliikluse mahu säästmise režiim Võrguliikluse andmemahu säästmiseks kasutatakse filtrit, mille puhul kasutajate olekuid ei uuendata ja sõnumite kirjutamise teavitusi ei laeta. @@ -1643,7 +1643,7 @@ Paroolifraasid ei klappi mitte Palun sisesta paroolifraas Paroolifraas on liiga nõrk - Kui sa soovid, et Element looks taastevõtme, siis palun kustuta paroolifraas. + Kui sa soovid, et ${app_name} looks taastevõtme, siis palun kustuta paroolifraas. Matrix\'i sessioone ei leidu Ära kunagi kaota krüptitud sõnumeid Sõnumid krüptitud jututubades kasutavad läbivat krüptimist. Ainult sinul ja saaja(te)l on võtmed selliste sõnumite lugemiseks. @@ -1728,7 +1728,7 @@ Allkiri Vigane vastus koduserveri tuvastamise päringule Serveriseadistuste automaatne sõnalõpetus - Element tuvastas kohandatud serveriseadistused sinu kasutajanime domeenis „%1$s“: + ${app_name} tuvastas kohandatud serveriseadistused sinu kasutajanime domeenis „%1$s“: \n%2$s Kasuta seadistusi Oled kehtetu või aegunud kasutajanime või salasõna tõttu välja logitud. @@ -1900,7 +1900,7 @@ Muud sessioonid Kuvan vaid esimesi tulemusi, kirjuta natuke pikemalt… Kiire lõppmäng - Teadmata vigade puhul võib Element sagedamini kokku joosta + Teadmata vigade puhul võib ${app_name} sagedamini kokku joosta Lisa ¯\\_(ツ)_/¯ smaili vormindamata teksti algusesse Võta jututoas krüptimine kasutusele Kui krüptimine on juba kasutusele võetud, siis ei saa seda enam eemaldada. @@ -1976,7 +1976,7 @@ Kas katkestame ühenduse isikutuvastusserveriga %s\? Palun esmalt seadista isikutuvastusserver. Palun esmalt nõustu seadistustes isikutuvastusserveri kasutustingimustega. - Sinu privaatsuse nimel saadab Element e-posti aadressid ja telefoninumbrid serverisse vaid räsituna. + Sinu privaatsuse nimel saadab ${app_name} e-posti aadressid ja telefoninumbrid serverisse vaid räsituna. Seoste loomine ei õnnestunud. Selle tunnusega ei ole hetkel ühtegi seost. Sinu koduserver (%1$s) soovitab kasutada sinu isikutuvastusserverina %2$s teenust @@ -2146,7 +2146,7 @@ Haldaja sai nüüd teate, et see sisu ei ole sobilik. \n \nKui sa ei soovi enam näha selle kasutaja sisu, siis sa võid tema sõnumite peitmiseks kasutajat eirata. - Läbiva krüptograafia jaoks vajalike võtmete salvestamiseks kohalikule andmekandjale vaajab Element sinu luba. + Läbiva krüptograafia jaoks vajalike võtmete salvestamiseks kohalikule andmekandjale vaajab ${app_name} sinu luba. \n \nSelleks et saaksid võtmed käsitsi eksportida, siis palun anna selleks järgmises vaates luba. Hetkel puudub võrguühendus @@ -2183,7 +2183,7 @@ \n• Sinu koduserveri haldaja on turvakaalutlustel keelanud sinu ligipääsu. Logi uuesti sisse Sa oled loginud välja - Praegune sessioon kuulub kasutajale %1$s, kuid sina üritad siseneda kasutaajaga %2$s. Sellist võimalust Element hetkel ei toeta. + Praegune sessioon kuulub kasutajale %1$s, kuid sina üritad siseneda kasutaajaga %2$s. Sellist võimalust ${app_name} hetkel ei toeta. \nPalun eemalda kõik andmed ning siis logi sisse muu kontoga. Mõni järgnevatest võib olla sattunud valedesse kätesse: \n @@ -2222,9 +2222,9 @@ Vaikimisi õigused jututoas %1$s Kohandatud õigused (%1$d) jututoas %2$s Hüppa lugemisteatise juurde - Element ei oska käsitleda %1$s-tüüpi sündmusi - Element ei oska käsitleda %1$s-tüüpi sünumeid - Tekkis viga, kui Element üritas töödelda sõnumi %1$s sisu + ${app_name} ei oska käsitleda %1$s-tüüpi sündmusi + ${app_name} ei oska käsitleda %1$s-tüüpi sünumeid + Tekkis viga, kui ${app_name} üritas töödelda sõnumi %1$s sisu Võta vastu Keeldu Lõpeta kõne @@ -2273,7 +2273,7 @@ Kasutaja kustutas sündmuse, põhjusena %1$s Jututoa haldur on sündmust modereerinud, põhjusena %1$s Krüptovõtmed on juba uuendatud! - Element Android + ${app_name} Android Päringud võtmete laadimiseks Võta krüptitud sõnumite ajalugu lukust lahti Värskenda @@ -2331,13 +2331,13 @@ Meediafaili galeriisse lisamine ei õnnestunud Meediafaili salvestamine ei õnnestunud Määra kontole uus salasõna… - Kasuta kõige uuemat Element\'i versioon mõnes muus seadmes, nagu näiteks Element Web, Element Desktop, Element iOS, Element Android. Samuti sobib mõni muu Matrix\'i klient, mis oskab risttunnustamist - Element Web -\nElement Desktop - Element iOS -\nElement Android + Kasuta kõige uuemat ${app_name}\'i versioon mõnes muus seadmes, nagu näiteks ${app_name} Web, ${app_name} Desktop, ${app_name} iOS, ${app_name} Android. Samuti sobib mõni muu Matrix\'i klient, mis oskab risttunnustamist + ${app_name} Web +\n${app_name} Desktop + ${app_name} iOS +\n${app_name} Android või mõnda teist Matrix\'i klienti, mis oskab risttunnustamist - Kasuta oma muus seadmes kõige uuemat Element\'i versiooni: + Kasuta oma muus seadmes kõige uuemat ${app_name}\'i versiooni: Sunnib loobuma praeguse krüptitud jututoa rühmavestluse seansist Funktsionaalsus on toetatud ainult krüptitud jututubades Jätkamiseks kasuta kas oma %1$s või %2$s. @@ -2380,13 +2380,13 @@ Kas kustutame %1$s tüüpi kasutajakonto andmed\? \n \nKuna nii mõndagi ootamatut võib juhtuda, siis kasuta seda võimalust mõningase ettevaatusega. - PIN-kood on nõutav alati, kui sa Element\'i avad. - PIN-kood on nõutav, kui sa kahe minuti jooksul pole Element\'i kasutanud. + PIN-kood on nõutav alati, kui sa ${app_name}\'i avad. + PIN-kood on nõutav, kui sa kahe minuti jooksul pole ${app_name}\'i kasutanud. Kahe minuti möödumisel küsi uuesti PIN-koodi Näita vaid napi teavitusena lugemata sõnumite arvu. Näita täpsemat teavet nagu jututoa nimi ja sõnumi sisu. Näita teavitustes sisu - PIN-kood on ainus võimalus, kuidas sa saad Element\'i lukust lahti. + PIN-kood on ainus võimalus, kuidas sa saad ${app_name}\'i lukust lahti. Kasuta selles seadmes leiduvaid biomeetrilise tuvastuse võimalusi nagu sõrmejälgede lugejat või näotuvastust. Kasuta biomeetrilist tuvastust Seadista @@ -2451,8 +2451,8 @@ Kas selleks, et leida tuttavaid, oled sa nõus saatma oma kontaktteavet (telefoninumbreid ja/või e-posti aadresse) siin rakenduses seadistatud isikutuvastusserverile (%1$s)\? \n \nParema turvalisuse nimel me ei saada teavet mitte loetava tekstina, vaid räsina. - 🔐️ Liitu minuga vestlusrakenduses Element - Hei, palun suhtle minuga vestlusrakenduses Element: %s + 🔐️ Liitu minuga vestlusrakenduses ${app_name} + Hei, palun suhtle minuga vestlusrakenduses ${app_name}: %s Kutsu sõpru Lisa inimesi "Teema: " @@ -2576,7 +2576,7 @@ See ei ole avalik jututuba. Ilma kutseta sa ei saa uuesti liituda. Süsteemi vaikeseadistused Autentimine ei õnnestunud - Selle tegevuse jaoks palub Element sul sisestada oma kasutajanime ja salasõna. + Selle tegevuse jaoks palub ${app_name} sul sisestada oma kasutajanime ja salasõna. Palun korda autentimist Risttunnustamise alustamine ei õnnestunud Volitused puuduvad, kasutajakonto ja/või salasõna on valed diff --git a/vector/src/main/res/values-eu/strings.xml b/vector/src/main/res/values-eu/strings.xml index e9cf1bcefa..434556241b 100644 --- a/vector/src/main/res/values-eu/strings.xml +++ b/vector/src/main/res/values-eu/strings.xml @@ -205,7 +205,7 @@ Gailuko helbide liburua Matrixeko kontaktuak besterik ez Elkarrizketarik ez - Ez diozu baimena eman Element aplikazioari zure gailuko kontaktuak atzitzeko + Ez diozu baimena eman Element aplikazioari zure gailuko kontaktuak atzitzeko Emaitzarik ez Gelak @@ -349,15 +349,15 @@ E-mail helbide bat gehitu dezakezu zure profilaren ezarpenetan. Ezin izan da bideoa grabatu Informazioa - Elementek zure kamera atzitzeko baimena behar du argazkiak eta bideoak atera ahal izateko. + Elementek zure kamera atzitzeko baimena behar du argazkiak eta bideoak atera ahal izateko. Baimendu sarbidea hurrengo laster-leihoan deia egin ahal izateko. - Elementek zure mikrofonoa atzitzeko baimena behar du ahots deiak egin ahal izateko. + Elementek zure mikrofonoa atzitzeko baimena behar du ahots deiak egin ahal izateko. Baimendu sarbidea hurrengo laster-leihoan deia egin ahal izateko. - Elementek zure kamera eta mikrofonoa atzitzeko baimenak behar ditu bideo deiak egin ahal izateko. + Elementek zure kamera eta mikrofonoa atzitzeko baimenak behar ditu bideo deiak egin ahal izateko. Baimendu sarbidea hurrengo laster-leihoan deia egin ahal izateko. Ez da ekintza burutu baimenak falta direlako @@ -377,11 +377,11 @@ Baimendu sarbidea hurrengo laster-leihoan deia egin ahal izateko. %s erabiltzaileak gela honetara elkartzera gonbidatu zaitu - Elementek zure argazki eta bideoen liburutegia atzitzeko baimena behar du eranskinak gorde ahal izateko. + ${app_name}ek zure argazki eta bideoen liburutegia atzitzeko baimena behar du eranskinak gorde ahal izateko. Baimendu sarbidea hurrengo laster-leihoan zure telefonotik fitxategiak bidali ahal izateko. - Element-ek zure helbide-liburua egiaztatu dezake Matrix erabiltzaileak bere e-mail helbide edo telefono zenbakiaren bidez aurkitzeko. Honetarako zure helbide-liburua partekatzea onartzen baduzu, sakatu onartu hurrengo laster-leihoan. - Element-ek zure helbide-liburua egiaztatu dezake Matrix erabiltzaileak bere e-mail helbide edo telefono zenbakiaren bidez aurkitzeko. + ${app_name}-ek zure helbide-liburua egiaztatu dezake Matrix erabiltzaileak bere e-mail helbide edo telefono zenbakiaren bidez aurkitzeko. Honetarako zure helbide-liburua partekatzea onartzen baduzu, sakatu onartu hurrengo laster-leihoan. + ${app_name}-ek zure helbide-liburua egiaztatu dezake Matrix erabiltzaileak bere e-mail helbide edo telefono zenbakiaren bidez aurkitzeko. \n \nHonetarako zure helbide-liburua partekatzea onartzen duzu\? @@ -962,7 +962,7 @@ Abisua: Fitxategi hau ezabatu daiteke aplikazioa desinstalatzen bada. • Jakinarazpenek ez dute mezuaren edukia erakutsiko Jakinarazpenen pribatutasuna - Element bigarren planoan aritu daiteke zure jakinarazpenak modu seguru eta pribatuan kudeatzeko. Honek baterian eragina izan lezake. + ${app_name} bigarren planoan aritu daiteke zure jakinarazpenak modu seguru eta pribatuan kudeatzeko. Honek baterian eragina izan lezake. Eman baimena Aukeratu beste zerbait @@ -977,8 +977,8 @@ Baten bat gehitu orain? Desaktibatu nire kontua Bidali analitiketarako datuak - Elementek analitika anonimoak biltzen ditu aplikazioa hobetzeko. - Gaitu analitikak Element hobetzera laguntzeko. + ${app_name}ek analitika anonimoak biltzen ditu aplikazioa hobetzeko. + Gaitu analitikak ${app_name} hobetzera laguntzeko. Bai, lagundu nahi dut! Behar den parametro bat falta da. @@ -1006,7 +1006,7 @@ Matrix-eko mezuen ikusgaitasuna e-mail sistemaren antekoa da. Guk zure mezuak ah Gako eskaria bidalita. Eskaria bidalita - Abiatu Element beste mezua deszifratu dezakeen gailu batean, saio honetara gakoak bidali ditzan. + Abiatu ${app_name} beste mezua deszifratu dezakeen gailu batean, saio honetara gakoak bidali ditzan. Idatzi hemen… @@ -1127,7 +1127,7 @@ Matrix-eko mezuen ikusgaitasuna e-mail sistemaren antekoa da. Guk zure mezuak ah Deitu hala ere Deiak - Erabili Elementen lehenetsitako dei-doinua jasotako deientzat + Erabili ${app_name}en lehenetsitako dei-doinua jasotako deientzat Jasotako deien doinua Hautatu deientzako doinua: @@ -1179,12 +1179,12 @@ Egiaztatu zure kontuaren ezarpenak. SAioaren ezarpenak. Jakinarazpenak aktibatuta daude saio honentzat. - Jakinarazpenak ez daude aktibatuta saio honentzat. Egiaztatu Element ezarpenak. + Jakinarazpenak ez daude aktibatuta saio honentzat. Egiaztatu ${app_name} ezarpenak. Aktibatu Play Services egiaztaketa Google Play Services APK eskuragarri eta egunean dago. - Element-ek Google Play Services erabiltzen du baina antza ez dago ondo konfiguratuta: + ${app_name}-ek Google Play Services erabiltzen du baina antza ez dago ondo konfiguratuta: %1$s Konpondu Play Services @@ -1211,19 +1211,19 @@ Berrabiarazi aplikazioa. Hasi abioan Zerbitzua gailua berrabiaraztean hasiko da. - Zerbitzua ez da hasiko gailua berrabiaraztean, ez duzu jakinarazpenik jasoko Element behin ireki arte. + Zerbitzua ez da hasiko gailua berrabiaraztean, ez duzu jakinarazpenik jasoko ${app_name} behin ireki arte. Gaitu abioan hastea Egiaztatu bigarren planoko murrizketak - Bigarren planoko murrizketak desaktibatuta daude Element-entzat. Proba hau datu mugikorrekin egin behar da (Ez WiFi). + Bigarren planoko murrizketak desaktibatuta daude ${app_name}-entzat. Proba hau datu mugikorrekin egin behar da (Ez WiFi). %1$s - Bigarren planoko murrizketak aktibatuta daude Element-entzat. + Bigarren planoko murrizketak aktibatuta daude ${app_name}-entzat. Aplikazioa egiten saiatzen ari dena agresiboki murriztuko zaio bigarren planoan dagoenean, eta honek jakinarazpenetan eragina izan dezake. %1$s Desaktibatu murrizketak Bateria optimizazioa - Bateria optimizazioak ez du eraginik Element-engan. + Bateria optimizazioak ez du eraginik ${app_name}-engan. Ezikusi optimizazioa Bigaren planoko konexioa @@ -1237,8 +1237,8 @@ Aplikazioa egiten saiatzen ari dena agresiboki murriztuko zaio bigarren planoan Ez da baliozko Google Play Services APK-rik aurkitu. Jakinarazpenak agian ez dira ongi ibiliko. Erabiltzaile batek gailu bat deskonektatuta eta erabili gabe uzten badu denbora batez, pantaila itzalita duela, gailua kuluxka moduan sartzen da. Honek aplikazioak sarera konektatzea eragozten du eta beraien lanak atzeratzen ditu, baita ohiko alarmak. - Element-ek bigarren planoko konexio arin bat behar du jakinarazpen fidagarriak izateko. -Hurrengo pantailan Element-i bigarren planoan aritzeko baimena eskatuko zaizu, onartu ezazu mesedez. + ${app_name}-ek bigarren planoko konexio arin bat behar du jakinarazpen fidagarriak izateko. +Hurrengo pantailan ${app_name}-i bigarren planoan aritzeko baimena eskatuko zaizu, onartu ezazu mesedez. Bide-deia abioan… @@ -1270,7 +1270,7 @@ Hurrengo pantailan Element-i bigarren planoan aritzeko baimena eskatuko zaizu, o Idatzi pasaesaldia Pasaesaldia ahulegia da - Ezabatu pasaesaldia Element aplikazioak berreskuratze gako bat sortu dezan nahi baduzu. + Ezabatu pasaesaldia ${app_name} aplikazioak berreskuratze gako bat sortu dezan nahi baduzu. Ez dago Matrix saiorik eskuragarri Ez galdu inoiz zifratutako mezuak @@ -1310,12 +1310,12 @@ Hurrengo pantailan Element-i bigarren planoan aritzeko baimena eskatuko zaizu, o Kontuan izan mezu mota batzuk isilak izateko ezarri direla (soinurik gabeko jakinarazpena sortuko dute). Jakinarazpen batzuk desgaituta daude zure ezarpen pertsonaletan. Hutsegitea arau pertsonalak kargatzean, saiatu berriro. - [%1$s] -Errore hau Element-en kontroletik kanpo dago eta Google-en arabera, errore honek esan nahi du gailuko aplikazio gehiegik erabiltzen dutela FCM. Errore hau ezohiko aplikazio kopuru bat dagoenean gertatzen da, ez lioke erabiltzaile arrunt bati eragingo. - "[%1$s] -Errore hau Element-en kontroletik kanpo dago. Hainbat arrazoiengatik gerta daiteke eta geroago berriro saiatzen bazara agian badabil, egiaztatu ere Google Play Service-ek ez duela datuen erabilera mugatua sistemaren ezarpenetan, edo zure gailuaren ordua ondo ezarrita dagoela, ROM pertsonalizatuekin gertatu daiteke ere." - [%1$s] -Errore hau Element-en kontroletik kanpo dago. Ez dago Google konturik gailuan. Ireki kontuen kudeatzailea eta gehitu Google kontu bat. + [%1$s] +Errore hau ${app_name}-en kontroletik kanpo dago eta Google-en arabera, errore honek esan nahi du gailuko aplikazio gehiegik erabiltzen dutela FCM. Errore hau ezohiko aplikazio kopuru bat dagoenean gertatzen da, ez lioke erabiltzaile arrunt bati eragingo. + "[%1$s] +Errore hau ${app_name}-en kontroletik kanpo dago. Hainbat arrazoiengatik gerta daiteke eta geroago berriro saiatzen bazara agian badabil, egiaztatu ere Google Play Service-ek ez duela datuen erabilera mugatua sistemaren ezarpenetan, edo zure gailuaren ordua ondo ezarrita dagoela, ROM pertsonalizatuekin gertatu daiteke ere." + [%1$s] +Errore hau ${app_name}-en kontroletik kanpo dago. Ez dago Google konturik gailuan. Ireki kontuen kudeatzailea eta gehitu Google kontu bat. Zifratutako geletako mezuak muturretik muturrera zifratuta daude. Hartzaileak/ek eta zuk eta ez beste inork irakurri ditzakezue mezuok. \n \nEgin zure gakoen babes-kopia segurua mezuak ez galtzeko. @@ -1448,7 +1448,7 @@ Abisua: Fitxategi hau ezabatu daiteke aplikazioa desinstalatzen bada. Baliogabeko hasiera-zerbitzari deskubritze erantzuna Automatikoki osatu zerbitzariaren aukerak - "Element-ek pertsonalizatutako zerbitzari konfigurazio bat antzeman du zure erabiltzaile id-arentzat \"%1$s\" domeinuan: + "${app_name}-ek pertsonalizatutako zerbitzari konfigurazio bat antzeman du zure erabiltzaile id-arentzat \"%1$s\" domeinuan: \n%2$s" Erabili konfigurazioa @@ -1580,7 +1580,7 @@ Abisua: Fitxategi hau ezabatu daiteke aplikazioa desinstalatzen bada. Komunitate guztiak Gela hau ezin da aurreikusi - Munduak irakurtzeko moduko gelaren aurrebista ez da oraindik onartzen Element bezeroan + Munduak irakurtzeko moduko gelaren aurrebista ez da oraindik onartzen ${app_name} bezeroan Gelak Mezu zuzenak @@ -1700,11 +1700,11 @@ Abisua: Fitxategi hau ezabatu daiteke aplikazioa desinstalatzen bada. Gehitu identitate-zerbitzari bat zure ezarpenetan ekintza hau burutzeko. Bigarren planoko sinkronizazio modua (Esperimentala) Bateria erabilerarako optimizatua - Element bigarren planoan sinkronizatuko da gailuaren baliabide mugatuen erabilera ahal beste murriztuz (bateria). + ${app_name} bigarren planoan sinkronizatuko da gailuaren baliabide mugatuen erabilera ahal beste murriztuz (bateria). \nZure gailuaren baliabideen egoeraren arabera, sistema eragileak sinkronizazioa atzeratu dezake. Denbora errealerako optimizatua - Element bigarren planoan sinkronizatuko da maiztasun finkoarekin (konfiguragarria). -\nHonek irrati eta bateriaren erabileran eragina izango du, eta Element gertaerei adi dagoela dion jakinarazpen bat bistaratuko da etengabe. + ${app_name} bigarren planoan sinkronizatuko da maiztasun finkoarekin (konfiguragarria). +\nHonek irrati eta bateriaren erabileran eragina izango du, eta ${app_name} gertaerei adi dagoela dion jakinarazpen bat bistaratuko da etengabe. Ez sinkronizatu bigarren planoan Ez zaizu jasotako mezuei buruz jakinaraziko aplikazioa bigarren planoan dagoenean. Huts egin du ezarpenak eguneratzean. @@ -1816,14 +1816,14 @@ Abisua: Fitxategi hau ezabatu daiteke aplikazioa desinstalatzen bada. \n \nEz baduzu erabiltzaile honen eduki gehiago ikusi nahi, bere mezuak ezkutatzeko blokeatu dezakezu - Element-ek zure E2E gakoak diskoan gordetzeko baimena behar du. + ${app_name}-ek zure E2E gakoak diskoan gordetzeko baimena behar du. \n \nBaimendu sarbidea hurrengo laster-leihoan zure gakoak eskuz esportatu ahal izateko. Ez dago sare konexiorik orain Berretsi zure pasahitza - Ezin duzu hau egin mugikorrerako Element erabiliz + Ezin duzu hau egin mugikorrerako ${app_name} erabiliz Autentifikazioa behar da @@ -2027,7 +2027,7 @@ Abisua: Fitxategi hau ezabatu daiteke aplikazioa desinstalatzen bada. \nHasi saioa berriro zure kontuaren datuak eta mezuak atzitzeko. Zure mezu zifratuetara sarbidea galduko duzu ez baduzu saioa hasten zifratze gakoak berreskuratzeko. Garbitu datuak - Oraingo saioa %1$s erabiltzailearena da eta %2$s erabiltzailearen kredentzialak eman dituzu. Element-k ez du hau onartzen. + Oraingo saioa %1$s erabiltzailearena da eta %2$s erabiltzailearen kredentzialak eman dituzu. ${app_name}-k ez du hau onartzen. \nAurretik garbitu datuak, gero hasi saioa berriro beste kontu batekin. Zure matrix.to esteka gaizki osatua dago @@ -2050,7 +2050,7 @@ Abisua: Fitxategi hau ezabatu daiteke aplikazioa desinstalatzen bada. Soilik lehen emaitzak erakusten, idatzi letra gehiago… Hutsegin-azkar - Element aplikazioa ustekabeko erroreen aurrean maizago kraskatu daiteke + ${app_name} aplikazioa ustekabeko erroreen aurrean maizago kraskatu daiteke "Jarri ¯\\_(ツ)_/¯ testu-soileko mezuaren aurretik" Gaitu zifratzea @@ -2139,9 +2139,9 @@ Abisua: Fitxategi hau ezabatu daiteke aplikazioa desinstalatzen bada. Saltatu irakurragirira - Element aplikazioak ez ditu \'%1$s\' motako gertaerak kudeatzen - Element aplikazioak ez ditu \'%1$s\' motako mezuak kudeatzen - Element aplikazioak arazo bat izan du \'%1$s\' id-a duen edukia erakusteko + ${app_name} aplikazioak ez ditu \'%1$s\' motako gertaerak kudeatzen + ${app_name} aplikazioak ez ditu \'%1$s\' motako mezuak kudeatzen + ${app_name} aplikazioak arazo bat izan du \'%1$s\' id-a duen edukia erakusteko Utzi ezikusteari @@ -2271,7 +2271,7 @@ Abisua: Fitxategi hau ezabatu daiteke aplikazioa desinstalatzen bada. Gakoak egunean daude jada! - Element Android + ${app_name} Android Gako eskaerak @@ -2413,13 +2413,13 @@ Abisua: Fitxategi hau ezabatu daiteke aplikazioa desinstalatzen bada. %1$s: %2$s %1$s: %2$s %3$s - Erabili azken Element bertsioa zure beste gailuetan, Element Web, Element Desktop, Element iOS, Element Android plataformarako, edo zeharka sinatzeko gaitasuna duen beste Matrix bezero bat - Element Web -\nElement Desktop - Element iOS -\nElement Android + Erabili azken ${app_name} bertsioa zure beste gailuetan, ${app_name} Web, ${app_name} Desktop, ${app_name} iOS, ${app_name} Android plataformarako, edo zeharka sinatzeko gaitasuna duen beste Matrix bezero bat + ${app_name} Web +\n${app_name} Desktop + ${app_name} iOS +\n${app_name} Android edo zeharka sinatzeko gaitasuna duen beste Matrix bezero bat - Erabili azken Element bertsioa zure beste gailuetan: + Erabili azken ${app_name} bertsioa zure beste gailuetan: Uneko irteerako talde saioa zifratutako gela batean baztertzera behartzen du Zifratutako gelatan onartzen da soilik Erabili zure %1$s edo %2$s jarraitzeko. @@ -2489,11 +2489,11 @@ Abisua: Fitxategi hau ezabatu daiteke aplikazioa desinstalatzen bada. Ireki %s zerbitzariko baldintzak Deskonektatu %s identitate zerbitzaritik\? - Identitate zerbitzaria zaharkituta dago. Element-k API V2 besterik ez du onartzen. + Identitate zerbitzaria zaharkituta dago. ${app_name}-k API V2 besterik ez du onartzen. Ezin da eragiketa hau burutu. Hasiera-zerbitzaria zaharkituta dago. Konfiguratu identitate-zerbitzari bat aurretik. Onartu identitate-zerbitzariaren baldintzak aurretik zerbitzariaren ezarpenetan. - Zure pribatutasuna babesteko, Element-k erabiltzaileeen e-mail eta telefonoak hasheatuta bidaltzen ditu. + Zure pribatutasuna babesteko, ${app_name}-k erabiltzaileeen e-mail eta telefonoak hasheatuta bidaltzen ditu. Asoziazioak huts egin du. Ez dago asoziaziorik identifikatzaile honekin. diff --git a/vector/src/main/res/values-fa/strings.xml b/vector/src/main/res/values-fa/strings.xml index b570a75cb0..189dd5aca0 100644 --- a/vector/src/main/res/values-fa/strings.xml +++ b/vector/src/main/res/values-fa/strings.xml @@ -346,7 +346,7 @@ مخاطبین من فهرست کاربران فقط مخاطبین ماتریکس - شما اجازه‌ی دسترسی به مخاطبین را به برنامه نداده‌اید + شما اجازه‌ی دسترسی به مخاطبین را به برنامه نداده‌اید نتیجه‌ای نیست فهرست اتاق‌ها اتاقی نیست @@ -503,7 +503,7 @@ بازدرخواست کلیدهای رمزنگاری از دیگر نشست‌هایتان. درخواست کلید ارسال شد. درخواست ارسال شد - لطفاً المنت را روی افزاره‌ای دیگر که می‌تواند پیام را رمزگشایی کند، اجرا کنید تا بتواند کلیدها را به این نشست بفرستد. + لطفاً المنت را روی افزاره‌ای دیگر که می‌تواند پیام را رمزگشایی کند، اجرا کنید تا بتواند کلیدها را به این نشست بفرستد. فهرست رسیدهای خواندن آیا مطمئن هستید؟ قطع اتصال @@ -543,7 +543,7 @@ اطّلاعات برنامه نمایش اطّلاعات برنامه در تنظیمات سامانه. تأیید گذرواژه‌تان - نمی‌توانید با المنت همراه، این کار را بکنید + نمی‌توانید با المنت همراه، این کار را بکنید نیاز به تأیید هویت است تنظمیات پیش‌رفتهٔ آگاهی آگاهی‌های رفع‌اشکال @@ -554,7 +554,7 @@ آگاهی‌ها برای حسابتان از کار افتاده‌اند. \nلطفاً تتظیمات حساب را بررسی کنید. آگاهی‌ها برای این نشست به کار افتاده‌اند. - آگاهی‌ها برای این نشست به کار نیفتاده‌اند. + آگاهی‌ها برای این نشست به کار نیفتاده‌اند. \nلطفاً تنظیمات المنت را بررسی کنید. برخی آگاهی‌ها در تنظیمات سفارشیتان از کار افتاده‌اند. خدمت آگاهی @@ -689,7 +689,7 @@ لطفاً شکیبایی کنید… تمام اجتماع‌ها این اتاق نمی‌تواند پیش‌نمایش یابد - پیش‌نمایش اتاق‌های قابل خواندن به صورت عمومی هنوز در ریوت‌اکس پشتیبانی نمی‌شود + پیش‌نمایش اتاق‌های قابل خواندن به صورت عمومی هنوز در ریوت‌اکس پشتیبانی نمی‌شود اتاق‌ها پیام‌های مستقیم اتاق جدید @@ -793,13 +793,13 @@ شامل یک JSON معتبر نبود درخواست‌های بیش از حد ارسال شده هنوز روی پیوند ایمیل کلیک نشده - استفاده از صدای زنگ پیش‌گزیدهٔ المنت برای تماس‌های ورودی + استفاده از صدای زنگ پیش‌گزیدهٔ المنت برای تماس‌های ورودی صدای زنگ تماس ورودی گزینش صدای زنگ برای تماس‌ها: یک عکس یا ویدیو بگیر نمی‌توان ویدیو ظبط کرد اطلاعات - المنت برای گرفتن عکس و تماس‌های ویدیویی نیاز به اجازه دارد. + المنت برای گرفتن عکس و تماس‌های ویدیویی نیاز به اجازه دارد. بازکردن سرتیتر در حال هم‌گام‌سازی… پریدن به نخستین پیام خوانده نشده. @@ -866,7 +866,7 @@ پذیرش رد قطع - تماس المنت شکست خورد + تماس المنت شکست خورد گزینش افزارهٔ صوتی تلفن بلندگو @@ -978,14 +978,14 @@ خدمت هنگام شروع دوبارهٔ افزاره، شروع خواهد شد. به کار اندازی شروع هنگام راه‌اندازی بررسی محدودیت‌های پس‌زمینه - محدودیت‌های پس‌زمینه برای المنت از کار افتاده‌اند. این آزمون باید با استفاده از دادهٔ همراه (بدون وای‌فای) اجرا شود. + محدودیت‌های پس‌زمینه برای المنت از کار افتاده‌اند. این آزمون باید با استفاده از دادهٔ همراه (بدون وای‌فای) اجرا شود. \n%1$s - محدودیت‌های پس‌زمینه برای النت به کار افتاده‌اند. + محدودیت‌های پس‌زمینه برای النت به کار افتاده‌اند. \nکارهایی که کاره می‌خواهد انجام دهد، هنگامی که در پس‌زمینه است به صورت تهاجمی محدود می‌شوند که می‌تواند روی آگاهی‌ها تأثیر بگذارد. \n%1$s از کار انداختن محدودیت‌ها بهینه‌سازی باتری - المنت تحت تأثیر بهینه‌سازی باتری نیست. + المنت تحت تأثیر بهینه‌سازی باتری نیست. نادیده‌گرفتن بهینه‌سازی عادی محرمانگی کاهش‌یافته @@ -1353,7 +1353,7 @@ نشست جاری فقط نمایش نخستین نتایج. حرف‌های بیش‌تری بنویسید… شکست سریع - المنت ممکن است هنگام رخ دادن خطای نامنتظره،‌بیش‌تر فروبپاشد + المنت ممکن است هنگام رخ دادن خطای نامنتظره،‌بیش‌تر فروبپاشد به کار انداختن رمزنگاری پس از به کار افتادن، رمزنگاری قابل از کار انداختن نیست. ورود نامطمئن @@ -1469,7 +1469,7 @@ تأیید برداشت آوردن دلیل - Element Android + ${app_name} Android درخواست‌های کلید قفل‌گشایی از تاریخچهٔ پیام‌های رمزشده نوسازی @@ -1503,9 +1503,9 @@ جلوگیری از نماگرفت کاره به کار انداختن این انتخاب، FLAG_SECURE را به تمامی فعّالیت‌ها می‌افزاید. برای اثرگذاری تغییر، برنامه را دوباره شروع کنید. پروندهٔ رسانه‌ای به جُنگ افزوده شد - المنت وب + المنت وب \nالمنت میزکار - المنت آی‌اواس + المنت آی‌اواس \nالمنت اندروید استفاده از کلید بازیابی رمزشده به دست افزاره‌ای تأییدنشده @@ -1604,7 +1604,7 @@ به کار انداختن ورود چندگانه برای ادامه از %1$s یا %2$sتان استفاده کنید. پشتیبانی‌شده فقط در اتاق‌های رمزشده - از آخرین نگارش المنت روی دیگر افزاره‌تان استفاده کنید: + از آخرین نگارش المنت روی دیگر افزاره‌تان استفاده کنید: یا دیگر کاره‌های ماتریکس دادای قابلیت ورود چندگانه تأیید دستی با متن تأیید ورود جدیدی که به حسابتان دسترسی دارد: %1$s @@ -1653,13 +1653,13 @@ نمی‌توان این اتاق را یافت. مطمئن شوید وجود دارد. نمی‌توان اتاقی را که از آن تحریم شده‌اید، گشود. برای از کار انداختن پین، تأییدش کنید - نیاز به رمز پین، هر بار که المنت را می‌گشایید. - نیاز به رمز پین، ۲ دقیقه پس از استفاده نشدن از المنت. + نیاز به رمز پین، هر بار که المنت را می‌گشایید. + نیاز به رمز پین، ۲ دقیقه پس از استفاده نشدن از المنت. نیاز به پین پس از ۲ دقیقه فقط نمایش تعداد پیام‌های نخوانده در یک آگاهی ساده. نمایش جزییاتی چون نام اتاق‌ها و محتوای پیام. نمایش محتوا در آگاهی‌ها - کد پین، تنها راه قفل‌گشایی المنت است. + کد پین، تنها راه قفل‌گشایی المنت است. به کار انداختن زیست‌سنجی‌های مختص افزاره، مانند اثرانگشت‌ها و تشخیص چهره. به کار انداختن زیست‌سنجی‌ها اگر می‌خواهید پینتان را بازنشانی کنید، فراموشی پین را برای خروج و بازنشانی بزنید. @@ -1693,7 +1693,7 @@ بازنشانی انتخاب گزینه‌ی دیگر مجوز دادن - المنت می تواند در پس‌زمینه اجرا شده تا آگاهی‌هایتان را به صورت ایمن و محرمانه مدیریت کند. ممکن است بر مصرف باتری تأثیر بگذارد. + المنت می تواند در پس‌زمینه اجرا شده تا آگاهی‌هایتان را به صورت ایمن و محرمانه مدیریت کند. ممکن است بر مصرف باتری تأثیر بگذارد. این کار کلید امنیتی قبلی شما را حذف می‌کند. یک کلید امنیتی جدید به صورت تصادفی ایجاد کنید یا یک عبارت امنیتی جدید برای فایل‌های پشتیبان موجود خود تنظیم کنید. فشردن اینتر به جای رفتن به خط بعد، پیام را ارسال خواهد کرد @@ -1707,9 +1707,9 @@ پیش‌نمایشی از آدرس‌های URL در پیام‌ها نمایش داده شود. %s \nبسته به شارژ دستگاه یا وضعیت دستگاه(خاموش بودن صفحه) ممکن است همگام‌سازی به تعویق بیوفتد. - المنت بصورت دوره‌ای و در بازه‌های قابل تنظیم در پس زمینه همگام‌سازی می شود. + المنت بصورت دوره‌ای و در بازه‌های قابل تنظیم در پس زمینه همگام‌سازی می شود. \nاین بر مصرف باتری شما تأثیر می‌گذارد، یک اعلان دائمی نمایش داده می‌شود که المنت برای رویدادها گوش می‌دهد. - المنت در پس زمینه همگام‌سازی می‌کند به گونه ای که منابع محدود دستگاه (باتری) حفظ می‌شود. + المنت در پس زمینه همگام‌سازی می‌کند به گونه ای که منابع محدود دستگاه (باتری) حفظ می‌شود. \nبسته به شارژ گوشی شما، ممکن است همگام‌سازی توسط سیستم‌عامل به تعویق بیوفتد. روشن کردن صفحه برای ۳ ثانیه • آگاهی‌ها محتوای پیام را نشان نخواهند داد @@ -1718,7 +1718,7 @@ • آگاهی‌ها فقط دارای فراداده هستند • آگاهی‌ها با پیام‌رسانی ابری Firebase فرستاده می‌شوند اگر دستگاه برای مدتی از شارژر جدا باشد و از دستگاه نیز استفاده نشود، گوشی وارد حالت غیر هوشیار می‌شود. در این حالت از دسترسی برنامه‌ها به اینترنت جلوگیری می‌شود و همگام سازی و هشدارهای استاندارد آن‌ها به تعویق می‌افتد. - خدمت، هنگام شروع دوبارهٔ افزاره اجرا نخواهد شد. تا وقتی یک بار المنت باز نشود، آگاهی‌ها را دریافت نخواهید کرد. + خدمت، هنگام شروع دوبارهٔ افزاره اجرا نخواهد شد. تا وقتی یک بار المنت باز نشود، آگاهی‌ها را دریافت نخواهید کرد. روی آگاهی کلیک شد! لطفاً روی آگاهی کلیک کنید. اگر آگاهی را نمی‌بینید، لطفاً تنظیمات سامانه را بررسی کنید. نمایش آگاهی @@ -1732,11 +1732,11 @@ توکن FCM با موفقیت در سرور ثبت شد. ثبت توکن افزودن حساب کاربری - [%1$s] + [%1$s] \nاین خطا از کنترل المنت خارج است. هیچ حساب Google‌ای روی تلفن وجود ندارد. لطفاً مدیریت حساب را در تنظیمات گوشی باز کرده و یک حساب Google اضافه کنید. - [%1$s] + [%1$s] \nاین خطا از کنترل المنت خارج است و به چند دلیل ممکن است رخ داده باشد. امکان دارد در صورت تلاش مجدد مشکل رفع شود، همچنین می‌توانید بررسی کنید که سرویس Google Play در استفاده از اینترنت در تنظیمات گوشی محدودیتی نداشته باشد یا ساعت دستگاه شما درست باشد. همچنین ممکن است به علت استفاده از ROM سفارشی‌شده این خطا رخ داده باشد. - [%1$s] + [%1$s] \nاین خطا از کنترل المنت خارج است و طبق گفته گوگل ، این خطا نشان می دهد که دستگاه بیش از حد مجاز، برنامه های ثبت شده در FCM دارد. این خطا فقط در مواردی رخ می دهد که تعداد زیادی برنامه وجود دارد، بنابراین نباید بر کاربر عادی رخ دهد. بازیابی توکن FCM با مشکل مواجه شد: \n%1$s @@ -1744,7 +1744,7 @@ \n%1$s توکن Firebase مشکل Google Play Services را برطرف کنید - المنت برای ارسال آگاهی‌ها از خدمات پلی گوگل استفاده می‌کند اما به نظر می‌رسد به درستی پیکربندی نشده است: + المنت برای ارسال آگاهی‌ها از خدمات پلی گوگل استفاده می‌کند اما به نظر می‌رسد به درستی پیکربندی نشده است: \n%1$s Google Play Services در دسترس و بروز است. تنظیمات سفارشی بارگذاری نشد، لطفاً دوباره امتحان کنید. @@ -1800,21 +1800,21 @@ این دعوت به %s ارسال شده که ارتباطی با این حساب ندارد. \nممکن است بخواهید با حسابی دیگر وارد شده یا این رایانامه را به حسابتان بیفزایید. متاسفانه به دلیل عدم دسترسی، درخواست شما امکان پذیر نمی باشد - المنت می‌تواند با دیدن دفترچه تلفن شما کاربرهای دیگر ماتریکس را بر اساس ایمبل و شماره تلفنشان پیدا کند. + المنت می‌تواند با دیدن دفترچه تلفن شما کاربرهای دیگر ماتریکس را بر اساس ایمبل و شماره تلفنشان پیدا کند. \n \nآیا موافق با اشتراک‌گذاری دفترچه تلفنتان به این منظور هستید؟ - المنت می‌تواند با دیدن دفترچه تلفن شما کاربرهای دیگر ماتریکس را بر اساس ایمبل و شماره تلفنشان پیدا کند. اگر مایل به اشتراک گذاری دفترچه تلفنتان به این منظور هستید لطفا در پنجره‌ی بعد اجازه‌ی این کار را بدهید. - المنت برای برقراری تماس تصویری نیازمند دسترسی به میکروفون و دوربین است. + المنت می‌تواند با دیدن دفترچه تلفن شما کاربرهای دیگر ماتریکس را بر اساس ایمبل و شماره تلفنشان پیدا کند. اگر مایل به اشتراک گذاری دفترچه تلفنتان به این منظور هستید لطفا در پنجره‌ی بعد اجازه‌ی این کار را بدهید. + المنت برای برقراری تماس تصویری نیازمند دسترسی به میکروفون و دوربین است. \n \nلطفا در پنجره های بعدی دسترسی های لازم را بدهید. " \n \nلطفا برای برقراری تماس در پنجره بعدی دسترسی لازم را بدهید." - المنت برای برقراری تماس صوتی نیازمند دسترسی به میکروفون است. + المنت برای برقراری تماس صوتی نیازمند دسترسی به میکروفون است. " \n \nلطفا برای برقراری تماس در پنجره بعدی دسترسی لازم را بدهید." - المنت برای ارسال و ذخیره‌ی فایل‌ها نیاز به دسترسی به گالری شما را دارد. + المنت برای ارسال و ذخیره‌ی فایل‌ها نیاز به دسترسی به گالری شما را دارد. \n \nلطفا در پنجره‌ای که باز می‌شود این دسترسی را بدهید. هنگامی که کارساز خانگیتان قابلیت تماس نداشته باشد، از %s استفاده خواهد شد (نشانی IPتان در طول تماس هم‌رسانی خواهد شد) @@ -1834,7 +1834,7 @@ نسخه پشتیبان با این کلید بازیابی رمزگشایی نمی‌شود: لطفاً تأیید کنید که کلید بازیابی درست را وارد کرده‌اید. کلید پشتیبان خود را انتخاب کنید، یا با تایپ کردن و یا کپی‌کردن، آن را وارد کنید نشست‌های خارجی را مجبور به ترک گروه می‌کند - از آخرین نسخه‌ی المنت روی دستگاه‌های دیگرتان استفاده کنید: نسخه وب المنت، نسخه دسکتاپ المنت، نسخه IOS المنت و نسخه اندروید المنت + از آخرین نسخه‌ی المنت روی دستگاه‌های دیگرتان استفاده کنید: نسخه وب المنت، نسخه دسکتاپ المنت، نسخه IOS المنت و نسخه اندروید المنت تنظیم گذرواژه جدید… فایل رسانه ذخیره نشد فایل به گالری افزوده نشد @@ -1916,9 +1916,9 @@ پیام را با رنگ‌بندی رنگین کمان ارسال می کند این نشست نمی‌تواند تائید را با نشست‌های دیگر شما به اشتراک بگذارد. \nتائید به صورت محلی ذخیره می‌شود و در نسخه‌ی بعدی برنامه به اشتراک گذاشته می‌شود. - المنت هنگام ارائه محتوای رویدادی با شناسه \'%1$s\' با مشکل روبرو شد - المنت پیام‌های \'%1$s\' را پشتیبانی نمی‌کند - المنت رویداد \'%1$s\' را پشتیبانی نمی‌کند + المنت هنگام ارائه محتوای رویدادی با شناسه \'%1$s\' با مشکل روبرو شد + المنت پیام‌های \'%1$s\' را پشتیبانی نمی‌کند + المنت رویداد \'%1$s\' را پشتیبانی نمی‌کند ممکن است یکی از موارد زیر به خطر افتاده باشد: \n \n- سرور میزبان شما @@ -1931,7 +1931,7 @@ دامنهٔ رایانامه‌تان مجاز به ثبت‌نام روی این کارساز نیست ¯\\\\_(ツ)_/¯ را به یک پیام متنی ساده تغییر می دهد لینک مشکل دارد - نشست فعلی مربوط به کاربر %1$s است و شما اطلاعات حساب کاربر %2$s را ارائه داده‌اید. این مورد توسط المنت پشتیبانی نمی‌شود . + نشست فعلی مربوط به کاربر %1$s است و شما اطلاعات حساب کاربر %2$s را ارائه داده‌اید. این مورد توسط المنت پشتیبانی نمی‌شود . \nلطفا ابتدا داده ها را پاک کنید، سپس با یک حساب دیگر وارد برنامه شوید. دسترسی به پیام‌های رمزشده را از دست خواهید داد مگر اینکه برای بازیابی کلیدهای رمزگذاری خود، به حساب خود وارد شوید. آیا تمامی اطلاعات ذخیره‌شده در این دستگاه پاک شود؟ @@ -2024,7 +2024,7 @@ حذف‌کردن از اولویت پایین اضافه‌کردن به اولویت پایین در حال حاضر اتصال شبکه‌ای وجود ندارد - المنت برای ذخیره کلیدهای رمزنگاری سرتاسر شما بر روی حافظه نیاز به مجوز دارد. + المنت برای ذخیره کلیدهای رمزنگاری سرتاسر شما بر روی حافظه نیاز به مجوز دارد. \n \nلطفاً در پنجره بعدی اجازه دسترسی دهید تا بتوانید کلیدهای خود را به صورت دستی ذخیره کنید. این محتوا به عنوان محتوای نامناسب گزارش شده‌است. @@ -2142,7 +2142,7 @@ با مقایسه‌کردن یک رشته‌ی متنی کوتاه تایید کنید. شما به دلیل اطلاعات نادرست حساب کاربری یا انقضای نشست از حساب خارج شدید. از پیکربندی استفاده کنید - المنت یک پیکربندی اختصاصی سرور برای دامنه‌ی شناسه‌ی کاربری شما \"%1$s\" تشخیص داده است: + المنت یک پیکربندی اختصاصی سرور برای دامنه‌ی شناسه‌ی کاربری شما \"%1$s\" تشخیص داده است: \n%2$s تکمیل خودکار گزینه‌های مربوط به سرور امضاء @@ -2219,7 +2219,7 @@ \n \nبرای جلوگیری از گم کردن کلیدهایتان، از آن‌ها به صورت امن، پشتیبان بگیرید. هیچ نشست ماتریکسی موجود نیست - اگر می خواهید المنت یک کلید بازیابی ایجاد کند، لطفاً عبارت عبور را حذف کنید. + اگر می خواهید المنت یک کلید بازیابی ایجاد کند، لطفاً عبارت عبور را حذف کنید. عبارت عبور بیش از حد ضعیف است لطفاً عبارت عبوری وارد کنید عبارت عبور، مطابق نبود @@ -2359,10 +2359,10 @@ حالت صرفه‌جویی داده، پالایهٔ خاصی را اعمال می‌کند که در نتیجهٔ آن، به‌روزرسانی‌های حضور و آگاهی‌های نوشتن، پالوده می‌شوند. حالت صرفه‌جویی در مصرف دیتا بله ، من می خواهم کمک کنم! - لطفاً برای کمک به ما در بهبود المنت، ارسال ناشناس تجزیه و تحلیل را فعال کنید. - المنت برای داشتن اعلان‌های قابل اعتماد نیاز به فعالیت در پس زمینه دارد. + لطفاً برای کمک به ما در بهبود المنت، ارسال ناشناس تجزیه و تحلیل را فعال کنید. + المنت برای داشتن اعلان‌های قابل اعتماد نیاز به فعالیت در پس زمینه دارد. \nدر صفحه بعدی از شما خواسته می شود که المنت همیشه در پس زمینه اجرا شود ، لطفاً آن را بپذیرید. - المنت اطلاعاتی را جمع آوری می کند و با ارسال آنان به صورت ناشناس به ما امکان بهبود برنامه را می‌دهد. + المنت اطلاعاتی را جمع آوری می کند و با ارسال آنان به صورت ناشناس به ما امکان بهبود برنامه را می‌دهد. ارسال داده های تجزیه و تحلیل تجزیه و تحلیل مجوز دادن @@ -2377,7 +2377,7 @@ عبارت رمزی که فقط خودتان می‌دانید را وارد کرده و کلیدی برای پشتیبان تولید کنید. به هنوتم جایگزین، می‌توانید نشامی هر کارساز هویت دیگری را وارد کنید کارساز خانگیتان (%1$s) پیشنهاد استفاده از %2$s برای کارساز هویتتان را می‌دهد - برای محرمانگیتان، المنت تنها از فرستادن شماره تلفن و رایانامه‌های کاربری در هم ریخته پشتیبانی می‌کند. + برای محرمانگیتان، المنت تنها از فرستادن شماره تلفن و رایانامه‌های کاربری در هم ریخته پشتیبانی می‌کند. این عملیات ممکن نیست. کارساز خانگی منقضی شده است. نتوانستیم کاربران را دعوت کنیم. لطفاً کاربرانی که می‌خواهید دعوت کنید را بررسی کرده و دوباره تلاش کنید. نتوانستیم پیامتان را ایجاد کنیم. لطفاً کاربرانی که می‌خواهید دعوت کنید را بررسی کرده و دوباره تلاش کنید. @@ -2402,14 +2402,14 @@ رضایت کاربر فراهم نشده است. لطفاً نخست شرایط کارساز هویت را در تنظیمات بپذیرید. لطفاً نخست کارساز هویتی را پیکربندی کنید. - کارساز هویت منقضی شده اسن. المنت تنها نگارش ۲ از API را پشتیبانی می‌کند. + کارساز هویت منقضی شده اسن. المنت تنها نگارش ۲ از API را پشتیبانی می‌کند. این رمز را افراد هم‌رسانی کرده تا بتوانند برای افزودنتان و شروع گپ، بپویندش. رمزم هم‌رسانی رمزم پویش یک رمز QR این یک رمز QR ماتریکس معتبر نیست - 🔐️ پیوستن به من روی المنت - سلام. روی المنت باهام حرف بزن: %s + 🔐️ پیوستن به من روی المنت + سلام. روی المنت باهام حرف بزن: %s دعوت دوستان افزودن افراد "موضوع: " @@ -2531,7 +2531,7 @@ فرستادن کاغذ رنگی 🎉 فرستادن برف ❄️ احراز هویت انجام نشد - المنت برای انجام این عمل نیاز دارد که گذواژه‌ی خود را وارد کنید. + المنت برای انجام این عمل نیاز دارد که گذواژه‌ی خود را وارد کنید. احراز هویت مجدد مورد نیاز است کاربران هنگام انتقال تماس خطایی روی داد diff --git a/vector/src/main/res/values-fi/strings.xml b/vector/src/main/res/values-fi/strings.xml index cbca322a9e..5f4741f86a 100644 --- a/vector/src/main/res/values-fi/strings.xml +++ b/vector/src/main/res/values-fi/strings.xml @@ -282,7 +282,7 @@ Paikalliset yhteystiedot Ainoastaan Matrix-yhteyshenkilöt Ei keskusteluita - Et ole sallinut Elementille pääsyä paikallisiin yhteystietoihisi + Et ole sallinut ${app_name}ille pääsyä paikallisiin yhteystietoihisi Ei tuloksia Huoneet @@ -430,22 +430,22 @@ Huomio - Element tarvitsee käyttöluvan mediagalleriaasi lähettäkseen liitteitä.\n\nSalli tiedostojen käyttö seuraavalla näytöllä liittääksesi kuvia ja muita tiedostoja viesteihin. - Element tarvitsee käyttöluvan kameraan ottaakseen kuvia ja suorittakseen videopuheluita. + ${app_name} tarvitsee käyttöluvan mediagalleriaasi lähettäkseen liitteitä.\n\nSalli tiedostojen käyttö seuraavalla näytöllä liittääksesi kuvia ja muita tiedostoja viesteihin. + ${app_name} tarvitsee käyttöluvan kameraan ottaakseen kuvia ja suorittakseen videopuheluita. " \n \nSoittaaksesi videopuhelun, salli seuraavassa ponnahdusikkunassa sovelluksen käyttää kameraa." - Element tarvitsee käyttöluvan mikrofoniin suorittakseen puheluita. + ${app_name} tarvitsee käyttöluvan mikrofoniin suorittakseen puheluita. " \n \nSoittaaksesi äänipuhelun, salli seuraavassa ponnahdusikkunassa sovelluksen käyttää mikrofonia." - Element tarvitsee käyttöluvan kameraan ja mikrofoniin suorittakseen videopuheluita. + ${app_name} tarvitsee käyttöluvan kameraan ja mikrofoniin suorittakseen videopuheluita. \n \nSalli mikrofonin ja kameran käyttö seuraavilla näytöillä aloittaaksesi tämän puhelun. - Element voi tarkistaa yhteystietosi löytääkseen muita Matrixin käyttäjiä sähköpostiosoitteiden ja puhelinnumeroiden perusteella. Jos suostut jakamaan yhteystietosi tätä tarkoitusta varten, salli yhteystietojen käyttö seuraavassa ponnahdusikkunassa. - Element pystyy käyttämään yhteystietojasi, etsiäkseen muita Matrix-käyttäjiä sähköpostiosoitteiden sekä puhelinnumeroiden perusteella. + ${app_name} voi tarkistaa yhteystietosi löytääkseen muita Matrixin käyttäjiä sähköpostiosoitteiden ja puhelinnumeroiden perusteella. Jos suostut jakamaan yhteystietosi tätä tarkoitusta varten, salli yhteystietojen käyttö seuraavassa ponnahdusikkunassa. + ${app_name} pystyy käyttämään yhteystietojasi, etsiäkseen muita Matrix-käyttäjiä sähköpostiosoitteiden sekä puhelinnumeroiden perusteella. \n -\nSaako Element käyttää yhteystietojasi tätä varten\? +\nSaako ${app_name} käyttää yhteystietojasi tätä varten\? Toimenpide epäonnistui puuttuvien käyttölupien takia Tallennettu @@ -975,12 +975,12 @@ Pyydä salausavaimia uudelleen muista istunnoistasi. Avainpyyntö lähetetty. Pyyntö lähetetty - Käynnistä Element toisella laitteella, joka voi purkaa viestin, jotta se voi lähettää avaimet tähän istuntoon. + Käynnistä ${app_name} toisella laitteella, joka voi purkaa viestin, jotta se voi lähettää avaimet tähän istuntoon. yksi jäsenyysmuutos %d jäsenyysmuutosta - Käytä Elementin oletussoittoääntä saapuville puheluille + Käytä ${app_name}in oletussoittoääntä saapuville puheluille Saapuvien puheluiden soittoääni Videopuhelu menossa… Käyttäjälista @@ -1057,8 +1057,8 @@ Ota käyttöön Istunnon asetukset. Ilmoitukset ovat käytössä tässä istunnossa. - Ilmoitukset eivät ole käytössä tässä istunnossa. -\nTarkista Elementin asetukset. + Ilmoitukset eivät ole käytössä tässä istunnossa. +\nTarkista ${app_name}in asetukset. Ota käyttöön Mukautetut asetukset. Huomaathan, että osa viestityypeistä on asetettu olemaan hiljaisia (tuottavat ilmoituksen ilman ääntä). @@ -1067,7 +1067,7 @@ Tarkista asetukset Play Services -palvelun tarkistus Google Play Services APK on saatavilla ja ajan tasalla. - Element käyttää Google Play Services -palvelua ilmoitusten välittämiseen, mutta se ei näytä olevan määritetty oikein: + ${app_name} käyttää Google Play Services -palvelua ilmoitusten välittämiseen, mutta se ei näytä olevan määritetty oikein: \n%1$s Korjaa Play Services -palvelu Firebase-tunniste @@ -1075,12 +1075,12 @@ \n%1$s FCM-tunnisteen haku epäonnistui: \n%1$s - [%1$s] -\nElement ei voi vaikuttaa tähän virheeseen, ja Googlen mukaan tämä virhe tarkoittaa, että tällä laitteella on liikaa FCM:ään rekisteröityjä sovelluksia. Tämä virhe ilmenee vain tapauksissa, joissa on erittäin paljon FCM:ään rekisteröityjä sovelluksia asennettuna, joten tätä ei pitäisi tapahtua normaalisti. - [%1$s] -\nTämä virhe ei ole Elementin ratkaistavissa. Se voi johtua useasta eri syystä. Ehkä tämä toimii, jos yrität myöhemmin. Voit myös tarkistaa, että Google Play Services -palvelu ei ole rajoitettuna järjestelmäasetuksissa, ja että laitteesi kello on oikein. Tämä voi tapahtua myös mukautetun käyttöjärjestelmän kanssa. - [%1$s] -\nTämä virhe ei ole Elementin ratkaistavissa. Tässä puhelimessa ei ole Google-tiliä. Lisää laitteeseesi Google-tili tätä toimintoa varten. + [%1$s] +\n${app_name} ei voi vaikuttaa tähän virheeseen, ja Googlen mukaan tämä virhe tarkoittaa, että tällä laitteella on liikaa FCM:ään rekisteröityjä sovelluksia. Tämä virhe ilmenee vain tapauksissa, joissa on erittäin paljon FCM:ään rekisteröityjä sovelluksia asennettuna, joten tätä ei pitäisi tapahtua normaalisti. + [%1$s] +\nTämä virhe ei ole ${app_name}in ratkaistavissa. Se voi johtua useasta eri syystä. Ehkä tämä toimii, jos yrität myöhemmin. Voit myös tarkistaa, että Google Play Services -palvelu ei ole rajoitettuna järjestelmäasetuksissa, ja että laitteesi kello on oikein. Tämä voi tapahtua myös mukautetun käyttöjärjestelmän kanssa. + [%1$s] +\nTämä virhe ei ole ${app_name}in ratkaistavissa. Tässä puhelimessa ei ole Google-tiliä. Lisää laitteeseesi Google-tili tätä toimintoa varten. Lisää tili Tunnisteen rekisteröinti FCM-tunniste rekisteröity onnistuneesti kotipalvelimelle. @@ -1096,17 +1096,17 @@ Palvelun uudelleenkäynnistäminen epäonnistui Käynnistä laitteen käynnistyessä Palvelu käynnistetään, kun laite käynnistetään uudelleen. - Palvelua ei käynnistetä laitteen uudelleenkäynnistyksen yhteydessä. Et tule saamaan ilmoituksia ennen kuin Element on käynnistetty uudelleen. + Palvelua ei käynnistetä laitteen uudelleenkäynnistyksen yhteydessä. Et tule saamaan ilmoituksia ennen kuin ${app_name} on käynnistetty uudelleen. Ota käyttöön automaattinen käynnistys Tarkista taustapalveluiden rajoitukset - Taustapalveluiden rajoitukset ovat pois käytöstä. Tämä testi tulee ajaa mobiilidatayhteydellä (ilman wlania). + Taustapalveluiden rajoitukset ovat pois käytöstä. Tämä testi tulee ajaa mobiilidatayhteydellä (ilman wlania). \n%1$s - Taustapalveluiden rajoitukset ovat käytössä. -\nTyötä, jota Element yrittää tehdä, rajoitetaan aggressiivisesti, kun se on taustalla, mikä saattaa vaikuttaa ilmoituksiin. + Taustapalveluiden rajoitukset ovat käytössä. +\nTyötä, jota ${app_name} yrittää tehdä, rajoitetaan aggressiivisesti, kun se on taustalla, mikä saattaa vaikuttaa ilmoituksiin. \n%1$s Poista rajoitukset Akunkäytön optimointi - Akunkäytön optimointi ei vaikuta Elementin toimintaan. + Akunkäytön optimointi ei vaikuta ${app_name}in toimintaan. Jos käyttäjä jättää laitteen paikalleen ilman latausjohtoa niin, että näyttö on pois päältä, laite siirtyy torkkutilaan. Tämä estää sovelluksia käyttämästä verkkoyhteyksiä ja lykkää niiden töitä, synkronointeja ja perushälytyksiä. Jätä optimointi huomiotta Normaali @@ -1129,15 +1129,15 @@ Ei vaikuta kutsuihin, poistamisiin ja porttikieltoihin. Sisältää hahmokuvat ja näyttönimien vaihdot. Ilmoitusten yksityisyys - Element voi ajaa itseään taustalla hallitakseen sinulle näytettäviä ilmoituksia turvallisesti ja yksityisesti. Tämä voi vaikuttaa akunkäyttöön. + ${app_name} voi ajaa itseään taustalla hallitakseen sinulle näytettäviä ilmoituksia turvallisesti ja yksityisesti. Tämä voi vaikuttaa akunkäyttöön. Anna oikeus Valitse toinen vaihtoehto Taustayhteys - Elementin tarvitsee käyttää taustayhteyttä, jotta se voi näyttää luotettavia ilmoituksia. -\nSeuraavalla ruudulla sinulta kysytään lupaa, jotta Element voi pitää itsensä käynnissä taustalla. + ${app_name}in tarvitsee käyttää taustayhteyttä, jotta se voi näyttää luotettavia ilmoituksia. +\nSeuraavalla ruudulla sinulta kysytään lupaa, jotta ${app_name} voi pitää itsensä käynnissä taustalla. Anna oikeus - Element kerää anonyymiä analytiikkaa sovelluksen parantamiseksi. - Otathan analytiikan käyttöön Elementin parantamiseksi. + ${app_name} kerää anonyymiä analytiikkaa sovelluksen parantamiseksi. + Otathan analytiikan käyttöön ${app_name}in parantamiseksi. Kyllä, haluan auttaa! Datansäästötila ottaa käyttöön erityisen suodattimen, joka poistaa paikallaoloilmoitukset ja kirjoittamisen ilmoitukset. Sähköpostiasi varmennettaessa tapahtui virhe. @@ -1236,7 +1236,7 @@ Salalause ei täsmää Syötä salalause Salalause on liian heikko - Poista salalause, jos haluat Element generoivan palautusavaimen. + Poista salalause, jos haluat ${app_name} generoivan palautusavaimen. Matrix-istuntoa ei ole saatavilla Älä koskaan menetä salattuja viestejä Salatuissa huoneissa viestit ovat suojattuna osapuolten välisellä salauksella. Vain sinä ja vastaanottaja(t) omistavat avaimet näiden viestien lukemiseen. @@ -1352,7 +1352,7 @@ \nJos et asettanut uutta palautustapaa, hyökkääjä saattaa yrittää päästä käsiksi tiliisi. Vaihda tilisi salasana ja aseta uusi palautustapa asetuksissa välittömästi. Epäkelpo kotipalvelimen löytövastaus Automaattitäydennyksen palvelinasetukset - Element löysi mukautetun palvelinasetuksen userId:si domainille ”%1$s”: + ${app_name} löysi mukautetun palvelinasetuksen userId:si domainille ”%1$s”: \n%2$s Käytä asetuksia Alustetaan palvelua @@ -1429,7 +1429,7 @@ Odota… Kaikki yhteisöt Tätä huonetta ei voi esikatsella - Element ei vielä tue täysin julkisen huoneen esikatselua + ${app_name} ei vielä tue täysin julkisen huoneen esikatselua Huoneet Yksityisviestit Uusi huone @@ -1574,11 +1574,11 @@ Kokeile käyttää palvelinta %s Käyttää palvelinta %s apupalvelimena, jos kotipalvelimesi ei tarjoa sellaista (IP-osoitteesi näkyy palvelimelle puhelun aikana) Optimoitu akunkestoa varten - Element synkronoi taustalla laitteen rajallisia resursseja (akkua) säästäen. + ${app_name} synkronoi taustalla laitteen rajallisia resursseja (akkua) säästäen. \nLaitteesi resurssien tilasta riippuen käyttöjärjestelmä saattaa lykätä synkronointia. Optimoitu reaaliaikaa varten - Element synkronoi taustalla täsmällisin aikavälein (säädettävä). -\nTämä vaikuttaa radion ja akun käyttöön. Näet pysyvän ilmoituksen, joka kertoo, että Element kuuntelee tapahtumia. + ${app_name} synkronoi taustalla täsmällisin aikavälein (säädettävä). +\nTämä vaikuttaa radion ja akun käyttöön. Näet pysyvän ilmoituksen, joka kertoo, että ${app_name} kuuntelee tapahtumia. Viestimuokkaukset Ole löydettävissä Tekstiviesti on lähetetty numeroon %s. Syötä sen sisältämä varmistuskoodi. @@ -1680,7 +1680,7 @@ Tämä sisältö on ilmiannettu epäsopivana. \n \nJos et halua nähdä enempää sisältöä tältä käyttäjältä, voit estää hänet piilottaaksesi hänen viestit. - Element tarvitsee oikeuden tallentaakseen osapuolten välisen salauksen avaimesi talteen. + ${app_name} tarvitsee oikeuden tallentaakseen osapuolten välisen salauksen avaimesi talteen. \n \nSalli pääsy tiedostoihin seuraavassa ponnahdusikkunassa, jotta voit viedä avaimesi käsin. Tämä ei ole kelvollinen Matrix-palvelimen osoite @@ -1814,8 +1814,8 @@ \nKirjaudu sisään päästäksesi käsiksi tunnuksesi tietoihin ja viesteihin. Menetät pääsyn salattuihin viesteihisi ellet kirjaudu sisään palauttaaksesi salausavaimesi. Poista tiedot - Nykyinen istunto on käyttäjälle %1$s, ja yritit kirjautuas isään käyttäjälle %2$s. Element ei tue tätä. -\nPoista ensin tietosi ja kirjaudu sen jälkeen toisella tunnuksella. Voit vaihtoehtoisesti käyttää Elementin selainversiota. + Nykyinen istunto on käyttäjälle %1$s, ja yritit kirjautuas isään käyttäjälle %2$s. ${app_name} ei tue tätä. +\nPoista ensin tietosi ja kirjaudu sen jälkeen toisella tunnuksella. Voit vaihtoehtoisesti käyttää ${app_name}in selainversiota. matrix.to-linkkisi oli epämuodostunut Kuvaus on liian lyhyt Syötä palvelin tai sen Elementin osoite, mihin haluat yhdistää @@ -1857,7 +1857,7 @@ Ravista puhelintasi testataksesi tunnistusrajan Ravistus tunnistettu! Näytetään vain ensimmäiset tulokset, kirjoita lisää kirjaimia… - Element voi kaatuilla tavallista useammin odottamattomien virheiden vuoksi + ${app_name} voi kaatuilla tavallista useammin odottamattomien virheiden vuoksi Lisää ¯\\_(ツ)_/¯ tavallisen viestin alkuun Käyttämäsi sähköpostipalvelun ei ole sallittu rekisteröityä tälle palvelimelle Täsmäävät @@ -1907,9 +1907,9 @@ Ylläpitäjä %1$s:ssä Valvoja %1$s:ssä Siirry lukukuittaukseen - Element ei osaa käsitellä tapahtumia joiden tyyppi on \'%1$s\' - Element ei osaa käsitellä viestejä joiden tyyppi on \'%1$s\' - Element ei osannut piirtää tapahtuman jonka tunniste on \'%1$s\' sisältöä + ${app_name} ei osaa käsitellä tapahtumia joiden tyyppi on \'%1$s\' + ${app_name} ei osaa käsitellä viestejä joiden tyyppi on \'%1$s\' + ${app_name} ei osannut piirtää tapahtuman jonka tunniste on \'%1$s\' sisältöä Viimeaikaiset huoneet Muut huoneet Lähettää annetun viestin väritettynä sateenkaaren väreillä @@ -1979,7 +1979,7 @@ Käyttäjä poistanut tapahtuman, syynä: %1$s Tapahtuma moderoitu huoneen ylläpitäjän toimesta, syynä: %1$s Avaimet ovat jo ajan tasalla! - Element Android + ${app_name} Android Avainpyynnöt Päivitä Uusi kirjautuminen. Olitko se sinä\? @@ -2058,7 +2058,7 @@ Kaiutin Puhelin Valitse äänilaite - Element-puhelu epäonnistui + ${app_name}-puhelu epäonnistui Lähetä avaimen jakopyyntöjen historia Ei enempää tuloksia Ilmoitukset diff --git a/vector/src/main/res/values-fr/strings.xml b/vector/src/main/res/values-fr/strings.xml index b89962f71e..397ff5a1e3 100644 --- a/vector/src/main/res/values-fr/strings.xml +++ b/vector/src/main/res/values-fr/strings.xml @@ -292,7 +292,7 @@ Carnet d’adresses local Contacts Matrix uniquement Aucune discussion - Vous n’avez pas autorisé Element à accéder à vos contacts locaux + Vous n’avez pas autorisé ${app_name} à accéder à vos contacts locaux Aucun résultat Salons Répertoire de salons @@ -639,22 +639,22 @@ Le correspondant n’a pas décroché. Prendre une photo ou une vidéo Information - Element a besoin d’accéder à vos photos et vidéos pour envoyer et enregistrer des pièces jointes + ${app_name} a besoin d’accéder à vos photos et vidéos pour envoyer et enregistrer des pièces jointes \n \nVeuillez autoriser l’accès dans la prochaine fenêtre contextuelle pour pouvoir envoyer des fichiers depuis votre téléphone. - Element a besoin d’accéder à votre appareil photo pour prendre des photos et passer des appels vidéo. + ${app_name} a besoin d’accéder à votre appareil photo pour prendre des photos et passer des appels vidéo. " \n \nVeuillez autoriser l’accès dans la prochaine fenêtre contextuelle pour pouvoir effectuer l’appel." - Element a besoin d’accéder à votre microphone pour passer des appels audio. + ${app_name} a besoin d’accéder à votre microphone pour passer des appels audio. " \n \nVeuillez autoriser l’accès dans la prochaine fenêtre contextuelle pour pouvoir effectuer l’appel." - Element a besoin d’accéder à votre appareil photo et à votre microphone pour passer des appels vidéo. + ${app_name} a besoin d’accéder à votre appareil photo et à votre microphone pour passer des appels vidéo. \n \nVeuillez autoriser l’accès dans les prochaines fenêtres contextuelles pour pouvoir effectuer l’appel. - Element peut accéder à votre carnet d’adresses pour trouver d’autres utilisateurs de Matrix avec leur numéro de téléphone et leur adresse e-mail. Veuillez autoriser l’accès dans la prochaine fenêtre contextuelle pour découvrir les utilisateurs du carnet d’adresses joignables via Element. - Element peut accéder à votre carnet d’adresses pour trouver d’autres utilisateurs de Matrix avec leur adresse e-mail et leur numéro de téléphone. + ${app_name} peut accéder à votre carnet d’adresses pour trouver d’autres utilisateurs de Matrix avec leur numéro de téléphone et leur adresse e-mail. Veuillez autoriser l’accès dans la prochaine fenêtre contextuelle pour découvrir les utilisateurs du carnet d’adresses joignables via ${app_name}. + ${app_name} peut accéder à votre carnet d’adresses pour trouver d’autres utilisateurs de Matrix avec leur adresse e-mail et leur numéro de téléphone. \n \nAutorisez-vous l\'accès à vos contacts à cette fin \? Désolé. L’action n’a pas été réalisée, faute d’autorisations @@ -930,7 +930,7 @@ • Les notifications contiennent des métadonnées et des messages • Les notifications n’afficheront pas le contenu des messages Confidentialité des notifications - Element peut fonctionner en arrière-plan pour gérer vos notifications de façon sécurisée et confidentielle. Cela peut affecter l’utilisation de la batterie. + ${app_name} peut fonctionner en arrière-plan pour gérer vos notifications de façon sécurisée et confidentielle. Cela peut affecter l’utilisation de la batterie. Donner la permission Choisir une autre option Avatar d’avertissement @@ -942,8 +942,8 @@ Désactiver le compte Désactiver mon compte Envoyer des données analytiques - Element collecte des données analytiques anonymes pour nous permettre d’améliorer l’application. - Veuillez autoriser la collecte des données pour nous aider à améliorer Element. + ${app_name} collecte des données analytiques anonymes pour nous permettre d’améliorer l’application. + Veuillez autoriser la collecte des données pour nous aider à améliorer ${app_name}. Oui, je veux aider ! Un paramètre requis est manquant. Un paramètre n’est pas valide. @@ -965,7 +965,7 @@ Redemander les clés de chiffrement à vos autres sessions. Demande de clé envoyée. Demande envoyée - Veuillez lancer Element sur un autre appareil qui peut déchiffrer le message pour qu’il puisse envoyer les clés à cette session. + Veuillez lancer ${app_name} sur un autre appareil qui peut déchiffrer le message pour qu’il puisse envoyer les clés à cette session. Tapez ici… Envoyer votre voix continuer avec… @@ -1079,7 +1079,7 @@ Le Markdown a été activé. Le Markdown a été désactivé. Appels - Utiliser la sonnerie par défaut de Element pour les appels entrants + Utiliser la sonnerie par défaut de ${app_name} pour les appels entrants Sonnerie d’appel entrant Sélectionner la sonnerie pour les appels : Accepter @@ -1103,12 +1103,12 @@ Activer Paramètres de la session. Les notifications sont activées pour cette session. - Les notifications ne sont pas activées pour cette session. -\nVeuillez vérifier les paramètres de Element. + Les notifications ne sont pas activées pour cette session. +\nVeuillez vérifier les paramètres de ${app_name}. Activer Vérification des services Google Play L’APK des services Google Play est disponible et à jour. - Element utilise les services Google Play pour envoyer les notifications mais ils n’ont pas l’air d’être configurés correctement : + ${app_name} utilise les services Google Play pour envoyer les notifications mais ils n’ont pas l’air d’être configurés correctement : \n%1$s Réparer les services Google Play Jeton Firebase @@ -1130,22 +1130,22 @@ Le redémarrage du service a échoué Lancer au démarrage Le service démarrera quand l’appareil sera redémarré. - Le service ne démarrera pas quand l’appareil sera redémarré, vous ne recevrez pas de notifications tant que Element n’aura pas été lancé au moins une fois. + Le service ne démarrera pas quand l’appareil sera redémarré, vous ne recevrez pas de notifications tant que ${app_name} n’aura pas été lancé au moins une fois. Activer le démarrage au démarrage de l’appareil Vérifier les restrictions en arrière-plan - Les restrictions en arrière-plan sont désactivées pour Element. Ce test devrait être lancé en utilisant les données mobiles (pas le Wi-Fi). + Les restrictions en arrière-plan sont désactivées pour ${app_name}. Ce test devrait être lancé en utilisant les données mobiles (pas le Wi-Fi). \n%1$s - Les restrictions en arrière-plan sont activées pour Element. + Les restrictions en arrière-plan sont activées pour ${app_name}. \nLe travail qu’essayera de faire l’application sera restreint agressivement tant qu’elle sera en arrière-plan et cela pourra affecter les notifications. \n%1$s Désactiver les restrictions Optimisation de la batterie - Element n’est pas affecté par l’optimisation de la batterie. + ${app_name} n’est pas affecté par l’optimisation de la batterie. Si un utilisateur laisse un appareil débranché et immobile pour une longue durée, avec l’écran éteint, l’appareil entre dans le mode Doze. Cela empêche les applications d’accéder au réseau et reporte leurs travaux, synchronisations et alarmes standard. Ignorer l’optimisation Connexion en arrière-plan - Element doit garder une connexion à faible impact en arrière-plan afin d’avoir des notifications fiables. -\nSur l’écran suivant on vous demandera d’autoriser Element à toujours fonctionner en arrière-plan, veuillez accepter. + ${app_name} doit garder une connexion à faible impact en arrière-plan afin d’avoir des notifications fiables. +\nSur l’écran suivant on vous demandera d’autoriser ${app_name} à toujours fonctionner en arrière-plan, veuillez accepter. Donner la permission Une erreur est survenue lors de la vérification de votre adresse e-mail. Une erreur est survenue lors de la vérification de votre numéro de téléphone. @@ -1164,12 +1164,12 @@ Certaines notifications sont désactivées dans vos paramètres personnalisés. Échec du chargement de vos règles personnalisées, veuillez réessayer. Vérifier les paramètres - [%1$s] -\nCette erreur est indépendante de Element et, selon Google, cette erreur indique que l’appareil a enregistré trop d’applications avec FCM. Cette erreur ne survient que s’il y a un nombre d’applications extrême, et ne devrait donc pas affecter un utilisateur normal. - [%1$s] -\nCette erreur est indépendante de Element. Elle peut survenir pour plusieurs raisons. Cela peut fonctionner si vous réessayez plus tard. Vous pouvez aussi vérifier que le Service Google Play n’a pas un usage limité de données dans les paramètres système. Cela peut aussi arriver sur une ROM personnalisée. - [%1$s] -\nCette erreur est indépendante de Element. Il n’y pas de compte Google sur l’appareil. Veuillez ouvrir le gestionnaire de comptes et ajouter un compte Google. + [%1$s] +\nCette erreur est indépendante de ${app_name} et, selon Google, cette erreur indique que l’appareil a enregistré trop d’applications avec FCM. Cette erreur ne survient que s’il y a un nombre d’applications extrême, et ne devrait donc pas affecter un utilisateur normal. + [%1$s] +\nCette erreur est indépendante de ${app_name}. Elle peut survenir pour plusieurs raisons. Cela peut fonctionner si vous réessayez plus tard. Vous pouvez aussi vérifier que le Service Google Play n’a pas un usage limité de données dans les paramètres système. Cela peut aussi arriver sur une ROM personnalisée. + [%1$s] +\nCette erreur est indépendante de ${app_name}. Il n’y pas de compte Google sur l’appareil. Veuillez ouvrir le gestionnaire de comptes et ajouter un compte Google. Ajouter un compte Configurer les notifications sonores Configurer les notifications d’appel @@ -1180,7 +1180,7 @@ Silencieuse Veuillez saisir une phrase secrète La phrase secrète est trop faible - Veuillez supprimer la phrase secrète si vous voulez que Element génère une clé de récupération. + Veuillez supprimer la phrase secrète si vous voulez que ${app_name} génère une clé de récupération. Aucune session Matrix n’est disponible Ne perdez jamais vos messages chiffrés Les messages dans les salons chiffrés sont sécurisés avec un chiffrement de bout en bout. Seuls vous et le(s) destinataire(s) avez les clés pour lire ces messages. @@ -1310,7 +1310,7 @@ Les mots de passe ne correspondent pas Réponse de découverte du serveur d’accueil non valide Auto-compléter les options du serveur - Element a détecté une configuration de serveur personnalisée pour le domaine de votre identifiant « %1$s » : + ${app_name} a détecté une configuration de serveur personnalisée pour le domaine de votre identifiant « %1$s » : \n%2$s Utiliser la configuration Initialisation du service @@ -1425,7 +1425,7 @@ Changer Toutes les communautés Impossible d’avoir un aperçu de ce salon - L’aperçu des salons visibles par tout le monde n’est pas encore pris en charge par Element + L’aperçu des salons visibles par tout le monde n’est pas encore pris en charge par ${app_name} Salons Messages directs Nouveau salon @@ -1520,11 +1520,11 @@ Ajoutez un serveur d’identité dans vos paramètres pour réaliser cette action. Mode de synchronisation en arrière-plan Optimisé pour la batterie - Element se synchronisera en arrière-plan de façon à préserver les ressources limitées de l’appareil (batterie). + ${app_name} se synchronisera en arrière-plan de façon à préserver les ressources limitées de l’appareil (batterie). \nSelon l’état des ressources de votre appareil, la synchronisation peut être retardée par le système d’exploitation. Optimisé pour le temps réel - Element se synchronisera en arrière-plan de façon périodique à un moment précis (configurable). -\nCela aura un impact sur l’utilisation de la radio et de la batterie, une notification permanente sera affichée indiquant que Element est à l’écoute des évènements. + ${app_name} se synchronisera en arrière-plan de façon périodique à un moment précis (configurable). +\nCela aura un impact sur l’utilisation de la radio et de la batterie, une notification permanente sera affichée indiquant que ${app_name} est à l’écoute des évènements. Aucune synchronisation en arrière-plan Vous ne serez pas notifié(e) des messages entrants quand l’application est en arrière-plan. Échec de la mise à jour des paramètres. @@ -1608,7 +1608,7 @@ Ce contenu a été signalé comme inapproprié. \n \nSi vous ne voulez plus voir de contenu de cet utilisateur, vous pouvez l\'ignorer pour masquer ses messages. - Element a besoin de votre permission pour sauvegarder vos clés de chiffrement sur le disque. + ${app_name} a besoin de votre permission pour sauvegarder vos clés de chiffrement sur le disque. \n \nAutorisez l’accès dans le prochaine fenêtre pour pouvoir exporter vos clés manuellement. Il n’y a aucune connexion au réseau pour le moment @@ -1781,7 +1781,7 @@ \nReconnectez-vous pour accéder aux données et aux messages de votre compte. Vous perdrez l’accès à vos messages sécurisés sauf si vous vous connectez pour récupérer vos clés de chiffrement. Effacer les données - La session en cours est celle de l’utilisateur %1$s et vous fournissez des identifiants pour l’utilisateur %2$s. Ce n’est pas pris en charge par Element. + La session en cours est celle de l’utilisateur %1$s et vous fournissez des identifiants pour l’utilisateur %2$s. Ce n’est pas pris en charge par ${app_name}. \nEffacez d’abord les données, puis reconnectez-vous avec un autre compte. Votre lien matrix.to était malformé La description est trop courte @@ -1799,7 +1799,7 @@ Autres sessions Seuls les premiers résultats sont affichés, saisissez plus de lettres… Défaillance rapide - Element peut planter plus souvent quand une erreur inattendue survient + ${app_name} peut planter plus souvent quand une erreur inattendue survient Préfixe ¯\\_(ツ)_/¯ à un message en texte brut Activer le chiffrement Une fois qu’il est activé, le chiffrement ne peut pas être désactivé. @@ -1870,9 +1870,9 @@ Modérateur dans %1$s Personnalisé (%1$d) dans %2$s Aller à l’accusé de lecture - Element ne gère pas les évènements de type « %1$s » - Element ne gère pas les messages de type « %1$s » - Element a rencontré un problème lors de l’affichage du contenu de l’évènement ayant pour identifiant « %1$s » + ${app_name} ne gère pas les évènements de type « %1$s » + ${app_name} ne gère pas les messages de type « %1$s » + ${app_name} a rencontré un problème lors de l’affichage du contenu de l’évènement ayant pour identifiant « %1$s » Ne plus ignorer Cette session est incapable de partager cette vérification avec vos autres sessions. \nLa vérification sera sauvegardée localement et partagée dans une version future de l’application. @@ -1967,7 +1967,7 @@ Évènement supprimé par l’utilisateur, motif : %1$s Évènement modéré par l’administrateur du salon, motif : %1$s Les clés sont déjà à jour ! - Element Android + ${app_name} Android Demandes de clé Déverrouiller l’historique des messages chiffrés Actualiser @@ -2068,13 +2068,13 @@ Fichier multimédia ajouté à la galerie Impossible d’ajouter le fichier multimédia à la galerie Définir un nouveau mot de passe de compte… - Utilisez la dernière version de Element sur vos autres appareils : Element Web, Element pour Bureau, Element iOS, Element pour Android, ou un autre client Matrix qui prend en charge la signature croisée - Element Web -\nElement pour Bureau - Element iOS -\nElement Android + Utilisez la dernière version de ${app_name} sur vos autres appareils : ${app_name} Web, ${app_name} pour Bureau, ${app_name} iOS, ${app_name} pour Android, ou un autre client Matrix qui prend en charge la signature croisée + ${app_name} Web +\n${app_name} pour Bureau + ${app_name} iOS +\n${app_name} Android ou un autre client Matrix qui prend en charge la signature croisée - Utilisez la dernière version de Element sur vos autres appareils : + Utilisez la dernière version de ${app_name} sur vos autres appareils : Force la session de groupe sortante actuelle dans un salon chiffré à être abandonnée Seulement pris en charge dans les salons chiffrés Utilisez votre %1$s ou votre %2$s pour continuer. @@ -2135,11 +2135,11 @@ Chargement des langues disponibles… Ouvrir les termes de %s Se déconnecter du serveur d’identité %s \? - Ce serveur d’identité est obsolète. Element ne supporte que l’API V2. + Ce serveur d’identité est obsolète. ${app_name} ne supporte que l’API V2. Cette opération n’est pas possible. Le serveur d’accueil est obsolète. Veuillez d’abord configurer un serveur d’identité. Veuillez d’abord accepter les termes du serveur d’identité dans les paramètres. - Pour votre vie privée, Element prend uniquement en charge l’envoi des adresses e-mail et des numéros de téléphone hachés. + Pour votre vie privée, ${app_name} prend uniquement en charge l’envoi des adresses e-mail et des numéros de téléphone hachés. L’association a échoué. Il n’y a actuellement aucune association avec cet identifiant. Votre serveur d’accueil (%1$s) propose d’utiliser %2$s comme serveur d’identité @@ -2264,17 +2264,17 @@ Affichage de la notification Vous voyez la notification ! Cliquez-moi dessus ! La notification a été cliquée ! - Appel échoué + Appel échoué Les messages de ce salon sont chiffrés de bout en bout. Vous avez créé et configuré ce salon. Confirmer le code pour le désactiver - Le code est requis à l\'ouverture d\'Element. - Le code est demandé après 2 minutes d\'inutilisation d\'Element. + Le code est requis à l\'ouverture d\'${app_name}. + Le code est demandé après 2 minutes d\'inutilisation d\'${app_name}. Demander le code après 2 minutes Afficher uniquement le numéro de messages non-lus dans une simple notification. Afficher les détails comme les noms des salons et le contenu du message. Afficher le contenu dans les notifications - Le code est la seule façon de déverrouiller Element. + Le code est la seule façon de déverrouiller ${app_name}. Activer les données biométriques comme les empreintes digitales ou la reconnaissance faciale. Activer les données biométriques Si vous voulez réinitialiser votre code, appuyez sur Code oublié pour vous déconnecter et le réinitialiser. @@ -2471,8 +2471,8 @@ Partager mon code Scanner un code QR Ce n\'est pas un code QR matrix valide - 🔐️ Rejoins-moi sur element - Salut, parle-moi sur Element : %s + 🔐️ Rejoins-moi sur ${app_name} + Salut, parle-moi sur ${app_name} : %s Ajouter des amis Ajouter des gens "Sujet : " diff --git a/vector/src/main/res/values-fy/strings.xml b/vector/src/main/res/values-fy/strings.xml index bce5836731..0e2bad095a 100644 --- a/vector/src/main/res/values-fy/strings.xml +++ b/vector/src/main/res/values-fy/strings.xml @@ -127,7 +127,7 @@ Brûkerskatalogus Allinnich Matrix-kontakten Gjin petearen - Jo hawwe Element gjin tagong ta jo lokale kontakten jûn + Jo hawwe ${app_name} gjin tagong ta jo lokale kontakten jûn Gjin resultaten Gjin identiteitsserver konfigurearre. diff --git a/vector/src/main/res/values-gl/strings.xml b/vector/src/main/res/values-gl/strings.xml index ad08235a57..bbfe838ca7 100644 --- a/vector/src/main/res/values-gl/strings.xml +++ b/vector/src/main/res/values-gl/strings.xml @@ -341,7 +341,7 @@ Directorio de usuario Só contactos Matrix Sen conversas - Non lle permitiches a Element acceder ós contactos locais + Non lle permitiches a ${app_name} acceder ós contactos locais Sen resultados Salas Directorio de salas @@ -525,7 +525,7 @@ Desactivar a miña conta Analytics Enviar datos de análises - Element recolle información analítica anónima para permitirnos mellorar o aplicativo. + ${app_name} recolle información analítica anónima para permitirnos mellorar o aplicativo. Si, quero axudar! ID Nome @@ -720,7 +720,7 @@ Unha ligazón de correo na que aínda non se premeu Volver a pedir as chaves de cifrado do outro dispositivo seu. Petición enviada - Inicie Element noutro dispositivo que poida descifrar esta mensaxe e que despois desde alí lle poida enviar as chaves a este dispositivo. + Inicie ${app_name} noutro dispositivo que poida descifrar esta mensaxe e que despois desde alí lle poida enviar as chaves a este dispositivo. 1 cambio de participantes %d cambios de participantes @@ -809,7 +809,7 @@ Obxectivos das notificacións Desactivar conta Segredo das notificacións - Element pode estar agochado e seguir traballando na xestión das notificacións dun xeito seguro e privado (inda que iso podería afectar ao uso da batería). + ${app_name} pode estar agochado e seguir traballando na xestión das notificacións dun xeito seguro e privado (inda que iso podería afectar ao uso da batería). Outorgar permisos Escolla outra opción Accedeuse como diff --git a/vector/src/main/res/values-he/strings.xml b/vector/src/main/res/values-he/strings.xml index a8b9588f96..abeed9287d 100644 --- a/vector/src/main/res/values-he/strings.xml +++ b/vector/src/main/res/values-he/strings.xml @@ -151,7 +151,7 @@ לא הוגדר שרת זהות. אין תוצאות נוספות אין תוצאות - לא אפשרת לאלמנט לגשת לאנשי הקשר המקומיים שלך + לא אפשרת לאלמנט לגשת לאנשי הקשר המקומיים שלך האם אתה בטוח שברצונך להתחיל צ\'אט חדש עם %s\? שלח קול התחל שיחת וידאו @@ -279,7 +279,7 @@ בחר מכשיר סאונד נכשל החיבור בזמן אמת. \nאנא בקש ממנהל שרת הבית שלך להגדיר שרת TURN על מנת שהשיחות יעבדו בצורה אמינה. - שיחת האלמנט נכשלה + שיחת האלמנט נכשלה אל תשאל אותי שוב נסה להשתמש ב-%s השיחה נכשלה עקב שרת שהוגדר כהלכה @@ -309,22 +309,22 @@ אפשר הרשאה לגשת לאנשי הקשר שלך. כדי לסרוק קוד QR, עליך לאפשר גישה למצלמה. מצטער. הפעולה לא בוצעה בגלל הרשאות חסרות - אלמנט יכול לבדוק את פנקס הכתובות שלך כדי למצוא משתמשי מטריקס אחרים על סמך מספרי הדוא\"ל והטלפון שלהם. + אלמנט יכול לבדוק את פנקס הכתובות שלך כדי למצוא משתמשי מטריקס אחרים על סמך מספרי הדוא\"ל והטלפון שלהם. \n \nהאם אתה מסכים לשתף את פנקס הכתובות שלך למטרה זו\? - אלמנט יכול לבדוק את פנקס הכתובות שלך כדי למצוא משתמשי מטריקס אחרים על סמך מספרי הדוא\"ל והטלפון שלהם. אם אתה מסכים לשתף את פנקס הכתובות שלך למטרה זו, אנא הגש גישה בחלון הקופץ הבא. - אלמנט זקוק להרשאה כדי לגשת למצלמה ולמיקרופון שלך כדי לבצע שיחות וידאו. + אלמנט יכול לבדוק את פנקס הכתובות שלך כדי למצוא משתמשי מטריקס אחרים על סמך מספרי הדוא\"ל והטלפון שלהם. אם אתה מסכים לשתף את פנקס הכתובות שלך למטרה זו, אנא הגש גישה בחלון הקופץ הבא. + אלמנט זקוק להרשאה כדי לגשת למצלמה ולמיקרופון שלך כדי לבצע שיחות וידאו. \n \nאנא אפשר גישה בחלונות הקופצים הבאים כדי להיות מסוגל לבצע את השיחה. " \n \nאנא אפשר גישה בחלון הקופץ הבא כדי שתוכל לבצע את השיחה." - אלמנט זקוק להרשאה כדי לגשת למיקרופון שלך כדי לבצע שיחות שמע. + אלמנט זקוק להרשאה כדי לגשת למיקרופון שלך כדי לבצע שיחות שמע. " \n \nאנא אפשר גישה בחלון הקופץ הבא כדי שתוכל לבצע את השיחה." - אלמנט זקוק להרשאה כדי לגשת למצלמה שלך כדי לצלם תמונות ושיחות וידאו. - אלמנט זקוק להרשאה כדי לגשת לספריית התמונות והווידיאו שלך כדי לשלוח ולשמור קבצים מצורפים. + אלמנט זקוק להרשאה כדי לגשת למצלמה שלך כדי לצלם תמונות ושיחות וידאו. + אלמנט זקוק להרשאה כדי לגשת לספריית התמונות והווידיאו שלך כדי לשלוח ולשמור קבצים מצורפים. \n \nאנא אפשר גישה בחלון הקופץ הבא כדי שתוכל לשלוח קבצים מהטלפון שלך. מידע @@ -350,7 +350,7 @@ רינגטון שיחה נכנסת ישתמש ב-%s כסיוע כאשר השרת הביתי שלך אינו מציע כזה (כתובת ה- IP שלך תשותף במהלך שיחה) אפשר שרת עזרה לשיחות - השתמש ברינגטון ברירת המחדל של אלמנט לשיחות נכנסות + השתמש ברינגטון ברירת המחדל של אלמנט לשיחות נכנסות בקש אישור לפני שמתחילים בשיחה מנע שיחה מקרית שיחות @@ -375,7 +375,7 @@ רשימת קבוצות קרא את רשימת הקבלות - הפעל את Element במכשיר אחר שיכול לפענח את ההודעה כדי שיוכל לשלוח את המפתחות להפעלה זו. + הפעל את Element במכשיר אחר שיכול לפענח את ההודעה כדי שיוכל לשלוח את המפתחות להפעלה זו. הבקשה נשלחה בקשת המפתח נשלחה. בקש מחדש מפתחות הצפנה מהפעלות האחרות שלך. @@ -421,10 +421,10 @@ עדכון ההגדרות נכשל. לא תקבל הודעה על הודעות נכנסות כאשר האפליקציה ברקע. אין סנכרון רקע - אלמנט יסונכרן ברקע מעת לעת בזמן מדויק (ניתן להגדרה). + אלמנט יסונכרן ברקע מעת לעת בזמן מדויק (ניתן להגדרה). \nזה ישפיע על השימוש ברדיו ובסוללה, תוצג הודעה קבועה לפיה אלמנט מאזין לאירועים. מותאם לזמן אמת - אלמנט יסונכרן ברקע באופן שישמור על המשאבים המוגבלים של המכשיר (סוללה). + אלמנט יסונכרן ברקע באופן שישמור על המשאבים המוגבלים של המכשיר (סוללה). \nבהתאם למצב משאבי המכשיר שלך, ייתכן שהסנכרון יידחה על ידי מערכת ההפעלה. מותאם לסוללה מצב סנכרון רקע @@ -455,17 +455,17 @@ רגיל התעלם מאופטימיזציה אם משתמש משאיר מכשיר מחובר לחשמל ויציב לתקופה מסוימת, כשהמסך כבוי, המכשיר עובר למצב Doze. זה מונע מאפליקציות גישה לרשת ומגדיר את העבודות, הסנכרונים וההתראות הסטנדרטיות שלהם. - אלמנט אינו מושפע מתהליך מיטוב הסוללה. + אלמנט אינו מושפע מתהליך מיטוב הסוללה. אופטימיזציה של הסוללה השבת הגבלות - מגבלות רקע מופעלות עבור Element. + מגבלות רקע מופעלות עבור Element. \nהעבודה שהאפליקציה מנסה לעשות תוגבל באגרסיביות בזמן שהיא ברקע, וזה עלול להשפיע על ההודעות. \n%1$s - מגבלות רקע מושבתות עבור Element. יש להריץ בדיקה זו באמצעות נתונים ניידים (ללא WIFI). + מגבלות רקע מושבתות עבור Element. יש להריץ בדיקה זו באמצעות נתונים ניידים (ללא WIFI). \n%1$s בדוק מגבלות רקע הפעל את התחלה לאחר אתחול - השירות לא יופעל עם הפעלת המכשיר מחדש, לא תקבל התראות עד שאלמנט ייפתח לפחות פעם אחת. + השירות לא יופעל עם הפעלת המכשיר מחדש, לא תקבל התראות עד שאלמנט ייפתח לפחות פעם אחת. השירות יתחיל עם הפעלת המכשיר מחדש. הפעל לאחר אתחול השירות נכשל מלעלות מחדש @@ -489,11 +489,11 @@ אסימון FCM נרשם בהצלחה ל- HomeServer. רישום אסימונים הוסף חשבון - [%1$s] + [%1$s] \nשגיאה זו אינה בשליטה על אלמנט. אין חשבון Google בטלפון. אנא פתח את מנהל החשבון והוסף חשבון Google. - [%1$s] + [%1$s] \nשגיאה זו אינה בשליטה על אלמנט. זה יכול להתרחש מכמה סיבות. אולי זה יעבוד אם תנסה שוב מאוחר יותר, תוכל גם לבדוק ששירות Google Play אינו מוגבל בשימוש נתונים בהגדרות המערכת, או ששעון המכשיר שלך תקין, או שזה יכול לקרות ב- ROM מותאם אישית. - [%1$s] + [%1$s] \nשגיאה זו איננה בשליטה על Element ולפי גוגל, שגיאה זו מצביעה על כך שלמכשיר יש יותר מדי אפליקציות הרשומות ב- FCM. השגיאה מתרחשת רק במקרים שבהם ישנם מספרים קיצוניים של אפליקציות, כך שהיא לא אמורה להשפיע על המשתמש הממוצע. נכשל באחזור אסימון FCM: \n%1$s @@ -501,7 +501,7 @@ \n%1$s אסימון Firebase תקן שירותי Google Play - אלמנט משתמש בשירותי Google Play כדי להעביר הודעות פוש אך נראה שהוא אינו מוגדר כהלכה: + אלמנט משתמש בשירותי Google Play כדי להעביר הודעות פוש אך נראה שהוא אינו מוגדר כהלכה: \n%1$s ה- APK של שירותי Google Play זמין ומעודכן. בדיקת שירותי הפעלה @@ -619,7 +619,7 @@ שים לב שחלק מסוגי ההודעות מוגדרים כשתיקים (יפיקו התראה ללא צליל). הגדרות מותאמות אישית. אפשר - התראות אינן מופעלות עבור הפעלה זו. + התראות אינן מופעלות עבור הפעלה זו. \nאנא בדוק את הגדרות האלמנט. התראות מופעלות להפעלה זו. הגדרות מושב. @@ -648,7 +648,7 @@ לא הוספה כתובת דוא\"ל לחשבונך כתובות דוא\"ל נדרש אימות - אינך יכול לעשות זאת ממכשיר נייד + אינך יכול לעשות זאת ממכשיר נייד אשר את סיסמתך הצג את פרטי היישום בהגדרות המערכת. מידע על האפליקציה @@ -1071,7 +1071,7 @@ \nגבה את המפתחות שלך בצורה מאובטחת כדי לא לאבד אותם. לעולם אל תאבד הודעות מוצפנות אין מושב מטריקס זמין - אנא מחק את משפט הסיסמה אם ברצונך ש- Element ייצור מפתח שחזור. + אנא מחק את משפט הסיסמה אם ברצונך ש- Element ייצור מפתח שחזור. משפט הסיסמה חלש מדי אנא הזן משפט סיסמה משפט הסיסמה אינו תואם @@ -1316,7 +1316,7 @@ לאחר הפעלתו, לא ניתן להשבית את ההצפנה. אפשר הצפנה הוסף לפני ¯ \\ _ (ツ) _ / ¯ להודעת טקסט רגיל - אלמנט עלול לקרוס לעיתים קרובות יותר כאשר מתרחשת שגיאה בלתי צפויה + אלמנט עלול לקרוס לעיתים קרובות יותר כאשר מתרחשת שגיאה בלתי צפויה כישלון-מהיר מציג רק את התוצאות הראשונות, הקלד עוד אותיות … פעולות אחרות @@ -1333,7 +1333,7 @@ סנכרון ראשוני … התיאור קצר מדי הקישור שלך ל- matrix.to היה תקין - ההפעלה הנוכחית מיועדת למשתמש %1$s ואתה מספק אישורי משתמש %2$s. זה אינו נתמך על ידי אלמנט. + ההפעלה הנוכחית מיועדת למשתמש %1$s ואתה מספק אישורי משתמש %2$s. זה אינו נתמך על ידי אלמנט. \nראשית נקה נתונים ואז היכנס שוב לחשבון אחר. נקה נתונים תאבד את הגישה להודעות מאובטחות אלא אם תיכנס בכדי לשחזר את מפתחות ההצפנה שלך. @@ -1491,7 +1491,7 @@ כל ההודעות (רועשות) התעלם ממשתמש זה אין חיבור רשת כרגע - אלמנט זקוק להרשאה כדי לשמור את מפתחות ה- E2E שלך בדיסק. + אלמנט זקוק להרשאה כדי לשמור את מפתחות ה- E2E שלך בדיסק. \n \nאנא אפשר גישה בחלון הקופץ הבא כדי שתוכל לייצא את המפתחות שלך באופן ידני. תוכן זה דווח כבלתי הולם. @@ -1714,7 +1714,7 @@ לא ניתן להציג תצוגה מקדימה של חדר זה. האם אתה רוצה להצטרף אליו\? בשלב זה אין גישה לחדר זה. \nנסה שוב מאוחר יותר, או בקש ממנהל החדר לבדוק אם יש לך גישה. - התצוגה המקדימה של החדר הקריא בעולם עדיין אינה נתמכת ב- Element + התצוגה המקדימה של החדר הקריא בעולם עדיין אינה נתמכת ב- Element לא ניתן להציג תצוגה מקדימה של חדר זה כל הקהילות אנא המתינו… @@ -1791,7 +1791,7 @@ אמת את זה על ידי השוואה של מחרוזת טקסט קצרה. הוצאת מחשבון בגלל אישורים לא חוקיים או שפג תוקפם. השתמש בקונפיגורציה - אלמנט זיהה תצורת שרת מותאמת אישית לדומיין userId שלך \"%1$s\": + אלמנט זיהה תצורת שרת מותאמת אישית לדומיין userId שלך \"%1$s\": \n%2$s השלם אוטומטית אפשרויות שרת תגובת גילוי שרת בית לא חוקית @@ -1817,13 +1817,13 @@ אשר PIN כדי להשבית PIN שנה את קוד ה- PIN הנוכחי שלך שנה PIN - קוד PIN נדרש בכל פעם שאתה פותח את Element. - קוד PIN נדרש לאחר שתי דקות של אי שימוש ב- Element. + קוד PIN נדרש בכל פעם שאתה פותח את Element. + קוד PIN נדרש לאחר שתי דקות של אי שימוש ב- Element. דרוש מספר PIN לאחר 2 דקות הצג רק מספר הודעות שלא נקראו בהודעה פשוטה. הצג פרטים כמו שמות החדרים ותוכן ההודעה. הצג תוכן בהתראות - קוד PIN הוא הדרך היחידה לפתוח את Element. + קוד PIN הוא הדרך היחידה לפתוח את Element. אפשר ביומטריה ספציפית למכשירים, כמו טביעות אצבע וזיהוי פנים. %2$s חדר נמצא עבור %1$s @@ -1972,17 +1972,17 @@ מצב שמירת נתונים מחיל מסנן ספציפי כך שמסוננים עדכוני נוכחות והודעות הקלדה. מצב שמירת נתונים כן, אני רוצה לעזור! - אנא אפשר ניתוח נתונים כדי לעזור לנו לשפר את Element. - אלמנט אוסף ניתוח אנונימי כדי לאפשר לנו לשפר את היישום. + אנא אפשר ניתוח נתונים כדי לעזור לנו לשפר את Element. + אלמנט אוסף ניתוח אנונימי כדי לאפשר לנו לשפר את היישום. שלח נתוני ניתוח ניתוח נתונים הענק הרשאה - אלמנט צריך לשמור על חיבור רקע בעל השפעה נמוכה על מנת לקבל הודעות אמינות. + אלמנט צריך לשמור על חיבור רקע בעל השפעה נמוכה על מנת לקבל הודעות אמינות. \nבמסך הבא תתבקש לאפשר לאלמנט לרוץ תמיד ברקע, אנא קבל. חיבור ברקע בחר באפשרות אחרת מתן הרשאה - אלמנט יכול לרוץ ברקע כדי לנהל את ההתראות שלך בצורה מאובטחת ופרטית. זה עשוי להשפיע על השימוש בסוללה. + אלמנט יכול לרוץ ברקע כדי לנהל את ההתראות שלך בצורה מאובטחת ופרטית. זה עשוי להשפיע על השימוש בסוללה. פרטיות הודעות נהל את הגדרות הגילוי שלך. תַגלִית @@ -2005,7 +2005,7 @@ בטל את נעילת היסטוריית ההודעות המוצפנות ייצוא ביקורת בקשות מפתח - אלמנט אנדרואיד + אלמנט אנדרואיד המפתחות כבר מעודכנים! האירוע בהנחיית מנהל החדר, סיבה: %1$s האירוע נמחק על ידי המשתמש, הסיבה: %1$s @@ -2117,7 +2117,7 @@ הפעלה זו אינה יכולה לשתף את האימות הזה עם הפעלות אחרות שלך. \nהאימות יישמר באופן מקומי וישותף בגרסה עתידית של האפליקציה. בטל התעלמות - אלמנט נתקל בבעיה בעת הצגת תוכן האירוע עם המזהה \'%1$s\' + אלמנט נתקל בבעיה בעת הצגת תוכן האירוע עם המזהה \'%1$s\' %1$s @ %2$s שולח את ההודעה הנתונה עם קונפטי תתחיל מחדש ללא היסטוריה, ללא הודעות, מכשירים מאומתים או משתמשים מאומתים @@ -2132,13 +2132,13 @@ השתמש ב- %1$s שלך או השתמש ב- %2$s שלך כדי להמשיך. נתמך רק בחדרים מוצפנים מכריח את ההפעלה הקבוצתית החוצה הנוכחית בחדר מוצפן להיזרק - השתמש באלמנט האחרון במכשירים האחרים שלך: + השתמש באלמנט האחרון במכשירים האחרים שלך: או לקוח מטריקס אחר עם יכולת חתימה צולבת - אלמנט iOS + אלמנט iOS \nאלמנט אנדרואיד - רשת האינטרנט + רשת האינטרנט \nשולחן העבודה של אלמנט - השתמש באלמנט העדכני ביותר במכשירים האחרים שלך, Element Web, Element Desktop, Element iOS, Element for Android, או לקוח מטריקס אחר עם יכולת חתימה צולבת + השתמש באלמנט העדכני ביותר במכשירים האחרים שלך, Element Web, Element Desktop, Element iOS, Element for Android, או לקוח מטריקס אחר עם יכולת חתימה צולבת הגדר סיסמת חשבון חדשה … לא ניתן היה לשמור את קובץ המדיה לא ניתן היה להוסיף קובץ מדיה לגלריה @@ -2326,11 +2326,11 @@ הסכמת המשתמש לא סופקה. אין קשר נוכחי למזהה זה. העמותה נכשלה. - למען הפרטיות שלך, אלמנט תומך רק בשליחת הודעות דוא\"ל של משתמשים, בליל ומספר טלפון. + למען הפרטיות שלך, אלמנט תומך רק בשליחת הודעות דוא\"ל של משתמשים, בליל ומספר טלפון. אנא קבל תחילה את התנאים של שרת הזהות בהגדרות. אנא הגדר תחילה שרת זהות. פעולה זו אינה אפשרית. שרת הבית מיושן. - שרת זהות זה מיושן .Element תומך רק ב- API V2. + שרת זהות זה מיושן .Element תומך רק ב- API V2. להתנתק משרת הזהות%s\? תנאים פתוחים של%s טוען שפות זמינות … @@ -2349,8 +2349,8 @@ זה לא קוד QR מטריציוני תקף הזמנות נשלחו אל%1$s ו-%2$s ההזמנה נשלחה אל%1$s - 🔐️ הצטרפו אלי באלמנט - היי, דבר איתי באלמנט:%s + 🔐️ הצטרפו אלי באלמנט + היי, דבר איתי באלמנט:%s להזמין חברים הזמן משתמשים מזמין משתמשים … diff --git a/vector/src/main/res/values-hr/strings.xml b/vector/src/main/res/values-hr/strings.xml index 444e3f722b..566025a7d0 100644 --- a/vector/src/main/res/values-hr/strings.xml +++ b/vector/src/main/res/values-hr/strings.xml @@ -115,7 +115,7 @@ Popis korisnika Samo kontakti u Matrixu Nema razgovora - Niste Elementu omogućili pristup Vašim lokalnim kontaktima + Niste ${app_name}u omogućili pristup Vašim lokalnim kontaktima Nema rezultata Nije podešen poslužitelj identiteta. Sobe @@ -247,7 +247,7 @@ Ponovno zatražite ključeve za šifriranje od Vaših drugih sesija. Zahtjev za ključ je poslan. Zahtjev poslan - Pokrenite Element na nekom drugom uređaju koji može dešifrirati poruku kako bi poslao ključeve ovoj sesiji. + Pokrenite ${app_name} na nekom drugom uređaju koji može dešifrirati poruku kako bi poslao ključeve ovoj sesiji. Popis potvrda o pročitanim porukama Popis grupa @@ -269,7 +269,7 @@ Naziv sobe Tema sobe Pozivi - Koristi zadan zvuk tona Elementa za dolazne pozive + Koristi zadan zvuk tona ${app_name}a za dolazne pozive Dozvoli rezervnog poslužitelja za pozivnog pomoćnika Koristit će se %s kao pomoćnik u slučaju da ga Vaš poslužitelj nema (Vaša IP adresa će biti podijeljena tijekom poziva) Zvuk tona dolaznog poziva @@ -291,22 +291,22 @@ Napravi fotografiju ili video zapis Nije moguće snimiti video zapis Informacije - Element treba dozvolu pristupa Vašoj kolekciji fotografija i video zapisa za slanje i spremanje privitaka. + ${app_name} treba dozvolu pristupa Vašoj kolekciji fotografija i video zapisa za slanje i spremanje privitaka. \n \nOmogućite pristup putem sljedećeg skočnog prozora kako biste mogli slati datoteke s Vašeg uređaja. - Element treba dozvolu pristupa Vašoj kameri za snimanje fotografija i za video pozive. + ${app_name} treba dozvolu pristupa Vašoj kameri za snimanje fotografija i za video pozive. " \n \nOmogućite pristup putem sljedećeg skočnog prozora kako biste mogli uspostaviti poziv." - Element treba dozvolu pristupa Vašem mikrofonu za obavljanje zvučnih poziva. + ${app_name} treba dozvolu pristupa Vašem mikrofonu za obavljanje zvučnih poziva. " \n \nOmogućite pristup putem sljedećeg skočnog prozora kako biste mogli uspostaviti poziv." - Element treba dozvolu pristupa Vašoj kameri i mikrofonu za obavljanje video poziva. + ${app_name} treba dozvolu pristupa Vašoj kameri i mikrofonu za obavljanje video poziva. \n \nOmogućite pristup putem sljedećih skočnih prozora kako biste mogli uspostaviti poziv. - Element može provjeriti Vaš imenik kako bi našao druge korisnike Matrixa temeljem njihove e-pošte i telefonskih brojeva. Ako se slažete podijeliti imenik u ove svrhe, dozvolite pristup putem sljedećeg skočnog prozora. - Element može provjeriti Vaš imenik kako bi našao druge korisnike Matrixa temeljem njihove e-pošte i telefonskih brojeva. + ${app_name} može provjeriti Vaš imenik kako bi našao druge korisnike Matrixa temeljem njihove e-pošte i telefonskih brojeva. Ako se slažete podijeliti imenik u ove svrhe, dozvolite pristup putem sljedećeg skočnog prozora. + ${app_name} može provjeriti Vaš imenik kako bi našao druge korisnike Matrixa temeljem njihove e-pošte i telefonskih brojeva. \n \nŽelite li podijeliti imenik u ove svrhe\? Nažalost, radnja nije izvršena zbog nedostatka dozvola @@ -513,7 +513,7 @@ Prihvatite certifikat samo ako je poslužiteljski administrator objavio otisak prsta koji odgovara gore navedenom otisku. Smanji prioritet Potvrdite Vašu lozinku - Ovo nije moguće napraviti iz mobilne inačice Elementa + Ovo nije moguće napraviti iz mobilne inačice ${app_name}a Potrebna je ovjera Napredne postavke obavijesti Važnost obavijesti po događajima @@ -537,8 +537,8 @@ Uključi Postavke sesije. Obavijesti su uključene za ovu sesiju. - Obavijesti su isključene za ovu sesiju. -\nProvjerite postavke Elementa. + Obavijesti su isključene za ovu sesiju. +\nProvjerite postavke ${app_name}a. Uključi Prilagođene postavke. Uočite da su neke poruke postavljene na tiho (doći će do obavijesti bez zvuka). @@ -547,7 +547,7 @@ Provjeri postavke Provjera Usluga za Play APK Usluga za Google Play je dostupan i ažuriran. - Element koristi Usluge za Google Play kako bi isporučio poruke, no čini se da nisu ispravno podešene. + ${app_name} koristi Usluge za Google Play kako bi isporučio poruke, no čini se da nisu ispravno podešene. \n%1$s Popravi Usluge za Play Firebaseova oznaka @@ -555,12 +555,12 @@ \n%1$s Neuspješno dohvaćanje oznake FCM-a: \n%1$s - [%1$s] -\nElement nema kontrolu nad ovom greškom te prema Googleu ova greška ukazuje da uređaj ima previše prijavljenih aplikacija na FCM-u. Greška se pojavljuje samo u slučajevima u kojima postoji krajnje mnogo aplikacija te to ne bi trebao biti slučaj kod prosječnog korisnika. - [%1$s] -\nElement nema kontrolu nad ovom greškom. Nekoliko je mogućih razloga za grešku. Možda će raditi ako kasnije ponovno pokušate. Također u postavkama sustava možete provjeriti da Usluge za Google Play nisu ograničene u korištenju podatkovnog prometa i da je sat Vašeg uređaja točan. Greška je moguća i na prilagođenim ROM-ovima. - [%1$s] -\nElement nema kontrolu nad ovom greškom. Na uređaju ne postoji račun pri Googleu. Možete otvoriti upravitelja računima i dodati račun pri Googleu. + [%1$s] +\n${app_name} nema kontrolu nad ovom greškom te prema Googleu ova greška ukazuje da uređaj ima previše prijavljenih aplikacija na FCM-u. Greška se pojavljuje samo u slučajevima u kojima postoji krajnje mnogo aplikacija te to ne bi trebao biti slučaj kod prosječnog korisnika. + [%1$s] +\n${app_name} nema kontrolu nad ovom greškom. Nekoliko je mogućih razloga za grešku. Možda će raditi ako kasnije ponovno pokušate. Također u postavkama sustava možete provjeriti da Usluge za Google Play nisu ograničene u korištenju podatkovnog prometa i da je sat Vašeg uređaja točan. Greška je moguća i na prilagođenim ROM-ovima. + [%1$s] +\n${app_name} nema kontrolu nad ovom greškom. Na uređaju ne postoji račun pri Googleu. Možete otvoriti upravitelja računima i dodati račun pri Googleu. Dodaj račun Registracija oznake Oznaka FCM-a je uspješno registrirana pri Vašem poslužitelju. @@ -576,17 +576,17 @@ Neuspjelo ponovno pokretanje servisa Pokreni pri podizanju sustava Servis će se pokrenuti prilikom ponovnog pokretanja uređaja. - Servis se neće pokrenuti sa ponovnim pokretanjem uređaja pa nećete primati obavijesti sve dok ne otvorite Element. + Servis se neće pokrenuti sa ponovnim pokretanjem uređaja pa nećete primati obavijesti sve dok ne otvorite ${app_name}. Omogući pokretanje pri podizanju sustava Provjeri pozadinska ograničenja - Pozadinska su ograničenja onemogućena za Element. Ovaj test trebate izvršiti putem podatkovne veze (bez WIFI-ja). + Pozadinska su ograničenja onemogućena za ${app_name}. Ovaj test trebate izvršiti putem podatkovne veze (bez WIFI-ja). \n%1$s - Pozadinska su ograničenja omogućena za Element. + Pozadinska su ograničenja omogućena za ${app_name}. \nRadnje koje aplikacija pokušava napraviti su bitno ograničene dok je u pozadini i ovo možete utjecati na obavijesti. \n%1$s Onemogući ograničenja Optimiranje baterije - Optimiranje baterije ne utječe na Element. + Optimiranje baterije ne utječe na ${app_name}. Ako korisnik uz ugašen zaslon ostavi uređaj nepriključenog i u mirovanju tijekom nekog vremena, uređaj će ući u način drijemanja. Ovo aplikacijama onemogućuje pristup mreži i odgađa njihove zadatke, sinkronizaciju i uobičajene alarme. Zanemari optimiranje Obično @@ -616,11 +616,11 @@ Pozadinska sinkronizacija Način pozadinske sinkronizacije (eksperimentalno) Optimirano za bateriju - Element će sinkronizirati u pozadini na način koji čuva ograničena sredstva uređaja (baterija). + ${app_name} će sinkronizirati u pozadini na način koji čuva ograničena sredstva uređaja (baterija). \nOvisno o stanju sredstava uređaja, operacijski sustav može odgoditi sinkronizaciju. Optimirano za stvarno vrijeme - Element će u pozadini i periodično u točno određeno vrijeme koje je podesivo vršiti sinkronizaciju. -\nOvo će imati utjecaja na korištenje radijskog sustava i potrošnju baterije. Uočit ćete stalno prikazanu obavijest da Element osluškuje događaje. + ${app_name} će u pozadini i periodično u točno određeno vrijeme koje je podesivo vršiti sinkronizaciju. +\nOvo će imati utjecaja na korištenje radijskog sustava i potrošnju baterije. Uočit ćete stalno prikazanu obavijest da ${app_name} osluškuje događaje. Bez pozadinske sinkronizacije Nećete primati obavijesti o dolaznim porukama kada je aplikacija u pozadini. Neuspjela promjena postavki. @@ -679,17 +679,17 @@ Pronalaženje Upravljajte Vašim postavkama za pronalaženje. Privatnost obavještavanja - Element se može izvršavati u pozadini kako bi sigurno i privatno upravljao Vašim obavijestima. Ovo može utjecati na potrošnju baterije. + ${app_name} se može izvršavati u pozadini kako bi sigurno i privatno upravljao Vašim obavijestima. Ovo može utjecati na potrošnju baterije. Dozvoli Izaberi drugu opciju Pozadinska veza - Element treba održati pozadinsku vezu s malim utjecajem kako bi imao pouzdane obavijesti. -\nNa sljedećem zaslonu potvrdite Elementov zahtjev za stalnim izvršavanjem u pozadini. + ${app_name} treba održati pozadinsku vezu s malim utjecajem kako bi imao pouzdane obavijesti. +\nNa sljedećem zaslonu potvrdite ${app_name}ov zahtjev za stalnim izvršavanjem u pozadini. Dozvoli Analitika Pošalji analitičke podatke - Element skuplja anonimnu analitiku kako bi se unaprijedila aplikacija. - Omogućite analitiku ako želite pomoći unaprijediti Element. + ${app_name} skuplja anonimnu analitiku kako bi se unaprijedila aplikacija. + Omogućite analitiku ako želite pomoći unaprijediti ${app_name}. Da, želim pomoći! Način uštede podataka Način uštede podataka primjenjuje određeno izdvajanje u kojem se ne navode novosti o prisutnosti i obavijesti o tipkanju. @@ -902,7 +902,7 @@ Fraza-lozinka se ne podudara Unesite fraza-lozinku Fraza-lozinka je preslaba - Izbrišite fraza-lozinku ako želite da Element generira ključ za obnovu. + Izbrišite fraza-lozinku ako želite da ${app_name} generira ključ za obnovu. Zahtjev za potvrdom %s želi potvrditi Vašu sesiju Korisnik je prekinuo potvrdu @@ -950,7 +950,7 @@ Pričekajte… Sve zajednice Nije moguće pregledati sobu - Pregled sobe u koju svatko ima uvid još nije podržan u Element-u + Pregled sobe u koju svatko ima uvid još nije podržan u ${app_name}-u Sobe Izravne poruke Nova soba @@ -1297,9 +1297,9 @@ Moderator u %1$s Prilagođeno (%1$d) u %2$s Skoči na potvrdu o pročitanoj poruci - Element ne podržava događaje tipa \'%1$s\' - Element ne podržava poruke tipa \'%1$s\' - Element je naišao na problem pri prikazu sadržaja događaja s identitetom \'%1$s\' + ${app_name} ne podržava događaje tipa \'%1$s\' + ${app_name} ne podržava poruke tipa \'%1$s\' + ${app_name} je naišao na problem pri prikazu sadržaja događaja s identitetom \'%1$s\' Ukloni zanemarivanje Nedavne sobe Druge sobe diff --git a/vector/src/main/res/values-hu/strings.xml b/vector/src/main/res/values-hu/strings.xml index 3f708657d8..e491722d8d 100644 --- a/vector/src/main/res/values-hu/strings.xml +++ b/vector/src/main/res/values-hu/strings.xml @@ -253,7 +253,7 @@ Helyi címjegyzék Csak Matrix névjegyek Nincsenek beszélgetések - Nem adtál hozzáférést a Elementnek a helyi névjegyeidhez + Nem adtál hozzáférést a ${app_name}nek a helyi névjegyeidhez Nincs találat Szobák Szobalista @@ -380,22 +380,22 @@ Kép vagy videó készítése Videorögzítés sikertelen Információ - A Elementnek szüksége van a fénykép- és videótárad elérési engedélyéhez a mellékletek küldéséhez és mentéséhez. + A ${app_name}nek szüksége van a fénykép- és videótárad elérési engedélyéhez a mellékletek küldéséhez és mentéséhez. \n \nEngedélyezd a hozzáférést a következő felugró ablakon, hogy fájlokat tudj küldeni a telefonodról. - Az Elementnek engedélyre van szüksége a kamera eléréséhez, hogy képeket tudj készítsen és videóhívást tudj indítani. + Az ${app_name}nek engedélyre van szüksége a kamera eléréséhez, hogy képeket tudj készítsen és videóhívást tudj indítani. " \n \nEngedélyezd a hozzáférést a következő felugró ablakon, hogy hívást tudj indítani." - A Elementnek engedélyre van szüksége a mikrofon eléréséhez, hogy hanghívás tudjon indítani. + A ${app_name}nek engedélyre van szüksége a mikrofon eléréséhez, hogy hanghívás tudjon indítani. " \n \nEngedélyezd a hozzáférést a következő felugró ablakon, hogy hívást tudj indítani." - A Elementnek engedélyre van szüksége a mikrofonod és kamerád eléréséhez, hogy videohívást tudj indítani. + A ${app_name}nek engedélyre van szüksége a mikrofonod és kamerád eléréséhez, hogy videohívást tudj indítani. \n \nEngedélyezd a hozzáférést a következő felugró ablakon, hogy hívást tudj indítani. - A Element a névjegyekben lévő e-mail és telefonszám alapján képes felkutatni más Matrix felhasználókat. Ha egyetértesz a névjegyek ilyen célú megosztásával, kérlek engedélyezd a hozzáférést a következő felugró üzenetben. - A Element a névjegyekben lévő e-mail és telefonszám alapján képes felkutatni más Matrix felhasználókat. + A ${app_name} a névjegyekben lévő e-mail és telefonszám alapján képes felkutatni más Matrix felhasználókat. Ha egyetértesz a névjegyek ilyen célú megosztásával, kérlek engedélyezd a hozzáférést a következő felugró üzenetben. + A ${app_name} a névjegyekben lévő e-mail és telefonszám alapján képes felkutatni más Matrix felhasználókat. \n \nEgyetértesz a névjegyek ilyen célú megosztásával\? "Elnézést. A művelet nem lett végre hajtva hiányzó engedélyek miatt" @@ -884,7 +884,7 @@ Figyelmeztetés: ez a fájl törlésre kerülhet, ha az alkalmazást törli.• Az értesítések csak metaadatokat tartalmaznak • Az értesítés tartalma közvetlenül a Matrix szerverről kerül letöltésre Az értesítések meta- és üzenet adatot is tartalmaznak - Element futtatható a háttérben az értesítések biztonságos és titkos kezeléséhez, ami hatással lehet az akkumulátor használatra. + ${app_name} futtatható a háttérben az értesítések biztonságos és titkos kezeléséhez, ami hatással lehet az akkumulátor használatra. Engedély megadása Más lehetőség választása Értesítés adatvédelme @@ -900,8 +900,8 @@ Figyelmeztetés: ez a fájl törlésre kerülhet, ha az alkalmazást törli.Fiók felfüggesztése Saját fiók felfüggesztése Analitikai adatok küldése - Element anonim analitikai adatokat gyűjt, hogy javítani tudjuk az alkalmazást. - Kérlek engedélyezd az analitikai adatok gyűjtését ezzel segítve a Element fejlesztését. + ${app_name} anonim analitikai adatokat gyűjt, hogy javítani tudjuk az alkalmazást. + Kérlek engedélyezd az analitikai adatok gyűjtését ezzel segítve a ${app_name} fejlesztését. Igen, segíteni akarok! A szükséges paraméter hiányzik. Nem érvényes paraméter. @@ -923,7 +923,7 @@ Matrixban az üzenetek láthatósága hasonlít az e-mailre. Az üzenet törlés Végpontok közötti titkosításhoz használt kulcsok újrakérése a többi munkamenetedtől. Kulcs újrakérve. Kérés elküldve - Índítsd el a Elementet egy olyan eszközön, amely vissza tudja fejteni az üzenetet, hogy elküldhesse a kulcsot ennek a munkamenetnek. + Índítsd el a ${app_name}et egy olyan eszközön, amely vissza tudja fejteni az üzenetet, hogy elküldhesse a kulcsot ennek a munkamenetnek. Ide írj… Hangüzenet küldése tovább ezzel… @@ -1031,13 +1031,13 @@ Matrixban az üzenetek láthatósága hasonlít az e-mailre. Az üzenet törlés Fiók események megjelenítése Avatar és név változásokat tartalmaz. Jelszó - Rendszer kamera indítása a Element egyedi kamera alkalmazása helyett. + Rendszer kamera indítása a ${app_name} egyedi kamera alkalmazása helyett. Ehhez az opcióhoz egy harmadik féltől származó alkalmazásra van szükség, hogy felvedd az üzenetet. \"%s\" parancsnak több paraméterre van szüksége vagy valamelyik paraméter hibás. Markdown engedélyezve. Markdown tiltva. Hívások - Az alapértelmezett Element csengőhang használata bejövő hívásokhoz + Az alapértelmezett ${app_name} csengőhang használata bejövő hívásokhoz Bejövő hívás csengőhangja Csengőhang kiválasztása a hívásokhoz: Elfogadás @@ -1061,11 +1061,11 @@ Kérlek ellenőrizd a fiókbeállításokat. Engedélyez Munkamenet beállítások. Az értesítések engedélyezve vannak ezen az munkameneten. - Az értesítések tiltva vannak ezen a munkameneten. Kérlek ellenőrizd a Element beállításokat. + Az értesítések tiltva vannak ezen a munkameneten. Kérlek ellenőrizd a ${app_name} beállításokat. Engedélyez Play Szolgáltatások ellenőrzése Google Play Services APK elérhető és a legújabb verziójú. - "Element a Google Play Services-t használja a „push” értesítések fogadásához, de úgy tűnik az nincs megfelelően beállítva: + "${app_name} a Google Play Services-t használja a „push” értesítések fogadásához, de úgy tűnik az nincs megfelelően beállítva: \n%1$s" Play Services javítása Firebase token @@ -1087,21 +1087,21 @@ Próbáld újraindítani a szolgáltatást. A szolgáltatást nem sikerült újraindítani Indítás az eszköz indulásakor A szolgáltatás az eszköz újraindulásakor elindul. - A szolgáltatás az eszköz újraindulásakor nem fog elindulni, addig nem kapsz értesítést amíg egyszer el nem indítod a Element-ot. + A szolgáltatás az eszköz újraindulásakor nem fog elindulni, addig nem kapsz értesítést amíg egyszer el nem indítod a ${app_name}-ot. Indulás engedélyezése amikor az eszköz elindul Háttér korlátozások ellenőrzése - A háttér korlátozások nincsenek érvényben a Element-hoz. Ezt a tesztet mobil hálózaton kell elvégezni (WiFi nélkül). + A háttér korlátozások nincsenek érvényben a ${app_name}-hoz. Ezt a tesztet mobil hálózaton kell elvégezni (WiFi nélkül). %1$s - Háttér korlátozások vannak érvényben a Element-hoz. -Bármi amit a Element el akar végezni amíg a háttérben fut, agresszívan korlátozva van. Ez érintheti az értesítéseket is. + Háttér korlátozások vannak érvényben a ${app_name}-hoz. +Bármi amit a ${app_name} el akar végezni amíg a háttérben fut, agresszívan korlátozva van. Ez érintheti az értesítéseket is. %1$s Korlátozások tiltása Akkumulátor optimalizáció - Elementot nem érinti az akkumulátor optimalizáció. + ${app_name}ot nem érinti az akkumulátor optimalizáció. Ha a felhasználó töltés nélkül kikapcsolt képernyővel egy ideig magára hagyja az eszközt, az eszköz „Doze” módba kerül. Ez megakadályozza az alkalmazás számára, hogy hozzáférjen a hálózathoz, nem engedi elvégezni a feladatait, szinkronizációt és az alapértelmezett riasztásait. Optimalizáció figyelmen kívül hagyása Háttér kapcsolat - Az Elementnek szüksége van egy minimális háttér kapcsolat fenntartására ahhoz, hogy az értesítések megbízhatóan megérkezhessenek. A következő képernyőn el kell fogadnod, hogy a Element folyamatosan fusson a háttérben. + Az ${app_name}nek szüksége van egy minimális háttér kapcsolat fenntartására ahhoz, hogy az értesítések megbízhatóan megérkezhessenek. A következő képernyőn el kell fogadnod, hogy a ${app_name} folyamatosan fusson a háttérben. Jogosultság megadása Az e-mail címed ellenőrzésekor hiba történt. A telefonszámod ellenőrzésekor hiba történt. @@ -1120,12 +1120,12 @@ Bármi amit a Element el akar végezni amíg a háttérben fut, agresszívan kor Az egyedi beállításaidban néhány értesítés ki van kapcsolva. Az egyedi szabályokat nem sikerült betölteni, kérlek próbáld újra. Beállítások ellenőrzése - [%1$s] -Ez a hiba a Elementon kívül van és a Google szerint ez a hiba azt jelzi, hogy túl sok alkalmazás használja az FCM-et. Ez a hiba akkor szokott előfordulni, ha nagyon sok alkalmazás van ezért egy átlagos felhasználót nem nagyon érinthet. - [%1$s] -Ez a hiba a Elementon kívül van. Több okból is előjöhet. Lehet, ha később próbálod már működni fog, de megnézheted, hogy a Google Play szolgáltatásnak nincs beállítva adathasználati korlátozás a rendszer beállításokban vagy, hogy az eszközöd órája helyesen jár-e de ezt előfordulhat egyedi ROM esetén is. - [%1$s] -Ez a hiba a Elementon kívül van. Nincs Google fiók az eszközön. Kérlek nyisd meg a fiókkezelőt és adj hozzá egy Google fiókot. + [%1$s] +Ez a hiba a ${app_name}on kívül van és a Google szerint ez a hiba azt jelzi, hogy túl sok alkalmazás használja az FCM-et. Ez a hiba akkor szokott előfordulni, ha nagyon sok alkalmazás van ezért egy átlagos felhasználót nem nagyon érinthet. + [%1$s] +Ez a hiba a ${app_name}on kívül van. Több okból is előjöhet. Lehet, ha később próbálod már működni fog, de megnézheted, hogy a Google Play szolgáltatásnak nincs beállítva adathasználati korlátozás a rendszer beállításokban vagy, hogy az eszközöd órája helyesen jár-e de ezt előfordulhat egyedi ROM esetén is. + [%1$s] +Ez a hiba a ${app_name}on kívül van. Nincs Google fiók az eszközön. Kérlek nyisd meg a fiókkezelőt és adj hozzá egy Google fiókot. Fiók hozzáadása Hangos értesítések beállítása Hívás értesítések beállítása @@ -1136,7 +1136,7 @@ Ez a hiba a Elementon kívül van. Nincs Google fiók az eszközön. Kérlek nyi Csendes Kérlek adj meg egy jelmondatot A jelmondat túl gyenge - Ha azt szeretnéd, hogy a Element Visszaállítási Kulcsot generáljon akkor kérlek töröld a jelmondatot. + Ha azt szeretnéd, hogy a ${app_name} Visszaállítási Kulcsot generáljon akkor kérlek töröld a jelmondatot. Jelenleg nincs Matrix munkamenet Soha ne veszíts el titkosított üzenetet A titkosított szobákban az üzenetek végponttól-végpontig titkosítva vannak. Csak neked és a címzetteknek vannak meg az üzenet elolvasásához szükséges kulcsok. @@ -1266,7 +1266,7 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró A jelszavak nem egyeznek meg A Matrix szerver felderítésére érvénytelen válasz érkezett Szerver beállítások automatikus kiegészítése - Element egyedi szerver beállítást észlelt a felhasználói azonosítód domain-jéhez: \"%1$s\": + ${app_name} egyedi szerver beállítást észlelt a felhasználói azonosítód domain-jéhez: \"%1$s\": \n%2$s Beállítás használata Szolgáltatás indítása @@ -1381,7 +1381,7 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró Kérlek várj… Minden közösség Ennek a szobának nincs előnézete - A Element-ben a nyilvános szoba előnézete egyelőre nem támogatott + A ${app_name}-ben a nyilvános szoba előnézete egyelőre nem támogatott Szobák Közvetlen üzenetek Új szoba @@ -1476,11 +1476,11 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró A beállításokban adj hozzá egy azonosítási szervert ehhez a művelethez. Háttér Szinkronizálási Mód (Kísérleti) Optimalizált akkumulátor használat - Element a háttérben úgy szinkronizál, hogy a leginkább kímélje az eszköz korlátozott erőforrásait (akkumulátor). + ${app_name} a háttérben úgy szinkronizál, hogy a leginkább kímélje az eszköz korlátozott erőforrásait (akkumulátor). \nAz eszköz erőforrásainak állapotától függően a szinkronizációt az operációs rendszer elhalaszthatja. Optimalizálás valós idejű használatra - Element a háttérben rendszeresen, pontosan a megadott időközönként, szinkronizálni fog (beállítható). -\nEz befolyásolja a rádió és az akkumulátor használatot, és folyamatosan egy értesítés fog megjelenni arról, hogy a Element figyel a neki küldött eseményekre. + ${app_name} a háttérben rendszeresen, pontosan a megadott időközönként, szinkronizálni fog (beállítható). +\nEz befolyásolja a rádió és az akkumulátor használatot, és folyamatosan egy értesítés fog megjelenni arról, hogy a ${app_name} figyel a neki küldött eseményekre. Nincs szinkroniziálás a háttérben Nem leszel értesítve az érkező üzenetekről, ha az alkalmazás csak a háttérben fut. A beállítások frissítése nem sikerült. @@ -1564,12 +1564,12 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró Ez a tartalom nem idevalónak lett bejelentve. \n \n Ha nem akarsz ettől a felhasználótól több üzenetet látni akkor blokkolhatod, hogy az üzenetei ne jelenjenek meg számodra - Elementnak engedélyre van szüksége ahhoz, hogy a végponttól végpontig titkosító kulcsokat a lemezre menthesse. + ${app_name}nak engedélyre van szüksége ahhoz, hogy a végponttól végpontig titkosító kulcsokat a lemezre menthesse. \n \nKérlek a következő felugró ablakban engedélyezd a hozzáférést, hogy a kulcsokat kézzel kimenthesd. Jelenleg nincs hálózati kapcsolat Jelszó megerősítés - Element mobilról ezt nem teheted meg + ${app_name} mobilról ezt nem teheted meg Azonosítás szükséges Integrációk Botok, hidak, kisalkalmazások és matrica csomagok kezeléséhez használj Integrációs Menedzsert. @@ -1738,7 +1738,7 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró \nA fiók és az üzeneteid eléréséhez jelentkezz be. Elveszted a hozzáférésedet a titkosított üzeneteidhez ha nem jelentkezel be a titkosítási kulcsok visszaállításához. Adat törlése - A jelenlegi munkamenet %1$s felhasználóhoz tartozik és %2$s azonosítási adatait adtad meg. Ez Element-ben nem támogatott. + A jelenlegi munkamenet %1$s felhasználóhoz tartozik és %2$s azonosítási adatait adtad meg. Ez ${app_name}-ben nem támogatott. \nElőször töröld az adatokat, utána lépj be a másik fiókba! A matrix.to linked hibás A leírás túl rövid @@ -1756,7 +1756,7 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró Más munkamenetek Csak az első találat megmutatása, gépelj több betűt… Összeomlás-hamar - Element a nem várt hibák esetén többször fog összeomlani + ${app_name} a nem várt hibák esetén többször fog összeomlani Hozzáteszi a sima szöveges üzenethez ezt: ¯\\_(ツ)_/¯ Titkosítás engedélyezése Ha egyszer bekapcsolod, már nem lehet kikapcsolni. @@ -1827,9 +1827,9 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró Moderátor itt: %1$s Egyedi (%1$d) itt: %2$s Olvasási visszaigazolásra ugrás - Element nem kezeli ezt az eseményt: \'%1$s\' - Element nem kezeli ezt az üzenet típust: \'%1$s\' - Element problémába ütközött az esemény (azon: %1$s) megjelenítésekor + ${app_name} nem kezeli ezt az eseményt: \'%1$s\' + ${app_name} nem kezeli ezt az üzenet típust: \'%1$s\' + ${app_name} problémába ütközött az esemény (azon: %1$s) megjelenítésekor Figyelembe vesz Ez a munkamenet nem tudja megosztani ezt az ellenőrzést a másik munkameneteddel. \nAz ellenőrzés helyileg elmentésre kerül és az alkalmazás jövőbeli verziójával meg lesz osztva. @@ -1924,7 +1924,7 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró Az eseményt a felhasználó törölte, ezért: %1$s Az eseményt a szoba adminisztrátora moderálta, ezért: %1$s A kulcsok már frissek! - Element Android + ${app_name} Android Kulcs kérések Régi titkosított üzenetek feloldása Frissítés @@ -2025,12 +2025,12 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró A média fájl a Galériához hozzáadva A média fájlt nem sikerült hozzáadni a Galériához Új fiók jelszó beállítása… - Element Web -\nElement Desktop - Element iOS -\nElement Android + ${app_name} Web +\n${app_name} Desktop + ${app_name} iOS +\n${app_name} Android "vagy más eszközök közötti hitelesítést támogató Matrix-klienst" - Az Element legújabb kliensét használd a többi eszközödön: + Az ${app_name} legújabb kliensét használd a többi eszközödön: A jelenlegi csoport munkamenet törlését kikényszeríti a titkosított szobában Csak a titkosított szobákban támogatott Használd ezt: %1$s vagy ezt: %2$s a továbblépéshez. @@ -2051,7 +2051,7 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró Kérlek válassz jelszót. Ezt a hivatkozást ellenőrizd le még egyszer A közvetlen beszélgetést nem sikerült létrehozni. Ellenőrizd azokat a felhasználókat akiket meg szeretnél hívni és próbáld újra. - "Használd a legújabb Elementet a többi eszközödön, azaz az Element Webet, az Element Desktopot, az Element for Androidot vagy más eszközök közötti hitelesítést támogató Matrix-klienst" + "Használd a legújabb ${app_name}et a többi eszközödön, azaz az ${app_name} Webet, az ${app_name} Desktopot, az ${app_name} for Androidot vagy más eszközök közötti hitelesítést támogató Matrix-klienst" Erősítsd meg ebben a bejelentkezésben a személyazonosságodat egy másik munkamenetből, hogy hozzáférhess a titkosított üzenetekhez. %1$s hivatkozás egy másik oldalra visz: %2$s. \n @@ -2093,11 +2093,11 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró További elérhető nyelvek Elérhető nyelvek betöltése… Megnyitás: %s feltételek - Ez az azonosítási szerver régi. Element csak az API V2-t támogatja. + Ez az azonosítási szerver régi. ${app_name} csak az API V2-t támogatja. Ez a művelet nem támogatott. A Matrix szerver elavult. Kérlek először állíts be egy azonosítási szervert. Kérlek először fogadd el az azonosítási szerver felhasználási feltételeit a beállításokban. - A biztonságod érdekében Element csak hash-selt e-mail cím és telefonszám küldését támogatja. + A biztonságod érdekében ${app_name} csak hash-selt e-mail cím és telefonszám küldését támogatja. A megfeleltetés sikertelen. Ezzel az azonosítóval jelenleg nincs megfeleltetve semmi. A Matrix szervered (%1$s) ezt az azonosítási szervert javasolja: %2$s @@ -2148,7 +2148,7 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró Nem hívhatod fel saját magad, várj amíg a résztvevők elfogadják a meghívást Kisalkalmazás hozzáadása sikertelen Kisalkalmazás eltávolítása sikertelen - Element hívás sikertelen + ${app_name} hívás sikertelen Nem sikerült felépíteni a valós idejű kapcsolatot. \nKérd meg a Matrix-kiszolgálód rendszergazdáját, hogy állítson be egy TURN-kiszolgálót, hogy a hívások megbízhatóan működjenek. SSL hiba: a partner személyazonossága nem lett megerősítve. @@ -2284,7 +2284,7 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró Erősítsd meg a PIN-kódot a PIN-kód kikapcsolásához Részletek mutatása, mint például a szoba neve, vagy az üzenet tartalma. Üzenetek tartalmának mutatása az értesítésekben - Az Element feloldása csak PIN kóddal lehetséges. + Az ${app_name} feloldása csak PIN kóddal lehetséges. Biometrikus azonosítás engedélyezése Védelem beállítása Hozzáférés védése PIN kóddal és biometrikus azonosítással. @@ -2314,8 +2314,8 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró Nincs jogosultságod hívást indítani Nincs jogosultságod hívást indítani ebben a szobában Mutasd meg ezt a kódot az ismerőseidnek, hogy be tudják olvasni, és elkezdődhessen a csevegés! - 🔐️ Csatlakozz hozzám Element-en - Hey, beszélgessünk Element-en: %s + 🔐️ Csatlakozz hozzám ${app_name}-en + Hey, beszélgessünk ${app_name}-en: %s Ismerősök meghívása Saját kódom Saját kód megosztása diff --git a/vector/src/main/res/values-id/strings.xml b/vector/src/main/res/values-id/strings.xml index 91fdb38426..af8863355c 100644 --- a/vector/src/main/res/values-id/strings.xml +++ b/vector/src/main/res/values-id/strings.xml @@ -155,7 +155,7 @@ Nanti Kirim Saja - Element belum diijinkan untuk mengakses kontak lokal + ${app_name} belum diijinkan untuk mengakses kontak lokal Kirim log gangguan Raksasa Kecil @@ -250,18 +250,18 @@ Anda telah dikeluarkan dari semua perangkat dan tidak lagi menerima pemberitahua Ambil gambar atau video Tidak bisa merekam video - Element membutuhkan permisi atas akses galeri foto dan video Anda untuk mengirim dan menyimpan lampiran. + ${app_name} membutuhkan permisi atas akses galeri foto dan video Anda untuk mengirim dan menyimpan lampiran. Harap berikan akses pada halaman berikut agar berkas dapat dikirim dari ponsel Anda. - Element membutuhkan izin Anda untuk mengakses kamera untuk mengambil gambar dan melakukan panggilan video. + ${app_name} membutuhkan izin Anda untuk mengakses kamera untuk mengambil gambar dan melakukan panggilan video. Harap berikan akses pada halaman berikut agar dapat melakukan panggilan. - Element membutuhkan permisi atas akses mikrofon Anda untuk melakukan panggilan audio. + ${app_name} membutuhkan permisi atas akses mikrofon Anda untuk melakukan panggilan audio. Harap berikan akses pada halaman berikut agar dapat melakukan panggilan. - Element membutuhkan permisi atas akses kamera dan mikrofon Anda untuk melakukan panggilan video. + ${app_name} membutuhkan permisi atas akses kamera dan mikrofon Anda untuk melakukan panggilan video. Harap berikan akses pada halaman selanjutnya untuk melakukan panggilan. Tema Terang @@ -321,7 +321,7 @@ Harap berikan akses pada halaman selanjutnya untuk melakukan panggilan. Permintaan kunci terkirim. Permintaan terkirim - Jalankan Element di perangkat yang dapat mendekripsi pesan tersebut agar kunci dapat dikirim ke perangkat ini. + Jalankan ${app_name} di perangkat yang dapat mendekripsi pesan tersebut agar kunci dapat dikirim ke perangkat ini. Daftar Grup @@ -330,12 +330,12 @@ Harap berikan akses pada halaman selanjutnya untuk melakukan panggilan. Panggilan - Element memerlukan permisi untuk mengakses daftar kontak agar dapat mencari pengguna Matrix lain berdasarkan email dan nomor telepon. + ${app_name} memerlukan permisi untuk mengakses daftar kontak agar dapat mencari pengguna Matrix lain berdasarkan email dan nomor telepon. -Ijinkan akses lewat halaman selanjutnya untuk menemukan pengguna Element yang terdapat di daftar kontak Anda. - Element memerlukan permisi akses daftar kontak Anda untuk menemukan pengguna Matrix lain berdasarkan email dan nomor telepon mereka. +Ijinkan akses lewat halaman selanjutnya untuk menemukan pengguna ${app_name} yang terdapat di daftar kontak Anda. + ${app_name} memerlukan permisi akses daftar kontak Anda untuk menemukan pengguna Matrix lain berdasarkan email dan nomor telepon mereka. -Bolehkah Element mengakses daftar kontak Anda? +Bolehkah ${app_name} mengakses daftar kontak Anda? "Maaf. Tidak dapat dilakukan karena belum menerima permisi" @@ -855,14 +855,14 @@ Peringatan: berkas ini mungkin ikut terhapus jika aplikasi dihapus. Deaktivasi akunku Kerahasiaan Notifikasi - Element dapat beroperasi di balik layar untuk mengurus pemberitahuan Anda dengan aman dan rahasia. Ini dapat mempengaruhi masa tahan baterai. + ${app_name} dapat beroperasi di balik layar untuk mengurus pemberitahuan Anda dengan aman dan rahasia. Ini dapat mempengaruhi masa tahan baterai. Kabulkan permisi Pilih opsi lain Analitik Kirim data analitik - Element mengumpulkan data analitik anonim dalam upaya kami meningkatkan aplikasi. - Mohon aktifkan analitik untuk membantu kami meningkatkan Element. + ${app_name} mengumpulkan data analitik anonim dalam upaya kami meningkatkan aplikasi. + Mohon aktifkan analitik untuk membantu kami meningkatkan ${app_name}. Ya, saya ingin membantu! Mode hemat data @@ -948,7 +948,7 @@ Tindakan ini akan memulai ulang aplikasi dan mungkin cukup memakan waktu.Mohon telaah dan terima kebijakan homeserver ini: Panggilan - Gunakan nada dering semula Element untuk panggilan masuk + Gunakan nada dering semula ${app_name} untuk panggilan masuk Nada dering panggilan masuk Pilih nada dering untuk panggilan: @@ -980,13 +980,13 @@ Mohon periksa pengaturan akun. Pengaturan Perangkat. Pemberitahuan diperbolehkan untuk perangkat ini. - Pemberitahuan tidak diperbolehkan untuk perangkat ini. -Mohon periksa pengaturan Element. + Pemberitahuan tidak diperbolehkan untuk perangkat ini. +Mohon periksa pengaturan ${app_name}. Perbolehkan Pemeriksaan Layanan Google Play APK Layanan Google Play ditemukan dan telah diperbaharui. - Element menggunakan Layanan Google Play untuk mendorong pesan tapi tampaknya tidak diatur sebagaimana harusnya. + ${app_name} menggunakan Layanan Google Play untuk mendorong pesan tapi tampaknya tidak diatur sebagaimana harusnya. \n%1$s Perbaiki Layanan Google Play @@ -1013,19 +1013,19 @@ Coba nyalakan kembali aplikasi. Mulai ketika menyalakan perangkat Layanan akan dimulai ketika perangkat dinyalakan kembali. - Layanan tidak akan mulai ketika perangkat dinyalakan kembali, Anda tidak akan menerima pemberitahuan hingga Anda membuka Element. + Layanan tidak akan mulai ketika perangkat dinyalakan kembali, Anda tidak akan menerima pemberitahuan hingga Anda membuka ${app_name}. Perbolehkan memulai ketika perangkat dinyalakan Periksa halangan di balik layar - Halangan di balik layar dimatikan untuk Element. Ujicoba ini harus dijalankan menggunakan jaringan data (bukan WIFI). + Halangan di balik layar dimatikan untuk ${app_name}. Ujicoba ini harus dijalankan menggunakan jaringan data (bukan WIFI). %1$s - Halangan di balik layar dinyalakan untuk Element. + Halangan di balik layar dinyalakan untuk ${app_name}. Aktivitas yang dilakukan aplikasi ini akan terhalang ketika beroperasi di balik layar, dan ini dapat mempengaruhi pemberitahuan. %1$s Matikan penghalang Optimisasi Baterai - Element tidak terpengaruh oleh Optimisasi Baterai. + ${app_name} tidak terpengaruh oleh Optimisasi Baterai. Cadangkan Kunci Gunakan Cadangan Kunci @@ -1054,12 +1054,12 @@ Aktivitas yang dilakukan aplikasi ini akan terhalang ketika beroperasi di balik Gagal memuat aturan, mohon coba lagi. Periksa Aturan - [%1$s] -\nError ini di luar kendali Element dan menurut Google, error ini muncul ketika terlalu banyak aplikasi terdaftar dengan FCM pada perangkat tersebut. Error ini tidak seharusnya mempengaruhi pengguna biasa. - [%1$s] -\nError ini di luar kendali Element, dan dapat muncul karena berbagai alasan. Coba lagi nanti, atau Anda juga dapat memeriksa apabila penggunaan jaringan data Layanan Google Play tidak terhalang oleh sistem, atau waktu pada perangkat sudah benar, atau ini dapat terjadi pada ROM tidak resmi. - [%1$s] -\nError ini di luar kendali Element. Tidak terdapat akun Google pada perangkat. Mohon buka pengelola akun dan tambahkan akun Google. + [%1$s] +\nError ini di luar kendali ${app_name} dan menurut Google, error ini muncul ketika terlalu banyak aplikasi terdaftar dengan FCM pada perangkat tersebut. Error ini tidak seharusnya mempengaruhi pengguna biasa. + [%1$s] +\nError ini di luar kendali ${app_name}, dan dapat muncul karena berbagai alasan. Coba lagi nanti, atau Anda juga dapat memeriksa apabila penggunaan jaringan data Layanan Google Play tidak terhalang oleh sistem, atau waktu pada perangkat sudah benar, atau ini dapat terjadi pada ROM tidak resmi. + [%1$s] +\nError ini di luar kendali ${app_name}. Tidak terdapat akun Google pada perangkat. Mohon buka pengelola akun dan tambahkan akun Google. Tambah Akun Apabila perangkat tidak sedang diisi atau dipergunakan dengan layar dimatikan, perangkat masuk mode Doze. Ini akan menghalangi aplikasi mengakses jaringan dan menunda tugas, sinkronisasi, dan alarm standar. diff --git a/vector/src/main/res/values-in/strings.xml b/vector/src/main/res/values-in/strings.xml index 91fdb38426..af8863355c 100644 --- a/vector/src/main/res/values-in/strings.xml +++ b/vector/src/main/res/values-in/strings.xml @@ -155,7 +155,7 @@ Nanti Kirim Saja - Element belum diijinkan untuk mengakses kontak lokal + ${app_name} belum diijinkan untuk mengakses kontak lokal Kirim log gangguan Raksasa Kecil @@ -250,18 +250,18 @@ Anda telah dikeluarkan dari semua perangkat dan tidak lagi menerima pemberitahua Ambil gambar atau video Tidak bisa merekam video - Element membutuhkan permisi atas akses galeri foto dan video Anda untuk mengirim dan menyimpan lampiran. + ${app_name} membutuhkan permisi atas akses galeri foto dan video Anda untuk mengirim dan menyimpan lampiran. Harap berikan akses pada halaman berikut agar berkas dapat dikirim dari ponsel Anda. - Element membutuhkan izin Anda untuk mengakses kamera untuk mengambil gambar dan melakukan panggilan video. + ${app_name} membutuhkan izin Anda untuk mengakses kamera untuk mengambil gambar dan melakukan panggilan video. Harap berikan akses pada halaman berikut agar dapat melakukan panggilan. - Element membutuhkan permisi atas akses mikrofon Anda untuk melakukan panggilan audio. + ${app_name} membutuhkan permisi atas akses mikrofon Anda untuk melakukan panggilan audio. Harap berikan akses pada halaman berikut agar dapat melakukan panggilan. - Element membutuhkan permisi atas akses kamera dan mikrofon Anda untuk melakukan panggilan video. + ${app_name} membutuhkan permisi atas akses kamera dan mikrofon Anda untuk melakukan panggilan video. Harap berikan akses pada halaman selanjutnya untuk melakukan panggilan. Tema Terang @@ -321,7 +321,7 @@ Harap berikan akses pada halaman selanjutnya untuk melakukan panggilan. Permintaan kunci terkirim. Permintaan terkirim - Jalankan Element di perangkat yang dapat mendekripsi pesan tersebut agar kunci dapat dikirim ke perangkat ini. + Jalankan ${app_name} di perangkat yang dapat mendekripsi pesan tersebut agar kunci dapat dikirim ke perangkat ini. Daftar Grup @@ -330,12 +330,12 @@ Harap berikan akses pada halaman selanjutnya untuk melakukan panggilan. Panggilan - Element memerlukan permisi untuk mengakses daftar kontak agar dapat mencari pengguna Matrix lain berdasarkan email dan nomor telepon. + ${app_name} memerlukan permisi untuk mengakses daftar kontak agar dapat mencari pengguna Matrix lain berdasarkan email dan nomor telepon. -Ijinkan akses lewat halaman selanjutnya untuk menemukan pengguna Element yang terdapat di daftar kontak Anda. - Element memerlukan permisi akses daftar kontak Anda untuk menemukan pengguna Matrix lain berdasarkan email dan nomor telepon mereka. +Ijinkan akses lewat halaman selanjutnya untuk menemukan pengguna ${app_name} yang terdapat di daftar kontak Anda. + ${app_name} memerlukan permisi akses daftar kontak Anda untuk menemukan pengguna Matrix lain berdasarkan email dan nomor telepon mereka. -Bolehkah Element mengakses daftar kontak Anda? +Bolehkah ${app_name} mengakses daftar kontak Anda? "Maaf. Tidak dapat dilakukan karena belum menerima permisi" @@ -855,14 +855,14 @@ Peringatan: berkas ini mungkin ikut terhapus jika aplikasi dihapus. Deaktivasi akunku Kerahasiaan Notifikasi - Element dapat beroperasi di balik layar untuk mengurus pemberitahuan Anda dengan aman dan rahasia. Ini dapat mempengaruhi masa tahan baterai. + ${app_name} dapat beroperasi di balik layar untuk mengurus pemberitahuan Anda dengan aman dan rahasia. Ini dapat mempengaruhi masa tahan baterai. Kabulkan permisi Pilih opsi lain Analitik Kirim data analitik - Element mengumpulkan data analitik anonim dalam upaya kami meningkatkan aplikasi. - Mohon aktifkan analitik untuk membantu kami meningkatkan Element. + ${app_name} mengumpulkan data analitik anonim dalam upaya kami meningkatkan aplikasi. + Mohon aktifkan analitik untuk membantu kami meningkatkan ${app_name}. Ya, saya ingin membantu! Mode hemat data @@ -948,7 +948,7 @@ Tindakan ini akan memulai ulang aplikasi dan mungkin cukup memakan waktu.Mohon telaah dan terima kebijakan homeserver ini: Panggilan - Gunakan nada dering semula Element untuk panggilan masuk + Gunakan nada dering semula ${app_name} untuk panggilan masuk Nada dering panggilan masuk Pilih nada dering untuk panggilan: @@ -980,13 +980,13 @@ Mohon periksa pengaturan akun. Pengaturan Perangkat. Pemberitahuan diperbolehkan untuk perangkat ini. - Pemberitahuan tidak diperbolehkan untuk perangkat ini. -Mohon periksa pengaturan Element. + Pemberitahuan tidak diperbolehkan untuk perangkat ini. +Mohon periksa pengaturan ${app_name}. Perbolehkan Pemeriksaan Layanan Google Play APK Layanan Google Play ditemukan dan telah diperbaharui. - Element menggunakan Layanan Google Play untuk mendorong pesan tapi tampaknya tidak diatur sebagaimana harusnya. + ${app_name} menggunakan Layanan Google Play untuk mendorong pesan tapi tampaknya tidak diatur sebagaimana harusnya. \n%1$s Perbaiki Layanan Google Play @@ -1013,19 +1013,19 @@ Coba nyalakan kembali aplikasi. Mulai ketika menyalakan perangkat Layanan akan dimulai ketika perangkat dinyalakan kembali. - Layanan tidak akan mulai ketika perangkat dinyalakan kembali, Anda tidak akan menerima pemberitahuan hingga Anda membuka Element. + Layanan tidak akan mulai ketika perangkat dinyalakan kembali, Anda tidak akan menerima pemberitahuan hingga Anda membuka ${app_name}. Perbolehkan memulai ketika perangkat dinyalakan Periksa halangan di balik layar - Halangan di balik layar dimatikan untuk Element. Ujicoba ini harus dijalankan menggunakan jaringan data (bukan WIFI). + Halangan di balik layar dimatikan untuk ${app_name}. Ujicoba ini harus dijalankan menggunakan jaringan data (bukan WIFI). %1$s - Halangan di balik layar dinyalakan untuk Element. + Halangan di balik layar dinyalakan untuk ${app_name}. Aktivitas yang dilakukan aplikasi ini akan terhalang ketika beroperasi di balik layar, dan ini dapat mempengaruhi pemberitahuan. %1$s Matikan penghalang Optimisasi Baterai - Element tidak terpengaruh oleh Optimisasi Baterai. + ${app_name} tidak terpengaruh oleh Optimisasi Baterai. Cadangkan Kunci Gunakan Cadangan Kunci @@ -1054,12 +1054,12 @@ Aktivitas yang dilakukan aplikasi ini akan terhalang ketika beroperasi di balik Gagal memuat aturan, mohon coba lagi. Periksa Aturan - [%1$s] -\nError ini di luar kendali Element dan menurut Google, error ini muncul ketika terlalu banyak aplikasi terdaftar dengan FCM pada perangkat tersebut. Error ini tidak seharusnya mempengaruhi pengguna biasa. - [%1$s] -\nError ini di luar kendali Element, dan dapat muncul karena berbagai alasan. Coba lagi nanti, atau Anda juga dapat memeriksa apabila penggunaan jaringan data Layanan Google Play tidak terhalang oleh sistem, atau waktu pada perangkat sudah benar, atau ini dapat terjadi pada ROM tidak resmi. - [%1$s] -\nError ini di luar kendali Element. Tidak terdapat akun Google pada perangkat. Mohon buka pengelola akun dan tambahkan akun Google. + [%1$s] +\nError ini di luar kendali ${app_name} dan menurut Google, error ini muncul ketika terlalu banyak aplikasi terdaftar dengan FCM pada perangkat tersebut. Error ini tidak seharusnya mempengaruhi pengguna biasa. + [%1$s] +\nError ini di luar kendali ${app_name}, dan dapat muncul karena berbagai alasan. Coba lagi nanti, atau Anda juga dapat memeriksa apabila penggunaan jaringan data Layanan Google Play tidak terhalang oleh sistem, atau waktu pada perangkat sudah benar, atau ini dapat terjadi pada ROM tidak resmi. + [%1$s] +\nError ini di luar kendali ${app_name}. Tidak terdapat akun Google pada perangkat. Mohon buka pengelola akun dan tambahkan akun Google. Tambah Akun Apabila perangkat tidak sedang diisi atau dipergunakan dengan layar dimatikan, perangkat masuk mode Doze. Ini akan menghalangi aplikasi mengakses jaringan dan menunda tugas, sinkronisasi, dan alarm standar. diff --git a/vector/src/main/res/values-is/strings.xml b/vector/src/main/res/values-is/strings.xml index dd8cb20559..99c024c320 100644 --- a/vector/src/main/res/values-is/strings.xml +++ b/vector/src/main/res/values-is/strings.xml @@ -756,7 +756,7 @@ Til að halda áfram skaltu setja inn lykilorðið þitt. Ógilt snið samnefnis Netþjónninn gæti verið undir miklu álagi eða ekki til taks Þar sem ýmsar heimildir vantar, eru sumir eiginleikar ekki tiltækir… - Þú heimilaðir Element ekki aðgang að tengiliðum á tækinu + Þú heimilaðir ${app_name} ekki aðgang að tengiliðum á tækinu Hristu ákveðið til að senda villutilkynningu Það tókst að senda villuskýrsluna @@ -778,7 +778,7 @@ Ertu alveg viss? Hlé milli tveggja samstillingarbeiðna Halda gögnum - Element getur keyrt í bakgrunni og stýrt tilkynningum á öruggan hátt (getur haft áhrif á rafhlöðunotkun). + ${app_name} getur keyrt í bakgrunni og stýrt tilkynningum á öruggan hátt (getur haft áhrif á rafhlöðunotkun). Skoðaðu tölvupóstinn þinn og smelltu á tengilinn sem hann inniheldur. Þegar því er lokið skaltu smella á að halda áfram. Tókst ekki að sannreyna tölvupóstfang. Skoðaðu tölvupóstinn þinn og smelltu á tengilinn sem hann inniheldur. Þegar því er lokið skaltu smella á að halda áfram @@ -810,26 +810,26 @@ Ertu alveg viss? Tiltekið aðgangsteikn þekktist ekki Ekki var svarað á fjartengda endanum. - Element þarf heimild til að nota mynda- og myndskeiðasafn svo hægt sé að senda og vista viðhengi. + ${app_name} þarf heimild til að nota mynda- og myndskeiðasafn svo hægt sé að senda og vista viðhengi. Leyfðu aðgang í næsta sprettglugga til þess að geta sent skrár úr símanum. - Element þarf heimild til að nota myndavélina svo hægt sé að taka myndir og hringja myndsímtöl. + ${app_name} þarf heimild til að nota myndavélina svo hægt sé að taka myndir og hringja myndsímtöl. Leyfðu aðgang í næsta sprettglugga til þess að geta hringt. - Element þarf heimild til að nota hljóðnemann svo hægt sé að hringja hljóðsímtöl. + ${app_name} þarf heimild til að nota hljóðnemann svo hægt sé að hringja hljóðsímtöl. Leyfðu aðgang í næsta sprettglugga til þess að geta hringt. - Element þarf heimild til að nota myndavélina og hljóðnemann svo hægt sé að hringja myndsímtöl. + ${app_name} þarf heimild til að nota myndavélina og hljóðnemann svo hægt sé að hringja myndsímtöl. Leyfðu aðgang í næstu sprettgluggum til þess að geta hringt. - Element þarf heimild til að nota tengiliði í nafnaskránni svo hægt sé að finna aðra Matrix-notendur eftir tölvupóstföngum og símanúmerum þeirra. + ${app_name} þarf heimild til að nota tengiliði í nafnaskránni svo hægt sé að finna aðra Matrix-notendur eftir tölvupóstföngum og símanúmerum þeirra. -Leyfðu aðgang í næsta sprettglugga til þess að finna þá notendur í nafnaskránni sem hægt er að hafa samband við úr Element. - Element þarf heimild til að nota tengiliði í nafnaskránni svo hægt sé að finna aðra Matrix-notendur eftir tölvupóstföngum og símanúmerum þeirra. +Leyfðu aðgang í næsta sprettglugga til þess að finna þá notendur í nafnaskránni sem hægt er að hafa samband við úr ${app_name}. + ${app_name} þarf heimild til að nota tengiliði í nafnaskránni svo hægt sé að finna aðra Matrix-notendur eftir tölvupóstföngum og símanúmerum þeirra. -Leyfa Element nota tengiliðina ? +Leyfa ${app_name} nota tengiliðina ? Gera notandaaðgang óvirkann Gera notandaaðganginn minn óvirkann @@ -856,8 +856,8 @@ Leyfa Element nota tengiliðina ? Tölvupósttengill sem ekki er enn búið að smella á Rangt formað auðkenni. Ætti að vera tölvupóstfang eða Matrix-auðkenni á borð við\'@sérheiti:lén\' - Element safnar nafnlausum greiningargögnum til að gera okkur kleift að bæta forritið. - Endilega virkjaðu greiningargögn til að hjálpa okkur að bæta Element. + ${app_name} safnar nafnlausum greiningargögnum til að gera okkur kleift að bæta forritið. + Endilega virkjaðu greiningargögn til að hjálpa okkur að bæta ${app_name}. Til að tengja við spjallrás verður hún að vera með vistfang. Þú ert að reyna að tengjast %s. Myndirðu vilja gerast meðlimur til að geta tekið þátt í samræðunni? Þetta er forskoðun á spjallrásinni. Samskipti spjallrásarinnar hafa verið gerð óvirk. diff --git a/vector/src/main/res/values-it/strings.xml b/vector/src/main/res/values-it/strings.xml index 25617abb6b..2a13148bcd 100644 --- a/vector/src/main/res/values-it/strings.xml +++ b/vector/src/main/res/values-it/strings.xml @@ -336,7 +336,7 @@ Elenco utenti Mostra solo i contatti Matrix Nessuna conversazione - Element non ha avuto l\'autorizzazione ad accedere alla tua Rubrica locale + ${app_name} non ha avuto l\'autorizzazione ad accedere alla tua Rubrica locale Nessun risultato Stanze @@ -353,7 +353,7 @@ Segnala errore Per favore descrivi l\'errore. Cosa stavi facendo\? Cosa ti aspettavi dovesse accadere\? Cosa è effettivamente successo\? Descrivi qui il problema - Per permettere una diagnosi del problema, oltre alla segnalazione errore verranno inviati anche i registri di Element. Rapporto, registri e schermata non saranno resi pubblici. Tuttavia, se preferisci inviare solamente la segnalazione, deseleziona: + Per permettere una diagnosi del problema, oltre alla segnalazione errore verranno inviati anche i registri di ${app_name}. Rapporto, registri e schermata non saranno resi pubblici. Tuttavia, se preferisci inviare solamente la segnalazione, deseleziona: Sembra tu stia scuotendo il dispositivo con rabbia. Vuoi segnalare un errore\? L\'ultima volta l\'applicazione è andata in crash. Vuoi inviare una segnalazione\? La segnalazione errore è stata spedita @@ -479,22 +479,22 @@ Impossibile registrare video Informazione - Element deve essere autorizzato ad accedere alla tua Galleria di foto e video per poter inviare e salvare allegati. + ${app_name} deve essere autorizzato ad accedere alla tua Galleria di foto e video per poter inviare e salvare allegati. \n \nNel prossimo pop-up concedi l\'autorizzazione per poteri inviare file dal tuo dispositivo. - Element deve essere autorizzato ad accedere alla tua fotocamera per poter fare foto e video. + ${app_name} deve essere autorizzato ad accedere alla tua fotocamera per poter fare foto e video. " \n \nNel prossimo pop-up concedi l\'autorizzazione per poter fare la chiamata." - Element deve essere autorizzato ad accedere al microfono e poter così fare chiamate audio. + ${app_name} deve essere autorizzato ad accedere al microfono e poter così fare chiamate audio. " \n \nNel prossimo pop-up concedi l\'autorizzazione per poter fare la chiamata." - Element deve essere autorizzato ad accedere a fotocamera e microfono per poter fare chiamate video. + ${app_name} deve essere autorizzato ad accedere a fotocamera e microfono per poter fare chiamate video. \n \nNel prossimo pop-up concedi le autorizzazioni per poter fare la chiamata. - Element può usare tua Rubrica locale per trovare altri utenti Matrix grazie alle loro email e numeri di telefono. Se ti sta bene comunicare i dati di tutti i tuoi contatti all\'Identity Server, puoi concedere l\'autorizzazione nel prossimo pop-up. - Element può usare tua Rubrica locale per trovare altri utenti Matrix grazie alle loro email e numeri di telefono. + ${app_name} può usare tua Rubrica locale per trovare altri utenti Matrix grazie alle loro email e numeri di telefono. Se ti sta bene comunicare i dati di tutti i tuoi contatti all\'Identity Server, puoi concedere l\'autorizzazione nel prossimo pop-up. + ${app_name} può usare tua Rubrica locale per trovare altri utenti Matrix grazie alle loro email e numeri di telefono. \n \nTi sta bene comunicare i dati di tutti i tuoi contatti per questo scopo\? Purtroppo l\'azione non è stata eseguita poiché mancano i permessi @@ -1017,7 +1017,7 @@ • Le notifiche contengono metadati e contenuto del messaggio • Le notifiche non mostreranno il contenuto del messaggio Privacy delle notifiche - Element può esser sempre attivo in background in modo da gestire le tue notifiche in modo costante e sicuro. Ciò può influire sulla durata della batteria. + ${app_name} può esser sempre attivo in background in modo da gestire le tue notifiche in modo costante e sicuro. Ciò può influire sulla durata della batteria. Concedi l\'autorizzazione Scegli un\'altra opzione Invia uno sticker @@ -1028,8 +1028,8 @@ Disattiva l\'account Disattiva il mio account Invia le statistiche di utilizzo - Element raccoglie statistiche anonime per permettere il miglioramento dell\'applicazione. - Attiva le statistiche per aiutare a migliorare Element. + ${app_name} raccoglie statistiche anonime per permettere il miglioramento dell\'applicazione. + Attiva le statistiche per aiutare a migliorare ${app_name}. Sì, voglio aiutare! Manca un parametro indispensabile. Uno dei parametri non è valido. @@ -1051,7 +1051,7 @@ Richiedi di nuovo le chiavi di crittografia dalle tue altre sessioni. La richiesta della chiave è stata inviata. Richiesta inviata - Avvia Element su un altro dispositivo che possa decifrare il messaggio, in modo che possa inviare le chiavi a questa sessione. + Avvia ${app_name} su un altro dispositivo che possa decifrare il messaggio, in modo che possa inviare le chiavi a questa sessione. Digita qui… Invia messaggio vocale prosegui con… @@ -1166,7 +1166,7 @@ Markdown è stato abilitato. Markdown è stato disabilitato. Chiamate - Usa la suoneria predefinita di Element per le chiamate in arrivo + Usa la suoneria predefinita di ${app_name} per le chiamate in arrivo Suoneria delle chiamate in arrivo Scegli la suoneria per le chiamate: Accetta @@ -1190,12 +1190,12 @@ Abilita Impostazioni sessione. Le notifiche sono attive per questa sessione. - Le notifiche non sono attive per questa sessione. -\nControlla le impostazioni di Element. + Le notifiche non sono attive per questa sessione. +\nControlla le impostazioni di ${app_name}. Abilita Esegui un controllo dei servizi L\'APK Google Play Services è disponibile e aggiornato. - Element usa Google Play Services per consegnare i messaggi a comparsa, ma sembra non sia stato configurato correttamente: + ${app_name} usa Google Play Services per consegnare i messaggi a comparsa, ma sembra non sia stato configurato correttamente: \n%1$s Correggi i Play Services Token di Firebase @@ -1217,22 +1217,22 @@ L\'avvio del servizio è fallito Esegui all\'avvio Il servizio inizierà quando il dispositivo sarà riavviato. - Il servizio non partirà al riavvio del dispositivo. Non riceverai notifiche finché Element non verrà aperto almeno una volta. + Il servizio non partirà al riavvio del dispositivo. Non riceverai notifiche finché ${app_name} non verrà aperto almeno una volta. Abilita l\'esecuzione all\'avvio Verifica se Element sia stato configurato per funzionare in modo limitato quando lavora in background - Element non funziona senza alcuna restrizione anche quando è eseguito in background. Questo test andrebbe eseguito usando dati mobili (non WIFI). + ${app_name} non funziona senza alcuna restrizione anche quando è eseguito in background. Questo test andrebbe eseguito usando dati mobili (non WIFI). \n%1$s - Element è stato configurato per funzionare in modo limitato quando è eseguito in background. + ${app_name} è stato configurato per funzionare in modo limitato quando è eseguito in background. \nIl funzionamento dell\'App, quando è eseguita in background, è stato fortemente limitato e ciò potrebbe influenzare la ricezione delle notifiche. \n%1$s Non limitare Ottimizzazione della batteria - Element non è influenzato dall\'ottimizzazione della batteria. + ${app_name} non è influenzato dall\'ottimizzazione della batteria. Se si lascia un dispositivo scollegato, fermo e con lo schermo spento, dopo un certo tempo questo entra in modalità Doze. Ciò impedisce alle App di accedere alla rete e ritarda le attività, le sincronizzazioni e la ricezione dei normali allarmi. Ignora l\'ottimizzazione Connessione in background - Per poter ricevere le notifiche in tempo reale, Element deve potersi sempre connettere. Anche quando funziona in background. -\nNella schermata successiva ti verrà chiesto di consentire a Element di funzionare anche quando è in background, accetta per favore. + Per poter ricevere le notifiche in tempo reale, ${app_name} deve potersi sempre connettere. Anche quando funziona in background. +\nNella schermata successiva ti verrà chiesto di consentire a ${app_name} di funzionare anche quando è in background, accetta per favore. Concedi il permesso Si è verificato un errore durante la verifica dell\'indirizzo email. Si è verificato un errore durante la verifica del numero di telefono. @@ -1267,12 +1267,12 @@ Alcune notifiche sono disattivate nelle tue impostazioni personalizzate. Il caricamento delle regole personalizzate è fallito, riprova. Controlla le Impostazioni - [%1$s] -\nQuesto errore non dipende da Element. Secondo Google dipende dal fatto che questo dispositivo ha troppe App registrate con FCM. L\'errore si verifica solo in casi in cui ci sia un numero estremo di app, quindi non dovrebbe affliggere l\'utente medio. - [%1$s] -\nQuesto errore non dipende da Element e può avere diverse cause. Potresti riprovare più tardi o controllare che Google Play Service non abbia configurato nelle Impostazioni di sistema dei limiti di utilizzo di dati. Anche un orologio di sistema regolato male potrebbe esserne la causa. Oppure può verificarsi se hai una ROM customizzata. - [%1$s] -\nQuesto errore non dipende da Element. Non c\'è alcun account Google nel telefono. Apri il gestore di account ed aggiungi un account Google. + [%1$s] +\nQuesto errore non dipende da ${app_name}. Secondo Google dipende dal fatto che questo dispositivo ha troppe App registrate con FCM. L\'errore si verifica solo in casi in cui ci sia un numero estremo di app, quindi non dovrebbe affliggere l\'utente medio. + [%1$s] +\nQuesto errore non dipende da ${app_name} e può avere diverse cause. Potresti riprovare più tardi o controllare che Google Play Service non abbia configurato nelle Impostazioni di sistema dei limiti di utilizzo di dati. Anche un orologio di sistema regolato male potrebbe esserne la causa. Oppure può verificarsi se hai una ROM customizzata. + [%1$s] +\nQuesto errore non dipende da ${app_name}. Non c\'è alcun account Google nel telefono. Apri il gestore di account ed aggiungi un account Google. Aggiungi account Configura le notifiche rumorose Configura le notifiche di chiamata @@ -1291,7 +1291,7 @@ Inserisci un nome utente. Inserisci una password La password è troppo debole - Cancella la password se vuoi che Element generi un codice di recupero. + Cancella la password se vuoi che ${app_name} generi un codice di recupero. Non c\'è alcuna sessione Matrix disponibile Non perdere mai i messaggi cifrati I messaggi nelle stanze cifrate sono protetti con crittografia E2E. Solo tu e il/i destinatario/i avete le chiavi crittografiche per leggere questi messaggi. @@ -1397,7 +1397,7 @@ Firma Risposta Home Server non valida Opzioni autocompletamento server - Element ha rilevato una configurazione server personalizzata per il tuo dominio userId \"%1$s\": + ${app_name} ha rilevato una configurazione server personalizzata per il tuo dominio userId \"%1$s\": \n%2$s Usa configurazione Inizializzazione del servizio @@ -1511,7 +1511,7 @@ Attendere prego… Tutte le comunità Anteprima non disponibile per questa stanza - L\'anteprima di stanze leggibili da tutti non è ancora supportata in Element + L\'anteprima di stanze leggibili da tutti non è ancora supportata in ${app_name} Stanze Messaggi diretti Nuova stanza @@ -1607,11 +1607,11 @@ Per poterlo fare, aggiungi un Identity Server nelle Impostazioni. Modalità sync in background Ottimizzato per la batteria - Element si sincronizzerà in background in modo da non consumare la poca batteria disponibile. + ${app_name} si sincronizzerà in background in modo da non consumare la poca batteria disponibile. \nA seconda del livello della batteria, il sistema operativo potrebbe ritardare la sincronizzazione. Ottimizzato per la performance - Element si sincronizzerà in background ad intervalli regolari (configurabili). -\nCiò avrà un certo impatto sulla quantità di dati e batteria utilizzati. Una notifica sempre accesa comunicherà che Element è attivo. + ${app_name} si sincronizzerà in background ad intervalli regolari (configurabili). +\nCiò avrà un certo impatto sulla quantità di dati e batteria utilizzati. Una notifica sempre accesa comunicherà che ${app_name} è attivo. Nessuna sincronizzazione in background Quando l\'App è in background non ti verranno notificati i messaggi in arrivo. L\'aggiornamento delle impostazioni è fallito. @@ -1695,12 +1695,12 @@ Questo contenuto è stato segnalato come inappropriato. \n \nSe non vuoi più vedere contenuti da questo utente, puoi ignorarlo per nascondere i suoi messaggi. - Element richiede l\'autorizzazione per salvare le tue chiavi crittografiche sul disco. + ${app_name} richiede l\'autorizzazione per salvare le tue chiavi crittografiche sul disco. \n \nPermetti l\'accesso nel prossimo pop-up per poter esportare le chiavi manualmente. In questo momento non c\'è nessuna connessione di rete Conferma la tua password - Non puoi farlo da Element mobile + Non puoi farlo da ${app_name} mobile E\'necessaria l\'autenticazione Integrazioni Usa un Integration Manager per gestire bot, bridge, widget e pacchetti di sticker. @@ -1868,7 +1868,7 @@ \nRiaccedi per avere accesso ai dati dell\'account e ai messaggi. Perderai l\'accesso ai messaggi sicuri a meno che non accedi per recuperare le tue chiavi di cifratura. Elimina i dati - La sessione attuale è per l\'utente %1$s e hai fornito le credenziali per l\'utente %2$s. Ciò non è supportato da Element. + La sessione attuale è per l\'utente %1$s e hai fornito le credenziali per l\'utente %2$s. Ciò non è supportato da ${app_name}. \nPrima elimina i dati, poi accedi di nuovo con un altro account. Il tuo collegamento matrix.to non è corretto La descrizione è troppo breve @@ -1886,7 +1886,7 @@ Altre sessioni Mostrati solo i primi risultati, digita più lettere… Crash facile - Element potrebbe crashare più spesso quando si verifica un errore imprevisto + ${app_name} potrebbe crashare più spesso quando si verifica un errore imprevisto Antepone ¯\\_(ツ)_/¯ ad un messaggio testuale Attiva la cifratura Una volta attivata, la cifratura non può essere disattivata. @@ -1957,9 +1957,9 @@ Moderatore in %1$s Personalizzato (%1$d) in %2$s Vai alla ricevuta di lettura - Element non gestisce eventi del tipo \'%1$s\' - Element non gestisce messaggi del tipo \'%1$s\' - Element ha riscontrato un errore con il rendering del contenuto dell\'evento con id \'%1$s\' + ${app_name} non gestisce eventi del tipo \'%1$s\' + ${app_name} non gestisce messaggi del tipo \'%1$s\' + ${app_name} ha riscontrato un errore con il rendering del contenuto dell\'evento con id \'%1$s\' Non ignorare Questa sessione non riesce a condividere questa verifica con le tue altre sessioni. \nLa verifica sarà salvata in locale e condivisa in una versione futura dell\'app. @@ -2054,7 +2054,7 @@ Evento eliminato da un utente, motivo: %1$s Evento moderato da un admin della stanza, motivo: %1$s Le chiavi sono già aggiornate! - Element Android + ${app_name} Android Richieste di chiavi Sblocca la cronologia dei messaggi cifrati Ricarica @@ -2155,13 +2155,13 @@ File multimediale aggiunto alla galleria Impossibile aggiungere il file multimediale alla galleria Imposta una nuova password dell\'account… - Usa l\'ultima versione di Element sui tuoi altri dispositivi, Element Web, Element Desktop, Element iOS, Element per Android o un altro client Matrix che supporti la firma incrociata - Element Web -\nElement Desktop - Element iOS -\nElement Android + Usa l\'ultima versione di ${app_name} sui tuoi altri dispositivi, ${app_name} Web, ${app_name} Desktop, ${app_name} iOS, ${app_name} per Android o un altro client Matrix che supporti la firma incrociata + ${app_name} Web +\n${app_name} Desktop + ${app_name} iOS +\n${app_name} Android o un altro client Matrix che supporti la firma incrociata - Usa l\'ultimo Element sui tuoi altri dispositivi: + Usa l\'ultimo ${app_name} sui tuoi altri dispositivi: Forza l\'attuale sessione di gruppo in uscita in una stanza cifrata ad essere scartata Supportato solo nelle stanze cifrate Usa la tua %1$s o la %2$s per continuare. @@ -2222,11 +2222,11 @@ Caricamento lingue disponibili… Apri condizioni di %s Disconnettere dal server di identitià %s\? - Questo server di identità è obsoleto. Element supporta solo API V2. + Questo server di identità è obsoleto. ${app_name} supporta solo API V2. Questa operazione non è possibile. L\'homeserver è obsoleto. Prima configura un server di identità. Prima accetta le condizioni del server di identità nelle impostazioni. - Per la tua privacy, Element supporta solo l\'invio di email utente e numeri di telefono in formato hash. + Per la tua privacy, ${app_name} supporta solo l\'invio di email utente e numeri di telefono in formato hash. L\'associamento è fallito. Non c\'è alcun associamento attuale con questo identificativo. Il tuo homeserver (%1$s) propone di usare %2$s come tuo server di identità @@ -2240,7 +2240,7 @@ Copia Completato Notifiche - Telefonata di Element fallita + Telefonata di ${app_name} fallita Connessione in tempo reale fallita. \nChiedi all\'amministratore del tuo homeserver di configurare un server TURN per fare funzionare le chiamate. Seleziona dispositivo audio @@ -2445,7 +2445,7 @@ Mostra solo il numero di messaggi non letti in una semplice notifica. Mostra dettagli come il nome delle stanze e il contenuto dei messaggi. Mostra il contenuto nelle notifiche - Il codice PIN è l\'unico modo per sbloccare Element. + Il codice PIN è l\'unico modo per sbloccare ${app_name}. Attiva la biometria specifica del dispositivo, come impronte e riconoscimento facciale. Attiva la biometria Configura protezione @@ -2490,8 +2490,8 @@ Non hai il permesso di avviare una chiamata Non hai il permesso di avviare una chiamata di gruppo Reimposta - Il codice PIN è richiesto ogni volta che apri Element. - È necessario il codice PIN dopo 2 minuti di inattività con Element. + Il codice PIN è richiesto ogni volta che apri ${app_name}. + È necessario il codice PIN dopo 2 minuti di inattività con ${app_name}. Richiedi il PIN dopo 2 minuti %s è entrato. L\'applicazione è in attesa del PUSH @@ -2523,8 +2523,8 @@ Condividi il mio codice Scansiona un codice QR Non è un codice QR Matrix valido - 🔐️ Unisciti a me su Element - Ehy, parliamo su Element: %s + 🔐️ Unisciti a me su ${app_name} + Ehy, parliamo su ${app_name}: %s Invita amici Aggiungi persone "Argomento: " @@ -2638,7 +2638,7 @@ Questa stanza non è pubblica. Non potrai rientrare senza un invito. Predefinito di sistema Autenticazione fallita - Element richiede di reinserire le credenziali per eseguire questa azione. + ${app_name} richiede di reinserire le credenziali per eseguire questa azione. Necessario riautenticarsi Utenti Si è verificato un errore trasferendo la chiamata diff --git a/vector/src/main/res/values-iw/strings.xml b/vector/src/main/res/values-iw/strings.xml index a8b9588f96..abeed9287d 100644 --- a/vector/src/main/res/values-iw/strings.xml +++ b/vector/src/main/res/values-iw/strings.xml @@ -151,7 +151,7 @@ לא הוגדר שרת זהות. אין תוצאות נוספות אין תוצאות - לא אפשרת לאלמנט לגשת לאנשי הקשר המקומיים שלך + לא אפשרת לאלמנט לגשת לאנשי הקשר המקומיים שלך האם אתה בטוח שברצונך להתחיל צ\'אט חדש עם %s\? שלח קול התחל שיחת וידאו @@ -279,7 +279,7 @@ בחר מכשיר סאונד נכשל החיבור בזמן אמת. \nאנא בקש ממנהל שרת הבית שלך להגדיר שרת TURN על מנת שהשיחות יעבדו בצורה אמינה. - שיחת האלמנט נכשלה + שיחת האלמנט נכשלה אל תשאל אותי שוב נסה להשתמש ב-%s השיחה נכשלה עקב שרת שהוגדר כהלכה @@ -309,22 +309,22 @@ אפשר הרשאה לגשת לאנשי הקשר שלך. כדי לסרוק קוד QR, עליך לאפשר גישה למצלמה. מצטער. הפעולה לא בוצעה בגלל הרשאות חסרות - אלמנט יכול לבדוק את פנקס הכתובות שלך כדי למצוא משתמשי מטריקס אחרים על סמך מספרי הדוא\"ל והטלפון שלהם. + אלמנט יכול לבדוק את פנקס הכתובות שלך כדי למצוא משתמשי מטריקס אחרים על סמך מספרי הדוא\"ל והטלפון שלהם. \n \nהאם אתה מסכים לשתף את פנקס הכתובות שלך למטרה זו\? - אלמנט יכול לבדוק את פנקס הכתובות שלך כדי למצוא משתמשי מטריקס אחרים על סמך מספרי הדוא\"ל והטלפון שלהם. אם אתה מסכים לשתף את פנקס הכתובות שלך למטרה זו, אנא הגש גישה בחלון הקופץ הבא. - אלמנט זקוק להרשאה כדי לגשת למצלמה ולמיקרופון שלך כדי לבצע שיחות וידאו. + אלמנט יכול לבדוק את פנקס הכתובות שלך כדי למצוא משתמשי מטריקס אחרים על סמך מספרי הדוא\"ל והטלפון שלהם. אם אתה מסכים לשתף את פנקס הכתובות שלך למטרה זו, אנא הגש גישה בחלון הקופץ הבא. + אלמנט זקוק להרשאה כדי לגשת למצלמה ולמיקרופון שלך כדי לבצע שיחות וידאו. \n \nאנא אפשר גישה בחלונות הקופצים הבאים כדי להיות מסוגל לבצע את השיחה. " \n \nאנא אפשר גישה בחלון הקופץ הבא כדי שתוכל לבצע את השיחה." - אלמנט זקוק להרשאה כדי לגשת למיקרופון שלך כדי לבצע שיחות שמע. + אלמנט זקוק להרשאה כדי לגשת למיקרופון שלך כדי לבצע שיחות שמע. " \n \nאנא אפשר גישה בחלון הקופץ הבא כדי שתוכל לבצע את השיחה." - אלמנט זקוק להרשאה כדי לגשת למצלמה שלך כדי לצלם תמונות ושיחות וידאו. - אלמנט זקוק להרשאה כדי לגשת לספריית התמונות והווידיאו שלך כדי לשלוח ולשמור קבצים מצורפים. + אלמנט זקוק להרשאה כדי לגשת למצלמה שלך כדי לצלם תמונות ושיחות וידאו. + אלמנט זקוק להרשאה כדי לגשת לספריית התמונות והווידיאו שלך כדי לשלוח ולשמור קבצים מצורפים. \n \nאנא אפשר גישה בחלון הקופץ הבא כדי שתוכל לשלוח קבצים מהטלפון שלך. מידע @@ -350,7 +350,7 @@ רינגטון שיחה נכנסת ישתמש ב-%s כסיוע כאשר השרת הביתי שלך אינו מציע כזה (כתובת ה- IP שלך תשותף במהלך שיחה) אפשר שרת עזרה לשיחות - השתמש ברינגטון ברירת המחדל של אלמנט לשיחות נכנסות + השתמש ברינגטון ברירת המחדל של אלמנט לשיחות נכנסות בקש אישור לפני שמתחילים בשיחה מנע שיחה מקרית שיחות @@ -375,7 +375,7 @@ רשימת קבוצות קרא את רשימת הקבלות - הפעל את Element במכשיר אחר שיכול לפענח את ההודעה כדי שיוכל לשלוח את המפתחות להפעלה זו. + הפעל את Element במכשיר אחר שיכול לפענח את ההודעה כדי שיוכל לשלוח את המפתחות להפעלה זו. הבקשה נשלחה בקשת המפתח נשלחה. בקש מחדש מפתחות הצפנה מהפעלות האחרות שלך. @@ -421,10 +421,10 @@ עדכון ההגדרות נכשל. לא תקבל הודעה על הודעות נכנסות כאשר האפליקציה ברקע. אין סנכרון רקע - אלמנט יסונכרן ברקע מעת לעת בזמן מדויק (ניתן להגדרה). + אלמנט יסונכרן ברקע מעת לעת בזמן מדויק (ניתן להגדרה). \nזה ישפיע על השימוש ברדיו ובסוללה, תוצג הודעה קבועה לפיה אלמנט מאזין לאירועים. מותאם לזמן אמת - אלמנט יסונכרן ברקע באופן שישמור על המשאבים המוגבלים של המכשיר (סוללה). + אלמנט יסונכרן ברקע באופן שישמור על המשאבים המוגבלים של המכשיר (סוללה). \nבהתאם למצב משאבי המכשיר שלך, ייתכן שהסנכרון יידחה על ידי מערכת ההפעלה. מותאם לסוללה מצב סנכרון רקע @@ -455,17 +455,17 @@ רגיל התעלם מאופטימיזציה אם משתמש משאיר מכשיר מחובר לחשמל ויציב לתקופה מסוימת, כשהמסך כבוי, המכשיר עובר למצב Doze. זה מונע מאפליקציות גישה לרשת ומגדיר את העבודות, הסנכרונים וההתראות הסטנדרטיות שלהם. - אלמנט אינו מושפע מתהליך מיטוב הסוללה. + אלמנט אינו מושפע מתהליך מיטוב הסוללה. אופטימיזציה של הסוללה השבת הגבלות - מגבלות רקע מופעלות עבור Element. + מגבלות רקע מופעלות עבור Element. \nהעבודה שהאפליקציה מנסה לעשות תוגבל באגרסיביות בזמן שהיא ברקע, וזה עלול להשפיע על ההודעות. \n%1$s - מגבלות רקע מושבתות עבור Element. יש להריץ בדיקה זו באמצעות נתונים ניידים (ללא WIFI). + מגבלות רקע מושבתות עבור Element. יש להריץ בדיקה זו באמצעות נתונים ניידים (ללא WIFI). \n%1$s בדוק מגבלות רקע הפעל את התחלה לאחר אתחול - השירות לא יופעל עם הפעלת המכשיר מחדש, לא תקבל התראות עד שאלמנט ייפתח לפחות פעם אחת. + השירות לא יופעל עם הפעלת המכשיר מחדש, לא תקבל התראות עד שאלמנט ייפתח לפחות פעם אחת. השירות יתחיל עם הפעלת המכשיר מחדש. הפעל לאחר אתחול השירות נכשל מלעלות מחדש @@ -489,11 +489,11 @@ אסימון FCM נרשם בהצלחה ל- HomeServer. רישום אסימונים הוסף חשבון - [%1$s] + [%1$s] \nשגיאה זו אינה בשליטה על אלמנט. אין חשבון Google בטלפון. אנא פתח את מנהל החשבון והוסף חשבון Google. - [%1$s] + [%1$s] \nשגיאה זו אינה בשליטה על אלמנט. זה יכול להתרחש מכמה סיבות. אולי זה יעבוד אם תנסה שוב מאוחר יותר, תוכל גם לבדוק ששירות Google Play אינו מוגבל בשימוש נתונים בהגדרות המערכת, או ששעון המכשיר שלך תקין, או שזה יכול לקרות ב- ROM מותאם אישית. - [%1$s] + [%1$s] \nשגיאה זו איננה בשליטה על Element ולפי גוגל, שגיאה זו מצביעה על כך שלמכשיר יש יותר מדי אפליקציות הרשומות ב- FCM. השגיאה מתרחשת רק במקרים שבהם ישנם מספרים קיצוניים של אפליקציות, כך שהיא לא אמורה להשפיע על המשתמש הממוצע. נכשל באחזור אסימון FCM: \n%1$s @@ -501,7 +501,7 @@ \n%1$s אסימון Firebase תקן שירותי Google Play - אלמנט משתמש בשירותי Google Play כדי להעביר הודעות פוש אך נראה שהוא אינו מוגדר כהלכה: + אלמנט משתמש בשירותי Google Play כדי להעביר הודעות פוש אך נראה שהוא אינו מוגדר כהלכה: \n%1$s ה- APK של שירותי Google Play זמין ומעודכן. בדיקת שירותי הפעלה @@ -619,7 +619,7 @@ שים לב שחלק מסוגי ההודעות מוגדרים כשתיקים (יפיקו התראה ללא צליל). הגדרות מותאמות אישית. אפשר - התראות אינן מופעלות עבור הפעלה זו. + התראות אינן מופעלות עבור הפעלה זו. \nאנא בדוק את הגדרות האלמנט. התראות מופעלות להפעלה זו. הגדרות מושב. @@ -648,7 +648,7 @@ לא הוספה כתובת דוא\"ל לחשבונך כתובות דוא\"ל נדרש אימות - אינך יכול לעשות זאת ממכשיר נייד + אינך יכול לעשות זאת ממכשיר נייד אשר את סיסמתך הצג את פרטי היישום בהגדרות המערכת. מידע על האפליקציה @@ -1071,7 +1071,7 @@ \nגבה את המפתחות שלך בצורה מאובטחת כדי לא לאבד אותם. לעולם אל תאבד הודעות מוצפנות אין מושב מטריקס זמין - אנא מחק את משפט הסיסמה אם ברצונך ש- Element ייצור מפתח שחזור. + אנא מחק את משפט הסיסמה אם ברצונך ש- Element ייצור מפתח שחזור. משפט הסיסמה חלש מדי אנא הזן משפט סיסמה משפט הסיסמה אינו תואם @@ -1316,7 +1316,7 @@ לאחר הפעלתו, לא ניתן להשבית את ההצפנה. אפשר הצפנה הוסף לפני ¯ \\ _ (ツ) _ / ¯ להודעת טקסט רגיל - אלמנט עלול לקרוס לעיתים קרובות יותר כאשר מתרחשת שגיאה בלתי צפויה + אלמנט עלול לקרוס לעיתים קרובות יותר כאשר מתרחשת שגיאה בלתי צפויה כישלון-מהיר מציג רק את התוצאות הראשונות, הקלד עוד אותיות … פעולות אחרות @@ -1333,7 +1333,7 @@ סנכרון ראשוני … התיאור קצר מדי הקישור שלך ל- matrix.to היה תקין - ההפעלה הנוכחית מיועדת למשתמש %1$s ואתה מספק אישורי משתמש %2$s. זה אינו נתמך על ידי אלמנט. + ההפעלה הנוכחית מיועדת למשתמש %1$s ואתה מספק אישורי משתמש %2$s. זה אינו נתמך על ידי אלמנט. \nראשית נקה נתונים ואז היכנס שוב לחשבון אחר. נקה נתונים תאבד את הגישה להודעות מאובטחות אלא אם תיכנס בכדי לשחזר את מפתחות ההצפנה שלך. @@ -1491,7 +1491,7 @@ כל ההודעות (רועשות) התעלם ממשתמש זה אין חיבור רשת כרגע - אלמנט זקוק להרשאה כדי לשמור את מפתחות ה- E2E שלך בדיסק. + אלמנט זקוק להרשאה כדי לשמור את מפתחות ה- E2E שלך בדיסק. \n \nאנא אפשר גישה בחלון הקופץ הבא כדי שתוכל לייצא את המפתחות שלך באופן ידני. תוכן זה דווח כבלתי הולם. @@ -1714,7 +1714,7 @@ לא ניתן להציג תצוגה מקדימה של חדר זה. האם אתה רוצה להצטרף אליו\? בשלב זה אין גישה לחדר זה. \nנסה שוב מאוחר יותר, או בקש ממנהל החדר לבדוק אם יש לך גישה. - התצוגה המקדימה של החדר הקריא בעולם עדיין אינה נתמכת ב- Element + התצוגה המקדימה של החדר הקריא בעולם עדיין אינה נתמכת ב- Element לא ניתן להציג תצוגה מקדימה של חדר זה כל הקהילות אנא המתינו… @@ -1791,7 +1791,7 @@ אמת את זה על ידי השוואה של מחרוזת טקסט קצרה. הוצאת מחשבון בגלל אישורים לא חוקיים או שפג תוקפם. השתמש בקונפיגורציה - אלמנט זיהה תצורת שרת מותאמת אישית לדומיין userId שלך \"%1$s\": + אלמנט זיהה תצורת שרת מותאמת אישית לדומיין userId שלך \"%1$s\": \n%2$s השלם אוטומטית אפשרויות שרת תגובת גילוי שרת בית לא חוקית @@ -1817,13 +1817,13 @@ אשר PIN כדי להשבית PIN שנה את קוד ה- PIN הנוכחי שלך שנה PIN - קוד PIN נדרש בכל פעם שאתה פותח את Element. - קוד PIN נדרש לאחר שתי דקות של אי שימוש ב- Element. + קוד PIN נדרש בכל פעם שאתה פותח את Element. + קוד PIN נדרש לאחר שתי דקות של אי שימוש ב- Element. דרוש מספר PIN לאחר 2 דקות הצג רק מספר הודעות שלא נקראו בהודעה פשוטה. הצג פרטים כמו שמות החדרים ותוכן ההודעה. הצג תוכן בהתראות - קוד PIN הוא הדרך היחידה לפתוח את Element. + קוד PIN הוא הדרך היחידה לפתוח את Element. אפשר ביומטריה ספציפית למכשירים, כמו טביעות אצבע וזיהוי פנים. %2$s חדר נמצא עבור %1$s @@ -1972,17 +1972,17 @@ מצב שמירת נתונים מחיל מסנן ספציפי כך שמסוננים עדכוני נוכחות והודעות הקלדה. מצב שמירת נתונים כן, אני רוצה לעזור! - אנא אפשר ניתוח נתונים כדי לעזור לנו לשפר את Element. - אלמנט אוסף ניתוח אנונימי כדי לאפשר לנו לשפר את היישום. + אנא אפשר ניתוח נתונים כדי לעזור לנו לשפר את Element. + אלמנט אוסף ניתוח אנונימי כדי לאפשר לנו לשפר את היישום. שלח נתוני ניתוח ניתוח נתונים הענק הרשאה - אלמנט צריך לשמור על חיבור רקע בעל השפעה נמוכה על מנת לקבל הודעות אמינות. + אלמנט צריך לשמור על חיבור רקע בעל השפעה נמוכה על מנת לקבל הודעות אמינות. \nבמסך הבא תתבקש לאפשר לאלמנט לרוץ תמיד ברקע, אנא קבל. חיבור ברקע בחר באפשרות אחרת מתן הרשאה - אלמנט יכול לרוץ ברקע כדי לנהל את ההתראות שלך בצורה מאובטחת ופרטית. זה עשוי להשפיע על השימוש בסוללה. + אלמנט יכול לרוץ ברקע כדי לנהל את ההתראות שלך בצורה מאובטחת ופרטית. זה עשוי להשפיע על השימוש בסוללה. פרטיות הודעות נהל את הגדרות הגילוי שלך. תַגלִית @@ -2005,7 +2005,7 @@ בטל את נעילת היסטוריית ההודעות המוצפנות ייצוא ביקורת בקשות מפתח - אלמנט אנדרואיד + אלמנט אנדרואיד המפתחות כבר מעודכנים! האירוע בהנחיית מנהל החדר, סיבה: %1$s האירוע נמחק על ידי המשתמש, הסיבה: %1$s @@ -2117,7 +2117,7 @@ הפעלה זו אינה יכולה לשתף את האימות הזה עם הפעלות אחרות שלך. \nהאימות יישמר באופן מקומי וישותף בגרסה עתידית של האפליקציה. בטל התעלמות - אלמנט נתקל בבעיה בעת הצגת תוכן האירוע עם המזהה \'%1$s\' + אלמנט נתקל בבעיה בעת הצגת תוכן האירוע עם המזהה \'%1$s\' %1$s @ %2$s שולח את ההודעה הנתונה עם קונפטי תתחיל מחדש ללא היסטוריה, ללא הודעות, מכשירים מאומתים או משתמשים מאומתים @@ -2132,13 +2132,13 @@ השתמש ב- %1$s שלך או השתמש ב- %2$s שלך כדי להמשיך. נתמך רק בחדרים מוצפנים מכריח את ההפעלה הקבוצתית החוצה הנוכחית בחדר מוצפן להיזרק - השתמש באלמנט האחרון במכשירים האחרים שלך: + השתמש באלמנט האחרון במכשירים האחרים שלך: או לקוח מטריקס אחר עם יכולת חתימה צולבת - אלמנט iOS + אלמנט iOS \nאלמנט אנדרואיד - רשת האינטרנט + רשת האינטרנט \nשולחן העבודה של אלמנט - השתמש באלמנט העדכני ביותר במכשירים האחרים שלך, Element Web, Element Desktop, Element iOS, Element for Android, או לקוח מטריקס אחר עם יכולת חתימה צולבת + השתמש באלמנט העדכני ביותר במכשירים האחרים שלך, Element Web, Element Desktop, Element iOS, Element for Android, או לקוח מטריקס אחר עם יכולת חתימה צולבת הגדר סיסמת חשבון חדשה … לא ניתן היה לשמור את קובץ המדיה לא ניתן היה להוסיף קובץ מדיה לגלריה @@ -2326,11 +2326,11 @@ הסכמת המשתמש לא סופקה. אין קשר נוכחי למזהה זה. העמותה נכשלה. - למען הפרטיות שלך, אלמנט תומך רק בשליחת הודעות דוא\"ל של משתמשים, בליל ומספר טלפון. + למען הפרטיות שלך, אלמנט תומך רק בשליחת הודעות דוא\"ל של משתמשים, בליל ומספר טלפון. אנא קבל תחילה את התנאים של שרת הזהות בהגדרות. אנא הגדר תחילה שרת זהות. פעולה זו אינה אפשרית. שרת הבית מיושן. - שרת זהות זה מיושן .Element תומך רק ב- API V2. + שרת זהות זה מיושן .Element תומך רק ב- API V2. להתנתק משרת הזהות%s\? תנאים פתוחים של%s טוען שפות זמינות … @@ -2349,8 +2349,8 @@ זה לא קוד QR מטריציוני תקף הזמנות נשלחו אל%1$s ו-%2$s ההזמנה נשלחה אל%1$s - 🔐️ הצטרפו אלי באלמנט - היי, דבר איתי באלמנט:%s + 🔐️ הצטרפו אלי באלמנט + היי, דבר איתי באלמנט:%s להזמין חברים הזמן משתמשים מזמין משתמשים … diff --git a/vector/src/main/res/values-ja/strings.xml b/vector/src/main/res/values-ja/strings.xml index 3d5cc0c555..13ef9801af 100644 --- a/vector/src/main/res/values-ja/strings.xml +++ b/vector/src/main/res/values-ja/strings.xml @@ -354,7 +354,7 @@ ビデオ通話を開始 写真または動画を撮影 初期化メール送信 - 写真撮影やビデオ通話には, Elementアプリに端末のカメラの使用を許可する必要があります. + 写真撮影やビデオ通話には, ${app_name}アプリに端末のカメラの使用を許可する必要があります. 通話を開始できませんでした。後ほど試してください。 権限が無いため、一部の機能を利用できない可能性があります… この部屋で会議を開始するためには招待権限が必要です @@ -362,7 +362,7 @@ ログアウト ホーム 会話なし - 端末の電話帳をElementアプリが読み取ることは許可されていません + 端末の電話帳を${app_name}アプリが読み取ることは許可されていません 結果なし 部屋 部屋一覧 @@ -509,25 +509,25 @@ Matrixの連絡先のみ 通信先が通話の受取に失敗しました。 情報 - Elementは添付ファイルを送信および保存するために写真とビデオライブラリにアクセスするための許可が必要です。 + ${app_name}は添付ファイルを送信および保存するために写真とビデオライブラリにアクセスするための許可が必要です。 あなたの携帯端末からファイルを送信できるようにするには、次のポップアップでアクセスを許可してください。 " \n \n通話をするには、次のポップアップでアクセスできるように設定してください。" - Elementアプリは、音声通話を実行するためにマイクへアクセスするための許可が必要です。 + ${app_name}アプリは、音声通話を実行するためにマイクへアクセスするための許可が必要です。 通話をするには、次のポップアップでアクセスできるようにしてください。 - ビデオ通話を行うには、カメラとマイクにアクセスするための権限がElementアプリに必要です。 + ビデオ通話を行うには、カメラとマイクにアクセスするための権限が${app_name}アプリに必要です。 通話をするには、次のポップアップでのアクセスを許可してください。 - Matrixユーザが電子メールアドレスや電話番号を元に他のユーザを検索するためには、Elementアプリがあなたの端末内電話帳へアクセスする許可が必要です。 + Matrixユーザが電子メールアドレスや電話番号を元に他のユーザを検索するためには、${app_name}アプリがあなたの端末内電話帳へアクセスする許可が必要です。 -Elementからあなた個人の電話帳への検索要求を許可する場合は、次のポップアップでアクセスを許可してください。 - あなた個人の端末内の電話帳に登録されている電子メールアドレス、電話番号を元に、Elementの利用者を検索する場合は、アプリが端末内電話帳へアクセスする許可が必要です。 +${app_name}からあなた個人の電話帳への検索要求を許可する場合は、次のポップアップでアクセスを許可してください。 + あなた個人の端末内の電話帳に登録されている電子メールアドレス、電話番号を元に、${app_name}の利用者を検索する場合は、アプリが端末内電話帳へアクセスする許可が必要です。 -Elementアプリがあなたの電話帳へアクセスすることを許可しますか? +${app_name}アプリがあなたの電話帳へアクセスすることを許可しますか? 申し訳ありません。権限がないために操作が実行されませんでした 発言を通報する 既読 @@ -761,7 +761,7 @@ Elementアプリがあなたの電話帳へアクセスすることを許可し 他のデバイスから 暗号鍵を再度要求 します。 鍵のリクエストが送信されました。 リクエスト送信済 - 鍵をこのデバイスに送信できるように、メッセージを復号化できる他のデバイスでElementを起動してください。 + 鍵をこのデバイスに送信できるように、メッセージを復号化できる他のデバイスで${app_name}を起動してください。 %d 秒 @@ -793,12 +793,12 @@ Elementアプリがあなたの電話帳へアクセスすることを許可し アカウントを停止 自分のアカウントを停止 通知のプライバシー - Elementは通知を安全で内密に扱うため、バックグラウンドで動作できます。これによりバッテリー使用に影響が出ることがあります。 + ${app_name}は通知を安全で内密に扱うため、バックグラウンドで動作できます。これによりバッテリー使用に影響が出ることがあります。 許可を与える 他のオプションを選択 解析データを送信 - Elementはアプリを改善するため、匿名の解析データを収集します。 - Elementを改善するのを助けるため、解析を許可してください。 + ${app_name}はアプリを改善するため、匿名の解析データを収集します。 + ${app_name}を改善するのを助けるため、解析を許可してください。 はい、助けたいです! あなたは現在どのコミュニティーのメンバーでもありません。 ここに入力… @@ -888,7 +888,7 @@ Matrixでのメッセージの可視性は電子メールと同様です。メ 了承 このホームサーバーの方針を閲覧し承認してください: 通話設定画面 - 着信にElementの既定の着信音を使う + 着信に${app_name}の既定の着信音を使う 着信音 着信音を選んでください: 追い出す @@ -1103,8 +1103,8 @@ Matrixでのメッセージの可視性は電子メールと同様です。メ あなたの Matrix アカウントに関連付けられたメールアドレスと電話番号を管理 メールアドレスと電話番号 有効化 - このセッションで通知が無効化されています。 -\nElement の設定をご確認ください。 + このセッションで通知が無効化されています。 +\n${app_name} の設定をご確認ください。 このセッションで通知は有効化されています。 セッション設定 有効化 @@ -1191,7 +1191,7 @@ Matrixでのメッセージの可視性は電子メールと同様です。メ QR コード QR コードによる追加 コードを共有 - Element で会話しましょう: %s + ${app_name} で会話しましょう: %s フレンドを招待 名前または ID で検索 既知のユーザー diff --git a/vector/src/main/res/values-kab/strings.xml b/vector/src/main/res/values-kab/strings.xml index 9ed230fe23..4e6dc67792 100644 --- a/vector/src/main/res/values-kab/strings.xml +++ b/vector/src/main/res/values-kab/strings.xml @@ -668,7 +668,7 @@ Akaram n useqdac Inermisen kan n Matrix Ulac idiwenniyen - Ur teǧǧiḍ ara Element ad yekcem ɣer yinermisen-ik·im idiganen + Ur teǧǧiḍ ara ${app_name} ad yekcem ɣer yinermisen-ik·im idiganen Ulac aqeddac n timagit yettusiwlen. Ulac tixxamin Ulac tixxamin tizuyaz yellan @@ -703,7 +703,7 @@ \nDeg wadeg n wayen, tzemreḍ ad tesqedceḍ aqeddac azayez ɣef %2$s, maca aya ur yettettkal ara fell-as, ad yebḍu tansa-ik·im IP d uqeddac-a. Tzemreḍ ad tesferkeḍ aya deg yiɣewwaren. Ɛreḍ aseqdec n %s Ur iyi-d-ssutur ara tikkelt-nniḍen - Asiwel s Element ur yeddi ara + Asiwel s ${app_name} ur yeddi ara Fren ibenk n yimesli Amennay Kask @@ -1200,11 +1200,11 @@ %1$s (%2$s) Ur yezmir ara ad isekles afaylu n umidya Sbadu awal uffir amaynut n umiḍan… - Element Web -\nElement Desktop - Element iOS -\nElement Android - Seqdec aferdis aneggaru ɣef yibenkan-nniḍen: + ${app_name} Web +\n${app_name} Desktop + ${app_name} iOS +\n${app_name} Android + Seqdec aferdis aneggaru ɣef yibenkan-nniḍen: Yettusefrak kan deg texxamin yettwawgelhen Seqdec %1$s-inek·inem neɣ seqdec %2$s-inek.inem i wakken ad tkemmleḍ. Aḥraz ur yezmir ara ad yekkes awgelhen s tsarut-a n tririt: ttxil-k·m sefqed ma d tasarut n tririt tameɣtut i teskecmeḍ. @@ -1316,21 +1316,21 @@ Awennez n tkamiṛat d awezɣi tiririt ɣef usiwel seg wadeg-nniḍen Ur yezmir ara ad isekles tavidyut - Element yesra tasiregt n unekcum ɣer temkarḍit-inek·inem n tewlafin d tvidyut i tuzna d usekles n tceqqufin yeddan. + ${app_name} yesra tasiregt n unekcum ɣer temkarḍit-inek·inem n tewlafin d tvidyut i tuzna d usekles n tceqqufin yeddan. \n \nMa ulac aɣilif sireg anekcum deg yisfuyla udhimen i d-iteddun i wakken ad tizmireḍ ad tazneḍ ifuyla seg tiliɣri-inek·inem. " \n \nMa ulac aɣilif sireg anekcum ɣer isfuyla udhimen i d-iteddun i wakken tizmireḍ ad tessiwleḍ." - Element yesra tasiregt n unekcum ɣer usawaḍ-inek·inem i wakken ad iseddu isawalen s umeslaw. + ${app_name} yesra tasiregt n unekcum ɣer usawaḍ-inek·inem i wakken ad iseddu isawalen s umeslaw. " \n \nMa ulac aɣilif sireg anekcum ɣer isfuyla udhimen i d-iteddun i wakken tizmireḍ ad tessiwleḍ." - Element yesra tasiregt n unekcum ɣer temkarḍit-inek·inem n tewlafin d tvidyut i tuzna d usekles n tceqqufin yeddan. + ${app_name} yesra tasiregt n unekcum ɣer temkarḍit-inek·inem n tewlafin d tvidyut i tuzna d usekles n tceqqufin yeddan. \n \n \nMa ulac aɣilif sireg anekcum deg yisfuyla udhimen i d-iteddun i wakken ad tizmireḍ ad tazneḍ ifuyla seg tiliɣri-inek·inem. - Element yezmer ad issenqed adlis-inek·inem n tansiwin i wakken ad d-yaf iseqdacen-nniḍen n Matrix s usenned ɣer yimaylen d wuṭṭunen n tiliɣri nsen. + ${app_name} yezmer ad issenqed adlis-inek·inem n tansiwin i wakken ad d-yaf iseqdacen-nniḍen n Matrix s usenned ɣer yimaylen d wuṭṭunen n tiliɣri nsen. \n \nTebɣiḍ ad tebduḍ adlis-inek·inem n tansiwin i yiswi-a\? Nesḥassef. Tiggawt-a ur tezmir ara ad d-tili imi llant tsirag i ixuṣṣen @@ -1429,7 +1429,7 @@ Tafyirt tuffirt ur temṣada ara Ma ulac aɣilif sekcem tafyirt tuffirt Tafyirt tuffirt ur teǧhid ara aṭas - Ma ulac aɣilif kkes tafyirt tuffirt ma yella tebɣiḍ Element ad isirew tasarut n tririt. + Ma ulac aɣilif kkes tafyirt tuffirt ma yella tebɣiḍ ${app_name} ad isirew tasarut n tririt. Ulac tiɣimit n Matrix i yellan (Leqqayen) Sbadu tafyirt tuffirt @@ -1458,7 +1458,7 @@ Sekcem tasarut tuffirt n uḥraz uffir Ɣur-k·m: Tisur ttwaleqqment yakan! - Element Android + ${app_name} Android Isutar n tsura Ittraju %s… Tifrat n wugur @@ -1466,7 +1466,7 @@ Kcem %s Tuqqna n umidyat ur teddi ara Ṭṭef-d tawlaft neɣ tavidyut - Element yesra tasiregt n unekcum er tkamiat-ik·im i wakken ad d-yeṭṭef tawlafin d yisawalen s tvidyut. + ${app_name} yesra tasiregt n unekcum er tkamiat-ik·im i wakken ad d-yeṭṭef tawlafin d yisawalen s tvidyut. Yal win·tin yessnen aseɣwen n texxamt, slid inebgawen Yal win·tin yessnen aseɣwen n texxamt rnu-d ɣer-sen inebgawen @@ -1574,13 +1574,13 @@ \n \nIlaq-ak·am ad ternuḍ imayl-ik·im ɣer umaɣun-inek·inem deg yiɣewwaren. Ibenk-inek·inem yesseqdac aneggaf n tɣellist TLS aqbur, yemzer i uḍfar s waṭas, i tɣellist-inek·inem ur tettizmireḍ ara a teqqneḍ - Ma ulac aɣilif err Element deg yibenk-nniḍen i izemren ad yekkes awgelhen i yiznan, akken ad yizmir ad yazen tisura ɣer tɣimit-a. - Seqdec taṭenṭunt n Element tamezwert i yisawalin ara d-ikecmen + Ma ulac aɣilif err ${app_name} deg yibenk-nniḍen i izemren ad yekkes awgelhen i yiznan, akken ad yizmir ad yazen tisura ɣer tɣimit-a. + Seqdec taṭenṭunt n ${app_name} tamezwert i yisawalin ara d-ikecmen Ad isseqdec %s d tallalt mi ara yili uqeddac-ik·im agejdan ur d-imudd ara yiwen (tansa-inek·inem IP ad tettwabḍu ayen akk ara yeqqim usiwel) Taṭenṭunt n usiwel i d-ikecmen Fren asṭeṭen i yisawalen: Agalis anmeggag ur yessaweḍ ara ad yerfed. - Matrix yezmer ad isenqed adlis-ik·im n tansiwin i wakken ad yaf iseqdacen-nniḍen n Matrix s ttawil n yimaylen d wuṭṭunen n tiliɣri nsen. Ma yella tqebleḍ ad tebduḍ adlis-ik·im n tansiwin i waya, ma ulac aɣilif sireg anekcum deg yisfuyla udhimen i d-iteddun. + Matrix yezmer ad isenqed adlis-ik·im n tansiwin i wakken ad yaf iseqdacen-nniḍen n Matrix s ttawil n yimaylen d wuṭṭunen n tiliɣri nsen. Ma yella tqebleḍ ad tebduḍ adlis-ik·im n tansiwin i waya, ma ulac aɣilif sireg anekcum deg yisfuyla udhimen i d-iteddun. Rnu aqeddac n timagit deg yiɣewwaren-ik·im i wakken ad tesnetmeḍ tigawt-a. S tidet tebɣiḍ ad teǧǧeḍ taxxamt\? Tebɣiḍ s tidet ad tekkseḍ %s seg udiwenni-a\? @@ -1607,7 +1607,7 @@ Turagin n wis tlata Ulac uṭṭun n tiliɣri i yettwarnan ɣer umiḍan-inek·inem Sken talɣut n usnas deg yiɣewwaren n unagraw. - Ur tezmireḍ ara ad tgeḍ aya seg Element n uziraz + Ur tezmireḍ ara ad tgeḍ aya seg ${app_name} n uziraz Ulac imayl yettwarnan ɣer umiḍan-ik·im Ttkel tettekkaḍ ɣef useɣwen yellan deg yimayl i ak·am-n-uznen. Iɣewwaren n yilɣa leqqayen @@ -1617,13 +1617,13 @@ Ilɣa ttwasensen i umiḍan-inek·inem. \nMa ulac aɣilif senqed iɣewwaren n umiḍan. Ttwaremden yilɣa i tɣimit-a. - Ur ttwaremden ara yilɣa i tɣimit-a. -\nMa ulac aɣilif senqed iɣewwaren n Element. + Ur ttwaremden ara yilɣa i tɣimit-a. +\nMa ulac aɣilif senqed iɣewwaren n ${app_name}. Ẓer belli kra n yiznan yettwarun, ttusbadun ad ilin s tsusmi (ad d-neg alɣu s war imesli). Kra n yilɣa ttusensen deg yiɣewwaren-ik·im udmawanen. Asali n yilugan udmawanen ur yeddi ara, ma ulac aɣilif ɛreḍ tikkelt-nniḍen. Imeẓla APK n Google Play llan rnu d imaynuten. - Element yesseqdac imeẓla n Google Play i wakken ad d-iserreḥ i yiznan push maca ur yettban ara ttusewlen akken iwata: + ${app_name} yesseqdac imeẓla n Google Play i wakken ad d-iserreḥ i yiznan push maca ur yettban ara ttusewlen akken iwata: \n%1$s Ajuṭu FCM yettwasekles akken iwata ɣef uqeddac agejdan. Asekles n ujuṭu FCM ɣef uqeddac agejdan ur yeddi ara. @@ -1636,12 +1636,12 @@ Ameẓlu yettwanɣa syen yules asenker s wudem awurman. Allus n usenker n umeẓlu ur yeddi ara Ameẓlu ad yenker mi ara yales yibenk asenker. - "Ameẓlu ur yettenker ara mi ara yales yibenk asenker, ur d-tremseḍ ara ilɣa alamma yettwaldi Element xerṣum yiwet n tikkelt." + "Ameẓlu ur yettenker ara mi ara yales yibenk asenker, ur d-tremseḍ ara ilɣa alamma yettwaldi ${app_name} xerṣum yiwet n tikkelt." Rmed asenker seg tnekra Senqed ilugan n ugilal - Iluggan n ugilal ttusensen i Element. Asekyed-a ilaq ad yeddu s useqdec n yisefka n uziraz (ulac WIFI). + Iluggan n ugilal ttusensen i ${app_name}. Asekyed-a ilaq ad yeddu s useqdec n yisefka n uziraz (ulac WIFI). \n%1$s - Ilugan n ugilal ttwaremden i Element. + Ilugan n ugilal ttwaremden i ${app_name}. \nAmahil i yettaɛraḍ usnas ad t-yeg yesɛa talast ma mazal-it yella ɣef ugilal, aya yezmer ad d-yawi ugur i yilɣa. \n \n%1$s @@ -1659,7 +1659,7 @@ Iznan ideg yella yisem-iw yettwaskanen Mi ara d-ttunecdeɣ ɣer texxamt Yettusesfer i uẓru - Element ad yemtawi deg ugilal akken ara yeḥrez tilisa n teɣbula n yibenk (aẓru). + ${app_name} ad yemtawi deg ugilal akken ara yeḥrez tilisa n teɣbula n yibenk (aẓru). \nAlmend n waddad n teɣbalut n yibenk-inek·inem, amtawi yezmer ad iɛeṭṭel seg anagraw n wammud. Yettusesfer i wakud ilaw Ur d-tetteṭṭfeḍ ara ulɣu n yiznan i d-ikecmen ma yili asnas ɣef ugilal i yella. @@ -1710,8 +1710,8 @@ Fren taxtiṛit-nniḍen Tuqqna n ugilal Mudd tasiregt - Element ileqqeḍ tasleḍt tudrigt i wakken ad aɣ-iɛawen ad nesnerni asnas. - Ma ulac aɣilif rmed tasleḍt i wakken ad aɣ-ɛiwnent ad nesnerni Element. + ${app_name} ileqqeḍ tasleḍt tudrigt i wakken ad aɣ-iɛawen ad nesnerni asnas. + Ma ulac aɣilif rmed tasleḍt i wakken ad aɣ-ɛiwnent ad nesnerni ${app_name}. Ih, bɣiɣ ad d-muddeɣ tallalt! Askar n usekles n yisefka Leqqem isem azayez @@ -1848,7 +1848,7 @@ Aḥraz n tsura %d… Iɣewwaren n uqeddac ummid awurman - Element yufa-d tawila n uqeddac udmawan i taɣult usulay—inek·inem n uqeddac \"%1$s\": + ${app_name} yufa-d tawila n uqeddac udmawan i taɣult usulay—inek·inem n uqeddac \"%1$s\": \n%2$s Seqdec tawila Tettusuffɣeḍ ssebba n yinekcam arimeɣta neɣ yemmuten. @@ -1962,7 +1962,7 @@ Agbur-a yettwakter-d mačči d win i iwulmen. \n \nMa yella dayen ur tebɣiḍ ara ad twaliḍ agbur-nniḍen sɣur aseqdac-a, tzemreḍ ad t-tesweḥleḍ i wakken ad teffreḍ iznan-ines - Element yesra tasiregt i usekles n tsura-inek·inem E2E ɣef uḍebsi. + ${app_name} yesra tasiregt i usekles n tsura-inek·inem E2E ɣef uḍebsi. \n \nMa ulac aɣilif sireg anekcum ɣef yisfuyla udhimen i d-iteddun i wakken ad tizmireḍ ad tsifḍeḍ tisura-ik·im s ufus. Ulac akk tuqqna n uzeṭṭa i igerrzen akka tura @@ -2027,7 +2027,7 @@ \nKcem tikkelt-nniḍen i wakken ad tkecmeḍ ɣer yisefka d yiznan n umiḍan-inek·inem. Aseɣwen-inek·inem n Matrix.to ur yemsil ara akken iwata Ala igmaḍ imezwura i d-yettwaseknen, aru ugar n yisekkilen… - Element yezmer ad yewḥel ugar n tikkal mi ara d-tili tuccḍa ur nettwaṛǧa ara + ${app_name} yezmer ad yewḥel ugar n tikkal mi ara d-tili tuccḍa ur nettwaṛǧa ara Taɣult n yimayl—ik·im ur tesɛi ara azref i wakken ad tettwasekles ɣef uqeddac-a Tuqqna ur nettwattkal ara Senqed aseqdac-a s usentem n yimujit-a asuf i d-yettbanen ɣef ugdil-ines, deg yiwem umsizwer. @@ -2066,9 +2066,9 @@ D amaẓrag deg %1$s Amezwer deg %1$s D udmawan (%1$d) deg %2$s - "Element ur isekker ara ineḍruyen n wanaw \'%1$s\'" - "Element ur isekker ara izen n wanaw \'%1$s\'" - Element yemlal-d ugur mi ara d-yettarra agbur n uneḍru s usulay \'%1$s\' + "${app_name} ur isekker ara ineḍruyen n wanaw \'%1$s\'" + "${app_name} ur isekker ara izen n wanaw \'%1$s\'" + ${app_name} yemlal-d ugur mi ara d-yettarra agbur n uneḍru s usulay \'%1$s\' Tiɣimit-a ulamek ara tebḍu aselken-a akked tqimiyin-nniḍen. \nAselken ad yettwaseklas s wudem adigan syen yettwabḍu deg lqem i d-iteddun n usnas. Tixxamin n melmi kan @@ -2197,7 +2197,7 @@ Armad n uɣewwar-a ad yernu FLAG_SECURE ɣer meṛṛa irmad. Ales asenker n usnas i wakken ad yemmed usnifel. Afaylu n umidyat yettwarna ɣer temsikent D awezɣi ad yernu ufaylu n umidyat ɣer temsikent - Seqdec lqem akk aneggaru n Element ɣef yibenkan-inek·inem-nniḍen: Element Web, Element n tnarit, Element iOS, Element i Android neɣ amsaɣ-nniḍen n Matrix yessefraken azmul anmidag + Seqdec lqem akk aneggaru n ${app_name} ɣef yibenkan-inek·inem-nniḍen: ${app_name} Web, ${app_name} n tnarit, ${app_name} iOS, ${app_name} i Android neɣ amsaɣ-nniḍen n Matrix yessefraken azmul anmidag Fren tasarut-ik·im n tririt, neɣ err-itt s ufus s tira-ines s uasiw neɣ s usenteḍ-ines seg ɣefafus-inek·inem Senqed amyigew s yimujit Sentem timagit-inek·inem s usenqed n yinekcam-a, anef-as ad yekcem ɣer yiznan yettwawgelhen. @@ -2207,11 +2207,11 @@ \n \nTebɣiḍ s tidet ad tkemmleḍ\? Ffeɣ seg tuqqna n uqeddac n timagit %s\? - Aqeddac-a n timagit iɛedda d aqbur. Element yessafrak kan API V2. + Aqeddac-a n timagit iɛedda d aqbur. ${app_name} yessafrak kan API V2. Tamahekt-a ulamek tedda. Aqeddac agejdan d aqbur. Ma ulac aɣilif qbel deg tazwara swel aqeddac n timagit. Ma ulac aɣilif qbel deg tazwara tiwtilin n uqeddac n timagit deg yiɣewwaren. - I tɣellist n tbaḍnit-ik·im, Element yessefrak kan tuzna n yimaylen d wuṭṭunen n tiliɣri yettudwin i useqdac. + I tɣellist n tbaḍnit-ik·im, ${app_name} yessefrak kan tuzna n yimaylen d wuṭṭunen n tiliɣri yettudwin i useqdac. Assaɣ ur yeddi ara. Akka tura ulac akk assaɣ d unekcam-a. Aqeddac-ik·im agejdan (%1$s) yefka-d takti n useqdec n %2$s d aqeddac-ik·im n timagit @@ -2224,7 +2224,7 @@ Ur tezmireḍ ara ad teldiḍ taxxamt ansi i d-tettwagedleḍ. Ur nessaweḍ ara ad d-naf taxamt-a. Muqel ma tella d tidet. Senqes deg wazal - Element ur t-iḥuza ara usesfer n uẓru. + ${app_name} ur t-iḥuza ara usesfer n uẓru. Tamahelt-a tesra asentem-nniḍen. \nI ukemmel, ma ulac aɣilif sekcem awal-ik·im uffir. %s yettaɛraḍ ad d-isali tazmilt tufrint deg tesnakudt n texxamt-a, maca ur yessaweḍ ara ad tt-naf. @@ -2250,22 +2250,22 @@ Aselken yettubeddel deg ubdil n win yettwamanen deg tiliɣri-inek·inem. Aya MAČČI D AYEN IGERRZEN. Issefk UR TETTAQBALEḌ ARA aselkin-a amaynut. Aselkin yettwabeddel seg win yettwamanen ɣer win ur nettwaman ara. Ahat aqeddac iɛawed-d aselkin-ines. Nermes anedbal n uqeddac ɣef udsil umḍin yetturaǧun. Ur qebbel ara aselkin alamma isuffeɣ-d unedbal n uqeddac adsil umḍin yemṣadan d win yellan ddaw-a. - [%1$s] -\nTuccḍa yekka nnig tezmert n Element, akken i d-yenna Google, tuccḍa-a teskan-d belli ibenk ɣer-s aqettun n yisnasen yettwaskelsen s FCM. Tuccḍa ur d-tettili ara ala ma yilin umiḍan n yisnasen aṭas, ɣef waya ur ilaq ara ad tḥaz aseqdac n tlemmast. - [%1$s] -\nTuccḍa-a tekka nnig tezmert n Element. Aya yezmer ad d-yili seg waṭas n ssebbat. Ahat ad yeddu ma yella tɛerḍeḍ tikkelt-nniḍen ticki, daɣen tzemreḍ ad tesneqdeḍ ma yella ameẓlu Google Play ur yesɛi ara talast deg useqdec n yisefka deg yiɣewwaren n unagraw, neɣ tamrilt n yibenk-inek·inem tṣeḥḥa, neɣ yezmer ad d-yili waya ɣef Rom tudmawant. - [%1$s] -\nTuccḍ-a tekka nnig tezmert n Element. Ulac amiḍan Google ɣe tiliɣri. Ma ulac aɣilif, ldi amsefrak n umiḍan syen rnu amiḍan n Google. + [%1$s] +\nTuccḍa yekka nnig tezmert n ${app_name}, akken i d-yenna Google, tuccḍa-a teskan-d belli ibenk ɣer-s aqettun n yisnasen yettwaskelsen s FCM. Tuccḍa ur d-tettili ara ala ma yilin umiḍan n yisnasen aṭas, ɣef waya ur ilaq ara ad tḥaz aseqdac n tlemmast. + [%1$s] +\nTuccḍa-a tekka nnig tezmert n ${app_name}. Aya yezmer ad d-yili seg waṭas n ssebbat. Ahat ad yeddu ma yella tɛerḍeḍ tikkelt-nniḍen ticki, daɣen tzemreḍ ad tesneqdeḍ ma yella ameẓlu Google Play ur yesɛi ara talast deg useqdec n yisefka deg yiɣewwaren n unagraw, neɣ tamrilt n yibenk-inek·inem tṣeḥḥa, neɣ yezmer ad d-yili waya ɣef Rom tudmawant. + [%1$s] +\nTuccḍ-a tekka nnig tezmert n ${app_name}. Ulac amiḍan Google ɣe tiliɣri. Ma ulac aɣilif, ldi amsefrak n umiḍan syen rnu amiḍan n Google. Ma yella aseqdac yeǧǧa ibenk ur t-isfurek ara rnu i kra n wakud, s ugdil yensan, ibenk ad yekcem deg uskar Doze. Aya ur yettaǧǧa ara isnasen ad kecmen ɣer uzeṭṭa i wakken ad aznen imahilen, amtawi d tesluɣin tiluganin nsen. - Element ad yemtawi ɣef ugilal sya ɣer da deg yiwen n wakud (yettuswal). -\nAya ad iḥaz aseqdec n ṛṛadyu d uẓru, ad yili wulɣu ad d-yettwaskanen i lebda i d-yemmalen belli Element yettɛassa ineḍruyen. + ${app_name} ad yemtawi ɣef ugilal sya ɣer da deg yiwen n wakud (yettuswal). +\nAya ad iḥaz aseqdec n ṛṛadyu d uẓru, ad yili wulɣu ad d-yettwaskanen i lebda i d-yemmalen belli ${app_name} yettɛassa ineḍruyen. Seqdec amsefrak n yimsidaf i usefrek n yibuḍen, n tleggiyin, n yiwiǧiten d yikemmusen n ustiker. \nImsefrak n yimsidaf temmsen-d isefka n twila, syen zemren ad snilen iwiǧiten, ad aznen tinubgiwin ɣer teamin yerna ad sbadun iswiren n tezmert s yisem-ik·im. Msel iznan s useqdec n tseddast n markdown send ad ttwaznen. Aya ad isireg amsal leqqayen am useqdec n yizamulen n yitran i uskan n uḍris uknan. Taqeffalt Kcem n unasiw n useɣzan ad tazen izen ideg ara teg angaz gar yizirigen - Element yezmer ad yeddu deg ugilal i usefrek n yilɣa-inek·inem s wudem aɣelsan, uslig. Aya yezmer ad iḥaz aseqdec n uẓru. - Element yesra ad yeǧǧ tuqqna s usemdu meẓẓiyen ɣef ugilal i wakken ad d-yawi ilɣa yettwamanen. -\nƔef ugdil i d-iteddun, ad tettusnubegteḍ i wakken ad tmuddeḍ tisirag i Element ad yeddu i lebda ɣef ugilal, ttxil-k·m qbel. + ${app_name} yezmer ad yeddu deg ugilal i usefrek n yilɣa-inek·inem s wudem aɣelsan, uslig. Aya yezmer ad iḥaz aseqdec n uẓru. + ${app_name} yesra ad yeǧǧ tuqqna s usemdu meẓẓiyen ɣef ugilal i wakken ad d-yawi ilɣa yettwamanen. +\nƔef ugdil i d-iteddun, ad tettusnubegteḍ i wakken ad tmuddeḍ tisirag i ${app_name} ad yeddu i lebda ɣef ugilal, ttxil-k·m qbel. Askar n usekles n yisefka yessemras imsizdeg afrayan i wakken ileqman n tihawt d yilɣa n tira ad ttwasizedgen. Tigi d timahilin tarmitanin i izemren ad rẓent s wayen ur nettwaṛǧa ara. Seqdec-itent maca ɣur-k·m. Aya ad yerr amiḍan-ik·im ur yettusexdam ara i lebda. Ur tettizmireḍ ara ad tkecmeḍ, ula d amdan-nniḍen ur yettizmir ara ad yales ajerred s usulay-a n useqdac. Aya ad isuffeɣ amiḍan-ik·im seg meṛṛa tixxamin ideg ittekka, yerna ad yekkes akk talqayt n umiḍan-ik·im seg uqeddac n timagit. Ulac tuɣalin ɣer deffir deg tigawt-a. @@ -2282,14 +2282,14 @@ Senqed tiɣimit-a i wakken ad tcerḍeḍ fell-as tettwaḍman. Attkal ɣef tɣimiyin n yimendiden yettakk-ak·am-d lehna n uqerru mi ara tesseqdaceḍ iznan yettwawgelhen seg yixef ɣer yixef. Tiɣimit ur tessaweḍ ara ad teqbel amtawi n tsarut, agbar, MAC neɣ tarrayt SAS Af-d iznan ur nettwaɣra ara da - Taskant n texxamt ara yettwaɣran deg umaḍal ur tettusefrak ara ar tura deg Element + Taskant n texxamt ara yettwaɣran deg umaḍal ur tettusefrak ara ar tura deg ${app_name} Ulac tinezgarin push ikelsen Tuzna n tenfult (%1$s / %2$s) Rmed afraḍ i tririt deg tesnakudt Aqeddac n timagit i tferneḍ ulac ɣer-s akk tiwtilin n yimeẓla. Ur ttkemmil ara ala ma yella tettekleḍ ɣef umeẓlu Iɣmisen ɣezzifen ad ɛawnen ineflayen s umuddu n wugar n yiɣemisen mi ara tazneḍ aneqqis RageShake, ula ma yili yermed asnas ur yettazen ara agbur n yiznan neɣ isefka-nniḍen usligen. Akka d-yettban aqeddac yettaṭṭaf aṭas n wakud ɣef tririt. Yezmer aya yekka-d seg yir tuqqna neɣ seg tuccḍa deg uqeddac. Ma ulac aɣilif ɛreḍ tikkelt-nniḍen ticki. - Tiɣimit-a tamirant n useqdac %1$s ma d kečč·kemm ad tesnetmeḍ inekcam i useqdac %2$s. Aya ur t-yessefrak ara Element. + Tiɣimit-a tamirant n useqdac %1$s ma d kečč·kemm ad tesnetmeḍ inekcam i useqdac %2$s. Aya ur t-yessefrak ara ${app_name}. \nMa ulac aɣilif, deg tazwara sfeḍ isefka, syen kcem tikkelt-nniḍen s umiḍan-nniḍen. Askar n uneflay yermed timahilin i yeffren yerna yezmer daɣen ad yerr asnas ur yerkid ara akken iwata. I yineflayen kan! Abrir arurad @@ -2322,7 +2322,7 @@ Mazal ur tettwarna ara texxamt ar tura. Sefsex timerna n texxamt\? Tangalt QR d tarameɣtut (URI d arameɣtu)! Senfel PIN inek·inem amiran - Tangalt PIN tettusra yal mi ara teldiḍ Element. + Tangalt PIN tettusra yal mi ara teldiḍ ${app_name}. Llan yisenfal ur nettusekles ara. Sefsex isenfal\? Sbadu avaṭar Aseɣwen n Matrix @@ -2359,8 +2359,8 @@ Smiḍen tangalt QR Tansa tamynut i d-yettusuffɣen (am. #alias:server) Isumar - 🔐️ Rnu-d ɣur-i ɣer element - Tangalt PIN d nettat kan i d ttawil s wayes ara teldiḍ Element. + 🔐️ Rnu-d ɣur-i ɣer ${app_name} + Tangalt PIN d nettat kan i d ttawil s wayes ara teldiḍ ${app_name}. Rnu asentel Snubget-d imeddukkal Tangalt-inu @@ -2394,7 +2394,7 @@ %d tinubga %d n tnubgiwin - Tangalt PIN tettusra seld 2 tesdatin n war aseqdec n Element. + Tangalt PIN tettusra seld 2 tesdatin n war aseqdec n ${app_name}. Iznan dagi ur ttwawgelhen ara seg yixef ɣer yixef Tangalt QR ur tettusmiḍen ara! Bḍu tangalt-inu diff --git a/vector/src/main/res/values-ko/strings.xml b/vector/src/main/res/values-ko/strings.xml index e98b406305..dbd48a6c67 100644 --- a/vector/src/main/res/values-ko/strings.xml +++ b/vector/src/main/res/values-ko/strings.xml @@ -228,7 +228,7 @@ 완료 정말 로그아웃하시겠어요\? 읽음으로 표시 - Element이 연락처에 접근할 수 없게 되어 있습니다 + ${app_name}이 연락처에 접근할 수 없게 되어 있습니다 %d명의 사용자 @@ -360,7 +360,7 @@ 키 요청을 보냈습니다. 요청 보냄 - 다른 기기에서 Element을 설치해서 메시지를 암호화하고 이 기기로 키를 보내도록 합니다. + 다른 기기에서 ${app_name}을 설치해서 메시지를 암호화하고 이 기기로 키를 보내도록 합니다. 읽은 기록 읽기 @@ -388,7 +388,7 @@ 방 주제 전화 - 수신 전화에 Element 기본 벨소리를 사용합니다 + 수신 전화에 ${app_name} 기본 벨소리를 사용합니다 수신 전화 벨소리 전화에 사용할 벨소리를 선택하세요: @@ -412,22 +412,22 @@ 영상을 촬영할 수 없음 정보 - 첨부 파일을 보내고 저장하려면 Element은 영상과 사진 보관함에 접근하는 권한이 필요합니다. + 첨부 파일을 보내고 저장하려면 ${app_name}은 영상과 사진 보관함에 접근하는 권한이 필요합니다. \n \n당신의 휴대 전화에서 파일을 보내려면 다음 팝업에서 접근을 허용해주세요. - 사진을 찍고 영상 통화를 하려면 Element은 카메라에 접근하는 권한이 필요합니다. + 사진을 찍고 영상 통화를 하려면 ${app_name}은 카메라에 접근하는 권한이 필요합니다. " \n \n전화를 하려면 다음 팝업에서 접근을 허용해주세요." - 음성 통화를 하려면 Element은 마이크에 접근하는 권한이 필요합니다. + 음성 통화를 하려면 ${app_name}은 마이크에 접근하는 권한이 필요합니다. " \n \n전화를 하려면 다음 팝업에서 접근을 허용해주세요." - 영상 통화를 하려면 Element은 카메라와 마이크에 접근하는 권한이 필요합니다. + 영상 통화를 하려면 ${app_name}은 카메라와 마이크에 접근하는 권한이 필요합니다. \n \n전화를 하려면 다음 팝업에서 접근을 허용해주세요. - Element은 당신의 연락처를 확인해서 이메일과 전화번호를 기반으로 다른 Matrix 사용자를 찾을 수 있습니다. 이런 이유로 연락처를 공유하는 것을 허용한다면, 다음 팝업에서 접근을 허용해주세요. - "Element은 당신의 연락처를 확인하여 이메일과 전화번호를 기반으로 다른 Matrix 사용자를 찾을 수 있습니다. + ${app_name}은 당신의 연락처를 확인해서 이메일과 전화번호를 기반으로 다른 Matrix 사용자를 찾을 수 있습니다. 이런 이유로 연락처를 공유하는 것을 허용한다면, 다음 팝업에서 접근을 허용해주세요. + "${app_name}은 당신의 연락처를 확인하여 이메일과 전화번호를 기반으로 다른 Matrix 사용자를 찾을 수 있습니다. \n \n이런 이유로 연락처를 공유하는 것을 허용하겠습니까\?" @@ -665,8 +665,8 @@ 기기 설정. 알림이 이 기기에서 켜집니다. - 알림이 이 기기에서 허용되지 않습니다. -\nElement 설정을 확인해주세요. + 알림이 이 기기에서 허용되지 않습니다. +\n${app_name} 설정을 확인해주세요. 켜기 맞춤 설정. @@ -677,7 +677,7 @@ Play 서비스 확인 Google Play 서비스 APK는 최신 버전입니다. - Element은 Google Play 서비스를 사용해 푸시 메시지를 보내지만 올바르게 설정되지 않은 모양입니다: + ${app_name}은 Google Play 서비스를 사용해 푸시 메시지를 보내지만 올바르게 설정되지 않은 모양입니다: \n%1$s Play 서비스 고치기 @@ -686,12 +686,12 @@ \n%1$s FCM 토큰을 검색하는데 실패했습니다: \n%1$s - [%1$s] -\n이 오류는 Element의 통제 밖에 있으며 Google과 관련이 있습니다, 이 오류는 기기가 FCM에 등록된 앱이 너무 많다는 것을 나타냅니다. 오류는 수 많은 앱이 있는 경우에만 발생하고, 일반 사용자에게 영향을 미치지 않아야 합니다. - [%1$s] -\n이 오류는 Element의 통제 밖입니다. 여러 이유로 발생할 수 있습니다. 나중에 다시 시도하면 작동할 지도 모릅니다, 시스템 설정에서 Google Play 서비스의 데이터 사용이 제한되었는지, 기기의 시간은 맞는 지 확인해보세요, 혹은 커스텀 롬 환경에서 발생할 수 있습니다. - [%1$s] -\n이 오류는 Element의 통제 밖에 있습니다. 휴대 전화에 Google 계정이 없습니다. 계정 관리자를 열어 Google 계정을 추가하세요. + [%1$s] +\n이 오류는 ${app_name}의 통제 밖에 있으며 Google과 관련이 있습니다, 이 오류는 기기가 FCM에 등록된 앱이 너무 많다는 것을 나타냅니다. 오류는 수 많은 앱이 있는 경우에만 발생하고, 일반 사용자에게 영향을 미치지 않아야 합니다. + [%1$s] +\n이 오류는 ${app_name}의 통제 밖입니다. 여러 이유로 발생할 수 있습니다. 나중에 다시 시도하면 작동할 지도 모릅니다, 시스템 설정에서 Google Play 서비스의 데이터 사용이 제한되었는지, 기기의 시간은 맞는 지 확인해보세요, 혹은 커스텀 롬 환경에서 발생할 수 있습니다. + [%1$s] +\n이 오류는 ${app_name}의 통제 밖에 있습니다. 휴대 전화에 Google 계정이 없습니다. 계정 관리자를 열어 Google 계정을 추가하세요. 계정 추가 토큰 등록 @@ -711,19 +711,19 @@ 부팅 시 시작 기기가 다시 시작되면 서비스가 시작됩니다. - 기기가 다시 시작될 때 서비스가 시작되지 않습니다, 다시 시작한 후 Element을 한 번이라도 열지 않으면 알림을 받을 수 없습니다. + 기기가 다시 시작될 때 서비스가 시작되지 않습니다, 다시 시작한 후 ${app_name}을 한 번이라도 열지 않으면 알림을 받을 수 없습니다. 부팅 시 시작 활성화 백그라운드 제한 사항 확인 - Element에 대한 백그라운드 제한 사항을 비활성화합니다. 이 테스트는 모바일 데이터를 사용해야 합니다 (WIFI 없음). + ${app_name}에 대한 백그라운드 제한 사항을 비활성화합니다. 이 테스트는 모바일 데이터를 사용해야 합니다 (WIFI 없음). \n%1$s - Element에 대한 백그라운드 제한 사항이 활성화됩니다. + ${app_name}에 대한 백그라운드 제한 사항이 활성화됩니다. \n앱이 백그라운드에서 작업하는 동안 앱이 시도하는 작업은 적극적으로 제한되며, 이는 알림에 영향을 줄 수 있습니다. \n%1$s 제한 사항 비활성화 배터리 최적화 - Element은 배터리 최적화의 영향을 받지 않습니다. + ${app_name}은 배터리 최적화의 영향을 받지 않습니다. 사용자가 기기 화면을 끈 상태로 일정 시간 동안 연결되지 않은 상태로 두면, 기기는 Doze 모드에 들어갑니다. 이렇게 하면 앱이 네트워크에 접근하지 못하고 작업, 동기화 및 표준 경보가 지연됩니다. 최적화 무시하기 @@ -809,19 +809,19 @@ 내 계정 비활성화 알림 개인 정보 - Element은 백그라운드에서 실행되어 알림을 안전하고 은밀하게 관리할 수 있습니다. 이것은 배터리 사용량에 영향을 줄 수 있습니다. + ${app_name}은 백그라운드에서 실행되어 알림을 안전하고 은밀하게 관리할 수 있습니다. 이것은 배터리 사용량에 영향을 줄 수 있습니다. 권한 부여 다른 설정을 선택하세요 백그라운드 연결 - Element은 신뢰가 있는 알림을 위해 낮은 영향의 백그라운드 연결을 유지해야 합니다. -\n다른 화면에서 Element이 항상 백그라운드에서 실행하도록 허용하는 메시지가 표시됩니다, 수락해주세요. + ${app_name}은 신뢰가 있는 알림을 위해 낮은 영향의 백그라운드 연결을 유지해야 합니다. +\n다른 화면에서 ${app_name}이 항상 백그라운드에서 실행하도록 허용하는 메시지가 표시됩니다, 수락해주세요. 권한 부여 정보 분석 정보 분석 데이터 보내기 - Element은 애플리케이션을 개선할 수 있도록 익명의 분석을 수집합니다. - 분석을 활성화해서 Element이 개선할 수 있도록 도와주세요. + ${app_name}은 애플리케이션을 개선할 수 있도록 익명의 분석을 수집합니다. + 분석을 활성화해서 ${app_name}이 개선할 수 있도록 도와주세요. 예, 저도 돕고 싶습니다! 데이터 절약 모드 @@ -1254,7 +1254,7 @@ 암호를 입력하세요 암호가 너무 약합니다 - Element으로 복구 키를 생성하려면 암호를 지워주세요. + ${app_name}으로 복구 키를 생성하려면 암호를 지워주세요. 이용할 수 있는 Matrix 세션이 없음 암호화된 메시지를 잃지 마세요 @@ -1388,7 +1388,7 @@ 잘못된 홈서버 검색 응답 자동 완성 서버 설정 - Element이 userId 도메인 \"%1$s\"에 대한 맞춤 서버 설정을 감지했습니다: + ${app_name}이 userId 도메인 \"%1$s\"에 대한 맞춤 서버 설정을 감지했습니다: \n%2$s 설정 사용 @@ -1478,7 +1478,7 @@ 모든 커뮤니티 이 방은 미리 볼 수 없습니다 - 세계가 읽을 수 있는 방의 미리보기는 아직 ElementX에서 지원하지 않습니다 + 세계가 읽을 수 있는 방의 미리보기는 아직 ${app_name}X에서 지원하지 않습니다 다이렉트 메시지 @@ -1604,11 +1604,11 @@ 이 작업을 하려면 설정에서 ID 서버를 추가하세요. 백그라운드 동기화 모드 (실험적) 배터리에 최적화됨 - Element은 기기의 제한된 자원 (배터리)을 유지하기 위해 백그라운드에서 동기화합니다. + ${app_name}은 기기의 제한된 자원 (배터리)을 유지하기 위해 백그라운드에서 동기화합니다. \n기기 자원 상태에 따라 운영체제에 의해 동기화는 지연될 수 있습니다. 실시간으로 최적화됨 - Element은 (설정할 수 있는) 특정 시간에 주기적으로 백그라운드에거 동기화됩니다. -\n이는 라디오와 배터리 사용에 영향을 주며 Element이 이벤트를 수신하고 있는 상태라는 알림이 영구적으로 표시됩니다. + ${app_name}은 (설정할 수 있는) 특정 시간에 주기적으로 백그라운드에거 동기화됩니다. +\n이는 라디오와 배터리 사용에 영향을 주며 ${app_name}이 이벤트를 수신하고 있는 상태라는 알림이 영구적으로 표시됩니다. 백그라운드 동기화 없음 앱이 백그라운드에 있을 때 수신 메시지의 알림을 받지 않습니다. 설정을 업데이트하는데 실패했습니다. @@ -1709,14 +1709,14 @@ \n \n이 사용자의 내용을 더 이상 보고 싶지 않다면, 사용자를 차단하거나 메시지를 감출 수 있습니다 - Element은 종단간 키를 디스크에 저장하려면 권한이 필요합니다. + ${app_name}은 종단간 키를 디스크에 저장하려면 권한이 필요합니다. \n \n키를 수동으로 내보내려면 다음 팝업에서 접근을 허용해주세요. 현재 네트워크 연결이 없습니다 비밀번호가 정확하지 않습니다 - 라이엇 모바일에서 불가능한 것입니다 + 라이엇 모바일에서 불가능한 것입니다 인증이 요구됩니다 diff --git a/vector/src/main/res/values-lv/strings.xml b/vector/src/main/res/values-lv/strings.xml index a679b455b8..b5226f43ce 100644 --- a/vector/src/main/res/values-lv/strings.xml +++ b/vector/src/main/res/values-lv/strings.xml @@ -303,7 +303,7 @@ Vietējā adrešu grāmata Vienīgi Matrix kontakti Nav sarunu - Tu neesi atļāvis/usi Element piekļūt taviem vietējiem kontaktiem + Tu neesi atļāvis/usi ${app_name} piekļūt taviem vietējiem kontaktiem Nav rezultātu Istabas Istabu katalogs @@ -456,24 +456,24 @@ Uzņemt foto vai video Neizdodas ierakstīt video Element informācija - Element nepieciešama atļauja piekļūt jūsu fotoattēlu un video bibliotēkai, lai nosūtītu un saglabātu pielikumus. + ${app_name} nepieciešama atļauja piekļūt jūsu fotoattēlu un video bibliotēkai, lai nosūtītu un saglabātu pielikumus. \n \nLūdzu, atļaujiet piekļuvi nākamajā uznirstošajā logā, lai varētu nosūtīt failus no sava tālruņa. - Element-am nepieciešama atļauja piekļūt kamerai, lai uzņemtu foto un nodrošinātu video zvanus. + ${app_name}-am nepieciešama atļauja piekļūt kamerai, lai uzņemtu foto un nodrošinātu video zvanus. " \n \nLūdzu dot piekļuves atļauju nākamajā uznirstošajā logā, lai būtu iespēja veikt zvanus." - Element-am nepieciešama atļauja piekļūt mikrofonam, lai nodrošinātu audio zvanus. + ${app_name}-am nepieciešama atļauja piekļūt mikrofonam, lai nodrošinātu audio zvanus. " \n \nLūdzu dod piekļuves atļauju nākamajā uznirstošajā logā, lai būtu iespēja veikt zvanus." - Element nepieciešama atļauja piekļūt kamerai un mikrofonam, lai veiktu videozvanus. + ${app_name} nepieciešama atļauja piekļūt kamerai un mikrofonam, lai veiktu videozvanus. \n \nLūdzu, dodiet piekļuves atļauju nākamajā uznirstošajā logā, lai būtu iespēja veikt zvanus. - Element-am nepieciešama atļauja piekļūt kontaktiem, lai varētu atrast citus lietotājus tīklā pēc to epasta adreses vai tālruņa #. + ${app_name}-am nepieciešama atļauja piekļūt kontaktiem, lai varētu atrast citus lietotājus tīklā pēc to epasta adreses vai tālruņa #. -Lūdzu dod piekļuves atļauju nākamajā uznirstošajā logā, lai būtu iespēja atrast Tavus kontaktus, kuri ir sasniedzami Elementā. - Element var pārbaudīt jūsu adrešu grāmatu, lai atrastu citus Matrix lietotājus pāc viņu epasta adresēm un tālruņa numuriem. +Lūdzu dod piekļuves atļauju nākamajā uznirstošajā logā, lai būtu iespēja atrast Tavus kontaktus, kuri ir sasniedzami ${app_name}ā. + ${app_name} var pārbaudīt jūsu adrešu grāmatu, lai atrastu citus Matrix lietotājus pāc viņu epasta adresēm un tālruņa numuriem. \n \nVai piekrītat koplietot savu adrešu grāmatu šim nolūkam\? Atvaino… Darbība nav veikta dēļ nepietiekamām piekļuves atļaujām @@ -1160,7 +1160,7 @@ Nākotnē šī pārbaudes procedūra plānota sarežģītāka. Jūsu kontam nav pievienota neviena epasta adrese Epasta adreses Nepieciešama autentifikācija - Jūs nevarat to izdarīt ar Element mobile + Jūs nevarat to izdarīt ar ${app_name} mobile Apstipriniet paroli Jūsu kontam nav pievienots neviens tālruņa numurs Versija %s diff --git a/vector/src/main/res/values-ml/strings.xml b/vector/src/main/res/values-ml/strings.xml index 64c469592c..867f5661c2 100644 --- a/vector/src/main/res/values-ml/strings.xml +++ b/vector/src/main/res/values-ml/strings.xml @@ -19,7 +19,7 @@ സുഹൃത്തുക്കളെ ക്ഷണിക്കുക എന്റെ കോഡ് പങ്കിടുക എന്റെ കോഡ് - 🔐️ element-ൽ എന്നോടൊപ്പം ചേരുക + 🔐️ ${app_name}-ൽ എന്നോടൊപ്പം ചേരുക സമർപ്പിക്കൂ ചാറ്റ് തുറക്കുക ക്യാമറ നിർത്തുക @@ -232,7 +232,7 @@ രഹസ്യവാക്ക് ഇമെയിൽ അല്ലെങ്കിൽ ഉപയോക്തൃനാമം തുടരുക… - Element കോൾ പരാജയപ്പെട്ടു + ${app_name} കോൾ പരാജയപ്പെട്ടു ശബ്ദം അയയ്ക്കൂ ഹോം സെർവർ URL പൊതു മുറിക‍ൾ ഒന്നും ലഭ്യമല്ല diff --git a/vector/src/main/res/values-nb-rNO/strings.xml b/vector/src/main/res/values-nb-rNO/strings.xml index d51d954d02..98d324b696 100644 --- a/vector/src/main/res/values-nb-rNO/strings.xml +++ b/vector/src/main/res/values-nb-rNO/strings.xml @@ -406,7 +406,7 @@ Kun nevninger olm-versjon Deaktiver kontoen - Element samler inn anonyme statistikker for å hjelpe oss med å forbedre programmet. + ${app_name} samler inn anonyme statistikker for å hjelpe oss med å forbedre programmet. %1$s @ %2$s Integreringsbehandler Rommets navn @@ -581,7 +581,7 @@ Brukerkatalog Bare matrix-kontakter Ingen samtaler - Du ga ikke Element tilgang til dine lokale kontakter + Du ga ikke ${app_name} tilgang til dine lokale kontakter Ingen identitetsserver konfigurert. Romkatalog Ingen offentlige rom tilgjengelig @@ -627,7 +627,7 @@ Oppringing feilet som følge av feilkonfigurert tjener Prøv med %s Ikke spør meg igjen - Element samtale feilet + ${app_name} samtale feilet Velg lydenhet Telefon Høytaler @@ -947,13 +947,13 @@ Hvis du vil tilbakestille PIN-koden, trykker du på Glemt PIN-kode for å logge av og tilbakestille. Aktiver biometri Aktiver enhetsspesifikk biometri, som fingeravtrykk og ansiktsgjenkjenning. - PIN-kode er den eneste måten å låse opp Element. + PIN-kode er den eneste måten å låse opp ${app_name}. Vis innhold i varsler Vis detaljer som romnavn og meldingsinnhold. Vis bare antall uleste meldinger i et enkelt varsel. Krev PIN etter 2 minutter - PIN-kode kreves etter 2 minutter uten bruk av Element. - PIN-kode kreves hver gang du åpner Element. + PIN-kode kreves etter 2 minutter uten bruk av ${app_name}. + PIN-kode kreves hver gang du åpner ${app_name}. Endre PIN-kode Endre din nåværende PIN-kode Bekreft PIN for å deaktivere PIN @@ -971,10 +971,10 @@ Du ser på varselet! Klikk på meg! Kunne ikke motta push. Løsningen kan være å installere applikasjonen på nytt. Legg til konto - [%1$s] -\nDenne feilen er utenfor kontroll av Element. Det er ingen Google-konto på telefonen. Åpne kontoadministratoren og legg til en Google-konto. + [%1$s] +\nDenne feilen er utenfor kontroll av ${app_name}. Det er ingen Google-konto på telefonen. Åpne kontoadministratoren og legg til en Google-konto. Fiks Play Services - Element bruker Google Play Services for å levere push-meldinger, men det ser ikke ut til å være konfigurert riktig: + ${app_name} bruker Google Play Services for å levere push-meldinger, men det ser ikke ut til å være konfigurert riktig: \n%1$s Google Play Services APK er tilgjengelig og oppdatert. Sjekk innstillinger @@ -982,8 +982,8 @@ Noen varsler er deaktivert i dine tilpassede innstillinger. Legg merke til at enkelte meldinger er satt til å være lydløse (gir et varsel uten lyd). Egendefinerte innstillinger. - Varsler er ikke aktivert for denne økten. -\nKontroller Elementinnstillingene. + Varsler er ikke aktivert for denne økten. +\nKontroller ${app_name}innstillingene. Varsler er aktivert for denne økten. Sesjonsinnstillinger. Varsler er deaktivert for kontoen din. @@ -1007,7 +1007,7 @@ Ingen e-post er lagt til kontoen din E-post adresser Autentisering er påkrevd - Du kan ikke gjøre dette fra Element mobile + Du kan ikke gjøre dette fra ${app_name} mobile Bekreft passordet ditt Vis applikasjonsinformasjonen i systeminnstillingene. App info @@ -1104,22 +1104,22 @@ Tillat tillatelse til å få tilgang til kontaktene dine. For å skanne en QR-kode, må du gi tilgang til kameraet. Beklager. Handlingen ble ikke utført på grunn av manglende tillatelser - Element kan sjekke adresseboken din for å finne andre Matrix-brukere basert på e-post og telefonnummer. + ${app_name} kan sjekke adresseboken din for å finne andre Matrix-brukere basert på e-post og telefonnummer. \n \nEr du enig i å dele adresseboken for dette formålet\? - Element kan sjekke adresseboken din for å finne andre Matrix-brukere basert på e-post og telefonnummer. Hvis du godtar å dele adresseboken din for dette formålet, vennligst gi tilgang til neste popup. - Element trenger tillatelse for å få tilgang til kameraet og mikrofonen for å utføre videosamtaler. + ${app_name} kan sjekke adresseboken din for å finne andre Matrix-brukere basert på e-post og telefonnummer. Hvis du godtar å dele adresseboken din for dette formålet, vennligst gi tilgang til neste popup. + ${app_name} trenger tillatelse for å få tilgang til kameraet og mikrofonen for å utføre videosamtaler. \n \nTillat tilgang til de neste popup-vinduene for å kunne ringe. " \n \nTillat tilgang i neste popup for å kunne ringe." - Element trenger tillatelse for å få tilgang til mikrofonen din for å utføre lydanrop. + ${app_name} trenger tillatelse for å få tilgang til mikrofonen din for å utføre lydanrop. " \n \nTillat tilgang i neste popup for å kunne ringe." - Element trenger tillatelse for å få tilgang til kameraet ditt for å ta bilder og videosamtaler. - Element trenger tillatelse for å få tilgang til bilde- og videobiblioteket ditt for å sende og lagre vedlegg. + ${app_name} trenger tillatelse for å få tilgang til kameraet ditt for å ta bilder og videosamtaler. + ${app_name} trenger tillatelse for å få tilgang til bilde- og videobiblioteket ditt for å sende og lagre vedlegg. \n \nTillat tilgang i neste popup for å kunne sende filer fra telefonen din. Kan ikke ta opp video @@ -1141,7 +1141,7 @@ Ringetone for innkommende samtaler Vil bruke %s som assistanse når hjemmeserveren din ikke tilbyr en (IP-adressen din blir delt under en samtale) Tillat reservehjelpsserver - Bruk standard Element-ringetone for innkommende anrop + Bruk standard ${app_name}-ringetone for innkommende anrop Be om bekreftelse før du starter en samtale Forhindre utilsiktet samtale Romemne @@ -1151,7 +1151,7 @@ %d medlemskapsendringer Gruppeliste - Start Element på en annen enhet som kan dekryptere meldingen, slik at den kan sende nøklene til denne økten. + Start ${app_name} på en annen enhet som kan dekryptere meldingen, slik at den kan sende nøklene til denne økten. Forespørsel sendt Nøkkelforespørsel sendt. SSL-feil: identiteten til jevnaldrende er ikke bekreftet. @@ -1162,8 +1162,8 @@ Fjern publiseringen Legg til Begynn å chatte - [%1$s] -\nDenne feilen er utenfor kontroll av Element, og ifølge Google indikerer denne feilen at enheten har for mange apper registrert hos FCM. Feilen oppstår bare i tilfeller der det er ekstremt mange apper, så det bør ikke påvirke gjennomsnittsbrukeren. + [%1$s] +\nDenne feilen er utenfor kontroll av ${app_name}, og ifølge Google indikerer denne feilen at enheten har for mange apper registrert hos FCM. Feilen oppstår bare i tilfeller der det er ekstremt mange apper, så det bør ikke påvirke gjennomsnittsbrukeren. Vil du skjule alle meldinger fra denne brukeren\? \n \nMerk at denne handlingen starter appen på nytt, og det kan ta litt tid. @@ -1352,7 +1352,7 @@ Slett data Andre økter Riste oppdaget! - Element kan krasje oftere når en uventet feil oppstår + ${app_name} kan krasje oftere når en uventet feil oppstår Romadresse Denne adressen er allerede i bruk Oppgi romadresse @@ -1406,7 +1406,7 @@ Kontodata Vil du sende dette vedlegget til %1$s\? Inkluder en grunn - Element Android + ${app_name} Android Ny pålogging. Var dette deg\? Trykk for å se gjennom og bekrefte Bruk denne økten til å bekrefte den nye, og gi den tilgang til krypterte meldinger. @@ -1445,7 +1445,7 @@ Krypteringsoppgradering tilgjengelig Bekreft deg selv og andre for å sikre chattene dine Forhindre skjermbilder av applikasjonen - Bruk det nyeste Element på de andre enhetene dine: + Bruk det nyeste ${app_name} på de andre enhetene dine: Har du glemt eller mistet alle gjenopprettingsalternativene\? Tilbakestill alt Tilbakestill alt Gjør dette bare hvis du ikke har noen annen enhet du kan bekrefte denne enheten med. @@ -1461,7 +1461,7 @@ Velg et brukernavn. Velg passord. Legg til personer - 🔐️ Bli med meg på element + 🔐️ Bli med meg på ${app_name} Invitasjon sendt til %1$s Det er ikke en gyldig QR-kode for matrix Vi kunne ikke invitere brukere. Kontroller brukerne du vil invitere, og prøv på nytt. @@ -1471,7 +1471,7 @@ Del denne koden med folk slik at de kan skanne den for å legge til deg og begynne å chatte. Laster inn tilgjengelige språk… Godta først vilkårene for identitetsserveren i innstillingene. - For ditt privatliv støtter Element bare sending av hash-bruker-e-post og telefonnummer. + For ditt privatliv støtter ${app_name} bare sending av hash-bruker-e-post og telefonnummer. Sett rolle Åpne chat Legg til fra telefonboken min @@ -1488,10 +1488,10 @@ Overfør Det oppstod en feil under overføring av samtalen Brukere - Element krever at du oppgir legitimasjonen din for å utføre denne handlingen. + ${app_name} krever at du oppgir legitimasjonen din for å utføre denne handlingen. %1$dm %2$ds Bakgrunnsforbindelse - Element kan kjøre i bakgrunnen for å administrere varslene dine sikkert og privat. Dette kan påvirke batteriforbruket. + ${app_name} kan kjøre i bakgrunnen for å administrere varslene dine sikkert og privat. Dette kan påvirke batteriforbruket. Dette vil erstatte din nåværende nøkkel eller frase. Generer en ny sikkerhetsnøkkel eller sett en ny sikkerhetsfrase for din eksisterende sikkerhetskopi. Beskytt deg mot å miste tilgang til krypterte meldinger og data ved å sikkerhetskopiere krypteringsnøkler på serveren din. @@ -1529,7 +1529,7 @@ • Meldinger sendes via Firebase Cloud Messaging Appen trenger tillatelse for å kjøre i bakgrunnen Hvis en bruker lar en enhet være frakoblet og stasjonær i en periode, mens skjermen er slått av, går enheten i Døsemodus. Dette forhindrer apper i å få tilgang til nettverket og avviser jobber, synkroniseringer og standardalarmer. - Element påvirkes ikke av batterioptimalisering. + ${app_name} påvirkes ikke av batterioptimalisering. Meldingen er klikket! Klikk på varselet. Hvis du ikke ser varselet, må du sjekke systeminnstillingene. Varslingsvisning @@ -1564,7 +1564,7 @@ System standard Filtrer utestengte brukere Endre widgets - Aktiver analyse for å hjelpe med å forbedre Element. + Aktiver analyse for å hjelpe med å forbedre ${app_name}. Varsel Personvern Inkluderer avatar og visningsnavnendringer. Vis kontohendelser @@ -1591,9 +1591,9 @@ Tidsavbrudd for synkronisering forespørsel Aktiver synkronisering i bakgrunnen Du vil ikke bli varslet om innkommende meldinger når appen er i bakgrunnen. - Element vil synkroniseres i bakgrunnen med jevne mellomrom på presis tid (konfigurerbar). -\nDette vil påvirke radio og batteribruk, det vises en permanent melding om at Element lytter etter hendelser. - Element synkroniseres i bakgrunnen på en måte som bevarer enhetens begrensede ressurser (batteri). + ${app_name} vil synkroniseres i bakgrunnen med jevne mellomrom på presis tid (konfigurerbar). +\nDette vil påvirke radio og batteribruk, det vises en permanent melding om at ${app_name} lytter etter hendelser. + ${app_name} synkroniseres i bakgrunnen på en måte som bevarer enhetens begrensede ressurser (batteri). \nAvhengig av enhetens ressurstilstand, kan synkroniseringen bli utsatt av operativsystemet. Msgs i gruppechatter Msgs som inneholder brukernavnet mitt diff --git a/vector/src/main/res/values-nl/strings.xml b/vector/src/main/res/values-nl/strings.xml index 843d605454..a2e12e99e2 100644 --- a/vector/src/main/res/values-nl/strings.xml +++ b/vector/src/main/res/values-nl/strings.xml @@ -213,7 +213,7 @@ Lokale contactenlijst Alleen Matrix-contacten Geen gesprekken - U heeft Element geen toegang tot uw lokale contacten gegeven + U heeft ${app_name} geen toegang tot uw lokale contacten gegeven Geen resultaten Gesprekken @@ -353,22 +353,22 @@ Kan geen video opnemen" Informatie - Element heeft toegang nodig tot uw mediabestanden om bijlagen te verzenden en op te slaan. + ${app_name} heeft toegang nodig tot uw mediabestanden om bijlagen te verzenden en op te slaan. \n \nVerleen toegang op de volgende pop-up om bestanden vanaf uw telefoon te sturen. - Element heeft toegang nodig tot uw camera om foto’s en video-oproepen te maken. + ${app_name} heeft toegang nodig tot uw camera om foto’s en video-oproepen te maken. " \n \nVerleen toegang op de volgende pop-up om de oproep te maken." - Element heeft toegang nodig tot uw microfoon om spraakoproepen te maken. + ${app_name} heeft toegang nodig tot uw microfoon om spraakoproepen te maken. " \n \nVerleen toegang op de volgende pop-up om de oproep te maken." - Element heeft toegang nodig tot uw camera en microfoon om video-oproepen te maken. + ${app_name} heeft toegang nodig tot uw camera en microfoon om video-oproepen te maken. \n \nVerleen toegang op de volgende pop-ups om de oproep te maken. - Element kan uw adresboek benaderen om andere Matrix-gebruikers te vinden aan de hand van hun e-mailadressen en telefoonnummers. Als u het goed vindt om uw adresboek hiervoor te delen, verleen dan toegang op de volgende pop-up. - Element kan uw adresboek gebruiken om andere Matrix-gebruikers te vinden aan de hand van hun e-mailadressen en telefoonnummers. + ${app_name} kan uw adresboek benaderen om andere Matrix-gebruikers te vinden aan de hand van hun e-mailadressen en telefoonnummers. Als u het goed vindt om uw adresboek hiervoor te delen, verleen dan toegang op de volgende pop-up. + ${app_name} kan uw adresboek gebruiken om andere Matrix-gebruikers te vinden aan de hand van hun e-mailadressen en telefoonnummers. \n \nWilt u uw adresboek hiervoor delen\? Sorry. De actie is niet toegepast vanwege ontbrekende rechten @@ -901,12 +901,12 @@ Account deactiveren Mijn account deactiveren Meldingsprivacy - Element kan op de achtergrond werken om uw meldingen veilig en privé te beheren. Dit beïnvloedt mogelijk het accuverbruik. + ${app_name} kan op de achtergrond werken om uw meldingen veilig en privé te beheren. Dit beïnvloedt mogelijk het accuverbruik. Toestemming verlenen Kies een andere optie Statistische gegevens (analytics) versturen - Element verzamelt anonieme statistische gegevens (analytics) om het voor ons mogelijk te maken om de app te verbeteren. - Schakel statistische gegevens in om ons te helpen bij het verbeteren van Element. + ${app_name} verzamelt anonieme statistische gegevens (analytics) om het voor ons mogelijk te maken om de app te verbeteren. + Schakel statistische gegevens in om ons te helpen bij het verbeteren van ${app_name}. Ja, ik wil helpen! Er ontbreekt een vereiste parameter. Er is een parameter ongeldig. @@ -927,7 +927,7 @@ Beveiligingssleutels van uw sessies opnieuw aanvragen. Sleutelaanvraag verstuurd. Aanvraag verstuurd - Start Element op een ander apparaat dat het bericht kan ontsleutelen, zodat het de sleutels naar deze sessie kan sturen. + Start ${app_name} op een ander apparaat dat het bericht kan ontsleutelen, zodat het de sleutels naar deze sessie kan sturen. Typ hier… Wissen Spraakbericht versturen @@ -1007,7 +1007,7 @@ Aanvaarden Gelieve het beleid van deze thuisserver te lezen en aanvaarden: Oproepen - Gebruik de standaardbeltoon van Element voor inkomende oproepen + Gebruik de standaardbeltoon van ${app_name} voor inkomende oproepen Beltoon voor inkomende oproepen Selecteer beltoon voor oproepen: Eruit sturen @@ -1069,8 +1069,8 @@ Inschakelen Sessie-instellingen. Meldingen zijn ingeschakeld voor deze sessie. - Meldingen zijn niet ingeschakeld voor deze sessie. -\nGelieve de Element-instellingen te controleren. + Meldingen zijn niet ingeschakeld voor deze sessie. +\nGelieve de ${app_name}-instellingen te controleren. Inschakelen Aangepaste instellingen. Sommige soorten berichten zijn stil (ze geven een geluidsloze melding). @@ -1079,7 +1079,7 @@ Instellingen controleren Play-diensten controleren De APK van Google Play Services is beschikbaar en up-to-date. - Element maakt gebruikt van Google Play Services om pushberichten af te leveren, maar dit lijkt niet juist geconfigureerd te zijn: + ${app_name} maakt gebruikt van Google Play Services om pushberichten af te leveren, maar dit lijkt niet juist geconfigureerd te zijn: \n%1$s Play-diensten herstellen Firebase-bewijs @@ -1087,12 +1087,12 @@ \n%1$s Het FCM-bewijs is niet opgehaald: \n%1$s - [%1$s] -\nDeze fout is onafhankelijk van Element. Volgens Google betekent deze fout dat het apparaat te veel apps heeft geregistreerd met FCM. De fout treedt enkel op ingeval er een enorm aantal apps is, dus zou dit de gemiddelde gebruiker niet mogen hinderen. - [%1$s] -\nDeze fout is onafhankelijk van Element. Ze kan verschillende oorzaken hebben. Misschien werkt het als u het later opnieuw probeert. U kunt ook controleren of het gegevensverbruik van Google Play Services niet wordt beperkt in de systeeminstellingen, of dat de klok van uw apparaat wel juist staat, of dat het misschien aan een aangepaste ROM ligt. - [%1$s] -\nDeze fout is onafhankelijk van Element. Er is geen Google-account verbonden met de telefoon. Open het accountbeheer en voeg er een Google-account toe. + [%1$s] +\nDeze fout is onafhankelijk van ${app_name}. Volgens Google betekent deze fout dat het apparaat te veel apps heeft geregistreerd met FCM. De fout treedt enkel op ingeval er een enorm aantal apps is, dus zou dit de gemiddelde gebruiker niet mogen hinderen. + [%1$s] +\nDeze fout is onafhankelijk van ${app_name}. Ze kan verschillende oorzaken hebben. Misschien werkt het als u het later opnieuw probeert. U kunt ook controleren of het gegevensverbruik van Google Play Services niet wordt beperkt in de systeeminstellingen, of dat de klok van uw apparaat wel juist staat, of dat het misschien aan een aangepaste ROM ligt. + [%1$s] +\nDeze fout is onafhankelijk van ${app_name}. Er is geen Google-account verbonden met de telefoon. Open het accountbeheer en voeg er een Google-account toe. Account toevoegen Bewijsregistratie FCM-bewijs geregistreerd bij thuisserver. @@ -1108,17 +1108,17 @@ Dienst is niet herstart Starten bij opstarten van apparaat De dienst zal starten wanneer het apparaat wordt herstart. - De dienst zal niet starten wanneer het apparaat wordt herstart en u zult geen meldingen ontvangen tot u Element hebt geopend. + De dienst zal niet starten wanneer het apparaat wordt herstart en u zult geen meldingen ontvangen tot u ${app_name} hebt geopend. Starten bij opstarten inschakelen Achtergrondbeperkingen controleren - Achtergrondbeperkingen zijn uitgeschakeld voor Element. Deze test dient uitgevoerd te worden met een mobiele verbinding (geen wifi). + Achtergrondbeperkingen zijn uitgeschakeld voor ${app_name}. Deze test dient uitgevoerd te worden met een mobiele verbinding (geen wifi). \n%1$s - Achtergrondbeperkingen zijn ingeschakeld voor Element. + Achtergrondbeperkingen zijn ingeschakeld voor ${app_name}. \nAl wat de app probeert te doen zal in de achtergrond hevig beperkt worden; dit kan het correct functioneren van meldingen beïnvloeden. \n%1$s Beperkingen uitschakelen Accuoptimalisatie - Element wordt niet beperkt door accuoptimalisatie. + ${app_name} wordt niet beperkt door accuoptimalisatie. Als een gebruiker een apparaat los van de oplader een tijd laat stilliggen, met het scherm uitgeschakeld, gaat het apparaat in slaapmodus. Dit verhindert apps de toegang tot het netwerk, en stelt hun taken, synchronisaties en standaardalarmen uit. Optimalisatie negeren De app heeft geen verbinding met de homeserver nodig in de achtergrond, dit zou het gebruik van de batterij moeten verlagen @@ -1130,8 +1130,8 @@ Berichten versturen met Enter De Enter-knop van het toetsenbord zal berichten versturen in plaats van een regeleinde in te voegen Achtergrondverbinding - Element heeft een achtergrondverbinding met lage impact nodig om betrouwbare meldingen te kunnen hebben. -\nOp het volgende scherm zult u gevraagd worden om Element toestemming te verlenen om altijd in de achtergrond te kunnen draaien, gelieve deze toestemming te verlenen. + ${app_name} heeft een achtergrondverbinding met lage impact nodig om betrouwbare meldingen te kunnen hebben. +\nOp het volgende scherm zult u gevraagd worden om ${app_name} toestemming te verlenen om altijd in de achtergrond te kunnen draaien, gelieve deze toestemming te verlenen. Toestemming verlenen Databesparingsmodus past een specifieke filter toe zodat aanwezigheidsupdates en typmeldingen weggefilterd worden. Er is een fout opgetreden bij het verifiëren van uw e-mailadres. @@ -1190,7 +1190,7 @@ Wachtwoorden komen niet overeen Voer een wachtwoord in Wachtwoord is te zwak - Verwijder het wachtwoord als u wilt dat Element een herstelsleutel genereert. + Verwijder het wachtwoord als u wilt dat ${app_name} een herstelsleutel genereert. Geen Matrix-sessie beschikbaar Verlies nooit uw versleutelde berichten Berichten in versleutelde gesprekken worden beveiligd met eind-tot-eind-versleuteling. Enkel de ontvanger(s) en u hebben de sleutels om deze berichten te lezen. @@ -1296,7 +1296,7 @@ Ondertekening Ongeldig thuisserverontdekkingsantwoord Serveropties automatisch aanvullen - Element heeft een aangepaste serverconfiguratie gedetecteerd voor uw gebruikers-ID-domein ‘%1$s’: + ${app_name} heeft een aangepaste serverconfiguratie gedetecteerd voor uw gebruikers-ID-domein ‘%1$s’: \n%2$s Configuratie gebruiken Sorry, vergadergesprekken met Jitsi worden nog niet ondersteund op oudere apparaten (met een Android-versie lager dan 6.0) @@ -1372,13 +1372,13 @@ Zal %s gebruiken om te assisteren in het geval dat uw thuisserver er niet over beschikt (uw IP-adres zal tijdens een oproep gedeeld worden) Voeg een identiteitsserver toe in de instellingen om dit te doen. Bevestig uw wachtwoord - U kunt dit niet doen vanaf de mobiele Element + U kunt dit niet doen vanaf de mobiele ${app_name} Synchroniseren op de achtergrond Geoptimaliseerd voor batterij - Element zal op een batterijzuinige manier synchroniseren op de achtergrond. + ${app_name} zal op een batterijzuinige manier synchroniseren op de achtergrond. \nAfhankelijk van de staat van uw apparaat kan het besturingssysteem de synchronisatie uitstellen. Geoptimaliseerd voor snelheid - Element zal periodiek op de achtergrond synchroniseren (configureerbaar). + ${app_name} zal periodiek op de achtergrond synchroniseren (configureerbaar). \nDit heeft een negatieve impact op uw batterij- en datagebruik. Er zal een melding getoond worden ter informatie. Geen achtergrondssynchronisatie U zal geen melding van berichten ontvangen als de app zich in de achtergrond bevindt. @@ -1461,7 +1461,7 @@ Even wachten… Alle Gemeenschappen Dit gesprek kan niet worden voorvertoond - De voorvertoning van wereld-leesbare gesprekken zijn nog niet ondersteund in Element + De voorvertoning van wereld-leesbare gesprekken zijn nog niet ondersteund in ${app_name} Gesprekken Directe Berichten Nieuw Gesprek diff --git a/vector/src/main/res/values-nn/strings.xml b/vector/src/main/res/values-nn/strings.xml index 783778ec6a..ed8afce0c9 100644 --- a/vector/src/main/res/values-nn/strings.xml +++ b/vector/src/main/res/values-nn/strings.xml @@ -148,7 +148,7 @@ Brukarkatalog Berre Matrix-kontaktar Ingen samtalar - Du gav ikkje Element tilgang til dei lokale kontaktane dine + Du gav ikkje ${app_name} tilgang til dei lokale kontaktane dine Ingen treff Rom Romkatalog @@ -262,7 +262,7 @@ Etterspør på nytt krypteringsnøkklar frå dei andre einingane dine. Nøkkelførespurnaden er sendt. Førespurnaden er send - Start Element på ein annan eining som kan dekryptere meldingen, slik at den kan sende nøkklane til denne sesjonen + Start ${app_name} på ein annan eining som kan dekryptere meldingen, slik at den kan sende nøkklane til denne sesjonen Les kvitteringsliste Gruppeliste @@ -297,23 +297,23 @@ Ta bilete eller video Kan ikkje spela inn video Info - Element treng tilgang til bilete- og videobiblioteket for å senda og lagra vedlegg. + ${app_name} treng tilgang til bilete- og videobiblioteket for å senda og lagra vedlegg. \n \nGje tilgang i sprettvindauget som kjem for å senda filer frå mobilen. - Element treng tilgang til kameraet ditt for å ta bilete og videosamtalar. + ${app_name} treng tilgang til kameraet ditt for å ta bilete og videosamtalar. " \n \nVer venleg og gje tilgang på sprettvindauget som kjem for å starta samtalen." - Element treng tilgang til mikrofonen din for å utføra talesamtalar. + ${app_name} treng tilgang til mikrofonen din for å utføra talesamtalar. Mediaforbindelsen feila " \n \nGjer vel og gje tilgang på sprettvindauget som kjem for å utføra samtalen." - Element treng tilgang til kameraet og mikrofonen din for å utføra videosamtalar. + ${app_name} treng tilgang til kameraet og mikrofonen din for å utføra videosamtalar. \n \nGjer vel og gjev tilgang på sprettvindauget som kjem for å utføra samtalen. - Element treng tilgang til kontaktliste for å finna andre Matrix-brukarar basert på e-post og telefonnummer. Viss du samtykker til å dele kontaktlista, ver venleg å tillat tilgang på sprettvindauget som kjem på neste skjermbilete. - Element treng tilgang til kontaktliste for å finna andre Matrix-brukarar basert på e-post og telefonnummer. + ${app_name} treng tilgang til kontaktliste for å finna andre Matrix-brukarar basert på e-post og telefonnummer. Viss du samtykker til å dele kontaktlista, ver venleg å tillat tilgang på sprettvindauget som kjem på neste skjermbilete. + ${app_name} treng tilgang til kontaktliste for å finna andre Matrix-brukarar basert på e-post og telefonnummer. \n \nSamtykker du til å dele adresseboka for dette føremålet \? Beklagar. Grunna manglande tilgangar, vart ikkje handlinga utført @@ -538,13 +538,13 @@ Deaktiver konto Deaktiver kontoen min Personvern ved varslingar - Element kan køyra i bakgrunnen for å sikkert og privat halda styr på varsla dine (dette kan påverka batteribruk). + ${app_name} kan køyra i bakgrunnen for å sikkert og privat halda styr på varsla dine (dette kan påverka batteribruk). Gje tillating vel noko anna Statistikk Send statistikkdata - Element samlar anonym statistikk inn for å forbetra applikasjonen. - Ver venleg og skru statistikkinnsamling på for å hjelpa oss med å forbetra Element. + ${app_name} samlar anonym statistikk inn for å forbetra applikasjonen. + Ver venleg og skru statistikkinnsamling på for å hjelpa oss med å forbetra ${app_name}. Ja, eg vil hjelpa til! Datasparingsmodus Informasjon om sesjon @@ -865,7 +865,7 @@ Meldingssynlegheit på Matrix liknar på epost. At vi gløymer meldingane dine t Venligast sjå over og godta retningslinjene til heimtenaren: Det gjeng ikkje å nå URL-en, gjer vel og sjå til honom Oppringingar - Bruk standard Element-ringetone for innkommande samtalar + Bruk standard ${app_name}-ringetone for innkommande samtalar Ringetone for innkommande samtalar Vel ringetone for samtalar: Ein videosamtale pågår… @@ -892,8 +892,8 @@ Meldingssynlegheit på Matrix liknar på epost. At vi gløymer meldingane dine t Skru på Sesjonsinnstillingar. Varslingar er aktivert for denne sesjonen. - Varslingar er deaktivert for denne sesjonen. -\nSjekk Element-innstillingane. + Varslingar er deaktivert for denne sesjonen. +\nSjekk ${app_name}-innstillingane. Skru på setter opp tenesta Sikkerheitskopi av nøkkel @@ -935,7 +935,7 @@ Meldingssynlegheit på Matrix liknar på epost. At vi gløymer meldingane dine t Legg til ein identitetstenar i innstillingane for å utføre denne handlinga. Versjon %s Stadfest ditt passord - Denne handlinga kan ikkje utførast frå Element på mobil + Denne handlinga kan ikkje utførast frå ${app_name} på mobil Authentisering er påkrevd Integrasjonar Bruk ein integrasjonshandterar (Integration Manager) for å handtere botar, bruer, tillegg og klistermerkepakker. @@ -1000,7 +1000,7 @@ Meldingssynlegheit på Matrix liknar på epost. At vi gløymer meldingane dine t Trådlaus hovudtelefon Høgtalar Vel eining for lyd - Element-samtalen feila + ${app_name}-samtalen feila Ingen fleire resultat Suksess Legg til diff --git a/vector/src/main/res/values-pl/strings.xml b/vector/src/main/res/values-pl/strings.xml index 751e0ad349..982f41b0cc 100644 --- a/vector/src/main/res/values-pl/strings.xml +++ b/vector/src/main/res/values-pl/strings.xml @@ -163,7 +163,7 @@ Katalog użytkowników Tylko kontakty Matrixa Brak rozmów - Nie udzieliłeś(-aś) uprawnienia na dostęp do listy kontaktów + Nie udzieliłeś(-aś) uprawnienia na dostęp do listy kontaktów Brak wyników Pokoje Katalog pokojów @@ -279,11 +279,11 @@ Zrób zdjęcie lub nagraj film Nie można nagrać filmu Informacja - Element wymaga uprawnienia, aby wysyłać i zapisywać pliki multimedialne. + ${app_name} wymaga uprawnienia, aby wysyłać i zapisywać pliki multimedialne. Przyznaj dostęp w następnym oknie. - Element wymaga uprawnienia, aby wykonywać zdjęcia i nawiązywać połączenia wideo. - Element wymaga uprawnienia, aby przeprowadzić połączenie audio. + ${app_name} wymaga uprawnienia, aby wykonywać zdjęcia i nawiązywać połączenia wideo. + ${app_name} wymaga uprawnienia, aby przeprowadzić połączenie audio. Nie można wykonać operacji, ze względu na brak wymaganych uprawnień Zapisano Zapisać do pobranych? @@ -601,13 +601,13 @@ Możesz dodać adres e-mail do swojego profilu w ustawieniach. " \n \nZezwól na dostęp w następnym oknie aby móc wykonać połączenie." - Element wymaga dostępu do kamery i mikrofonu, aby przeprowadzać rozmowy wideo. + ${app_name} wymaga dostępu do kamery i mikrofonu, aby przeprowadzać rozmowy wideo. Przyznaj dostęp w następnym oknie. - Element może sprawdzić Twoją książkę adresową, aby znajdywać innych użytkowników Matrixa bazując na ich adresie e-mail i numerze telefonu. Jeśli zgadzasz się na udostępnienie Twojej książki adresowej w tym celu, zezwól na dostęp w następnym okienku. - Element wymaga dostępu do kontaktów, aby znajdywać innych użytkowników Matrixa bazując na adresie e-mail i numerze telefonu. + ${app_name} może sprawdzić Twoją książkę adresową, aby znajdywać innych użytkowników Matrixa bazując na ich adresie e-mail i numerze telefonu. Jeśli zgadzasz się na udostępnienie Twojej książki adresowej w tym celu, zezwól na dostęp w następnym okienku. + ${app_name} wymaga dostępu do kontaktów, aby znajdywać innych użytkowników Matrixa bazując na adresie e-mail i numerze telefonu. \n -\nZezwolić Element na dostęp do kontaktów\? +\nZezwolić ${app_name} na dostęp do kontaktów\? Lista uczestników Otwarty nagłówek Synchronizacja… @@ -716,7 +716,7 @@ Jesteś pewien? Poproś ponownie o klucze szyfrujące z innych Twoich sesji. Prośba o klucz wysłana. Prośba wysłana - Uruchom proszę Element na innym urządzeniu, które może odszyfrować wiadomość, aby wysłać klucze do tej sesji. + Uruchom proszę ${app_name} na innym urządzeniu, które może odszyfrować wiadomość, aby wysłać klucze do tej sesji. Prywatność powiadomień Standardowa Zmniejszona prywatność @@ -730,12 +730,12 @@ Jesteś pewien? Dezaktywuj konto Dezaktywuj moje konto Prywatność powiadomień - Element może działać w tle aby bezpiecznie i prywatnie zarządzać Twoimi powiadomieniami. To może mieć wpływ na zużycie baterii. + ${app_name} może działać w tle aby bezpiecznie i prywatnie zarządzać Twoimi powiadomieniami. To może mieć wpływ na zużycie baterii. Nadaj uprawnienie Wybierz inną opcję Wysyłaj dane analityczne - Element zbiera anonimowe informacje które pozwolą ulepszyć aplikację. - Włącz proszę dane analityczne, aby pomóc nam ulepszyć Element. + ${app_name} zbiera anonimowe informacje które pozwolą ulepszyć aplikację. + Włącz proszę dane analityczne, aby pomóc nam ulepszyć ${app_name}. Tak, chcę pomóc! Czy na pewno chcesz usunąć ten cel powiadomień? Aby móc stworzyć link do pokoju musi on mieć swój adres. @@ -952,7 +952,7 @@ Widoczność wiadomości w Matrix jest podobna do wiadomości e-mail. Nasze zapo %1$s: %2$s +%d %d+ - Użyj domyślnego dzwonka Element dla przychodzących połączeń + Użyj domyślnego dzwonka ${app_name} dla przychodzących połączeń Zadzwoń mimo to Połączenia Wyrzuć @@ -989,7 +989,7 @@ Widoczność wiadomości w Matrix jest podobna do wiadomości e-mail. Nasze zapo Sprawdź ustawienia systemowe. Powiadomienia są wyłączone dla twojego konta. Sprawdź ustawienia konta. - Powiadomienia nie są włączone dla tej sesji. Proszę sprawdź ustawienia Element. + Powiadomienia nie są włączone dla tej sesji. Proszę sprawdź ustawienia ${app_name}. Dodatkowe informacje: %s Wystąpił błąd podczas weryfikowania numeru telefonu. Wystąpił błąd podczas weryfikowania adresu e-mail. @@ -1240,21 +1240,21 @@ Spróbuj uruchomić ponownie aplikację. Niektóre rodzaje wiadomości będą ciche (wygenerują powiadomienie bez dźwięku). Nie udało się wczytać niestandardowych reguł, spróbuj ponowić. Weryfikacja Usług Google - Element używa Usług Google Play do dostarczania wiadomości push. Konfiguracja usług nie wydaje się być prawidłowa: + ${app_name} używa Usług Google Play do dostarczania wiadomości push. Konfiguracja usług nie wydaje się być prawidłowa: \n%1$s Otrzymano token FCM: \n%1$s Niepowodzenie przy pobieraniu tokena FCM: \n%1$s - [%1$s] -\nElement nie ma wpływu na wystąpienie tego problemu. Na tym urządzeniu nie ma konta Google. Otwórz menadżer kont i dodaj konto Google. + [%1$s] +\n${app_name} nie ma wpływu na wystąpienie tego problemu. Na tym urządzeniu nie ma konta Google. Otwórz menadżer kont i dodaj konto Google. Token FCM z powodzeniem zarejestrowany na serwerze domowym. Niepowodzenie przy rejestracji tokena FCM na serwerze domowym: \n%1$s Usługa została zatrzymana i automatycznie uruchomiona ponownie. Usługa nie uruchomiła się ponownie Usługa zostanie uruchomiona przy starcie urządzenia. - Usługa nie zostanie uruchomiona przy starcie urządzenia, nie otrzymasz żadnych powiadomień, dopóki Element nie zostanie uruchomiony. + Usługa nie zostanie uruchomiona przy starcie urządzenia, nie otrzymasz żadnych powiadomień, dopóki ${app_name} nie zostanie uruchomiony. Dla zwiększenia bezpieczeństwa, zalecamy aby wykonać ten krok osobiście lub przez inne zaufane środki komunikacji. Treść została zgłoszona. \n @@ -1271,24 +1271,24 @@ Spróbuj uruchomić ponownie aplikację. Wprowadź adres e-mail, aby możliwe było odzyskiwanie konta. Opcjonalnie użyj adresu e-mail lub numeru telefonu aby móc zostać odkrytym przez znajomych. Pozwól na awaryjny serwer wspomagania połączeń Użyje %s aby wspomagać gdy Twój serwer domowy takiego nie ofertuje (Twój adres IP będzie udostępniony podczas połączenia) - [%1$s] -\nBłąd jest poza kontrolą Element i nawiązując do Google sygnalizuje on, iż urządzenie posiada zbyt wiele aplikacji zarejestrowanych z FCM. Błąd występuje jedynie w przypadku posiadania skrajnie wielu aplikacji, w związku z czym nie powinno dotknąć to normalnego użytkownika. - [%1$s] -\nBłąd jest poza kontrolą Element. Może on występować z wielu powodów. Przypuszczalnie aplikacja powróci do normalnego stanu po spróbowaniu ponownie, chociaż można sprawdzić także w ustawieniach systemu uprawnienia Usług Google Play dotyczące dostępu do sieci, sprawdzić prawidłowość zegaru urządzenia lub też, może być to błąd niestandardowego oprogramowania systemowego. + [%1$s] +\nBłąd jest poza kontrolą ${app_name} i nawiązując do Google sygnalizuje on, iż urządzenie posiada zbyt wiele aplikacji zarejestrowanych z FCM. Błąd występuje jedynie w przypadku posiadania skrajnie wielu aplikacji, w związku z czym nie powinno dotknąć to normalnego użytkownika. + [%1$s] +\nBłąd jest poza kontrolą ${app_name}. Może on występować z wielu powodów. Przypuszczalnie aplikacja powróci do normalnego stanu po spróbowaniu ponownie, chociaż można sprawdzić także w ustawieniach systemu uprawnienia Usług Google Play dotyczące dostępu do sieci, sprawdzić prawidłowość zegaru urządzenia lub też, może być to błąd niestandardowego oprogramowania systemowego. Aktywuj uruchamianie przy starcie systemu - Restrykcje dotyczące działania aplikacji w tle są wyłączone dla Element. Test powinen zostać uruchomiony używając danych komórkowych (bez WIFI). + Restrykcje dotyczące działania aplikacji w tle są wyłączone dla ${app_name}. Test powinen zostać uruchomiony używając danych komórkowych (bez WIFI). \n%1$s - Restrykcje dotyczące działania aplikacji w tle są włączone dla Element. + Restrykcje dotyczące działania aplikacji w tle są włączone dla ${app_name}. \nPraca którą aplikacja próbuje wykonać będzie agresywnie ograniczona podczas działania w tle i może wpłynąć na wyświetlanie powiadomień. \n%1$s - Na Element nie ma wpływu Optymalizacja Baterii. + Na ${app_name} nie ma wpływu Optymalizacja Baterii. Jeżeli użytkownik pozostawi urządzenie odłączone od zasilania oraz nieużywane przez określony okres, z wyłączonym ekranem, urządzenie przejdzie w tryb Doze. Uniemożliwia to aplikacjom dostęp do sieci i opóźnia ich zadania, synchonizację oraz standardowe alarmy. Tryb synchronizacji w tle Zoptymalizowano dla baterii - Element będzie synchronizował się w tle w sposób który oszczędza limitowane zasoby urządzenia (baterię). + ${app_name} będzie synchronizował się w tle w sposób który oszczędza limitowane zasoby urządzenia (baterię). \nW zależności od stanu zasobów urządzenia, synchronizacja może być opóźniania przez system operacyjny. Zopytmalizowano dla działania w czasie rzeczywistym - Element będzie synchornizował się okresowo o ściśle określonym czasie (konfigurowalne). + ${app_name} będzie synchornizował się okresowo o ściśle określonym czasie (konfigurowalne). \nWpłynie to na użycie baterii i sieci, na panelu powiadomień pozostanie wyświetlone stałe powiadomiene o nasłuchiwaniu zdarzeń. Brak synchronizacji w tle Nie będziesz otrzymywać powiadomień o przychodzących wiadomościach gdy aplikacja będzie działać w tle. @@ -1305,8 +1305,8 @@ Spróbuj uruchomić ponownie aplikację. Przycisk enter na klawiaturze programowej wyśle wiadomość zamiast wprowadzania łamanania linii Znajdź Zarządzaj ustawieniami wyszukiwania. - Element potrzebuje utrzymać mało wpływowe połączenie w tle, w celu otrzymywania wiarygodnych powiadomień. -\nNa następnym ekranie zostanie się poproszonym o pozwolenie działania w tle dla Element, proszę zaakceptować. + ${app_name} potrzebuje utrzymać mało wpływowe połączenie w tle, w celu otrzymywania wiarygodnych powiadomień. +\nNa następnym ekranie zostanie się poproszonym o pozwolenie działania w tle dla ${app_name}, proszę zaakceptować. Tryb oszczędzania danych użyje filtra szczegółowego, w związku z czym aktualizacje o obecności i powiadomienia o pisaniu zostaną przefiltrowane. Media Domyślne źródło mediów @@ -1349,7 +1349,7 @@ Spróbuj uruchomić ponownie aplikację. Aby kontynuować, musisz zaakceptować Warunki użytkowania dla tej usługi. Nie znaleziono prawidłowej aplikacji Usługi Google Play. Powiadomienia mogą nie działać prawidłowo. Hasło jest zbyt słabe - Proszę usunąć hasło, jeżeli chcesz aby Element wygenerował klucz odzyskiwania. + Proszę usunąć hasło, jeżeli chcesz aby ${app_name} wygenerował klucz odzyskiwania. Brak dostępnych sesji Matrix Nie utrać zaszyfrowanych wiadomości Wiadomości w pokojach zaszyfrowanych są bezpieczne dzięki szyfrowaniu end-to-end. Jedynie Ty i Twój odbiorca posiadają klucze dla tych wiadomości. @@ -1412,7 +1412,7 @@ Spróbuj uruchomić ponownie aplikację. Nieprawidłowa odpowiedź funkcji autoodkrywania serwera domowego Opcje automatycznego uzupełniania serwerów - Element wykryło niestandardową konfigurację serwera dla Twojej domeny userID \"%1$s\": + ${app_name} wykryło niestandardową konfigurację serwera dla Twojej domeny userID \"%1$s\": \n%2$s Użyj Konfiguracji Zostałeś(-łaś) wylogowana ze względu na nieprawidłowe lub wygasłe dane logowania. @@ -1424,7 +1424,7 @@ Spróbuj uruchomić ponownie aplikację. Wyświetl żądanie Bezpieczne wiadomości od tego użytkownika są zabezpeiczone za pomocą szyfrowania end-to-end i są nie do odczytania przez osoby trzecie. Połączenie nie powiodło się z powodu niewłaściwie skonfigurowanego serwera - Nie możesz tego zrobić z mobilnej aplikacji Element + Nie możesz tego zrobić z mobilnej aplikacji ${app_name} Niektóre powiadomienia są wyłączone w osobistej konfiguracji. Usługi Google Play są aktualne. Automatycznie uruchom ponownie usługę powiadomień @@ -1449,7 +1449,7 @@ Spróbuj uruchomić ponownie aplikację. Twoje rozmowy bezpośrednie będą wyświetlane tutaj. Naciśnij przycisk + żeby rozpocząć nową. Twoje pokoje będą wyświetlane tutaj. Naciśnij przycisk +żeby znaleźć istniejące bądź utworzyć nowy. Nieprawidłowe zdarzenie, nie można wyświetlić - Podgląd globalnego, publicznego pokoju nie jest wciąż wspierany w Element + Podgląd globalnego, publicznego pokoju nie jest wciąż wspierany w ${app_name} Wystąpił błąd podczas otrzymywania zaufanych informacji Wystąpił błąd podczas uzyskiwania danych kluczy kopii zapasowej Importowanie kluczy E2E z pliku \"%1$s\". @@ -1519,7 +1519,7 @@ Spróbuj uruchomić ponownie aplikację. Zawartość została zgłoszona jako niewłaściwa. \n \nJeżeli nie chcesz widzieć treści od tego użytkownika, możesz go zablokować aby ukryć jego wiadomości. - Element potrzebuje uprawnień aby zapisywać klucze E2E na dysku. + ${app_name} potrzebuje uprawnień aby zapisywać klucze E2E na dysku. \n \nPozwól na dostęp w następnym oknie aby móc eksportować klucze ręcznie. Opuść pokój @@ -1655,7 +1655,7 @@ Spróbuj uruchomić ponownie aplikację. \nZaloguj się ponownie aby uzyskać dostęp do danych konta i wiadomości. Utracisz dostęp do zaszyfrowanych wiadomości do czasu, aż zalogujesz się aby odzyskać Twoje klucze szyfrujące. Wyczyść dane - Aktualna sesja jest dla użytkownika %1$s, podajesz natomiast dane dla użytkownika %2$s. Nie jest to wspierane przez Element. + Aktualna sesja jest dla użytkownika %1$s, podajesz natomiast dane dla użytkownika %2$s. Nie jest to wspierane przez ${app_name}. \nNa początku usuń dane, następnie zaloguj ponownie na innym koncie. Link matrix.to został zdeformowany Opis zbyt krótki @@ -1669,7 +1669,7 @@ Spróbuj uruchomić ponownie aplikację. Inne sesje Wyświetlanie jedynie początkowych wyników, wprowadź więcej znaków… Bezproblemowy - Element może zawieszać się częściej gdy napotka na niespodziewany błąd + ${app_name} może zawieszać się częściej gdy napotka na niespodziewany błąd Preparuje ¯\\_(ツ)_/¯ dla zwykłej wiadomości tekstowej Aktywuj szyfrowanie Odkąd zostanie włączone, szyfrowanie nie może zostać wyłączone. @@ -1734,9 +1734,9 @@ Spróbuj uruchomić ponownie aplikację. Moderator w %1$s Niestandardowy (%1$d) w %2$s Przeskocz do znacznika odczytania - Element nie obsługuje wydarzeń typu \'%1$s\' - Element nie obsługuje wiadomości typu \'%1$s\' - Element napotkał problem przy wyświetlaniu zawartości wydarzenia z ID \'%1$s\' + ${app_name} nie obsługuje wydarzeń typu \'%1$s\' + ${app_name} nie obsługuje wiadomości typu \'%1$s\' + ${app_name} napotkał problem przy wyświetlaniu zawartości wydarzenia z ID \'%1$s\' Nie ignoruj Sesja nie jest w stanie podzielić się weryfikacją z innymi sesjami. \nWeryfikacja zostanie zapisana lokalnie i udostępniona w przyszłych wersjach aplikacji. @@ -1872,7 +1872,7 @@ Spróbuj uruchomić ponownie aplikację. Przesłane pliki Prośby o klucze Odblokuj historię zaszyfrowanych wiadomości - Element Android + ${app_name} Android Odśwież Użyj tej sesji do weryfikacji nowej, nadając jej dostęp do zaszyfrowanych wiadomości. To nie ja @@ -1941,11 +1941,11 @@ Spróbuj uruchomić ponownie aplikację. Użyj %1$s Użyj %1$s albo %2$s aby kontynuować. Dostępne tylko w pokojach szyfrowanych - Skorzystaj z najnowszych aplikacji Element na innych urządzeniach: - Element iOS -\nElement Android - Element Web -\nElement Desktop + Skorzystaj z najnowszych aplikacji ${app_name} na innych urządzeniach: + ${app_name} iOS +\n${app_name} Android + ${app_name} Web +\n${app_name} Desktop Ustaw nowe hasło do konta… Nie można zapisać pliku multimediów Nie można dodać pliku multimediów do galerii @@ -2315,7 +2315,7 @@ Spróbuj uruchomić ponownie aplikację. Czy chcesz się zdegradować\? Zezwól na dostęp do Twoich kontaktów. Wybierz urządzenie dźwiękowe - Połączenie Element nieudane + Połączenie ${app_name} nieudane Zrezygnuj Rozpocznij konwersację Łącze Matrix @@ -2331,13 +2331,13 @@ Spróbuj uruchomić ponownie aplikację. Potwierdź PIN aby zablokować kod PIN Zmień swój bieżący kod PIN Zmień kod PIN - Kod PIN jest wymagany za każdym razem kiedy otwierasz Element. - Kod PIN jest wymagany po dwóch minutach nieużywania Element. + Kod PIN jest wymagany za każdym razem kiedy otwierasz ${app_name}. + Kod PIN jest wymagany po dwóch minutach nieużywania ${app_name}. Wymagaj kodu PIN po upływie dwóch minut Wyświetlaj tylko liczbę nieprzeczytanych wiadomości w prostym powiadomieniu. Pokazuj szczegóły takie jak nazwa pokoju lub treść wiadomości. Pokazuj treść w powiadomieniach - Kod PIN jest jedynym sposobem na odblokowanie Element. + Kod PIN jest jedynym sposobem na odblokowanie ${app_name}. Włącz specyficzne dla urządzenia funkcje biometryczne takie jak czytnik odcisków palców bądź rozpoznawanie twarzy. Włącz biometrię Jeżeli chcesz zresetować kod PIN, naciśnij Zapomnij kod PIN aby wylogować i zresetować. @@ -2367,11 +2367,11 @@ Spróbuj uruchomić ponownie aplikację. Użytkownik nie udzielił zgody. Obecnie brak powiązania z tym identyfikatorem. Powiązanie nieudane. - W trosce o Twoją prywatność, Element obsługuje jedynie wysłanie skrótów (hash) adresów e-mail oraz numerów telefonu. + W trosce o Twoją prywatność, ${app_name} obsługuje jedynie wysłanie skrótów (hash) adresów e-mail oraz numerów telefonu. Zaakceptuj najpierw reguły serwera tożsamości w ustawieniach. Najpierw skonfiguruj serwer tożsamości. Ta operacja nie jest możliwa. Ten serwer domowy jest przestarzały. - Ten serwer tożsamości jest przestarzały. Element obsługuje jedynie API V2. + Ten serwer tożsamości jest przestarzały. ${app_name} obsługuje jedynie API V2. Rozłączyć z serwerem tożsamości %s\? Otwórz warunki %s Ładowanie dostępnych języków… @@ -2391,8 +2391,8 @@ Spróbuj uruchomić ponownie aplikację. To nie jest prawidłowy kod QR Matrix Zaproszenia wysłane do %1$s i %2$s Zaproszenie wysłane do %1$s - 🔐️ Dołącz do mnie na Element - Cześć, pogadaj ze mną na Element: %s + 🔐️ Dołącz do mnie na ${app_name} + Cześć, pogadaj ze mną na ${app_name}: %s Zaproś przyjaciół Zaproś użytkowników Zapraszanie użytkowników… diff --git a/vector/src/main/res/values-pt-rBR/strings.xml b/vector/src/main/res/values-pt-rBR/strings.xml index 8f9ac6af09..ce104ed847 100644 --- a/vector/src/main/res/values-pt-rBR/strings.xml +++ b/vector/src/main/res/values-pt-rBR/strings.xml @@ -344,7 +344,7 @@ Agenda de endereços local Apenas contatos na Matrix Nenhuma conversa - Você não permitiu que o Element acesse seus contatos locais + Você não permitiu que o ${app_name} acesse seus contatos locais Nenhum resultado Salas @@ -484,22 +484,22 @@ Não é possível gravar vídeo Informação - Element precisa de permissão para acessar sua galeria de fotos e vídeos para enviar e salvar anexos. + ${app_name} precisa de permissão para acessar sua galeria de fotos e vídeos para enviar e salvar anexos. \n \nPor favor, permita o acesso na próxima tela para poder enviar arquivos do seu celular. - Element necessita permissão para acessar sua câmera para poder tirar fotos e fazer chamadas de vídeo. + ${app_name} necessita permissão para acessar sua câmera para poder tirar fotos e fazer chamadas de vídeo. " \n \nPor favor, permita o acesso na próxima tela para fazer a chamada." - Element necessita permissão para acessar seu microfone para realizar chamadas de áudio. + ${app_name} necessita permissão para acessar seu microfone para realizar chamadas de áudio. " \n \nPor favor, permita o acesso na próxima tela para fazer a chamada." - Element necessita permissão para acessar sua câmera e seu microfone para fazer chamadas de vídeo. + ${app_name} necessita permissão para acessar sua câmera e seu microfone para fazer chamadas de vídeo. \n \nPor favor, permita o acesso na próxima tela para fazer a chamada. - Element precisa de permissão para acessar os seus contatos para poder encontrar outros usuários a partir de seus e-mails e números de telefone. Se você concordar em usar a sua lista de contatos para esse propósito, permita o acesso na próxima janela pop-up. - Element precisa de permissão para acessar os seus contatos para poder encontrar outros usuários a partir de seus e-mails e números de telefone. + ${app_name} precisa de permissão para acessar os seus contatos para poder encontrar outros usuários a partir de seus e-mails e números de telefone. Se você concordar em usar a sua lista de contatos para esse propósito, permita o acesso na próxima janela pop-up. + ${app_name} precisa de permissão para acessar os seus contatos para poder encontrar outros usuários a partir de seus e-mails e números de telefone. \n \nVocê concorda em usar a sua lista de contatos para esse propósito\? Desculpe. A ação não foi realizada, por falta de permissão @@ -1036,7 +1036,7 @@ Solicitar novamente as chaves de criptografia das suas outras sessões.Pedir novamente as chaves de criptografia de seus outros dispositivos. Requisição de chave enviada. Requisição enviada - Por favor, inicie o Element em outro aparelho que possa descriptografar a mensagem, de modo que ele possa enviar as chaves para esta sessão. + Por favor, inicie o ${app_name} em outro aparelho que possa descriptografar a mensagem, de modo que ele possa enviar as chaves para esta sessão. %ds %ds @@ -1074,12 +1074,12 @@ Desativar minha conta Desativar minha conta Privacidade das notificações - Element pode funcionar em segundo plano para gerenciar as suas notificações de forma segura e confidencial. Isso poderá impactar o uso da bateria. + ${app_name} pode funcionar em segundo plano para gerenciar as suas notificações de forma segura e confidencial. Isso poderá impactar o uso da bateria. Conceder a permissão Escolha outra opção Enviar dados de uso - Element coleta dados de uso anônimos para nos ajudar a melhorar o aplicativo. - Por favor, ative o envio de dados de uso para nos ajudar a melhorar o Element. + ${app_name} coleta dados de uso anônimos para nos ajudar a melhorar o aplicativo. + Por favor, ative o envio de dados de uso para nos ajudar a melhorar o ${app_name}. Sim, eu quero ajudar! Você não faz parte de alguma comunidade, no momento. Escreva aqui… @@ -1138,7 +1138,7 @@ Erro Por favor, revise e aceite as políticas deste servidor local: Chamadas - Use o toque padrão do Element para chamadas recebidas + Use o toque padrão do ${app_name} para chamadas recebidas Toque de chamadas recebidas Selecione o toque de chamadas: Motivo @@ -1163,12 +1163,12 @@ Configurações da sessão Notificações estão ativadas nesta sessão. Remover da sala - Notificações não estão ativadas nesta sessão. -\nPor favor, revise as configurações do Element. + Notificações não estão ativadas nesta sessão. +\nPor favor, revise as configurações do ${app_name}. Ativar Versão do Google Play Services Google Play Services APK está disponível e atualizado. - Element usa Google Play Services para entregar mensagens push, mas isto não parece estar configurado corretamente: + ${app_name} usa Google Play Services para entregar mensagens push, mas isto não parece estar configurado corretamente: \n%1$s Consertar Play Services Token do Firebase @@ -1190,11 +1190,11 @@ Falha ao reiniciar Serviço Começar na inicialização O serviço iniciará quando o aparelho for reiniciado. - O serviço não iniciará enquanto o aparelho não for reiniciado. Você não receberá notificações até que o Element for aberto ao menos uma vez. + O serviço não iniciará enquanto o aparelho não for reiniciado. Você não receberá notificações até que o ${app_name} for aberto ao menos uma vez. Iniciar com o sistema Revisar restrições de segundo plano Otimização de bateria - Element não é afetado pela Otimização de Bateria. + ${app_name} não é afetado pela Otimização de Bateria. Reinicialização Automática do Serviço de Notificações Desativar restrições Ignorar a otimização @@ -1208,11 +1208,11 @@ Mostrar eventos da conta Mostrar alterações de foto de perfil e de nome e sobrenome. Conexão em segundo plano - Element precisa manter um baixo impacto na conexão em segundo plano para ter notificações confiáveis. -\nNa próxima tela, você será solicitado a permitir que o Element funcione sempre em segundo plano. Por favor, aceite. - Restrições de segundo plano estão desativadas para o Element. Este teste deve ser realizado usando dados móveis (sem Wi-Fi). + ${app_name} precisa manter um baixo impacto na conexão em segundo plano para ter notificações confiáveis. +\nNa próxima tela, você será solicitado a permitir que o ${app_name} funcione sempre em segundo plano. Por favor, aceite. + Restrições de segundo plano estão desativadas para o ${app_name}. Este teste deve ser realizado usando dados móveis (sem Wi-Fi). \n%1$s - Restrições em segundo plano estão ativadas para o Element. + Restrições em segundo plano estão ativadas para o ${app_name}. \nO aplicativo funciona bastante restringido enquanto está em segundo plano, o que pode afetar as notificações. \n%1$s Formatação de texto @@ -1271,17 +1271,17 @@ Algumas notificações estão desativadas nas suas configurações personalizadas. Falha ao carregar regras personalizadas, tente novamente. Verifique as configurações - [%1$s] -\nEste erro está fora do controle do Element e, de acordo com o Google, esse erro indica que o aparelho tem muitos aplicativos registrados com FCM. O erro só ocorre nos casos em que há números extremos de aplicativos, portanto, isso não deve afetar o usuário comum. + [%1$s] +\nEste erro está fora do controle do ${app_name} e, de acordo com o Google, esse erro indica que o aparelho tem muitos aplicativos registrados com FCM. O erro só ocorre nos casos em que há números extremos de aplicativos, portanto, isso não deve afetar o usuário comum. Bloquear Entre com o login único Este endereço não está acessível. Por favor, verifique-o Seu aparelho está usando um protocolo de segurança TLS desatualizado, vulnerável a ataques. Para sua segurança, você não poderá se conectar - [%1$s] -\nEste erro está fora de controle da Element. Isso pode ocorrer por vários motivos. Talvez funcione se você tentar novamente mais tarde. Você também pode verificar se o uso de dados do Google Play Service está restrito nas configurações do sistema, ou se o relógio do seu aparelho está correto. O erro também pode ocorrer em ROMs personalizadas. + [%1$s] +\nEste erro está fora de controle da ${app_name}. Isso pode ocorrer por vários motivos. Talvez funcione se você tentar novamente mais tarde. Você também pode verificar se o uso de dados do Google Play Service está restrito nas configurações do sistema, ou se o relógio do seu aparelho está correto. O erro também pode ocorrer em ROMs personalizadas. Iniciando o serviço - [%1$s] -\nEste erro está fora de controle do Element. Não há conta do Google no celular. Por favor, abra o gerenciador de contas e adicione uma conta do Google. + [%1$s] +\nEste erro está fora de controle do ${app_name}. Não há conta do Google no celular. Por favor, abra o gerenciador de contas e adicione uma conta do Google. Adicionar Conta Configurar notificações com som Configurar notificações de chamada @@ -1309,7 +1309,7 @@ \nAlternativamente, você pode tentar usar o servidor público em %2$s. No entanto, ele não é tão confiável e compartilhará o seu IP com esse servidor. Você também pode configurar isso nas Configurações. Tente usar %s Não pergunte novamente - A chamada falhou + A chamada falhou Falha ao estabelecer conexão em tempo real. \nPor favor, peça ao administrador do seu servidor para configurar um servidor TURN, de modo que as chamadas funcionem de maneira estável. Selecione a caixa de som @@ -1357,18 +1357,18 @@ Remover banimento do usuário Remover o banimento do usuário permitirá que ele entre novamente na sala. Confirme sua senha - Não pode fazer isto pelo Element app + Não pode fazer isto pelo ${app_name} app Autenticação exigida O aplicativo não precisa de se conectar ao servidor em segundo plano, isto deve reduzir a utilização da bateria Sincronização em segundo plano Optimizado para bateria - Element sincronizará em segundo plano para preservar os recursos limitados do aparelho (bateria). + ${app_name} sincronizará em segundo plano para preservar os recursos limitados do aparelho (bateria). \nDependendo do estado dos recursos do seu aparelho, a sincronização pode ser adiada pelo sistema operacional. Optimizado em tempo real - O Element sincronizará periodicamente em segundo plano, no momento estabelecido (configurável). -\nIsso afetará o uso de dados e da bateria. Haverá uma notificação permanente informando que o Element está sincronizando. + O ${app_name} sincronizará periodicamente em segundo plano, no momento estabelecido (configurável). +\nIsso afetará o uso de dados e da bateria. Haverá uma notificação permanente informando que o ${app_name} está sincronizando. Sem sincronização em segundo plano - Você não será notificado sobre mensagens recebidas quando o Element estiver em segundo plano. + Você não será notificado sobre mensagens recebidas quando o ${app_name} estiver em segundo plano. Não foi possível actualizar a configuração. Intervalo de sincronização preferido %s @@ -1470,7 +1470,7 @@ Digite o nome de usuário. Digite a sua frase secreta A frase secreta é muito fraca - Por favor, apague a frase secreta se desejar que o Element gere uma chave de recuperação. + Por favor, apague a frase secreta se desejar que o ${app_name} gere uma chave de recuperação. Nenhuma sessão Matrix disponível Nunca perca mensagens criptografadas As mensagens em salas criptografadas são protegidas com a criptografia de ponta a ponta. Somente você e o(s) destinatário(s) têm as chaves para ler essas mensagens. @@ -1584,7 +1584,7 @@ Algoritmo Resposta de descoberta inválida no servidor local Completar Automaticamente as Opções do Servidor - Element detectou uma configuração personalizada do servidor para a sua ID de usuário \"%1$s\": + ${app_name} detectou uma configuração personalizada do servidor para a sua ID de usuário \"%1$s\": \n%2$s Usar a Configuração Você foi desligado devido as credenciais inválidas ou caducadas. @@ -1662,7 +1662,7 @@ Por favor, aguarde… Todas as comunidades Esta sala não pode ser visualizada - A visualização da sala global ainda não é suportada por Element + A visualização da sala global ainda não é suportada por ${app_name} Salas Conversas Nova Sala @@ -1810,7 +1810,7 @@ Este conteúdo foi relatado como inadequado. \n \nSe você não quiser ver mais mensagens deste usuário, você pode bloqueá-lo para esconder suas mensagens. - Element precisa de permissão para salvar suas chaves E2E no aparelho. + ${app_name} precisa de permissão para salvar suas chaves E2E no aparelho. \n \nPermita o acesso na próxima janela para poder exportar suas chaves manualmente. Não há conexão de rede no momento @@ -1968,7 +1968,7 @@ \nEntre novamente para acessar os dados e mensagens da sua conta. Você perderá o acesso as mensagens seguras a menos que você faça login para recuperar suas chaves de criptografia. Limpar dados - A sessão atual é para o usuário %1$s e você fornece credenciais para o usuário %2$s. Isto não é suportado no Element. + A sessão atual é para o usuário %1$s e você fornece credenciais para o usuário %2$s. Isto não é suportado no ${app_name}. \nPor favor, limpe os dados do aplicativo, depois faça o login novamente em outra conta. Seu link do matrix.to foi malformado A descrição é curta demais @@ -1986,7 +1986,7 @@ Outras sessões Mostrando apenas os primeiros resultados, digite mais letras… Relatar imediatamente as falhas - Element poderá quebrar com mais frequência quando ocorrer um erro inesperado + ${app_name} poderá quebrar com mais frequência quando ocorrer um erro inesperado Adiciona ¯\\_(ツ)_/¯ a uma mensagem de texto Ativar criptografia Uma vez ativada, a criptografia não poderá ser desativada. @@ -2060,9 +2060,9 @@ Padrão em %1$s Personalizado (%1$d) em %2$s Ir para a confirmação de leitura - Element não lida com eventos do tipo \'%1$s\' - Element não lida com mensagens do tipo \'%1$s\' - Element encontrou um problema ao render o conteúdo de um evento com \'%1$s\' ID + ${app_name} não lida com eventos do tipo \'%1$s\' + ${app_name} não lida com mensagens do tipo \'%1$s\' + ${app_name} encontrou um problema ao render o conteúdo de um evento com \'%1$s\' ID Desbloquear Esta sessão não pode compartilhar essa confirmação com suas outras sessões. \nA confirmação será salvada localmente e será compartilhada em uma versão futura do aplicativo. @@ -2158,7 +2158,7 @@ Evento apagado pelo usuário, motivo: %1$s Evento moderado pelo administrador da sala, motivo: %1$s As chaves já estão atualizadas! - Element para Android + ${app_name} para Android A chave pede Desbloquear histórico de mensagens criptografadas Recarregar @@ -2267,13 +2267,13 @@ Não foi possível adicionar o arquivo de mídia à Galeria Não foi possível salvar o arquivo de mídia Definir uma nova senha da conta… - Use o Element mais recente em seus outros aparelhos: Element Web, Element para Computador, Element para iOS, Element para Android, ou outro cliente Matrix capaz de fazer autoverificação - Element Web -\nElement para Computador - Element para iOS -\nElement para Android + Use o ${app_name} mais recente em seus outros aparelhos: ${app_name} Web, ${app_name} para Computador, ${app_name} para iOS, ${app_name} para Android, ou outro cliente Matrix capaz de fazer autoverificação + ${app_name} Web +\n${app_name} para Computador + ${app_name} para iOS +\n${app_name} para Android ou outro cliente da Matrix capaz de fazer autoverificação - Use o Element mais recente em seus outros aparelhos: + Use o ${app_name} mais recente em seus outros aparelhos: Força a atual sessão da comunidade em uma sala criptografada a ser descartada Só é suportado em salas criptografadas Use seu %1$s ou %2$s para continuar. @@ -2314,11 +2314,11 @@ Carregando os idiomas disponíveis… Abra termos de %s Desconectar-se do servidor de identidade %s\? - Este servidor de identidade está desatualizado. Element suporta apenas API V2. + Este servidor de identidade está desatualizado. ${app_name} suporta apenas API V2. Esta operação não é possível. O servidor doméstico está desatualizado. Por favor, primeiro configure um servidor de identidade. Por favor, primeiro aceite os termos do servidor de identidade nas configurações. - Pela sua privacidade, Element apenas suporta o envio dos e-mails e números de telefone de usuários em hash. + Pela sua privacidade, ${app_name} apenas suporta o envio dos e-mails e números de telefone de usuários em hash. A associação falhou. Não há nenhuma associação atual com este identificador. Seu servidor doméstico (%1$s) propõe o uso de %2$s para seu servidor de identidade @@ -2449,13 +2449,13 @@ \n \nProssiga com cuidado, pois não há como reverter esta escolha. Desculpe, esta funcionalidade ainda não está disponível para contas conectadas via acesso único. - O código PIN é solicitado todas as vezes que você abre o Element. - O código PIN é solicitado após 2 minutos sem usar o Element. + O código PIN é solicitado todas as vezes que você abre o ${app_name}. + O código PIN é solicitado após 2 minutos sem usar o ${app_name}. Solicitar o PIN depois de 2 minutos Exibir apenas o número de mensagens não lidas em uma notificação. Exibir o nome das salas e o conteúdo das mensagens. Exibir o conteúdo das mensagens nas notificações - O código PIN é a única maneira de desbloquear o Element. + O código PIN é a única maneira de desbloquear o ${app_name}. Ativa a biometria específica do dispositivo, como impressões digitais e reconhecimento de rosto. Ativar a biometria Configurar a proteção @@ -2535,8 +2535,8 @@ Compartilhar meu código Escanear um código QR Não é um código QR da Matrix válido - 🔐️ Junte-se a mim no Element - Ei, fale comigo no Element: %s + 🔐️ Junte-se a mim no ${app_name} + Ei, fale comigo no ${app_name}: %s Convidar amigos Adicionar pessoas "Descrição:· " @@ -2645,7 +2645,7 @@ Esta sala não é pública. Você não poderá entrar novamente sem um convite. Padrão do sistema Falha ao se autenticar - O Element precisa que você insira suas credenciais para executar esta ação. + O ${app_name} precisa que você insira suas credenciais para executar esta ação. Necessário autenticar-se novamente Não autorizado, sem credenciais de autenticação válidas Pessoas diff --git a/vector/src/main/res/values-pt/strings.xml b/vector/src/main/res/values-pt/strings.xml index 8ec938f9e3..8220b08dd4 100644 --- a/vector/src/main/res/values-pt/strings.xml +++ b/vector/src/main/res/values-pt/strings.xml @@ -151,7 +151,7 @@ Lista de endereços local Apenas contactos do Matrix Não há conversas - Não permitiu ao Element aceder aos seus contactos locais + Não permitiu ao ${app_name} aceder aos seus contactos locais Sem resultados Salas @@ -291,26 +291,26 @@ A sessão foi terminada em todos os dispositivos e não receberá mais notifica Não foi possível gravar vídeo Informação - O Element necessita de permissão para aceder ao seu armazenamento de fotos e vídeos para poder enviar e guardar anexos. + O ${app_name} necessita de permissão para aceder ao seu armazenamento de fotos e vídeos para poder enviar e guardar anexos. Permita o acesso na próxima janela para poder enviar ficheiros a partir do seu telefone. - O Element necessita de permissão para aceder à sua câmara para poder tirar fotos e fazer chamadas de vídeo. + O ${app_name} necessita de permissão para aceder à sua câmara para poder tirar fotos e fazer chamadas de vídeo. Por favor, permita o acesso na próxima janela para poder realizar a chamada. - Element necessita de permissão para aceder ao seu microfone para realizar chamadas de áudio. + ${app_name} necessita de permissão para aceder ao seu microfone para realizar chamadas de áudio. Por favor, permita acesso na próxima janela para poder efetuar a chamada. - Element necessita de permissão para aceder à sua câmara e ao seu microfone para realizar chamadas de vídeo. + ${app_name} necessita de permissão para aceder à sua câmara e ao seu microfone para realizar chamadas de vídeo. Por favor, permita o acesso na próxima janela para poder efetuar a chamada. - O Element necessita de permissão para aceder à sua lista de contactos para encontrar outros utilizadores Matrix a partir dos seus e-mails e números de telefone. + O ${app_name} necessita de permissão para aceder à sua lista de contactos para encontrar outros utilizadores Matrix a partir dos seus e-mails e números de telefone. -Por favor, permita o acesso na próxima janela para poder encontrar utilizadores na sua lista de contactos que podem ser contactados pelo Element. - O Element necessita de permissão para aceder à sua lista de contactos para encontrar outros utilizadores Matrix a partir dos seus endereços de email e números de telefone. +Por favor, permita o acesso na próxima janela para poder encontrar utilizadores na sua lista de contactos que podem ser contactados pelo ${app_name}. + O ${app_name} necessita de permissão para aceder à sua lista de contactos para encontrar outros utilizadores Matrix a partir dos seus endereços de email e números de telefone. -Permitir ao Element aceder aos seus contactos? +Permitir ao ${app_name} aceder aos seus contactos? Desculpe… A ação não foi realizada, por falta de permissões Guardado @@ -737,7 +737,7 @@ Adicionar alguns agora? Pedir de novo as chaves criptográficas aos seus outros dispositivos. Pedido de chaves enviado. Pedido enviado - Por favor abra o Element num dispositivo que consiga decifrar a mensagem, para que esse dispositivo possa enviar as chaves para este dispositivo. + Por favor abra o ${app_name} num dispositivo que consiga decifrar a mensagem, para que esse dispositivo possa enviar as chaves para este dispositivo. Lista de Grupos %d mudança de adesão @@ -818,13 +818,13 @@ Adicionar alguns agora? Desactivar a conta Desactivar a minha conta Privacidade das Notificações - O Element pode executar em segundo plano para gerir as notificações de forma segura e confidencial (isso poderá afectar a utilização da bateria). + O ${app_name} pode executar em segundo plano para gerir as notificações de forma segura e confidencial (isso poderá afectar a utilização da bateria). Conceder permissão Escolha outra opção Estatísticas de uso Enviar dados de análise de estatísticas - O Element recolhe dados anónimos de análise de estatísticas para ajudar a melhorar a aplicação. - Por favor, permita o envio de dados de análise para ajudar-nos a melhorar o Element. + O ${app_name} recolhe dados anónimos de análise de estatísticas para ajudar a melhorar a aplicação. + Por favor, permita o envio de dados de análise para ajudar-nos a melhorar o ${app_name}. Sim, quero ajudar! Insígnias Você não faz, actualmente, parte de qualquer comunidade. @@ -993,7 +993,7 @@ A visibilidade das mensagens no Matrix é parecida com a dos emails. O nosso esq Apagar Backup Por favor veja e aceite, apolice para este servidor Chamadas - Usar toque padrão para chamadas recebidas + Usar toque padrão para chamadas recebidas Toque para chamadas recebidas Selecione toque para chamadas: Chamada de Vídeo em Progresso… @@ -1016,7 +1016,7 @@ Se faz favor verifique configurações de conta Activar Configurações de aparelho Notificações estão activadas para este aparelho - Notificações estão desactivadas para este aparelho + Notificações estão desactivadas para este aparelho Por favor, verifique configurações de aplicação Activar Configurações personalizadas @@ -1036,7 +1036,7 @@ Por favor, verifique configurações de aplicação Verificar restriçoes de histórico Desactivar restricções Optimização de bateria - Element não é afectado por Optimização de bateria + ${app_name} não é afectado por Optimização de bateria Ignorar Optimização Configurar Notificações de ruido Configurar Notificações de chamadas diff --git a/vector/src/main/res/values-ru/strings.xml b/vector/src/main/res/values-ru/strings.xml index d62d6c65a7..4a4f4a31ba 100644 --- a/vector/src/main/res/values-ru/strings.xml +++ b/vector/src/main/res/values-ru/strings.xml @@ -360,7 +360,7 @@ Локальные контакты Только Matrix контакты Нет диалогов - Вы не дали доступ Element к внутренним контактам + Вы не дали доступ ${app_name} к внутренним контактам Нет результатов Комнаты @@ -502,18 +502,18 @@ Не удалось записать видео" Element Информация - Element нуждается в разрешении на доступ к вашей фото-и видеотеке для отправки и сохранения вложений. + ${app_name} нуждается в разрешении на доступ к вашей фото-и видеотеке для отправки и сохранения вложений. \n \nПожалуйста, разрешите доступ в следующем всплывающем окне, чтобы иметь возможность отправлять файлы с вашего устройства. - Element необходимы разрешения на доступ к вашей камере, чтобы делать фото и совершать видеозвонки. + ${app_name} необходимы разрешения на доступ к вашей камере, чтобы делать фото и совершать видеозвонки. \n\nПожалуйста разрешите доступ в следующем окне, чтобы иметь возможность совершать звонки. - Element необходимы разрешения на доступ к микрофону, чтобы выполнять звонки. + ${app_name} необходимы разрешения на доступ к микрофону, чтобы выполнять звонки. \n\nПожалуйста разрешите доступ в следующем окне, чтобы иметь возможность совершать звонки. - Element необходимы разрешения на доступ к камере и микрофону для видеовызовов. + ${app_name} необходимы разрешения на доступ к камере и микрофону для видеовызовов. \n \nПожалуйста дайте разрешение в следующем окне для звонка. - Element может проверить вашу адресную книгу, чтобы найти других пользователей Matrix по их электронной почте и номерам телефонов. Если вы согласны поделиться своей адресной книгой для этой цели, пожалуйста, откройте доступ на следующем всплывающем окне. - Element может проверить Вашу адресную книгу, чтобы найти других пользователей сети по email или телефонному номеру. + ${app_name} может проверить вашу адресную книгу, чтобы найти других пользователей Matrix по их электронной почте и номерам телефонов. Если вы согласны поделиться своей адресной книгой для этой цели, пожалуйста, откройте доступ на следующем всплывающем окне. + ${app_name} может проверить Вашу адресную книгу, чтобы найти других пользователей сети по email или телефонному номеру. \n \nСогласны ли вы поделиться своей адресной книгой для этой цели\? Извините. Действие не выполнено из-за недостаточных разрешений @@ -1056,7 +1056,7 @@ • Уведомления содержат метаданные и данные сообщения • Уведомления не будут показывать содержимое сообщения Конфиденциальность уведомлений - Element может работать в фоновом режиме для управления конфиденциальностью и безопасностью ваших уведомлений. Это может повлиять на время работы от батареи. + ${app_name} может работать в фоновом режиме для управления конфиденциальностью и безопасностью ваших уведомлений. Это может повлиять на время работы от батареи. Предоставить разрешение Выбрать другой вариант Ограниченная конфиденциальность @@ -1069,8 +1069,8 @@ Деактивация аккаунта Деактивировать мой аккаунт Отправка аналитических данных - Element собирает анонимную аналитику для улучшения приложения. - Пожалуйста, включите аналитику, чтобы помочь нам улучшить Element. + ${app_name} собирает анонимную аналитику для улучшения приложения. + Пожалуйста, включите аналитику, чтобы помочь нам улучшить ${app_name}. Да, я хочу помочь! Обязательный параметр отсутствует. Параметр недействителен. @@ -1092,7 +1092,7 @@ Перезапросить ключи шифрования у других ваших сессий. Отправлен запрос ключа. Запрос отправлен - Запустите Element на другом устройстве, которое может расшифровать сообщение, для отправки ключа на эту сессию. + Запустите ${app_name} на другом устройстве, которое может расшифровать сообщение, для отправки ключа на эту сессию. Введите здесь… Отправить голосовое сообщение продолжить с… @@ -1195,7 +1195,7 @@ Пароль Пожалуйста ознакомьтесь и подтвердите согласие с политикой этого сервера: Вызовы - Использовать стандартную мелодию Element для входящих звонков + Использовать стандартную мелодию ${app_name} для входящих звонков Мелодия звонка Выберите мелодию звонка: Идёт видеозвонок … @@ -1235,12 +1235,12 @@ Включить Настройки сессии. Уведомления включены для этой сессии. - Уведомления не включено для этой сессии. -\nПожалуйста, проверьте настройки Element. + Уведомления не включено для этой сессии. +\nПожалуйста, проверьте настройки ${app_name}. Включить Проверка сервисов Play APK Google Play сервисов доступен и обновлён. - Element использует сервисы Google Play для доставки push-сообщений, но не похоже что он настроен правильно: + ${app_name} использует сервисы Google Play для доставки push-сообщений, но не похоже что он настроен правильно: \n%1$s Исправить сервисы Play Токен Firebase @@ -1262,17 +1262,17 @@ Не удалось перезапустить службу Запуск при загрузке Служба будет запущена после перезапуска устройства. - При перезагрузке устройства служба не будет запущена , вы не будете получать уведомления, пока Element не будет открыт один раз. + При перезагрузке устройства служба не будет запущена , вы не будете получать уведомления, пока ${app_name} не будет открыт один раз. Включить запуск при загрузке Проверьте фоновые ограничения - Фоновые ограничения отключены для Element. Этот тест должен быть запущен с использованием мобильных данных (без WIFI). + Фоновые ограничения отключены для ${app_name}. Этот тест должен быть запущен с использованием мобильных данных (без WIFI). \n%1$s - Фоновые ограничения включены для Element. + Фоновые ограничения включены для ${app_name}. \nРабота приложения будет жестко ограничена, пока оно находится в фоновом режиме, и это может повлиять на уведомления. \n%1$s Отключить ограничения Оптимизация батареи - Оптимизация батареи не влияет на Element. + Оптимизация батареи не влияет на ${app_name}. Если пользователь оставляет устройство в отключенном от сети и в неподвижном состоянии в течение некоторого времени при выключенном экране, устройство переходит в режим Doze. Это предотвращает доступ приложений к сети и откладывает выполнение заданий, синхронизацию и передачу стандартных аварийных сигналов. Игнорировать оптимизацию Предпросмотр ссылок в чате, когда ваш домашний сервер поддерживает эту функцию. @@ -1283,7 +1283,7 @@ Показывать события о вступлении/выходе Показывать события аккаунта Включает изменения аватара и отображаемого имени. - Необходимо минимизировать влияние на фоновое соединение для надёжности уведомлений. + Необходимо минимизировать влияние на фоновое соединение для надёжности уведомлений. \nНа следующем экране вам будет предложено разрешить Райоту всегда работать в фоновом режиме, пожалуйста, примите. Использовать системную камеру вместо камеры Element. Показать информацию @@ -1315,7 +1315,7 @@ Беззвучный Пожалуйста, введите парольную фразу Парольная фраза слишком простая - Пожалуйста, удалите парольную фразу, если хотите, чтобы Element сгенерировал ключ восстановления. + Пожалуйста, удалите парольную фразу, если хотите, чтобы ${app_name} сгенерировал ключ восстановления. Matrix сессия недоступна Никогда не теряйте зашифрованных сообщений Сообщения в зашифрованных комнатах защищены сквозным шифрованием. Ключи для прочтения этих сообщений есть только у вас и получателя(ей). @@ -1382,12 +1382,12 @@ Ключ восстановления был сохранен в \'%s\'. \n \nПредупреждение: этот файл может быть удален при удалении приложения. - [%1$s] -\nЭта ошибка вне контроля Element. На телефоне нет учетной записи Google. Пожалуйста, добавьте аккаунт Google. - [%1$s] -\nЭта ошибка вне контроля Element. Причины могут быть разными. Возможно, это будет работать, если вы повторите попытку позже, вы также можете проверить, что службы Google Play не ограничены в использовании данных в настройках системы, или что часы вашего устройства установлены правильно, или это может произойти на модифицированных прошивках. - [%1$s] -\nЭта ошибка вне контроля Element, и, по словам Google, эта ошибка означает, что на устройстве слишком много приложений, зарегистрированных в FCM. Ошибка возникает только в тех случаях, когда существует огромное количество приложений, поэтому она не должна влиять на обычного пользователя. + [%1$s] +\nЭта ошибка вне контроля ${app_name}. На телефоне нет учетной записи Google. Пожалуйста, добавьте аккаунт Google. + [%1$s] +\nЭта ошибка вне контроля ${app_name}. Причины могут быть разными. Возможно, это будет работать, если вы повторите попытку позже, вы также можете проверить, что службы Google Play не ограничены в использовании данных в настройках системы, или что часы вашего устройства установлены правильно, или это может произойти на модифицированных прошивках. + [%1$s] +\nЭта ошибка вне контроля ${app_name}, и, по словам Google, эта ошибка означает, что на устройстве слишком много приложений, зарегистрированных в FCM. Ошибка возникает только в тех случаях, когда существует огромное количество приложений, поэтому она не должна влиять на обычного пользователя. Ваши зашифрованные сообщения будут потеряны, если выйдете сейчас Выполняется резервное копирование ключа. Если выйти сейчас, Вы потеряете доступ к Вашим зашифрованным сообщениям. Мне не нужны мои зашифрованные сообщения @@ -1498,7 +1498,7 @@ Игнорировать Ошибка отклика сервера Дополнить параметры сервера - Element обнаружил пользовательскую конфигурацию сервера для вашего userID домена\"%1$s\": + ${app_name} обнаружил пользовательскую конфигурацию сервера для вашего userID домена\"%1$s\": \n%2$s Проверьте, сравнив короткую текстовую строку. Для обеспечения максимальной безопасности мы рекомендуем делать это лично или использовать другие надежные средства связи. @@ -1612,7 +1612,7 @@ Спасибо, предложение было успешно отправлено Предложение не было отправлено (%s) Показать скрытые события в ленте сообщений - Предварительный просмотр открытой комнаты в Element пока не поддерживается + Предварительный просмотр открытой комнаты в ${app_name} пока не поддерживается Диалоги Ждите… Шифрование миниатюры… @@ -1674,10 +1674,10 @@ Будет использовать%s в качестве помощника, если ваш домашний сервер не предлагает его (ваш IP-адрес будет доступен во время разговора) Добавьте идентификационный сервер в свои настройки, чтобы выполнить это действие. Режим фоновой синхронизации - Element будет синхронизироваться в фоновом режиме таким образом, чтобы сохранить ограниченные ресурсы устройства (батарея). + ${app_name} будет синхронизироваться в фоновом режиме таким образом, чтобы сохранить ограниченные ресурсы устройства (батарея). \nВ зависимости от состояния ресурса вашего устройства, синхронизация может быть отложена операционной системой. - Element будет синхронизироваться в фоновом режиме периодически в точное время (настраивается). -\nЭто повлияет на использование радио и батареи, появится постоянное уведомление о том, что Element прислушивается к событиям. + ${app_name} будет синхронизироваться в фоновом режиме периодически в точное время (настраивается). +\nЭто повлияет на использование радио и батареи, появится постоянное уведомление о том, что ${app_name} прислушивается к событиям. Вы не будете уведомлены о входящих сообщениях, когда приложение находится в фоновом режиме. %s \nСинхронизация может быть отложена в зависимости от ресурсов (батареи) или состояния устройства (спящий режим). @@ -1723,7 +1723,7 @@ Открыть в браузере ID виджета Принять - Вы это не можете делать на мобильном Element + Вы это не можете делать на мобильном ${app_name} Этот виджет был добавлен: Ваши тема ID комнаты @@ -1887,7 +1887,7 @@ \nВойдите заново, чтобы получить доступ к данным своей учётной записи и сообщениям. Вы потеряете доступ к защищённым сообщениям, если не войдёте в систему для восстановления ключей шифрования. Очистить данные - Текущая сессия предназначена для пользователя %1$s, а вы предоставляете учётные данные для пользователя %2$s. Это не поддерживается в Element. + Текущая сессия предназначена для пользователя %1$s, а вы предоставляете учётные данные для пользователя %2$s. Это не поддерживается в ${app_name}. \nПожалуйста, сначала очистите данные, а затем снова войдите под другим аккаунтом. Ваша ссылка на matrix.to неверна Описание слишком короткое @@ -1992,7 +1992,7 @@ Закрыть окно бэкапа ключей %s прочитано Не удалось обработать данные - Element требуются права для сохранения ваших ключей шифрования на диск. + ${app_name} требуются права для сохранения ваших ключей шифрования на диск. \n \nПожалуйста, разрешите доступ в следующем всплывающем окне, чтобы экспортировать ключи вручную. Нет подключения к сети @@ -2001,7 +2001,7 @@ Копировать Выполнено Уведомления - Звонок не состоялся + Звонок не состоялся Не удалось установить соединение реального времени. \nПопросите администратора вашего сервера настроить сервер TURN, чтобы звонки работали надёжно. Выберите звуковое устройство @@ -2101,7 +2101,7 @@ Тряска зафиксирована! Показываем только первые результаты, наберите больше букв… Раннее падение - Element может падать чаще, когда происходит непредвиденная ошибка + ${app_name} может падать чаще, когда происходит непредвиденная ошибка Добавляет смайл ¯\\_(ツ)_/¯ в начало сообщения После включения шифрования оно не может быть отключено. Ваш почтовый домен не имеет права регистрироваться на этом сервере @@ -2157,9 +2157,9 @@ По умолчанию в %1$s Пользовательский (%1$d) в %2$s Перейти к последнему прочтённому им сообщению - Element не обрабатывает события типа \'%1$s\' - Element не обрабатывает сообщения типа \'%1$s\' - Element столкнулся с проблемой при отображении содержимого события с идентификатором \'%1$s\' + ${app_name} не обрабатывает события типа \'%1$s\' + ${app_name} не обрабатывает сообщения типа \'%1$s\' + ${app_name} столкнулся с проблемой при отображении содержимого события с идентификатором \'%1$s\' Перестать игнорировать Эта сессия не может поделиться подтверждением с другими сессиями. \nПодтверждение будет сохранено локально и отправится в будущей версии приложения. @@ -2215,8 +2215,8 @@ Сообщения, содержащие @room Отладка Настройки важности уведомлений для событий - Используйте последнюю версию Element на других ваших устройствах, веб-клиент Element, Element для ПК, Element для iOS, Element для Android или другой клиент Matrix, поддерживающий кросс-подпись - Используйте последнюю версию Element на других ваших устройствах: + Используйте последнюю версию ${app_name} на других ваших устройствах, веб-клиент ${app_name}, ${app_name} для ПК, ${app_name} для iOS, ${app_name} для Android или другой клиент Matrix, поддерживающий кросс-подпись + Используйте последнюю версию ${app_name} на других ваших устройствах: Подтвердите новую сессию вашей учетной записи: %1$s Настроить безопасное резервное копирование Безопасное резервное копирование @@ -2270,7 +2270,7 @@ Событие удалено пользователем, Причина: %1$s Событие модерируется администратором комнаты, Причина: %1$s Ключи успешно обновлены! - Element для Android + ${app_name} для Android Обновить Новый вход в вашу учётную запись. Это были Вы\? Нажмите, чтобы просмотреть и проверить @@ -2343,10 +2343,10 @@ Медиафайл добавлен в галерею Не удалось добавить медиафайл в галерею Не удалось сохранить медиафайл - Веб-Element -\nElement для ПК - Element для iOS -\nElement для Android + Веб-${app_name} +\n${app_name} для ПК + ${app_name} для iOS +\n${app_name} для Android или другой, поддерживаемый кросс-подпись Matrix клиент Принудительно отбрасывает текущую групповую сессию для отправки сообщений в зашифрованную комнату Чтобы продолжить, используйте ваш %1$s или используйте ваш %2$s. @@ -2382,11 +2382,11 @@ Загрузка доступных языков… Посмотреть условия %s Отключиться от сервера идентификации %s\? - Этот сервер идентификации устарел. Element поддерживает только API V2. + Этот сервер идентификации устарел. ${app_name} поддерживает только API V2. Эта операция невозможна. Домашний сервер устарел. Пожалуйста, настройте сначала сервер идентификации. Пожалуйста, примите сначала условия сервера идентификации в настройках. - Для вашей приватности, Element поддерживает отправку адреса электронной почты и номера телефона только в хэшированном виде. + Для вашей приватности, ${app_name} поддерживает отправку адреса электронной почты и номера телефона только в хэшированном виде. Привязка не удалась. Текущая взаимосвязь с этим идентификатором отсутствует. Ваш домашний сервер (%1$s) предлагает использовать %2$s для вашего сервера идентификации @@ -2518,13 +2518,13 @@ Удалить данные учетной записи типа %1$s\? \n \nИспользуйте с осторожностью, это может привести к неожиданному поведению. - ПИН-код потребуется каждый раз, когда вы откроете Element. - ПИН-код потребуется через 2 минуты неиспользования Element. + ПИН-код потребуется каждый раз, когда вы откроете ${app_name}. + ПИН-код потребуется через 2 минуты неиспользования ${app_name}. Требовать PIN-код через 2 минуты Отображать только количество непрочитанных сообщений в простом уведомлении. Показывать подробности, такие как названия комнат и содержание сообщений. Показывать содержимое в уведомлениях - PIN-код - единственный способ разблокировать Element. + PIN-код - единственный способ разблокировать ${app_name}. Включить биометрические данные устройства, такие как отпечатки пальцев и распознавание лиц. Включить биометрию Настроить защиту @@ -2604,8 +2604,8 @@ Поделиться моим кодом Сканировать QR-код Это недействительный QR-код matrix - 🔐️ Присоединяйтесь ко мне в Element - Привет, поговори со мной в Element: %s + 🔐️ Присоединяйтесь ко мне в ${app_name} + Привет, поговори со мной в ${app_name}: %s Пригласить друзей Добавить людей "Тема: " @@ -2718,7 +2718,7 @@ Эта комната не публичная. Вы не сможете повторно присоединиться без приглашения. Системная тема Не удалось пройти аутентификацию - Element требует от вас ввести свои учетные данные для выполнения этого действия. + ${app_name} требует от вас ввести свои учетные данные для выполнения этого действия. Требуется повторная аутентификация Не удалось настроить перекрестную подпись Активный звонок (%1$s) diff --git a/vector/src/main/res/values-sk/strings.xml b/vector/src/main/res/values-sk/strings.xml index 3f62126d2d..6b47a2a536 100644 --- a/vector/src/main/res/values-sk/strings.xml +++ b/vector/src/main/res/values-sk/strings.xml @@ -290,7 +290,7 @@ Adresár používateľov Len Matrix kontakty Žiadne konverzácie - Aplikácii Element ste nepovolili prístup k lokálnym kontaktom + Aplikácii ${app_name} ste nepovolili prístup k lokálnym kontaktom Žiadne výsledky Miestnosti @@ -438,24 +438,24 @@ Emailovú adresu si môžete k účtu pridať neskôr cez nastavenia. Nie je možné nahrať video Informácia - Aby ste mohli posielať a prijímať súbory, Element potrebuje prístup k fotkám, videám a súborom vo vašom zariadení. + Aby ste mohli posielať a prijímať súbory, ${app_name} potrebuje prístup k fotkám, videám a súborom vo vašom zariadení. Prosím, povoľte prístup na nasledujúcej obrazovke. - Aby ste mohli fotiť obrázky a videá a tiež uskutočňovať video hovory, Element potrebuje prístup k fotoaparátu. + Aby ste mohli fotiť obrázky a videá a tiež uskutočňovať video hovory, ${app_name} potrebuje prístup k fotoaparátu. " \n \nProsím, povoľte prístup na nasledujúcej obrazovke, aby ste mohli uskutočniť hovor." - Aby ste mohli uskutočňovať audio hovory, Element potrebuje prístup k mikrofónu vašeho zariadenia. + Aby ste mohli uskutočňovať audio hovory, ${app_name} potrebuje prístup k mikrofónu vašeho zariadenia. " \n \nProsím, povoľte prístup na nasledujúcej obrazovke, aby ste mohli uskutočniť hovor." - Aby ste mohli uskutočňovať video hovory, Element potrebuje prístup k fotoaparátu a mikrofónu vašeho zariadenia. + Aby ste mohli uskutočňovať video hovory, ${app_name} potrebuje prístup k fotoaparátu a mikrofónu vašeho zariadenia. Prosím, povoľte prístup na nasledujúcich obrazovkách. - Aby ste mohli na Matrixe nájsť vašich známych podľa telefónneho čísla alebo emailovej adresy, Element potrebuje prístup k vašim kontaktom. Ak si prajete zdieľať váš zoznam kontaktov za týmto účelom, prosím, povoľte prístup na nasledujúcej obrazovke. - Aby ste mohli na Matrixe nájsť vašich známych podľa telefónneho čísla alebo emailovej adresy, Element potrebuje prístup k vašim kontaktom. + Aby ste mohli na Matrixe nájsť vašich známych podľa telefónneho čísla alebo emailovej adresy, ${app_name} potrebuje prístup k vašim kontaktom. Ak si prajete zdieľať váš zoznam kontaktov za týmto účelom, prosím, povoľte prístup na nasledujúcej obrazovke. + Aby ste mohli na Matrixe nájsť vašich známych podľa telefónneho čísla alebo emailovej adresy, ${app_name} potrebuje prístup k vašim kontaktom. -Chcete aplikácii Element povoliť prístup k vašim kontaktom? +Chcete aplikácii ${app_name} povoliť prístup k vašim kontaktom? Prepáčte, akcia nebola vykonaná kvôli chýbajúcim oprávneniam @@ -1051,7 +1051,7 @@ Pozor: tento súbor môže byť automaticky zmazaný po odinštalovaní aplikác • Súčasťou oznámení nebude zobrazený obsah správ Súkromie oznámení - Element môže fungovať na pozadí aby spracovával vaše upozornenia bezpečne a v súkromí. Môže to ovplyvniť využitie batérie. + ${app_name} môže fungovať na pozadí aby spracovával vaše upozornenia bezpečne a v súkromí. Môže to ovplyvniť využitie batérie. Udeliť oprávnenie Vyberte inú voľbu @@ -1066,8 +1066,8 @@ Pozor: tento súbor môže byť automaticky zmazaný po odinštalovaní aplikác Deaktivovať môj účet Odosielať analytické údaje - Element zbiera anonymné analytické údaje, čo nám umožňuje aplikáciu ďalej zlepšovať. - Prosím povoľte odosielanie analytických údajov a pomôžte nám tak vylepšovať Element. + ${app_name} zbiera anonymné analytické údaje, čo nám umožňuje aplikáciu ďalej zlepšovať. + Prosím povoľte odosielanie analytických údajov a pomôžte nám tak vylepšovať ${app_name}. Áno, chcem pomôcť! Chýba zadanie povinného argumentu. @@ -1097,7 +1097,7 @@ Viditeľnosť správ odoslaných cez matrix funguje podobne ako viditeľnosť sp Znovu požiadať o šifrovacie kľúče z vašich ostatných relácií.Znovu požiadať o šifrovacie kľúče z vašich ostatných zariadení. - Prosím spustite Element na inom zariadení, ktoré je schopné dešifrovať túto správu, čím sa automaticky spustí prenos chýbajúcich kľúčov na túto reláciu. + Prosím spustite ${app_name} na inom zariadení, ktoré je schopné dešifrovať túto správu, čím sa automaticky spustí prenos chýbajúcich kľúčov na túto reláciu. Odoslať hlasovú správu @@ -1227,7 +1227,7 @@ Viditeľnosť správ odoslaných cez matrix funguje podobne ako viditeľnosť sp Prosím prečítajte si a odsúhlaste zmluvné podmienky tohoto domovského servera: Hovory - Použiť predvolené zvonenie Element pre prichádzajúce hovory + Použiť predvolené zvonenie ${app_name} pre prichádzajúce hovory Zvonenie pre prichádzajúci hovor Vyberte zvonenie pre prichádzajúce hovory: @@ -1258,13 +1258,13 @@ Prosím, skontrolujte nastavenia účtu. Nastavenia relácií. Oznámenia sú povolené pre túto reláciu. - Oznámenia nie sú povolené pre túto reláciu. -\nProsím, skontrolujte nastavenia Elementu. + Oznámenia nie sú povolené pre túto reláciu. +\nProsím, skontrolujte nastavenia ${app_name}u. Povoliť Kontrola aplikácii Služby Google Play Aplikácia Služby Google Playje k dispozícii a aktualizovaná. - Element používa aplikáciu Služby Google Play na doručovanie oznámení. No zdá sa, že táto nie je správne nakonfigurovaná: + ${app_name} používa aplikáciu Služby Google Play na doručovanie oznámení. No zdá sa, že táto nie je správne nakonfigurovaná: \n%1$s Opraviť Služby Play @@ -1291,19 +1291,19 @@ Prosím skúste reštartovať aplikáciu. Spustenie po zapnutí Služba sa automaticky spustí po reštarte zariadenia. - Služba sa automaticky nespustí po reštarte zariadenia a nedostanete po reštarte žiadne oznámenia, kým nespustíte Element aspoň raz. + Služba sa automaticky nespustí po reštarte zariadenia a nedostanete po reštarte žiadne oznámenia, kým nespustíte ${app_name} aspoň raz. Povoliť spustenie služby po reštarte Kontrola obmedzenia spustenia na pozadí - Obmedzenie spustenia na pozadí nie je aktívne pre Element. Tento test je potrebné spustiť cez mobilné dáta (nie cez wifi). + Obmedzenie spustenia na pozadí nie je aktívne pre ${app_name}. Tento test je potrebné spustiť cez mobilné dáta (nie cez wifi). %1$s - Obmedzenie spustenia na pozadí je aktívne pre Element. -Činnosť aplikácii bude agresívne obmedzovaná operačným systémom, keď je Element na pozadí. Môže to mať negatívny vplyv na doručovanie oznámení. + Obmedzenie spustenia na pozadí je aktívne pre ${app_name}. +Činnosť aplikácii bude agresívne obmedzovaná operačným systémom, keď je ${app_name} na pozadí. Môže to mať negatívny vplyv na doručovanie oznámení. %1$s Deaktivovať obmedzenia Optimalizácia batérie - Chod Element nie je ovplyvnený nastavením optimalizácie batérie. + Chod ${app_name} nie je ovplyvnený nastavením optimalizácie batérie. Ak používateľ na nejaký čas ponechá zariadenie s vypnutou obrazovkou odložené odpojené od napájania, na zariadení sa použije režim Doze. Toto aplikáciám zabráni pristupovať k sieti, pozastaví ich naplánované úlohy, synchronizáciu aj bežné signály. Ignorovať optimalizáciu @@ -1319,8 +1319,8 @@ Prosím skúste reštartovať aplikáciu. Zobrazovať udalosti účtu Zahŕňa zmeny zobrazovaného mena a obrázka v profile. Pripojenie na pozadí - Element potrebuje na pozadí udržovať aktívne nenáročné spojenie, aby spoľahlivo fungovali oznámenia. -Na ďalšej obrazovke vás systém požiada o povolenie vždy bežať na pozadí pre Element. Prosím povoľte ho. + ${app_name} potrebuje na pozadí udržovať aktívne nenáročné spojenie, aby spoľahlivo fungovali oznámenia. +Na ďalšej obrazovke vás systém požiada o povolenie vždy bežať na pozadí pre ${app_name}. Prosím povoľte ho. Udeliť oprávnenie Pri pokuse overiť vašu emailovú adresu sa vyskytla chyba. @@ -1373,12 +1373,12 @@ Na ďalšej obrazovke vás systém požiada o povolenie vždy bežať na pozadí Nepodarilo sa načítať pravidlá oznámení. Prosím, skúste znovu. Skontrolovať nastavenia - [%1$s] -\nNa zariadení máte množstvo aplikácií zaregistrovaných na doručovanie okamžitých oznámení cez služby Google play. Konfigurácia Element nemá vplyv na výskyt tejto chyby. Podľa Google sa môže vyskytovať len pri veľmi vysokom počte nainštalovaných aplikácií. Bežní používatelia by týmto nemali byť postihnutí. - [%1$s] -\nKonfigurácia Element nemá vplyv na zobrazenie tejto chyby. Táto chyba sa môže zobraziť z niekoľkých dôvodov. Uistite sa že máte správne nastavený systémový čas a že ste v nastaveniach systému aplikácii služby Google play neobmedzili používanie prístupu na internet. Chyba sa tiež môže zobrazovať na vlastných zostaveniach (ROM), alebo sa chyba môže samovoľne prestať zobrazovať neskôr. - [%1$s] -\nV zariadení nemáte nastavený účet Google. Prosím, pridajte si účet cez správcu účtov. Konfigurácia Element nemá vplyv na zobrazenie tejto chyby. + [%1$s] +\nNa zariadení máte množstvo aplikácií zaregistrovaných na doručovanie okamžitých oznámení cez služby Google play. Konfigurácia ${app_name} nemá vplyv na výskyt tejto chyby. Podľa Google sa môže vyskytovať len pri veľmi vysokom počte nainštalovaných aplikácií. Bežní používatelia by týmto nemali byť postihnutí. + [%1$s] +\nKonfigurácia ${app_name} nemá vplyv na zobrazenie tejto chyby. Táto chyba sa môže zobraziť z niekoľkých dôvodov. Uistite sa že máte správne nastavený systémový čas a že ste v nastaveniach systému aplikácii služby Google play neobmedzili používanie prístupu na internet. Chyba sa tiež môže zobrazovať na vlastných zostaveniach (ROM), alebo sa chyba môže samovoľne prestať zobrazovať neskôr. + [%1$s] +\nV zariadení nemáte nastavený účet Google. Prosím, pridajte si účet cez správcu účtov. Konfigurácia ${app_name} nemá vplyv na zobrazenie tejto chyby. Pridať účet Aplikácia sa nepotrebuje pripájať k domovskému serveru, keď beží na pozadí, čo môže predĺžiť výdrž batérie @@ -1470,7 +1470,7 @@ Na ďalšej obrazovke vás systém požiada o povolenie vždy bežať na pozadí Úspešné Oznámenia - Element hovor zlyhal + ${app_name} hovor zlyhal Nepodarilo sa uskutočniť spojenie v reálnom čase. \nProsím, požiadajte správcu domovského servera, aby správne nastavil server turn na zaistenie čo najspoľahlivejšej prevádzky hovorov. @@ -1519,17 +1519,17 @@ Na ďalšej obrazovke vás systém požiada o povolenie vždy bežať na pozadí Povolením používateľovi vstupovať zaistíte, aby sa používateľ mohol vrátiť do miestnosti. Potvrdiť vaše heslo - Toto nie je možné urobiť cez mobilnú aplikáciu Element + Toto nie je možné urobiť cez mobilnú aplikáciu ${app_name} Je požadované overenie Režim synchronizácie na pozadí (Experimentálne) Optimalizovaný na využívanie batérie - Element sa bude synchronizovať na pozadí s cieľom ušetriť limitované zdroje (batériu). + ${app_name} sa bude synchronizovať na pozadí s cieľom ušetriť limitované zdroje (batériu). \nV závislosti od kapacity prostriedkov zariadenia môže byť synchronizácia odložená operačným systémom na neskôr. Optimalizovaný na používanie v reálnom čase - Element sa bude pravideľne synchronizovať na pozadí v presne stanovenom čase (nastaviteľné). -\nToto ovplyvní využívanie batérie a prenos údajov, v oznamovacej oblasti sa bude neustále zobrazovať upozornenie, že Element spracúva udalosti. + ${app_name} sa bude pravideľne synchronizovať na pozadí v presne stanovenom čase (nastaviteľné). +\nToto ovplyvní využívanie batérie a prenos údajov, v oznamovacej oblasti sa bude neustále zobrazovať upozornenie, že ${app_name} spracúva udalosti. Žiadna synchronizácia na pozadí Nebudete dostávať oznámenia o prichádzajúcich správach, keď aplikácia pracuje na pozadí. Nepodarilo sa aktualizovať nastavenia. @@ -1631,7 +1631,7 @@ Na ďalšej obrazovke vás systém požiada o povolenie vždy bežať na pozadí Prosím, zadajte dlhé heslo Dlhé heslo je príliš slabé - Prosím, zmažte dlhé heslo, ak si želáte vygenerovať kľúč obnovenia. + Prosím, zmažte dlhé heslo, ak si želáte vygenerovať kľúč obnovenia. Nie je dostupná žiadna relácia matrix Nikdy nepríďte o šifrované správy @@ -1779,7 +1779,7 @@ Na ďalšej obrazovke vás systém požiada o povolenie vždy bežať na pozadí Neplatná odpoveď pri zisťovaní domovského servera Automaticky doplniť možnosti servera - Element zistil vlastné nastavenie servera pre vaše ID používateľa a doménu \"%1$s\": + ${app_name} zistil vlastné nastavenie servera pre vaše ID používateľa a doménu \"%1$s\": \n%2$s Použiť nastavenia @@ -1876,7 +1876,7 @@ Na ďalšej obrazovke vás systém požiada o povolenie vždy bežať na pozadí Všetky komunity Nie je možné zobraziť náhľad tejto miestnosti - Nazeranie do verejných miestností nie je zatiaľ podporované + Nazeranie do verejných miestností nie je zatiaľ podporované Miestnosti Priame konverzácie diff --git a/vector/src/main/res/values-sq/strings.xml b/vector/src/main/res/values-sq/strings.xml index d5bfcf0d96..b170fb9269 100644 --- a/vector/src/main/res/values-sq/strings.xml +++ b/vector/src/main/res/values-sq/strings.xml @@ -874,7 +874,7 @@ Video Ju duhen leje për ftesa, që të nisni një konferencë në këtë dhomë Të parapëlqyer - S’e lejuat Element-in të hyjë në kontaktet tuaja vendore + S’e lejuat ${app_name}-in të hyjë në kontaktet tuaja vendore Ju lutemi, përshkruajeni të metën. Ç’po bënit? Ç’prisnit të ndodhte? Ç’ndodhi në fakt? Duket se po përplasni telefonin nga inati. Do të donit të hapej skena për njoftim të metash? Herën e fundit aplikacioni u vithis. Do të donit të hapej skena e raportimit të vithisjeve? @@ -889,7 +889,7 @@ Fjalëkalimi juaj u ricaktua. \n \nËshtë bërë dalja juaj nga llogaria në krejt sesionet dhe s’do të merrni më njoftime push. Për riaktivizim të njoftimeve, ribëni hyrjen në çdo pajisje. - Ju lutemi, niseni Element-in në një tjetër pajisje që mund të shfshehtëzojë mesazhin, që kështu të mund të dërgojë kyçet te ky sesion. + Ju lutemi, niseni ${app_name}-in në një tjetër pajisje që mund të shfshehtëzojë mesazhin, që kështu të mund të dërgojë kyçet te ky sesion. Lidhja e Medias Dështoi S’regjistrohet dot video Kjo ftesë i qe dërguar %s, që s’është i përshoqëruar me këtë llogari. @@ -957,22 +957,22 @@ U bë lidhja e thirrjes Po bëhet lidhja e thirrjes… Ana e largët dështoi të përgjigjet. - Për të dërguar dhe ruajtur bashkëngjitje, Element-i lyp leje të përdorë mediatekën tuaj. + Për të dërguar dhe ruajtur bashkëngjitje, ${app_name}-i lyp leje të përdorë mediatekën tuaj. \n \nJu lutemi, lejoni përdorimin, që nga flluska pasuese, që të jetë në gjendje të dërgojë kartela që nga telefoni juaj. - Për të bërë foto dhe thirrje video, Element-i lyp leje të përdorë kamerën tuaj. + Për të bërë foto dhe thirrje video, ${app_name}-i lyp leje të përdorë kamerën tuaj. " \n \nJu lutemi, lejoni përdorimin, që nga flluska pasuese, që të jetë në gjendje të bëjë thirrjen." - Për të kryer thirrje audio, Element-i lyp leje të përdorë mikrofonin tuaj. + Për të kryer thirrje audio, ${app_name}-i lyp leje të përdorë mikrofonin tuaj. " \n \nJu lutemi, lejoni përdorimin, që nga flluska pasuese, që të jetë në gjendje të bëjë thirrjen." - Për të kryer thirrje video, Element-i lyp leje të përdorë kamerën dhe mikrofonin tuaj. + Për të kryer thirrje video, ${app_name}-i lyp leje të përdorë kamerën dhe mikrofonin tuaj. \n \nJu lutemi, lejoni përdorimin, që nga flluskat pasuese, që të jetë në gjendje të bëjë thirrjen. - Për të gjetur përdorues të tjerë Matrix, bazuar në email-et apo numrat e tyre të telefonit, Element-i mund të kërkojë në librin tuaj të adresave. Nëse jeni dakord të lejohet hyrja në librin tuaj të adresave për këtë qëllim, ju lutemi, lejojeni hyrjen gjatë flluskës pasuese. - Për të gjetur përdorues të tjerë Matrix, bazuar në email-et apo numrat e tyre të telefonit, Element-i mund të kërkojë në librin tuaj të adresave. + Për të gjetur përdorues të tjerë Matrix, bazuar në email-et apo numrat e tyre të telefonit, ${app_name}-i mund të kërkojë në librin tuaj të adresave. Nëse jeni dakord të lejohet hyrja në librin tuaj të adresave për këtë qëllim, ju lutemi, lejojeni hyrjen gjatë flluskës pasuese. + Për të gjetur përdorues të tjerë Matrix, bazuar në email-et apo numrat e tyre të telefonit, ${app_name}-i mund të kërkojë në librin tuaj të adresave. \n \nJeni dakord të lejohet hyrja në librin tuaj të adresave për këtë qëllim\? Na ndjeni. Veprimi nuk u krye, për shkak lejesh që mungojnë @@ -1061,9 +1061,9 @@ Lejojuni përdoruesve të tjerë të dinë se po shtypni. Formatojini mesazhet duke përdorur sintaksën Markdown përpara se të dërgohen. Kjo lejon formatim të thelluar, f.v., përdorimi i yllthit për ta shfaqur tekstin me të pjerrëta. Nuk prek ftesat, përzëniet dhe dëbimet. - Element-i mund të xhirojë në prapaskenë që të administrojë njoftimet tuaja në rrugë të sigurt dhe privatisht. Kjo mund të ndikojë në harxhimin e baterisë. - Element-i grumbullon të dhëna analitike anonime që të na lejojë ta përmirësojmë aplikacionin. - Ju lutemi, aktivizoni analizat që të na ndihmoni të përmirësojmë Element-in. + ${app_name}-i mund të xhirojë në prapaskenë që të administrojë njoftimet tuaja në rrugë të sigurt dhe privatisht. Kjo mund të ndikojë në harxhimin e baterisë. + ${app_name}-i grumbullon të dhëna analitike anonime që të na lejojë ta përmirësojmë aplikacionin. + Ju lutemi, aktivizoni analizat që të na ndihmoni të përmirësojmë ${app_name}-in. Të shfaqen krejt mesazhet prej %s\? \n \nKini parasysh që ky veprim do të sjellë rinisjen e aplikacionit dhe mund të hajë ca kohë. @@ -1090,7 +1090,7 @@ Dërgoni një ngjitës vazhdoni me… Thirrje - Për thirrje ardhëse përdor zilen parazgjedhje të Element-it + Për thirrje ardhëse përdor zilen parazgjedhje të ${app_name}-it Zile thirrjesh ardhëse Përzgjidhni zile për thirrjet: Kjo dhomë nuk shfaq simbole për ndonjë bashkësi @@ -1118,12 +1118,12 @@ Aktivizoje Rregullime Sesioni. Njoftimet janë të aktivizuara për këtë sesion. - Nuk janë aktivizuar njoftimet për këtë sesion. -\nJu lutemi, kontrolloni rregullimet e Element-it. + Nuk janë aktivizuar njoftimet për këtë sesion. +\nJu lutemi, kontrolloni rregullimet e ${app_name}-it. Aktivizoje Kontroll pë Play Services APK-ja për Google Play Services është e pranishme dhe e përditësuar. - Element-i përdor Google Play Services për të dorëzuar mesazhe push, por s’duket të jetë formësuar saktë: + ${app_name}-i përdor Google Play Services për të dorëzuar mesazhe push, por s’duket të jetë formësuar saktë: \n%1$s Ndreqni Play Services Token Firebase @@ -1145,22 +1145,22 @@ S’u arrit të rinisej shërbimi Nise gjatë nisjes së sistemit Shërbimi do të niset kur të riniset pajisja. - Shërbimi s’do të niset kur të riniset pajisja, s’do të merrni njoftime derisa Element-i të jetë hapur një herë. + Shërbimi s’do të niset kur të riniset pajisja, s’do të merrni njoftime derisa ${app_name}-i të jetë hapur një herë. Aktivizo Nisje gjatë nisjes së sistemit Kontrollo kufizime prapaskene - Kufizimet për në prapaskenë janë të çaktivizuar për Element-in. Ky test duhet të xhirojë duke përdorur të dhëna rrjeti celular (jo WIFI). + Kufizimet për në prapaskenë janë të çaktivizuar për ${app_name}-in. Ky test duhet të xhirojë duke përdorur të dhëna rrjeti celular (jo WIFI). \n%1$s - Kufizimet për në prapaskenë janë të aktivizuara për Element-in. + Kufizimet për në prapaskenë janë të aktivizuara për ${app_name}-in. \nPuna që aplikacioni rreket të bëjë do të kufizohet në mënyrë agresive, teksa gjendet në prapaskenë, dhe kjo mund të prekë njoftimet. \n%1$s Çaktivizoji kufizimet Optimizim Baterie - Element-i nuk preket nga Optimizime Baterie. + ${app_name}-i nuk preket nga Optimizime Baterie. Nëse një përdorues e lë një pajisje jo në prizë dhe të palëvizshme për një periudhë, me ekranin të fikur, pajisja kalon nën mënyrën Dremitje. Kjo u parandalon aplikimeve të hyjnë në rrjet dhe shtyn për më vonë punët e tyre, njëkohësimet dhe alarmet standarde. Shpërfille Optimizimin Lidhje Në Prapaskenë - Për t’ju dhënë njoftime të qëndrueshme, Element-i lyp të mbajë në prapaskenë një lidhje me pak ndikim. -\nNë skenën pasuese do t’ju kërkohet të lejoni Element-in të xhirojë në prapaskenë, ju lutemi, pranojeni. + Për t’ju dhënë njoftime të qëndrueshme, ${app_name}-i lyp të mbajë në prapaskenë një lidhje me pak ndikim. +\nNë skenën pasuese do t’ju kërkohet të lejoni ${app_name}-in të xhirojë në prapaskenë, ju lutemi, pranojeni. Akordojini leje Ndodhi një gabim teksa verifikohej adresa juaj email. Ndodhi një gabim teksa verifikohej numri juaj i telefonit. @@ -1179,12 +1179,12 @@ Disa njoftime janë të çaktivizuara te rregullimet tuaja vetjake. S’u arrit të ngarkohen rregulla vetjakë, ju lutemi, riprovoni. Kontrolloni Rregullimet - [%1$s] -\nKy gabim është jashtë kontrollit të Element-it dhe, sipas Google-it, ky gabim është shenjë se pajisja ka shumë aplikacione të regjistruar me FCM. Gabimi ndodh vetëm në raste kur ka një numër të skajshëm aplikacionesh, ndaj nuk duhet të prekë përdoruesin mesatar. - [%1$s] -\nKy gabim është jashtë kontrollit të Element-it. Mund të ndodhë për disa arsye. Ndoshta do të funksionojë, nëse riprovoni më vonë, mund të kontrolloni edhe nëse për Google Play Service s’ka kufizime lidhur me përdorimin e të dhënave, te rregullimet e sistemit, ose se ora e pajisjes suaj është e saktë, ose mund të ndodhë në ROM të përshtatur. - [%1$s] -\nKy gabim është jashtë kontrollit të Element-it. S’ka llogari Google te telefoni. Ju lutemi, hapni përgjegjësin e llogarive dhe shtoni një llogari Google. + [%1$s] +\nKy gabim është jashtë kontrollit të ${app_name}-it dhe, sipas Google-it, ky gabim është shenjë se pajisja ka shumë aplikacione të regjistruar me FCM. Gabimi ndodh vetëm në raste kur ka një numër të skajshëm aplikacionesh, ndaj nuk duhet të prekë përdoruesin mesatar. + [%1$s] +\nKy gabim është jashtë kontrollit të ${app_name}-it. Mund të ndodhë për disa arsye. Ndoshta do të funksionojë, nëse riprovoni më vonë, mund të kontrolloni edhe nëse për Google Play Service s’ka kufizime lidhur me përdorimin e të dhënave, te rregullimet e sistemit, ose se ora e pajisjes suaj është e saktë, ose mund të ndodhë në ROM të përshtatur. + [%1$s] +\nKy gabim është jashtë kontrollit të ${app_name}-it. S’ka llogari Google te telefoni. Ju lutemi, hapni përgjegjësin e llogarive dhe shtoni një llogari Google. Shtoni Llogari Formësoni Njoftime të Zhurmshme Formësoni Njoftime Thirrjesh @@ -1195,7 +1195,7 @@ Të heshtur Ju lutemi, jepni një frazëkalim Frazëkalimi është shumë i dobët - Ju lutemi, fshini frazëkalimin, nëse doni që Element-i të prodhojë një kyç rimarrjesh. + Ju lutemi, fshini frazëkalimin, nëse doni që ${app_name}-i të prodhojë një kyç rimarrjesh. S’ka sesione Matrix të gatshëm Mos humbni kurrë mesazhe të fshehtëzuar Mesazhet në dhoma të fshehtëzuara sigurohen me fshehtëzim skaj-më-skaj. Vetëm ju dhe marrësi(t) keni kyçet për leximin e këtyre mesazheve. @@ -1325,7 +1325,7 @@ Unë qeshë Përgjigje e pavlefshme zbulimi shërbyesi Home Mundësi Vetëplotësimi Shërbyesi - Element-i pikasi një formësim shërbyesi të përshtatur për përkatësinë tuaj userId \"%1$s\": + ${app_name}-i pikasi një formësim shërbyesi të përshtatur për përkatësinë tuaj userId \"%1$s\": \n%2$s Përdor Formësim Po gatitet shërbimi @@ -1439,7 +1439,7 @@ Ju lutemi, pritni… Krejt Bashkësitë Kjo dhomë s’mund të parashihet - Paraparja e dhomave të lexueshme nga bota nuk mbulohet ende në Element + Paraparja e dhomave të lexueshme nga bota nuk mbulohet ende në ${app_name} Dhoma Mesazhe të Drejtpërdrejtë Dhomë e Re @@ -1531,11 +1531,11 @@ Që të kryhet ky veprim, shtoni një shërbyes identitetesh, që nga rregullimet tuaja. Mënyrë Njëkohësimi Në Prapaskenë E optimizuar për baterinë - Element-i do të bëjë njëkohësim në prapaskenë, në një mënyrë që kursen burimet e kufizuara të pajisjes (baterinë). + ${app_name}-i do të bëjë njëkohësim në prapaskenë, në një mënyrë që kursen burimet e kufizuara të pajisjes (baterinë). \nNë varësi të gjendjes së burimeve tuaja, njëkohësimi mund të shtyhet për më vonë nga sistemi operativ. I optimizuar për kohë të njëmendtë - Element0-i do të bëjë njëkohësim në prapaskenë periodikisht në një kohë të caktuar (e formësueshme). -\nKjo do të ketë ndikim mbi përdorimin e baterisë dhe të transmetimit, do të shfaqet një njoftim i pandërprerë që pohon se Element-i po përgjon për akte. + ${app_name}0-i do të bëjë njëkohësim në prapaskenë periodikisht në një kohë të caktuar (e formësueshme). +\nKjo do të ketë ndikim mbi përdorimin e baterisë dhe të transmetimit, do të shfaqet një njoftim i pandërprerë që pohon se ${app_name}-i po përgjon për akte. Pa njëkohësim në prapraskenë S’do të njoftoheni për mesazhe ardhës, kur aplikacioni gjendet në prapaskenë. S’u arrit të përditësohen rregullime. @@ -1618,12 +1618,12 @@ Kjo lëndë është raportuar si e papërshtatshme. \n \nNëse s’doni të shihni më lëndë nga ky përdorues, mund ta shpërfillni, që të fshihen mesazhet e tij. - Element-i lyp leje për të ruajtur kyçet tuaj E2E në disk. + ${app_name}-i lyp leje për të ruajtur kyçet tuaj E2E në disk. \n \nJu lutemi, lejoni, te flluska pasuese, hyrje për të qenë e mundur të eksportohen kyçet tuaj dorazi. Tani për tani s’la lidhje rrjeti Ripohoni fjalëkalimin tuaj - Këtë s’e bëni dot që nga Element-i për celular + Këtë s’e bëni dot që nga ${app_name}-i për celular Lypset mirëfilltësim Integrime Përdorni një Përgjegjës Integrimesh që të administroni robotë, ura, widget-e dhe paketa ngjitësish. @@ -1792,7 +1792,7 @@ \nQë të mund të hyni te të dhëna të llogarisë tuaj dhe te mesazhe, bëni sërish hyrjen. Do të humbni hyrje te mesazhe të sigurt, veç në hyfshi për të rimarrë kyçet tuaj të fshehtëzimit. Spastro të dhënat - Sesioni i tanishëm është për përdoruesin %1$s dhe ju jepni kredenciale për përdoruesin %2$s. Kjo nuk mbulohet nga Element. + Sesioni i tanishëm është për përdoruesin %1$s dhe ju jepni kredenciale për përdoruesin %2$s. Kjo nuk mbulohet nga ${app_name}. \nJu lutemi, së pari spastroni të dhëna, mandej hyni sërish në një tjetër llogari. Lidhja juaj matrix.to është e keqformuar Përshkrimi është shumë i shkurtër @@ -1811,7 +1811,7 @@ Sesioni i tanishëm Shfaq sesione të tjera Po shfaqen vetëm përfundimet e para, shtypni më shumë shkronja… - Element mund të vithiset më shpesh, kur ndodh një gabim i papritur + ${app_name} mund të vithiset më shpesh, kur ndodh një gabim i papritur Lejoni shërbyes rrugëzgjidhje asistimi thirrjesh Parashtoji ¯\\_(ツ)_/¯ një mesazhi tekst të thjeshtë Aktivizoni fshehtëzim @@ -1925,9 +1925,9 @@ Për siguri ekstra, verifikojeni %s duke parë kontrolluar në të dy pajisjet tuaja një kod njëpërdorimsh. \n \nPër sigurinë maksimale, bëjeni këtë ju vetë. - Element nuk trajton akte të llojit \'%1$s\' - Element nuk trajton mesazhe të llojit \'%1$s\' - Element ndeshi një problem kur vizatohej lëndë e aktit me ID \'%1$s\' + ${app_name} nuk trajton akte të llojit \'%1$s\' + ${app_name} nuk trajton mesazhe të llojit \'%1$s\' + ${app_name} ndeshi një problem kur vizatohej lëndë e aktit me ID \'%1$s\' Ky sesion s’është në gjendje të ndajë këtë verifikim me sesionet tuaj të tjerë. \nVerifikimi do të ruhet lokalisht dhe do të ndahet nën një version të ardhshëm të aplikacionit. Për të qenë i sigurt, verifikoni %s duke kontrolluar një kod njëpërdorimsh. @@ -1980,7 +1980,7 @@ Veprimtari e fshirë nga përdorues, arsye: %1$s Veprimtari e moderuar nga përgjegjësi i dhomës, arsye: %1$s Kyçet janë tashmë të përditësuar! - Element Android + ${app_name} Android Kërkesa Kyçi Shkyçni historik mesazhesh të fshehtëzuar Rifreskoje @@ -2081,13 +2081,13 @@ Te Galeria u shtua kartelë media S’u shtua dot kartelë media te Galeria Caktoni një fjalëkalim të ri llogarie… - Përdorni Element-in më të ri në pajisjet tuaja të tjera, Element Web, Element Desktop, Element iOS, Element për Android, ose një tjetër klient Matrix të aftë për <em>cross-signing</em - Element Web -\nElement Desktop - Element iOS -\nElement Android + Përdorni ${app_name}-in më të ri në pajisjet tuaja të tjera, ${app_name} Web, ${app_name} Desktop, ${app_name} iOS, ${app_name} për Android, ose një tjetër klient Matrix të aftë për <em>cross-signing</em + ${app_name} Web +\n${app_name} Desktop + ${app_name} iOS +\n${app_name} Android ose një tjetër klient Matrix i aftë për <em>cross-signing</em - Përdorni Element-in më të ri në pajisjet tuaja të tjera: + Përdorni ${app_name}-in më të ri në pajisjet tuaja të tjera: Mbulohet vetëm për dhoma të fshehtëzuara Përdorni %1$s tuaj ose përdorni %2$s tuaj që të vazhdohet. Përdorni Kyçin Rimarrjesh @@ -2147,7 +2147,7 @@ Gjuhë të tjera të gatshme Po ngarkohen gjuhë të gatshme… Të bëhet shkëputja prej shërbyesit tuaj të identitetit %s\? - Ky shërbyes identitetesh është i vjetruar. Element mbulon vetëm API V2. + Ky shërbyes identitetesh është i vjetruar. ${app_name} mbulon vetëm API V2. Ky veprim s’është i mundshëm. Shërbyesi Home është i vjetruar. Ju lutemi, së pari formësoni një shërbyes identitetesh. Ju lutemi, së pari pranoni te rregullimet termat e shërbyesit të identiteteve. @@ -2178,7 +2178,7 @@ Kopjoje Sukses Njoftime - Thirrja Element Dështoi + Thirrja ${app_name} Dështoi S’u arrit të vendosej lidhje e atypëratyshme. \nQë thirrjet të punojnë mirë, ju lutemi, kërkojini përgjegjësit të shërbyesit tuaj Home të formësojë një shërbyes TURN. Përzgjidhni Pajisje Zëri @@ -2295,7 +2295,7 @@ S’u ruajt dot kartelë media Ripohoni identitetin tuaj duke verifikuar këto kredenciale hyrjeje, duke i akorduar hyrje te mesazhe të fshehtëzuar. Na ndjeni, ky veprim s’është ende i mundshëm për llogari të lidhura duke përdorur Hyrje Njëshe. - Për privatësinë tuaj, Element-i mbulon vetëm dërgim email-esh dhe numrash telefoni përdoruesi të koduar. + Për privatësinë tuaj, ${app_name}-i mbulon vetëm dërgim email-esh dhe numrash telefoni përdoruesi të koduar. Caktoni rol Rol Hapni fjalosje @@ -2368,13 +2368,13 @@ S’mund të hapet një dhomë prej të cilës jeni dëbuar. S’gjendet dot kjo dhomë. Sigurohuni që ekziston. Lidhja qe e keqformësuar - Kodi PIN kërkohet doemos sa herë që hapni Element-in. - Kodi PIN kërkohet doemos pas 2 minutash mospërdorimi të Element-it. + Kodi PIN kërkohet doemos sa herë që hapni ${app_name}-in. + Kodi PIN kërkohet doemos pas 2 minutash mospërdorimi të ${app_name}-it. Kërkoje doemos PIN-in pas 2 minutash Shfaq vetëm numrin e mesazheve të palexuar, në një njoftim të thjeshtë. Shfaq hollësi, të tilla si emra dhomash dhe lëndë mesazhesh. Shfaq lëndë në njoftime - Kodi PIN është rruga e vetme për të shkyçur Element-in. + Kodi PIN është rruga e vetme për të shkyçur ${app_name}-in. Aktivizoni të dhëna biometrike specifike për pajisjen, bie fjala, shenja gishtash dhe njohje fytyre. Aktivizo të dhëna biometrike Formësoni mbrojtjen @@ -2448,8 +2448,8 @@ Ndaje kodin tim me të tjerët Skanoni një kod QR S’është kod QR Matrix i vlefshëm - Takohuni me mua në Element - Hej, bisedoni me mua në Element: %s + Takohuni me mua në ${app_name} + Hej, bisedoni me mua në ${app_name}: %s Ftoni shokë Shtoni persona "Temë: " @@ -2526,7 +2526,7 @@ Hiqi botimin Shto S’u arrit të bëhej mirëfilltësimi - Që të kryejë këtë veprim, Element-i lyp dhënien prej jush të kredencialeve tuaja. + Që të kryejë këtë veprim, ${app_name}-i lyp dhënien prej jush të kredencialeve tuaja. Lypset Rimirëfilltësim Përdorues Ndodhi një gabim teksa shpërngulej thirrja diff --git a/vector/src/main/res/values-sr/strings.xml b/vector/src/main/res/values-sr/strings.xml index 8f4cae8487..2ce03e4a54 100644 --- a/vector/src/main/res/values-sr/strings.xml +++ b/vector/src/main/res/values-sr/strings.xml @@ -418,7 +418,7 @@ Нема доступних јавних соба Нема више резултата - Нисте доволили да Елемент приступи вашим контактима + Нисте доволили да Елемент приступи вашим контактима Нема разговора Системска упозорења Заједнице diff --git a/vector/src/main/res/values-sv/strings.xml b/vector/src/main/res/values-sv/strings.xml index 79cdd21751..70de437eab 100644 --- a/vector/src/main/res/values-sv/strings.xml +++ b/vector/src/main/res/values-sv/strings.xml @@ -377,7 +377,7 @@ Användarkatalog Bara Matrix-kontakter Inga konversationer - Du gav inte Element tillgång till dina lokala kontakter + Du gav inte ${app_name} tillgång till dina lokala kontakter Inga resultat Ingen identitetsserver konfigurerad. Rum @@ -512,7 +512,7 @@ Efterfråga krypteringsnycklarna igen från dina andra sessioner. Nyckelförfrågan har skickats. Förfrågan har skickats - Vänligen öppna Element på en annan enhet som kan dekryptera meddelandet så att den kan skicka nycklarna till den här sessionen. + Vänligen öppna ${app_name} på en annan enhet som kan dekryptera meddelandet så att den kan skicka nycklarna till den här sessionen. Läsindikationslista Grupplista @@ -533,7 +533,7 @@ Rumsnamn Rumsämne Samtal - Använd förvald Element-ringsignal för inkommande samtal + Använd förvald ${app_name}-ringsignal för inkommande samtal Tillåt reservassistansserver för samtal Kommer att använda %s som reserv när din hemserver inte erbjuder en (din IP-adress kommer att delas under samtalet) Ringsignal för inkommande samtal @@ -555,22 +555,22 @@ Ta en bild eller en video Kan inte spela in video Information - Element behöver tillstånd att komma åt ditt foto- och videobibliotek för att skicka och spara bilagor. + ${app_name} behöver tillstånd att komma åt ditt foto- och videobibliotek för att skicka och spara bilagor. \n \nVänligen ge tillstånd i nästa popup för att kunna skicka filer från din telefon. - Element behöver tillstånd att komma åt din kamera för att kunna ta bilder och hålla videosamtal. + ${app_name} behöver tillstånd att komma åt din kamera för att kunna ta bilder och hålla videosamtal. " \n \nVänligen ge åtkomst i nästa popup för att kunna utföra samtalet." - Element behöver tillstånd att komma åt din mikrofon för hålla röstsamtal. + ${app_name} behöver tillstånd att komma åt din mikrofon för hålla röstsamtal. " \n \nVänligen ge åtkomst i nästa popup för att kunna utföra samtalet." - Element behöver tillstånd att komma åt din kamera och mikrofon för att kunna utföra videosamtal. + ${app_name} behöver tillstånd att komma åt din kamera och mikrofon för att kunna utföra videosamtal. \n \nVänligen ge tillstånd i nästa popup för att kunna utföra samtalet. - Element kan kolla i din adressbok för att hitta andra Matrixanvändare baserat på deras e-postadresser och telefonnummer. Om du går med på att dela din adressbok för detta ändamål, vänligen ge tillstånd i nästa popup. - Element kan kolla i din adressbok för att hitta andra Matrixanvändare baserat på deras e-postadresser och telefonnummer. + ${app_name} kan kolla i din adressbok för att hitta andra Matrixanvändare baserat på deras e-postadresser och telefonnummer. Om du går med på att dela din adressbok för detta ändamål, vänligen ge tillstånd i nästa popup. + ${app_name} kan kolla i din adressbok för att hitta andra Matrixanvändare baserat på deras e-postadresser och telefonnummer. \n \nVill du dela din adressbok för detta ändamål\? Tyvärr. Handlingen utfördes inte på grund av saknade rättigheter @@ -793,8 +793,8 @@ Aviseringar är inaktiverade för ditt konto. \nVänligen kolla kontoinställningarna. Aviseringar är aktiverade för den här sessionen. - Aviseringar är inaktiverade för den här sessionen. -\nVänligen kolla Elementinställningarna. + Aviseringar är inaktiverade för den här sessionen. +\nVänligen kolla ${app_name}inställningarna. Observera att vissa meddelandetyper är satta till tyst (kommer att producera aviseringar utan ljud). Vissa aviseringar är inaktiverade i dina anpassade inställningar. Aviseringstjänst @@ -802,8 +802,8 @@ Aviseringstjänsten körs inte. \nFörsök att starta om appen. Automatisk omstart av aviseringstjänsten - Tjänsten kommer inte att starta när enheten startas om, så du kommer inte att få aviseringar förrens Element har öppnats en gång. - Bakgrundsbegränsningar är aktiverade för Element. + Tjänsten kommer inte att starta när enheten startas om, så du kommer inte att få aviseringar förrens ${app_name} har öppnats en gång. + Bakgrundsbegränsningar är aktiverade för ${app_name}. \nSaker som appen försöker göra kommer att kraftigt begränsas när appen är bakgrunden, och detta kan påverka aviseringar. \n%1$s Om en användare lämnar sin enhet urkopplad och stilla en längre tid, med skärmen av, så går enheten in i Doze-läget. Detta hindrar appar från att komma åt nätverket och skjuter upp deras uppgifter, synkroniseringar och standardlarm. @@ -822,8 +822,8 @@ Meddelanden innehållande mitt användarnamn Meddelanden i direktchattar Meddelanden i gruppchattar - Element kommer att synka i bakgrunden periodiskt vid precisa tider (konfigurerbart). -\nDetta kommer att påverka data- och batterianvändning, och det kommer att visas en permanent avisering som säger att Element lyssnar efter händelser. + ${app_name} kommer att synka i bakgrunden periodiskt vid precisa tider (konfigurerbart). +\nDetta kommer att påverka data- och batterianvändning, och det kommer att visas en permanent avisering som säger att ${app_name} lyssnar efter händelser. Version olm-version Behåll media @@ -843,9 +843,9 @@ Upptäckbarhet Hantera dina upptäckbarhetsinställningar. Aviseringssekretess - Element kan köra i bakgrunden för att hantera dina aviseringar säkert och privat. Detta kan påverka batteritiden. - Element behöver hålla en bakgrundsanslutning med låg påverkan för att ha pålitliga aviseringar. -\nPå nästa skärm kommer du att frågas om du vill tillåta att Element alltid körs i bakgrunden, vänligen acceptera. + ${app_name} kan köra i bakgrunden för att hantera dina aviseringar säkert och privat. Detta kan påverka batteritiden. + ${app_name} behöver hålla en bakgrundsanslutning med låg påverkan för att ha pålitliga aviseringar. +\nPå nästa skärm kommer du att frågas om du vill tillåta att ${app_name} alltid körs i bakgrunden, vänligen acceptera. Inloggad som Hemserver Identitetsserver @@ -986,7 +986,7 @@ \nLogga in igen för att komma åt din kontodata och dina meddelanden. Avancerade inställningar Visar endast de första resultaten, skriv mer… - Element kan krascha mer när ett oväntat fel inträffar + ${app_name} kan krascha mer när ett oväntat fel inträffar Efter aktivering så kan kryptering inte avaktiveras. Din e-postdomän är inte auktoriserad för att registrera på den här servern Meddelanden i det här rummet är inte totalsträckskrypterade. @@ -1035,7 +1035,7 @@ Vi kunde inte bjuda in användarna. Vänligen kolla användarna du vill bjuda in och försök igen. Koppla bort från identitetsservern %s\? - Den här identitetsservern är utdaterat. Element stöder endast API V2. + Den här identitetsservern är utdaterat. ${app_name} stöder endast API V2. Vänligen konfigurera en identitetsserver. Vänligen acceptera först identitetsserverns användarvillkor i inställningarna. Din hemserver (%1$s) föreslår att du använder %2$s som din identitetsserver @@ -1171,7 +1171,7 @@ Ljud Fil Dekal - Element hanterar inte meddelanden av typen \'%1$s\' + ${app_name} hanterar inte meddelanden av typen \'%1$s\' Skickar det valda meddelandet I regnbågsfärger Meddelanderedigering Meddelandenyckel @@ -1208,7 +1208,7 @@ Du kan inte ringa ett samtal till dig själv, vänta tills deltagare accepterar inbjudan Misslyckades att lägga till widget Misslyckades att ta bort widget - Elementsamtal misslyckades + ${app_name}samtal misslyckades Misslyckades att upprätta en realtidsuppkoppling. \nVänligen be administratören för din hemserver att konfigurera en TURN-server för att samtal ska fungera pålitligt. Välj ljudenhet @@ -1313,7 +1313,7 @@ Upphovsrätt Integritetspolicy Telefon - Du kan inte göra detta från element på mobilen + Du kan inte göra detta från ${app_name} på mobilen Autentisering krävs Diagnostik för felsökning Kör tester @@ -1323,7 +1323,7 @@ Misslyckades att ladda anpassade regler, vänligen försök igen. Kolla Play-tjänster APK:n Google Play-tjänster är tillgänglig och uppdaterad. - Element använder Google Play-tjänster för att skicka pushmeddelanden, men den verkar inte vara korrekt konfigurerad: + ${app_name} använder Google Play-tjänster för att skicka pushmeddelanden, men den verkar inte vara korrekt konfigurerad: \n%1$s Fixa Play-tjänster Firebase-token @@ -1331,12 +1331,12 @@ \n%1$s Misslyckades att hämta FCM-token: \n%1$s - [%1$s] -\nDet här felet är ur Elements kontroll, och enligt Google indikerar det här felet att den här enheten har för många appar registrerade med FCM. Felet händer endast i fall då extremt många appar är installerade, så det bör inte påverka normala användare. - [%1$s] -\nDet här felet är ur Elements kontroll. Det kan hända av flera anledningar. Det kanske funkar om du försöker igen senare, du kan kolla så att Google Play-tjänster inte är databegränsad i systeminställningarna, eller att enhetens klocka går rätt, eller så kan det hända på en alternativ ROM. - [%1$s] -\nDet här felet är ur Elements kontroll. Det finns inget Google-konto på telefonen. Vänligen öppna kontohanteraren och lägg till ett Google-konto. + [%1$s] +\nDet här felet är ur ${app_name}s kontroll, och enligt Google indikerar det här felet att den här enheten har för många appar registrerade med FCM. Felet händer endast i fall då extremt många appar är installerade, så det bör inte påverka normala användare. + [%1$s] +\nDet här felet är ur ${app_name}s kontroll. Det kan hända av flera anledningar. Det kanske funkar om du försöker igen senare, du kan kolla så att Google Play-tjänster inte är databegränsad i systeminställningarna, eller att enhetens klocka går rätt, eller så kan det hända på en alternativ ROM. + [%1$s] +\nDet här felet är ur ${app_name}s kontroll. Det finns inget Google-konto på telefonen. Vänligen öppna kontohanteraren och lägg till ett Google-konto. Lägg till konto Token-registrering FCM-token registrerades framgångsrikt på hemservern. @@ -1349,11 +1349,11 @@ Tjänsten kommer att startas när enheten startas om. Aktivera start på boot Kolla bakgrundsrestriktioner - Bakgrundsrestriktioner är inaktiverade för Element. Detta test bör köras med mobildata (inte Wi-Fi). + Bakgrundsrestriktioner är inaktiverade för ${app_name}. Detta test bör köras med mobildata (inte Wi-Fi). \n%1$s Inaktivera restriktioner Batterioptimering - Element påverkas inte av batterioptimering. + ${app_name} påverkas inte av batterioptimering. Ignorera optimering Reducerad sekretess Den här appen behöver behörighet att köra i bakgrunden @@ -1478,7 +1478,7 @@ %1$s, %2$s och %3$d annan har läst %1$s, %2$s och %3$d andra har läst - Element behöver behörighet för att spara dina nycklar för totalsträckskryptering i lagringen. + ${app_name} behöver behörighet för att spara dina nycklar för totalsträckskryptering i lagringen. \n \nVänligen ge tillstånd i nästa popup för att kunna manuellt exportera dina nycklar. Du ignorerar inga användare @@ -1494,7 +1494,7 @@ Varning: Din personliga data (inklusive krypteringsnycklar) lagras fortfarande på den här enheten. \n \nRensa den om du inte ska använda den här enheten längre, eller vill logga in på ett annat konto. - Den nuvarande sessionen är för användaren %1$s och du försedde uppgifter för användaren %2$s. Detta stöds inte av Element. + Den nuvarande sessionen är för användaren %1$s och du försedde uppgifter för användaren %2$s. Detta stöds inte av ${app_name}. \nVänligen rensa först data, och logga sen in på ett annat konto. Se alla mina sessioner Utvecklarläge @@ -1564,16 +1564,16 @@ Återställningsnyckel för säkerhetskopiering Förhindra skärmdumpar av appen Att aktivera den här inställningen lägger till FLAG_SECURE till alla aktiviteter. Starta om appen för att inställningen ska få effekt. - Använd senaste Element på dina andra enheter; Element Web, Element iOS, Element för Android, eller annan Matrixklient som stöder korssignering + Använd senaste ${app_name} på dina andra enheter; ${app_name} Web, ${app_name} iOS, ${app_name} för Android, eller annan Matrixklient som stöder korssignering eller en annan Matrixklient som städer korssignering - Använd senaste Element på dina andra enheter: + Använd senaste ${app_name} på dina andra enheter: Tvingar den nuvarande utgående gruppsessionen i ett krypterat rum att kasseras Säkerhetskopian kunde inte avkrypteras med den här återställningsnyckeln: vänligen verifiera att du skrev in rätt återställningsnyckel. Sätt upp säker säkerhetskopiering Säker säkerhetskopiering Sätt upp Skriv in en hemlig fras endast du känner till, och generera en nyckel för säkerhetskopiering. - Element kommer att synka i bakgrunden på ett sätt som sparar på enhetens begränsade resurser (batteri). + ${app_name} kommer att synka i bakgrunden på ett sätt som sparar på enhetens begränsade resurser (batteri). \nBeroende på din enhets resurser, så kan synkroniseringen bli uppskjuten av operativsystemet. Optimerad för realtid Ingen bakgrundssynk @@ -1604,8 +1604,8 @@ Ge behörighet Statistik Skicka statistikdata - Element samlar in anonym statistik för att låta oss förbättra appen. - Vänligen aktivera statistik för att hjälpa oss att förbättra Element. + ${app_name} samlar in anonym statistik för att låta oss förbättra appen. + Vänligen aktivera statistik för att hjälpa oss att förbättra ${app_name}. Ja, jag vill hjälpa till! Databesparingsläge ID @@ -1844,7 +1844,7 @@ Lösenfrasen matchar inte Vänligen skriv en lösenfras Lösenfrasen är för svag - Vänligen radera lösenfrasen om du vill att Element ska generera en återställningsnyckel. + Vänligen radera lösenfrasen om du vill att ${app_name} ska generera en återställningsnyckel. Sätt lösenfras Skapar säkerhetskopia Framgång ! @@ -1887,7 +1887,7 @@ Signatur Autokomplettera serveralternativ - Element detekterade en anpassad serverkonfiguration för din användar-ID-domän \"%1$s\": + ${app_name} detekterade en anpassad serverkonfiguration för din användar-ID-domän \"%1$s\": \n%2$s Använd konfig Verifiera genom att jämföra en kort textsträng. @@ -1937,7 +1937,7 @@ Ändra Vänligen vänta… Det här rummet kan inte förhandsgranskas - Förhandsgranskning av världsläsbara rum stöds inte än av Element + Förhandsgranskning av världsläsbara rum stöds inte än av ${app_name} Nytt rum SKAPA Namn @@ -2155,8 +2155,8 @@ Standardbehörig i %1$s Anpassad (%1$d) i %2$s Hoppa till läskvitto - Element hanterar inte händelser av typen \'%1$s\' - Element stötte på ett fel vid rendering av innehållet i händelsen med id \'%1$s\' + ${app_name} hanterar inte händelser av typen \'%1$s\' + ${app_name} stötte på ett fel vid rendering av innehållet i händelsen med id \'%1$s\' Avignorera Skickar den givna emoten i regnbågsfärg Godkänn @@ -2212,7 +2212,7 @@ Händelsen raderades av användaren, anledning: %1$s Händelsen modererades av rumsadministratören. Anledning: %1$s Nycklarna är redan uppdaterade! - Element Android + ${app_name} Android Ladda om Ny inloggning. Var det du\? Tryck för att granska och verifiera @@ -2264,10 +2264,10 @@ Generar SSSS-nyckel baserat på återställningsnyckel Lagrar hemlighet för nyckelsäkerhetskopiering i SSSS %1$s (%2$s) - Element Webb -\nElement Skrivbord - Element iOS -\nElement Android + ${app_name} Webb +\n${app_name} Skrivbord + ${app_name} iOS +\n${app_name} Android Använd din %1$s eller %2$s för att fortsätta. Använd återställningsnyckel Välj din återställningsnyckel eller mata in den manuellt genom att skriva den eller klistra in från klippbordet @@ -2291,7 +2291,7 @@ Inbjudan skickad till %1$s och %2$s Öppna villkor för %s Den här operationen är inte möjlig. Hemservern är utdaterad. - För ditt privatlivs skull stöder Element bara att skicka hashade e-postadresser och telefonnummer. + För ditt privatlivs skull stöder ${app_name} bara att skicka hashade e-postadresser och telefonnummer. Associationen har misslyckats. Det finns ingen nuvarande association med den här identifieraren. Använd %1$s @@ -2381,13 +2381,13 @@ \n \nAnvänd varsamt, det kan leda till oväntat beteende. så kommer du att börja om utan historik, meddelanden, betrodda enheter eller betrodda användare - PIN-kod krävs varje gång du öppnar Element. - PIN-kod krävs efter att du inte har använt Element på 2 minuter. + PIN-kod krävs varje gång du öppnar ${app_name}. + PIN-kod krävs efter att du inte har använt ${app_name} på 2 minuter. Kräv PIN-kod efter 2 minuter Visa bara antal olästa meddelanden i en enkel avisering. Visa detaljer som rumsnamn och meddelandeinnehåll. Visa innehåll i aviseringar - PIN-kod är det enda sättet att låsa upp Element. + PIN-kod är det enda sättet att låsa upp ${app_name}. Aktivera enhetsspecifik biometri, som fingeravtryck och ansiktsigenkänning. Aktivera biometri Ställ in skydd @@ -2468,8 +2468,8 @@ Dela min kod Skanna en QR-kod Det är inte en giltig Matrix-QR-kod - 🔐️ Gå med mig i Element - Hallå, prata med mig i Element: %s + 🔐️ Gå med mig i ${app_name} + Hallå, prata med mig i ${app_name}: %s Bjud in vänner Lägg till personer "Ämne: " @@ -2576,7 +2576,7 @@ Det är rummet är inte offentligt. Du kommer inte kunna gå med igen utan en inbjudan. Systemets förval Misslyckades att autentisera - Element kräver att du anger dina autentiseringsuppgifter innan du gör det här. + ${app_name} kräver att du anger dina autentiseringsuppgifter innan du gör det här. Omautentisering krävs Mislyckades att ställa in korssignering Obehörig, saknar giltiga autentiseringsuppgifter diff --git a/vector/src/main/res/values-te/strings.xml b/vector/src/main/res/values-te/strings.xml index 56a76fa72c..14232e65eb 100644 --- a/vector/src/main/res/values-te/strings.xml +++ b/vector/src/main/res/values-te/strings.xml @@ -115,7 +115,7 @@ స్థానిక చిరునామా పుస్తకం మ్యాట్రిక్స్ పరిచయాలు మాత్రమే సంభాషణలు లేవు - మీరు మీ స్థానిక పరిచయాలను యాక్సెస్ చేయడానికి రియోట్ను అనుమతించలేదు + మీరు మీ స్థానిక పరిచయాలను యాక్సెస్ చేయడానికి రియోట్ను అనుమతించలేదు ఫలితాలు లేవు గదులు @@ -243,8 +243,8 @@ వీడియో రికార్డ్ చేయలేరు సమాచారం - చిత్రాలను మరియు వీడియో కాల్లను తీయడానికి మీ కెమెరాను ప్రాప్తి చేయడానికి Elementకు అనుమతి అవసరం. - ఆడియో కాల్లను చేయడానికి మీ మైక్రోఫోన్ను ప్రాప్యత చేయడానికి Elementకు అనుమతి అవసరం. + చిత్రాలను మరియు వీడియో కాల్లను తీయడానికి మీ కెమెరాను ప్రాప్తి చేయడానికి ${app_name}కు అనుమతి అవసరం. + ఆడియో కాల్లను చేయడానికి మీ మైక్రోఫోన్ను ప్రాప్యత చేయడానికి ${app_name}కు అనుమతి అవసరం. క్షమించాలి… ఆమోదించని అనుమతుల కారణంగా చర్య చేయలేదు దాయబడినది @@ -547,7 +547,7 @@ ఇంకా నొక్కని ఇ-తపాలా లింగక కెమెరాను ప్రారంభించడం సాధ్యపడదు - అటాచ్మెంట్లు పంపడానికి మరియు సేవ్ చేయడానికి మీ ఫోటో మరియు వీడియో లైబ్రరీని ప్రాప్తి చేయడానికి కలతకు అనుమతి అవసరం. + అటాచ్మెంట్లు పంపడానికి మరియు సేవ్ చేయడానికి మీ ఫోటో మరియు వీడియో లైబ్రరీని ప్రాప్తి చేయడానికి కలతకు అనుమతి అవసరం. \n \nదయచేసి మీ ఫోన్ నుండి ఫైల్లను పంపగల తదుపరి పాప్-అప్లో ప్రాప్యతను అనుమతించండి. " @@ -556,7 +556,7 @@ " \n \nదయచేసి కాల్ చేయడానికి వీలుగా తదుపరి పాప్-అప్లో ప్రాప్యతను అనుమతించండి." - "మీ కెమెరాను మరియు మీ శబ్ద ప్రసారిణి సాంగత్యం చేయడానికి రియోట్కు అనుమతి అవసరం. + "మీ కెమెరాను మరియు మీ శబ్ద ప్రసారిణి సాంగత్యం చేయడానికి రియోట్కు అనుమతి అవసరం. \n \nదయచేసి పిలుపు చేయడానికి వీలుగా తదుపరి పాప్-అప్ల్లో ప్రాప్యతను అనుమతించండి." ప్రత్యేక ప్రదర్శన diff --git a/vector/src/main/res/values-th/strings.xml b/vector/src/main/res/values-th/strings.xml index 7eefd0fbd5..c677202fe5 100644 --- a/vector/src/main/res/values-th/strings.xml +++ b/vector/src/main/res/values-th/strings.xml @@ -42,7 +42,7 @@ ชุมชน การเชิญ การแจ้งเตือนจากระบบ - คุณไม่ได้อนุญาตให้ Element เข้าถึงรายชื่อผู้ติดต่อในเครื่อง + คุณไม่ได้อนุญาตให้ ${app_name} เข้าถึงรายชื่อผู้ติดต่อในเครื่อง ไม่มีผลลัพธ์ ไม่มีห้อง diff --git a/vector/src/main/res/values-tr/strings.xml b/vector/src/main/res/values-tr/strings.xml index 2eb31a80d5..13d4a7c313 100644 --- a/vector/src/main/res/values-tr/strings.xml +++ b/vector/src/main/res/values-tr/strings.xml @@ -85,7 +85,7 @@ Kullanıcı sözlüğü Sadece Matrix kullanıcıları Konuşma yok - Element\'in yerel rehbere erişmesine izin vermediniz + ${app_name}\'in yerel rehbere erişmesine izin vermediniz Sonuç yok Odalar Odalar dizini @@ -244,7 +244,7 @@ Diğer oturumlardan şifreleme anahtarlarını tekrar iste. Anahtar isteği gönderildi. İstek gönderildi - Element\'i mesajları çözebilen farklı bir cihazda açarsanız ordan anahtarları bu oturuma gönderebilirsiniz. + ${app_name}\'i mesajları çözebilen farklı bir cihazda açarsanız ordan anahtarları bu oturuma gönderebilirsiniz. Makbuz Listesini Oku Grup Listesi @@ -265,7 +265,7 @@ Oda adı Oda konusu Aramalar - Gelen aramalar için varsayılan Element zil sesini kullan + Gelen aramalar için varsayılan ${app_name} zil sesini kullan Gelen arama zil sesi Aramalar için zil sesi seç: Arama @@ -285,22 +285,22 @@ Resim ya da video çek Video kaydedilemiyor Bilgilendirme - Element\'in ekleri göndermek ya da kaydetmek için galeriye erişmeye ihtiyacı var. + ${app_name}\'in ekleri göndermek ya da kaydetmek için galeriye erişmeye ihtiyacı var. \n \nLütfen çıkacak ekranda telefonunuzdan dosya gönderebilmesine izin verin. - Element\'in resim ya da video çekmek için kameraya erişmeye ihtiyacı var. + ${app_name}\'in resim ya da video çekmek için kameraya erişmeye ihtiyacı var. " \n \nLütfen çıkacak ekranda kameraya erişebilmesine izin verin." - Element\'in sesli arama yapması için mikrofonunuza erişmeye ihtiyacı var. + ${app_name}\'in sesli arama yapması için mikrofonunuza erişmeye ihtiyacı var. " \n \nLütfen çıkacak ekranda mikrofona erişebilmesine izin verin." - Element\'in görüntülü arama yapması için kameranıza ve mikrofonunuza erişmeye ihtiyacı var. + ${app_name}\'in görüntülü arama yapması için kameranıza ve mikrofonunuza erişmeye ihtiyacı var. \n \nLütfen çıkacak ekranda kamera ve mikrofona erişebilmesine izin verin. - Element eposta ve telefon numaralarına göre diğer Matrix kullanıcılarını bulmak için rehberinizi kontrol edebilir. Eğer bu nedenle rehberinizi paylaşmak istiyorsanız, lütfen açılan ekranda erişime izin verin. - Element\'in eposta ve telefon numaralarına göre diğer Matrix kullanıcılarını bulmak için rehberinizi kontrol edebilir. + ${app_name} eposta ve telefon numaralarına göre diğer Matrix kullanıcılarını bulmak için rehberinizi kontrol edebilir. Eğer bu nedenle rehberinizi paylaşmak istiyorsanız, lütfen açılan ekranda erişime izin verin. + ${app_name}\'in eposta ve telefon numaralarına göre diğer Matrix kullanıcılarını bulmak için rehberinizi kontrol edebilir. \n \nRehberinizi bu sebeple paylaşmayı kabul ediyor musunuz\? Üzgünüz. İsteğiniz, yetersiz izinlerden dolayı gerçekleştirilemedi @@ -516,8 +516,8 @@ Etkinleştir Oturum Ayarları. Bildirimler bu oturum için etkinleştirilmiş. - Bildirimler bu oturum için etkin değil. -\nLütfen Element ayarlarını gözden geçirin. + Bildirimler bu oturum için etkin değil. +\nLütfen ${app_name} ayarlarını gözden geçirin. Etkinleştir Özel Ayarlar. Bazı mesajların türü sessize ayarlanmıştır (sessiz bir bildirim gönderecektir). @@ -526,7 +526,7 @@ Ayarları Gözden Geçir Play Hizmetlerini Gözden Geçir Google Play Hizmetleri APK\'sı kullanılabilir ve güncel. - Element bildirimleri göndermek için Google Play Hizmetleri kullanır, ancak düzgün ayarlanmış görünmüyor: + ${app_name} bildirimleri göndermek için Google Play Hizmetleri kullanır, ancak düzgün ayarlanmış görünmüyor: \n%1$s Google Play Hizmetlerini Düzelt Firebase Belirteci @@ -534,12 +534,12 @@ \n%1$s FCM belirtecini alırken hata meydana geldi: \n%1$s - [%1$s] -\nBu hata Element\'in kontrolü dışında Google\'a bağlı ve cihazın çok fazla FCM ile kayıtlı uygulaması olduğunu belirtiyor. Bu hata sadece çok fazla uygulama kullanıldığı zaman olur ve genelde ortalama kullanıcıyı etkilemez. - [%1$s] -\nBu hata Element\'in kontrolü dışında ve birçok nedene bağlı olabilir. Belki sonra denediğin zaman çalışır. Ayrıca Google Play Hizmetlerinin veri kullanımı konusunda sistem ayarlarında kısıtlanmamış ya da cihaz saatinin doğru olduğundan emin olun, bu hata özel ROM\'larda meydana gelebiliyor. - [%1$s] -\nBu hata Element\'in kontrolü dışında. Telefonda hiç Google hesabı yok. Lütfen hesap yöneticisini açın ve bir tane Google hesabı ekleyin. + [%1$s] +\nBu hata ${app_name}\'in kontrolü dışında Google\'a bağlı ve cihazın çok fazla FCM ile kayıtlı uygulaması olduğunu belirtiyor. Bu hata sadece çok fazla uygulama kullanıldığı zaman olur ve genelde ortalama kullanıcıyı etkilemez. + [%1$s] +\nBu hata ${app_name}\'in kontrolü dışında ve birçok nedene bağlı olabilir. Belki sonra denediğin zaman çalışır. Ayrıca Google Play Hizmetlerinin veri kullanımı konusunda sistem ayarlarında kısıtlanmamış ya da cihaz saatinin doğru olduğundan emin olun, bu hata özel ROM\'larda meydana gelebiliyor. + [%1$s] +\nBu hata ${app_name}\'in kontrolü dışında. Telefonda hiç Google hesabı yok. Lütfen hesap yöneticisini açın ve bir tane Google hesabı ekleyin. Hesap ekle Belirteç Kayıtı FCM belirteci başarı ile AnaMakineye kaydedildi. @@ -555,17 +555,17 @@ Hizmet yeniden başlatılamadı Açılışta başlat Hizmet cihaz yeniden başlatıldığında çalıştırılacak. - Hizmet cihaz yeniden başlatılınca çalıştırılmayacak, Element\'i açana kadar bildirimleri almakyacaksın. + Hizmet cihaz yeniden başlatılınca çalıştırılmayacak, ${app_name}\'i açana kadar bildirimleri almakyacaksın. Açılışta başlatı etkinleştir Arkaplan kısıtlamalarını gözden geçir - Arkaplan kısıtlamaları Element için devre dışı. Bu test mobil veri kullanacak (WIFI değil). + Arkaplan kısıtlamaları ${app_name} için devre dışı. Bu test mobil veri kullanacak (WIFI değil). \n%1$s - Arkaplan kısıtlamaları Element için etkinleştirilmiş. + Arkaplan kısıtlamaları ${app_name} için etkinleştirilmiş. \nUygulamanın arkaplanda iken yapmaya çalıştığı şeyler agresif bir biçimde kısıtlanacak ve bu bildirimleri de etkileyebilir. \n%1$s Kısıtlamaları devre dışı bırak Pil Optimizasyonu - Element Pil Optimizasyonundan etkilenmedi. + ${app_name} Pil Optimizasyonundan etkilenmedi. Eğer kullanıcı cihazını prize bağlanmamış sabit ve ekranı kapalı bir şekilde bir süre bırakırsa cihaz Derin uyku moduna geçer. Bu uygulamaların internete erişmesini engeller ve yapılacak işlerini, senkronizasyolarını, alarmını erteler. Optimizasyonu Göz ardı et Normal @@ -639,17 +639,17 @@ Hesabı devre dışı bırak Hesabımı devre dışı bırak Bildirim Gizliliği - Element bildirimlerinizi güvenli ve gizli bir şekilde yönetmek için arkaplanda çalışır. Bu pil kullanımını etkileyebilir. + ${app_name} bildirimlerinizi güvenli ve gizli bir şekilde yönetmek için arkaplanda çalışır. Bu pil kullanımını etkileyebilir. İzin ver Farklı bir seçenek seç Arkaplan Bağlantısı - Element güvenilir bildirimlere sahip olmak için düşük arkaplan bağlatısı yapmaya ihtiyaç duyar. -\nÇıkacak ekranda Element\'in arkaplanda sürekli çalışması için izin istenecek, lütfen kabul edin. + ${app_name} güvenilir bildirimlere sahip olmak için düşük arkaplan bağlatısı yapmaya ihtiyaç duyar. +\nÇıkacak ekranda ${app_name}\'in arkaplanda sürekli çalışması için izin istenecek, lütfen kabul edin. İzin ver Analiz Analiz verilerini gönder - Element uygulamayı geliştirmemiz için anonim analitik veriler toplar. - Lütfen Element\'i geliştirebilmemiz için analizleri etkinleştirin. + ${app_name} uygulamayı geliştirmemiz için anonim analitik veriler toplar. + Lütfen ${app_name}\'i geliştirebilmemiz için analizleri etkinleştirin. Evet, Yardım etmek istiyorum! Veri kaydetme modu Veri kaydetme modu belirli filtreler uygular bu sayede ilerki güncellemeler ve yazıyor bildirimleri filtrelenir. @@ -973,7 +973,7 @@ Parolalar uyuşmuyor Lütfen bir parola girin Parola çok zayıf - Eğer Element\'in kurtarma anahtarı oluşturmasını istiyorsanız lütfen parolayı silin. + Eğer ${app_name}\'in kurtarma anahtarı oluşturmasını istiyorsanız lütfen parolayı silin. Matrix oturumu müsait değil Şifrelenmiş mesajları asla kaybetme Şifrelenmiş odalarda mesajlar uçtan-uca şifreleme ile korunur. Sadece sen ve makbuzcular bu mesajları okumak için anahtara sahip. @@ -1089,11 +1089,11 @@ Anasunucunuz çağrı yardımcı sunucusu vermez ise %s çağrı yardımcı sunucusu olarak kullanılacaktır (Çağrıda IP adresiniz paylaşılacaktır) Bu eylemi gerçekleştirebilmek için ayarlarınızdan bir kimlik sunucusu ekleyin. Şifreni doğrula - Element, cihazın sınırlı kaynaklarını (pil) koruyacak şekilde arka planda senkronize olur. + ${app_name}, cihazın sınırlı kaynaklarını (pil) koruyacak şekilde arka planda senkronize olur. \nCihazınızın kaynak durumuna bağlı olarak, senkronizasyon işletim sistemi tarafından ertelenebilir. Gerçek zamanlı için optimize - Element periyodik olarak belirli bir zamanda (ayarlanabilir) arka planda senkronize olur. -\nBu pil ve radyo kullanımını etkileyecek ve Element\'in olayları dinlediğini belirten kalıcı bir bildirim gösterecektir. + ${app_name} periyodik olarak belirli bir zamanda (ayarlanabilir) arka planda senkronize olur. +\nBu pil ve radyo kullanımını etkileyecek ve ${app_name}\'in olayları dinlediğini belirten kalıcı bir bildirim gösterecektir. Arka plan senkronizasyonu yok Tercih Edilen Senkronize Aralığı %s @@ -1175,7 +1175,7 @@ Yedek durumu kontrol ediliyor Geçersiz anasunucu keşif cevabı Sunucu Ayarlarını Otomatik Doldur - Element userld alan adı için özel sunucu yapılandırması buldu \"%1$s\": + ${app_name} userld alan adı için özel sunucu yapılandırması buldu \"%1$s\": \n%2$s Yapılandırmayı kullan Geçersiz ya da süresi dolmuş girdilerden dolayı çıkış yaptınız. @@ -1250,7 +1250,7 @@ Lütfen bekleyin… Tüm Topluluklar Bu oda önizlenemez - Element henüz herkese-açık odaları önizlemeyi desteklemiyor + ${app_name} henüz herkese-açık odaları önizlemeyi desteklemiyor Odalar Doğrudan Mesajlar Yeni Oda @@ -1264,7 +1264,7 @@ Anahtar yedek verileri alınırken hata oluştu Bu geçerli bir Matrix sunucu adresi değil Bu URL ile ev-sunucusuna erişilemiyor, lütfen kontrol edin - Bunu Element mobil ile yapamazsınız + Bunu ${app_name} mobil ile yapamazsınız Kimlik doğrulama gereklidir Arkaplan Senkronizasyon Modu (Deneysel) Batarya için optimize edildi @@ -1276,7 +1276,7 @@ Kopyala Başarılı Bildirimler - Element Araması Başarısız Oldu + ${app_name} Araması Başarısız Oldu Eş zamanlı bağlantı kurulamadı. \nAramaların hatasız çalışması için snucunuzun yöneticisinden TURN sunucusu ayarlamasını rica edin. Ses Cihazı Seç diff --git a/vector/src/main/res/values-uk/strings.xml b/vector/src/main/res/values-uk/strings.xml index 54d6dfeae9..1ae0223a8a 100644 --- a/vector/src/main/res/values-uk/strings.xml +++ b/vector/src/main/res/values-uk/strings.xml @@ -253,7 +253,7 @@ Каталог користувачів Лише Matrix-контакти Немає бесід - Ви не надали Element доступу до контактів + Ви не надали ${app_name} доступу до контактів Немає результатів Кімнати @@ -390,16 +390,16 @@ Не вдалося записати відео" Інформація - Для передачі та збереження вкладень потрібен доступ до медіатеки.\n\nБудь ласка, надайте його у наступному виринаючому вікні, щоб отримати змогу надсилати файли з вашого телефону. - Для зйомки та відеодзвінків необхідно мати доступ до камери. + Для передачі та збереження вкладень потрібен доступ до медіатеки.\n\nБудь ласка, надайте його у наступному виринаючому вікні, щоб отримати змогу надсилати файли з вашого телефону. + Для зйомки та відеодзвінків необхідно мати доступ до камери. \n\nБудь ласка, надайте його у наступному виринаючому вікні, щоб мати змогу здійснювати дзвінки. - Для здійснення аудіодзвінків потрібен доступ до мікрофону. + Для здійснення аудіодзвінків потрібен доступ до мікрофону. \n\nБудь ласка, надайте його у наступному виринаючому вікні, щоб мати змогу здійснити дзвінок. - Для здійснення відеодзвінків потрібен доступ до камери та мікрофону.\n\nБудь ласка, надайте його у наступних виринаючих вікнах, щоб мати змогу їх здійснити. - Element потребує доступу до ваших контактів, щоб знайти інших користувачів Matrix за їх електронними адресами та номерами телефонів. Якщо ви згодні, надайте його у наступному діалоговому вікні, щоб знати, які з контактів теж використовують Element. - Element потребує доступу до ваших контактів, щоб знайти інших користувачів Matrix за електронною поштою чи номерами телефонів. + Для здійснення відеодзвінків потрібен доступ до камери та мікрофону.\n\nБудь ласка, надайте його у наступних виринаючих вікнах, щоб мати змогу їх здійснити. + ${app_name} потребує доступу до ваших контактів, щоб знайти інших користувачів Matrix за їх електронними адресами та номерами телефонів. Якщо ви згодні, надайте його у наступному діалоговому вікні, щоб знати, які з контактів теж використовують ${app_name}. + ${app_name} потребує доступу до ваших контактів, щоб знайти інших користувачів Matrix за електронною поштою чи номерами телефонів. \n -\nНадати Element доступ до ваших контактів\? +\nНадати ${app_name} доступ до ваших контактів\? Вибачте.. Дію не виконано через нестачу дозволів Збережено @@ -878,7 +878,7 @@ Так, я бажаю помогти! Настрій Сповіщення - Для відправлення ключа на цей пристрій, запустіть Element на іншому пристрої, що може дешифрувати повідомлення. + Для відправлення ключа на цей пристрій, запустіть ${app_name} на іншому пристрої, що може дешифрувати повідомлення. Вибачте, жодного стороннього застосунку не знайдено для завершення цієї дії. Відправити голосове повідомлення Ця дія неможлива через відсутність дозволів. @@ -940,9 +940,9 @@ • Сповіщення не будуть показувати вміст повідомлень Попередній перегляд посилань Попередній перегляд медіа перед відправкою - Element може працювати у фоновому режимі для керування безпекою та конфіденційністю ваших сповіщень. Це може вплинути на час роботи батареї. - Element збирає анонімну аналітику, щоб ми могли вдосконалювати цей додаток. - Будь ласка, увімкніть аналітику, щоб допомагати нам вдосконалювати Element. + ${app_name} може працювати у фоновому режимі для керування безпекою та конфіденційністю ваших сповіщень. Це може вплинути на час роботи батареї. + ${app_name} збирає анонімну аналітику, щоб ми могли вдосконалювати цей додаток. + Будь ласка, увімкніть аналітику, щоб допомагати нам вдосконалювати ${app_name}. Ви наразі не є учасником жодної спільноти. Ця кімната не показує настрій для спільнот Новий ID спільноти (наприклад, +foo:matrix.org) @@ -1091,7 +1091,7 @@ Markdown задіяно. Markdown вимкнено. Виклики - Використовувати стандартний рингтон Element для вхідних викликів + Використовувати стандартний рингтон ${app_name} для вхідних викликів Мелодія вхідного виклику Виберіть мелодію викликів: Прийняти @@ -1106,7 +1106,7 @@ Прямі чати Відправити нове пряме повідомлення Додає ¯\\_(ツ)_/¯ перед текстовим повідомленням - Element не підтримує повідомлення типу \'%1$s\' + ${app_name} не підтримує повідомлення типу \'%1$s\' Відправляє повідомлення розмальоване веселково Редактор повідомлень Відправляє повідомлення як текст без інтерпретації його як Markdown @@ -1218,8 +1218,8 @@ Номери телефонів Email адреси Скасувати запрошення - 🔐️ Приєднуйтесь до мене в Element - Привіт, поспілкуйся зі мною в Element: %s + 🔐️ Приєднуйтесь до мене в ${app_name} + Привіт, поспілкуйся зі мною в ${app_name}: %s Запросити друзів Всі спільноти Показувати заглушку на місці видалених повідомлень @@ -1237,7 +1237,7 @@ %1$s о %2$s Жодного номера телефону не додано до вашого облікового запису У ваш обліковий запис не додано жодної електронної адреси - Для вашої приватності Element підтримує лише надсилання хешованих електронних адрес користувачів та номера телефону. + Для вашої приватності ${app_name} підтримує лише надсилання хешованих електронних адрес користувачів та номера телефону. Ви не погодилися надіслати електронні адреси та телефонні номери на цей сервер ідентифікації для виявлення інших користувачів із ваших контактів. Ви погодилися надіслати електронні адреси та телефонні номери на цей сервер ідентифікації для виявлення інших користувачів із ваших контактів. Надіслати електронні адреси та номери телефонів @@ -1258,8 +1258,8 @@ Зверніть увагу, що для деяких типів повідомлень встановлено беззвучність (беззвучні сповіщення). Власні налаштування. Увімкнути - Сповіщення не ввімкнено для цього сеансу. -\nПеревірте налаштування Element. + Сповіщення не ввімкнено для цього сеансу. +\nПеревірте налаштування ${app_name}. Сповіщення ввімкнено для цього сеансу. Налаштування сеансу. Увімкнути @@ -1296,7 +1296,7 @@ Видимість Не вдалося встановити зв’язок у режимі реального часу. \nПопросіть адміністратора вашого домашнього сервера налаштувати сервер TURN для надійної роботи викликів. - Element не вдалося здійснити виклик + ${app_name} не вдалося здійснити виклик Попросіть адміністратора вашого домашнього сервера (%1$s) налаштувати сервер TURN для надійної роботи дзвінків. \n \nЯк варіант, ви можете спробувати використати загальнодоступний сервер на рівні %2$s, але це буде не так надійно й він надаватиме вашу IP-адресу цьому серверу. Ви також можете керувати цим у налаштуваннях. @@ -1361,7 +1361,7 @@ \nБезпечно створюйте резервні копії ключів, щоб не втратити їх. Ніколи не втрачайте зашифровані повідомлення Немає доступного сеансу Matrix - Видаліть парольну фразу, якщо хочете, щоб Element створив ключ відновлення. + Видаліть парольну фразу, якщо хочете, щоб ${app_name} створив ключ відновлення. Парольна фраза занадто слабка Введіть парольну фразу Не знайдено дійсного файлу .apk сервісів Google Play. Сповіщення можуть працювати неправильно. @@ -1498,8 +1498,8 @@ Дозволити інтеграції Режим збереження даних застосовує певний фільтр, тому оновлення присутності та сповіщення про введення фільтруються. Надати дозвіл - Для отримання надійних сповіщень Element повинен підтримувати з’єднання у фоновому режимі з незначним споживанням даних. -\nНа наступному екрані вам буде запропоновано дозволити Element завжди працювати у фоновому режимі, погодьтеся. + Для отримання надійних сповіщень ${app_name} повинен підтримувати з’єднання у фоновому режимі з незначним споживанням даних. +\nНа наступному екрані вам буде запропоновано дозволити ${app_name} завжди працювати у фоновому режимі, погодьтеся. Фонове з’єднання Це замінить ваш поточний ключ або фразу. Створіть новий ключ безпеки або встановіть нову фразу безпеки для наявної резервної копії. @@ -1527,27 +1527,27 @@ Не вдалося оновити налаштування. Ви не отримуватимете сповіщення про вхідні повідомлення, коли програма перебуває у фоновому режимі. Немає фонової синхронізації - Element періодично синхронізуватиметься у фоновому режимі в певний час (налаштовується). -\nЦе вплине на використання радіо та акумулятора, з’явиться постійне сповіщення про те, що Element очікує на події. + ${app_name} періодично синхронізуватиметься у фоновому режимі в певний час (налаштовується). +\nЦе вплине на використання радіо та акумулятора, з’явиться постійне сповіщення про те, що ${app_name} очікує на події. Оптимізовано для реального часу - Element синхронізується у фоновому режимі так, щоб зберегти обмежені ресурси пристрою (акумулятор). + ${app_name} синхронізується у фоновому режимі так, щоб зберегти обмежені ресурси пристрою (акумулятор). \nЗалежно від стану ресурсів вашого пристрою, синхронізацію може бути відкладено операційною системою. Оптимізовано для батареї Режим фонової синхронізації Застосунки не потребують з\'єднання з HomeServer у фоновому режимі, це має скоротити споживання батареї Нехтувати оптимізацією Якщо користувач залишає пристрій від\'єднаним та нерухомим впродовж певного часу з вимкненим екраном, пристрій переходить у режим дрімання. Це запобігає доступу програм до мережі та відкладає їх завдання, синхронізацію та стандартні сигнали тривоги. - Оптимізація акумулятора не впливає на Element. + Оптимізація акумулятора не впливає на ${app_name}. Оптимізація акумулятора Вимкнути обмеження - Фонові обмеження ввімкнено для Element. + Фонові обмеження ввімкнено для ${app_name}. \nРобота, яку намагається виконати застосунок, буде агресивно обмежена, доки вона перебуває у фоновому режимі й це може вплинути на сповіщення. \n%1$s - Фонові обмеження для Element вимкнено. Цю перевірку варто виконувати з використанням мобільних даних (без Wi-Fi). + Фонові обмеження для ${app_name} вимкнено. Цю перевірку варто виконувати з використанням мобільних даних (без Wi-Fi). \n%1$s Перевірте фонові обмеження Увімкніть Запуск під час завантаження - Служба не запуститься під час перезавантаження пристрою, ви не отримуватимете сповіщень, доки Element не буде відкрито. + Служба не запуститься під час перезавантаження пристрою, ви не отримуватимете сповіщень, доки ${app_name} не буде відкрито. Служба запуститься після перезапуску пристрою. Запускати під час завантаження Помилка перезапуску служби @@ -1571,19 +1571,19 @@ Токен FCM успішно зареєстровано на HomeServer. Реєстрація токена Додати обліковий запис - [%1$s] -\nЦя помилка не підконтрольна Element. На телефоні немає облікового запису Google. Відкрийте менеджер облікових записів і додайте обліковий запис Google. - [%1$s] -\nЦя помилка не підконтрольна Element. Це може статися з кількох причин. Можливо все запрацює, якщо ви спробуєте пізніше, ви також можете перевірити, чи не обмежено використання даних для служби Google Play в налаштуваннях системи, чи правильний годинник вашого пристрою, або це може статися в користувацькому ROM. - [%1$s] -\nЦя помилка не підконтрольна Element й за даними Google, вона вказує на те, що на пристрої зареєстровано забагато програм у FCM. Помилка виникає лише у випадках, коли встановлено надзвичайно багато застосунків, тому вона не повинна впливати на звичайного користувача. + [%1$s] +\nЦя помилка не підконтрольна ${app_name}. На телефоні немає облікового запису Google. Відкрийте менеджер облікових записів і додайте обліковий запис Google. + [%1$s] +\nЦя помилка не підконтрольна ${app_name}. Це може статися з кількох причин. Можливо все запрацює, якщо ви спробуєте пізніше, ви також можете перевірити, чи не обмежено використання даних для служби Google Play в налаштуваннях системи, чи правильний годинник вашого пристрою, або це може статися в користувацькому ROM. + [%1$s] +\nЦя помилка не підконтрольна ${app_name} й за даними Google, вона вказує на те, що на пристрої зареєстровано забагато програм у FCM. Помилка виникає лише у випадках, коли встановлено надзвичайно багато застосунків, тому вона не повинна впливати на звичайного користувача. Не вдалося отримати токен FCM: \n%1$s Токен FCM отримано успішно: \n%1$s Токен Firebase Виправити служби Play - Element використовує сервіси Google Play для доставлення push-сповіщень, але, схоже, його налаштовано неправильно: + ${app_name} використовує сервіси Google Play для доставлення push-сповіщень, але, схоже, його налаштовано неправильно: \n%1$s Відкрити Налаштування Сповіщення вимкнено в налаштуваннях системи. @@ -1595,7 +1595,7 @@ Переконайтеся, що ви натиснули посилання в електронному листі, який ми надіслали вам. Вилучити %s\? Потрібна автентифікація - Це неможливо зробити за допомогою Element mobile + Це неможливо зробити за допомогою ${app_name} mobile Підтвердити пароль Фільтрувати заборонених користувачів Скасування блокування користувача дозволить їм знову приєднатися до кімнати. @@ -1663,10 +1663,10 @@ Щоб відновити PIN-код, потрібно буде повторно ввійти в систему та створити новий. Увімкнути PIN-код Якщо хочете відновити PIN-код, торкніться «Забули PIN-код», щоб вийти та відновити. - PIN-код — єдиний спосіб розблокувати Element. + PIN-код — єдиний спосіб розблокувати ${app_name}. Вимагати PIN-код через 2 хвилини - PIN-код вимагається після 2 хвилин не використання Element. - PIN-код потрібно вводити за кожного відкриття Element. + PIN-код вимагається після 2 хвилин не використання ${app_name}. + PIN-код потрібно вводити за кожного відкриття ${app_name}. Змінити PIN-код Зміна поточного PIN-коду Підтвердьте PIN-код, щоб вимкнути його @@ -1685,7 +1685,7 @@ Показати всі сеанси Помилка автентифікації Потрібна повторна автентифікація - Для виконання цієї дії Element вимагає ввести свої облікові дані. + Для виконання цієї дії ${app_name} вимагає ввести свої облікові дані. Якщо скасувати, ви не зможете читати зашифровані повідомлення на новому пристрої, а інші користувачі не довірятимуть йому Якщо скасувати, ви не зможете читати зашифровані повідомлення на цьому пристрої, а інші користувачі довірятимуть йому Керування сеансами diff --git a/vector/src/main/res/values-vi/strings.xml b/vector/src/main/res/values-vi/strings.xml index b665fb925d..407fd31e8c 100644 --- a/vector/src/main/res/values-vi/strings.xml +++ b/vector/src/main/res/values-vi/strings.xml @@ -22,7 +22,7 @@ Bỏ qua Đã có một cuộc hội thoại đang diễn ra! Không có kết quả nào - Bạn chưa cho phép Element truy cập danh bạ của bạn + Bạn chưa cho phép ${app_name} truy cập danh bạ của bạn Không có cuộc trò chuyện nào Chỉ những liên hệ Matrix Thư mục người dùng @@ -206,7 +206,7 @@ Loa Điện thoại Chọn thiết bị âm thanh - Cuộc gọi Element thất bại + Cuộc gọi ${app_name} thất bại Đừng hỏi lại tôi Hãy thử dùng %s Vui lòng yêu cầu quản trị viên của máy chủ nhà của bạn (%1$s) thiết lập một máy chủ TURN để các cuộc gọi có thể hoạt động […]. @@ -254,7 +254,7 @@ Gọi Chọn nhạc chuông: Nhạc chuông cho cuộc gọi đến - Dùng nhạc chuông mặc định cho cuộc gọi đến + Dùng nhạc chuông mặc định cho cuộc gọi đến Yêu cầu xác nhận trước khi gọi Tránh gọi nhầm Chủ đề của phòng diff --git a/vector/src/main/res/values-zh-rCN/strings.xml b/vector/src/main/res/values-zh-rCN/strings.xml index 8a197b914f..479e3f810f 100644 --- a/vector/src/main/res/values-zh-rCN/strings.xml +++ b/vector/src/main/res/values-zh-rCN/strings.xml @@ -395,11 +395,11 @@ %d 秒 通话已连接 通话正在连接… - 为了发送或保存附件,Element 需要访问您的图片和视频库。 + 为了发送或保存附件,${app_name} 需要访问您的图片和视频库。 \n \n请在接下来弹出的窗口中授权允许访问,以便应用能够从您的手机发送文件。 - 为了拍照或进行视频通话,Element 需要访问您的相机。 - 为了进行语音通话,Element 需要访问您的麦克风。 + 为了拍照或进行视频通话,${app_name} 需要访问您的相机。 + 为了进行语音通话,${app_name} 需要访问您的麦克风。 您试图访问聊天室 %s。您是否愿意加入这个聊天室? 管理工具 私聊 @@ -582,7 +582,7 @@ " \n \n请在接下来弹出的窗口中授权允许访问。" - Element需要许可才能访问您的摄像机和麦克风来执行视频通话。 + ${app_name}需要许可才能访问您的摄像机和麦克风来执行视频通话。 \n \n请在接下来弹出的窗口中授权允许访问。 对不起。因为权限不足,操作已取消 @@ -644,10 +644,10 @@ 发送至 已读标签清单 发送为 - Element 需要访问您的通讯录,才能根据电子邮箱地址和手机号码查找其他 Matrix 用户。 + ${app_name} 需要访问您的通讯录,才能根据电子邮箱地址和手机号码查找其他 Matrix 用户。 请在接下来的弹出窗口中授权允许访问。 - Element可以检查您的通讯录,以根据电子邮件和电话号码找到其他Matrix用户。 + ${app_name}可以检查您的通讯录,以根据电子邮件和电话号码找到其他Matrix用户。 \n \n你同意为此目的分享你的通讯录吗\? 空闲 @@ -703,7 +703,7 @@ 只显示 Matrix 联系人 没有对话 没有结果 - 您没有授予 Element 访问本地通讯录的权限 + 您没有授予 ${app_name} 访问本地通讯录的权限 聊天室 聊天室目录 @@ -887,7 +887,7 @@ %d 条未读消息 通知隐私 - Element 可以在后台运行以安全隐密地管理您的通知(这可能会影响电池消耗)。 + ${app_name} 可以在后台运行以安全隐密地管理您的通知(这可能会影响电池消耗)。 获取权限 选择其他选项 • 通知通过 Firebase Cloud Messaging 发送 @@ -900,8 +900,8 @@ 停用账户 停用我的账户 发送统计分析数据 - Element 会收集匿名统计数据来帮助我们改进程序。 - 请允许资料分析以帮助我们改进 Element。 + ${app_name} 会收集匿名统计数据来帮助我们改进程序。 + 请允许资料分析以帮助我们改进 ${app_name}。 是的,我愿意帮助! 停用账户 这将使您的账户永远不再可用。您将不能登录,或使用相同的用户 ID 重新注册。您的账户将退出所有已加入的聊天室,身份服务器上的账户信息也会被删除。此操作是不可逆的。 停用您的账户不会默认忘记您发送的消息。如果您希望我们忘记您发送的消息,请勾选下面的选择框。 Matrix 中的消息可见性类似于电子邮件。我们忘记您的消息意味着您发送的消息不会被发给新注册或未注册的用户,但是已收到您的消息的注册用户依旧可以看到他们的副本。 @@ -930,7 +930,7 @@ 从其他设备上 重新请求密钥 已发送密钥共享请求。 已请求 - 请在其他可解密此消息的设备上启动 Element,以便其将密钥发送至当前设备。 + 请在其他可解密此消息的设备上启动 ${app_name},以便其将密钥发送至当前设备。 在此输入… 发送语音消息 请输入您的密码。 @@ -1003,7 +1003,7 @@ 错误 请审阅并接受此主服务器的政策: 通话 - 为来电使用 Element 的默认铃声 + 为来电使用 ${app_name} 的默认铃声 来电铃声 请选择来电铃声: 移除 @@ -1028,12 +1028,12 @@ 启用 设备设置。 已为此设备启用通知。 - 此会话未启用通知。 -\n请检查 Element 设置。 + 此会话未启用通知。 +\n请检查 ${app_name} 设置。 启用 Play 服务检查 Google Play 服务的 APK 文件可用且为最新版本。 - Element 使用 Google Play 服务来推送通知,但它似乎并未正确设置: + ${app_name} 使用 Google Play 服务来推送通知,但它似乎并未正确设置: \n%1$s 修复 Play 服务 Firebase 令牌 @@ -1050,7 +1050,7 @@ 通知服务未在运行。 \n请尝试重启本应用程序。 启动服务 - 调用系统相机应用而非使用 Element 内置的相机界面。 + 调用系统相机应用而非使用 ${app_name} 内置的相机界面。 此选项需要第三方应用录制消息。 开机时启动 启用开机时启动 @@ -1068,8 +1068,8 @@ 显示账户变动事件 包括头像与显示名称的变动。 后台连接 - Element需要保持低影响的后台连接,以便获得可靠的通知。 -\n下一个屏幕中,系统将提示您允许 Element 始终在后台运行,请点击“允许“。 + ${app_name}需要保持低影响的后台连接,以便获得可靠的通知。 +\n下一个屏幕中,系统将提示您允许 ${app_name} 始终在后台运行,请点击“允许“。 授予权限 在验证您的电子邮件地址时发生了一个错误。 密码 @@ -1096,14 +1096,14 @@ 服务被停止,并已自动重启。 服务重启失败 服务将在设备重启后启动。 - 服务不会在设备重启后启动,在您打开 Element 一次之前您将不会收到消息通知。 - 已禁用对 Element 的后台限制。此测试应使用移动数据(非Wi-Fi)进行。 + 服务不会在设备重启后启动,在您打开 ${app_name} 一次之前您将不会收到消息通知。 + 已禁用对 ${app_name} 的后台限制。此测试应使用移动数据(非Wi-Fi)进行。 \n%1$s - 已启用对 Element 的后台限制。 -\nElement 在后台时的工作将被显著地限制,这可能会影响消息通知。 + 已启用对 ${app_name} 的后台限制。 +\n${app_name} 在后台时的工作将被显著地限制,这可能会影响消息通知。 \n%1$s 关闭后台限制 - Element 未被电池优化影响。 + ${app_name} 未被电池优化影响。 如果设备在未充电的情况下关屏静置一段时间,其将进入打盹模式(Doze)。这将阻止应用访问网络并延后其运行、同步、与响铃。 忽略电池优化 请输入用于加密密钥备份的密码。您在恢复此备份时需要使用此密码。 @@ -1135,12 +1135,12 @@ 有些通知已在您的自定义设置中被禁用。 自定义规则加载失败,请重试。 检查设置 - [%1$s] -\n此错误不受 Element 控制,根据 Google 的说法,此错误表示该设备在 FCM 中注册了太多应用。该错误仅在应用程序数量极多的情况下发生,因此不应影响普通用户。 - [%1$s] -\n此错误不受 Element 控制。它的发生可能有几个原因。也许您稍后重试就有效了,您也可以检查一下 Google Play 服务是否被系统设置限制了数据使用,或者您的设备时钟是否正确,或者可能发生在自定义的 ROM 中。 - [%1$s] -\n此错误不受 Element 控制。此设备上没有登录 Google 账号。请打开账号管理器并添加一个 Google 账号。 + [%1$s] +\n此错误不受 ${app_name} 控制,根据 Google 的说法,此错误表示该设备在 FCM 中注册了太多应用。该错误仅在应用程序数量极多的情况下发生,因此不应影响普通用户。 + [%1$s] +\n此错误不受 ${app_name} 控制。它的发生可能有几个原因。也许您稍后重试就有效了,您也可以检查一下 Google Play 服务是否被系统设置限制了数据使用,或者您的设备时钟是否正确,或者可能发生在自定义的 ROM 中。 + [%1$s] +\n此错误不受 ${app_name} 控制。此设备上没有登录 Google 账号。请打开账号管理器并添加一个 Google 账号。 添加账号 设置响铃通知 设置电话通知 @@ -1154,7 +1154,7 @@ 请输入一个用户名。 请输入密码 密码太弱 - 如果您想要 Element 生成一个恢复密钥,请删除密码。 + 如果您想要 ${app_name} 生成一个恢复密钥,请删除密码。 没有可用的 Matrix 会话 已加密信息永不丢失 加密聊天室中的信息会被端对端加密以确保安全。只有您和拥有密钥的接收方可以读取这些信息。 @@ -1266,7 +1266,7 @@ 密码不匹配 无效的主服务器探测响应 自动完成服务器选项 - Element 侦测到您的 userId 域名 \"%1$s\" 有自定义的服务器设置: + ${app_name} 侦测到您的 userId 域名 \"%1$s\" 有自定义的服务器设置: \n%2$s 使用设置 正在初始化服务 @@ -1392,7 +1392,7 @@ 复制 成功 通知 - Element 呼叫失败 + ${app_name} 呼叫失败 无法建立实时连接。 \n请要求您的家庭服务器管理员配置 TURN 服务器以使通话可靠工作。 选择声音设备 @@ -1433,15 +1433,15 @@ 取消封禁用户 取消封禁用户将允许他们再次加入聊天室。 确认您的密码 - 您无法在 Element 移动版中这么做 + 您无法在 ${app_name} 移动版中这么做 需要身份认证 后台同步模式 电池优化 - Element 将在后台以保留设备有限资源(电池)的方式同步。 + ${app_name} 将在后台以保留设备有限资源(电池)的方式同步。 \n取决于您的设备资源状态,同步可能被操作系统推迟。 实时优化 - Element 将在后台定期准时同步(可配置)。 -\n这将影响网络和电池的使用,将显示一个永久通知表明 Element 正在监听事件。 + ${app_name} 将在后台定期准时同步(可配置)。 +\n这将影响网络和电池的使用,将显示一个永久通知表明 ${app_name} 正在监听事件。 无后台同步 应用在后台时您不会收到消息通知。 更新设置失败。 @@ -1543,7 +1543,7 @@ 格式错误事件,无法显示 无网络。请检查您的网络连接。 更改网络 - Element 尚不支持公开聊天室预览 + ${app_name} 尚不支持公开聊天室预览 私聊消息 新聊天室 公开 @@ -1668,7 +1668,7 @@ 此内容已报告为不合适。 \n \n如果您不希望再看到此用户的更多内容,您可以忽略他们以隐藏他们的消息。 - Element 需要权限在磁盘上保存您的端到端密钥。 + ${app_name} 需要权限在磁盘上保存您的端到端密钥。 \n \n请在下个弹窗中允许访问以便手动导出密钥。 目前没有网络连接 @@ -1821,7 +1821,7 @@ \n再次登入以访问您的帐户数据和消息。 除非您登入以恢复加密密钥,否则您将无法访问安全消息。 清除数据 - 当前会话用于用户 %1$s 而您提供了用户 %2$s 的凭证。Element 不支持此功能。 + 当前会话用于用户 %1$s 而您提供了用户 %2$s 的凭证。${app_name} 不支持此功能。 \n请先清除数据,然后重新登入另一个账户。 您的 matrix.to 链接更是不正确 描述太短 @@ -1839,7 +1839,7 @@ 其他会话 仅显示第一个结果,请输入更多字符… 快速失败 - 发生意外错误时,Element 可能更经常崩溃 + 发生意外错误时,${app_name} 可能更经常崩溃 在明文消息前添加 ¯\\_(ツ)_/¯ 启用加密 一旦启用,加密无法禁用。 @@ -1911,9 +1911,9 @@ %1$s 审查员 %1$s 默认权限 %2$s 自定义权限 (%1$d) - Element 无法处理 \'%1$s\' 类型事件 - Element 无法处理 \'%1$s\' 类型消息 - Element 在渲染 id 为 \'%1$s\' 的事件内容时遇到了一个问题 + ${app_name} 无法处理 \'%1$s\' 类型事件 + ${app_name} 无法处理 \'%1$s\' 类型消息 + ${app_name} 在渲染 id 为 \'%1$s\' 的事件内容时遇到了一个问题 取消忽略 该会话无法与您的其他会话共享此验证。 \n验证将保存在本地,并在此应用的未来版本中共享。 @@ -2003,7 +2003,7 @@ 附加理由 编辑理由 事件被用户删除,理由:%1$s - Element Android + ${app_name} Android 密钥请求 解锁加密消息历史 刷新 @@ -2119,13 +2119,13 @@ 无法添加媒体文件到相册 无法保存媒体文件 选择新的账户密码… - 在你的其他设备上使用最新的Element 网页版、Element 桌面版、Element iOS 版、Element 安卓版,或其他能够交叉签名的 Matrix 客户端 - Element Web -\nElement Desktop - Element iOS -\nElement Android + 在你的其他设备上使用最新的${app_name} 网页版、${app_name} 桌面版、${app_name} iOS 版、${app_name} 安卓版,或其他能够交叉签名的 Matrix 客户端 + ${app_name} Web +\n${app_name} Desktop + ${app_name} iOS +\n${app_name} Android 或其他能够交叉签名的 Matrix 客户端 - 在您的其他设备上使用最新的 Element: + 在您的其他设备上使用最新的 ${app_name}: 强制丢弃加密聊天室中的当前出站群组会话 仅在加密聊天室中支持 使用您的 %1$s 或使用您的 %2$s 继续。 @@ -2165,11 +2165,11 @@ 正在载入可用语言… 打开 %s 条款 是否从身份服务器 %s 断开? - 身份服务器已过期。Element 仅支持 API V2。 + 身份服务器已过期。${app_name} 仅支持 API V2。 无法执行此操作。家庭服务器已过期。 请先配置身份服务器。 请先在设置中接受身份服务器的条款。 - 为了您的隐私,Element 仅支持发送用户电子邮件和电话号码的哈希值。 + 为了您的隐私,${app_name} 仅支持发送用户电子邮件和电话号码的哈希值。 关联失败。 此标识符无当前关联。 您的家庭服务器 (%1$s) 建议使用 %2$s 作为您的身份服务器 @@ -2296,13 +2296,13 @@ \n \n小心使用,它可能导致意外行为。 链接格式不正确 - 每次打开 Element 都要求 PIN 码。 - 在 2 分钟未使用 Element 后要求 PIN 码。 + 每次打开 ${app_name} 都要求 PIN 码。 + 在 2 分钟未使用 ${app_name} 后要求 PIN 码。 2 分钟后要求 PIN 仅在一个简单通知中显示未读消息内容数量。 显示细节如聊天室名称和消息内容。 在通知中显示内容 - PIN 码是解锁 Element 的唯一方式。 + PIN 码是解锁 ${app_name} 的唯一方式。 启用设备特定的生物特征识别,如指纹和面部识别。 启用生物特征识别 配置保护 diff --git a/vector/src/main/res/values-zh-rTW/strings.xml b/vector/src/main/res/values-zh-rTW/strings.xml index 15b18f2f38..3d2c119da8 100644 --- a/vector/src/main/res/values-zh-rTW/strings.xml +++ b/vector/src/main/res/values-zh-rTW/strings.xml @@ -334,7 +334,7 @@ 使用者目錄 僅 Matrix 聯絡人 沒有對話 - 您沒有允許 Element 存取裝置上的聯絡資訊 + 您沒有允許 ${app_name} 存取裝置上的聯絡資訊 沒有結果 聊天室 聊天室目錄 @@ -471,22 +471,22 @@ 拍照或錄影 無法錄影 資訊 - Element 需要權限來存取你的照片與影片庫,以傳送及儲存附件。 + ${app_name} 需要權限來存取你的照片與影片庫,以傳送及儲存附件。 \n \n請在下個彈跳視窗允許存取,來從手機傳送檔案。 - Element 需要權限存取您的相機,來拍照與視訊通話。 + ${app_name} 需要權限存取您的相機,來拍照與視訊通話。 " \n \n為了要通話,請在下個彈跳視窗中允許存取。" - Element 需要權限來存取麥克風,來撥打語音通話。 + ${app_name} 需要權限來存取麥克風,來撥打語音通話。 " \n \n為了要通話,請在下個彈跳視窗中允許存取。" - Element 需要權限來存取相機及麥克風來撥打視訊通話。 + ${app_name} 需要權限來存取相機及麥克風來撥打視訊通話。 \n \n為了可以正常使用通話功能,請在下個彈跳視窗中允許存取。 - Element 可以檢查您的電話簿並以電子郵件與電話號碼為基礎來尋找其他 Matrix 使用者。如果您同意為此用途分享您的電話簿,請在下一個彈出式視窗中允許存取權限。 - Element 可以檢查您的電話簿並以電子郵件與電話號碼為基礎來尋找其他 Matrix 使用者。 + ${app_name} 可以檢查您的電話簿並以電子郵件與電話號碼為基礎來尋找其他 Matrix 使用者。如果您同意為此用途分享您的電話簿,請在下一個彈出式視窗中允許存取權限。 + ${app_name} 可以檢查您的電話簿並以電子郵件與電話號碼為基礎來尋找其他 Matrix 使用者。 \n \n您同意為此用途分享您的電話簿嗎? 抱歉。由於缺少權限,所以無法執行動作 @@ -598,7 +598,7 @@ 從其他工作階段重新請求金鑰。重新請求金鑰 已發送金鑰分享請求。 已發送請求 - 請在另一個可以解密訊息的裝置上啟動 Element,以便它將金鑰發送到此工作階段。 + 請在另一個可以解密訊息的裝置上啟動 ${app_name},以便它將金鑰發送到此工作階段。 憑證已從以前受信任的更改為不受信任的憑證。伺服器可能已續訂其憑證。請與伺服器管理員聯繫以尋找所需的指紋。 僅當伺服器管理員發佈的指紋與上面的指紋匹配時才接受此憑證。 聊天室詳情 @@ -720,13 +720,13 @@ 停用帳號 停用我的帳號 通知隱私 - Element 可以在後臺安全隱密地管理通知。這可能會影響電池的使用。 + ${app_name} 可以在後臺安全隱密地管理通知。這可能會影響電池的使用。 獲取權限 選擇其他選項 傳送分析資料 傳送分析資料 - Element 會收集匿名分析以讓我們可以改進此應用程式。 - 請允許收集匿名分析以讓我們可以改進此應用程式。 + ${app_name} 會收集匿名分析以讓我們可以改進此應用程式。 + 請允許收集匿名分析以讓我們可以改進此應用程式。 是的,我想要協助! 節省流量模式 工作階段資訊 @@ -1076,7 +1076,7 @@ +%d %d+ 通話 - 為來電使用預設的 Element 鈴聲 + 為來電使用預設的 ${app_name} 鈴聲 來電鈴聲 選取通話鈴聲: 接受 @@ -1100,12 +1100,12 @@ 啟用 工作階段設定。 通知已為此工作階段啟用。 - 此工作階段未啟用通知。 -\n請檢查 Element 設定。 + 此工作階段未啟用通知。 +\n請檢查 ${app_name} 設定。 啟用 Play 服務檢查 Google Play 服務 APK 可用且已為最新。 - Element 使用 Google Play 服務來傳遞推送訊息,但它似乎並未正確設定: + ${app_name} 使用 Google Play 服務來傳遞推送訊息,但它似乎並未正確設定: \n%1$s 修復 Play 服務 Firebase 權杖 @@ -1127,22 +1127,22 @@ 服務重新啟動失敗 開機時啟動 服務將會在裝置重新啟動時自行啟動。 - 服務不會在裝置重心啟動時自行啟動,您將不能在 Element 開啟前收到通知。 + 服務不會在裝置重心啟動時自行啟動,您將不能在 ${app_name} 開啟前收到通知。 啟用開機時啟動 檢查背景限制 - 背景限制已為 Element 停用。本測試應該使用行動數據執行(不是 WiFi)。 + 背景限制已為 ${app_name} 停用。本測試應該使用行動數據執行(不是 WiFi)。 \n%1$s - 背景限制已為 Element 啟用。 + 背景限制已為 ${app_name} 啟用。 \n應用程式要在背景執行的工作將被嚴格限制,這可能會影響通知功能。 \n %1$s 停用限制 電池最佳化 - Element 不會被電池最佳化影響。 + ${app_name} 不會被電池最佳化影響。 如果使用者不為裝置充電,並讓其靜置一段時間,且將螢幕關閉,裝置將會進入 Doze 模式。這可能會導致應用程式無法存取網路,並延遲它們的工作、同步與標準警報。 忽略最佳化 背景連線 - Element 需要保持最低影響的背景連線以接收可靠的通知。 -\n在下一個畫面,您必須允許 Element 總是在背景執行,請接受。 + ${app_name} 需要保持最低影響的背景連線以接收可靠的通知。 +\n在下一個畫面,您必須允許 ${app_name} 總是在背景執行,請接受。 授予權限 當驗證您的電子郵件地址時遇到錯誤。 當驗證您的手機號碼時遇到錯誤。 @@ -1161,12 +1161,12 @@ 有一些通知在您的自訂設定中被停用了。 載入自訂規則失敗,請重試。 檢查設定 - [%1$s] -\n這個錯誤並非 Element 所能控制,而是與 Google 有關,這個錯誤代表裝置註冊了太多使用 FCM 的應用程式。這個錯誤只會發生在有超大量的應用程式的裝置上,所以不應該影響一般的使用者。 - [%1$s] -\n這個錯誤並非 Element 所能控制。可能由多種原因所導致。也可能會在稍後重試時就可以運作,您也可以檢查 Google Play 服務在系統設定中有沒有被限制使用資料,或是您裝置的時鐘是否正確,或是也可能會在自訂的 ROM 上發生。 - [%1$s] -\n這個錯誤並非 Element 所能控制。手機上沒有 Google 帳號。請開啟帳號管理員並新增一個 Google 帳號。 + [%1$s] +\n這個錯誤並非 ${app_name} 所能控制,而是與 Google 有關,這個錯誤代表裝置註冊了太多使用 FCM 的應用程式。這個錯誤只會發生在有超大量的應用程式的裝置上,所以不應該影響一般的使用者。 + [%1$s] +\n這個錯誤並非 ${app_name} 所能控制。可能由多種原因所導致。也可能會在稍後重試時就可以運作,您也可以檢查 Google Play 服務在系統設定中有沒有被限制使用資料,或是您裝置的時鐘是否正確,或是也可能會在自訂的 ROM 上發生。 + [%1$s] +\n這個錯誤並非 ${app_name} 所能控制。手機上沒有 Google 帳號。請開啟帳號管理員並新增一個 Google 帳號。 新增帳號 設定吵鬧的通知 設定通話通知 @@ -1177,7 +1177,7 @@ 安靜 請輸入通關密語 通關密語太弱了 - 如果您想要讓 Element 生成復原金鑰的話,請刪除通關密語。 + 如果您想要讓 ${app_name} 生成復原金鑰的話,請刪除通關密語。 沒有可用的 Matrix 工作階段 永不遺失已加密的訊息 在加密聊天室裡的訊息是使用端到端加密。只有您和接收者有金鑰可以閱讀這些訊息。 @@ -1304,7 +1304,7 @@ 密碼不符合 無效的家伺服器探索回應 自動完成伺服器選項 - Element 偵測到您的 userId 網域「%1$s」有自訂的伺服器設定: + ${app_name} 偵測到您的 userId 網域「%1$s」有自訂的伺服器設定: \n%2$s 使用設定 正在初始化服務 @@ -1417,7 +1417,7 @@ 請稍候…… 所有社群 無法預覽此聊天室 - Element 尚不支援預覽所有人皆可讀的聊天室 + ${app_name} 尚不支援預覽所有人皆可讀的聊天室 聊天室 直接訊息 新聊天室 @@ -1512,11 +1512,11 @@ 在您的設定中新增一臺身份識別伺服器以執行此動作。 背景同步模式 為電池最佳化 - Element 將會在背景同步以節省裝置的有限資源(電池)。 + ${app_name} 將會在背景同步以節省裝置的有限資源(電池)。 \n取決於您裝置的資源狀態,作業系統可能會延遲同步。 為即時作業最佳化 - Element 將會精準地定期在背景同步(可設定)。 -\n這會影響到網路與電池的使用,並會顯示指出 Element 正在監聽某事件的永久通知。 + ${app_name} 將會精準地定期在背景同步(可設定)。 +\n這會影響到網路與電池的使用,並會顯示指出 ${app_name} 正在監聽某事件的永久通知。 無背景同步 當應用程式在背景時,您將不會收到訊息通知。 更新設定失敗。 @@ -1599,12 +1599,12 @@ 此內容已被回報為不合適。 \n \n如果您不想要看到從此使用者而來的更多內容,您可以忽略他們以隱藏他們的訊息。 - Element 需要權限以在磁碟上儲存您的 E2E 金鑰。 + ${app_name} 需要權限以在磁碟上儲存您的 E2E 金鑰。 \n \n請在下個彈出視窗中允許存取以讓您可以手動匯出您的金鑰。 目前沒有網路連線 確認您的密碼 - 您無法在行動裝置上的 Element 做這件事 + 您無法在行動裝置上的 ${app_name} 做這件事 需要驗證 整合 使用整合管理員以管理機器人、橋接、小工具與貼紙包。 @@ -1771,7 +1771,7 @@ \n再次登入以存取您的帳號資料與訊息。 除非您登入以復原您的加密金鑰,否則您將會失去對安全訊息的存取權。 清除資料 - 使用者 %1$s 目前的工作階段與您提供的使用者 %2$s 憑證。Element 並不支援。 + 使用者 %1$s 目前的工作階段與您提供的使用者 %2$s 憑證。${app_name} 並不支援。 \n請先清除您的資料,然後再以其他帳號登入。 您的 matrix.to 連結格式錯誤 描述太短了 @@ -1789,7 +1789,7 @@ 其他工作階段 僅顯示第一個結果,輸入更多字母…… 快速失敗 - 在發生非預期的錯誤時,Element 可能更常當機 + 在發生非預期的錯誤時,${app_name} 可能更常當機 將 ¯\\_(ツ)_/¯ 附加到純文字訊息中 啟用加密 加密一旦啟用就無法停用。 @@ -1859,9 +1859,9 @@ %1$s 中的板主 %2$s 中的自訂 (%1$d) 跳至讀取回條 - Element 無法處理類型為「%1$s」的事件 - Element 無法處理類型為「%1$s」的訊息 - 在彩現 id「%1$s」事件的內容時,Element 遇到問題 + ${app_name} 無法處理類型為「%1$s」的事件 + ${app_name} 無法處理類型為「%1$s」的訊息 + 在彩現 id「%1$s」事件的內容時,${app_name} 遇到問題 取消忽略 此工作階段無法與您其他的工作階段分享此驗證。 \n驗證將會儲存在本機並在未來版本的應用程式中共享。 @@ -1952,7 +1952,7 @@ 被使用者刪除的活動,理由:%1$s 由聊天室管理員管理的活動,理由:%1$s 金鑰已為最新! - Element Android + ${app_name} Android 金鑰請求 解鎖已加密的訊息歷史 重新整理 @@ -2053,13 +2053,13 @@ 媒體檔案已新增至媒體庫中 無法新增媒體檔案到媒體庫中 設定新的帳號密碼…… - 在您的其他裝置上使用最新的 Element、Element Web、Element 桌面版、Element iOS、Element for Android 或其他有交叉簽章功能的 Matrix 客戶端 - Element Web -\nElement 桌面版 - Element iOS -\nElement Android + 在您的其他裝置上使用最新的 ${app_name}、${app_name} Web、${app_name} 桌面版、${app_name} iOS、${app_name} for Android 或其他有交叉簽章功能的 Matrix 客戶端 + ${app_name} Web +\n${app_name} 桌面版 + ${app_name} iOS +\n${app_name} Android 或其他有交叉簽章功能的 Matrix 客戶端 - 在您的其他裝置上使用最新的 Element: + 在您的其他裝置上使用最新的 ${app_name}: 強制丟棄目前在加密聊天室中的外發群組工作階段 僅在加密聊天室中支援 使用您的 %1$s 或使用您的 %2$s 以繼續。 @@ -2119,11 +2119,11 @@ 正在載入可用的語言…… 開啟 %s 的條款 從身份識別伺服器 %s 斷線? - 此身份識別伺服器太舊了。Element 僅支援 API V2。 + 此身份識別伺服器太舊了。${app_name} 僅支援 API V2。 此動作是不可能的。家伺服器太舊了。 請先設定身份識別伺服器。 請先在設定中同意身份識別伺服器的條款。 - 為了保護您的隱私,Element 僅支援傳送雜湊過的使用者電子郵件與電話號碼。 + 為了保護您的隱私,${app_name} 僅支援傳送雜湊過的使用者電子郵件與電話號碼。 關聯失敗。 目前沒有此識別符的關聯。 您的家伺服器 (%1$s) 建議將 %2$s 用於您的身份識別伺服器 @@ -2137,7 +2137,7 @@ 複製 成功 通知 - Element 呼叫失敗 + ${app_name} 呼叫失敗 建立即時連線失敗。 \n請要求您家伺服器的管理員設定 TURN 伺服器以讓通話的運作更可靠。 選取音效裝置 @@ -2334,13 +2334,13 @@ 刪除類型為 %1$s 的帳號資料? \n \n小心使用,它可能會導致意料之外的行為。 - 每次打開 Element 時都需要 PIN 碼。 - 未使用 Element 2分鐘後,要求輸入 PIN 碼。 + 每次打開 ${app_name} 時都需要 PIN 碼。 + 未使用 ${app_name} 2分鐘後,要求輸入 PIN 碼。 2分鐘後要求輸入 PIN 碼 在簡易通知中僅顯示未讀訊息數量。 顯示如聊天是名稱與訊息內容等詳細資訊。 在通知中顯示內容 - PIN 碼是解鎖 Element 的唯一方式。 + PIN 碼是解鎖 ${app_name} 的唯一方式。 啟用特定裝置的生物識別技術,如指紋與臉部辨識。 設定保護 使用 PIN 碼與生物識別技術來保護存取權。 @@ -2413,8 +2413,8 @@ 分享我的條碼 掃描 QR code 不是有效的 Matrix QR code - 🔐️ 在 Element 上加入我 - 嗨,和我在 Element 上聊天吧:%s + 🔐️ 在 ${app_name} 上加入我 + 嗨,和我在 ${app_name} 上聊天吧:%s 邀請朋友 "主題: " 新增夥伴 @@ -2528,7 +2528,7 @@ 在訊息編輯器上新增按鈕以開啟表情符號鍵盤 顯示表情符號鍵盤 驗證失敗 - Element 需要您輸入您的憑證來執行此動作。 + ${app_name} 需要您輸入您的憑證來執行此動作。 需要重新驗證 未能設定交叉簽章 未授權,缺少有效的身份驗證憑證 diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index 1e079346f6..06f3c037a1 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -481,7 +481,8 @@ User directory Matrix contacts only No conversations - You didn’t allow Element to access your local contacts + + You didn’t allow ${app_name} to access your local contacts No results No more results No identity server configured. @@ -544,7 +545,8 @@ Try using %s Do not ask me again - Element Call Failed + + ${app_name} Call Failed Failed to establish real time connection.\nPlease ask the administrator of your homeserver to configure a TURN server in order for calls to work reliably. Select Sound Device @@ -653,7 +655,8 @@ Key request sent. Request sent - Please launch Element on another device that can decrypt the message so it can send the keys to this session. + + Please launch ${app_name} on another device that can decrypt the message so it can send the keys to this session. Read Receipts List @@ -694,7 +697,8 @@ Calls Prevent accidental call Ask for confirmation before starting a call - Use default Element ringtone for incoming calls + + Use default ${app_name} ringtone for incoming calls Allow fallback call assist server Will use "%s" as assist when your home server does not offer one (your IP address will be shared during a call) Incoming call ringtone @@ -729,14 +733,20 @@ Information - Element needs permission to access your photo and video library to send and save attachments.\n\nPlease allow access on the next pop-up to be able to send files from your phone. - Element needs permission to access your camera to take pictures and video calls. + + ${app_name} needs permission to access your photo and video library to send and save attachments.\n\nPlease allow access on the next pop-up to be able to send files from your phone. + + ${app_name} needs permission to access your camera to take pictures and video calls. \n\nPlease allow access on the next pop-up to be able to make the call. - Element needs permission to access your microphone to perform audio calls. + + ${app_name} needs permission to access your microphone to perform audio calls. \n\nPlease allow access on the next pop-up to be able to make the call. - Element needs permission to access your camera and your microphone to perform video calls.\n\nPlease allow access on the next pop-ups to be able to make the call. - Element can check your address book to find other Matrix users based on their email and phone numbers. If you agree to share your address book for this purpose, please allow access on the next pop-up. - Element can check your address book to find other Matrix users based on their email and phone numbers.\n\nDo you agree to share your address book for this purpose? + + ${app_name} needs permission to access your camera and your microphone to perform video calls.\n\nPlease allow access on the next pop-ups to be able to make the call. + + ${app_name} can check your address book to find other Matrix users based on their email and phone numbers. If you agree to share your address book for this purpose, please allow access on the next pop-up. + + ${app_name} can check your address book to find other Matrix users based on their email and phone numbers.\n\nDo you agree to share your address book for this purpose? Sorry. Action not performed, due to missing permissions To scan a QR code, you need to allow camera access. @@ -1037,7 +1047,8 @@ Application info Show the application info in the system settings. Confirm your password - You can\'t do this from Element mobile + + You can\'t do this from ${app_name} mobile Authentication is required Email addresses @@ -1070,7 +1081,8 @@ Session Settings. Notifications are enabled for this session. - Notifications are not enabled for this session.\nPlease check the Element settings. + + Notifications are not enabled for this session.\nPlease check the ${app_name} settings. Enable Custom Settings. @@ -1081,15 +1093,19 @@ Play Services Check Google Play Services APK is available and up-to-date. - Element uses Google Play Services to deliver push messages but it doesn’t seem to be configured correctly:\n%1$s + + ${app_name} uses Google Play Services to deliver push messages but it doesn’t seem to be configured correctly:\n%1$s Fix Play Services Firebase Token FCM token successfully retrieved:\n%1$s Failed to retrieved FCM token:\n%1$s - [%1$s]\nThis error is out of control of Element and according to Google, this error indicates that the device has too many apps registered with FCM. The error only occurs in cases where there are extreme numbers of apps, so it should not affect the average user. - [%1$s]\nThis error is out of control of Element. It can occur for several reasons. Maybe it will work if you retry later, you can also check that Google Play Service is not restricted in data usage in the system settings, or that your device clock is correct, or it can happen on custom ROM. - [%1$s]\nThis error is out of control of Element. There is no Google account on the phone. Please open the account manager and add a Google account. + + [%1$s]\nThis error is out of control of ${app_name} and according to Google, this error indicates that the device has too many apps registered with FCM. The error only occurs in cases where there are extreme numbers of apps, so it should not affect the average user. + + [%1$s]\nThis error is out of control of ${app_name}. It can occur for several reasons. Maybe it will work if you retry later, you can also check that Google Play Service is not restricted in data usage in the system settings, or that your device clock is correct, or it can happen on custom ROM. + + [%1$s]\nThis error is out of control of ${app_name}. There is no Google account on the phone. Please open the account manager and add a Google account. Add Account Token Registration @@ -1116,16 +1132,20 @@ Start on boot Service will start when the device is restarted. - The service will not start when the device is restarted, you will not receive notifications until Element has been opened once. + + The service will not start when the device is restarted, you will not receive notifications until ${app_name} has been opened once. Enable Start on boot Check background restrictions - Background restrictions are disabled for Element. This test should be run using mobile data (no WIFI).\n%1$s - Background restrictions are enabled for Element.\nWork that the app tries to do will be aggressively restricted while it is in the background, and this could affect notifications.\n%1$s + + Background restrictions are disabled for ${app_name}. This test should be run using mobile data (no WIFI).\n%1$s + + Background restrictions are enabled for ${app_name}.\nWork that the app tries to do will be aggressively restricted while it is in the background, and this could affect notifications.\n%1$s Disable restrictions Battery Optimization - Element is not affected by Battery Optimization. + + ${app_name} is not affected by Battery Optimization. If a user leaves a device unplugged and stationary for a period of time, with the screen off, the device enters Doze mode. This prevents apps from accessing the network and defers their jobs, syncs, and standard alarms. Ignore Optimization @@ -1160,9 +1180,11 @@ Background synchronization Background Sync Mode Optimized for battery - Element will sync in background in way that preserves the device’s limited resources (battery).\nDepending on your device resource state, the sync may be deferred by the operating system. + + ${app_name} will sync in background in way that preserves the device’s limited resources (battery).\nDepending on your device resource state, the sync may be deferred by the operating system. Optimized for real time - Element will sync in background periodically at precise time (configurable).\nThis will impact radio and battery usage, there will be a permanent notification displayed stating that Element is listening for events. + + ${app_name} will sync in background periodically at precise time (configurable).\nThis will impact radio and battery usage, there will be a permanent notification displayed stating that ${app_name} is listening for events. No background sync You will not be notified of incoming messages when the app is in background. Failed to update settings. @@ -1245,19 +1267,23 @@ Discovery Manage your discovery settings. Notification Privacy - Element can run in the background to manage your notifications securely and privately. This might affect battery usage. + + ${app_name} can run in the background to manage your notifications securely and privately. This might affect battery usage. Grant permission Choose another option Background Connection - Element needs to keep a low impact background connection in order to have reliable notifications.\nOn the next screen you will be prompted to allow Element to always run in background, please accept. + + ${app_name} needs to keep a low impact background connection in order to have reliable notifications.\nOn the next screen you will be prompted to allow ${app_name} to always run in background, please accept. Grant permission Analytics Send analytics data - Element collects anonymous analytics to allow us to improve the application. - Please enable analytics to help us improve Element. + + ${app_name} collects anonymous analytics to allow us to improve the application. + + Please enable analytics to help us improve ${app_name}. Yes, I want to help! Data save mode @@ -1819,7 +1845,8 @@ - Please delete the passphrase if you want Element to generate a recovery key. + + Please delete the passphrase if you want ${app_name} to generate a recovery key. No Matrix session available Never lose encrypted messages @@ -1961,7 +1988,8 @@ Invalid homeserver discovery response "Autocomplete Server Options - Element detected a custom server configuration for your userId domain \"%1$s\":\n%2$s + + ${app_name} detected a custom server configuration for your userId domain \"%1$s\":\n%2$s Use Config You have been logged out due to invalid or expired credentials. @@ -2057,7 +2085,8 @@ "All Communities" "This room can't be previewed" - "The preview of world-readable room is not supported yet in Element" + + The preview of world-readable room is not supported yet in ${app_name} This room is not accessible at this time.\nTry again later, or ask a room admin to check if you have access. "This room can't be previewed. Do you want to join it?" "Rooms" @@ -2282,7 +2311,8 @@ "Reported as inappropriate" "This content was reported as inappropriate.\n\nIf you don't want to see any more content from this user, you can ignore them to hide their messages." - Element needs permission to save your E2E keys on disk.\n\nPlease allow access on the next pop-up to be able to export your keys manually. + + ${app_name} needs permission to save your E2E keys on disk.\n\nPlease allow access on the next pop-up to be able to export your keys manually. There is no network connection right now @@ -2475,7 +2505,8 @@ Clear all data currently stored on this device?\nSign in again to access your account data and messages. You’ll lose access to secure messages unless you sign in to recover your encryption keys. Clear data - The current session is for user %1$s and you provide credentials for user %2$s. This is not supported by Element.\nPlease first clear data, then sign in again on another account. + + The current session is for user %1$s and you provide credentials for user %2$s. This is not supported by ${app_name}.\nPlease first clear data, then sign in again on another account. Your matrix.to link was malformed The description is too short @@ -2497,7 +2528,8 @@ Showing only the first results, type more letters… Fail-fast - Element may crash more often when an unexpected error occurs + + ${app_name} may crash more often when an unexpected error occurs Prepends ¯\\_(ツ)_/¯ to a plain-text message @@ -2602,9 +2634,12 @@ Direct message Jump to read receipt - "Element does not handle events of type '%1$s'" - "Element does not handle message of type '%1$s'" - "Element encountered an issue when rendering content of event with id '%1$s'" + + ${app_name} does not handle events of type \'%1$s\' + + ${app_name} does not handle message of type \'%1$s\' + + ${app_name} encountered an issue when rendering content of event with id \'%1$s\' Unignore @@ -2741,7 +2776,8 @@ Keys are already up to date! - Element Android + + ${app_name} Android Key Requests Export Audit @@ -2900,11 +2936,15 @@ Could not save media file Set a new account password… - Use the latest Element on your other devices, Element Web, Element Desktop, Element iOS, Element for Android, or another cross-signing capable Matrix client - Element Web\nElement Desktop - Element iOS\nElement Android + + Use the latest ${app_name} on your other devices, ${app_name} Web, ${app_name} Desktop, ${app_name} iOS, ${app_name} for Android, or another cross-signing capable Matrix client + + ${app_name} Web\n${app_name} Desktop + + ${app_name} iOS\n${app_name} Android or another cross-signing capable Matrix client - Use the latest Element on your other devices: + + Use the latest ${app_name} on your other devices: Forces the current outbound group session in an encrypted room to be discarded Only supported in encrypted rooms @@ -2925,9 +2965,9 @@ Sends the given message with confetti Sends the given message with snow - + sends confetti 🎉 - + sends snow ❄️ Unencrypted @@ -2960,8 +3000,10 @@ Inviting users… Invite Users Invite friends - Hey, talk to me on Element: %s - 🔐️ Join me on element + + Hey, talk to me on ${app_name}: %s + + 🔐️ Join me on ${app_name} Invitation sent to %1$s Invitations sent to %1$s and %2$s "It's not a valid matrix QR code" @@ -2982,11 +3024,13 @@ Open terms of %s Disconnect from the identity server %s? - This identity server is outdated. Element support only API V2. + + This identity server is outdated. ${app_name} support only API V2. This operation is not possible. The homeserver is outdated. Please first configure an identity server. Please first accepts the terms of the identity server in the settings. - For your privacy, Element only supports sending hashed user emails and phone number. + + For your privacy, ${app_name} only supports sending hashed user emails and phone number. The association has failed. The is no current association with this identifier. The user consent has not been provided. @@ -3090,13 +3134,16 @@ If you want to reset your PIN, tap Forgot PIN to logout and reset. Enable biometrics Enable device specific biometrics, like fingerprints and face recognition. - PIN code is the only way to unlock Element. + + PIN code is the only way to unlock ${app_name}. Show content in notifications Show details like room names and message content. Only display number of unread messages in a simple notification. Require PIN after 2 minutes - PIN code is required after 2 minutes of not using Element. - PIN code is required every time you open Element. + + PIN code is required after 2 minutes of not using ${app_name}. + + PIN code is required every time you open ${app_name}. Change PIN Change your current PIN Confirm PIN to disable PIN @@ -3148,7 +3195,8 @@ Re-Authentication Needed - Element requires you to enter your credentials to perform this action. + + ${app_name} requires you to enter your credentials to perform this action. Failed to authenticate Screenshot From b980ca5d31e87a9f84a026517e736eb6a2dd11f9 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 3 Mar 2021 17:54:14 +0100 Subject: [PATCH 183/578] Remove unused string --- vector/src/main/res/values-bg/strings.xml | 1 - vector/src/main/res/values-ca/strings.xml | 1 - vector/src/main/res/values-cs/strings.xml | 1 - vector/src/main/res/values-de/strings.xml | 3 +-- vector/src/main/res/values-eo/strings.xml | 1 - vector/src/main/res/values-es/strings.xml | 1 - vector/src/main/res/values-et/strings.xml | 1 - vector/src/main/res/values-eu/strings.xml | 1 - vector/src/main/res/values-fa/strings.xml | 1 - vector/src/main/res/values-fi/strings.xml | 1 - vector/src/main/res/values-fr/strings.xml | 1 - vector/src/main/res/values-he/strings.xml | 1 - vector/src/main/res/values-hr/strings.xml | 1 - vector/src/main/res/values-hu/strings.xml | 1 - vector/src/main/res/values-it/strings.xml | 1 - vector/src/main/res/values-iw/strings.xml | 1 - vector/src/main/res/values-kab/strings.xml | 1 - vector/src/main/res/values-nb-rNO/strings.xml | 1 - vector/src/main/res/values-pl/strings.xml | 1 - vector/src/main/res/values-pt-rBR/strings.xml | 1 - vector/src/main/res/values-ru/strings.xml | 1 - vector/src/main/res/values-sq/strings.xml | 1 - vector/src/main/res/values-sv/strings.xml | 1 - vector/src/main/res/values-zh-rCN/strings.xml | 1 - vector/src/main/res/values-zh-rTW/strings.xml | 1 - vector/src/main/res/values/strings.xml | 1 - 26 files changed, 1 insertion(+), 27 deletions(-) diff --git a/vector/src/main/res/values-bg/strings.xml b/vector/src/main/res/values-bg/strings.xml index e8dc6aa0b4..0288b6faf6 100644 --- a/vector/src/main/res/values-bg/strings.xml +++ b/vector/src/main/res/values-bg/strings.xml @@ -1660,7 +1660,6 @@ Адрес Премиум хостинг за организации Въведете адреса на Modular Element или на сървър, който искате да използвате - Въведете адреса на сървър или Element към който да се свържете Възникна грешка при зареждане на страницата: %1$s (%2$d) Приложението не може да влезе в този сървър. Сървъра поддържа следните методи за вход: %1$s. \n diff --git a/vector/src/main/res/values-ca/strings.xml b/vector/src/main/res/values-ca/strings.xml index 7c09c778c5..d48de4ba3d 100644 --- a/vector/src/main/res/values-ca/strings.xml +++ b/vector/src/main/res/values-ca/strings.xml @@ -1647,7 +1647,6 @@ Ho sentim, aquest servidor no accepta comptes nous. S\'ha produït un error en carregar la pàgina: %1$s (%2$d) Introdueix l\'adreça del servidor que vulguis utilitzar - Introdueix l\'adreça d\'un servidor o d\'un Element al qual et que vulguis connectar Galeria Adhesiu S\'ha produït un error mentre es rebia el fitxer adjunt. diff --git a/vector/src/main/res/values-cs/strings.xml b/vector/src/main/res/values-cs/strings.xml index deacdeb266..ce59227221 100644 --- a/vector/src/main/res/values-cs/strings.xml +++ b/vector/src/main/res/values-cs/strings.xml @@ -1741,7 +1741,6 @@ Adresa Prémiový hosting pro organizace Zadejte adresu Modular Element nebo serveru, který chcete použít - Zadejte adresu serveru nebo Elementu, k němuž se chcete připojit Při načítání stránky došlo k chybě: %1$s (%2$d) Aplikace se nemůže přihlásit k tomuto homeserveru. Homeserver podporuje následující typy přihlášení: %1$s. \n diff --git a/vector/src/main/res/values-de/strings.xml b/vector/src/main/res/values-de/strings.xml index ee1a204172..5799625fe2 100644 --- a/vector/src/main/res/values-de/strings.xml +++ b/vector/src/main/res/values-de/strings.xml @@ -1815,8 +1815,7 @@ Es ist deine Konversation. Mache sie dir zu eigen. Premium-Hosting für Organisationen Gib die Adresse des Modular Element oder Servers ein, den du verwenden möchtest - Gibt die Adresse eines Servers oder eines Element ein, zu dem du dich verbinden möchtest - Die Anwendung kann sich nicht bei diesem Home-Server anmelden. Der Home-Server unterstützt die folgenden Anmeldetypen: %1$s. + Die Anwendung kann sich nicht bei diesem Home-Server anmelden. Der Home-Server unterstützt die folgenden Anmeldetypen: %1$s. \n \nMöchtest du dich mit einem Webclient anmelden\? Eine Bestätigungs-E-Mail wird an dich gesendet, um dein neues Passwort zu bestätigen. diff --git a/vector/src/main/res/values-eo/strings.xml b/vector/src/main/res/values-eo/strings.xml index 54fa6c4007..b5c06a9dff 100644 --- a/vector/src/main/res/values-eo/strings.xml +++ b/vector/src/main/res/values-eo/strings.xml @@ -938,7 +938,6 @@ \nĈu vi volas saluti per TTT-kliento\? Eraris enlegado de la paĝo: %1$s (%2$d) Enigu adreson de servilo, kiun vi volas uzi - Enigu la adreson de servilo aŭ Elemento, kien vi volas konektiĝi Adreso Adreso de Element Matrix Services Saluti al %1$s diff --git a/vector/src/main/res/values-es/strings.xml b/vector/src/main/res/values-es/strings.xml index 2658fd6b88..e091b26af8 100644 --- a/vector/src/main/res/values-es/strings.xml +++ b/vector/src/main/res/values-es/strings.xml @@ -1766,7 +1766,6 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Dirección Alojamiento de pago para organizaciones Introduzca la dirección de Modular Element o servidor que quieres usar - Introduzca la dirección del servidor Element al que quieres conectarte Se produjo un error al cargar la página: %1$s (%2$d) La aplicación no es capaz de iniciar sesión en este servidor. Éste solo soporta el acceso mediante: %1$s. \n diff --git a/vector/src/main/res/values-et/strings.xml b/vector/src/main/res/values-et/strings.xml index 0c3f184a3e..0d2ccbb113 100644 --- a/vector/src/main/res/values-et/strings.xml +++ b/vector/src/main/res/values-et/strings.xml @@ -1008,7 +1008,6 @@ Aadress Tasuline Matrix\'i majutusteenus organisatsioonidele Sisesta Modular Element teenuse või muu serveri aadress, mida sa soovid kasutada - Sisesta serveri või Element\'i aadress, mida sa soovid kasutada Sisesta serveri aadress, mida sa soovid kasutada Lehe laadimisel tekkis viga %1$s (%2$d) See rakendus ei saa sisse logida antud koduserverisse. See koduserver toetab järgmisi sisselogimise tüüp(e): %1$s. diff --git a/vector/src/main/res/values-eu/strings.xml b/vector/src/main/res/values-eu/strings.xml index 434556241b..8963d3e40c 100644 --- a/vector/src/main/res/values-eu/strings.xml +++ b/vector/src/main/res/values-eu/strings.xml @@ -1907,7 +1907,6 @@ Abisua: Fitxategi hau ezabatu daiteke aplikazioa desinstalatzen bada. Helbidea Ordainpeko ostatatzea elkarteentzat Sartu erabili nahi duzun Modular Element edo zerbitzariaren helbidea - Sartu konektatu nahi duzun zerbitzari edo Element-aren helbidea Errore bat gertatu da orria kargatzean: %1$s (%2$d) Aplikazioak ezin du hasiera-zerbitzari honetan saioa hasi. Hasiera-zerbitzariak honako saio mota onartzen du: %1$s. diff --git a/vector/src/main/res/values-fa/strings.xml b/vector/src/main/res/values-fa/strings.xml index 189dd5aca0..b4a912bf66 100644 --- a/vector/src/main/res/values-fa/strings.xml +++ b/vector/src/main/res/values-fa/strings.xml @@ -2001,7 +2001,6 @@ \nآیا می خواهید با استفاده از مرورگر وارد شوید؟ هنگام بارگیری صفحه، خطایی روی داد: %1$s (%2$d) نشانی کارسازی که می‌خواهید استفاده کنید را وارد کنید - نشانی المنت یا کارسازی را که می‌‌خواهید به آن وصل شوید، وارد کنید نشانی کارساز یا المنت ماژولاری که می‌خواهید استفاده کنید را وارد کنید به میلیون‌ها نفر در بزرگ‌ترین کارساز عمومی بپیوندید درست مانند ایمیل، حساب‌های کاربری یک خانه دارند؛ اگرچه می توانید با هر کسی که دوست دارید، صحبت کنید diff --git a/vector/src/main/res/values-fi/strings.xml b/vector/src/main/res/values-fi/strings.xml index 5f4741f86a..1661178b50 100644 --- a/vector/src/main/res/values-fi/strings.xml +++ b/vector/src/main/res/values-fi/strings.xml @@ -1818,7 +1818,6 @@ \nPoista ensin tietosi ja kirjaudu sen jälkeen toisella tunnuksella. Voit vaihtoehtoisesti käyttää ${app_name}in selainversiota. matrix.to-linkkisi oli epämuodostunut Kuvaus on liian lyhyt - Syötä palvelin tai sen Elementin osoite, mihin haluat yhdistää Se voi johtua monesta eri syystä: \n \n• olet vaihtanut salasanasi toisella laitteella diff --git a/vector/src/main/res/values-fr/strings.xml b/vector/src/main/res/values-fr/strings.xml index 397ff5a1e3..8b6a1d4925 100644 --- a/vector/src/main/res/values-fr/strings.xml +++ b/vector/src/main/res/values-fr/strings.xml @@ -1682,7 +1682,6 @@ Adresse Hébergement privé pour les organisations Saisir l’adresse de Element ou du serveur de Modular que vous voulez utiliser - Saisir l’adresse d’un serveur ou d’un Element auquel vous voulez vous connecter Une erreur est survenue pendant le chargement de la page : %1$s (%2$d) L’application ne peut pas s’authentifier sur ce serveur d’accueil. Le serveur d’accueil prend en charge le(s) type(s) d’authentification suivant(s) : %1$s. \n diff --git a/vector/src/main/res/values-he/strings.xml b/vector/src/main/res/values-he/strings.xml index abeed9287d..9f7299b8b2 100644 --- a/vector/src/main/res/values-he/strings.xml +++ b/vector/src/main/res/values-he/strings.xml @@ -1441,7 +1441,6 @@ \nהאם אתה רוצה להיכנס באמצעות לקוח אינטרנט\? אירעה שגיאה בעת טעינת הדף: %1$s (%2$d) הזן את כתובת השרת שבו ברצונך להשתמש - הזן את כתובת השרת או האלמנט שאליו ברצונך להתחבר הזן את כתובת האלמנט המודולרי או השרת שבו ברצונך להשתמש אירוח פרימיום לארגונים כתובת diff --git a/vector/src/main/res/values-hr/strings.xml b/vector/src/main/res/values-hr/strings.xml index 566025a7d0..ae1e86433d 100644 --- a/vector/src/main/res/values-hr/strings.xml +++ b/vector/src/main/res/values-hr/strings.xml @@ -1233,7 +1233,6 @@ Adresa Plaćeno gošćenje za organizacije Unesite adresu Modular Elementa ili poslužitelja koji želite koristiti - Unesite adresu poslužitelja ili Elementa na koji se želite spojiti Došlo je do greške pri učitavanju stranice: %1$s (%2$d) Aplikacija se ne može prijaviti na ovog poslužitelja. Poslužitelj podržava sljedeće vrste prijava: %1$s. \n diff --git a/vector/src/main/res/values-hu/strings.xml b/vector/src/main/res/values-hu/strings.xml index e491722d8d..d886194ee8 100644 --- a/vector/src/main/res/values-hu/strings.xml +++ b/vector/src/main/res/values-hu/strings.xml @@ -1639,7 +1639,6 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró Cím Prémium szerverüzemeltetés szervezetek részére Add meg az általad használt Modular szerver, vagy a hozzá tartozó Element címét - Add meg a szerver vagy Element címét amihez csatlakozni szeretnél Az oldal betöltésekor hiba történt: %1$s (%2$d) Ne haragudj, ez a szerver nem fogad új fiókokat. Ez az e-mail cím egyik fiókhoz sincs társítva. diff --git a/vector/src/main/res/values-it/strings.xml b/vector/src/main/res/values-it/strings.xml index 2a13148bcd..71657131dd 100644 --- a/vector/src/main/res/values-it/strings.xml +++ b/vector/src/main/res/values-it/strings.xml @@ -1769,7 +1769,6 @@ Indirizzo Hosting premium per organizzazioni Inserisci l\'indirizzo del Element Modular o del server che vuoi usare - Inserisci l\'indirizzo di un server o di un Element a cui vuoi connetterti Si è verificato un errore caricando la pagina: %1$s (%2$d) L\'applicazione non riesce ad accedere a questo homeserver. L\'homeserver supporta i seguenti tipi di accesso: %1$s. \n diff --git a/vector/src/main/res/values-iw/strings.xml b/vector/src/main/res/values-iw/strings.xml index abeed9287d..9f7299b8b2 100644 --- a/vector/src/main/res/values-iw/strings.xml +++ b/vector/src/main/res/values-iw/strings.xml @@ -1441,7 +1441,6 @@ \nהאם אתה רוצה להיכנס באמצעות לקוח אינטרנט\? אירעה שגיאה בעת טעינת הדף: %1$s (%2$d) הזן את כתובת השרת שבו ברצונך להשתמש - הזן את כתובת השרת או האלמנט שאליו ברצונך להתחבר הזן את כתובת האלמנט המודולרי או השרת שבו ברצונך להשתמש אירוח פרימיום לארגונים כתובת diff --git a/vector/src/main/res/values-kab/strings.xml b/vector/src/main/res/values-kab/strings.xml index 4e6dc67792..cf54619343 100644 --- a/vector/src/main/res/values-kab/strings.xml +++ b/vector/src/main/res/values-kab/strings.xml @@ -1975,7 +1975,6 @@ Qqen aqeddac udmawan Tanezduɣt n Premium i tkebbaniyin Sekcem tansa n Element Modular neɣ n uqeddac i tebɣiḍ ad t-tesqedceḍ - Sekcem tansa n uqeddac neɣ n Element i tebɣiḍ ad teqqneḍ ɣer-s Tella-d tuccḍa mi ara d-nessalay asebter: %1$s (%2$d) Asnas ur yezmir ara ad yekcem ɣer uqeddac-a agejdan. Aqeddac agejdan yessefrak anaw-a n unekcum: %1$s. \n diff --git a/vector/src/main/res/values-nb-rNO/strings.xml b/vector/src/main/res/values-nb-rNO/strings.xml index 98d324b696..1b1d538fd4 100644 --- a/vector/src/main/res/values-nb-rNO/strings.xml +++ b/vector/src/main/res/values-nb-rNO/strings.xml @@ -1281,7 +1281,6 @@ %1$s gjorde rommet offentlig for den som kjenner lenken. Du gjorde rommet offentlig for den som kjenner lenken. Koble til en tilpasset server - Skriv inn adressen til en server eller et Element du vil koble til Skriv inn adressen til serveren du vil bruke Hvis du endrer passordet, tilbakestilles alle krypteringsnøkler fra ende-til-ende på alle øktene dine, noe som gjør kryptert chatlogg uleselig. Konfigurer sikkerhetskopiering av nøkkel eller eksporter romnøklene fra en annen økt før du tilbakestiller passordet. Du er logget ut av alle økter og vil ikke lenger motta push-varsler. Logg på igjen på hver enhet for å aktivere varsler på nytt. diff --git a/vector/src/main/res/values-pl/strings.xml b/vector/src/main/res/values-pl/strings.xml index 982f41b0cc..1edf1a3c9c 100644 --- a/vector/src/main/res/values-pl/strings.xml +++ b/vector/src/main/res/values-pl/strings.xml @@ -1555,7 +1555,6 @@ Spróbuj uruchomić ponownie aplikację. Adres Hosting premium dla organizacji Wprowadź adres Element Modular lub serwera którego chcesz użyć - Wprowadź adres serwera lub Element z którym chcesz się połączyć Wystąpił błąd podczas ładowania strony: %1$s (%2$d) Aplikacja nie jest w stanie zalogować się do tego serwera domowego. Serwer domowy obsluguje następujące metody logowania: %1$s. \n diff --git a/vector/src/main/res/values-pt-rBR/strings.xml b/vector/src/main/res/values-pt-rBR/strings.xml index ce104ed847..ddbb39a8b6 100644 --- a/vector/src/main/res/values-pt-rBR/strings.xml +++ b/vector/src/main/res/values-pt-rBR/strings.xml @@ -1859,7 +1859,6 @@ Endereço Hospedagem Premium para organizações Digite o endereço de Element Modular ou Servidor que você deseja usar - Digite o endereço do Servidor ou o servidor do Element que você quer entrar Digite o endereço do servidor que você deseja usar Ocorreu um erro ao carregar a página: %1$s (%2$d) O aplicativo não pode entrar neste servidor. O servidor suporta os seguintes tipos de login: %1$s. diff --git a/vector/src/main/res/values-ru/strings.xml b/vector/src/main/res/values-ru/strings.xml index 4a4f4a31ba..3266a039af 100644 --- a/vector/src/main/res/values-ru/strings.xml +++ b/vector/src/main/res/values-ru/strings.xml @@ -2080,7 +2080,6 @@ Расширьте и персонализируйте свой опыт использования Присоединяйтесь к миллионам бесплатных на самом большом публичном сервере Войти в %1$s - Введите адрес сервера или Element, к которому вы хотите подключиться Введите адрес сервера, который вы хотите использовать На ваш почтовый ящик будет отправлено письмо с подтверждением установки нового пароля. Я подтвердил свою электронную почту diff --git a/vector/src/main/res/values-sq/strings.xml b/vector/src/main/res/values-sq/strings.xml index b170fb9269..127a5cb3cd 100644 --- a/vector/src/main/res/values-sq/strings.xml +++ b/vector/src/main/res/values-sq/strings.xml @@ -1693,7 +1693,6 @@ Adresë Strehim me pagesë për ente Jepni adresën e Modular Element-it ose Shërbyesit që doni të përdoret - Jepni adresën e një shërbyesi ose një instance Element me të cilën doni të lidheni Ndodhi një gabim kur ngarkohej faqja: %1$s (%2$d) Aplikacioni s’është në gjendje të bëjë hyrje në llogari në këtë shërbyes Home. Shërbyesi Home mbulon llojet vijuese të hyrjes(ve): %1$s. \n diff --git a/vector/src/main/res/values-sv/strings.xml b/vector/src/main/res/values-sv/strings.xml index 70de437eab..a514d3450a 100644 --- a/vector/src/main/res/values-sv/strings.xml +++ b/vector/src/main/res/values-sv/strings.xml @@ -2033,7 +2033,6 @@ Adress Premiumservervärd för organisationer Skriv in adressen för den Modular Element eller server du vill använda - Skriv in adressen för en server eller Element du vill ansluta till Skriv in adressen för servern du vill använda Ett fel inträffade vid laddning av sidan: %1$s (%2$d) Appen kan inte logga in på den här hemservern. Hemservern stöder följande inloggningstyp(er): %1$s. diff --git a/vector/src/main/res/values-zh-rCN/strings.xml b/vector/src/main/res/values-zh-rCN/strings.xml index 479e3f810f..89223bf9dd 100644 --- a/vector/src/main/res/values-zh-rCN/strings.xml +++ b/vector/src/main/res/values-zh-rCN/strings.xml @@ -1714,7 +1714,6 @@ 地址 面向组织的高级托管 输入 Modular Element 或您想使用的服务器地址 - 输入您想要连接的服务器或 Element 的地址 输入您想使用的服务器的地址 载入页面时出错:%1$s (%2$d) 应用无法登录到此家庭服务器。家庭服务器支持以下登录类型:%1$s。 diff --git a/vector/src/main/res/values-zh-rTW/strings.xml b/vector/src/main/res/values-zh-rTW/strings.xml index 3d2c119da8..96e06d07ef 100644 --- a/vector/src/main/res/values-zh-rTW/strings.xml +++ b/vector/src/main/res/values-zh-rTW/strings.xml @@ -1673,7 +1673,6 @@ 位置 組織有專業主機 輸入 Modular Element 或您想要使用的伺服器位置 - 輸入您想要連線的伺服器或 Element 的位置 載入頁面時發生錯誤:%1$s (%2$d) 應用程式無法登入此家伺服器。家伺服器支援以下登入類型:%1$s。 \n diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index 06f3c037a1..259a63eb99 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -2386,7 +2386,6 @@ Address Premium hosting for organisations Enter the address of the Modular Element or Server you want to use - Enter the address of a server or a Element you want to connect to Enter the address of the server you want to use An error occurred when loading the page: %1$s (%2$d) From caea19bf381e4055ae593d2a03a6328ae3a60ad3 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 3 Mar 2021 17:56:48 +0100 Subject: [PATCH 184/578] Avoid using "element" in the resource id --- .../im/vector/app/features/disclaimer/DisclaimerDialog.kt | 4 ++-- vector/src/main/res/layout/dialog_disclaimer_content.xml | 4 ++-- vector/src/main/res/values-bg/strings.xml | 8 ++++---- vector/src/main/res/values-ca/strings.xml | 8 ++++---- vector/src/main/res/values-cs/strings.xml | 8 ++++---- vector/src/main/res/values-de/strings.xml | 8 ++++---- vector/src/main/res/values-eo/strings.xml | 8 ++++---- vector/src/main/res/values-es/strings.xml | 8 ++++---- vector/src/main/res/values-et/strings.xml | 8 ++++---- vector/src/main/res/values-fa/strings.xml | 8 ++++---- vector/src/main/res/values-fr/strings.xml | 8 ++++---- vector/src/main/res/values-he/strings.xml | 8 ++++---- vector/src/main/res/values-hu/strings.xml | 8 ++++---- vector/src/main/res/values-it/strings.xml | 8 ++++---- vector/src/main/res/values-iw/strings.xml | 8 ++++---- vector/src/main/res/values-kab/strings.xml | 8 ++++---- vector/src/main/res/values-nb-rNO/strings.xml | 8 ++++---- vector/src/main/res/values-pl/strings.xml | 8 ++++---- vector/src/main/res/values-pt-rBR/strings.xml | 8 ++++---- vector/src/main/res/values-ru/strings.xml | 8 ++++---- vector/src/main/res/values-sq/strings.xml | 8 ++++---- vector/src/main/res/values-sv/strings.xml | 8 ++++---- vector/src/main/res/values-uk/strings.xml | 2 +- vector/src/main/res/values-zh-rCN/strings.xml | 8 ++++---- vector/src/main/res/values-zh-rTW/strings.xml | 8 ++++---- vector/src/main/res/values/strings.xml | 8 ++++---- 26 files changed, 97 insertions(+), 97 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/disclaimer/DisclaimerDialog.kt b/vector/src/main/java/im/vector/app/features/disclaimer/DisclaimerDialog.kt index 028d37ff5f..8ea3365cf9 100644 --- a/vector/src/main/java/im/vector/app/features/disclaimer/DisclaimerDialog.kt +++ b/vector/src/main/java/im/vector/app/features/disclaimer/DisclaimerDialog.kt @@ -43,8 +43,8 @@ fun showDisclaimerDialog(activity: Activity) { AlertDialog.Builder(activity) .setView(dialogLayout) .setCancelable(false) - .setNegativeButton(R.string.element_disclaimer_negative_button, null) - .setPositiveButton(R.string.element_disclaimer_positive_button) { _, _ -> + .setNegativeButton(R.string.disclaimer_negative_button, null) + .setPositiveButton(R.string.disclaimer_positive_button) { _, _ -> openUrlInChromeCustomTab(activity, null, VectorSettingsUrls.DISCLAIMER_URL) } .show() diff --git a/vector/src/main/res/layout/dialog_disclaimer_content.xml b/vector/src/main/res/layout/dialog_disclaimer_content.xml index e1442f39f4..ca808605d1 100644 --- a/vector/src/main/res/layout/dialog_disclaimer_content.xml +++ b/vector/src/main/res/layout/dialog_disclaimer_content.xml @@ -43,7 +43,7 @@ android:id="@+id/disclaimerTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="@string/element_disclaimer_title" + android:text="@string/disclaimer_title" android:textColor="?riotx_text_primary" android:textSize="20sp" android:textStyle="bold" @@ -59,7 +59,7 @@ android:layout_marginEnd="24dp" android:gravity="center" android:paddingBottom="32dp" - android:text="@string/element_disclaimer_content" + android:text="@string/disclaimer_content" android:textColor="?riotx_text_secondary" android:textSize="16sp" app:layout_constraintEnd_toEndOf="parent" diff --git a/vector/src/main/res/values-bg/strings.xml b/vector/src/main/res/values-bg/strings.xml index 0288b6faf6..aefdc868db 100644 --- a/vector/src/main/res/values-bg/strings.xml +++ b/vector/src/main/res/values-bg/strings.xml @@ -2340,10 +2340,10 @@ Телефонния указател е празен Добави от телефонния указател Запази ключа за възстановяване в - НАУЧИ ПОВЕЧЕ - РАЗБРАХ - Развълнувани сме да съобщим, че променихме името! Приложението ви е обновено и сте вписани в профила си. - Riot вече е Element! + НАУЧИ ПОВЕЧЕ + РАЗБРАХ + Развълнувани сме да съобщим, че променихме името! Приложението ви е обновено и сте вписани в профила си. + Riot вече е Element! Изчакване на история на шифроването Не можете да достъпите това съобщение, защото изпращача нарочно не е изпратил ключовете за него Не можете да достъпите това съобщение, защото изпращача не се доверява на сесията ви diff --git a/vector/src/main/res/values-ca/strings.xml b/vector/src/main/res/values-ca/strings.xml index d48de4ba3d..850ef255bf 100644 --- a/vector/src/main/res/values-ca/strings.xml +++ b/vector/src/main/res/values-ca/strings.xml @@ -2455,8 +2455,8 @@ Busca contactes a Matrix Busca als meus contactes - MÉS INFORMACIÓ - Riot ara és Element! + MÉS INFORMACIÓ + Riot ara és Element! No pots accedir al missatge perquè el remitent, intencionadament, no ha enviat les claus No pots accedir al missatge perquè la teva sessió no és de confiança pel remitent No pots accedir al missatge perquè el remitent t\'ha bloquejat @@ -2604,8 +2604,8 @@ Agenda La teva llista de contactes està buida Obtenint contactes… - D\'ACORD - Estem contents d\'anunciar que hem canviat de nom! L\'aplicació està actualitzada i s\'ha iniciat sessió amb el teu compte. + D\'ACORD + Estem contents d\'anunciar que hem canviat de nom! L\'aplicació està actualitzada i s\'ha iniciat sessió amb el teu compte. Desa la clau de seguretat Torna a introduir la frase de seguretat per a confirmar-la. Frase de seguretat diff --git a/vector/src/main/res/values-cs/strings.xml b/vector/src/main/res/values-cs/strings.xml index ce59227221..4c2e939948 100644 --- a/vector/src/main/res/values-cs/strings.xml +++ b/vector/src/main/res/values-cs/strings.xml @@ -2371,10 +2371,10 @@ Nemůžete číst tuto zprávu, protože Vaše relace není pro odesílatele důvěryhodná Nemůžete číst tuto zprávu, protože odesílatel účelově neposlal klíče Čekám na historii šifrování - Riot je nyní Element! - Jsme nadšení, že smíme oznámit změnu jména! Vaše app je aktuální a jste přihlášeni do svého účtu. - ROZUMÍM - DOZVĚDĚT SE VÍCE + Riot je nyní Element! + Jsme nadšení, že smíme oznámit změnu jména! Vaše app je aktuální a jste přihlášeni do svého účtu. + ROZUMÍM + DOZVĚDĚT SE VÍCE Uložit klíče pro obnovu v Přidat z mého adresáře Váš adresář je prázdný diff --git a/vector/src/main/res/values-de/strings.xml b/vector/src/main/res/values-de/strings.xml index 5799625fe2..e8a3dad24a 100644 --- a/vector/src/main/res/values-de/strings.xml +++ b/vector/src/main/res/values-de/strings.xml @@ -2352,10 +2352,10 @@ Du kannst auf diese Nachricht nicht zugreifen, weil der Sender deiner Sitzung nicht vertraut Du kannst auf diese Nachricht nicht zugreifen, weil der Sender absichtlich die Schlüssel nicht gesendet hat Warte auf Verschlüsselungshistorie - Riot heißt nun Element! - Wir sind begeistert unsere Namensänderung mitteilen zu können! Deine App ist auf dem neusten Stand und du bist mit deinem Account angemeldet. - VERSTANDEN - MEHR ERFAHREN + Riot heißt nun Element! + Wir sind begeistert unsere Namensänderung mitteilen zu können! Deine App ist auf dem neusten Stand und du bist mit deinem Account angemeldet. + VERSTANDEN + MEHR ERFAHREN Speichere Wiederherstellungsschlüssel in Füge über Kontaktliste hinzu Deine Kontaktliste ist leer diff --git a/vector/src/main/res/values-eo/strings.xml b/vector/src/main/res/values-eo/strings.xml index b5c06a9dff..a872468f42 100644 --- a/vector/src/main/res/values-eo/strings.xml +++ b/vector/src/main/res/values-eo/strings.xml @@ -2054,10 +2054,10 @@ Adresaro Via adresaro malplenas Aldoni per mia adresaro - EKSCIU PLION - KOMPRENITE - Ni ĝojas anonci, ke ni ŝanĝis nian nomon! Via aplikaĵo estas ĝisdata kaj vi estas salutinta vian konton. - Riot nun estas Element! + EKSCIU PLION + KOMPRENITE + Ni ĝojas anonci, ke ni ŝanĝis nian nomon! Via aplikaĵo estas ĝisdata kaj vi estas salutinta vian konton. + Riot nun estas Element! Atendante historion de ĉifrado Vi ne povas aliri ĉi tiun mesaĝon, ĉar la sendinto intence ne sendis la ŝlosilojn Vi ne povas aliri ĉi tiun mesaĝon ĉar la sendinto ne fidas vian salutaĵon diff --git a/vector/src/main/res/values-es/strings.xml b/vector/src/main/res/values-es/strings.xml index e091b26af8..ea0f5d74e1 100644 --- a/vector/src/main/res/values-es/strings.xml +++ b/vector/src/main/res/values-es/strings.xml @@ -1829,9 +1829,9 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Servidor de identidad desactualizado. ${app_name} solo soporta API V2. Operación no posible. Servidor desactualizado. Por favor, configure primero un Servidor de Identidad. - Riot ahora es Element! - Entendido - Aprender Mas + Riot ahora es Element! + Entendido + Aprender Mas Buscar en mis contactos Rechazar invitación Confirma PIN para desabilitarlo @@ -2406,7 +2406,7 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua No puede acceder a este mensaje porque el remitente no confía en su sesión No puede acceder a este mensaje porque el remitente no envió las claves a propósito Esperando al historial de encriptación - ¡Nos complace anunciar que hemos cambiado de nombre! Tu aplicación está actualizada y accediste a tu cuenta. + ¡Nos complace anunciar que hemos cambiado de nombre! Tu aplicación está actualizada y accediste a tu cuenta. Guardar la clave de recuperación en Agregar desde mi directorio telefónico Tu directorio telefónico está vacío diff --git a/vector/src/main/res/values-et/strings.xml b/vector/src/main/res/values-et/strings.xml index 0d2ccbb113..3570b18368 100644 --- a/vector/src/main/res/values-et/strings.xml +++ b/vector/src/main/res/values-et/strings.xml @@ -2017,10 +2017,10 @@ Sa ei saa seda sõnumit lugeda, kuna saatja ei usalda sinu sessiooni Sa ei saa seda sõnumit lugeda, kuna saatja teadlikult ei saatnud vajalikke võtmeid Ootan krüptimise ajalugu - Riot\'i uus nimi on Element! - Meil on hea meel teatada, et oleme muutnud nime! Sinu rakendus on uuendatud ning sa oled oma kontole sisse logitud. - Selge lugu - Vaata lisateavet + Riot\'i uus nimi on Element! + Meil on hea meel teatada, et oleme muutnud nime! Sinu rakendus on uuendatud ning sa oled oma kontole sisse logitud. + Selge lugu + Vaata lisateavet Salvesta taastevõti järgnevalt Lisa telefoniraamatust Sinu telefoniraamat on tühi diff --git a/vector/src/main/res/values-fa/strings.xml b/vector/src/main/res/values-fa/strings.xml index b4a912bf66..98775c2481 100644 --- a/vector/src/main/res/values-fa/strings.xml +++ b/vector/src/main/res/values-fa/strings.xml @@ -1536,8 +1536,8 @@ سپرامنیتی در برابر از دست دادن دسترسی به داده‌ها و پیام‌های رمزشده با پشتیبان گیری از کلیدها روی کارسازتان. نام اتاق موضوع - گرفتم - اطّلاعات بیش‌تر + گرفتم + اطّلاعات بیش‌تر هشدارهای نشانی اصلی اطّلاعات نشست فرستنده خطای رمزگشایی @@ -1624,8 +1624,8 @@ ثبت استفاده از یک کلید امنیتی برپا سازی - مشتاقیم اعلام کنیم که ناممان را عوض کردیم! کاره‌تان به‌روز شده و وارد حسابتان شده‌اید. - ریوت اکنون المنت است! + مشتاقیم اعلام کنیم که ناممان را عوض کردیم! کاره‌تان به‌روز شده و وارد حسابتان شده‌اید. + ریوت اکنون المنت است! در انتظار تاریخچهٔ رمزنگاری به خاطر این که فرستنده از قصد کلیدها را نفرستاده است، نمی‌توانید به این پیام دسترسی داشته باشید به خاطر این که نشستتان به دست فرستنده مطمئن نیست، نمی‌توانید به این پیام دسترسی داشته باشید diff --git a/vector/src/main/res/values-fr/strings.xml b/vector/src/main/res/values-fr/strings.xml index 8b6a1d4925..caba64816a 100644 --- a/vector/src/main/res/values-fr/strings.xml +++ b/vector/src/main/res/values-fr/strings.xml @@ -2211,10 +2211,10 @@ Votre carnet d\'adresses est vide Ajouter depuis mon carnet d\'adresses Enregistrer la clé de récupération - EN SAVOIR PLUS - COMPRIS - Nous sommes heureux de vous annoncer que nous avons un nouveau nom ! Votre application est à jour et vous êtes connectés à votre compte. - Riot est maintenant Element ! + EN SAVOIR PLUS + COMPRIS + Nous sommes heureux de vous annoncer que nous avons un nouveau nom ! Votre application est à jour et vous êtes connectés à votre compte. + Riot est maintenant Element ! Attente de l\'historique du chiffrement Impossible d\'accéder à ce message car l\'envoyeur n\'a intentionnellement pas envoyé les clés Vous ne pouvez pas accéder à ce message car l\'envoyeur n\'a pas confiance en votre session diff --git a/vector/src/main/res/values-he/strings.xml b/vector/src/main/res/values-he/strings.xml index 9f7299b8b2..c477b5c147 100644 --- a/vector/src/main/res/values-he/strings.xml +++ b/vector/src/main/res/values-he/strings.xml @@ -2281,10 +2281,10 @@ ספר הטלפונים שלך ריק הוסף מפנקס הטלפונים שלי שמור מפתח שחזור פנימה - למד עוד - הבנת - אנו שמחים לבשר ששינינו שם! האפליקציה שלך מעודכנת ואתה מחובר לחשבונך. - Riot היא עכשיו Element! + למד עוד + הבנת + אנו שמחים לבשר ששינינו שם! האפליקציה שלך מעודכנת ואתה מחובר לחשבונך. + Riot היא עכשיו Element! ממתין להיסטוריית הצפנה אינך יכול לגשת להודעה זו מכיוון שהשולח בכוונה לא שלח את המפתחות אינך יכול לגשת להודעה זו מכיוון שהשולח אינו מהימן על ההפעלה שלך diff --git a/vector/src/main/res/values-hu/strings.xml b/vector/src/main/res/values-hu/strings.xml index d886194ee8..0c6558bcc9 100644 --- a/vector/src/main/res/values-hu/strings.xml +++ b/vector/src/main/res/values-hu/strings.xml @@ -2246,10 +2246,10 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró Nem érheted el ezt az üzenetet, mert a feladó nem bízik a munkamenetedben Nem érheted el ezt az üzenetet, mert a feladó szándékosan nem küldte el a kulcsokat Várakozás a titkosítási előzményekre - A Riot mostantól Element! - Örömmel jelentjük be, hogy nevet változtattunk! Az alkalmazás naprakész, és be vagy jelentkezve a fiókodba. - ÉRTEM - TOVÁBBI INFORMÁCIÓK + A Riot mostantól Element! + Örömmel jelentjük be, hogy nevet változtattunk! Az alkalmazás naprakész, és be vagy jelentkezve a fiókodba. + ÉRTEM + TOVÁBBI INFORMÁCIÓK Helyreállítási kulcs mentése ide: Hozzáadás a telefonkönyvemből A telefonkönyved üres diff --git a/vector/src/main/res/values-it/strings.xml b/vector/src/main/res/values-it/strings.xml index 71657131dd..3eaa8bdd51 100644 --- a/vector/src/main/res/values-it/strings.xml +++ b/vector/src/main/res/values-it/strings.xml @@ -2352,10 +2352,10 @@ Non puoi accedere a questo messaggio perché la tua sessione non è fidata dal mittente Non puoi accedere a questo messaggio perché il mittente non ha inviato le chiavi di proposito In attesa della cronologia di crittografia - Riot ora si chiama Element! - Siamo entusiasti di annunciare che abbiamo cambiato nome! La tua app è aggiornata e hai fatto l\'accesso al tuo account. - CAPITO - MAGGIORI INFO + Riot ora si chiama Element! + Siamo entusiasti di annunciare che abbiamo cambiato nome! La tua app è aggiornata e hai fatto l\'accesso al tuo account. + CAPITO + MAGGIORI INFO Salva chiave di ripristino in Aggiungi dalla mia rubrica La tua rubrica è vuota diff --git a/vector/src/main/res/values-iw/strings.xml b/vector/src/main/res/values-iw/strings.xml index 9f7299b8b2..c477b5c147 100644 --- a/vector/src/main/res/values-iw/strings.xml +++ b/vector/src/main/res/values-iw/strings.xml @@ -2281,10 +2281,10 @@ ספר הטלפונים שלך ריק הוסף מפנקס הטלפונים שלי שמור מפתח שחזור פנימה - למד עוד - הבנת - אנו שמחים לבשר ששינינו שם! האפליקציה שלך מעודכנת ואתה מחובר לחשבונך. - Riot היא עכשיו Element! + למד עוד + הבנת + אנו שמחים לבשר ששינינו שם! האפליקציה שלך מעודכנת ואתה מחובר לחשבונך. + Riot היא עכשיו Element! ממתין להיסטוריית הצפנה אינך יכול לגשת להודעה זו מכיוון שהשולח בכוונה לא שלח את המפתחות אינך יכול לגשת להודעה זו מכיוון שהשולח אינו מהימן על ההפעלה שלך diff --git a/vector/src/main/res/values-kab/strings.xml b/vector/src/main/res/values-kab/strings.xml index cf54619343..8725bb9f91 100644 --- a/vector/src/main/res/values-kab/strings.xml +++ b/vector/src/main/res/values-kab/strings.xml @@ -600,7 +600,7 @@ Sbadu tafyirt taɣelsant Sekles tasarut-ik·im n tɣellist Isem n texxamt - Tura, Riot d aferdis! + Tura, Riot d aferdis! Sefesex tinnubga Amtawi… Timesliwt i yineḍruyen @@ -949,8 +949,8 @@ Tafyirt n tɣellist Asentel Ur yezmir ara ad yekkes awgelhen - AWI-T - ISSIN UGAR + AWI-T + ISSIN UGAR Sekles tasarut n tririt deg Rnu seg yidles n tiliɣri Idles-ik·im n tiliɣri d ilem @@ -1305,7 +1305,7 @@ Ur tezmireḍ ara ad tkecmeḍ ɣer yizen-a acku tettusweḥleḍ sɣur amazan Ur tezmireḍ ara ad tkecmeḍ ɣer yizen-a acku tiɣimit-ik·im ur tt-yeḍmin ara umazan Ur tezmire ara ad tkecmeḍ ɣer yizen-a acku amazan iɛemmed ur d-yuzin ara tisura - S tumert meqqren ara ak-d-nini nbeddel isem! Asnas-ik·im yettwaleqqem, ha-t-an tkecmeḍ ɣer umiḍan-ik·im. + S tumert meqqren ara ak-d-nini nbeddel isem! Asnas-ik·im yettwaleqqem, ha-t-an tkecmeḍ ɣer umiḍan-ik·im. Uṭṭun-a n tilifun yettusbadu yakan. Awal-ik·im uffir yettuwennez. \n diff --git a/vector/src/main/res/values-nb-rNO/strings.xml b/vector/src/main/res/values-nb-rNO/strings.xml index 1b1d538fd4..a4fd61011d 100644 --- a/vector/src/main/res/values-nb-rNO/strings.xml +++ b/vector/src/main/res/values-nb-rNO/strings.xml @@ -850,8 +850,8 @@ Rommets navn Emne Kan ikke dekryptere - SKJØNNER - LÆR MER + SKJØNNER + LÆR MER Telefonkatalogen din er tom Telefonkatalog Søk i mine kontakter @@ -921,8 +921,8 @@ Du får ikke tilgang til denne meldingen fordi økten ikke er klarert av avsenderen Du får ikke tilgang til denne meldingen fordi avsenderen med vilje ikke sendte nøklene Venter på krypteringshistorikk - Riot er nå Element! - Vi er glade for å kunngjøre at vi har byttet navn! Appen din er oppdatert, og du er logget på kontoen din. + Riot er nå Element! + Vi er glade for å kunngjøre at vi har byttet navn! Appen din er oppdatert, og du er logget på kontoen din. Lagre gjenopprettingsnøkkel i Henter kontaktene dine… Kontaktboken din er tom diff --git a/vector/src/main/res/values-pl/strings.xml b/vector/src/main/res/values-pl/strings.xml index 1edf1a3c9c..02547d02b1 100644 --- a/vector/src/main/res/values-pl/strings.xml +++ b/vector/src/main/res/values-pl/strings.xml @@ -1905,9 +1905,9 @@ Spróbuj uruchomić ponownie aplikację. Twoja książka telefoniczna jest pusta Dodaj z mojej książki telefonicznej Zapisz klucz odzyskiwania w - DOWIEDZ SIĘ WIĘCEJ - Jesteśmy podekscytowani mogąc oznajmić, że zmieniliśmy nazwę! Twoja aplikacja jest aktualna i jesteś zalogowany(-a) do swojego konta. - Riot nazywa się teraz Element! + DOWIEDZ SIĘ WIĘCEJ + Jesteśmy podekscytowani mogąc oznajmić, że zmieniliśmy nazwę! Twoja aplikacja jest aktualna i jesteś zalogowany(-a) do swojego konta. + Riot nazywa się teraz Element! Nie masz dostępu do tej wiadomości ponieważ nadawca celowo nie wysłał jej kluczy Nie masz dostępu do tej wiadomości ponieważ nadawca nie ufa Twojej sesji Nie masz dostępu do tej wiadomości ponieważ zostałeś zablokowany przez jej nadawcę @@ -2268,7 +2268,7 @@ Spróbuj uruchomić ponownie aplikację. Wykorzystaj ten %1$s jako zabezpieczenie na wypadek utraty %2$s. Konfigurowanie odzyskiwania. Nie zweryfikujesz %1$s (%2$s) jeżeli przerwiesz w tym momencie. Zacznij ponownie w ich profilu użytkownika. - ROZUMIEM + ROZUMIEM Zapisz swój Klucz Bezpieczeństwa Fraza Bezpieczeństwa Ustaw Frazę Bezpieczeństwa diff --git a/vector/src/main/res/values-pt-rBR/strings.xml b/vector/src/main/res/values-pt-rBR/strings.xml index ddbb39a8b6..d6745b5e86 100644 --- a/vector/src/main/res/values-pt-rBR/strings.xml +++ b/vector/src/main/res/values-pt-rBR/strings.xml @@ -2359,10 +2359,10 @@ Você não pode acessar esta mensagem porque a sessão não foi definida como confiável pelo remetente Você não pode acessar esta mensagem porque o remetente intencionalmente não enviou as chaves Aguardando o histórico de criptografia - Riot agora é Element! - Estamos felizes em anunciar que mudamos de nome! Seu aplicativo está atualizado e você está conectado à sua conta. - OK, ENTENDI - APRENDA MAIS + Riot agora é Element! + Estamos felizes em anunciar que mudamos de nome! Seu aplicativo está atualizado e você está conectado à sua conta. + OK, ENTENDI + APRENDA MAIS Salvar chave de recuperação em Adicionar da minha lista de contatos Sua lista de contatos está vazia diff --git a/vector/src/main/res/values-ru/strings.xml b/vector/src/main/res/values-ru/strings.xml index 3266a039af..e2e81e13f6 100644 --- a/vector/src/main/res/values-ru/strings.xml +++ b/vector/src/main/res/values-ru/strings.xml @@ -2424,10 +2424,10 @@ Нет доступа к этому сообщению, так как отправитель не доверяет вашей сессии Вы не можете получить доступ к этому сообщению, потому что отправитель намеренно не отправил ключи Ожидание истории шифрования - Riot теперь Element! - Мы рады сообщить, что сменили имя! Ваше приложение обновлено, и вы вошли в свою учетную запись. - ПОНЯТНО - УЗНАТЬ БОЛЬШЕ + Riot теперь Element! + Мы рады сообщить, что сменили имя! Ваше приложение обновлено, и вы вошли в свою учетную запись. + ПОНЯТНО + УЗНАТЬ БОЛЬШЕ Сохранить ключ восстановления в Добавить из моей телефонной книги Ваша телефонная книга пуста diff --git a/vector/src/main/res/values-sq/strings.xml b/vector/src/main/res/values-sq/strings.xml index 127a5cb3cd..03045e3885 100644 --- a/vector/src/main/res/values-sq/strings.xml +++ b/vector/src/main/res/values-sq/strings.xml @@ -2329,10 +2329,10 @@ S’mund të hapni këtë mesazh, ngaqë sesionit tuaj nuk i zihet besë nga dërguesi S’mund ta hapni këtë mesazh, ngaqë dërguesi qëllimisht nuk ju dërgoi kyçet Po pritet për historik fshehtëzimesh - Riot-i tanimë quhet Element! - Jemi të ngazëllyer t’ju njoftojmë se kemi ndërruar emër! Aplikacioni juaj është i përditësuar dhe jeni i futur në llogarinë tuaj. - E MORA VESH - MËSONI MË TEPËR + Riot-i tanimë quhet Element! + Jemi të ngazëllyer t’ju njoftojmë se kemi ndërruar emër! Aplikacioni juaj është i përditësuar dhe jeni i futur në llogarinë tuaj. + E MORA VESH + MËSONI MË TEPËR Ruaje kyçin e rimarrjeve te Shto prej numëratorit tim telefonik Numëratori juaj telefonik është i zbrazët diff --git a/vector/src/main/res/values-sv/strings.xml b/vector/src/main/res/values-sv/strings.xml index a514d3450a..a750521f9b 100644 --- a/vector/src/main/res/values-sv/strings.xml +++ b/vector/src/main/res/values-sv/strings.xml @@ -2316,10 +2316,10 @@ Du ändrade rumsinställningarna framgångsrikt Kan inte avkryptera Väntar på krypteringshistorik - Riot är nu Element! - Vi är glada att meddela att vi har bytt namn! Din app är uppdaterad och du är inloggad på ditt konto. - UPPFATTAT - LÄR DIG MER + Riot är nu Element! + Vi är glada att meddela att vi har bytt namn! Din app är uppdaterad och du är inloggad på ditt konto. + UPPFATTAT + LÄR DIG MER Spara återställningsnyckel i Lägg till från min telefonbok Din telefonbok är tom diff --git a/vector/src/main/res/values-uk/strings.xml b/vector/src/main/res/values-uk/strings.xml index 1ae0223a8a..09aafac703 100644 --- a/vector/src/main/res/values-uk/strings.xml +++ b/vector/src/main/res/values-uk/strings.xml @@ -1316,7 +1316,7 @@ Дізнатись більше Безпека Безпека та приватність - Ми раді повідомити, що змінили назву! Ваш застосунок оновлено й ви ввійшли у свій обліковий запис. + Ми раді повідомити, що змінили назву! Ваш застосунок оновлено й ви ввійшли у свій обліковий запис. Зміну параля ще не завершено. \n \nЗупинити змінювання пароля\? diff --git a/vector/src/main/res/values-zh-rCN/strings.xml b/vector/src/main/res/values-zh-rCN/strings.xml index 89223bf9dd..92f6c849ef 100644 --- a/vector/src/main/res/values-zh-rCN/strings.xml +++ b/vector/src/main/res/values-zh-rCN/strings.xml @@ -2210,10 +2210,10 @@ 您无法访问此消息因为您的会话不被发送者信任 您无法访问此消息因为发送者有意不发送密钥 正在等待加密历史 - Riot 现在是 Element! - 我们兴奋地宣布我们改名了!您的应用已经是最新的并且您已登入您的帐户。 - 明白了 - 了解更多 + Riot 现在是 Element! + 我们兴奋地宣布我们改名了!您的应用已经是最新的并且您已登入您的帐户。 + 明白了 + 了解更多 将恢复密钥保存到 从我的电话簿添加 您的电话簿是空的 diff --git a/vector/src/main/res/values-zh-rTW/strings.xml b/vector/src/main/res/values-zh-rTW/strings.xml index 96e06d07ef..f67585eb1e 100644 --- a/vector/src/main/res/values-zh-rTW/strings.xml +++ b/vector/src/main/res/values-zh-rTW/strings.xml @@ -2248,10 +2248,10 @@ 您無法存取此訊息,因為您的工作階段未被傳送者所信任 您無法存取此訊息,因為傳送者刻意未傳送金鑰 正在等待加密歷史 - Riot 現在是 Element 了! - 我們很高興地我們已變更名稱!您的應用程式是最新的,而您也登入了您的帳號。 - 知道了 - 取得更多資訊 + Riot 現在是 Element 了! + 我們很高興地我們已變更名稱!您的應用程式是最新的,而您也登入了您的帳號。 + 知道了 + 取得更多資訊 儲存復原金鑰於 從我的電話簿新增 您的電話簿是空的 diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index 259a63eb99..a741997393 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -3084,10 +3084,10 @@ You cannot access this message because the sender purposely did not send the keys Waiting for encryption history - Riot is now Element! - We’re excited to announce we’ve changed name! Your app is up to date and you’re signed in to your account. - GOT IT - LEARN MORE + Riot is now Element! + We’re excited to announce we’ve changed name! Your app is up to date and you’re signed in to your account. + GOT IT + LEARN MORE Save recovery key in From 035c10364db5ec15916f37b006287283b4e07bb0 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 3 Mar 2021 17:58:28 +0100 Subject: [PATCH 185/578] Template for not translatable string --- vector/src/main/res/values/donottranslate.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vector/src/main/res/values/donottranslate.xml b/vector/src/main/res/values/donottranslate.xml index ccafa41c9b..d22391ed8c 100755 --- a/vector/src/main/res/values/donottranslate.xml +++ b/vector/src/main/res/values/donottranslate.xml @@ -12,6 +12,6 @@ # - Not implemented yet in Element + Not implemented yet in ${app_name} From 7eec98ea23cf36cb0dd77a9ba210e1f56ff62b56 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 3 Mar 2021 18:08:05 +0100 Subject: [PATCH 186/578] Ensure we will not use the template string by mistake --- tools/check/forbidden_strings_in_code.txt | 3 +++ tools/check/forbidden_strings_in_resources.txt | 3 +++ 2 files changed, 6 insertions(+) diff --git a/tools/check/forbidden_strings_in_code.txt b/tools/check/forbidden_strings_in_code.txt index 9d22f882c6..98c49d6549 100644 --- a/tools/check/forbidden_strings_in_code.txt +++ b/tools/check/forbidden_strings_in_code.txt @@ -175,3 +175,6 @@ PreferenceManager\.getDefaultSharedPreferences==2 ### Use ViewBindings # findViewById + +### Do not use `template_` string. Please remove the prefix `template_` to use the generated resource instead. +R\.string\.template_ \ No newline at end of file diff --git a/tools/check/forbidden_strings_in_resources.txt b/tools/check/forbidden_strings_in_resources.txt index 6fb6b184ba..cefeeb6351 100644 --- a/tools/check/forbidden_strings_in_resources.txt +++ b/tools/check/forbidden_strings_in_resources.txt @@ -40,6 +40,9 @@ android\:summary=\"[^@|\%s] app\:ms_floatingLabelText=\"[^@] app\:ms_hint=\"[^@] +### Do not use `template_` string. Please remove the prefix `template_` to use the generated resource instead. +\"@string/template_ + ### "DO NOT COMMIT" has been committed DO NOT COMMIT From f3e0060195937e0fd1e8512192a590e8519e8eb8 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 3 Mar 2021 18:16:36 +0100 Subject: [PATCH 187/578] Fix lint issue --- vector/src/main/res/values-sk/strings.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/vector/src/main/res/values-sk/strings.xml b/vector/src/main/res/values-sk/strings.xml index 6b47a2a536..e32f6906ec 100644 --- a/vector/src/main/res/values-sk/strings.xml +++ b/vector/src/main/res/values-sk/strings.xml @@ -56,8 +56,7 @@ %1$s a 1 ďalší %1$s a %2$d ďalší - %1$s a %2$d ďalších - + %1$s a %2$d ďalších %s aktualizoval/a túto miestnosť. Odstránená správa From c00a95d63934f21a68e0dc3220c2e86790193085 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 3 Mar 2021 18:17:09 +0100 Subject: [PATCH 188/578] Ignore missing translation and error for typos --- vector/lint.xml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/vector/lint.xml b/vector/lint.xml index 28da13ca8d..1c9e14a3cd 100644 --- a/vector/lint.xml +++ b/vector/lint.xml @@ -3,7 +3,7 @@ - + @@ -65,6 +65,5 @@ - - + From 68364e0a8214985f951dafc44dd1c01fa50f0e93 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 3 Mar 2021 18:50:21 +0100 Subject: [PATCH 189/578] Fix test compilation issue --- .../android/sdk/common/CommonTestHelper.kt | 34 +++++++++------- .../TestRoomDisplayNameFallbackProvider.kt | 40 +++++++++++++++++++ 2 files changed, 60 insertions(+), 14 deletions(-) create mode 100644 matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/TestRoomDisplayNameFallbackProvider.kt diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/CommonTestHelper.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/CommonTestHelper.kt index c677d91f0a..287a4233d9 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/CommonTestHelper.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/CommonTestHelper.kt @@ -19,6 +19,15 @@ package org.matrix.android.sdk.common import android.content.Context import android.net.Uri import androidx.lifecycle.Observer +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.withTimeout +import org.junit.Assert.assertEquals +import org.junit.Assert.assertNotNull +import org.junit.Assert.assertTrue import org.matrix.android.sdk.api.Matrix import org.matrix.android.sdk.api.MatrixCallback import org.matrix.android.sdk.api.MatrixConfiguration @@ -34,15 +43,6 @@ import org.matrix.android.sdk.api.session.room.timeline.Timeline import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent import org.matrix.android.sdk.api.session.room.timeline.TimelineSettings import org.matrix.android.sdk.api.session.sync.SyncState -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.GlobalScope -import kotlinx.coroutines.delay -import kotlinx.coroutines.launch -import kotlinx.coroutines.runBlocking -import kotlinx.coroutines.withTimeout -import org.junit.Assert.assertEquals -import org.junit.Assert.assertNotNull -import org.junit.Assert.assertTrue import java.util.ArrayList import java.util.UUID import java.util.concurrent.CountDownLatch @@ -59,7 +59,13 @@ class CommonTestHelper(context: Context) { fun getTestInterceptor(session: Session): MockOkHttpInterceptor? = TestNetworkModule.interceptorForSession(session.sessionId) as? MockOkHttpInterceptor init { - Matrix.initialize(context, MatrixConfiguration("TestFlavor")) + Matrix.initialize( + context, + MatrixConfiguration( + applicationFlavor = "TestFlavor", + roomDisplayNameFallbackProvider = TestRoomDisplayNameFallbackProvider() + ) + ) matrix = Matrix.getInstance(context) } @@ -385,8 +391,8 @@ fun List.checkSendOrder(baseTextMessage: String, numberOfMessages return drop(startIndex) .take(numberOfMessages) .foldRightIndexed(true) { index, timelineEvent, acc -> - val body = timelineEvent.root.content.toModel()?.body - val currentMessageSuffix = numberOfMessages - index - acc && (body == null || body.startsWith(baseTextMessage) && body.endsWith("#$currentMessageSuffix")) - } + val body = timelineEvent.root.content.toModel()?.body + val currentMessageSuffix = numberOfMessages - index + acc && (body == null || body.startsWith(baseTextMessage) && body.endsWith("#$currentMessageSuffix")) + } } diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/TestRoomDisplayNameFallbackProvider.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/TestRoomDisplayNameFallbackProvider.kt new file mode 100644 index 0000000000..f50e8a8a73 --- /dev/null +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/TestRoomDisplayNameFallbackProvider.kt @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2021 New Vector Ltd + * + * 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. + */ + +package org.matrix.android.sdk.common + +import org.matrix.android.sdk.api.RoomDisplayNameFallbackProvider + +class TestRoomDisplayNameFallbackProvider() : RoomDisplayNameFallbackProvider { + + override fun getNameForRoomInvite() = + "Room invite" + + override fun getNameForEmptyRoom() = + "Empty room" + + override fun getNameFor2members(name1: String?, name2: String?) = + "$name1 and $name2" + + override fun getNameFor3members(name1: String?, name2: String?, name3: String?) = + "$name1, $name2 and $name3" + + override fun getNameFor4members(name1: String?, name2: String?, name3: String?, name4: String?) = + "$name1, $name2, $name3 and $name4" + + override fun getNameFor4membersAndMore(name1: String?, name2: String?, name3: String?, remainingCount: Int) = + "$name1, $name2, $name3 and $remainingCount others" +} From b842e62563ae290987b25a58b55f13f60bab9f50 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 3 Mar 2021 19:35:46 +0100 Subject: [PATCH 190/578] Ignore lint issue in generated resource file from templates --- vector/lint.xml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/vector/lint.xml b/vector/lint.xml index 1c9e14a3cd..1f964412b9 100644 --- a/vector/lint.xml +++ b/vector/lint.xml @@ -66,4 +66,12 @@ + + + + + From 915295efc07a4dbdab7fc5e7b46edb7b289c9bf2 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 3 Mar 2021 19:36:39 +0100 Subject: [PATCH 191/578] Import SAS strings --- .../src/main/res/values-ar/strings_sas.xml | 68 +++++++++++++++++++ .../src/main/res/values-cs/strings_sas.xml | 68 +++++++++++++++++++ .../src/main/res/values-de/strings_sas.xml | 10 +-- .../src/main/res/values-es/strings_sas.xml | 15 ++++ .../src/main/res/values-hr/strings_sas.xml | 68 +++++++++++++++++++ .../src/main/res/values-si/strings_sas.xml | 8 +++ .../src/main/res/values-sr/strings_sas.xml | 68 +++++++++++++++++++ .../src/main/res/values-szl/strings_sas.xml | 4 ++ 8 files changed, 304 insertions(+), 5 deletions(-) create mode 100644 matrix-sdk-android/src/main/res/values-ar/strings_sas.xml create mode 100644 matrix-sdk-android/src/main/res/values-cs/strings_sas.xml create mode 100644 matrix-sdk-android/src/main/res/values-hr/strings_sas.xml create mode 100644 matrix-sdk-android/src/main/res/values-si/strings_sas.xml create mode 100644 matrix-sdk-android/src/main/res/values-sr/strings_sas.xml create mode 100644 matrix-sdk-android/src/main/res/values-szl/strings_sas.xml diff --git a/matrix-sdk-android/src/main/res/values-ar/strings_sas.xml b/matrix-sdk-android/src/main/res/values-ar/strings_sas.xml new file mode 100644 index 0000000000..423a8332bf --- /dev/null +++ b/matrix-sdk-android/src/main/res/values-ar/strings_sas.xml @@ -0,0 +1,68 @@ + + + + كَلب + هِرَّة + أَسَد + حِصَان + حِصَانٌ بِقَرن + خِنزِير + فِيل + أَرنَب + باندَا + دِيك + بِطريق + سُلحفاة + سَمَكَة + أُخطُبُوط + فَرَاشَة + زَهرَة + شَجَرَة + صبار + فُطر + كُرَةٌ أرضِيَّة + قَمَر + سَحابَة + نار + مَوزَة + تُفَّاحَة + فَراوِلَة + ذُرَة + بِيتزا + كَعكَة + قَلب + اِبتِسَامَة + رُوبُوت + قُبَّعَة + نَظَّارَة + مِفتَاحُ رَبط + سانتا + رَفعُ إِبهَام + مِظَلَّة + سَاعَةٌ رَملِيَّة + سَاعَة + هَدِيَّة + مِصبَاح + كِتَاب + قَلَمُ رَصاص + مِشبَكُ وَرَق + مِقَصّ + قُفل + مِفتَاح + مِطرَقَة + تِلِفُون + عَلَم + قِطَار + دَرّاجَة + طَائِرة + صَارُوخ + كَأسُ النَّصر + كُرَة + غيتار + بُوق + جَرَس + مِرسَاة + سَمّاعَة رَأس + مُجَلَّد + دَبُّوس + diff --git a/matrix-sdk-android/src/main/res/values-cs/strings_sas.xml b/matrix-sdk-android/src/main/res/values-cs/strings_sas.xml new file mode 100644 index 0000000000..1ef9d56f60 --- /dev/null +++ b/matrix-sdk-android/src/main/res/values-cs/strings_sas.xml @@ -0,0 +1,68 @@ + + + + Pes + Kočka + Lev + Kůň + Jednorožec + Prase + Slon + Králík + Panda + Kohout + Tučňák + Želva + Ryba + Chobotnice + Motýl + Květina + Strom + Kaktus + Houba + Zeměkoule + Měsíc + Mrak + Oheň + Banán + Jablko + Jahoda + Kukuřice + Pizza + Dort + Srdce + Smajlík + Robot + Klobouk + Brýle + Klíč + Mikuláš + Palec nahoru + Deštník + Přesýpací hodiny + Hodiny + Dárek + Žárovka + Kniha + Tužka + Sponka + Nůžky + Zámek + Klíč + Kladivo + Telefon + Vlajka + Vlak + Kolo + Letadlo + Raketa + Pohár + Míč + Kytara + Trumpeta + Zvonek + Kotva + Sluchátka + Složka + Špendlík + diff --git a/matrix-sdk-android/src/main/res/values-de/strings_sas.xml b/matrix-sdk-android/src/main/res/values-de/strings_sas.xml index 108dedd1a5..be75f797f9 100644 --- a/matrix-sdk-android/src/main/res/values-de/strings_sas.xml +++ b/matrix-sdk-android/src/main/res/values-de/strings_sas.xml @@ -27,20 +27,20 @@ Banane Apfel Erdbeere - Korn + Mais Pizza Kuchen Herz - Smiley + Lächeln Roboter Hut Brille Schraubenschlüssel - Nikolaus + Weihnachtsmann Daumen Hoch Regenschirm Sanduhr - Wecker + Uhr Geschenk Glühbirne Buch @@ -56,7 +56,7 @@ Fahrrad Flugzeug Rakete - Trophäe + Pokal Ball Gitarre Trompete diff --git a/matrix-sdk-android/src/main/res/values-es/strings_sas.xml b/matrix-sdk-android/src/main/res/values-es/strings_sas.xml index fd396c1778..b5f062cb62 100644 --- a/matrix-sdk-android/src/main/res/values-es/strings_sas.xml +++ b/matrix-sdk-android/src/main/res/values-es/strings_sas.xml @@ -36,18 +36,33 @@ Sombrero Gafas Llave inglesa + Papá Noel + Pulgar arriba + Paraguas + Reloj de arena Reloj Regalo + Bombilla Libro Lápiz + Clip + Tijeras + Candado Llave Martillo Telefono + Bandera Tren Bicicleta + Avión + Cohete + Trofeo Bola Guitarra Trompeta Campana + Ancla + Cascos + Carpeta Alfiler diff --git a/matrix-sdk-android/src/main/res/values-hr/strings_sas.xml b/matrix-sdk-android/src/main/res/values-hr/strings_sas.xml new file mode 100644 index 0000000000..423ab20186 --- /dev/null +++ b/matrix-sdk-android/src/main/res/values-hr/strings_sas.xml @@ -0,0 +1,68 @@ + + + + pas + mačka + lav + konj + jednorog + svinja + slon + zec + panda + kokot + pingvin + kornjača + riba + hobotnica + leptir + svijet + drvo + kaktus + gljiva + Globus + mjesec + oblak + vatra + banana + jabuka + jagoda + kukuruza + pizza + torta + srca + smajlića + robot + kapa + naočale + ključ + deda Mraz + palac gore + kišobran + pješčani sat + sat + poklon + žarulja + knjiga + olovka + spajalica + škare + zaključati + ključ + čekić + telefon + zastava + vlak + bicikl + avion + raketa + trofej + lopta + gitara + truba + zvono + sidro + slušalice + mapu + pribadača + diff --git a/matrix-sdk-android/src/main/res/values-si/strings_sas.xml b/matrix-sdk-android/src/main/res/values-si/strings_sas.xml new file mode 100644 index 0000000000..7ea72d2a4d --- /dev/null +++ b/matrix-sdk-android/src/main/res/values-si/strings_sas.xml @@ -0,0 +1,8 @@ + + + + බල්ලා + පූසා + සිංහයා + අශ්වයා + diff --git a/matrix-sdk-android/src/main/res/values-sr/strings_sas.xml b/matrix-sdk-android/src/main/res/values-sr/strings_sas.xml new file mode 100644 index 0000000000..04da7a11f0 --- /dev/null +++ b/matrix-sdk-android/src/main/res/values-sr/strings_sas.xml @@ -0,0 +1,68 @@ + + + + пас + мачка + лав + коњ + једнорог + прасе + слон + зец + панда + петао + пингвин + корњача + риба + октопод + лептир + цвет + дрво + кактус + печурка + глобус + месец + облак + ватра + банана + јабука + јагода + кукуруз + пица + торта + срце + смајли + робот + шешир + наочаре + кључ + деда Мраз + палчић горе + кишобран + пешчаник + сат + поклон + сијалица + књига + оловка + спајалица + маказе + катанац + кључ + чекић + телефон + застава + воз + бицикл + авион + ракета + пехар + лопта + гитара + труба + звоно + сидро + слушалице + фасцикла + чиода + diff --git a/matrix-sdk-android/src/main/res/values-szl/strings_sas.xml b/matrix-sdk-android/src/main/res/values-szl/strings_sas.xml new file mode 100644 index 0000000000..9769ad73ce --- /dev/null +++ b/matrix-sdk-android/src/main/res/values-szl/strings_sas.xml @@ -0,0 +1,4 @@ + + + + From 663fc28cd5f5e8602bce3fe6e5220b959dcbcce9 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 3 Mar 2021 19:51:11 +0100 Subject: [PATCH 192/578] Fix copyright --- .../android/sdk/common/TestRoomDisplayNameFallbackProvider.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/TestRoomDisplayNameFallbackProvider.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/TestRoomDisplayNameFallbackProvider.kt index f50e8a8a73..7a1d4604f0 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/TestRoomDisplayNameFallbackProvider.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/TestRoomDisplayNameFallbackProvider.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 New Vector Ltd + * Copyright (c) 2021 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From 0b5135b841f8642a4bcad1745e6928d8f3e3dcde Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Feb 2021 12:35:52 +0100 Subject: [PATCH 193/578] Add a script to download and install APK from Buildkite --- CHANGES.md | 1 + tools/install/androidSelectDevice.sh | 116 ++++++++++++++++++ tools/install/installFromBuildkite.sh | 79 ++++++++++++ tools/release/download_buildkite_artifacts.py | 6 +- 4 files changed, 200 insertions(+), 2 deletions(-) create mode 100755 tools/install/androidSelectDevice.sh create mode 100755 tools/install/installFromBuildkite.sh diff --git a/CHANGES.md b/CHANGES.md index 8692a2cff8..cdd8b09b56 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -24,6 +24,7 @@ SDK API changes ⚠️: Build 🧱: - Update a lot of dependencies, with the help of dependabot. + - Add a script to download and install APK from the CI Test: - diff --git a/tools/install/androidSelectDevice.sh b/tools/install/androidSelectDevice.sh new file mode 100755 index 0000000000..d04afb70e1 --- /dev/null +++ b/tools/install/androidSelectDevice.sh @@ -0,0 +1,116 @@ +#! /bin/bash +#===================================================================== +# Selects an android device +# Copyright (C) 2012-2020 Diego Torres Milano. All rights reserved. +# +# See: +# - http://dtmilano.blogspot.ca/2013/01/android-select-device.html +# - http://dtmilano.blogspot.ca/2012/03/selecting-adb-device.html +# for details on usage. +#===================================================================== + +# BMA: GIST FROM https://gist.github.com/dtmilano/4537110 + +get_adb_devices() { + adb $ADB_SERVER devices $LONG 2>&1 | tail -n +2 | sed '/^$/d' +} + +git_pull() { + [[ "$UNAME" == 'Linux' ]] && OPT=-e + ASD=$(readlink $OPT $0) + if [[ -n "$ASD" ]] + then + DIR=$(dirname $ASD) + if [[ -n "$DIR" && -d "$DIR/.git" ]] + then + (cd $DIR && git pull) + fi + fi +} + +PROGNAME=$(basename $0) +VERSION="3.3.0" +UNAME=$(uname) +DEVICE_OPT= +LONG= +ADB_SERVER= + +git_pull > /dev/null + +for opt in "$@" +do + case "$opt" in + -d|-e|-s|-t) + DEVICE_OPT=$opt + ;; + + -l|--long) + LONG=-l + ;; + + start-server|kill-server|connect|pair|-help) + exit 0 + ;; + + -V|--version) + echo "$PROGNAME version $VERSION" + exit 0 + ;; + esac +done +[ -n "$DEVICE_OPT" ] && exit 0 +DEV=$(get_adb_devices) +if [ -z "$DEV" ] +then + echo "$PROGNAME: ERROR: There's no locally connected devices." >&2 + read -p "Do you want to connect to a remote adb server? [Y/n]: " REPLY + case "$REPLY" in + n|N) + exit 1 + ;; + + y|Y|"") + read -p "ADB server IP: " IP + ADB_SERVER="-H $IP" + DEV=$(get_adb_devices) + ;; + esac +elif echo "$DEV" | grep -q 'daemon started successfully' +then + # try again + DEV=$(get_adb_devices) +fi +N=$(echo "$DEV" | wc -l | sed 's/ //g') + +case $N in +1) + # only one device detected + D=$DEV + ;; + +*) + # more than one device detected + OLDIFS=$IFS + IFS=" +" + PS3="Select the device to use, to quit: " + select D in $DEV + do + [ "$REPLY" = 'q' -o "$REPLY" = 'Q' ] && exit 2 + [ -n "$D" ] && break + done < /dev/tty + + IFS=$OLDIFS + ;; +esac + +if [ -z "$D" ] +then + echo "$PROGNAME: ERROR: target device couldn't be determined" >&2 + exit 1 +fi + +# this didn't work on Darwin +# echo "-s ${D%% *}" +### BMA Modified printf -- '-s %s\n' "$(echo ${D} | sed 's/ .*$//')" +printf -- '%s' "$(echo ${D} | sed 's/ .*$//')" diff --git a/tools/install/installFromBuildkite.sh b/tools/install/installFromBuildkite.sh new file mode 100755 index 0000000000..e47902e31b --- /dev/null +++ b/tools/install/installFromBuildkite.sh @@ -0,0 +1,79 @@ +#!/usr/bin/env bash + +# Exit on any error +set -e + +if [[ "$#" -ne 1 ]]; then + echo "Usage: $0 BUILDKITE_TOKEN" >&2 + exit 1 +fi + +buildkiteToken=$1 + +# Path where the app is cloned (it's where this project has been cloned) +appPath=$(dirname $(dirname $(dirname $0))) +# Path where the APK will be downloaded from Buildkite (it's a dir) +baseImportPath="${appPath}/tmp/DebugApks" + +# Select device +serialNumber=$(${appPath}/tools/install/androidSelectDevice.sh) + +# Detect device architecture + +arch=$(adb -s ${serialNumber} shell getprop ro.product.cpu.abi) + +# FDroid or Gplay ? +echo +read -p "fdroid or gplay (default to gplay)? " fdroidOrGplay +fdroidOrGplay=${fdroidOrGplay:-gplay} + +echo +echo "Will install ${fdroidOrGplay} version on device ${serialNumber} with arch ${arch}" + +# Buildkite build number +echo +read -p "Buildkite build number (ex: '1792')? " buildkiteBuildNumber + +# Download files + +targetPath=${baseImportPath}/${buildkiteBuildNumber} + +filename="vector-${fdroidOrGplay}-${arch}-debug.apk" + +fullApkPath="${targetPath}/${filename}" + +# Check if file already exists +if test -f "$fullApkPath"; then + read -p "$fullApkPath already exists. Override (yes/no) default to no ? " download + download=${download:-no} +else + download="yes" +fi + +# Ignore error from now +set +e + +if [ ${download} == "yes" ]; then + echo "Downloading ${filename}..." + python3 ${appPath}/tools/release/download_buildkite_artifacts.py \ + --token ${buildkiteToken} \ + --build ${buildkiteBuildNumber} \ + --directory ${targetPath} \ + --filename ${filename} \ + --ignoreErrors +fi + +echo "Installing ${filename} to device ${serialNumber}..." +adb -s ${serialNumber} install -r ${fullApkPath} + +# Check error and propose to uninstall and retry installing +if [[ "$?" -ne 0 ]]; then + read -p "Error, do you want to uninstall the application then retry (yes/no) default to no ? " retry + retry=${retry:-no} + if [ ${retry} == "yes" ]; then + echo "Uninstalling..." + adb -s ${serialNumber} uninstall im.vector.app.debug + echo "Installing again..." + adb -s ${serialNumber} install -r ${fullApkPath} + fi +fi diff --git a/tools/release/download_buildkite_artifacts.py b/tools/release/download_buildkite_artifacts.py index cd1abecfa5..7a824be806 100755 --- a/tools/release/download_buildkite_artifacts.py +++ b/tools/release/download_buildkite_artifacts.py @@ -81,7 +81,9 @@ base_url = "https://api.buildkite.com/v2/organizations/%s/pipelines/%s/builds/%s buildkite_build_state_url = base_url -print("Getting build state of project %s/%s build %s" % (ORG_SLUG, PIPELINE_SLUG, build_str)) +buildkite_url = "https://buildkite.com/%s/%s/builds/%s" % (ORG_SLUG, PIPELINE_SLUG, build_str) + +print("Getting build state of project %s/%s build %s (%s)" % (ORG_SLUG, PIPELINE_SLUG, build_str, buildkite_url)) if args.verbose: print("Url: %s" % buildkite_build_state_url) @@ -141,7 +143,7 @@ else: targetDir = args.directory if not args.simulate: - os.mkdir(targetDir) + os.makedirs(targetDir, exist_ok=True) for elt in data: if args.verbose: From 766a5d7c84f5f9d92d04ca12c05ad581619bc8ce Mon Sep 17 00:00:00 2001 From: "Auri B. P" Date: Wed, 3 Mar 2021 23:30:44 +0000 Subject: [PATCH 194/578] Translated using Weblate (Catalan) Currently translated at 98.5% (2317 of 2352 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/ca/ --- vector/src/main/res/values-ca/strings.xml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/vector/src/main/res/values-ca/strings.xml b/vector/src/main/res/values-ca/strings.xml index 850ef255bf..95233b9aea 100644 --- a/vector/src/main/res/values-ca/strings.xml +++ b/vector/src/main/res/values-ca/strings.xml @@ -2675,4 +2675,24 @@ %s ha posat la trucada en espera Continua Torna + Vídeo + Alguns missatges no s\'han enviat + Imatge + Importa clau des d\'un fitxer + Captura de pantalla + + %d entrada + %d entrades + + Límit desconegut. + Versió del servidor + Nom del servidor + Configuració de sala + Abandonar conferència actual i anar a l\'altra\? + Versió de sala + Nou valor + Sincronització inicial: +\nBaixant dades… + Sincronització inicial: +\nEsperant resposta del servidor… \ No newline at end of file From 8d91140107691f5cf7751ef8beac7efcff5ff80c Mon Sep 17 00:00:00 2001 From: waclaw66 Date: Thu, 4 Mar 2021 06:07:53 +0000 Subject: [PATCH 195/578] Translated using Weblate (Czech) Currently translated at 100.0% (2352 of 2352 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/cs/ --- vector/src/main/res/values-cs/strings.xml | 56 +++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/vector/src/main/res/values-cs/strings.xml b/vector/src/main/res/values-cs/strings.xml index 4c2e939948..ce53fb3617 100644 --- a/vector/src/main/res/values-cs/strings.xml +++ b/vector/src/main/res/values-cs/strings.xml @@ -2657,4 +2657,60 @@ Přidržet Pokračovat Návrat + Obsah události + Stavová událost byla odeslána! + Událost odeslána! + Poškozená událost + Chybí typ zprávy + Žádný obsah + Obsah události + Stavový klíč + Typ + Odeslat vlastní stavovou událost + Upravit obsah + Stavové události + Odeslat stavovou událost + Odeslat vlastní událost + Prozkoumejte stav místnosti + Vývojové nástroje + Zobrazit potvrzení o přečtení + Neupozorňovat + Upozornit bez zvuku + Upozornit zvukem + Zpráva nebyla odeslána z důvodu chyby + Zkontrolováno + Zavřít výběr emoji + Úvodní synchronizace: +\nČekání na odpověď serveru… + Otevřít výběr emoji + Důvěryhodná úroveň důvěryhodnosti + Úroveň důvěryhodnosti varování + Výchozí úroveň důvěryhodnosti + Vybrané + Video + Tato místnost má neodeslaný koncept + Některé zprávy nebyly odeslány + Smazat avatar + Změnit avatar + Obrázek + Importovat klíč ze souboru + Otevřít widgety + Snímek obrazovky + + %d položka + %d položky + %d položek + + Limit není znám. + Váš domovský server přijímá přílohy (soubory, média atd.) o velikosti až %s. + Limit nahrávání souborů na server + Verze serveru + Název serveru + Nastavení místnosti + Opustit aktuální konferenci a přepnout na jinou\? + Verze místnosti + Nová hodnota + Přepnout + Úvodní synchronizace: +\nStahuji data… \ No newline at end of file From 6286c426e24c3bbe391012c5f3678cab410d00fb Mon Sep 17 00:00:00 2001 From: LinAGKar Date: Wed, 3 Mar 2021 21:43:00 +0000 Subject: [PATCH 196/578] Translated using Weblate (Swedish) Currently translated at 98.4% (2315 of 2352 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/sv/ --- vector/src/main/res/values-sv/strings.xml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/vector/src/main/res/values-sv/strings.xml b/vector/src/main/res/values-sv/strings.xml index a750521f9b..a6a6b25e2b 100644 --- a/vector/src/main/res/values-sv/strings.xml +++ b/vector/src/main/res/values-sv/strings.xml @@ -2607,4 +2607,22 @@ Parkera Återuppta Tillbaka + + %d inmatning + %d inmatningar + + Gränsen är okänd. + Din hemserver accepterar bilagor (filer, media o.s.v.) med en storlek upp till %s. + Serverns filuppladdningsgräns + Serverversion + Servernamn + Rumsinställningar + Lämna det nuvarande gruppsamtalet och byt till det andra\? + Rumsversion + Nytt värde + Byt + Initial synk: +\nLaddar ner data… + Initial synk: +\nVäntar på serversvar… \ No newline at end of file From 0508fe60d944ecd062d0b5c69bd0032ceab0f316 Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Thu, 4 Mar 2021 03:55:47 +0000 Subject: [PATCH 197/578] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (2352 of 2352 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/zh_Hant/ --- vector/src/main/res/values-zh-rTW/strings.xml | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/vector/src/main/res/values-zh-rTW/strings.xml b/vector/src/main/res/values-zh-rTW/strings.xml index f67585eb1e..495e60d33c 100644 --- a/vector/src/main/res/values-zh-rTW/strings.xml +++ b/vector/src/main/res/values-zh-rTW/strings.xml @@ -2557,4 +2557,58 @@ 保留 恢復 返回 + 活動內容 + 狀態活動已傳送! + 活動已傳送! + 活動格式錯誤 + 訊息內容遺失 + 無內容 + 活動內容 + 狀態金鑰 + 類型 + 傳送自訂狀態活動 + 編輯內容 + 狀態活動 + 傳送狀態活動 + 傳送自訂活動 + 探索聊天室狀態 + 開發工具 + 檢視讀取回條 + 不通知 + 有聲通知 + 無聲通知 + 由於錯誤而未傳送訊息 + 已檢查 + 關閉表情符號挑選程式 + 開啟表情符號挑選程式 + 可信任的信任等級 + 警告信任等級 + 預設信任等級 + 已選取 + 視訊 + 此聊天室有未傳送的草稿 + 部份訊息未傳送 + 刪除大頭照 + 變更大頭照 + 圖片 + 從檔案匯入金鑰 + 開啟小工具 + 螢幕截圖 + + %d 項目 + + 限制未知。 + 您的家伺服器接受大小最大為 %s 的附件(檔案、媒體等)。 + 伺服器檔案上傳限制 + 伺服器版本 + 伺服器名稱 + 聊天室設定 + 離開目前的會議並切換其他的? + 聊天室版本 + 新值 + 切換 + 初始同步: +\n正在下載資料…… + 初始同步: +\n正在等待伺服器回應…… \ No newline at end of file From f24159504d97ff6f82cbeaf6cd980bf44281d511 Mon Sep 17 00:00:00 2001 From: LinAGKar Date: Wed, 3 Mar 2021 21:33:54 +0000 Subject: [PATCH 198/578] Translated using Weblate (Swedish) Currently translated at 100.0% (12 of 12 strings) Translation: Element Android/Element Android Store Translate-URL: https://translate.element.io/projects/element-android/element-store/sv/ --- fastlane/metadata/android/sv/changelogs/40101000.txt | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 fastlane/metadata/android/sv/changelogs/40101000.txt diff --git a/fastlane/metadata/android/sv/changelogs/40101000.txt b/fastlane/metadata/android/sv/changelogs/40101000.txt new file mode 100644 index 0000000000..1a5944da88 --- /dev/null +++ b/fastlane/metadata/android/sv/changelogs/40101000.txt @@ -0,0 +1,2 @@ +Huvudsakliga ändringar i den här versionen: Förbättringar för VoIP (ljud- och videosamtal i DM) och buggfixar! +Full ändringslogg: https://github.com/vector-im/element-android/releases/tag/v1.1.0 From 8bd62dddc87151d0c6cc563d7d0de9b2f5549142 Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Thu, 4 Mar 2021 02:06:27 +0000 Subject: [PATCH 199/578] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (12 of 12 strings) Translation: Element Android/Element Android Store Translate-URL: https://translate.element.io/projects/element-android/element-store/zh_Hant/ --- fastlane/metadata/android/zh_Hant/changelogs/40101000.txt | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 fastlane/metadata/android/zh_Hant/changelogs/40101000.txt diff --git a/fastlane/metadata/android/zh_Hant/changelogs/40101000.txt b/fastlane/metadata/android/zh_Hant/changelogs/40101000.txt new file mode 100644 index 0000000000..3d5049ad65 --- /dev/null +++ b/fastlane/metadata/android/zh_Hant/changelogs/40101000.txt @@ -0,0 +1,2 @@ +此版本的主要變更:VoIP(直接訊息中的音訊與視訊通話)改善與錯誤修復! +完整變更紀錄:https://github.com/vector-im/element-android/releases/tag/v1.1.0 From 7c4ec1f81c86ec1a11aba742894e679fd63c7c91 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 4 Mar 2021 13:42:07 +0100 Subject: [PATCH 200/578] Fix unused string issue --- .../im/vector/app/features/login/LoginServerUrlFormFragment.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vector/src/main/java/im/vector/app/features/login/LoginServerUrlFormFragment.kt b/vector/src/main/java/im/vector/app/features/login/LoginServerUrlFormFragment.kt index 5d3a6aab49..5b98111645 100644 --- a/vector/src/main/java/im/vector/app/features/login/LoginServerUrlFormFragment.kt +++ b/vector/src/main/java/im/vector/app/features/login/LoginServerUrlFormFragment.kt @@ -86,7 +86,7 @@ class LoginServerUrlFormFragment @Inject constructor() : AbstractLoginFragment { views.loginServerUrlFormIcon.isVisible = false From ea293999df2e02f6bb75e9d392fdaff921a039fc Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 4 Mar 2021 13:45:54 +0100 Subject: [PATCH 201/578] Remove unused string --- vector/src/main/res/values-bg/strings.xml | 1 - vector/src/main/res/values-ca/strings.xml | 1 - vector/src/main/res/values-cs/strings.xml | 1 - vector/src/main/res/values-de/strings.xml | 1 - vector/src/main/res/values-eo/strings.xml | 1 - vector/src/main/res/values-es/strings.xml | 1 - vector/src/main/res/values-et/strings.xml | 1 - vector/src/main/res/values-fa/strings.xml | 1 - vector/src/main/res/values-fr/strings.xml | 1 - vector/src/main/res/values-he/strings.xml | 1 - vector/src/main/res/values-it/strings.xml | 1 - vector/src/main/res/values-iw/strings.xml | 1 - vector/src/main/res/values-kab/strings.xml | 1 - vector/src/main/res/values-pl/strings.xml | 1 - vector/src/main/res/values-pt-rBR/strings.xml | 1 - vector/src/main/res/values-ru/strings.xml | 1 - vector/src/main/res/values-sq/strings.xml | 1 - vector/src/main/res/values-sv/strings.xml | 1 - vector/src/main/res/values-zh-rCN/strings.xml | 1 - vector/src/main/res/values-zh-rTW/strings.xml | 1 - vector/src/main/res/values/strings.xml | 1 - 21 files changed, 21 deletions(-) diff --git a/vector/src/main/res/values-bg/strings.xml b/vector/src/main/res/values-bg/strings.xml index aefdc868db..cf51e0546d 100644 --- a/vector/src/main/res/values-bg/strings.xml +++ b/vector/src/main/res/values-bg/strings.xml @@ -2146,7 +2146,6 @@ Проверете тази връзка отново Изберете парола. Изберете потребителско име. - Извинявайте, тази операция все още не е възможна за профили свързани чрез Single-Sign-On. Маркирай като доверен Потвърдете самоличността си потвърждавайки този вход, давайки му достъп до шифрованите съобщения. Потвърдете самоличността си потвърждавайки този вход от някоя от другите ви сесии, давайки му достъп до шифрованите съобщения. diff --git a/vector/src/main/res/values-ca/strings.xml b/vector/src/main/res/values-ca/strings.xml index 95233b9aea..53946bf359 100644 --- a/vector/src/main/res/values-ca/strings.xml +++ b/vector/src/main/res/values-ca/strings.xml @@ -1539,7 +1539,6 @@ Expert Motiu de l\'expulsió Expulsa usuari - Aquesta operació encara no està disponible en comptes que utilitzen la inscripció única (SSO). Continua amb SSO Per a la teva pròpia privadesa, ${app_name} només admet l\'enviament del \"hash\" de correus electrònics i números de telèfon. Només admès en sales xifrades diff --git a/vector/src/main/res/values-cs/strings.xml b/vector/src/main/res/values-cs/strings.xml index ce53fb3617..675ffb25b8 100644 --- a/vector/src/main/res/values-cs/strings.xml +++ b/vector/src/main/res/values-cs/strings.xml @@ -2336,7 +2336,6 @@ Zapnout křížový podpis Uložit mediální soubor se nezdařilo Potvrďte svou identitu ověřením tohoto přihlášení, udělujíce přístup k šifrovaným zprávám. - Je nám líto, tato operace zatím není možná s účty připojenými pomocí Single Sign-On. Nastavit roli Role Otevřít chat diff --git a/vector/src/main/res/values-de/strings.xml b/vector/src/main/res/values-de/strings.xml index e8a3dad24a..46126c6ff9 100644 --- a/vector/src/main/res/values-de/strings.xml +++ b/vector/src/main/res/values-de/strings.xml @@ -2424,7 +2424,6 @@ Code Verwende das internationale Format (Telefonnummer muss mit \'+\' beginnen) Bestätige deine Identität, indem du dieses Login verifizierst, um Zugriff auf verschlüsselte Nachrichten zu erhalten. - Leider ist dieser Vorgang für Konten, die über Single Sign-On verbunden sind, noch nicht möglich. Raum, indem du gebannt wurdest, kann nicht geöffnet werden. Raum kann nicht gefunden werden. Stelle sicher, dass er existiert. diff --git a/vector/src/main/res/values-eo/strings.xml b/vector/src/main/res/values-eo/strings.xml index a872468f42..747511f745 100644 --- a/vector/src/main/res/values-eo/strings.xml +++ b/vector/src/main/res/values-eo/strings.xml @@ -2120,7 +2120,6 @@ Invitante uzantojn… INVITI Aldoni ĉambranojn - Pardonu, ĉi tiu ago ankoraŭ ne eblas por kontoj konektitaj per ununura saluto. Konfirmu vian identecon per kontrolo de ĉi tiu saluto, donante al ĝi aliron al ĉifritaj mesaĝoj. Kontrolu la novan saluton, kiu aliras vian konton: %1$s Rekontrolu ĉiujn viajn salutaĵojn por certigi, ke viaj konto kaj mesaĝoj estas sekuraj diff --git a/vector/src/main/res/values-es/strings.xml b/vector/src/main/res/values-es/strings.xml index ea0f5d74e1..b0357ab34c 100644 --- a/vector/src/main/res/values-es/strings.xml +++ b/vector/src/main/res/values-es/strings.xml @@ -2361,7 +2361,6 @@ Por favor permite el acceso en la próxima ventana emergente para descubrir usua Confirme su identidad verificando este inicio de sesión de una de sus otras sesiones, otorgándole acceso a los mensajes encriptados. Confirme su identidad verificando este inicio de sesión, otorgándole acceso a los mensajes encriptados. Marcar como de confianza - Lo sentimos, esta operación aún no es posible para las cuentas conectadas mediante el inicio de sesión único. No pudimos crear tu DM. Marque los usuarios que desea invitar y vuelva a intentarlo. Primero acepta los términos del servidor de identidad en la configuración. Para su privacidad, ${app_name} solo admite el envío de números de teléfono y correos electrónicos de usuario con hash. diff --git a/vector/src/main/res/values-et/strings.xml b/vector/src/main/res/values-et/strings.xml index 3570b18368..4a168a3088 100644 --- a/vector/src/main/res/values-et/strings.xml +++ b/vector/src/main/res/values-et/strings.xml @@ -2361,7 +2361,6 @@ \n \nParima turvalisuse nimel kohtuge silmast silma. Kinnita oma isikusamasust verifitseerides seda sisselogimissessiooni. Sellega tagad ligipääsu krüptitud sõnumitele. - Vabandust, selline tegevus pole veel võimalik kasutajakontode puhul, kus kasutatakse ühekordset sisselogimist. Ei ole võimalik avada sellise jututoa vaadet, kus sulle on seatud suhtluskeeld. Ei leia sellist jututuba. Palun kontrolli, et ta ikka olemas on. diff --git a/vector/src/main/res/values-fa/strings.xml b/vector/src/main/res/values-fa/strings.xml index 98775c2481..2a9fe70d8b 100644 --- a/vector/src/main/res/values-fa/strings.xml +++ b/vector/src/main/res/values-fa/strings.xml @@ -1613,7 +1613,6 @@ تأیید برهم‌کنشی با اموجی تأیید ورود رمزنشده - متأسّفانه این عملیات هنوز برای حساب‌هایی که با استفاده از ورود یکپارچه وصل شده‌اند، ممکن نیست. نشانه‌گذاری به عنوان مطمئن استفاده از %1$s ناخموش کردن میکروفون diff --git a/vector/src/main/res/values-fr/strings.xml b/vector/src/main/res/values-fr/strings.xml index caba64816a..8011534b00 100644 --- a/vector/src/main/res/values-fr/strings.xml +++ b/vector/src/main/res/values-fr/strings.xml @@ -2193,7 +2193,6 @@ Configuration Activer le microphone Désactiver le microphone - Désolé, cette opération n\'est pas encore possible pour les comptes connectés en Authentification unique (SSO). Confirmez votre identité en vérifiant cet identifiant, lui donnant ainsi accès aux messages chiffrés. Activer la signature croisée diff --git a/vector/src/main/res/values-he/strings.xml b/vector/src/main/res/values-he/strings.xml index c477b5c147..41d6e147c5 100644 --- a/vector/src/main/res/values-he/strings.xml +++ b/vector/src/main/res/values-he/strings.xml @@ -2362,7 +2362,6 @@ בדוק-פעמיים קישור זה אנא בחר סיסמה. אנא בחר שם משתמש. - מצטערים, פעולה זו עדיין אינה אפשרית עבור חשבונות המחוברים באמצעות כניסה יחידה. סמן כאמין אשר את זהותך על ידי אימות התחברות זו והעניק לו גישה להודעות מוצפנות. אימות אינטראקטיבי על ידי Emoji diff --git a/vector/src/main/res/values-it/strings.xml b/vector/src/main/res/values-it/strings.xml index 3eaa8bdd51..39ca954053 100644 --- a/vector/src/main/res/values-it/strings.xml +++ b/vector/src/main/res/values-it/strings.xml @@ -2423,7 +2423,6 @@ Codice Si prega di usare il formato internazionale (il numero deve iniziare con \'+\') Conferma la tua identità verificando questo accesso, dandogli l\'accesso ai messaggi cifrati. - Spiacente, questa operazione non è ancora possibile per gli account connessi tramite Single Sign-On. Impossibile aprire una stanza dove sei stato bandito. Impossibile trovare questa stanza. Assicurati che esista. Non hai il permesso di avviare una chiamata in questa stanza diff --git a/vector/src/main/res/values-iw/strings.xml b/vector/src/main/res/values-iw/strings.xml index c477b5c147..41d6e147c5 100644 --- a/vector/src/main/res/values-iw/strings.xml +++ b/vector/src/main/res/values-iw/strings.xml @@ -2362,7 +2362,6 @@ בדוק-פעמיים קישור זה אנא בחר סיסמה. אנא בחר שם משתמש. - מצטערים, פעולה זו עדיין אינה אפשרית עבור חשבונות המחוברים באמצעות כניסה יחידה. סמן כאמין אשר את זהותך על ידי אימות התחברות זו והעניק לו גישה להודעות מוצפנות. אימות אינטראקטיבי על ידי Emoji diff --git a/vector/src/main/res/values-kab/strings.xml b/vector/src/main/res/values-kab/strings.xml index 8725bb9f91..516ccc1caf 100644 --- a/vector/src/main/res/values-kab/strings.xml +++ b/vector/src/main/res/values-kab/strings.xml @@ -2200,7 +2200,6 @@ Fren tasarut-ik·im n tririt, neɣ err-itt s ufus s tira-ines s uasiw neɣ s usenteḍ-ines seg ɣefafus-inek·inem Senqed amyigew s yimujit Sentem timagit-inek·inem s usenqed n yinekcam-a, anef-as ad yekcem ɣer yiznan yettwawgelhen. - Suref-aɣ, tamahelt-a ulamek i tedda akka tura i yimiḍanen i yettwaqqnen s useqdec n unekcum asuf. Senqed tikkelt-nniḍen aseɣwen-a Aseɣwen %1$s ad ak·akem-yawi ɣer usmel-nniḍen: %2$s. \n diff --git a/vector/src/main/res/values-pl/strings.xml b/vector/src/main/res/values-pl/strings.xml index 02547d02b1..72c7faa1ca 100644 --- a/vector/src/main/res/values-pl/strings.xml +++ b/vector/src/main/res/values-pl/strings.xml @@ -2273,7 +2273,6 @@ Spróbuj uruchomić ponownie aplikację. Fraza Bezpieczeństwa Ustaw Frazę Bezpieczeństwa Wybierz nazwę użytkownika. - Przepraszamy, ta operacja nie jest jeszcze dostępna dla kont wykorzystujących Single Sign-On. Oznacz jako Zaufane Potwierdź swoją tożsamość poprzez zweryfikowanie tego logowania aby uzyskać dostęp do zaszyfrowanych wiadomości. Potwierdź swoją tożsamość poprzez zweryfikowanie tego logowania przy pomocy którejś z pozostałych sesji w celu przyznania dostępu do zaszyfrowanych wiadomości. diff --git a/vector/src/main/res/values-pt-rBR/strings.xml b/vector/src/main/res/values-pt-rBR/strings.xml index d6745b5e86..d346cbff34 100644 --- a/vector/src/main/res/values-pt-rBR/strings.xml +++ b/vector/src/main/res/values-pt-rBR/strings.xml @@ -2447,7 +2447,6 @@ Remover os dados de %1$s desta conta\? \n \nProssiga com cuidado, pois não há como reverter esta escolha. - Desculpe, esta funcionalidade ainda não está disponível para contas conectadas via acesso único. O código PIN é solicitado todas as vezes que você abre o ${app_name}. O código PIN é solicitado após 2 minutos sem usar o ${app_name}. Solicitar o PIN depois de 2 minutos diff --git a/vector/src/main/res/values-ru/strings.xml b/vector/src/main/res/values-ru/strings.xml index e2e81e13f6..e401e856ce 100644 --- a/vector/src/main/res/values-ru/strings.xml +++ b/vector/src/main/res/values-ru/strings.xml @@ -2498,7 +2498,6 @@ Код Используйте международный формат (номер телефона должен начинаться с \'+\') Подтвердите свою личность, проверив этот логин, предоставив ему доступ к зашифрованным сообщениям. - К сожалению, эта операция пока недоступна для учетных записей, подключенных с помощью единого входа. Невозможно открыть комнату, в которую вам запрещён доступ. Невозможно найти эту комнату. Убедитесь, что она существует. diff --git a/vector/src/main/res/values-sq/strings.xml b/vector/src/main/res/values-sq/strings.xml index 03045e3885..90b0e45a9b 100644 --- a/vector/src/main/res/values-sq/strings.xml +++ b/vector/src/main/res/values-sq/strings.xml @@ -2293,7 +2293,6 @@ Kjo llogari është çaktivizuar. S’u ruajt dot kartelë media Ripohoni identitetin tuaj duke verifikuar këto kredenciale hyrjeje, duke i akorduar hyrje te mesazhe të fshehtëzuar. - Na ndjeni, ky veprim s’është ende i mundshëm për llogari të lidhura duke përdorur Hyrje Njëshe. Për privatësinë tuaj, ${app_name}-i mbulon vetëm dërgim email-esh dhe numrash telefoni përdoruesi të koduar. Caktoni rol Rol diff --git a/vector/src/main/res/values-sv/strings.xml b/vector/src/main/res/values-sv/strings.xml index a6a6b25e2b..150d4018ff 100644 --- a/vector/src/main/res/values-sv/strings.xml +++ b/vector/src/main/res/values-sv/strings.xml @@ -2361,7 +2361,6 @@ Kod Vänligen använd internationellt format (telefonnumret måste börja med \'+\') Bekräfta din identitet genom att verifiera den här inloggningen, och ge den åtkomst till dina krypterade meddelanden. - Tyvärr stöds den här handlingen inte än för konton anslutna med externt konto. Kan inte öppna ett rum du är bannad från. Kan inte hitta det här rummet. Se till att det existerar. diff --git a/vector/src/main/res/values-zh-rCN/strings.xml b/vector/src/main/res/values-zh-rCN/strings.xml index 92f6c849ef..e40e95da82 100644 --- a/vector/src/main/res/values-zh-rCN/strings.xml +++ b/vector/src/main/res/values-zh-rCN/strings.xml @@ -2278,7 +2278,6 @@ 代码 请使用国际格式(电话号码必须以 ‘+’ 开始) 通过验证此登录确认您的身份,授权它访问加密信息。 - 抱歉,对于连接到单点登录的账户此操作尚不可用。 无法打开您被封禁的聊天室。 无法找到此聊天室。请确认它存在。 您没有权限在此聊天室发起通话 diff --git a/vector/src/main/res/values-zh-rTW/strings.xml b/vector/src/main/res/values-zh-rTW/strings.xml index 495e60d33c..842700b6eb 100644 --- a/vector/src/main/res/values-zh-rTW/strings.xml +++ b/vector/src/main/res/values-zh-rTW/strings.xml @@ -2316,7 +2316,6 @@ 代碼 請使用國際格式(電話號碼必須以 \'+\' 開頭) 透過確認此登入來驗證您的身份,以及授予存取加密訊息的權限。 - 抱歉,對於使用單一登入的帳號,還無法執行此動作。 無法開啟禁止您進入的聊天室。 找不到此聊天室。請確定它存在。 diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index a741997393..4ebd663f9f 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -2983,7 +2983,6 @@ Confirm your identity by verifying this login, granting it access to encrypted messages. Mark as Trusted - Sorry, this operation is not possible yet for accounts connected using Single Sign-On. Failed to set up Cross Signing Please choose a username. From d5f5143c525d7e3e2d1e00746e4eecbbf7c6f844 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 4 Mar 2021 13:56:08 +0100 Subject: [PATCH 202/578] Rename file --- .../src/main/res/values/{values.xml => attrs_reaction_button.xml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename vector/src/main/res/values/{values.xml => attrs_reaction_button.xml} (100%) diff --git a/vector/src/main/res/values/values.xml b/vector/src/main/res/values/attrs_reaction_button.xml similarity index 100% rename from vector/src/main/res/values/values.xml rename to vector/src/main/res/values/attrs_reaction_button.xml From acbb7966498e2d6d53b962558ea2904415b53d95 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 15 Feb 2021 18:18:31 +0100 Subject: [PATCH 203/578] Fix potential issue with link colors --- vector/src/main/res/values/colors.xml | 1 - vector/src/main/res/values/styles_riot.xml | 4 ++-- vector/src/main/res/values/theme_black.xml | 2 -- vector/src/main/res/values/theme_dark.xml | 2 +- vector/src/main/res/values/theme_light.xml | 4 ++-- 5 files changed, 5 insertions(+), 8 deletions(-) diff --git a/vector/src/main/res/values/colors.xml b/vector/src/main/res/values/colors.xml index e4cfa18461..4b0d4d008d 100644 --- a/vector/src/main/res/values/colors.xml +++ b/vector/src/main/res/values/colors.xml @@ -131,7 +131,6 @@ #FFFF4B55 #FF61708B #1E61708B - #FF368BD6 #FF03B381 #FF368bd6 diff --git a/vector/src/main/res/values/styles_riot.xml b/vector/src/main/res/values/styles_riot.xml index d81b4cb6e9..8017376cc3 100644 --- a/vector/src/main/res/values/styles_riot.xml +++ b/vector/src/main/res/values/styles_riot.xml @@ -271,7 +271,7 @@ @color/riot_secondary_text_color_dark @color/riot_tertiary_text_color_dark - @color/riotx_links + @color/link_color_dark diff --git a/vector/src/main/res/values/theme_black.xml b/vector/src/main/res/values/theme_black.xml index e5c6851f40..5403c521b4 100644 --- a/vector/src/main/res/values/theme_black.xml +++ b/vector/src/main/res/values/theme_black.xml @@ -66,8 +66,6 @@ @style/VectorButtonStyle @style/VectorToolbarStyle - @color/riotx_links - ?colorAccent diff --git a/vector/src/main/res/values/theme_dark.xml b/vector/src/main/res/values/theme_dark.xml index 953691a6b7..eeba89ec44 100644 --- a/vector/src/main/res/values/theme_dark.xml +++ b/vector/src/main/res/values/theme_dark.xml @@ -66,7 +66,7 @@ @style/VectorToolbarStyle @style/VectorAlertDialogStyleDark - @color/riotx_links + @color/link_color_dark ?colorAccent diff --git a/vector/src/main/res/values/theme_light.xml b/vector/src/main/res/values/theme_light.xml index cae2ef7794..2a8be2e557 100644 --- a/vector/src/main/res/values/theme_light.xml +++ b/vector/src/main/res/values/theme_light.xml @@ -65,7 +65,7 @@ @style/VectorToolbarStyle @style/VectorAlertDialogStyleLight - @color/riotx_links + @color/link_color_light ?colorAccent @@ -82,7 +82,7 @@ @color/riotx_text_primary_light @color/riotx_text_primary_light - @color/riotx_links + @color/link_color_light @color/default_text_hint_color_light From d4d7c6cb4a7996a6bff9651cde7c1067505407c7 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 15 Feb 2021 18:25:56 +0100 Subject: [PATCH 204/578] Cleanup riotx_base colors --- .../main/res/layout/fragment_home_drawer.xml | 2 +- vector/src/main/res/values/colors.xml | 18 ++++-------------- vector/src/main/res/values/theme_black.xml | 4 +--- vector/src/main/res/values/theme_dark.xml | 4 +--- vector/src/main/res/values/theme_light.xml | 4 +--- 5 files changed, 8 insertions(+), 24 deletions(-) diff --git a/vector/src/main/res/layout/fragment_home_drawer.xml b/vector/src/main/res/layout/fragment_home_drawer.xml index 642119e5f8..0a4206b8c0 100644 --- a/vector/src/main/res/layout/fragment_home_drawer.xml +++ b/vector/src/main/res/layout/fragment_home_drawer.xml @@ -12,7 +12,7 @@ android:id="@+id/homeDrawerHeader" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="?riotx_base" + android:background="?vctr_home_drawer_header_background" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> diff --git a/vector/src/main/res/values/colors.xml b/vector/src/main/res/values/colors.xml index 4b0d4d008d..ec6daa4a94 100644 --- a/vector/src/main/res/values/colors.xml +++ b/vector/src/main/res/values/colors.xml @@ -161,10 +161,10 @@ #FF15191E #FF000000 - - #FFF5F7FA - #FF22282F - #FF000000 + + #FFF5F7FA + #FF22282F + #FF000000 @@ -172,16 +172,6 @@ #FF282C35 #FF282C35 - - #FFFFFFFF - #FFEDF3FF - #FFEDF3FF - - - #FFFFFFFF - #FFEDF3FF - #FFEDF3FF - #FFFFFFFF #FF181B21 diff --git a/vector/src/main/res/values/theme_black.xml b/vector/src/main/res/values/theme_black.xml index 5403c521b4..0d487127d6 100644 --- a/vector/src/main/res/values/theme_black.xml +++ b/vector/src/main/res/values/theme_black.xml @@ -8,9 +8,7 @@ @color/riotx_background_black - @color/riotx_base_black - @color/riotx_base_text_icon_primary_black - @color/riotx_base_text_icon_secondary_black + @color/vctr_home_drawer_header_background_black @color/riotx_search_background_mobile_black @color/riotx_header_panel_background_black @color/riotx_header_panel_border_mobile_black diff --git a/vector/src/main/res/values/theme_dark.xml b/vector/src/main/res/values/theme_dark.xml index eeba89ec44..8cdf76afb6 100644 --- a/vector/src/main/res/values/theme_dark.xml +++ b/vector/src/main/res/values/theme_dark.xml @@ -6,9 +6,7 @@ - - \ No newline at end of file diff --git a/vector/src/main/res/values/styles_riot.xml b/vector/src/main/res/values/styles_riot.xml index 8017376cc3..f7efcd8f86 100644 --- a/vector/src/main/res/values/styles_riot.xml +++ b/vector/src/main/res/values/styles_riot.xml @@ -251,20 +251,6 @@ 10dp - - - - - - - - - - - - - - - - - - - - - - - - -