Merge commit '70988519df66f0b8edeb6ca95140f1d3e436fea8' into glitch-soc/merge-upstream

This commit is contained in:
Claire 2024-09-24 19:34:30 +02:00
commit c6039f99ce
99 changed files with 396 additions and 209 deletions

View file

@ -101,15 +101,15 @@ GEM
awrence (1.2.1) awrence (1.2.1)
aws-eventstream (1.3.0) aws-eventstream (1.3.0)
aws-partitions (1.977.0) aws-partitions (1.977.0)
aws-sdk-core (3.207.0) aws-sdk-core (3.208.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.9) aws-sigv4 (~> 1.9)
jmespath (~> 1, >= 1.6.1) jmespath (~> 1, >= 1.6.1)
aws-sdk-kms (1.92.0) aws-sdk-kms (1.93.0)
aws-sdk-core (~> 3, >= 3.207.0) aws-sdk-core (~> 3, >= 3.207.0)
aws-sigv4 (~> 1.5) aws-sigv4 (~> 1.5)
aws-sdk-s3 (1.164.0) aws-sdk-s3 (1.165.0)
aws-sdk-core (~> 3, >= 3.207.0) aws-sdk-core (~> 3, >= 3.207.0)
aws-sdk-kms (~> 1) aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.5) aws-sigv4 (~> 1.5)
@ -893,7 +893,7 @@ GEM
rack-proxy (>= 0.6.1) rack-proxy (>= 0.6.1)
railties (>= 5.2) railties (>= 5.2)
semantic_range (>= 2.3.0) semantic_range (>= 2.3.0)
webrick (1.8.1) webrick (1.8.2)
websocket (1.2.11) websocket (1.2.11)
websocket-driver (0.7.6) websocket-driver (0.7.6)
websocket-extensions (>= 0.1.0) websocket-extensions (>= 0.1.0)

View file

@ -1,4 +1,5 @@
import { browserHistory } from 'mastodon/components/router'; import { browserHistory } from 'mastodon/components/router';
import { debounceWithDispatchAndArguments } from 'mastodon/utils/debounce';
import api, { getLinks } from '../api'; import api, { getLinks } from '../api';
@ -449,6 +450,20 @@ export function expandFollowingFail(id, error) {
}; };
} }
const debouncedFetchRelationships = debounceWithDispatchAndArguments((dispatch, ...newAccountIds) => {
if (newAccountIds.length === 0) {
return;
}
dispatch(fetchRelationshipsRequest(newAccountIds));
api().get(`/api/v1/accounts/relationships?with_suspended=true&${newAccountIds.map(id => `id[]=${id}`).join('&')}`).then(response => {
dispatch(fetchRelationshipsSuccess({ relationships: response.data }));
}).catch(error => {
dispatch(fetchRelationshipsFail(error));
});
}, { delay: 500 });
export function fetchRelationships(accountIds) { export function fetchRelationships(accountIds) {
return (dispatch, getState) => { return (dispatch, getState) => {
const state = getState(); const state = getState();
@ -460,13 +475,7 @@ export function fetchRelationships(accountIds) {
return; return;
} }
dispatch(fetchRelationshipsRequest(newAccountIds)); debouncedFetchRelationships(dispatch, ...newAccountIds);
api().get(`/api/v1/accounts/relationships?with_suspended=true&${newAccountIds.map(id => `id[]=${id}`).join('&')}`).then(response => {
dispatch(fetchRelationshipsSuccess({ relationships: response.data }));
}).catch(error => {
dispatch(fetchRelationshipsFail(error));
});
}; };
} }

View file

@ -17,6 +17,6 @@ export const updateNotificationsPolicy = createDataLoadingThunk(
(policy: Partial<NotificationPolicy>) => apiUpdateNotificationsPolicy(policy), (policy: Partial<NotificationPolicy>) => apiUpdateNotificationsPolicy(policy),
); );
export const decreasePendingNotificationsCount = createAction<number>( export const decreasePendingRequestsCount = createAction<number>(
'notificationPolicy/decreasePendingNotificationCount', 'notificationPolicy/decreasePendingRequestsCount',
); );

View file

