Merge commit 'a3902997440c71f161e392f1ad6c5cdcf6aba95d' into glitch-soc/merge-upstream
Conflicts: - `app/controllers/accounts_controller.rb`: Conflict due to glitch-soc's local-only posting feature. Refactored as upstream did but kept local changes. - `app/lib/account_statuses_filter.rb`: Conflict due to glitch-soc's local-only posting feature. Refactored as upstream did but kept local changes.shrike
commit
360590ecd8
10
Gemfile.lock
10
Gemfile.lock
|
@ -102,17 +102,17 @@ GEM
|
||||||
attr_required (1.0.2)
|
attr_required (1.0.2)
|
||||||
awrence (1.2.1)
|
awrence (1.2.1)
|
||||||
aws-eventstream (1.3.0)
|
aws-eventstream (1.3.0)
|
||||||
aws-partitions (1.899.0)
|
aws-partitions (1.914.0)
|
||||||
aws-sdk-core (3.191.5)
|
aws-sdk-core (3.192.0)
|
||||||
aws-eventstream (~> 1, >= 1.3.0)
|
aws-eventstream (~> 1, >= 1.3.0)
|
||||||
aws-partitions (~> 1, >= 1.651.0)
|
aws-partitions (~> 1, >= 1.651.0)
|
||||||
aws-sigv4 (~> 1.8)
|
aws-sigv4 (~> 1.8)
|
||||||
jmespath (~> 1, >= 1.6.1)
|
jmespath (~> 1, >= 1.6.1)
|
||||||
aws-sdk-kms (1.78.0)
|
aws-sdk-kms (1.79.0)
|
||||||
aws-sdk-core (~> 3, >= 3.191.0)
|
aws-sdk-core (~> 3, >= 3.191.0)
|
||||||
aws-sigv4 (~> 1.1)
|
aws-sigv4 (~> 1.1)
|
||||||
aws-sdk-s3 (1.146.1)
|
aws-sdk-s3 (1.147.0)
|
||||||
aws-sdk-core (~> 3, >= 3.191.0)
|
aws-sdk-core (~> 3, >= 3.192.0)
|
||||||
aws-sdk-kms (~> 1)
|
aws-sdk-kms (~> 1)
|
||||||
aws-sigv4 (~> 1.8)
|
aws-sigv4 (~> 1.8)
|
||||||
aws-sigv4 (1.8.0)
|
aws-sigv4 (1.8.0)
|
||||||
|
|
|
@ -46,7 +46,7 @@ class AccountsController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def default_statuses
|
def default_statuses
|
||||||
@account.statuses.not_local_only.where(visibility: [:public, :unlisted])
|
@account.statuses.not_local_only.distributable_visibility
|
||||||
end
|
end
|
||||||
|
|
||||||
def only_media_scope
|
def only_media_scope
|
||||||
|
|
|
@ -31,7 +31,7 @@ class ActivityPub::RepliesController < ActivityPub::BaseController
|
||||||
|
|
||||||
def set_replies
|
def set_replies
|
||||||
@replies = only_other_accounts? ? Status.where.not(account_id: @account.id).joins(:account).merge(Account.without_suspended) : @account.statuses
|
@replies = only_other_accounts? ? Status.where.not(account_id: @account.id).joins(:account).merge(Account.without_suspended) : @account.statuses
|
||||||
@replies = @replies.where(in_reply_to_id: @status.id, visibility: [:public, :unlisted])
|
@replies = @replies.distributable_visibility.where(in_reply_to_id: @status.id)
|
||||||
@replies = @replies.paginate_by_min_id(DESCENDANTS_LIMIT, params[:min_id])
|
@replies = @replies.paginate_by_min_id(DESCENDANTS_LIMIT, params[:min_id])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@ class Api::V1::Statuses::RebloggedByAccountsController < Api::V1::Statuses::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def paginated_statuses
|
def paginated_statuses
|
||||||
Status.where(reblog_of_id: @status.id).where(visibility: [:public, :unlisted]).paginate_by_max_id(
|
Status.where(reblog_of_id: @status.id).distributable_visibility.paginate_by_max_id(
|
||||||
limit_param(DEFAULT_ACCOUNTS_LIMIT),
|
limit_param(DEFAULT_ACCOUNTS_LIMIT),
|
||||||
params[:max_id],
|
params[:max_id],
|
||||||
params[:since_id]
|
params[:since_id]
|
||||||
|
|
|
@ -298,7 +298,6 @@
|
||||||
"filter_modal.select_filter.title": "Филтриране на публ.",
|
"filter_modal.select_filter.title": "Филтриране на публ.",
|
||||||
"filter_modal.title.status": "Филтриране на публ.",
|
"filter_modal.title.status": "Филтриране на публ.",
|
||||||
"filtered_notifications_banner.pending_requests": "Известията от {count, plural, =0 {никого, когото може да познавате} one {едно лице, което може да познавате} other {# души, които може да познавате}}",
|
"filtered_notifications_banner.pending_requests": "Известията от {count, plural, =0 {никого, когото може да познавате} one {едно лице, което може да познавате} other {# души, които може да познавате}}",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {частно споменаване} other {частни споменавания}}",
|
|
||||||
"filtered_notifications_banner.title": "Филтрирани известия",
|
"filtered_notifications_banner.title": "Филтрирани известия",
|
||||||
"firehose.all": "Всичко",
|
"firehose.all": "Всичко",
|
||||||
"firehose.local": "Този сървър",
|
"firehose.local": "Този сървър",
|
||||||
|
|
|
@ -256,6 +256,7 @@
|
||||||
"filter_modal.select_filter.subtitle": "Implijout ur rummad a zo anezhañ pe krouiñ unan nevez",
|
"filter_modal.select_filter.subtitle": "Implijout ur rummad a zo anezhañ pe krouiñ unan nevez",
|
||||||
"filter_modal.select_filter.title": "Silañ an toud-mañ",
|
"filter_modal.select_filter.title": "Silañ an toud-mañ",
|
||||||
"filter_modal.title.status": "Silañ un toud",
|
"filter_modal.title.status": "Silañ un toud",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {meneg} two {veneg} few {meneg} other {a venegoù}}",
|
||||||
"firehose.all": "Pep tra",
|
"firehose.all": "Pep tra",
|
||||||
"firehose.local": "Ar servijer-mañ",
|
"firehose.local": "Ar servijer-mañ",
|
||||||
"firehose.remote": "Servijerioù all",
|
"firehose.remote": "Servijerioù all",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "Usa una categoria existent o crea'n una de nova",
|
"filter_modal.select_filter.subtitle": "Usa una categoria existent o crea'n una de nova",
|
||||||
"filter_modal.select_filter.title": "Filtra aquest tut",
|
"filter_modal.select_filter.title": "Filtra aquest tut",
|
||||||
"filter_modal.title.status": "Filtra un tut",
|
"filter_modal.title.status": "Filtra un tut",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {menció} other {mencions}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Notificacions {count, plural, =0 {de ningú} one {d'una persona} other {de # persones}} que potser coneixes",
|
"filtered_notifications_banner.pending_requests": "Notificacions {count, plural, =0 {de ningú} one {d'una persona} other {de # persones}} que potser coneixes",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {menció privada} other {mencions privades}}",
|
|
||||||
"filtered_notifications_banner.title": "Notificacions filtrades",
|
"filtered_notifications_banner.title": "Notificacions filtrades",
|
||||||
"firehose.all": "Tots",
|
"firehose.all": "Tots",
|
||||||
"firehose.local": "Aquest servidor",
|
"firehose.local": "Aquest servidor",
|
||||||
|
|
|
@ -89,6 +89,14 @@
|
||||||
"announcement.announcement": "Oznámení",
|
"announcement.announcement": "Oznámení",
|
||||||
"attachments_list.unprocessed": "(nezpracováno)",
|
"attachments_list.unprocessed": "(nezpracováno)",
|
||||||
"audio.hide": "Skrýt zvuk",
|
"audio.hide": "Skrýt zvuk",
|
||||||
|
"block_modal.remote_users_caveat": "Požádáme server {domain}, aby respektoval vaše rozhodnutí. Úplné dodržování nastavení však není zaručeno, protože některé servery mohou řešit blokování různě. Veřejné příspěvky mohou být stále viditelné pro nepřihlášené uživatele.",
|
||||||
|
"block_modal.show_less": "Zobrazit méně",
|
||||||
|
"block_modal.show_more": "Zobrazit více",
|
||||||
|
"block_modal.they_cant_mention": "Nemůže vás zmiňovat ani sledovat.",
|
||||||
|
"block_modal.they_cant_see_posts": "Nemůže vidět vaše příspěvky a vy neuvidíte jeho.",
|
||||||
|
"block_modal.they_will_know": "Může vidět, že je zablokovaný.",
|
||||||
|
"block_modal.title": "Zablokovat uživatele?",
|
||||||
|
"block_modal.you_wont_see_mentions": "Neuvidíte příspěvky, které ho zmiňují.",
|
||||||
"boost_modal.combo": "Příště můžete pro přeskočení stisknout {combo}",
|
"boost_modal.combo": "Příště můžete pro přeskočení stisknout {combo}",
|
||||||
"bundle_column_error.copy_stacktrace": "Zkopírovat zprávu o chybě",
|
"bundle_column_error.copy_stacktrace": "Zkopírovat zprávu o chybě",
|
||||||
"bundle_column_error.error.body": "Požadovanou stránku nelze vykreslit. Může to být způsobeno chybou v našem kódu nebo problémem s kompatibilitou prohlížeče.",
|
"bundle_column_error.error.body": "Požadovanou stránku nelze vykreslit. Může to být způsobeno chybou v našem kódu nebo problémem s kompatibilitou prohlížeče.",
|
||||||
|
@ -169,6 +177,7 @@
|
||||||
"confirmations.delete_list.message": "Opravdu chcete tento seznam navždy smazat?",
|
"confirmations.delete_list.message": "Opravdu chcete tento seznam navždy smazat?",
|
||||||
"confirmations.discard_edit_media.confirm": "Zahodit",
|
"confirmations.discard_edit_media.confirm": "Zahodit",
|
||||||
"confirmations.discard_edit_media.message": "Máte neuložené změny popisku médií nebo náhledu, chcete je přesto zahodit?",
|
"confirmations.discard_edit_media.message": "Máte neuložené změny popisku médií nebo náhledu, chcete je přesto zahodit?",
|
||||||
|
"confirmations.domain_block.confirm": "Blokovat server",
|
||||||
"confirmations.domain_block.message": "Opravdu chcete blokovat celou doménu {domain}? Ve většině případů stačí blokovat nebo skrýt pár konkrétních uživatelů, což také doporučujeme. Z této domény neuvidíte obsah v žádné veřejné časové ose ani v oznámeních. Vaši sledující z této domény budou odstraněni.",
|
"confirmations.domain_block.message": "Opravdu chcete blokovat celou doménu {domain}? Ve většině případů stačí blokovat nebo skrýt pár konkrétních uživatelů, což také doporučujeme. Z této domény neuvidíte obsah v žádné veřejné časové ose ani v oznámeních. Vaši sledující z této domény budou odstraněni.",
|
||||||
"confirmations.edit.confirm": "Upravit",
|
"confirmations.edit.confirm": "Upravit",
|
||||||
"confirmations.edit.message": "Editovat teď znamená přepsání zprávy, kterou právě tvoříte. Opravdu chcete pokračovat?",
|
"confirmations.edit.message": "Editovat teď znamená přepsání zprávy, kterou právě tvoříte. Opravdu chcete pokračovat?",
|
||||||
|
@ -200,6 +209,27 @@
|
||||||
"dismissable_banner.explore_statuses": "Toto jsou příspěvky ze sociálních sítí, které dnes získávají na popularitě. Novější příspěvky s větším počtem boostů a oblíbení jsou hodnoceny výše.",
|
"dismissable_banner.explore_statuses": "Toto jsou příspěvky ze sociálních sítí, které dnes získávají na popularitě. Novější příspěvky s větším počtem boostů a oblíbení jsou hodnoceny výše.",
|
||||||
"dismissable_banner.explore_tags": "Tyto hashtagy právě teď získávají na popularitě mezi lidmi na tomto a dalších serverech decentralizované sítě.",
|
"dismissable_banner.explore_tags": "Tyto hashtagy právě teď získávají na popularitě mezi lidmi na tomto a dalších serverech decentralizované sítě.",
|
||||||
"dismissable_banner.public_timeline": "Toto jsou nejnovější veřejné příspěvky od lidí na sociální síti, které sledují lidé na {domain}.",
|
"dismissable_banner.public_timeline": "Toto jsou nejnovější veřejné příspěvky od lidí na sociální síti, které sledují lidé na {domain}.",
|
||||||
|
"domain_block_modal.block": "Blokovat server",
|
||||||
|
"domain_block_modal.block_account_instead": "Raději blokovat @{name}",
|
||||||
|
"domain_block_modal.they_can_interact_with_old_posts": "Lidé z tohoto serveru mohou interagovat s vašimi starými příspěvky.",
|
||||||
|
"domain_block_modal.they_cant_follow": "Nikdo z tohoto serveru vás nemůže sledovat.",
|
||||||
|
"domain_block_modal.they_wont_know": "Nebude vědět, že je zablokován.",
|
||||||
|
"domain_block_modal.title": "Blokovat doménu?",
|
||||||
|
"domain_block_modal.you_will_lose_followers": "Všichni vaši sledující z tohoto serveru budou odstraněni.",
|
||||||
|
"domain_block_modal.you_wont_see_posts": "Neuvidíte příspěvky ani upozornění od uživatelů z tohoto serveru.",
|
||||||
|
"domain_pill.activitypub_lets_connect": "Umožňuje vám spojit se a komunikovat s lidmi nejen na Mastodonu, ale i s dalšími sociálními aplikacemi.",
|
||||||
|
"domain_pill.activitypub_like_language": "ActivityPub je jako jazyk, kterým Mastodon mluví s jinými sociálními sítěmi.",
|
||||||
|
"domain_pill.server": "Server",
|
||||||
|
"domain_pill.their_handle": "Handle:",
|
||||||
|
"domain_pill.their_server": "Digitální domov, kde žijí všechny příspěvky.",
|
||||||
|
"domain_pill.their_username": "Jedinečný identikátor na serveru. Je možné najít uživatele se stejným uživatelským jménem na různých serverech.",
|
||||||
|
"domain_pill.username": "Uživatelské jméno",
|
||||||
|
"domain_pill.whats_in_a_handle": "Co obsahuje handle?",
|
||||||
|
"domain_pill.who_they_are": "Protože handle říkají kdo je kdo a také kde, je možné interagovat s lidmi napříč sociálními weby <button>platforem postavených na ActivityPub</button>.",
|
||||||
|
"domain_pill.who_you_are": "Protože handle říká kdo jsi a kde jsi, mohou s tebou lidé komunikovat napříč sociálními weby <button>platforem postavených na ActivityPub</button>.",
|
||||||
|
"domain_pill.your_handle": "Tvůj handle:",
|
||||||
|
"domain_pill.your_server": "Tvůj digitální domov, kde žijí všechny tvé příspěvky. Nelíbí se ti? Kdykoliv se přesuň na jiný server a vezmi si sebou i své sledující.",
|
||||||
|
"domain_pill.your_username": "Tvůj jedinečný identifikátor na tomto serveru. Je možné najít uživatele se stejným uživatelským jménem na jiných serverech.",
|
||||||
"embed.instructions": "Pro přidání příspěvku na vaši webovou stránku zkopírujte níže uvedený kód.",
|
"embed.instructions": "Pro přidání příspěvku na vaši webovou stránku zkopírujte níže uvedený kód.",
|
||||||
"embed.preview": "Takhle to bude vypadat:",
|
"embed.preview": "Takhle to bude vypadat:",
|
||||||
"emoji_button.activity": "Aktivita",
|
"emoji_button.activity": "Aktivita",
|
||||||
|
@ -236,6 +266,7 @@
|
||||||
"empty_column.list": "V tomto seznamu zatím nic není. Až nějaký člen z tohoto seznamu zveřejní nový příspěvek, objeví se zde.",
|
"empty_column.list": "V tomto seznamu zatím nic není. Až nějaký člen z tohoto seznamu zveřejní nový příspěvek, objeví se zde.",
|
||||||
"empty_column.lists": "Zatím nemáte žádné seznamy. Až nějaký vytvoříte, zobrazí se zde.",
|
"empty_column.lists": "Zatím nemáte žádné seznamy. Až nějaký vytvoříte, zobrazí se zde.",
|
||||||
"empty_column.mutes": "Zatím jste neskryli žádného uživatele.",
|
"empty_column.mutes": "Zatím jste neskryli žádného uživatele.",
|
||||||
|
"empty_column.notification_requests": "Vyčištěno! Nic tu není. Jakmile obdržíš nové notifikace, objeví se zde podle tvého nastavení.",
|
||||||
"empty_column.notifications": "Zatím nemáte žádná oznámení. Až s vámi někdo bude interagovat, uvidíte to zde.",
|
"empty_column.notifications": "Zatím nemáte žádná oznámení. Až s vámi někdo bude interagovat, uvidíte to zde.",
|
||||||
"empty_column.public": "Tady nic není! Napište něco veřejně, nebo začněte ručně sledovat uživatele z jiných serverů, aby tu něco přibylo",
|
"empty_column.public": "Tady nic není! Napište něco veřejně, nebo začněte ručně sledovat uživatele z jiných serverů, aby tu něco přibylo",
|
||||||
"error.unexpected_crash.explanation": "Kvůli chybě v našem kódu nebo problému s kompatibilitou prohlížeče nemohla být tato stránka správně zobrazena.",
|
"error.unexpected_crash.explanation": "Kvůli chybě v našem kódu nebo problému s kompatibilitou prohlížeče nemohla být tato stránka správně zobrazena.",
|
||||||
|
@ -266,6 +297,7 @@
|
||||||
"filter_modal.select_filter.subtitle": "Použít existující kategorii nebo vytvořit novou kategorii",
|
"filter_modal.select_filter.subtitle": "Použít existující kategorii nebo vytvořit novou kategorii",
|
||||||
"filter_modal.select_filter.title": "Filtrovat tento příspěvek",
|
"filter_modal.select_filter.title": "Filtrovat tento příspěvek",
|
||||||
"filter_modal.title.status": "Filtrovat příspěvek",
|
"filter_modal.title.status": "Filtrovat příspěvek",
|
||||||
|
"filtered_notifications_banner.title": "Filtrovaná oznámení",
|
||||||
"firehose.all": "Vše",
|
"firehose.all": "Vše",
|
||||||
"firehose.local": "Tento server",
|
"firehose.local": "Tento server",
|
||||||
"firehose.remote": "Ostatní servery",
|
"firehose.remote": "Ostatní servery",
|
||||||
|
@ -394,6 +426,8 @@
|
||||||
"loading_indicator.label": "Načítání…",
|
"loading_indicator.label": "Načítání…",
|
||||||
"media_gallery.toggle_visible": "{number, plural, one {Skrýt obrázek} few {Skrýt obrázky} many {Skrýt obrázky} other {Skrýt obrázky}}",
|
"media_gallery.toggle_visible": "{number, plural, one {Skrýt obrázek} few {Skrýt obrázky} many {Skrýt obrázky} other {Skrýt obrázky}}",
|
||||||
"moved_to_account_banner.text": "Váš účet {disabledAccount} je momentálně deaktivován, protože jste se přesunul/a na {movedToAccount}.",
|
"moved_to_account_banner.text": "Váš účet {disabledAccount} je momentálně deaktivován, protože jste se přesunul/a na {movedToAccount}.",
|
||||||
|
"mute_modal.hide_from_notifications": "Skrýt z notifikací",
|
||||||
|
"mute_modal.title": "Ztlumit uživatele?",
|
||||||
"navigation_bar.about": "O aplikaci",
|
"navigation_bar.about": "O aplikaci",
|
||||||
"navigation_bar.advanced_interface": "Otevřít pokročilé webové rozhraní",
|
"navigation_bar.advanced_interface": "Otevřít pokročilé webové rozhraní",
|
||||||
"navigation_bar.blocks": "Blokovaní uživatelé",
|
"navigation_bar.blocks": "Blokovaní uživatelé",
|
||||||
|
@ -429,8 +463,11 @@
|
||||||
"notification.own_poll": "Vaše anketa skončila",
|
"notification.own_poll": "Vaše anketa skončila",
|
||||||
"notification.poll": "Anketa, ve které jste hlasovali, skončila",
|
"notification.poll": "Anketa, ve které jste hlasovali, skončila",
|
||||||
"notification.reblog": "Uživatel {name} boostnul váš příspěvek",
|
"notification.reblog": "Uživatel {name} boostnul váš příspěvek",
|
||||||
|
"notification.relationships_severance_event.learn_more": "Zjistit více",
|
||||||
"notification.status": "Uživatel {name} právě přidal příspěvek",
|
"notification.status": "Uživatel {name} právě přidal příspěvek",
|
||||||
"notification.update": "Uživatel {name} upravil příspěvek",
|
"notification.update": "Uživatel {name} upravil příspěvek",
|
||||||
|
"notification_requests.accept": "Přijmout",
|
||||||
|
"notification_requests.dismiss": "Zamítnout",
|
||||||
"notifications.clear": "Vyčistit oznámení",
|
"notifications.clear": "Vyčistit oznámení",
|
||||||
"notifications.clear_confirmation": "Opravdu chcete trvale smazat všechna vaše oznámení?",
|
"notifications.clear_confirmation": "Opravdu chcete trvale smazat všechna vaše oznámení?",
|
||||||
"notifications.column_settings.admin.report": "Nová hlášení:",
|
"notifications.column_settings.admin.report": "Nová hlášení:",
|
||||||
|
|
|
@ -295,8 +295,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "Vælg en eksisterende kategori eller opret en ny",
|
"filter_modal.select_filter.subtitle": "Vælg en eksisterende kategori eller opret en ny",
|
||||||
"filter_modal.select_filter.title": "Filtrér dette indlæg",
|
"filter_modal.select_filter.title": "Filtrér dette indlæg",
|
||||||
"filter_modal.title.status": "Filtrér et indlæg",
|
"filter_modal.title.status": "Filtrér et indlæg",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {omtale} other {omtaler}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Notifikationer fra {count, plural, =0 {ingen} one {én person} other {# personer}} du måske kender",
|
"filtered_notifications_banner.pending_requests": "Notifikationer fra {count, plural, =0 {ingen} one {én person} other {# personer}} du måske kender",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {privat omtale} other {private omtaler}}",
|
|
||||||
"filtered_notifications_banner.title": "Filtrerede notifikationer",
|
"filtered_notifications_banner.title": "Filtrerede notifikationer",
|
||||||
"firehose.all": "Alle",
|
"firehose.all": "Alle",
|
||||||
"firehose.local": "Denne server",
|
"firehose.local": "Denne server",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "Einem vorhandenen Filter hinzufügen oder einen neuen erstellen",
|
"filter_modal.select_filter.subtitle": "Einem vorhandenen Filter hinzufügen oder einen neuen erstellen",
|
||||||
"filter_modal.select_filter.title": "Diesen Beitrag filtern",
|
"filter_modal.select_filter.title": "Diesen Beitrag filtern",
|
||||||
"filter_modal.title.status": "Beitrag per Filter ausblenden",
|
"filter_modal.title.status": "Beitrag per Filter ausblenden",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {Erwähnung} other {Erwähnungen}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Benachrichtigungen von {count, plural, =0 {keinem Profil, das du möglicherweise kennst} one {einem Profil, das du möglicherweise kennst} other {# Profilen, die du möglicherweise kennst}}",
|
"filtered_notifications_banner.pending_requests": "Benachrichtigungen von {count, plural, =0 {keinem Profil, das du möglicherweise kennst} one {einem Profil, das du möglicherweise kennst} other {# Profilen, die du möglicherweise kennst}}",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {private Erwähnung} other {private Erwähnungen}}",
|
|
||||||
"filtered_notifications_banner.title": "Gefilterte Benachrichtigungen",
|
"filtered_notifications_banner.title": "Gefilterte Benachrichtigungen",
|
||||||
"firehose.all": "Alles",
|
"firehose.all": "Alles",
|
||||||
"firehose.local": "Dieser Server",
|
"firehose.local": "Dieser Server",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "Usar una categoría existente o crear una nueva",
|
"filter_modal.select_filter.subtitle": "Usar una categoría existente o crear una nueva",
|
||||||
"filter_modal.select_filter.title": "Filtrar este mensaje",
|
"filter_modal.select_filter.title": "Filtrar este mensaje",
|
||||||
"filter_modal.title.status": "Filtrar un mensaje",
|
"filter_modal.title.status": "Filtrar un mensaje",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {mención} other {menciones}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Notificaciones de {count, plural, =0 {nadie} one {una persona} other {# personas}} que podrías conocer",
|
"filtered_notifications_banner.pending_requests": "Notificaciones de {count, plural, =0 {nadie} one {una persona} other {# personas}} que podrías conocer",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {mención privada} other {menciones privadas}}",
|
|
||||||
"filtered_notifications_banner.title": "Notificaciones filtradas",
|
"filtered_notifications_banner.title": "Notificaciones filtradas",
|
||||||
"firehose.all": "Todos",
|
"firehose.all": "Todos",
|
||||||
"firehose.local": "Este servidor",
|
"firehose.local": "Este servidor",
|
||||||
|
|
|
@ -298,7 +298,6 @@
|
||||||
"filter_modal.select_filter.title": "Filtrar esta publicación",
|
"filter_modal.select_filter.title": "Filtrar esta publicación",
|
||||||
"filter_modal.title.status": "Filtrar una publicación",
|
"filter_modal.title.status": "Filtrar una publicación",
|
||||||
"filtered_notifications_banner.pending_requests": "Notificaciones de {count, plural, =0 {nadie} one {una persona} other {# personas}} que podrías conocer",
|
"filtered_notifications_banner.pending_requests": "Notificaciones de {count, plural, =0 {nadie} one {una persona} other {# personas}} que podrías conocer",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {mención privada} other {menciones privadas}}",
|
|
||||||
"filtered_notifications_banner.title": "Notificaciones filtradas",
|
"filtered_notifications_banner.title": "Notificaciones filtradas",
|
||||||
"firehose.all": "Todas",
|
"firehose.all": "Todas",
|
||||||
"firehose.local": "Este servidor",
|
"firehose.local": "Este servidor",
|
||||||
|
|
|
@ -298,7 +298,6 @@
|
||||||
"filter_modal.select_filter.title": "Filtrar esta publicación",
|
"filter_modal.select_filter.title": "Filtrar esta publicación",
|
||||||
"filter_modal.title.status": "Filtrar una publicación",
|
"filter_modal.title.status": "Filtrar una publicación",
|
||||||
"filtered_notifications_banner.pending_requests": "Notificaciones de {count, plural, =0 {nadie} one {una persona} other {# personas}} que podrías conocer",
|
"filtered_notifications_banner.pending_requests": "Notificaciones de {count, plural, =0 {nadie} one {una persona} other {# personas}} que podrías conocer",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {mención privada} other {menciones privadas}}",
|
|
||||||
"filtered_notifications_banner.title": "Notificaciones filtradas",
|
"filtered_notifications_banner.title": "Notificaciones filtradas",
|
||||||
"firehose.all": "Todas",
|
"firehose.all": "Todas",
|
||||||
"firehose.local": "Este servidor",
|
"firehose.local": "Este servidor",
|
||||||
|
|
|
@ -298,7 +298,6 @@
|
||||||
"filter_modal.select_filter.title": "Filtreeri seda postitust",
|
"filter_modal.select_filter.title": "Filtreeri seda postitust",
|
||||||
"filter_modal.title.status": "Postituse filtreerimine",
|
"filter_modal.title.status": "Postituse filtreerimine",
|
||||||
"filtered_notifications_banner.pending_requests": "Teateid {count, plural, =0 {mitte üheltki} one {ühelt} other {#}} inimeselt, keda võid teada",
|
"filtered_notifications_banner.pending_requests": "Teateid {count, plural, =0 {mitte üheltki} one {ühelt} other {#}} inimeselt, keda võid teada",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {privaatne teavitus} other {privaatsed teavitused}}",
|
|
||||||
"filtered_notifications_banner.title": "Filtreeritud teavitused",
|
"filtered_notifications_banner.title": "Filtreeritud teavitused",
|
||||||
"firehose.all": "Kõik",
|
"firehose.all": "Kõik",
|
||||||
"firehose.local": "See server",
|
"firehose.local": "See server",
|
||||||
|
|
|
@ -297,6 +297,7 @@
|
||||||
"filter_modal.select_filter.subtitle": "Hautatu lehendik dagoen kategoria bat edo sortu berria",
|
"filter_modal.select_filter.subtitle": "Hautatu lehendik dagoen kategoria bat edo sortu berria",
|
||||||
"filter_modal.select_filter.title": "Iragazi bidalketa hau",
|
"filter_modal.select_filter.title": "Iragazi bidalketa hau",
|
||||||
"filter_modal.title.status": "Iragazi bidalketa bat",
|
"filter_modal.title.status": "Iragazi bidalketa bat",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {aipamen} other {aipamen}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Ezagutu {count, plural, =0 {dezakezun inoren} one {dezakezun pertsona baten} other {ditzakezun # pertsonen}} jakinarazpenak",
|
"filtered_notifications_banner.pending_requests": "Ezagutu {count, plural, =0 {dezakezun inoren} one {dezakezun pertsona baten} other {ditzakezun # pertsonen}} jakinarazpenak",
|
||||||
"filtered_notifications_banner.title": "Iragazitako jakinarazpenak",
|
"filtered_notifications_banner.title": "Iragazitako jakinarazpenak",
|
||||||
"firehose.all": "Guztiak",
|
"firehose.all": "Guztiak",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "Käytä olemassa olevaa luokkaa tai luo uusi",
|
"filter_modal.select_filter.subtitle": "Käytä olemassa olevaa luokkaa tai luo uusi",
|
||||||
"filter_modal.select_filter.title": "Suodata tämä julkaisu",
|
"filter_modal.select_filter.title": "Suodata tämä julkaisu",
|
||||||
"filter_modal.title.status": "Suodata julkaisu",
|
"filter_modal.title.status": "Suodata julkaisu",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {maininta} other {mainintaa}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Ilmoitukset {count, plural, =0 {ei keltään} one {yhdeltä henkilöltä} other {# henkilöltä}}, jonka saatat tuntea",
|
"filtered_notifications_banner.pending_requests": "Ilmoitukset {count, plural, =0 {ei keltään} one {yhdeltä henkilöltä} other {# henkilöltä}}, jonka saatat tuntea",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {yksityismaininta} other {yksityismainintaa}}",
|
|
||||||
"filtered_notifications_banner.title": "Suodatetut ilmoitukset",
|
"filtered_notifications_banner.title": "Suodatetut ilmoitukset",
|
||||||
"firehose.all": "Kaikki",
|
"firehose.all": "Kaikki",
|
||||||
"firehose.local": "Tämä palvelin",
|
"firehose.local": "Tämä palvelin",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "Brúka ein verandi bólk ella skapa ein nýggjan",
|
"filter_modal.select_filter.subtitle": "Brúka ein verandi bólk ella skapa ein nýggjan",
|
||||||
"filter_modal.select_filter.title": "Filtrera hendan postin",
|
"filter_modal.select_filter.title": "Filtrera hendan postin",
|
||||||
"filter_modal.title.status": "Filtrera ein post",
|
"filter_modal.title.status": "Filtrera ein post",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {umrøða} other {umrøður}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Fráboðanir frá {count, plural, =0 {ongum} one {einum persóni} other {# persónum}}, sum tú kanska kennir",
|
"filtered_notifications_banner.pending_requests": "Fráboðanir frá {count, plural, =0 {ongum} one {einum persóni} other {# persónum}}, sum tú kanska kennir",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {privat umrøða} other {privatar umrøður}}",
|
|
||||||
"filtered_notifications_banner.title": "Sáldaðar fráboðanir",
|
"filtered_notifications_banner.title": "Sáldaðar fráboðanir",
|
||||||
"firehose.all": "Allar",
|
"firehose.all": "Allar",
|
||||||
"firehose.local": "Hesin ambætarin",
|
"firehose.local": "Hesin ambætarin",
|
||||||
|
|
|
@ -298,7 +298,6 @@
|
||||||
"filter_modal.select_filter.title": "Filtrer cette publication",
|
"filter_modal.select_filter.title": "Filtrer cette publication",
|
||||||
"filter_modal.title.status": "Filtrer une publication",
|
"filter_modal.title.status": "Filtrer une publication",
|
||||||
"filtered_notifications_banner.pending_requests": "Notifications {count, plural, =0 {de personne} one {d’une personne} other {de # personnes}} que vous pouvez connaitre",
|
"filtered_notifications_banner.pending_requests": "Notifications {count, plural, =0 {de personne} one {d’une personne} other {de # personnes}} que vous pouvez connaitre",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {mention privée} other {mentions privées}}",
|
|
||||||
"filtered_notifications_banner.title": "Notifications filtrées",
|
"filtered_notifications_banner.title": "Notifications filtrées",
|
||||||
"firehose.all": "Tout",
|
"firehose.all": "Tout",
|
||||||
"firehose.local": "Ce serveur",
|
"firehose.local": "Ce serveur",
|
||||||
|
|
|
@ -298,7 +298,6 @@
|
||||||
"filter_modal.select_filter.title": "Filtrer ce message",
|
"filter_modal.select_filter.title": "Filtrer ce message",
|
||||||
"filter_modal.title.status": "Filtrer un message",
|
"filter_modal.title.status": "Filtrer un message",
|
||||||
"filtered_notifications_banner.pending_requests": "Notifications {count, plural, =0 {de personne} one {d’une personne} other {de # personnes}} que vous pouvez connaitre",
|
"filtered_notifications_banner.pending_requests": "Notifications {count, plural, =0 {de personne} one {d’une personne} other {de # personnes}} que vous pouvez connaitre",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {mention privée} other {mentions privées}}",
|
|
||||||
"filtered_notifications_banner.title": "Notifications filtrées",
|
"filtered_notifications_banner.title": "Notifications filtrées",
|
||||||
"firehose.all": "Tout",
|
"firehose.all": "Tout",
|
||||||
"firehose.local": "Ce serveur",
|
"firehose.local": "Ce serveur",
|
||||||
|
|
|
@ -298,7 +298,6 @@
|
||||||
"filter_modal.select_filter.title": "Criathraich am post seo",
|
"filter_modal.select_filter.title": "Criathraich am post seo",
|
||||||
"filter_modal.title.status": "Criathraich post",
|
"filter_modal.title.status": "Criathraich post",
|
||||||
"filtered_notifications_banner.pending_requests": "{count, plural, =0 {Chan eil brath ann o dhaoine} one {Tha brathan ann o # neach} two {Tha brathan ann o # neach} few {Tha brathan ann o # daoine} other {Tha brathan ann o # duine}} air a bheil thu eòlach ’s dòcha",
|
"filtered_notifications_banner.pending_requests": "{count, plural, =0 {Chan eil brath ann o dhaoine} one {Tha brathan ann o # neach} two {Tha brathan ann o # neach} few {Tha brathan ann o # daoine} other {Tha brathan ann o # duine}} air a bheil thu eòlach ’s dòcha",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {iomradh prìobhaideach} two {iomradh prìobhaideach} few {iomraidhean prìobhaideach} other {iomradh prìobhaideach}}",
|
|
||||||
"filtered_notifications_banner.title": "Brathan criathraichte",
|
"filtered_notifications_banner.title": "Brathan criathraichte",
|
||||||
"firehose.all": "Na h-uile",
|
"firehose.all": "Na h-uile",
|
||||||
"firehose.local": "Am frithealaiche seo",
|
"firehose.local": "Am frithealaiche seo",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "Usar unha categoría existente ou crear unha nova",
|
"filter_modal.select_filter.subtitle": "Usar unha categoría existente ou crear unha nova",
|
||||||
"filter_modal.select_filter.title": "Filtrar esta publicación",
|
"filter_modal.select_filter.title": "Filtrar esta publicación",
|
||||||
"filter_modal.title.status": "Filtrar unha publicación",
|
"filter_modal.title.status": "Filtrar unha publicación",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {mención} other {mencións}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Notificacións de {count, plural, =0 {ninguén} one {unha persoa} other {# persoas}} que poderías coñecer",
|
"filtered_notifications_banner.pending_requests": "Notificacións de {count, plural, =0 {ninguén} one {unha persoa} other {# persoas}} que poderías coñecer",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {mención privada} other {mencións privadas}}",
|
|
||||||
"filtered_notifications_banner.title": "Notificacións filtradas",
|
"filtered_notifications_banner.title": "Notificacións filtradas",
|
||||||
"firehose.all": "Todo",
|
"firehose.all": "Todo",
|
||||||
"firehose.local": "Este servidor",
|
"firehose.local": "Este servidor",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "שימוש בקטגורייה קיימת או יצירת אחת חדשה",
|
"filter_modal.select_filter.subtitle": "שימוש בקטגורייה קיימת או יצירת אחת חדשה",
|
||||||
"filter_modal.select_filter.title": "סינון ההודעה הזו",
|
"filter_modal.select_filter.title": "סינון ההודעה הזו",
|
||||||
"filter_modal.title.status": "סנן הודעה",
|
"filter_modal.title.status": "סנן הודעה",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {איזכור} other {איזכורים} two {איזכוריים}}",
|
||||||
"filtered_notifications_banner.pending_requests": "{count, plural,=0 {אין התראות ממשתמשים ה}one {התראה אחת ממישהו/מישהי ה}two {יש התראותיים ממשתמשים }other {יש # התראות ממשתמשים }}מוכרים לך",
|
"filtered_notifications_banner.pending_requests": "{count, plural,=0 {אין התראות ממשתמשים ה}one {התראה אחת ממישהו/מישהי ה}two {יש התראותיים ממשתמשים }other {יש # התראות ממשתמשים }}מוכרים לך",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {איזכור פרטי} other {איזכורים פרטיים}}",
|
|
||||||
"filtered_notifications_banner.title": "התראות מסוננות",
|
"filtered_notifications_banner.title": "התראות מסוננות",
|
||||||
"firehose.all": "הכל",
|
"firehose.all": "הכל",
|
||||||
"firehose.local": "שרת זה",
|
"firehose.local": "שרת זה",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "Válassz egy meglévő kategóriát, vagy hozz létre egy újat",
|
"filter_modal.select_filter.subtitle": "Válassz egy meglévő kategóriát, vagy hozz létre egy újat",
|
||||||
"filter_modal.select_filter.title": "E bejegyzés szűrése",
|
"filter_modal.select_filter.title": "E bejegyzés szűrése",
|
||||||
"filter_modal.title.status": "Egy bejegyzés szűrése",
|
"filter_modal.title.status": "Egy bejegyzés szűrése",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {említés} other {említés}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Értesítések {count, plural, =0 {nincsenek} one {egy valósztínűleg ismerős személytől} other {# valószínűleg ismerős személytől}}",
|
"filtered_notifications_banner.pending_requests": "Értesítések {count, plural, =0 {nincsenek} one {egy valósztínűleg ismerős személytől} other {# valószínűleg ismerős személytől}}",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {privát említés} other {privát említés}}",
|
|
||||||
"filtered_notifications_banner.title": "Szűrt értesítések",
|
"filtered_notifications_banner.title": "Szűrt értesítések",
|
||||||
"firehose.all": "Összes",
|
"firehose.all": "Összes",
|
||||||
"firehose.local": "Ez a kiszolgáló",
|
"firehose.local": "Ez a kiszolgáló",
|
||||||
|
|
|
@ -287,7 +287,6 @@
|
||||||
"filter_modal.select_filter.title": "Filtrar ti-ci posta",
|
"filter_modal.select_filter.title": "Filtrar ti-ci posta",
|
||||||
"filter_modal.title.status": "Filtrar un posta",
|
"filter_modal.title.status": "Filtrar un posta",
|
||||||
"filtered_notifications_banner.pending_requests": "Notificationes de {count, plural, =0 {nequi} one {un person} other {# persones}} quel tu possibilmen conosse",
|
"filtered_notifications_banner.pending_requests": "Notificationes de {count, plural, =0 {nequi} one {un person} other {# persones}} quel tu possibilmen conosse",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {privat mention} other {privat mentiones}}",
|
|
||||||
"filtered_notifications_banner.title": "Filtrat notificationes",
|
"filtered_notifications_banner.title": "Filtrat notificationes",
|
||||||
"firehose.all": "Omno",
|
"firehose.all": "Omno",
|
||||||
"firehose.local": "Ti-ci servitor",
|
"firehose.local": "Ti-ci servitor",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "Notaðu fyrirliggjandi flokk eða útbúðu nýjan",
|
"filter_modal.select_filter.subtitle": "Notaðu fyrirliggjandi flokk eða útbúðu nýjan",
|
||||||
"filter_modal.select_filter.title": "Sía þessa færslu",
|
"filter_modal.select_filter.title": "Sía þessa færslu",
|
||||||
"filter_modal.title.status": "Sía færslu",
|
"filter_modal.title.status": "Sía færslu",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {tilvísun} other {tilvísanir}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Tilkynningar frá {count, plural, =0 {engum} one {einum aðila} other {# aðilum}} sem þú gætir þekkt",
|
"filtered_notifications_banner.pending_requests": "Tilkynningar frá {count, plural, =0 {engum} one {einum aðila} other {# aðilum}} sem þú gætir þekkt",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {einkaspjall} other {einkaspjöll}}",
|
|
||||||
"filtered_notifications_banner.title": "Síaðar tilkynningar",
|
"filtered_notifications_banner.title": "Síaðar tilkynningar",
|
||||||
"firehose.all": "Allt",
|
"firehose.all": "Allt",
|
||||||
"firehose.local": "þessum netþjóni",
|
"firehose.local": "þessum netþjóni",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "Usa una categoria esistente o creane una nuova",
|
"filter_modal.select_filter.subtitle": "Usa una categoria esistente o creane una nuova",
|
||||||
"filter_modal.select_filter.title": "Filtra questo post",
|
"filter_modal.select_filter.title": "Filtra questo post",
|
||||||
"filter_modal.title.status": "Filtra un post",
|
"filter_modal.title.status": "Filtra un post",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {menzione} other {menzioni}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Notifiche da {count, plural, =0 {nessuno} one {una persona} other {# persone}} che potresti conoscere",
|
"filtered_notifications_banner.pending_requests": "Notifiche da {count, plural, =0 {nessuno} one {una persona} other {# persone}} che potresti conoscere",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural,one {menzione privata} other {menzioni private}}",
|
|
||||||
"filtered_notifications_banner.title": "Notifiche filtrate",
|
"filtered_notifications_banner.title": "Notifiche filtrate",
|
||||||
"firehose.all": "Tutto",
|
"firehose.all": "Tutto",
|
||||||
"firehose.local": "Questo server",
|
"firehose.local": "Questo server",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "기존의 카테고리를 사용하거나 새로 하나를 만듧니다",
|
"filter_modal.select_filter.subtitle": "기존의 카테고리를 사용하거나 새로 하나를 만듧니다",
|
||||||
"filter_modal.select_filter.title": "이 게시물을 필터",
|
"filter_modal.select_filter.title": "이 게시물을 필터",
|
||||||
"filter_modal.title.status": "게시물 필터",
|
"filter_modal.title.status": "게시물 필터",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, other {멘션}}",
|
||||||
"filtered_notifications_banner.pending_requests": "알 수도 있는 {count, plural, =0 {0 명} one {한 명} other {# 명}}의 사람들로부터의 알림",
|
"filtered_notifications_banner.pending_requests": "알 수도 있는 {count, plural, =0 {0 명} one {한 명} other {# 명}}의 사람들로부터의 알림",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, other {개인적인 멘션}}",
|
|
||||||
"filtered_notifications_banner.title": "걸러진 알림",
|
"filtered_notifications_banner.title": "걸러진 알림",
|
||||||
"firehose.all": "모두",
|
"firehose.all": "모두",
|
||||||
"firehose.local": "이 서버",
|
"firehose.local": "이 서버",
|
||||||
|
|
|
@ -457,6 +457,7 @@
|
||||||
"notification.own_poll": "Tu anketa eskapo",
|
"notification.own_poll": "Tu anketa eskapo",
|
||||||
"notification.poll": "Anketa en ke votates eskapo",
|
"notification.poll": "Anketa en ke votates eskapo",
|
||||||
"notification.reblog": "{name} repartajo tu publikasyon",
|
"notification.reblog": "{name} repartajo tu publikasyon",
|
||||||
|
"notification.relationships_severance_event": "Koneksyones pedridas kon {name}",
|
||||||
"notification.relationships_severance_event.learn_more": "Ambezate mas",
|
"notification.relationships_severance_event.learn_more": "Ambezate mas",
|
||||||
"notification.status": "{name} publiko algo",
|
"notification.status": "{name} publiko algo",
|
||||||
"notification.update": "{name} edito una publikasyon",
|
"notification.update": "{name} edito una publikasyon",
|
||||||
|
|
|
@ -282,7 +282,6 @@
|
||||||
"filter_modal.select_filter.subtitle": "Naudok esamą kategoriją arba sukurk naują.",
|
"filter_modal.select_filter.subtitle": "Naudok esamą kategoriją arba sukurk naują.",
|
||||||
"filter_modal.select_filter.title": "Filtruoti šį įrašą",
|
"filter_modal.select_filter.title": "Filtruoti šį įrašą",
|
||||||
"filter_modal.title.status": "Filtruoti įrašą",
|
"filter_modal.title.status": "Filtruoti įrašą",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {privatus paminėjimas} few {privatūs paminėjimai} many {privataus paminėjimo} other {privačių paminėjimų}}",
|
|
||||||
"firehose.all": "Visi",
|
"firehose.all": "Visi",
|
||||||
"firehose.local": "Šis serveris",
|
"firehose.local": "Šis serveris",
|
||||||
"firehose.remote": "Kiti serveriai",
|
"firehose.remote": "Kiti serveriai",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "Een bestaande categorie gebruiken of een nieuwe aanmaken",
|
"filter_modal.select_filter.subtitle": "Een bestaande categorie gebruiken of een nieuwe aanmaken",
|
||||||
"filter_modal.select_filter.title": "Dit bericht filteren",
|
"filter_modal.select_filter.title": "Dit bericht filteren",
|
||||||
"filter_modal.title.status": "Een bericht filteren",
|
"filter_modal.title.status": "Een bericht filteren",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {vermelding} other {vermeldingen}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Meldingen van {count, plural, =0 {niemand} one {één persoon} other {# mensen}} die je misschien kent",
|
"filtered_notifications_banner.pending_requests": "Meldingen van {count, plural, =0 {niemand} one {één persoon} other {# mensen}} die je misschien kent",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {privébericht} other {privéberichten}}",
|
|
||||||
"filtered_notifications_banner.title": "Gefilterde meldingen",
|
"filtered_notifications_banner.title": "Gefilterde meldingen",
|
||||||
"firehose.all": "Alles",
|
"firehose.all": "Alles",
|
||||||
"firehose.local": "Deze server",
|
"firehose.local": "Deze server",
|
||||||
|
|
|
@ -298,7 +298,6 @@
|
||||||
"filter_modal.select_filter.title": "Filtrer dette innlegget",
|
"filter_modal.select_filter.title": "Filtrer dette innlegget",
|
||||||
"filter_modal.title.status": "Filtrer eit innlegg",
|
"filter_modal.title.status": "Filtrer eit innlegg",
|
||||||
"filtered_notifications_banner.pending_requests": "Varsel frå {count, plural, =0 {ingen} one {ein person} other {# folk}} du kanskje kjenner",
|
"filtered_notifications_banner.pending_requests": "Varsel frå {count, plural, =0 {ingen} one {ein person} other {# folk}} du kanskje kjenner",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {privat omtale} other {private omtaler}}",
|
|
||||||
"filtered_notifications_banner.title": "Filtrerte varslingar",
|
"filtered_notifications_banner.title": "Filtrerte varslingar",
|
||||||
"firehose.all": "Alle",
|
"firehose.all": "Alle",
|
||||||
"firehose.local": "Denne tenaren",
|
"firehose.local": "Denne tenaren",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "Użyj istniejącej kategorii lub utwórz nową",
|
"filter_modal.select_filter.subtitle": "Użyj istniejącej kategorii lub utwórz nową",
|
||||||
"filter_modal.select_filter.title": "Filtruj ten wpis",
|
"filter_modal.select_filter.title": "Filtruj ten wpis",
|
||||||
"filter_modal.title.status": "Filtruj wpis",
|
"filter_modal.title.status": "Filtruj wpis",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {wzmianka} few {wzmianki} other {wzmianek}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Powiadomienia od {count, plural, =0 {żadnej osoby którą możesz znać} one {# osoby którą możesz znać} other {# osób które możesz znać}}",
|
"filtered_notifications_banner.pending_requests": "Powiadomienia od {count, plural, =0 {żadnej osoby którą możesz znać} one {# osoby którą możesz znać} other {# osób które możesz znać}}",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {prywatna wzmianka} few {prywatne wzmianki} other {prywatnych wzmianek}}",
|
|
||||||
"filtered_notifications_banner.title": "Powiadomienia filtrowane",
|
"filtered_notifications_banner.title": "Powiadomienia filtrowane",
|
||||||
"firehose.all": "Wszystko",
|
"firehose.all": "Wszystko",
|
||||||
"firehose.local": "Ten serwer",
|
"firehose.local": "Ten serwer",
|
||||||
|
|
|
@ -298,7 +298,6 @@
|
||||||
"filter_modal.select_filter.title": "Filtrar esta publicação",
|
"filter_modal.select_filter.title": "Filtrar esta publicação",
|
||||||
"filter_modal.title.status": "Filtrar uma publicação",
|
"filter_modal.title.status": "Filtrar uma publicação",
|
||||||
"filtered_notifications_banner.pending_requests": "Notificações de {count, plural, =0 {no one} one {one person} other {# people}} que você talvez conheça",
|
"filtered_notifications_banner.pending_requests": "Notificações de {count, plural, =0 {no one} one {one person} other {# people}} que você talvez conheça",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {private mention} other {private mentions}}",
|
|
||||||
"filtered_notifications_banner.title": "Notificações filtradas",
|
"filtered_notifications_banner.title": "Notificações filtradas",
|
||||||
"firehose.all": "Tudo",
|
"firehose.all": "Tudo",
|
||||||
"firehose.local": "Este servidor",
|
"firehose.local": "Este servidor",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "Utilize uma categoria existente ou crie uma nova",
|
"filter_modal.select_filter.subtitle": "Utilize uma categoria existente ou crie uma nova",
|
||||||
"filter_modal.select_filter.title": "Filtrar esta publicação",
|
"filter_modal.select_filter.title": "Filtrar esta publicação",
|
||||||
"filter_modal.title.status": "Filtrar uma publicação",
|
"filter_modal.title.status": "Filtrar uma publicação",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {menção} other {menções}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Notificações de {count, plural, =0 {ninguém} one {uma pessoa} other {# pessoas}} que talvez conheça",
|
"filtered_notifications_banner.pending_requests": "Notificações de {count, plural, =0 {ninguém} one {uma pessoa} other {# pessoas}} que talvez conheça",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural,one {menção privada} other {menções privadas}}",
|
|
||||||
"filtered_notifications_banner.title": "Notificações filtradas",
|
"filtered_notifications_banner.title": "Notificações filtradas",
|
||||||
"firehose.all": "Todas",
|
"firehose.all": "Todas",
|
||||||
"firehose.local": "Este servidor",
|
"firehose.local": "Este servidor",
|
||||||
|
|
|
@ -298,7 +298,6 @@
|
||||||
"filter_modal.select_filter.title": "Фильтровать этот пост",
|
"filter_modal.select_filter.title": "Фильтровать этот пост",
|
||||||
"filter_modal.title.status": "Фильтровать пост",
|
"filter_modal.title.status": "Фильтровать пост",
|
||||||
"filtered_notifications_banner.pending_requests": "Уведомления от {count, plural, =0 {никого} one {# человека} other {# других людей, с кем вы можете быть знакомы}}",
|
"filtered_notifications_banner.pending_requests": "Уведомления от {count, plural, =0 {никого} one {# человека} other {# других людей, с кем вы можете быть знакомы}}",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {личное упоминание} other {личные упоминания}}",
|
|
||||||
"filtered_notifications_banner.title": "Отфильтрованные уведомления",
|
"filtered_notifications_banner.title": "Отфильтрованные уведомления",
|
||||||
"firehose.all": "Все",
|
"firehose.all": "Все",
|
||||||
"firehose.local": "Текущий сервер",
|
"firehose.local": "Текущий сервер",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "Uporabite obstoječo kategorijo ali ustvarite novo",
|
"filter_modal.select_filter.subtitle": "Uporabite obstoječo kategorijo ali ustvarite novo",
|
||||||
"filter_modal.select_filter.title": "Filtriraj to objavo",
|
"filter_modal.select_filter.title": "Filtriraj to objavo",
|
||||||
"filter_modal.title.status": "Filtrirajte objavo",
|
"filter_modal.title.status": "Filtrirajte objavo",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {omemba} two {omembi} few {omembe} other {omemb}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Obvestila od {count, plural, =0 {nikogar, ki bi ga} one {# človeka, ki bi ga} two {# ljudi, ki bi ju} few {# ljudi, ki bi jih} other {# ljudi, ki bi jih}} lahko poznali",
|
"filtered_notifications_banner.pending_requests": "Obvestila od {count, plural, =0 {nikogar, ki bi ga} one {# človeka, ki bi ga} two {# ljudi, ki bi ju} few {# ljudi, ki bi jih} other {# ljudi, ki bi jih}} lahko poznali",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {zasebna omemba} two {zasebni omembi} few {zasebne omembe} other {zasebnih omemb}}",
|
|
||||||
"filtered_notifications_banner.title": "Filtrirana obvestila",
|
"filtered_notifications_banner.title": "Filtrirana obvestila",
|
||||||
"firehose.all": "Vse",
|
"firehose.all": "Vse",
|
||||||
"firehose.local": "Ta strežnik",
|
"firehose.local": "Ta strežnik",
|
||||||
|
|
|
@ -298,7 +298,6 @@
|
||||||
"filter_modal.select_filter.title": "Filtroje këtë postim",
|
"filter_modal.select_filter.title": "Filtroje këtë postim",
|
||||||
"filter_modal.title.status": "Filtroni një postim",
|
"filter_modal.title.status": "Filtroni një postim",
|
||||||
"filtered_notifications_banner.pending_requests": "Njoftime prej {count, plural, =0 {askujt} one {një personi} other {# vetësh}} që mund të njihni",
|
"filtered_notifications_banner.pending_requests": "Njoftime prej {count, plural, =0 {askujt} one {një personi} other {# vetësh}} që mund të njihni",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {përmendje private} other {përmendje private}}",
|
|
||||||
"filtered_notifications_banner.title": "Njoftime të filtruar",
|
"filtered_notifications_banner.title": "Njoftime të filtruar",
|
||||||
"firehose.all": "Krejt",
|
"firehose.all": "Krejt",
|
||||||
"firehose.local": "Këtë shërbyes",
|
"firehose.local": "Këtë shërbyes",
|
||||||
|
|
|
@ -13,14 +13,14 @@
|
||||||
"about.rules": "Pravila servera",
|
"about.rules": "Pravila servera",
|
||||||
"account.account_note_header": "Napomena",
|
"account.account_note_header": "Napomena",
|
||||||
"account.add_or_remove_from_list": "Dodaj ili ukloni sa lista",
|
"account.add_or_remove_from_list": "Dodaj ili ukloni sa lista",
|
||||||
"account.badges.bot": "Bot",
|
"account.badges.bot": "Automatizovano",
|
||||||
"account.badges.group": "Grupa",
|
"account.badges.group": "Grupa",
|
||||||
"account.block": "Blokiraj @{name}",
|
"account.block": "Blokiraj @{name}",
|
||||||
"account.block_domain": "Blokiraj domen {domain}",
|
"account.block_domain": "Blokiraj domen {domain}",
|
||||||
"account.block_short": "Blokiraj",
|
"account.block_short": "Blokiraj",
|
||||||
"account.blocked": "Blokiran",
|
"account.blocked": "Blokiran",
|
||||||
"account.browse_more_on_origin_server": "Pregledajte još na originalnom profilu",
|
"account.browse_more_on_origin_server": "Pregledajte još na originalnom profilu",
|
||||||
"account.cancel_follow_request": "Povuci zahtev za praćenje",
|
"account.cancel_follow_request": "Otkaži praćenje",
|
||||||
"account.copy": "Kopiraj vezu u profil",
|
"account.copy": "Kopiraj vezu u profil",
|
||||||
"account.direct": "Privatno pomeni @{name}",
|
"account.direct": "Privatno pomeni @{name}",
|
||||||
"account.disable_notifications": "Zaustavi obaveštavanje za objave korisnika @{name}",
|
"account.disable_notifications": "Zaustavi obaveštavanje za objave korisnika @{name}",
|
||||||
|
@ -89,6 +89,14 @@
|
||||||
"announcement.announcement": "Najava",
|
"announcement.announcement": "Najava",
|
||||||
"attachments_list.unprocessed": "(neobrađeno)",
|
"attachments_list.unprocessed": "(neobrađeno)",
|
||||||
"audio.hide": "Sakrij audio",
|
"audio.hide": "Sakrij audio",
|
||||||
|
"block_modal.remote_users_caveat": "Zamolićemo server {domain} da poštuje vašu odluku. Međutim, usklađenost nije zagarantovana jer neki serveri mogu drugačije da obrađuju blokove. Javne objave mogu i dalje biti vidljive korisnicima koji nisu prijavljeni.",
|
||||||
|
"block_modal.show_less": "Prikaži manje",
|
||||||
|
"block_modal.show_more": "Prikaži više",
|
||||||
|
"block_modal.they_cant_mention": "Ne mogu da vas pominju ili prate.",
|
||||||
|
"block_modal.they_cant_see_posts": "Ne mogu da vide vaše objave, a vi nećete videti njihove.",
|
||||||
|
"block_modal.they_will_know": "Mogu da vide da su blokirani.",
|
||||||
|
"block_modal.title": "Blokirati korisnika?",
|
||||||
|
"block_modal.you_wont_see_mentions": "Nećete videti objave koje ih pominju.",
|
||||||
"boost_modal.combo": "Možete pritisnuti {combo} da preskočite ovo sledeći put",
|
"boost_modal.combo": "Možete pritisnuti {combo} da preskočite ovo sledeći put",
|
||||||
"bundle_column_error.copy_stacktrace": "Kopiraj izveštaj o grešci",
|
"bundle_column_error.copy_stacktrace": "Kopiraj izveštaj o grešci",
|
||||||
"bundle_column_error.error.body": "Nije moguće prikazati traženu stranicu. Razlog može biti greška u našem kodu ili problem sa kompatibilnošću pretraživača.",
|
"bundle_column_error.error.body": "Nije moguće prikazati traženu stranicu. Razlog može biti greška u našem kodu ili problem sa kompatibilnošću pretraživača.",
|
||||||
|
@ -153,7 +161,7 @@
|
||||||
"compose_form.poll.switch_to_single": "Promenite anketu da biste omogućili jedan izbor",
|
"compose_form.poll.switch_to_single": "Promenite anketu da biste omogućili jedan izbor",
|
||||||
"compose_form.poll.type": "Stil",
|
"compose_form.poll.type": "Stil",
|
||||||
"compose_form.publish": "Objavi",
|
"compose_form.publish": "Objavi",
|
||||||
"compose_form.publish_form": "Objavi",
|
"compose_form.publish_form": "Nova objava",
|
||||||
"compose_form.reply": "Odgovori",
|
"compose_form.reply": "Odgovori",
|
||||||
"compose_form.save_changes": "Ažuriraj",
|
"compose_form.save_changes": "Ažuriraj",
|
||||||
"compose_form.spoiler.marked": "Ukloni upozorenje o sadržaju",
|
"compose_form.spoiler.marked": "Ukloni upozorenje o sadržaju",
|
||||||
|
@ -169,6 +177,7 @@
|
||||||
"confirmations.delete_list.message": "Da li ste sigurni da želite da trajno izbrišete ovu listu?",
|
"confirmations.delete_list.message": "Da li ste sigurni da želite da trajno izbrišete ovu listu?",
|
||||||
"confirmations.discard_edit_media.confirm": "Odbaci",
|
"confirmations.discard_edit_media.confirm": "Odbaci",
|
||||||
"confirmations.discard_edit_media.message": "Imate nesačuvane promene u opisu ili pregledu medija, da li ipak hoćete da ih odbacite?",
|
"confirmations.discard_edit_media.message": "Imate nesačuvane promene u opisu ili pregledu medija, da li ipak hoćete da ih odbacite?",
|
||||||
|
"confirmations.domain_block.confirm": "Blokiraj server",
|
||||||
"confirmations.domain_block.message": "Da li ste zaista sigurni da želite da blokirate ceo domen {domain}? U većini slučajeva, dovoljno je i poželjno nekoliko ciljanih blokiranja ili ignorisanja. Nećete videti sadržaj sa tog domena ni u jednoj javnoj vremenskoj liniji ili u vašim obaveštenjima. Vaši pratioci sa tog domena će biti uklonjeni.",
|
"confirmations.domain_block.message": "Da li ste zaista sigurni da želite da blokirate ceo domen {domain}? U većini slučajeva, dovoljno je i poželjno nekoliko ciljanih blokiranja ili ignorisanja. Nećete videti sadržaj sa tog domena ni u jednoj javnoj vremenskoj liniji ili u vašim obaveštenjima. Vaši pratioci sa tog domena će biti uklonjeni.",
|
||||||
"confirmations.edit.confirm": "Uredi",
|
"confirmations.edit.confirm": "Uredi",
|
||||||
"confirmations.edit.message": "Uređivanjem će se obrisati poruka koju trenutno sastavljate. Da li ste sigurni da želite da nastavite?",
|
"confirmations.edit.message": "Uređivanjem će se obrisati poruka koju trenutno sastavljate. Da li ste sigurni da želite da nastavite?",
|
||||||
|
@ -196,10 +205,31 @@
|
||||||
"disabled_account_banner.text": "Vaš nalog {disabledAccount} je trenutno onemogućen.",
|
"disabled_account_banner.text": "Vaš nalog {disabledAccount} je trenutno onemogućen.",
|
||||||
"dismissable_banner.community_timeline": "Ovo su najnovije javne objave ljudi čije naloge hostuje {domain}.",
|
"dismissable_banner.community_timeline": "Ovo su najnovije javne objave ljudi čije naloge hostuje {domain}.",
|
||||||
"dismissable_banner.dismiss": "Odbaci",
|
"dismissable_banner.dismiss": "Odbaci",
|
||||||
"dismissable_banner.explore_links": "O ovim vestima trenutno razgovaraju ljudi na ovom i drugim serverima decentralizovane mreže.",
|
"dismissable_banner.explore_links": "Ovo su vesti koje se danas najviše dele na društvenoj mreži. Novije vesti koje je objavilo više različitih ljudi su bolje rangirane.",
|
||||||
"dismissable_banner.explore_statuses": "Ovo su objave širom društvenog veba koje danas postaju sve popularnije. Novije objave sa više podržavanja i omiljene su rangirane više.",
|
"dismissable_banner.explore_statuses": "Ovo su objave širom društvenog veba koje danas postaju sve popularnije. Novije objave sa više podržavanja i omiljene su rangirane više.",
|
||||||
"dismissable_banner.explore_tags": "Ove heš oznake postaju sve popularnije među ljudima na ovom i drugim serverima decentralizovane mreže.",
|
"dismissable_banner.explore_tags": "Ovo su heš oznake koje danas postaju sve popularnije na društvenoj mreži. Heš oznake koje koristi više različitih ljudi su rangirane više.",
|
||||||
"dismissable_banner.public_timeline": "Ovo su najnovije javne objave ljudi sa društvenog veba koje ljudi na {domain}-u prate.",
|
"dismissable_banner.public_timeline": "Ovo su najnovije javne objave ljudi sa društvenog veba koje ljudi na {domain}-u prate.",
|
||||||
|
"domain_block_modal.block": "Blokiraj server",
|
||||||
|
"domain_block_modal.block_account_instead": "Umesto toga, blokiraj @{name}",
|
||||||
|
"domain_block_modal.they_can_interact_with_old_posts": "Ljudi sa ovog servera mogu da imaju interakciju sa vašim starim objavama.",
|
||||||
|
"domain_block_modal.they_cant_follow": "Niko sa ovog servera ne može da vas prati.",
|
||||||
|
"domain_block_modal.they_wont_know": "Neće znati da su blokirani.",
|
||||||
|
"domain_block_modal.title": "Blokirati domen?",
|
||||||
|
"domain_block_modal.you_will_lose_followers": "Svi vaši pratioci sa ovog servera će biti uklonjeni.",
|
||||||
|
"domain_block_modal.you_wont_see_posts": "Nećete videti objave ili obaveštenja korisnika na ovom serveru.",
|
||||||
|
"domain_pill.activitypub_lets_connect": "Omogućuje vam da se povežete i komunicirate sa ljudima ne samo na Mastodon-u, već i u različitim društvenim aplikacijama.",
|
||||||
|
"domain_pill.activitypub_like_language": "ActivityPub je kao jezik kojim Mastodon govori sa drugim društvenim mrežama.",
|
||||||
|
"domain_pill.server": "Server",
|
||||||
|
"domain_pill.their_handle": "Njegov regulator:",
|
||||||
|
"domain_pill.their_server": "Njihov digitalni dom, gde žive sve njihove objave.",
|
||||||
|
"domain_pill.their_username": "Njihov jedinstveni identifikator na njihovom serveru. Moguće je pronaći korisnike sa istim korisničkim imenom na različitim serverima.",
|
||||||
|
"domain_pill.username": "Korisničko ime",
|
||||||
|
"domain_pill.whats_in_a_handle": "Šta je regulator?",
|
||||||
|
"domain_pill.who_they_are": "Pošto regulatori govore ko je neko i gde se nalazi, možete da komunicirate sa ljudima širom društvenog veba na <button>platformama koje pokreće ActivityPub</button>.",
|
||||||
|
"domain_pill.who_you_are": "Pošto vaši regulatori govori ko ste i gde ste, ljudi mogu da komuniciraju sa vama širom društvenog veba na <button>platformama koje pokreće ActivityPub</button>.",
|
||||||
|
"domain_pill.your_handle": "Vaš regulator:",
|
||||||
|
"domain_pill.your_server": "Vaš digitalni dom, gde žive sve vaše objave. Ne sviđa vam se ovaj? Prenesite servere u bilo koje vreme i dovedite i svoje pratioce.",
|
||||||
|
"domain_pill.your_username": "Njihov jedinstveni identifikator na njihovom serveru. Moguće je pronaći korisnike sa istim korisničkim imenom na različitim serverima.",
|
||||||
"embed.instructions": "Ugradite ovu objavu na svoj veb sajt kopiranjem koda ispod.",
|
"embed.instructions": "Ugradite ovu objavu na svoj veb sajt kopiranjem koda ispod.",
|
||||||
"embed.preview": "Evo kako će to izgledati:",
|
"embed.preview": "Evo kako će to izgledati:",
|
||||||
"emoji_button.activity": "Aktivnosti",
|
"emoji_button.activity": "Aktivnosti",
|
||||||
|
@ -232,11 +262,11 @@
|
||||||
"empty_column.follow_requests": "Još uvek nemate nijedan zahtev za praćenje. Kada primite zahtev, on će se pojaviti ovde.",
|
"empty_column.follow_requests": "Još uvek nemate nijedan zahtev za praćenje. Kada primite zahtev, on će se pojaviti ovde.",
|
||||||
"empty_column.followed_tags": "Još uvek niste zapratili nijednu heš oznaku. Kada to uradite, one će se pojaviti ovde.",
|
"empty_column.followed_tags": "Još uvek niste zapratili nijednu heš oznaku. Kada to uradite, one će se pojaviti ovde.",
|
||||||
"empty_column.hashtag": "Još uvek nema ničega u ovoj heš oznaci.",
|
"empty_column.hashtag": "Još uvek nema ničega u ovoj heš oznaci.",
|
||||||
"empty_column.home": "Vaša početna vremenska linija je prazna! Pratite više ljudi da biste je popunili. {suggestions}",
|
"empty_column.home": "Vaša početna vremenska linija je prazna! Pratite više ljudi da biste je popunili.",
|
||||||
"empty_column.list": "U ovoj listi još nema ničega. Kada članovi ove liste objave nešto novo, pojaviće se ovde.",
|
"empty_column.list": "U ovoj listi još nema ničega. Kada članovi ove liste objave nešto novo, pojaviće se ovde.",
|
||||||
"empty_column.lists": "Još uvek nemate nijednu listu. Kada napravite jednu, ona će se pojaviti ovde.",
|
"empty_column.lists": "Još uvek nemate nijednu listu. Kada napravite jednu, ona će se pojaviti ovde.",
|
||||||
"empty_column.mutes": "Još uvek ne ignorišete nijednog korisnika.",
|
"empty_column.mutes": "Još uvek ne ignorišete nijednog korisnika.",
|
||||||
"empty_column.notification_requests": "Sve je čisto! Ovde nema ničega. Kada dobijete nova obaveštenja, ona će se pojaviti ovde u skladu sa vašim podešavanjima.",
|
"empty_column.notification_requests": "Sve je čisto! Ovde nema ničega. Kada dobijete nova obaveštenja, ona će se pojaviti ovde u skladu sa vašim podešavanjima.",
|
||||||
"empty_column.notifications": "Još uvek nemate nikakva obaveštenja. Kada drugi ljudi budu u interakciji sa vama, videćete to ovde.",
|
"empty_column.notifications": "Još uvek nemate nikakva obaveštenja. Kada drugi ljudi budu u interakciji sa vama, videćete to ovde.",
|
||||||
"empty_column.public": "Ovde nema ničega! Napišite nešto javno ili ručno pratite korisnike sa drugih servera da biste ovo popunili",
|
"empty_column.public": "Ovde nema ničega! Napišite nešto javno ili ručno pratite korisnike sa drugih servera da biste ovo popunili",
|
||||||
"error.unexpected_crash.explanation": "Zbog greške u našem kodu ili problema sa kompatibilnošću pregledača, ova stranica se nije mogla pravilno prikazati.",
|
"error.unexpected_crash.explanation": "Zbog greške u našem kodu ili problema sa kompatibilnošću pregledača, ova stranica se nije mogla pravilno prikazati.",
|
||||||
|
@ -267,6 +297,7 @@
|
||||||
"filter_modal.select_filter.subtitle": "Koristite postojeću kategoriju ili kreirajte novu",
|
"filter_modal.select_filter.subtitle": "Koristite postojeću kategoriju ili kreirajte novu",
|
||||||
"filter_modal.select_filter.title": "Filtriraj ovu objavu",
|
"filter_modal.select_filter.title": "Filtriraj ovu objavu",
|
||||||
"filter_modal.title.status": "Filtriraj objavu",
|
"filter_modal.title.status": "Filtriraj objavu",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {pominjanje} few {pominjanja} other {pominjanja}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Obaveštenja od {count, plural, =0 {nikoga koga možda poznajete} one {# osobe koju možda poznajete} few {# osobe koje možda poznajete} other {# osoba koje možda poznajete}}",
|
"filtered_notifications_banner.pending_requests": "Obaveštenja od {count, plural, =0 {nikoga koga možda poznajete} one {# osobe koju možda poznajete} few {# osobe koje možda poznajete} other {# osoba koje možda poznajete}}",
|
||||||
"filtered_notifications_banner.title": "Filtrirana obaveštenja",
|
"filtered_notifications_banner.title": "Filtrirana obaveštenja",
|
||||||
"firehose.all": "Sve",
|
"firehose.all": "Sve",
|
||||||
|
@ -279,7 +310,7 @@
|
||||||
"follow_suggestions.dismiss": "Ne prikazuj ponovo",
|
"follow_suggestions.dismiss": "Ne prikazuj ponovo",
|
||||||
"follow_suggestions.hints.featured": "Ovaj profil je ručno izabrao tim {domain}.",
|
"follow_suggestions.hints.featured": "Ovaj profil je ručno izabrao tim {domain}.",
|
||||||
"follow_suggestions.hints.friends_of_friends": "Ovaj profil je popularan među ljudima koje pratite.",
|
"follow_suggestions.hints.friends_of_friends": "Ovaj profil je popularan među ljudima koje pratite.",
|
||||||
"follow_suggestions.hints.most_followed": "Ovaj profil je jedan od najpraćenijih na {domain}.",
|
"follow_suggestions.hints.most_followed": "Ovaj profil je jedan od najpraćenijih na {domain}.",
|
||||||
"follow_suggestions.hints.most_interactions": "Ovaj profil je nedavno dobio veliku pažnju na {domain}.",
|
"follow_suggestions.hints.most_interactions": "Ovaj profil je nedavno dobio veliku pažnju na {domain}.",
|
||||||
"follow_suggestions.hints.similar_to_recently_followed": "Ovaj profil je sličan profilima koje ste nedavno zapratili.",
|
"follow_suggestions.hints.similar_to_recently_followed": "Ovaj profil je sličan profilima koje ste nedavno zapratili.",
|
||||||
"follow_suggestions.personalized_suggestion": "Personalizovani predlog",
|
"follow_suggestions.personalized_suggestion": "Personalizovani predlog",
|
||||||
|
@ -315,7 +346,7 @@
|
||||||
"home.column_settings.show_reblogs": "Prikaži podržavanja",
|
"home.column_settings.show_reblogs": "Prikaži podržavanja",
|
||||||
"home.column_settings.show_replies": "Prikaži odgovore",
|
"home.column_settings.show_replies": "Prikaži odgovore",
|
||||||
"home.hide_announcements": "Sakrij najave",
|
"home.hide_announcements": "Sakrij najave",
|
||||||
"home.pending_critical_update.body": "Ažurirajte svoj Mastodon server što je pre moguće!",
|
"home.pending_critical_update.body": "Ažurirajte svoj Mastodon server što je pre moguće!",
|
||||||
"home.pending_critical_update.link": "Pogledajte ažuriranja",
|
"home.pending_critical_update.link": "Pogledajte ažuriranja",
|
||||||
"home.pending_critical_update.title": "Dostupno je kritično bezbednosno ažuriranje!",
|
"home.pending_critical_update.title": "Dostupno je kritično bezbednosno ažuriranje!",
|
||||||
"home.show_announcements": "Prijaži najave",
|
"home.show_announcements": "Prijaži najave",
|
||||||
|
@ -329,7 +360,7 @@
|
||||||
"interaction_modal.on_another_server": "Na drugom serveru",
|
"interaction_modal.on_another_server": "Na drugom serveru",
|
||||||
"interaction_modal.on_this_server": "Na ovom serveru",
|
"interaction_modal.on_this_server": "Na ovom serveru",
|
||||||
"interaction_modal.sign_in": "Niste prijavljeni na ovaj server. Gde je hostovan vaš nalog?",
|
"interaction_modal.sign_in": "Niste prijavljeni na ovaj server. Gde je hostovan vaš nalog?",
|
||||||
"interaction_modal.sign_in_hint": "Savet: To je veb sajt na kome ste se registrovali. Ako se ne sećate, potražite e-poruku dobrodošlice u svom prijemnom sandučetu. Takođe možete uneti svoje puno korisničko ime! (npr. @Mastodon@mastodon.social)",
|
"interaction_modal.sign_in_hint": "Savet: To je veb sajt na kome ste se registrovali. Ako se ne sećate, potražite e-poruku dobrodošlice u svom prijemnom sandučetu. Takođe možete uneti svoje puno korisničko ime! (npr. @Mastodon@mastodon.social)",
|
||||||
"interaction_modal.title.favourite": "Označi objavu korisnika {name} kao omiljenu",
|
"interaction_modal.title.favourite": "Označi objavu korisnika {name} kao omiljenu",
|
||||||
"interaction_modal.title.follow": "Zaprati {name}",
|
"interaction_modal.title.follow": "Zaprati {name}",
|
||||||
"interaction_modal.title.reblog": "Podrži objavu korisnika {name}",
|
"interaction_modal.title.reblog": "Podrži objavu korisnika {name}",
|
||||||
|
@ -397,6 +428,15 @@
|
||||||
"loading_indicator.label": "Učitavanje…",
|
"loading_indicator.label": "Učitavanje…",
|
||||||
"media_gallery.toggle_visible": "{number, plural, one {Sakrij sliku} few {Sakrij slike} other {Sakrij slike}}",
|
"media_gallery.toggle_visible": "{number, plural, one {Sakrij sliku} few {Sakrij slike} other {Sakrij slike}}",
|
||||||
"moved_to_account_banner.text": "Vaš nalog {disabledAccount} je trenutno onemogućen jer ste prešli na {movedToAccount}.",
|
"moved_to_account_banner.text": "Vaš nalog {disabledAccount} je trenutno onemogućen jer ste prešli na {movedToAccount}.",
|
||||||
|
"mute_modal.hide_from_notifications": "Sakrij iz obaveštenja",
|
||||||
|
"mute_modal.hide_options": "Sakrij opcije",
|
||||||
|
"mute_modal.indefinite": "Dok ih ne uklonim iz ignorisanih",
|
||||||
|
"mute_modal.show_options": "Prikaži opcije",
|
||||||
|
"mute_modal.they_can_mention_and_follow": "Mogu da vas pominju i prate, ali ih nećete videti.",
|
||||||
|
"mute_modal.they_wont_know": "Neće znati da su ignorisani.",
|
||||||
|
"mute_modal.title": "Ignorisati korisnika?",
|
||||||
|
"mute_modal.you_wont_see_mentions": "Nećete videti objave koje ga pominju.",
|
||||||
|
"mute_modal.you_wont_see_posts": "I dalje može da vidi vaše objave, ali vi nećete videti njegove.",
|
||||||
"navigation_bar.about": "Osnovni podaci",
|
"navigation_bar.about": "Osnovni podaci",
|
||||||
"navigation_bar.advanced_interface": "Otvori u naprednom veb okruženju",
|
"navigation_bar.advanced_interface": "Otvori u naprednom veb okruženju",
|
||||||
"navigation_bar.blocks": "Blokirani korisnici",
|
"navigation_bar.blocks": "Blokirani korisnici",
|
||||||
|
@ -432,6 +472,11 @@
|
||||||
"notification.own_poll": "Vaša anketa je završena",
|
"notification.own_poll": "Vaša anketa je završena",
|
||||||
"notification.poll": "Završena je anketa u kojoj ste glasali",
|
"notification.poll": "Završena je anketa u kojoj ste glasali",
|
||||||
"notification.reblog": "{name} je podržao vašu objavu",
|
"notification.reblog": "{name} je podržao vašu objavu",
|
||||||
|
"notification.relationships_severance_event": "Izgubljena veza sa {name}",
|
||||||
|
"notification.relationships_severance_event.account_suspension": "Administrator sa {from} je suspendovao {target}, što znači da više ne možete da primate ažuriranja od njih niti da komunicirate sa njima.",
|
||||||
|
"notification.relationships_severance_event.domain_block": "Administrator sa {from} je blokirao {target}, uključujući vaše pratioce: {followersCount} i {followingCount, plural, one {# nalog} few {# naloga} other {# naloga}} koje pratite.",
|
||||||
|
"notification.relationships_severance_event.learn_more": "Saznajte više",
|
||||||
|
"notification.relationships_severance_event.user_domain_block": "Blokirači ste {target}, uključujući vaše pratioce: {followersCount} i {followingCount, plural, one {# nalog} few {# naloga} other {# naloga}} koje pratite.",
|
||||||
"notification.status": "{name} je upravo objavio",
|
"notification.status": "{name} je upravo objavio",
|
||||||
"notification.update": "{name} je uredio objavu",
|
"notification.update": "{name} je uredio objavu",
|
||||||
"notification_requests.accept": "Prihvati",
|
"notification_requests.accept": "Prihvati",
|
||||||
|
@ -444,6 +489,8 @@
|
||||||
"notifications.column_settings.admin.sign_up": "Nove ragistracije:",
|
"notifications.column_settings.admin.sign_up": "Nove ragistracije:",
|
||||||
"notifications.column_settings.alert": "Obaveštenja na radnoj površini",
|
"notifications.column_settings.alert": "Obaveštenja na radnoj površini",
|
||||||
"notifications.column_settings.favourite": "Omiljeno:",
|
"notifications.column_settings.favourite": "Omiljeno:",
|
||||||
|
"notifications.column_settings.filter_bar.advanced": "Prikaži sve kategorije",
|
||||||
|
"notifications.column_settings.filter_bar.category": "Traka za brzo filtriranje",
|
||||||
"notifications.column_settings.follow": "Novi pratioci:",
|
"notifications.column_settings.follow": "Novi pratioci:",
|
||||||
"notifications.column_settings.follow_request": "Novi zahtevi za praćenje:",
|
"notifications.column_settings.follow_request": "Novi zahtevi za praćenje:",
|
||||||
"notifications.column_settings.mention": "Pominjanja:",
|
"notifications.column_settings.mention": "Pominjanja:",
|
||||||
|
@ -471,7 +518,7 @@
|
||||||
"notifications.permission_required": "Obaveštenja na radnoj površini nisu dostupna jer potrebna dozvola nije dodeljena.",
|
"notifications.permission_required": "Obaveštenja na radnoj površini nisu dostupna jer potrebna dozvola nije dodeljena.",
|
||||||
"notifications.policy.filter_new_accounts.hint": "Kreirano {days, plural, one {u poslednjeg # dana} few {u poslednja # dana} other {u poslednjih # dana}}",
|
"notifications.policy.filter_new_accounts.hint": "Kreirano {days, plural, one {u poslednjeg # dana} few {u poslednja # dana} other {u poslednjih # dana}}",
|
||||||
"notifications.policy.filter_new_accounts_title": "Novi nalozi",
|
"notifications.policy.filter_new_accounts_title": "Novi nalozi",
|
||||||
"notifications.policy.filter_not_followers_hint": "Uključujući ljude koji su vas pratili manje od {days, plural, one {# dana} few {# dana} other {# dana}}",
|
"notifications.policy.filter_not_followers_hint": "Uključujući ljude koji su vas pratili manje od {days, plural, one {# dana} few {# dana} other {# dana}}",
|
||||||
"notifications.policy.filter_not_followers_title": "Ljudi koji vas ne prate",
|
"notifications.policy.filter_not_followers_title": "Ljudi koji vas ne prate",
|
||||||
"notifications.policy.filter_not_following_hint": "Dok ih ručno ne odobrite",
|
"notifications.policy.filter_not_following_hint": "Dok ih ručno ne odobrite",
|
||||||
"notifications.policy.filter_not_following_title": "Ljudi koje ne pratite",
|
"notifications.policy.filter_not_following_title": "Ljudi koje ne pratite",
|
||||||
|
@ -483,14 +530,14 @@
|
||||||
"notifications_permission_banner.title": "Nikada ništa ne propustite",
|
"notifications_permission_banner.title": "Nikada ništa ne propustite",
|
||||||
"onboarding.action.back": "Vrati me nazad",
|
"onboarding.action.back": "Vrati me nazad",
|
||||||
"onboarding.actions.back": "Vrati me nazad",
|
"onboarding.actions.back": "Vrati me nazad",
|
||||||
"onboarding.actions.go_to_explore": "Pogledaj šta je u trendu",
|
"onboarding.actions.go_to_explore": "Odvedi me u trending",
|
||||||
"onboarding.actions.go_to_home": "Idi na početnu stranicu",
|
"onboarding.actions.go_to_home": "Odvedi me na početnu stranicu",
|
||||||
"onboarding.compose.template": "Zdravo #Mastodon!",
|
"onboarding.compose.template": "Zdravo #Mastodon!",
|
||||||
"onboarding.follows.empty": "Nažalost, trenutno se ne mogu prikazati rezultati. Možete pokušati sa korišćenjem pretrage ili pregledanjem stranice za istraživanje da biste pronašli ljude koje ćete pratiti ili pokušajte ponovo kasnije.",
|
"onboarding.follows.empty": "Nažalost, trenutno se ne mogu prikazati rezultati. Možete pokušati sa korišćenjem pretrage ili pregledanjem stranice za istraživanje da biste pronašli ljude koje ćete pratiti ili pokušajte ponovo kasnije.",
|
||||||
"onboarding.follows.lead": "Vi sami birate svoju početnu stranicu. Što više ljudi pratite, to će biti aktivnije i zanimljivije. Ovi profili mogu biti dobra polazna tačka—uvek možete da ih prestanete pratiti kasnije!",
|
"onboarding.follows.lead": "Vaša početna stranica je primarni način da doživite Mastodon. Što više ljudi budete pratili, to će biti aktivnije i zanimljivije. Da biste započeli, evo nekoliko predloga:",
|
||||||
"onboarding.follows.title": "Personalizujte svoju početnu stranicu",
|
"onboarding.follows.title": "Personalizujte svoju početnu stranicu",
|
||||||
"onboarding.profile.discoverable": "Neka se moj profil može otkriti drugima",
|
"onboarding.profile.discoverable": "Neka se moj profil može otkriti drugima",
|
||||||
"onboarding.profile.discoverable_hint": "Kada omogućite mogućnost otkrivanja na Mastodon-u, vaše objave se mogu pojaviti u rezultatima pretrage i u trendu, a vaš profil može biti predložen ljudima sa sličnim interesovanjima.",
|
"onboarding.profile.discoverable_hint": "Kada omogućite mogućnost otkrivanja na Mastodon-u, vaše objave se mogu pojaviti u rezultatima pretrage i u trendu, a vaš profil može biti predložen ljudima sa sličnim interesovanjima.",
|
||||||
"onboarding.profile.display_name": "Ime za prikaz",
|
"onboarding.profile.display_name": "Ime za prikaz",
|
||||||
"onboarding.profile.display_name_hint": "Vaše puno ime ili nadimak…",
|
"onboarding.profile.display_name_hint": "Vaše puno ime ili nadimak…",
|
||||||
"onboarding.profile.lead": "Ovo možete uvek dovršiti kasnije u podešavanjima, gde je dostupno još više opcija prilagođavanja.",
|
"onboarding.profile.lead": "Ovo možete uvek dovršiti kasnije u podešavanjima, gde je dostupno još više opcija prilagođavanja.",
|
||||||
|
@ -504,17 +551,17 @@
|
||||||
"onboarding.share.message": "Ja sam {username} na #Mastodon-u! Pratite me na {url}",
|
"onboarding.share.message": "Ja sam {username} na #Mastodon-u! Pratite me na {url}",
|
||||||
"onboarding.share.next_steps": "Mogući sledeći koraci:",
|
"onboarding.share.next_steps": "Mogući sledeći koraci:",
|
||||||
"onboarding.share.title": "Podelite svoj profil",
|
"onboarding.share.title": "Podelite svoj profil",
|
||||||
"onboarding.start.lead": "Vaš novi Mastodon nalog je spreman. Evo kako to možete iskoristiti na najbolji način:",
|
"onboarding.start.lead": "Sada ste deo Mastodon-a, jedinstvene, decentralizovane platforme društvenih medija na kojoj vi – a ne algoritam – birate svoje iskustvo. Hajde da počnemo na ovoj novoj društvenoj granici:",
|
||||||
"onboarding.start.skip": "Želite da preskočite?",
|
"onboarding.start.skip": "Ne treba vam pomoć za početak?",
|
||||||
"onboarding.start.title": "Uspeli ste!",
|
"onboarding.start.title": "Uspeli ste!",
|
||||||
"onboarding.steps.follow_people.body": "Vi sami birate svoju početnu stranicu. Hajde da ga ispunimo zanimljivim ljudima.",
|
"onboarding.steps.follow_people.body": "Praćenje zanimljivih ljudi je ono o čemu se radi u Mastodon-u.",
|
||||||
"onboarding.steps.follow_people.title": "Personalizujte svoju početnu stranicu",
|
"onboarding.steps.follow_people.title": "Personalizujte svoju početnu stranicu",
|
||||||
"onboarding.steps.publish_status.body": "Reci zdravo svetu.",
|
"onboarding.steps.publish_status.body": "Pozdravite svet tekstom, slikama, video snimcima ili anketama {emoji}",
|
||||||
"onboarding.steps.publish_status.title": "Napišite svoju prvu objavu",
|
"onboarding.steps.publish_status.title": "Napišite svoju prvu objavu",
|
||||||
"onboarding.steps.setup_profile.body": "Veća je verovatnoća da će drugi komunicirati sa vama sa popunjenim profilom.",
|
"onboarding.steps.setup_profile.body": "Pojačajte svoje interakcije tako što ćete imati sveobuhvatan profil.",
|
||||||
"onboarding.steps.setup_profile.title": "Prilagodite svoj profil",
|
"onboarding.steps.setup_profile.title": "Personalizujte svoj profil",
|
||||||
"onboarding.steps.share_profile.body": "Neka vaši prijatelji znaju kako da vas pronađu na Mastodon-u!",
|
"onboarding.steps.share_profile.body": "Neka vaši prijatelji znaju kako da vas pronađu na Mastodon-u!",
|
||||||
"onboarding.steps.share_profile.title": "Podelite svoj profil",
|
"onboarding.steps.share_profile.title": "Podelite svoj Mastodon profil",
|
||||||
"onboarding.tips.2fa": "<strong>Da li ste znali?</strong> Možete da zaštitite svoj nalog podešavanjem dvostruke potvrde identiteta u podešavanjima naloga. Radi sa bilo kojom TOTP aplikacijom po vašem izboru, nije potreban broj telefona!",
|
"onboarding.tips.2fa": "<strong>Da li ste znali?</strong> Možete da zaštitite svoj nalog podešavanjem dvostruke potvrde identiteta u podešavanjima naloga. Radi sa bilo kojom TOTP aplikacijom po vašem izboru, nije potreban broj telefona!",
|
||||||
"onboarding.tips.accounts_from_other_servers": "<strong>Da li ste znali?</strong> Pošto je Mastodon decentralizovan, neki profili na koje naiđete biće smešteni na serverima različitim od vašeg. A ipak možete da komunicirate sa njima besprekorno! Njihov server je u drugoj polovini njihovog korisničkog imena!",
|
"onboarding.tips.accounts_from_other_servers": "<strong>Da li ste znali?</strong> Pošto je Mastodon decentralizovan, neki profili na koje naiđete biće smešteni na serverima različitim od vašeg. A ipak možete da komunicirate sa njima besprekorno! Njihov server je u drugoj polovini njihovog korisničkog imena!",
|
||||||
"onboarding.tips.migration": "<strong>Da li ste znali?</strong> Ako smatrate da {domain} nije odličan izbor servera za vas u budućnosti, možete da pređete na drugi Mastodon server bez gubitka pratilaca. Možete čak i da hostujete sopstveni server!",
|
"onboarding.tips.migration": "<strong>Da li ste znali?</strong> Ako smatrate da {domain} nije odličan izbor servera za vas u budućnosti, možete da pređete na drugi Mastodon server bez gubitka pratilaca. Možete čak i da hostujete sopstveni server!",
|
||||||
|
@ -539,7 +586,7 @@
|
||||||
"privacy.private.short": "Pratioci",
|
"privacy.private.short": "Pratioci",
|
||||||
"privacy.public.long": "Bilo ko na Mastodon-u i van njega",
|
"privacy.public.long": "Bilo ko na Mastodon-u i van njega",
|
||||||
"privacy.public.short": "Javno",
|
"privacy.public.short": "Javno",
|
||||||
"privacy.unlisted.additional": "Ovo se ponaša potpuno kao javno, osim što se objava neće pojavljivati u izvorima uživo ili heš oznakama, istraživanjima ili pretrazi Mastodon-a, čak i ako ste uključeni u celom nalogu.",
|
"privacy.unlisted.additional": "Ovo se ponaša potpuno kao javno, osim što se objava neće pojavljivati u izvorima uživo ili heš oznakama, istraživanjima ili pretrazi Mastodon-a, čak i ako ste uključeni u celom nalogu.",
|
||||||
"privacy.unlisted.long": "Manje algoritamskih fanfara",
|
"privacy.unlisted.long": "Manje algoritamskih fanfara",
|
||||||
"privacy.unlisted.short": "Tiha javnost",
|
"privacy.unlisted.short": "Tiha javnost",
|
||||||
"privacy_policy.last_updated": "Poslednje ažuriranje {date}",
|
"privacy_policy.last_updated": "Poslednje ažuriranje {date}",
|
||||||
|
|
|
@ -220,7 +220,16 @@
|
||||||
"domain_pill.activitypub_lets_connect": "Омогућује вам да се повежете и комуницирате са људима не само на Mastodon-у, већ и у различитим друштвеним апликацијама.",
|
"domain_pill.activitypub_lets_connect": "Омогућује вам да се повежете и комуницирате са људима не само на Mastodon-у, већ и у различитим друштвеним апликацијама.",
|
||||||
"domain_pill.activitypub_like_language": "ActivityPub је као језик којим Mastodon говори са другим друштвеним мрежама.",
|
"domain_pill.activitypub_like_language": "ActivityPub је као језик којим Mastodon говори са другим друштвеним мрежама.",
|
||||||
"domain_pill.server": "Сервер",
|
"domain_pill.server": "Сервер",
|
||||||
|
"domain_pill.their_handle": "Његов регулатор:",
|
||||||
|
"domain_pill.their_server": "Њихов дигитални дом, где живе све њихове објаве.",
|
||||||
|
"domain_pill.their_username": "Њихов јединствени идентификатор на њиховом серверу. Могуће је пронаћи кориснике са истим корисничким именом на различитим серверима.",
|
||||||
"domain_pill.username": "Корисничко име",
|
"domain_pill.username": "Корисничко име",
|
||||||
|
"domain_pill.whats_in_a_handle": "Шта је регулатор?",
|
||||||
|
"domain_pill.who_they_are": "Пошто регулатори говоре ко је неко и где се налази, можете да комуницирате са људима широм друштвеног веба на <button>платформама које покреће ActivityPub</button>.",
|
||||||
|
"domain_pill.who_you_are": "Пошто ваши регулатори говори ко сте и где сте, људи могу да комуницирају са вама широм друштвеног веба на <button>платформама које покреће ActivityPub</button>.",
|
||||||
|
"domain_pill.your_handle": "Ваш регулатор:",
|
||||||
|
"domain_pill.your_server": "Ваш дигитални дом, где живе све ваше објаве. Не свиђа вам се овај? Пренесите сервере у било које време и доведите и своје пратиоце.",
|
||||||
|
"domain_pill.your_username": "Њихов јединствени идентификатор на њиховом серверу. Могуће је пронаћи кориснике са истим корисничким именом на различитим серверима.",
|
||||||
"embed.instructions": "Уградите ову објаву на свој веб сајт копирањем кода испод.",
|
"embed.instructions": "Уградите ову објаву на свој веб сајт копирањем кода испод.",
|
||||||
"embed.preview": "Ево како ће то изгледати:",
|
"embed.preview": "Ево како ће то изгледати:",
|
||||||
"emoji_button.activity": "Активности",
|
"emoji_button.activity": "Активности",
|
||||||
|
@ -288,6 +297,7 @@
|
||||||
"filter_modal.select_filter.subtitle": "Користите постојећу категорију или креирајте нову",
|
"filter_modal.select_filter.subtitle": "Користите постојећу категорију или креирајте нову",
|
||||||
"filter_modal.select_filter.title": "Филтрирај ову објаву",
|
"filter_modal.select_filter.title": "Филтрирај ову објаву",
|
||||||
"filter_modal.title.status": "Филтрирај објаву",
|
"filter_modal.title.status": "Филтрирај објаву",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {помињање} few {помињања} other {помињања}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Обавештења од {count, plural, =0 {никога кога можда познајете} one {# особе коју можда познајете} few {# особе које можда познајете} other {# особа које можда познајете}}",
|
"filtered_notifications_banner.pending_requests": "Обавештења од {count, plural, =0 {никога кога можда познајете} one {# особе коју можда познајете} few {# особе које можда познајете} other {# особа које можда познајете}}",
|
||||||
"filtered_notifications_banner.title": "Филтрирана обавештења",
|
"filtered_notifications_banner.title": "Филтрирана обавештења",
|
||||||
"firehose.all": "Све",
|
"firehose.all": "Све",
|
||||||
|
@ -462,7 +472,11 @@
|
||||||
"notification.own_poll": "Ваша анкета је завршена",
|
"notification.own_poll": "Ваша анкета је завршена",
|
||||||
"notification.poll": "Завршена је анкета у којој сте гласали",
|
"notification.poll": "Завршена је анкета у којој сте гласали",
|
||||||
"notification.reblog": "{name} је подржао вашу објаву",
|
"notification.reblog": "{name} је подржао вашу објаву",
|
||||||
|
"notification.relationships_severance_event": "Изгубљена веза са {name}",
|
||||||
|
"notification.relationships_severance_event.account_suspension": "Администратор са {from} је суспендовао {target}, што значи да више не можете да примате ажурирања од њих нити да комуницирате са њима.",
|
||||||
|
"notification.relationships_severance_event.domain_block": "Администратор са {from} је блокирао {target}, укључујући ваше пратиоце: {followersCount} и {followingCount, plural, one {# налог} few {# налогa} other {# налога}} које пратите.",
|
||||||
"notification.relationships_severance_event.learn_more": "Сазнајте више",
|
"notification.relationships_severance_event.learn_more": "Сазнајте више",
|
||||||
|
"notification.relationships_severance_event.user_domain_block": "Блокирачи сте {target}, укључујући ваше пратиоце: {followersCount} и {followingCount, plural, one {# налог} few {# налогa} other {# налога}} које пратите.",
|
||||||
"notification.status": "{name} је управо објавио",
|
"notification.status": "{name} је управо објавио",
|
||||||
"notification.update": "{name} је уредио објаву",
|
"notification.update": "{name} је уредио објаву",
|
||||||
"notification_requests.accept": "Прихвати",
|
"notification_requests.accept": "Прихвати",
|
||||||
|
@ -476,6 +490,7 @@
|
||||||
"notifications.column_settings.alert": "Обавештења на радној површини",
|
"notifications.column_settings.alert": "Обавештења на радној површини",
|
||||||
"notifications.column_settings.favourite": "Омиљено:",
|
"notifications.column_settings.favourite": "Омиљено:",
|
||||||
"notifications.column_settings.filter_bar.advanced": "Прикажи све категорије",
|
"notifications.column_settings.filter_bar.advanced": "Прикажи све категорије",
|
||||||
|
"notifications.column_settings.filter_bar.category": "Трака за брзо филтрирање",
|
||||||
"notifications.column_settings.follow": "Нови пратиоци:",
|
"notifications.column_settings.follow": "Нови пратиоци:",
|
||||||
"notifications.column_settings.follow_request": "Нови захтеви за праћење:",
|
"notifications.column_settings.follow_request": "Нови захтеви за праћење:",
|
||||||
"notifications.column_settings.mention": "Помињања:",
|
"notifications.column_settings.mention": "Помињања:",
|
||||||
|
|
|
@ -298,7 +298,6 @@
|
||||||
"filter_modal.select_filter.title": "Filtrera detta inlägg",
|
"filter_modal.select_filter.title": "Filtrera detta inlägg",
|
||||||
"filter_modal.title.status": "Filtrera ett inlägg",
|
"filter_modal.title.status": "Filtrera ett inlägg",
|
||||||
"filtered_notifications_banner.pending_requests": "Aviseringar från {count, plural, =0 {ingen} one {en person} other {# personer}} du kanske känner",
|
"filtered_notifications_banner.pending_requests": "Aviseringar från {count, plural, =0 {ingen} one {en person} other {# personer}} du kanske känner",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {privat omnämnande} other {privat omnämnande}}",
|
|
||||||
"filtered_notifications_banner.title": "Filtrerade aviseringar",
|
"filtered_notifications_banner.title": "Filtrerade aviseringar",
|
||||||
"firehose.all": "Allt",
|
"firehose.all": "Allt",
|
||||||
"firehose.local": "Denna server",
|
"firehose.local": "Denna server",
|
||||||
|
|
|
@ -298,7 +298,6 @@
|
||||||
"filter_modal.select_filter.title": "กรองโพสต์นี้",
|
"filter_modal.select_filter.title": "กรองโพสต์นี้",
|
||||||
"filter_modal.title.status": "กรองโพสต์",
|
"filter_modal.title.status": "กรองโพสต์",
|
||||||
"filtered_notifications_banner.pending_requests": "การแจ้งเตือนจาก {count, plural, =0 {ไม่มีใคร} other {# คน}} ที่คุณอาจรู้จัก",
|
"filtered_notifications_banner.pending_requests": "การแจ้งเตือนจาก {count, plural, =0 {ไม่มีใคร} other {# คน}} ที่คุณอาจรู้จัก",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, other {การกล่าวถึงแบบส่วนตัว}}",
|
|
||||||
"filtered_notifications_banner.title": "การแจ้งเตือนที่กรองอยู่",
|
"filtered_notifications_banner.title": "การแจ้งเตือนที่กรองอยู่",
|
||||||
"firehose.all": "ทั้งหมด",
|
"firehose.all": "ทั้งหมด",
|
||||||
"firehose.local": "เซิร์ฟเวอร์นี้",
|
"firehose.local": "เซิร์ฟเวอร์นี้",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "Mevcut bir kategoriyi kullan veya yeni bir tane oluştur",
|
"filter_modal.select_filter.subtitle": "Mevcut bir kategoriyi kullan veya yeni bir tane oluştur",
|
||||||
"filter_modal.select_filter.title": "Bu gönderiyi süzgeçle",
|
"filter_modal.select_filter.title": "Bu gönderiyi süzgeçle",
|
||||||
"filter_modal.title.status": "Bir gönderi süzgeçle",
|
"filter_modal.title.status": "Bir gönderi süzgeçle",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {bahsetme} other {bahsetme}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Bildiğiniz {count, plural, =0 {hiç kimseden} one {bir kişiden} other {# kişiden}} bildirim",
|
"filtered_notifications_banner.pending_requests": "Bildiğiniz {count, plural, =0 {hiç kimseden} one {bir kişiden} other {# kişiden}} bildirim",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {özel değinme} other {özel değinme}}",
|
|
||||||
"filtered_notifications_banner.title": "Filtrelenmiş bildirimler",
|
"filtered_notifications_banner.title": "Filtrelenmiş bildirimler",
|
||||||
"firehose.all": "Tümü",
|
"firehose.all": "Tümü",
|
||||||
"firehose.local": "Bu sunucu",
|
"firehose.local": "Bu sunucu",
|
||||||
|
@ -468,7 +468,7 @@
|
||||||
"notification.favourite": "{name} gönderinizi beğendi",
|
"notification.favourite": "{name} gönderinizi beğendi",
|
||||||
"notification.follow": "{name} seni takip etti",
|
"notification.follow": "{name} seni takip etti",
|
||||||
"notification.follow_request": "{name} size takip isteği gönderdi",
|
"notification.follow_request": "{name} size takip isteği gönderdi",
|
||||||
"notification.mention": "{name} sana değindi",
|
"notification.mention": "{name} senden bahsetti",
|
||||||
"notification.own_poll": "Anketiniz sona erdi",
|
"notification.own_poll": "Anketiniz sona erdi",
|
||||||
"notification.poll": "Oy verdiğiniz bir anket sona erdi",
|
"notification.poll": "Oy verdiğiniz bir anket sona erdi",
|
||||||
"notification.reblog": "{name} gönderini yeniden paylaştı",
|
"notification.reblog": "{name} gönderini yeniden paylaştı",
|
||||||
|
@ -493,7 +493,7 @@
|
||||||
"notifications.column_settings.filter_bar.category": "Hızlı filtre çubuğu",
|
"notifications.column_settings.filter_bar.category": "Hızlı filtre çubuğu",
|
||||||
"notifications.column_settings.follow": "Yeni takipçiler:",
|
"notifications.column_settings.follow": "Yeni takipçiler:",
|
||||||
"notifications.column_settings.follow_request": "Yeni takip istekleri:",
|
"notifications.column_settings.follow_request": "Yeni takip istekleri:",
|
||||||
"notifications.column_settings.mention": "Değinmeler:",
|
"notifications.column_settings.mention": "Bahsetmeler:",
|
||||||
"notifications.column_settings.poll": "Anket sonuçları:",
|
"notifications.column_settings.poll": "Anket sonuçları:",
|
||||||
"notifications.column_settings.push": "Anlık bildirimler",
|
"notifications.column_settings.push": "Anlık bildirimler",
|
||||||
"notifications.column_settings.reblog": "Yeniden paylaşanlar:",
|
"notifications.column_settings.reblog": "Yeniden paylaşanlar:",
|
||||||
|
@ -507,7 +507,7 @@
|
||||||
"notifications.filter.boosts": "Yeniden paylaşımlar",
|
"notifications.filter.boosts": "Yeniden paylaşımlar",
|
||||||
"notifications.filter.favourites": "Favorilerin",
|
"notifications.filter.favourites": "Favorilerin",
|
||||||
"notifications.filter.follows": "Takip edilenler",
|
"notifications.filter.follows": "Takip edilenler",
|
||||||
"notifications.filter.mentions": "Değinmeler",
|
"notifications.filter.mentions": "Bahsetmeler",
|
||||||
"notifications.filter.polls": "Anket sonuçları",
|
"notifications.filter.polls": "Anket sonuçları",
|
||||||
"notifications.filter.statuses": "Takip ettiğiniz kişilerden gelen güncellemeler",
|
"notifications.filter.statuses": "Takip ettiğiniz kişilerden gelen güncellemeler",
|
||||||
"notifications.grant_permission": "İzin ver.",
|
"notifications.grant_permission": "İzin ver.",
|
||||||
|
|
|
@ -287,7 +287,6 @@
|
||||||
"filter_modal.select_filter.title": "Фільтрувати цей допис",
|
"filter_modal.select_filter.title": "Фільтрувати цей допис",
|
||||||
"filter_modal.title.status": "Фільтрувати допис",
|
"filter_modal.title.status": "Фільтрувати допис",
|
||||||
"filtered_notifications_banner.pending_requests": "Сповіщення від {count, plural, =0 {жодної особи} one {однієї особи} few {# осіб} many {# осіб} other {# особи}}, котрих ви можете знати",
|
"filtered_notifications_banner.pending_requests": "Сповіщення від {count, plural, =0 {жодної особи} one {однієї особи} few {# осіб} many {# осіб} other {# особи}}, котрих ви можете знати",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {приватна згадка} few {приватні згадки} many {приватні згадки} other {приватна згадка}}",
|
|
||||||
"filtered_notifications_banner.title": "Відфільтровані сповіщення",
|
"filtered_notifications_banner.title": "Відфільтровані сповіщення",
|
||||||
"firehose.all": "Всі",
|
"firehose.all": "Всі",
|
||||||
"firehose.local": "Цей сервер",
|
"firehose.local": "Цей сервер",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "Sử dụng một danh mục hiện có hoặc tạo một danh mục mới",
|
"filter_modal.select_filter.subtitle": "Sử dụng một danh mục hiện có hoặc tạo một danh mục mới",
|
||||||
"filter_modal.select_filter.title": "Lọc tút này",
|
"filter_modal.select_filter.title": "Lọc tút này",
|
||||||
"filter_modal.title.status": "Lọc một tút",
|
"filter_modal.title.status": "Lọc một tút",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, other {lượt nhắc}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Thông báo từ {count, plural, =0 {không ai} other {# người}} bạn có thể biết",
|
"filtered_notifications_banner.pending_requests": "Thông báo từ {count, plural, =0 {không ai} other {# người}} bạn có thể biết",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, other {lượt nhắc}}",
|
|
||||||
"filtered_notifications_banner.title": "Thông báo đã lọc",
|
"filtered_notifications_banner.title": "Thông báo đã lọc",
|
||||||
"firehose.all": "Toàn bộ",
|
"firehose.all": "Toàn bộ",
|
||||||
"firehose.local": "Máy chủ này",
|
"firehose.local": "Máy chủ này",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "使用一个已存在类别,或创建一个新类别",
|
"filter_modal.select_filter.subtitle": "使用一个已存在类别,或创建一个新类别",
|
||||||
"filter_modal.select_filter.title": "过滤此嘟文",
|
"filter_modal.select_filter.title": "过滤此嘟文",
|
||||||
"filter_modal.title.status": "过滤一条嘟文",
|
"filter_modal.title.status": "过滤一条嘟文",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, other {提及}}",
|
||||||
"filtered_notifications_banner.pending_requests": "来自你可能认识的 {count, plural, =0 {0 个人} other {# 个人}}的通知",
|
"filtered_notifications_banner.pending_requests": "来自你可能认识的 {count, plural, =0 {0 个人} other {# 个人}}的通知",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, other {私下提及}}",
|
|
||||||
"filtered_notifications_banner.title": "通知(已过滤)",
|
"filtered_notifications_banner.title": "通知(已过滤)",
|
||||||
"firehose.all": "全部",
|
"firehose.all": "全部",
|
||||||
"firehose.local": "此服务器",
|
"firehose.local": "此服务器",
|
||||||
|
|
|
@ -298,7 +298,6 @@
|
||||||
"filter_modal.select_filter.title": "過濾此帖文",
|
"filter_modal.select_filter.title": "過濾此帖文",
|
||||||
"filter_modal.title.status": "過濾一則帖文",
|
"filter_modal.title.status": "過濾一則帖文",
|
||||||
"filtered_notifications_banner.pending_requests": "來自 {count, plural, =0 {0 位} other {# 位}}你可能認識的人的通知",
|
"filtered_notifications_banner.pending_requests": "來自 {count, plural, =0 {0 位} other {# 位}}你可能認識的人的通知",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {則私人提及} other {則私人提及}}",
|
|
||||||
"filtered_notifications_banner.title": "已過濾之通知",
|
"filtered_notifications_banner.title": "已過濾之通知",
|
||||||
"firehose.all": "全部",
|
"firehose.all": "全部",
|
||||||
"firehose.local": "本伺服器",
|
"firehose.local": "本伺服器",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "使用既有的類別或是新增",
|
"filter_modal.select_filter.subtitle": "使用既有的類別或是新增",
|
||||||
"filter_modal.select_filter.title": "過濾此嘟文",
|
"filter_modal.select_filter.title": "過濾此嘟文",
|
||||||
"filter_modal.title.status": "過濾一則嘟文",
|
"filter_modal.title.status": "過濾一則嘟文",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, other {# 則提及}}",
|
||||||
"filtered_notifications_banner.pending_requests": "來自您可能認識的 {count, plural, =0 {0 人} other {# 人}} 之通知",
|
"filtered_notifications_banner.pending_requests": "來自您可能認識的 {count, plural, =0 {0 人} other {# 人}} 之通知",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, other {# 則私訊}}",
|
|
||||||
"filtered_notifications_banner.title": "已過濾之通知",
|
"filtered_notifications_banner.title": "已過濾之通知",
|
||||||
"firehose.all": "全部",
|
"firehose.all": "全部",
|
||||||
"firehose.local": "本站",
|
"firehose.local": "本站",
|
||||||
|
|
|
@ -35,7 +35,7 @@ class AccountStatusesFilter
|
||||||
return Status.none if account.unavailable?
|
return Status.none if account.unavailable?
|
||||||
|
|
||||||
if anonymous?
|
if anonymous?
|
||||||
account.statuses.not_local_only.where(visibility: %i(public unlisted))
|
account.statuses.not_local_only.distributable_visibility
|
||||||
elsif author?
|
elsif author?
|
||||||
account.statuses.all # NOTE: #merge! does not work without the #all
|
account.statuses.all # NOTE: #merge! does not work without the #all
|
||||||
elsif blocked?
|
elsif blocked?
|
||||||
|
|
|
@ -16,7 +16,7 @@ class Admin::StatusFilter
|
||||||
end
|
end
|
||||||
|
|
||||||
def results
|
def results
|
||||||
scope = @account.statuses.where(visibility: [:public, :unlisted])
|
scope = @account.statuses.distributable_visibility
|
||||||
|
|
||||||
params.each do |key, value|
|
params.each do |key, value|
|
||||||
next if IGNORED_PARAMS.include?(key.to_s)
|
next if IGNORED_PARAMS.include?(key.to_s)
|
||||||
|
|
|
@ -59,11 +59,13 @@ class Announcement < ApplicationRecord
|
||||||
end
|
end
|
||||||
|
|
||||||
def statuses
|
def statuses
|
||||||
@statuses ||= if status_ids.nil?
|
@statuses ||= begin
|
||||||
[]
|
if status_ids.nil?
|
||||||
else
|
[]
|
||||||
Status.where(id: status_ids, visibility: [:public, :unlisted])
|
else
|
||||||
end
|
Status.with_includes.distributable_visibility.where(id: status_ids)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def tags
|
def tags
|
||||||
|
|
|
@ -35,40 +35,11 @@ module Account::Counters
|
||||||
raise ArgumentError, "Invalid key #{key}" unless ALLOWED_COUNTER_KEYS.include?(key)
|
raise ArgumentError, "Invalid key #{key}" unless ALLOWED_COUNTER_KEYS.include?(key)
|
||||||
raise ArgumentError, 'Do not call update_count! on dirty objects' if association(:account_stat).loaded? && account_stat&.changed? && account_stat.changed_attribute_names_to_save == %w(id)
|
raise ArgumentError, 'Do not call update_count! on dirty objects' if association(:account_stat).loaded? && account_stat&.changed? && account_stat.changed_attribute_names_to_save == %w(id)
|
||||||
|
|
||||||
value = value.to_i
|
result = updated_account_stat(key, value.to_i)
|
||||||
default_value = value.positive? ? value : 0
|
|
||||||
|
|
||||||
# We do an upsert using manually written SQL, as Rails' upsert method does
|
|
||||||
# not seem to support writing expressions in the UPDATE clause, but only
|
|
||||||
# re-insert the provided values instead.
|
|
||||||
# Even ARel seem to be missing proper handling of upserts.
|
|
||||||
sql = if value.positive? && key == :statuses_count
|
|
||||||
<<-SQL.squish
|
|
||||||
INSERT INTO account_stats(account_id, #{key}, created_at, updated_at, last_status_at)
|
|
||||||
VALUES (:account_id, :default_value, now(), now(), now())
|
|
||||||
ON CONFLICT (account_id) DO UPDATE
|
|
||||||
SET #{key} = account_stats.#{key} + :value,
|
|
||||||
last_status_at = now(),
|
|
||||||
updated_at = now()
|
|
||||||
RETURNING id;
|
|
||||||
SQL
|
|
||||||
else
|
|
||||||
<<-SQL.squish
|
|
||||||
INSERT INTO account_stats(account_id, #{key}, created_at, updated_at)
|
|
||||||
VALUES (:account_id, :default_value, now(), now())
|
|
||||||
ON CONFLICT (account_id) DO UPDATE
|
|
||||||
SET #{key} = account_stats.#{key} + :value,
|
|
||||||
updated_at = now()
|
|
||||||
RETURNING id;
|
|
||||||
SQL
|
|
||||||
end
|
|
||||||
|
|
||||||
sql = AccountStat.sanitize_sql([sql, account_id: id, default_value: default_value, value: value])
|
|
||||||
account_stat_id = AccountStat.connection.exec_query(sql)[0]['id']
|
|
||||||
|
|
||||||
# Reload account_stat if it was loaded, taking into account newly-created unsaved records
|
# Reload account_stat if it was loaded, taking into account newly-created unsaved records
|
||||||
if association(:account_stat).loaded?
|
if association(:account_stat).loaded?
|
||||||
account_stat.id = account_stat_id if account_stat.new_record?
|
account_stat.id = result.first['id'] if account_stat.new_record?
|
||||||
account_stat.reload
|
account_stat.reload
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -79,6 +50,28 @@ module Account::Counters
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def updated_account_stat(key, value)
|
||||||
|
AccountStat.upsert(
|
||||||
|
initial_values(key, value),
|
||||||
|
on_duplicate: Arel.sql(
|
||||||
|
duplicate_values(key, value).join(', ')
|
||||||
|
),
|
||||||
|
unique_by: :account_id
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
def initial_values(key, value)
|
||||||
|
{ :account_id => id, key => [value, 0].max }.tap do |values|
|
||||||
|
values.merge!(last_status_at: Time.current) if key == :statuses_count
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def duplicate_values(key, value)
|
||||||
|
["#{key} = (account_stats.#{key} + #{value})", 'updated_at = CURRENT_TIMESTAMP'].tap do |values|
|
||||||
|
values << 'last_status_at = CURRENT_TIMESTAMP' if key == :statuses_count && value.positive?
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def save_account_stat
|
def save_account_stat
|
||||||
return unless association(:account_stat).loaded? && account_stat&.changed?
|
return unless association(:account_stat).loaded? && account_stat&.changed?
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ module Status::ThreadingConcern
|
||||||
end
|
end
|
||||||
|
|
||||||
def self_replies(limit)
|
def self_replies(limit)
|
||||||
account.statuses.where(in_reply_to_id: id, visibility: [:public, :unlisted]).reorder(id: :asc).limit(limit)
|
account.statuses.distributable_visibility.where(in_reply_to_id: id).reorder(id: :asc).limit(limit)
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
|
@ -74,6 +74,6 @@ class FeaturedTag < ApplicationRecord
|
||||||
end
|
end
|
||||||
|
|
||||||
def visible_tagged_account_statuses
|
def visible_tagged_account_statuses
|
||||||
account.statuses.where(visibility: %i(public unlisted)).tagged_with(tag)
|
account.statuses.distributable_visibility.tagged_with(tag)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -124,6 +124,7 @@ class Status < ApplicationRecord
|
||||||
scope :tagged_with_none, lambda { |tag_ids|
|
scope :tagged_with_none, lambda { |tag_ids|
|
||||||
where('NOT EXISTS (SELECT * FROM statuses_tags forbidden WHERE forbidden.status_id = statuses.id AND forbidden.tag_id IN (?))', tag_ids)
|
where('NOT EXISTS (SELECT * FROM statuses_tags forbidden WHERE forbidden.status_id = statuses.id AND forbidden.tag_id IN (?))', tag_ids)
|
||||||
}
|
}
|
||||||
|
scope :distributable_visibility, -> { where(visibility: %i(public unlisted)) }
|
||||||
scope :list_eligible_visibility, -> { where(visibility: %i(public unlisted private)) }
|
scope :list_eligible_visibility, -> { where(visibility: %i(public unlisted private)) }
|
||||||
|
|
||||||
scope :not_local_only, -> { where(local_only: [false, nil]) }
|
scope :not_local_only, -> { where(local_only: [false, nil]) }
|
||||||
|
|
|
@ -9,7 +9,7 @@ class REST::AnnouncementSerializer < ActiveModel::Serializer
|
||||||
attribute :read, if: :current_user?
|
attribute :read, if: :current_user?
|
||||||
|
|
||||||
has_many :mentions
|
has_many :mentions
|
||||||
has_many :statuses
|
has_many :statuses, serializer: REST::StatusSerializer
|
||||||
has_many :tags, serializer: REST::StatusSerializer::TagSerializer
|
has_many :tags, serializer: REST::StatusSerializer::TagSerializer
|
||||||
has_many :emojis, serializer: REST::CustomEmojiSerializer
|
has_many :emojis, serializer: REST::CustomEmojiSerializer
|
||||||
has_many :reactions, serializer: REST::ReactionSerializer
|
has_many :reactions, serializer: REST::ReactionSerializer
|
||||||
|
@ -49,16 +49,4 @@ class REST::AnnouncementSerializer < ActiveModel::Serializer
|
||||||
object.pretty_acct
|
object.pretty_acct
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class StatusSerializer < ActiveModel::Serializer
|
|
||||||
attributes :id, :url
|
|
||||||
|
|
||||||
def id
|
|
||||||
object.id.to_s
|
|
||||||
end
|
|
||||||
|
|
||||||
def url
|
|
||||||
ActivityPub::TagManager.instance.url_for(object)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -609,6 +609,9 @@ sr-Latn:
|
||||||
actions_description_html: Odlučite koju radnju da sprovedete radi rešavanja ove prijave. Ukoliko sprovedete kaznenu radnju protiv prijavljenog naloga, vlasnik naloga će biti obavešten putem i-mejla, osim ukoliko oznaka <strong>„Nepoželjne poruke”</strong> nije odabrana.
|
actions_description_html: Odlučite koju radnju da sprovedete radi rešavanja ove prijave. Ukoliko sprovedete kaznenu radnju protiv prijavljenog naloga, vlasnik naloga će biti obavešten putem i-mejla, osim ukoliko oznaka <strong>„Nepoželjne poruke”</strong> nije odabrana.
|
||||||
actions_description_remote_html: Odlučite koju radnju da preduzmete radi rešavanja ove prijave. Ovo će uticati samo na to kako <strong>Vaš</strong> server komunicira sa ovim udaljenim nalogom i obrađuje njegov sadržaj.
|
actions_description_remote_html: Odlučite koju radnju da preduzmete radi rešavanja ove prijave. Ovo će uticati samo na to kako <strong>Vaš</strong> server komunicira sa ovim udaljenim nalogom i obrađuje njegov sadržaj.
|
||||||
add_to_report: Dodaj još u prijavu
|
add_to_report: Dodaj još u prijavu
|
||||||
|
already_suspended_badges:
|
||||||
|
local: Već suspendovan na ovom serveru
|
||||||
|
remote: Već suspendovan na njihovom serveru
|
||||||
are_you_sure: Da li ste sigurni?
|
are_you_sure: Da li ste sigurni?
|
||||||
assign_to_self: Dodeli meni
|
assign_to_self: Dodeli meni
|
||||||
assigned: Dodeljeni moderator
|
assigned: Dodeljeni moderator
|
||||||
|
@ -1678,13 +1681,26 @@ sr-Latn:
|
||||||
import: Uvoz
|
import: Uvoz
|
||||||
import_and_export: Uvoz i izvoz
|
import_and_export: Uvoz i izvoz
|
||||||
migrate: Prebacivanje naloga
|
migrate: Prebacivanje naloga
|
||||||
|
notifications: Obaveštenja e-poštom
|
||||||
preferences: Podešavanja
|
preferences: Podešavanja
|
||||||
profile: Javni profil
|
profile: Javni profil
|
||||||
relationships: Praćenja i pratioci
|
relationships: Praćenja i pratioci
|
||||||
|
severed_relationships: Prekinute veze
|
||||||
statuses_cleanup: Automatsko brisanje objava
|
statuses_cleanup: Automatsko brisanje objava
|
||||||
strikes: Moderacijski prestupi
|
strikes: Moderacijski prestupi
|
||||||
two_factor_authentication: Dvofaktorska identifikacija
|
two_factor_authentication: Dvofaktorska identifikacija
|
||||||
webauthn_authentication: Sigurnosni ključevi
|
webauthn_authentication: Sigurnosni ključevi
|
||||||
|
severed_relationships:
|
||||||
|
download: Preuzmi (%{count})
|
||||||
|
event_type:
|
||||||
|
account_suspension: Suspenzija naloga (%{target_name})
|
||||||
|
domain_block: Suspenzija servera (%{target_name})
|
||||||
|
user_domain_block: Blokirali ste %{target_name}
|
||||||
|
lost_followers: Izgubljeni pratioci
|
||||||
|
lost_follows: Izgubljena praćenja
|
||||||
|
preamble: Možete izgubiti praćenja i pratioce kada blokirate domen ili kada vaši moderatori odluče da suspenduju udaljeni server. Kada se to desi, moći ćete da preuzmete liste prekinutih veza, koje treba pregledati i eventualno uvesti na drugi server.
|
||||||
|
purged: Administratori vašeg servera su obrisali informacije o ovom serveru.
|
||||||
|
type: Događaj
|
||||||
statuses:
|
statuses:
|
||||||
attached:
|
attached:
|
||||||
audio:
|
audio:
|
||||||
|
@ -1784,6 +1800,7 @@ sr-Latn:
|
||||||
contrast: Veliki kontrast
|
contrast: Veliki kontrast
|
||||||
default: Mastodon (tamna)
|
default: Mastodon (tamna)
|
||||||
mastodon-light: Mastodon (svetla)
|
mastodon-light: Mastodon (svetla)
|
||||||
|
system: Automatski (korišćenje sistemske teme)
|
||||||
time:
|
time:
|
||||||
formats:
|
formats:
|
||||||
default: "%d %b %Y, %H:%M"
|
default: "%d %b %Y, %H:%M"
|
||||||
|
@ -1896,6 +1913,10 @@ sr-Latn:
|
||||||
follows_subtitle: Pratite dobro poznate naloge
|
follows_subtitle: Pratite dobro poznate naloge
|
||||||
follows_title: Koga pratiti
|
follows_title: Koga pratiti
|
||||||
follows_view_more: Pogledajte još ljudi za praćenje
|
follows_view_more: Pogledajte još ljudi za praćenje
|
||||||
|
hashtags_recent_count:
|
||||||
|
few: "%{people} osobe u poslednja 2 dana"
|
||||||
|
one: "%{people} osoba u poslednja 2 dana"
|
||||||
|
other: "%{people} osoba u poslednja 2 dana"
|
||||||
hashtags_subtitle: Istražite šta je u trendu u poslednja 2 dana
|
hashtags_subtitle: Istražite šta je u trendu u poslednja 2 dana
|
||||||
hashtags_title: Heš oznake u trendu
|
hashtags_title: Heš oznake u trendu
|
||||||
hashtags_view_more: Pogledajte još heš oznaka u trendu
|
hashtags_view_more: Pogledajte još heš oznaka u trendu
|
||||||
|
|
|
@ -609,6 +609,9 @@ sr:
|
||||||
actions_description_html: Одлучите коју радњу да спроведете ради решавања ове пријаве. Уколико спроведете казнену радњу против пријављеног налога, власник налога ће бити обавештен путем и-мејла, осим уколико ознака <strong>„Непожељне поруке”</strong> није одабрана.
|
actions_description_html: Одлучите коју радњу да спроведете ради решавања ове пријаве. Уколико спроведете казнену радњу против пријављеног налога, власник налога ће бити обавештен путем и-мејла, осим уколико ознака <strong>„Непожељне поруке”</strong> није одабрана.
|
||||||
actions_description_remote_html: Одлучите коју радњу да предузмете ради решавања ове пријаве. Ово ће утицати само на то како <strong>Ваш</strong> сервер комуницира са овим удаљеним налогом и обрађује његов садржај.
|
actions_description_remote_html: Одлучите коју радњу да предузмете ради решавања ове пријаве. Ово ће утицати само на то како <strong>Ваш</strong> сервер комуницира са овим удаљеним налогом и обрађује његов садржај.
|
||||||
add_to_report: Додај још у пријаву
|
add_to_report: Додај још у пријаву
|
||||||
|
already_suspended_badges:
|
||||||
|
local: Већ суспендован на овом серверу
|
||||||
|
remote: Већ суспендован на њиховом серверу
|
||||||
are_you_sure: Да ли сте сигурни?
|
are_you_sure: Да ли сте сигурни?
|
||||||
assign_to_self: Додели мени
|
assign_to_self: Додели мени
|
||||||
assigned: Додељени модератор
|
assigned: Додељени модератор
|
||||||
|
@ -1678,13 +1681,26 @@ sr:
|
||||||
import: Увоз
|
import: Увоз
|
||||||
import_and_export: Увоз и извоз
|
import_and_export: Увоз и извоз
|
||||||
migrate: Пребацивање налога
|
migrate: Пребацивање налога
|
||||||
|
notifications: Обавештења е-поштом
|
||||||
preferences: Подешавања
|
preferences: Подешавања
|
||||||
profile: Јавни профил
|
profile: Јавни профил
|
||||||
relationships: Праћења и пратиоци
|
relationships: Праћења и пратиоци
|
||||||
|
severed_relationships: Прекинуте везе
|
||||||
statuses_cleanup: Аутоматско брисање објава
|
statuses_cleanup: Аутоматско брисање објава
|
||||||
strikes: Модерацијски преступи
|
strikes: Модерацијски преступи
|
||||||
two_factor_authentication: Двофакторска идентификација
|
two_factor_authentication: Двофакторска идентификација
|
||||||
webauthn_authentication: Сигурносни кључеви
|
webauthn_authentication: Сигурносни кључеви
|
||||||
|
severed_relationships:
|
||||||
|
download: Преузми (%{count})
|
||||||
|
event_type:
|
||||||
|
account_suspension: Суспензија налога (%{target_name})
|
||||||
|
domain_block: Суспензија сервера (%{target_name})
|
||||||
|
user_domain_block: Блокирали сте %{target_name}
|
||||||
|
lost_followers: Изгубљени пратиоци
|
||||||
|
lost_follows: Изгубљена праћења
|
||||||
|
preamble: Можете изгубити праћења и пратиоце када блокирате домен или када ваши модератори одлуче да суспендују удаљени сервер. Када се то деси, моћи ћете да преузмете листе прекинутих веза, које треба прегледати и евентуално увести на други сервер.
|
||||||
|
purged: Администратори вашег сервера су обрисали информације о овом серверу.
|
||||||
|
type: Догађај
|
||||||
statuses:
|
statuses:
|
||||||
attached:
|
attached:
|
||||||
audio:
|
audio:
|
||||||
|
@ -1784,6 +1800,7 @@ sr:
|
||||||
contrast: Велики контраст
|
contrast: Велики контраст
|
||||||
default: Mastodon (тамна)
|
default: Mastodon (тамна)
|
||||||
mastodon-light: Mastodon (светла)
|
mastodon-light: Mastodon (светла)
|
||||||
|
system: Аутоматски (коришћење системске теме)
|
||||||
time:
|
time:
|
||||||
formats:
|
formats:
|
||||||
default: "%d %b %Y, %H:%M"
|
default: "%d %b %Y, %H:%M"
|
||||||
|
|
|
@ -7,5 +7,7 @@ if Rails.env.development?
|
||||||
admin = Account.where(username: 'admin').first_or_initialize(username: 'admin')
|
admin = Account.where(username: 'admin').first_or_initialize(username: 'admin')
|
||||||
admin.save(validate: false)
|
admin.save(validate: false)
|
||||||
|
|
||||||
User.where(email: "admin@#{domain}").first_or_initialize(email: "admin@#{domain}", password: 'mastodonadmin', password_confirmation: 'mastodonadmin', confirmed_at: Time.now.utc, role: UserRole.find_by(name: 'Owner'), account: admin, agreement: true, approved: true).save!
|
user = User.where(email: "admin@#{domain}").first_or_initialize(email: "admin@#{domain}", password: 'mastodonadmin', password_confirmation: 'mastodonadmin', confirmed_at: Time.now.utc, role: UserRole.find_by(name: 'Owner'), account: admin, agreement: true, approved: true)
|
||||||
|
user.save!
|
||||||
|
user.approve!
|
||||||
end
|
end
|
||||||
|
|
|
@ -254,7 +254,7 @@ module Mastodon::CLI
|
||||||
|
|
||||||
say 'Deduplicating accounts… for local accounts, you will be asked to chose which account to keep unchanged.'
|
say 'Deduplicating accounts… for local accounts, you will be asked to chose which account to keep unchanged.'
|
||||||
|
|
||||||
find_duplicate_accounts.each do |row|
|
duplicate_record_ids(:accounts, "lower(username), COALESCE(lower(domain), '')").each do |row|
|
||||||
accounts = Account.where(id: row['ids'].split(','))
|
accounts = Account.where(id: row['ids'].split(','))
|
||||||
|
|
||||||
if accounts.first.local?
|
if accounts.first.local?
|
||||||
|
@ -306,7 +306,7 @@ module Mastodon::CLI
|
||||||
end
|
end
|
||||||
|
|
||||||
def deduplicate_users_process_email
|
def deduplicate_users_process_email
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM users GROUP BY email HAVING count(*) > 1").each do |row|
|
duplicate_record_ids(:users, 'email').each do |row|
|
||||||
users = User.where(id: row['ids'].split(',')).order(updated_at: :desc).includes(:account).to_a
|
users = User.where(id: row['ids'].split(',')).order(updated_at: :desc).includes(:account).to_a
|
||||||
ref_user = users.shift
|
ref_user = users.shift
|
||||||
say "Multiple users registered with e-mail address #{ref_user.email}.", :yellow
|
say "Multiple users registered with e-mail address #{ref_user.email}.", :yellow
|
||||||
|
@ -320,7 +320,7 @@ module Mastodon::CLI
|
||||||
end
|
end
|
||||||
|
|
||||||
def deduplicate_users_process_confirmation_token
|
def deduplicate_users_process_confirmation_token
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM users WHERE confirmation_token IS NOT NULL GROUP BY confirmation_token HAVING count(*) > 1").each do |row|
|
duplicate_record_ids_without_nulls(:users, 'confirmation_token').each do |row|
|
||||||
users = User.where(id: row['ids'].split(',')).order(created_at: :desc).includes(:account).to_a.drop(1)
|
users = User.where(id: row['ids'].split(',')).order(created_at: :desc).includes(:account).to_a.drop(1)
|
||||||
say "Unsetting confirmation token for those accounts: #{users.map { |user| user.account.acct }.join(', ')}", :yellow
|
say "Unsetting confirmation token for those accounts: #{users.map { |user| user.account.acct }.join(', ')}", :yellow
|
||||||
|
|
||||||
|
@ -332,7 +332,7 @@ module Mastodon::CLI
|
||||||
|
|
||||||
def deduplicate_users_process_remember_token
|
def deduplicate_users_process_remember_token
|
||||||
if migrator_version < 2022_01_18_183010
|
if migrator_version < 2022_01_18_183010
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM users WHERE remember_token IS NOT NULL GROUP BY remember_token HAVING count(*) > 1").each do |row|
|
duplicate_record_ids_without_nulls(:users, 'remember_token').each do |row|
|
||||||
users = User.where(id: row['ids'].split(',')).order(updated_at: :desc).to_a.drop(1)
|
users = User.where(id: row['ids'].split(',')).order(updated_at: :desc).to_a.drop(1)
|
||||||
say "Unsetting remember token for those accounts: #{users.map { |user| user.account.acct }.join(', ')}", :yellow
|
say "Unsetting remember token for those accounts: #{users.map { |user| user.account.acct }.join(', ')}", :yellow
|
||||||
|
|
||||||
|
@ -344,7 +344,7 @@ module Mastodon::CLI
|
||||||
end
|
end
|
||||||
|
|
||||||
def deduplicate_users_process_password_token
|
def deduplicate_users_process_password_token
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM users WHERE reset_password_token IS NOT NULL GROUP BY reset_password_token HAVING count(*) > 1").each do |row|
|
duplicate_record_ids_without_nulls(:users, 'reset_password_token').each do |row|
|
||||||
users = User.where(id: row['ids'].split(',')).order(updated_at: :desc).includes(:account).to_a.drop(1)
|
users = User.where(id: row['ids'].split(',')).order(updated_at: :desc).includes(:account).to_a.drop(1)
|
||||||
say "Unsetting password reset token for those accounts: #{users.map { |user| user.account.acct }.join(', ')}", :yellow
|
say "Unsetting password reset token for those accounts: #{users.map { |user| user.account.acct }.join(', ')}", :yellow
|
||||||
|
|
||||||
|
@ -358,7 +358,7 @@ module Mastodon::CLI
|
||||||
remove_index_if_exists!(:account_domain_blocks, 'index_account_domain_blocks_on_account_id_and_domain')
|
remove_index_if_exists!(:account_domain_blocks, 'index_account_domain_blocks_on_account_id_and_domain')
|
||||||
|
|
||||||
say 'Removing duplicate account domain blocks…'
|
say 'Removing duplicate account domain blocks…'
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM account_domain_blocks GROUP BY account_id, domain HAVING count(*) > 1").each do |row|
|
duplicate_record_ids(:account_domain_blocks, 'account_id, domain').each do |row|
|
||||||
AccountDomainBlock.where(id: row['ids'].split(',').drop(1)).delete_all
|
AccountDomainBlock.where(id: row['ids'].split(',').drop(1)).delete_all
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -372,7 +372,7 @@ module Mastodon::CLI
|
||||||
remove_index_if_exists!(:account_identity_proofs, 'index_account_proofs_on_account_and_provider_and_username')
|
remove_index_if_exists!(:account_identity_proofs, 'index_account_proofs_on_account_and_provider_and_username')
|
||||||
|
|
||||||
say 'Removing duplicate account identity proofs…'
|
say 'Removing duplicate account identity proofs…'
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM account_identity_proofs GROUP BY account_id, provider, provider_username HAVING count(*) > 1").each do |row|
|
duplicate_record_ids(:account_identity_proofs, 'account_id, provider, provider_username').each do |row|
|
||||||
AccountIdentityProof.where(id: row['ids'].split(',')).order(id: :desc).to_a.drop(1).each(&:destroy)
|
AccountIdentityProof.where(id: row['ids'].split(',')).order(id: :desc).to_a.drop(1).each(&:destroy)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -386,7 +386,7 @@ module Mastodon::CLI
|
||||||
remove_index_if_exists!(:announcement_reactions, 'index_announcement_reactions_on_account_id_and_announcement_id')
|
remove_index_if_exists!(:announcement_reactions, 'index_announcement_reactions_on_account_id_and_announcement_id')
|
||||||
|
|
||||||
say 'Removing duplicate announcement reactions…'
|
say 'Removing duplicate announcement reactions…'
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM announcement_reactions GROUP BY account_id, announcement_id, name HAVING count(*) > 1").each do |row|
|
duplicate_record_ids(:announcement_reactions, 'account_id, announcement_id, name').each do |row|
|
||||||
AnnouncementReaction.where(id: row['ids'].split(',')).order(id: :desc).to_a.drop(1).each(&:destroy)
|
AnnouncementReaction.where(id: row['ids'].split(',')).order(id: :desc).to_a.drop(1).each(&:destroy)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -398,7 +398,7 @@ module Mastodon::CLI
|
||||||
remove_index_if_exists!(:conversations, 'index_conversations_on_uri')
|
remove_index_if_exists!(:conversations, 'index_conversations_on_uri')
|
||||||
|
|
||||||
say 'Deduplicating conversations…'
|
say 'Deduplicating conversations…'
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM conversations WHERE uri IS NOT NULL GROUP BY uri HAVING count(*) > 1").each do |row|
|
duplicate_record_ids_without_nulls(:conversations, 'uri').each do |row|
|
||||||
conversations = Conversation.where(id: row['ids'].split(',')).order(id: :desc).to_a
|
conversations = Conversation.where(id: row['ids'].split(',')).order(id: :desc).to_a
|
||||||
|
|
||||||
ref_conversation = conversations.shift
|
ref_conversation = conversations.shift
|
||||||
|
@ -421,7 +421,7 @@ module Mastodon::CLI
|
||||||
remove_index_if_exists!(:custom_emojis, 'index_custom_emojis_on_shortcode_and_domain')
|
remove_index_if_exists!(:custom_emojis, 'index_custom_emojis_on_shortcode_and_domain')
|
||||||
|
|
||||||
say 'Deduplicating custom_emojis…'
|
say 'Deduplicating custom_emojis…'
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM custom_emojis GROUP BY shortcode, domain HAVING count(*) > 1").each do |row|
|
duplicate_record_ids(:custom_emojis, 'shortcode, domain').each do |row|
|
||||||
emojis = CustomEmoji.where(id: row['ids'].split(',')).order(id: :desc).to_a
|
emojis = CustomEmoji.where(id: row['ids'].split(',')).order(id: :desc).to_a
|
||||||
|
|
||||||
ref_emoji = emojis.shift
|
ref_emoji = emojis.shift
|
||||||
|
@ -440,7 +440,7 @@ module Mastodon::CLI
|
||||||
remove_index_if_exists!(:custom_emoji_categories, 'index_custom_emoji_categories_on_name')
|
remove_index_if_exists!(:custom_emoji_categories, 'index_custom_emoji_categories_on_name')
|
||||||
|
|
||||||
say 'Deduplicating custom_emoji_categories…'
|
say 'Deduplicating custom_emoji_categories…'
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM custom_emoji_categories GROUP BY name HAVING count(*) > 1").each do |row|
|
duplicate_record_ids(:custom_emoji_categories, 'name').each do |row|
|
||||||
categories = CustomEmojiCategory.where(id: row['ids'].split(',')).order(id: :desc).to_a
|
categories = CustomEmojiCategory.where(id: row['ids'].split(',')).order(id: :desc).to_a
|
||||||
|
|
||||||
ref_category = categories.shift
|
ref_category = categories.shift
|
||||||
|
@ -459,7 +459,7 @@ module Mastodon::CLI
|
||||||
remove_index_if_exists!(:domain_allows, 'index_domain_allows_on_domain')
|
remove_index_if_exists!(:domain_allows, 'index_domain_allows_on_domain')
|
||||||
|
|
||||||
say 'Deduplicating domain_allows…'
|
say 'Deduplicating domain_allows…'
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM domain_allows GROUP BY domain HAVING count(*) > 1").each do |row|
|
duplicate_record_ids(:domain_allows, 'domain').each do |row|
|
||||||
DomainAllow.where(id: row['ids'].split(',')).order(id: :desc).to_a.drop(1).each(&:destroy)
|
DomainAllow.where(id: row['ids'].split(',')).order(id: :desc).to_a.drop(1).each(&:destroy)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -471,7 +471,7 @@ module Mastodon::CLI
|
||||||
remove_index_if_exists!(:domain_blocks, 'index_domain_blocks_on_domain')
|
remove_index_if_exists!(:domain_blocks, 'index_domain_blocks_on_domain')
|
||||||
|
|
||||||
say 'Deduplicating domain_blocks…'
|
say 'Deduplicating domain_blocks…'
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM domain_blocks GROUP BY domain HAVING count(*) > 1").each do |row|
|
duplicate_record_ids(:domain_blocks, 'domain').each do |row|
|
||||||
domain_blocks = DomainBlock.where(id: row['ids'].split(',')).by_severity.reverse.to_a
|
domain_blocks = DomainBlock.where(id: row['ids'].split(',')).by_severity.reverse.to_a
|
||||||
|
|
||||||
reject_media = domain_blocks.any?(&:reject_media?)
|
reject_media = domain_blocks.any?(&:reject_media?)
|
||||||
|
@ -497,7 +497,7 @@ module Mastodon::CLI
|
||||||
remove_index_if_exists!(:unavailable_domains, 'index_unavailable_domains_on_domain')
|
remove_index_if_exists!(:unavailable_domains, 'index_unavailable_domains_on_domain')
|
||||||
|
|
||||||
say 'Deduplicating unavailable_domains…'
|
say 'Deduplicating unavailable_domains…'
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM unavailable_domains GROUP BY domain HAVING count(*) > 1").each do |row|
|
duplicate_record_ids(:unavailable_domains, 'domain').each do |row|
|
||||||
UnavailableDomain.where(id: row['ids'].split(',')).order(id: :desc).to_a.drop(1).each(&:destroy)
|
UnavailableDomain.where(id: row['ids'].split(',')).order(id: :desc).to_a.drop(1).each(&:destroy)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -509,7 +509,7 @@ module Mastodon::CLI
|
||||||
remove_index_if_exists!(:email_domain_blocks, 'index_email_domain_blocks_on_domain')
|
remove_index_if_exists!(:email_domain_blocks, 'index_email_domain_blocks_on_domain')
|
||||||
|
|
||||||
say 'Deduplicating email_domain_blocks…'
|
say 'Deduplicating email_domain_blocks…'
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM email_domain_blocks GROUP BY domain HAVING count(*) > 1").each do |row|
|
duplicate_record_ids(:email_domain_blocks, 'domain').each do |row|
|
||||||
domain_blocks = EmailDomainBlock.where(id: row['ids'].split(',')).order(EmailDomainBlock.arel_table[:parent_id].asc.nulls_first).to_a
|
domain_blocks = EmailDomainBlock.where(id: row['ids'].split(',')).order(EmailDomainBlock.arel_table[:parent_id].asc.nulls_first).to_a
|
||||||
domain_blocks.drop(1).each(&:destroy)
|
domain_blocks.drop(1).each(&:destroy)
|
||||||
end
|
end
|
||||||
|
@ -522,7 +522,7 @@ module Mastodon::CLI
|
||||||
remove_index_if_exists!(:media_attachments, 'index_media_attachments_on_shortcode')
|
remove_index_if_exists!(:media_attachments, 'index_media_attachments_on_shortcode')
|
||||||
|
|
||||||
say 'Deduplicating media_attachments…'
|
say 'Deduplicating media_attachments…'
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM media_attachments WHERE shortcode IS NOT NULL GROUP BY shortcode HAVING count(*) > 1").each do |row|
|
duplicate_record_ids_without_nulls(:media_attachments, 'shortcode').each do |row|
|
||||||
MediaAttachment.where(id: row['ids'].split(',').drop(1)).update_all(shortcode: nil)
|
MediaAttachment.where(id: row['ids'].split(',').drop(1)).update_all(shortcode: nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -538,7 +538,7 @@ module Mastodon::CLI
|
||||||
remove_index_if_exists!(:preview_cards, 'index_preview_cards_on_url')
|
remove_index_if_exists!(:preview_cards, 'index_preview_cards_on_url')
|
||||||
|
|
||||||
say 'Deduplicating preview_cards…'
|
say 'Deduplicating preview_cards…'
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM preview_cards GROUP BY url HAVING count(*) > 1").each do |row|
|
duplicate_record_ids(:preview_cards, 'url').each do |row|
|
||||||
PreviewCard.where(id: row['ids'].split(',')).order(id: :desc).to_a.drop(1).each(&:destroy)
|
PreviewCard.where(id: row['ids'].split(',')).order(id: :desc).to_a.drop(1).each(&:destroy)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -550,7 +550,7 @@ module Mastodon::CLI
|
||||||
remove_index_if_exists!(:statuses, 'index_statuses_on_uri')
|
remove_index_if_exists!(:statuses, 'index_statuses_on_uri')
|
||||||
|
|
||||||
say 'Deduplicating statuses…'
|
say 'Deduplicating statuses…'
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM statuses WHERE uri IS NOT NULL GROUP BY uri HAVING count(*) > 1").each do |row|
|
duplicate_record_ids_without_nulls(:statuses, 'uri').each do |row|
|
||||||
statuses = Status.where(id: row['ids'].split(',')).order(id: :asc).to_a
|
statuses = Status.where(id: row['ids'].split(',')).order(id: :asc).to_a
|
||||||
ref_status = statuses.shift
|
ref_status = statuses.shift
|
||||||
statuses.each do |status|
|
statuses.each do |status|
|
||||||
|
@ -572,7 +572,7 @@ module Mastodon::CLI
|
||||||
remove_index_if_exists!(:tags, 'index_tags_on_name_lower_btree')
|
remove_index_if_exists!(:tags, 'index_tags_on_name_lower_btree')
|
||||||
|
|
||||||
say 'Deduplicating tags…'
|
say 'Deduplicating tags…'
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM tags GROUP BY lower((name)::text) HAVING count(*) > 1").each do |row|
|
duplicate_record_ids(:tags, 'lower((name)::text)').each do |row|
|
||||||
tags = Tag.where(id: row['ids'].split(',')).order(Arel.sql('(usable::int + trendable::int + listable::int) desc')).to_a
|
tags = Tag.where(id: row['ids'].split(',')).order(Arel.sql('(usable::int + trendable::int + listable::int) desc')).to_a
|
||||||
ref_tag = tags.shift
|
ref_tag = tags.shift
|
||||||
tags.each do |tag|
|
tags.each do |tag|
|
||||||
|
@ -595,7 +595,7 @@ module Mastodon::CLI
|
||||||
remove_index_if_exists!(:webauthn_credentials, 'index_webauthn_credentials_on_external_id')
|
remove_index_if_exists!(:webauthn_credentials, 'index_webauthn_credentials_on_external_id')
|
||||||
|
|
||||||
say 'Deduplicating webauthn_credentials…'
|
say 'Deduplicating webauthn_credentials…'
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM webauthn_credentials GROUP BY external_id HAVING count(*) > 1").each do |row|
|
duplicate_record_ids(:webauthn_credentials, 'external_id').each do |row|
|
||||||
WebauthnCredential.where(id: row['ids'].split(',')).order(id: :desc).to_a.drop(1).each(&:destroy)
|
WebauthnCredential.where(id: row['ids'].split(',')).order(id: :desc).to_a.drop(1).each(&:destroy)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -609,7 +609,7 @@ module Mastodon::CLI
|
||||||
remove_index_if_exists!(:webhooks, 'index_webhooks_on_url')
|
remove_index_if_exists!(:webhooks, 'index_webhooks_on_url')
|
||||||
|
|
||||||
say 'Deduplicating webhooks…'
|
say 'Deduplicating webhooks…'
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM webhooks GROUP BY url HAVING count(*) > 1").each do |row|
|
duplicate_record_ids(:webhooks, 'url').each do |row|
|
||||||
Webhook.where(id: row['ids'].split(',')).order(id: :desc).drop(1).each(&:destroy)
|
Webhook.where(id: row['ids'].split(',')).order(id: :desc).drop(1).each(&:destroy)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -746,8 +746,23 @@ module Mastodon::CLI
|
||||||
ActiveRecord::Migrator.current_version
|
ActiveRecord::Migrator.current_version
|
||||||
end
|
end
|
||||||
|
|
||||||
def find_duplicate_accounts
|
def duplicate_record_ids_without_nulls(table, group_by)
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM accounts GROUP BY lower(username), COALESCE(lower(domain), '') HAVING count(*) > 1")
|
database_connection.select_all(<<~SQL.squish)
|
||||||
|
SELECT string_agg(id::text, ',') AS ids
|
||||||
|
FROM #{table}
|
||||||
|
WHERE #{group_by} IS NOT NULL
|
||||||
|
GROUP BY #{group_by}
|
||||||
|
HAVING COUNT(*) > 1
|
||||||
|
SQL
|
||||||
|
end
|
||||||
|
|
||||||
|
def duplicate_record_ids(table, group_by)
|
||||||
|
database_connection.select_all(<<~SQL.squish)
|
||||||
|
SELECT string_agg(id::text, ',') AS ids
|
||||||
|
FROM #{table}
|
||||||
|
GROUP BY #{group_by}
|
||||||
|
HAVING COUNT(*) > 1
|
||||||
|
SQL
|
||||||
end
|
end
|
||||||
|
|
||||||
def remove_index_if_exists!(table, name)
|
def remove_index_if_exists!(table, name)
|
||||||
|
|
|
@ -44,5 +44,18 @@ describe Account::Counters do
|
||||||
|
|
||||||
expect(account.statuses_count).to eq 5
|
expect(account.statuses_count).to eq 5
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'preserves last_status_at when decrementing statuses_count' do
|
||||||
|
account_stat = Fabricate(
|
||||||
|
:account_stat,
|
||||||
|
account: account,
|
||||||
|
last_status_at: 3.days.ago,
|
||||||
|
statuses_count: 10
|
||||||
|
)
|
||||||
|
|
||||||
|
expect { account.decrement_count!(:statuses_count) }
|
||||||
|
.to change(account_stat.reload, :statuses_count).by(-1)
|
||||||
|
.and not_change(account_stat.reload, :last_status_at)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -95,23 +95,27 @@ RSpec.describe BulkImportRowService do
|
||||||
context 'when importing a list row' do
|
context 'when importing a list row' do
|
||||||
let(:import_type) { 'lists' }
|
let(:import_type) { 'lists' }
|
||||||
let(:target_account) { Fabricate(:account) }
|
let(:target_account) { Fabricate(:account) }
|
||||||
|
let(:list_name) { 'my list' }
|
||||||
let(:data) do
|
let(:data) do
|
||||||
{ 'acct' => target_account.acct, 'list_name' => 'my list' }
|
{ 'acct' => target_account.acct, 'list_name' => list_name }
|
||||||
end
|
end
|
||||||
|
|
||||||
shared_examples 'common behavior' do
|
shared_examples 'common behavior' do
|
||||||
|
shared_examples 'row import success and list addition' do
|
||||||
|
it 'returns true and adds the target account to the list' do
|
||||||
|
result = nil
|
||||||
|
expect { result = subject.call(import_row) }
|
||||||
|
.to change { result }.from(nil).to(true)
|
||||||
|
.and add_target_account_to_list
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context 'when the target account is already followed' do
|
context 'when the target account is already followed' do
|
||||||
before do
|
before do
|
||||||
account.follow!(target_account)
|
account.follow!(target_account)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns true' do
|
include_examples 'row import success and list addition'
|
||||||
expect(subject.call(import_row)).to be true
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'adds the target account to the list' do
|
|
||||||
expect { subject.call(import_row) }.to add_target_account_to_list
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when the user already requested to follow the target account' do
|
context 'when the user already requested to follow the target account' do
|
||||||
|
@ -119,35 +123,17 @@ RSpec.describe BulkImportRowService do
|
||||||
account.request_follow!(target_account)
|
account.request_follow!(target_account)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns true' do
|
include_examples 'row import success and list addition'
|
||||||
expect(subject.call(import_row)).to be true
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'adds the target account to the list' do
|
|
||||||
expect { subject.call(import_row) }.to add_target_account_to_list
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when the target account is neither followed nor requested' do
|
context 'when the target account is neither followed nor requested' do
|
||||||
it 'returns true' do
|
include_examples 'row import success and list addition'
|
||||||
expect(subject.call(import_row)).to be true
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'adds the target account to the list' do
|
|
||||||
expect { subject.call(import_row) }.to add_target_account_to_list
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when the target account is the user themself' do
|
context 'when the target account is the user themself' do
|
||||||
let(:target_account) { account }
|
let(:target_account) { account }
|
||||||
|
|
||||||
it 'returns true' do
|
include_examples 'row import success and list addition'
|
||||||
expect(subject.call(import_row)).to be true
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'adds the target account to the list' do
|
|
||||||
expect { subject.call(import_row) }.to add_target_account_to_list
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def add_target_account_to_list
|
def add_target_account_to_list
|
||||||
|
@ -161,7 +147,7 @@ RSpec.describe BulkImportRowService do
|
||||||
.joins(:list)
|
.joins(:list)
|
||||||
.exists?(
|
.exists?(
|
||||||
account_id: target_account.id,
|
account_id: target_account.id,
|
||||||
list: { title: 'my list' }
|
list: { title: list_name }
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -172,7 +158,7 @@ RSpec.describe BulkImportRowService do
|
||||||
|
|
||||||
context 'when the list exists' do
|
context 'when the list exists' do
|
||||||
before do
|
before do
|
||||||
Fabricate(:list, account: account, title: 'my list')
|
Fabricate(:list, account: account, title: list_name)
|
||||||
end
|
end
|
||||||
|
|
||||||
include_examples 'common behavior'
|
include_examples 'common behavior'
|
||||||
|
@ -180,7 +166,7 @@ RSpec.describe BulkImportRowService do
|
||||||
it 'does not create a new list' do
|
it 'does not create a new list' do
|
||||||
account.follow!(target_account)
|
account.follow!(target_account)
|
||||||
|
|
||||||
expect { subject.call(import_row) }.to_not(change { List.where(title: 'my list').count })
|
expect { subject.call(import_row) }.to_not(change { List.where(title: list_name).count })
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
12
yarn.lock
12
yarn.lock
|
@ -6322,9 +6322,9 @@ __metadata:
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"core-js@npm:^3.30.2":
|
"core-js@npm:^3.30.2":
|
||||||
version: 3.36.1
|
version: 3.37.0
|
||||||
resolution: "core-js@npm:3.36.1"
|
resolution: "core-js@npm:3.37.0"
|
||||||
checksum: 10c0/4f0ad2464535d809ba659226feca15bff14b9b5452518bddff8d81b9c94b0227b3027d9838f22f1dce664958acb4107b935cc0037695ae545edc2a303bca98bf
|
checksum: 10c0/7e00331f346318ca3f595c08ce9e74ddae744715aef137486c1399163afd79792fb94c3161280863adfdc3e30f8026912d56bd3036f93cacfc689d33e185f2ee
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
@ -9613,8 +9613,8 @@ __metadata:
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"ioredis@npm:^5.3.2":
|
"ioredis@npm:^5.3.2":
|
||||||
version: 5.3.2
|
version: 5.4.0
|
||||||
resolution: "ioredis@npm:5.3.2"
|
resolution: "ioredis@npm:5.4.0"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ioredis/commands": "npm:^1.1.1"
|
"@ioredis/commands": "npm:^1.1.1"
|
||||||
cluster-key-slot: "npm:^1.1.0"
|
cluster-key-slot: "npm:^1.1.0"
|
||||||
|
@ -9625,7 +9625,7 @@ __metadata:
|
||||||
redis-errors: "npm:^1.2.0"
|
redis-errors: "npm:^1.2.0"
|
||||||
redis-parser: "npm:^3.0.0"
|
redis-parser: "npm:^3.0.0"
|
||||||
standard-as-callback: "npm:^2.1.0"
|
standard-as-callback: "npm:^2.1.0"
|
||||||
checksum: 10c0/0dd2b5b8004e891f5b62edf18ac223194f1f5204698ec827c903e789ea05b0b36f73395491749ec63c66470485bdfb228ccdf1714fbf631a0f78f33211f2c883
|
checksum: 10c0/a0214a004928cd35f7103179c8d236a8df609265994d554046fd130446b9989125b7133177936015a31925190f66c90bec4de7303819fe81383dc4576d947d47
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue