Merge pull request #2835 from ClearlyClaire/glitch-soc/merge-upstream

Merge upstream changes up to fe04291af4
pull/2836/head
Claire 2024-09-04 23:01:53 +02:00 committed by GitHub
commit 5a1d7db309
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
485 changed files with 1195 additions and 802 deletions

View File

@ -11,5 +11,8 @@ RUN apt-get update && \
export DEBIAN_FRONTEND=noninteractive && \ export DEBIAN_FRONTEND=noninteractive && \
apt-get -y install --no-install-recommends libicu-dev libidn11-dev ffmpeg imagemagick libvips42 libpam-dev apt-get -y install --no-install-recommends libicu-dev libidn11-dev ffmpeg imagemagick libvips42 libpam-dev
# Disable download prompt for Corepack
ENV COREPACK_ENABLE_DOWNLOAD_PROMPT=0
# Move welcome message to where VS Code expects it # Move welcome message to where VS Code expects it
COPY .devcontainer/welcome-message.txt /usr/local/etc/vscode-dev-containers/first-run-notice.txt COPY .devcontainer/welcome-message.txt /usr/local/etc/vscode-dev-containers/first-run-notice.txt

View File

@ -39,7 +39,7 @@
}, },
"onCreateCommand": "git config --global --add safe.directory ${containerWorkspaceFolder}", "onCreateCommand": "git config --global --add safe.directory ${containerWorkspaceFolder}",
"postCreateCommand": "COREPACK_ENABLE_DOWNLOAD_PROMPT=0 bin/setup", "postCreateCommand": "bin/setup",
"waitFor": "postCreateCommand", "waitFor": "postCreateCommand",
"customizations": { "customizations": {

View File

@ -1 +1 @@
3.3.4 3.3.5

View File

@ -100,17 +100,17 @@ GEM
attr_required (1.0.2) attr_required (1.0.2)
awrence (1.2.1) awrence (1.2.1)
aws-eventstream (1.3.0) aws-eventstream (1.3.0)
aws-partitions (1.969.0) aws-partitions (1.970.0)
aws-sdk-core (3.202.1) aws-sdk-core (3.203.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.88.0) aws-sdk-kms (1.89.0)
aws-sdk-core (~> 3, >= 3.201.0) aws-sdk-core (~> 3, >= 3.203.0)
aws-sigv4 (~> 1.5) aws-sigv4 (~> 1.5)
aws-sdk-s3 (1.159.0) aws-sdk-s3 (1.160.0)
aws-sdk-core (~> 3, >= 3.201.0) aws-sdk-core (~> 3, >= 3.203.0)
aws-sdk-kms (~> 1) aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.5) aws-sigv4 (~> 1.5)
aws-sigv4 (1.9.1) aws-sigv4 (1.9.1)
@ -790,7 +790,7 @@ GEM
rubyzip (>= 1.2.2, < 3.0) rubyzip (>= 1.2.2, < 3.0)
websocket (~> 1.0) websocket (~> 1.0)
semantic_range (3.0.0) semantic_range (3.0.0)
shoulda-matchers (6.3.1) shoulda-matchers (6.4.0)
activesupport (>= 5.2.0) activesupport (>= 5.2.0)
sidekiq (6.5.12) sidekiq (6.5.12)
connection_pool (>= 2.2.5, < 3) connection_pool (>= 2.2.5, < 3)
@ -837,7 +837,7 @@ GEM
unicode-display_width (>= 1.1.1, < 3) unicode-display_width (>= 1.1.1, < 3)
terrapin (1.0.1) terrapin (1.0.1)
climate_control climate_control
test-prof (1.4.1) test-prof (1.4.2)
thor (1.3.2) thor (1.3.2)
tilt (2.4.0) tilt (2.4.0)
timeout (0.4.1) timeout (0.4.1)

View File

@ -77,6 +77,8 @@ class Api::V2Alpha::NotificationsController < Api::BaseController
end end
def load_grouped_notifications def load_grouped_notifications
return [] if @notifications.empty?
MastodonOTELTracer.in_span('Api::V2Alpha::NotificationsController#load_grouped_notifications') do MastodonOTELTracer.in_span('Api::V2Alpha::NotificationsController#load_grouped_notifications') do
NotificationGroup.from_notifications(@notifications, pagination_range: (@notifications.last.id)..(@notifications.first.id), grouped_types: params[:grouped_types]) NotificationGroup.from_notifications(@notifications, pagination_range: (@notifications.last.id)..(@notifications.first.id), grouped_types: params[:grouped_types])
end end

View File

@ -18,7 +18,7 @@ import {
selectSettingsNotificationsQuickFilterActive, selectSettingsNotificationsQuickFilterActive,
selectSettingsNotificationsShows, selectSettingsNotificationsShows,
} from 'flavours/glitch/selectors/settings'; } from 'flavours/glitch/selectors/settings';
import type { AppDispatch } from 'flavours/glitch/store'; import type { AppDispatch, RootState } from 'flavours/glitch/store';
import { import {
createAppAsyncThunk, createAppAsyncThunk,
createDataLoadingThunk, createDataLoadingThunk,
@ -32,6 +32,14 @@ function excludeAllTypesExcept(filter: string) {
return allNotificationTypes.filter((item) => item !== filter); return allNotificationTypes.filter((item) => item !== filter);
} }
function getExcludedTypes(state: RootState) {
const activeFilter = selectSettingsNotificationsQuickFilterActive(state);
return activeFilter === 'all'
? selectSettingsNotificationsExcludedTypes(state)
: excludeAllTypesExcept(activeFilter);
}
function dispatchAssociatedRecords( function dispatchAssociatedRecords(
dispatch: AppDispatch, dispatch: AppDispatch,
notifications: ApiNotificationGroupJSON[] | ApiNotificationJSON[], notifications: ApiNotificationGroupJSON[] | ApiNotificationJSON[],
@ -62,17 +70,8 @@ function dispatchAssociatedRecords(
export const fetchNotifications = createDataLoadingThunk( export const fetchNotifications = createDataLoadingThunk(
'notificationGroups/fetch', 'notificationGroups/fetch',
async (_params, { getState }) => { async (_params, { getState }) =>
const activeFilter = apiFetchNotifications({ exclude_types: getExcludedTypes(getState()) }),
selectSettingsNotificationsQuickFilterActive(getState());
return apiFetchNotifications({
exclude_types:
activeFilter === 'all'
? selectSettingsNotificationsExcludedTypes(getState())
: excludeAllTypesExcept(activeFilter),
});
},
({ notifications, accounts, statuses }, { dispatch }) => { ({ notifications, accounts, statuses }, { dispatch }) => {
dispatch(importFetchedAccounts(accounts)); dispatch(importFetchedAccounts(accounts));
dispatch(importFetchedStatuses(statuses)); dispatch(importFetchedStatuses(statuses));
@ -92,9 +91,11 @@ export const fetchNotifications = createDataLoadingThunk(
export const fetchNotificationsGap = createDataLoadingThunk( export const fetchNotificationsGap = createDataLoadingThunk(
'notificationGroups/fetchGap', 'notificationGroups/fetchGap',
async (params: { gap: NotificationGap }) => async (params: { gap: NotificationGap }, { getState }) =>
apiFetchNotifications({ max_id: params.gap.maxId }), apiFetchNotifications({
max_id: params.gap.maxId,
exclude_types: getExcludedTypes(getState()),
}),
({ notifications, accounts, statuses }, { dispatch }) => { ({ notifications, accounts, statuses }, { dispatch }) => {
dispatch(importFetchedAccounts(accounts)); dispatch(importFetchedAccounts(accounts));
dispatch(importFetchedStatuses(statuses)); dispatch(importFetchedStatuses(statuses));
@ -109,6 +110,7 @@ export const pollRecentNotifications = createDataLoadingThunk(
async (_params, { getState }) => { async (_params, { getState }) => {
return apiFetchNotifications({ return apiFetchNotifications({
max_id: undefined, max_id: undefined,
exclude_types: getExcludedTypes(getState()),
// In slow mode, we don't want to include notifications that duplicate the already-displayed ones // In slow mode, we don't want to include notifications that duplicate the already-displayed ones
since_id: usePendingItems since_id: usePendingItems
? getState().notificationGroups.groups.find( ? getState().notificationGroups.groups.find(
@ -183,7 +185,6 @@ export const setNotificationsFilter = createAppAsyncThunk(
path: ['notifications', 'quickFilter', 'active'], path: ['notifications', 'quickFilter', 'active'],
value: filterType, value: filterType,
}); });
// dispatch(expandNotifications({ forceLoad: true }));
void dispatch(fetchNotifications()); void dispatch(fetchNotifications());
dispatch(saveSettings()); dispatch(saveSettings());
}, },

View File

@ -42,19 +42,11 @@ export const NotificationAdminReport: React.FC<{
if (!account || !targetAccount) return null; if (!account || !targetAccount) return null;
const domain = account.acct.split('@')[1];
const values = { const values = {
name: ( name: <bdi>{domain ?? `@${account.acct}`}</bdi>,
<bdi target: <bdi>@{targetAccount.acct}</bdi>,
dangerouslySetInnerHTML={{ __html: account.get('display_name_html') }}
/>
),
target: (
<bdi
dangerouslySetInnerHTML={{
__html: targetAccount.get('display_name_html'),
}}
/>
),
category: intl.formatMessage(messages[report.category]), category: intl.formatMessage(messages[report.category]),
count: report.status_ids.length, count: report.status_ids.length,
}; };

View File

@ -18,7 +18,7 @@ import {
selectSettingsNotificationsQuickFilterActive, selectSettingsNotificationsQuickFilterActive,
selectSettingsNotificationsShows, selectSettingsNotificationsShows,
} from 'mastodon/selectors/settings'; } from 'mastodon/selectors/settings';
import type { AppDispatch } from 'mastodon/store'; import type { AppDispatch, RootState } from 'mastodon/store';
import { import {
createAppAsyncThunk, createAppAsyncThunk,
createDataLoadingThunk, createDataLoadingThunk,
@ -32,6 +32,14 @@ function excludeAllTypesExcept(filter: string) {
return allNotificationTypes.filter((item) => item !== filter); return allNotificationTypes.filter((item) => item !== filter);
} }
function getExcludedTypes(state: RootState) {
const activeFilter = selectSettingsNotificationsQuickFilterActive(state);
return activeFilter === 'all'
? selectSettingsNotificationsExcludedTypes(state)
: excludeAllTypesExcept(activeFilter);
}
function dispatchAssociatedRecords( function dispatchAssociatedRecords(
dispatch: AppDispatch, dispatch: AppDispatch,
notifications: ApiNotificationGroupJSON[] | ApiNotificationJSON[], notifications: ApiNotificationGroupJSON[] | ApiNotificationJSON[],
@ -62,17 +70,8 @@ function dispatchAssociatedRecords(
export const fetchNotifications = createDataLoadingThunk( export const fetchNotifications = createDataLoadingThunk(
'notificationGroups/fetch', 'notificationGroups/fetch',
async (_params, { getState }) => { async (_params, { getState }) =>
const activeFilter = apiFetchNotifications({ exclude_types: getExcludedTypes(getState()) }),
selectSettingsNotificationsQuickFilterActive(getState());
return apiFetchNotifications({
exclude_types:
activeFilter === 'all'
? selectSettingsNotificationsExcludedTypes(getState())
: excludeAllTypesExcept(activeFilter),
});
},
({ notifications, accounts, statuses }, { dispatch }) => { ({ notifications, accounts, statuses }, { dispatch }) => {
dispatch(importFetchedAccounts(accounts)); dispatch(importFetchedAccounts(accounts));
dispatch(importFetchedStatuses(statuses)); dispatch(importFetchedStatuses(statuses));
@ -92,9 +91,11 @@ export const fetchNotifications = createDataLoadingThunk(
export const fetchNotificationsGap = createDataLoadingThunk( export const fetchNotificationsGap = createDataLoadingThunk(
'notificationGroups/fetchGap', 'notificationGroups/fetchGap',
async (params: { gap: NotificationGap }) => async (params: { gap: NotificationGap }, { getState }) =>
apiFetchNotifications({ max_id: params.gap.maxId }), apiFetchNotifications({
max_id: params.gap.maxId,
exclude_types: getExcludedTypes(getState()),
}),
({ notifications, accounts, statuses }, { dispatch }) => { ({ notifications, accounts, statuses }, { dispatch }) => {
dispatch(importFetchedAccounts(accounts)); dispatch(importFetchedAccounts(accounts));
dispatch(importFetchedStatuses(statuses)); dispatch(importFetchedStatuses(statuses));
@ -109,6 +110,7 @@ export const pollRecentNotifications = createDataLoadingThunk(
async (_params, { getState }) => { async (_params, { getState }) => {
return apiFetchNotifications({ return apiFetchNotifications({
max_id: undefined, max_id: undefined,
exclude_types: getExcludedTypes(getState()),
// In slow mode, we don't want to include notifications that duplicate the already-displayed ones // In slow mode, we don't want to include notifications that duplicate the already-displayed ones
since_id: usePendingItems since_id: usePendingItems
? getState().notificationGroups.groups.find( ? getState().notificationGroups.groups.find(
@ -183,7 +185,6 @@ export const setNotificationsFilter = createAppAsyncThunk(
path: ['notifications', 'quickFilter', 'active'], path: ['notifications', 'quickFilter', 'active'],
value: filterType, value: filterType,
}); });
// dispatch(expandNotifications({ forceLoad: true }));
void dispatch(fetchNotifications()); void dispatch(fetchNotifications());
dispatch(saveSettings()); dispatch(saveSettings());
}, },

View File

@ -42,19 +42,11 @@ export const NotificationAdminReport: React.FC<{
if (!account || !targetAccount) return null; if (!account || !targetAccount) return null;
const domain = account.acct.split('@')[1];
const values = { const values = {
name: ( name: <bdi>{domain ?? `@${account.acct}`}</bdi>,
<bdi target: <bdi>@{targetAccount.acct}</bdi>,
dangerouslySetInnerHTML={{ __html: account.get('display_name_html') }}
/>
),
target: (
<bdi
dangerouslySetInnerHTML={{
__html: targetAccount.get('display_name_html'),
}}
/>
),
category: intl.formatMessage(messages[report.category]), category: intl.formatMessage(messages[report.category]),
count: report.status_ids.length, count: report.status_ids.length,
}; };

View File

@ -524,7 +524,9 @@
"notification.moderation_warning.action_silence": "Sua conta foi limitada.", "notification.moderation_warning.action_silence": "Sua conta foi limitada.",
"notification.moderation_warning.action_suspend": "Sua conta foi suspensa.", "notification.moderation_warning.action_suspend": "Sua conta foi suspensa.",
"notification.own_poll": "Sua enquete terminou", "notification.own_poll": "Sua enquete terminou",
"notification.poll": "Uma enquete que você votou terminou",
"notification.reblog": "{name} deu boost no teu toot", "notification.reblog": "{name} deu boost no teu toot",
"notification.reblog.name_and_others_with_link": "{name} e <a>{count, plural, one {# outra} other {# outras}}</a> impulsionaram a publicação",
"notification.relationships_severance_event": "Conexões perdidas com {name}", "notification.relationships_severance_event": "Conexões perdidas com {name}",
"notification.relationships_severance_event.account_suspension": "Um administrador de {from} suspendeu {target}, o que significa que você não pode mais receber atualizações deles ou interagir com eles.", "notification.relationships_severance_event.account_suspension": "Um administrador de {from} suspendeu {target}, o que significa que você não pode mais receber atualizações deles ou interagir com eles.",
"notification.relationships_severance_event.domain_block": "An admin from {from} has blocked {target}, including {followersCount} of your followers and {followingCount, plural, one {# account} other {# accounts}} you follow.", "notification.relationships_severance_event.domain_block": "An admin from {from} has blocked {target}, including {followersCount} of your followers and {followingCount, plural, one {# account} other {# accounts}} you follow.",
@ -533,16 +535,32 @@
"notification.status": "{name} acabou de tootar", "notification.status": "{name} acabou de tootar",
"notification.update": "{name} editou uma publicação", "notification.update": "{name} editou uma publicação",
"notification_requests.accept": "Aceitar", "notification_requests.accept": "Aceitar",
"notification_requests.accept_multiple": "{count, plural, one {Aceite # pedido…} other {Aceite # pedidos…}}",
"notification_requests.confirm_accept_multiple.button": "{count, plural, one {Aceite # pedido} other {Aceite # pedidos}}",
"notification_requests.confirm_accept_multiple.message": "Você está prestes a aceitar {count, plural, one {um pedido de notificação} other {# pedidos de notificação}}. Tem certeza de que deseja continuar?",
"notification_requests.confirm_accept_multiple.title": "Aceitar solicitações de notificação?",
"notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Dispensar pedido} other {Dispensar pedidos}}",
"notification_requests.confirm_dismiss_multiple.message": "Você está prestes a descartar {count, plural, one {um pedido de notificação} other {# pedidos de notificação}}. Você não será capaz de acessar facilmente{count, plural, one {} other {}} novamente. Tem certeza de que deseja continuar?",
"notification_requests.confirm_dismiss_multiple.title": "Descartar solicitações de notificação?",
"notification_requests.dismiss": "Rejeitar", "notification_requests.dismiss": "Rejeitar",
"notification_requests.dismiss_multiple": "{count, plural, one {Dispensar # pedido…} other {Dispensar # pedidos…}}",
"notification_requests.edit_selection": "Editar",
"notification_requests.exit_selection": "Concluído",
"notification_requests.explainer_for_limited_account": "As notificações desta conta foram filtradas porque a conta foi limitada por um moderador.",
"notification_requests.explainer_for_limited_remote_account": "As notificações desta conta foram filtradas porque a conta ou o seu servidor foi limitado por um moderador.",
"notification_requests.maximize": "Maximizar", "notification_requests.maximize": "Maximizar",
"notification_requests.minimize_banner": "Minimizar banner de notificações filtradas",
"notification_requests.notifications_from": "Notificações de {name}", "notification_requests.notifications_from": "Notificações de {name}",
"notification_requests.title": "Notificações filtradas", "notification_requests.title": "Notificações filtradas",
"notification_requests.view": "Ver notificações",
"notifications.clear": "Limpar notificações", "notifications.clear": "Limpar notificações",
"notifications.clear_confirmation": "Você tem certeza de que deseja limpar todas as suas notificações?", "notifications.clear_confirmation": "Você tem certeza de que deseja limpar todas as suas notificações?",
"notifications.clear_title": "Limpar notificações?", "notifications.clear_title": "Limpar notificações?",
"notifications.column_settings.admin.report": "Novas denúncias:", "notifications.column_settings.admin.report": "Novas denúncias:",
"notifications.column_settings.admin.sign_up": "Novas inscrições:", "notifications.column_settings.admin.sign_up": "Novas inscrições:",
"notifications.column_settings.alert": "Notificações no computador", "notifications.column_settings.alert": "Notificações no computador",
"notifications.column_settings.beta.category": "Recursos experimentais",
"notifications.column_settings.beta.grouping": "Agrupar notificações",
"notifications.column_settings.favourite": "Favoritos:", "notifications.column_settings.favourite": "Favoritos:",
"notifications.column_settings.filter_bar.advanced": "Exibir todas as categorias", "notifications.column_settings.filter_bar.advanced": "Exibir todas as categorias",
"notifications.column_settings.filter_bar.category": "Barra de filtro rápido", "notifications.column_settings.filter_bar.category": "Barra de filtro rápido",
@ -574,6 +592,11 @@
"notifications.policy.accept": "Aceitar", "notifications.policy.accept": "Aceitar",
"notifications.policy.accept_hint": "Mostrar nas notificações", "notifications.policy.accept_hint": "Mostrar nas notificações",
"notifications.policy.drop": "Ignorar", "notifications.policy.drop": "Ignorar",
"notifications.policy.drop_hint": "Envie para o void, para nunca mais ser visto novamente",
"notifications.policy.filter": "Filtrar",
"notifications.policy.filter_hint": "Enviar para caixa de notificações filtradas",
"notifications.policy.filter_limited_accounts_hint": "Limitado pelos moderadores do servidor",
"notifications.policy.filter_limited_accounts_title": "Contas moderadas",
"notifications.policy.filter_new_accounts.hint": "Created within the past {days, plural, one {one day} other {# days}}", "notifications.policy.filter_new_accounts.hint": "Created within the past {days, plural, one {one day} other {# days}}",
"notifications.policy.filter_new_accounts_title": "Novas contas", "notifications.policy.filter_new_accounts_title": "Novas contas",
"notifications.policy.filter_not_followers_hint": "Including people who have been following you fewer than {days, plural, one {one day} other {# days}}", "notifications.policy.filter_not_followers_hint": "Including people who have been following you fewer than {days, plural, one {one day} other {# days}}",
@ -582,6 +605,7 @@
"notifications.policy.filter_not_following_title": "Pessoas que você não segue", "notifications.policy.filter_not_following_title": "Pessoas que você não segue",
"notifications.policy.filter_private_mentions_hint": "Filtrado, a menos que respondido em sua própria menção ou se você segue o remetente", "notifications.policy.filter_private_mentions_hint": "Filtrado, a menos que respondido em sua própria menção ou se você segue o remetente",
"notifications.policy.filter_private_mentions_title": "Menções privadas não solicitadas", "notifications.policy.filter_private_mentions_title": "Menções privadas não solicitadas",
"notifications.policy.title": "Gerenciar notificações de…",
"notifications_permission_banner.enable": "Ativar notificações no computador", "notifications_permission_banner.enable": "Ativar notificações no computador",
"notifications_permission_banner.how_to_control": "Para receber notificações quando o Mastodon não estiver aberto, ative as notificações no computador. Você pode controlar precisamente quais tipos de interações geram notificações no computador através do botão {icon}.", "notifications_permission_banner.how_to_control": "Para receber notificações quando o Mastodon não estiver aberto, ative as notificações no computador. Você pode controlar precisamente quais tipos de interações geram notificações no computador através do botão {icon}.",
"notifications_permission_banner.title": "Nunca perca nada", "notifications_permission_banner.title": "Nunca perca nada",
@ -708,9 +732,13 @@
"report.unfollow_explanation": "Você está seguindo esta conta. Para não ver as publicações dela em sua página inicial, deixe de segui-la.", "report.unfollow_explanation": "Você está seguindo esta conta. Para não ver as publicações dela em sua página inicial, deixe de segui-la.",
"report_notification.attached_statuses": "{count, plural, one {{count} publicação anexada} other {{count} publicações anexadas}}", "report_notification.attached_statuses": "{count, plural, one {{count} publicação anexada} other {{count} publicações anexadas}}",
"report_notification.categories.legal": "Legal", "report_notification.categories.legal": "Legal",
"report_notification.categories.legal_sentence": "conteúdo ilegal",
"report_notification.categories.other": "Outro", "report_notification.categories.other": "Outro",
"report_notification.categories.other_sentence": "outro",
"report_notification.categories.spam": "Spam", "report_notification.categories.spam": "Spam",
"report_notification.categories.spam_sentence": "spam",
"report_notification.categories.violation": "Violação de regra", "report_notification.categories.violation": "Violação de regra",
"report_notification.categories.violation_sentence": "violação de regra",
"report_notification.open": "Abrir denúncia", "report_notification.open": "Abrir denúncia",
"search.no_recent_searches": "Nenhuma busca recente", "search.no_recent_searches": "Nenhuma busca recente",
"search.placeholder": "Pesquisar", "search.placeholder": "Pesquisar",

View File

@ -11,6 +11,16 @@ class AnnualReport::Source
protected protected
def year_as_snowflake_range def year_as_snowflake_range
(Mastodon::Snowflake.id_at(DateTime.new(year, 1, 1))..Mastodon::Snowflake.id_at(DateTime.new(year, 12, 31))) (beginning_snowflake_id..ending_snowflake_id)
end
private
def beginning_snowflake_id
Mastodon::Snowflake.id_at DateTime.new(year).beginning_of_year
end
def ending_snowflake_id
Mastodon::Snowflake.id_at DateTime.new(year).end_of_year
end end
end end

View File

@ -145,15 +145,15 @@ class AccountStatusesCleanupPolicy < ApplicationRecord
end end
def without_self_fav_scope def without_self_fav_scope
Status.where('NOT EXISTS (SELECT 1 FROM favourites fav WHERE fav.account_id = statuses.account_id AND fav.status_id = statuses.id)') Status.where.not(self_status_reference_exists(Favourite))
end end
def without_self_bookmark_scope def without_self_bookmark_scope
Status.where('NOT EXISTS (SELECT 1 FROM bookmarks bookmark WHERE bookmark.account_id = statuses.account_id AND bookmark.status_id = statuses.id)') Status.where.not(self_status_reference_exists(Bookmark))
end end
def without_pinned_scope def without_pinned_scope
Status.where('NOT EXISTS (SELECT 1 FROM status_pins pin WHERE pin.account_id = statuses.account_id AND pin.status_id = statuses.id)') Status.where.not(self_status_reference_exists(StatusPin))
end end
def without_media_scope def without_media_scope
@ -174,4 +174,13 @@ class AccountStatusesCleanupPolicy < ApplicationRecord
def account_statuses def account_statuses
Status.where(account_id: account_id) Status.where(account_id: account_id)
end end
def self_status_reference_exists(model)
model
.where(model.arel_table[:account_id].eq Status.arel_table[:account_id])
.where(model.arel_table[:status_id].eq Status.arel_table[:id])
.select(1)
.arel
.exists
end
end end

View File

@ -22,6 +22,7 @@ Rails.application.config.middleware.insert_before 0, Rack::Cors do
expose: %w(Link X-RateLimit-Reset X-RateLimit-Limit X-RateLimit-Remaining X-Request-Id), expose: %w(Link X-RateLimit-Reset X-RateLimit-Limit X-RateLimit-Remaining X-Request-Id),
methods: %i(post put delete get patch options) methods: %i(post put delete get patch options)
resource '/oauth/token', methods: [:post] resource '/oauth/token', methods: [:post]
resource '/oauth/revoke', methods: [:post]
end end
end end
end end

View File

@ -32,7 +32,7 @@ pt-BR:
import: import:
attributes: attributes:
data: data:
malformed: está incorreto malformed: está malformado
status: status:
attributes: attributes:
reblog: reblog:
@ -43,16 +43,16 @@ pt-BR:
blocked: usa provedor de e-mail não permitido blocked: usa provedor de e-mail não permitido
unreachable: parece não existir unreachable: parece não existir
role_id: role_id:
elevated: não pode ser maior que seu cargo atual elevated: não pode maior que sua função atual
user_role: user_role:
attributes: attributes:
permissions_as_keys: permissions_as_keys:
dangerous: incluir permissões que não são seguras para o cargo base dangerous: incluir permissões que não são seguras para a função base
elevated: não pode incluir permissões que o seu cargo atual não possui elevated: não pode incluir permissões que a sua função atual não possui
own_role: não pode ser alterado com seu cargo atual own_role: não pode ser alterado com sua função atual
position: position:
elevated: não pode ser maior do que seu cargo atual elevated: não pode ser maior do que sua função atual
own_role: não pode ser alterado com seu cargo atual own_role: não pode ser alterado com sua função atual
webhook: webhook:
attributes: attributes:
events: events:

View File

@ -14,7 +14,7 @@ pt-BR:
not_found_in_database: "%{authentication_keys} ou senha inválida." not_found_in_database: "%{authentication_keys} ou senha inválida."
omniauth_user_creation_failure: Erro ao criar uma conta para esta identidade. omniauth_user_creation_failure: Erro ao criar uma conta para esta identidade.
pending: Sua conta está sendo revisada. pending: Sua conta está sendo revisada.
timeout: Sua sessão expirou. Por favor, entre novamente para continuar. timeout: Sua sessão expirou. Faça login novamente para continuar.
unauthenticated: Você precisa entrar ou criar uma conta antes de continuar. unauthenticated: Você precisa entrar ou criar uma conta antes de continuar.
unconfirmed: Você precisa confirmar o seu endereço de e-mail antes de continuar. unconfirmed: Você precisa confirmar o seu endereço de e-mail antes de continuar.
mailer: mailer:
@ -48,12 +48,12 @@ pt-BR:
subject: 'Mastodon: Instruções para alterar senha' subject: 'Mastodon: Instruções para alterar senha'
title: Redefinir senha title: Redefinir senha
two_factor_disabled: two_factor_disabled:
explanation: O login agora é possível usando apenas o endereço de e-mail e senha. explanation: O login agora é possível usando apenas o endereço eletrônico e senha.
subject: 'Mastodon: Autenticação de dois fatores desativada' subject: 'Mastodon: Autenticação de dois fatores desativada'
subtitle: A autenticação de dois fatores foi desativada. subtitle: A autenticação de dois fatores foi desativada.
title: 2FA desativada title: 2FA desativada
two_factor_enabled: two_factor_enabled:
explanation: Será necessário um código gerado pelo aplicativo de autenticação para fazer login. explanation: Será necessário um código gerado pelo aplicativo de autenticação TOTP para fazer login.
subject: 'Mastodon: Autenticação de dois fatores ativada' subject: 'Mastodon: Autenticação de dois fatores ativada'
subtitle: A autenticação de dois fatores foi ativada para sua conta. subtitle: A autenticação de dois fatores foi ativada para sua conta.
title: 2FA ativada title: 2FA ativada
@ -75,11 +75,11 @@ pt-BR:
title: Uma das suas chaves de segurança foi excluída title: Uma das suas chaves de segurança foi excluída
webauthn_disabled: webauthn_disabled:
explanation: A autenticação por chaves de segurança foi desativada para sua conta. explanation: A autenticação por chaves de segurança foi desativada para sua conta.
extra: O login agora é possível usando o código gerado por um aplicativo de autenticação de dois fatores. extra: Agora você pode fazer login usando apenas o código gerado pelo aplicativo de autenticação TOTP.
subject: 'Mastodon: Autenticação por chaves de segurança desativada' subject: 'Mastodon: Autenticação por chaves de segurança desativada'
title: Chaves de segurança desativadas title: Chaves de segurança desativadas
webauthn_enabled: webauthn_enabled:
explanation: Autenticação por chave de segurança foi ativada para sua conta. explanation: A autenticação por chave de segurança foi ativada para sua conta.
extra: Sua chave de segurança agora pode ser usada para login. extra: Sua chave de segurança agora pode ser usada para login.
subject: 'Mastodon: Autenticação por chaves de segurança ativada' subject: 'Mastodon: Autenticação por chaves de segurança ativada'
title: Chaves de segurança ativadas title: Chaves de segurança ativadas

View File

@ -60,8 +60,8 @@ 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. É uma aplicação de terceiros. <strong>Se você não confia, então você não deve autorizá-lo.</strong> 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: Revisar permissões review_permissions: Rever permissões
title: Autorização necessária title: Autorização necessária
show: show:
title: Copie este código de autorização e cole no aplicativo. title: Copie este código de autorização e cole no aplicativo.
@ -72,8 +72,8 @@ pt-BR:
revoke: Você tem certeza? revoke: Você tem certeza?
index: index:
authorized_at: Autorizado em %{date} authorized_at: Autorizado em %{date}
description_html: Estas são as aplicações que podem acessar sua conta usando a API. Se houver aplicativos que você não reconhece ou com mau funcionamento, você pode revogar seu acesso. description_html: Estas são as aplicações que podem acessar sua conta usando a API. Se houver aplicações que você não reconhece ou que não funcionem corretamente, você pode revogar os acessos.
last_used_at: Última vez usado em %{date} last_used_at: Usado pela última vez em %{date}
never_used: Nunca usado never_used: Nunca usado
scopes: Permissões scopes: Permissões
superapp: Interno superapp: Interno
@ -83,6 +83,7 @@ pt-BR:
access_denied: O proprietário do recurso ou servidor de autorização recusou a solicitação. access_denied: O proprietário do recurso ou servidor de autorização recusou a solicitação.
credential_flow_not_configured: Fluxo das Credenciais de Senha do Proprietário do Recurso falhou porque Doorkeeper.configure.resource_owner_from_credentials não foi configurado. credential_flow_not_configured: Fluxo das Credenciais de Senha do Proprietário do Recurso falhou porque Doorkeeper.configure.resource_owner_from_credentials não foi configurado.
invalid_client: Autenticação do cliente falhou por causa de um cliente desconhecido, nenhum cliente de autenticação foi incluído ou o método de autenticação não é suportado. invalid_client: Autenticação do cliente falhou por causa de um cliente desconhecido, nenhum cliente de autenticação foi incluído ou o método de autenticação não é suportado.
invalid_code_challenge_method: O método de desafio de código deve ser S256; o método 'plain' não é suportado.
invalid_grant: A garantia de autorização está inválida, expirou ou foi revogada, não é equivalente ao link de redirecionamento usado na solicitação de autorização ou foi emitido por outro cliente. invalid_grant: A garantia de autorização está inválida, expirou ou foi revogada, não é equivalente ao link de redirecionamento usado na solicitação de autorização ou foi emitido por outro cliente.
invalid_redirect_uri: O link de redirecionamento é inválido. invalid_redirect_uri: O link de redirecionamento é inválido.
invalid_request: invalid_request:
@ -114,23 +115,23 @@ pt-BR:
notice: Aplicativo revogado. notice: Aplicativo revogado.
grouped_scopes: grouped_scopes:
access: access:
read: Acesso somente para leitura read: Acesso somente leitura
read/write: Acesso de leitura e escrita read/write: Acesso de leitura e escrita
write: Acesso somente para escrita write: Acesso somente escrita
title: title:
accounts: Contas accounts: Contas
admin/accounts: Administração de contas admin/accounts: Administração de contas
admin/all: Todas as funções administrativas admin/all: Todas as funções administrativas
admin/reports: Controle de denúncias admin/reports: Administração de denúncias
all: Acesso total à sua conta Mastodon all: Acesso total à sua conta Mastodon
blocks: Bloqueios blocks: Bloqueios
bookmarks: Salvos bookmarks: Salvos
conversations: Conversas conversations: Conversas
crypto: Criptografia de ponta a ponta crypto: Criptografia de ponta a ponta
favourites: Favoritas favourites: Favoritos
filters: Filtros filters: Filtros
follow: Seguidores, Silenciados e Bloqueados follow: Seguimentos, Silenciamentos e Bloqueios
follows: Seguidores follows: Seguidos
lists: Listas lists: Listas
media: Mídias anexadas media: Mídias anexadas
mutes: Silenciados mutes: Silenciados
@ -151,17 +152,17 @@ pt-BR:
admin:read: ler todos os dados no servidor admin:read: ler todos os dados no servidor
admin:read:accounts: ler informações sensíveis de todas as contas admin:read:accounts: ler informações sensíveis de todas as contas
admin:read:canonical_email_blocks: ler informações sensíveis de todos os blocos de e-mail canônicos admin:read:canonical_email_blocks: ler informações sensíveis de todos os blocos de e-mail canônicos
admin:read:domain_allows: ler informações sensíveis de todos os domínios (URL) permitidos admin:read:domain_allows: ler informações sensíveis de todos os domínios permitidos
admin:read:domain_blocks: ler informações sensíveis de todos os domínios (URL) bloqueados admin:read:domain_blocks: ler informações sensíveis de todos os domínios bloqueados
admin:read:email_domain_blocks: ler informações sensíveis de todos os e-mails de domínios bloqueados admin:read:email_domain_blocks: ler informações sensíveis de todos os domínios de e-mail bloqueados
admin:read:ip_blocks: ler informações sensíveis de todos os endereços de IP bloqueados admin:read:ip_blocks: ler informações sensíveis de todos os endereços de IP bloqueados
admin:read:reports: ler informações sensíveis de todas as denúncias e contas denunciadas admin:read:reports: ler informações sensíveis de todas as denúncias e contas denunciadas
admin:write: alterar todos os dados no servidor admin:write: alterar todos os dados no servidor
admin:write:accounts: executar ações de moderação em contas admin:write:accounts: executar ações de moderação em contas
admin:write:canonical_email_blocks: executar ações de moderação em blocos canônicos de e-mail admin:write:canonical_email_blocks: executar ações de moderação em blocos canônicos de e-mail
admin:write:domain_allows: executar ações de moderação em domínios (URL) permitidos admin:write:domain_allows: executar ações de moderação em domínios permitidos
admin:write:domain_blocks: executar ações de moderação em domínios (URL) bloqueados admin:write:domain_blocks: executar ações de moderação em domínios bloqueados
admin:write:email_domain_blocks: executar ações de moderação em blocos de e-mail bloqueados admin:write:email_domain_blocks: executar ações de moderação em domínios de e-mail bloqueados
admin:write:ip_blocks: executar ações de moderação em IPs bloqueados admin:write:ip_blocks: executar ações de moderação em IPs bloqueados
admin:write:reports: executar ações de moderação em denúncias admin:write:reports: executar ações de moderação em denúncias
crypto: usar criptografia de ponta-a-ponta crypto: usar criptografia de ponta-a-ponta
@ -172,7 +173,7 @@ pt-BR:
read:accounts: ver informações das contas read:accounts: ver informações das contas
read:blocks: ver seus bloqueados read:blocks: ver seus bloqueados
read:bookmarks: ver seus salvos read:bookmarks: ver seus salvos
read:favourites: veja suas favoritas read:favourites: veja seus favoritos
read:filters: ver seus filtros read:filters: ver seus filtros
read:follows: ver quem você segue read:follows: ver quem você segue
read:lists: ver suas listas read:lists: ver suas listas

View File

@ -182,14 +182,17 @@ en-GB:
create_custom_emoji: Create Custom Emoji create_custom_emoji: Create Custom Emoji
create_domain_allow: Create Domain Allow create_domain_allow: Create Domain Allow
create_domain_block: Create Domain Block create_domain_block: Create Domain Block
create_email_domain_block: Create Email Domain Block
create_ip_block: Create IP rule create_ip_block: Create IP rule
create_unavailable_domain: Create Unavailable Domain create_unavailable_domain: Create Unavailable Domain
create_user_role: Create Role create_user_role: Create Role
demote_user: Demote User demote_user: Demote User
destroy_announcement: Delete Announcement destroy_announcement: Delete Announcement
destroy_canonical_email_block: Delete Email Block
destroy_custom_emoji: Delete Custom Emoji destroy_custom_emoji: Delete Custom Emoji
destroy_domain_allow: Delete Domain Allow destroy_domain_allow: Delete Domain Allow
destroy_domain_block: Delete Domain Block destroy_domain_block: Delete Domain Block
destroy_email_domain_block: Delete Email Domain Block
destroy_instance: Purge Domain destroy_instance: Purge Domain
destroy_ip_block: Delete IP rule destroy_ip_block: Delete IP rule
destroy_status: Delete Post destroy_status: Delete Post
@ -197,8 +200,10 @@ en-GB:
destroy_user_role: Destroy Role destroy_user_role: Destroy Role
disable_2fa_user: Disable 2FA disable_2fa_user: Disable 2FA
disable_custom_emoji: Disable Custom Emoji disable_custom_emoji: Disable Custom Emoji
disable_sign_in_token_auth_user: Disable Email Token Authentication for User
disable_user: Disable User disable_user: Disable User
enable_custom_emoji: Enable Custom Emoji enable_custom_emoji: Enable Custom Emoji
enable_sign_in_token_auth_user: Enable Email Token Authentication for User
enable_user: Enable User enable_user: Enable User
memorialize_account: Memorialise Account memorialize_account: Memorialise Account
promote_user: Promote User promote_user: Promote User
@ -228,20 +233,26 @@ en-GB:
approve_appeal_html: "%{name} approved moderation decision appeal from %{target}" approve_appeal_html: "%{name} approved moderation decision appeal from %{target}"
approve_user_html: "%{name} approved sign-up from %{target}" approve_user_html: "%{name} approved sign-up from %{target}"
assigned_to_self_report_html: "%{name} assigned report %{target} to themselves" assigned_to_self_report_html: "%{name} assigned report %{target} to themselves"
change_email_user_html: "%{name} changed the email address of user %{target}"
change_role_user_html: "%{name} changed role of %{target}" change_role_user_html: "%{name} changed role of %{target}"
confirm_user_html: "%{name} confirmed email address of user %{target}"
create_account_warning_html: "%{name} sent a warning to %{target}" create_account_warning_html: "%{name} sent a warning to %{target}"
create_announcement_html: "%{name} created new announcement %{target}" create_announcement_html: "%{name} created new announcement %{target}"
create_canonical_email_block_html: "%{name} blocked email with the hash %{target}"
create_custom_emoji_html: "%{name} uploaded new emoji %{target}" create_custom_emoji_html: "%{name} uploaded new emoji %{target}"
create_domain_allow_html: "%{name} allowed federation with domain %{target}" create_domain_allow_html: "%{name} allowed federation with domain %{target}"
create_domain_block_html: "%{name} blocked domain %{target}" create_domain_block_html: "%{name} blocked domain %{target}"
create_email_domain_block_html: "%{name} blocked email domain %{target}"
create_ip_block_html: "%{name} created rule for IP %{target}" create_ip_block_html: "%{name} created rule for IP %{target}"
create_unavailable_domain_html: "%{name} stopped delivery to domain %{target}" create_unavailable_domain_html: "%{name} stopped delivery to domain %{target}"
create_user_role_html: "%{name} created %{target} role" create_user_role_html: "%{name} created %{target} role"
demote_user_html: "%{name} demoted user %{target}" demote_user_html: "%{name} demoted user %{target}"
destroy_announcement_html: "%{name} deleted announcement %{target}" destroy_announcement_html: "%{name} deleted announcement %{target}"
destroy_canonical_email_block_html: "%{name} unblocked email with the hash %{target}"
destroy_custom_emoji_html: "%{name} deleted emoji %{target}" destroy_custom_emoji_html: "%{name} deleted emoji %{target}"
destroy_domain_allow_html: "%{name} disallowed federation with domain %{target}" destroy_domain_allow_html: "%{name} disallowed federation with domain %{target}"
destroy_domain_block_html: "%{name} unblocked domain %{target}" destroy_domain_block_html: "%{name} unblocked domain %{target}"
destroy_email_domain_block_html: "%{name} unblocked email domain %{target}"
destroy_instance_html: "%{name} purged domain %{target}" destroy_instance_html: "%{name} purged domain %{target}"
destroy_ip_block_html: "%{name} deleted rule for IP %{target}" destroy_ip_block_html: "%{name} deleted rule for IP %{target}"
destroy_status_html: "%{name} removed post by %{target}" destroy_status_html: "%{name} removed post by %{target}"
@ -249,8 +260,10 @@ en-GB:
destroy_user_role_html: "%{name} deleted %{target} role" destroy_user_role_html: "%{name} deleted %{target} role"
disable_2fa_user_html: "%{name} disabled two factor requirement for user %{target}" disable_2fa_user_html: "%{name} disabled two factor requirement for user %{target}"
disable_custom_emoji_html: "%{name} disabled emoji %{target}" disable_custom_emoji_html: "%{name} disabled emoji %{target}"
disable_sign_in_token_auth_user_html: "%{name} disabled email token authentication for %{target}"
disable_user_html: "%{name} disabled login for user %{target}" disable_user_html: "%{name} disabled login for user %{target}"
enable_custom_emoji_html: "%{name} enabled emoji %{target}" enable_custom_emoji_html: "%{name} enabled emoji %{target}"
enable_sign_in_token_auth_user_html: "%{name} enabled email token authentication for %{target}"
enable_user_html: "%{name} enabled login for user %{target}" enable_user_html: "%{name} enabled login for user %{target}"
memorialize_account_html: "%{name} turned %{target}'s account into a memoriam page" memorialize_account_html: "%{name} turned %{target}'s account into a memoriam page"
promote_user_html: "%{name} promoted user %{target}" promote_user_html: "%{name} promoted user %{target}"
@ -258,6 +271,7 @@ en-GB:
reject_user_html: "%{name} rejected sign-up from %{target}" reject_user_html: "%{name} rejected sign-up from %{target}"
remove_avatar_user_html: "%{name} removed %{target}'s avatar" remove_avatar_user_html: "%{name} removed %{target}'s avatar"
reopen_report_html: "%{name} reopened report %{target}" reopen_report_html: "%{name} reopened report %{target}"
resend_user_html: "%{name} resent confirmation email for %{target}"
reset_password_user_html: "%{name} reset password of user %{target}" reset_password_user_html: "%{name} reset password of user %{target}"
resolve_report_html: "%{name} resolved report %{target}" resolve_report_html: "%{name} resolved report %{target}"
sensitive_account_html: "%{name} marked %{target}'s media as sensitive" sensitive_account_html: "%{name} marked %{target}'s media as sensitive"
@ -418,6 +432,7 @@ en-GB:
attempts_over_week: attempts_over_week:
one: "%{count} attempt over the last week" one: "%{count} attempt over the last week"
other: "%{count} sign-up attempts over the last week" other: "%{count} sign-up attempts over the last week"
created_msg: Successfully blocked email domain
delete: Delete delete: Delete
dns: dns:
types: types:
@ -426,8 +441,12 @@ en-GB:
new: new:
create: Add domain create: Add domain
resolve: Resolve domain resolve: Resolve domain
title: Block new email domain
no_email_domain_block_selected: No email domain blocks were changed as none were selected
not_permitted: Not permitted not_permitted: Not permitted
resolved_dns_records_hint_html: The domain name resolves to the following MX domains, which are ultimately responsible for accepting email. Blocking an MX domain will block sign-ups from any email address which uses the same MX domain, even if the visible domain name is different. <strong>Be careful not to block major email providers.</strong>
resolved_through_html: Resolved through %{domain} resolved_through_html: Resolved through %{domain}
title: Blocked email domains
export_domain_allows: export_domain_allows:
new: new:
title: Import domain allows title: Import domain allows
@ -581,6 +600,7 @@ en-GB:
resolve_description_html: No action will be taken against the reported account, no strike recorded, and the report will be closed. resolve_description_html: No action will be taken against the reported account, no strike recorded, and the report will be closed.
silence_description_html: The account will be visible only to those who already follow it or manually look it up, severely limiting its reach. Can always be reverted. Closes all reports against this account. silence_description_html: The account will be visible only to those who already follow it or manually look it up, severely limiting its reach. Can always be reverted. Closes all reports against this account.
suspend_description_html: The account and all its contents will be inaccessible and eventually deleted, and interacting with it will be impossible. Reversible within 30 days. Closes all reports against this account. suspend_description_html: The account and all its contents will be inaccessible and eventually deleted, and interacting with it will be impossible. Reversible within 30 days. Closes all reports against this account.
actions_description_html: Decide which action to take to resolve this report. If you take a punitive action against the reported account, an email notification will be sent to them, except when the <strong>Spam</strong> category is selected.
actions_description_remote_html: Decide which action to take to resolve this report. This will only affect how <strong>your</strong> server communicates with this remote account and handle its content. actions_description_remote_html: Decide which action to take to resolve this report. This will only affect how <strong>your</strong> server communicates with this remote account and handle its content.
add_to_report: Add more to report add_to_report: Add more to report
already_suspended_badges: already_suspended_badges:
@ -645,6 +665,7 @@ en-GB:
delete_data_html: Delete <strong>@%{acct}</strong>'s profile and contents 30 days from now unless they get unsuspended in the meantime delete_data_html: Delete <strong>@%{acct}</strong>'s profile and contents 30 days from now unless they get unsuspended in the meantime
preview_preamble_html: "<strong>@%{acct}</strong> will receive a warning with the following contents:" preview_preamble_html: "<strong>@%{acct}</strong> will receive a warning with the following contents:"
record_strike_html: Record a strike against <strong>@%{acct}</strong> to help you escalate on future violations from this account record_strike_html: Record a strike against <strong>@%{acct}</strong> to help you escalate on future violations from this account
send_email_html: Send <strong>@%{acct}</strong> a warning email
warning_placeholder: Optional additional reasoning for the moderation action. warning_placeholder: Optional additional reasoning for the moderation action.
target_origin: Origin of reported account target_origin: Origin of reported account
title: Reports title: Reports
@ -684,6 +705,7 @@ en-GB:
manage_appeals: Manage Appeals manage_appeals: Manage Appeals
manage_appeals_description: Allows users to review appeals against moderation actions manage_appeals_description: Allows users to review appeals against moderation actions
manage_blocks: Manage Blocks manage_blocks: Manage Blocks
manage_blocks_description: Allows users to block email providers and IP addresses
manage_custom_emojis: Manage Custom Emojis manage_custom_emojis: Manage Custom Emojis
manage_custom_emojis_description: Allows users to manage custom emojis on the server manage_custom_emojis_description: Allows users to manage custom emojis on the server
manage_federation: Manage Federation manage_federation: Manage Federation

View File

@ -58,6 +58,7 @@ fr-CA:
demote: Rétrograder demote: Rétrograder
destroyed_msg: Les données de %{username} sont maintenant en file dattente pour être supprimées imminemment destroyed_msg: Les données de %{username} sont maintenant en file dattente pour être supprimées imminemment
disable: Geler disable: Geler
disable_sign_in_token_auth: Désactiver le jeton d'authentification par e-mail
disable_two_factor_authentication: Désactiver lauthentification à deux facteurs disable_two_factor_authentication: Désactiver lauthentification à deux facteurs
disabled: Gelé disabled: Gelé
display_name: Nom affiché display_name: Nom affiché
@ -66,6 +67,7 @@ fr-CA:
email: Courriel email: Courriel
email_status: État du courriel email_status: État du courriel
enable: Dégeler enable: Dégeler
enable_sign_in_token_auth: Activer le jeton d'authentification par e-mail
enabled: Activé enabled: Activé
enabled_msg: Le compte de %{username} a été dégelé avec succès enabled_msg: Le compte de %{username} a été dégelé avec succès
followers: Abonné·e·s followers: Abonné·e·s
@ -195,8 +197,10 @@ fr-CA:
destroy_user_role: Détruire le rôle destroy_user_role: Détruire le rôle
disable_2fa_user: Désactiver lA2F disable_2fa_user: Désactiver lA2F
disable_custom_emoji: Désactiver les émojis personnalisés disable_custom_emoji: Désactiver les émojis personnalisés
disable_sign_in_token_auth_user: Désactiver le jeton d'authentification par e-mail pour l'utilisateur
disable_user: Désactiver le compte disable_user: Désactiver le compte
enable_custom_emoji: Activer les émojis personnalisées enable_custom_emoji: Activer les émojis personnalisées
enable_sign_in_token_auth_user: Activer le jeton d'authentification par e-mail pour l'utilisateur
enable_user: Activer lutilisateur enable_user: Activer lutilisateur
memorialize_account: Ériger en mémorial memorialize_account: Ériger en mémorial
promote_user: Promouvoir lutilisateur promote_user: Promouvoir lutilisateur
@ -219,18 +223,22 @@ fr-CA:
update_custom_emoji: Mettre à jour les émojis personnalisés update_custom_emoji: Mettre à jour les émojis personnalisés
update_domain_block: Mettre à jour le blocage de domaine update_domain_block: Mettre à jour le blocage de domaine
update_ip_block: Mettre à jour la règle IP update_ip_block: Mettre à jour la règle IP
update_report: Mettre à jour le rapport
update_status: Mettre à jour le message update_status: Mettre à jour le message
update_user_role: Mettre à jour le rôle update_user_role: Mettre à jour le rôle
actions: actions:
approve_appeal_html: "%{name} a approuvé l'appel de la décision de modération émis par %{target}" approve_appeal_html: "%{name} a approuvé l'appel de la décision de modération émis par %{target}"
approve_user_html: "%{name} a approuvé linscription de %{target}" approve_user_html: "%{name} a approuvé linscription de %{target}"
assigned_to_self_report_html: "%{name} sest assigné·e le signalement de %{target}" assigned_to_self_report_html: "%{name} sest assigné·e le signalement de %{target}"
change_email_user_html: "%{name} a changé l'adresse e-mail de l'utilisateur \n%{target}"
change_role_user_html: "%{name} a changé le rôle de %{target}" change_role_user_html: "%{name} a changé le rôle de %{target}"
confirm_user_html: "%{name} a confirmé l'adresse e-mail de l'utilisateur %{target}"
create_account_warning_html: "%{name} a envoyé un avertissement à %{target}" create_account_warning_html: "%{name} a envoyé un avertissement à %{target}"
create_announcement_html: "%{name} a créé une nouvelle annonce %{target}" create_announcement_html: "%{name} a créé une nouvelle annonce %{target}"
create_custom_emoji_html: "%{name} a téléversé un nouvel émoji %{target}" create_custom_emoji_html: "%{name} a téléversé un nouvel émoji %{target}"
create_domain_allow_html: "%{name} a autorisé la fédération avec le domaine %{target}" create_domain_allow_html: "%{name} a autorisé la fédération avec le domaine %{target}"
create_domain_block_html: "%{name} a bloqué le domaine %{target}" create_domain_block_html: "%{name} a bloqué le domaine %{target}"
create_email_domain_block_html: "%{name} a bloqué le domaine d'e-mail %{target}"
create_ip_block_html: "%{name} a créé une règle pour l'IP %{target}" create_ip_block_html: "%{name} a créé une règle pour l'IP %{target}"
create_unavailable_domain_html: "%{name} a arrêté la livraison vers le domaine %{target}" create_unavailable_domain_html: "%{name} a arrêté la livraison vers le domaine %{target}"
create_user_role_html: "%{name} a créé le rôle %{target}" create_user_role_html: "%{name} a créé le rôle %{target}"
@ -239,6 +247,7 @@ fr-CA:
destroy_custom_emoji_html: "%{name} a supprimé l'émoji %{target}" destroy_custom_emoji_html: "%{name} a supprimé l'émoji %{target}"
destroy_domain_allow_html: "%{name} a rejeté la fédération avec le domaine %{target}" destroy_domain_allow_html: "%{name} a rejeté la fédération avec le domaine %{target}"
destroy_domain_block_html: "%{name} a débloqué le domaine %{target}" destroy_domain_block_html: "%{name} a débloqué le domaine %{target}"
destroy_email_domain_block_html: "%{name} a débloqué le domaine d'e-mail %{target}"
destroy_instance_html: "%{name} a purgé le domaine %{target}" destroy_instance_html: "%{name} a purgé le domaine %{target}"
destroy_ip_block_html: "%{name} a supprimé la règle pour l'IP %{target}" destroy_ip_block_html: "%{name} a supprimé la règle pour l'IP %{target}"
destroy_status_html: "%{name} a supprimé le message de %{target}" destroy_status_html: "%{name} a supprimé le message de %{target}"
@ -276,6 +285,7 @@ fr-CA:
filter_by_action: Filtrer par action filter_by_action: Filtrer par action
filter_by_user: Filtrer par utilisateur·ice filter_by_user: Filtrer par utilisateur·ice
title: Journal daudit title: Journal daudit
unavailable_instance: "(nom de domaine indisponible)"
announcements: announcements:
destroyed_msg: Annonce supprimée avec succès ! destroyed_msg: Annonce supprimée avec succès !
edit: edit:
@ -413,6 +423,7 @@ fr-CA:
attempts_over_week: attempts_over_week:
one: "%{count} tentative au cours de la dernière semaine" one: "%{count} tentative au cours de la dernière semaine"
other: "%{count} tentatives au cours de la dernière semaine" other: "%{count} tentatives au cours de la dernière semaine"
created_msg: Domaine d'e-mail bloqué avec succès
delete: Supprimer delete: Supprimer
dns: dns:
types: types:
@ -914,6 +925,10 @@ fr-CA:
statuses: statuses:
allow: Autoriser le message allow: Autoriser le message
allow_account: Autoriser l'auteur·rice allow_account: Autoriser l'auteur·rice
confirm_allow: Êtes-vous sûr de vouloir autoriser les statuts sélectionnés ?
confirm_allow_account: Êtes-vous sûr de vouloir autoriser les comptes sélectionnés ?
confirm_disallow: Êtes-vous sûr de vouloir rejeter les statuts sélectionnés ?
confirm_disallow_account: Êtes-vous sûr de vouloir rejeter les comptes sélectionnés ?
description_html: Voici les messages dont votre serveur a connaissance qui sont beaucoup partagés et mis en favoris en ce moment. Cela peut aider vos utilisateur⋅rice⋅s, néophytes comme aguerri⋅e⋅s, à trouver plus de comptes à suivre. Aucun message n'est publiquement affiché tant que vous n'en avez pas approuvé l'auteur⋅rice, et seulement si icellui permet que son compte soit suggéré aux autres. Vous pouvez également autoriser ou rejeter les messages individuellement. description_html: Voici les messages dont votre serveur a connaissance qui sont beaucoup partagés et mis en favoris en ce moment. Cela peut aider vos utilisateur⋅rice⋅s, néophytes comme aguerri⋅e⋅s, à trouver plus de comptes à suivre. Aucun message n'est publiquement affiché tant que vous n'en avez pas approuvé l'auteur⋅rice, et seulement si icellui permet que son compte soit suggéré aux autres. Vous pouvez également autoriser ou rejeter les messages individuellement.
disallow: Proscrire le message disallow: Proscrire le message
disallow_account: Proscrire l'auteur·rice disallow_account: Proscrire l'auteur·rice
@ -1896,6 +1911,7 @@ fr-CA:
invalid_otp_token: Le code dauthentification à deux facteurs est invalide invalid_otp_token: Le code dauthentification à deux facteurs est invalide
otp_lost_help_html: Si vous perdez accès aux deux, vous pouvez contacter %{email} otp_lost_help_html: Si vous perdez accès aux deux, vous pouvez contacter %{email}
rate_limited: Trop de tentatives d'authentification, réessayez plus tard. rate_limited: Trop de tentatives d'authentification, réessayez plus tard.
seamless_external_login: Vous êtes connectés sur un service externe, de fait les paramètres de mot de passe et d'e-mail ne sont pas disponibles.
signed_in_as: 'Connecté·e en tant que:' signed_in_as: 'Connecté·e en tant que:'
verification: verification:
extra_instructions_html: <strong>Astuce:</strong> Le lien sur votre site Web peut être invisible. La partie importante est <code>rel="me"</code> qui évite dautres liens provenant de contenu générés par des utilisateurs tiers d'être pris en compte. Vous pouvez même utiliser une balise <code>link</code> dans len-tête de la page au lieu de <code>a</code>, mais le HTML doit être accessible sans avoir besoin dexécuter du JavaScript. extra_instructions_html: <strong>Astuce:</strong> Le lien sur votre site Web peut être invisible. La partie importante est <code>rel="me"</code> qui évite dautres liens provenant de contenu générés par des utilisateurs tiers d'être pris en compte. Vous pouvez même utiliser une balise <code>link</code> dans len-tête de la page au lieu de <code>a</code>, mais le HTML doit être accessible sans avoir besoin dexécuter du JavaScript.

View File

@ -58,6 +58,7 @@ fr:
demote: Rétrograder demote: Rétrograder
destroyed_msg: Les données de %{username} sont maintenant en file dattente pour être supprimées imminemment destroyed_msg: Les données de %{username} sont maintenant en file dattente pour être supprimées imminemment
disable: Geler disable: Geler
disable_sign_in_token_auth: Désactiver le jeton d'authentification par e-mail
disable_two_factor_authentication: Désactiver lauthentification à deux facteurs disable_two_factor_authentication: Désactiver lauthentification à deux facteurs
disabled: Gelé disabled: Gelé
display_name: Nom affiché display_name: Nom affiché
@ -66,6 +67,7 @@ fr:
email: Adresse de courriel email: Adresse de courriel
email_status: État du courriel email_status: État du courriel
enable: Dégeler enable: Dégeler
enable_sign_in_token_auth: Activer le jeton d'authentification par e-mail
enabled: Activé enabled: Activé
enabled_msg: Le compte de %{username} a été dégelé avec succès enabled_msg: Le compte de %{username} a été dégelé avec succès
followers: Abonné·e·s followers: Abonné·e·s
@ -195,8 +197,10 @@ fr:
destroy_user_role: Détruire le rôle destroy_user_role: Détruire le rôle
disable_2fa_user: Désactiver lA2F disable_2fa_user: Désactiver lA2F
disable_custom_emoji: Désactiver les émojis personnalisés disable_custom_emoji: Désactiver les émojis personnalisés
disable_sign_in_token_auth_user: Désactiver le jeton d'authentification par e-mail pour l'utilisateur
disable_user: Désactiver le compte disable_user: Désactiver le compte
enable_custom_emoji: Activer les émojis personnalisées enable_custom_emoji: Activer les émojis personnalisées
enable_sign_in_token_auth_user: Activer le jeton d'authentification par e-mail pour l'utilisateur
enable_user: Activer le compte enable_user: Activer le compte
memorialize_account: Ériger en mémorial memorialize_account: Ériger en mémorial
promote_user: Promouvoir le compte promote_user: Promouvoir le compte
@ -219,18 +223,22 @@ fr:
update_custom_emoji: Mettre à jour les émojis personnalisés update_custom_emoji: Mettre à jour les émojis personnalisés
update_domain_block: Mettre à jour le blocage de domaine update_domain_block: Mettre à jour le blocage de domaine
update_ip_block: Mettre à jour la règle IP update_ip_block: Mettre à jour la règle IP
update_report: Mettre à jour le rapport
update_status: Mettre à jour le message update_status: Mettre à jour le message
update_user_role: Mettre à jour le rôle update_user_role: Mettre à jour le rôle
actions: actions:
approve_appeal_html: "%{name} a approuvé l'appel de la décision de modération émis par %{target}" approve_appeal_html: "%{name} a approuvé l'appel de la décision de modération émis par %{target}"
approve_user_html: "%{name} a approuvé linscription de %{target}" approve_user_html: "%{name} a approuvé linscription de %{target}"
assigned_to_self_report_html: "%{name} sest assigné·e le signalement de %{target}" assigned_to_self_report_html: "%{name} sest assigné·e le signalement de %{target}"
change_email_user_html: "%{name} a changé l'adresse e-mail de l'utilisateur \n%{target}"
change_role_user_html: "%{name} a changé le rôle de %{target}" change_role_user_html: "%{name} a changé le rôle de %{target}"
confirm_user_html: "%{name} a confirmé l'adresse e-mail de l'utilisateur %{target}"
create_account_warning_html: "%{name} a envoyé un avertissement à %{target}" create_account_warning_html: "%{name} a envoyé un avertissement à %{target}"
create_announcement_html: "%{name} a créé une nouvelle annonce %{target}" create_announcement_html: "%{name} a créé une nouvelle annonce %{target}"
create_custom_emoji_html: "%{name} a téléversé un nouvel émoji %{target}" create_custom_emoji_html: "%{name} a téléversé un nouvel émoji %{target}"
create_domain_allow_html: "%{name} a autorisé la fédération avec le domaine %{target}" create_domain_allow_html: "%{name} a autorisé la fédération avec le domaine %{target}"
create_domain_block_html: "%{name} a bloqué le domaine %{target}" create_domain_block_html: "%{name} a bloqué le domaine %{target}"
create_email_domain_block_html: "%{name} a bloqué le domaine d'e-mail %{target}"
create_ip_block_html: "%{name} a créé une règle pour l'IP %{target}" create_ip_block_html: "%{name} a créé une règle pour l'IP %{target}"
create_unavailable_domain_html: "%{name} a arrêté la livraison vers le domaine %{target}" create_unavailable_domain_html: "%{name} a arrêté la livraison vers le domaine %{target}"
create_user_role_html: "%{name} a créé le rôle %{target}" create_user_role_html: "%{name} a créé le rôle %{target}"
@ -239,6 +247,7 @@ fr:
destroy_custom_emoji_html: "%{name} a supprimé l'émoji %{target}" destroy_custom_emoji_html: "%{name} a supprimé l'émoji %{target}"
destroy_domain_allow_html: "%{name} a rejeté la fédération avec le domaine %{target}" destroy_domain_allow_html: "%{name} a rejeté la fédération avec le domaine %{target}"
destroy_domain_block_html: "%{name} a débloqué le domaine %{target}" destroy_domain_block_html: "%{name} a débloqué le domaine %{target}"
destroy_email_domain_block_html: "%{name} a débloqué le domaine d'e-mail %{target}"
destroy_instance_html: "%{name} a purgé le domaine %{target}" destroy_instance_html: "%{name} a purgé le domaine %{target}"
destroy_ip_block_html: "%{name} a supprimé la règle pour l'IP %{target}" destroy_ip_block_html: "%{name} a supprimé la règle pour l'IP %{target}"
destroy_status_html: "%{name} a supprimé le message de %{target}" destroy_status_html: "%{name} a supprimé le message de %{target}"
@ -276,6 +285,7 @@ fr:
filter_by_action: Filtrer par action filter_by_action: Filtrer par action
filter_by_user: Filtrer par utilisateur·ice filter_by_user: Filtrer par utilisateur·ice
title: Journal daudit title: Journal daudit
unavailable_instance: "(nom de domaine indisponible)"
announcements: announcements:
destroyed_msg: Annonce supprimée avec succès ! destroyed_msg: Annonce supprimée avec succès !
edit: edit:
@ -413,6 +423,7 @@ fr:
attempts_over_week: attempts_over_week:
one: "%{count} tentative au cours de la dernière semaine" one: "%{count} tentative au cours de la dernière semaine"
other: "%{count} tentatives au cours de la dernière semaine" other: "%{count} tentatives au cours de la dernière semaine"
created_msg: Domaine d'e-mail bloqué avec succès
delete: Supprimer delete: Supprimer
dns: dns:
types: types:
@ -914,6 +925,10 @@ fr:
statuses: statuses:
allow: Autoriser le message allow: Autoriser le message
allow_account: Autoriser l'auteur·rice allow_account: Autoriser l'auteur·rice
confirm_allow: Êtes-vous sûr de vouloir autoriser les statuts sélectionnés ?
confirm_allow_account: Êtes-vous sûr de vouloir autoriser les comptes sélectionnés ?
confirm_disallow: Êtes-vous sûr de vouloir rejeter les statuts sélectionnés ?
confirm_disallow_account: Êtes-vous sûr de vouloir rejeter les comptes sélectionnés ?
description_html: Voici les messages dont votre serveur a connaissance qui sont beaucoup partagés et mis en favoris en ce moment. Cela peut aider vos utilisateur⋅rice⋅s, néophytes comme aguerri⋅e⋅s, à trouver plus de comptes à suivre. Aucun message n'est publiquement affiché tant que vous n'en avez pas approuvé l'auteur⋅rice, et seulement si icellui permet que son compte soit suggéré aux autres. Vous pouvez également autoriser ou rejeter les messages individuellement. description_html: Voici les messages dont votre serveur a connaissance qui sont beaucoup partagés et mis en favoris en ce moment. Cela peut aider vos utilisateur⋅rice⋅s, néophytes comme aguerri⋅e⋅s, à trouver plus de comptes à suivre. Aucun message n'est publiquement affiché tant que vous n'en avez pas approuvé l'auteur⋅rice, et seulement si icellui permet que son compte soit suggéré aux autres. Vous pouvez également autoriser ou rejeter les messages individuellement.
disallow: Proscrire le message disallow: Proscrire le message
disallow_account: Proscrire l'auteur·rice disallow_account: Proscrire l'auteur·rice
@ -1896,6 +1911,7 @@ fr:
invalid_otp_token: Le code dauthentification à deux facteurs est invalide invalid_otp_token: Le code dauthentification à deux facteurs est invalide
otp_lost_help_html: Si vous perdez accès aux deux, vous pouvez contacter %{email} otp_lost_help_html: Si vous perdez accès aux deux, vous pouvez contacter %{email}
rate_limited: Trop de tentatives d'authentification, réessayez plus tard. rate_limited: Trop de tentatives d'authentification, réessayez plus tard.
seamless_external_login: Vous êtes connectés sur un service externe, de fait les paramètres de mot de passe et d'e-mail ne sont pas disponibles.
signed_in_as: 'Connecté·e en tant que:' signed_in_as: 'Connecté·e en tant que:'
verification: verification:
extra_instructions_html: <strong>Astuce :</strong> Le lien sur votre site Web peut être invisible. La partie importante est <code>rel="me"</code> qui évite que soient pris en compte dautres liens provenant de contenu générés par des utilisateurs tiers. Vous pouvez même utiliser une balise <code>link</code> dans len-tête de la page au lieu de <code>a</code>, mais le HTML doit être accessible sans avoir besoin dexécuter du JavaScript. extra_instructions_html: <strong>Astuce :</strong> Le lien sur votre site Web peut être invisible. La partie importante est <code>rel="me"</code> qui évite que soient pris en compte dautres liens provenant de contenu générés par des utilisateurs tiers. Vous pouvez même utiliser une balise <code>link</code> dans len-tête de la page au lieu de <code>a</code>, mais le HTML doit être accessible sans avoir besoin dexécuter du JavaScript.

View File

@ -1506,6 +1506,7 @@ he:
media_attachments: media_attachments:
validations: validations:
images_and_video: לא ניתן להוסיף וידאו להודעה שכבר מכילה תמונות images_and_video: לא ניתן להוסיף וידאו להודעה שכבר מכילה תמונות
not_found: קובץ %{ids} לא נמצא, או שהוצמד כבר להודעה אחרת
not_ready: לא ניתן להצמיד קבצים שהעלאתם לא הסתיימה. נסה/י שוב בעוד רגע! not_ready: לא ניתן להצמיד קבצים שהעלאתם לא הסתיימה. נסה/י שוב בעוד רגע!
too_many: לא ניתן להוסיף יותר מארבעה קבצים too_many: לא ניתן להוסיף יותר מארבעה קבצים
migrations: migrations:

View File

@ -1454,6 +1454,7 @@ hu:
media_attachments: media_attachments:
validations: validations:
images_and_video: Nem csatolhatsz videót olyan bejegyzéshez, amelyhez már csatoltál képet images_and_video: Nem csatolhatsz videót olyan bejegyzéshez, amelyhez már csatoltál képet
not_found: A(z) %{ids} média nem található, vagy már egy másik bejegyzéshez lett csatolva
not_ready: Nem lehet olyan fájlt csatolni, melynek még nem fejeződött be a feldolgozása. Próbáld kicsit később! not_ready: Nem lehet olyan fájlt csatolni, melynek még nem fejeződött be a feldolgozása. Próbáld kicsit később!
too_many: Maximum négy fájlt csatolhatsz too_many: Maximum négy fájlt csatolhatsz
migrations: migrations:

View File

@ -1458,6 +1458,7 @@ is:
media_attachments: media_attachments:
validations: validations:
images_and_video: Ekki er hægt að hengja myndskeið við færslu sem þegar inniheldur myndir images_and_video: Ekki er hægt að hengja myndskeið við færslu sem þegar inniheldur myndir
not_found: Myndefnið %{ids} fannst ekki eða er þegar hengt við aðra færslu
not_ready: Ekki er hægt að hengja við skrár sem ekki er búið að vinna til fulls. Prófaðu aftur eftir augnablik! not_ready: Ekki er hægt að hengja við skrár sem ekki er búið að vinna til fulls. Prófaðu aftur eftir augnablik!
too_many: Ekki er hægt að hengja við fleiri en 4 skrár too_many: Ekki er hægt að hengja við fleiri en 4 skrár
migrations: migrations:

View File

@ -830,7 +830,7 @@ ko:
sensitive: "%{name} 님이 %{target}의 계정을 민감함으로 표시했습니다" sensitive: "%{name} 님이 %{target}의 계정을 민감함으로 표시했습니다"
silence: "%{name} 님이 %{target}의 계정을 제한시켰습니다" silence: "%{name} 님이 %{target}의 계정을 제한시켰습니다"
suspend: "%{name} 님이 %{target}의 계정을 정지시켰습니다" suspend: "%{name} 님이 %{target}의 계정을 정지시켰습니다"
appeal_approved: 이의제기됨 appeal_approved: 이의 받아들여짐
appeal_pending: 이의제기 대기중 appeal_pending: 이의제기 대기중
appeal_rejected: 이의 제기 거절됨 appeal_rejected: 이의 제기 거절됨
system_checks: system_checks:

View File

@ -1454,6 +1454,7 @@ nn:
media_attachments: media_attachments:
validations: validations:
images_and_video: Kan ikkje leggja ved video til status som allereie inneheld bilete images_and_video: Kan ikkje leggja ved video til status som allereie inneheld bilete
not_found: Media %{ids} vart ikkje funne eller er allereie kopla til eit anna innlegg
not_ready: Kan ikke legge til filer som ikke er ferdigbehandlet. Prøv igjen om et øyeblikk! not_ready: Kan ikke legge til filer som ikke er ferdigbehandlet. Prøv igjen om et øyeblikk!
too_many: Kan ikkje leggja til meir enn 4 filer too_many: Kan ikkje leggja til meir enn 4 filer
migrations: migrations:

View File

@ -4,7 +4,7 @@ pt-BR:
about_mastodon_html: 'A rede social do futuro: Sem anúncios, sem vigilância corporativa, com design ético e muita descentralização! Possua seus próprios dados com o Mastodon!' about_mastodon_html: 'A rede social do futuro: Sem anúncios, sem vigilância corporativa, com design ético e muita descentralização! Possua seus próprios dados com o Mastodon!'
contact_missing: Não definido contact_missing: Não definido
contact_unavailable: Não disponível contact_unavailable: Não disponível
hosted_on: Servidor Mastodon em %{domain} hosted_on: Mastodon hospedado em %{domain}
title: Sobre title: Sobre
accounts: accounts:
follow: Seguir follow: Seguir
@ -31,6 +31,7 @@ pt-BR:
created_msg: Nota de moderação criada! created_msg: Nota de moderação criada!
destroyed_msg: Nota de moderação excluída! destroyed_msg: Nota de moderação excluída!
accounts: accounts:
add_email_domain_block: Bloquear domínio de email
approve: Aprovar approve: Aprovar
approved_msg: O registro de %{username} foi aprovado approved_msg: O registro de %{username} foi aprovado
are_you_sure: Você tem certeza? are_you_sure: Você tem certeza?
@ -44,10 +45,10 @@ pt-BR:
submit: Alterar e-mail submit: Alterar e-mail
title: Alterar e-mail para %{username} title: Alterar e-mail para %{username}
change_role: change_role:
changed_msg: Cargo alterado! changed_msg: Função alterada com sucesso!
label: Alterar cargo label: Alterar função
no_role: Sem cargo no_role: Nenhuma função
title: Alterar cargo para %{username} title: Alterar função para %{username}
confirm: Confirmar confirm: Confirmar
confirmed: Confirmado confirmed: Confirmado
confirming: Confirmando confirming: Confirmando
@ -57,6 +58,7 @@ pt-BR:
demote: Rebaixar demote: Rebaixar
destroyed_msg: Os dados de %{username} estão na fila para serem excluídos em breve destroyed_msg: Os dados de %{username} estão na fila para serem excluídos em breve
disable: Congelar disable: Congelar
disable_sign_in_token_auth: Desativar autenticação via token por email
disable_two_factor_authentication: Desativar autenticação de dois fatores disable_two_factor_authentication: Desativar autenticação de dois fatores
disabled: Congelada disabled: Congelada
display_name: Nome de exibição display_name: Nome de exibição
@ -65,6 +67,7 @@ pt-BR:
email: E-mail email: E-mail
email_status: Estado do e-mail email_status: Estado do e-mail
enable: Descongelar enable: Descongelar
enable_sign_in_token_auth: Ativar autenticação via token por email
enabled: Ativada enabled: Ativada
enabled_msg: A conta de %{username} foi descongelada enabled_msg: A conta de %{username} foi descongelada
followers: Seguidores followers: Seguidores
@ -129,6 +132,7 @@ pt-BR:
resubscribe: Reinscrever-se resubscribe: Reinscrever-se
role: Cargo role: Cargo
search: Buscar search: Buscar
search_same_email_domain: Outros usuários com o mesmo domínio de e-mail
search_same_ip: Outros usuários com o mesmo IP search_same_ip: Outros usuários com o mesmo IP
security: Segurança security: Segurança
security_measures: security_measures:
@ -169,21 +173,26 @@ pt-BR:
approve_appeal: Aprovar revisão approve_appeal: Aprovar revisão
approve_user: Aprovar usuário approve_user: Aprovar usuário
assigned_to_self_report: Atribuir denúncia assigned_to_self_report: Atribuir denúncia
change_email_user: Alterar o Email para o usuário
change_role_user: Alterar cargo do usuário change_role_user: Alterar cargo do usuário
confirm_user: Confirmar usuário confirm_user: Confirmar usuário
create_account_warning: Criar aviso create_account_warning: Criar aviso
create_announcement: Criar anúncio create_announcement: Criar anúncio
create_canonical_email_block: Criar bloqueio de Email
create_custom_emoji: Criar emoji personalizado create_custom_emoji: Criar emoji personalizado
create_domain_allow: Permitir domínio create_domain_allow: Permitir domínio
create_domain_block: Bloquear domínio create_domain_block: Bloquear domínio
create_email_domain_block: Criar Bloqueio de Domínio de Email
create_ip_block: Criar regra de IP create_ip_block: Criar regra de IP
create_unavailable_domain: Criar domínio indisponível create_unavailable_domain: Criar domínio indisponível
create_user_role: Criar cargo create_user_role: Criar cargo
demote_user: Rebaixar usuário demote_user: Rebaixar usuário
destroy_announcement: Excluir anúncio destroy_announcement: Excluir anúncio
destroy_canonical_email_block: Deletar bloqueio de Email
destroy_custom_emoji: Excluir emoji personalizado destroy_custom_emoji: Excluir emoji personalizado
destroy_domain_allow: Excluir domínio permitido destroy_domain_allow: Excluir domínio permitido
destroy_domain_block: Desbloquear domínio destroy_domain_block: Desbloquear domínio
destroy_email_domain_block: Deletar bloqueio de domínio Email
destroy_instance: Limpar domínio destroy_instance: Limpar domínio
destroy_ip_block: Excluir regra de IP destroy_ip_block: Excluir regra de IP
destroy_status: Excluir publicação destroy_status: Excluir publicação
@ -191,8 +200,10 @@ pt-BR:
destroy_user_role: Destruir cargo destroy_user_role: Destruir cargo
disable_2fa_user: Desativar autenticação de dois fatores disable_2fa_user: Desativar autenticação de dois fatores
disable_custom_emoji: Desativar emoji personalizado disable_custom_emoji: Desativar emoji personalizado
disable_sign_in_token_auth_user: Desativar autenticação via Token de Email para Usuário
disable_user: Desativar usuário disable_user: Desativar usuário
enable_custom_emoji: Ativar emoji personalizado enable_custom_emoji: Ativar emoji personalizado
enable_sign_in_token_auth_user: Desativar autenticação via token por e-mail para o usuário
enable_user: Ativar usuário enable_user: Ativar usuário
memorialize_account: Converter conta em memorial memorialize_account: Converter conta em memorial
promote_user: Promover usuário promote_user: Promover usuário
@ -215,6 +226,7 @@ pt-BR:
update_custom_emoji: Editar Emoji Personalizado update_custom_emoji: Editar Emoji Personalizado
update_domain_block: Atualizar bloqueio de domínio update_domain_block: Atualizar bloqueio de domínio
update_ip_block: Atualizar regra de IP update_ip_block: Atualizar regra de IP
update_report: Atualizar Relatório
update_status: Editar Status update_status: Editar Status
update_user_role: Atualizar cargo update_user_role: Atualizar cargo
actions: actions:
@ -223,19 +235,24 @@ pt-BR:
assigned_to_self_report_html: "%{name} atribuiu a denúncia %{target} para si" assigned_to_self_report_html: "%{name} atribuiu a denúncia %{target} para si"
change_email_user_html: "%{name} alterou o endereço de e-mail do usuário %{target}" change_email_user_html: "%{name} alterou o endereço de e-mail do usuário %{target}"
change_role_user_html: "%{name} alterou o cargo de %{target}" change_role_user_html: "%{name} alterou o cargo de %{target}"
confirm_user_html: "%{name} confirmou o endereço de e-mail do usuário %{target}"
create_account_warning_html: "%{name} enviou um aviso para %{target}" create_account_warning_html: "%{name} enviou um aviso para %{target}"
create_announcement_html: "%{name} criou o novo anúncio %{target}" create_announcement_html: "%{name} criou o novo anúncio %{target}"
create_canonical_email_block_html: "%{name} bloqueou o endereço de e-mail com o hash %{target}"
create_custom_emoji_html: "%{name} enviou o novo emoji %{target}" create_custom_emoji_html: "%{name} enviou o novo emoji %{target}"
create_domain_allow_html: "%{name} permitiu federação com domínio %{target}" create_domain_allow_html: "%{name} permitiu federação com domínio %{target}"
create_domain_block_html: "%{name} bloqueou o domínio %{target}" create_domain_block_html: "%{name} bloqueou o domínio %{target}"
create_email_domain_block_html: "%{name} bloqueou o domínio de e-mail %{target}"
create_ip_block_html: "%{name} criou a regra para o IP %{target}" create_ip_block_html: "%{name} criou a regra para o IP %{target}"
create_unavailable_domain_html: "%{name} parou a entrega ao domínio %{target}" create_unavailable_domain_html: "%{name} parou a entrega ao domínio %{target}"
create_user_role_html: "%{name} criou o cargo %{target}" create_user_role_html: "%{name} criou o cargo %{target}"
demote_user_html: "%{name} rebaixou o usuário %{target}" demote_user_html: "%{name} rebaixou o usuário %{target}"
destroy_announcement_html: "%{name} excluiu o anúncio %{target}" destroy_announcement_html: "%{name} excluiu o anúncio %{target}"
destroy_canonical_email_block_html: "%{name} desbloqueou o endereço e-mail com o hash %{target}"
destroy_custom_emoji_html: "%{name} apagou o emoji %{target}" destroy_custom_emoji_html: "%{name} apagou o emoji %{target}"
destroy_domain_allow_html: "%{name} bloqueou federação com domínio %{target}" destroy_domain_allow_html: "%{name} bloqueou federação com domínio %{target}"
destroy_domain_block_html: "%{name} desbloqueou o domínio %{target}" destroy_domain_block_html: "%{name} desbloqueou o domínio %{target}"
destroy_email_domain_block_html: "%{name} desbloqueou o domínio de e-mail %{target}"
destroy_instance_html: "%{name} limpou o domínio %{target}" destroy_instance_html: "%{name} limpou o domínio %{target}"
destroy_ip_block_html: "%{name} excluiu a regra para o IP %{target}" destroy_ip_block_html: "%{name} excluiu a regra para o IP %{target}"
destroy_status_html: "%{name} removeu a publicação de %{target}" destroy_status_html: "%{name} removeu a publicação de %{target}"
@ -243,8 +260,10 @@ pt-BR:
destroy_user_role_html: "%{name} excluiu o cargo %{target}" destroy_user_role_html: "%{name} excluiu o cargo %{target}"
disable_2fa_user_html: "%{name} desativou a exigência da autenticação de dois fatores para o usuário %{target}" disable_2fa_user_html: "%{name} desativou a exigência da autenticação de dois fatores para o usuário %{target}"
disable_custom_emoji_html: "%{name} desativou o emoji %{target}" disable_custom_emoji_html: "%{name} desativou o emoji %{target}"
disable_sign_in_token_auth_user_html: "%{name} desativou a autenticação via token por e-mail para %{target}"
disable_user_html: "%{name} desativou o login para %{target}" disable_user_html: "%{name} desativou o login para %{target}"
enable_custom_emoji_html: "%{name} ativou o emoji %{target}" enable_custom_emoji_html: "%{name} ativou o emoji %{target}"
enable_sign_in_token_auth_user_html: "%{name} ativou a autenticação via token por e-mail para %{target}"
enable_user_html: "%{name} ativou o login para %{target}" enable_user_html: "%{name} ativou o login para %{target}"
memorialize_account_html: "%{name} transformou a conta de %{target} em um memorial" memorialize_account_html: "%{name} transformou a conta de %{target} em um memorial"
promote_user_html: "%{name} promoveu o usuário %{target}" promote_user_html: "%{name} promoveu o usuário %{target}"
@ -252,6 +271,7 @@ pt-BR:
reject_user_html: "%{name} rejeitou a inscrição de %{target}" reject_user_html: "%{name} rejeitou a inscrição de %{target}"
remove_avatar_user_html: "%{name} removeu a imagem de perfil de %{target}" remove_avatar_user_html: "%{name} removeu a imagem de perfil de %{target}"
reopen_report_html: "%{name} reabriu a denúncia %{target}" reopen_report_html: "%{name} reabriu a denúncia %{target}"
resend_user_html: "%{name} reenviou um e-mail de confirmação para %{target}"
reset_password_user_html: "%{name} redefiniu a senha de %{target}" reset_password_user_html: "%{name} redefiniu a senha de %{target}"
resolve_report_html: "%{name} resolveu a denúncia %{target}" resolve_report_html: "%{name} resolveu a denúncia %{target}"
sensitive_account_html: "%{name} marcou a mídia de %{target} como sensível" sensitive_account_html: "%{name} marcou a mídia de %{target} como sensível"
@ -412,6 +432,7 @@ pt-BR:
attempts_over_week: attempts_over_week:
one: "%{count} tentativa na última semana" one: "%{count} tentativa na última semana"
other: "%{count} tentativas de inscrição na última semana" other: "%{count} tentativas de inscrição na última semana"
created_msg: Domínio de e-mail bloqueado com sucesso
delete: Excluir delete: Excluir
dns: dns:
types: types:
@ -420,8 +441,11 @@ pt-BR:
new: new:
create: Adicionar domínio create: Adicionar domínio
resolve: Resolver domínio resolve: Resolver domínio
title: Bloquear novo domínio de e-mail
not_permitted: Não permitido not_permitted: Não permitido
resolved_dns_records_hint_html: O nome de domínio é associado aos seguintes domínios MX, que são responsáveis por aceitar e-mails. Ao bloquear um domínio MX, você bloqueará as inscrições de qualquer endereço de e-mail que use o mesmo domínio MX, mesmo que o nome de domínio visível seja diferente. <strong>Tenha cuidado para não bloquear os principais provedores de e-mail.</strong>
resolved_through_html: Resolvido através de %{domain} resolved_through_html: Resolvido através de %{domain}
title: Domínios de e-mail bloqueados
export_domain_allows: export_domain_allows:
new: new:
title: Importar domínios permitidos title: Importar domínios permitidos
@ -446,6 +470,9 @@ pt-BR:
title: Recomendações de contas title: Recomendações de contas
unsuppress: Restaurar recomendação de contas unsuppress: Restaurar recomendação de contas
instances: instances:
audit_log:
title: Logs de auditoria recentes
view_all: Ver todos os logs de auditoria
availability: availability:
description_html: description_html:
one: Se a entrega ao domínio falhar em <strong>%{count} dia</strong> sem sucesso, nenhuma tentativa de entrega será feita a menos que uma entrega <em>do</em> domínio seja recebida. one: Se a entrega ao domínio falhar em <strong>%{count} dia</strong> sem sucesso, nenhuma tentativa de entrega será feita a menos que uma entrega <em>do</em> domínio seja recebida.
@ -572,6 +599,7 @@ pt-BR:
resolve_description_html: Nenhuma ação será tomada contra a conta denunciada, nenhuma violação será guardada e a denúncia será encerrada. resolve_description_html: Nenhuma ação será tomada contra a conta denunciada, nenhuma violação será guardada e a denúncia será encerrada.
silence_description_html: A conta ficará visível apenas para aqueles que já a seguem ou que a procuram manualmente, limitando severamente seu alcance. Pode ser revertido a qualquer momento. Fecha todas as denúncias desta conta. silence_description_html: A conta ficará visível apenas para aqueles que já a seguem ou que a procuram manualmente, limitando severamente seu alcance. Pode ser revertido a qualquer momento. Fecha todas as denúncias desta conta.
suspend_description_html: A conta e todo o seu conteúdo ficará inacessível e, eventualmente, excluído e interagir com ela será impossível. Reversível dentro de 30 dias. Encerra todas as denúncias contra esta conta. suspend_description_html: A conta e todo o seu conteúdo ficará inacessível e, eventualmente, excluído e interagir com ela será impossível. Reversível dentro de 30 dias. Encerra todas as denúncias contra esta conta.
actions_description_html: Decida qual ação tomar para responder a essa denúncia. Se você tomar uma ação punitiva contra a conta denunciada, uma notificação por e-mail será enviada ao usuário, exceto quando a categoria <strong>Spam</strong> for selecionada.
actions_description_remote_html: Decida quais medidas tomará para resolver esta denúncia. Isso só afetará como <strong>seu servidor</strong> se comunica com esta conta remota e manipula seu conteúdo. actions_description_remote_html: Decida quais medidas tomará para resolver esta denúncia. Isso só afetará como <strong>seu servidor</strong> se comunica com esta conta remota e manipula seu conteúdo.
add_to_report: Adicionar mais à denúncia add_to_report: Adicionar mais à denúncia
already_suspended_badges: already_suspended_badges:
@ -613,6 +641,7 @@ pt-BR:
report: 'Denúncia #%{id}' report: 'Denúncia #%{id}'
reported_account: Conta denunciada reported_account: Conta denunciada
reported_by: Denunciada por reported_by: Denunciada por
reported_with_application: Denunciado pelo aplicativo
resolved: Resolvido resolved: Resolvido
resolved_msg: Denúncia resolvida! resolved_msg: Denúncia resolvida!
skip_to_actions: Pular para ações skip_to_actions: Pular para ações
@ -635,6 +664,7 @@ pt-BR:
delete_data_html: Exclua o perfil e o conteúdo de <strong>@%{acct}</strong> daqui a 30 dias, a menos que a suspensão seja desfeita nesse meio tempo delete_data_html: Exclua o perfil e o conteúdo de <strong>@%{acct}</strong> daqui a 30 dias, a menos que a suspensão seja desfeita nesse meio tempo
preview_preamble_html: "<strong>@%{acct}</strong> receberá um aviso com o seguinte conteúdo:" preview_preamble_html: "<strong>@%{acct}</strong> receberá um aviso com o seguinte conteúdo:"
record_strike_html: Registre uma ação contra <strong>@%{acct}</strong> para te ajudar em futuras violações desta conta record_strike_html: Registre uma ação contra <strong>@%{acct}</strong> para te ajudar em futuras violações desta conta
send_email_html: Enviar <strong>@%{acct}</strong> um e-mail de alerta
warning_placeholder: Argumentos adicionais para a ação de moderação. warning_placeholder: Argumentos adicionais para a ação de moderação.
target_origin: Origem da conta denunciada target_origin: Origem da conta denunciada
title: Denúncias title: Denúncias
@ -674,6 +704,7 @@ pt-BR:
manage_appeals: Gerenciar revisões manage_appeals: Gerenciar revisões
manage_appeals_description: Permite aos usuários visualizar as revisões das decisões da moderação manage_appeals_description: Permite aos usuários visualizar as revisões das decisões da moderação
manage_blocks: Gerenciar Bloqueios manage_blocks: Gerenciar Bloqueios
manage_blocks_description: Permite aos usuários bloquear provedores de e-mail e endereços IP
manage_custom_emojis: Gerenciar Emojis Personalizados manage_custom_emojis: Gerenciar Emojis Personalizados
manage_custom_emojis_description: Permite aos usuários gerenciar emojis personalizados no servidor manage_custom_emojis_description: Permite aos usuários gerenciar emojis personalizados no servidor
manage_federation: Gerenciar Federação manage_federation: Gerenciar Federação
@ -691,6 +722,7 @@ pt-BR:
manage_taxonomies: Gerenciar taxonomias manage_taxonomies: Gerenciar taxonomias
manage_taxonomies_description: Permite aos usuários rever o conteúdo em alta e atualizar as configurações de hashtag manage_taxonomies_description: Permite aos usuários rever o conteúdo em alta e atualizar as configurações de hashtag
manage_user_access: Gerenciar Acesso de Usuário manage_user_access: Gerenciar Acesso de Usuário
manage_user_access_description: Permite aos usuários desativar a autenticação de dois fatores de outros usuários, alterar seu endereço de e-mail e redefinir sua senha
manage_users: Gerenciar usuários manage_users: Gerenciar usuários
manage_users_description: Permite aos usuários ver os detalhes de outros usuários e executar ações de moderação contra eles manage_users_description: Permite aos usuários ver os detalhes de outros usuários e executar ações de moderação contra eles
manage_webhooks: Gerenciar Webhooks manage_webhooks: Gerenciar Webhooks
@ -765,6 +797,7 @@ pt-BR:
destroyed_msg: Upload do site excluído com sucesso! destroyed_msg: Upload do site excluído com sucesso!
software_updates: software_updates:
critical_update: Crítico — por favor, atualize rapidamente critical_update: Crítico — por favor, atualize rapidamente
description: É recomendável que você mantenha a instalação do Mastodon atualizada para se beneficiar das correções e das novas funcionalidades. Além disso, às vezes é imprescindível atualizar o Mastodon rapidamente para evitar problemas de segurança. Por esses motivos, o Mastodon verifica se há atualizações a cada 30 minutos e notificará você de acordo com as suas preferências de notificação por e-mail.
documentation_link: Saiba mais documentation_link: Saiba mais
release_notes: Notas de lançamento release_notes: Notas de lançamento
title: Atualizações disponíveis title: Atualizações disponíveis
@ -851,16 +884,39 @@ pt-BR:
action: Confira aqui para mais informações action: Confira aqui para mais informações
message_html: "<strong>Seu armazenamento de objetos está mal configurado. A privacidade de seus usuários está em risco.</strong>" message_html: "<strong>Seu armazenamento de objetos está mal configurado. A privacidade de seus usuários está em risco.</strong>"
tags: tags:
moderation:
not_trendable: Fora de moda
not_usable: Não utilizável
pending_review: Revisão pendente
review_requested: Revisão solicitada
reviewed: Revisado
title: Status
trendable: Tendências
unreviewed: Não revisado
usable: Utilizável
name: Nome
newest: Mais recente
oldest: Mais antigos
open: Visualizar Publicamente
reset: Reinicializar
review: Status da revisão review: Status da revisão
search: Buscar
title: Hashtags
updated_msg: Configurações de hashtag atualizadas updated_msg: Configurações de hashtag atualizadas
title: Administração title: Administração
trends: trends:
allow: Permitir allow: Permitir
approved: Aprovado approved: Aprovado
confirm_allow: Você tem certeza que deseja permitir as tags selecionadas?
confirm_disallow: Você tem certeza de que deseja vetar as tags selecionadas?
disallow: Impedir disallow: Impedir
links: links:
allow: Permitir link allow: Permitir link
allow_provider: Permitir editor allow_provider: Permitir editor
confirm_allow: Tem certeza que deseja permitir os links selecionados?
confirm_allow_provider: Tem certeza que deseja permitir os provedores selecionados?
confirm_disallow: Tem certeza que deseja vetar os links selecionados?
confirm_disallow_provider: Tem certeza que deseja vetar os provedores selecionados?
description_html: Estes são links que estão sendo compartilhados por contas que seu servidor vê. Você pode ajudar seus usuários a descobrir o que está acontecendo no mundo. Nenhum link é exibido publicamente até que você aprove o editor. Você também pode permitir ou rejeitar links individuais. description_html: Estes são links que estão sendo compartilhados por contas que seu servidor vê. Você pode ajudar seus usuários a descobrir o que está acontecendo no mundo. Nenhum link é exibido publicamente até que você aprove o editor. Você também pode permitir ou rejeitar links individuais.
disallow: Proibir link disallow: Proibir link
disallow_provider: Proibir autor disallow_provider: Proibir autor
@ -884,6 +940,10 @@ pt-BR:
statuses: statuses:
allow: Permitir publicação allow: Permitir publicação
allow_account: Permitir autor allow_account: Permitir autor
confirm_allow: Tem certeza que deseja permitir os status selecionados?
confirm_allow_account: Tem certeza que deseja permitir as contas selecionadas?
confirm_disallow: Tem certeza que deseja vetar os status selecionados?
confirm_disallow_account: Tem certeza que deseja vetar as contas selecionadas?
description_html: Estes são as publicações que seu servidor sabe que estão sendo muito compartilhadas e favorecidas no momento. Isso pode ajudar seus usuários, novos e atuais, a encontrar mais pessoas para seguir. Nenhuma publicação é exibida publicamente até que você aprove o autor e o autor permitir que sua conta seja sugerida a outros. Você também pode permitir ou rejeitar publicações individuais. description_html: Estes são as publicações que seu servidor sabe que estão sendo muito compartilhadas e favorecidas no momento. Isso pode ajudar seus usuários, novos e atuais, a encontrar mais pessoas para seguir. Nenhuma publicação é exibida publicamente até que você aprove o autor e o autor permitir que sua conta seja sugerida a outros. Você também pode permitir ou rejeitar publicações individuais.
disallow: Proibir publicação disallow: Proibir publicação
disallow_account: Proibir autor disallow_account: Proibir autor
@ -916,6 +976,7 @@ pt-BR:
used_by_over_week: used_by_over_week:
one: Usado por uma pessoa na última semana one: Usado por uma pessoa na última semana
other: Usado por %{count} pessoas na última semana other: Usado por %{count} pessoas na última semana
title: Recomendações e tendências
trending: Em alta trending: Em alta
warning_presets: warning_presets:
add_new: Adicionar novo add_new: Adicionar novo
@ -1000,7 +1061,9 @@ pt-BR:
guide_link_text: Todos podem contribuir. guide_link_text: Todos podem contribuir.
sensitive_content: Conteúdo sensível sensitive_content: Conteúdo sensível
application_mailer: application_mailer:
notification_preferences: Alterar preferências de e-mail
salutation: "%{name}," salutation: "%{name},"
settings: 'Alterar preferências de e-mail: %{link}'
unsubscribe: Desinscrever unsubscribe: Desinscrever
view: 'Ver:' view: 'Ver:'
view_profile: Ver perfil view_profile: Ver perfil
@ -1020,6 +1083,7 @@ pt-BR:
hint_html: Só mais uma coisa! Precisamos confirmar que você é um humano (isso é para que possamos evitar o spam!). Resolva o CAPTCHA abaixo e clique em "Continuar". hint_html: Só mais uma coisa! Precisamos confirmar que você é um humano (isso é para que possamos evitar o spam!). Resolva o CAPTCHA abaixo e clique em "Continuar".
title: Verificação de segurança title: Verificação de segurança
confirmations: confirmations:
awaiting_review: Seu endereço de e-mail está confirmado! A equipe %{domain} está agora revisando a sua inscrição. Você receberá um e-mail se a sua conta for aprovada!
awaiting_review_title: Seu cadastro está sendo analisado awaiting_review_title: Seu cadastro está sendo analisado
clicking_this_link: clicar este link clicking_this_link: clicar este link
login_link: entrar login_link: entrar
@ -1027,6 +1091,7 @@ pt-BR:
redirect_to_app_html: Você deveria ter sido redirecionado para o aplicativo <strong>%{app_name}</strong>. Se isso não aconteceu, tente %{clicking_this_link} ou volte manualmente para o aplicativo. redirect_to_app_html: Você deveria ter sido redirecionado para o aplicativo <strong>%{app_name}</strong>. Se isso não aconteceu, tente %{clicking_this_link} ou volte manualmente para o aplicativo.
registration_complete: Seu cadastro no %{domain} foi concluído! registration_complete: Seu cadastro no %{domain} foi concluído!
welcome_title: Boas vindas, %{name}! welcome_title: Boas vindas, %{name}!
wrong_email_hint: Se esse endereço de e-mail não estiver correto, você pode alterá-lo nas configurações da conta.
delete_account: Excluir conta delete_account: Excluir conta
delete_account_html: Se você deseja excluir sua conta, você pode <a href="%{path}">fazer isso aqui</a>. Uma confirmação será solicitada. delete_account_html: Se você deseja excluir sua conta, você pode <a href="%{path}">fazer isso aqui</a>. Uma confirmação será solicitada.
description: description:
@ -1047,6 +1112,7 @@ pt-BR:
or_log_in_with: Ou entre com or_log_in_with: Ou entre com
privacy_policy_agreement_html: Eu li e concordo com a <a href="%{privacy_policy_path}" target="_blank">política de privacidade</a> privacy_policy_agreement_html: Eu li e concordo com a <a href="%{privacy_policy_path}" target="_blank">política de privacidade</a>
progress: progress:
confirm: Confirmar e-mail
details: Suas informações details: Suas informações
review: Nossa avaliação review: Nossa avaliação
rules: Aceitar regras rules: Aceitar regras
@ -1068,8 +1134,10 @@ pt-BR:
security: Segurança security: Segurança
set_new_password: Definir uma nova senha set_new_password: Definir uma nova senha
setup: setup:
email_below_hint_html: Verifique a sua pasta de spam, ou solicite outra. Você pode corrigir o seu endereço de e-mail se estiver errado.
email_settings_hint_html: Clique no link que te enviamos para verificar %{email}. Esperaremos aqui. email_settings_hint_html: Clique no link que te enviamos para verificar %{email}. Esperaremos aqui.
link_not_received: Não recebeu um link? link_not_received: Não recebeu um link?
new_confirmation_instructions_sent: Você receberá um novo e-mail com o link de confirmação em alguns minutos!
title: Verifique sua caixa de entrada title: Verifique sua caixa de entrada
sign_in: sign_in:
preamble_html: Entre com suas credenciais de domínios ( <strong>%{domain}</strong> ) . Se sua conta estiver hospedada em um servidor diferente, você não deve conseguir acessar este conteúdo. preamble_html: Entre com suas credenciais de domínios ( <strong>%{domain}</strong> ) . Se sua conta estiver hospedada em um servidor diferente, você não deve conseguir acessar este conteúdo.
@ -1080,7 +1148,9 @@ pt-BR:
title: Então vamos lá criar uma conta em %{domain}. title: Então vamos lá criar uma conta em %{domain}.
status: status:
account_status: Status da conta account_status: Status da conta
confirming: Confirmação por e-mail pendente.
functional: Sua conta está totalmente operacional. functional: Sua conta está totalmente operacional.
pending: Sua inscrição está aguardando revisão pela nossa equipe. Isto pode levar algum tempo. Você receberá um e-mail se sua inscrição for aprovada.
redirecting_to: Sua conta está inativa porque atualmente está redirecionando para %{acct}. redirecting_to: Sua conta está inativa porque atualmente está redirecionando para %{acct}.
self_destruct: Como %{domain} está se encerrando, você só terá acesso limitado à sua conta. self_destruct: Como %{domain} está se encerrando, você só terá acesso limitado à sua conta.
view_strikes: Veja os avisos anteriores em relação à sua conta view_strikes: Veja os avisos anteriores em relação à sua conta
@ -1123,6 +1193,9 @@ pt-BR:
before: 'Antes de prosseguir, leia com cuidado:' before: 'Antes de prosseguir, leia com cuidado:'
caches: Conteúdo que foi armazenado em cache por outros servidores pode continuar a existir caches: Conteúdo que foi armazenado em cache por outros servidores pode continuar a existir
data_removal: Suas publicações e outros dados serão removidos permanentemente data_removal: Suas publicações e outros dados serão removidos permanentemente
email_change_html: Você pode <a href="%{path}">alterar seu endereço de e-mail</a> sem excluir sua conta
email_contact_html: Se ainda não chegar, você pode enviar um e-mail para <a href="mailto:%{email}">%{email}</a> para obter ajuda
email_reconfirmation_html: Se você não recebeu o e-mail de confirmação, você pode <a href="%{path}">solicitá-lo novamente</a>
irreversible: Você não conseguirá restaurar ou reativar a sua conta irreversible: Você não conseguirá restaurar ou reativar a sua conta
more_details_html: Para mais detalhes, consulte a <a href="%{terms_path}">Política de Privacidade</a>. more_details_html: Para mais detalhes, consulte a <a href="%{terms_path}">Política de Privacidade</a>.
username_available: Seu nome de usuário ficará disponível novamente username_available: Seu nome de usuário ficará disponível novamente
@ -1355,6 +1428,7 @@ pt-BR:
authentication_methods: authentication_methods:
otp: autenticação de dois fatores otp: autenticação de dois fatores
password: senha password: senha
sign_in_token: código de segurança do e-mail
webauthn: chaves de segurança webauthn: chaves de segurança
description_html: Se você vir atividades suspeitas ou não reconhecidas, considere alterar sua senha e ativar a autenticação de dois fatores. description_html: Se você vir atividades suspeitas ou não reconhecidas, considere alterar sua senha e ativar a autenticação de dois fatores.
empty: Sem histórico de autenticação disponível empty: Sem histórico de autenticação disponível
@ -1365,10 +1439,14 @@ pt-BR:
unsubscribe: unsubscribe:
action: Sim, cancelar subscrição action: Sim, cancelar subscrição
complete: Desinscrito complete: Desinscrito
confirmation_html: Tem certeza que deseja cancelar a assinatura de %{type} para Mastodon no %{domain} para o seu endereço de e-mail %{email}? Você sempre pode se inscrever novamente nas <a href="%{settings_path}">configurações de notificação de email</a>.
resubscribe_html: Se você cancelou sua inscrição por engano, você pode se inscrever novamente em suas <a href="%{settings_path}"> configurações de notificações por e-mail</a>.
success_html: Você não mais receberá %{type} no Mastodon em %{domain} ao seu endereço de e-mail %{email}.
title: Cancelar inscrição title: Cancelar inscrição
media_attachments: media_attachments:
validations: validations:
images_and_video: Não foi possível anexar um vídeo a uma publicação que já contém imagens images_and_video: Não foi possível anexar um vídeo a uma publicação que já contém imagens
not_found: Mídia %{ids} não encontrada ou já anexada a outra publicação
not_ready: Não é possível anexar arquivos que não terminaram de ser processados. Tente novamente daqui a pouco! not_ready: Não é possível anexar arquivos que não terminaram de ser processados. Tente novamente daqui a pouco!
too_many: Não foi possível anexar mais de 4 imagens too_many: Não foi possível anexar mais de 4 imagens
migrations: migrations:
@ -1445,6 +1523,8 @@ pt-BR:
update: update:
subject: "%{name} editou uma publicação" subject: "%{name} editou uma publicação"
notifications: notifications:
administration_emails: Notificações de e-mail do administrador
email_events: Eventos para notificações por e-mail
email_events_hint: 'Selecione os eventos que deseja receber notificações:' email_events_hint: 'Selecione os eventos que deseja receber notificações:'
number: number:
human: human:
@ -1603,6 +1683,7 @@ pt-BR:
import: Importar import: Importar
import_and_export: Importar e exportar import_and_export: Importar e exportar
migrate: Migração de conta migrate: Migração de conta
notifications: Notificações por e-mail
preferences: Preferências preferences: Preferências
profile: Perfil profile: Perfil
relationships: Seguindo e seguidores relationships: Seguindo e seguidores
@ -1849,6 +1930,7 @@ pt-BR:
invalid_otp_token: Código de dois fatores inválido invalid_otp_token: Código de dois fatores inválido
otp_lost_help_html: Se você perder o acesso à ambos, você pode entrar em contato com %{email} otp_lost_help_html: Se você perder o acesso à ambos, você pode entrar em contato com %{email}
rate_limited: Muitas tentativas de autenticação; tente novamente mais tarde. rate_limited: Muitas tentativas de autenticação; tente novamente mais tarde.
seamless_external_login: Você está logado através de um serviço externo, portanto as configurações de senha e e-mail não estão disponíveis.
signed_in_as: 'Entrou como:' signed_in_as: 'Entrou como:'
verification: verification:
extra_instructions_html: <strong>Dica:</strong> O link do seu site não precisa ser visível. O importante é a parte <code>rel="me"</code>, que impede a personificação em sites com conteúdo gerado pelo usuário. Você pode até usar uma tag <code>link</code> no cabeçalho da página ao invés de uma tag <code>a</code>, mas é importante que o HTML esteja acessível sem executar JavaScript. extra_instructions_html: <strong>Dica:</strong> O link do seu site não precisa ser visível. O importante é a parte <code>rel="me"</code>, que impede a personificação em sites com conteúdo gerado pelo usuário. Você pode até usar uma tag <code>link</code> no cabeçalho da página ao invés de uma tag <code>a</code>, mas é importante que o HTML esteja acessível sem executar JavaScript.

View File

@ -211,6 +211,7 @@ pt-BR:
setting_default_privacy: Privacidade dos toots setting_default_privacy: Privacidade dos toots
setting_default_sensitive: Sempre marcar mídia como sensível setting_default_sensitive: Sempre marcar mídia como sensível
setting_delete_modal: Solicitar confirmação antes de excluir toot setting_delete_modal: Solicitar confirmação antes de excluir toot
setting_disable_hover_cards: Desativar visualização de perfil ao passar o mouse por cima
setting_disable_swiping: Desabilitar movimentos deslizantes setting_disable_swiping: Desabilitar movimentos deslizantes
setting_display_media: Exibição das mídias setting_display_media: Exibição das mídias
setting_display_media_default: Padrão setting_display_media_default: Padrão
@ -242,11 +243,13 @@ pt-BR:
warn: Ocultar com um aviso warn: Ocultar com um aviso
form_admin_settings: form_admin_settings:
activity_api_enabled: Publicar estatísticas agregadas sobre atividade de usuários na API activity_api_enabled: Publicar estatísticas agregadas sobre atividade de usuários na API
app_icon: Ícone do aplicativo
backups_retention_period: Período de retenção do arquivo de usuário backups_retention_period: Período de retenção do arquivo de usuário
bootstrap_timeline_accounts: Sempre recomendar essas contas para novos usuários bootstrap_timeline_accounts: Sempre recomendar essas contas para novos usuários
closed_registrations_message: Mensagem personalizada quando inscrições não estão disponíveis closed_registrations_message: Mensagem personalizada quando inscrições não estão disponíveis
content_cache_retention_period: Período de retenção de conteúdo remoto content_cache_retention_period: Período de retenção de conteúdo remoto
custom_css: CSS personalizável custom_css: CSS personalizável
favicon: Favicon
mascot: Mascote personalizado (legado) mascot: Mascote personalizado (legado)
media_cache_retention_period: Período de retenção do cachê de mídia media_cache_retention_period: Período de retenção do cachê de mídia
peers_api_enabled: Publicar lista de instâncias de servidor descobertas na API peers_api_enabled: Publicar lista de instâncias de servidor descobertas na API
@ -311,6 +314,7 @@ pt-BR:
listable: Permitir que esta hashtag apareça em pesquisas e sugestões listable: Permitir que esta hashtag apareça em pesquisas e sugestões
name: Hashtag name: Hashtag
trendable: Permitir que esta hashtag fique em alta trendable: Permitir que esta hashtag fique em alta
usable: Permitir que as publicações usem esta hashtag localmente
user: user:
role: Cargo role: Cargo
time_zone: Fuso horário time_zone: Fuso horário

View File

@ -1454,6 +1454,7 @@ tr:
media_attachments: media_attachments:
validations: validations:
images_and_video: Zaten resim içeren bir duruma video eklenemez images_and_video: Zaten resim içeren bir duruma video eklenemez
not_found: "%{ids} medya dosyaları bulunamadı veya başka bir gönderiye zaten eklenmiş"
not_ready: İşlemi tamamlanmamış dosyalar eklenemez. Birazdan tekrar deneyin! not_ready: İşlemi tamamlanmamış dosyalar eklenemez. Birazdan tekrar deneyin!
too_many: 4'ten fazla dosya eklenemiyor too_many: 4'ten fazla dosya eklenemiyor
migrations: migrations:

View File

@ -1,34 +1,33 @@
# frozen_string_literal: true # frozen_string_literal: true
class Mastodon::RedisConfiguration class Mastodon::RedisConfiguration
DEFAULTS = {
host: 'localhost',
port: 6379,
db: 0,
}.freeze
def base def base
@base ||= { @base ||= setup_config(prefix: nil, defaults: DEFAULTS)
url: setup_base_redis_url, .merge(namespace: base_namespace)
driver: driver,
namespace: base_namespace,
}
end end
def sidekiq def sidekiq
@sidekiq ||= { @sidekiq ||= setup_config(prefix: 'SIDEKIQ_')
url: setup_prefixed_redis_url(:sidekiq), .merge(namespace: sidekiq_namespace)
driver: driver,
namespace: sidekiq_namespace,
}
end end
def cache def cache
@cache ||= { @cache ||= setup_config(prefix: 'CACHE_')
url: setup_prefixed_redis_url(:cache), .merge({
driver: driver, namespace: cache_namespace,
namespace: cache_namespace, expires_in: 10.minutes,
expires_in: 10.minutes, connect_timeout: 5,
connect_timeout: 5, pool: {
pool: { size: Sidekiq.server? ? Sidekiq[:concurrency] : Integer(ENV['MAX_THREADS'] || 5),
size: Sidekiq.server? ? Sidekiq[:concurrency] : Integer(ENV['MAX_THREADS'] || 5), timeout: 5,
timeout: 5, },
}, })
}
end end
private private
@ -55,42 +54,53 @@ class Mastodon::RedisConfiguration
namespace ? "#{namespace}_cache" : 'cache' namespace ? "#{namespace}_cache" : 'cache'
end end
def setup_base_redis_url def setup_config(prefix: nil, defaults: {})
url = ENV.fetch('REDIS_URL', nil) prefix = "#{prefix}REDIS_"
return url if url.present?
user = ENV.fetch('REDIS_USER', '') url = ENV.fetch("#{prefix}URL", nil)
password = ENV.fetch('REDIS_PASSWORD', '') user = ENV.fetch("#{prefix}USER", nil)
host = ENV.fetch('REDIS_HOST', 'localhost') password = ENV.fetch("#{prefix}PASSWORD", nil)
port = ENV.fetch('REDIS_PORT', 6379) host = ENV.fetch("#{prefix}HOST", defaults[:host])
db = ENV.fetch('REDIS_DB', 0) port = ENV.fetch("#{prefix}PORT", defaults[:port])
db = ENV.fetch("#{prefix}DB", defaults[:db])
name = ENV.fetch("#{prefix}SENTINEL_MASTER", nil)
sentinels = parse_sentinels(ENV.fetch("#{prefix}SENTINELS", nil))
construct_uri(host, port, db, user, password) return { url:, driver: } if url
end
def setup_prefixed_redis_url(prefix) if name.present? && sentinels.present?
prefix = "#{prefix.to_s.upcase}_" host = name
url = ENV.fetch("#{prefix}REDIS_URL", nil) port = nil
db ||= 0
return url if url.present?
user = ENV.fetch("#{prefix}REDIS_USER", nil)
password = ENV.fetch("#{prefix}REDIS_PASSWORD", nil)
host = ENV.fetch("#{prefix}REDIS_HOST", nil)
port = ENV.fetch("#{prefix}REDIS_PORT", nil)
db = ENV.fetch("#{prefix}REDIS_DB", nil)
if host.nil?
base[:url]
else else
construct_uri(host, port, db, user, password) sentinels = nil
end
url = construct_uri(host, port, db, user, password)
if url.present?
{ url:, driver:, name:, sentinels: }
else
# Fall back to base config. This has defaults for the URL
# so this cannot lead to an endless loop.
base
end end
end end
def construct_uri(host, port, db, user, password) def construct_uri(host, port, db, user, password)
return nil if host.blank?
Addressable::URI.parse("redis://#{host}:#{port}/#{db}").tap do |uri| Addressable::URI.parse("redis://#{host}:#{port}/#{db}").tap do |uri|
uri.user = user if user.present? uri.user = user if user.present?
uri.password = password if password.present? uri.password = password if password.present?
end.normalize.to_str end.normalize.to_str
end end
def parse_sentinels(sentinels_string)
(sentinels_string || '').split(',').map do |sentinel|
host, port = sentinel.split(':')
port = port.present? ? port.to_i : 26_379
{ host: host, port: port }
end.presence
end
end end

View File

@ -178,9 +178,9 @@
"eslint-define-config": "^2.0.0", "eslint-define-config": "^2.0.0",
"eslint-import-resolver-typescript": "^3.5.5", "eslint-import-resolver-typescript": "^3.5.5",
"eslint-plugin-formatjs": "^4.10.1", "eslint-plugin-formatjs": "^4.10.1",
"eslint-plugin-import": "~2.29.0", "eslint-plugin-import": "~2.30.0",
"eslint-plugin-jsdoc": "^50.0.0", "eslint-plugin-jsdoc": "^50.0.0",
"eslint-plugin-jsx-a11y": "~6.9.0", "eslint-plugin-jsx-a11y": "~6.10.0",
"eslint-plugin-promise": "~7.1.0", "eslint-plugin-promise": "~7.1.0",
"eslint-plugin-react": "^7.33.2", "eslint-plugin-react": "^7.33.2",
"eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-hooks": "^4.6.0",

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe AccountsIndex do RSpec.describe AccountsIndex do
describe 'Searching the index' do describe 'Searching the index' do
before do before do
mock_elasticsearch_response(described_class, raw_response) mock_elasticsearch_response(described_class, raw_response)

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe PublicStatusesIndex do RSpec.describe PublicStatusesIndex do
describe 'Searching the index' do describe 'Searching the index' do
before do before do
mock_elasticsearch_response(described_class, raw_response) mock_elasticsearch_response(described_class, raw_response)

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe StatusesIndex do RSpec.describe StatusesIndex do
describe 'Searching the index' do describe 'Searching the index' do
before do before do
mock_elasticsearch_response(described_class, raw_response) mock_elasticsearch_response(described_class, raw_response)

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe TagsIndex do RSpec.describe TagsIndex do
describe 'Searching the index' do describe 'Searching the index' do
before do before do
mock_elasticsearch_response(described_class, raw_response) mock_elasticsearch_response(described_class, raw_response)

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Rack::Attack, type: :request do RSpec.describe Rack::Attack, type: :request do
def app def app
Rails.application Rails.application
end end

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe ActivityPub::ClaimsController do RSpec.describe ActivityPub::ClaimsController do
let(:account) { Fabricate(:account) } let(:account) { Fabricate(:account) }
describe 'POST #create' do describe 'POST #create' do

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Admin::AccountActionsController do RSpec.describe Admin::AccountActionsController do
render_views render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Admin::ActionLogsController do RSpec.describe Admin::ActionLogsController do
render_views render_views
# Action logs typically cause issues when their targets are not in the database # Action logs typically cause issues when their targets are not in the database

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Admin::BaseController do RSpec.describe Admin::BaseController do
controller do controller do
def success def success
authorize :dashboard, :index? authorize :dashboard, :index?

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Admin::CustomEmojisController do RSpec.describe Admin::CustomEmojisController do
render_views render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Admin::DashboardController do RSpec.describe Admin::DashboardController do
render_views render_views
describe 'GET #index' do describe 'GET #index' do

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Admin::FollowRecommendationsController do RSpec.describe Admin::FollowRecommendationsController do
render_views render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Admin::InvitesController do RSpec.describe Admin::InvitesController do
render_views render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Admin::IpBlocksController do RSpec.describe Admin::IpBlocksController do
render_views render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Admin::RelationshipsController do RSpec.describe Admin::RelationshipsController do
render_views render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Admin::RelaysController do RSpec.describe Admin::RelaysController do
render_views render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Admin::ReportNotesController do RSpec.describe Admin::ReportNotesController do
render_views render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Admin::Reports::ActionsController do RSpec.describe Admin::Reports::ActionsController do
render_views render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Admin::ReportsController do RSpec.describe Admin::ReportsController do
render_views render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Admin::RolesController do RSpec.describe Admin::RolesController do
render_views render_views
let(:permissions) { UserRole::Flags::NONE } let(:permissions) { UserRole::Flags::NONE }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Admin::RulesController do RSpec.describe Admin::RulesController do
render_views render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Admin::SiteUploadsController do RSpec.describe Admin::SiteUploadsController do
render_views render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Admin::StatusesController do RSpec.describe Admin::StatusesController do
render_views render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Admin::Trends::Links::PreviewCardProvidersController do RSpec.describe Admin::Trends::Links::PreviewCardProvidersController do
render_views render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Admin::Trends::LinksController do RSpec.describe Admin::Trends::LinksController do
render_views render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Admin::Trends::StatusesController do RSpec.describe Admin::Trends::StatusesController do
render_views render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Admin::Trends::TagsController do RSpec.describe Admin::Trends::TagsController do
render_views render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Admin::Users::RolesController do RSpec.describe Admin::Users::RolesController do
render_views render_views
let(:current_role) { UserRole.create(name: 'Foo', permissions: UserRole::FLAGS[:manage_roles], position: 10) } let(:current_role) { UserRole.create(name: 'Foo', permissions: UserRole::FLAGS[:manage_roles], position: 10) }

View File

@ -3,7 +3,7 @@
require 'rails_helper' require 'rails_helper'
require 'webauthn/fake_client' require 'webauthn/fake_client'
describe Admin::Users::TwoFactorAuthenticationsController do RSpec.describe Admin::Users::TwoFactorAuthenticationsController do
render_views render_views
let(:user) { Fabricate(:user) } let(:user) { Fabricate(:user) }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Admin::WarningPresetsController do RSpec.describe Admin::WarningPresetsController do
render_views render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Admin::Webhooks::SecretsController do RSpec.describe Admin::Webhooks::SecretsController do
render_views render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Admin::WebhooksController do RSpec.describe Admin::WebhooksController do
render_views render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Api::BaseController do RSpec.describe Api::BaseController do
controller do controller do
def success def success
head 200 head 200

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Api::Web::PushSubscriptionsController do RSpec.describe Api::Web::PushSubscriptionsController do
render_views render_views
let(:user) { Fabricate(:user) } let(:user) { Fabricate(:user) }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe ApplicationController do RSpec.describe ApplicationController do
controller do controller do
def success def success
head 200 head 200

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Auth::ChallengesController do RSpec.describe Auth::ChallengesController do
render_views render_views
let(:password) { 'foobar12345' } let(:password) { 'foobar12345' }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Auth::ConfirmationsController do RSpec.describe Auth::ConfirmationsController do
render_views render_views
describe 'GET #new' do describe 'GET #new' do

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Auth::PasswordsController do RSpec.describe Auth::PasswordsController do
include Devise::Test::ControllerHelpers include Devise::Test::ControllerHelpers
describe 'GET #new' do describe 'GET #new' do

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Auth::SetupController do RSpec.describe Auth::SetupController do
render_views render_views
describe 'GET #show' do describe 'GET #show' do

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe AuthorizeInteractionsController do RSpec.describe AuthorizeInteractionsController do
render_views render_views
describe 'GET #show' do describe 'GET #show' do

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe AccountControllerConcern do RSpec.describe AccountControllerConcern do
controller(ApplicationController) do controller(ApplicationController) do
include AccountControllerConcern include AccountControllerConcern

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Api::ErrorHandling do RSpec.describe Api::ErrorHandling do
before do before do
stub_const('FakeService', Class.new) stub_const('FakeService', Class.new)
end end

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Api::RateLimitHeaders do RSpec.describe Api::RateLimitHeaders do
controller(ApplicationController) do controller(ApplicationController) do
include Api::RateLimitHeaders include Api::RateLimitHeaders

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Localized do RSpec.describe Localized do
controller(ApplicationController) do controller(ApplicationController) do
include Localized include Localized

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Settings::ExportControllerConcern do RSpec.describe Settings::ExportControllerConcern do
controller(ApplicationController) do controller(ApplicationController) do
include Settings::ExportControllerConcern include Settings::ExportControllerConcern

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe UserTrackingConcern do RSpec.describe UserTrackingConcern do
controller(ApplicationController) do controller(ApplicationController) do
include UserTrackingConcern include UserTrackingConcern

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Filters::StatusesController do RSpec.describe Filters::StatusesController do
render_views render_views
describe 'GET #index' do describe 'GET #index' do

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe FiltersController do RSpec.describe FiltersController do
render_views render_views
describe 'GET #index' do describe 'GET #index' do

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe FollowerAccountsController do RSpec.describe FollowerAccountsController do
render_views render_views
let(:alice) { Fabricate(:account, username: 'alice') } let(:alice) { Fabricate(:account, username: 'alice') }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe FollowingAccountsController do RSpec.describe FollowingAccountsController do
render_views render_views
let(:alice) { Fabricate(:account, username: 'alice') } let(:alice) { Fabricate(:account, username: 'alice') }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe InvitesController do RSpec.describe InvitesController do
render_views render_views
let(:user) { Fabricate(:user) } let(:user) { Fabricate(:user) }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Oauth::AuthorizedApplicationsController do RSpec.describe Oauth::AuthorizedApplicationsController do
render_views render_views
describe 'GET #index' do describe 'GET #index' do

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe RelationshipsController do RSpec.describe RelationshipsController do
render_views render_views
let(:user) { Fabricate(:user) } let(:user) { Fabricate(:user) }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Settings::AliasesController do RSpec.describe Settings::AliasesController do
render_views render_views
let!(:user) { Fabricate(:user) } let!(:user) { Fabricate(:user) }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Settings::ApplicationsController do RSpec.describe Settings::ApplicationsController do
render_views render_views
let!(:user) { Fabricate(:user) } let!(:user) { Fabricate(:user) }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Settings::DeletesController do RSpec.describe Settings::DeletesController do
render_views render_views
describe 'GET #show' do describe 'GET #show' do

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Settings::ExportsController do RSpec.describe Settings::ExportsController do
render_views render_views
describe 'GET #show' do describe 'GET #show' do

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Settings::FeaturedTagsController do RSpec.describe Settings::FeaturedTagsController do
render_views render_views
shared_examples 'authenticate user' do shared_examples 'authenticate user' do

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Settings::LoginActivitiesController do RSpec.describe Settings::LoginActivitiesController do
render_views render_views
let!(:user) { Fabricate(:user) } let!(:user) { Fabricate(:user) }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Settings::Migration::RedirectsController do RSpec.describe Settings::Migration::RedirectsController do
render_views render_views
let!(:user) { Fabricate(:user, password: 'testtest') } let!(:user) { Fabricate(:user, password: 'testtest') }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Settings::MigrationsController do RSpec.describe Settings::MigrationsController do
render_views render_views
shared_examples 'authenticate user' do shared_examples 'authenticate user' do

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Settings::PicturesController do RSpec.describe Settings::PicturesController do
render_views render_views
let!(:user) { Fabricate(:user) } let!(:user) { Fabricate(:user) }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Settings::Preferences::AppearanceController do RSpec.describe Settings::Preferences::AppearanceController do
render_views render_views
let!(:user) { Fabricate(:user) } let!(:user) { Fabricate(:user) }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Settings::Preferences::BaseController do RSpec.describe Settings::Preferences::BaseController do
describe 'after_update_redirect_path' do describe 'after_update_redirect_path' do
it 'raises error when called' do it 'raises error when called' do
expect { described_class.new.send(:after_update_redirect_path) }.to raise_error(/Override/) expect { described_class.new.send(:after_update_redirect_path) }.to raise_error(/Override/)

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Settings::Preferences::NotificationsController do RSpec.describe Settings::Preferences::NotificationsController do
render_views render_views
let(:user) { Fabricate(:user) } let(:user) { Fabricate(:user) }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Settings::Preferences::OtherController do RSpec.describe Settings::Preferences::OtherController do
render_views render_views
let(:user) { Fabricate(:user, chosen_languages: []) } let(:user) { Fabricate(:user, chosen_languages: []) }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Settings::SessionsController do RSpec.describe Settings::SessionsController do
render_views render_views
let(:user) { Fabricate(:user) } let(:user) { Fabricate(:user) }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Settings::TwoFactorAuthentication::ConfirmationsController do RSpec.describe Settings::TwoFactorAuthentication::ConfirmationsController do
render_views render_views
shared_examples 'renders :new' do shared_examples 'renders :new' do

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Settings::TwoFactorAuthentication::OtpAuthenticationController do RSpec.describe Settings::TwoFactorAuthentication::OtpAuthenticationController do
render_views render_views
let(:user) { Fabricate(:user) } let(:user) { Fabricate(:user) }

View File

@ -2,7 +2,7 @@
require 'rails_helper' require 'rails_helper'
describe Settings::TwoFactorAuthentication::RecoveryCodesController do RSpec.describe Settings::TwoFactorAuthentication::RecoveryCodesController do
render_views render_views
describe 'POST #create' do describe 'POST #create' do

View File

@ -3,7 +3,7 @@
require 'rails_helper' require 'rails_helper'
require 'webauthn/fake_client' require 'webauthn/fake_client'
describe Settings::TwoFactorAuthentication::WebauthnCredentialsController do RSpec.describe Settings::TwoFactorAuthentication::WebauthnCredentialsController do
render_views render_views
let(:user) { Fabricate(:user) } let(:user) { Fabricate(:user) }

Some files were not shown because too many files have changed in this diff Show More