Merge branch 'master' into glitch-soc/merge-upstream

Conflicts:
- `app/lib/feed_manager.rb`:
  Not a real conflict, glitch-soc-only DM-related method
  too close to changed upstream stuff.
  Ported upstream changes.
- `app/services/batched_remove_status_service.rb`:
  Additional logic in glitch-soc to clear DMs from timelines.
  Ported upstream changes and fixed the DM TL clearing logic.
- `app/workers/scheduler/feed_cleanup_scheduler.rb`:
  Additional code in glitch-soc to clear DM timelines.
  Ported upstream changes.
pull/1481/head
Claire 2020-12-23 01:47:45 +01:00
commit 537afa00f3
58 changed files with 842 additions and 538 deletions

View File

@ -55,7 +55,7 @@ All notable changes to this project will be documented in this file.
- Add indication to admin UI of whether a report has been forwarded ([ThibG](https://github.com/tootsuite/mastodon/pull/13237))
- Add display of reasons for joining of an account in admin UI ([mashirozx](https://github.com/tootsuite/mastodon/pull/15265))
- Add option to obfuscate domain name in public list of domain blocks ([Gargron](https://github.com/tootsuite/mastodon/pull/15355))
- Add option to make reasons for joining required on sign-up ([ThibG](https://github.com/tootsuite/mastodon/pull/15326), [ThibG](https://github.com/tootsuite/mastodon/pull/15358))
- Add option to make reasons for joining required on sign-up ([ThibG](https://github.com/tootsuite/mastodon/pull/15326), [ThibG](https://github.com/tootsuite/mastodon/pull/15358), [ThibG](https://github.com/tootsuite/mastodon/pull/15385), [ThibG](https://github.com/tootsuite/mastodon/pull/15405))
- Add ActivityPub follower synchronization mechanism ([ThibG](https://github.com/tootsuite/mastodon/pull/14510), [ThibG](https://github.com/tootsuite/mastodon/pull/15026))
- Add outbox attribute to instance actor ([ThibG](https://github.com/tootsuite/mastodon/pull/14721))
- Add featured hashtags as an ActivityPub collection ([Gargron](https://github.com/tootsuite/mastodon/pull/11595), [noellabo](https://github.com/tootsuite/mastodon/pull/15277))
@ -66,7 +66,7 @@ All notable changes to this project will be documented in this file.
- Add `tootctl accounts merge` ([Gargron](https://github.com/tootsuite/mastodon/pull/15201), [ThibG](https://github.com/tootsuite/mastodon/pull/15264), [ThibG](https://github.com/tootsuite/mastodon/pull/15256))
- Has someone changed their domain or subdomain thereby creating two accounts where there should be one?
- This command will fix it on your end
- Add `tootctl maintenance fix-duplicates` ([ThibG](https://github.com/tootsuite/mastodon/pull/14860), [Gargron](https://github.com/tootsuite/mastodon/pull/15223))
- Add `tootctl maintenance fix-duplicates` ([ThibG](https://github.com/tootsuite/mastodon/pull/14860), [Gargron](https://github.com/tootsuite/mastodon/pull/15223), [ThibG](https://github.com/tootsuite/mastodon/pull/15373))
- Index corruption in the database?
- This command is for you
- **Add support for managing multiple stream subscriptions in a single connection** ([Gargron](https://github.com/tootsuite/mastodon/pull/14524), [Gargron](https://github.com/tootsuite/mastodon/pull/14566), [mfmfuyu](https://github.com/tootsuite/mastodon/pull/14859), [zunda](https://github.com/tootsuite/mastodon/pull/14608))
@ -77,6 +77,7 @@ All notable changes to this project will be documented in this file.
- Add `GET /api/v1/accounts/:id/featured_tags` to REST API ([noellabo](https://github.com/tootsuite/mastodon/pull/11817), [noellabo](https://github.com/tootsuite/mastodon/pull/15270))
- Add stoplight for object storage failures, return HTTP 503 in REST API ([Gargron](https://github.com/tootsuite/mastodon/pull/13043))
- Add optional `tootctl remove media` cronjob in Helm chart ([dunn](https://github.com/tootsuite/mastodon/pull/14396))
- Add clean error message when `RAILS_ENV` is unset ([ThibG](https://github.com/tootsuite/mastodon/pull/15381))
### Changed
@ -84,7 +85,7 @@ All notable changes to this project will be documented in this file.
- Background of the overlay matches the color of the image
- Action bar to interact with or open the toot from the modal
- Change order of announcements in admin UI to be newest-first ([ThibG](https://github.com/tootsuite/mastodon/pull/15091))
- **Change account suspensions to be reversible by default** ([Gargron](https://github.com/tootsuite/mastodon/pull/14726), [ThibG](https://github.com/tootsuite/mastodon/pull/15152), [ThibG](https://github.com/tootsuite/mastodon/pull/15106), [ThibG](https://github.com/tootsuite/mastodon/pull/15100), [ThibG](https://github.com/tootsuite/mastodon/pull/15099), [noellabo](https://github.com/tootsuite/mastodon/pull/14855))
- **Change account suspensions to be reversible by default** ([Gargron](https://github.com/tootsuite/mastodon/pull/14726), [ThibG](https://github.com/tootsuite/mastodon/pull/15152), [ThibG](https://github.com/tootsuite/mastodon/pull/15106), [ThibG](https://github.com/tootsuite/mastodon/pull/15100), [ThibG](https://github.com/tootsuite/mastodon/pull/15099), [noellabo](https://github.com/tootsuite/mastodon/pull/14855), [ThibG](https://github.com/tootsuite/mastodon/pull/15380))
- Suspensions no longer equal deletions
- A suspended account can be unsuspended with minimal consequences for 30 days
- Immediate deletion of data is still available as an explicit option
@ -162,6 +163,7 @@ All notable changes to this project will be documented in this file.
- Fix inefficiency when fetching bookmarks ([akihikodaki](https://github.com/tootsuite/mastodon/pull/14674))
- Fix inefficiency when fetching favourites ([akihikodaki](https://github.com/tootsuite/mastodon/pull/14673))
- Fix inefficiency when fetching media-only account timeline ([akihikodaki](https://github.com/tootsuite/mastodon/pull/14675))
- Fix inefficieny when deleting accounts ([Gargron](https://github.com/tootsuite/mastodon/pull/15387), [ThibG](https://github.com/tootsuite/mastodon/pull/15409), [ThibG](https://github.com/tootsuite/mastodon/pull/15407), [ThibG](https://github.com/tootsuite/mastodon/pull/15408), [ThibG](https://github.com/tootsuite/mastodon/pull/15402))
- Fix redundant query when processing batch actions on custom emojis ([niwatori24](https://github.com/tootsuite/mastodon/pull/14534))
- Fix slow distinct queries where grouped queries are faster ([Gargron](https://github.com/tootsuite/mastodon/pull/15287))
- Fix performance on instances list in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/15282))

View File

@ -149,7 +149,7 @@
"emoji_button.search_results": "Suchergebnisse",
"emoji_button.symbols": "Symbole",
"emoji_button.travel": "Reisen und Orte",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_suspended": "Konto gesperrt",
"empty_column.account_timeline": "Keine Beiträge!",
"empty_column.account_unavailable": "Konto nicht verfügbar",
"empty_column.blocks": "Du hast keine Profile blockiert.",
@ -266,9 +266,9 @@
"lists.edit.submit": "Titel ändern",
"lists.new.create": "Liste hinzufügen",
"lists.new.title_placeholder": "Neuer Titel der Liste",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.followed": "Jeder gefolgte Benutzer",
"lists.replies_policy.list": "Mitglieder der Liste",
"lists.replies_policy.none": "Niemand",
"lists.replies_policy.title": "Antworten anzeigen für:",
"lists.search": "Suche nach Leuten denen du folgst",
"lists.subheading": "Deine Listen",
@ -334,12 +334,12 @@
"notifications.filter.mentions": "Erwähnungen",
"notifications.filter.polls": "Ergebnisse der Umfrage",
"notifications.filter.statuses": "Updates von Personen, denen du folgst",
"notifications.grant_permission": "Grant permission.",
"notifications.grant_permission": "Zugriff gewährt.",
"notifications.group": "{count} Benachrichtigungen",
"notifications.mark_as_read": "Alle Benachrichtigungen als gelesen markieren",
"notifications.permission_denied": "Desktop-Benachrichtigungen können nicht aktiviert werden, da die Berechtigung verweigert wurde.",
"notifications.permission_denied_alert": "Desktop-Benachrichtigungen können nicht aktiviert werden, da die Browser-Berechtigung zuvor verweigert wurde",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications.permission_required": "Desktop-Benachrichtigungen sind nicht verfügbar, da die erforderliche Berechtigung nicht erteilt wurde.",
"notifications_permission_banner.enable": "Aktiviere Desktop-Benachrichtigungen",
"notifications_permission_banner.how_to_control": "Um Benachrichtigungen zu erhalten, wenn Mastodon nicht geöffnet ist, aktiviere die Desktop-Benachrichtigungen. Du kannst genau bestimmen, welche Arten von Interaktionen Desktop-Benachrichtigungen über die {icon} -Taste erzeugen, sobald diese aktiviert sind.",
"notifications_permission_banner.title": "Verpasse nie etwas",

View File

@ -353,13 +353,13 @@
"poll_button.add_poll": "Aldoni balotenketon",
"poll_button.remove_poll": "Forigi balotenketon",
"privacy.change": "Agordi mesaĝan privatecon",
"privacy.direct.long": "Afiŝi nur al menciitaj uzantoj",
"privacy.direct.long": "Videbla nur al menciitaj uzantoj",
"privacy.direct.short": "Rekta",
"privacy.private.long": "Afiŝi nur al sekvantoj",
"privacy.private.short": "Nur por sekvantoj",
"privacy.public.long": "Afiŝi en publikaj tempolinioj",
"privacy.private.long": "Videbla nur al viaj sekvantoj",
"privacy.private.short": "Nur al sekvantoj",
"privacy.public.long": "Videbla al ĉiuj, afiŝita en publikaj tempolinioj",
"privacy.public.short": "Publika",
"privacy.unlisted.long": "Ne afiŝi en publikaj tempolinioj",
"privacy.unlisted.long": "Videbla al ĉiuj, sed ne en publikaj tempolinioj",
"privacy.unlisted.short": "Nelistigita",
"refresh": "Refreŝigu",
"regeneration_indicator.label": "Ŝargado…",

View File

@ -438,7 +438,7 @@
"tabs_bar.local_timeline": "Fil public local",
"tabs_bar.notifications": "Notifications",
"tabs_bar.search": "Chercher",
"time_remaining.days": "{number, plural, one {# day} other {# days}} restants",
"time_remaining.days": "{number, plural, one {# jour} other {# jours}} restant·s",
"time_remaining.hours": "{number, plural, one {# heure} other {# heures}} restantes",
"time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} restantes",
"time_remaining.moments": "Encore quelques instants",

View File

@ -134,7 +134,7 @@
"directory.new_arrivals": "New arrivals",
"directory.recently_active": "Nedavno aktivni",
"embed.instructions": "Embed this status on your website by copying the code below.",
"embed.preview": "Here is what it will look like:",
"embed.preview": "Evo kako će izgledati:",
"emoji_button.activity": "Aktivnost",
"emoji_button.custom": "Prilagođeno",
"emoji_button.flags": "Zastave",
@ -149,7 +149,7 @@
"emoji_button.search_results": "Rezultati pretraživanja",
"emoji_button.symbols": "Simboli",
"emoji_button.travel": "Putovanje i mjesta",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_suspended": "Račun je suspendiran",
"empty_column.account_timeline": "Ovdje nema tootova!",
"empty_column.account_unavailable": "Profil nije dostupan",
"empty_column.blocks": "Još niste blokirali nikoga.",
@ -165,7 +165,7 @@
"empty_column.home.public_timeline": "javnu vremensku crtu",
"empty_column.list": "Na ovoj listi još nema ničega. Kada članovi ove liste objave nove tootove, oni će se pojaviti ovdje.",
"empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
"empty_column.mutes": "You haven't muted any users yet.",
"empty_column.mutes": "Niste utišali nijednog korisnika.",
"empty_column.notifications": "Još nemate obavijesti. Komunicirajte s drugima kako biste započeli razgovor.",
"empty_column.public": "Ovdje nema ništa! Napišite nešto javno ili ručno pratite korisnike s drugi poslužitelja da biste ovo popunili",
"error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
@ -266,9 +266,9 @@
"lists.edit.submit": "Promijeni naslov",
"lists.new.create": "Dodaj listu",
"lists.new.title_placeholder": "Naziv nove liste",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.followed": "Bilo koji praćeni korisnik",
"lists.replies_policy.list": "Članovi liste",
"lists.replies_policy.none": "Nitko",
"lists.replies_policy.title": "Show replies to:",
"lists.search": "Traži među praćenim ljudima",
"lists.subheading": "Vaše liste",
@ -277,10 +277,10 @@
"media_gallery.toggle_visible": "Sakrij {number, plural, one {sliku} other {slike}}",
"missing_indicator.label": "Nije pronađeno",
"missing_indicator.sublabel": "This resource could not be found",
"mute_modal.duration": "Duration",
"mute_modal.duration": "Trajanje",
"mute_modal.hide_notifications": "Hide notifications from this user?",
"mute_modal.indefinite": "Indefinite",
"navigation_bar.apps": "Mobile apps",
"navigation_bar.apps": "Mobilne aplikacije",
"navigation_bar.blocks": "Blokirani korisnici",
"navigation_bar.bookmarks": "Bookmarks",
"navigation_bar.community_timeline": "Lokalna vremenska crta",
@ -336,7 +336,7 @@
"notifications.filter.statuses": "Updates from people you follow",
"notifications.grant_permission": "Grant permission.",
"notifications.group": "{count} obavijesti",
"notifications.mark_as_read": "Mark every notification as read",
"notifications.mark_as_read": "Označi sve obavijesti kao pročitane",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
@ -384,7 +384,7 @@
"search_popout.tips.status": "toot",
"search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags",
"search_popout.tips.user": "korisnik",
"search_results.accounts": "People",
"search_results.accounts": "Ljudi",
"search_results.hashtags": "Hashtags",
"search_results.statuses": "Toots",
"search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",

View File

@ -128,7 +128,7 @@
"conversation.delete": "Ջնջել խօսակցութիւնը",
"conversation.mark_as_read": "Նշել որպէս ընթերցուած",
"conversation.open": "Դիտել խօսակցութիւնը",
"conversation.with": "{names}֊երի հետ",
"conversation.with": "{names}-ի հետ",
"directory.federated": "Յայտնի դաշնեզերքից",
"directory.local": "{domain} տիրոյթից միայն",
"directory.new_arrivals": "Նորեկներ",
@ -268,7 +268,7 @@
"lists.new.title_placeholder": "Նոր ցանկի վերնագիր",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.none": "Ոչ ոք",
"lists.replies_policy.title": "Show replies to:",
"lists.search": "Փնտրել քո հետեւած մարդկանց մեջ",
"lists.subheading": "Քո ցանկերը",
@ -334,7 +334,7 @@
"notifications.filter.mentions": "Նշումները",
"notifications.filter.polls": "Հարցման արդիւնքները",
"notifications.filter.statuses": "Updates from people you follow",
"notifications.grant_permission": "Grant permission.",
"notifications.grant_permission": "Թոյլատրել։",
"notifications.group": "{count} ծանուցում",
"notifications.mark_as_read": "Համարել բոլոր ծանուցումները ընթերցած",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
@ -343,7 +343,7 @@
"notifications_permission_banner.enable": "Միացնել դիտարկչից ծանուցումները",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Never miss a thing",
"picture_in_picture.restore": "Put it back",
"picture_in_picture.restore": "Հետ բերել",
"poll.closed": "Փակ",
"poll.refresh": "Թարմացնել",
"poll.total_people": "{count, plural, one {# հոգի} other {# հոգի}}",
@ -470,7 +470,7 @@
"upload_modal.detect_text": "Հայտնբերել տեքստը նկարից",
"upload_modal.edit_media": "Խմբագրել մեդիան",
"upload_modal.hint": "Սեղմէք եւ տեղաշարժէք նախադիտման շրջանակը՝ որ ընտրէք մանրապատկերում միշտ տեսանելի կէտը։",
"upload_modal.preparing_ocr": "Preparing OCR…",
"upload_modal.preparing_ocr": "Գրաճանաչման նախապատրաստում…",
"upload_modal.preview_label": "Նախադիտում ({ratio})",
"upload_progress.label": "Վերբեռնվում է…",
"video.close": "Փակել տեսագրութիւնը",

View File

@ -2,17 +2,17 @@
"account.account_note_header": "കുറിപ്പ്",
"account.add_or_remove_from_list": "പട്ടികയിൽ ചേർക്കുകയോ അല്ലെങ്കിൽ മാറ്റുകയോ ചെയ്യുക",
"account.badges.bot": "റോബോട്ട്",
"account.badges.group": "കൂട്ടം",
"account.block": "@{name} നെ ബ്ലോക്ക് ചെയ്യുക",
"account.badges.group": "ഗ്രൂപ്പ്",
"account.block": "@{name} -നെ തടയുക",
"account.block_domain": "{domain} ൽ നിന്നുള്ള എല്ലാം മറയ്കുക",
"account.blocked": "തടഞ്ഞു",
"account.browse_more_on_origin_server": "യഥാർത്ഥ പ്രൊഫൈലിലേക്ക് പോവുക",
"account.cancel_follow_request": "പിന്തുടരാനുള്ള അപേക്ഷ നിരസിക്കുക",
"account.direct": "@{name} ന് നേരിട്ട് മെസേജ് അയക്കുക",
"account.disable_notifications": "Stop notifying me when @{name} posts",
"account.disable_notifications": "@{name} പോസ്റ്റുചെയ്യുന്നത് എന്നെ അറിയിക്കുന്നത് നിർത്തുക",
"account.domain_blocked": "മേഖല മറയ്ക്കപ്പെട്ടിരിക്കുന്നു",
"account.edit_profile": "പ്രൊഫൈൽ തിരുത്തുക",
"account.enable_notifications": "Notify me when @{name} posts",
"account.enable_notifications": "@{name} പോസ്റ്റ് ചെയ്യുമ്പോൾ എന്നെ അറിയിക്കുക",
"account.endorse": "പ്രൊഫൈലിൽ പ്രകടമാക്കുക",
"account.follow": "പിന്തുടരുക",
"account.followers": "പിന്തുടരുന്നവർ",
@ -67,7 +67,7 @@
"column.domain_blocks": "മറയ്ക്കപ്പെട്ട മേഖലകൾ",
"column.favourites": "പ്രിയപ്പെട്ടവ",
"column.follow_requests": "പിന്തുടരാനുള്ള അഭ്യർത്ഥനകൾ",
"column.home": "ഭവന",
"column.home": "ഹോ",
"column.lists": "പട്ടികകൾ",
"column.mutes": "നിശബ്ദമാക്കപ്പെട്ട ഉപയോക്താക്കൾ",
"column.notifications": "അറിയിപ്പുകൾ",
@ -105,17 +105,17 @@
"compose_form.spoiler.unmarked": "എഴുത്ത് മറയ്ക്കപ്പെട്ടിട്ടില്ല",
"compose_form.spoiler_placeholder": "നിങ്ങളുടെ മുന്നറിയിപ്പ് ഇവിടെ എഴുതുക",
"confirmation_modal.cancel": "റദ്ദാക്കുക",
"confirmations.block.block_and_report": "Block & Report",
"confirmations.block.block_and_report": "തടയുകയും റിപ്പോർട്ടും ചെയ്യുക",
"confirmations.block.confirm": "തടയുക",
"confirmations.block.message": "Are you sure you want to block {name}?",
"confirmations.block.message": "{name} തടയാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുണ്ടോ?",
"confirmations.delete.confirm": "മായ്ക്കുക",
"confirmations.delete.message": "Are you sure you want to delete this status?",
"confirmations.delete.message": "ഈ ടൂട്ട് ഇല്ലാതാക്കണം എന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?",
"confirmations.delete_list.confirm": "മായ്ക്കുക",
"confirmations.delete_list.message": "Are you sure you want to permanently delete this list?",
"confirmations.domain_block.confirm": "Hide entire domain",
"confirmations.delete_list.message": "ഈ പട്ടിക എന്നെന്നേക്കുമായി നീക്കം ചെയ്യാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുണ്ടോ?",
"confirmations.domain_block.confirm": "മുഴുവൻ ഡൊമെയ്‌നും തടയുക",
"confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.",
"confirmations.logout.confirm": "പുറത്തുകടക്കുക",
"confirmations.logout.message": "Are you sure you want to log out?",
"confirmations.logout.message": "നിങ്ങൾക്ക് ലോഗ് ഔട്ട് ചെയ്യണമെന്ന് ഉറപ്പാണോ?",
"confirmations.mute.confirm": "നിശ്ശബ്ദമാക്കുക",
"confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
"confirmations.mute.message": "Are you sure you want to mute {name}?",
@ -133,7 +133,7 @@
"directory.local": "{domain} ൽ നിന്ന് മാത്രം",
"directory.new_arrivals": "പുതിയ വരവുകൾ",
"directory.recently_active": "അടുത്തിടെയായി സജീവമായ",
"embed.instructions": "Embed this status on your website by copying the code below.",
"embed.instructions": "ചുവടെയുള്ള കോഡ് പകർത്തിക്കൊണ്ട് നിങ്ങളുടെ വെബ്‌സൈറ്റിൽ ഈ ടൂട്ട് ഉൾച്ചേർക്കുക.",
"embed.preview": "ഇത് ഇങ്ങനെ കാണപ്പെടും:",
"emoji_button.activity": "പ്രവര്‍ത്തനം",
"emoji_button.custom": "സ്വന്തമായ ഭേദഗതി",
@ -141,7 +141,7 @@
"emoji_button.food": "ഭക്ഷണവും പാനീയവും",
"emoji_button.label": "ഇമോജി ചേർക്കുക",
"emoji_button.nature": "പ്രകൃതി",
"emoji_button.not_found": "മോജി പാടില്ല (╯°□°)╯︵ ┻━┻",
"emoji_button.not_found": "മോജി പാടില്ല (╯°□°)╯︵ ┻━┻",
"emoji_button.objects": "വസ്തുക്കൾ",
"emoji_button.people": "ആളുകൾ",
"emoji_button.recent": "അടിക്കടി ഉപയോഗിക്കുന്നവ",
@ -149,7 +149,7 @@
"emoji_button.search_results": "തിരച്ചിൽ ഫലങ്ങൾ",
"emoji_button.symbols": "ചിഹ്നങ്ങൾ",
"emoji_button.travel": "യാത്രയും സ്ഥലങ്ങളും",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_suspended": "അക്കൗണ്ട് താൽക്കാലികമായി നിർത്തിവച്ചു",
"empty_column.account_timeline": "ഇവിടെ ടൂട്ടുകൾ ഇല്ല!",
"empty_column.account_unavailable": "പ്രൊഫൈൽ ലഭ്യമല്ല",
"empty_column.blocks": "നിങ്ങൾ ഇതുവരെ ഒരു ഉപയോക്താക്കളെയും തടഞ്ഞിട്ടില്ല.",
@ -160,7 +160,7 @@
"empty_column.favourited_statuses": "നിങ്ങൾക്ക് ഇത് വരെ ഒരു പ്രിയപ്പെട്ട ടൂട്ടും ഇല്ല. നിങ്ങൾ അങ്ങനെ ഒന്ന് പ്രിയപ്പെടുന്ന പക്ഷം അതിവിടെ കാണപ്പെടുന്നതാണ്.",
"empty_column.favourites": "ഇതുവരെ ആരും ഈ ടൂട്ട് പ്രിയപ്പെട്ടതായി അടയാളപ്പെടുത്തിയിട്ടില്ല. ആരെങ്കിലും അങ്ങനെ ചെയ്യുന്നപക്ഷം അതിവിടെ കാണപ്പെടുന്നതാണ്.",
"empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "There is nothing in this hashtag yet.",
"empty_column.hashtag": "ഈ ഹാഷ്‌ടാഗിൽ ഇതുവരെ ഒന്നുമില്ല.",
"empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
"empty_column.home.public_timeline": "പൊതു സമയരേഖ",
"empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
@ -179,7 +179,7 @@
"follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
"generic.saved": "സംരക്ഷിച്ചു",
"getting_started.developers": "വികസിപ്പിക്കുന്നവർ",
"getting_started.directory": "രൂപരേഖ നാമഗൃഹസൂചി",
"getting_started.directory": "പ്രൊഫൈൽ ഡയറക്ടറി",
"getting_started.documentation": "രേഖാ സമാഹരണം",
"getting_started.heading": "തുടക്കം കുറിക്കുക",
"getting_started.invite": "ആളുകളെ ക്ഷണിക്കുക",
@ -190,7 +190,7 @@
"hashtag.column_header.tag_mode.any": "അല്ലെങ്കിൽ {additional}",
"hashtag.column_header.tag_mode.none": "{additional} ഇല്ലാതെ",
"hashtag.column_settings.select.no_options_message": "ഒരു സൂചനയും കണ്ടെത്തിയില്ല",
"hashtag.column_settings.select.placeholder": "ചർച്ചാവിഷയങ്ങൾ എഴുതുക…",
"hashtag.column_settings.select.placeholder": "ഹാഷ്ടാഗുകൾ എഴുതുക…",
"hashtag.column_settings.tag_mode.all": "ഇവയെല്ലാം",
"hashtag.column_settings.tag_mode.any": "ഇവയിലേതെങ്കിലും",
"hashtag.column_settings.tag_mode.none": "ഇതിലൊന്നുമല്ല",
@ -206,7 +206,7 @@
"introduction.federation.action": "അടുത്തത്",
"introduction.federation.federated.headline": "സംയുക്തമാക്കിയ",
"introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
"introduction.federation.home.headline": "ഭവന",
"introduction.federation.home.headline": "ഹോ",
"introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
"introduction.federation.local.headline": "പ്രാദേശികം",
"introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
@ -233,17 +233,17 @@
"keyboard_shortcuts.favourites": "to open favourites list",
"keyboard_shortcuts.federated": "to open federated timeline",
"keyboard_shortcuts.heading": "കീബോർഡ് എളുപ്പവഴികൾ",
"keyboard_shortcuts.home": "to open home timeline",
"keyboard_shortcuts.home": "ഹോം ടൈംലൈൻ തുറക്കുന്നതിന്",
"keyboard_shortcuts.hotkey": "Hotkey",
"keyboard_shortcuts.legend": "to display this legend",
"keyboard_shortcuts.local": "to open local timeline",
"keyboard_shortcuts.local": "പ്രാദേശിക സമയരേഖ തുറക്കാൻ",
"keyboard_shortcuts.mention": "to mention author",
"keyboard_shortcuts.muted": "to open muted users list",
"keyboard_shortcuts.my_profile": "to open your profile",
"keyboard_shortcuts.my_profile": "നിങ്ങളുടെ പ്രൊഫൈൽ തുറക്കാൻ",
"keyboard_shortcuts.notifications": "to open notifications column",
"keyboard_shortcuts.open_media": "to open media",
"keyboard_shortcuts.open_media": "മീഡിയ തുറക്കാൻ",
"keyboard_shortcuts.pinned": "to open pinned toots list",
"keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.profile": "രചയിതാവിന്റെ പ്രൊഫൈൽ തുറക്കുന്നതിന്",
"keyboard_shortcuts.reply": "മറുപടി അയക്കാൻ",
"keyboard_shortcuts.requests": "to open follow requests list",
"keyboard_shortcuts.search": "to focus search",
@ -268,7 +268,7 @@
"lists.new.title_placeholder": "New list title",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.none": "ആരുമില്ല",
"lists.replies_policy.title": "Show replies to:",
"lists.search": "Search among people you follow",
"lists.subheading": "എന്റെ പട്ടികകൾ",
@ -277,208 +277,208 @@
"media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}",
"missing_indicator.label": "കാണാനില്ല",
"missing_indicator.sublabel": "This resource could not be found",
"mute_modal.duration": "Duration",
"mute_modal.duration": "കാലാവധി",
"mute_modal.hide_notifications": "Hide notifications from this user?",
"mute_modal.indefinite": "Indefinite",
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Blocked users",
"navigation_bar.bookmarks": "അടയാളങ്ങൾ",
"navigation_bar.community_timeline": "Local timeline",
"mute_modal.indefinite": "അനിശ്ചിതകാല",
"navigation_bar.apps": "മൊബൈൽ ആപ്പുകൾ",
"navigation_bar.blocks": "തടയപ്പെട്ട ഉപയോക്താക്കൾ",
"navigation_bar.bookmarks": "ബുക്ക്മാർക്കുകൾ",
"navigation_bar.community_timeline": "പ്രാദേശിക സമയരേഖ",
"navigation_bar.compose": "പുതിയ ടൂട്ട് എഴുതുക",
"navigation_bar.direct": "Direct messages",
"navigation_bar.discover": "Discover",
"navigation_bar.direct": "നേരിട്ടുള്ള സന്ദേശങ്ങൾ",
"navigation_bar.discover": "കണ്ടെത്തുക",
"navigation_bar.domain_blocks": "Hidden domains",
"navigation_bar.edit_profile": "Edit profile",
"navigation_bar.favourites": "Favourites",
"navigation_bar.edit_profile": "പ്രൊഫൈൽ തിരുത്തുക",
"navigation_bar.favourites": "പ്രിയപ്പെട്ടവ",
"navigation_bar.filters": "Muted words",
"navigation_bar.follow_requests": "Follow requests",
"navigation_bar.follow_requests": "പിന്തുടരാനുള്ള അഭ്യർത്ഥനകൾ",
"navigation_bar.follows_and_followers": "Follows and followers",
"navigation_bar.info": "About this server",
"navigation_bar.info": "ഈ സെർവറിനെക്കുറിച്ച്",
"navigation_bar.keyboard_shortcuts": "Hotkeys",
"navigation_bar.lists": "Lists",
"navigation_bar.logout": "Logout",
"navigation_bar.mutes": "Muted users",
"navigation_bar.lists": "ലിസ്റ്റുകൾ",
"navigation_bar.logout": "ലോഗൗട്ട്",
"navigation_bar.mutes": "നിശബ്ദമാക്കപ്പെട്ട ഉപയോക്താക്കൾ",
"navigation_bar.personal": "Personal",
"navigation_bar.pins": "Pinned toots",
"navigation_bar.preferences": "Preferences",
"navigation_bar.preferences": "ക്രമീകരണങ്ങൾ",
"navigation_bar.public_timeline": "Federated timeline",
"navigation_bar.security": "Security",
"navigation_bar.security": "സുരക്ഷ",
"notification.favourite": "{name} favourited your status",
"notification.follow": "{name} followed you",
"notification.follow": "{name} നിങ്ങളെ പിന്തുടർന്നു",
"notification.follow_request": "{name} has requested to follow you",
"notification.mention": "{name} mentioned you",
"notification.own_poll": "Your poll has ended",
"notification.own_poll": "നിങ്ങളുടെ പോൾ അവസാനിച്ചു",
"notification.poll": "A poll you have voted in has ended",
"notification.reblog": "{name} boosted your status",
"notification.status": "{name} just posted",
"notifications.clear": "Clear notifications",
"notification.reblog": "{name} നിങ്ങളുടെ പോസ്റ്റ് ബൂസ്റ്റ് ചെയ്തു",
"notification.status": "{name} ഇപ്പോൾ പോസ്റ്റുചെയ്‌തു",
"notifications.clear": "അറിയിപ്പ് മായ്ക്കുക",
"notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?",
"notifications.column_settings.alert": "Desktop notifications",
"notifications.column_settings.favourite": "Favourites:",
"notifications.column_settings.filter_bar.advanced": "Display all categories",
"notifications.column_settings.alert": "ഡെസ്ക്ടോപ്പ് അറിയിപ്പുകൾ",
"notifications.column_settings.favourite": "പ്രിയപ്പെട്ടവ:",
"notifications.column_settings.filter_bar.advanced": "എല്ലാ വിഭാഗങ്ങളും പ്രദർശിപ്പിക്കുക",
"notifications.column_settings.filter_bar.category": "Quick filter bar",
"notifications.column_settings.filter_bar.show": "Show",
"notifications.column_settings.filter_bar.show": "കാണിക്കുക",
"notifications.column_settings.follow": "New followers:",
"notifications.column_settings.follow_request": "New follow requests:",
"notifications.column_settings.follow_request": "പുതിയ പിന്തുടരൽ അഭ്യർത്ഥനകൾ:",
"notifications.column_settings.mention": "Mentions:",
"notifications.column_settings.poll": "Poll results:",
"notifications.column_settings.poll": "പോൾ ഫലങ്ങൾ:",
"notifications.column_settings.push": "Push notifications",
"notifications.column_settings.reblog": "Boosts:",
"notifications.column_settings.reblog": "ബൂസ്റ്റുകൾ:",
"notifications.column_settings.show": "Show in column",
"notifications.column_settings.sound": "Play sound",
"notifications.column_settings.status": "New toots:",
"notifications.filter.all": "All",
"notifications.filter.boosts": "Boosts",
"notifications.filter.favourites": "Favourites",
"notifications.filter.follows": "Follows",
"notifications.column_settings.sound": "ശബ്ദം പ്ലേ ചെയ്യുക",
"notifications.column_settings.status": "പുതിയ ടൂട്ടുകൾ:",
"notifications.filter.all": "എല്ലാം",
"notifications.filter.boosts": "ബൂസ്റ്റുകൾ",
"notifications.filter.favourites": "പ്രിയപ്പെട്ടവ",
"notifications.filter.follows": "പിന്തുടരുന്നു",
"notifications.filter.mentions": "Mentions",
"notifications.filter.polls": "Poll results",
"notifications.filter.statuses": "Updates from people you follow",
"notifications.grant_permission": "Grant permission.",
"notifications.group": "{count} notifications",
"notifications.mark_as_read": "Mark every notification as read",
"notifications.filter.polls": "പോൾ ഫലങ്ങൾ",
"notifications.filter.statuses": "നിങ്ങൾ പിന്തുടരുന്ന ആളുകളിൽ നിന്നുള്ള അപ്‌ഡേറ്റുകൾ",
"notifications.grant_permission": "അനുമതി നൽകുക.",
"notifications.group": "{count} അറിയിപ്പുകൾ",
"notifications.mark_as_read": "എല്ലാ അറിയിപ്പുകളും വായിച്ചതായി അടയാളപ്പെടുത്തുക",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications_permission_banner.enable": "Enable desktop notifications",
"notifications_permission_banner.enable": "ഡെസ്ക്ടോപ്പ് അറിയിപ്പുകൾ പ്രാപ്തമാക്കുക",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Never miss a thing",
"picture_in_picture.restore": "Put it back",
"poll.closed": "Closed",
"poll.refresh": "Refresh",
"picture_in_picture.restore": "തിരികെ വയ്ക്കുക",
"poll.closed": "അടച്ചു",
"poll.refresh": "പുതുക്കുക",
"poll.total_people": "{count, plural, one {# person} other {# people}}",
"poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
"poll.vote": "Vote",
"poll.vote": "വോട്ട് ചെയ്യുക",
"poll.voted": "You voted for this answer",
"poll_button.add_poll": "Add a poll",
"poll_button.remove_poll": "Remove poll",
"poll_button.add_poll": "ഒരു പോൾ ചേർക്കുക",
"poll_button.remove_poll": "പോൾ നീക്കംചെയ്യുക",
"privacy.change": "Adjust status privacy",
"privacy.direct.long": "Post to mentioned users only",
"privacy.direct.short": "Direct",
"privacy.direct.short": "നേരിട്ട്",
"privacy.private.long": "Post to followers only",
"privacy.private.short": "Followers-only",
"privacy.public.long": "Post to public timelines",
"privacy.public.short": "Public",
"privacy.unlisted.long": "Do not show in public timelines",
"privacy.unlisted.short": "Unlisted",
"refresh": "Refresh",
"regeneration_indicator.label": "Loading…",
"regeneration_indicator.sublabel": "Your home feed is being prepared!",
"refresh": "പുതുക്കുക",
"regeneration_indicator.label": "ലഭ്യമാക്കുന്നു…",
"regeneration_indicator.sublabel": "നിങ്ങളുടെ ഹോം ഫീഡ് തയാറാക്കുന്നു!",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}h",
"relative_time.just_now": "now",
"relative_time.just_now": "ഇപ്പോൾ",
"relative_time.minutes": "{number}m",
"relative_time.seconds": "{number}s",
"relative_time.today": "today",
"reply_indicator.cancel": "Cancel",
"relative_time.today": "ഇന്ന്",
"reply_indicator.cancel": "റദ്ദാക്കുക",
"report.forward": "Forward to {target}",
"report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?",
"report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:",
"report.placeholder": "Additional comments",
"report.submit": "Submit",
"report.placeholder": "കൂടുതൽ അഭിപ്രായങ്ങൾ",
"report.submit": "സമർപ്പിക്കുക",
"report.target": "Report {target}",
"search.placeholder": "Search",
"search.placeholder": "തിരയുക",
"search_popout.search_format": "Advanced search format",
"search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
"search_popout.tips.hashtag": "hashtag",
"search_popout.tips.status": "status",
"search_popout.tips.hashtag": "ഹാഷ്ടാഗ്",
"search_popout.tips.status": "ടൂട്ട്",
"search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags",
"search_popout.tips.user": "user",
"search_results.accounts": "People",
"search_results.hashtags": "Hashtags",
"search_results.statuses": "Toots",
"search_popout.tips.user": "ഉപയോക്താവ്",
"search_results.accounts": "ആളുകൾ",
"search_results.hashtags": "ഹാഷ്ടാഗുകൾ",
"search_results.statuses": "ടൂട്ടുകൾ",
"search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
"search_results.total": "{count, number} {count, plural, one {result} other {results}}",
"status.admin_account": "Open moderation interface for @{name}",
"status.admin_status": "Open this status in the moderation interface",
"status.block": "Block @{name}",
"status.bookmark": "Bookmark",
"status.block": "@{name} -നെ തടയുക",
"status.bookmark": "ബുക്ക്മാർക്ക്",
"status.cancel_reblog_private": "Unboost",
"status.cannot_reblog": "This post cannot be boosted",
"status.copy": "Copy link to status",
"status.cannot_reblog": "ഈ പോസ്റ്റ് ബൂസ്റ്ചെയ്യാൻ കഴിയില്ല",
"status.copy": "ടൂട്ടിലേക്ക് ലിങ്ക് പകർത്തുക",
"status.delete": "മായ്ക്കുക",
"status.detailed_status": "വിശദമായ സംഭാഷണ കാഴ്‌ച",
"status.direct": "@{name} ന് നേരിട്ട് മെസേജ് അയക്കുക",
"status.embed": "ഉൾച്ചേർക്കുക",
"status.favourite": "പ്രിയപ്പെട്ടത്",
"status.filtered": "Filtered",
"status.filtered": "ഫിൽട്ടർ ചെയ്‌തു",
"status.load_more": "കൂടുതൽ ലോഡു ചെയ്യുക",
"status.media_hidden": "Media hidden",
"status.media_hidden": "മീഡിയ മറച്ചു",
"status.mention": "@{name} സൂചിപ്പിക്കുക",
"status.more": "More",
"status.mute": "Mute @{name}",
"status.more": "കൂടുതൽ",
"status.mute": "@{name}-നെ നിശ്ശബ്ദമാക്കുക",
"status.mute_conversation": "Mute conversation",
"status.open": "Expand this status",
"status.pin": "Pin on profile",
"status.pinned": "Pinned toot",
"status.read_more": "Read more",
"status.reblog": "Boost",
"status.read_more": "കൂടുതൽ വായിക്കുക",
"status.reblog": "ബൂസ്റ്റ്",
"status.reblog_private": "Boost with original visibility",
"status.reblogged_by": "{name} boosted",
"status.reblogged_by": "{name} ബൂസ്റ്റ് ചെയ്തു",
"status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Delete & re-draft",
"status.remove_bookmark": "Remove bookmark",
"status.reply": "Reply",
"status.redraft": "ഇല്ലാതാക്കുക & വീണ്ടും ഡ്രാഫ്റ്റ് ചെയ്യുക",
"status.remove_bookmark": "ബുക്ക്മാർക്ക് നീക്കംചെയ്യുക",
"status.reply": "മറുപടി",
"status.replyAll": "Reply to thread",
"status.report": "Report @{name}",
"status.sensitive_warning": "Sensitive content",
"status.share": "Share",
"status.show_less": "Show less",
"status.share": "പങ്കിടുക",
"status.show_less": "കുറച്ച് കാണിക്കുക",
"status.show_less_all": "Show less for all",
"status.show_more": "Show more",
"status.show_more_all": "Show more for all",
"status.show_more": "കൂടുതകൽ കാണിക്കുക",
"status.show_more_all": "എല്ലാവർക്കുമായി കൂടുതൽ കാണിക്കുക",
"status.show_thread": "Show thread",
"status.uncached_media_warning": "Not available",
"status.uncached_media_warning": "ലഭ്യമല്ല",
"status.unmute_conversation": "Unmute conversation",
"status.unpin": "Unpin from profile",
"suggestions.dismiss": "Dismiss suggestion",
"suggestions.header": "You might be interested in…",
"tabs_bar.federated_timeline": "Federated",
"tabs_bar.home": "Home",
"tabs_bar.local_timeline": "Local",
"tabs_bar.notifications": "Notifications",
"tabs_bar.search": "Search",
"suggestions.header": "നിങ്ങൾക്ക് താൽപ്പര്യമുണ്ടാകാം…",
"tabs_bar.federated_timeline": "സംയുക്തമാക്കിയ",
"tabs_bar.home": "ഹോം",
"tabs_bar.local_timeline": "പ്രാദേശികം",
"tabs_bar.notifications": "അറിയിപ്പുകൾ",
"tabs_bar.search": "തിരയുക",
"time_remaining.days": "{number, plural, one {# day} other {# days}} left",
"time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left",
"time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left",
"time_remaining.moments": "Moments remaining",
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
"timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.",
"timeline_hint.resources.followers": "Followers",
"timeline_hint.resources.follows": "Follows",
"timeline_hint.resources.statuses": "Older toots",
"timeline_hint.resources.followers": "പിന്തുടരുന്നവർ",
"timeline_hint.resources.follows": "പിന്തുടരുന്നു",
"timeline_hint.resources.statuses": "പഴയ ടൂട്ടുകൾ",
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking",
"trends.trending_now": "Trending now",
"trends.trending_now": "ഇപ്പോൾ ട്രെൻഡിംഗ്",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"units.short.billion": "{count}B",
"units.short.million": "{count}M",
"units.short.million": "{count}ദശലക്ഷം",
"units.short.thousand": "{count}K",
"upload_area.title": "Drag & drop to upload",
"upload_button.label": "Add images, a video or an audio file",
"upload_error.limit": "File upload limit exceeded.",
"upload_area.title": "അപ്‌ലോഡുചെയ്യാൻ വലിച്ചിടുക",
"upload_button.label": "ഇമേജുകൾ, ഒരു വീഡിയോ അല്ലെങ്കിൽ ഓഡിയോ ഫയൽ ചേർക്കുക",
"upload_error.limit": "ഫയൽ അപ്‌ലോഡ് പരിധി കവിഞ്ഞു.",
"upload_error.poll": "File upload not allowed with polls.",
"upload_form.audio_description": "Describe for people with hearing loss",
"upload_form.description": "Describe for the visually impaired",
"upload_form.edit": "Edit",
"upload_form.thumbnail": "Change thumbnail",
"upload_form.undo": "Delete",
"upload_form.audio_description": "കേൾവിശക്തി ഇല്ലാത്തവർക്ക് വേണ്ടി വിവരണം നൽകൂ",
"upload_form.description": "കാഴ്ചശക്തി ഇല്ലാത്തവർക്ക് വേണ്ടി വിവരണം നൽകൂ",
"upload_form.edit": "തിരുത്തുക",
"upload_form.thumbnail": "ലഘുചിത്രം മാറ്റുക",
"upload_form.undo": "ഇല്ലാതാക്കുക",
"upload_form.video_description": "Describe for people with hearing loss or visual impairment",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.choose_image": "Choose image",
"upload_modal.apply": "പ്രയോഗിക്കുക",
"upload_modal.choose_image": "ചിത്രം തിരഞ്ഞെടുക്കുക",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.edit_media": "മീഡിയ തിരുത്തുക",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preparing_ocr": "Preparing OCR…",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Uploading…",
"video.close": "Close video",
"video.download": "Download file",
"video.close": "വീഡിയോ അടയ്ക്കുക",
"video.download": "ഫയൽ ഡൌൺലോഡ് ചെയ്യുക",
"video.exit_fullscreen": "Exit full screen",
"video.expand": "Expand video",
"video.fullscreen": "Full screen",
"video.hide": "Hide video",
"video.fullscreen": "പൂർണ്ണ സ്ക്രീൻ",
"video.hide": "വീഡിയോ മറയ്ക്കുക",
"video.mute": "Mute sound",
"video.pause": "Pause",
"video.play": "Play",

View File

@ -149,7 +149,7 @@
"emoji_button.search_results": "Zoekresultaten",
"emoji_button.symbols": "Symbolen",
"emoji_button.travel": "Reizen en plekken",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_suspended": "Account opgeschort",
"empty_column.account_timeline": "Hier zijn geen toots!",
"empty_column.account_unavailable": "Profiel is niet beschikbaar",
"empty_column.blocks": "Jij hebt nog geen enkele gebruiker geblokkeerd.",
@ -266,9 +266,9 @@
"lists.edit.submit": "Titel veranderen",
"lists.new.create": "Lijst toevoegen",
"lists.new.title_placeholder": "Naam nieuwe lijst",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.followed": "Elke gevolgde gebruiker",
"lists.replies_policy.list": "Leden van de lijst",
"lists.replies_policy.none": "Niemand",
"lists.replies_policy.title": "Toon reacties aan:",
"lists.search": "Zoek naar mensen die je volgt",
"lists.subheading": "Jouw lijsten",
@ -334,12 +334,12 @@
"notifications.filter.mentions": "Vermeldingen",
"notifications.filter.polls": "Pollresultaten",
"notifications.filter.statuses": "Updates van mensen die je volgt",
"notifications.grant_permission": "Grant permission.",
"notifications.grant_permission": "Toestemming geven.",
"notifications.group": "{count} meldingen",
"notifications.mark_as_read": "Markeer elke melding als gelezen",
"notifications.permission_denied": "Desktopmeldingen zijn niet beschikbaar omdat een eerdere browsertoestemming werd geweigerd",
"notifications.permission_denied_alert": "Desktopmeldingen kunnen niet worden ingeschakeld, omdat een eerdere browsertoestemming werd geweigerd",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications.permission_required": "Desktopmeldingen zijn niet beschikbaar omdat de benodigde toestemming niet is verleend.",
"notifications_permission_banner.enable": "Desktopmeldingen inschakelen",
"notifications_permission_banner.how_to_control": "Om meldingen te ontvangen wanneer Mastodon niet open is. Je kunt precies bepalen welke soort interacties wel of geen desktopmeldingen geven via de bovenstaande {icon} knop.",
"notifications_permission_banner.title": "Mis nooit meer iets",

View File

@ -149,7 +149,7 @@
"emoji_button.search_results": "Resultats de recèrca",
"emoji_button.symbols": "Simbòls",
"emoji_button.travel": "Viatges & lòcs",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_suspended": "Compte suspendut",
"empty_column.account_timeline": "Cap de tuts aquí!",
"empty_column.account_unavailable": "Perfil pas disponible",
"empty_column.blocks": "Avètz pas blocat degun pel moment.",
@ -266,9 +266,9 @@
"lists.edit.submit": "Cambiar lo títol",
"lists.new.create": "Ajustar una lista",
"lists.new.title_placeholder": "Títol de la nòva lista",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.followed": "Quin seguidor que siá",
"lists.replies_policy.list": "Membres de la lista",
"lists.replies_policy.none": "Degun",
"lists.replies_policy.title": "Mostrar las responsas a:",
"lists.search": "Cercar demest lo mond que seguètz",
"lists.subheading": "Vòstras listas",
@ -334,12 +334,12 @@
"notifications.filter.mentions": "Mencions",
"notifications.filter.polls": "Resultats del sondatge",
"notifications.filter.statuses": "Mesas a jorn del monde que seguissètz",
"notifications.grant_permission": "Grant permission.",
"notifications.grant_permission": "Acordar lautorizacion.",
"notifications.group": "{count} notificacions",
"notifications.mark_as_read": "Marcar totas las notificacions coma legidas",
"notifications.permission_denied": "Las notificacion burèu son pas disponiblas a causa del refús de las demandas dautorizacion navigador",
"notifications.permission_denied_alert": "Las notificacions burèu son pas activada, per çò que las autorizacions son estadas refusada abans",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications.permission_required": "Las notificacions de burèu son pas indisponiblas perque las permissions requeridas son pas estadas acordadas.",
"notifications_permission_banner.enable": "Activar las notificacions burèu",
"notifications_permission_banner.how_to_control": "Per recebre las notificacions de Mastodon quand es pas dobèrt, activatz las notificacions de burèu. Podètz precisar quin tipe de notificacion generarà una notificacion de burèu via lo boton {icon} dessús un còp activadas.",
"notifications_permission_banner.title": "Manquetz pas jamai res",

View File

@ -149,7 +149,7 @@
"emoji_button.search_results": "Arama sonuçları",
"emoji_button.symbols": "Semboller",
"emoji_button.travel": "Seyahat ve Yerler",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_suspended": "Hesap askıya alındı",
"empty_column.account_timeline": "Burada hiç toot yok!",
"empty_column.account_unavailable": "Profil kullanılamıyor",
"empty_column.blocks": "Henüz bir kullanıcıyı engellemediniz.",
@ -267,7 +267,7 @@
"lists.new.create": "Liste ekle",
"lists.new.title_placeholder": "Yeni liste başlığı",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.list": "Listenin üyeleri",
"lists.replies_policy.none": "No one",
"lists.replies_policy.title": "Yanıtları göster:",
"lists.search": "Takip ettiğiniz kişiler arasından arayın",

View File

@ -179,7 +179,7 @@
"follow_requests.unlocked_explanation": "Mặc dù tài khoản của bạn đang ở chế độ công khai, quản trị viên của {domain} vẫn tin rằng bạn sẽ muốn xem lại yêu cầu theo dõi từ những người khác.",
"generic.saved": "Đã lưu",
"getting_started.developers": "Nhà phát triển",
"getting_started.directory": "Cộng đồng",
"getting_started.directory": "Mạng lưới",
"getting_started.documentation": "Tài liệu",
"getting_started.heading": "Quản lý",
"getting_started.invite": "Mời bạn bè",

View File

@ -133,7 +133,7 @@
"directory.local": "仅来自 {domain}",
"directory.new_arrivals": "新来者",
"directory.recently_active": "最近活跃",
"embed.instructions": "要在你的网站上嵌入这条嘟文,请复制以下代码。",
"embed.instructions": "要在你的网站上嵌入嘟文,请复制以下代码。",
"embed.preview": "它会像这样显示出来:",
"emoji_button.activity": "活动",
"emoji_button.custom": "自定义",
@ -149,7 +149,7 @@
"emoji_button.search_results": "搜索结果",
"emoji_button.symbols": "符号",
"emoji_button.travel": "旅行和地点",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_suspended": "账户被封禁",
"empty_column.account_timeline": "这里没有嘟文!",
"empty_column.account_unavailable": "个人资料不可用",
"empty_column.blocks": "你目前没有屏蔽任何用户。",
@ -163,7 +163,7 @@
"empty_column.hashtag": "这个话题标签下暂时没有内容。",
"empty_column.home": "你还没有关注任何用户。快看看{public},向其他人问个好吧。",
"empty_column.home.public_timeline": "公共时间轴",
"empty_column.list": "这个列表中暂时没有内容。列表中用户所发送的的新嘟文将会在这里显示。",
"empty_column.list": "列表中暂时没有内容。列表中用户所发送的的新嘟文将会在这里显示。",
"empty_column.lists": "你还没有创建过列表。你创建的列表会在这里显示。",
"empty_column.mutes": "你没有隐藏任何用户。",
"empty_column.notifications": "你还没有收到过任何通知,快和其他用户互动吧。",
@ -266,9 +266,9 @@
"lists.edit.submit": "更改标题",
"lists.new.create": "新建列表",
"lists.new.title_placeholder": "新列表的标题",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.followed": "任何被关注的用户",
"lists.replies_policy.list": "列表成员",
"lists.replies_policy.none": "没有人",
"lists.replies_policy.title": "显示回复给:",
"lists.search": "搜索你关注的人",
"lists.subheading": "你的列表",
@ -334,12 +334,12 @@
"notifications.filter.mentions": "提及",
"notifications.filter.polls": "投票结果",
"notifications.filter.statuses": "你关注的人的动态",
"notifications.grant_permission": "Grant permission.",
"notifications.grant_permission": "授予权限",
"notifications.group": "{count} 条通知",
"notifications.mark_as_read": "将所有通知标为已读",
"notifications.permission_denied": "由于权限被拒绝,无法启用桌面通知。",
"notifications.permission_denied_alert": "由于在此之前浏览器权限请求就已被拒绝,所以启用桌面通知失败",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications.permission_required": "所需权限未被授予,所以桌面通知不可用",
"notifications_permission_banner.enable": "启用桌面通知",
"notifications_permission_banner.how_to_control": "启用桌面通知以在 Mastodon 未打开时接收通知。您可以通过交互通过上面的 {icon} 按钮来精细控制可以发送桌面通知的交互类型。",
"notifications_permission_banner.title": "精彩不容错过",
@ -403,7 +403,7 @@
"status.favourite": "喜欢",
"status.filtered": "已过滤",
"status.load_more": "加载更多",
"status.media_hidden": "隐藏媒体内容",
"status.media_hidden": "隐藏媒体内容",
"status.mention": "提及 @{name}",
"status.more": "更多",
"status.mute": "隐藏 @{name}",
@ -429,7 +429,7 @@
"status.show_more_all": "显示所有内容",
"status.show_thread": "显示全部对话",
"status.uncached_media_warning": "暂不可用",
"status.unmute_conversation": "不再隐藏此对话",
"status.unmute_conversation": "将此对话解除静音",
"status.unpin": "在个人资料页面取消置顶",
"suggestions.dismiss": "关闭建议",
"suggestions.header": "您可能会感兴趣…",
@ -454,7 +454,7 @@
"units.short.million": "{count}M",
"units.short.thousand": "{count}K",
"upload_area.title": "将文件拖放到此处开始上传",
"upload_button.label": "上传媒体文件",
"upload_button.label": "上传图片、视频或音频",
"upload_error.limit": "文件大小超过限制。",
"upload_error.poll": "投票中不允许上传文件。",
"upload_form.audio_description": "为听障人士添加文字描述",

View File

@ -4,27 +4,27 @@
"account.badges.bot": "機器人",
"account.badges.group": "群組",
"account.block": "封鎖 @{name}",
"account.block_domain": "隱藏來自 {domain} 的所有內容",
"account.block_domain": "封鎖來自 {domain} 網域的所有內容",
"account.blocked": "已封鎖",
"account.browse_more_on_origin_server": "在該器的個人檔案頁上瀏覽更多",
"account.browse_more_on_origin_server": "在該服器的個人檔案頁上瀏覽更多",
"account.cancel_follow_request": "取消關注請求",
"account.direct": "傳私訊給 @{name}",
"account.disable_notifications": "當 @{name} 嘟文時不要再通知我",
"account.domain_blocked": "已隱藏網域",
"account.disable_notifications": "取消來自 @{name} 嘟文的通知",
"account.domain_blocked": "已封鎖網域",
"account.edit_profile": "編輯個人資料",
"account.enable_notifications": "當 @{name} 嘟文時通知我",
"account.endorse": "在個人資料推薦對方",
"account.follow": "關注",
"account.followers": "關注者",
"account.followers.empty": "尚有人關注這位使用者。",
"account.followers.empty": "尚有人關注這位使用者。",
"account.followers_counter": "被 {count, plural,one {{counter} 人}other {{counter} 人}}關注",
"account.following_counter": "正在關注 {count, plural,one {{counter}}other {{counter} 人}}",
"account.follows.empty": "這位使用者尚未關注任何使用者。",
"account.follows_you": "關注了",
"account.hide_reblogs": "隱藏來自 @{name} 的轉",
"account.last_status": "上次活躍",
"account.follows.empty": "這位使用者尚未關注任何。",
"account.follows_you": "關注了",
"account.hide_reblogs": "隱藏來自 @{name} 的轉",
"account.last_status": "上次活躍時間",
"account.link_verified_on": "已在 {date} 檢查此連結的擁有者權限",
"account.locked_info": "這隻帳戶的隱私狀態被設成鎖定。該擁有者會手動審核能關注這隻帳號的人。",
"account.locked_info": "此帳號的隱私狀態被設為鎖定。該擁有者會手動審核能關注此帳號的人。",
"account.media": "媒體",
"account.mention": "提及 @{name}",
"account.moved_to": "{name} 已遷移至:",
@ -40,13 +40,13 @@
"account.show_reblogs": "顯示來自 @{name} 的嘟文",
"account.statuses_counter": "{count, plural,one {{counter} 則}other {{counter} 則}}嘟文",
"account.unblock": "取消封鎖 @{name}",
"account.unblock_domain": "取消隱藏 {domain}",
"account.unblock_domain": "取消封鎖域名 {domain}",
"account.unendorse": "不再於個人資料頁面推薦對方",
"account.unfollow": "取消關注",
"account.unmute": "取消靜音 @{name}",
"account.unmute_notifications": "重新接收來自 @{name} 的通知",
"account_note.placeholder": "按此添加備注",
"alert.rate_limited.message": "請在 {retry_time, time, medium} 後重試",
"alert.rate_limited.message": "請在 {retry_time, time, medium} 後重試",
"alert.rate_limited.title": "已限速",
"alert.unexpected.message": "發生了非預期的錯誤。",
"alert.unexpected.title": "哎呀!",
@ -59,17 +59,17 @@
"bundle_modal_error.close": "關閉",
"bundle_modal_error.message": "載入此元件時發生錯誤。",
"bundle_modal_error.retry": "重試",
"column.blocks": "封鎖的使用者",
"column.blocks": "封鎖的使用者",
"column.bookmarks": "書籤",
"column.community": "本機時間軸",
"column.direct": "私訊",
"column.directory": "瀏覽個人資料",
"column.domain_blocks": "隱藏的網域",
"column.favourites": "讚美集",
"column.domain_blocks": "已封鎖的網域",
"column.favourites": "收藏",
"column.follow_requests": "關注請求",
"column.home": "頁",
"column.home": "頁",
"column.lists": "名單",
"column.mutes": "靜音的使用者",
"column.mutes": "靜音的使用者",
"column.notifications": "通知",
"column.pins": "釘選的嘟文",
"column.public": "聯邦時間軸",
@ -81,116 +81,116 @@
"column_header.show_settings": "顯示設定",
"column_header.unpin": "取消釘選",
"column_subheading.settings": "設定",
"community.column_settings.local_only": "只有本",
"community.column_settings.local_only": "只有本",
"community.column_settings.media_only": "只有媒體",
"community.column_settings.remote_only": "只有遠端",
"compose_form.direct_message_warning": "這條嘟文只有被提及的使用者才看得到。",
"compose_form.direct_message_warning_learn_more": "了解更多",
"compose_form.hashtag_warning": "由於這則嘟文被設定成「不公開」,所以它將不會被列在任何主題標籤下。只有公開的嘟文才能藉主題標籤找到。",
"compose_form.hashtag_warning": "由於這則嘟文設定為「不公開」,它將不會被列於任何主題標籤下。只有公開的嘟文才能藉主題標籤找到。",
"compose_form.lock_disclaimer": "您的帳戶尚未{locked}。任何人都能關注您並看到您設定成只有關注者能看的嘟文。",
"compose_form.lock_disclaimer.lock": "上鎖",
"compose_form.placeholder": "正在想些什麼?",
"compose_form.poll.add_option": "新增選",
"compose_form.placeholder": "正在想些什麼",
"compose_form.poll.add_option": "新增選",
"compose_form.poll.duration": "投票期限",
"compose_form.poll.option_placeholder": "第 {number} 個選",
"compose_form.poll.remove_option": "移除此選",
"compose_form.poll.option_placeholder": "第 {number} 個選",
"compose_form.poll.remove_option": "移除此選",
"compose_form.poll.switch_to_multiple": "變更投票為允許多個選項",
"compose_form.poll.switch_to_single": "變更投票為允許單一選項",
"compose_form.publish": "嘟出去",
"compose_form.publish_loud": "{publish}",
"compose_form.sensitive.hide": "標記媒體為敏感內容",
"compose_form.sensitive.marked": "此媒體被標記為敏感內容",
"compose_form.sensitive.unmarked": "此媒體未標記為敏感內容",
"compose_form.sensitive.unmarked": "此媒體未標記為敏感內容",
"compose_form.spoiler.marked": "正文已隱藏到警告之後",
"compose_form.spoiler.unmarked": "正文未被隱藏",
"compose_form.spoiler_placeholder": "請在此處寫入警告訊息",
"confirmation_modal.cancel": "取消",
"confirmations.block.block_and_report": "封鎖並檢舉",
"confirmations.block.confirm": "封鎖",
"confirmations.block.message": "確定封鎖 {name} ",
"confirmations.block.message": "確定封鎖 {name} ",
"confirmations.delete.confirm": "刪除",
"confirmations.delete.message": "你確定要刪除這條嘟文?",
"confirmations.delete.message": "您確定要刪除這則嘟文?",
"confirmations.delete_list.confirm": "刪除",
"confirmations.delete_list.message": "確定永久刪除此名單?",
"confirmations.domain_block.confirm": "隱藏整個域",
"confirmations.domain_block.message": "真的非常確定封鎖整個 {domain} 嗎?大部分情況下,你只需要封鎖或靜音少數特定的人就能滿足需求了。你將不能在任何公開的時間軸及通知中看到那個網域的內容。你來自該網域的關注者也會被移除。",
"confirmations.domain_block.confirm": "隱藏整個",
"confirmations.domain_block.message": "真的非常確定封鎖整個 {domain} 網域嗎?大部分情況下,您只需要封鎖或靜音少數特定的帳號就能滿足需求了。您將不能在任何公開的時間軸及通知中看到此網域的內容。您來自該網域的關注者也將被移除。",
"confirmations.logout.confirm": "登出",
"confirmations.logout.message": "確定要登出嗎?",
"confirmations.mute.confirm": "靜音",
"confirmations.mute.explanation": "這將會隱藏來自他們的貼文與通知,但是他們還是可以查閱你的貼文與關注。",
"confirmations.mute.explanation": "這將會隱藏來自他們的貼文與通知,但是他們還是可以查閱你的貼文與關注。",
"confirmations.mute.message": "確定靜音 {name} ",
"confirmations.redraft.confirm": "刪除並重新編輯",
"confirmations.redraft.message": "確定刪掉這則嘟文並重新編輯嗎?將會失去這則嘟文的轉嘟及贊美,且回覆這則的嘟文將會變成獨立的嘟文。",
"confirmations.redraft.message": "確定刪掉這則嘟文並重新編輯嗎?將會失去這則嘟文的轉嘟及收藏,且回覆這則的嘟文將會變成獨立的嘟文。",
"confirmations.reply.confirm": "回覆",
"confirmations.reply.message": "現在回覆將蓋掉您目前正在撰寫的訊息。是否仍要回覆?",
"confirmations.unfollow.confirm": "取消關注",
"confirmations.unfollow.message": "真的要取消關注 {name} 嗎?",
"confirmations.unfollow.message": "確定要取消關注 {name} 嗎?",
"conversation.delete": "刪除對話",
"conversation.mark_as_read": "標為已讀",
"conversation.mark_as_read": "標為已讀",
"conversation.open": "檢視對話",
"conversation.with": "與 {names}",
"directory.federated": "來自已知聯邦宇宙",
"directory.local": "僅來自 {domain}",
"directory.local": "僅來自 {domain} 網域",
"directory.new_arrivals": "新人",
"directory.recently_active": "最近活躍",
"embed.instructions": "要嵌入此嘟文,請將以下程式碼貼進你的網站。",
"embed.preview": "他會顯示成這樣:",
"embed.instructions": "要在您的網站嵌入此嘟文,請複製以下程式碼。",
"embed.preview": "它將顯示成這樣:",
"emoji_button.activity": "活動",
"emoji_button.custom": "自訂",
"emoji_button.flags": "旗",
"emoji_button.food": "飲食",
"emoji_button.flags": "旗",
"emoji_button.food": "食物 & 飲料",
"emoji_button.label": "插入表情符號",
"emoji_button.nature": "自然",
"emoji_button.nature": "自然",
"emoji_button.not_found": "啊就沒這表情符號吼!! (╯°□°)╯︵ ┻━┻",
"emoji_button.objects": "物件",
"emoji_button.people": "使用者",
"emoji_button.people": "人物",
"emoji_button.recent": "最常使用",
"emoji_button.search": "搜尋…",
"emoji_button.search_results": "搜尋結果",
"emoji_button.symbols": "符號",
"emoji_button.travel": "旅遊與地點",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_suspended": "帳號被暫停",
"empty_column.account_timeline": "這裡還沒有嘟文!",
"empty_column.account_unavailable": "無法取得個人資料",
"empty_column.blocks": "還沒有封鎖任何使用者。",
"empty_column.bookmarked_statuses": "你還沒建立任何書籤。這裡將會顯示你建立的書籤。",
"empty_column.community": "本時間軸是空的。快公開嘟些文搶頭香啊!",
"empty_column.blocks": "還沒有封鎖任何使用者。",
"empty_column.bookmarked_statuses": "您還沒建立任何書籤。當您建立書簽時,它將於此顯示。",
"empty_column.community": "本時間軸是空的。快公開嘟些文搶頭香啊!",
"empty_column.direct": "您還沒有任何私訊。當您私訊別人或收到私訊時,它將於此顯示。",
"empty_column.domain_blocks": "尚未隱藏任何網域。",
"empty_column.favourited_statuses": "你還沒讚美过任何嘟文。這裡將會顯示你讚美过的嘟文。",
"empty_column.favourites": "還沒人讚美這則嘟文。當有人點讚後,他們將於此列出。",
"empty_column.domain_blocks": "尚未封鎖任何網域。",
"empty_column.favourited_statuses": "您還沒收藏過任何嘟文。當您收藏嘟文時,它將於此顯示。",
"empty_column.favourites": "還沒有人收藏過這則嘟文。當有人收藏嘟文時,它將於此顯示。",
"empty_column.follow_requests": "您尚未收到任何關注請求。這裡將會顯示收到的關注請求。",
"empty_column.hashtag": "這個主題標籤下什麼也沒有。",
"empty_column.home": "您的首頁時間軸是空的!前往 {public} 或使用搜尋功能來認識其他人。",
"empty_column.home.public_timeline": "公開時間軸",
"empty_column.list": "這份名單還沒有東西。當此名單的成員嘟出了新的嘟文時,它們就會顯示於此。",
"empty_column.lists": "你還沒有建立任何名單。這裡將會顯示你所建立的名單。",
"empty_column.mutes": "尚未靜音任何使用者。",
"empty_column.lists": "您還沒有建立任何名單。這裡將會顯示您所建立的名單。",
"empty_column.mutes": "尚未靜音任何使用者。",
"empty_column.notifications": "您尚未收到任何通知,和別人互動開啟對話吧。",
"empty_column.public": "這裡什麼都沒有!嘗試寫些公開的嘟文,或著自己關注其他伺服器的使用者後就會有嘟文出現了",
"error.unexpected_crash.explanation": "由於發生系統故障或瀏覽器相容性問題,無法正常顯示頁面。",
"error.unexpected_crash.explanation": "由於發生系統故障或瀏覽器相容性問題,無法正常顯示頁面。",
"error.unexpected_crash.explanation_addons": "此頁面無法被正常顯示,這可能是由瀏覽器附加元件或網頁自動翻譯工具造成的。",
"error.unexpected_crash.next_steps": "請嘗試重新整理頁面。如果狀況沒有進展,你可以使用不同的瀏覽器或 Mastodon 應用程式來檢視。",
"error.unexpected_crash.next_steps_addons": "請嘗試重新整理頁面。如果狀況沒有進展,您可以嘗試使用不同的瀏覽器或 Mastodon 應用程式來檢視。",
"errors.unexpected_crash.copy_stacktrace": "複製到剪貼簿",
"errors.unexpected_crash.report_issue": "報問題",
"error.unexpected_crash.next_steps": "請嘗試重新整理頁面。如果狀況沒有改善,您可以使用不同的瀏覽器或應用程式來檢視來使用 Mastodon。",
"error.unexpected_crash.next_steps_addons": "請嘗試關閉他們然後重新整理頁面。如果狀況沒有改善,您可以使用不同的瀏覽器或應用程式來檢視來使用 Mastodon。",
"errors.unexpected_crash.copy_stacktrace": "複製 stacktrace 到剪貼簿",
"errors.unexpected_crash.report_issue": "報問題",
"follow_request.authorize": "授權",
"follow_request.reject": "拒絕",
"follow_requests.unlocked_explanation": "即便您的帳號未被鎖定,{domain} 的員工認為可能想要自己審核這些帳號的追蹤請求。",
"follow_requests.unlocked_explanation": "即便您的帳號未被鎖定,{domain} 的員工認為可能想要自己審核這些帳號的追蹤請求。",
"generic.saved": "已儲存",
"getting_started.developers": "開發者",
"getting_started.directory": "個人資料目錄",
"getting_started.documentation": "文件",
"getting_started.heading": "開始使用",
"getting_started.invite": "邀請使用者",
"getting_started.open_source_notice": "Mastodon 是開源軟體。可以在 GitHub {github} 上貢獻或是回報問題。",
"getting_started.security": "安全性",
"getting_started.open_source_notice": "Mastodon 是開源軟體。可以在 GitHub {github} 上貢獻或是回報問題。",
"getting_started.security": "帳號安全性設定",
"getting_started.terms": "服務條款",
"hashtag.column_header.tag_mode.all": "以及{additional}",
"hashtag.column_header.tag_mode.any": "或是{additional}",
"hashtag.column_header.tag_mode.none": "而無需{additional}",
"hashtag.column_header.tag_mode.all": "以及 {additional}",
"hashtag.column_header.tag_mode.any": "或是 {additional}",
"hashtag.column_header.tag_mode.none": "而無需 {additional}",
"hashtag.column_settings.select.no_options_message": "找不到建議",
"hashtag.column_settings.select.placeholder": "輸入主題標籤…",
"hashtag.column_settings.select.placeholder": "輸入主題標籤…",
"hashtag.column_settings.tag_mode.all": "全部",
"hashtag.column_settings.tag_mode.any": "任一",
"hashtag.column_settings.tag_mode.none": "全不",
@ -204,38 +204,38 @@
"intervals.full.hours": "{number, plural, one {# 小時} other {# 小時}}",
"intervals.full.minutes": "{number, plural, one {# 分鐘} other {# 分鐘}}",
"introduction.federation.action": "下一步",
"introduction.federation.federated.headline": "站台聯盟",
"introduction.federation.federated.text": "來自聯盟宇宙中其他站台的公開嘟文將會在站點聯盟時間軸中顯示。",
"introduction.federation.federated.headline": "聯邦",
"introduction.federation.federated.text": "來自聯盟宇宙中其他伺服器的公開嘟文將會在聯邦時間軸中顯示。",
"introduction.federation.home.headline": "首頁",
"introduction.federation.home.text": "你關注使用者的嘟文將會在首頁動態中顯示。你可以關注任何伺服器上的任何人!",
"introduction.federation.local.headline": "本機",
"introduction.federation.local.text": "跟您同伺服器之使用者所發的公開嘟文將會顯示在本機時間軸中。",
"introduction.interactions.action": "完成教學!",
"introduction.interactions.favourite.headline": "讚美",
"introduction.interactions.favourite.text": "您能儲存嘟文供稍候觀看,或者讚美嘟文,讓作者知道您喜歡這則嘟文。",
"introduction.interactions.favourite.headline": "收藏",
"introduction.interactions.favourite.text": "您能儲存嘟文供稍候觀看,或者收藏嘟文,讓作者知道您喜歡這則嘟文。",
"introduction.interactions.reblog.headline": "轉嘟",
"introduction.interactions.reblog.text": "您能藉由轉嘟他人嘟文來分享給您的關注者。",
"introduction.interactions.reply.headline": "回覆",
"introduction.interactions.reply.text": "您能回覆其他人或自己的嘟文,這麼做會把這些回覆串成一串對話。",
"introduction.welcome.action": "開始旅程吧!",
"introduction.welcome.headline": "第一步",
"introduction.welcome.text": "歡迎來到聯盟宇宙!等等你就可以廣播訊息及跨越各種各式各樣的伺服器與朋友聊天。但這台伺服器,{domain},非常特別 - 它寄管了你的個人資料,所以請記住它的名字。",
"introduction.welcome.text": "歡迎來到聯盟宇宙!稍候您就可以廣播訊息及跨越各種各式各樣的伺服器與朋友聊天。但這台伺服器,{domain},非常特別 - 它承載了您的個人資料,所以請記住它的名字。",
"keyboard_shortcuts.back": "返回上一頁",
"keyboard_shortcuts.blocked": "開啟「封鎖使用者」名單",
"keyboard_shortcuts.boost": "轉嘟",
"keyboard_shortcuts.column": "將焦點放在其中一欄的嘟文",
"keyboard_shortcuts.compose": "將焦點移至撰寫文字區塊",
"keyboard_shortcuts.description": "描述",
"keyboard_shortcuts.description": "說明",
"keyboard_shortcuts.direct": "開啟私訊欄",
"keyboard_shortcuts.down": "往下移動名單項目",
"keyboard_shortcuts.down": "在名單中往下移動",
"keyboard_shortcuts.enter": "檢視嘟文",
"keyboard_shortcuts.favourite": "讚美",
"keyboard_shortcuts.favourites": "開啟讚美者名錄",
"keyboard_shortcuts.federated": "開啟站點聯盟時間軸",
"keyboard_shortcuts.favourite": "加到收藏",
"keyboard_shortcuts.favourites": "開啟收藏名單",
"keyboard_shortcuts.federated": "開啟聯邦時間軸",
"keyboard_shortcuts.heading": "鍵盤快速鍵",
"keyboard_shortcuts.home": "開啟首頁時間軸",
"keyboard_shortcuts.hotkey": "快速鍵",
"keyboard_shortcuts.legend": "顯示此列表",
"keyboard_shortcuts.legend": "顯示此圖例",
"keyboard_shortcuts.local": "開啟本機時間軸",
"keyboard_shortcuts.mention": "提及作者",
"keyboard_shortcuts.muted": "開啟靜音使用者名單",
@ -244,7 +244,7 @@
"keyboard_shortcuts.open_media": "開啟媒體",
"keyboard_shortcuts.pinned": "開啟釘選的嘟文名單",
"keyboard_shortcuts.profile": "開啟作者的個人資料頁面",
"keyboard_shortcuts.reply": "回",
"keyboard_shortcuts.reply": "回應嘟文",
"keyboard_shortcuts.requests": "開啟關注請求名單",
"keyboard_shortcuts.search": "將焦點移至搜尋框",
"keyboard_shortcuts.spoilers": "顯示或隱藏被折疊的正文",
@ -253,7 +253,7 @@
"keyboard_shortcuts.toggle_sensitivity": "顯示 / 隱藏媒體",
"keyboard_shortcuts.toot": "開始發出新嘟文",
"keyboard_shortcuts.unfocus": "取消輸入文字區塊 / 搜尋的焦點",
"keyboard_shortcuts.up": "往上移動名單項目",
"keyboard_shortcuts.up": "在名單中往上移動",
"lightbox.close": "關閉",
"lightbox.compress": "折疊圖片檢視框",
"lightbox.expand": "展開圖片檢視框",
@ -266,13 +266,13 @@
"lists.edit.submit": "變更標題",
"lists.new.create": "新增名單",
"lists.new.title_placeholder": "新名單標題",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.title": "顯示回覆",
"lists.replies_policy.followed": "任何跟隨的使用者",
"lists.replies_policy.list": "列表成員",
"lists.replies_policy.none": "沒有人",
"lists.replies_policy.title": "顯示回覆",
"lists.search": "搜尋您關注的使用者",
"lists.subheading": "您的名單",
"load_pending": "{count, plural, other {# 個新項目}}",
"load_pending": "{count, plural, one {# 個新項目} other {# 個新項目}}",
"loading_indicator.label": "讀取中...",
"media_gallery.toggle_visible": "切換可見性",
"missing_indicator.label": "找不到",
@ -289,7 +289,7 @@
"navigation_bar.discover": "探索",
"navigation_bar.domain_blocks": "隱藏的網域",
"navigation_bar.edit_profile": "編輯個人資料",
"navigation_bar.favourites": "讚美集",
"navigation_bar.favourites": "收藏",
"navigation_bar.filters": "靜音詞彙",
"navigation_bar.follow_requests": "關注請求",
"navigation_bar.follows_and_followers": "關注及關注者",
@ -303,45 +303,45 @@
"navigation_bar.preferences": "偏好設定",
"navigation_bar.public_timeline": "聯邦時間軸",
"navigation_bar.security": "安全性",
"notification.favourite": "{name} 讚美了你的嘟文",
"notification.follow": "{name} 關注了",
"notification.follow_request": "{name} 要求關注",
"notification.mention": "{name} 提到了",
"notification.favourite": "{name} 把您的嘟文加入了最愛",
"notification.follow": "{name} 關注了",
"notification.follow_request": "{name} 要求關注",
"notification.mention": "{name} 提到了",
"notification.own_poll": "您的投票已結束",
"notification.poll": "您投過的投票已經結束",
"notification.reblog": "{name}轉嘟了你的嘟文",
"notification.poll": "您投過的投票已經結束",
"notification.reblog": "{name} 轉嘟了您的嘟文",
"notification.status": "{name} 剛剛嘟文",
"notifications.clear": "清除通知",
"notifications.clear_confirmation": "確定要永久清除的通知嗎?",
"notifications.clear_confirmation": "確定要永久清除的通知嗎?",
"notifications.column_settings.alert": "桌面通知",
"notifications.column_settings.favourite": "被讚美",
"notifications.column_settings.favourite": "最愛",
"notifications.column_settings.filter_bar.advanced": "顯示所有分類",
"notifications.column_settings.filter_bar.category": "快速過濾欄",
"notifications.column_settings.filter_bar.show": "顯示",
"notifications.column_settings.follow": "新關注者:",
"notifications.column_settings.follow_request": "新的關注請求:",
"notifications.column_settings.follow_request": "新的關注請求",
"notifications.column_settings.mention": "提及:",
"notifications.column_settings.poll": "投票結果:",
"notifications.column_settings.push": "推通知",
"notifications.column_settings.push": "推通知",
"notifications.column_settings.reblog": "轉嘟:",
"notifications.column_settings.show": "在欄位中顯示",
"notifications.column_settings.sound": "播放",
"notifications.column_settings.status": "新嘟文:",
"notifications.column_settings.sound": "播放音",
"notifications.column_settings.status": "新嘟文",
"notifications.filter.all": "全部",
"notifications.filter.boosts": "轉嘟",
"notifications.filter.favourites": "讚美集",
"notifications.filter.favourites": "最愛",
"notifications.filter.follows": "關注的使用者",
"notifications.filter.mentions": "提及",
"notifications.filter.polls": "投票結果",
"notifications.filter.statuses": "已跟隨使用者的最新動態",
"notifications.grant_permission": "Grant permission.",
"notifications.grant_permission": "授予權限",
"notifications.group": "{count} 條通知",
"notifications.mark_as_read": "將所有通知都標記為已讀",
"notifications.permission_denied": "由於之前拒絕了瀏覽器請求,因此桌面通知不可用",
"notifications.permission_denied_alert": "因為之前瀏覽器權限被拒絕,無法啟用桌面通知",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications.permission_required": "因為尚未授予所需的權限,所以桌面通知不可用。",
"notifications_permission_banner.enable": "啟用桌面通知",
"notifications_permission_banner.how_to_control": "啟用桌面通知以在 Mastodon 沒有開啟的時候接收通知。在已經啟用桌面通知的時候,可以透過上面的 {icon} 按鈕準確的控制哪些類型的互動會產生桌面通知。",
"notifications_permission_banner.how_to_control": "啟用桌面通知以在 Mastodon 沒有開啟的時候接收通知。在已經啟用桌面通知的時候,可以透過上面的 {icon} 按鈕準確的控制哪些類型的互動會產生桌面通知。",
"notifications_permission_banner.title": "不要錯過任何東西!",
"picture_in_picture.restore": "還原",
"poll.closed": "已關閉",
@ -349,37 +349,37 @@
"poll.total_people": "{count, plural, one {# 個投票} other {# 個投票}}",
"poll.total_votes": "{count, plural, one {# 個投票} other {# 個投票}}",
"poll.vote": "投票",
"poll.voted": "已對此問題投票",
"poll.voted": "已對此問題投票",
"poll_button.add_poll": "建立投票",
"poll_button.remove_poll": "移除投票",
"privacy.change": "調整隱私狀態",
"privacy.direct.long": "只有被提的使用者能看到",
"privacy.change": "調整嘟文隱私狀態",
"privacy.direct.long": "只有被提的使用者能看到",
"privacy.direct.short": "私訊",
"privacy.private.long": "只有關注的使用者能看到",
"privacy.private.long": "只有關注的使用者能看到",
"privacy.private.short": "僅關注者",
"privacy.public.long": "嘟到公開時間軸",
"privacy.public.long": "公開,且顯示於公開時間軸",
"privacy.public.short": "公開",
"privacy.unlisted.long": "公開,但不會顯示在公開時間軸",
"privacy.unlisted.short": "不公開",
"refresh": "重新整理",
"regeneration_indicator.label": "載入中…",
"regeneration_indicator.sublabel": "你的主頁時間軸正在準備中!",
"regeneration_indicator.sublabel": "您的主頁時間軸正在準備中!",
"relative_time.days": "{number} 天",
"relative_time.hours": "{number} 小時",
"relative_time.hours": "{number}小時",
"relative_time.just_now": "剛剛",
"relative_time.minutes": "{number} 分",
"relative_time.minutes": "{number} 分",
"relative_time.seconds": "{number} 秒",
"relative_time.today": "今天",
"reply_indicator.cancel": "取消",
"report.forward": "轉寄到 {target}",
"report.forward_hint": "這個帳戶屬於其他站點。要像該站點發送匿名的檢舉訊息嗎?",
"report.hint": "這項訊息會發送到您伺服器的管理員。可以提供檢舉這個帳戶的理由:",
"report.placeholder": "更多訊息",
"report.forward_hint": "這個帳戶屬於其他伺服器。要像該伺服器發送匿名的檢舉訊息嗎?",
"report.hint": "這項訊息會發送到您伺服器的管理員。可以提供檢舉這個帳戶的理由:",
"report.placeholder": "其他備註",
"report.submit": "送出",
"report.target": "檢舉 {target}",
"search.placeholder": "搜尋",
"search_popout.search_format": "進階搜尋格式",
"search_popout.tips.full_text": "輸入簡單的文字,搜尋由你撰寫、贊美、轉嘟或提你的嘟文,以及與關鍵詞匹配的使用者名稱、帳戶名稱和標籤。",
"search_popout.tips.full_text": "輸入簡單的文字,搜尋由您撰寫、收藏、轉嘟或提您的嘟文,以及與關鍵詞匹配的使用者名稱、帳戶顯示名稱和主題標籤。",
"search_popout.tips.hashtag": "主題標籤",
"search_popout.tips.status": "嘟文",
"search_popout.tips.text": "輸入簡單的文字,搜尋符合的使用者名稱,帳戶名稱與標籤",
@ -394,32 +394,32 @@
"status.block": "封鎖 @{name}",
"status.bookmark": "書籤",
"status.cancel_reblog_private": "取消轉嘟",
"status.cannot_reblog": "這嘟文無法被轉嘟",
"status.cannot_reblog": "這嘟文無法被轉嘟",
"status.copy": "複製嘟文連結",
"status.delete": "刪除",
"status.detailed_status": "對話的詳細內容",
"status.detailed_status": "詳細的對話內容",
"status.direct": "發送私訊給 @{name}",
"status.embed": "",
"status.favourite": "讚美",
"status.embed": "嵌",
"status.favourite": "最愛",
"status.filtered": "已過濾",
"status.load_more": "載入更多",
"status.media_hidden": "隱藏媒體內容",
"status.mention": "提 @{name}",
"status.mention": "提 @{name}",
"status.more": "更多",
"status.mute": "靜音 @{name}",
"status.mute_conversation": "靜音對話",
"status.open": "展開嘟文",
"status.open": "展開嘟文",
"status.pin": "釘選到個人資料頁",
"status.pinned": "釘選的嘟文",
"status.read_more": "閱讀更多",
"status.reblog": "轉嘟",
"status.reblog_private": "轉嘟給原有關注者",
"status.reblogged_by": "{name} 轉嘟了",
"status.reblogs.empty": "還沒有人轉嘟。如果有,會顯示在這裡。",
"status.reblogs.empty": "還沒有人轉嘟過這則嘟文。當有人轉嘟時,它將於此顯示。",
"status.redraft": "刪除 & 編輯",
"status.remove_bookmark": "移除書籤",
"status.reply": "回覆",
"status.replyAll": "回覆所有人",
"status.replyAll": "回覆討論串",
"status.report": "檢舉 @{name}",
"status.sensitive_warning": "敏感內容",
"status.share": "分享",
@ -430,15 +430,15 @@
"status.show_thread": "顯示討論串",
"status.uncached_media_warning": "無法使用",
"status.unmute_conversation": "解除此對話的靜音",
"status.unpin": "解除置頂",
"status.unpin": "從個人頁面解除釘選",
"suggestions.dismiss": "關閉建議",
"suggestions.header": "您可能對這些東西有興趣…",
"tabs_bar.federated_timeline": "其他站點",
"tabs_bar.home": "頁",
"tabs_bar.local_timeline": "本",
"tabs_bar.federated_timeline": "聯邦宇宙",
"tabs_bar.home": "頁",
"tabs_bar.local_timeline": "本",
"tabs_bar.notifications": "通知",
"tabs_bar.search": "搜尋",
"time_remaining.days": "剩餘{number, plural, one {# 天} other {# 天}}",
"time_remaining.days": "剩餘{number, plural, one {# 天} other {# 天}}",
"time_remaining.hours": "剩餘{number, plural, one {# 小時} other {# 小時}}",
"time_remaining.minutes": "剩餘{number, plural, one {# 分鐘} other {# 分鐘}}",
"time_remaining.moments": "剩餘時間",
@ -449,27 +449,27 @@
"timeline_hint.resources.statuses": "更早的嘟文",
"trends.counter_by_accounts": "{count, plural,one {{counter} 人}other {{counter} 人}}正在討論",
"trends.trending_now": "目前趨勢",
"ui.beforeunload": "如果離開 Mastodon的草稿將會不見。",
"ui.beforeunload": "如果離開 Mastodon的草稿將會不見。",
"units.short.billion": "{count}B",
"units.short.million": "{count}M",
"units.short.thousand": "{count}K",
"upload_area.title": "拖放來上傳",
"upload_button.label": "上傳媒體檔案 (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_button.label": "上傳圖像、影片、或音樂檔案",
"upload_error.limit": "已達到檔案上傳限制。",
"upload_error.poll": "不允許在投票上傳檔案。",
"upload_form.audio_description": "簡單描述內容給聽障人士",
"upload_error.poll": "不允許在投票上傳檔案。",
"upload_form.audio_description": "描述內容給聽障人士",
"upload_form.description": "為視障人士增加文字說明",
"upload_form.edit": "編輯",
"upload_form.thumbnail": "更改預覽圖",
"upload_form.undo": "刪除",
"upload_form.video_description": "簡單描述給聽障或視障人士",
"upload_form.video_description": "描述給聽障或視障人士",
"upload_modal.analyzing_picture": "正在分析圖片…",
"upload_modal.apply": "套用",
"upload_modal.choose_image": "選擇圖片",
"upload_modal.description_placeholder": "A quick brown fox 跳過那隻懶狗",
"upload_modal.detect_text": "從圖片偵測文字",
"upload_modal.description_placeholder": "我能吞下玻璃而不傷身體",
"upload_modal.detect_text": "從圖片偵測文字",
"upload_modal.edit_media": "編輯媒體",
"upload_modal.hint": "點擊或拖曳圓圈以選擇預覽縮圖。",
"upload_modal.hint": "於預覽中點擊或拖曳圓圈以選擇將於所有縮圖中顯示的焦點。",
"upload_modal.preparing_ocr": "準備 OCR 中……",
"upload_modal.preview_label": "預覽 ({ratio})",
"upload_progress.label": "上傳中...",

View File

@ -279,6 +279,36 @@ class FeedManager
end
end
# Completely clear multiple feeds at once
# @param [Symbol] type
# @param [Array<Integer>] ids
# @return [void]
def clean_feeds!(type, ids)
reblogged_id_sets = {}
redis.pipelined do
ids.each do |feed_id|
redis.del(key(type, feed_id))
reblog_key = key(type, feed_id, 'reblogs')
# We collect a future for this: we don't block while getting
# it, but we can iterate over it later.
reblogged_id_sets[feed_id] = redis.zrange(reblog_key, 0, -1)
redis.del(reblog_key)
end
end
# Remove all of the reblog tracking keys we just removed the
# references to.
redis.pipelined do
reblogged_id_sets.each do |feed_id, future|
future.value.each do |reblogged_id|
reblog_set_key = key(type, feed_id, "reblogs:#{reblogged_id}")
redis.del(reblog_set_key)
end
end
end
end
private
# Trim a feed to maximum size by removing older items

View File

@ -580,17 +580,6 @@ class Account < ApplicationRecord
end
def clean_feed_manager
reblog_key = FeedManager.instance.key(:home, id, 'reblogs')
reblogged_id_set = Redis.current.zrange(reblog_key, 0, -1)
Redis.current.pipelined do
Redis.current.del(FeedManager.instance.key(:home, id))
Redis.current.del(reblog_key)
reblogged_id_set.each do |reblogged_id|
reblog_set_key = FeedManager.instance.key(:home, id, "reblogs:#{reblogged_id}")
Redis.current.del(reblog_set_key)
end
end
FeedManager.instance.clean_feeds!(:home, [id])
end
end

View File

@ -36,7 +36,7 @@ class Favourite < ApplicationRecord
end
def decrement_cache_counters
return if association(:status).loaded? && (status.marked_for_destruction? || status.marked_for_mass_destruction?)
return if association(:status).loaded? && status.marked_for_destruction?
status&.decrement_count!(:favourites_count)
end
end

View File

@ -34,17 +34,6 @@ class List < ApplicationRecord
private
def clean_feed_manager
reblog_key = FeedManager.instance.key(:list, id, 'reblogs')
reblogged_id_set = Redis.current.zrange(reblog_key, 0, -1)
Redis.current.pipelined do
Redis.current.del(FeedManager.instance.key(:list, id))
Redis.current.del(reblog_key)
reblogged_id_set.each do |reblogged_id|
reblog_set_key = FeedManager.instance.key(:list, id, "reblogs:#{reblogged_id}")
Redis.current.del(reblog_set_key)
end
end
FeedManager.instance.clean_feeds!(:list, [id])
end
end

View File

@ -234,14 +234,6 @@ class Status < ApplicationRecord
@emojis = CustomEmoji.from_text(fields.join(' '), account.domain)
end
def mark_for_mass_destruction!
@marked_for_mass_destruction = true
end
def marked_for_mass_destruction?
@marked_for_mass_destruction
end
def replies_count
status_stat&.replies_count || 0
end
@ -498,7 +490,7 @@ class Status < ApplicationRecord
end
def decrement_counter_caches
return if direct_visibility? || marked_for_mass_destruction?
return if direct_visibility?
account&.decrement_count!(:statuses_count)
reblog&.decrement_count!(:reblogs_count) if reblog?
@ -508,7 +500,7 @@ class Status < ApplicationRecord
def unlink_from_conversations
return unless direct_visibility?
mentioned_accounts = mentions.includes(:account).map(&:account)
mentioned_accounts = (association(:mentions).loaded? ? mentions : mentions.includes(:account)).map(&:account)
inbox_owners = mentioned_accounts.select(&:local?) + (account.local? ? [account] : [])
inbox_owners.each do |inbox_owner|

View File

@ -83,7 +83,7 @@ class User < ApplicationRecord
has_one :invite_request, class_name: 'UserInviteRequest', inverse_of: :user, dependent: :destroy
accepts_nested_attributes_for :invite_request, reject_if: ->(attributes) { attributes['text'].blank? && !Setting.require_invite_text }
validates :invite_request, presence: true, on: :create, if: -> { Setting.require_invite_text && !invited? }
validates :invite_request, presence: true, on: :create, if: :invite_text_required?
validates :locale, inclusion: I18n.available_locales.map(&:to_s), if: :locale?
validates_with BlacklistedEmailValidator, on: :create
@ -128,7 +128,7 @@ class User < ApplicationRecord
to: :settings, prefix: :setting, allow_nil: false
attr_reader :invite_code, :sign_in_token_attempt
attr_writer :external
attr_writer :external, :bypass_invite_request_check
def confirmed?
confirmed_at.present?
@ -429,6 +429,10 @@ class User < ApplicationRecord
!!@external
end
def bypass_invite_request_check?
@bypass_invite_request_check
end
def sanitize_languages
return if chosen_languages.nil?
chosen_languages.reject!(&:blank?)
@ -466,4 +470,8 @@ class User < ApplicationRecord
def validate_email_dns?
email_changed? && !(Rails.env.test? || Rails.env.development?)
end
def invite_text_required?
Setting.require_invite_text && !invited? && !external? && !bypass_invite_request_check?
end
end

View File

@ -3,29 +3,41 @@
class BatchedRemoveStatusService < BaseService
include Redisable
# Delete given statuses and reblogs of them
# Remove statuses from home feeds
# Push delete events to streaming API for home feeds and public feeds
# @param [Enumerable<Status>] statuses A preferably batched array of statuses
# Delete multiple statuses and reblogs of them as efficiently as possible
# @param [Enumerable<Status>] statuses An array of statuses
# @param [Hash] options
# @option [Boolean] :skip_side_effects
# @option [Boolean] :skip_side_effects Do not modify feeds and send updates to streaming API
def call(statuses, **options)
statuses = Status.where(id: statuses.map(&:id)).includes(:account).flat_map { |status| [status] + status.reblogs.includes(:account).to_a }
ActiveRecord::Associations::Preloader.new.preload(statuses, options[:skip_side_effects] ? :reblogs : [:account, :tags, reblogs: :account])
@mentions = statuses.each_with_object({}) { |s, h| h[s.id] = s.active_mentions.includes(:account).to_a }
@tags = statuses.each_with_object({}) { |s, h| h[s.id] = s.tags.pluck(:name) }
statuses_and_reblogs = statuses.flat_map { |status| [status] + status.reblogs }
@json_payloads = statuses.each_with_object({}) { |s, h| h[s.id] = Oj.dump(event: :delete, payload: s.id.to_s) }
# The conversations for direct visibility statuses also need
# to be manually updated. This part is not efficient but we
# rely on direct visibility statuses being relatively rare.
statuses_with_account_conversations = statuses.select(&:direct_visibility?)
statuses.each do |status|
status.mark_for_mass_destruction!
status.destroy
ActiveRecord::Associations::Preloader.new.preload(statuses_with_account_conversations, [mentions: :account])
statuses_with_account_conversations.each do |status|
status.send(:unlink_from_conversations)
unpush_from_direct_timelines(status)
end
# We do not batch all deletes into one to avoid having a long-running
# transaction lock the database, but we use the delete method instead
# of destroy to avoid all callbacks. We rely on foreign keys to
# cascade the delete faster without loading the associations.
statuses_and_reblogs.each_slice(50) { |slice| Status.where(id: slice.map(&:id)).delete_all }
# Since we skipped all callbacks, we also need to manually
# deindex the statuses
Chewy.strategy.current.update(StatusesIndex, statuses_and_reblogs) if Chewy.enabled?
return if options[:skip_side_effects]
# Batch by source account
statuses.group_by(&:account_id).each_value do |account_statuses|
statuses_and_reblogs.group_by(&:account_id).each_value do |account_statuses|
account = account_statuses.first.account
next unless account
@ -35,20 +47,18 @@ class BatchedRemoveStatusService < BaseService
end
# Cannot be batched
@status_id_cutoff = Mastodon::Snowflake.id_at(2.weeks.ago)
redis.pipelined do
statuses.each do |status|
unpush_from_public_timelines(status)
unpush_from_direct_timelines(status) if status.direct_visibility?
end
end
end
private
def unpush_from_home_timelines(account, statuses)
recipients = account.followers_for_local_distribution.to_a
recipients << account if account.local?
recipients.each do |follower|
account.followers_for_local_distribution.includes(:user).reorder(nil).find_each do |follower|
statuses.each do |status|
FeedManager.instance.unpush_from_home(follower, status)
end
@ -56,7 +66,7 @@ class BatchedRemoveStatusService < BaseService
end
def unpush_from_list_timelines(account, statuses)
account.lists_for_local_distribution.select(:id, :account_id).each do |list|
account.lists_for_local_distribution.select(:id, :account_id).includes(account: :user).reorder(nil).find_each do |list|
statuses.each do |status|
FeedManager.instance.unpush_from_list(list, status)
end
@ -64,40 +74,27 @@ class BatchedRemoveStatusService < BaseService
end
def unpush_from_public_timelines(status)
return unless status.public_visibility?
return unless status.public_visibility? && status.id > @status_id_cutoff
payload = @json_payloads[status.id]
payload = Oj.dump(event: :delete, payload: status.id.to_s)
redis.pipelined do
redis.publish('timeline:public', payload)
if status.local?
redis.publish('timeline:public:local', payload)
else
redis.publish('timeline:public:remote', payload)
end
redis.publish(status.local? ? 'timeline:public:local' : 'timeline:public:remote', payload)
if status.media_attachments.any?
redis.publish('timeline:public:media', payload)
if status.local?
redis.publish('timeline:public:local:media', payload)
else
redis.publish('timeline:public:remote:media', payload)
end
redis.publish(status.local? ? 'timeline:public:local:media' : 'timeline:public:remote:media', payload)
end
@tags[status.id].each do |hashtag|
redis.publish("timeline:hashtag:#{hashtag.mb_chars.downcase}", payload)
redis.publish("timeline:hashtag:#{hashtag.mb_chars.downcase}:local", payload) if status.local?
end
status.tags.map { |tag| tag.name.mb_chars.downcase }.each do |hashtag|
redis.publish("timeline:hashtag:#{hashtag}", payload)
redis.publish("timeline:hashtag:#{hashtag}:local", payload) if status.local?
end
end
def unpush_from_direct_timelines(status)
payload = @json_payloads[status.id]
redis.pipelined do
@mentions[status.id].each do |mention|
status.mentions.each do |mention|
FeedManager.instance.unpush_from_direct(mention.account, status) if mention.account.local?
end
FeedManager.instance.unpush_from_direct(status.account, status) if status.account.local?
end
end
end

View File

@ -6,15 +6,19 @@ class DeleteAccountService < BaseService
ASSOCIATIONS_ON_SUSPEND = %w(
account_pins
active_relationships
aliases
block_relationships
blocked_by_relationships
conversation_mutes
conversations
custom_filters
devices
domain_blocks
favourites
featured_tags
follow_requests
identity_proofs
list_accounts
migrations
mute_relationships
muted_by_relationships
notifications
@ -25,6 +29,31 @@ class DeleteAccountService < BaseService
status_pins
).freeze
# The following associations have no important side-effects
# in callbacks and all of their own associations are secured
# by foreign keys, making them safe to delete without loading
# into memory
ASSOCIATIONS_WITHOUT_SIDE_EFFECTS = %w(
account_pins
aliases
conversation_mutes
conversations
custom_filters
devices
domain_blocks
featured_tags
follow_requests
identity_proofs
list_accounts
migrations
mute_relationships
muted_by_relationships
notifications
owned_lists
scheduled_statuses
status_pins
)
ASSOCIATIONS_ON_DESTROY = %w(
reports
targeted_moderation_notes
@ -55,19 +84,25 @@ class DeleteAccountService < BaseService
@options[:skip_activitypub] = true if @options[:skip_side_effects]
reject_follows!
undo_follows!
purge_user!
purge_profile!
distribute_activities!
purge_content!
fulfill_deletion_request!
end
private
def reject_follows!
return if @account.local? || !@account.activitypub? || @options[:skip_activitypub]
def distribute_activities!
return if skip_activitypub?
if @account.local?
delete_actor!
elsif @account.activitypub?
reject_follows!
undo_follows!
end
end
def reject_follows!
# When deleting a remote account, the account obviously doesn't
# actually become deleted on its origin server, i.e. unlike a
# locally deleted account it continues to have access to its home
@ -81,8 +116,6 @@ class DeleteAccountService < BaseService
end
def undo_follows!
return if @account.local? || !@account.activitypub? || @options[:skip_activitypub]
# When deleting a remote account, the account obviously doesn't
# actually become deleted on its origin server, but following relationships
# are severed on our end. Therefore, make the remote server aware that the
@ -97,7 +130,7 @@ class DeleteAccountService < BaseService
def purge_user!
return if !@account.local? || @account.user.nil?
if @options[:reserve_email]
if keep_user_record?
@account.user.disable!
@account.user.invites.where(uses: 0).destroy_all
else
@ -106,34 +139,74 @@ class DeleteAccountService < BaseService
end
def purge_content!
distribute_delete_actor! if @account.local? && !@options[:skip_side_effects]
purge_user!
purge_profile!
purge_statuses!
purge_media_attachments!
purge_polls!
purge_generated_notifications!
purge_favourites!
purge_bookmarks!
purge_feeds!
purge_other_associations!
@account.statuses.reorder(nil).find_in_batches do |statuses|
statuses.reject! { |status| reported_status_ids.include?(status.id) } if @options[:reserve_username]
BatchedRemoveStatusService.new.call(statuses, skip_side_effects: @options[:skip_side_effects])
@account.destroy unless keep_account_record?
end
def purge_statuses!
@account.statuses.reorder(nil).where.not(id: reported_status_ids).in_batches do |statuses|
BatchedRemoveStatusService.new.call(statuses, skip_side_effects: skip_side_effects?)
end
end
def purge_media_attachments!
@account.media_attachments.reorder(nil).find_each do |media_attachment|
next if @options[:reserve_username] && reported_status_ids.include?(media_attachment.status_id)
next if keep_account_record? && reported_status_ids.include?(media_attachment.status_id)
media_attachment.destroy
end
@account.polls.reorder(nil).find_each do |poll|
next if @options[:reserve_username] && reported_status_ids.include?(poll.status_id)
# We can safely delete the poll rather than destroy it, as any non-reported
# status should have been deleted already, as long as we take care of
# notifications.
Notification.where(poll: poll).delete_all
poll.delete
end
def purge_polls!
@account.polls.reorder(nil).where.not(status_id: reported_status_ids).in_batches.delete_all
end
def purge_generated_notifications!
# By deleting polls and statuses without callbacks, we've left behind
# polymorphically associated notifications generated by this account
Notification.where(from_account: @account).in_batches.delete_all
end
def purge_favourites!
@account.favourites.in_batches do |favourites|
ids = favourites.pluck(:status_id)
StatusStat.where(status_id: ids).update_all('favourites_count = GREATEST(0, favourites_count - 1)')
Chewy.strategy.current.update(StatusesIndex, ids) if Chewy.enabled?
# Rails.cache.delete_multi would be better, but we don't have it yet
ids.each { |id| Rails.cache.delete("statuses/#{id}") }
favourites.delete_all
end
end
def purge_bookmarks!
@account.bookmarks.in_batches do |bookmarks|
Chewy.strategy.current.update(StatusesIndex, bookmarks.pluck(:status_id)) if Chewy.enabled?
bookmarks.delete_all
end
end
def purge_other_associations!
associations_for_destruction.each do |association_name|
destroy_all(@account.public_send(association_name))
purge_association(association_name)
end
end
@account.destroy unless @options[:reserve_username]
def purge_feeds!
return unless @account.local?
FeedManager.instance.clean_feeds!(:home, [@account.id])
FeedManager.instance.clean_feeds!(:list, @account.owned_lists.pluck(:id))
end
def purge_profile!
@ -141,7 +214,7 @@ class DeleteAccountService < BaseService
# there is no point wasting time updating
# its values first
return unless @options[:reserve_username]
return unless keep_account_record?
@account.silenced_at = nil
@account.suspended_at = @options[:suspended_at] || Time.now.utc
@ -156,6 +229,7 @@ class DeleteAccountService < BaseService
@account.followers_count = 0
@account.following_count = 0
@account.moved_to_account = nil
@account.also_known_as = []
@account.trust_level = :untrusted
@account.avatar.destroy
@account.header.destroy
@ -166,11 +240,17 @@ class DeleteAccountService < BaseService
@account.deletion_request&.destroy
end
def destroy_all(association)
def purge_association(association_name)
association = @account.public_send(association_name)
if ASSOCIATIONS_WITHOUT_SIDE_EFFECTS.include?(association_name)
association.in_batches.delete_all
else
association.in_batches.destroy_all
end
end
def distribute_delete_actor!
def delete_actor!
ActivityPub::DeliveryWorker.push_bulk(delivery_inboxes) do |inbox_url|
[delete_actor_json, @account.id, inbox_url]
end
@ -197,10 +277,26 @@ class DeleteAccountService < BaseService
end
def associations_for_destruction
if @options[:reserve_username]
if keep_account_record?
ASSOCIATIONS_ON_SUSPEND
else
ASSOCIATIONS_ON_SUSPEND + ASSOCIATIONS_ON_DESTROY
end
end
def keep_user_record?
@options[:reserve_email]
end
def keep_account_record?
@options[:reserve_username]
end
def skip_side_effects?
@options[:skip_side_effects]
end
def skip_activitypub?
@options[:skip_activitypub]
end
end

View File

@ -15,41 +15,15 @@ class Scheduler::FeedCleanupScheduler
private
def clean_home_feeds!
clean_feeds!(inactive_account_ids, :home)
feed_manager.clean_feeds!(:home, inactive_account_ids)
end
def clean_list_feeds!
clean_feeds!(inactive_list_ids, :list)
feed_manager.clean_feeds!(:list, inactive_list_ids)
end
def clean_direct_feeds!
clean_feeds!(inactive_account_ids, :direct)
end
def clean_feeds!(ids, type)
reblogged_id_sets = {}
redis.pipelined do
ids.each do |feed_id|
redis.del(feed_manager.key(type, feed_id))
reblog_key = feed_manager.key(type, feed_id, 'reblogs')
# We collect a future for this: we don't block while getting
# it, but we can iterate over it later.
reblogged_id_sets[feed_id] = redis.zrange(reblog_key, 0, -1)
redis.del(reblog_key)
end
end
# Remove all of the reblog tracking keys we just removed the
# references to.
redis.pipelined do
reblogged_id_sets.each do |feed_id, future|
future.value.each do |reblogged_id|
reblog_set_key = feed_manager.key(type, feed_id, "reblogs:#{reblogged_id}")
redis.del(reblog_set_key)
end
end
end
feed_manager.clean_feeds!(:direct, inactive_account_ids)
end
def inactive_account_ids

View File

@ -12,6 +12,10 @@ Chewy.settings = {
sidekiq: { queue: 'pull' },
}
# We use our own async strategy even outside the request-response
# cycle, which takes care of checking if ElasticSearch is enabled
# or not. However, mind that for the Rails console, the :urgent
# strategy is set automatically with no way to override it.
Chewy.root_strategy = :custom_sidekiq
Chewy.request_strategy = :custom_sidekiq
Chewy.use_after_commit_callbacks = false
@ -37,6 +41,7 @@ Elasticsearch::Transport::Client.prepend Module.new {
super arguments
end
}
Elasticsearch::API::Indices::IndicesClient.prepend Module.new {
def create(arguments = {})
arguments[:include_type_name] = true

View File

@ -3,7 +3,7 @@ kab:
activerecord:
attributes:
poll:
expires_at: Azemz n tagara
expires_at: Azemz n taggara
options: Tifranin
errors:
models:

View File

@ -566,6 +566,7 @@ ca:
domain_blocks_rationale:
title: Mostra el raonament
enable_bootstrap_timeline_accounts:
desc_html: Fer que els nous usuaris segueixin automàticament als comptes configurats i la seva línia de temps no arrenqui buida
title: Activa els seguiments per defecte per els usuaris nous
hero:
desc_html: Es mostra en pàgina frontal. Recomanat al menys 600x100px. Si no es configura es mostrarà el del servidor

View File

@ -402,6 +402,8 @@ de:
silence: Stummschaltung
suspend: Sperre
title: Neue Domain-Blockade
obfuscate: Domainname verschleiern
obfuscate_hint: Den Domainnamen in der Liste teilweise verschleiern, wenn die Liste der Domänenbeschränkungen aktiviert ist
private_comment: Privater Kommentar
private_comment_hint: Kommentar zu dieser Domain-Beschränkung für die interne Nutzung durch die Moderatoren.
public_comment: Öffentlicher Kommentar
@ -564,6 +566,7 @@ de:
domain_blocks_rationale:
title: Rationale anzeigen
enable_bootstrap_timeline_accounts:
desc_html: Neue Benutzer automatisch den konfigurierten Konten folgen lassen, sodass ihr Home-Feed nicht leer startet
title: Aktiviere die Option "Konten, denen Neu-Angemeldete automatisch folgen"
hero:
desc_html: Wird auf der Startseite angezeigt. Mindestens 600x100px sind empfohlen. Wenn es nicht gesetzt wurde, wird das Server-Thumbnail dafür verwendet
@ -921,6 +924,8 @@ de:
status: Verifizierungsstatus
view_proof: Zeige Nachweis
imports:
errors:
over_rows_processing_limit: enthält mehr als %{count} Zeilen
modes:
merge: Zusammenführen
merge_long: Behalte existierende Datensätze und füge neue hinzu

View File

@ -21,18 +21,18 @@ zh-TW:
action: 驗證電子信箱位址
action_with_app: 確認並返回 %{app}
explanation: 您已經在 %{host} 上以此電子信箱位址建立了一支帳戶。您距離啟用它只剩一點之遙了。若這不是您,請忽略此信件。
explanation_when_pending: 您使用此電子信箱位址申請了 %{host} 的邀請。當您確認電子信箱後我們將審核您的申請,而直到核准前您都無法登入。當您的申請遭拒絕,您的資料將被移除而不必做後續動作。如果這不是您,請忽略此信件。
explanation_when_pending: 您使用此電子信箱位址申請了 %{host} 的邀請。當您確認電子信箱後我們將審核您的申請。您可以登入以改變您的細節或刪除您的帳號,但直到您的帳號被核准之前,您無法操作大部分的功能。若您的申請遭拒絕,您的資料將被移除而不必做後續動作。如果這不是您,請忽略此信件。
extra_html: 同時也請看看<a href="%{terms_path}">伺服器規則</a>與<a href="%{policy_path}">服務條款</a>。
subject: Mastodon%{instance} 確認說明
title: 驗證電子信箱位址
email_changed:
explanation: 您帳戶的電子信箱位址將變更為:
extra: 若您未變更電子信箱,那麼很有可能是某人取得了帳戶的存取權限。請立刻變更密碼,或當帳戶被鎖定時,請聯絡伺服器的管理員。
extra: 若您未變更電子信箱,那麼很有可能是某人取得了帳戶的存取權限。請立刻變更密碼,或當帳戶被鎖定時,請聯絡伺服器的管理員。
subject: Mastodon已變更電子信箱
title: 新電子信箱位址
password_change:
explanation: 您帳戶的密碼已變更。
extra: 如果您未變更密碼,那麼很有可能是某人取得了帳戶的存取權限。請立刻變更密碼,或若帳戶被鎖定時,請聯絡伺服器的管理員。
extra: 您未變更密碼,那麼很有可能是某人取得了帳戶的存取權限。請立刻變更密碼,或若帳戶被鎖定時,請聯絡伺服器的管理員。
subject: Mastodon已變更密碼
title: 密碼已變更
reconfirmation_instructions:
@ -43,7 +43,7 @@ zh-TW:
reset_password_instructions:
action: 變更密碼
explanation: 您已請求帳戶的新密碼。
extra: 若您並未請求,請忽略此信件。您的密碼在存取上方連結並建立新連結前不會變更。
extra: 若您並未請求,請忽略此信件。您的密碼在存取上方連結並建立新密碼前不會變更。
subject: Mastodon重設密碼指引
title: 重設密碼
two_factor_disabled:
@ -63,27 +63,27 @@ zh-TW:
webauthn_credential:
added:
explanation: 下面的安全密鑰已經新增至您的帳戶
subject: 'Mastodon: 新安全密鑰'
subject: Mastodon新安全密鑰
title: 已新增新安全密鑰
deleted:
explanation: 的安全密鑰已經從您的帳戶中移除
subject: 'Mastodon: 安全密鑰已移除'
explanation: 下的安全密鑰已經從您的帳戶中移除
subject: Mastodon安全密鑰已移除
title: 您的一支安全密鑰已經被移除
webauthn_disabled:
explanation: 您的帳戶並沒有啟用安全密鑰認證方式。只能以 TOTP app 產生地成對 token 登入。
subject: 'Mastodon: 安全密鑰認證方式已關閉'
subject: Mastodon安全密鑰認證方式已關閉
title: 已關閉安全密鑰
webauthn_enabled:
explanation: 安全密鑰認證已在您的帳戶中啟用。您可以使用安全密鑰登入了。
subject: 'Mastodon: 以啟用安全密鑰認證'
title: 啟安全密鑰
explanation: 您的帳戶已啟用安全密鑰認證。您可以使用安全密鑰登入了。
subject: Mastodon已啟用安全密鑰認證
title: 安全密鑰
omniauth_callbacks:
failure: 無法透過 %{kind} 認證是否為您,因為「%{reason}」。
success: 成功透過 %{kind} 帳戶登入。
passwords:
no_token: 您必須透過密碼重設信件才能存取此頁面。若確實如此,請確定輸入的網址是完整的。
send_instructions: 若電子信箱位址存在於資料庫,幾分鐘後您將在信箱中收到密碼復原連結。若未收到請檢查垃圾郵件資料夾。
send_paranoid_instructions: 若電子信箱位址存在於資料庫,幾分鐘後您將在信箱中收到密碼復原連結。若未收到請檢查垃圾郵件資料夾。
send_instructions: 若電子信箱位址存在於我們的資料庫,幾分鐘後您將在信箱中收到密碼復原連結。若未收到請檢查垃圾郵件資料夾。
send_paranoid_instructions: 若電子信箱位址存在於我們的資料庫,幾分鐘後您將在信箱中收到密碼復原連結。若未收到請檢查垃圾郵件資料夾。
updated: 您的密碼已成功變更,現在已經登入。
updated_not_active: 您的密碼已成功變更。
registrations:
@ -93,14 +93,14 @@ zh-TW:
signed_up_but_locked: 您已註冊成功,但由於您的帳戶已被鎖定,我們無法讓您登入。
signed_up_but_pending: 包含確認連結的訊息已寄到您的電子信箱。按下此連結後我們將審核您的申請。核准後將通知您。
signed_up_but_unconfirmed: 包含確認連結的訊息已寄到您的電子信箱。請前往連結以啟用帳號。若未收到請檢查垃圾郵件資料夾。
update_needs_confirmation: 更新您的帳號,但仍需驗證您的新信箱。請檢查電子信箱並前往確認連結來確認新信箱位址。若未收到請檢查垃圾郵件資料夾。
update_needs_confirmation: 成功更新您的帳號,但仍需驗證您的新信箱。請檢查電子信箱並前往確認連結來確認新信箱位址。若未收到請檢查垃圾郵件資料夾。
updated: 您的帳戶已成功更新。
sessions:
already_signed_out: 已成功登出。
signed_in: 已成功登入。
signed_out: 已成功登出。
unlocks:
send_instructions: 幾分鐘後您將收到確認信件。若未收到此信件,請檢查垃圾郵件資料夾。
send_instructions: 幾分鐘後您將收到解鎖帳號的指引信件。若未收到請檢查垃圾郵件資料夾。
send_paranoid_instructions: 若此帳號存在,您將在幾分鐘後收到解鎖指引信件。若未收到請檢查垃圾郵件資料夾。
unlocked: 已解鎖您的帳戶,請登入繼續。
errors:

View File

@ -557,6 +557,7 @@ el:
domain_blocks_rationale:
title: Εμφάνιση σκεπτικού
enable_bootstrap_timeline_accounts:
desc_html: Οι νέοι χρήστες να ακολουθούν τους προρυθμισμένουνς λογαριασμούς ώστε η αρχική ροή τους να μην είναι άδεια
title: Προεπιλογή παρακολούθησης για τους νέους χρήστες
hero:
desc_html: Εμφανίζεται στην μπροστινή σελίδα. Συνίσταται τουλάχιστον 600x100px. Όταν λείπει, χρησιμοποιείται η μικρογραφία του κόμβου

View File

@ -566,6 +566,7 @@ es-AR:
domain_blocks_rationale:
title: Mostrar razonamiento
enable_bootstrap_timeline_accounts:
desc_html: Hacer que los nuevos usuarios sigan automáticamente las cuentas configuradas para que su línea temporal principal no comience vacía
title: Habilitar seguimientos predeterminados para nuevas cuentas
hero:
desc_html: Mostrado en la página principal. Se recomienda un tamaño mínimo de 600x100 píxeles. Predeterminadamente se establece a la miniatura del servidor

View File

@ -566,6 +566,7 @@ es:
domain_blocks_rationale:
title: Mostrar la razón de ser
enable_bootstrap_timeline_accounts:
desc_html: Hacer que los nuevos usuarios sigan automáticamente las cuentas configuradas para que su línea temporal de inicio no comience vacía
title: Habilitar seguimientos predeterminados para usuarios nuevos
hero:
desc_html: Mostrado en la página principal. Recomendable al menos 600x100px. Por defecto se establece a la miniatura de la instancia

View File

@ -566,6 +566,7 @@ fr:
domain_blocks_rationale:
title: Montrer la raison
enable_bootstrap_timeline_accounts:
desc_html: Faire suivre automatiquement les comptes configurés aux nouveaux·lles utilisateurs·rices afin que leur flux personnel ne démarre pas vide
title: Activer les abonnements par défaut pour les nouveaux·elles utilisateur·rice·s
hero:
desc_html: Affichée sur la page daccueil. Au moins 600x100px recommandé. Lorsquelle nest pas définie, se rabat sur la vignette du serveur

View File

@ -402,6 +402,8 @@ gl:
silence: Silenciar
suspend: Suspender
title: Novo bloqueo de dominio
obfuscate: Ofuscar o nome de dominio
obfuscate_hint: Ofuscar parcialmente o nome do dominio na lista se está activada a publicación da lista de limitacións de dominio
private_comment: Comentario privado
private_comment_hint: Comentar sobre esta limitación de dominio para uso interno polos moderadores.
public_comment: Comentario público
@ -564,6 +566,7 @@ gl:
domain_blocks_rationale:
title: Amosar motivo
enable_bootstrap_timeline_accounts:
desc_html: Facer que as novas usuarias sigan automáticamente certas contas para que así a cronoloxía inicial non esté baleira
title: Activar seguimentos por omisión para novas usuarias
hero:
desc_html: Amosado na páxina principal. Polo menos 600x100px recomendados. Se non está definido, estará por defecto a miniatura do servidor
@ -921,6 +924,8 @@ gl:
status: Estado da validación
view_proof: Ver proba
imports:
errors:
over_rows_processing_limit: contén máis de %{count} filas
modes:
merge: Fusionar
merge_long: Manter os rexistros actuais e engadir novos

View File

@ -21,9 +21,9 @@ hu:
federation_hint_html: Egy %{instance} fiókkal bármely más Mastodon szerveren vagy a föderációban lévő felhasználót követni tudsz.
get_apps: Próbálj ki egy mobil appot
hosted_on: "%{domain} Mastodon szerver"
instance_actor_flash: 'Ez a fiók egy virtuális szereplő, mely magát a szervert reprezentálja, nem egy felhasználót. Ez a föderáció támogatására készült, ezért nem szabad blokkolni, hacsak egy teljes szervert nem akarsz kitiltani, amire persze a domain blokkolása jobb megoldás.
'
instance_actor_flash: |
Ez a fiók virtuális, magát a szervert reprezentálja, nem pedig konkrét
felhasználót. Föderációs célokra szolgál, nem szabad tehát felfüggeszteni, hacsak nem akarod a teljes szervert kitiltani, mely esetben a domain tiltásának használata javasolt.
learn_more: Tudj meg többet
privacy_policy: Adatvédelmi szabályzat
see_whats_happening: Nézd, mi történik
@ -60,7 +60,9 @@ hu:
one: Követő
other: Követő
following: Követett
instance_actor_flash: Ez a fiók virtuális és magát a kiszolgálót reprezentálja, nem egy konkrét felhasználót. Föderációs célokból használt, és nem szabad felfüggeszteni.
instance_actor_flash: |-
Ez a fiók virtuális, magát a szervert reprezentálja, nem pedig konkrét
felhasználót. Föderációs célokra szolgál, nem szabad tehát felfüggeszteni.
joined: Csatlakozott %{date}
last_active: utoljára aktív
link_verified_on: A link tulajdonosát %{date} -n ellenőriztük
@ -226,15 +228,15 @@ hu:
create_announcement: Közlemény létrehozása
create_custom_emoji: Egyéni emodzsi létrehozása
create_domain_allow: Domain engedélyezés létrehozása
create_domain_block: Domain blokkolás létrehozása
create_email_domain_block: E-mail domain blokkolás létrehozása
create_domain_block: Domain tiltás létrehozása
create_email_domain_block: E-mail domain tiltás létrehozása
create_ip_block: IP szabály létrehozása
demote_user: Felhasználó lefokozása
destroy_announcement: Közlemény törlése
destroy_custom_emoji: Egyéni emodzsi törlése
destroy_domain_allow: Domain engedélyezés törlése
destroy_domain_block: Domain blokkolás törlése
destroy_email_domain_block: E-mail domain blokkolás törlése
destroy_domain_block: Domain tiltás törlése
destroy_email_domain_block: E-mail domain tiltás törlése
destroy_ip_block: IP szabály törlése
destroy_status: Állapot törlése
disable_2fa_user: Kétlépcsős hitelesítés letiltása
@ -257,7 +259,7 @@ hu:
unsuspend_account: Fiók felfüggesztésének feloldása
update_announcement: Közlemény frissítése
update_custom_emoji: Egyéni emodzsi frissítése
update_domain_block: Domain blokkolás frissítése
update_domain_block: Domain tiltás frissítése
update_status: Állapot frissítése
actions:
assigned_to_self_report: "%{name} a %{target} bejelentést magához rendelte"
@ -268,14 +270,14 @@ hu:
create_custom_emoji: "%{name} új emodzsit töltött fel: %{target}"
create_domain_allow: "%{name} engedélyező listára vette %{target} domaint"
create_domain_block: "%{name} letiltotta az alábbi domaint: %{target}"
create_email_domain_block: "%{name} feketelistára tette az alábbi e-mail domaint: %{target}"
create_email_domain_block: "%{name} letiltotta az e-mail domaint: %{target}"
create_ip_block: "%{name} létrehozott egy szabályt a %{target} IP-vel kapcsolatban"
demote_user: "%{name} lefokozta az alábbi felhasználót: %{target}"
destroy_announcement: "%{name} törölte a közleményt %{target}"
destroy_custom_emoji: "%{name} törölte az emodzsit: %{target}"
destroy_domain_allow: "%{name} leszedte %{target} domaint az engedélyező listáról"
destroy_domain_block: "%{name} engedélyezte az alábbi domaint: %{target}"
destroy_email_domain_block: "%{name} fehérlistára tette az alábbi e-mail domaint: %{target}"
destroy_email_domain_block: "%{name} engedélyezte az e-mail domaint: %{target}"
destroy_ip_block: "%{name} törölt egy szabályt a %{target} IP-vel kapcsolatban"
destroy_status: "%{name} eltávolította az alábbi felhasználó tülkjét: %{target}"
disable_2fa_user: "%{name} kikapcsolta a kétlépcsős azonosítást %{target} felhasználó fiókján"
@ -298,7 +300,7 @@ hu:
unsuspend_account: "%{name} feloldotta %{target} felhasználói fiókjának felfüggesztését"
update_announcement: "%{name} frissítette a közleményt %{target}"
update_custom_emoji: "%{name} frissítette az alábbi emodzsit: %{target}"
update_domain_block: "%{name} frissítette a(z) %{target} domain blokkolását"
update_domain_block: "%{name} frissítette a %{target} domain tiltását"
update_status: "%{name} frissítette %{target} felhasználó tülkjét"
deleted_status: "(törölt tülk)"
empty: Nem található napló.
@ -430,16 +432,16 @@ hu:
view: Domain tiltásának megtekintése
email_domain_blocks:
add_new: Új hozzáadása
created_msg: E-mail domain sikeresen hozzáadva a feketelistához
created_msg: E-mail domain sikeresen letiltva
delete: Törlés
destroyed_msg: E-mail domain sikeresen eltávolítva a feketelistáról
destroyed_msg: E-mail domain sikeresen engedélyezve
domain: Domain
empty: Nincs email domain a feketelistán.
empty: Nincs letiltott email domain.
from_html: "%{domain}-ról"
new:
create: Domain hozzáadása
title: Új e-mail feketelista bejegyzés
title: E-mail feketelista
title: Új e-mail domain tiltása
title: Tiltott e-mail domainek
instances:
by_domain: Domain
delivery_available: Kézbesítés elérhető
@ -566,6 +568,7 @@ hu:
domain_blocks_rationale:
title: Mutasd meg az indokolást
enable_bootstrap_timeline_accounts:
desc_html: Az új felhasználók automatikusan követik a beállított fiókokat, így a Saját idővonaluk kezdéskor nem lesz üres
title: Alapértelmezett követés engedélyezése új felhasználóknak
hero:
desc_html: A kezdőoldalon látszik. Legalább 600x100px méret javasolt. Ha nincs beállítva, a szerver bélyegképet használjuk
@ -1004,7 +1007,7 @@ hu:
moderation:
title: Moderáció
move_handler:
carry_blocks_over_text: Ez a fiók elköltözött innen %{acct}, melyet blokkoltatok.
carry_blocks_over_text: Ez a fiók elköltözött innen %{acct}, melyet letiltottatok.
carry_mutes_over_text: Ez a fiók elköltözött innen %{acct}, melyet lenémítottatok.
copy_account_note_text: 'Ez a fiók elköltözött innen %{acct}, itt vannak a bejegyzéseitek róla:'
notification_mailer:
@ -1187,7 +1190,7 @@ hu:
preferences: Beállítások
profile: Profil
relationships: Követések és követők
two_factor_authentication: Kétlépcsős azonosítás
two_factor_authentication: Kétlépcsős hitelesítés
webauthn_authentication: Biztonsági kulcsok
spam_check:
spam_detected: Ez egy automatikus jelentés. Spamet érzékeltünk.

View File

@ -166,10 +166,12 @@ hy:
roles:
admin: Ադմինիստրատոր
moderator: Մոդերատոր
staff: Անձնակազմ
user: Oգտատէր
search: Որոնել
search_same_email_domain: Այլ օգտատէրեր նոյն էլ․ փոստի դոմէյնով
search_same_ip: Այլ օգտատէրեր նոյն IP֊ով
sensitive: Զգայուն
show:
created_reports: Կազմել բողոքներ
targeted_reports: Այլոց կողմից բողոքարկուած
@ -194,6 +196,7 @@ hy:
confirm_user: Հաստատել օգտատիրոջը
create_account_warning: Ստեղծել զգուշացում
create_announcement: Ստեղծել յայտարարութիւն
create_custom_emoji: Ստեղծել սեփական էմոջիները
create_email_domain_block: Ստեղծել էլ․ հասցէի դոմէյնի արգելափակում
create_ip_block: Ստեղծել IP կանոն
destroy_announcement: Ջնջել յայտարարութիւնը
@ -278,8 +281,11 @@ hy:
image_hint: PNG մինչեւ 50KB
list: Ցանկ
listed: Ցուցակագրուած
new:
title: Աւելացնել նոր էմոջի
overwrite: Վերագրել
shortcode: Հապավում
title: Սեփական էմօջիներ
uncategorized: Չդասակարգուած
unlist: Ապացուցակագրում
unlisted: Ծածուկ
@ -290,6 +296,7 @@ hy:
feature_invites: Հրաւէրի յղումներ
feature_profile_directory: Օգտատիրոջ մատեան
feature_registrations: Գրանցումներ
feature_spam_check: Հակա-սպամ
feature_timeline_preview: Հոսքի նախադիտում
features: Յատկանիշներ
open_reports: բաց բողոքներ
@ -346,6 +353,7 @@ hy:
title: էլ․ փոստի արգելափակուած տիրոյթներ
instances:
by_domain: Դոմեն
empty: Դոմեյնները չեն գտնուել
known_accounts:
one: "%{count} յայտնի հաշիւ"
other: "%{count} յայտնի հաշիւներ"
@ -387,6 +395,7 @@ hy:
relationships:
title: "%{acct}ի յարաբերութիւններ"
relays:
add_new: Աւելացնել նոր վերահեռարձակուիչ
delete: Ջնջել
disable: Անջատել
disabled: Անջատված է
@ -424,6 +433,7 @@ hy:
updated_at: Թարմացուած
settings:
contact_information:
email: Գործնական էլփոստ
username: Կոնտակտի ծածկանուն
custom_css:
title: Սեփական CSS
@ -449,6 +459,10 @@ hy:
approved: Գրանցման համար անհրաժեշտ է հաստատում
none: Ոչ ոք չի կարող գրանցուել
open: Բոլորը կարող են գրանցուել
title: Գրանցումային ռեժիմ
show_staff_badge:
desc_html: Ցուցադրել անձնակազմի անդամի նշանը օգտատիրոջ էջում
title: Ցուցադրել անձնակազմի անդամի նշանը
site_description:
title: Կայքի նկարագրութիւն
site_short_description:
@ -468,10 +482,13 @@ hy:
back_to_account: Վերադառնալ անձնական էջ
batch:
delete: Ջնջել
nsfw_on: Նշել որպէս դիւրազգաց
deleted: Ջնջված է
failed_to_execute: Կատարումը ձախողուեց
media:
title: Մեդիա
no_media: Մեդիա չկայ
title: Օգտատիրոջ գրառումները
with_media: Մեդիայի հետ
tags:
context: Համատեքստ
@ -509,6 +526,7 @@ hy:
view_status: Նայել գրառումը
applications:
invalid_url: Տրամադրուած URL անվաւեր է
your_token: Քո մուտքի բանալին
auth:
apply_for_account: Հրաւէրի հարցում
change_password: Գաղտնաբառ
@ -519,6 +537,7 @@ hy:
login: Մտնել
logout: Դուրս գալ
migrate_account: Տեղափոխուել այլ հաշիւ
or_log_in_with: Կամ մուտք գործել օգտագործելով՝
providers:
cas: CAS
saml: SAML
@ -531,6 +550,7 @@ hy:
title: Կարգավորում
status:
account_status: Հաշուի կարգավիճակ
pending: Դիմումը պէտք է քննուի մեր անձնակազմի կողմից, ինչը կարող է մի փոքր ժամանակ խլել։ Դիմումի հաստատուելու դէպքում, կտեղեկացնենք նամակով։
authorize_follow:
follow: Հետևել
following: Յաջողութի՜ւն։ Դու այժմ հետեւում ես․
@ -578,7 +598,7 @@ hy:
errors:
'400': The request you submitted was invalid or malformed.
'403': You don't have permission to view this page.
'404': The page you are looking for isn't here.
'404': Էջը, որը փնտրում ես գոյութիւն չունի։
'406': This page is not available in the requested format.
'410': The page you were looking for doesn't exist here anymore.
'422':
@ -633,6 +653,7 @@ hy:
identity_proofs:
active: Ակտիվ
authorize: Այո, նոյնականացնել
authorize_connection_prompt: Հաւաստագրէ՞լ այս ծածկագրման կապակցումը
i_am_html: Ես %{username}ն եմ %{service}ում։
identity: Ինքնութիւն
inactive: Ոչ ակտիւ
@ -650,6 +671,7 @@ hy:
blocking: Արգելափակումների ցուցակ
bookmarks: Էջանիշեր
domain_blocking: Տիրոյթի արգելափակումների ցուցակ
following: Հետեւումների ցանկ
upload: Վերբեռնել
invites:
delete: Ապաակտիւացնել
@ -680,11 +702,14 @@ hy:
not_found: չգտնուեց
past_migrations: Նախոդ միգրացիաները
proceed_with_move: Տեղափոխել հետեւորդներին
redirecting_to: Քո հաշիւը վերահասցեաորում է %{acct}-ին
warning:
followers: Այս քայլով քո բոլոր հետեւորդներին այս հաշուից կը տեղափոխես դէպի նորը
moderation:
title: Մոդերացիա
notification_mailer:
digest:
title: Երբ բացակայ էիր...
favourite:
title: Նոր հաւանում
follow:
@ -695,6 +720,8 @@ hy:
title: Նոր հետեւելու հայցեր
mention:
action: Պատասխանել
notifications:
other_settings: Ծանուցումների այլ կարգաւորումներ
number:
human:
decimal_units:
@ -714,8 +741,12 @@ hy:
older: Ավելի հին
prev: Նախորդ
truncate: "&hellip;"
polls:
errors:
duration_too_short: շատ կարճ է
preferences:
other: Այլ
posting_defaults: Կանխադիր կարգաւորումներ
public_timelines: Հանրային հոսք
relationships:
activity: Հաշուի ակտիւութիւնը
@ -732,6 +763,8 @@ hy:
remove_selected_domains: Հեռացնել բոլոր հետեւորդներին նշուած դոմեյններից
remove_selected_followers: Հեռացնել նշուած հետեւորդներին
status: Հաշուի կարգավիճակ
scheduled_statuses:
too_soon: Նախադրուած ամսաթիւը պէտք է լինի ապագայում
sessions:
activity: Վերջին թութը
browser: Դիտարկիչ
@ -771,11 +804,14 @@ hy:
title: Սեսսիա
settings:
account: Հաշիվ
account_settings: Հաշուի կարգաւորումներ
appearance: Տեսք
back: Ետ գնալ մաստադոն
delete: Հաշուի ջնջում
development: Ծրագրավորում
edit_profile: Խմբագրել պրոֆիլը
export: Տվյալների արտահանում
featured_tags: Ընտրուած հէշթեգեր
identity_proofs: Անձի նոյնացումներ
import: Ներմուծել
import_and_export: Ներմուծել և արտահանել
@ -926,12 +962,21 @@ hy:
otp: Նոյնականացման հավելված
recovery_codes: Վերականգնման կոդեր
recovery_codes_regenerated: Վերականգման կոդերը հաջողութեամբ ստեղծուել են
webauthn: Անվտանգութեան բանալիներ
user_mailer:
sign_in_token:
title: Մուտքի փորձ
warning:
get_in_touch: Կարող էք կապուել %{instance} հանգոյցի անձնակազմի հետ պատասխանելով այս նամակին։
statuses: Մասնաւորապէս, միայն՝
title:
none: Զգուշացում
sensitive: Մեդիաֆայլը պիտակուել է որպէս զգայուն։
suspend: Հաշիւը արգելափակուած է
welcome:
edit_profile_action: Կարգաւորել հաշիւը
final_action: Սկսել թթել
review_preferences_action: Փոփոխել կարգաւորումները
subject: Բարի գալուստ Մաստոդոն
tip_federated_timeline: Դաշնային հոսքում երևում է ամբողջ Մաստոդոնի ցանցը։ Բայց այն ներառում է միայն այն օգտատերերին որոնց բաժանորդագրուած են ձեր հարևաններ, այդ պատճառով այն կարող է լինել ոչ ամբողջական։
tip_following: Դու հետեւում էս քո հանգոյցի ադմին(ներ)ին լռելայն։ Այլ հետաքրքիր անձանց գտնելու համար՝ թերթիր տեղական և դաշնային հոսքերը։
@ -949,3 +994,4 @@ hy:
verification: Ստուգում
webauthn_credentials:
delete: Ջնջել
registered_on: Գրանցուել է %{date}

View File

@ -556,6 +556,7 @@ id:
domain_blocks_rationale:
title: Tampilkan alasan
enable_bootstrap_timeline_accounts:
desc_html: Buat pengguna baru mengikuti akun yang sudah dipilih agar beranda mereka tidak kosong
title: Aktifkan opsi ikuti otomatis untuk pengguna baru
hero:
desc_html: Ditampilkan di halaman depan. Direkomendasikan minimal 600x100px. Jika tidak diatur, kembali ke server gambar kecil

View File

@ -566,6 +566,7 @@ is:
domain_blocks_rationale:
title: Birta röksemdafærslu
enable_bootstrap_timeline_accounts:
desc_html: Láta nýja notendur sjálfkrafa fylgjast með uppsettum aðgöngum svo að heimastreymi þeirra byrji ekki autt
title: Virkja sjálfgefnar fylgnistillingar fyrir nýja notendur
hero:
desc_html: Birt á forsíðunni. Mælt með að hún sé a.m.k. 600×100 mynddílar. Þegar þetta er ekki stillt, er notuð smámynd netþjónsins

View File

@ -566,6 +566,7 @@ it:
domain_blocks_rationale:
title: Mostra motivazione
enable_bootstrap_timeline_accounts:
desc_html: I nuovi utenti seguiranno automaticamente gli account configurati, in modo che il loro home feed all'inizio non sia vuoto
title: Abilita seguiti predefiniti per i nuovi utenti
hero:
desc_html: Mostrata nella pagina iniziale. Almeno 600x100 px consigliati. Se non impostata, sarà usato il thumbnail del server

View File

@ -128,6 +128,7 @@ ko:
follows: 팔로잉 수
header: 헤더
inbox_url: 수신함 URL
invite_request_text: 가입 하려는 이유
invited_by: 초대자
ip: IP
joined: 가입
@ -399,6 +400,8 @@ ko:
silence: 침묵
suspend: 정지
title: 새로운 도메인 차단
obfuscate: 도메인 이름 난독화
obfuscate_hint: 도메인 제한 목록을 공개하는 경우 도메인 이름의 일부를 난독화 합니다
private_comment: 비공개 주석
private_comment_hint: 이 도메인 제한에 대한 주석은 중재자를 위해 내부적으로 사용 됩니다.
public_comment: 공개 주석
@ -557,6 +560,7 @@ ko:
domain_blocks_rationale:
title: 사유 보여주기
enable_bootstrap_timeline_accounts:
desc_html: 새 사용자들이 자동으로 설정 된 계정들을 팔로우 하도록 해서 그들의 홈 피드가 빈 상태로 시작하지 않도록 합니다
title: 새 유저가 팔로우할 계정을 보여주기
hero:
desc_html: 프론트페이지에 표시 됩니다. 최소 600x100픽셀을 권장합니다. 만약 설정되지 않았다면, 서버의 썸네일이 사용 됩니다

View File

@ -1,32 +1,52 @@
---
ml:
about:
about_this: കുറിച്ച്
api: API
apps: മൊബൈൽ ആപ്പുകൾ
contact: ബന്ധപ്പെടുക
contact_missing: സജ്ജമാക്കിയിട്ടില്ല
contact_unavailable: ലഭ്യമല്ല
discover_users: ഉപയോഗ്‌താക്കളെ കണ്ടെത്തുക
get_apps: മൊബൈൽ ആപ്പ് പരീക്ഷിക്കുക
learn_more: കൂടുതൽ പഠിക്കുക
privacy_policy: സ്വകാര്യതാ നയം
see_whats_happening: എന്തൊക്കെ സംഭവിക്കുന്നു എന്ന് കാണുക
source_code: സോഴ്സ് കോഡ്
status_count_before: ആരാൽ എഴുതപ്പെട്ടു
tagline: സുഹൃത്തുക്കളെ പിന്തുടരുകയും പുതിയവരെ കണ്ടെത്തുകയും ചെയ്യുക
terms: സേവന വ്യവസ്ഥകൾ
unavailable_content: ലഭ്യമല്ലാത്ത ഉള്ളടക്കം
unavailable_content_description:
domain: സെർവർ
reason: കാരണം
what_is_mastodon: എന്താണ് മാസ്റ്റഡോൺ?
accounts:
follow: പിന്തുടരുക
following: നിങ്ങൾ പിന്തുടരുന്നവർ
following: പിന്തുടരുന്നു
joined: "%{date} ൽ ചേർന്നു"
last_active: അവസാനം സജീവമായിരുന്നത്
link_verified_on: സന്ധിയുടെ ഉടമസ്ഥാവസ്‌കാശം %{date} ൽ പരിശോധിക്കപ്പെട്ടു
media: മാധ്യമങ്ങൾ
moved_html: "%{name}, %{new_profile_link} ലേക്ക് നീങ്ങിയിരിക്കുന്നു:"
network_hidden: ഈ വിവരം ലഭ്യമല്ല
nothing_here: ഇവിടെ ഒന്നുമില്ല!
posts_tab_heading: ടൂട്ടുകൾ
posts_with_replies: ടൂട്ടുകളും മറുപടികളും
roles:
admin: അഡ്‌മിന്‍
bot: ബോട്ട്
group: ഗ്രൂപ്പ്
unavailable: പ്രൊഫൈൽ ലഭ്യമല്ല
admin:
account_moderation_notes:
delete: മായ്ക്കുക
accounts:
add_email_domain_block: ഇ-മെയിൽ ഡൊമെയ്ൻ തടയുക
approve: അംഗീകരിക്കുക
approve_all: എല്ലാം അംഗീകരിക്കുക
are_you_sure: നിങ്ങൾക്ക് ഉറപ്പാണോ?
avatar: അവതാർ
by_domain: മേഖല
change_email:
changed_msg: അംഗത്തിന്റെ ഇലക്ട്രോണിക് കത്തിന്റെ മേൽവിലാസം വിജയകരമായി മാറ്റിയിരിക്കുന്നു!
@ -37,6 +57,8 @@ ml:
title: "%{username} ന്റെ ഇലക്ട്രോണിക് കത്ത് മേൽവിലാസം മാറ്റുക"
confirm: നിജപ്പെടുത്തുക
confirmed: നിജപ്പെടുത്തി
confirming: സ്ഥിരീകരിക്കുന്നു
delete: ഡാറ്റ ഇല്ലാതാക്കുക
deleted: മായിച്ചു
demote: തരം താഴ്ത്തുക
disable: പ്രവര്‍ത്തന രഹിതമാക്കുക
@ -44,6 +66,56 @@ ml:
disabled: പ്രവർത്തന രഹിതമാക്കപ്പെട്ടിരിക്കുന്നു
display_name: കാണപ്പെടുന്ന നാമം
domain: മേഖല
edit: തിരുത്തുക
email: ഇമെയിൽ
header: തലക്കെട്ട്
location:
all: എല്ലാം
moderation:
active: സജീവമാണ്
all: എല്ലാം
resend_confirmation:
send: സ്ഥിരീകരണ ഇമെയിൽ വീണ്ടും അയയ്ക്കുക
success: സ്ഥിരീകരണ ഇമെയിൽ വിജയകരമായി അയച്ചു!
reset: പുനഃക്രമീകരിക്കുക
reset_password: പാസ്‌വേഡ് പുനഃക്രമീകരിക്കുക
role: അനുമതികൾ
roles:
user: ഉപയോക്താവ്
search: തിരയുക
title: അക്കൗണ്ടുകൾ
unconfirmed_email: സ്ഥിരീകരിക്കാത്ത ഇമെയിൽ
username: ഉപയോക്തൃനാമം
web: വെബ്
action_logs:
action_types:
confirm_user: ഉപയോക്താവിനെ സ്ഥിരീകരിക്കുക
remove_avatar_user: അവതാർ നീക്കംചെയ്യുക
reset_password_user: പാസ്‌വേഡ് പുനഃക്രമീകരിക്കുക
custom_emojis:
copy: പകര്‍ത്തുക
create_new_category: പുതിയ വിഭാഗം സൃഷ്ടിക്കുക
delete: ഇല്ലാതാക്കുക
emoji: ഇമോജി
dashboard:
feature_profile_directory: പ്രൊഫൈൽ ഡയറക്ടറി
features: സവിശേഷതകൾ
title: ഡാഷ്ബോർഡ്
total_users: മൊത്തം ഉപയോക്താക്കൾ
trends: ട്രെൻഡുകൾ
email_domain_blocks:
add_new: പുതിയത് ചേര്‍ക്കുക
delete: ഇല്ലാതാക്കുക
domain: ഡൊമൈന്‍
new:
create: ഡൊമൈൻ ചേര്‍ക്കുക
invites:
filter:
all: എല്ലാം
authorize_follow:
following: 'വിജയകരം! നിങ്ങൾ ഇപ്പോൾ പിന്തുടരുന്നു:'
directories:
directory: പ്രൊഫൈൽ ഡയറക്ടറി
errors:
'400': The request you submitted was invalid or malformed.
'403': You don't have permission to view this page.
@ -54,3 +126,18 @@ ml:
'429': Too many requests
'500':
'503': The page could not be served due to a temporary server failure.
filters:
contexts:
notifications: അറിയിപ്പുകൾ
generic:
all: എല്ലാം
notification_mailer:
digest:
action: എല്ലാ അറിയിപ്പുകളും കാണിക്കുക
follow:
body: "%{name} ഇപ്പോൾ നിങ്ങളെ പിന്തുടരുന്നു!"
subject: "%{name} ഇപ്പോൾ നിങ്ങളെ പിന്തുടരുന്നു"
relationships:
following: പിന്തുടരുന്നു
settings:
notifications: അറിയിപ്പുകൾ

View File

@ -60,6 +60,7 @@ nl:
one: Volger
other: Volgers
following: Volgend
instance_actor_flash: Dit account is een 'virtual actor' waarmee de server zichzelf vertegenwoordigd en is dus geen individuele gebruiker. Het wordt voor federatiedoeleinden gebruikt en moet niet worden opgeschort.
joined: Geregistreerd in %{date}
last_active: laatst actief
link_verified_on: Eigendom van deze link is gecontroleerd op %{date}
@ -131,6 +132,7 @@ nl:
follows: Volgt
header: Omslagfoto
inbox_url: Inbox-URL
invite_request_text: Redenen om te registreren
invited_by: Uitgenodigd door
ip: IP
joined: Geregistreerd in
@ -207,8 +209,11 @@ nl:
undo_sensitized: Niet meer als gevoelig markeren
undo_silenced: Niet langer negeren
undo_suspension: Niet langer opschorten
unsilenced_msg: Het opheffen van de beperkingen van %{username} zijn geslaagd
unsubscribe: Opzeggen
unsuspended_msg: Het niet langer opschorten van %{username} is geslaagd
username: Gebruikersnaam
view_domain: Samenvatting voor domein bekijken
warn: Waarschuwen
web: Webapp
whitelisted: Goedgekeurd voor federatie
@ -243,13 +248,16 @@ nl:
reopen_report: Rapportage heropenen
reset_password_user: Wachtwoord opnieuw instellen
resolve_report: Rapportage oplossen
sensitive_account: De media in jouw account als gevoelig markeren
silence_account: Account negeren
suspend_account: Account opschorten
unassigned_report: Rapportage niet langer toewijzen
unsensitive_account: De media in jouw account niet langer als gevoelig markeren
unsilence_account: Account niet langer negeren
unsuspend_account: Account niet langer opschorten
update_announcement: Mededeling bijwerken
update_custom_emoji: Lokale emoji bijwerken
update_domain_block: Domeinblokkade bijwerken
update_status: Toot bijwerken
actions:
assigned_to_self_report: "%{name} heeft rapportage %{target} aan zichzelf toegewezen"
@ -428,6 +436,7 @@ nl:
instances:
by_domain: Domein
delivery_available: Bezorging is mogelijk
empty: Geen domeinen gevonden.
known_accounts:
one: "%{count} bekend account"
other: "%{count} bekende accounts"
@ -505,6 +514,8 @@ nl:
comment:
none: Geen
created_at: Gerapporteerd op
forwarded: Doorgestuurd
forwarded_to: Doorgestuurd naar %{domain}
mark_as_resolved: Markeer als opgelost
mark_as_unresolved: Markeer als onopgelost
notes:
@ -742,6 +753,7 @@ nl:
functional: Jouw account is volledig operationeel.
pending: Jouw aanvraag moet nog worden beoordeeld door een van onze medewerkers. Dit kan misschien eventjes duren. Je ontvangt een e-mail wanneer jouw aanvraag is goedgekeurd.
redirecting_to: Jouw account is inactief omdat het momenteel wordt doorverwezen naar %{acct}.
too_fast: Formulier is te snel ingediend. Probeer het nogmaals.
trouble_logging_in: Problemen met inloggen?
use_security_key: Beveiligingssleutel gebruiken
authorize_follow:
@ -901,6 +913,8 @@ nl:
status: Verificatiestatus
view_proof: Bekijk bewijs
imports:
errors:
over_rows_processing_limit: bevat meer dan %{count} rijen
modes:
merge: Samenvoegen
merge_long: Bestaande gegevens behouden en nieuwe toevoegen
@ -1350,11 +1364,13 @@ nl:
subject:
disable: Jouw account %{acct} is bevroren
none: Waarschuwing voor %{acct}
sensitive: De door jouw account %{acct} geplaatste media is als gevoelig gemarkeerd
silence: Jouw account %{acct} is nu beperkt
suspend: Jouw account %{acct} is opgeschort
title:
disable: Account bevroren
none: Waarschuwing
sensitive: Jouw media is als gevoelig gemarkeerd
silence: Account beperkt
suspend: Account opgeschort
welcome:
@ -1392,9 +1408,14 @@ nl:
webauthn_credentials:
add: Nieuwe beveiligingssleutel toevoegen
create:
error: Er deed zich een probleem voor met het toevoegen van jouw beveiligingssleutel. Probeer het nogmaals.
success: Het toevoegen van je beveiligingssleutel is geslaagd.
delete: Verwijderen
delete_confirmation: Weet je zeker dat je deze beveiligingssleutel wilt verwijderen?
description_html: Wanneer je <strong>verificatie met beveiligingssleutels</strong> inschakelt, moet je tijdens het inloggen een van jouw beveiligingssleutels gebruiken.
destroy:
error: Er deed zich een probleem voor met het verwijderen van jouw beveiligingssleutel. Probeer het nogmaals.
success: Het verwijderen van jouw beveiligingssleutel is geslaagd.
invalid_credential: Ongeldige beveiligingssleutel
nickname_hint: Voer de bijnaam in van jouw nieuwe beveiligingssleutel
not_enabled: Je hebt WebAuthn nog niet ingeschakeld

View File

@ -132,6 +132,7 @@ oc:
login_status: Estat formulari de connexion
media_attachments: Mèdias enviats
memorialize: Passar en memorial
memorialized: Memorizat
moderation:
active: Actius
all: Totes
@ -773,6 +774,7 @@ oc:
request: Demandar vòstre archiu
size: Talha
blocks: Personas que blocatz
bookmarks: Marcadors
csv: CSV
domain_blocks: Blocatge de domenis
lists: Listas
@ -847,6 +849,7 @@ oc:
success: Vòstras donadas son ben estadas mandadas e seràn tractadas tre que possible
types:
blocking: Lista de blocatge
bookmarks: Marcadors
domain_blocking: Lista dels domenis blocats
following: Lista de monde que seguètz
muting: Lista de monde que volètz pas legir
@ -1083,6 +1086,9 @@ oc:
spam_detected: Aquò es un senhalament automatic. Dspam es estat detectat.
statuses:
attached:
audio:
one: "%{count} àudio"
other: "%{count} àudios"
description: 'Ajustat: %{attached}'
image:
one: "%{count} imatge"
@ -1232,6 +1238,7 @@ oc:
recovery_codes: Salvar los còdis de recuperacion
recovery_codes_regenerated: Los còdis de recuperacion son ben estats tornats generar
recovery_instructions_html: Se vos arriba de perdre vòstre mobil, podètz utilizar un dels còdis de recuperacion cai-jos per poder tornar accedir a vòstre compte. <strong>Gardatz los còdis en seguretat</strong>, per exemple, imprimissètz los e gardatz los amb vòstres documents importants.
webauthn: Claus de seguretat
user_mailer:
backup_ready:
explanation: Avètz demandat una salvagarda complèta de vòstre compte Mastodon. Es prèsta per telecargament!
@ -1284,4 +1291,7 @@ oc:
explanation_html: 'Podètz <strong>verificar vosautres meteisses coma proprietari dels ligams per las metadonadas de vòstre perfil</strong>. Per aquò far, lo site Web ligat deu conténer un ligam cap a vòstre perfil Mastodon. Lo ligam <strong>deu</strong> aver un atribut <code>rel="me"</code>. Lo contengut tèxte del ligam impòrta pas. Vaquí un exemple :'
verification: Verificacion
webauthn_credentials:
add: Apondre una clau de seguretat novèla
delete: Suprimir
invalid_credential: Cau de seguretat invalida
registered_on: Inscripcion del %{date}

View File

@ -582,6 +582,7 @@ pl:
domain_blocks_rationale:
title: Pokaż uzasadnienia
enable_bootstrap_timeline_accounts:
desc_html: Niech nowi użytkownicy automatycznie śledzą ustawione konta, aby ich główna oś czasu nie był początkowo pusta
title: Dodawaj domyślne obserwacje nowym użytkownikom
hero:
desc_html: Wyświetlany na stronie głównej. Zalecany jest rozmiar przynajmniej 600x100 pikseli. Jeżeli nie ustawiony, zostanie użyta miniatura serwera

View File

@ -566,6 +566,7 @@ pt-PT:
domain_blocks_rationale:
title: Mostrar motivo
enable_bootstrap_timeline_accounts:
desc_html: Faça com que novos utilizadores sigam automaticamente contas configuradas, para que a cronologia destes não se apresente inicialmente vazia
title: Habilitar seguidores predefinidos para novos utilizadores
hero:
desc_html: Apresentado na primeira página. Pelo menos 600x100px recomendados. Quando não é definido, é apresentada a miniatura da instância

View File

@ -94,6 +94,7 @@ hy:
types:
disable: Փակել մուտքը
none: Ոչինչ չանել
sensitive: Զգայուն
silence: Լուռ
suspend: Արգելափակել եւ անվերադարձ ջնջել հաշուի ամբողջ ինֆորմացիան
warning_preset_id: Օգտագործել զգուշացնող նախադիր
@ -119,6 +120,7 @@ hy:
expires_in: Սպառուում է
fields: Հաշուի մետադատա
header: Վերնագիր
honeypot: "%{label} (չլրացնել)"
inbox_url: Ներմուծման շերտի URL
irreversible: Թաքցնելու փոխարէն ջնջել
locale: Ինտերֆեյսի լեզու

View File

@ -14,3 +14,7 @@ ml:
acct: പഴയ അംഗത്വത്തിലേക്കുള്ള പിടി
account_migration:
acct: പുതിയ അംഗത്വത്തിലേക്കുള്ള പിടി
defaults:
email: ഇ-മെയിൽ വിലാസം
notification_emails:
follow: ആരോ നിങ്ങളെ പിന്തുടർന്നു

View File

@ -121,6 +121,7 @@ nl:
expires_in: Vervalt na
fields: Metadata profiel
header: Omslagfoto
honeypot: "%{label} (niet invullen)"
inbox_url: Inbox-URL van de relayserver
irreversible: Verwijderen in plaats van verbergen
locale: Taal van de gebruikersomgeving
@ -173,7 +174,7 @@ nl:
invite:
comment: Opmerking
invite_request:
text: Waarom wil jij je aanmelden?
text: Waarom wil je je hier registreren?
ip_block:
comment: Opmerking
ip: IP

View File

@ -126,6 +126,7 @@ oc:
expires_in: Expira aprèp
fields: Metadonada del perfil
header: Bandièra
honeypot: "%{label} (emplenar pas)"
inbox_url: URL de la bóstia de recepcion del relai
irreversible: Suprimir allòc de rescondre
locale: Lenga de linterfàcia

View File

@ -566,6 +566,7 @@ sq:
domain_blocks_rationale:
title: Shfaq arsye
enable_bootstrap_timeline_accounts:
desc_html: Bëj që përdoruesit e rinj automatikisht të ndjekin llogaritë e formësuara, që prurja e tyre bazë të mos nisë e zbrazët
title: Aktivizo ndjekje parazgjedhje për përdorues të rinj
hero:
desc_html: E shfaqur në faqen ballore. Këshillohet të paktën 600x100px. Kur nuk caktohet gjë, përdoret miniaturë e shërbyesit

View File

@ -558,6 +558,7 @@ vi:
domain_blocks_rationale:
title: Hiển thị lý do
enable_bootstrap_timeline_accounts:
desc_html: Thiết lập người mới đăng ký sẽ tự động theo dõi những tài khoản cho trước nhằm tránh việc bảng tin trống
title: Gợi ý theo dõi cho người dùng mới
hero:
desc_html: Hiển thị trên trang chủ. Kích cỡ tối thiểu 600x100px. Mặc định dùng hình thu nhỏ của máy chủ

View File

@ -57,6 +57,7 @@ zh-CN:
followers:
other: 关注者
following: 正在关注
instance_actor_flash: 这个账户是虚拟账户,用来代表服务器自身,不代表任何实际用户。它用于互通功能,不应该封禁。
joined: 加入于 %{date}
last_active: 最近活动
link_verified_on: 此链接的所有权已在 %{date} 检查
@ -397,6 +398,8 @@ zh-CN:
silence: 自动隐藏
suspend: 自动封禁
title: 新增域名屏蔽
obfuscate: 混淆域名
obfuscate_hint: 如果启用了域名列表公开限制,就部分混淆列表中的域名
private_comment: 私密评论
private_comment_hint: 给这一域名限制添加备注,供监察员内部使用
public_comment: 公开评论
@ -555,6 +558,7 @@ zh-CN:
domain_blocks_rationale:
title: 显示理由
enable_bootstrap_timeline_accounts:
desc_html: 让新用户自动关注指定用户,这样,他们的主页时间线就不会在一开始的时候空空荡荡
title: 开启新用户默认关注功能
hero:
desc_html: 将用于在首页展示。推荐使用分辨率 600×100px 以上的图片。如未设置,将默认使用本站缩略图。
@ -583,7 +587,7 @@ zh-CN:
title: 允许发送邀请的用户组
require_invite_text:
desc_html: 当注册需要手动批准时,将“你为什么想要加入?”设为必填项
title: 要求新用户填写注册申请
title: 要求新用户填写申请注册的原因
registrations_mode:
modes:
approved: 注册时需要批准
@ -911,6 +915,8 @@ zh-CN:
status: 验证状态
view_proof: 查看证明
imports:
errors:
over_rows_processing_limit: 包含行数超过了 %{count}
modes:
merge: 合并
merge_long: 保留现有记录并添加新的记录

View File

@ -57,6 +57,7 @@ zh-TW:
followers:
other: 關注者
following: 正在關注
instance_actor_flash: 這個帳號是一個用來代表此伺服器的虛擬執行者,而非真實使用者。它用途為站點聯盟且不應被停權。
joined: 加入於 %{date}
last_active: 上次活躍時間
link_verified_on: 此連結的所有權已在 %{date} 檢查過
@ -127,6 +128,7 @@ zh-TW:
follows: 正在關注
header: 開頭
inbox_url: 收件箱 (Inbox) URL
invite_request_text: 加入原因
invited_by: 邀請者
ip: IP 位址
joined: 已加入
@ -251,6 +253,7 @@ zh-TW:
unsuspend_account: 取消用戶的暫停狀態
update_announcement: 更新公告
update_custom_emoji: 更新自訂顏文字
update_domain_block: 更新封鎖網域
update_status: 更新狀態
actions:
assigned_to_self_report: "%{name} 接受了檢舉 %{target}"
@ -291,6 +294,7 @@ zh-TW:
unsuspend_account: "%{name} 取消了使用者 %{target} 的停權狀態"
update_announcement: "%{name} 更新了公告 %{target}"
update_custom_emoji: "%{name} 更新了自訂表情符號 %{target}"
update_domain_block: "%{name} 更新封鎖網域 %{target}"
update_status: "%{name} 重整了 %{target} 的嘟文"
deleted_status: "(已刪除嘟文)"
empty: 找不到 log
@ -394,6 +398,8 @@ zh-TW:
silence: 靜音
suspend: 停權
title: 新增封鎖站點
obfuscate: 混淆網域名稱
obfuscate_hint: 若啟用網域廣告列表限制,於列表部份混淆網域名稱
private_comment: 私人留言
private_comment_hint: 請提供更多有關此站台限制的資訊以供版主作內部參考。
public_comment: 公開留言
@ -432,6 +438,7 @@ zh-TW:
instances:
by_domain: 站台
delivery_available: 可傳送
empty: 找不到網域
known_accounts:
other: "%{count} 已知的帳戶"
moderation:
@ -483,19 +490,31 @@ zh-TW:
enable_hint: 啟用後,你的伺服器將訂閱該中繼的所有公開文章,並將會此伺服器的公開文章發送給它。
enabled: 已啟用
inbox_url: 中繼URL
pending: 等待中繼站審核
save_and_enable: 儲存並啟用
setup: 設定中繼連結
signatures_not_enabled: 若啟用安全模式或受限的站點聯盟模式,中繼將不會正常運作
status: 狀態
title: 中繼
report_notes:
created_msg: 檢舉記錄建立成功!
destroyed_msg: 檢舉記錄刪除成功!
reports:
account:
notes:
other: "%{count} 則備註"
reports:
other: "%{count} 則檢舉"
action_taken_by: 操作執行者
are_you_sure: 你確定嗎?
assign_to_self: 指派給自己
assigned: 指派負責人
by_target_domain: 檢舉帳號之網域
comment:
none:
created_at: 日期
forwarded: 已轉寄
forwarded_to: 轉寄到 %{domain}
mark_as_resolved: 標記為「已解決」
mark_as_unresolved: 標記為「未解決」
notes:
@ -526,12 +545,20 @@ zh-TW:
email: 用於聯絡的公開電子信箱位址
username: 請輸入使用者名稱
custom_css:
desc_html: 透過於每個頁面都載入的 CSS 調整外觀
title: 自訂 CSS
default_noindex:
desc_html: 影響所有沒有變更此設定的使用者
title: 預設將使用者退出搜尋引擎索引
domain_blocks:
all: 給任何人
disabled: 給沒有人
title: 顯示封鎖的網域
users: 套用至所有登入的本機使用者
domain_blocks_rationale:
title: 顯示解釋原因
enable_bootstrap_timeline_accounts:
desc_html: 使新使用者自動跟隨設定之帳號,所以他們的首頁動態一開始不會空白
title: 啟用新使用者的預設追蹤
hero:
desc_html: 在首頁顯示。推薦最小 600x100px。如果留空就會重設回伺服器預覽圖
@ -543,6 +570,7 @@ zh-TW:
desc_html: 本伺服器在聯邦中發現的站點
title: 發布已知伺服器的列表
preview_sensitive_media:
desc_html: 連結來自其他網站的預覽將顯示於縮圖,即使這些媒體被標記為敏感
title: 在 OpenGraph 預覽中顯示敏感媒體
profile_directory:
desc_html: 允許能探索使用者

View File

@ -2,29 +2,10 @@
module Chewy
class Strategy
class CustomSidekiq < Base
class Worker
include ::Sidekiq::Worker
sidekiq_options queue: 'pull'
def perform(type, ids, options = {})
options[:refresh] = !Chewy.disable_refresh_async if Chewy.disable_refresh_async
type.constantize.import!(ids, options)
class CustomSidekiq < Sidekiq
def update(_type, _objects, _options = {})
super if Chewy.enabled?
end
end
def update(type, objects, _options = {})
return unless Chewy.enabled?
ids = type.root.id ? Array.wrap(objects) : type.adapter.identify(objects)
return if ids.empty?
Worker.perform_async(type.name, ids)
end
def leave; end
end
end
end

View File

@ -77,7 +77,7 @@ module Mastodon
def create(username)
account = Account.new(username: username)
password = SecureRandom.hex
user = User.new(email: options[:email], password: password, agreement: true, approved: true, admin: options[:role] == 'admin', moderator: options[:role] == 'moderator', confirmed_at: options[:confirmed] ? Time.now.utc : nil)
user = User.new(email: options[:email], password: password, agreement: true, approved: true, admin: options[:role] == 'admin', moderator: options[:role] == 'moderator', confirmed_at: options[:confirmed] ? Time.now.utc : nil, bypass_invite_request_check: true)
if options[:reattach]
account = Account.find_local(username) || Account.new(username: username)

View File

@ -17,7 +17,7 @@ module Mastodon
end
def flags
'rc2'
'rc3'
end
def suffix

View File

@ -412,7 +412,7 @@ namespace :mastodon do
password = SecureRandom.hex(16)
user = User.new(admin: true, email: email, password: password, confirmed_at: Time.now.utc, account_attributes: { username: username })
user = User.new(admin: true, email: email, password: password, confirmed_at: Time.now.utc, account_attributes: { username: username }, bypass_invite_request_check: true)
user.save(validate: false)
prompt.ok "You can login with the password: #{password}"

View File

@ -195,16 +195,19 @@ RSpec.describe Auth::RegistrationsController, type: :controller do
end
end
context 'approval-based registrations with valid invite' do
context 'approval-based registrations with valid invite and required invite text' do
around do |example|
registrations_mode = Setting.registrations_mode
require_invite_text = Setting.require_invite_text
example.run
Setting.require_invite_text = require_invite_text
Setting.registrations_mode = registrations_mode
end
subject do
inviter = Fabricate(:user, confirmed_at: 2.days.ago)
Setting.registrations_mode = 'approved'
Setting.require_invite_text = true
request.headers["Accept-Language"] = accept_language
invite = Fabricate(:invite, user: inviter, max_uses: nil, expires_at: 1.hour.from_now)
post :create, params: { user: { account_attributes: { username: 'test' }, email: 'test@example.com', password: '12345678', password_confirmation: '12345678', 'invite_code': invite.code, agreement: 'true' } }

View File

@ -26,6 +26,11 @@ RSpec.describe BatchedRemoveStatusService, type: :service do
subject.call([status1, status2])
end
it 'removes statuses' do
expect { Status.find(status1.id) }.to raise_error ActiveRecord::RecordNotFound
expect { Status.find(status2.id) }.to raise_error ActiveRecord::RecordNotFound
end
it 'removes statuses from author\'s home feed' do
expect(HomeFeed.new(alice).get(10)).to_not include([status1.id, status2.id])
end
@ -38,10 +43,6 @@ RSpec.describe BatchedRemoveStatusService, type: :service do
expect(Redis.current).to have_received(:publish).with("timeline:#{jeff.id}", any_args).at_least(:once)
end
it 'notifies streaming API of author' do
expect(Redis.current).to have_received(:publish).with("timeline:#{alice.id}", any_args).at_least(:once)
end
it 'notifies streaming API of public timeline' do
expect(Redis.current).to have_received(:publish).with('timeline:public', any_args).at_least(:once)
end

View File

@ -7313,9 +7313,9 @@ node-modules-regexp@^1.0.0:
integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=
node-notifier@^8.0.0:
version "8.0.0"
resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.0.tgz#a7eee2d51da6d0f7ff5094bc7108c911240c1620"
integrity sha512-46z7DUmcjoYdaWyXouuFNNfUo6eFa94t23c53c+lG/9Cvauk4a98rAUp9672X5dxGdQmLpPzTxzu8f/OeEPaFA==
version "8.0.1"
resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.1.tgz#f86e89bbc925f2b068784b31f382afdc6ca56be1"
integrity sha512-BvEXF+UmsnAfYfoapKM9nGxnP+Wn7P91YfXmrKnfcYCx6VBeoN5Ez5Ogck6I8Bi5k4RlpqRYaw75pAwzX9OphA==
dependencies:
growly "^1.3.0"
is-wsl "^2.2.0"
@ -9561,9 +9561,11 @@ semver@^6.0.0, semver@^6.3.0:
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
semver@^7.2.1, semver@^7.3.2:
version "7.3.2"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938"
integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==
version "7.3.4"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97"
integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==
dependencies:
lru-cache "^6.0.0"
send@0.17.1:
version "0.17.1"
@ -10855,9 +10857,9 @@ uuid@^3.3.2, uuid@^3.4.0:
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
uuid@^8.3.0, uuid@^8.3.1:
version "8.3.1"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.1.tgz#2ba2e6ca000da60fce5a196954ab241131e05a31"
integrity sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==
version "8.3.2"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.1:
version "2.2.0"