Merge commit '96e23af89258068d05cc8557df914b4a9add385b' into glitch-soc/merge-upstream
This commit is contained in:
commit
bbbbb24dbd
@ -56,7 +56,7 @@ services:
|
||||
- internal_network
|
||||
|
||||
es:
|
||||
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.29
|
||||
image: docker.elastic.co/elasticsearch/elasticsearch:8.19.15
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
ES_JAVA_OPTS: -Xms512m -Xmx512m
|
||||
|
||||
@ -41,6 +41,7 @@ const AccountFeatured: React.FC<{ multiColumn: boolean }> = ({
|
||||
const account = useAccount(accountId);
|
||||
const { suspended, blockedBy, hidden } = useAccountVisibility(accountId);
|
||||
const forceEmptyState = suspended || blockedBy || hidden;
|
||||
const isOwnProfile = accountId === me;
|
||||
|
||||
const dispatch = useAppDispatch();
|
||||
|
||||
@ -69,10 +70,7 @@ const AccountFeatured: React.FC<{ multiColumn: boolean }> = ({
|
||||
|
||||
const { listedCollections = [], unlistedCollections = [] } = Object.groupBy(
|
||||
collections,
|
||||
(item) =>
|
||||
item.discoverable && !!item.item_count
|
||||
? 'listedCollections'
|
||||
: 'unlistedCollections',
|
||||
(item) => (item.discoverable ? 'listedCollections' : 'unlistedCollections'),
|
||||
);
|
||||
|
||||
const renderListItem = useCallback(
|
||||
@ -166,7 +164,7 @@ const AccountFeatured: React.FC<{ multiColumn: boolean }> = ({
|
||||
defaultMessage='Collections'
|
||||
/>
|
||||
</h2>
|
||||
{accountId === me && (
|
||||
{isOwnProfile && (
|
||||
<SubheadingLink to='/collections/new' icon={AddIcon}>
|
||||
<FormattedMessage
|
||||
id='account.featured.new_collection'
|
||||
@ -179,7 +177,7 @@ const AccountFeatured: React.FC<{ multiColumn: boolean }> = ({
|
||||
<ItemList>
|
||||
<TruncatedListItems
|
||||
visibleItems={listedCollections}
|
||||
truncatedItems={unlistedCollections}
|
||||
truncatedItems={isOwnProfile ? unlistedCollections : []}
|
||||
toggleButton={{
|
||||
title: (
|
||||
<FormattedMessage
|
||||
|
||||
@ -193,7 +193,11 @@ const Compose: React.FC<{ multiColumn: boolean }> = ({ multiColumn }) => {
|
||||
/>
|
||||
|
||||
<div className='scrollable'>
|
||||
<ComposeFormContainer />
|
||||
<ComposeFormContainer
|
||||
// This is fine on this single-purpose view
|
||||
// eslint-disable-next-line jsx-a11y/no-autofocus
|
||||
autoFocus
|
||||
/>
|
||||
</div>
|
||||
|
||||
<Helmet>
|
||||
|
||||
@ -263,7 +263,7 @@ export const NavigationPanel: React.FC<{ multiColumn?: boolean }> = ({
|
||||
{!multiColumn && (
|
||||
<li>
|
||||
<ColumnLink
|
||||
to='/publish'
|
||||
to={{ pathname: '/publish', state: { focusTarget: false } }}
|
||||
icon='plus'
|
||||
iconComponent={AddIcon}
|
||||
activeIconComponent={AddIcon}
|
||||
|
||||
@ -13,7 +13,7 @@ import { Blurhash } from 'mastodon/components/blurhash';
|
||||
import { Icon } from 'mastodon/components/icon';
|
||||
import { MoreFromAuthor } from 'mastodon/components/more_from_author';
|
||||
import { RelativeTimestamp } from 'mastodon/components/relative_timestamp';
|
||||
import { useBlurhash } from 'mastodon/initial_state';
|
||||
import { displayMedia, useBlurhash } from 'mastodon/initial_state';
|
||||
import type { Card as CardType } from 'mastodon/models/status';
|
||||
|
||||
const IDNA_PREFIX = 'xn--';
|
||||
@ -63,6 +63,8 @@ const handleIframeUrl = (html: string, url: string, providerName: string) => {
|
||||
return html;
|
||||
};
|
||||
|
||||
const hideAllMedia = displayMedia === 'hide_all';
|
||||
|
||||
interface CardProps {
|
||||
card: CardType | null;
|
||||
sensitive?: boolean;
|
||||
@ -87,7 +89,7 @@ const CardVideo: React.FC<Pick<CardProps, 'card'>> = ({ card }) => (
|
||||
const Card: React.FC<CardProps> = ({ card, sensitive }) => {
|
||||
const [previewLoaded, setPreviewLoaded] = useState(false);
|
||||
const [embedded, setEmbedded] = useState(false);
|
||||
const [revealed, setRevealed] = useState(!sensitive);
|
||||
const [revealed, setRevealed] = useState(!sensitive && !hideAllMedia);
|
||||
|
||||
const handleEmbedClick = useCallback(() => {
|
||||
setEmbedded(true);
|
||||
@ -283,6 +285,7 @@ const Card: React.FC<CardProps> = ({ card, sensitive }) => {
|
||||
embed = (
|
||||
<div className='status-card__image'>
|
||||
{canvas}
|
||||
{revealed ? undefined : spoilerButton}
|
||||
{thumbnail}
|
||||
</div>
|
||||
);
|
||||
|
||||
@ -3,6 +3,7 @@ import { useRouteMatch, NavLink } from 'react-router-dom';
|
||||
|
||||
import { Icon } from 'mastodon/components/icon';
|
||||
import type { IconProp } from 'mastodon/components/icon';
|
||||
import type { MastodonLocationDescriptor } from 'mastodon/components/router';
|
||||
|
||||
export const ColumnLink: React.FC<{
|
||||
icon: React.ReactNode;
|
||||
@ -11,7 +12,7 @@ export const ColumnLink: React.FC<{
|
||||
activeIconComponent?: IconProp;
|
||||
isActive?: (match: unknown, location: { pathname: string }) => boolean;
|
||||
text: string;
|
||||
to?: string;
|
||||
to?: MastodonLocationDescriptor;
|
||||
href?: string;
|
||||
method?: string;
|
||||
badge?: React.ReactNode;
|
||||
@ -31,7 +32,9 @@ export const ColumnLink: React.FC<{
|
||||
transparent,
|
||||
...other
|
||||
}) => {
|
||||
const match = useRouteMatch(to ?? '');
|
||||
const match = useRouteMatch(
|
||||
(typeof to === 'string' ? to : to?.pathname) ?? '',
|
||||
);
|
||||
const className = classNames('column-link', {
|
||||
'column-link--transparent': transparent,
|
||||
});
|
||||
|
||||
@ -17,6 +17,7 @@ import { toggleNavigation } from 'mastodon/actions/navigation';
|
||||
import { fetchServer } from 'mastodon/actions/server';
|
||||
import { Icon } from 'mastodon/components/icon';
|
||||
import { IconWithBadge } from 'mastodon/components/icon_with_badge';
|
||||
import type { MastodonLocationDescriptor } from 'mastodon/components/router';
|
||||
import { useIdentity } from 'mastodon/identity_context';
|
||||
import { registrationsOpen, sso_redirect } from 'mastodon/initial_state';
|
||||
import { selectUnreadNotificationGroupsCount } from 'mastodon/selectors/notifications';
|
||||
@ -38,12 +39,14 @@ export const messages = defineMessages({
|
||||
});
|
||||
|
||||
const IconLabelButton: React.FC<{
|
||||
to: string;
|
||||
to: MastodonLocationDescriptor;
|
||||
icon?: React.ReactNode;
|
||||
activeIcon?: React.ReactNode;
|
||||
title: string;
|
||||
}> = ({ to, icon, activeIcon, title }) => {
|
||||
const match = useRouteMatch(to);
|
||||
const match = useRouteMatch(
|
||||
typeof to === 'string' ? to : (to.pathname ?? ''),
|
||||
);
|
||||
|
||||
return (
|
||||
<NavLink
|
||||
@ -189,7 +192,7 @@ export const NavigationBar: React.FC = () => {
|
||||
/>
|
||||
<IconLabelButton
|
||||
title={intl.formatMessage(messages.publish)}
|
||||
to='/publish'
|
||||
to={{ pathname: '/publish', state: { focusTarget: false } }}
|
||||
icon={<Icon id='' icon={AddIcon} />}
|
||||
/>
|
||||
<NotificationsButton />
|
||||
|
||||
@ -780,11 +780,12 @@
|
||||
"home.pending_critical_update.link": "Voir les mises à jour",
|
||||
"home.pending_critical_update.title": "Une mise à jour de sécurité critique est disponible !",
|
||||
"home.show_announcements": "Afficher annonces",
|
||||
"ignore_notifications_modal.disclaimer": "Mastodon ne peut pas indiquer aux utilisateurs que vous avez ignoré leurs notifications. Le fait d'ignorer les notifications n'empêchera pas la transmission des messages eux-mêmes.",
|
||||
"ignore_notifications_modal.bots_title": "Ignorer les notifications des bots ?",
|
||||
"ignore_notifications_modal.disclaimer": "Mastodon ne peut pas indiquer aux utilisateur·rice·s que vous avez ignoré leurs notifications. Le fait d'ignorer les notifications n'empêchera pas la transmission des messages eux-mêmes.",
|
||||
"ignore_notifications_modal.filter_instead": "Filtrer plutôt",
|
||||
"ignore_notifications_modal.filter_to_act_users": "Vous serez toujours en mesure d'accepter, de rejeter ou de signaler les utilisateur·rice·s",
|
||||
"ignore_notifications_modal.filter_to_avoid_confusion": "Le filtrage permet d'éviter toute éventuelle confusion",
|
||||
"ignore_notifications_modal.filter_to_review_separately": "Vous pouvez réexaminer les notifications filtrées séparément",
|
||||
"ignore_notifications_modal.filter_to_avoid_confusion": "Le filtrage permet d'éviter d'éventuelle confusion",
|
||||
"ignore_notifications_modal.filter_to_review_separately": "Vous pouvez examiner les notifications filtrées séparément",
|
||||
"ignore_notifications_modal.ignore": "Ignorer les notifications",
|
||||
"ignore_notifications_modal.limited_accounts_title": "Ignorer les notifications provenant des comptes modérés ?",
|
||||
"ignore_notifications_modal.new_accounts_title": "Ignorer les notifications provenant des nouveaux comptes ?",
|
||||
@ -1042,6 +1043,8 @@
|
||||
"notifications.policy.drop": "Ignorer",
|
||||
"notifications.policy.drop_hint": "Expulser vers le vide, pour ne plus jamais les revoir",
|
||||
"notifications.policy.filter": "Filtrer",
|
||||
"notifications.policy.filter_bots_hint": "Comptes marqués comme automatisés",
|
||||
"notifications.policy.filter_bots_title": "Bots",
|
||||
"notifications.policy.filter_hint": "Envoyer à la boîte de réception des notifications filtrées",
|
||||
"notifications.policy.filter_limited_accounts_hint": "Limités par les modérateur·rice·s du serveur",
|
||||
"notifications.policy.filter_limited_accounts_title": "Comptes modérés",
|
||||
|
||||
@ -780,11 +780,12 @@
|
||||
"home.pending_critical_update.link": "Voir les mises à jour",
|
||||
"home.pending_critical_update.title": "Une mise à jour de sécurité critique est disponible !",
|
||||
"home.show_announcements": "Afficher les annonces",
|
||||
"ignore_notifications_modal.disclaimer": "Mastodon ne peut pas indiquer aux utilisateurs que vous avez ignoré leurs notifications. Le fait d'ignorer les notifications n'empêchera pas la transmission des messages eux-mêmes.",
|
||||
"ignore_notifications_modal.bots_title": "Ignorer les notifications des bots ?",
|
||||
"ignore_notifications_modal.disclaimer": "Mastodon ne peut pas indiquer aux utilisateur·rice·s que vous avez ignoré leurs notifications. Le fait d'ignorer les notifications n'empêchera pas la transmission des messages eux-mêmes.",
|
||||
"ignore_notifications_modal.filter_instead": "Filtrer plutôt",
|
||||
"ignore_notifications_modal.filter_to_act_users": "Vous serez toujours en mesure d'accepter, de rejeter ou de signaler les utilisateur·rice·s",
|
||||
"ignore_notifications_modal.filter_to_avoid_confusion": "Le filtrage permet d'éviter toute éventuelle confusion",
|
||||
"ignore_notifications_modal.filter_to_review_separately": "Vous pouvez réexaminer les notifications filtrées séparément",
|
||||
"ignore_notifications_modal.filter_to_avoid_confusion": "Le filtrage permet d'éviter d'éventuelle confusion",
|
||||
"ignore_notifications_modal.filter_to_review_separately": "Vous pouvez examiner les notifications filtrées séparément",
|
||||
"ignore_notifications_modal.ignore": "Ignorer les notifications",
|
||||
"ignore_notifications_modal.limited_accounts_title": "Ignorer les notifications provenant des comptes modérés ?",
|
||||
"ignore_notifications_modal.new_accounts_title": "Ignorer les notifications provenant des nouveaux comptes ?",
|
||||
@ -1042,6 +1043,8 @@
|
||||
"notifications.policy.drop": "Ignorer",
|
||||
"notifications.policy.drop_hint": "Expulser vers le vide, pour ne plus jamais les revoir",
|
||||
"notifications.policy.filter": "Filtrer",
|
||||
"notifications.policy.filter_bots_hint": "Comptes marqués comme automatisés",
|
||||
"notifications.policy.filter_bots_title": "Bots",
|
||||
"notifications.policy.filter_hint": "Envoyer à la boîte de réception des notifications filtrées",
|
||||
"notifications.policy.filter_limited_accounts_hint": "Limités par les modérateur·rice·s du serveur",
|
||||
"notifications.policy.filter_limited_accounts_title": "Comptes modérés",
|
||||
|
||||
@ -780,6 +780,7 @@
|
||||
"home.pending_critical_update.link": "Bekijk updates",
|
||||
"home.pending_critical_update.title": "Kritieke beveiligingsupdate beschikbaar!",
|
||||
"home.show_announcements": "Mededelingen tonen",
|
||||
"ignore_notifications_modal.bots_title": "Meldingen van geautomatiseerde accounts negeren?",
|
||||
"ignore_notifications_modal.disclaimer": "Mastodon kan gebruikers niet informeren dat je hun meldingen hebt genegeerd. Meldingen negeren zal niet voorkomen dat de berichten zelf worden verzonden.",
|
||||
"ignore_notifications_modal.filter_instead": "In plaats daarvan filteren",
|
||||
"ignore_notifications_modal.filter_to_act_users": "Je bent nog steeds in staat om volgverzoeken goed- of af te keuren, en om gebruikers te rapporteren",
|
||||
@ -1042,6 +1043,8 @@
|
||||
"notifications.policy.drop": "Negeren",
|
||||
"notifications.policy.drop_hint": "Permanent verwijderen",
|
||||
"notifications.policy.filter": "Filter",
|
||||
"notifications.policy.filter_bots_hint": "Accounts die zijn ingesteld als geautomatiseerd",
|
||||
"notifications.policy.filter_bots_title": "Bots",
|
||||
"notifications.policy.filter_hint": "Naar gefilterde inbox voor meldingen verzenden",
|
||||
"notifications.policy.filter_limited_accounts_hint": "Beperkt door servermoderatoren",
|
||||
"notifications.policy.filter_limited_accounts_title": "Gemodereerde accounts",
|
||||
|
||||
@ -71,11 +71,13 @@
|
||||
"account.in_memoriam": "Ku pamięci.",
|
||||
"account.join_modal.day": "Dzień",
|
||||
"account.join_modal.me": "Dołączyłeś(aś) na {server}",
|
||||
"account.join_modal.me_anniversary": "Happy Fediversary! Dołączyłeś(aś) na {server}",
|
||||
"account.join_modal.me_today": "To Twój pierwszy dzień na {server}!",
|
||||
"account.join_modal.other": "{name} dołączył(a) na {server}",
|
||||
"account.join_modal.share.celebrate": "Udostępnij uroczysty post",
|
||||
"account.join_modal.share.intro": "Udostępnij post wprowadzający",
|
||||
"account.join_modal.share.welcome": "Udostępnij post powitalny",
|
||||
"account.join_modal.years": "{number, plural, one {rok} few {lata} other {lat}}",
|
||||
"account.joined_short": "Dołączył(a)",
|
||||
"account.languages": "Zmień subskrybowane języki",
|
||||
"account.last_active": "Ostatnia aktywność",
|
||||
@ -83,6 +85,7 @@
|
||||
"account.locked_info": "To konto jest prywatne. Właściciel ręcznie wybiera kto może go obserwować.",
|
||||
"account.media": "Multimedia",
|
||||
"account.mention": "Wspomnij o @{name}",
|
||||
"account.menu.add_to_collection": "Dodaj do kolekcji…",
|
||||
"account.menu.add_to_list": "Dodaj do listy…",
|
||||
"account.menu.block": "Zablokuj konto",
|
||||
"account.menu.block_domain": "Zablokuj {domain}",
|
||||
@ -181,7 +184,9 @@
|
||||
"account_edit.field_edit_modal.edit_title": "Edytuj dodatkowe pole",
|
||||
"account_edit.field_edit_modal.name_hint": "Np. Strona osobista",
|
||||
"account_edit.field_edit_modal.name_label": "Etykieta",
|
||||
"account_edit.field_edit_modal.value_hint": "Np. \"https://example.me\"",
|
||||
"account_edit.field_edit_modal.value_label": "Wartość",
|
||||
"account_edit.field_reorder_modal.handle_label": "Przeciągnij pole \"{item}\"",
|
||||
"account_edit.image_alt_modal.add_title": "Dodaj tekst alternatywny",
|
||||
"account_edit.image_alt_modal.edit_title": "Edytuj tekst alternatywny",
|
||||
"account_edit.image_alt_modal.text_hint": "Tekst alternatywny pomaga użytkownikom czytników ekranu zrozumieć twoją treść.",
|
||||
@ -194,6 +199,7 @@
|
||||
"account_edit.image_edit.remove_button": "Usuń obraz",
|
||||
"account_edit.image_edit.replace_button": "Zastąp obraz",
|
||||
"account_edit.item_list.delete": "Usuń {name}",
|
||||
"account_edit.item_list.edit": "Edytuj {name}",
|
||||
"account_edit.name_modal.add_title": "Dodaj nazwę wyświetlaną",
|
||||
"account_edit.name_modal.edit_title": "Edytuj nazwę wyświetlaną",
|
||||
"account_edit.profile_tab.button_label": "Dostosuj",
|
||||
@ -223,8 +229,11 @@
|
||||
"account_edit.upload_modal.title_replace.avatar": "Zmień zdjęcie profilowe",
|
||||
"account_edit.upload_modal.title_replace.header": "Zmień zdjęcie nagłówka",
|
||||
"account_edit.verified_modal.invisible_link.summary": "Co zrobić, aby link był niewidoczny?",
|
||||
"account_edit.verified_modal.title": "Jak dodać zweryfikowany link",
|
||||
"account_edit_tags.add_tag": "Dodaj #{tagName}",
|
||||
"account_edit_tags.column_title": "Edytuj tagi",
|
||||
"account_edit_tags.search_placeholder": "Dodaj hashtag...",
|
||||
"account_list.hidden_notice": "To jest widoczne tylko dla Ciebie. Aby pokazać tę listę innym, przejdź do <link>{page} > {modal} > {field}</link>.",
|
||||
"admin.dashboard.daily_retention": "Wskaźnik utrzymania użytkowników według dni od rejestracji",
|
||||
"admin.dashboard.monthly_retention": "Wskaźnik utrzymania użytkowników według miesięcy od rejestracji",
|
||||
"admin.dashboard.retention.average": "Średnia",
|
||||
@ -274,6 +283,7 @@
|
||||
"annual_report.summary.followers.new_followers": "{count, plural, one {{counter} obserwujący} few {{counter} obserwujących} many {{counter} obserwujących} other {{counter} obserwujących}}",
|
||||
"annual_report.summary.highlighted_post.favourite_count": "Ten post został polubiony {count, plural, one {raz} few {# razy} many {# razy} other {# razy}}.",
|
||||
"annual_report.summary.highlighted_post.reply_count": "Ten post ma {count, plural, one {jedną odpowiedź} few {# odpowiedzi} many {# odpowiedzi} other {# odpowiedzi}}.",
|
||||
"annual_report.summary.highlighted_post.title": "Najpopularniejszy wpis",
|
||||
"annual_report.summary.most_used_app.most_used_app": "najczęściej używana aplikacja",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "najczęściej używany hashtag",
|
||||
"annual_report.summary.new_posts.new_posts": "nowe wpisy",
|
||||
@ -284,11 +294,15 @@
|
||||
"annual_report.summary.share_on_mastodon": "Udostępnij na Mastodonie",
|
||||
"attachments_list.unprocessed": "(nieprzetworzone)",
|
||||
"audio.hide": "Ukryj dźwięk",
|
||||
"block_modal.no_collections": "Żadne z Was nie może dodać drugiej osoby do kolekcji. Jeśli takie istnieją, zostaniecie automatycznie usunięci z wzajemnych kolekcji.",
|
||||
"block_modal.remote_users_caveat": "Poprosimy serwer {domain} o uszanowanie twojej decyzji. Nie jest to jednak gwarantowane, bo niektóre serwery mogą obsługiwać blokady w inny sposób. Publiczne wpisy mogą być nadal widoczne dla niezalogowanych użytkowników.",
|
||||
"block_modal.show_less": "Pokaż mniej",
|
||||
"block_modal.show_more": "Pokaż więcej",
|
||||
"block_modal.they_cant_mention": "Nie możecie się nawzajem wspominać, obserwować ani cytować.",
|
||||
"block_modal.they_cant_see_posts": "Nie zobaczy Twoich treści, a Ty nie zobaczysz jego.",
|
||||
"block_modal.they_will_know": "Zobaczy informację o blokadzie.",
|
||||
"block_modal.title": "Zablokować?",
|
||||
"block_modal.you_wont_see_mentions": "Nie zobaczysz wpisów innych osób, które o nim wspominają.",
|
||||
"boost_modal.combo": "Możesz kliknąć {combo}, aby pominąć tę czynność następnym razem",
|
||||
"boost_modal.reblog": "Podbić wpis?",
|
||||
"boost_modal.undo_reblog": "Cofnąć podbicie?",
|
||||
@ -304,13 +318,47 @@
|
||||
"bundle_modal_error.close": "Zamknij",
|
||||
"bundle_modal_error.message": "Coś poszło nie tak podczas wczytywania tego ekranu.",
|
||||
"bundle_modal_error.retry": "Spróbuj ponownie",
|
||||
"callout.dismiss": "Odrzuć",
|
||||
"closed_registrations.other_server_instructions": "Ponieważ Mastodon jest zdecentralizowany, możesz założyć konto na innym serwerze i wciąż mieć możliwość wchodzenia w interakcję z tym serwerem.",
|
||||
"closed_registrations_modal.description": "Opcja tworzenia kont na {domain} jest aktualnie niedostępna, ale miej na uwadze to, że nie musisz mieć konta konkretnie na {domain} by używać Mastodona.",
|
||||
"closed_registrations_modal.find_another_server": "Znajdź inny serwer",
|
||||
"closed_registrations_modal.preamble": "Mastodon jest zdecentralizowany, więc bez względu na to, gdzie się zarejestrujesz, będziesz w stanie obserwować i wchodzić w interakcje z innymi osobami na tym serwerze. Możesz nawet uruchomić własny serwer!",
|
||||
"closed_registrations_modal.title": "Rejestracja na Mastodonie",
|
||||
"collection.share_modal.share_link_label": "Udostępnij link",
|
||||
"collection.share_modal.share_via_system": "Udostępnij…",
|
||||
"collection.share_modal.title_new": "Udostępnij swoją nową kolekcję!",
|
||||
"collection.share_template_own": "Sprawdź moją nową kolekcję:",
|
||||
"collections.collection_description": "Opis",
|
||||
"collections.collection_language": "Język",
|
||||
"collections.collection_name": "Nazwa",
|
||||
"collections.content_warning": "Ostrzeżenie o zawartości",
|
||||
"collections.continue": "Kontynuuj",
|
||||
"collections.copy_link": "Skopiuj link",
|
||||
"collections.create.basic_details_title": "Podstawowe informacje",
|
||||
"collections.create.steps": "Krok {step}/{total}",
|
||||
"collections.create_collection": "Utwórz kolekcję",
|
||||
"collections.delete_collection": "Usuń kolekcję",
|
||||
"collections.description_length_hint": "Limit 100 znaków",
|
||||
"collections.detail.loading": "Wczytywanie kolekcji…",
|
||||
"collections.detail.revoke_inclusion": "Usuń mnie",
|
||||
"collections.detail.sensitive_content": "Wrażliwa zawartość",
|
||||
"collections.detail.share": "Udostępnij tę kolekcję",
|
||||
"collections.edit_details": "Edytuj szczegóły",
|
||||
"collections.last_updated_at": "Ostatnia aktualizacja: {date}",
|
||||
"collections.list.created_by_author": "Utworzone przez {name}",
|
||||
"collections.list.created_by_you": "Stworzone przez Ciebie",
|
||||
"collections.mark_as_sensitive": "Oznacz jako wrażliwe",
|
||||
"collections.maximum_collection_count_description": "Twój serwer pozwala na tworzenie do {count} kolekcji.",
|
||||
"collections.name_length_hint": "Limit 40 znaków",
|
||||
"collections.new_collection": "Nowa kolekcja",
|
||||
"collections.remove_account": "Usuń",
|
||||
"collections.report_collection": "Zgłoś tę kolekcję",
|
||||
"collections.revoke_inclusion.confirmation": "Zostałeś(aś) usunięty(a) z \"{collection}\"",
|
||||
"collections.revoke_inclusion.error": "Wystąpił błąd, proszę spróbować ponownie później.",
|
||||
"collections.search_accounts_max_reached": "Przekroczono maksymalną liczbę dodanych użytkowników",
|
||||
"collections.share_short": "Udostępnij",
|
||||
"collections.suggestions.can_not_add": "Nie można dodać",
|
||||
"collections.suggestions.can_not_add_desc": "Te konta mogły zrezygnować z funkcji odkrywania albo znajdują się na serwerze, który nie obsługuje kolekcji.",
|
||||
"column.about": "O serwerze",
|
||||
"column.blocks": "Zablokowani",
|
||||
"column.bookmarks": "Zakładki",
|
||||
@ -332,6 +380,7 @@
|
||||
"column.notifications": "Powiadomienia",
|
||||
"column.pins": "Przypięte wpisy",
|
||||
"column.public": "Globalna oś czasu",
|
||||
"column.your_collections": "Twoje kolekcje",
|
||||
"column_back_button.label": "Wróć",
|
||||
"column_header.hide_settings": "Ukryj ustawienia",
|
||||
"column_header.moveLeft_settings": "Przesuń kolumnę w lewo",
|
||||
@ -340,6 +389,8 @@
|
||||
"column_header.show_settings": "Pokaż ustawienia",
|
||||
"column_header.unpin": "Odepnij",
|
||||
"column_search.cancel": "Anuluj",
|
||||
"combobox.loading": "Wczytywanie",
|
||||
"combobox.no_results_found": "Brak wyników dla tego wyszukiwania",
|
||||
"community.column_settings.local_only": "Tylko lokalne",
|
||||
"community.column_settings.media_only": "Tylko multimedia",
|
||||
"community.column_settings.remote_only": "Tylko zdalne",
|
||||
@ -373,6 +424,7 @@
|
||||
"confirmations.delete.confirm": "Usuń",
|
||||
"confirmations.delete.message": "Czy na pewno chcesz usunąć ten wpis?",
|
||||
"confirmations.delete.title": "Usunąć wpis?",
|
||||
"confirmations.delete_collection.confirm": "Usuń",
|
||||
"confirmations.delete_list.confirm": "Usuń",
|
||||
"confirmations.delete_list.message": "Czy na pewno chcesz trwale usunąć tę listę?",
|
||||
"confirmations.delete_list.title": "Usunąć listę?",
|
||||
@ -412,6 +464,7 @@
|
||||
"confirmations.remove_from_followers.confirm": "Usuń z obserwujących",
|
||||
"confirmations.remove_from_followers.message": "{name} przestanie cię obserwować. Czy na pewno chcesz kontynuować?",
|
||||
"confirmations.remove_from_followers.title": "Usunąć z obserwujących?",
|
||||
"confirmations.revoke_collection_inclusion.confirm": "Usuń mnie",
|
||||
"confirmations.revoke_quote.confirm": "Usuń wpis",
|
||||
"confirmations.revoke_quote.message": "Tej czynności nie można cofnąć.",
|
||||
"confirmations.revoke_quote.title": "Usunąć wpis?",
|
||||
@ -424,13 +477,16 @@
|
||||
"content_warning.hide": "Ukryj wpis",
|
||||
"content_warning.show": "Pokaż mimo to",
|
||||
"content_warning.show_more": "Pokaż więcej",
|
||||
"content_warning.show_short": "Pokaż",
|
||||
"conversation.delete": "Usuń rozmowę",
|
||||
"conversation.mark_as_read": "Oznacz jako przeczytane",
|
||||
"conversation.open": "Zobacz rozmowę",
|
||||
"conversation.with": "Z {names}",
|
||||
"copy_icon_button.copied": "Skopiowano do schowka",
|
||||
"copy_icon_button.copy_this_text": "Skopiuj linki do schowka",
|
||||
"copypaste.copied": "Skopiowano",
|
||||
"copypaste.copy_to_clipboard": "Skopiuj do schowka",
|
||||
"custom_homepage.contact": "Kontakt:",
|
||||
"directory.federated": "Ze znanego fediwersum",
|
||||
"directory.local": "Tylko z {domain}",
|
||||
"directory.new_arrivals": "Nowo przybyli",
|
||||
@ -450,6 +506,9 @@
|
||||
"domain_block_modal.you_will_lose_relationships": "Utracisz wszystkich obserwujących i obserwowanych z tego serwera.",
|
||||
"domain_block_modal.you_wont_see_posts": "Nie zobaczysz wpisów ani powiadomień od osób z tego serwera.",
|
||||
"dropdown.empty": "Wybierz opcję",
|
||||
"email_subscriptions.email": "E-mail",
|
||||
"email_subscriptions.submitted.title": "Jeszcze jeden krok",
|
||||
"email_subscriptions.validation.email.invalid": "Nieprawidłowy adres e-mail",
|
||||
"embed.instructions": "Umieść ten wpis na swojej stronie, kopiując poniższy kod.",
|
||||
"embed.preview": "Tak to będzie wyglądać:",
|
||||
"emoji_button.activity": "Aktywność",
|
||||
@ -468,12 +527,14 @@
|
||||
"emoji_button.symbols": "Symbole",
|
||||
"emoji_button.travel": "Podróże i miejsca",
|
||||
"empty_column.account_featured_self.no_collections_button": "Stwórz kolekcję",
|
||||
"empty_column.account_featured_self.showcase_accounts": "Pokaż swoje ulubione konta",
|
||||
"empty_column.account_hides_collections": "Ta osoba postanowiła nie udostępniać tych informacji",
|
||||
"empty_column.account_suspended": "Konto zawieszone",
|
||||
"empty_column.account_timeline": "Brak wpisów!",
|
||||
"empty_column.account_unavailable": "Profil niedostępny",
|
||||
"empty_column.blocks": "Nie zablokowano jeszcze żadnych użytkowników.",
|
||||
"empty_column.bookmarked_statuses": "Nie dodano jeszcze żadnego wpisu do zakładek. Gdy to zrobisz, pojawi się tutaj.",
|
||||
"empty_column.collections.featured_in": "Nie zostałeś jeszcze dodany do żadnej kolekcji.",
|
||||
"empty_column.community": "Lokalna oś czasu jest pusta. Opublikuj coś, by ruszyć z kopyta!",
|
||||
"empty_column.direct": "Nie ma tu jeszcze żadnych wzmianek bezpośrednich. Gdy je wyślesz lub otrzymasz, pojawią się tutaj.",
|
||||
"empty_column.disabled_feed": "Ten kanał został wyłączony przez administratorów serwera.",
|
||||
@ -490,6 +551,7 @@
|
||||
"empty_column.notification_requests": "Wszystko przeczytane! Gdy otrzymasz nowe powiadomienia, pojawią się tutaj zgodnie z twoimi ustawieniami.",
|
||||
"empty_column.notifications": "Nie masz jeszcze żadnych powiadomień. Gdy inne osoby wejdą z tobą w interakcję, zobaczysz to tutaj.",
|
||||
"empty_column.public": "Nic tu nie ma! Opublikuj coś lub obserwuj osoby z innych serwerów, aby coś zobaczyć",
|
||||
"empty_state.no_results": "Brak wyników",
|
||||
"error.unexpected_crash.explanation": "Z powodu błędu w naszym kodzie lub niezgodności przeglądarki nie udało się poprawnie wyświetlić tej strony.",
|
||||
"error.unexpected_crash.explanation_addons": "Nie udało się poprawnie wyświetlić tej strony. Ten błąd jest spowodowany zapewne przez wtyczkę do przeglądarki lub narzędzia do automatycznego tłumaczenia.",
|
||||
"error.unexpected_crash.next_steps": "Spróbuj odświeżyć stronę. Jeśli to nie pomoże, nadal możesz korzystać z Mastodon za pośrednictwem innej przeglądarki lub aplikacji.",
|
||||
@ -502,6 +564,8 @@
|
||||
"explore.trending_statuses": "Wpisy",
|
||||
"explore.trending_tags": "Hasztagi",
|
||||
"featured_carousel.header": "{count, plural, one {przypięty wpis} few {przypięte wpisy} many {przypięte wpisy} other {przypięte wpisy}}",
|
||||
"featured_tags.suggestions.add": "Dodaj",
|
||||
"featured_tags.suggestions.dismiss": "Nie, dziękuję",
|
||||
"filter_modal.added.context_mismatch_explanation": "To filtrowanie nie dotyczy kategorii, w której pojawił się ten wpis. Jeśli chcesz, aby wpis był filtrowany również w tym kontekście, musisz edytować ustawienia filtrowania.",
|
||||
"filter_modal.added.context_mismatch_title": "Niewłaściwy kontekst!",
|
||||
"filter_modal.added.expired_explanation": "Ta kategoria filtrowania wygasła, aby ją zastosować, należy zmienić datę wygaśnięcia.",
|
||||
@ -607,6 +671,7 @@
|
||||
"info_button.label": "Pomoc",
|
||||
"info_button.what_is_alt_text": "<h1>Czym jest tekst alternatywny?</h1><p>Tekst alternatywny zawiera opisy zdjęć dla osób niedowidzących, korzystających z połączeń o niskiej przepustowości lub szukających dodatkowego kontekstu.</p>\n<p>Możesz poprawić dostępność i czytelność dla wszystkich, pisząc jasny, zwięzły i precyzyjny tekst alternatywny.</p>\n<ul>\n<li>Podkreśl ważne elementy</li>\n<li>Streść tekst widoczny na zdjęciach</li>\n<li>Używaj poprawnej struktury zdań</li>\n<li>Unikaj zbędnych informacji</li>\n<li>Skoncentruj się na kluczowych informacjach zawartych w złożonych wizualizacjach (takich jak diagramy lub mapy)</li>\n</ul>",
|
||||
"interaction_modal.action": "Aby wejść w interakcję z wpisem od {name}, musisz zalogować się na swoje konto na dowolnym serwerze Mastodon, na którym masz już konto.",
|
||||
"interaction_modal.action_follow": "Aby obserwować {name}, musisz zalogować się na swoje konto na dowolnym serwerze Mastodona.",
|
||||
"interaction_modal.go": "Dalej",
|
||||
"interaction_modal.no_account_yet": "Nie masz jeszcze konta?",
|
||||
"interaction_modal.on_another_server": "Na innym serwerze",
|
||||
@ -630,6 +695,12 @@
|
||||
"keyboard_shortcuts.heading": "Skróty klawiszowe",
|
||||
"keyboard_shortcuts.home": "Otwórz stronę główną",
|
||||
"keyboard_shortcuts.hotkey": "Skrót klawiszowy",
|
||||
"keyboard_shortcuts.keys.alt": "Alt",
|
||||
"keyboard_shortcuts.keys.backspace": "Backspace",
|
||||
"keyboard_shortcuts.keys.enter": "Enter",
|
||||
"keyboard_shortcuts.keys.esc": "Esc",
|
||||
"keyboard_shortcuts.keys.page_down": "Page Down",
|
||||
"keyboard_shortcuts.keys.page_up": "Page Up",
|
||||
"keyboard_shortcuts.legend": "Wyświetl skróty klawiszowe",
|
||||
"keyboard_shortcuts.load_more": "Aktywuj przycisk \"Załaduj więcej\"",
|
||||
"keyboard_shortcuts.local": "Otwórz lokalną oś czasu",
|
||||
@ -933,6 +1004,7 @@
|
||||
"report.category.title_account": "profilem",
|
||||
"report.category.title_status": "wpisem",
|
||||
"report.close": "Gotowe",
|
||||
"report.collection_comment": "Dlaczego chcesz zgłosić tę kolekcję?",
|
||||
"report.comment.title": "Czy jest coś jeszcze, co powinniśmy wiedzieć?",
|
||||
"report.forward": "Prześlij do {target}",
|
||||
"report.forward_hint": "Konto pochodzi z innego serwera. Czy chcesz również tam wysłać kopię zgłoszenia anonimowo?",
|
||||
@ -954,6 +1026,8 @@
|
||||
"report.rules.title": "Które zasady zostały złamane?",
|
||||
"report.statuses.subtitle": "Wybierz wszystkie pasujące",
|
||||
"report.statuses.title": "Czy są jakieś wpisy, które obrazują opisany w zgłoszeniu problem?",
|
||||
"report.submission_error": "Nie można przesłać zgłoszenia",
|
||||
"report.submission_error_details": "Sprawdź połączenie sieciowe i spróbuj ponownie później.",
|
||||
"report.submit": "Wyślij",
|
||||
"report.target": "Zgłaszanie {target}",
|
||||
"report.thanks.take_action": "Oto opcje, dzięki którym możesz kontrolować, co widzisz na Mastodon:",
|
||||
@ -991,6 +1065,7 @@
|
||||
"search_popout.user": "użytkownik",
|
||||
"search_results.accounts": "Profile",
|
||||
"search_results.all": "Wszystkie",
|
||||
"search_results.collections": "Kolekcje",
|
||||
"search_results.hashtags": "Hasztagi",
|
||||
"search_results.no_results": "Brak wyników.",
|
||||
"search_results.no_search_yet": "Spróbuj poszukać wpisów, profili, lub hasztagów.",
|
||||
@ -1035,6 +1110,7 @@
|
||||
"status.edited_x_times": "Edytowano {count, plural, one {{count} raz} other {{count} razy}}",
|
||||
"status.embed": "Kod osadzenia",
|
||||
"status.favourite": "Dodaj do ulubionych",
|
||||
"status.favourites_count": "{count, plural, one {{counter} polubienie} few {{counter} polubienia} other {{counter} polubień}}",
|
||||
"status.filter": "Filtruj ten wpis",
|
||||
"status.history.created": "{name} utworzone {date}",
|
||||
"status.history.edited": "{name} edytowane {date}",
|
||||
@ -1050,6 +1126,7 @@
|
||||
"status.pin": "Przypnij do profilu",
|
||||
"status.quote": "Cytuj",
|
||||
"status.quote.cancel": "Anuluj cytat",
|
||||
"status.quote_error.blocked_account_hint.title": "Ten wpis jest ukryty, ponieważ zablokowałeś(aś) @{name}.",
|
||||
"status.quote_error.filtered": "Ukryte z powodu jednego z Twoich filtrów",
|
||||
"status.quote_error.limited_account_hint.action": "Pokaż mimo wszystko",
|
||||
"status.quote_error.limited_account_hint.title": "To konto zostało ukryte przez moderatorów {domain}.",
|
||||
@ -1066,12 +1143,14 @@
|
||||
"status.quotes.empty": "Nikt jeszcze nie zacytował tego wpisu. Gdy ktoś to zrobi, pojawi się on tutaj.",
|
||||
"status.quotes.local_other_disclaimer": "Cytaty odrzucone przez autora nie będą wyświetlane.",
|
||||
"status.quotes.remote_other_disclaimer": "Będą tutaj wyświetlane tylko cytaty z {domain}. Cytaty odrzucone przez autora nie będą wyświetlane.",
|
||||
"status.quotes_count": "{count, plural, one {{counter} cytat} few {{counter} cytaty} many {{counter} cytatów} other {{counter} cytatów}}",
|
||||
"status.read_more": "Czytaj dalej",
|
||||
"status.reblog": "Podbij",
|
||||
"status.reblog_or_quote": "Podbij lub cytuj",
|
||||
"status.reblog_private": "Udostępnij ponownie swoim obserwującym",
|
||||
"status.reblogged_by": "Podbite przez {name}",
|
||||
"status.reblogs.empty": "Nikt nie podbił jeszcze tego wpisu. Gdy ktoś to zrobi, pojawi się tutaj.",
|
||||
"status.reblogs_count": "{count, plural, one {{counter} podbicie} few {{counter} podbicia} other {{counter} podbić}}",
|
||||
"status.redraft": "Usuń i przeredaguj",
|
||||
"status.remove_bookmark": "Usuń zakładkę",
|
||||
"status.remove_favourite": "Usuń z ulubionych",
|
||||
@ -1102,6 +1181,7 @@
|
||||
"tabs_bar.notifications": "Powiadomienia",
|
||||
"tabs_bar.publish": "Nowy post",
|
||||
"tabs_bar.search": "Szukaj",
|
||||
"tag.remove": "Usuń",
|
||||
"terms_of_service.effective_as_of": "Obowiązuje od {date}",
|
||||
"terms_of_service.title": "Warunki korzystania z usługi",
|
||||
"terms_of_service.upcoming_changes_on": "Nadchodzące zmiany od {date}",
|
||||
@ -1145,6 +1225,7 @@
|
||||
"video.volume_down": "Zmniejsz głośność",
|
||||
"video.volume_up": "Zwiększ głośność",
|
||||
"visibility_modal.button_title": "Ustaw widoczność",
|
||||
"visibility_modal.direct_quote_warning.title": "Cytaty nie mogą być osadzane we wzmiankach prywatnych",
|
||||
"visibility_modal.header": "Widoczność i interakcja",
|
||||
"visibility_modal.helper.direct_quoting": "Prywatne wzmianki opublikowane na Mastodonie nie mogą być cytowane przez inne osoby.",
|
||||
"visibility_modal.helper.privacy_editing": "Widoczność nie może być zmieniona po opublikowaniu wpisu.",
|
||||
|
||||
@ -775,6 +775,7 @@
|
||||
"home.pending_critical_update.link": "Shihni përditësime",
|
||||
"home.pending_critical_update.title": "Ka përditësim kritik të lidhur me sigurinë!",
|
||||
"home.show_announcements": "Shfaqi lajmërimet",
|
||||
"ignore_notifications_modal.bots_title": "Të shpërfillen njoftime prej robotësh?",
|
||||
"ignore_notifications_modal.disclaimer": "Mastodon-i s’mund të njoftojë përdoruesit se po shpërfillni njoftimet e tyre. Shpërfillja e njoftimeve s’do të ndalë dërgimin e vetë mesazheve.",
|
||||
"ignore_notifications_modal.filter_instead": "Në vend të kësaj, filtroji",
|
||||
"ignore_notifications_modal.filter_to_act_users": "Do të jeni prapë në gjendje të pranoni, hidhni poshtë, ose raportoni përdorues",
|
||||
@ -1037,6 +1038,8 @@
|
||||
"notifications.policy.drop": "Shpërfille",
|
||||
"notifications.policy.drop_hint": "Dërgoje në hiç, mos e pafshim më kurrë",
|
||||
"notifications.policy.filter": "Filtrim",
|
||||
"notifications.policy.filter_bots_hint": "Llogari të shënuara si të automatizuara",
|
||||
"notifications.policy.filter_bots_title": "Robotë",
|
||||
"notifications.policy.filter_hint": "Dërgoje te kutia e njoftimeve të filtruara",
|
||||
"notifications.policy.filter_limited_accounts_hint": "Kufizuar nga moderatorë shërbyesi",
|
||||
"notifications.policy.filter_limited_accounts_title": "Llogari të moderuara",
|
||||
|
||||
@ -780,6 +780,7 @@
|
||||
"home.pending_critical_update.link": "Güncellemelerini görün",
|
||||
"home.pending_critical_update.title": "Kritik güvenlik güncellemesi mevcut!",
|
||||
"home.show_announcements": "Duyuruları göster",
|
||||
"ignore_notifications_modal.bots_title": "Botlardan gelen bildirimler yoksayılsın mı?",
|
||||
"ignore_notifications_modal.disclaimer": "Mastodon bildirimlerini yok saydığınız kullanıcıları bilgilendiremez. Bildirimleri yok saymak iletilerin gönderilmesini durdurmayacaktır.",
|
||||
"ignore_notifications_modal.filter_instead": "Onun yerine filtrele",
|
||||
"ignore_notifications_modal.filter_to_act_users": "Kullanıcıları kabul etmeye, red etmeye veya bildirmeye devam edebileceksiniz",
|
||||
@ -1042,6 +1043,8 @@
|
||||
"notifications.policy.drop": "Yoksay",
|
||||
"notifications.policy.drop_hint": "Boşluğa gönder, tekrar hiç görünmesin",
|
||||
"notifications.policy.filter": "Filtrele",
|
||||
"notifications.policy.filter_bots_hint": "Otomatik olarak işaretlenmiş hesaplar",
|
||||
"notifications.policy.filter_bots_title": "Botlar",
|
||||
"notifications.policy.filter_hint": "Filtreli bildirimleri kutusuna gönder",
|
||||
"notifications.policy.filter_limited_accounts_hint": "Sunucu moderatörleri tarafından kısıtlanmış",
|
||||
"notifications.policy.filter_limited_accounts_title": "Denetlenen hesaplar",
|
||||
|
||||
@ -70,7 +70,7 @@ class UpdateStatusService < BaseService
|
||||
def validate_media!
|
||||
return [] if @options[:media_ids].blank? || !@options[:media_ids].is_a?(Enumerable)
|
||||
|
||||
raise Mastodon::ValidationError, I18n.t('media_attachments.validations.too_many') if @options[:media_ids].size > Status::MEDIA_ATTACHMENTS_LIMIT || @options[:poll].present?
|
||||
raise Mastodon::ValidationError, I18n.t('media_attachments.validations.too_many') if @options[:media_ids].size > Status::MEDIA_ATTACHMENTS_LIMIT
|
||||
|
||||
media_attachments = @status.account.media_attachments.where(status_id: [nil, @status.id]).where(scheduled_status_id: nil).where(id: @options[:media_ids].take(Status::MEDIA_ATTACHMENTS_LIMIT).map(&:to_i)).to_a
|
||||
|
||||
|
||||
@ -15,7 +15,7 @@ class EmailDistributionWorker
|
||||
|
||||
with_redis do |redis|
|
||||
@status_ids = redis.smembers("email_subscriptions:#{account_id}:next_batch")
|
||||
redis.srem("email_subscriptions:#{account_id}:next_batch", @status_ids)
|
||||
redis.srem("email_subscriptions:#{account_id}:next_batch", @status_ids) unless @status_ids.empty?
|
||||
end
|
||||
|
||||
return if @account.email_subscriptions.confirmed.empty? || @status_ids.empty?
|
||||
|
||||
@ -516,8 +516,8 @@ es-MX:
|
||||
disabled: La función ha sido desactivada y ya no se enviarán correos electrónicos a esta lista.
|
||||
email: Dirección de correo electrónico
|
||||
empty:
|
||||
hint: Nadie se ha suscrito a esta cuenta aún.
|
||||
no_subscribers_yet: Sin suscriptores aún
|
||||
hint: Nadie se ha suscrito a esta cuenta todavía.
|
||||
no_subscribers_yet: Sin suscriptores todavía
|
||||
enable_feature: Activar función
|
||||
no_access_html: Esta cuenta ya no tiene los permisos necesarios para activar la función. Modifica esto en <a href="%{roles_path}">Roles</a>.
|
||||
title: Boletines de correo electrónico de %{name}
|
||||
|
||||
@ -1974,7 +1974,7 @@ it:
|
||||
followers: Follower
|
||||
following: Seguiti
|
||||
invited: Invitato
|
||||
last_active: Ultima volta attivo
|
||||
last_active: Ultima attività
|
||||
most_recent: Più recente
|
||||
moved: Trasferito
|
||||
mutual: Reciproco
|
||||
|
||||
@ -487,6 +487,38 @@ pl:
|
||||
resolved_dns_records_hint_html: Nazwa domeny rozwiązuje się do następujących domen MX, które są ostatecznie odpowiedzialne za przyjmowanie wiadomości e-mail. Blokowanie domeny MX spowoduje zablokowanie rejestracji z dowolnego adresu e-mail, który używa tej samej domeny MX, nawet jeśli widoczna nazwa domeny jest inna. <strong>Uważaj, aby nie blokować głównych dostawców poczty elektronicznej.</strong>
|
||||
resolved_through_html: Rozwiązano przez %{domain}
|
||||
title: Zablokowane domeny e-mail
|
||||
email_subscriptions:
|
||||
accounts:
|
||||
show:
|
||||
disable_feature: Wyłącz funkcję
|
||||
enable_feature: Włącz funkcję
|
||||
compliance_settings:
|
||||
additional_footer_text:
|
||||
action: Zarządzaj
|
||||
privacy_policy:
|
||||
action: Zarządzaj
|
||||
danger_zone:
|
||||
disable_feature:
|
||||
title: Wyłącz funkcję
|
||||
erase_all_data:
|
||||
action: Wyczyść dane
|
||||
title: Usuń wszystkie dane
|
||||
index:
|
||||
lead: Pozwól odwiedzającym otrzymywać wpisy pocztą e-mail z dedykowanych kont na tym serwerze.
|
||||
title: Newslettery e-mail
|
||||
roles:
|
||||
edit_role: Edytuj rolę
|
||||
manage_roles: Zarządzaj rolami
|
||||
role_name: Nazwa roli
|
||||
setups:
|
||||
show:
|
||||
enable_feature: Włącz funkcję
|
||||
important_information: Ważne informacje
|
||||
list:
|
||||
1_permission_explanation: Po włączeniu tej funkcji konta z odpowiednimi uprawnieniami mogą dodać do swoich profili formularz zapisu na powiadomienia e-mail.
|
||||
2_feature_explanation: Gdy odwiedzający zapiszą się na stronie profilu danego konta i potwierdzą subskrypcję, zaczną otrzymywać powiadomienia e-mail, gdy konto opublikuje nowe wpisy publiczne.
|
||||
3_privacy_policy_warning: Administratorzy serwera będą mieli dostęp do zebranych danych osobowych (adresów e-mail). W związku z tym przed użyciem tej funkcji należy zaktualizować politykę prywatności oraz regulamin serwera.
|
||||
4_cost_warning: Wysyłanie e-maili może wiązać się z dodatkowymi opłatami, w zależności od konfiguracji hostingu. Skonsultuj się z dostawcą hostingu przed włączeniem funkcji, ponieważ może ona drastycznie zwiększyć liczbę e-maili wysyłanych z Twojego serwera.
|
||||
export_domain_allows:
|
||||
new:
|
||||
title: Zaimportuj zezwolenia domen
|
||||
@ -763,6 +795,7 @@ pl:
|
||||
categories:
|
||||
administration: Administracja
|
||||
devops: DevOps
|
||||
email: E-mail
|
||||
invites: Zaproszenia
|
||||
moderation: Moderacja
|
||||
special: Specjalne
|
||||
@ -1219,6 +1252,7 @@ pl:
|
||||
appearance:
|
||||
advanced_settings: Ustawienia zaawansowane
|
||||
animations_and_accessibility: Animacje i dostępność
|
||||
boosting_preferences_info_html: "<strong>Wskazówka:</strong> Niezależnie od ustawień, <kbd>Shift</kbd> + <kbd>kliknięcie</kbd> ikony %{icon} Podbij natychmiast podbije wpis."
|
||||
discovery: Odkrywanie
|
||||
localization:
|
||||
body: Mastodon jest tłumaczony przez wolontariuszy.
|
||||
@ -1411,9 +1445,14 @@ pl:
|
||||
your_appeal_rejected: Twoje odwołanie zostało odrzucone
|
||||
edit_profile:
|
||||
other: Inne
|
||||
privacy_redesign_body: Decyzję o tym, czy pokazywać obserwowanych i obserwujących, podejmujesz teraz bezpośrednio z poziomu swojego profilu.
|
||||
redesign_body: Profil możesz teraz edytować bezpośrednio ze swojej publicznej strony.
|
||||
redesign_button: Przejdź do edycji
|
||||
redesign_title: Nowy sposób edycji profilu
|
||||
email_subscription_mailer:
|
||||
notification:
|
||||
footer:
|
||||
privacy_html: Wiadomości e-mail są wysyłane z %{domain}, serwera obsługiwanego przez Mastodona. Aby zrozumieć, jak ten serwer przetwarza Twoje dane osobowe, zapoznaj się z <a href="%{privacy_policy_path}">polityką prywatności</a>.
|
||||
emoji_styles:
|
||||
auto: Automatycznie
|
||||
native: Natywny
|
||||
@ -1447,7 +1486,9 @@ pl:
|
||||
blocks: Zablokowani
|
||||
bookmarks: Zakładki
|
||||
csv: CSV
|
||||
custom_filters: Filtry
|
||||
domain_blocks: Blokady domen
|
||||
json: JSON
|
||||
lists: Listy
|
||||
mutes: Wyciszeni
|
||||
storage: Urządzenie przechowujące dane
|
||||
@ -1806,6 +1847,8 @@ pl:
|
||||
too_few_options: musi zawierać przynajmniej dwie opcje
|
||||
too_many_options: nie może zawierać więcej niż %{max} opcji
|
||||
vote: Głosuj
|
||||
posting_defaults:
|
||||
explanation: Te ustawienia będą domyślne dla nowych wpisów, ale możesz je zmienić indywidualnie w oknie ich tworzenia.
|
||||
preferences:
|
||||
other: Pozostałe
|
||||
posting_defaults: Domyślne ustawienia wpisów
|
||||
@ -1998,9 +2041,11 @@ pl:
|
||||
enabled: Automatycznie usuwaj stare wiadomości
|
||||
enabled_hint: Automatycznie usuwa Twoje posty, gdy osiągną określony próg wiekowy, chyba że spełniają jeden z poniższych wyjątków
|
||||
exceptions: Wyjątki
|
||||
explanation: Automatyczne usuwanie jest wykonywane z niskim priorytetem. Może wystąpić opóźnienie między osiągnięciem progu wieku a usunięciem wpisu.
|
||||
ignore_favs: Ignoruj ulubione
|
||||
ignore_reblogs: Ignoruj podbicia
|
||||
interaction_exceptions: Wyjątki oparte na interakcjach
|
||||
interaction_exceptions_explanation: Wpisy, które chwilowo przekroczą próg polubień lub podbić, mogą zostać zachowane, nawet jeśli liczba ta później spadnie.
|
||||
keep_direct: Zachowaj bezpośrednie wiadomości
|
||||
keep_direct_hint: Nie usuwa żadnych bezpośrednich wiadomości
|
||||
keep_media: Zachowaj posty z załącznikami multimedialnymi
|
||||
|
||||
@ -4,6 +4,7 @@ pl:
|
||||
hints:
|
||||
account:
|
||||
attribution_domains: Jedna na linię.
|
||||
discoverable: Możesz być polecany w kolekcjach utworzonych przez innych użytkowników. Ty i Twoje publiczne wpisy mogą być również zasugerowane użytkownikom w różnych miejscach służących do odkrywania treści na Mastodonie.
|
||||
display_name: Twoje imię lub pseudonim.
|
||||
fields: Co ci się tylko podoba – twoja strona domowa, zaimki, wiek…
|
||||
indexable: Twoje publiczne wpisy mogą pojawiać się w wynikach wyszukiwania w Mastodonie. Użytkownicy, którzy reagowali na Twoje wpisy, będą mogli je znaleźć niezależnie od tego ustawienia.
|
||||
@ -77,6 +78,7 @@ pl:
|
||||
featured_tag:
|
||||
name: 'Oto niektóre hasztagi, których były ostatnio przez ciebie użyte:'
|
||||
filters:
|
||||
action: Wybierz akcję do wykonania, gdy wpis pasuje do filtra
|
||||
actions:
|
||||
blur: Ukryj media za ostrzeżeniem, bez ukrywania samego tekstu
|
||||
hide: Całkowicie ukryj przefiltrowaną zawartość, jakby nie istniała
|
||||
@ -106,6 +108,7 @@ pl:
|
||||
thumbnail: Obraz o proporcjach mniej więcej 2:1 wyświetlany obok informacji o serwerze.
|
||||
trendable_by_default: Pomiń ręczny przegląd treści trendów. Pojedyncze elementy nadal mogą być usuwane z trendów po fakcie.
|
||||
trends: Tendencje pokazują, które posty, hasztagi i newsy zyskują popularność na Twoim serwerze.
|
||||
wrapstodon: Zaproponuj lokalnym użytkownikom wygenerowanie żartobliwego podsumowania ich aktywności na Mastodonie w danym roku. Funkcja jest dostępna między 10 a 31 grudnia każdego roku i jest oferowana użytkownikom, którzy w ciągu roku opublikowali co najmniej jeden post publiczny lub cichy publiczny oraz użyli co najmniej jednego hasztagu.
|
||||
form_challenge:
|
||||
current_password: Wchodzisz w strefę bezpieczną
|
||||
imports:
|
||||
@ -160,6 +163,7 @@ pl:
|
||||
name: Publiczna nazwa roli, jeśli włączone jest wyświetlanie odznaki
|
||||
permissions_as_keys: Użytkownicy z tą rolą będą mieli dostęp do...
|
||||
position: Wyższa rola decyduje o rozwiązywaniu konfliktów w pewnych sytuacjach. Niektóre działania mogą być wykonywane tylko na rolach z niższym priorytetem
|
||||
require_2fa: Użytkownicy z tą rolą będą musieli skonfigurować uwierzytelnianie dwuskładnikowe, aby korzystać z Mastodona
|
||||
username_block:
|
||||
allow_with_approval: Zamiast bezwzględnie uniemożliwiać rejestrację, pasujące rejestracje będą wymagały Twojej zgody
|
||||
comparison: Proszę pamiętać o problemie Scunthorpe podczas blokowania częściowych dopasowań
|
||||
@ -311,6 +315,9 @@ pl:
|
||||
trendable_by_default: Zezwalaj na trendy bez wcześniejszego przeglądu
|
||||
trends: Włącz trendy
|
||||
wrapstodon: Włącz Wrapstodon
|
||||
form_email_subscriptions_confirmation:
|
||||
agreement_email_volume: Rozumiem, że włączenie tej funkcji może znacząco zwiększyć liczbę e-maili wysyłanych z serwera i że ponoszę wyłączną odpowiedzialność za wszelkie powstałe koszty.
|
||||
agreement_privacy_and_terms: Zaktualizowałem politykę prywatności oraz regulamin serwera.
|
||||
interactions:
|
||||
must_be_follower: Nie wyświetlaj powiadomień od osób, które Cię nie obserwują
|
||||
must_be_following: Nie wyświetlaj powiadomień od osób, których nie obserwujesz
|
||||
@ -349,6 +356,7 @@ pl:
|
||||
hint: Informacje dodatkowe
|
||||
text: Zasada
|
||||
settings:
|
||||
email_subscriptions: Włącz rejestracje przez adres e-mail
|
||||
indexable: Udostępniaj profil wyszukiwarkom
|
||||
show_application: Pokazuj program z którego zamieszczasz wpisy
|
||||
tag:
|
||||
@ -377,11 +385,13 @@ pl:
|
||||
role: Rola
|
||||
time_zone: Strefa czasowa
|
||||
user_role:
|
||||
collection_limit: Maksymalna liczba kolekcji na użytkownika
|
||||
color: Kolor odznaki
|
||||
highlighted: Wyświetl rolę jako odznakę na profilach użytkowników
|
||||
name: Nazwa
|
||||
permissions_as_keys: Uprawnienia
|
||||
position: Priorytet
|
||||
require_2fa: Wymagaj uwierzytelniania dwuskładnikowego
|
||||
username_block:
|
||||
allow_with_approval: Zezwól na rejestracje po zatwierdzeniu
|
||||
comparison: Metoda porównania
|
||||
|
||||
@ -27,8 +27,9 @@ services:
|
||||
|
||||
# es:
|
||||
# restart: always
|
||||
# image: docker.elastic.co/elasticsearch/elasticsearch:7.17.29
|
||||
# image: docker.elastic.co/elasticsearch/elasticsearch:8.19.15
|
||||
# environment:
|
||||
# - "ELASTIC_PASSWORD=password" #Username is elastic. Do not change the username.
|
||||
# - "ES_JAVA_OPTS=-Xms512m -Xmx512m -Des.enforce.bootstrap.checks=true"
|
||||
# - "xpack.license.self_generated.type=basic"
|
||||
# - "xpack.security.enabled=false"
|
||||
|
||||
98
spec/workers/email_distribution_worker_spec.rb
Normal file
98
spec/workers/email_distribution_worker_spec.rb
Normal file
@ -0,0 +1,98 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe EmailDistributionWorker do
|
||||
let(:worker) { described_class.new }
|
||||
|
||||
describe '#perform' do
|
||||
subject { worker.perform(account_id) }
|
||||
|
||||
let(:account_id) { nil }
|
||||
|
||||
context 'when email subscription setting is true but configuration is false' do
|
||||
around do |example|
|
||||
original = Rails.application.config.x.email_subscriptions
|
||||
Rails.application.config.x.email_subscriptions = false
|
||||
Setting.email_subscriptions = true
|
||||
example.run
|
||||
Rails.application.config.x.email_subscriptions = original
|
||||
end
|
||||
|
||||
it { is_expected.to be_nil }
|
||||
end
|
||||
|
||||
context 'when email subscription setting is false and configuration is true' do
|
||||
around do |example|
|
||||
original = Rails.application.config.x.email_subscriptions
|
||||
Rails.application.config.x.email_subscriptions = true
|
||||
Setting.email_subscriptions = false
|
||||
example.run
|
||||
Rails.application.config.x.email_subscriptions = original
|
||||
end
|
||||
|
||||
it { is_expected.to be_nil }
|
||||
end
|
||||
|
||||
context 'when email subscription setting and configuration are enabled' do
|
||||
around do |example|
|
||||
original = Rails.application.config.x.email_subscriptions
|
||||
Rails.application.config.x.email_subscriptions = true
|
||||
Setting.email_subscriptions = true
|
||||
example.run
|
||||
Rails.application.config.x.email_subscriptions = original
|
||||
end
|
||||
|
||||
context 'when account is invalid' do
|
||||
let(:account_id) { 123_123_123 }
|
||||
|
||||
it { is_expected.to be_nil }
|
||||
end
|
||||
|
||||
context 'when user has subscriptions disabled' do
|
||||
let(:account_id) { account.id }
|
||||
let(:account) { Fabricate.build :account, user: }
|
||||
let(:user) { Fabricate.build :user }
|
||||
|
||||
before { user.settings['email_subscriptions'] = false }
|
||||
|
||||
it { is_expected.to be_nil }
|
||||
end
|
||||
|
||||
context 'when user has subscriptions enabled' do
|
||||
let(:account_id) { account.id }
|
||||
let(:account) { Fabricate :account, user: }
|
||||
let(:user) { Fabricate :user, role: }
|
||||
let(:role) { Fabricate(:user_role, permissions: UserRole::FLAGS[:manage_email_subscriptions]) }
|
||||
|
||||
before { user.settings['email_subscriptions'] = true }
|
||||
|
||||
context 'when user does not have subscriptions' do
|
||||
it { is_expected.to be_nil }
|
||||
end
|
||||
|
||||
context 'when user has subscriptions' do
|
||||
let!(:email_subscription) { Fabricate :email_subscription, confirmed_at: 2.days.ago, account: }
|
||||
|
||||
context 'when user does not have statuses' do
|
||||
it { is_expected.to be_nil }
|
||||
end
|
||||
|
||||
context 'when user has statuses', :inline_jobs do
|
||||
let(:status) { Fabricate :status, account: }
|
||||
|
||||
before do
|
||||
# Simulate PostStatusService marking for delivery
|
||||
redis.sadd("email_subscriptions:#{account_id}:next_batch", status.id)
|
||||
end
|
||||
|
||||
it 'sends email to subscribed address' do
|
||||
expect { subject }
|
||||
.to send_email(to: email_subscription.email)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Loading…
x
Reference in New Issue
Block a user