From e29a63ecf37b0671ef004ba0a02aa5d6335ee425 Mon Sep 17 00:00:00 2001 From: Aljoscha Rittner Date: Mon, 23 May 2022 21:12:37 +0000 Subject: [PATCH 1/3] Translated using Weblate (German) Currently translated at 99.9% (1237 of 1238 strings) Translation: Fedilab/Strings Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/de/ --- app/src/main/res/values-de/strings.xml | 56 ++++++++++++++++---------- 1 file changed, 34 insertions(+), 22 deletions(-) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index df26efab0..f0a8026d5 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -301,7 +301,7 @@ Änderungen speichern Wähle ein Profilbild Vorschaubilder anpassen - Toots mit mehr als 500 Zeichen automatisch unterteilen: + Toots in Antworten automatisch unterteilen, wenn Zeichenanzahl größer ist als: Du hast die Grenze von 160 Zeichen erreicht! Du hast die Grenze von 30 Zeichen erreicht! Zwischen @@ -518,7 +518,7 @@ Durch das Löschen der Anwendung werden diese Daten sofort entfernt.\n Neue Erwähnung Umfrage beendet Neuer Toot - Toots Backup + Toots Sicherung Neue Beiträge Medien Download Ändere Ton für Benachrichtigungen @@ -1002,13 +1002,13 @@ Durch das Löschen der Anwendung werden diese Daten sofort entfernt.\n Benutze ein alternatives Frontend für Medium Default: scribe.rip Replace Wikipedia links - Replace Wikipedia link with an open source alternative front-end focused on privacy. + Ersetze Wikipedia Links durch eine alternative Open Source Benutzeroberfläche, die auf Privatsphäre spezialisiert ist. Default: wikiless.org Fedilab Benachrichtigungsleiste ausblenden Um die verbleibende Benachrichtigung in der Statusleiste zu verstecken, klicken Sie auf die Augensymbol-Schaltfläche und deaktivieren Sie: \"In Statusleiste anzeigen\" Verwenden Sie ein Push-Benachrichtigungssystem, um Benachrichtigungen in Echtzeit zu erhalten. Keine Echtzeit-Benachrichtigungen - Live notifications + Live Benachrichtigungen Benachrichtigungen werden alle 15 Minuten abgerufen. Notizen hinzufügen Notizen für das Konto @@ -1057,7 +1057,7 @@ Durch das Löschen der Anwendung werden diese Daten sofort entfernt.\n Neustarten Verwenden Sie ein benutzerdefiniertes Design Erlaubt es, die Farben des ausgewählten Themas oben zu überschreiben - Theming + Gestaltung Vorher speichern Das Theme wurde exportiert Das Design wurde erfolgreich als CSV exportiert @@ -1132,7 +1132,7 @@ Durch das Löschen der Anwendung werden diese Daten sofort entfernt.\n Diese Instanz scheint nicht gültig zu sein! Geteilt von Favoritisiert von - Nur Follower + Nur für Follower Bilder Z. B.: Sensibler Inhalt Status hinzufügen @@ -1165,21 +1165,21 @@ Durch das Löschen der Anwendung werden diese Daten sofort entfernt.\n Es verstößt gegen die Serverregeln Das Thema lässt sich nicht in andere Kategorien einordnen Es ist etwas anderes - Das ist nichts, was Du sehen willst + Es ist nichts was du sehen möchtest Meldung %1$s - Laufzeit: %,.2f %% + Verfügbarkeit: %,.2f %% Zusätzliche Kommentare Gibt es noch etwas, das wir deiner Meinung nach wissen sollten\? Wähle alle zutreffenden Punkte aus Welche Regeln werden verletzt\? Gibt es Beiträge, die diesen Bericht belegen\? - Du hast noch kein Account\? + Noch kein Account vorhanden\? Bericht wurde gesendet! Weiterleiten an %1$s - Tritt dem Fediverse bei - \"PeerTube, entwickelt von Framasoft, ist die kostenlose und dezentralisierte Alternative zu Videoplattformen und bietet Ihnen über 400.000 Videos, die von 60.000 Nutzern veröffentlicht und über 15 Millionen Mal angesehen wurden + Komm ins Fediverse + \"PeerTube, entwickelt von Framasoft, ist eine freie, dezentrale Alternative zu Videoplattformen und bietet Dir über 400.000 Videos von 60.000 Benutzern, mit mehr als 15 Millionen Aufrufen\" Erwähnungen - \"Mastodon ist keine einzelne Website wie Twitter oder Facebook, sondern ein Netzwerk aus Tausenden von Communities, die von verschiedenen Organisationen und Einzelpersonen betrieben werden und ein nahtloses Social-Media-Erlebnis bieten.\" + \"Mastodon ist nicht wie Twitter oder Facebook, es besteht aus einem Netzwerk von tausenden, durch unterschiedliche Organisationen und Einzelpersonen betriebene, Communities, die ein nahtloses Social Media Erlebnis bieten.\" Favoriten Änderungen speichern Gesperrt @@ -1187,8 +1187,8 @@ Durch das Löschen der Anwendung werden diese Daten sofort entfernt.\n Feld hinzufügen Filter hinzufügen Bist du sicher, dass du alle Benachrichtigungen löschen willst\? Das kann nicht rückgängig gemacht werden. - Alle Kategorien anzeigen - Umfrageergebnisse + Zeige alle Kategorien + Ergebnisse der Umfrage Alle Benachrichtigungen als gelesen markieren Alle Benachrichtigungen löschen Geplant @@ -1213,13 +1213,13 @@ Durch das Löschen der Anwendung werden diese Daten sofort entfernt.\n Art der Umfrage: Unteres Menü Oberes Menü - Hier sind Ihre Möglichkeiten zu kontrollieren, was bei Mastodon zu sehen ist: + Einstellungen zur Kontrolle dessen, was du auf Mastodon siehst: Inhalt verbergen < Benutzerdefiniert - Senden der Nachricht %d/%d - Es ist geschafft! - ist ausgefallen! - Nachricht absenden… + Sende Nachricht %d/%d + Ist erreichbar! + Ist derzeit nicht erreichbar! + Versende Nachricht… Version: %s \n%s Benutzer - %s Statuse Bösartige Links, gefälschtes Engagement oder sich wiederholende Antworten @@ -1234,13 +1234,25 @@ Durch das Löschen der Anwendung werden diese Daten sofort entfernt.\n Wähle, ob die Basis des Themas dunkel oder hell sein soll Arten der anzuzeigenden Benachrichtigungen Standardmäßige Sichtbarkeit der Toots: - Anzahl der Benachrichtigungen per Laden - Verwende ein alternatives Frontend für Instagram + Anzahl an Benachrichtigungen pro Ladezyklus + Nutze eine alternative Benutzeroberfläche für Instagram Instagram Frontend Domain - Verwende ein alternatives Frontend für Reddit + Nutze eine alternative Benutzeroberfläche für Reddit Reddit-Frontend-Domain Alternative Frontends Grundlage des Themas Während dieses Zeitfensters Schaltfläche \"Lesezeichen\" immer anzeigen + Das Konto stammt von einem anderen Server. Die anonymisierte Kopie des Berichts auch dorthin senden\? + Wähle die beste Übereinstimmung + Entfolge %1$s + Du folgst diesem Konto. Um die Beiträge nicht mehr in deiner Home-Timeline zu sehen, entfolge ihm. + Du wirst die Beiträge nicht mehr sehen. Sie können dir immer noch folgen und deine Beiträge sehen und wissen nicht, dass sie stummgeschaltet sind. + Du wirst die Beiträge nicht mehr sehen. Sie können deine Beiträge nicht sehen und dir nicht mehr folgen. Sie werden erkennen können, dass sie blockiert sind. + Boosten + Aktualisierungen Anderer + Folgende + Auch geboostet von: + Entfolgen bestätigen + "Auch favorisiert von: " \ No newline at end of file From f839cede1261bf221a96806701a38b224806da96 Mon Sep 17 00:00:00 2001 From: mastoduy Date: Tue, 24 May 2022 14:28:09 +0000 Subject: [PATCH 2/3] Translated using Weblate (Vietnamese) Currently translated at 100.0% (1238 of 1238 strings) Translation: Fedilab/Strings Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/vi/ --- app/src/main/res/values-vi/strings.xml | 34 ++++++++++++++------------ 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 1aa9ee8c4..452ee4b40 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -26,7 +26,7 @@ Khôi phục Không có kết quả! Máy chủ - Máy chủ: mastodon.social + Ví dụ: mastodon.social Hiện đang sử dụng tài khoản %1$s Thêm một tài khoản Đã chép nội dung tút vào bộ nhớ tạm @@ -44,7 +44,7 @@ Kế tiếp Trước đó Mở bằng - Xác minh + Xác nhận Media Chia sẻ với Chia sẻ qua Fedilab @@ -61,11 +61,11 @@ Dịch Hãy chờ vài giây trước khi thực hiện hành động này. - Trang chính + Bảng tin Máy chủ Lịch trình liên kết Tùy chọn - Lượt thích + Đã thích Giao tiếp Người dùng đã ẩn Người dùng đã chặn @@ -121,7 +121,7 @@ Delete & re-draft this toot? Đã lưu - Lưu lại + Lưu tút Hủy lưu Chưa lưu gì hết Đã lưu tút! @@ -287,8 +287,8 @@ Chỉ thông báo bằng WIFI Thông báo? Tắt thông báo - Thời gian chờ của NSFW (giây, 0 có nghĩa là tắt) - Thời gian chờ mô tả media (giây, 0 nghĩa là không dùng) + Thời gian chờ của NSFW (giây, 0 = tắt) + Thời gian chờ mô tả media (giây, 0 = không dùng) Sửa hồ sơ Chia sẻ tùy chỉnh URL chia sẻ tùy chỉnh của bạn… @@ -684,7 +684,7 @@ Văn bản thuần HTML Markdown - Đăng xuất tài khoản + Đăng xuất Tất cả Ủng hộ app Open Collective cho phép các nhóm nhanh chóng gây quỹ và quản lý chúng một cách minh bạch. @@ -702,7 +702,7 @@ Gửi Cơ sở dữ liệu đã được xuất! Hashtag thường dùng - Lọc bảng tin bằng hashtag + Lọc với hashtag Không có hashtag Ẩn nút \"xóa\" trên tab thông báo Đính kèm hình ảnh khi chia sẻ một URL @@ -737,7 +737,7 @@ Sắp xếp bảng tin Bảng tin chính có thể bị ẩn! BBCode - Ảnh/video là nội dung nhạy cảm + Tài khoản nhạy cảm Máy chủ GNU Tút lưu trong bộ nhớ đệm Dùng lại hashtag trong trả lời @@ -874,7 +874,7 @@ Nội dung trống! Hiện nút tính năng Fedilab Ứng dụng cần truy cập ghi âm - Tin nhắn thoại + Ghi âm Chèn trả lời nhanh Tài khoản bạn đang trả lời có thể không thấy trả lời của bạn! Nếu tắt, ứng dụng sẽ luôn tải các tút cuối cùng @@ -1093,7 +1093,7 @@ Số tút Số máy chủ Đã chặn - Kết thúc sau %s + còn %s Có gì mới trong %s Theo dõi tài khoản của tôi để cập nhật Máy chủ này không có trên https://instances.social @@ -1133,7 +1133,7 @@ Không có thông báo! Thêm biểu cảm Dùng trình duyệt yêu thích của bạn trong app. Bỏ chọn để mở bên ngoài app. - Bộ nhớ đệm video tính bằng MB, zero nghĩa là không lưu. + Bộ nhớ đệm video (MB, 0 = không lưu) Watermark Tự động thêm watermark dưới hình ảnh. Nội dung có thể thay đổi cho từng tài khoản. Không tìm thấy nhà phân phối! @@ -1161,7 +1161,7 @@ Theme của cộng đồng Chọn một theme được tạo bởi cộng đồng Hiển thị - Menu ở trên + Menu trên Vấn đề không phù hợp với các danh mục khác Ẩn nội dung < Ngưng theo dõi %1$s @@ -1173,7 +1173,7 @@ Chọn loại thông báo Âm thanh thông báo Cho phép tạo theme tùy chỉnh - Menu phía dưới + Menu dưới Tùy chỉnh màu chính Loại thông báo hiển thị Xác nhận ngưng theo dõi @@ -1250,7 +1250,7 @@ Cập nhật từ mọi người Theo dõi Đánh dấu tất cả là đã đọc - Hiện toàn bộ danh mục + Hiện toàn bộ Bạn có chắc muốn xóa tất cả thông báo\? Không thể khôi phục lại. \"Mastodon không phải là một trang web duy nhất như Twitter hoặc Facebook, đó là một mạng lưới hàng ngàn cộng đồng được điều hành bởi các tổ chức và cá nhân khác nhau cung cấp trải nghiệm truyền thông xã hội liền mạch.\" \"Peertube, được phát triển bởi Framasoft, là sự thay thế miễn phí và phi tập trung cho các nền tảng video, cung cấp cho bạn hơn 400.000 video được xuất bản bởi 60.000 người dùng và xem hơn 15 triệu lần\" @@ -1267,4 +1267,6 @@ Khám phá người dùng Xóa mục Chọn một theme + Đã đăng lại bởi: + "Đã thích bởi: " \ No newline at end of file From 644269d6110d011a83edf47ed6d1ed5fd2965f01 Mon Sep 17 00:00:00 2001 From: 0xd9a <0xd9a@noreply.codeberg.org> Date: Thu, 26 May 2022 13:54:15 +0530 Subject: [PATCH 3/3] update thread lines --- .../android/helper/RecyclerViewThreadLines.kt | 62 ++++++++----------- .../timeline/FragmentMastodonContext.java | 2 +- 2 files changed, 26 insertions(+), 38 deletions(-) diff --git a/app/src/main/java/app/fedilab/android/helper/RecyclerViewThreadLines.kt b/app/src/main/java/app/fedilab/android/helper/RecyclerViewThreadLines.kt index ca675b086..f8e258e58 100644 --- a/app/src/main/java/app/fedilab/android/helper/RecyclerViewThreadLines.kt +++ b/app/src/main/java/app/fedilab/android/helper/RecyclerViewThreadLines.kt @@ -43,6 +43,7 @@ class RecyclerViewThreadLines(context: Context, private val lineInfoList: List 0) lineColors[j - 1] else Color.GRAY // draw lines for below statuses - if (j != level && j >= lineInfo.fullLinesStart && j <= lineInfo.fullLinesEnd) + if (j != level && lineInfo.lines.contains(j)) c.drawLine(lineStart, lineTop, lineStart, view.bottom.toFloat(), paint) // draw vertical line for current statuses - if (j == level && i != 0) { + if (j == level && position != 0) { // top the line starts at the middle of the above status if (i > 0) lineTop -= parent.getChildAt(i - 1).height / 2 - 1 // '- 1' is to prevent overlapping with above horizontal line @@ -76,12 +78,8 @@ class RecyclerViewThreadLines(context: Context, private val lineInfoList: List= nextLineInfo.fullLinesStart && level <= nextLineInfo.fullLinesEnd) { - lineBottom = view.bottom.toFloat() - } - } + if (position < lineInfoList.lastIndex && lineInfoList[position + 1].lines.contains(level) && j != maxLevel) + lineBottom = view.bottom.toFloat() // if level is max, use a dashed line if (j == maxLevel) paint.pathEffect = dashPathEffect @@ -99,7 +97,7 @@ class RecyclerViewThreadLines(context: Context, private val lineInfoList: List) private val Int.dpToPx: Float get() = this * Resources.getSystem().displayMetrics.density @@ -112,43 +110,33 @@ class RecyclerViewThreadLines(context: Context, private val lineInfoList: List { +fun getThreadDecorationInfo(statusContext: StatusContext): MutableList { val lineInfoList = mutableListOf() - repeat(fediContext.ancestors.size) { lineInfoList.add(LineInfo(0, true, 0, 0)) } - lineInfoList.add(LineInfo(0, fediContext.descendants.isNotEmpty(), 0, 0)) - val descendantsLineInfoList = List(fediContext.descendants.size) { LineInfo(0, false, 0, 0) } - for (i in fediContext.descendants.indices) { - fediContext.descendants[i].let { status -> + repeat(statusContext.ancestors.size) { lineInfoList.add(LineInfo(0, listOf(0))) } + lineInfoList.add(LineInfo(0, listOf(0))) + val descendantsLineInfoList = List(statusContext.descendants.size) { LineInfo(0, listOf()) } + for (i in statusContext.descendants.indices) { + statusContext.descendants[i].let { status -> var level = 0 if (status.in_reply_to_id != null) { - if (status.in_reply_to_id == selectedStatusId) - level = 1 - else { - var replyToId: String? = status.in_reply_to_id - while (replyToId != null && level < RecyclerViewThreadLines.threadLineColors.size) { - level += 1 - replyToId = fediContext.descendants.firstOrNull { it.id == replyToId }?.in_reply_to_id - } + var replyToId: String? = status.in_reply_to_id + while (replyToId != null && level < RecyclerViewThreadLines.threadLineColors.size) { + level += 1 + replyToId = statusContext.descendants.firstOrNull { it.id == replyToId }?.in_reply_to_id } } descendantsLineInfoList[i].level = level - val firstReply = fediContext.descendants.firstOrNull { it.in_reply_to_id == status.id } - if (firstReply == null) descendantsLineInfoList[i].end = true } } - for (i in descendantsLineInfoList.indices) { - var fullLinesStart = descendantsLineInfoList[i].level - var fullLinesEnd = descendantsLineInfoList[i].level - var fullLinesEndSet = false - for (j in i + 1 until descendantsLineInfoList.lastIndex) { - if (!fullLinesEndSet && descendantsLineInfoList[j].level < descendantsLineInfoList[i].level) { - fullLinesEnd = descendantsLineInfoList[j].level - fullLinesEndSet = true - } - fullLinesStart = descendantsLineInfoList[j].level.coerceAtMost(fullLinesStart) + for (i in descendantsLineInfoList.indices.reversed()) { + val lines: MutableList = mutableListOf() + val lineInfo = descendantsLineInfoList[i] + lines.add(lineInfo.level) + if (i < descendantsLineInfoList.lastIndex) { + val belowLineInfo = descendantsLineInfoList[i + 1] + lines.addAll(belowLineInfo.lines.filter { it < lineInfo.level }) } - descendantsLineInfoList[i].fullLinesStart = fullLinesStart - descendantsLineInfoList[i].fullLinesEnd = fullLinesEnd + descendantsLineInfoList[i].lines = lines } lineInfoList.addAll(descendantsLineInfoList) diff --git a/app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonContext.java b/app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonContext.java index c33c1fbb1..13d9c8ad4 100644 --- a/app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonContext.java +++ b/app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonContext.java @@ -251,7 +251,7 @@ public class FragmentMastodonContext extends Fragment { binding.recyclerView.removeItemDecorationAt(i); } } - List threadDecorationInfo = getThreadDecorationInfo(context, focusedStatus.id); + List threadDecorationInfo = getThreadDecorationInfo(context); binding.recyclerView.addItemDecoration(new RecyclerViewThreadLines(requireContext(), threadDecorationInfo)); binding.swipeContainer.setRefreshing(false); binding.recyclerView.scrollToPosition(statusPosition);