@ -13,11 +13,11 @@ import type {
ApiNotificationJSON, ApiNotificationJSON,
} from 'mastodon/api_types/notifications'; } from 'mastodon/api_types/notifications';
import type { ApiStatusJSON } from 'mastodon/api_types/statuses'; import type { ApiStatusJSON } from 'mastodon/api_types/statuses';
import type { AppDispatch, RootState } from 'mastodon/store'; import type { AppDispatch } from 'mastodon/store';
import { createDataLoadingThunk } from 'mastodon/store/typed_functions'; import { createDataLoadingThunk } from 'mastodon/store/typed_functions';
import { importFetchedAccounts, importFetchedStatuses } from './importer'; import { importFetchedAccounts, importFetchedStatuses } from './importer';
import { decreasePendingNotificationsCount } from './notification_policies'; import { decreasePendingRequestsCount } from './notification_policies';
// TODO: refactor with notification_groups // TODO: refactor with notification_groups
function dispatchAssociatedRecords( function dispatchAssociatedRecords(
@ -169,19 +169,11 @@ export const expandNotificationsForRequest = createDataLoadingThunk(
}, },
); );
const selectNotificationCountForRequest = (state: RootState, id: string) => {
const requests = state.notificationRequests.items;
const thisRequest = requests.find((request) => request.id === id);
return thisRequest ? thisRequest.notifications_count : 0;
};
export const acceptNotificationRequest = createDataLoadingThunk( export const acceptNotificationRequest = createDataLoadingThunk(
'notificationRequest/accept', 'notificationRequest/accept',
({ id }: { id: string }) => apiAcceptNotificationRequest(id), ({ id }: { id: string }) => apiAcceptNotificationRequest(id),
(_data, { dispatch, getState, discardLoadData, actionArg: { id } }) => { (_data, { dispatch, discardLoadData }) => {
const count = selectNotificationCountForRequest(getState(), id); dispatch(decreasePendingRequestsCount(1));
dispatch(decreasePendingNotificationsCount(count));
// The payload is not used in any functions // The payload is not used in any functions
return discardLoadData; return discardLoadData;
@ -191,10 +183,8 @@ export const acceptNotificationRequest = createDataLoadingThunk(
export const dismissNotificationRequest = createDataLoadingThunk( export const dismissNotificationRequest = createDataLoadingThunk(
'notificationRequest/dismiss', 'notificationRequest/dismiss',
({ id }: { id: string }) => apiDismissNotificationRequest(id), ({ id }: { id: string }) => apiDismissNotificationRequest(id),
(_data, { dispatch, getState, discardLoadData, actionArg: { id } }) => { (_data, { dispatch, discardLoadData }) => {
const count = selectNotificationCountForRequest(getState(), id); dispatch(decreasePendingRequestsCount(1));
dispatch(decreasePendingNotificationsCount(count));
// The payload is not used in any functions // The payload is not used in any functions
return discardLoadData; return discardLoadData;
@ -204,13 +194,8 @@ export const dismissNotificationRequest = createDataLoadingThunk(
export const acceptNotificationRequests = createDataLoadingThunk( export const acceptNotificationRequests = createDataLoadingThunk(
'notificationRequests/acceptBulk', 'notificationRequests/acceptBulk',
({ ids }: { ids: string[] }) => apiAcceptNotificationRequests(ids), ({ ids }: { ids: string[] }) => apiAcceptNotificationRequests(ids),
(_data, { dispatch, getState, discardLoadData, actionArg: { ids } }) => { (_data, { dispatch, discardLoadData, actionArg: { ids } }) => {
const count = ids.reduce( dispatch(decreasePendingRequestsCount(ids.length));
(count, id) => count + selectNotificationCountForRequest(getState(), id),
0,
);
dispatch(decreasePendingNotificationsCount(count));
// The payload is not used in any functions // The payload is not used in any functions
return discardLoadData; return discardLoadData;
@ -220,13 +205,8 @@ export const acceptNotificationRequests = createDataLoadingThunk(
export const dismissNotificationRequests = createDataLoadingThunk( export const dismissNotificationRequests = createDataLoadingThunk(
'notificationRequests/dismissBulk', 'notificationRequests/dismissBulk',
({ ids }: { ids: string[] }) => apiDismissNotificationRequests(ids), ({ ids }: { ids: string[] }) => apiDismissNotificationRequests(ids),
(_data, { dispatch, getState, discardLoadData, actionArg: { ids } }) => { (_data, { dispatch, discardLoadData, actionArg: { ids } }) => {
const count = ids.reduce( dispatch(decreasePendingRequestsCount(ids.length));
(count, id) => count + selectNotificationCountForRequest(getState(), id),
0,
);
dispatch(decreasePendingNotificationsCount(count));
// The payload is not used in any functions // The payload is not used in any functions
return discardLoadData; return discardLoadData;

View file

@ -10,7 +10,7 @@ import api, { getLinks } from '../api';
import { unescapeHTML } from '../utils/html'; import { unescapeHTML } from '../utils/html';
import { requestNotificationPermission } from '../utils/notifications'; import { requestNotificationPermission } from '../utils/notifications';
import { fetchFollowRequests, fetchRelationships } from './accounts'; import { fetchFollowRequests } from './accounts';
import { import {
importFetchedAccount, importFetchedAccount,
importFetchedAccounts, importFetchedAccounts,
@ -56,14 +56,6 @@ defineMessages({
group: { id: 'notifications.group', defaultMessage: '{count} notifications' }, group: { id: 'notifications.group', defaultMessage: '{count} notifications' },
}); });
const fetchRelatedRelationships = (dispatch, notifications) => {
const accountIds = notifications.filter(item => ['follow', 'follow_request', 'admin.sign_up'].indexOf(item.type) !== -1).map(item => item.account.id);
if (accountIds.length > 0) {
dispatch(fetchRelationships(accountIds));
}
};
export const loadPending = () => ({ export const loadPending = () => ({
type: NOTIFICATIONS_LOAD_PENDING, type: NOTIFICATIONS_LOAD_PENDING,
}); });
@ -106,8 +98,6 @@ export function updateNotifications(notification, intlMessages, intlLocale) {
dispatch(notificationsUpdate({ notification, preferPendingItems, playSound: playSound && !filtered})); dispatch(notificationsUpdate({ notification, preferPendingItems, playSound: playSound && !filtered}));
fetchRelatedRelationships(dispatch, [notification]);
} else if (playSound && !filtered) { } else if (playSound && !filtered) {
dispatch({ dispatch({
type: NOTIFICATIONS_UPDATE_NOOP, type: NOTIFICATIONS_UPDATE_NOOP,
@ -199,7 +189,6 @@ export function expandNotifications({ maxId = undefined, forceLoad = false }) {
dispatch(importFetchedAccounts(response.data.filter(item => item.report).map(item => item.report.target_account))); dispatch(importFetchedAccounts(response.data.filter(item => item.report).map(item => item.report.target_account)));
dispatch(expandNotificationsSuccess(response.data, next ? next.uri : null, isLoadingMore, isLoadingRecent, isLoadingRecent && preferPendingItems)); dispatch(expandNotificationsSuccess(response.data, next ? next.uri : null, isLoadingMore, isLoadingRecent, isLoadingRecent && preferPendingItems));
fetchRelatedRelationships(dispatch, response.data);
dispatch(submitMarkers()); dispatch(submitMarkers());
} catch(error) { } catch(error) {
dispatch(expandNotificationsFail(error, isLoadingMore)); dispatch(expandNotificationsFail(error, isLoadingMore));

View file

@ -91,5 +91,5 @@ export const apiAcceptNotificationRequests = async (id: string[]) => {
}; };
export const apiDismissNotificationRequests = async (id: string[]) => { export const apiDismissNotificationRequests = async (id: string[]) => {
return apiRequestPost('v1/notifications/dismiss/dismiss', { id }); return apiRequestPost('v1/notifications/requests/dismiss', { id });
}; };

View file

@ -31,7 +31,7 @@ export const FilteredNotificationsIconButton: React.FC<{
history.push('/notifications/requests'); history.push('/notifications/requests');
}, [history]); }, [history]);
if (policy === null || policy.summary.pending_notifications_count === 0) { if (policy === null || policy.summary.pending_requests_count <= 0) {
return null; return null;
} }
@ -70,7 +70,7 @@ export const FilteredNotificationsBanner: React.FC = () => {
}; };
}, [dispatch]); }, [dispatch]);
if (policy === null || policy.summary.pending_notifications_count === 0) { if (policy === null || policy.summary.pending_requests_count <= 0) {
return null; return null;
} }

View file

@ -97,6 +97,8 @@
"block_modal.title": "Αποκλεισμός χρήστη;", "block_modal.title": "Αποκλεισμός χρήστη;",
"block_modal.you_wont_see_mentions": "Δε θα βλέπεις τις αναρτήσεις που τον αναφέρουν.", "block_modal.you_wont_see_mentions": "Δε θα βλέπεις τις αναρτήσεις που τον αναφέρουν.",
"boost_modal.combo": "Μπορείς να πατήσεις {combo} για να το προσπεράσεις την επόμενη φορά", "boost_modal.combo": "Μπορείς να πατήσεις {combo} για να το προσπεράσεις την επόμενη φορά",
"boost_modal.reblog": "Ενίσχυση ανάρτησης;",
"boost_modal.undo_reblog": "Αναίρεση ενίσχυσης;",
"bundle_column_error.copy_stacktrace": "Αντιγραφή αναφοράς σφάλματος", "bundle_column_error.copy_stacktrace": "Αντιγραφή αναφοράς σφάλματος",
"bundle_column_error.error.body": "Δεν ήταν δυνατή η απόδοση της σελίδας που ζήτησες. Μπορεί να οφείλεται σε σφάλμα στον κώδικά μας ή σε πρόβλημα συμβατότητας του προγράμματος περιήγησης.", "bundle_column_error.error.body": "Δεν ήταν δυνατή η απόδοση της σελίδας που ζήτησες. Μπορεί να οφείλεται σε σφάλμα στον κώδικά μας ή σε πρόβλημα συμβατότητας του προγράμματος περιήγησης.",
"bundle_column_error.error.title": "Ωχ όχι!", "bundle_column_error.error.title": "Ωχ όχι!",
@ -192,6 +194,8 @@
"confirmations.unfollow.confirm": "Άρση ακολούθησης", "confirmations.unfollow.confirm": "Άρση ακολούθησης",
"confirmations.unfollow.message": "Σίγουρα θες να πάψεις να ακολουθείς τον/την {name};", "confirmations.unfollow.message": "Σίγουρα θες να πάψεις να ακολουθείς τον/την {name};",
"confirmations.unfollow.title": "Άρση ακολούθησης;", "confirmations.unfollow.title": "Άρση ακολούθησης;",
"content_warning.hide": "Απόκρυψη ανάρτησης",
"content_warning.show": "Εμφάνιση ούτως ή άλλως",
"conversation.delete": "Διαγραφή συζήτησης", "conversation.delete": "Διαγραφή συζήτησης",
"conversation.mark_as_read": "Σήμανση ως αναγνωσμένο", "conversation.mark_as_read": "Σήμανση ως αναγνωσμένο",
"conversation.open": "Προβολή συνομιλίας", "conversation.open": "Προβολή συνομιλίας",
@ -299,6 +303,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": "Φιλτράρισμα μιας ανάρτησης",
"filter_warning.matches_filter": "Ταιριάζει με το φίλτρο “{title}”",
"filtered_notifications_banner.pending_requests": "Από {count, plural, =0 {κανένα} one {ένα άτομο} other {# άτομα}} που μπορεί να ξέρεις", "filtered_notifications_banner.pending_requests": "Από {count, plural, =0 {κανένα} one {ένα άτομο} other {# άτομα}} που μπορεί να ξέρεις",
"filtered_notifications_banner.title": "Φιλτραρισμένες ειδοποιήσεις", "filtered_notifications_banner.title": "Φιλτραρισμένες ειδοποιήσεις",
"firehose.all": "Όλα", "firehose.all": "Όλα",
@ -429,6 +434,8 @@
"lightbox.close": "Κλείσιμο", "lightbox.close": "Κλείσιμο",
"lightbox.next": "Επόμενο", "lightbox.next": "Επόμενο",
"lightbox.previous": "Προηγούμενο", "lightbox.previous": "Προηγούμενο",
"lightbox.zoom_in": "Εστίαση στο πραγματικό μέγεθος",
"lightbox.zoom_out": "Εστίαση για προσαρμογή",
"limited_account_hint.action": "Εμφάνιση προφίλ ούτως ή άλλως", "limited_account_hint.action": "Εμφάνιση προφίλ ούτως ή άλλως",
"limited_account_hint.title": "Αυτό το προφίλ έχει αποκρυφτεί από τους διαχειριστές του διακομιστή {domain}.", "limited_account_hint.title": "Αυτό το προφίλ έχει αποκρυφτεί από τους διαχειριστές του διακομιστή {domain}.",
"link_preview.author": "Από {name}", "link_preview.author": "Από {name}",
@ -450,6 +457,7 @@
"lists.subheading": "Οι λίστες σου", "lists.subheading": "Οι λίστες σου",
"load_pending": "{count, plural, one {# νέο στοιχείο} other {# νέα στοιχεία}}", "load_pending": "{count, plural, one {# νέο στοιχείο} other {# νέα στοιχεία}}",
"loading_indicator.label": "Φόρτωση…", "loading_indicator.label": "Φόρτωση…",
"media_gallery.hide": "Απόκρυψη",
"moved_to_account_banner.text": "Ο λογαριασμός σου {disabledAccount} είναι προσωρινά απενεργοποιημένος επειδή μεταφέρθηκες στον {movedToAccount}.", "moved_to_account_banner.text": "Ο λογαριασμός σου {disabledAccount} είναι προσωρινά απενεργοποιημένος επειδή μεταφέρθηκες στον {movedToAccount}.",
"mute_modal.hide_from_notifications": "Απόκρυψη από ειδοποιήσεις", "mute_modal.hide_from_notifications": "Απόκρυψη από ειδοποιήσεις",
"mute_modal.hide_options": "Απόκρυψη επιλογών", "mute_modal.hide_options": "Απόκρυψη επιλογών",
@ -461,6 +469,7 @@
"mute_modal.you_wont_see_mentions": "Δε θα βλέπεις τις αναρτήσεις που τον αναφέρουν.", "mute_modal.you_wont_see_mentions": "Δε θα βλέπεις τις αναρτήσεις που τον αναφέρουν.",
"mute_modal.you_wont_see_posts": "Μπορεί ακόμα να δει τις αναρτήσεις σου, αλλά δε θα βλέπεις τις δικές του.", "mute_modal.you_wont_see_posts": "Μπορεί ακόμα να δει τις αναρτήσεις σου, αλλά δε θα βλέπεις τις δικές του.",
"navigation_bar.about": "Σχετικά με", "navigation_bar.about": "Σχετικά με",
"navigation_bar.administration": "Διαχείριση",
"navigation_bar.advanced_interface": "Άνοιγμα σε προηγμένη διεπαφή ιστού", "navigation_bar.advanced_interface": "Άνοιγμα σε προηγμένη διεπαφή ιστού",
"navigation_bar.blocks": "Αποκλεισμένοι χρήστες", "navigation_bar.blocks": "Αποκλεισμένοι χρήστες",
"navigation_bar.bookmarks": "Σελιδοδείκτες", "navigation_bar.bookmarks": "Σελιδοδείκτες",
@ -477,6 +486,7 @@
"navigation_bar.follows_and_followers": "Ακολουθείς και σε ακολουθούν", "navigation_bar.follows_and_followers": "Ακολουθείς και σε ακολουθούν",
"navigation_bar.lists": "Λίστες", "navigation_bar.lists": "Λίστες",
"navigation_bar.logout": "Αποσύνδεση", "navigation_bar.logout": "Αποσύνδεση",
"navigation_bar.moderation": "Συντονισμός",
"navigation_bar.mutes": "Αποσιωπημένοι χρήστες", "navigation_bar.mutes": "Αποσιωπημένοι χρήστες",
"navigation_bar.opened_in_classic_interface": "Δημοσιεύσεις, λογαριασμοί και άλλες συγκεκριμένες σελίδες ανοίγονται από προεπιλογή στην κλασική διεπαφή ιστού.", "navigation_bar.opened_in_classic_interface": "Δημοσιεύσεις, λογαριασμοί και άλλες συγκεκριμένες σελίδες ανοίγονται από προεπιλογή στην κλασική διεπαφή ιστού.",
"navigation_bar.personal": "Προσωπικά", "navigation_bar.personal": "Προσωπικά",
@ -768,6 +778,7 @@
"status.bookmark": "Σελιδοδείκτης", "status.bookmark": "Σελιδοδείκτης",
"status.cancel_reblog_private": "Ακύρωση ενίσχυσης", "status.cancel_reblog_private": "Ακύρωση ενίσχυσης",
"status.cannot_reblog": "Αυτή η ανάρτηση δεν μπορεί να ενισχυθεί", "status.cannot_reblog": "Αυτή η ανάρτηση δεν μπορεί να ενισχυθεί",
"status.continued_thread": "Συνεχιζόμενο νήματος",
"status.copy": "Αντιγραφή συνδέσμου ανάρτησης", "status.copy": "Αντιγραφή συνδέσμου ανάρτησης",
"status.delete": "Διαγραφή", "status.delete": "Διαγραφή",
"status.detailed_status": "Προβολή λεπτομερούς συζήτησης", "status.detailed_status": "Προβολή λεπτομερούς συζήτησης",
@ -776,6 +787,7 @@
"status.edit": "Επεξεργασία", "status.edit": "Επεξεργασία",
"status.edited": "Τελευταία επεξεργασία {date}", "status.edited": "Τελευταία επεξεργασία {date}",
"status.edited_x_times": "Επεξεργάστηκε {count, plural, one {{count} φορά} other {{count} φορές}}", "status.edited_x_times": "Επεξεργάστηκε {count, plural, one {{count} φορά} other {{count} φορές}}",
"status.embed": "Απόκτηση κώδικα ενσωμάτωσης",
"status.favourite": "Αγαπημένα", "status.favourite": "Αγαπημένα",
"status.favourites": "{count, plural, one {# αγαπημένο} other {# αγαπημένα}}", "status.favourites": "{count, plural, one {# αγαπημένο} other {# αγαπημένα}}",
"status.filter": "Φιλτράρισμα αυτής της ανάρτησης", "status.filter": "Φιλτράρισμα αυτής της ανάρτησης",
@ -800,6 +812,7 @@
"status.reblogs.empty": "Κανείς δεν ενίσχυσε αυτή την ανάρτηση ακόμα. Μόλις το κάνει κάποιος, θα εμφανιστεί εδώ.", "status.reblogs.empty": "Κανείς δεν ενίσχυσε αυτή την ανάρτηση ακόμα. Μόλις το κάνει κάποιος, θα εμφανιστεί εδώ.",
"status.redraft": "Σβήσε & ξαναγράψε", "status.redraft": "Σβήσε & ξαναγράψε",
"status.remove_bookmark": "Αφαίρεση σελιδοδείκτη", "status.remove_bookmark": "Αφαίρεση σελιδοδείκτη",
"status.replied_in_thread": "Απαντήθηκε σε νήμα",
"status.replied_to": "Απάντησε στον {name}", "status.replied_to": "Απάντησε στον {name}",
"status.reply": "Απάντησε", "status.reply": "Απάντησε",
"status.replyAll": "Απάντησε στο νήμα συζήτησης", "status.replyAll": "Απάντησε στο νήμα συζήτησης",

View file

@ -231,6 +231,8 @@
"domain_pill.their_username": "Ilia unika identigilo sur ilia servilo. Eblas trovi uzantojn kun la sama uzantnomo sur malsamaj serviloj.", "domain_pill.their_username": "Ilia unika identigilo sur ilia servilo. Eblas trovi uzantojn kun la sama uzantnomo sur malsamaj serviloj.",
"domain_pill.username": "Uzantnomo", "domain_pill.username": "Uzantnomo",
"domain_pill.whats_in_a_handle": "Kio estas en identigo?", "domain_pill.whats_in_a_handle": "Kio estas en identigo?",
"domain_pill.who_they_are": "Ĉar identigoj diras, kiu iu estas kaj kie ili estas, vi povas interagi kun homoj tra la socia reto de <button>ActivityPub-funkciigitaj platformoj</button>.",
"domain_pill.who_you_are": "Ĉar via identigo diras kiu vi estas kaj kie vi estas, homoj povas interagi kun vi tra la socia reto de <button>ActivityPub-funkciigitaj platformoj</button>.",
"domain_pill.your_handle": "Via identigo:", "domain_pill.your_handle": "Via identigo:",
"domain_pill.your_server": "Via cifereca hejmo, kie loĝas ĉiuj viaj afiŝoj. Ĉu vi ne ŝatas ĉi tiun? Transloku servilojn iam ajn kaj alportu ankaŭ viajn sekvantojn.", "domain_pill.your_server": "Via cifereca hejmo, kie loĝas ĉiuj viaj afiŝoj. Ĉu vi ne ŝatas ĉi tiun? Transloku servilojn iam ajn kaj alportu ankaŭ viajn sekvantojn.",
"domain_pill.your_username": "Via unika identigilo sur ĉi tiu servilo. Eblas trovi uzantojn kun la sama uzantnomo sur malsamaj serviloj.", "domain_pill.your_username": "Via unika identigilo sur ĉi tiu servilo. Eblas trovi uzantojn kun la sama uzantnomo sur malsamaj serviloj.",
@ -301,6 +303,7 @@
"filter_modal.select_filter.subtitle": "Uzu ekzistantan kategorion aŭ kreu novan", "filter_modal.select_filter.subtitle": "Uzu ekzistantan kategorion aŭ kreu novan",
"filter_modal.select_filter.title": "Filtri ĉi tiun afiŝon", "filter_modal.select_filter.title": "Filtri ĉi tiun afiŝon",
"filter_modal.title.status": "Filtri mesaĝon", "filter_modal.title.status": "Filtri mesaĝon",
"filter_warning.matches_filter": "Filtrilo de kongruoj “{title}”",
"filtered_notifications_banner.pending_requests": "El {count, plural, =0 {neniu} one {unu persono} other {# homoj}} vi eble konas", "filtered_notifications_banner.pending_requests": "El {count, plural, =0 {neniu} one {unu persono} other {# homoj}} vi eble konas",
"filtered_notifications_banner.title": "Filtritaj sciigoj", "filtered_notifications_banner.title": "Filtritaj sciigoj",
"firehose.all": "Ĉiuj", "firehose.all": "Ĉiuj",
@ -309,11 +312,16 @@
"follow_request.authorize": "Rajtigi", "follow_request.authorize": "Rajtigi",
"follow_request.reject": "Rifuzi", "follow_request.reject": "Rifuzi",
"follow_requests.unlocked_explanation": "Kvankam via konto ne estas ŝlosita, la dungitaro de {domain} opinias, ke vi eble volas revizii petojn pri sekvado de ĉi tiuj kontoj permane.", "follow_requests.unlocked_explanation": "Kvankam via konto ne estas ŝlosita, la dungitaro de {domain} opinias, ke vi eble volas revizii petojn pri sekvado de ĉi tiuj kontoj permane.",
"follow_suggestions.curated_suggestion": "Elekto de stabo",
"follow_suggestions.dismiss": "Ne montri denove", "follow_suggestions.dismiss": "Ne montri denove",
"follow_suggestions.featured_longer": "Mane elektita de la teamo de {domain}",
"follow_suggestions.friends_of_friends_longer": "Populara inter homoj, kiujn vi sekvas", "follow_suggestions.friends_of_friends_longer": "Populara inter homoj, kiujn vi sekvas",
"follow_suggestions.hints.featured": "Ĉi tiu profilo estis mane elektita de la teamo de {domain}.",
"follow_suggestions.hints.friends_of_friends": "Ĉi tiu profilo estas populara inter la homoj, kiujn vi sekvas.", "follow_suggestions.hints.friends_of_friends": "Ĉi tiu profilo estas populara inter la homoj, kiujn vi sekvas.",
"follow_suggestions.hints.most_followed": "Ĉi tiu profilo estas unu el la plej sekvataj en {domain}.", "follow_suggestions.hints.most_followed": "Ĉi tiu profilo estas unu el la plej sekvataj en {domain}.",
"follow_suggestions.hints.most_interactions": "Ĉi tiu profilo lastatempe ricevis multe da atento sur {domain}.",
"follow_suggestions.hints.similar_to_recently_followed": "Ĉi tiu profilo similas al la profiloj kiujn vi plej lastatempe sekvis.", "follow_suggestions.hints.similar_to_recently_followed": "Ĉi tiu profilo similas al la profiloj kiujn vi plej lastatempe sekvis.",
"follow_suggestions.personalized_suggestion": "Agordita propono",
"follow_suggestions.popular_suggestion": "Popularaj proponoj", "follow_suggestions.popular_suggestion": "Popularaj proponoj",
"follow_suggestions.popular_suggestion_longer": "Populara en {domain}", "follow_suggestions.popular_suggestion_longer": "Populara en {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "Simile al profiloj, kiujn vi lastatempe sekvis", "follow_suggestions.similar_to_recently_followed_longer": "Simile al profiloj, kiujn vi lastatempe sekvis",
@ -346,9 +354,12 @@
"hashtag.unfollow": "Ne plu sekvi la kradvorton", "hashtag.unfollow": "Ne plu sekvi la kradvorton",
"hashtags.and_other": "…kaj {count, plural,other {# pli}}", "hashtags.and_other": "…kaj {count, plural,other {# pli}}",
"hints.profiles.followers_may_be_missing": "Sekvantoj por ĉi tiu profilo eble mankas.", "hints.profiles.followers_may_be_missing": "Sekvantoj por ĉi tiu profilo eble mankas.",
"hints.profiles.follows_may_be_missing": "Sekvatoj de ĉi tiu profilo eble mankas.",
"hints.profiles.posts_may_be_missing": "Iuj afiŝoj de ĉi tiu profilo eble mankas.", "hints.profiles.posts_may_be_missing": "Iuj afiŝoj de ĉi tiu profilo eble mankas.",
"hints.profiles.see_more_followers": "Vidi pli da sekvantoj sur {domain}", "hints.profiles.see_more_followers": "Vidi pli da sekvantoj sur {domain}",
"hints.profiles.see_more_follows": "Vidi pli da sekvatoj sur {domain}",
"hints.profiles.see_more_posts": "Vidi pli da afiŝoj sur {domain}", "hints.profiles.see_more_posts": "Vidi pli da afiŝoj sur {domain}",
"hints.threads.replies_may_be_missing": "Respondoj de aliaj serviloj eble mankas.",
"hints.threads.see_more": "Vidi pli da respondoj sur {domain}", "hints.threads.see_more": "Vidi pli da respondoj sur {domain}",
"home.column_settings.show_reblogs": "Montri diskonigojn", "home.column_settings.show_reblogs": "Montri diskonigojn",
"home.column_settings.show_replies": "Montri respondojn", "home.column_settings.show_replies": "Montri respondojn",
@ -358,6 +369,10 @@
"home.pending_critical_update.title": "Kritika sekurĝisdatigo estas disponebla!", "home.pending_critical_update.title": "Kritika sekurĝisdatigo estas disponebla!",
"home.show_announcements": "Montri anoncojn", "home.show_announcements": "Montri anoncojn",
"ignore_notifications_modal.disclaimer": "Mastodon ne povas informi uzantojn, ke vi ignoris iliajn sciigojn. Ignori sciigojn ne malhelpos la mesaĝojn mem esti senditaj.", "ignore_notifications_modal.disclaimer": "Mastodon ne povas informi uzantojn, ke vi ignoris iliajn sciigojn. Ignori sciigojn ne malhelpos la mesaĝojn mem esti senditaj.",
"ignore_notifications_modal.filter_instead": "Filtri anstataŭe",
"ignore_notifications_modal.filter_to_act_users": "Vi ankoraŭ povos akcepti, malakcepti aŭ raporti uzantojn",
"ignore_notifications_modal.filter_to_avoid_confusion": "Filtrado helpas eviti eblan konfuzon",
"ignore_notifications_modal.filter_to_review_separately": "Vi povas revizii filtritajn sciigojn aparte",
"ignore_notifications_modal.ignore": "Ignori sciigojn", "ignore_notifications_modal.ignore": "Ignori sciigojn",
"ignore_notifications_modal.limited_accounts_title": "Ĉu ignori sciigojn de moderigitaj kontoj?", "ignore_notifications_modal.limited_accounts_title": "Ĉu ignori sciigojn de moderigitaj kontoj?",
"ignore_notifications_modal.new_accounts_title": "Ĉu ignori sciigojn de novaj kontoj?", "ignore_notifications_modal.new_accounts_title": "Ĉu ignori sciigojn de novaj kontoj?",
@ -471,6 +486,7 @@
"navigation_bar.follows_and_followers": "Sekvatoj kaj sekvantoj", "navigation_bar.follows_and_followers": "Sekvatoj kaj sekvantoj",
"navigation_bar.lists": "Listoj", "navigation_bar.lists": "Listoj",
"navigation_bar.logout": "Adiaŭi", "navigation_bar.logout": "Adiaŭi",
"navigation_bar.moderation": "Modereco",
"navigation_bar.mutes": "Silentigitaj uzantoj", "navigation_bar.mutes": "Silentigitaj uzantoj",
"navigation_bar.opened_in_classic_interface": "Afiŝoj, kontoj, kaj aliaj specifaj paĝoj kiuj estas malfermititaj defaulta en la klasika reta interfaco.", "navigation_bar.opened_in_classic_interface": "Afiŝoj, kontoj, kaj aliaj specifaj paĝoj kiuj estas malfermititaj defaulta en la klasika reta interfaco.",
"navigation_bar.personal": "Persone", "navigation_bar.personal": "Persone",
@ -486,7 +502,9 @@
"notification.admin.report_statuses": "{name} raportis {target} por {category}", "notification.admin.report_statuses": "{name} raportis {target} por {category}",
"notification.admin.report_statuses_other": "{name} raportis {target}", "notification.admin.report_statuses_other": "{name} raportis {target}",
"notification.admin.sign_up": "{name} kreis konton", "notification.admin.sign_up": "{name} kreis konton",
"notification.admin.sign_up.name_and_others": "{name} kaj {count, plural, one {# alia} other {# aliaj}} kreis konton",
"notification.favourite": "{name} stelumis vian afiŝon", "notification.favourite": "{name} stelumis vian afiŝon",
"notification.favourite.name_and_others_with_link": "{name} kaj <a>{count, plural, one {# alia} other {# aliaj}}</a> ŝatis vian afiŝon",
"notification.follow": "{name} eksekvis vin", "notification.follow": "{name} eksekvis vin",
"notification.follow.name_and_others": "{name} kaj {count, plural, one {# alia} other {# aliaj}} sekvis vin", "notification.follow.name_and_others": "{name} kaj {count, plural, one {# alia} other {# aliaj}} sekvis vin",
"notification.follow_request": "{name} petis sekvi vin", "notification.follow_request": "{name} petis sekvi vin",
@ -506,22 +524,32 @@
"notification.moderation_warning.action_silence": "Via konto estis limigita.", "notification.moderation_warning.action_silence": "Via konto estis limigita.",
"notification.moderation_warning.action_suspend": "Via konto estas malakceptita.", "notification.moderation_warning.action_suspend": "Via konto estas malakceptita.",
"notification.own_poll": "Via enketo finiĝis", "notification.own_poll": "Via enketo finiĝis",
"notification.poll": "Balotenketo, en kiu vi voĉdonis, finiĝis",
"notification.reblog": "{name} diskonigis vian afiŝon", "notification.reblog": "{name} diskonigis vian afiŝon",
"notification.reblog.name_and_others_with_link": "{name} kaj <a>{count, plural, one {# alia} other {# aliaj}}</a> diskonigis vian afiŝon", "notification.reblog.name_and_others_with_link": "{name} kaj <a>{count, plural, one {# alia} other {# aliaj}}</a> diskonigis vian afiŝon",
"notification.relationships_severance_event": "Perditaj konektoj kun {name}",
"notification.relationships_severance_event.account_suspension": "Administranto de {from} malakceptis {target}, kio signifas, ke vi ne plu povas ricevi ĝisdatigojn de ili aŭ interagi kun ili.",
"notification.relationships_severance_event.domain_block": "Administranto de {from} blokis {target}, inkluzive de {followersCount} de viaj sekvantoj kaj {followingCount, plural, one {# konto} other {# kontoj}} kiujn vi sekvas.",
"notification.relationships_severance_event.learn_more": "Lerni pli", "notification.relationships_severance_event.learn_more": "Lerni pli",
"notification.relationships_severance_event.user_domain_block": "Vi blokis {target}, forigante {followersCount} de viaj sekvantoj kaj {followingCount, plural, one {# konto} other {# kontoj}} kiujn vi sekvas.",
"notification.status": "{name} ĵus afiŝis", "notification.status": "{name} ĵus afiŝis",
"notification.update": "{name} redaktis afiŝon", "notification.update": "{name} redaktis afiŝon",
"notification_requests.accept": "Akcepti", "notification_requests.accept": "Akcepti",
"notification_requests.accept_multiple": "{count, plural, one {Akcepti # peton…} other {Akcepti # petojn…}}", "notification_requests.accept_multiple": "{count, plural, one {Akcepti # peton…} other {Akcepti # petojn…}}",
"notification_requests.confirm_accept_multiple.button": "{count, plural, one {Akcepti peton} other {Akcepti petojn}}", "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Akcepti peton} other {Akcepti petojn}}",
"notification_requests.confirm_accept_multiple.message": "Vi estas akceptonta {count, plural, one {unu sciigan peton} other {# sciigajn petojn}}. Ĉu vi certas, ke vi volas daŭrigi?",
"notification_requests.confirm_accept_multiple.title": "Ĉu akcepti sciigajn petojn?", "notification_requests.confirm_accept_multiple.title": "Ĉu akcepti sciigajn petojn?",
"notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Malakcepti peton} other {Malakcepti petojn}}", "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Malakcepti peton} other {Malakcepti petojn}}",
"notification_requests.confirm_dismiss_multiple.message": "Vi estas malakceptonta {count, plural, one {unu sciigan peton} other {# sciigajn petojn}}. Vi ne povos facile aliri {count, plural, one {ĝin} other {ilin}} denove. Ĉu vi certas, ke vi volas daŭrigi?",
"notification_requests.confirm_dismiss_multiple.title": "Ĉu malakcepti sciigajn petojn?", "notification_requests.confirm_dismiss_multiple.title": "Ĉu malakcepti sciigajn petojn?",
"notification_requests.dismiss": "Forĵeti", "notification_requests.dismiss": "Forĵeti",
"notification_requests.dismiss_multiple": "{count, plural, one {Malakcepti # peton…} other {# Malakcepti # petojn…}}",
"notification_requests.edit_selection": "Redakti", "notification_requests.edit_selection": "Redakti",
"notification_requests.exit_selection": "Farita", "notification_requests.exit_selection": "Farita",
"notification_requests.explainer_for_limited_account": "Sciigoj de ĉi tiu konto estis filtritaj ĉar la konto estis limigita de moderanto.", "notification_requests.explainer_for_limited_account": "Sciigoj de ĉi tiu konto estis filtritaj ĉar la konto estis limigita de moderanto.",
"notification_requests.explainer_for_limited_remote_account": "Sciigoj de ĉi tiu konto estis filtritaj ĉar la konto aŭ ĝia servilo estis limigitaj de moderanto.", "notification_requests.explainer_for_limited_remote_account": "Sciigoj de ĉi tiu konto estis filtritaj ĉar la konto aŭ ĝia servilo estis limigitaj de moderanto.",
"notification_requests.maximize": "Maksimumigi",
"notification_requests.minimize_banner": "Minimumigi filtritajn sciigojn-rubandon",
"notification_requests.notifications_from": "Sciigoj de {name}", "notification_requests.notifications_from": "Sciigoj de {name}",
"notification_requests.title": "Filtritaj sciigoj", "notification_requests.title": "Filtritaj sciigoj",
"notification_requests.view": "Vidi sciigojn", "notification_requests.view": "Vidi sciigojn",
@ -533,6 +561,7 @@
"notifications.column_settings.alert": "Sciigoj de la retumilo", "notifications.column_settings.alert": "Sciigoj de la retumilo",
"notifications.column_settings.favourite": "Stelumoj:", "notifications.column_settings.favourite": "Stelumoj:",
"notifications.column_settings.filter_bar.advanced": "Montri ĉiujn kategoriojn", "notifications.column_settings.filter_bar.advanced": "Montri ĉiujn kategoriojn",
"notifications.column_settings.filter_bar.category": "Rapida filtrila breto",
"notifications.column_settings.follow": "Novaj sekvantoj:", "notifications.column_settings.follow": "Novaj sekvantoj:",
"notifications.column_settings.follow_request": "Novaj petoj de sekvado:", "notifications.column_settings.follow_request": "Novaj petoj de sekvado:",
"notifications.column_settings.mention": "Mencioj:", "notifications.column_settings.mention": "Mencioj:",
@ -548,7 +577,7 @@
"notifications.filter.all": "Ĉiuj", "notifications.filter.all": "Ĉiuj",
"notifications.filter.boosts": "Diskonigoj", "notifications.filter.boosts": "Diskonigoj",
"notifications.filter.favourites": "Stelumoj", "notifications.filter.favourites": "Stelumoj",
"notifications.filter.follows": "Sekvoj", "notifications.filter.follows": "Sekvatoj",
"notifications.filter.mentions": "Mencioj", "notifications.filter.mentions": "Mencioj",
"notifications.filter.polls": "Balotenketaj rezultoj", "notifications.filter.polls": "Balotenketaj rezultoj",
"notifications.filter.statuses": "Ĝisdatigoj de homoj, kiujn vi sekvas", "notifications.filter.statuses": "Ĝisdatigoj de homoj, kiujn vi sekvas",
@ -563,12 +592,16 @@
"notifications.policy.drop": "Ignori", "notifications.policy.drop": "Ignori",
"notifications.policy.drop_hint": "Sendi al la malpleno, por neniam esti vidita denove", "notifications.policy.drop_hint": "Sendi al la malpleno, por neniam esti vidita denove",
"notifications.policy.filter": "Filtri", "notifications.policy.filter": "Filtri",
"notifications.policy.filter_hint": "Sendi al filtritaj sciigoj-enirkesto",
"notifications.policy.filter_limited_accounts_hint": "Limigita de servilaj moderigantoj",
"notifications.policy.filter_limited_accounts_title": "Moderigitaj kontoj", "notifications.policy.filter_limited_accounts_title": "Moderigitaj kontoj",
"notifications.policy.filter_new_accounts.hint": "Kreite en la {days, plural, one {lasta tago} other {# lastaj tagoj}}", "notifications.policy.filter_new_accounts.hint": "Kreite en la {days, plural, one {lasta tago} other {# lastaj tagoj}}",
"notifications.policy.filter_new_accounts_title": "Novaj kontoj", "notifications.policy.filter_new_accounts_title": "Novaj kontoj",
"notifications.policy.filter_not_followers_hint": "Inkluzive de homoj, kiuj sekvis vin malpli ol {days, plural, one {unu tago} other {# tagoj}}",
"notifications.policy.filter_not_followers_title": "Homoj, kiuj ne sekvas vin", "notifications.policy.filter_not_followers_title": "Homoj, kiuj ne sekvas vin",
"notifications.policy.filter_not_following_hint": "Ĝis vi permane aprobas ilin", "notifications.policy.filter_not_following_hint": "Ĝis vi permane aprobas ilin",
"notifications.policy.filter_not_following_title": "Homoj, kiujn vi ne sekvas", "notifications.policy.filter_not_following_title": "Homoj, kiujn vi ne sekvas",
"notifications.policy.filter_private_mentions_hint": "Filtrite krom se ĝi respondas al via propra mencio aŭ se vi sekvas la sendinton",
"notifications.policy.filter_private_mentions_title": "Nepetitaj privataj mencioj", "notifications.policy.filter_private_mentions_title": "Nepetitaj privataj mencioj",
"notifications.policy.title": "Administri sciigojn de…", "notifications.policy.title": "Administri sciigojn de…",
"notifications_permission_banner.enable": "Ŝalti retumilajn sciigojn", "notifications_permission_banner.enable": "Ŝalti retumilajn sciigojn",
@ -580,8 +613,8 @@
"onboarding.actions.go_to_home": "Go to your home feed", "onboarding.actions.go_to_home": "Go to your home feed",
"onboarding.compose.template": "Saluton #Mastodon!", "onboarding.compose.template": "Saluton #Mastodon!",
"onboarding.follows.empty": "Bedaŭrinde, neniu rezulto estas montrebla nuntempe. Vi povas provi serĉi aŭ foliumi la esploran paĝon por trovi kontojn por sekvi, aŭ retrovi baldaŭ.", "onboarding.follows.empty": "Bedaŭrinde, neniu rezulto estas montrebla nuntempe. Vi povas provi serĉi aŭ foliumi la esploran paĝon por trovi kontojn por sekvi, aŭ retrovi baldaŭ.",
"onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.lead": "Via hejma fluo estas la ĉefa maniero sperti Mastodon. Ju pli da homoj vi sekvas, des pli aktiva kaj interesa ĝi estos. Por komenci, jen kelkaj sugestoj:",
"onboarding.follows.title": "Popular on Mastodon", "onboarding.follows.title": "Agordi vian hejman fluon",
"onboarding.profile.discoverable": "Trovebligi mian profilon", "onboarding.profile.discoverable": "Trovebligi mian profilon",
"onboarding.profile.discoverable_hint": "Kiam vi aliĝi al trovebleco ĉe Mastodon, viaj afiŝoj eble aperos en serĉaj rezultoj kaj populariĝoj, kaj via profilo eble estas sugestota al personoj kun similaj intereseoj al vi.", "onboarding.profile.discoverable_hint": "Kiam vi aliĝi al trovebleco ĉe Mastodon, viaj afiŝoj eble aperos en serĉaj rezultoj kaj populariĝoj, kaj via profilo eble estas sugestota al personoj kun similaj intereseoj al vi.",
"onboarding.profile.display_name": "Publika nomo", "onboarding.profile.display_name": "Publika nomo",
@ -602,7 +635,7 @@
"onboarding.start.title": "Vi atingas ĝin!", "onboarding.start.title": "Vi atingas ĝin!",
"onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.", "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
"onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}", "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
"onboarding.steps.publish_status.body": "Say hello to the world.", "onboarding.steps.publish_status.body": "Salutu la mondon per teksto, fotoj, filmetoj aŭ balotenketoj {emoji}",
"onboarding.steps.publish_status.title": "Fari vian unuan afiŝon", "onboarding.steps.publish_status.title": "Fari vian unuan afiŝon",
"onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.", "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
"onboarding.steps.setup_profile.title": "Customize your profile", "onboarding.steps.setup_profile.title": "Customize your profile",
@ -632,6 +665,7 @@
"privacy.private.short": "Sekvantoj", "privacy.private.short": "Sekvantoj",
"privacy.public.long": "Ĉiujn ajn ĉe kaj ekster Mastodon", "privacy.public.long": "Ĉiujn ajn ĉe kaj ekster Mastodon",
"privacy.public.short": "Publika", "privacy.public.short": "Publika",
"privacy.unlisted.additional": "Ĉi tio kondutas ekzakte kiel publika, krom ke la afiŝo ne aperos en vivaj fluoj aŭ kradvortoj, esploro aŭ Mastodon-serĉo, eĉ se vi estas enskribita en la tuta konto.",
"privacy.unlisted.long": "Malpli algoritmaj fanfaroj", "privacy.unlisted.long": "Malpli algoritmaj fanfaroj",
"privacy.unlisted.short": "Diskrete publika", "privacy.unlisted.short": "Diskrete publika",
"privacy_policy.last_updated": "Laste ĝisdatigita en {date}", "privacy_policy.last_updated": "Laste ĝisdatigita en {date}",
@ -651,7 +685,9 @@
"relative_time.minutes": "{number}m", "relative_time.minutes": "{number}m",
"relative_time.seconds": "{number}s", "relative_time.seconds": "{number}s",
"relative_time.today": "hodiaŭ", "relative_time.today": "hodiaŭ",
"reply_indicator.attachments": "{count, plural, one {# aldonaĵo} other {# aldonaĵoj}}",
"reply_indicator.cancel": "Nuligi", "reply_indicator.cancel": "Nuligi",
"reply_indicator.poll": "Balotenketo",
"report.block": "Bloki", "report.block": "Bloki",
"report.block_explanation": "Vi ne vidos iliajn afiŝojn. Ili ne povos vidi viajn afiŝojn, nek sekvi vin. Ili ne scios, ke vi blokas ilin.", "report.block_explanation": "Vi ne vidos iliajn afiŝojn. Ili ne povos vidi viajn afiŝojn, nek sekvi vin. Ili ne scios, ke vi blokas ilin.",
"report.categories.legal": "Laŭleĝa", "report.categories.legal": "Laŭleĝa",
@ -732,6 +768,7 @@
"server_banner.server_stats": "Statistikoj de la servilo:", "server_banner.server_stats": "Statistikoj de la servilo:",
"sign_in_banner.create_account": "Krei konton", "sign_in_banner.create_account": "Krei konton",
"sign_in_banner.follow_anyone": "Sekvi iun ajn tra la fediverso kaj vidi ĉion en kronologia ordo. Neniuj algoritmoj, reklamoj aŭ klakbetoj videblas.", "sign_in_banner.follow_anyone": "Sekvi iun ajn tra la fediverso kaj vidi ĉion en kronologia ordo. Neniuj algoritmoj, reklamoj aŭ klakbetoj videblas.",
"sign_in_banner.mastodon_is": "Mastodonto estas la plej bona maniero por resti flank-al-flanke kun kio okazas.",
"sign_in_banner.sign_in": "Saluti", "sign_in_banner.sign_in": "Saluti",
"sign_in_banner.sso_redirect": "Ensalutu aŭ Registriĝi", "sign_in_banner.sso_redirect": "Ensalutu aŭ Registriĝi",
"status.admin_account": "Malfermi fasadon de moderigado por @{name}", "status.admin_account": "Malfermi fasadon de moderigado por @{name}",
@ -741,6 +778,7 @@
"status.bookmark": "Aldoni al la legosignoj", "status.bookmark": "Aldoni al la legosignoj",
"status.cancel_reblog_private": "Ne plu diskonigi", "status.cancel_reblog_private": "Ne plu diskonigi",
"status.cannot_reblog": "Ĉi tiun afiŝon ne eblas diskonigi", "status.cannot_reblog": "Ĉi tiun afiŝon ne eblas diskonigi",
"status.continued_thread": "Daŭrigis fadenon",
"status.copy": "Kopii la ligilon al la mesaĝo", "status.copy": "Kopii la ligilon al la mesaĝo",
"status.delete": "Forigi", "status.delete": "Forigi",
"status.detailed_status": "Detala konversacia vido", "status.detailed_status": "Detala konversacia vido",
@ -749,6 +787,7 @@
"status.edit": "Redakti", "status.edit": "Redakti",
"status.edited": "Laste redaktita {date}", "status.edited": "Laste redaktita {date}",
"status.edited_x_times": "Redactita {count, plural, one {{count} fojon} other {{count} fojojn}}", "status.edited_x_times": "Redactita {count, plural, one {{count} fojon} other {{count} fojojn}}",
"status.embed": "Akiri enkorpigan kodon",
"status.favourite": "Ŝatata", "status.favourite": "Ŝatata",
"status.favourites": "{count, plural, one {plej ŝatata} other {plej ŝatataj}}", "status.favourites": "{count, plural, one {plej ŝatata} other {plej ŝatataj}}",
"status.filter": "Filtri ĉi tiun afiŝon", "status.filter": "Filtri ĉi tiun afiŝon",
@ -773,6 +812,7 @@
"status.reblogs.empty": "Ankoraŭ neniu diskonigis tiun afiŝon. Kiam iu faras tion, ri aperos ĉi tie.", "status.reblogs.empty": "Ankoraŭ neniu diskonigis tiun afiŝon. Kiam iu faras tion, ri aperos ĉi tie.",
"status.redraft": "Forigi kaj reskribi", "status.redraft": "Forigi kaj reskribi",
"status.remove_bookmark": "Forigi legosignon", "status.remove_bookmark": "Forigi legosignon",
"status.replied_in_thread": "Respondis en fadeno",
"status.replied_to": "Respondis al {name}", "status.replied_to": "Respondis al {name}",
"status.reply": "Respondi", "status.reply": "Respondi",
"status.replyAll": "Respondi al la fadeno", "status.replyAll": "Respondi al la fadeno",

View file

@ -435,7 +435,7 @@
"lightbox.next": "Siguiente", "lightbox.next": "Siguiente",
"lightbox.previous": "Anterior", "lightbox.previous": "Anterior",
"lightbox.zoom_in": "Ampliar al tamaño real", "lightbox.zoom_in": "Ampliar al tamaño real",
"lightbox.zoom_out": "Ampliar para ajustar", "lightbox.zoom_out": "Ampliar hasta ajustar",
"limited_account_hint.action": "Mostrar perfil de todos modos", "limited_account_hint.action": "Mostrar perfil de todos modos",
"limited_account_hint.title": "Este perfil fue ocultado por los moderadores de {domain}.", "limited_account_hint.title": "Este perfil fue ocultado por los moderadores de {domain}.",
"link_preview.author": "Por {name}", "link_preview.author": "Por {name}",

View file

@ -267,7 +267,7 @@
"empty_column.favourites": "Todavía nadie marcó esta publicación como favorita. Cuando alguien lo haga, se mostrarán aquí.", "empty_column.favourites": "Todavía nadie marcó esta publicación como favorita. Cuando alguien lo haga, se mostrarán aquí.",
"empty_column.follow_requests": "No tienes ninguna petición de seguidor. Cuando recibas una, se mostrará aquí.", "empty_column.follow_requests": "No tienes ninguna petición de seguidor. Cuando recibas una, se mostrará aquí.",
"empty_column.followed_tags": "No has seguido ninguna etiqueta todavía. Cuando lo hagas, se mostrarán aquí.", "empty_column.followed_tags": "No has seguido ninguna etiqueta todavía. Cuando lo hagas, se mostrarán aquí.",
"empty_column.hashtag": "No hay nada en este hashtag aún.", "empty_column.hashtag": "No hay nada en esta etiqueta todavía.",
"empty_column.home": "¡Tu línea temporal está vacía! Sigue a más personas para rellenarla.", "empty_column.home": "¡Tu línea temporal está vacía! Sigue a más personas para rellenarla.",
"empty_column.list": "Aún no hay nada en esta lista. Cuando los miembros de esta lista publiquen nuevos estados, estos aparecerán aquí.", "empty_column.list": "Aún no hay nada en esta lista. Cuando los miembros de esta lista publiquen nuevos estados, estos aparecerán aquí.",
"empty_column.lists": "No tienes ninguna lista. Cuando crees una, se mostrará aquí.", "empty_column.lists": "No tienes ninguna lista. Cuando crees una, se mostrará aquí.",
@ -342,7 +342,7 @@
"hashtag.column_header.tag_mode.any": "o {additional}", "hashtag.column_header.tag_mode.any": "o {additional}",
"hashtag.column_header.tag_mode.none": "sin {additional}", "hashtag.column_header.tag_mode.none": "sin {additional}",
"hashtag.column_settings.select.no_options_message": "No se encontraron sugerencias", "hashtag.column_settings.select.no_options_message": "No se encontraron sugerencias",
"hashtag.column_settings.select.placeholder": "Introduzca hashtags…", "hashtag.column_settings.select.placeholder": "Introduce etiquetas…",
"hashtag.column_settings.tag_mode.all": "Todos estos", "hashtag.column_settings.tag_mode.all": "Todos estos",
"hashtag.column_settings.tag_mode.any": "Cualquiera de estos", "hashtag.column_settings.tag_mode.any": "Cualquiera de estos",
"hashtag.column_settings.tag_mode.none": "Ninguno de estos", "hashtag.column_settings.tag_mode.none": "Ninguno de estos",
@ -637,7 +637,7 @@
"onboarding.steps.follow_people.title": "Personaliza tu línea de inicio", "onboarding.steps.follow_people.title": "Personaliza tu línea de inicio",
"onboarding.steps.publish_status.body": "Di hola al mundo con texto, fotos, vídeos o encuestas {emoji}", "onboarding.steps.publish_status.body": "Di hola al mundo con texto, fotos, vídeos o encuestas {emoji}",
"onboarding.steps.publish_status.title": "Escribe tu primera publicación", "onboarding.steps.publish_status.title": "Escribe tu primera publicación",
"onboarding.steps.setup_profile.body": "Aumenta tus interacciones tcompletando tu perfil.", "onboarding.steps.setup_profile.body": "Aumenta tus interacciones con un perfil completo.",
"onboarding.steps.setup_profile.title": "Personaliza tu perfil", "onboarding.steps.setup_profile.title": "Personaliza tu perfil",
"onboarding.steps.share_profile.body": "¡Dile a tus amigos cómo encontrarte en Mastodon!", "onboarding.steps.share_profile.body": "¡Dile a tus amigos cómo encontrarte en Mastodon!",
"onboarding.steps.share_profile.title": "Comparte tu perfil de Mastodon", "onboarding.steps.share_profile.title": "Comparte tu perfil de Mastodon",

View file

@ -434,6 +434,8 @@
"lightbox.close": "Dùin", "lightbox.close": "Dùin",
"lightbox.next": "Air adhart", "lightbox.next": "Air adhart",
"lightbox.previous": "Air ais", "lightbox.previous": "Air ais",
"lightbox.zoom_in": "Sùm dhan fhìor-mheud",
"lightbox.zoom_out": "Sùm fèin-obrachail",
"limited_account_hint.action": "Seall a phròifil co-dhiù", "limited_account_hint.action": "Seall a phròifil co-dhiù",
"limited_account_hint.title": "Chaidh a phròifil seo fhalach le maoir {domain}.", "limited_account_hint.title": "Chaidh a phròifil seo fhalach le maoir {domain}.",
"link_preview.author": "Le {name}", "link_preview.author": "Le {name}",

View file

@ -368,13 +368,13 @@
"home.pending_critical_update.link": "Mira as actualizacións", "home.pending_critical_update.link": "Mira as actualizacións",
"home.pending_critical_update.title": "Hai una actualización crítica de seguridade!", "home.pending_critical_update.title": "Hai una actualización crítica de seguridade!",
"home.show_announcements": "Amosar anuncios", "home.show_announcements": "Amosar anuncios",
"ignore_notifications_modal.disclaimer": "Mastodon non pode informar ás usuarias se ignoraches as súas notificacións. Ao ignorar as notificacións non evitarás que as mensaxes sexan enviadas igualmente.", "ignore_notifications_modal.disclaimer": "Mastodon non pode informar ás usuarias de que ignoraches as súas notificacións. Ao ignorar as notificacións non evitarás que as mensaxes sexan enviadas igualmente.",
"ignore_notifications_modal.filter_instead": "Filtrar igualmente", "ignore_notifications_modal.filter_instead": "Filtrar igualmente",
"ignore_notifications_modal.filter_to_act_users": "Poderás seguir aceptando, rexeitando e denunciando usuarias", "ignore_notifications_modal.filter_to_act_users": "Poderás seguir aceptando, rexeitando e denunciando usuarias",
"ignore_notifications_modal.filter_to_avoid_confusion": "Ao filtrar axudas a evitar posibles confusións", "ignore_notifications_modal.filter_to_avoid_confusion": "Ao filtrar axudas a evitar posibles confusións",
"ignore_notifications_modal.filter_to_review_separately": "Podes revisar as notificacións filtradas por separado", "ignore_notifications_modal.filter_to_review_separately": "Podes revisar por separado as notificacións filtradas",
"ignore_notifications_modal.ignore": "Ignorar notificacións", "ignore_notifications_modal.ignore": "Ignorar notificacións",
"ignore_notifications_modal.limited_accounts_title": "Ignorar notificacións desde contas moderadas?", "ignore_notifications_modal.limited_accounts_title": "Ignorar notificacións desde contas limitadas?",
"ignore_notifications_modal.new_accounts_title": "Ignorar notificacións desde novas contas?", "ignore_notifications_modal.new_accounts_title": "Ignorar notificacións desde novas contas?",
"ignore_notifications_modal.not_followers_title": "Ignorar notificacións de persoas que non te seguen?", "ignore_notifications_modal.not_followers_title": "Ignorar notificacións de persoas que non te seguen?",
"ignore_notifications_modal.not_following_title": "Ignorar notificacións de persoas que non segues?", "ignore_notifications_modal.not_following_title": "Ignorar notificacións de persoas que non segues?",
@ -463,7 +463,7 @@
"mute_modal.hide_options": "Opcións ao ocultar", "mute_modal.hide_options": "Opcións ao ocultar",
"mute_modal.indefinite": "Ata que as reactive", "mute_modal.indefinite": "Ata que as reactive",
"mute_modal.show_options": "Mostrar opcións", "mute_modal.show_options": "Mostrar opcións",
"mute_modal.they_can_mention_and_follow": "Pódete mencionar e seguirte, pero non o verás.", "mute_modal.they_can_mention_and_follow": "Pódete mencionar e seguirte, pero non a verás.",
"mute_modal.they_wont_know": "Non saberá que a acalaches.", "mute_modal.they_wont_know": "Non saberá que a acalaches.",
"mute_modal.title": "Acalar usuaria?", "mute_modal.title": "Acalar usuaria?",
"mute_modal.you_wont_see_mentions": "Non verás as publicacións que a mencionen.", "mute_modal.you_wont_see_mentions": "Non verás as publicacións que a mencionen.",

View file

@ -2,7 +2,7 @@ import { createReducer, isAnyOf } from '@reduxjs/toolkit';
import { import {
fetchNotificationPolicy, fetchNotificationPolicy,
decreasePendingNotificationsCount, decreasePendingRequestsCount,
updateNotificationsPolicy, updateNotificationsPolicy,
} from 'mastodon/actions/notification_policies'; } from 'mastodon/actions/notification_policies';
import type { NotificationPolicy } from 'mastodon/models/notification_policy'; import type { NotificationPolicy } from 'mastodon/models/notification_policy';
@ -10,10 +10,9 @@ import type { NotificationPolicy } from 'mastodon/models/notification_policy';
export const notificationPolicyReducer = export const notificationPolicyReducer =
createReducer<NotificationPolicy | null>(null, (builder) => { createReducer<NotificationPolicy | null>(null, (builder) => {
builder builder
.addCase(decreasePendingNotificationsCount, (state, action) => { .addCase(decreasePendingRequestsCount, (state, action) => {
if (state) { if (state) {
state.summary.pending_notifications_count -= action.payload; state.summary.pending_requests_count -= action.payload;
state.summary.pending_requests_count -= 1;
} }
}) })
.addMatcher( .addMatcher(

View file

@ -0,0 +1,23 @@
import { debounce } from 'lodash';
import type { AppDispatch } from 'mastodon/store';
export const debounceWithDispatchAndArguments = <T>(
fn: (dispatch: AppDispatch, ...args: T[]) => void,
{ delay = 100 },
) => {
let argumentBuffer: T[] = [];
let dispatchBuffer: AppDispatch;
const wrapped = debounce(() => {
const tmpBuffer = argumentBuffer;
argumentBuffer = [];
fn(dispatchBuffer, ...tmpBuffer);
}, delay);
return (dispatch: AppDispatch, ...args: T[]) => {
dispatchBuffer = dispatch;
argumentBuffer.push(...args);
wrapped();
};
};

View file

@ -6889,7 +6889,7 @@ a.status-card {
.media-gallery__actions { .media-gallery__actions {
position: absolute; position: absolute;
bottom: 6px; top: 6px;
inset-inline-end: 6px; inset-inline-end: 6px;
display: flex; display: flex;
gap: 2px; gap: 2px;
@ -6912,7 +6912,7 @@ a.status-card {
.media-gallery__item__badges { .media-gallery__item__badges {
position: absolute; position: absolute;
bottom: 8px; bottom: 8px;
inset-inline-start: 8px; inset-inline-end: 8px;
display: flex; display: flex;
gap: 2px; gap: 2px;
} }

View file

@ -86,9 +86,7 @@
color: $primary-text-color; color: $primary-text-color;
transition: all 100ms ease-in; transition: all 100ms ease-in;
font-size: 14px; font-size: 14px;
padding: 0 16px; padding: 8px 16px;
line-height: 36px;
height: 36px;
text-decoration: none; text-decoration: none;
margin-bottom: 4px; margin-bottom: 4px;

View file

@ -342,7 +342,15 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
end end
def converted_text def converted_text
linkify([@status_parser.title.presence, @status_parser.spoiler_text.presence, @status_parser.url || @status_parser.uri].compact.join("\n\n")) [formatted_title, @status_parser.spoiler_text.presence, formatted_url].compact.join("\n\n")
end
def formatted_title
"<h2>#{@status_parser.title}</h2>" if @status_parser.title.present?
end
def formatted_url
linkify(@status_parser.url || @status_parser.uri)
end end
def unsupported_media_type?(mime_type) def unsupported_media_type?(mime_type)

View file

@ -9,6 +9,8 @@ class AdminMailer < ApplicationMailer
before_action :process_params before_action :process_params
before_action :set_instance before_action :set_instance
after_action :set_important_headers!, only: :new_critical_software_updates
default to: -> { @me.user_email } default to: -> { @me.user_email }
def new_report(report) def new_report(report)
@ -56,12 +58,6 @@ class AdminMailer < ApplicationMailer
def new_critical_software_updates def new_critical_software_updates
@software_updates = SoftwareUpdate.where(urgent: true).to_a.sort_by(&:gem_version) @software_updates = SoftwareUpdate.where(urgent: true).to_a.sort_by(&:gem_version)
headers(
'Importance' => 'high',
'Priority' => 'urgent',
'X-Priority' => '1'
)
locale_for_account(@me) do locale_for_account(@me) do
mail subject: default_i18n_subject(instance: @instance) mail subject: default_i18n_subject(instance: @instance)
end end
@ -82,4 +78,12 @@ class AdminMailer < ApplicationMailer
def set_instance def set_instance
@instance = Rails.configuration.x.local_domain @instance = Rails.configuration.x.local_domain
end end
def set_important_headers!
headers(
'Importance' => 'high',
'Priority' => 'urgent',
'X-Priority' => '1'
)
end
end end

View file

@ -53,7 +53,7 @@ class ApproveAppealService < BaseService
def undo_mark_statuses_as_sensitive! def undo_mark_statuses_as_sensitive!
representative_account = Account.representative representative_account = Account.representative
@strike.statuses.includes(:media_attachments).find_each do |status| @strike.statuses.kept.includes(:media_attachments).reorder(nil).find_each do |status|
UpdateStatusService.new.call(status, representative_account.id, sensitive: false) if status.with_media? UpdateStatusService.new.call(status, representative_account.id, sensitive: false) if status.with_media?
end end
end end

View file

@ -1,4 +1,4 @@
# frozen_string_literal: true # frozen_string_literal: true
# 0.5s is a fairly high timeout, but that should account for slow servers under load # 2s is a fairly high default, but that should account for slow servers under load
Regexp.timeout = 0.5 if Regexp.respond_to?(:timeout=) Regexp.timeout = ENV.fetch('REGEXP_TIMEOUT', 2).to_f if Regexp.respond_to?(:timeout=)

View file

@ -15,6 +15,8 @@ be:
user/invite_request: user/invite_request:
text: Прычына text: Прычына
errors: errors:
messages:
too_many_lines: перавышана абмежаванне ў %{limit} радкоў
models: models:
account: account:
attributes: attributes:

View file

@ -15,6 +15,12 @@ el:
user/invite_request: user/invite_request:
text: Αιτιολογία text: Αιτιολογία
errors: errors:
attributes:
domain:
invalid: δεν είναι έγκυρο όνομα τομέα
messages:
invalid_domain_on_line: το %{value} δεν είναι έγκυρο όνομα τομέα
too_many_lines: υπερβαίνει το όριο των %{limit} γραμμών
models: models:
account: account:
attributes: attributes:

View file

@ -60,7 +60,6 @@ af:
error: error:
title: "n Fout het ingesluip" title: "n Fout het ingesluip"
new: new:
prompt_html: "%{client_name} wil toegang hê tot jou rekening. Dit is n derdepartytoepassing. <strong>Moet dit nie toelaat as jy dit nie vertrou nie.</strong>"
review_permissions: Hersien toestemmings review_permissions: Hersien toestemmings
title: Benodig magtiging title: Benodig magtiging
show: show:

View file

@ -60,7 +60,6 @@ an:
error: error:
title: Ha ocurriu una error title: Ha ocurriu una error
new: new:
prompt_html: "%{client_name} deseya permiso pa acceder ta la tuya cuenta. Ye una aplicación de tercers. <strong>Si no confías en ella, no habrías d'autorizar-la.</strong>"
review_permissions: Revisar permisos review_permissions: Revisar permisos
title: Se requiere autorización title: Se requiere autorización
show: show:

View file

@ -60,7 +60,6 @@ ar:
error: error:
title: حدث هناك خطأ title: حدث هناك خطأ
new: new:
prompt_html: يريد %{client_name} الإذن للوصول إلى حسابك. إنه تطبيق طرف ثالث. <strong>إذا كنت لا تثق فيه، فلا ينبغي أن تأذن له بذلك.</strong>
review_permissions: مراجعة الصلاحيات review_permissions: مراجعة الصلاحيات
title: إذن بالتصريح title: إذن بالتصريح
show: show:

View file

@ -41,7 +41,6 @@ ast:
error: error:
title: Prodúxose un error title: Prodúxose un error
new: new:
prompt_html: "%{client_name}, que ye una aplicación de terceros, quier tener accesu a la cuenta. <strong>Si nun t'enfotes nella, nun habríes autorizala.</strong>"
review_permissions: Revisión de los permisos review_permissions: Revisión de los permisos
show: show:
title: Copia esti códigu d'autorización y apiégalu na aplicación. title: Copia esti códigu d'autorización y apiégalu na aplicación.

View file

@ -60,7 +60,6 @@ be:
error: error:
title: Узнікла памылка title: Узнікла памылка
new: new:
prompt_html: "%{client_name} хацеў бы атрымаць дазвол для доступу да вашага акаунта. Гэта вонкавае прыкладанне. <strong> Не давайце дазволу на гэта, калі вы не давяраеце гэтаму прыкладанню. </strong>"
review_permissions: Прагледзець дазволы review_permissions: Прагледзець дазволы
title: Патрабуецца аўтарызацыя title: Патрабуецца аўтарызацыя
show: show:

View file

@ -60,7 +60,6 @@ bg:
error: error:
title: Възникна грешка title: Възникна грешка
new: new:
prompt_html: "%{client_name} иска разрешение да има достъп до акаунта ви. Приложение от трета страна е.<strong>Ако не му се доверявате, то може да не го упълномощявате.</strong>"
review_permissions: Преглед на разрешенията review_permissions: Преглед на разрешенията
title: Изисква се упълномощаване title: Изисква се упълномощаване
show: show:

View file

@ -60,7 +60,7 @@ ca:
error: error:
title: S'ha produït un error title: S'ha produït un error
new: new:
prompt_html: "%{client_name} vol permís per accedir el teu compte. És una aplicació de tercers. <strong>Si no hi confies, no hauries d'autoritzar-la.</strong>" prompt_html: "%{client_name} demana accés al vostre compte. <strong>Només aproveu aquesta petició si reconeixeu i confieu en aquest origen.</strong>"
review_permissions: Revisa els permisos review_permissions: Revisa els permisos
title: Cal autorizació title: Cal autorizació
show: show:

View file

@ -60,7 +60,6 @@ ckb:
error: error:
title: هەڵەیەک ڕوویدا title: هەڵەیەک ڕوویدا
new: new:
prompt_html: "%{client_name} حەز دەکات مۆڵەت بدرێت بۆ چوونە ناو ئەکاونتەکەت. ئەپڵیکەیشنێکی لایەنی سێیەمە. <strong>ئەگەر متمانەت پێی نییە، ئەوا نابێت ڕێگەی پێبدەیت.</strong>"
review_permissions: پێداچوونەوە بە مۆڵەتەکاندا بکە review_permissions: پێداچوونەوە بە مۆڵەتەکاندا بکە
title: ڕێپێدان پێویستە title: ڕێپێدان پێویستە
show: show:

View file

@ -60,7 +60,6 @@ cs:
error: error:
title: Vyskytla se chyba title: Vyskytla se chyba
new: new:
prompt_html: "%{client_name} si přeje oprávnění pro přístup k vašemu účtu. Je to aplikace třetí strany. <strong>Pokud jí nedůvěřujete, pak byste ji neměli autorizovat.</strong>"
review_permissions: Zkontrolujte oprávnění review_permissions: Zkontrolujte oprávnění
title: Je vyžadována autorizace title: Je vyžadována autorizace
show: show:

View file

@ -60,7 +60,6 @@ cy:
error: error:
title: Mae rhywbeth wedi mynd o'i le title: Mae rhywbeth wedi mynd o'i le
new: new:
prompt_html: Hoffai %{client_name} gael caniatâd i gael mynediad i'ch cyfrif. Mae'n gais trydydd parti. <strong>Os nad ydych yn ymddiried ynddo, yna peidiwch a'i awdurdodi.</strong>
review_permissions: Adolygu caniatâd review_permissions: Adolygu caniatâd
title: Angen awdurdodi title: Angen awdurdodi
show: show:

View file

@ -60,7 +60,7 @@ da:
error: error:
title: En fejl opstod title: En fejl opstod
new: new:
prompt_html: "%{client_name} ønsker tilladelse til at tilgå din konto. Den er en tredjepartsapplikation. <strong>Har du ikke tillid til den, bør den ikke godkendes.</strong>" prompt_html: "%{client_name} vil ønsker tilladelse til at tilgå din konto. <strong>Godkend kun denne anmodning, hvis kilden genkendes, og man stoler på den.</strong>"
review_permissions: Gennemgå tilladelser review_permissions: Gennemgå tilladelser
title: Godkendelse kræves title: Godkendelse kræves
show: show:

View file

@ -60,7 +60,7 @@ de:
error: error:
title: Ein Fehler ist aufgetreten title: Ein Fehler ist aufgetreten
new: new:
prompt_html: "%{client_name} möchte auf dein Konto zugreifen. Es handelt sich um eine Software von Dritten. <strong>Wenn du der Anwendung nicht vertraust, solltest du ihr keinen Zugriff auf dein Konto geben.</strong>" prompt_html: "%{client_name} möchte auf dein Konto zugreifen. <strong>Du solltest diese Anfrage nur genehmigen, wenn du diese Quelle kennst und ihr vertraust.</strong>"
review_permissions: Berechtigungen überprüfen review_permissions: Berechtigungen überprüfen
title: Autorisierung erforderlich title: Autorisierung erforderlich
show: show:

View file

@ -60,7 +60,6 @@ el:
error: error:
title: Εμφανίστηκε σφάλμα title: Εμφανίστηκε σφάλμα
new: new:
prompt_html: Το %{client_name} θα ήθελε άδεια πρόσβασης στο λογαριασμό σου. Είναι μια εφαρμογή τρίτων. <strong>Αν δεν το εμπιστεύεσαι, τότε δεν πρέπει να το εγκρίνεις.</strong>
review_permissions: Ανασκόπηση δικαιωμάτων review_permissions: Ανασκόπηση δικαιωμάτων
title: Απαιτείται έγκριση title: Απαιτείται έγκριση
show: show:

View file

@ -60,7 +60,7 @@ en-GB:
error: error:
title: An error has occurred title: An error has occurred
new: new:
prompt_html: "%{client_name} would like permission to access your account. It is a third-party application. <strong>If you do not trust it, then you should not authorise it.</strong>" prompt_html: "%{client_name} would like permission to access your account. <strong>Only approve this request if you recognise and trust this source.</strong>"
review_permissions: Review permissions review_permissions: Review permissions
title: Authorisation required title: Authorisation required
show: show:

View file

@ -60,7 +60,6 @@ eo:
error: error:
title: Eraro okazis title: Eraro okazis
new: new:
prompt_html: "%{client_name} petas permeson por aliri vian konton. <strong>Se vi ne fidas ĝin, ne rajtigu ĝin.</strong>"
review_permissions: Revizu permesojn review_permissions: Revizu permesojn
title: Rajtigo bezonata title: Rajtigo bezonata
show: show:

View file

@ -60,7 +60,7 @@ es-AR:
error: error:
title: Ocurrió un error title: Ocurrió un error
new: new:
prompt_html: "%{client_name} solicita permiso para acceder a tu cuenta. Es una aplicación de terceros. <strong>Si no confiás en ella, no deberías autorizarla.</strong>" prompt_html: "%{client_name} le gustaría obtener permiso para acceder a tu cuenta. <strong>Solo aprueba esta solicitud si reconoces y confías en esta fuente.</strong>"
review_permissions: Revisar permisos review_permissions: Revisar permisos
title: Autorización requerida title: Autorización requerida
show: show:

View file

@ -60,7 +60,7 @@ es-MX:
error: error:
title: Ha ocurrido un error title: Ha ocurrido un error
new: new:
prompt_html: "%{client_name} requiere permiso para acceder a tu cuenta. Es una aplicación de terceros. <strong>Si no confías en esta, no deberías autorizarla.</strong>" prompt_html: "%{client_name} le gustaría obtener permiso para acceder a tu cuenta. <strong>Solo aprueba esta solicitud si reconoces y confías en esta fuente.</strong>"
review_permissions: Revisar permisos review_permissions: Revisar permisos
title: Se requiere autorización title: Se requiere autorización
show: show:

View file

@ -60,7 +60,7 @@ es:
error: error:
title: Ha ocurrido un error title: Ha ocurrido un error
new: new:
prompt_html: "%{client_name} desea permiso para acceder a tu cuenta. Es una aplicación de terceros. <strong>Si no confías en ella, no deberías autorizarla.</strong>" prompt_html: "%{client_name} le gustaría obtener permiso para acceder a tu cuenta. <strong>Solo aprueba esta solicitud si reconoces y confías en esta fuente.</strong>"
review_permissions: Revisar permisos review_permissions: Revisar permisos
title: Se requiere autorización title: Se requiere autorización
show: show:

View file

@ -60,7 +60,6 @@ et:
error: error:
title: Ilmnes viga title: Ilmnes viga
new: new:
prompt_html: "%{client_name} soovib luba kontole juurdepääsuks. See on kolmanda osapoole rakendus. <strong>Kui see pole usaldusväärne, siis ei tohiks seda lubada.</strong>"
review_permissions: Lubade ülevaade review_permissions: Lubade ülevaade
title: Autoriseerimine vajalik title: Autoriseerimine vajalik
show: show:

View file

@ -60,7 +60,6 @@ eu:
error: error:
title: Errore bat gertatu da title: Errore bat gertatu da
new: new:
prompt_html: "%{client_name} bezeroak zure kontura sartzeko baimena nahi du. Hirugarrengoen aplikazio bat da. <strong>Ez bazara fidatzen, ez zenuke baimendu behar.</strong>"
review_permissions: Berrikusi baimenak review_permissions: Berrikusi baimenak
title: Baimena behar da title: Baimena behar da
show: show:

View file

@ -60,7 +60,6 @@ fa:
error: error:
title: خطایی رخ داد title: خطایی رخ داد
new: new:
prompt_html: "%{client_name} خواهان اجازه دسترسی به حساب کاربری شماست. <strong>اگر به آن اعتماد ندارید، نباید تاییدش کنید.</strong>"
review_permissions: بازبینی اجازه‌ها review_permissions: بازبینی اجازه‌ها
title: نیاز به اجازه دادن title: نیاز به اجازه دادن
show: show:

View file

@ -60,7 +60,7 @@ fi:
error: error:
title: Tapahtui virhe title: Tapahtui virhe
new: new:
prompt_html: "%{client_name} pyytää oikeutta käyttää tiliäsi. Se on kolmannen osapuolen sovellus. <strong>Jos et luota siihen, älä valtuuta sitä.</strong>" prompt_html: "%{client_name} haluaisi käyttöoikeuden tiliisi. <strong>Hyväksy tämä pyyntö vain, jos tunnistat lähteen ja luotat siihen.</strong>"
review_permissions: Tarkista käyttöoikeudet review_permissions: Tarkista käyttöoikeudet
title: Valtuutus vaaditaan title: Valtuutus vaaditaan
show: show:

View file

@ -60,7 +60,7 @@ fo:
error: error:
title: Ein feilur er íkomin title: Ein feilur er íkomin
new: new:
prompt_html: "%{client_name} kundi hugsa sær atgongd til tína kontu. Tað er ein triðjaparts-nýtsluskipan. <strong>Tú skal ikki geva henni hesa heimld, um tú ikki hevur álit á henni.</strong>" prompt_html: "%{client_name} kundi hugsað sær atgongd til tína kontu. <strong>Góðtak einans hesa umbøn, um tú kennir hesa keldu aftur og hevur álit á henni.</strong>"
review_permissions: Eftirkanna rættindi review_permissions: Eftirkanna rættindi
title: Váttan kravd title: Váttan kravd
show: show:

View file

@ -60,7 +60,6 @@ fr-CA:
error: error:
title: Une erreur est survenue title: Une erreur est survenue
new: new:
prompt_html: "%{client_name} souhaite accéder à votre compte. Il s'agit d'une application tierce. <strong>Si vous ne lui faites pas confiance, vous ne devriez pas l'y autoriser.</strong>"
review_permissions: Examiner les autorisations review_permissions: Examiner les autorisations
title: Autorisation requise title: Autorisation requise
show: show:

View file

@ -60,7 +60,6 @@ fr:
error: error:
title: Une erreur est survenue title: Une erreur est survenue
new: new:
prompt_html: "%{client_name} souhaite accéder à votre compte. Il s'agit d'une application tierce. <strong>Vous ne devriez pas l'y autoriser si vous ne lui faites pas confiance.</strong>"
review_permissions: Examiner les autorisations review_permissions: Examiner les autorisations
title: Autorisation requise title: Autorisation requise
show: show:

View file

@ -60,7 +60,6 @@ fy:
error: error:
title: Der is in flater bard title: Der is in flater bard
new: new:
prompt_html: "%{client_name} hat tastimming nedich om tagong te krijen ta jo account. It giet om in tapassing fan in tredde partij.<strong>As jo dit net fertrouwe, moatte jo gjin tastimming jaan.</strong>"
review_permissions: Tastimmingen beoardiele review_permissions: Tastimmingen beoardiele
title: Autorisaasje fereaske title: Autorisaasje fereaske
show: show:

View file

@ -60,7 +60,6 @@ ga:
error: error:
title: Tharla earráid title: Tharla earráid
new: new:
prompt_html: Ba mhaith le %{client_name} cead rochtain a fháil ar do chuntas. Is iarratas tríú páirtí é. <strong>Mura bhfuil muinín agat as, níor cheart duit é a údarú.</strong>
review_permissions: Ceadanna a athbhreithniú review_permissions: Ceadanna a athbhreithniú
title: Tá údarú ag teastáil title: Tá údarú ag teastáil
show: show:

View file

@ -60,7 +60,7 @@ gd:
error: error:
title: Thachair mearachd title: Thachair mearachd
new: new:
prompt_html: Bu mhiann le %{client_name} cead gus an cunntas agad inntrigeadh. Seo aplacaid threas-phàrtaidh. <strong>Mur eil earbsa agad ann, na ùghdarraich e.</strong> prompt_html: Bu toigh le %{client_name} cead fhaighinn airson an cunntas agad inntrigeadh. <strong>Na gabh ris an iarrtas seo ach mas aithne dhut an tùs seo agus earbsa agad ann.</strong>
review_permissions: Thoir sùil air na ceadan review_permissions: Thoir sùil air na ceadan
title: Tha feum air ùghdarrachadh title: Tha feum air ùghdarrachadh
show: show:

View file

@ -60,7 +60,7 @@ gl:
error: error:
title: Algo fallou title: Algo fallou
new: new:
prompt_html: "%{client_name} solicita permiso para acceder á túa conta. É unha aplicación de terceiros. <strong>Se non confías nela, non deberías autorizala.</strong>" prompt_html: "%{client_name} solicita permiso para acceder á túa conta. <strong>Aproba esta solicitude só se recoñeces e confías da súa orixe.</strong>"
review_permissions: Revisar permisos review_permissions: Revisar permisos
title: Autorización necesaria title: Autorización necesaria
show: show:

View file

@ -60,7 +60,7 @@ he:
error: error:
title: התרחשה שגיאה title: התרחשה שגיאה
new: new:
prompt_html: "%{client_name} מעוניין בהרשאה לגשת לחשבונך. זוהי אפליקציית צד-שלישי. <strong>אם יש סיבה לא לבטוח בה, נא לא לאשר.</strong>" prompt_html: היישום %{client_name} מבקש גישה לחשבונך. <strong>אשרו רק אם אתם מזהים את הבקשה וסומכים על מקור הבקשה.</strong>
review_permissions: עיון בהרשאות review_permissions: עיון בהרשאות
title: נדרשת הרשאה title: נדרשת הרשאה
show: show:

View file

@ -60,7 +60,6 @@ hu:
error: error:
title: Hiba történt title: Hiba történt
new: new:
prompt_html: "%{client_name} szeretné elérni a fiókodat. Ez egy harmadik féltől származó alkalmazás. <strong>Ha nem bízol meg benne, ne addj felhatalmazást neki.</strong>"
review_permissions: Jogosultságok áttekintése review_permissions: Jogosultságok áttekintése
title: Engedélyezés szükséges title: Engedélyezés szükséges
show: show:

View file

@ -60,7 +60,6 @@ ia:
error: error:
title: Un error ha occurrite title: Un error ha occurrite
new: new:
prompt_html: "%{client_name} vole haber le permission de acceder a tu conto. Illo es un application tertie. <strong>Si tu non confide in illo, alora tu non deberea autorisar lo.</strong>"
review_permissions: Revider permissiones review_permissions: Revider permissiones
title: Autorisation necessari title: Autorisation necessari
show: show:

View file

@ -60,7 +60,6 @@ id:
error: error:
title: Ada yang error title: Ada yang error
new: new:
prompt_html: "%{client_name} meminta izin untuk mengakses akun Anda. Ini adalah aplikasi pihak ketiga. <strong>Jika Anda tidak mempercayainya, Anda boleh tidak mengizinkannya.</strong>"
review_permissions: Tinjau izin review_permissions: Tinjau izin
title: Izin diperlukan title: Izin diperlukan
show: show:

View file

@ -60,7 +60,6 @@ ie:
error: error:
title: Alquo ha errat title: Alquo ha errat
new: new:
prompt_html: "%{client_name}, un aplication de triesim partise, vole permission por accesser tui conto. <strong>Si tu ne fide it, ne autorisa it.</strong>"
review_permissions: Inspecter permissiones review_permissions: Inspecter permissiones
title: Autorisation besonat title: Autorisation besonat
show: show:

View file

@ -60,7 +60,6 @@ io:
error: error:
title: Eroro eventis title: Eroro eventis
new: new:
prompt_html: "%{client_name} volas permiso por acesar vua konti. Ol esas externa softwaro. <strong>Se vu ne fidas, lore vu debas ne yurizar.</strong>"
review_permissions: Kontrolez permisi review_permissions: Kontrolez permisi
title: Yurizo bezonesas title: Yurizo bezonesas
show: show:

View file

@ -60,7 +60,6 @@ is:
error: error:
title: Villa kom upp title: Villa kom upp
new: new:
prompt_html: "%{client_name} biður um heimild til að fara inn á notandaaðganginn þinn. Þetta er utanaðkomandi hugbúnaður. <strong>Ef þú treystir ekki viðkomandi, þá ættir þú ekki að heimila þetta.</strong>"
review_permissions: Yfirfara heimildir review_permissions: Yfirfara heimildir
title: Auðkenning er nauðsynleg title: Auðkenning er nauðsynleg
show: show:

View file

@ -60,7 +60,7 @@ it:
error: error:
title: Si è verificato un errore title: Si è verificato un errore
new: new:
prompt_html: "%{client_name} vorrebbe l'autorizzazione ad accedere al tuo profilo. È un'applicazione di terze parti. <strong>Se non ti fidi, non dovresti autorizzarla.</strong>" prompt_html: "%{client_name} vorrebbe il permesso di accedere al tuo account. <strong>Approva questa richiesta solo se riconosci e ti fidi di questa fonte.</strong>"
review_permissions: Revisiona le autorizzazioni review_permissions: Revisiona le autorizzazioni
title: Autorizzazione necessaria title: Autorizzazione necessaria
show: show:

View file

@ -60,7 +60,6 @@ ja:
error: error:
title: エラーが発生しました title: エラーが発生しました
new: new:
prompt_html: "%{client_name}があなたのアカウントにアクセスする許可を求めています。<strong>心当たりが無い場合はアクセス許可しないでください。</strong>"
review_permissions: アクセス許可を確認 review_permissions: アクセス許可を確認
title: 認証が必要です title: 認証が必要です
show: show:

View file

@ -60,7 +60,6 @@ ko:
error: error:
title: 오류가 발생하였습니다 title: 오류가 발생하였습니다
new: new:
prompt_html: "%{client_name} 제3자 애플리케이션이 귀하의 계정에 접근하기 위한 권한을 요청하고 있습니다. <strong>이 애플리케이션을 신뢰할 수 없다면 이 요청을 승인하지 마십시오.</strong>"
review_permissions: 권한 검토 review_permissions: 권한 검토
title: 승인 필요 title: 승인 필요
show: show:

View file

@ -60,7 +60,6 @@ ku:
error: error:
title: Xeletîyek çêbû title: Xeletîyek çêbû
new: new:
prompt_html: "%{client_name} mafê dixwaze ku bigihîje ajimêrê te. Ew sepanek aliyê sêyemîn e. <strong>Ku tu pê bawer nakî, wê demê divê tu mafê gihiştinê nedî. </strong>"
review_permissions: Gihiştinan binirxînin review_permissions: Gihiştinan binirxînin
title: Destûr kirin pêwîst e title: Destûr kirin pêwîst e
show: show:

View file

@ -60,7 +60,6 @@ lad:
error: error:
title: Un yerro tiene afitado title: Un yerro tiene afitado
new: new:
prompt_html: "%{client_name} kere permiso para akseder tu kuento. Es una aplikasyon de terseros. <strong>Si no konfias en eya, no deverias autorizarla.</strong>"
review_permissions: Reviza permisos review_permissions: Reviza permisos
title: Autorizasyon rekerida title: Autorizasyon rekerida
show: show:

View file

@ -60,7 +60,7 @@ lt:
error: error:
title: Įvyko klaida. title: Įvyko klaida.
new: new:
prompt_html: "%{client_name} norėtų gauti leidimą pasiekti tavo paskyrą. Tai trečiosios šalies programa. <strong>Jei ja nepasitiki, tada neturėtum leisti.</strong>" prompt_html: "%{client_name} norėtų gauti leidimą pasiekti tavo paskyrą. <strong>Patvirtink šį prašymą tik tada, jei atpažįsti šį šaltinį ir juo pasitiki.</strong>"
review_permissions: Peržiūrėti leidimus review_permissions: Peržiūrėti leidimus
title: Privalomas leidimas title: Privalomas leidimas
show: show:

View file

@ -60,7 +60,6 @@ lv:
error: error:
title: Radās kļūda title: Radās kļūda
new: new:
prompt_html: "%{client_name} vēlas saņemt atļauju piekļūt tavam kontam. Tā ir trešās puses lietojumprogramma. <strong>Ja tu tam neuzticies, tad nevajadzētu to autorizēt.</strong>"
review_permissions: Pārskatīt atļaujas review_permissions: Pārskatīt atļaujas
title: Nepieciešama autorizācija title: Nepieciešama autorizācija
show: show:

View file

@ -60,7 +60,6 @@ ms:
error: error:
title: Ralat telah berlaku title: Ralat telah berlaku
new: new:
prompt_html: "%{client_name} ingin mendapatkan kebenaran untuk mengakses akaun anda. Ia adalah aplikasi pihak ketiga. <strong>Jika anda tidak mempercayainya, maka anda tidak seharusnya membenarkannya.</strong>"
review_permissions: Semak kebenaran review_permissions: Semak kebenaran
title: Kebenaran diperlukan title: Kebenaran diperlukan
show: show:

View file

@ -60,7 +60,6 @@ my:
error: error:
title: အမှားအယွင်းတစ်ခု ဖြစ်ပေါ်ခဲ့သည် title: အမှားအယွင်းတစ်ခု ဖြစ်ပေါ်ခဲ့သည်
new: new:
prompt_html: "%{client_name} က သင့်အကောင့်သို့ ဝင်ရောက်ရန် ခွင့်ပြုချက်ရယူလိုပါသည်။ ၎င်းမှာ ပြင်ပကြားခံအက်ပလီကေးရှင်းတစ်ခုဖြစ်သည်။ <strong>သင် မယုံကြည်ပါက ၎င်းကိုခွင့်မပြုသင့်ပါ။</strong>"
review_permissions: ခွင့်ပြုချက်များကို ပြန်လည်သုံးသပ်ပါ review_permissions: ခွင့်ပြုချက်များကို ပြန်လည်သုံးသပ်ပါ
title: ခွင့်ပြုချက် လိုအပ်သည် title: ခွင့်ပြုချက် လိုအပ်သည်
show: show:

View file

@ -60,7 +60,7 @@ nl:
error: error:
title: Er is een fout opgetreden title: Er is een fout opgetreden
new: new:
prompt_html: "%{client_name} heeft toestemming nodig om toegang te krijgen tot jouw account. Het betreft een third-party-toepassing.<strong>Als je dit niet vertrouwt, moet je geen toestemming verlenen.</strong>" prompt_html: "%{client_name} vraagt om toegang tot je account. <strong>Keur dit verzoek alleen goed als je deze bron herkent en vertrouwt.</strong>"
review_permissions: Toestemmingen beoordelen review_permissions: Toestemmingen beoordelen
title: Autorisatie vereist title: Autorisatie vereist
show: show:

View file

@ -60,7 +60,7 @@ nn:
error: error:
title: Ein feil har oppstått title: Ein feil har oppstått
new: new:
prompt_html: "%{client_name} ønsker tilgang til kontoen din. Det er ein tredjepartsapplikasjon. <strong>Dersom du ikkje stolar på den, bør du ikkje autorisere det.</strong>" prompt_html: "%{client_name} ynskjer tilgang til kontoen din. <strong>Godkjenn dette berre dersom du kjenner att og stolar på %{client_name}.</strong>"
review_permissions: Sjå gjennom løyve review_permissions: Sjå gjennom løyve
title: Autorisasjon nødvendig title: Autorisasjon nødvendig
show: show:

View file

@ -60,7 +60,6 @@
error: error:
title: En feil oppstod title: En feil oppstod
new: new:
prompt_html: "%{client_name} ønsker tilgang til kontoen din. Det er en tredjeparts applikasjon. <strong>Hvis du ikke stoler på den, bør du ikke autorisere den.</strong>"
review_permissions: Gå gjennom tillatelser review_permissions: Gå gjennom tillatelser
title: Autorisasjon påkrevd title: Autorisasjon påkrevd
show: show:

View file

@ -60,7 +60,6 @@ oc:
error: error:
title: I a agut un error title: I a agut un error
new: new:
prompt_html: "%{client_name} volria lautorizacion daccedir a vòstre compte. Es una aplicacion tèrça.<strong>Se vos fisatz pas a ela, alara deuriatz pas lautorizacion.</strong>"
review_permissions: Repassar las autorizacions review_permissions: Repassar las autorizacions
title: Cal lautorizacion title: Cal lautorizacion
show: show:

View file

@ -60,7 +60,7 @@ pl:
error: error:
title: Wystapił błąd title: Wystapił błąd
new: new:
prompt_html: "%{client_name} chciałby uzyskać pozwolenie na dostęp do Twojego konta. Jest to aplikacja zewnętrzna. <strong>Jeśli jej nie ufasz, nie powinno się jej autoryzować.</strong>" prompt_html: "%{client_name} prosi o dostęp do twojego konta. <strong>Tylko zatwierdź tę prośbę, jeżeli ją rozpoznajesz i ufasz.</strong>"
review_permissions: Sprawdź uprawnienia review_permissions: Sprawdź uprawnienia
title: Wymagana jest autoryzacja title: Wymagana jest autoryzacja
show: show:

View file

@ -60,7 +60,6 @@ pt-BR:
error: error:
title: Ocorreu um erro title: Ocorreu um erro
new: new:
prompt_html: O %{client_name} gostaria de ter permissão para acessar sua conta. Trata-se de uma aplicação de terceiros. <strong>Se você não confia nesta aplicação, então você não deve autorizá-la.</strong>
review_permissions: Rever permissões review_permissions: Rever permissões
title: Autorização necessária title: Autorização necessária
show: show:

View file

@ -60,7 +60,6 @@ pt-PT:
error: error:
title: Ocorreu um erro title: Ocorreu um erro
new: new:
prompt_html: "%{client_name} pretende ter permissão para aceder à sua conta. É uma aplicação de terceiros. <strong>Se não confia nesta aplicação, então não deve autorizá-la.</strong>"
review_permissions: Rever permissões review_permissions: Rever permissões
title: Autorização necessária title: Autorização necessária
show: show:

View file

@ -60,7 +60,6 @@ ro:
error: error:
title: A apărut o eroare title: A apărut o eroare
new: new:
prompt_html: "%{client_name} dorește să îți acceseze contul. Este o aplicație terță. <strong>Dacă nu aveți încredere în ea, atunci nu ar trebui să o autorizați.</strong>"
review_permissions: Revizuiți permisiunile review_permissions: Revizuiți permisiunile
title: Autorizare necesară title: Autorizare necesară
show: show:

View file

@ -60,7 +60,6 @@ ru:
error: error:
title: Произошла ошибка title: Произошла ошибка
new: new:
prompt_html: "%{client_name} хочет получить доступ к вашему аккаунту. Это стороннее приложение. <strong>Если вы ему не доверяете, не разрешайте доступ.</strong>"
review_permissions: Просмотр разрешений review_permissions: Просмотр разрешений
title: Требуется авторизация title: Требуется авторизация
show: show:

View file

@ -60,7 +60,6 @@ sco:
error: error:
title: A error haes occurrt title: A error haes occurrt
new: new:
prompt_html: "%{client_name} wad like permission fir tae access yer accoont. It is a third-party application. <strong>Gin ye dinnae trust it, then ye shuidnae authorize it.</strong>"
review_permissions: Luik ower permissions review_permissions: Luik ower permissions
title: Authorization requirt title: Authorization requirt
show: show:

View file

@ -60,7 +60,6 @@ si:
error: error:
title: දෝෂයක් සිදු වී ඇත title: දෝෂයක් සිදු වී ඇත
new: new:
prompt_html: "%{client_name} ඔබගේ ගිණුමට ප්‍රවේශ වීමට අවසර ලබා ගැනීමට කැමති වේ. එය තෙවන පාර්ශවීය යෙදුමකි. <strong>ඔබ එය විශ්වාස නොකරන්නේ නම්, ඔබ එයට අවසර නොදිය යුතුය.</strong>"
review_permissions: අවසර සමාලෝචනය review_permissions: අවසර සමාලෝචනය
title: බලය පැවරීමේ අවශ්ය title: බලය පැවරීමේ අවශ්ය
show: show:

View file

@ -60,7 +60,6 @@ sk:
error: error:
title: Nastala chyba title: Nastala chyba
new: new:
prompt_html: "%{client_name} žiada o povolenie na prístup k vášmu účtu. Ide o aplikáciu tretej strany. <strong>Ak jej nedôverujete, nemali by ste ju povoliť.</strong>"
review_permissions: Preskúmať povolenia review_permissions: Preskúmať povolenia
title: Je potrebné schválenie title: Je potrebné schválenie
show: show:

View file

@ -60,7 +60,6 @@ sl:
error: error:
title: Prišlo je do napake title: Prišlo je do napake
new: new:
prompt_html: "%{client_name} želi dovoljenje za dostop do vašega računa. Gre za zunanji program. <strong>Če mu ne zaupate, mu ne dodelite teh pravic.</strong>"
review_permissions: Preglej dovoljenja review_permissions: Preglej dovoljenja
title: Potrebna je odobritev title: Potrebna je odobritev
show: show:

View file

@ -60,7 +60,6 @@ sq:
error: error:
title: Ndodhi një gabim title: Ndodhi një gabim
new: new:
prompt_html: "%{client_name} do të donte leje të hyjë në llogarinë tuaj. Është një aplikacion palësh të treta. <strong>Nëse si zini besë, atëherë sduhet ta autorizoni.</strong>"
review_permissions: Shqyrtoni leje review_permissions: Shqyrtoni leje
title: Lypset autorizim title: Lypset autorizim
show: show:

View file

@ -60,7 +60,6 @@ sr-Latn:
error: error:
title: Dogodila se greška title: Dogodila se greška
new: new:
prompt_html: "%{client_name} želi dozvolu za pristup tvom nalogu. U pitanju je aplikacija treće strane. <strong>Ako smatraš da nije pouzdana, ne bi trebalo da je ovlastiš.</strong>"
review_permissions: Pregledaj dozvole review_permissions: Pregledaj dozvole
title: Potrebna autorizacija title: Potrebna autorizacija
show: show:

View file

@ -60,7 +60,6 @@ sr:
error: error:
title: Догодила се грешка title: Догодила се грешка
new: new:
prompt_html: "%{client_name} жели дозволу за приступ твом налогу. У питању је апликација треће стране. <strong>Ако сматраш да није поуздана, не би требало да је овластиш.</strong>"
review_permissions: Прегледај дозволе review_permissions: Прегледај дозволе
title: Потребна ауторизација title: Потребна ауторизација
show: show:

View file

@ -60,7 +60,6 @@ sv:
error: error:
title: Ett fel har uppstått title: Ett fel har uppstått
new: new:
prompt_html: "%{client_name} vill ha behörighet att komma åt ditt konto. Det är en applikation från tredje part. <strong>Du bör endast godkänna den om du litar på den.</strong>"
review_permissions: Granska behörigheter review_permissions: Granska behörigheter
title: Godkännande krävs title: Godkännande krävs
show: show:

View file

@ -60,7 +60,6 @@ th:
error: error:
title: เกิดข้อผิดพลาด title: เกิดข้อผิดพลาด
new: new:
prompt_html: "%{client_name} ต้องการสิทธิอนุญาตเพื่อเข้าถึงบัญชีของคุณ แอปพลิเคชันเป็นแอปพลิเคชันจากบุคคลที่สาม <strong>หากคุณไม่เชื่อถือแอปพลิเคชัน คุณไม่ควรอนุญาตแอปพลิเคชัน</strong>"
review_permissions: ตรวจทานสิทธิอนุญาต review_permissions: ตรวจทานสิทธิอนุญาต
title: ต้องการการอนุญาต title: ต้องการการอนุญาต
show: show:

View file

@ -60,7 +60,7 @@ tr:
error: error:
title: Bir hata oluştu title: Bir hata oluştu
new: new:
prompt_html: "%{client_name} hesabınıza erişme izni istiyor. Bu üçüncü taraf bir uygulamadır. <strong>Eğer güvenmiyorsanız, izin vermemelisiniz.</strong>" prompt_html: "%{client_name} hesabınıze erişmek için izin istiyor. <strong>Bu isteği sadece bu kaynağı tanıyor ve güveniyorsanız onaylayın.</strong>"
review_permissions: İzinleri incele review_permissions: İzinleri incele
title: İzin gerekli title: İzin gerekli
show: show:

View file

@ -60,7 +60,7 @@ uk:
error: error:
title: Сталася помилка title: Сталася помилка
new: new:
prompt_html: "%{client_name} хоче отримати доступ до вашого облікового запису. Це сторонній застосунок. <strong>Якщо ви йому не довіряєте, не варто авторизувати його.</strong>" prompt_html: "%{client_name} хоче отримати дозвіл на доступ до вашого облікового запису. <strong>Схвалюйте цей запит, якщо ви впізнаєте це джерело і довіряєте йому.</strong>"
review_permissions: Переглянути дозволи review_permissions: Переглянути дозволи
title: Необхідна авторизація title: Необхідна авторизація
show: show:

View file

@ -60,7 +60,7 @@ vi:
error: error:
title: Một lỗi đã xảy ra title: Một lỗi đã xảy ra
new: new:
prompt_html: "%{client_name} yêu cầu truy cập tài khoản của bạn. Đây là ứng dụng của bên thứ ba. <strong>Nếu không tin tưởng, đừng cho phép nó.</strong>" prompt_html: "%{client_name} cần được bạn cho phép truy cập vào tài khoản. <strong>Cho phép nếu bạn tin tưởng ứng dụng này.</strong>"
review_permissions: Quyền truy cập review_permissions: Quyền truy cập
title: Yêu cầu truy cập title: Yêu cầu truy cập
show: show:

View file

@ -60,7 +60,7 @@ zh-CN:
error: error:
title: 发生错误 title: 发生错误
new: new:
prompt_html: "%{client_name} 希望得到访问你账号的许可。这是一个第三方应用。<strong>如果你不信任它,那么你不应该授权它。</strong>" prompt_html: "%{client_name} 请求获得访问您账户的权限。 <strong>请在确保自己了解并信任此来源后再批准该请求。</strong>"
review_permissions: 检查权限 review_permissions: 检查权限
title: 需要授权 title: 需要授权
show: show:

View file

@ -60,7 +60,6 @@ zh-HK:
error: error:
title: 發生錯誤 title: 發生錯誤
new: new:
prompt_html: "%{client_name} 想得到存取你帳號的權限。這是一個第三方應用程式。<strong>如果你不信任它,請勿授權。</strong>"
review_permissions: 檢視權限 review_permissions: 檢視權限
title: 需要用戶授權 title: 需要用戶授權
show: show:

View file

@ -60,7 +60,7 @@ zh-TW:
error: error:
title: 發生錯誤 title: 發生錯誤
new: new:
prompt_html: "%{client_name} 欲請求存取您帳號之權限。這是一個第三方應用程式。<strong>若您不信任該應用程式,請不要授權。</strong>" prompt_html: "%{client_name} 想要請求存取您帳號之權限。<strong>請僅於您所識別且信任此來源時允許請求。</strong>"
review_permissions: 檢視權限 review_permissions: 檢視權限
title: 需要授權 title: 需要授權
show: show:

View file

@ -24,6 +24,8 @@ el:
admin: admin:
account_actions: account_actions:
action: Εκτέλεση ενέργειας action: Εκτέλεση ενέργειας
already_silenced: Αυτός ο λογαριασμός έχει ήδη περιοριστεί.
already_suspended: Αυτός ο λογαριασμός έχει ήδη ανασταλεί.
title: Εκτέλεση ενέργειας συντονισμού στον %{acct} title: Εκτέλεση ενέργειας συντονισμού στον %{acct}
account_moderation_notes: account_moderation_notes:
create: Άφησε σημείωση create: Άφησε σημείωση
@ -45,6 +47,7 @@ el:
title: Αλλαγή email για %{username} title: Αλλαγή email για %{username}
change_role: change_role:
changed_msg: Ο ρόλος άλλαξε επιτυχώς! changed_msg: Ο ρόλος άλλαξε επιτυχώς!
edit_roles: Διαχείριση ρόλων χρήστη
label: Αλλαγή ρόλου label: Αλλαγή ρόλου
no_role: Κανένας ρόλος no_role: Κανένας ρόλος
title: Αλλαγή ρόλου για %{username} title: Αλλαγή ρόλου για %{username}

View file

@ -24,12 +24,15 @@ eo:
admin: admin:
account_actions: account_actions:
action: Plenumi agon action: Plenumi agon
already_silenced: Ĉi tiu konto jam estis limigita.
already_suspended: Ĉi tiu konto jam estis suspendita.
title: Plenumi kontrolan agon al %{acct} title: Plenumi kontrolan agon al %{acct}
account_moderation_notes: account_moderation_notes:
create: Lasi noton create: Lasi noton
created_msg: Noto de moderigado sukcese kreita! created_msg: Noto de moderigado sukcese kreita!
destroyed_msg: Noto de moderigado sukcese detruita! destroyed_msg: Noto de moderigado sukcese detruita!
accounts: accounts:
add_email_domain_block: Bloki retpoŝtan domajnon
approve: Aprobi approve: Aprobi
approved_msg: Sukcese aprobis aliĝ-peton de %{username} approved_msg: Sukcese aprobis aliĝ-peton de %{username}
are_you_sure: Ĉu vi certas? are_you_sure: Ĉu vi certas?
@ -44,6 +47,7 @@ eo:
title: Ŝanĝi retadreson por %{username} title: Ŝanĝi retadreson por %{username}
change_role: change_role:
changed_msg: Rolo sukcese ŝanĝita! changed_msg: Rolo sukcese ŝanĝita!
edit_roles: Administri uzantrolojn
label: Ŝanĝi rolon label: Ŝanĝi rolon
no_role: Neniu rolo no_role: Neniu rolo
title: Ŝanĝi rolon por %{username} title: Ŝanĝi rolon por %{username}
@ -817,16 +821,27 @@ eo:
action: Klaku ĉi tie por pliaj informoj action: Klaku ĉi tie por pliaj informoj
message_html: "<strong>Via objektostokado estas misagordita. La privateco de viaj uzantoj estas en risko.</strong>" message_html: "<strong>Via objektostokado estas misagordita. La privateco de viaj uzantoj estas en risko.</strong>"
tags: tags:
moderation:
title: Stato
name: Nomo
newest: Plej novaj
oldest: Plej malnovaj
review: La statuso de la recenzo review: La statuso de la recenzo
search: Serĉi
title: Kradvortoj
updated_msg: Kradvorto agordoj ĝisdatigis sukcese updated_msg: Kradvorto agordoj ĝisdatigis sukcese
title: Administrado title: Administrado
trends: trends:
allow: Permesi allow: Permesi
approved: Aprobita approved: Aprobita
confirm_allow: Ĉu vi certas, ke vi volas permesi elektitajn etikedojn?
confirm_disallow: Ĉu vi certas, ke vi volas malpermesi elektitajn etikedojn?
disallow: Malpermesi disallow: Malpermesi
links: links:
allow: Permesi ligilon allow: Permesi ligilon
allow_provider: Permesi publikiganto allow_provider: Permesi publikiganto
confirm_allow: Ĉu vi certas, ke vi volas permesi elektitajn ligilojn?
confirm_disallow: Ĉu vi certas, ke vi volas malpermesi elektitajn ligilojn?
description_html: Ĉioj estas ligiloj kiuj nun diskonitajs multe de kontoj kiujn via servilo vidas. Ligiloj ne montritas publike se vi ne aprobis la publikiganton. description_html: Ĉioj estas ligiloj kiuj nun diskonitajs multe de kontoj kiujn via servilo vidas. Ligiloj ne montritas publike se vi ne aprobis la publikiganton.
disallow: Malpermesi ligilon disallow: Malpermesi ligilon
disallow_provider: Malpermesi publikiganton disallow_provider: Malpermesi publikiganton
@ -850,6 +865,8 @@ eo:
statuses: statuses:
allow: Permesi afiŝon allow: Permesi afiŝon
allow_account: Permesi aŭtoron allow_account: Permesi aŭtoron
confirm_allow_account: Ĉu vi certas, ke vi volas permesi elektitajn kontojn?
confirm_disallow_account: Ĉu vi certas, ke vi volas malpermesi elektitajn kontojn?
description_html: Oni multe diskonigas kaj stelumas ĉi tiujn mesaĝojn nuntempe laŭ via servilo. Tio povas helpi novajn kaj revenantajn uzantojn trovi pli da homoj por sekvi. Mesaĝo estas montrita publike nur se vi aprobis la aŭtoron kaj se la aŭtoro aprobis ke ties konto estu proponita al aliaj. Vi ankaŭ povas permesi aŭ malakcepti specifajn mesaĝojn. description_html: Oni multe diskonigas kaj stelumas ĉi tiujn mesaĝojn nuntempe laŭ via servilo. Tio povas helpi novajn kaj revenantajn uzantojn trovi pli da homoj por sekvi. Mesaĝo estas montrita publike nur se vi aprobis la aŭtoron kaj se la aŭtoro aprobis ke ties konto estu proponita al aliaj. Vi ankaŭ povas permesi aŭ malakcepti specifajn mesaĝojn.
disallow: Malpermesi afiŝon disallow: Malpermesi afiŝon
disallow_account: Malpermesi aŭtoron disallow_account: Malpermesi aŭtoron
@ -928,6 +945,8 @@ eo:
body: "%{reporter} signalis %{target}" body: "%{reporter} signalis %{target}"
body_remote: Iu de %{domain} signalis %{target} body_remote: Iu de %{domain} signalis %{target}
subject: Nova signalo por %{instance} (#%{id}) subject: Nova signalo por %{instance} (#%{id})
new_software_updates:
body: Novaj versioj de Mastodon estis publikigitaj, vi eble volas ĝisdatigi!
new_trends: new_trends:
body: 'La eroj bezonas kontrolon antau ol ili povas montritas publike:' body: 'La eroj bezonas kontrolon antau ol ili povas montritas publike:'
new_trending_links: new_trending_links:
@ -1033,6 +1052,9 @@ eo:
view_strikes: Vidi antauaj admonoj kontra via konto view_strikes: Vidi antauaj admonoj kontra via konto
too_fast: Formularo sendita tro rapide, klopodu denove. too_fast: Formularo sendita tro rapide, klopodu denove.
use_security_key: Uzi sekurecan ŝlosilon use_security_key: Uzi sekurecan ŝlosilon
author_attribution:
more_from_html: Pli de %{name}
s_blog: Blogo de %{name}
challenge: challenge:
confirm: Daŭrigi confirm: Daŭrigi
hint_html: "<strong>Konsileto:</strong> Ni ne demandos pri via pasvorto ĝis 1 horo." hint_html: "<strong>Konsileto:</strong> Ni ne demandos pri via pasvorto ĝis 1 horo."
@ -1231,6 +1253,7 @@ eo:
states: states:
finished: Finita finished: Finita
unconfirmed: Nekonfirmita unconfirmed: Nekonfirmita
status: Stato
success: Viaj datumoj estis sukcese alŝutitaj kaj estos traktitaj kiel planite success: Viaj datumoj estis sukcese alŝutitaj kaj estos traktitaj kiel planite
titles: titles:
following: Importado de sekvaj kontoj following: Importado de sekvaj kontoj
@ -1689,7 +1712,13 @@ eo:
silence: Konto limigita silence: Konto limigita
suspend: Konto suspendita suspend: Konto suspendita
welcome: welcome:
apps_step: Elŝutu niajn oficialajn aplikaĵojn.
apps_title: Aplikaĵoj de Mastodon
edit_profile_action: Agordi
edit_profile_title: Agordi vian profilon
explanation: Jen kelkaj konsiloj por helpi vin komenci explanation: Jen kelkaj konsiloj por helpi vin komenci
feature_action: Lerni pli
follow_action: Sekvi
subject: Bonvenon en Mastodon subject: Bonvenon en Mastodon
title: Bonvenon, %{name}! title: Bonvenon, %{name}!
users: users:

View file

@ -2,6 +2,15 @@
el: el:
simple_form: simple_form:
hints: hints:
account:
attribution_domains_as_text: Προστατεύει από ψευδείς ιδιότητες.
discoverable: Οι δημόσιες δημοσιεύσεις και το προφίλ σου μπορεί να εμφανίζονται ή να συνιστώνται σε διάφορους τομείς του Mastodon και το προφίλ σου μπορεί να προτείνεται σε άλλους χρήστες.
display_name: Το πλήρες ή το αστείο σου όνομα.
fields: Η αρχική σου σελίδα, αντωνυμίες, ηλικία, ό,τι θες.
indexable: Οι δημόσιες δημοσιεύσεις σου μπορεί να εμφανιστούν στα αποτελέσματα αναζήτησης στο Mastodon. Άτομα που έχουν αλληλεπιδράσει με τις δημοσιεύσεις σου μπορεί να είναι σε θέση να τις αναζητήσουν όπως και να 'χει.
note: 'Μπορείς να @επισημάνεις άλλα άτομα ή #ετικέτες.'
show_collections: Οι χρήστες θα είναι σε θέση να περιηγηθούν στα άτομα που ακολουθείς και στους ακόλουθούς σου. Άτομα που ακολουθείς θα βλέπουν ότι τους ακολουθείς όπως και να 'χει.
unlocked: Οι χρήστες θα είναι σε θέση να σε ακολουθήσουν χωρίς να ζητούν έγκριση. Κατάργησε την επιλογή αν θες να αξιολογείς τα αιτήματα ακολούθησης και να επιλέξεις αν θα αποδεχθείς ή απορρίψεις νέους ακόλουθους.
account_alias: account_alias:
acct: Όρισε το username@domain του λογαριασμού από τον οποίο θέλεις να μετακινηθείς acct: Όρισε το username@domain του λογαριασμού από τον οποίο θέλεις να μετακινηθείς
account_migration: account_migration:
@ -31,12 +40,14 @@ el:
text: Μπορείς να κάνετε έφεση σε ένα παράπτωμα μόνο μία φορά text: Μπορείς να κάνετε έφεση σε ένα παράπτωμα μόνο μία φορά
defaults: defaults:
autofollow: Όσοι εγγραφούν μέσω της πρόσκλησης θα σε ακολουθούν αυτόματα autofollow: Όσοι εγγραφούν μέσω της πρόσκλησης θα σε ακολουθούν αυτόματα
avatar: WEBP, PNG, GIF ή JPG. Το πολύ %{size}. Θα υποβαθμιστεί σε %{dimensions}px
bot: Ο λογαριασμός αυτός εκτελεί κυρίως αυτοματοποιημένες ενέργειες και ίσως να μην παρακολουθείται bot: Ο λογαριασμός αυτός εκτελεί κυρίως αυτοματοποιημένες ενέργειες και ίσως να μην παρακολουθείται
context: Ένα ή περισσότερα πλαίσια στα οποία μπορεί να εφαρμόζεται αυτό το φίλτρο context: Ένα ή περισσότερα πλαίσια στα οποία μπορεί να εφαρμόζεται αυτό το φίλτρο
current_password: Για λόγους ασφαλείας παρακαλώ γράψε τον κωδικό του τρέχοντος λογαριασμού current_password: Για λόγους ασφαλείας παρακαλώ γράψε τον κωδικό του τρέχοντος λογαριασμού
current_username: Για επιβεβαίωση, παρακαλώ γράψε το όνομα χρήστη του τρέχοντος λογαριασμού current_username: Για επιβεβαίωση, παρακαλώ γράψε το όνομα χρήστη του τρέχοντος λογαριασμού
digest: Αποστέλλεται μόνο μετά από μακρά περίοδο αδράνειας και μόνο αν έχεις λάβει προσωπικά μηνύματα κατά την απουσία σου digest: Αποστέλλεται μόνο μετά από μακρά περίοδο αδράνειας και μόνο αν έχεις λάβει προσωπικά μηνύματα κατά την απουσία σου
email: Θα σου σταλεί email επιβεβαίωσης email: Θα σου σταλεί email επιβεβαίωσης
header: WEBP, PNG, GIF ή JPG. Το πολύ %{size}. Θα υποβαθμιστεί σε %{dimensions}px
inbox_url: Αντέγραψε το URL της αρχικής σελίδας του ανταποκριτή που θέλεις να χρησιμοποιήσεις inbox_url: Αντέγραψε το URL της αρχικής σελίδας του ανταποκριτή που θέλεις να χρησιμοποιήσεις
irreversible: Οι φιλτραρισμένες αναρτήσεις θα εξαφανιστούν αμετάκλητα, ακόμα και αν το φίλτρο αργότερα αφαιρεθεί irreversible: Οι φιλτραρισμένες αναρτήσεις θα εξαφανιστούν αμετάκλητα, ακόμα και αν το φίλτρο αργότερα αφαιρεθεί
locale: Η γλώσσα χρήσης, των email και των ειδοποιήσεων push locale: Η γλώσσα χρήσης, των email και των ειδοποιήσεων push
@ -67,10 +78,15 @@ el:
warn: Απόκρυψη φιλτραρισμένου περιεχομένου πίσω από μια προειδοποίηση που αναφέρει τον τίτλο του φίλτρου warn: Απόκρυψη φιλτραρισμένου περιεχομένου πίσω από μια προειδοποίηση που αναφέρει τον τίτλο του φίλτρου
form_admin_settings: form_admin_settings:
activity_api_enabled: Καταμέτρηση τοπικά δημοσιευμένων δημοσιεύσεων, ενεργών χρηστών και νέων εγγραφών σε εβδομαδιαία πακέτα activity_api_enabled: Καταμέτρηση τοπικά δημοσιευμένων δημοσιεύσεων, ενεργών χρηστών και νέων εγγραφών σε εβδομαδιαία πακέτα
app_icon: WEBP, PNG, GIF ή JPG. Παρακάμπτει το προεπιλεγμένο εικονίδιο εφαρμογής σε κινητές συσκευές με προσαρμοσμένο εικονίδιο.
backups_retention_period: Οι χρήστες έχουν τη δυνατότητα να δημιουργήσουν αρχεία των αναρτήσεων τους για να κατεβάσουν αργότερα. Όταν οριστεί μια θετική τιμή, αυτά τα αρχεία θα διαγράφονται αυτόματα από τον αποθηκευτικό σου χώρο μετά τον καθορισμένο αριθμό ημερών.
bootstrap_timeline_accounts: Αυτοί οι λογαριασμοί θα καρφιτσωθούν στην κορυφή των νέων χρηστών που ακολουθούν τις συστάσεις. bootstrap_timeline_accounts: Αυτοί οι λογαριασμοί θα καρφιτσωθούν στην κορυφή των νέων χρηστών που ακολουθούν τις συστάσεις.
closed_registrations_message: Εμφανίζεται όταν κλείνουν οι εγγραφές closed_registrations_message: Εμφανίζεται όταν κλείνουν οι εγγραφές
content_cache_retention_period: Όλες οι αναρτήσεις από άλλους διακομιστές (συμπεριλαμβανομένων των ενισχύσεων και απαντήσεων) θα διαγραφούν μετά τον καθορισμένο αριθμό ημερών, χωρίς να λαμβάνεται υπόψη οποιαδήποτε αλληλεπίδραση τοπικού χρήστη με αυτές τις αναρτήσεις. Αυτό περιλαμβάνει αναρτήσεις όπου ένας τοπικός χρήστης την έχει χαρακτηρίσει ως σελιδοδείκτη ή αγαπημένη. Θα χαθούν επίσης ιδιωτικές αναφορές μεταξύ χρηστών από διαφορετικές οντότητες και θα είναι αδύνατο να αποκατασταθούν. Η χρήση αυτής της ρύθμισης προορίζεται για οντότητες ειδικού σκοπού και χαλάει πολλές προσδοκίες του χρήστη όταν εφαρμόζεται για χρήση γενική σκοπού.
custom_css: Μπορείς να εφαρμόσεις προσαρμοσμένα στυλ στην έκδοση ιστοσελίδας του Mastodon. custom_css: Μπορείς να εφαρμόσεις προσαρμοσμένα στυλ στην έκδοση ιστοσελίδας του Mastodon.
favicon: WEBP, PNG, GIF ή JPG. Παρακάμπτει το προεπιλεγμένο favicon του Mastodon με ένα προσαρμοσμένο εικονίδιο.
mascot: Παρακάμπτει την εικονογραφία στην προηγμένη διεπαφή ιστού. mascot: Παρακάμπτει την εικονογραφία στην προηγμένη διεπαφή ιστού.
media_cache_retention_period: Τα αρχεία πολυμέσων από αναρτήσεις που γίνονται από απομακρυσμένους χρήστες αποθηκεύονται προσωρινά στο διακομιστή σου. Όταν οριστεί μια θετική τιμή, τα μέσα θα διαγραφούν μετά τον καθορισμένο αριθμό ημερών. Αν τα δεδομένα πολυμέσων ζητηθούν μετά τη διαγραφή τους, θα γίνει ε, αν το πηγαίο περιεχόμενο είναι ακόμα διαθέσιμο. Λόγω περιορισμών σχετικά με το πόσο συχνά οι κάρτες προεπισκόπησης συνδέσμων συνδέονται σε ιστοσελίδες τρίτων, συνιστάται να ορίσεις αυτή την τιμή σε τουλάχιστον 14 ημέρες ή οι κάρτες προεπισκόπησης συνδέσμων δεν θα ενημερώνονται κατ' απάιτηση πριν από εκείνη την ώρα.
peers_api_enabled: Μια λίστα με ονόματα τομέα που συνάντησε αυτός ο διακομιστής στο fediverse. Δεν περιλαμβάνονται δεδομένα εδώ για το αν συναλλάσσετε με ένα συγκεκριμένο διακομιστή, μόνο ότι ο διακομιστής σας το ξέρει. Χρησιμοποιείται από υπηρεσίες που συλλέγουν στατιστικά στοιχεία για την συναλλαγή με γενική έννοια. peers_api_enabled: Μια λίστα με ονόματα τομέα που συνάντησε αυτός ο διακομιστής στο fediverse. Δεν περιλαμβάνονται δεδομένα εδώ για το αν συναλλάσσετε με ένα συγκεκριμένο διακομιστή, μόνο ότι ο διακομιστής σας το ξέρει. Χρησιμοποιείται από υπηρεσίες που συλλέγουν στατιστικά στοιχεία για την συναλλαγή με γενική έννοια.
profile_directory: Ο κατάλογος προφίλ παραθέτει όλους τους χρήστες που έχουν επιλέξει να είναι ανακαλύψιμοι. profile_directory: Ο κατάλογος προφίλ παραθέτει όλους τους χρήστες που έχουν επιλέξει να είναι ανακαλύψιμοι.
require_invite_text: 'Όταν η εγγραφή απαιτεί χειροκίνητη έγκριση, κάνε το πεδίο κειμένου: «Γιατί θέλετε να συμμετάσχετε;» υποχρεωτικό αντί για προαιρετικό' require_invite_text: 'Όταν η εγγραφή απαιτεί χειροκίνητη έγκριση, κάνε το πεδίο κειμένου: «Γιατί θέλετε να συμμετάσχετε;» υποχρεωτικό αντί για προαιρετικό'
@ -103,14 +119,19 @@ el:
sign_up_requires_approval: Νέες εγγραφές θα απαιτούν την έγκριση σας sign_up_requires_approval: Νέες εγγραφές θα απαιτούν την έγκριση σας
severity: Επιλέξτε τι θα γίνεται με αιτήσεις από αυτήν την διεύθυνση IP severity: Επιλέξτε τι θα γίνεται με αιτήσεις από αυτήν την διεύθυνση IP
rule: rule:
hint: Προαιρετικό. Δώσε περισσότερες λεπτομέρειες σχετικά με τον κανόνα
text: Περιγράψτε έναν κανόνα ή μια απαίτηση για τους χρήστες σε αυτόν τον διακομιστή. Προσπαθήστε να τον κρατήσετε σύντομο και απλό text: Περιγράψτε έναν κανόνα ή μια απαίτηση για τους χρήστες σε αυτόν τον διακομιστή. Προσπαθήστε να τον κρατήσετε σύντομο και απλό
sessions: sessions:
otp: 'Βάλε τον κωδικό δυο παραγόντων (2FA) από την εφαρμογή του τηλεφώνου σου ή χρησιμοποίησε κάποιον από τους κωδικούς ανάκτησης σου:' otp: 'Βάλε τον κωδικό δυο παραγόντων (2FA) από την εφαρμογή του τηλεφώνου σου ή χρησιμοποίησε κάποιον από τους κωδικούς ανάκτησης σου:'
webauthn: Αν πρόκειται για ένα κλειδί USB βεβαιωθείτε ότι είναι συνδεδεμένο και αν απαιτείται πατήστε το ελαφρά. webauthn: Αν πρόκειται για ένα κλειδί USB βεβαιωθείτε ότι είναι συνδεδεμένο και αν απαιτείται πατήστε το ελαφρά.
settings:
indexable: Η σελίδα του προφίλ σου μπορεί να εμφανιστεί στα αποτελέσματα αναζήτησης στο Google, Bing και άλλες.
show_application: Θα είσαι πάντα σε θέση να δεις ποια εφαρμογή δημοσίευσε την ανάρτησή σου όπως και να 'χει.
tag: tag:
name: Μπορείς να αλλάξεις μόνο το πλαίσιο των χαρακτήρων, για παράδειγμα για να γίνει περισσότερο ευανάγνωστο name: Μπορείς να αλλάξεις μόνο το πλαίσιο των χαρακτήρων, για παράδειγμα για να γίνει περισσότερο ευανάγνωστο
user: user:
chosen_languages: Όταν ενεργοποιηθεί, στη δημόσια ροή θα εμφανίζονται τουτ μόνο από τις επιλεγμένες γλώσσες chosen_languages: Όταν ενεργοποιηθεί, στη δημόσια ροή θα εμφανίζονται τουτ μόνο από τις επιλεγμένες γλώσσες
role: Ο ρόλος ελέγχει ποια δικαιώματα έχει ο χρήστης.
user_role: user_role:
color: Το χρώμα που θα χρησιμοποιηθεί για το ρόλο σε ολόκληρη τη διεπαφή, ως RGB σε δεκαεξαδική μορφή color: Το χρώμα που θα χρησιμοποιηθεί για το ρόλο σε ολόκληρη τη διεπαφή, ως RGB σε δεκαεξαδική μορφή
highlighted: Αυτό καθιστά το ρόλο δημόσια ορατό highlighted: Αυτό καθιστά το ρόλο δημόσια ορατό
@ -119,12 +140,18 @@ el:
position: Ανώτεροι ρόλοι αποφασίζει την επίλυση συγκρούσεων σε ορισμένες περιπτώσεις. Ορισμένες ενέργειες μπορούν να εκτελεστούν μόνο σε ρόλους με χαμηλότερη προτεραιότητα position: Ανώτεροι ρόλοι αποφασίζει την επίλυση συγκρούσεων σε ορισμένες περιπτώσεις. Ορισμένες ενέργειες μπορούν να εκτελεστούν μόνο σε ρόλους με χαμηλότερη προτεραιότητα
webhook: webhook:
events: Επιλέξτε συμβάντα για αποστολή events: Επιλέξτε συμβάντα για αποστολή
template: Σύνθεσε το δικό σου JSON payload χρησιμοποιώντας μεταβλητή παρεμβολή. Άφησε κενό για προεπιλογή JSON.
url: Πού θα σταλούν τα γεγονότα url: Πού θα σταλούν τα γεγονότα
labels: labels:
account: account:
attribution_domains_as_text: Να επιτρέπονται μόνο συγκεκριμένες ιστοσελίδες
discoverable: Παροχή προφίλ και αναρτήσεων σε αλγορίθμους ανακάλυψης
fields: fields:
name: Περιγραφή name: Περιγραφή
value: Περιεχόμενο value: Περιεχόμενο
indexable: Συμπερίληψη δημόσιων αναρτήσεων στα αποτελέσματα αναζήτησης
show_collections: Εμφάνιση ακολούθων και ακολουθουμένων στο προφίλ
unlocked: Αυτόματη αποδοχή νέων ακολούθων
account_alias: account_alias:
acct: Διακριτικό του παλιού λογαριασμού acct: Διακριτικό του παλιού λογαριασμού
account_migration: account_migration:
@ -186,6 +213,7 @@ el:
setting_default_privacy: Ιδιωτικότητα δημοσιεύσεων setting_default_privacy: Ιδιωτικότητα δημοσιεύσεων
setting_default_sensitive: Σημείωση όλων των πολυμέσων ως ευαίσθητου περιεχομένου setting_default_sensitive: Σημείωση όλων των πολυμέσων ως ευαίσθητου περιεχομένου
setting_delete_modal: Επιβεβαίωση πριν τη διαγραφή ενός τουτ setting_delete_modal: Επιβεβαίωση πριν τη διαγραφή ενός τουτ
setting_disable_hover_cards: Απενεργοποίηση προεπισκόπησης προφίλ κατά την αιώρηση
setting_disable_swiping: Απενεργοποίηση κινήσεων συρσίματος setting_disable_swiping: Απενεργοποίηση κινήσεων συρσίματος
setting_display_media: Εμφάνιση πολυμέσων setting_display_media: Εμφάνιση πολυμέσων
setting_display_media_default: Προκαθορισμένο setting_display_media_default: Προκαθορισμένο
@ -217,10 +245,13 @@ el:
warn: Απόκρυψη με προειδοποίηση warn: Απόκρυψη με προειδοποίηση
form_admin_settings: form_admin_settings:
activity_api_enabled: Δημοσίευση συγκεντρωτικών στατιστικών σχετικά με τη δραστηριότητα του χρήστη στο API activity_api_enabled: Δημοσίευση συγκεντρωτικών στατιστικών σχετικά με τη δραστηριότητα του χρήστη στο API
app_icon: Εικονίδιο εφαρμογής
backups_retention_period: Περίοδος αρχειοθέτησης του χρήστη backups_retention_period: Περίοδος αρχειοθέτησης του χρήστη
bootstrap_timeline_accounts: Πρότεινε πάντα αυτούς τους λογαριασμούς σε νέους χρήστες bootstrap_timeline_accounts: Πρότεινε πάντα αυτούς τους λογαριασμούς σε νέους χρήστες
closed_registrations_message: Προσαρμοσμένο μήνυμα όταν οι εγγραφές δεν είναι διαθέσιμες closed_registrations_message: Προσαρμοσμένο μήνυμα όταν οι εγγραφές δεν είναι διαθέσιμες
content_cache_retention_period: Περίοδος διατήρησης απομακρυσμένου περιεχομένου
custom_css: Προσαρμοσμένο CSS custom_css: Προσαρμοσμένο CSS
favicon: Favicon
mascot: Προσαρμοσμένη μασκότ (απαρχαιωμένο) mascot: Προσαρμοσμένη μασκότ (απαρχαιωμένο)
media_cache_retention_period: Περίοδος διατήρησης προσωρινής μνήμης πολυμέσων media_cache_retention_period: Περίοδος διατήρησης προσωρινής μνήμης πολυμέσων
peers_api_enabled: Δημοσίευση λίστας των εντοπισμένων διακομιστών στο API peers_api_enabled: Δημοσίευση λίστας των εντοπισμένων διακομιστών στο API
@ -268,15 +299,27 @@ el:
pending_account: Αποστολή email όταν υπάρχει νέος λογαριασμός για επιθεώρηση pending_account: Αποστολή email όταν υπάρχει νέος λογαριασμός για επιθεώρηση
reblog: Αποστολή email όταν κάποιος προωθεί τη δημοσίευση σου reblog: Αποστολή email όταν κάποιος προωθεί τη δημοσίευση σου
report: Υποβλήθηκε νέα αναφορά report: Υποβλήθηκε νέα αναφορά
software_updates:
all: Ειδοποίηση για όλες τις ενημερώσεις
critical: Ειδοποίηση μόνο για κρίσιμες ενημερώσεις
label: Μια νέα έκδοση του Mastodon είναι διαθέσιμη
none: Να μην ειδοποιούμαι ποτέ για ενημερώσεις (δεν συνιστάται)
patch: Ειδοποίηση για ενημερώσεις σφαλμάτων
trending_tag: Νέο περιεχόμενο προς τάση απαιτεί αξιολόγηση trending_tag: Νέο περιεχόμενο προς τάση απαιτεί αξιολόγηση
rule: rule:
hint: Επιπρόσθετες πληροφορίες
text: Κανόνας text: Κανόνας
settings:
indexable: Συμπερίληψη σελίδας προφίλ στις μηχανές αναζήτησης
show_application: Εμφάνιση από ποια εφαρμογή έστειλες μία ανάρτηση
tag: tag:
listable: Εμφάνιση αυτής της ετικέτας στο δημόσιο κατάλογο listable: Εμφάνιση αυτής της ετικέτας στο δημόσιο κατάλογο
name: Ετικέτα name: Ετικέτα
trendable: Εμφάνιση της ετικέτας στις τάσεις trendable: Εμφάνιση της ετικέτας στις τάσεις
usable: Να επιτρέπεται η τοπική χρήση αυτής της ετικέτας από αναρτήσεις
user: user:
role: Ρόλος role: Ρόλος
time_zone: Ζώνη ώρας
user_role: user_role:
color: Χρώμα εμβλήματος color: Χρώμα εμβλήματος
highlighted: Εμφάνιση ρόλου ως σήμα στα προφίλ χρηστών highlighted: Εμφάνιση ρόλου ως σήμα στα προφίλ χρηστών
@ -285,9 +328,11 @@ el:
position: Προτεραιότητα position: Προτεραιότητα
webhook: webhook:
events: Ενεργοποιημένα συμβάντα events: Ενεργοποιημένα συμβάντα
template: Πρότυπο payload
url: Endpoint URL url: Endpoint URL
'no': Όχι 'no': Όχι
not_recommended: Δεν προτείνεται not_recommended: Δεν προτείνεται
overridden: Αντικαταστάθηκε
recommended: Προτείνεται recommended: Προτείνεται
required: required:
mark: "*" mark: "*"

View file

@ -8,38 +8,12 @@ RSpec.describe NotificationMailer do
let(:foreign_status) { Fabricate(:status, account: sender, text: 'The body of the foreign status') } let(:foreign_status) { Fabricate(:status, account: sender, text: 'The body of the foreign status') }
let(:own_status) { Fabricate(:status, account: receiver.account, text: 'The body of the own status') } let(:own_status) { Fabricate(:status, account: receiver.account, text: 'The body of the own status') }
shared_examples 'standard headers' do |type|
it 'renders the email' do
expect(mail)
.to be_present
.and(have_header('To', "#{receiver.account.username} <#{receiver.email}>"))
.and(have_header('List-ID', "<#{type}.alice.cb6e6126.ngrok.io>"))
.and(have_header('List-Unsubscribe', %r{<https://cb6e6126.ngrok.io/unsubscribe\?token=.+>}))
.and(have_header('List-Unsubscribe', /&type=#{type}/))
.and(have_header('List-Unsubscribe-Post', 'List-Unsubscribe=One-Click'))
.and(deliver_to("#{receiver.account.username} <#{receiver.email}>"))
.and(deliver_from('notifications@localhost'))
end
end
shared_examples 'thread headers' do
it 'renders the email with conversation thread headers' do
conversation_header_regex = /<conversation-\d+.\d\d\d\d-\d\d-\d\d@cb6e6126.ngrok.io>/
expect(mail)
.to be_present
.and(have_header('In-Reply-To', conversation_header_regex))
.and(have_header('References', conversation_header_regex))
end
end
describe 'mention' do describe 'mention' do
let(:mention) { Mention.create!(account: receiver.account, status: foreign_status) } let(:mention) { Mention.create!(account: receiver.account, status: foreign_status) }
let(:notification) { Notification.create!(account: receiver.account, activity: mention) } let(:notification) { Notification.create!(account: receiver.account, activity: mention) }
let(:mail) { prepared_mailer_for(receiver.account).mention } let(:mail) { prepared_mailer_for(receiver.account).mention }
include_examples 'localized subject', 'notification_mailer.mention.subject', name: 'bob' include_examples 'localized subject', 'notification_mailer.mention.subject', name: 'bob'
include_examples 'standard headers', 'mention'
include_examples 'thread headers'
it 'renders the email' do it 'renders the email' do
expect(mail) expect(mail)
@ -47,6 +21,8 @@ RSpec.describe NotificationMailer do
.and(have_subject('You were mentioned by bob')) .and(have_subject('You were mentioned by bob'))
.and(have_body_text('You were mentioned by bob')) .and(have_body_text('You were mentioned by bob'))
.and(have_body_text('The body of the foreign status')) .and(have_body_text('The body of the foreign status'))
.and have_thread_headers
.and have_standard_headers('mention').for(receiver)
end end
end end
@ -56,13 +32,13 @@ RSpec.describe NotificationMailer do
let(:mail) { prepared_mailer_for(receiver.account).follow } let(:mail) { prepared_mailer_for(receiver.account).follow }
include_examples 'localized subject', 'notification_mailer.follow.subject', name: 'bob' include_examples 'localized subject', 'notification_mailer.follow.subject', name: 'bob'
include_examples 'standard headers', 'follow'
it 'renders the email' do it 'renders the email' do
expect(mail) expect(mail)
.to be_present .to be_present
.and(have_subject('bob is now following you')) .and(have_subject('bob is now following you'))
.and(have_body_text('bob is now following you')) .and(have_body_text('bob is now following you'))
.and have_standard_headers('follow').for(receiver)
end end
end end
@ -72,8 +48,6 @@ RSpec.describe NotificationMailer do
let(:mail) { prepared_mailer_for(own_status.account).favourite } let(:mail) { prepared_mailer_for(own_status.account).favourite }
include_examples 'localized subject', 'notification_mailer.favourite.subject', name: 'bob' include_examples 'localized subject', 'notification_mailer.favourite.subject', name: 'bob'
include_examples 'standard headers', 'favourite'
include_examples 'thread headers'
it 'renders the email' do it 'renders the email' do
expect(mail) expect(mail)
@ -81,6 +55,8 @@ RSpec.describe NotificationMailer do
.and(have_subject('bob favorited your post')) .and(have_subject('bob favorited your post'))
.and(have_body_text('Your post was favorited by bob')) .and(have_body_text('Your post was favorited by bob'))
.and(have_body_text('The body of the own status')) .and(have_body_text('The body of the own status'))
.and have_thread_headers
.and have_standard_headers('favourite').for(receiver)
end end
end end
@ -90,8 +66,6 @@ RSpec.describe NotificationMailer do
let(:mail) { prepared_mailer_for(own_status.account).reblog } let(:mail) { prepared_mailer_for(own_status.account).reblog }
include_examples 'localized subject', 'notification_mailer.reblog.subject', name: 'bob' include_examples 'localized subject', 'notification_mailer.reblog.subject', name: 'bob'
include_examples 'standard headers', 'reblog'
include_examples 'thread headers'
it 'renders the email' do it 'renders the email' do
expect(mail) expect(mail)
@ -99,6 +73,8 @@ RSpec.describe NotificationMailer do
.and(have_subject('bob boosted your post')) .and(have_subject('bob boosted your post'))
.and(have_body_text('Your post was boosted by bob')) .and(have_body_text('Your post was boosted by bob'))
.and(have_body_text('The body of the own status')) .and(have_body_text('The body of the own status'))
.and have_thread_headers
.and have_standard_headers('reblog').for(receiver)
end end
end end
@ -108,13 +84,13 @@ RSpec.describe NotificationMailer do
let(:mail) { prepared_mailer_for(receiver.account).follow_request } let(:mail) { prepared_mailer_for(receiver.account).follow_request }
include_examples 'localized subject', 'notification_mailer.follow_request.subject', name: 'bob' include_examples 'localized subject', 'notification_mailer.follow_request.subject', name: 'bob'
include_examples 'standard headers', 'follow_request'
it 'renders the email' do it 'renders the email' do
expect(mail) expect(mail)
.to be_present .to be_present
.and(have_subject('Pending follower: bob')) .and(have_subject('Pending follower: bob'))
.and(have_body_text('bob has requested to follow you')) .and(have_body_text('bob has requested to follow you'))
.and have_standard_headers('follow_request').for(receiver)
end end
end end

View file

@ -72,7 +72,7 @@ RSpec.describe ActivityPub::FetchRemoteStatusService do
expect(status).to_not be_nil expect(status).to_not be_nil
expect(status.url).to eq 'https://foo.bar/watch?v=12345' expect(status.url).to eq 'https://foo.bar/watch?v=12345'
expect(strip_tags(status.text)).to eq 'Nyan Cat 10 hours remixhttps://foo.bar/watch?v=12345' expect(strip_tags(status.text)).to eq "Nyan Cat 10 hours remix\n\nhttps://foo.bar/watch?v=12345"
end end
end end
@ -105,7 +105,7 @@ RSpec.describe ActivityPub::FetchRemoteStatusService do
expect(status).to_not be_nil expect(status).to_not be_nil
expect(status.url).to eq 'https://foo.bar/watch?v=12345' expect(status.url).to eq 'https://foo.bar/watch?v=12345'
expect(strip_tags(status.text)).to eq 'Nyan Cat 10 hours remixhttps://foo.bar/watch?v=12345' expect(strip_tags(status.text)).to eq "Nyan Cat 10 hours remix\n\nhttps://foo.bar/watch?v=12345"
end end
end end
@ -125,7 +125,58 @@ RSpec.describe ActivityPub::FetchRemoteStatusService do
expect(status).to_not be_nil expect(status).to_not be_nil
expect(status.url).to eq 'https://foo.bar/@foo/1234' expect(status.url).to eq 'https://foo.bar/@foo/1234'
expect(strip_tags(status.text)).to eq "Let's change the worldhttps://foo.bar/@foo/1234" expect(strip_tags(status.text)).to eq "Let's change the world\n\nhttps://foo.bar/@foo/1234"
end
end
context 'with Event object that contains a HTML summary' do
let(:object) do
{
'@context': 'https://www.w3.org/ns/activitystreams',
id: 'https://foo.bar/@foo/1234',
type: 'Event',
name: 'Fediverse Birthday Party',
startTime: '2024-01-31T20:00:00.000+01:00',
location: {
type: 'Place',
name: 'FooBar The not converted location',
},
content: 'The not converted detailed description of the event object.',
summary: '<p>See you at the <strong>FooBar</strong>!</p><ul><li><strong>Doors:</strong> 8pm</li><li><strong>Music:</strong> 10pm</li></ul>',
attributedTo: ActivityPub::TagManager.instance.uri_for(sender),
}
end
it 'creates status' do
status = sender.statuses.first
expect(status).to_not be_nil
expect(status.url).to eq 'https://foo.bar/@foo/1234'
expect(status.text).to start_with "<h2>#{object[:name]}</h2>\n\n#{object[:summary]}\n\n"
expect(status.text).to include "href=\"#{object[:id]}\""
end
end
context 'with Article object that contains a HTML summary' do
let(:object) do
{
'@context': 'https://www.w3.org/ns/activitystreams',
id: 'https://foo.bar/blog/future-of-the-fediverse',
type: 'Article',
name: 'Future of the Fediverse',
content: 'Lorem Ipsum',
summary: '<p>Guest article by <a href="https://john.mastodon">John Mastodon</a></p><p>The fediverse is great reading this you will find out why!</p>',
attributedTo: ActivityPub::TagManager.instance.uri_for(sender),
}
end
it 'creates status' do
status = sender.statuses.first
expect(status).to_not be_nil
expect(status.url).to eq object[:id]
expect(status.text).to start_with "<h2>#{object[:name]}</h2>\n\n#{object[:summary]}\n\n"
expect(status.text).to include "href=\"#{object[:id]}\""
end end
end end

View file

@ -4,27 +4,55 @@ require 'rails_helper'
RSpec.describe ApproveAppealService do RSpec.describe ApproveAppealService do
describe '#call' do describe '#call' do
context 'with an existing appeal' do let(:appeal) { Fabricate(:appeal) }
let(:appeal) { Fabricate(:appeal) } let(:account) { Fabricate(:account) }
let(:account) { Fabricate(:account) }
it 'processes the appeal approval' do it 'processes the appeal approval' do
expect { subject.call(appeal, account) } expect { subject.call(appeal, account) }
.to mark_overruled .to mark_overruled
.and record_approver .and record_approver
end
context 'with an appeal about then-deleted posts marked as sensitive by moderators' do
let(:target_account) { Fabricate(:account) }
let(:appeal) { Fabricate(:appeal, strike: strike, account: target_account) }
let(:deleted_media) { Fabricate(:media_attachment, type: :video, status: Fabricate(:status, account: target_account), account: target_account) }
let(:kept_media) { Fabricate(:media_attachment, type: :video, status: Fabricate(:status, account: target_account), account: target_account) }
let(:strike) { Fabricate(:account_warning, target_account: target_account, action: :mark_statuses_as_sensitive, status_ids: [deleted_media.status.id, kept_media.status.id]) }
before do
target_account.unsuspend!
deleted_media.status.discard!
end end
def mark_overruled it 'approves the appeal, marks the statuses as not sensitive and notifies target account about the approval', :inline_jobs do
change(appeal.strike, :overruled_at) emails = capture_emails { subject.call(appeal, account) }
.from(nil)
.to(be > 1.minute.ago)
end
def record_approver expect(appeal.reload).to be_approved
change(appeal, :approved_by_account) expect(strike.reload).to be_overruled
.from(nil)
.to(account) expect(kept_media.status.reload).to_not be_sensitive
expect(emails.size)
.to eq(1)
expect(emails.first)
.to have_attributes(
to: contain_exactly(target_account.user.email),
subject: eq(I18n.t('user_mailer.appeal_approved.subject', date: I18n.l(appeal.created_at)))
)
end end
end end
def mark_overruled
change(appeal.strike, :overruled_at)
.from(nil)
.to(be > 1.minute.ago)
end
def record_approver
change(appeal, :approved_by_account)
.from(nil)
.to(account)
end
end end
end end

View file

@ -12,3 +12,32 @@ RSpec.shared_examples 'localized subject' do |*args, **kwrest|
expect(mail.subject).to eq I18n.t(*args, **kwrest.merge(locale: I18n.default_locale)) expect(mail.subject).to eq I18n.t(*args, **kwrest.merge(locale: I18n.default_locale))
end end
end end
RSpec::Matchers.define :have_thread_headers do
match(notify_expectation_failures: true) do |mail|
expect(mail)
.to be_present
.and(have_header('In-Reply-To', conversation_header_regex))
.and(have_header('References', conversation_header_regex))
end
def conversation_header_regex = /<conversation-\d+.\d\d\d\d-\d\d-\d\d@cb6e6126.ngrok.io>/
end
RSpec::Matchers.define :have_standard_headers do |type|
chain :for do |user|
@user = user
end
match(notify_expectation_failures: true) do |mail|
expect(mail)
.to be_present
.and(have_header('To', "#{@user.account.username} <#{@user.email}>"))
.and(have_header('List-ID', "<#{type}.#{@user.account.username}.#{Rails.configuration.x.local_domain}>"))
.and(have_header('List-Unsubscribe', %r{<https://#{Rails.configuration.x.local_domain}/unsubscribe\?token=.+>}))
.and(have_header('List-Unsubscribe', /&type=#{type}/))
.and(have_header('List-Unsubscribe-Post', 'List-Unsubscribe=One-Click'))
.and(deliver_to("#{@user.account.username} <#{@user.email}>"))
.and(deliver_from(Rails.configuration.action_mailer.default_options[:from]))
end
end