Merge branch 'develop' of https://codeberg.org/tom79/Fedilab into develop

 Conflicts:
	app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonContext.java
This commit is contained in:
Thomas 2022-05-26 14:21:43 +02:00
commit 7cc101cb10
3 changed files with 77 additions and 75 deletions

View File

@ -43,6 +43,7 @@ class RecyclerViewThreadLines(context: Context, private val lineInfoList: List<L
override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) {
val position = parent.getChildAdapterPosition(view)
if (position < 0) return
val level = lineInfoList[position].level
val startMargin = margin * level + margin * fontScale
if (parent.layoutDirection == View.LAYOUT_DIRECTION_LTR) outRect.left = startMargin else outRect.right = startMargin
@ -53,6 +54,7 @@ class RecyclerViewThreadLines(context: Context, private val lineInfoList: List<L
for (i in 0 until childCount) {
val view = parent.getChildAt(i)
val position = parent.getChildAdapterPosition(view)
if (position < 0) return
val lineInfo = lineInfoList[position]
val level = lineInfo.level
@ -64,11 +66,11 @@ class RecyclerViewThreadLines(context: Context, private val lineInfoList: List<L
paint.color = if (j > 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<L
var lineBottom = view.bottom.toFloat() - view.height / 2
// if below status has a full line for current level, extend the line to the bottom
if (i < lineInfoList.lastIndex - 1) {
val nextLineInfo = lineInfoList[i + 1]
if (level >= 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<L
}
}
data class LineInfo(var level: Int, var end: Boolean, var fullLinesStart: Int, var fullLinesEnd: Int)
data class LineInfo(var level: Int, var lines: List<Int>)
private val Int.dpToPx: Float
get() = this * Resources.getSystem().displayMetrics.density
@ -112,43 +110,33 @@ class RecyclerViewThreadLines(context: Context, private val lineInfoList: List<L
}
}
fun getThreadDecorationInfo(fediContext: StatusContext, selectedStatusId: String): MutableList<LineInfo> {
fun getThreadDecorationInfo(statusContext: StatusContext): MutableList<LineInfo> {
val lineInfoList = mutableListOf<LineInfo>()
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<Int> = 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)

View File

@ -301,7 +301,7 @@
<string name="set_save_changes">Änderungen speichern</string>
<string name="set_header_picture_overlay">Wähle ein Profilbild</string>
<string name="set_fit_preview">Vorschaubilder anpassen</string>
<string name="set_automatically_split_toot">Toots mit mehr als 500 Zeichen automatisch unterteilen:</string>
<string name="set_automatically_split_toot">Toots in Antworten automatisch unterteilen, wenn Zeichenanzahl größer ist als:</string>
<string name="note_no_space">Du hast die Grenze von 160 Zeichen erreicht!</string>
<string name="username_no_space">Du hast die Grenze von 30 Zeichen erreicht!</string>
<string name="settings_time_from">Zwischen</string>
@ -518,7 +518,7 @@ Durch das Löschen der Anwendung werden diese Daten sofort entfernt.\n
<string name="channel_notif_mention">Neue Erwähnung</string>
<string name="channel_notif_poll">Umfrage beendet</string>
<string name="channel_notif_toot">Neuer Toot</string>
<string name="channel_notif_backup">Toots Backup</string>
<string name="channel_notif_backup">Toots Sicherung</string>
<string name="channel_notif_status">Neue Beiträge</string>
<string name="channel_notif_media">Medien Download</string>
<string name="set_notif_sound">Ändere Ton für Benachrichtigungen</string>
@ -1002,13 +1002,13 @@ Durch das Löschen der Anwendung werden diese Daten sofort entfernt.\n
<string name="replace_medium_description">Benutze ein alternatives Frontend für Medium</string>
<string name="replace_medium_host">Default: scribe.rip</string>
<string name="replace_wikipedia">Replace Wikipedia links</string>
<string name="replace_wikipedia_description">Replace Wikipedia link with an open source alternative front-end focused on privacy.</string>
<string name="replace_wikipedia_description">Ersetze Wikipedia Links durch eine alternative Open Source Benutzeroberfläche, die auf Privatsphäre spezialisiert ist.</string>
<string name="replace_wikipedia_host">Default: wikiless.org</string>
<string name="set_hide_status_bar">Fedilab Benachrichtigungsleiste ausblenden</string>
<string name="set_hide_status_bar_indication">Um die verbleibende Benachrichtigung in der Statusleiste zu verstecken, klicken Sie auf die Augensymbol-Schaltfläche und deaktivieren Sie: \"In Statusleiste anzeigen\"</string>
<string name="set_push_notifications">Verwenden Sie ein Push-Benachrichtigungssystem, um Benachrichtigungen in Echtzeit zu erhalten.</string>
<string name="no_live_notif">Keine Echtzeit-Benachrichtigungen</string>
<string name="live_notif">Live notifications</string>
<string name="live_notif">Live Benachrichtigungen</string>
<string name="no_live_indication">Benachrichtigungen werden alle 15 Minuten abgerufen.</string>
<string name="action_add_notes">Notizen hinzufügen</string>
<string name="note_for_account">Notizen für das Konto</string>
@ -1057,7 +1057,7 @@ Durch das Löschen der Anwendung werden diese Daten sofort entfernt.\n
<string name="restart">Neustarten</string>
<string name="pref_custom_theme">Verwenden Sie ein benutzerdefiniertes Design</string>
<string name="pref_custom_theme_summary">Erlaubt es, die Farben des ausgewählten Themas oben zu überschreiben</string>
<string name="theming">Theming</string>
<string name="theming">Gestaltung</string>
<string name="store_before">Vorher speichern</string>
<string name="data_export_theme">Das Theme wurde exportiert</string>
<string name="data_export_theme_success">Das Design wurde erfolgreich als CSV exportiert</string>
@ -1132,7 +1132,7 @@ Durch das Löschen der Anwendung werden diese Daten sofort entfernt.\n
<string name="instance_not_valid">Diese Instanz scheint nicht gültig zu sein!</string>
<string name="boosted_by">Geteilt von</string>
<string name="favourited_by">Favoritisiert von</string>
<string name="followers_only">Nur Follower</string>
<string name="followers_only">Nur für Follower</string>
<string name="images">Bilder</string>
<string name="eg_sensitive_content">Z. B.: Sensibler Inhalt</string>
<string name="add_status">Status hinzufügen</string>
@ -1165,21 +1165,21 @@ Durch das Löschen der Anwendung werden diese Daten sofort entfernt.\n
<string name="report_val3">Es verstößt gegen die Serverregeln</string>
<string name="report_val_more4">Das Thema lässt sich nicht in andere Kategorien einordnen</string>
<string name="report_val4">Es ist etwas anderes</string>
<string name="report_val_more1">Das ist nichts, was Du sehen willst</string>
<string name="report_val_more1">Es ist nichts was du sehen möchtest</string>
<string name="report_title">Meldung %1$s</string>
<string name="instance_health_uptime">Laufzeit: %,.2f %%</string>
<string name="instance_health_uptime">Verfügbarkeit: %,.2f %%</string>
<string name="report_more_additional">Zusätzliche Kommentare</string>
<string name="report_more">Gibt es noch etwas, das wir deiner Meinung nach wissen sollten\?</string>
<string name="report_all_more">Wähle alle zutreffenden Punkte aus</string>
<string name="report_3_title">Welche Regeln werden verletzt\?</string>
<string name="report_2_title">Gibt es Beiträge, die diesen Bericht belegen\?</string>
<string name="dont_have_an_account">Du hast noch kein Account\?</string>
<string name="dont_have_an_account">Noch kein Account vorhanden\?</string>
<string name="report_sent">Bericht wurde gesendet!</string>
<string name="report_more_forward">Weiterleiten an %1$s</string>
<string name="join_the_fediverse">Tritt dem Fediverse bei</string>
<string name="join_peertube_message">\"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</string>
<string name="join_the_fediverse">Komm ins Fediverse</string>
<string name="join_peertube_message">\"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\"</string>
<string name="notif_display_mentions">Erwähnungen</string>
<string name="about_mastodon">\"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.\"</string>
<string name="about_mastodon">\"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.\"</string>
<string name="notif_display_favourites">Favoriten</string>
<string name="save_changes">Änderungen speichern</string>
<string name="locked">Gesperrt</string>
@ -1187,8 +1187,8 @@ Durch das Löschen der Anwendung werden diese Daten sofort entfernt.\n
<string name="add_field">Feld hinzufügen</string>
<string name="add_filter">Filter hinzufügen</string>
<string name="delete_notification_all_warning">Bist du sicher, dass du alle Benachrichtigungen löschen willst\? Das kann nicht rückgängig gemacht werden.</string>
<string name="display_all_categories">Alle Kategorien anzeigen</string>
<string name="notif_display_poll_results">Umfrageergebnisse</string>
<string name="display_all_categories">Zeige alle Kategorien</string>
<string name="notif_display_poll_results">Ergebnisse der Umfrage</string>
<string name="mark_all_as_read">Alle Benachrichtigungen als gelesen markieren</string>
<string name="clear_all_notif">Alle Benachrichtigungen löschen</string>
<string name="scheduled">Geplant</string>
@ -1213,13 +1213,13 @@ Durch das Löschen der Anwendung werden diese Daten sofort entfernt.\n
<string name="poll_type">Art der Umfrage:</string>
<string name="bottom_menu">Unteres Menü</string>
<string name="top_menu">Oberes Menü</string>
<string name="report_1_title_more">Hier sind Ihre Möglichkeiten zu kontrollieren, was bei Mastodon zu sehen ist:</string>
<string name="report_1_title_more">Einstellungen zur Kontrolle dessen, was du auf Mastodon siehst:</string>
<string name="hide_content">Inhalt verbergen &lt;</string>
<string name="category_custom">Benutzerdefiniert</string>
<string name="post_message_text">Senden der Nachricht %d/%d</string>
<string name="is_up">Es ist geschafft!</string>
<string name="is_down">ist ausgefallen!</string>
<string name="post_message">Nachricht absenden</string>
<string name="post_message_text">Sende Nachricht %d/%d</string>
<string name="is_up">Ist erreichbar!</string>
<string name="is_down">Ist derzeit nicht erreichbar!</string>
<string name="post_message">Versende Nachricht…</string>
<string name="instance_health_indication">Version: %s
\n%s Benutzer - %s Statuse</string>
<string name="report_val_more2">Bösartige Links, gefälschtes Engagement oder sich wiederholende Antworten</string>
@ -1234,13 +1234,25 @@ Durch das Löschen der Anwendung werden diese Daten sofort entfernt.\n
<string name="pref_theme_base_summary">Wähle, ob die Basis des Themas dunkel oder hell sein soll</string>
<string name="types_of_notifications_to_display">Arten der anzuzeigenden Benachrichtigungen</string>
<string name="toots_visibility_title">Standardmäßige Sichtbarkeit der Toots:</string>
<string name="set_notifications_page">Anzahl der Benachrichtigungen per Laden</string>
<string name="replace_instagram_description">Verwende ein alternatives Frontend für Instagram</string>
<string name="set_notifications_page">Anzahl an Benachrichtigungen pro Ladezyklus</string>
<string name="replace_instagram_description">Nutze eine alternative Benutzeroberfläche für Instagram</string>
<string name="replace_instagram_host">Instagram Frontend Domain</string>
<string name="replace_reddit_description">Verwende ein alternatives Frontend für Reddit</string>
<string name="replace_reddit_description">Nutze eine alternative Benutzeroberfläche für Reddit</string>
<string name="replace_reddit_host">Reddit-Frontend-Domain</string>
<string name="alternative_frontends">Alternative Frontends</string>
<string name="pref_theme_base">Grundlage des Themas</string>
<string name="notifications_are">Während dieses Zeitfensters</string>
<string name="set_display_bookmark_indication">Schaltfläche \"Lesezeichen\" immer anzeigen</string>
<string name="report_more_remote">Das Konto stammt von einem anderen Server. Die anonymisierte Kopie des Berichts auch dorthin senden\?</string>
<string name="report_indication_title_status_more">Wähle die beste Übereinstimmung</string>
<string name="report_1_unfollow_title">Entfolge %1$s</string>
<string name="report_1_unfollow">Du folgst diesem Konto. Um die Beiträge nicht mehr in deiner Home-Timeline zu sehen, entfolge ihm.</string>
<string name="report_1_mute">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.</string>
<string name="report_1_block">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.</string>
<string name="notif_display_reblogs">Boosten</string>
<string name="notif_display_updates_from_people">Aktualisierungen Anderer</string>
<string name="notif_display_follows">Folgende</string>
<string name="also_boosted_by">Auch geboostet von:</string>
<string name="set_unfollow_validation_title">Entfolgen bestätigen</string>
<string name="also_favourite_by">"Auch favorisiert von: "</string>
</resources>

View File

@ -26,7 +26,7 @@
<string name="restore">Khôi phục</string>
<string name="no_result">Không có kết quả!</string>
<string name="instance">Máy chủ</string>
<string name="instance_example">Máy chủ: mastodon.social</string>
<string name="instance_example">Ví dụ: mastodon.social</string>
<string name="toast_account_changed" formatted="false">Hiện đang sử dụng tài khoản %1$s</string>
<string name="add_account">Thêm một tài khoản</string>
<string name="clipboard">Đã chép nội dung tút vào bộ nhớ tạm</string>
@ -44,7 +44,7 @@
<string name="next">Kế tiếp</string>
<string name="previous">Trước đó</string>
<string name="open_with">Mở bằng</string>
<string name="validate">Xác minh</string>
<string name="validate">Xác nhận</string>
<string name="media">Media</string>
<string name="share_with">Chia sẻ với</string>
<string name="shared_via">Chia sẻ qua Fedilab</string>
@ -61,11 +61,11 @@
<string name="translate">Dịch</string>
<string name="please_wait">Hãy chờ vài giây trước khi thực hiện hành động này.</string>
<!--- Menu -->
<string name="home_menu">Trang chính</string>
<string name="home_menu">Bảng tin</string>
<string name="local_menu">Máy chủ</string>
<string name="global_menu">Lịch trình liên kết</string>
<string name="neutral_menu_title">Tùy chọn</string>
<string name="favorites_menu">Lượt thích</string>
<string name="favorites_menu">Đã thích</string>
<string name="communication_menu_title">Giao tiếp</string>
<string name="muted_menu">Người dùng đã ẩn</string>
<string name="blocked_menu">Người dùng đã chặn</string>
@ -121,7 +121,7 @@
<item>Delete &amp; re-draft this toot?</item>
</string-array>
<string name="bookmarks">Đã lưu</string>
<string name="bookmark_add">Lưu lại</string>
<string name="bookmark_add">Lưu tút</string>
<string name="bookmark_remove">Hủy lưu</string>
<string name="bookmarks_empty">Chưa lưu gì hết</string>
<string name="status_bookmarked">Đã lưu tút!</string>
@ -287,8 +287,8 @@
<string name="set_wifi_only">Chỉ thông báo bằng WIFI</string>
<string name="set_notify">Thông báo?</string>
<string name="set_notif_silent">Tắt thông báo</string>
<string name="set_nsfw_timeout">Thời gian chờ của NSFW (giây, 0 có nghĩa là tắt)</string>
<string name="set_med_desc_timeout">Thời gian chờ mô tả media (giây, 0 nghĩa là không dùng)</string>
<string name="set_nsfw_timeout">Thời gian chờ của NSFW (giây, 0 = tắt)</string>
<string name="set_med_desc_timeout">Thời gian chờ mô tả media (giây, 0 = không dùng)</string>
<string name="settings_title_profile">Sửa hồ sơ</string>
<string name="settings_title_custom_sharing">Chia sẻ tùy chỉnh</string>
<string name="settings_custom_sharing_url">URL chia sẻ tùy chỉnh của bạn…</string>
@ -684,7 +684,7 @@
<string name="action_plain_text">Văn bản thuần</string>
<string name="action_html">HTML</string>
<string name="action_markdown">Markdown</string>
<string name="action_logout_account">Đăng xuất tài khoản</string>
<string name="action_logout_account">Đăng xuất</string>
<string name="all">Tất cả</string>
<string name="about_opencollective">Ủng hộ app</string>
<string name="more_about_opencollective">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.</string>
@ -702,7 +702,7 @@
<string name="submit">Gửi</string>
<string name="data_base_exported">Cơ sở dữ liệu đã được xuất!</string>
<string name="featured_hashtags">Hashtag thường dùng</string>
<string name="filter_timeline_with_a_tag">Lọc bảng tin bằng hashtag</string>
<string name="filter_timeline_with_a_tag">Lọc với hashtag</string>
<string name="no_tags">Không có hashtag</string>
<string name="set_hide_delete_notification_on_tab">Ẩn nút \"xóa\" trên tab thông báo</string>
<string name="set_retrieve_metadata_share_from_extras">Đính kèm hình ảnh khi chia sẻ một URL</string>
@ -737,7 +737,7 @@
<string name="action_reorder_timeline">Sắp xếp bảng tin</string>
<string name="warning_main_timeline">Bảng tin chính có thể bị ẩn!</string>
<string name="action_bbcode">BBCode</string>
<string name="set_sensitive_content">Ảnh/video là nội dung nhạy cảm</string>
<string name="set_sensitive_content">Tài khoản nhạy cảm</string>
<string name="gnu_instance">Máy chủ GNU</string>
<string name="cached_status">Tút lưu trong bộ nhớ đệm</string>
<string name="set_forward_tags">Dùng lại hashtag trong trả lời</string>
@ -874,7 +874,7 @@
<string name="toast_empty_content">Nội dung trống!</string>
<string name="set_display_fedilab_features_button">Hiện nút tính năng Fedilab</string>
<string name="audio">Ứng dụng cần truy cập ghi âm</string>
<string name="voice_message">Tin nhắn thoại</string>
<string name="voice_message">Ghi âm</string>
<string name="set_quick_reply">Chèn trả lời nhanh</string>
<string name="reply_might_be_useless">Tài khoản bạn đang trả lời có thể không thấy trả lời của bạn!</string>
<string name="set_remember_position_indication">Nếu tắt, ứng dụng sẽ luôn tải các tút cuối cùng</string>
@ -1093,7 +1093,7 @@
<string name="status_count">Số tút</string>
<string name="instance_count">Số máy chủ</string>
<string name="blocked">Đã chặn</string>
<string name="poll_finish_in">Kết thúc sau %s</string>
<string name="poll_finish_in">còn %s</string>
<string name="release_note_title">Có gì mới trong %s</string>
<string name="follow_account_update">Theo dõi tài khoản của tôi để cập nhật</string>
<string name="no_instance_reccord">Máy chủ này không có trên https://instances.social</string>
@ -1133,7 +1133,7 @@
<string name="no_announcements">Không có thông báo!</string>
<string name="add_reaction">Thêm biểu cảm</string>
<string name="set_custom_tabs_indication">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.</string>
<string name="set_video_cache">Bộ nhớ đệm video tính bằng MB, zero nghĩa là không lưu.</string>
<string name="set_video_cache">Bộ nhớ đệm video (MB, 0 = không lưu)</string>
<string name="set_watermark">Watermark</string>
<string name="set_watermark_indication">Tự động thêm watermark dưới hình ảnh. Nội dung có thể thay đổi cho từng tài khoản.</string>
<string name="no_distributors_found">Không tìm thấy nhà phân phối!</string>
@ -1161,7 +1161,7 @@
<string name="pref_contributor">Theme của cộng đồng</string>
<string name="pref_contributor_summary">Chọn một theme được tạo bởi cộng đồng</string>
<string name="display">Hiển thị</string>
<string name="top_menu">Menu trên</string>
<string name="top_menu">Menu trên</string>
<string name="report_val_more4">Vấn đề không phù hợp với các danh mục khác</string>
<string name="hide_content">Ẩn nội dung &lt;</string>
<string name="report_1_unfollow_title">Ngưng theo dõi %1$s</string>
@ -1173,7 +1173,7 @@
<string name="type_of_notifications_title">Chọn loại thông báo</string>
<string name="notification_sounds">Âm thanh thông báo</string>
<string name="pref_custom_theme_new_summary">Cho phép tạo theme tùy chỉnh</string>
<string name="bottom_menu">Menu phía dưới</string>
<string name="bottom_menu">Menu dưới</string>
<string name="customize_main_colors">Tùy chỉnh màu chính</string>
<string name="types_of_notifications_to_display">Loại thông báo hiển thị</string>
<string name="set_unfollow_validation_title">Xác nhận ngưng theo dõi</string>
@ -1250,7 +1250,7 @@
<string name="notif_display_updates_from_people">Cập nhật từ mọi người</string>
<string name="notif_display_follows">Theo dõi</string>
<string name="mark_all_as_read">Đánh dấu tất cả là đã đọc</string>
<string name="display_all_categories">Hiện toàn bộ danh mục</string>
<string name="display_all_categories">Hiện toàn bộ</string>
<string name="delete_notification_all_warning">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.</string>
<string name="about_mastodon">\"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.\"</string>
<string name="join_peertube_message">\"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\"</string>
@ -1267,4 +1267,6 @@
<string name="set_discoverable_content">Khám phá người dùng</string>
<string name="delete_field">Xóa mục</string>
<string name="select_a_theme">Chọn một theme</string>
<string name="also_boosted_by">Đã đăng lại bởi:</string>
<string name="also_favourite_by">"Đã thích bởi: "</string>
</resources>