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

Merge upstream changes up to c8b9e60ec1
pull/2807/head
Claire 2024-08-07 08:48:46 +02:00 committed by GitHub
commit 241d76075c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
88 changed files with 1361 additions and 711 deletions

View File

@ -211,7 +211,7 @@ FROM build AS ffmpeg
# ffmpeg version to compile, change with [--build-arg FFMPEG_VERSION="7.0.x"]
# renovate: datasource=repology depName=ffmpeg packageName=openpkg_current/ffmpeg
ARG FFMPEG_VERSION=7.0.1
ARG FFMPEG_VERSION=7.0.2
# ffmpeg download URL, change with [--build-arg FFMPEG_URL="https://ffmpeg.org/releases"]
ARG FFMPEG_URL=https://ffmpeg.org/releases

View File

@ -16,7 +16,7 @@ gem 'pghero'
gem 'aws-sdk-s3', '~> 1.123', require: false
gem 'blurhash', '~> 0.1'
gem 'fog-core', '<= 2.4.0'
gem 'fog-core', '<= 2.5.0'
gem 'fog-openstack', '~> 1.0', require: false
gem 'kt-paperclip', '~> 7.2'
gem 'md-paperclip-azure', '~> 2.2', require: false

View File

@ -100,8 +100,8 @@ GEM
attr_required (1.0.2)
awrence (1.2.1)
aws-eventstream (1.3.0)
aws-partitions (1.950.0)
aws-sdk-core (3.201.0)
aws-partitions (1.961.0)
aws-sdk-core (3.201.3)
aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.651.0)
aws-sigv4 (~> 1.8)
@ -109,11 +109,11 @@ GEM
aws-sdk-kms (1.88.0)
aws-sdk-core (~> 3, >= 3.201.0)
aws-sigv4 (~> 1.5)
aws-sdk-s3 (1.156.0)
aws-sdk-s3 (1.157.0)
aws-sdk-core (~> 3, >= 3.201.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.5)
aws-sigv4 (1.8.0)
aws-sigv4 (1.9.1)
aws-eventstream (~> 1, >= 1.0.2)
azure-storage-blob (2.0.3)
azure-storage-common (~> 2.0)
@ -135,7 +135,7 @@ GEM
binding_of_caller (1.0.1)
debug_inspector (>= 1.2.0)
blurhash (0.1.7)
bootsnap (1.18.3)
bootsnap (1.18.4)
msgpack (~> 1.2)
brakeman (6.1.2)
racc
@ -229,7 +229,7 @@ GEM
erubi (1.13.0)
et-orbi (1.2.11)
tzinfo
excon (0.110.0)
excon (0.111.0)
fabrication (2.31.0)
faker (3.4.2)
i18n (>= 1.8.11, < 2)
@ -269,7 +269,7 @@ GEM
flatware-rspec (2.3.2)
flatware (= 2.3.2)
rspec (>= 3.6)
fog-core (2.4.0)
fog-core (2.5.0)
builder
excon (~> 0.71)
formatador (>= 0.2, < 2.0)
@ -429,7 +429,7 @@ GEM
memory_profiler (1.0.2)
mime-types (3.5.2)
mime-types-data (~> 3.2015)
mime-types-data (3.2024.0604)
mime-types-data (3.2024.0702)
mini_mime (1.1.5)
mini_portile2 (2.8.7)
minitest (5.24.1)
@ -758,7 +758,7 @@ GEM
rack (>= 1.1)
rubocop (>= 1.33.0, < 2.0)
rubocop-ast (>= 1.31.1, < 2.0)
rubocop-rspec (3.0.3)
rubocop-rspec (3.0.4)
rubocop (~> 1.61)
rubocop-rspec_rails (2.30.0)
rubocop (~> 1.61)
@ -796,7 +796,7 @@ GEM
redis (>= 4.5.0, < 5)
sidekiq-bulk (0.2.0)
sidekiq
sidekiq-scheduler (5.0.5)
sidekiq-scheduler (5.0.6)
rufus-scheduler (~> 3.2)
sidekiq (>= 6, < 8)
tilt (>= 1.4.0, < 3)
@ -945,7 +945,7 @@ DEPENDENCIES
fast_blank (~> 1.0)
fastimage
flatware-rspec
fog-core (<= 2.4.0)
fog-core (<= 2.5.0)
fog-openstack (~> 1.0)
fuubar (~> 2.5)
haml-rails (~> 2.0)

View File

@ -16,10 +16,10 @@ class Api::V2Alpha::NotificationsController < Api::BaseController
@group_metadata = load_group_metadata
@grouped_notifications = load_grouped_notifications
@relationships = StatusRelationshipsPresenter.new(target_statuses_from_notifications, current_user&.account_id)
@sample_accounts = @grouped_notifications.flat_map(&:sample_accounts)
@presenter = GroupedNotificationsPresenter.new(@grouped_notifications, expand_accounts: expand_accounts_param)
# Preload associations to avoid N+1s
ActiveRecord::Associations::Preloader.new(records: @sample_accounts, associations: [:account_stat, { user: :role }]).call
ActiveRecord::Associations::Preloader.new(records: @presenter.accounts, associations: [:account_stat, { user: :role }]).call
end
MastodonOTELTracer.in_span('Api::V2Alpha::NotificationsController#index rendering') do |span|
@ -27,14 +27,14 @@ class Api::V2Alpha::NotificationsController < Api::BaseController
span.add_attributes(
'app.notification_grouping.count' => @grouped_notifications.size,
'app.notification_grouping.sample_account.count' => @sample_accounts.size,
'app.notification_grouping.sample_account.unique_count' => @sample_accounts.pluck(:id).uniq.size,
'app.notification_grouping.account.count' => @presenter.accounts.size,
'app.notification_grouping.partial_account.count' => @presenter.partial_accounts.size,
'app.notification_grouping.status.count' => statuses.size,
'app.notification_grouping.status.unique_count' => statuses.uniq.size
'app.notification_grouping.status.unique_count' => statuses.uniq.size,
'app.notification_grouping.expand_accounts_param' => expand_accounts_param
)
presenter = GroupedNotificationsPresenter.new(@grouped_notifications)
render json: presenter, serializer: REST::DedupNotificationGroupSerializer, relationships: @relationships, group_metadata: @group_metadata
render json: @presenter, serializer: REST::DedupNotificationGroupSerializer, relationships: @relationships, group_metadata: @group_metadata, expand_accounts: expand_accounts_param
end
end
@ -131,4 +131,15 @@ class Api::V2Alpha::NotificationsController < Api::BaseController
def pagination_params(core_params)
params.slice(:limit, :types, :exclude_types, :include_filtered).permit(:limit, :include_filtered, types: [], exclude_types: []).merge(core_params)
end
def expand_accounts_param
case params[:expand_accounts]
when nil, 'full'
'full'
when 'partial_avatars'
'partial_avatars'
else
raise Mastodon::InvalidParameterError, "Invalid value for 'expand_accounts': '#{params[:expand_accounts]}', allowed values are 'full' and 'partial_avatars'"
end
end
end

View File

@ -431,6 +431,42 @@ Rails.delegate(document, 'img.custom-emoji', 'mouseout', ({ target }) => {
target.src = target.dataset.static;
});
const setInputDisabled = (
input: HTMLInputElement | HTMLSelectElement,
disabled: boolean,
) => {
input.disabled = disabled;
const wrapper = input.closest('.with_label');
if (wrapper) {
wrapper.classList.toggle('disabled', input.disabled);
const hidden =
input.type === 'checkbox' &&
wrapper.querySelector<HTMLInputElement>('input[type=hidden][value="0"]');
if (hidden) {
hidden.disabled = input.disabled;
}
}
};
Rails.delegate(
document,
'#account_statuses_cleanup_policy_enabled',
'change',
({ target }) => {
if (!(target instanceof HTMLInputElement) || !target.form) return;
target.form
.querySelectorAll<
HTMLInputElement | HTMLSelectElement
>('input:not([type=hidden], #account_statuses_cleanup_policy_enabled), select')
.forEach((input) => {
setInputDisabled(input, !target.checked);
});
},
);
// Empty the honeypot fields in JS in case something like an extension
// automatically filled them.
Rails.delegate(document, '#registration_new_user,#new_user', 'submit', () => {

View File

@ -106,7 +106,7 @@ const Account = ({ size = 46, account, onFollow, onBlock, onMute, onMuteNotifica
</>
);
} else if (defaultAction === 'mute') {
buttons = <Button title={intl.formatMessage(messages.mute)} onClick={handleMute} />;
buttons = <Button text={intl.formatMessage(messages.mute)} onClick={handleMute} />;
} else if (defaultAction === 'block') {
buttons = <Button text={intl.formatMessage(messages.block)} onClick={handleBlock} />;
} else if (!account.get('suspended') && !account.get('moved') || following) {

View File

@ -1,5 +1,7 @@
import { useEffect, forwardRef } from 'react';
import { FormattedMessage } from 'react-intl';
import classNames from 'classnames';
import { fetchAccount } from 'flavours/glitch/actions/accounts';
@ -25,6 +27,11 @@ export const HoverCardAccount = forwardRef<
accountId ? state.accounts.get(accountId) : undefined,
);
const note = useAppSelector(
(state) =>
state.relationships.getIn([accountId, 'note']) as string | undefined,
);
useEffect(() => {
if (accountId && !account) {
dispatch(fetchAccount(accountId));
@ -57,6 +64,17 @@ export const HoverCardAccount = forwardRef<
className='hover-card__bio'
/>
<AccountFields fields={account.fields} limit={2} />
{note && note.length > 0 && (
<dl className='hover-card__note'>
<dt className='hover-card__note-label'>
<FormattedMessage
id='account.account_note_header'
defaultMessage='Personal note'
/>
</dt>
<dd>{note}</dd>
</dl>
)}
</div>
<div className='hover-card__number'>

View File

@ -431,6 +431,42 @@ Rails.delegate(document, 'img.custom-emoji', 'mouseout', ({ target }) => {
target.src = target.dataset.static;
});
const setInputDisabled = (
input: HTMLInputElement | HTMLSelectElement,
disabled: boolean,
) => {
input.disabled = disabled;
const wrapper = input.closest('.with_label');
if (wrapper) {
wrapper.classList.toggle('disabled', input.disabled);
const hidden =
input.type === 'checkbox' &&
wrapper.querySelector<HTMLInputElement>('input[type=hidden][value="0"]');
if (hidden) {
hidden.disabled = input.disabled;
}
}
};
Rails.delegate(
document,
'#account_statuses_cleanup_policy_enabled',
'change',
({ target }) => {
if (!(target instanceof HTMLInputElement) || !target.form) return;
target.form
.querySelectorAll<
HTMLInputElement | HTMLSelectElement
>('input:not([type=hidden], #account_statuses_cleanup_policy_enabled), select')
.forEach((input) => {
setInputDisabled(input, !target.checked);
});
},
);
// Empty the honeypot fields in JS in case something like an extension
// automatically filled them.
Rails.delegate(document, '#registration_new_user,#new_user', 'submit', () => {

View File

@ -151,7 +151,7 @@ class AccountNote extends ImmutablePureComponent {
return (
<div className='account__header__account-note'>
<label htmlFor={`account-note-${account.get('id')}`}>
<FormattedMessage id='account.account_note_header' defaultMessage='Note' /> <InlineAlert show={saved} />
<FormattedMessage id='account.account_note_header' defaultMessage='Personal note' /> <InlineAlert show={saved} />
</label>
<Textarea

View File

@ -44,7 +44,7 @@ const ColumnSettings = () => {
settingPath={['minimizeFilteredBanner']}
onChange={onChange}
label={
<FormattedMessage id='notification_requests.minimize_banner' defaultMessage='Minimize filtred notifications banner' />
<FormattedMessage id='notification_requests.minimize_banner' defaultMessage='Minimize filtered notifications banner' />
}
/>
</div>

View File

@ -1,5 +1,6 @@
import { Map as ImmutableMap, List as ImmutableList, fromJS } from 'immutable';
import { blockAccountSuccess, muteAccountSuccess } from 'flavours/glitch/actions/accounts';
import {
NOTIFICATION_REQUESTS_EXPAND_REQUEST,
NOTIFICATION_REQUESTS_EXPAND_SUCCESS,
@ -51,6 +52,14 @@ const removeRequest = (state, id) => {
return state.update('items', list => list.filterNot(item => item.get('id') === id));
};
const removeRequestByAccount = (state, account_id) => {
if (state.getIn(['current', 'item', 'account']) === account_id) {
state = state.setIn(['current', 'removed'], true);
}
return state.update('items', list => list.filterNot(item => item.get('account') === account_id));
};
export const notificationRequestsReducer = (state = initialState, action) => {
switch(action.type) {
case NOTIFICATION_REQUESTS_FETCH_SUCCESS:
@ -74,6 +83,10 @@ export const notificationRequestsReducer = (state = initialState, action) => {
case NOTIFICATION_REQUEST_ACCEPT_REQUEST:
case NOTIFICATION_REQUEST_DISMISS_REQUEST:
return removeRequest(state, action.id);
case blockAccountSuccess.type:
return removeRequestByAccount(state, action.payload.relationship.id);
case muteAccountSuccess.type:
return action.payload.relationship.muting_notifications ? removeRequestByAccount(state, action.payload.relationship.id) : state;
case NOTIFICATION_REQUEST_FETCH_REQUEST:
return state.set('current', initialState.get('current').set('isLoading', true));
case NOTIFICATION_REQUEST_FETCH_SUCCESS:

View File

@ -1,9 +1,8 @@
import type { GetThunkAPI } from '@reduxjs/toolkit';
import { createAsyncThunk } from '@reduxjs/toolkit';
// eslint-disable-next-line @typescript-eslint/no-restricted-imports
import { useDispatch, useSelector } from 'react-redux';
import type { BaseThunkAPI } from '@reduxjs/toolkit/dist/createAsyncThunk';
import type { AppDispatch, RootState } from './store';
export const useAppDispatch = useDispatch.withTypes<AppDispatch>();
@ -25,29 +24,20 @@ export const createAppAsyncThunk = createAsyncThunk.withTypes<{
rejectValue: AsyncThunkRejectValue;
}>();
type AppThunkApi = Pick<
BaseThunkAPI<
RootState,
unknown,
AppDispatch,
AsyncThunkRejectValue,
AppMeta,
AppMeta
>,
'getState' | 'dispatch'
>;
interface AppThunkOptions {
skipLoading?: boolean;
}
const createBaseAsyncThunk = createAsyncThunk.withTypes<{
interface AppThunkConfig {
state: RootState;
dispatch: AppDispatch;
rejectValue: AsyncThunkRejectValue;
fulfilledMeta: AppMeta;
rejectedMeta: AppMeta;
}>();
}
type AppThunkApi = Pick<GetThunkAPI<AppThunkConfig>, 'getState' | 'dispatch'>;
interface AppThunkOptions {
skipLoading?: boolean;
}
const createBaseAsyncThunk = createAsyncThunk.withTypes<AppThunkConfig>();
export function createThunk<Arg = void, Returned = void>(
name: string,

View File

@ -3268,6 +3268,11 @@ $ui-header-logo-wordmark-width: 99px;
.explore__search-header {
display: flex;
}
.explore__search-results {
border: 0;
border-radius: 0;
}
}
.icon-with-badge {
@ -7906,7 +7911,7 @@ img.modal-warning {
display: flex;
flex-shrink: 0;
@media screen and (max-width: $no-gap-breakpoint) {
@media screen and (max-width: $no-gap-breakpoint - 1px) {
border-right: 0;
border-left: 0;
}
@ -8627,16 +8632,17 @@ noscript {
.verified {
border: 1px solid rgba($valid-value-color, 0.5);
margin-top: -1px;
margin-inline: -1px;
&:first-child {
border-top-left-radius: 4px;
border-top-right-radius: 4px;
margin-top: 0;
}
&:last-child {
border-bottom-left-radius: 4px;
border-bottom-right-radius: 4px;
margin-bottom: -1px;
}
dt,
@ -11171,6 +11177,25 @@ noscript {
}
}
&__note {
&-label {
color: $dark-text-color;
font-size: 12px;
font-weight: 500;
text-transform: uppercase;
}
dd {
white-space: pre-line;
color: $secondary-text-color;
overflow: hidden;
line-clamp: 3; // Not yet supported in browers
display: -webkit-box; // The next 3 properties are needed
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
}
}
.display-name {
font-size: 15px;
line-height: 22px;

View File

@ -106,7 +106,7 @@ const Account = ({ size = 46, account, onFollow, onBlock, onMute, onMuteNotifica
</>
);
} else if (defaultAction === 'mute') {
buttons = <Button title={intl.formatMessage(messages.mute)} onClick={handleMute} />;
buttons = <Button text={intl.formatMessage(messages.mute)} onClick={handleMute} />;
} else if (defaultAction === 'block') {
buttons = <Button text={intl.formatMessage(messages.block)} onClick={handleBlock} />;
} else if (!account.get('suspended') && !account.get('moved') || following) {

View File

@ -1,5 +1,7 @@
import { useEffect, forwardRef } from 'react';
import { FormattedMessage } from 'react-intl';
import classNames from 'classnames';
import { Link } from 'react-router-dom';
@ -25,6 +27,11 @@ export const HoverCardAccount = forwardRef<
accountId ? state.accounts.get(accountId) : undefined,
);
const note = useAppSelector(
(state) =>
state.relationships.getIn([accountId, 'note']) as string | undefined,
);
useEffect(() => {
if (accountId && !account) {
dispatch(fetchAccount(accountId));
@ -53,6 +60,17 @@ export const HoverCardAccount = forwardRef<
className='hover-card__bio'
/>
<AccountFields fields={account.fields} limit={2} />
{note && note.length > 0 && (
<dl className='hover-card__note'>
<dt className='hover-card__note-label'>
<FormattedMessage
id='account.account_note_header'
defaultMessage='Personal note'
/>
</dt>
<dd>{note}</dd>
</dl>
)}
</div>
<div className='hover-card__number'>

View File

@ -151,7 +151,7 @@ class AccountNote extends ImmutablePureComponent {
return (
<div className='account__header__account-note'>
<label htmlFor={`account-note-${account.get('id')}`}>
<FormattedMessage id='account.account_note_header' defaultMessage='Note' /> <InlineAlert show={saved} />
<FormattedMessage id='account.account_note_header' defaultMessage='Personal note' /> <InlineAlert show={saved} />
</label>
<Textarea

View File

@ -44,7 +44,7 @@ const ColumnSettings = () => {
settingPath={['minimizeFilteredBanner']}
onChange={onChange}
label={
<FormattedMessage id='notification_requests.minimize_banner' defaultMessage='Minimize filtred notifications banner' />
<FormattedMessage id='notification_requests.minimize_banner' defaultMessage='Minimize filtered notifications banner' />
}
/>
</div>

View File

@ -171,21 +171,28 @@
"confirmations.block.confirm": "Заблакіраваць",
"confirmations.delete.confirm": "Выдаліць",
"confirmations.delete.message": "Вы ўпэўненыя, што хочаце выдаліць гэты допіс?",
"confirmations.delete.title": "Выдаліць допіс?",
"confirmations.delete_list.confirm": "Выдаліць",
"confirmations.delete_list.message": "Вы ўпэўненыя, што хочаце беззваротна выдаліць гэты чарнавік?",
"confirmations.delete_list.title": "Выдаліць спіс?",
"confirmations.discard_edit_media.confirm": "Адмяніць",
"confirmations.discard_edit_media.message": "У вас ёсць незахаваныя змены ў апісанні або прэв'ю, усе роўна скасаваць іх?",
"confirmations.edit.confirm": "Рэдагаваць",
"confirmations.edit.message": "Калі вы зменіце зараз, гэта ператрэ паведамленне, якое вы пішаце. Вы ўпэўнены, што хочаце працягнуць?",
"confirmations.edit.title": "Замяніць допіс?",
"confirmations.logout.confirm": "Выйсці",
"confirmations.logout.message": "Вы ўпэўненыя, што хочаце выйсці?",
"confirmations.logout.title": "Выйсці?",
"confirmations.mute.confirm": "Ігнараваць",
"confirmations.redraft.confirm": "Выдаліць і перапісаць",
"confirmations.redraft.message": "Вы ўпэўнены, што хочаце выдаліць допіс і перапісаць яго? Упадабанні і пашырэнні згубяцца, а адказы да арыгінальнага допісу асірацеюць.",
"confirmations.redraft.title": "Выдаліць і перапісаць допіс?",
"confirmations.reply.confirm": "Адказаць",
"confirmations.reply.message": "Калі вы адкажаце зараз, гэта ператрэ паведамленне, якое вы пішаце. Вы ўпэўнены, што хочаце працягнуць?",
"confirmations.reply.title": "Замяніць допіс?",
"confirmations.unfollow.confirm": "Адпісацца",
"confirmations.unfollow.message": "Вы ўпэўненыя, што хочаце адпісацца ад {name}?",
"confirmations.unfollow.title": "Адпісацца ад карыстальніка?",
"conversation.delete": "Выдаліць размову",
"conversation.mark_as_read": "Адзначыць прачытаным",
"conversation.open": "Прагледзець размову",
@ -293,6 +300,7 @@
"filter_modal.select_filter.subtitle": "Скарыстайцеся існуючай катэгорыяй або стварыце новую",
"filter_modal.select_filter.title": "Фільтраваць гэты допіс",
"filter_modal.title.status": "Фільтраваць допіс",
"filtered_notifications_banner.pending_requests": "Ад {count, plural, =0 {# людзей якіх} one {# чалавека якіх} few {# чалавек якіх} many {# людзей якіх} other {# чалавека якіх}} вы магчыма ведаеце",
"filtered_notifications_banner.title": "Адфільтраваныя апавяшчэнні",
"firehose.all": "Усе",
"firehose.local": "Гэты сервер",
@ -341,7 +349,7 @@
"hashtag.follow": "Падпісацца на хэштэг",
"hashtag.unfollow": "Адпісацца ад хэштэга",
"hashtags.and_other": "…і яшчэ {count, plural, other {#}}",
"home.column_settings.show_reblogs": "Паказаць пашырэнні",
"home.column_settings.show_reblogs": "Паказваць пашырэнні",
"home.column_settings.show_replies": "Паказваць адказы",
"home.hide_announcements": "Схаваць аб'явы",
"home.pending_critical_update.body": "Калі ласка, абнавіце свой сервер Mastodon як мага хутчэй!",
@ -437,6 +445,8 @@
"mute_modal.title": "Ігнараваць карыстальніка?",
"mute_modal.you_wont_see_mentions": "Вы не ўбачыце паведамленняў са згадваннем карыстальніка.",
"mute_modal.you_wont_see_posts": "Карыстальнік па-ранейшаму будзе бачыць вашыя паведамленні, але вы не будзеце паведамленні карыстальніка.",
"name_and_others": "{name} і {count, plural, one {# іншы} many {# іншых} other {# іншых}}",
"name_and_others_with_link": "{name} і <a>{count, plural, one {# іншы} many {# іншых} other {# іншых}}</a>",
"navigation_bar.about": "Пра нас",
"navigation_bar.advanced_interface": "Адкрыць у пашыраным вэб-інтэрфейсе",
"navigation_bar.blocks": "Заблакіраваныя карыстальнікі",
@ -464,6 +474,10 @@
"navigation_bar.security": "Бяспека",
"not_signed_in_indicator.not_signed_in": "Вам трэба ўвайсці каб атрымаць доступ да гэтага рэсурсу.",
"notification.admin.report": "{name} паскардзіўся на {target}",
"notification.admin.report_account": "{name} паскардзіўся на {count, plural, one {# допіс} many {# допісаў} other {# допіса}} ад {target} з прычыны {category}",
"notification.admin.report_account_other": "{name} паскардзіўся на {count, plural, one {# допіс} many {# допісаў} other {# допіса}} ад {target}",
"notification.admin.report_statuses": "{name} паскардзіўся на {target} з прычыны {category}",
"notification.admin.report_statuses_other": "{name} паскардзіўся на {target}",
"notification.admin.sign_up": "{name} зарэгістраваўся",
"notification.favourite": "Ваш допіс упадабаны {name}",
"notification.follow": "{name} падпісаўся на вас",
@ -479,6 +493,8 @@
"notification.moderation_warning.action_silence": "Ваш уліковы запіс быў абмежаваны.",
"notification.moderation_warning.action_suspend": "Ваш уліковы запіс быў прыпынены.",
"notification.own_poll": "Ваша апытанне скончылася",
"notification.poll": "Апытанне, дзе вы прынялі ўдзел, скончылася",
"notification.private_mention": "{name} згадаў вас асабіста",
"notification.reblog": "{name} пашырыў ваш допіс",
"notification.relationships_severance_event": "Страціў сувязь з {name}",
"notification.relationships_severance_event.account_suspension": "Адміністратар з {from} прыпыніў працу {target}, што азначае, што вы больш не можаце атрымліваць ад іх абнаўлення ці ўзаемадзейнічаць з імі.",
@ -489,13 +505,18 @@
"notification.update": "Допіс {name} адрэдагаваны",
"notification_requests.accept": "Прыняць",
"notification_requests.dismiss": "Адхіліць",
"notification_requests.maximize": "Разгарнуць",
"notification_requests.minimize_banner": "Згарнуць банер адфільтраваных апавяшчэнняў",
"notification_requests.notifications_from": "Апавяшчэнні ад {name}",
"notification_requests.title": "Адфільтраваныя апавяшчэнні",
"notifications.clear": "Ачысціць апавяшчэнні",
"notifications.clear_confirmation": "Вы ўпэўнены, што жадаеце назаўсёды сцерці ўсё паведамленні?",
"notifications.clear_title": "Ачысціць апавяшчэнні?",
"notifications.column_settings.admin.report": "Новыя скаргі:",
"notifications.column_settings.admin.sign_up": "Новыя ўваходы:",
"notifications.column_settings.alert": "Апавяшчэнні на працоўным стале",
"notifications.column_settings.beta.category": "Эксперыментальныя функцыі",
"notifications.column_settings.beta.grouping": "Групаваць апавяшчэннi",
"notifications.column_settings.favourite": "Упадабанае:",
"notifications.column_settings.filter_bar.advanced": "Паказаць усе катэгорыі",
"notifications.column_settings.filter_bar.category": "Панэль хуткай фільтрацыі",
@ -659,9 +680,13 @@
"report.unfollow_explanation": "Вы падпісаныя на гэты ўліковы запіс. Каб не бачыць допісы з яго ў вашай стужцы, адпішыцеся.",
"report_notification.attached_statuses": "{count, plural, one {{count} допіс прымацаваны} few {{count} допісы прымацаваны} many {{count} допісаў прымацавана} other {{count} допісу прымацавана}}",
"report_notification.categories.legal": "Права",
"report_notification.categories.legal_sentence": "нелегальнае змесціва",
"report_notification.categories.other": "Іншае",
"report_notification.categories.other_sentence": "іншае",
"report_notification.categories.spam": "Спам",
"report_notification.categories.spam_sentence": "спам",
"report_notification.categories.violation": "Парушэнне правілаў",
"report_notification.categories.violation_sentence": "парушэнне правілаў",
"report_notification.open": "Адкрыць скаргу",
"search.no_recent_searches": "Гісторыя пошуку пустая",
"search.placeholder": "Пошук",
@ -689,8 +714,11 @@
"server_banner.about_active_users": "Людзі, якія карыстаюцца гэтым сервера на працягу апошніх 30 дзён (Штомесячна Актыўныя Карыстальнікі)",
"server_banner.active_users": "актыўныя карыстальнікі",
"server_banner.administered_by": "Адміністратар:",
"server_banner.is_one_of_many": "{domain} - гэта адзін з многіх незалежных сервераў Mastodon, якія вы можаце выкарыстоўваць для ўдзелу ў fediverse.",
"server_banner.server_stats": "Статыстыка сервера:",
"sign_in_banner.create_account": "Стварыць уліковы запіс",
"sign_in_banner.follow_anyone": "Сачыце за кім заўгодна ва ўсім fediverse і глядзіце ўсё ў храналагічным парадку. Ніякіх алгарытмаў, рэкламы або клікбэйту.",
"sign_in_banner.mastodon_is": "Mastodon - лепшы спосаб быць у курсе ўсяго, што адбываецца.",
"sign_in_banner.sign_in": "Увайсці",
"sign_in_banner.sso_redirect": "Уваход ці рэгістрацыя",
"status.admin_account": "Адкрыць інтэрфейс мадэратара для @{name}",
@ -765,8 +793,8 @@
"time_remaining.seconds": "{number, plural, one {засталася # секунда} few {засталося # секунды} many {засталося # секунд} other {засталося # секунды}}",
"timeline_hint.remote_resource_not_displayed": "{resource} з іншых сервераў не адлюстроўваецца.",
"timeline_hint.resources.followers": "Падпісчыкі",
"timeline_hint.resources.follows": "Падпісаны на",
"timeline_hint.resources.statuses": "Старэйшыя допісы",
"timeline_hint.resources.follows": "Падпіскі",
"timeline_hint.resources.statuses": "Старыя допісы",
"trends.counter_by_accounts": "{count, plural, one {{counter} чалавек} few {{counter} чалавекі} many {{counter} людзей} other {{counter} чалавек}} за {days, plural, one {{days} апошні дзень} few {{days} апошнія дні} many {{days} апошніх дзён} other {{days} апошніх дзён}}",
"trends.trending_now": "Актуальнае",
"ui.beforeunload": "Ваш чарнавік знішчыцца калі вы пакінеце Mastodon.",

View File

@ -505,6 +505,8 @@
"notification.update": "{name} промени публикация",
"notification_requests.accept": "Приемам",
"notification_requests.dismiss": "Отхвърлям",
"notification_requests.maximize": "Максимизиране",
"notification_requests.minimize_banner": "Минимизиране на банера за филтрирани известия",
"notification_requests.notifications_from": "Известия от {name}",
"notification_requests.title": "Филтрирани известия",
"notifications.clear": "Изчистване на известията",

View File

@ -505,6 +505,8 @@
"notification.update": "{name} ha editat un tut",
"notification_requests.accept": "Accepta",
"notification_requests.dismiss": "Ignora",
"notification_requests.maximize": "Maximitza",
"notification_requests.minimize_banner": "Minimitza el bàner de notificacions filtrades",
"notification_requests.notifications_from": "Notificacions de {name}",
"notification_requests.title": "Notificacions filtrades",
"notifications.clear": "Esborra les notificacions",

View File

@ -171,21 +171,28 @@
"confirmations.block.confirm": "Blokovat",
"confirmations.delete.confirm": "Smazat",
"confirmations.delete.message": "Opravdu chcete smazat tento příspěvek?",
"confirmations.delete.title": "Smazat příspěvek?",
"confirmations.delete_list.confirm": "Smazat",
"confirmations.delete_list.message": "Opravdu chcete tento seznam navždy smazat?",
"confirmations.delete_list.title": "Smazat seznam?",
"confirmations.discard_edit_media.confirm": "Zahodit",
"confirmations.discard_edit_media.message": "Máte neuložené změny popisku médií nebo náhledu, chcete je přesto zahodit?",
"confirmations.edit.confirm": "Upravit",
"confirmations.edit.message": "Editovat teď znamená přepsání zprávy, kterou právě tvoříte. Opravdu chcete pokračovat?",
"confirmations.edit.title": "Přepsat příspěvek?",
"confirmations.logout.confirm": "Odhlásit se",
"confirmations.logout.message": "Opravdu se chcete odhlásit?",
"confirmations.logout.title": "Odhlásit se?",
"confirmations.mute.confirm": "Skrýt",
"confirmations.redraft.confirm": "Smazat a přepsat",
"confirmations.redraft.message": "Jste si jistí, že chcete odstranit tento příspěvek a vytvořit z něj koncept? Oblíbené a boosty budou ztraceny a odpovědi na původní příspěvek ztratí kontext.",
"confirmations.redraft.title": "Smazat a přepracovat příspěvek na koncept?",
"confirmations.reply.confirm": "Odpovědět",
"confirmations.reply.message": "Odpověď přepíše vaši rozepsanou zprávu. Opravdu chcete pokračovat?",
"confirmations.reply.title": "Přepsat příspěvek?",
"confirmations.unfollow.confirm": "Přestat sledovat",
"confirmations.unfollow.message": "Opravdu chcete {name} přestat sledovat?",
"confirmations.unfollow.title": "Přestat sledovat uživatele?",
"conversation.delete": "Smazat konverzaci",
"conversation.mark_as_read": "Označit jako přečtené",
"conversation.open": "Zobrazit konverzaci",
@ -479,6 +486,7 @@
"notification.moderation_warning.action_silence": "Váš účet byl omezen.",
"notification.moderation_warning.action_suspend": "Váš účet byl pozastaven.",
"notification.own_poll": "Vaše anketa skončila",
"notification.poll": "Anketa, ve které jste hlasovali, skončila",
"notification.reblog": "Uživatel {name} boostnul váš příspěvek",
"notification.relationships_severance_event": "Kontakt ztracen s {name}",
"notification.relationships_severance_event.account_suspension": "Administrátor z {from} pozastavil {target}, což znamená, že již od nich nemůžete přijímat aktualizace nebo s nimi interagovat.",
@ -489,13 +497,17 @@
"notification.update": "Uživatel {name} upravil příspěvek",
"notification_requests.accept": "Přijmout",
"notification_requests.dismiss": "Zamítnout",
"notification_requests.maximize": "Maximalizovat",
"notification_requests.minimize_banner": "Minimalizovat banner filtrovaných oznámení",
"notification_requests.notifications_from": "Oznámení od {name}",
"notification_requests.title": "Vyfiltrovaná oznámení",
"notifications.clear": "Vyčistit oznámení",
"notifications.clear_confirmation": "Opravdu chcete trvale smazat všechna vaše oznámení?",
"notifications.clear_title": "Vyčistit oznámení?",
"notifications.column_settings.admin.report": "Nová hlášení:",
"notifications.column_settings.admin.sign_up": "Nové registrace:",
"notifications.column_settings.alert": "Oznámení na počítači",
"notifications.column_settings.beta.category": "Experimentální funkce",
"notifications.column_settings.favourite": "Oblíbené:",
"notifications.column_settings.filter_bar.advanced": "Zobrazit všechny kategorie",
"notifications.column_settings.filter_bar.category": "Panel rychlého filtrování",
@ -659,9 +671,13 @@
"report.unfollow_explanation": "Tento účet sledujete. Abyste už neviděli jeho příspěvky ve své domovské časové ose, přestaňte jej sledovat.",
"report_notification.attached_statuses": "{count, plural, one {{count} připojený příspěvek} few {{count} připojené příspěvky} many {{count} připojených příspěvků} other {{count} připojených příspěvků}}",
"report_notification.categories.legal": "Právní ustanovení",
"report_notification.categories.legal_sentence": "nezákonný obsah",
"report_notification.categories.other": "Ostatní",
"report_notification.categories.other_sentence": "další",
"report_notification.categories.spam": "Spam",
"report_notification.categories.spam_sentence": "spam",
"report_notification.categories.violation": "Porušení pravidla",
"report_notification.categories.violation_sentence": "porušení pravidla",
"report_notification.open": "Otevřít hlášení",
"search.no_recent_searches": "Žádná nedávná vyhledávání",
"search.placeholder": "Hledat",

View File

@ -3,7 +3,7 @@
"about.contact": "Cysylltwch â:",
"about.disclaimer": "Mae Mastodon yn feddalwedd cod agored rhydd ac o dan hawlfraint Mastodon gGmbH.",
"about.domain_blocks.no_reason_available": "Nid yw'r rheswm ar gael",
"about.domain_blocks.preamble": "Fel rheol, mae Mastodon yn caniatáu i chi weld cynnwys gan unrhyw weinyddwr arall yn y ffederasiwn a rhyngweithio â hi. Dyma'r eithriadau a wnaed ar y gweinydd penodol hwn.",
"about.domain_blocks.preamble": "Fel rheol, mae Mastodon yn caniatáu i chi weld cynnwys gan unrhyw weinyddwr arall yn y ffedysawd a rhyngweithio â hi. Dyma'r eithriadau a wnaed ar y gweinydd penodol hwn.",
"about.domain_blocks.silenced.explanation": "Fel rheol, fyddwch chi ddim yn gweld proffiliau a chynnwys o'r gweinydd hwn, oni bai eich bod yn chwilio'n benodol amdano neu yn ymuno drwy ei ddilyn.",
"about.domain_blocks.silenced.title": "Cyfyngedig",
"about.domain_blocks.suspended.explanation": "Ni fydd data o'r gweinydd hwn yn cael ei brosesu, ei gadw na'i gyfnewid, gan wneud unrhyw ryngweithio neu gyfathrebu gyda defnyddwyr o'r gweinydd hwn yn amhosibl.",
@ -503,6 +503,7 @@
"notification.update": "Golygodd {name} bostiad",
"notification_requests.accept": "Derbyn",
"notification_requests.dismiss": "Cau",
"notification_requests.maximize": "Mwyhau",
"notification_requests.notifications_from": "Hysbysiadau gan {name}",
"notification_requests.title": "Hysbysiadau wedi'u hidlo",
"notifications.clear": "Clirio hysbysiadau",
@ -710,8 +711,11 @@
"server_banner.about_active_users": "Pobl sy'n defnyddio'r gweinydd hwn yn ystod y 30 diwrnod diwethaf (Defnyddwyr Gweithredol Misol)",
"server_banner.active_users": "defnyddwyr gweithredol",
"server_banner.administered_by": "Gweinyddir gan:",
"server_banner.is_one_of_many": "Mae {domain} yn un o'r nifer o weinyddion Mastodon annibynnol y gallwch eu defnyddio i gymryd rhan yn y ffedysawd.",
"server_banner.server_stats": "Ystadegau'r gweinydd:",
"sign_in_banner.create_account": "Creu cyfrif",
"sign_in_banner.follow_anyone": "Dilynwch unrhyw un ar draws y ffedysawd a gweld y cyfan mewn trefn gronolegol. Dim algorithmau, hysbysebion, na straeon er mwyn cliciadau yn y golwg.",
"sign_in_banner.mastodon_is": "Mastodon yw'r ffordd orau o gadw i fyny â'r hyn sy'n digwydd.",
"sign_in_banner.sign_in": "Mewngofnodi",
"sign_in_banner.sso_redirect": "Mewngofnodi neu Gofrestru",
"status.admin_account": "Agor rhyngwyneb cymedroli ar gyfer @{name}",

View File

@ -505,6 +505,8 @@
"notification.update": "{name} redigerede et indlæg",
"notification_requests.accept": "Acceptér",
"notification_requests.dismiss": "Afvis",
"notification_requests.maximize": "Maksimér",
"notification_requests.minimize_banner": "Minimér filtrerede notifikationsbanner",
"notification_requests.notifications_from": "Notifikationer fra {name}",
"notification_requests.title": "Filtrerede notifikationer",
"notifications.clear": "Ryd notifikationer",

View File

@ -505,6 +505,8 @@
"notification.update": "{name} bearbeitete einen Beitrag",
"notification_requests.accept": "Akzeptieren",
"notification_requests.dismiss": "Ablehnen",
"notification_requests.maximize": "Maximieren",
"notification_requests.minimize_banner": "Banner für gefilterte Benachrichtigungen minimieren",
"notification_requests.notifications_from": "Benachrichtigungen von {name}",
"notification_requests.title": "Gefilterte Benachrichtigungen",
"notifications.clear": "Benachrichtigungen löschen",
@ -687,7 +689,7 @@
"report_notification.categories.violation_sentence": "Regelverletzung",
"report_notification.open": "Meldung öffnen",
"search.no_recent_searches": "Keine früheren Suchanfragen",
"search.placeholder": "Suche",
"search.placeholder": "Suchen",
"search.quick_action.account_search": "Profile passend zu {x}",
"search.quick_action.go_to_account": "Profil {x} aufrufen",
"search.quick_action.go_to_hashtag": "Hashtag {x} aufrufen",

View File

@ -11,7 +11,7 @@
"about.not_available": "This information has not been made available on this server.",
"about.powered_by": "Decentralized social media powered by {mastodon}",
"about.rules": "Server rules",
"account.account_note_header": "Note",
"account.account_note_header": "Personal note",
"account.add_or_remove_from_list": "Add or Remove from lists",
"account.badges.bot": "Automated",
"account.badges.group": "Group",
@ -506,7 +506,7 @@
"notification_requests.accept": "Accept",
"notification_requests.dismiss": "Dismiss",
"notification_requests.maximize": "Maximize",
"notification_requests.minimize_banner": "Minimize filtred notifications banner",
"notification_requests.minimize_banner": "Minimize filtered notifications banner",
"notification_requests.notifications_from": "Notifications from {name}",
"notification_requests.title": "Filtered notifications",
"notifications.clear": "Clear notifications",

View File

@ -505,6 +505,8 @@
"notification.update": "{name} editó un mensaje",
"notification_requests.accept": "Aceptar",
"notification_requests.dismiss": "Descartar",
"notification_requests.maximize": "Maximizar",
"notification_requests.minimize_banner": "Minimizar la barra de notificaciones filtradas",
"notification_requests.notifications_from": "Notificaciones de {name}",
"notification_requests.title": "Notificaciones filtradas",
"notifications.clear": "Limpiar notificaciones",

View File

@ -505,6 +505,8 @@
"notification.update": "{name} editó una publicación",
"notification_requests.accept": "Aceptar",
"notification_requests.dismiss": "Descartar",
"notification_requests.maximize": "Maximizar",
"notification_requests.minimize_banner": "Minimizar banner de notificaciones filtradas",
"notification_requests.notifications_from": "Notificaciones de {name}",
"notification_requests.title": "Notificaciones filtradas",
"notifications.clear": "Limpiar notificaciones",

View File

@ -505,6 +505,8 @@
"notification.update": "{name} editó una publicación",
"notification_requests.accept": "Aceptar",
"notification_requests.dismiss": "Descartar",
"notification_requests.maximize": "Maximizar",
"notification_requests.minimize_banner": "Minimizar banner de notificaciones filtradas",
"notification_requests.notifications_from": "Notificaciones de {name}",
"notification_requests.title": "Notificaciones filtradas",
"notifications.clear": "Limpiar notificaciones",

View File

@ -86,6 +86,10 @@
"announcement.announcement": "اعلامیه",
"attachments_list.unprocessed": "(پردازش نشده)",
"audio.hide": "نهفتن صدا",
"block_modal.show_less": "نمایش کم‌تر",
"block_modal.show_more": "نمایش بیش‌تر",
"block_modal.title": "انسداد کاربر؟",
"block_modal.you_wont_see_mentions": "فرسته‌هایی که از اون نام برده را نخواهید دید.",
"boost_modal.combo": "دکمهٔ {combo} را بزنید تا دیگر این را نبینید",
"bundle_column_error.copy_stacktrace": "رونوشت از گزارش خطا",
"bundle_column_error.error.body": "صفحهٔ درخواستی نتوانست پرداخت شود. ممکن است به خاطر اشکالی در کدمان یا مشکل سازگاری مرورگر باشد.",
@ -160,21 +164,28 @@
"confirmations.block.confirm": "انسداد",
"confirmations.delete.confirm": "حذف",
"confirmations.delete.message": "آیا مطمئنید که می‌خواهید این فرسته را حذف کنید؟",
"confirmations.delete.title": "حذف فرسته؟",
"confirmations.delete_list.confirm": "حذف",
"confirmations.delete_list.message": "مطمئنید می‌خواهید این سیاهه را برای همیشه حذف کنید؟",
"confirmations.delete_list.title": "حذف سیاهه؟",
"confirmations.discard_edit_media.confirm": "دور انداختن",
"confirmations.discard_edit_media.message": "تغییرات ذخیره نشده‌ای در توضیحات یا پیش‌نمایش رسانه دارید. همگی نادیده گرفته شوند؟",
"confirmations.edit.confirm": "ویرایش",
"confirmations.edit.message": "در صورت ویرایش، پیامی که در حال نوشتنش بودید از بین خواهد رفت. می‌خواهید ادامه دهید؟",
"confirmations.edit.title": "رونویسی فرسته؟",
"confirmations.logout.confirm": "خروج از حساب",
"confirmations.logout.message": "مطمئنید می‌خواهید خارج شوید؟",
"confirmations.logout.title": "خروج؟",
"confirmations.mute.confirm": "خموش",
"confirmations.redraft.confirm": "حذف و بازنویسی",
"confirmations.redraft.message": "مطمئنید که می‌خواهید این فرسته را حذف کنید و از نو بنویسید؟ با این کار تقویت‌ها و پسندهایش از دست رفته و پاسخ‌ها به آن بی‌مرجع می‌شود.",
"confirmations.redraft.title": "حذف و پیش‌نویسی دوبارهٔ فرسته؟",
"confirmations.reply.confirm": "پاسخ",
"confirmations.reply.message": "اگر الان پاسخ دهید، چیزی که در حال نوشتنش بودید پاک خواهد شد. می‌خواهید ادامه دهید؟",
"confirmations.reply.title": "رونویسی فرسته؟",
"confirmations.unfollow.confirm": "پی‌نگرفتن",
"confirmations.unfollow.message": "مطمئنید که می‌خواهید به پی‌گیری از {name} پایان دهید؟",
"confirmations.unfollow.title": "ناپی‌گیری کاربر؟",
"conversation.delete": "حذف گفتگو",
"conversation.mark_as_read": "علامت‌گذاری به عنوان خوانده شده",
"conversation.open": "دیدن گفتگو",
@ -194,6 +205,10 @@
"dismissable_banner.explore_statuses": "هم‌اکنون این فرسته‌ها از این کارساز و دیگر کارسازهای شبکهٔ نامتمرکز داغ شده‌اند.",
"dismissable_banner.explore_tags": "هم‌اکنون این برچسب‌ها بین افراد این کارساز و دیگر کارسازهای شبکهٔ نامتمرکز داغ شده‌اند.",
"dismissable_banner.public_timeline": "این‌ها جدیدترین فرسته‌های عمومی از افرادی روی وب اجتماعیند که اعضای {domain} پی می‌گیرندشان.",
"domain_block_modal.block": "انسداد کارساز",
"domain_block_modal.title": "انسداد دامنه؟",
"domain_pill.server": "کارساز",
"domain_pill.username": "نام کاربری",
"embed.instructions": "جاسازی این فرسته روی پایگاهتان با رونوشت کردن کد زیر.",
"embed.preview": "این گونه دیده خواهد شد:",
"emoji_button.activity": "فعالیت",
@ -388,6 +403,8 @@
"loading_indicator.label": "در حال بارگذاری…",
"media_gallery.toggle_visible": "{number, plural, one {نهفتن تصویر} other {نهفتن تصاویر}}",
"moved_to_account_banner.text": "حسابتان {disabledAccount} اکنون از کار افتاده؛ چرا که به {movedToAccount} منتقل شدید.",
"mute_modal.show_options": "نمایش گزینه‌ها",
"mute_modal.title": "خموشی کاربر؟",
"navigation_bar.about": "درباره",
"navigation_bar.advanced_interface": "بازکردن در رابط کاربری وب پیشرفته",
"navigation_bar.blocks": "کاربران مسدود شده",
@ -420,15 +437,21 @@
"notification.follow": "{name} پی‌گیرتان شد",
"notification.follow_request": "{name} درخواست پی‌گیریتان را داد",
"notification.mention": "{name} به شما اشاره کرد",
"notification.moderation-warning.learn_more": "بیشتر بدانید",
"notification.own_poll": "نظرسنجیتان پایان یافت",
"notification.reblog": "{name} فرسته‌تان را تقویت کرد",
"notification.relationships_severance_event.learn_more": "بیشتر بدانید",
"notification.status": "{name} چیزی فرستاد",
"notification.update": "{name} فرسته‌ای را ویرایش کرد",
"notification_requests.accept": "پذیرش",
"notification_requests.dismiss": "دورانداختن",
"notification_requests.maximize": "بیشنه",
"notifications.clear": "پاک‌سازی آگاهی‌ها",
"notifications.clear_confirmation": "مطمئنید می‌خواهید همهٔ آگاهی‌هایتان را برای همیشه پاک کنید؟",
"notifications.column_settings.admin.report": "گزارش‌های جدید:",
"notifications.column_settings.admin.sign_up": "ثبت نام‌های جدید:",
"notifications.column_settings.alert": "آگاهی‌های میزکار",
"notifications.column_settings.beta.category": "ویژگی‌های آزمایشی",
"notifications.column_settings.favourite": "برگزیده‌ها:",
"notifications.column_settings.follow": "پی‌گیرندگان جدید:",
"notifications.column_settings.follow_request": "درخواست‌های جدید پی‌گیری:",
@ -583,8 +606,11 @@
"report.unfollow_explanation": "شما این حساب را پی‌گرفته‌اید، برای اینکه دیگر فرسته‌هایش را در خوراک خانه‌تان نبینید؛ آن را پی‌نگیرید.",
"report_notification.attached_statuses": "{count, plural, one {{count} فرسته} other {{count} فرسته}} پیوست شده",
"report_notification.categories.legal": "قانونی",
"report_notification.categories.legal_sentence": "محتوای غیرقانونی",
"report_notification.categories.other": "دیگر",
"report_notification.categories.other_sentence": "دیگر",
"report_notification.categories.spam": "هرزنامه",
"report_notification.categories.spam_sentence": "هرزنامه",
"report_notification.categories.violation": "تخطّی از قانون",
"report_notification.open": "گشودن گزارش",
"search.no_recent_searches": "جست‌وجوی اخیری نیست",

View File

@ -3,7 +3,7 @@
"about.contact": "Yhteydenotto:",
"about.disclaimer": "Mastodon on vapaa avoimen lähdekoodin ohjelmisto ja Mastodon gGmbH:n tavaramerkki.",
"about.domain_blocks.no_reason_available": "Syy ei ole tiedossa",
"about.domain_blocks.preamble": "Mastodonin avulla voidaan yleensä tarkastella minkä tahansa fediversumiin kuuluvan palvelimen sisältöä, ja olla yhteyksissä eri palvelinten käyttäjien kanssa. Nämä poikkeukset koskevat yksin tätä palvelinta.",
"about.domain_blocks.preamble": "Mastodonin avulla voi yleensä tarkastella minkä tahansa fediversumiin kuuluvan palvelimen sisältöä ja olla yhteyksissä eri palvelinten käyttäjien kanssa. Nämä poikkeukset koskevat yksin tätä palvelinta.",
"about.domain_blocks.silenced.explanation": "Et yleensä näe tämän palvelimen profiileja ja sisältöä, jollet erityisesti etsi juuri sitä tai liity siihen seuraamalla.",
"about.domain_blocks.silenced.title": "Rajoitettu",
"about.domain_blocks.suspended.explanation": "Mitään tämän palvelimen tietoja ei käsitellä, tallenneta eikä vaihdeta, mikä tekee vuorovaikutuksesta ja viestinnästä sen käyttäjien kanssa mahdotonta.",
@ -30,7 +30,7 @@
"account.endorse": "Suosittele profiilissasi",
"account.featured_tags.last_status_at": "Viimeisin julkaisu {date}",
"account.featured_tags.last_status_never": "Ei julkaisuja",
"account.featured_tags.title": "Käyttäjän {name} esille nostamat aihetunnisteet",
"account.featured_tags.title": "Käyttäjän {name} suosittelemat aihetunnisteet",
"account.follow": "Seuraa",
"account.follow_back": "Seuraa takaisin",
"account.followers": "Seuraajat",
@ -143,7 +143,7 @@
"community.column_settings.media_only": "Vain media",
"community.column_settings.remote_only": "Vain etätilit",
"compose.language.change": "Vaihda kieli",
"compose.language.search": "Hae kieliä...",
"compose.language.search": "Hae kieliä",
"compose.published.body": "Julkaisu lähetetty.",
"compose.published.open": "Avaa",
"compose.saved.body": "Julkaisu tallennettu.",
@ -228,8 +228,8 @@
"domain_pill.their_username": "Hänen yksilöllinen tunnisteensa omalla palvelimellaan. Eri palvelimilta on mahdollista löytää käyttäjiä, joilla on sama käyttäjänimi.",
"domain_pill.username": "Käyttäjänimi",
"domain_pill.whats_in_a_handle": "Mitä käyttäjätunnuksessa on?",
"domain_pill.who_they_are": "Koska käyttäjätunnukset kertovat, kuka ja missä joku on, voit olla vuorovaikutuksessa ihmisten kanssa kaikkialla sosiaalisessa verkossa, joka koostuu <button>ActivityPub-pohjaisista alustoista</button>.",
"domain_pill.who_you_are": "Koska käyttäjätunnuksesi kertoo, kuka ja missä olet, ihmiset voivat olla vaikutuksessa kanssasi kaikkialla sosiaalisessa verkossa, joka koostuu <button>ActivityPub-pohjaisista alustoista</button>.",
"domain_pill.who_they_are": "Koska käyttäjätunnukset kertovat, kuka ja missä joku on, voit olla vuorovaikutuksessa käyttäjien kanssa kaikkialla sosiaalisessa verkossa, joka koostuu <button>ActivityPub-pohjaisista alustoista</button>.",
"domain_pill.who_you_are": "Koska käyttäjätunnuksesi kertoo, kuka ja missä olet, käyttäjät voivat olla vaikutuksessa kanssasi kaikkialla sosiaalisessa verkossa, joka koostuu <button>ActivityPub-pohjaisista alustoista</button>.",
"domain_pill.your_handle": "Käyttäjätunnuksesi:",
"domain_pill.your_server": "Digitaalinen kotisi, jossa kaikki julkaisusi sijaitsevat. Etkö pidä tästä? Siirry palvelimelta toiselle milloin tahansa ja tuo myös seuraajasi mukanasi.",
"domain_pill.your_username": "Yksilöllinen tunnisteesi tällä palvelimella. Eri palvelimilta on mahdollista löytää käyttäjiä, joilla on sama käyttäjänimi.",
@ -246,7 +246,7 @@
"emoji_button.objects": "Esineet",
"emoji_button.people": "Ihmiset",
"emoji_button.recent": "Usein käytetyt",
"emoji_button.search": "Hae...",
"emoji_button.search": "Hae",
"emoji_button.search_results": "Hakutulokset",
"emoji_button.symbols": "Symbolit",
"emoji_button.travel": "Matkailu ja paikat",
@ -279,7 +279,7 @@
"errors.unexpected_crash.copy_stacktrace": "Kopioi pinon jäljitys leikepöydälle",
"errors.unexpected_crash.report_issue": "Ilmoita ongelmasta",
"explore.search_results": "Hakutulokset",
"explore.suggested_follows": "Henkilöt",
"explore.suggested_follows": "Käyttäjät",
"explore.title": "Selaa",
"explore.trending_links": "Uutiset",
"explore.trending_statuses": "Julkaisut",
@ -381,7 +381,7 @@
"keyboard_shortcuts.compose": "Kohdista kirjoituskenttään",
"keyboard_shortcuts.description": "Kuvaus",
"keyboard_shortcuts.direct": "Avaa yksityismainintojen sarake",
"keyboard_shortcuts.down": "Siirry listassa alaspäin",
"keyboard_shortcuts.down": "Siirry luettelossa eteenpäin",
"keyboard_shortcuts.enter": "Avaa julkaisu",
"keyboard_shortcuts.favourite": "Lisää julkaisu suosikkeihin",
"keyboard_shortcuts.favourites": "Avaa suosikkiluettelo",
@ -401,13 +401,13 @@
"keyboard_shortcuts.reply": "Vastaa julkaisuun",
"keyboard_shortcuts.requests": "Avaa seurantapyyntöjen luettelo",
"keyboard_shortcuts.search": "Kohdista hakukenttään",
"keyboard_shortcuts.spoilers": "Näytä/piilota sisältövaroituskenttä",
"keyboard_shortcuts.spoilers": "Näytä tai piilota sisältövaroituskenttä",
"keyboard_shortcuts.start": "Avaa Näin pääset alkuun -sarake",
"keyboard_shortcuts.toggle_hidden": "Näytä/piilota sisältövaroituksella merkitty teksti",
"keyboard_shortcuts.toggle_sensitivity": "Näytä/piilota media",
"keyboard_shortcuts.toggle_hidden": "Näytä tai piilota sisältövaroituksella merkitty teksti",
"keyboard_shortcuts.toggle_sensitivity": "Näytä tai piilota media",
"keyboard_shortcuts.toot": "Luo uusi julkaisu",
"keyboard_shortcuts.unfocus": "Poistu teksti-/hakukentästä",
"keyboard_shortcuts.up": "Siirry listassa ylöspäin",
"keyboard_shortcuts.unfocus": "Poistu kirjoitus- tai hakukentästä",
"keyboard_shortcuts.up": "Siirry luettelossa taaksepäin",
"lightbox.close": "Sulje",
"lightbox.compress": "Tiivis kuvankatselunäkymä",
"lightbox.expand": "Laajennettu kuvankatselunäkymä",
@ -415,7 +415,7 @@
"lightbox.previous": "Edellinen",
"limited_account_hint.action": "Näytä profiili joka tapauksessa",
"limited_account_hint.title": "Palvelimen {domain} moderaattorit ovat piilottaneet tämän profiilin.",
"link_preview.author": "Julkaissut {name}",
"link_preview.author": "Tehnyt {name}",
"link_preview.more_from_author": "Lisää tekijältä {name}",
"link_preview.shares": "{count, plural, one {{counter} julkaisu} other {{counter} julkaisua}}",
"lists.account.add": "Lisää listalle",
@ -453,7 +453,7 @@
"navigation_bar.bookmarks": "Kirjanmerkit",
"navigation_bar.community_timeline": "Paikallinen aikajana",
"navigation_bar.compose": "Luo uusi julkaisu",
"navigation_bar.direct": "Yksityiset maininnat",
"navigation_bar.direct": "Yksityismaininnat",
"navigation_bar.discover": "Löydä uutta",
"navigation_bar.domain_blocks": "Estetyt verkkotunnukset",
"navigation_bar.explore": "Selaa",
@ -505,6 +505,8 @@
"notification.update": "{name} muokkasi julkaisua",
"notification_requests.accept": "Hyväksy",
"notification_requests.dismiss": "Hylkää",
"notification_requests.maximize": "Suurenna",
"notification_requests.minimize_banner": "Pienennä suodatettujen ilmoitusten palkki",
"notification_requests.notifications_from": "Ilmoitukset käyttäjältä {name}",
"notification_requests.title": "Suodatetut ilmoitukset",
"notifications.clear": "Tyhjennä ilmoitukset",
@ -581,7 +583,7 @@
"onboarding.start.lead": "Uusi Mastodon-tilisi on nyt valmiina käyttöön. Kyseessä on ainutlaatuinen, hajautettu sosiaalisen median alusta, jolla sinä itse algoritmin sijaan määrität käyttökokemuksesi. Näin hyödyt Mastodonista eniten:",
"onboarding.start.skip": "Haluatko hypätä suoraan eteenpäin ilman alkuunpääsyohjeistuksia?",
"onboarding.start.title": "Olet tehnyt sen!",
"onboarding.steps.follow_people.body": "Mastodon perustuu sinua kiinnostavien henkilöjen julkaisujen seuraamiseen.",
"onboarding.steps.follow_people.body": "Mastodonissa on kyse kiinnostavien käyttäjien seuraamisesta.",
"onboarding.steps.follow_people.title": "Mukauta kotisyötettäsi",
"onboarding.steps.publish_status.body": "Tervehdi maailmaa sanoin, kuvin tai äänestyksin {emoji}",
"onboarding.steps.publish_status.title": "Laadi ensimmäinen julkaisusi",
@ -596,10 +598,10 @@
"password_confirmation.exceeds_maxlength": "Salasanan vahvistus ylittää salasanan enimmäispituuden",
"password_confirmation.mismatching": "Salasanan vahvistus ei täsmää",
"picture_in_picture.restore": "Laita se takaisin",
"poll.closed": "Suljettu",
"poll.closed": "Päättynyt",
"poll.refresh": "Päivitä",
"poll.reveal": "Näytä tulokset",
"poll.total_people": "{count, plural, one {# henkilö} other {# henkilöä}}",
"poll.total_people": "{count, plural, one {# käyttäjä} other {# käyttäjää}}",
"poll.total_votes": "{count, plural, one {# ääni} other {# ääntä}}",
"poll.vote": "Äänestä",
"poll.voted": "Äänestit tätä vastausta",
@ -608,7 +610,7 @@
"poll_button.remove_poll": "Poista äänestys",
"privacy.change": "Muuta julkaisun näkyvyyttä",
"privacy.direct.long": "Kaikki tässä julkaisussa mainitut",
"privacy.direct.short": "Tietyt henkilöt",
"privacy.direct.short": "Tietyt käyttäjät",
"privacy.private.long": "Vain seuraajasi",
"privacy.private.short": "Seuraajat",
"privacy.public.long": "Kuka tahansa Mastodonissa ja sen ulkopuolella",
@ -730,7 +732,7 @@
"status.delete": "Poista",
"status.detailed_status": "Yksityiskohtainen keskustelunäkymä",
"status.direct": "Mainitse @{name} yksityisesti",
"status.direct_indicator": "Yksityinen maininta",
"status.direct_indicator": "Yksityismaininta",
"status.edit": "Muokkaa",
"status.edited": "Viimeksi muokattu {date}",
"status.edited_x_times": "Muokattu {count, plural, one {{count} kerran} other {{count} kertaa}}",
@ -781,7 +783,7 @@
"status.unpin": "Irrota profiilista",
"subscribed_languages.lead": "Vain valituilla kielillä kirjoitetut julkaisut näkyvät koti- ja lista-aikajanoillasi muutoksen jälkeen. Älä valitse mitään, jos haluat nähdä julkaisuja kaikilla kielillä.",
"subscribed_languages.save": "Tallenna muutokset",
"subscribed_languages.target": "Vaihda tilatut kielet {target}",
"subscribed_languages.target": "Vaihda tilattuja kieliä käyttäjältä {target}",
"tabs_bar.home": "Koti",
"tabs_bar.notifications": "Ilmoitukset",
"time_remaining.days": "{number, plural, one {# päivä} other {# päivää}} jäljellä",
@ -793,7 +795,7 @@
"timeline_hint.resources.followers": "seuraajat",
"timeline_hint.resources.follows": "seuratut",
"timeline_hint.resources.statuses": "vanhemmat julkaisut",
"trends.counter_by_accounts": "{count, plural, one {{counter} henkilö} other {{counter} henkilöä}} {days, plural, one {viime päivänä} other {viimeisenä {days} päivänä}}",
"trends.counter_by_accounts": "{count, plural, one {{counter} käyttäjä} other {{counter} käyttäjää}} {days, plural, one {viime päivänä} other {viimeisenä {days} päivänä}}",
"trends.trending_now": "Suosittua nyt",
"ui.beforeunload": "Luonnos häviää, jos poistut Mastodonista.",
"units.short.billion": "{count} mrd.",
@ -818,7 +820,7 @@
"upload_modal.hint": "Napsauta tai vedä ympyrä esikatselussa valitaksesi keskipiste, joka näkyy aina pienoiskuvissa.",
"upload_modal.preparing_ocr": "Valmistellaan tekstintunnistusta…",
"upload_modal.preview_label": "Esikatselu ({ratio})",
"upload_progress.label": "Lähetetään...",
"upload_progress.label": "Lähetetään",
"upload_progress.processing": "Käsitellään…",
"username.taken": "Tämä käyttäjänimi on jo käytössä. Kokeile toista",
"video.close": "Sulje video",

View File

@ -505,6 +505,7 @@
"notification.update": "{name} rættaði ein post",
"notification_requests.accept": "Góðtak",
"notification_requests.dismiss": "Avvís",
"notification_requests.maximize": "Mesta",
"notification_requests.notifications_from": "Fráboðanir frá {name}",
"notification_requests.title": "Sáldaðar fráboðanir",
"notifications.clear": "Rudda fráboðanir",

View File

@ -505,6 +505,8 @@
"notification.update": "{name} editou unha publicación",
"notification_requests.accept": "Aceptar",
"notification_requests.dismiss": "Desbotar",
"notification_requests.maximize": "Maximizar",
"notification_requests.minimize_banner": "Minimizar o anuncio de notificacións filtradas",
"notification_requests.notifications_from": "Notificacións de {name}",
"notification_requests.title": "Notificacións filtradas",
"notifications.clear": "Limpar notificacións",

View File

@ -505,6 +505,8 @@
"notification.update": "{name} ערכו הודעה",
"notification_requests.accept": "לקבל",
"notification_requests.dismiss": "לבטל",
"notification_requests.maximize": "הגדלה למקסימום",
"notification_requests.minimize_banner": "להקטין את כותרת ההודעות המפולטרות",
"notification_requests.notifications_from": "התראות מ־ {name}",
"notification_requests.title": "התראות מסוננות",
"notifications.clear": "הסרת התראות",

View File

@ -160,7 +160,7 @@
"compose_form.poll.switch_to_multiple": "Szavazás megváltoztatása több választásosra",
"compose_form.poll.switch_to_single": "Szavazás megváltoztatása egyetlen választásosra",
"compose_form.poll.type": "Stílus",
"compose_form.publish": "Bejegyzés",
"compose_form.publish": "Közzététel",
"compose_form.publish_form": "Új bejegyzés",
"compose_form.reply": "Válasz",
"compose_form.save_changes": "Frissítés",
@ -505,6 +505,8 @@
"notification.update": "{name} szerkesztett egy bejegyzést",
"notification_requests.accept": "Elfogadás",
"notification_requests.dismiss": "Elvetés",
"notification_requests.maximize": "Maximalizálás",
"notification_requests.minimize_banner": "Szűrt értesítések sávjának minimalizálása",
"notification_requests.notifications_from": "{name} értesítései",
"notification_requests.title": "Szűrt értesítések",
"notifications.clear": "Értesítések törlése",

View File

@ -505,6 +505,8 @@
"notification.update": "{name} breytti færslu",
"notification_requests.accept": "Samþykkja",
"notification_requests.dismiss": "Afgreiða",
"notification_requests.maximize": "Hámarka",
"notification_requests.minimize_banner": "Minnka borða með síuðum tilkynningum",
"notification_requests.notifications_from": "Tilkynningar frá {name}",
"notification_requests.title": "Síaðar tilkynningar",
"notifications.clear": "Hreinsa tilkynningar",

View File

@ -505,6 +505,8 @@
"notification.update": "{name} ha modificato un post",
"notification_requests.accept": "Accetta",
"notification_requests.dismiss": "Ignora",
"notification_requests.maximize": "Ingrandisci",
"notification_requests.minimize_banner": "Minimizza il banner delle notifiche filtrate",
"notification_requests.notifications_from": "Notifiche da {name}",
"notification_requests.title": "Notifiche filtrate",
"notifications.clear": "Cancella le notifiche",

View File

@ -293,6 +293,7 @@
"filter_modal.select_filter.subtitle": "既存のカテゴリーを使用するか新規作成します",
"filter_modal.select_filter.title": "この投稿をフィルターする",
"filter_modal.title.status": "投稿をフィルターする",
"filtered_notifications_banner.pending_requests": "{count, plural, =0 {すべて完了しました} other {#人の通知がブロックされています}}",
"filtered_notifications_banner.title": "保留中の通知",
"firehose.all": "すべて",
"firehose.local": "このサーバー",
@ -489,6 +490,7 @@
"notification.update": "{name}さんが投稿を編集しました",
"notification_requests.accept": "受け入れる",
"notification_requests.dismiss": "無視",
"notification_requests.minimize_banner": "「保留中の通知」のバナーを最小化する",
"notification_requests.notifications_from": "{name}からの通知",
"notification_requests.title": "保留中の通知",
"notifications.clear": "通知を消去",

View File

@ -804,7 +804,7 @@
"upload_error.limit": "파일 업로드 제한에 도달했습니다.",
"upload_error.poll": "파일 업로드는 설문과 함께 쓸 수 없습니다.",
"upload_form.audio_description": "청각 장애인을 위한 설명",
"upload_form.description": "시각장애인 위한 설명",
"upload_form.description": "시각장애인이나 저시력자를 위한 설명",
"upload_form.edit": "수정",
"upload_form.thumbnail": "썸네일 변경",
"upload_form.video_description": "청각, 시각 장애인을 위한 설명",

View File

@ -505,6 +505,8 @@
"notification.update": "{name} heeft een bericht bewerkt",
"notification_requests.accept": "Accepteren",
"notification_requests.dismiss": "Afwijzen",
"notification_requests.maximize": "Maximaliseer",
"notification_requests.minimize_banner": "Banner met gefilterde meldingen minimaliseren",
"notification_requests.notifications_from": "Meldingen van {name}",
"notification_requests.title": "Gefilterde meldingen",
"notifications.clear": "Meldingen verwijderen",

View File

@ -29,6 +29,9 @@
"account.follows.empty": "ਇਹ ਵਰਤੋਂਕਾਰ ਹਾਲੇ ਕਿਸੇ ਨੂੰ ਫ਼ਾਲੋ ਨਹੀਂ ਕਰਦਾ ਹੈ।",
"account.go_to_profile": "ਪਰੋਫਾਇਲ ਉੱਤੇ ਜਾਓ",
"account.media": "ਮੀਡੀਆ",
"account.mute": "{name} ਨੂੰ ਮੌਨ ਕਰੋ",
"account.mute_notifications_short": "ਨੋਟਫਿਕੇਸ਼ਨਾਂ ਨੂੰ ਮੌਨ ਕਰੋ",
"account.mute_short": "ਮੌਨ ਕਰੋ",
"account.muted": "ਮੌਨ ਕੀਤੀਆਂ",
"account.mutual": "ਸਾਂਝੇ",
"account.no_bio": "ਕੋਈ ਵਰਣਨ ਨਹੀਂ ਦਿੱਤਾ।",

View File

@ -504,6 +504,8 @@
"notification.update": "{name} edytował(a) post",
"notification_requests.accept": "Akceptuj",
"notification_requests.dismiss": "Odrzuć",
"notification_requests.maximize": "Zmaksymalizuj",
"notification_requests.minimize_banner": "Zminimalizuj baner powiadomień filtrowanych",
"notification_requests.notifications_from": "Powiadomienia od {name}",
"notification_requests.title": "Powiadomienia filtrowane",
"notifications.clear": "Wyczyść powiadomienia",

View File

@ -505,6 +505,8 @@
"notification.update": "{name} editou uma publicação",
"notification_requests.accept": "Aceitar",
"notification_requests.dismiss": "Descartar",
"notification_requests.maximize": "Maximizar",
"notification_requests.minimize_banner": "Minimizar o cabeçalho das notificações filtradas",
"notification_requests.notifications_from": "Notificações de {name}",
"notification_requests.title": "Notificações filtradas",
"notifications.clear": "Limpar notificações",

View File

@ -129,6 +129,7 @@
"compose.language.change": "Поміняти язык",
"compose.language.search": "Глядати языкы...",
"compose.published.body": "Пост опубликованый.",
"compose.published.open": "Удкрыти",
"compose.saved.body": "Пост усокоченый.",
"compose_form.direct_message_warning_learn_more": "Читайте бульше",
"compose_form.encryption_warning": "Публикації на Mastodon не шіфрувут ся. Не шырьте чутливу інформацію через Mastodon.",

View File

@ -215,6 +215,7 @@
"domain_block_modal.title": "Blokovať doménu?",
"domain_block_modal.you_will_lose_followers": "Všetci tvoji nasledovatelia z tohto servera budú odstránení.",
"domain_block_modal.you_wont_see_posts": "Neuvidíš príspevky, ani oboznámenia od užívateľov na tomto serveri.",
"domain_pill.activitypub_like_language": "ActivityPub je ako jazyk, ktorým Mastodon hovorí s ostatnými sociálnymi sieťami.",
"domain_pill.server": "Server",
"domain_pill.their_server": "Ich digitálny domov, kde žijú všetky ich príspevky.",
"domain_pill.username": "Používateľské meno",
@ -449,12 +450,14 @@
"navigation_bar.security": "Zabezpečenie",
"not_signed_in_indicator.not_signed_in": "Ak chcete získať prístup k tomuto zdroju, prihláste sa.",
"notification.admin.report": "Účet {name} nahlásil {target}",
"notification.admin.report_statuses_other": "{name} nahlásil/a {target}",
"notification.admin.sign_up": "Nová registráciu účtu {name}",
"notification.favourite": "{name} hviezdičkuje váš príspevok",
"notification.follow": "{name} vás sleduje",
"notification.follow_request": "{name} vás žiada sledovať",
"notification.mention": "{name} vás spomína",
"notification.moderation-warning.learn_more": "Zisti viac",
"notification.moderation_warning.action_delete_statuses": "Niektoré z tvojich príspevkov boli odstránené.",
"notification.moderation_warning.action_disable": "Tvoj účet bol vypnutý.",
"notification.moderation_warning.action_silence": "Tvoj účet bol obmedzený.",
"notification.moderation_warning.action_suspend": "Tvoj účet bol pozastavený.",
@ -471,6 +474,7 @@
"notification_requests.title": "Filtrované oboznámenia",
"notifications.clear": "Vyčistiť upozornenia",
"notifications.clear_confirmation": "Určite chcete nenávratne odstrániť všetky svoje upozornenia?",
"notifications.clear_title": "Vyčistiť upozornenia?",
"notifications.column_settings.admin.report": "Nové hlásenia:",
"notifications.column_settings.admin.sign_up": "Nové registrácie:",
"notifications.column_settings.alert": "Upozornenia na ploche",
@ -632,9 +636,12 @@
"report.unfollow_explanation": "Tento účet sledujete. Ak už nechcete vidieť jeho príspevky vo svojom domovskom kanáli, prestaňte ho sledovať.",
"report_notification.attached_statuses": "{count, plural, one {{count} príspevok} few {{count} príspevky} other {{count} príspevkov}} ako príloha",
"report_notification.categories.legal": "Právne",
"report_notification.categories.legal_sentence": "nelegálny obsah",
"report_notification.categories.other": "Ostatné",
"report_notification.categories.other_sentence": "ostatné",
"report_notification.categories.spam": "Spam",
"report_notification.categories.violation": "Porušenie pravidla",
"report_notification.categories.violation_sentence": "porušenie pravidla",
"report_notification.open": "Otvoriť hlásenie",
"search.no_recent_searches": "Žiadne nedávne vyhľadávania",
"search.placeholder": "Hľadať",

View File

@ -505,6 +505,8 @@
"notification.update": "{name} përpunoi një postim",
"notification_requests.accept": "Pranoje",
"notification_requests.dismiss": "Hidhe tej",
"notification_requests.maximize": "Maksimizoje",
"notification_requests.minimize_banner": "Minimizo banderolë njoftimesh të filtruara",
"notification_requests.notifications_from": "Njoftime prej {name}",
"notification_requests.title": "Njoftime të filtruar",
"notifications.clear": "Spastroji njoftimet",

View File

@ -300,6 +300,7 @@
"filter_modal.select_filter.subtitle": "Mevcut bir kategoriyi kullan veya yeni bir tane oluştur",
"filter_modal.select_filter.title": "Bu gönderiyi süzgeçle",
"filter_modal.title.status": "Bir gönderi süzgeçle",
"filtered_notifications_banner.pending_requests": "Bildiğiniz {count, plural, =0 {hiç kimseden} one {bir kişiden} other {# kişiden}}",
"filtered_notifications_banner.title": "Filtrelenmiş bildirimler",
"firehose.all": "Tümü",
"firehose.local": "Bu sunucu",
@ -504,6 +505,8 @@
"notification.update": "{name} bir gönderiyi düzenledi",
"notification_requests.accept": "Onayla",
"notification_requests.dismiss": "Yoksay",
"notification_requests.maximize": "Büyüt",
"notification_requests.minimize_banner": "Filtrelenmiş bildirimler başlığını küçült",
"notification_requests.notifications_from": "{name} bildirimleri",
"notification_requests.title": "Filtrelenmiş bildirimler",
"notifications.clear": "Bildirimleri temizle",

View File

@ -300,6 +300,7 @@
"filter_modal.select_filter.subtitle": "Використати наявну категорію або створити нову",
"filter_modal.select_filter.title": "Фільтрувати цей допис",
"filter_modal.title.status": "Фільтрувати допис",
"filtered_notifications_banner.pending_requests": "Від {count, plural, =0 {жодної особи} one {однієї особи} few {# осіб} many {# осіб} other {# особи}}, котрих ви можете знати",
"filtered_notifications_banner.title": "Відфільтровані сповіщення",
"firehose.all": "Всі",
"firehose.local": "Цей сервер",
@ -473,10 +474,10 @@
"navigation_bar.security": "Безпека",
"not_signed_in_indicator.not_signed_in": "Ви повинні увійти, щоб отримати доступ до цього ресурсу.",
"notification.admin.report": "Скарга від {name} на {target}",
"notification.admin.report_account": "{name} повідомив(ла) про {count, plural, one {один допис} few {# дописи} many {# дописів} other {# дописів}} від {target} в категорії {category}",
"notification.admin.report_account_other": "{name} повідомив(ла) про {count, plural, one {один допис} few {# дописи} many {# дописів} other {# дописів}} від {target}",
"notification.admin.report_statuses": "{name} повідомив(ла) про {target} в категорії {category}",
"notification.admin.report_statuses_other": "{name} повідомив(ла) про {target}",
"notification.admin.report_account": "{name} повідомляє про {count, plural, one {один допис} few {# дописи} many {# дописів} other {# дописів}} від {target} в категорії {category}",
"notification.admin.report_account_other": "{name} повідомляє про {count, plural, one {один допис} few {# дописи} many {# дописів} other {# дописів}} від {target}",
"notification.admin.report_statuses": "{name} повідомляє про {target} в категорії {category}",
"notification.admin.report_statuses_other": "{name} повідомляє про {target}",
"notification.admin.sign_up": "{name} приєдналися",
"notification.favourite": "Ваш допис сподобався {name}",
"notification.follow": "{name} підписалися на вас",
@ -493,7 +494,7 @@
"notification.moderation_warning.action_suspend": "Ваш обліковий запис було заблоковано.",
"notification.own_poll": "Ваше опитування завершилося",
"notification.poll": "Опитування, в якому ви проголосували, завершено",
"notification.private_mention": "{name} приватно згадав(ла) вас",
"notification.private_mention": "{name} приватно згадує вас",
"notification.reblog": "{name} поширює ваш допис",
"notification.relationships_severance_event": "Втрачено з'єднання з {name}",
"notification.relationships_severance_event.account_suspension": "Адміністратор з {from} призупинив {target}, що означає, що ви більше не можете отримувати оновлення від них або взаємодіяти з ними.",
@ -504,6 +505,8 @@
"notification.update": "{name} змінює допис",
"notification_requests.accept": "Прийняти",
"notification_requests.dismiss": "Відхилити",
"notification_requests.maximize": "Розгорнути",
"notification_requests.minimize_banner": "Мінімізувати відфільтрований банер сповіщень",
"notification_requests.notifications_from": "Сповіщення від {name}",
"notification_requests.title": "Відфільтровані сповіщення",
"notifications.clear": "Очистити сповіщення",

View File

@ -505,6 +505,8 @@
"notification.update": "{name} đã sửa tút",
"notification_requests.accept": "Chấp nhận",
"notification_requests.dismiss": "Bỏ qua",
"notification_requests.maximize": "Tối đa",
"notification_requests.minimize_banner": "Tinh giản banner lọc thông báo",
"notification_requests.notifications_from": "Thông báo từ {name}",
"notification_requests.title": "Thông báo đã lọc",
"notifications.clear": "Xóa hết thông báo",

View File

@ -1,12 +1,12 @@
{
"about.blocks": "受限服务器",
"about.blocks": "被限制的服务器",
"about.contact": "联系方式:",
"about.disclaimer": "Mastodon 是自由的开源软件,商标由 Mastodon gGmbH 持有。",
"about.domain_blocks.no_reason_available": "原因不可用",
"about.domain_blocks.preamble": "通常来说,在 Mastodon 上,你可以浏览联邦宇宙中任何一台服务器上的内容,并且和上面的用户互动。但其中一些在本服务器上被设置为例外。",
"about.domain_blocks.silenced.explanation": "除非明确地搜索并关注对方,否则你不会看到来自此服务器的用户信息与内容。",
"about.domain_blocks.silenced.title": "访问受限",
"about.domain_blocks.suspended.explanation": "不处理、存储或交换来自本服务器的任何数据,不可能与本服务器上的用户进行任何交互或通信。",
"about.domain_blocks.silenced.title": "已隐藏",
"about.domain_blocks.suspended.explanation": "此服务器的数据将不会被处理、存储或者交换,本站也将无法和来自此服务器的用户互动或者交流。",
"about.domain_blocks.suspended.title": "已封禁",
"about.not_available": "此信息在当前服务器尚不可用。",
"about.powered_by": "由 {mastodon} 驱动的去中心化社交媒体",
@ -81,7 +81,7 @@
"admin.impact_report.instance_accounts": "将要删除的账户资料",
"admin.impact_report.instance_followers": "本实例用户即将丢失的关注者",
"admin.impact_report.instance_follows": "对方实例用户将会丢失的关注者",
"admin.impact_report.title": "权重一览",
"admin.impact_report.title": "影响摘要",
"alert.rate_limited.message": "请在 {retry_time, time, medium} 后重试。",
"alert.rate_limited.title": "频率受限",
"alert.unexpected.message": "发生了意外错误。",
@ -91,10 +91,10 @@
"audio.hide": "隐藏音频",
"block_modal.remote_users_caveat": "我们将要求服务器 {domain} 尊重您的决定。然而,我们无法保证对方一定遵从,因为某些服务器可能会以不同的方案处理屏蔽操作。公开嘟文仍然可能对未登录的用户可见。",
"block_modal.show_less": "隐藏",
"block_modal.show_more": "展开",
"block_modal.show_more": "显示更多",
"block_modal.they_cant_mention": "他们不能提及或关注你。",
"block_modal.they_cant_see_posts": "嘟文将被设置为互相不可见。",
"block_modal.they_will_know": "他们将会获知他们被屏蔽。",
"block_modal.they_cant_see_posts": "他们看不到你的嘟文,你也看不到他们的嘟文。",
"block_modal.they_will_know": "他们将能看到他们被屏蔽。",
"block_modal.title": "屏蔽该用户?",
"block_modal.you_wont_see_mentions": "你将无法看到提及他们的嘟文。",
"boost_modal.combo": "下次按住 {combo} 即可跳过此提示",
@ -171,28 +171,28 @@
"confirmations.block.confirm": "屏蔽",
"confirmations.delete.confirm": "删除",
"confirmations.delete.message": "你确定要删除这条嘟文吗?",
"confirmations.delete.title": "删除嘟文?",
"confirmations.delete.title": "确认删除嘟文?",
"confirmations.delete_list.confirm": "删除",
"confirmations.delete_list.message": "确定永久删除这个列表吗?",
"confirmations.delete_list.title": "删除列表?",
"confirmations.delete_list.title": "确认删除列表?",
"confirmations.discard_edit_media.confirm": "丢弃",
"confirmations.discard_edit_media.message": "您还有未保存的媒体描述或预览修改,仍要丢弃吗?",
"confirmations.edit.confirm": "编辑",
"confirmations.edit.message": "编辑此消息将会覆盖当前正在撰写的信息。仍要继续吗?",
"confirmations.edit.title": "覆盖嘟文?",
"confirmations.edit.title": "确认覆盖嘟文?",
"confirmations.logout.confirm": "退出登录",
"confirmations.logout.message": "确定要退出登录吗?",
"confirmations.logout.title": "退出登录?",
"confirmations.logout.title": "是否退出登录?",
"confirmations.mute.confirm": "隐藏",
"confirmations.redraft.confirm": "删除并重新编辑",
"confirmations.redraft.message": "确定删除这条嘟文并重写吗?所有相关的喜欢和转嘟都将丢失,嘟文的回复也会失去关联。",
"confirmations.redraft.title": "删除并重新嘟文?",
"confirmations.redraft.title": "是否删除并重新编辑嘟文?",
"confirmations.reply.confirm": "回复",
"confirmations.reply.message": "回复此消息将会覆盖当前正在编辑的信息。确定继续吗?",
"confirmations.reply.title": "覆盖嘟文?",
"confirmations.reply.title": "确认覆盖嘟文?",
"confirmations.unfollow.confirm": "取消关注",
"confirmations.unfollow.message": "你确定要取消关注 {name} 吗?",
"confirmations.unfollow.title": "取消关注用户?",
"confirmations.unfollow.title": "是否取消关注用户?",
"conversation.delete": "删除对话",
"conversation.mark_as_read": "标记为已读",
"conversation.open": "查看对话",
@ -505,11 +505,13 @@
"notification.update": "{name} 编辑了嘟文",
"notification_requests.accept": "接受",
"notification_requests.dismiss": "拒绝",
"notification_requests.maximize": "最大化",
"notification_requests.minimize_banner": "最小化被过滤通知的横幅",
"notification_requests.notifications_from": "来自 {name} 的通知",
"notification_requests.title": "通知(已过滤)",
"notifications.clear": "清空通知列表",
"notifications.clear_confirmation": "你确定要永久清空通知列表吗?",
"notifications.clear_title": "清空通知?",
"notifications.clear_title": "是否清空通知?",
"notifications.column_settings.admin.report": "新举报:",
"notifications.column_settings.admin.sign_up": "新注册:",
"notifications.column_settings.alert": "桌面通知",

View File

@ -505,6 +505,8 @@
"notification.update": "{name} 已編輯嘟文",
"notification_requests.accept": "接受",
"notification_requests.dismiss": "關閉",
"notification_requests.maximize": "最大化",
"notification_requests.minimize_banner": "最小化已過濾通知橫幅",
"notification_requests.notifications_from": "來自 {name} 之通知",
"notification_requests.title": "已過濾之通知",
"notifications.clear": "清除通知",

View File

@ -1,5 +1,6 @@
import { Map as ImmutableMap, List as ImmutableList, fromJS } from 'immutable';
import { blockAccountSuccess, muteAccountSuccess } from 'mastodon/actions/accounts';
import {
NOTIFICATION_REQUESTS_EXPAND_REQUEST,
NOTIFICATION_REQUESTS_EXPAND_SUCCESS,
@ -51,6 +52,14 @@ const removeRequest = (state, id) => {
return state.update('items', list => list.filterNot(item => item.get('id') === id));
};
const removeRequestByAccount = (state, account_id) => {
if (state.getIn(['current', 'item', 'account']) === account_id) {
state = state.setIn(['current', 'removed'], true);
}
return state.update('items', list => list.filterNot(item => item.get('account') === account_id));
};
export const notificationRequestsReducer = (state = initialState, action) => {
switch(action.type) {
case NOTIFICATION_REQUESTS_FETCH_SUCCESS:
@ -74,6 +83,10 @@ export const notificationRequestsReducer = (state = initialState, action) => {
case NOTIFICATION_REQUEST_ACCEPT_REQUEST:
case NOTIFICATION_REQUEST_DISMISS_REQUEST:
return removeRequest(state, action.id);
case blockAccountSuccess.type:
return removeRequestByAccount(state, action.payload.relationship.id);
case muteAccountSuccess.type:
return action.payload.relationship.muting_notifications ? removeRequestByAccount(state, action.payload.relationship.id) : state;
case NOTIFICATION_REQUEST_FETCH_REQUEST:
return state.set('current', initialState.get('current').set('isLoading', true));
case NOTIFICATION_REQUEST_FETCH_SUCCESS:

View File

@ -1,9 +1,8 @@
import type { GetThunkAPI } from '@reduxjs/toolkit';
import { createAsyncThunk } from '@reduxjs/toolkit';
// eslint-disable-next-line @typescript-eslint/no-restricted-imports
import { useDispatch, useSelector } from 'react-redux';
import type { BaseThunkAPI } from '@reduxjs/toolkit/dist/createAsyncThunk';
import type { AppDispatch, RootState } from './store';
export const useAppDispatch = useDispatch.withTypes<AppDispatch>();
@ -25,29 +24,20 @@ export const createAppAsyncThunk = createAsyncThunk.withTypes<{
rejectValue: AsyncThunkRejectValue;
}>();
type AppThunkApi = Pick<
BaseThunkAPI<
RootState,
unknown,
AppDispatch,
AsyncThunkRejectValue,
AppMeta,
AppMeta
>,
'getState' | 'dispatch'
>;
interface AppThunkOptions {
skipLoading?: boolean;
}
const createBaseAsyncThunk = createAsyncThunk.withTypes<{
interface AppThunkConfig {
state: RootState;
dispatch: AppDispatch;
rejectValue: AsyncThunkRejectValue;
fulfilledMeta: AppMeta;
rejectedMeta: AppMeta;
}>();
}
type AppThunkApi = Pick<GetThunkAPI<AppThunkConfig>, 'getState' | 'dispatch'>;
interface AppThunkOptions {
skipLoading?: boolean;
}
const createBaseAsyncThunk = createAsyncThunk.withTypes<AppThunkConfig>();
export function createThunk<Arg = void, Returned = void>(
name: string,

View File

@ -3086,6 +3086,11 @@ $ui-header-logo-wordmark-width: 99px;
.explore__search-header {
display: flex;
}
.explore__search-results {
border: 0;
border-radius: 0;
}
}
.icon-with-badge {
@ -7354,7 +7359,7 @@ a.status-card {
display: flex;
flex-shrink: 0;
@media screen and (max-width: $no-gap-breakpoint) {
@media screen and (max-width: $no-gap-breakpoint - 1px) {
border-right: 0;
border-left: 0;
}
@ -8076,16 +8081,17 @@ noscript {
.verified {
border: 1px solid rgba($valid-value-color, 0.5);
margin-top: -1px;
margin-inline: -1px;
&:first-child {
border-top-left-radius: 4px;
border-top-right-radius: 4px;
margin-top: 0;
}
&:last-child {
border-bottom-left-radius: 4px;
border-bottom-right-radius: 4px;
margin-bottom: -1px;
}
dt,
@ -10622,6 +10628,25 @@ noscript {
}
}
&__note {
&-label {
color: $dark-text-color;
font-size: 12px;
font-weight: 500;
text-transform: uppercase;
}
dd {
white-space: pre-line;
color: $secondary-text-color;
overflow: hidden;
line-clamp: 3; // Not yet supported in browers
display: -webkit-box; // The next 3 properties are needed
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
}
}
.display-name {
font-size: 15px;
line-height: 22px;

View File

@ -101,7 +101,9 @@ class LinkDetailsExtractor
end
def json
@json ||= root_array(Oj.load(@data)).compact.find { |obj| SUPPORTED_TYPES.include?(obj['@type']) } || {}
@json ||= root_array(Oj.load(@data))
.map { |node| JSON::LD::API.compact(node, 'https://schema.org') }
.find { |node| SUPPORTED_TYPES.include?(node['type']) } || {}
end
end

View File

@ -234,13 +234,17 @@ class Request
end
def body_with_limit(limit = 1.megabyte)
raise Mastodon::LengthValidationError if content_length.present? && content_length > limit
require_limit_not_exceeded!(limit)
contents = truncated_body(limit)
raise Mastodon::LengthValidationError if contents.bytesize > limit
raise Mastodon::LengthValidationError, "Body size exceeds limit of #{limit}" if contents.bytesize > limit
contents
end
def require_limit_not_exceeded!(limit)
raise Mastodon::LengthValidationError, "Content-Length #{content_length} exceeds limit of #{limit}" if content_length.present? && content_length > limit
end
end
if ::HTTP::Response.methods.include?(:body_with_limit) && !Rails.env.production?

View File

@ -1,10 +1,11 @@
# frozen_string_literal: true
class GroupedNotificationsPresenter < ActiveModelSerializers::Model
def initialize(grouped_notifications)
def initialize(grouped_notifications, options = {})
super()
@grouped_notifications = grouped_notifications
@options = options
end
def notification_groups
@ -16,6 +17,28 @@ class GroupedNotificationsPresenter < ActiveModelSerializers::Model
end
def accounts
@grouped_notifications.flat_map(&:sample_accounts).uniq(&:id)
@accounts ||= begin
if partial_avatars?
@grouped_notifications.map { |group| group.sample_accounts.first }.uniq(&:id)
else
@grouped_notifications.flat_map(&:sample_accounts).uniq(&:id)
end
end
end
def partial_accounts
@partial_accounts ||= begin
if partial_avatars?
@grouped_notifications.flat_map { |group| group.sample_accounts[1...] }.uniq(&:id).filter { |account| accounts.exclude?(account) }
else
[]
end
end
end
private
def partial_avatars?
@options[:expand_accounts] == 'partial_avatars'
end
end

View File

@ -1,7 +1,22 @@
# frozen_string_literal: true
class REST::DedupNotificationGroupSerializer < ActiveModel::Serializer
class PartialAccountSerializer < REST::AccountSerializer
# This is a hack to reset ActiveModel::Serializer internals and only expose the attributes
# we care about.
self._attributes_data = {}
self._reflections = []
self._links = []
attributes :id, :acct, :locked, :bot, :url, :avatar, :avatar_static
end
has_many :accounts, serializer: REST::AccountSerializer
has_many :partial_accounts, serializer: PartialAccountSerializer, if: :return_partial_accounts?
has_many :statuses, serializer: REST::StatusSerializer
has_many :notification_groups, serializer: REST::NotificationGroupSerializer
def return_partial_accounts?
instance_options[:expand_accounts] == 'partial_avatars'
end
end

View File

@ -7,6 +7,7 @@ class AfterBlockService < BaseService
clear_home_feed!
clear_list_feeds!
clear_notification_requests!
clear_notifications!
clear_conversations!
end
@ -28,4 +29,8 @@ class AfterBlockService < BaseService
def clear_notifications!
Notification.where(account: @account).where(from_account: @target_account).in_batches.delete_all
end
def clear_notification_requests!
NotificationRequest.where(account: @account, from_account: @target_account).destroy_all
end
end

View File

@ -14,6 +14,7 @@
wrapper: :with_label
.fields-row__column.fields-row__column-6.fields-group
= f.input :min_status_age,
disabled: !@policy.enabled?,
collection: AccountStatusesCleanupPolicy::ALLOWED_MIN_STATUS_AGE.map(&:to_i),
hint: false,
include_blank: false,
@ -28,11 +29,13 @@
.fields-row
.fields-row__column.fields-row__column-6.fields-group
= f.input :keep_pinned,
disabled: !@policy.enabled?,
hint: t('statuses_cleanup.keep_pinned_hint'),
label: t('statuses_cleanup.keep_pinned'),
wrapper: :with_label
.fields-row__column.fields-row__column-6.fields-group
= f.input :keep_direct,
disabled: !@policy.enabled?,
hint: t('statuses_cleanup.keep_direct_hint'),
label: t('statuses_cleanup.keep_direct'),
wrapper: :with_label
@ -40,11 +43,13 @@
.fields-row
.fields-row__column.fields-row__column-6.fields-group
= f.input :keep_self_fav,
disabled: !@policy.enabled?,
hint: t('statuses_cleanup.keep_self_fav_hint'),
label: t('statuses_cleanup.keep_self_fav'),
wrapper: :with_label
.fields-row__column.fields-row__column-6.fields-group
= f.input :keep_self_bookmark,
disabled: !@policy.enabled?,
hint: t('statuses_cleanup.keep_self_bookmark_hint'),
label: t('statuses_cleanup.keep_self_bookmark'),
wrapper: :with_label
@ -52,11 +57,13 @@
.fields-row
.fields-row__column.fields-row__column-6.fields-group
= f.input :keep_polls,
disabled: !@policy.enabled?,
hint: t('statuses_cleanup.keep_polls_hint'),
label: t('statuses_cleanup.keep_polls'),
wrapper: :with_label
.fields-row__column.fields-row__column-6.fields-group
= f.input :keep_media,
disabled: !@policy.enabled?,
hint: t('statuses_cleanup.keep_media_hint'),
label: t('statuses_cleanup.keep_media'),
wrapper: :with_label
@ -66,12 +73,14 @@
.fields-row
.fields-row__column.fields-row__column-6.fields-group
= f.input :min_favs,
disabled: !@policy.enabled?,
hint: t('statuses_cleanup.min_favs_hint'),
input_html: { min: 1, placeholder: t('statuses_cleanup.ignore_favs') },
label: t('statuses_cleanup.min_favs'),
wrapper: :with_label
.fields-row__column.fields-row__column-6.fields-group
= f.input :min_reblogs,
disabled: !@policy.enabled?,
hint: t('statuses_cleanup.min_reblogs_hint'),
input_html: { min: 1, placeholder: t('statuses_cleanup.ignore_reblogs') },
label: t('statuses_cleanup.min_reblogs'),

View File

@ -232,6 +232,7 @@ be:
update_custom_emoji: Абнавіць адвольныя эмодзі
update_domain_block: Актуалізаваць блакіроўку дамена
update_ip_block: Абнавіць IP правіла
update_report: Абнавіць скаргу
update_status: Абнавіць допіс
update_user_role: Абнавіць ролю
actions:
@ -299,6 +300,7 @@ be:
filter_by_action: Фільтраваць па дзеянню
filter_by_user: Адфільтраваць па карыстальніку
title: Аўдыт
unavailable_instance: "(імя дамена недаступнае)"
announcements:
destroyed_msg: Аб'ява паспяхова выдалена!
edit:
@ -485,6 +487,9 @@ be:
title: Рэкамендацыі падпісак
unsuppress: Аднавіць рэкамендацыі падпісак
instances:
audit_log:
title: Нядаўнія журналы аўдыту
view_all: Праглядзець поўныя журналы аўдыту
availability:
description_html:
few: Калі дастаўка на дамен не атрымоўваецца праз <strong>%{count} іншыя дні</strong>, далейшыя спробы дастаўкі не будуць зроблены, пакуль не будзе атрымана дастаўка <em>з</em> дамена.
@ -661,6 +666,7 @@ be:
report: 'Скарга #%{id}'
reported_account: Уліковы запіс парушальніка
reported_by: Адпраўнік скаргі
reported_with_application: Паведамлена праз праграму
resolved: Вырашана
resolved_msg: Скарга была паспяхова вырашана!
skip_to_actions: Прапусціць дзеянні
@ -907,7 +913,23 @@ be:
action: Для падрабязнасцей націсніце тут
message_html: "<strong>Ваша сховішча не наладжана. Прыватнасць карыстальнікаў пад пагрозай.</strong>"
tags:
moderation:
not_trendable: Не ў трэндзе
not_usable: Непрыгодныя
pending_review: Чакае праверкі
review_requested: Патрабуюць прагледжвання
reviewed: Прагледжаныя
title: Стан
trendable: У трэндзе
unreviewed: Непрагледжаныя
usable: Прыгодныя
name: Назва
newest: Спачатку новыя
oldest: Спачатку старыя
reset: Скінуць
review: Стан праверкі
search: Пошук
title: Хэштэгі
updated_msg: Налады хэштэгаў паспяхова змененыя
title: Адміністрацыя
trends:

View File

@ -232,6 +232,7 @@ cs:
update_custom_emoji: Aktualizovat vlastní emoji
update_domain_block: Změnit blokaci domény
update_ip_block: Aktualizovat pravidlo IP
update_report: Upravit hlášení
update_status: Aktualizovat Příspěvek
update_user_role: Aktualizovat roli
actions:
@ -486,6 +487,9 @@ cs:
title: Doporučená sledování
unsuppress: Obnovit doporučení sledování
instances:
audit_log:
title: Nedávné protokoly auditu
view_all: Zobrazit úplné protokoly auditu
availability:
description_html:
few: Pokud doručování na doménu selže ve <strong>%{count} různých dnech</strong>, nebudou činěny žádné další pokusy o doručení, dokud nedorazí doručení <em>od</em> domény.
@ -662,6 +666,7 @@ cs:
report: 'Hlášení #%{id}'
reported_account: Nahlášený účet
reported_by: Nahlášeno uživatelem
reported_with_application: Nahlášeno aplikací
resolved: Vyřešeno
resolved_msg: Hlášení úspěšně vyřešeno!
skip_to_actions: Přeskočit k akcím
@ -908,7 +913,23 @@ cs:
action: Pro více informací se podívejte zde
message_html: "<strong>Váš object storage je špatně nakonfigurován. Soukromí vašich uživatelů je ohroženo.</strong>"
tags:
moderation:
not_trendable: Netrendovatelné
not_usable: Nepoužitelné
pending_review: Čeká na posouzení
review_requested: Posouzení vyžádáno
reviewed: Posouzené
title: Stav
trendable: Trendovatelné
unreviewed: Neposouzené
usable: Použitelné
name: Název
newest: Nejnovější
oldest: Nejstarší
reset: Resetovat
review: Stav posouzení
search: Hledat
title: Hashtagy
updated_msg: Nastavení hashtagů bylo úspěšně aktualizováno
title: Administrace
trends:

View File

@ -17,11 +17,11 @@ cy:
zero: Dilynwyr
following: Yn dilyn
instance_actor_flash: Mae'r cyfrif hwn yn actor rhithwir sy'n cael ei ddefnyddio i gynrychioli'r gweinydd ei hun ac nid unrhyw ddefnyddiwr unigol. Fe'i defnyddir at ddibenion ffederasiwn ac ni ddylid ei atal.
last_active: y diweddaraf
last_active: gweithgar ddiwethaf
link_verified_on: Gwiriwyd perchnogaeth y ddolen yma ar %{date}
nothing_here: Does dim byd yma!
pin_errors:
following: Rhaid i chi fod yn dilyn yn barod y person rydych am ei gymeradwyo
following: Rhaid i chi fod yn dilyn y person rydych am ei gymeradwyo, yn barod.
posts:
few: Postiadau
many: Postiadau
@ -503,6 +503,9 @@ cy:
title: Dilyn yr argymhellion
unsuppress: Adfer argymhelliad dilyn
instances:
audit_log:
title: Cofnodion Archwilio Diweddar
view_all: Gweld y cofnodion archwilio llawn
availability:
description_html:
few: Os bydd anfon i'r parth yn methu ar <strong>%{count} o ddiwrnodau gwahanol</strong> heb lwyddo, ni fydd unrhyw ymdrechion dosbarthu pellach yn cael eu gwneud oni bai y bydd danfoniad yn cael ei dderbyn <em>o'r</em> parth.
@ -938,7 +941,23 @@ cy:
action: Ewch yma am fwy o wybodaeth
message_html: "<strong>Mae eich storfa gwrthrychau wedi'i cham ffurfweddu. Mae preifatrwydd eich defnyddwyr mewn perygl.</strong>"
tags:
moderation:
not_trendable: Ddim yn dueddol
not_usable: Ddim yn ddefnyddiadwy
pending_review: O dan ystyriaeth
review_requested: Gofynnwyd am adolygiad
reviewed: Adolygwyd
title: Statws
trendable: Tueddadwy
unreviewed: Heb ei adolygu
usable: Defnyddiadwy
name: Enw
newest: Mwyaf newydd
oldest: Hynaf
reset: Ailosod
review: Adolygu statws
search: Chwilio
title: Hashnodau
updated_msg: Gosodiadau hashnodau wedi'i diweddaru'n llwyddiannus
title: Gweinyddiaeth
trends:

View File

@ -642,6 +642,7 @@ da:
report: 'Anmeldelse #%{id}'
reported_account: Anmeldt konto
reported_by: Anmeldt af
reported_with_application: Rapporteret via applikation
resolved: Løst
resolved_msg: Anmeldelse løst!
skip_to_actions: Overspring til foranstaltninger
@ -887,8 +888,8 @@ da:
moderation:
not_trendable: Ikke trendegnet
not_usable: Ikke brugbar
pending_review: Afventer revision
review_requested: Revision anmodet
pending_review: Afventer gennemgang
review_requested: Gennemgang ønsket
reviewed: Revideret
title: Status
trendable: Trendegnet
@ -898,7 +899,7 @@ da:
newest: Seneste
oldest: Ældste
reset: Nulstil
review: Revisionsstatus
review: Gennmgangsstatus
search: Søg
title: Hashtags
updated_msg: Hashtag-indstillinger opdateret
@ -923,7 +924,7 @@ da:
usage_comparison: Delt %{today} gange i dag, sammenlignet med %{yesterday} i går
not_allowed_to_trend: Ikke tilladt at trende
only_allowed: Kun tilladte
pending_review: Afventer revision
pending_review: Afventer gennemgang
preview_card_providers:
allowed: Links fra denne udgiver kan trende
description_html: Disse er domæner, hvorfra links ofte deles på serveren. Links vil ikke trende offentligt, medmindre man har godkendt domænet for linket. Godkendelse/afvisning indbefatter underdomæner.
@ -1023,14 +1024,14 @@ da:
body: Nye Mastodon-versioner er udgivet. Opgradering bør overvejes!
subject: Nye Mastodon-versioner er tilgængelige til %{instance}!
new_trends:
body: 'Flg. emner kræver revision, inden de kan vises offentligt:'
body: 'Flg. emner kræver gennemgang, inden de kan vises offentligt:'
new_trending_links:
title: Populære links
new_trending_statuses:
title: Populære opslag
new_trending_tags:
title: Populære hashtags
subject: Nye tendenser klar til revision på %{instance}
subject: Nye tendenser klar til gennemgang på %{instance}
aliases:
add_new: Opret alias
created_msg: Nyt alias oprettet. Du kan nu påbegynde flytningen fra den gamle konto.

View File

@ -1130,7 +1130,7 @@ de:
new_confirmation_instructions_sent: In wenigen Minuten wirst du eine neue E-Mail mit dem Bestätigungslink erhalten!
title: Überprüfe dein E-Mail-Postfach
sign_in:
preamble_html: Melde dich mit deinen Zugangsdaten für <strong>%{domain}</strong> an. Solltest du dein Konto auf einem anderen Server registriert haben, ist eine Anmeldung hier nicht möglich.
preamble_html: Melde dich mit deinen Zugangsdaten für <strong>%{domain}</strong> an. Falls dein Konto auf einem anderen Server erstellt wurde, ist eine Anmeldung hier nicht möglich.
title: Bei %{domain} anmelden
sign_up:
manual_review: Registrierungen für den Server %{domain} werden manuell durch unsere Moderator*innen überprüft. Um uns dabei zu unterstützen, schreibe etwas über dich und sage uns, weshalb du ein Konto auf %{domain} anlegen möchtest.

View File

@ -83,6 +83,7 @@ be:
access_denied: Уласнік рэсурсу або сэрвер аўтарызацыі адхіліў ваш запыт.
credential_flow_not_configured: Resource Owner Password Credentials flow не прайшоў з-за таго, што ўласцівасць Doorkeeper.configure.resource_owner_from_credentials была не вызначана.
invalid_client: Збой аўтэнтыфікацыі кліента з-за невядомага кліента, адсутнасці аўтэнтыфікацыі кліента або метаду аўтэнтыфікацыі, які не падтрымліваецца.
invalid_code_challenge_method: Метад праверкі кода павінен быць S256, просты тэкст не падтрымліваецца.
invalid_grant: Прадастаўлены дазвол на аўтарызацыю несапраўдны, пратэрмінованы, быў адкліканы, не адпавядае URI перанакіравання, які выкарыстоўваецца ў запыце аўтарызацыі або быў выдадзены іншаму кліенту.
invalid_redirect_uri: Прадстаўлены URI перанакіравання не сапраўдны.
invalid_request:

View File

@ -20,7 +20,7 @@ hu:
applications:
buttons:
authorize: Hitelesítés
cancel: Mégsem
cancel: Mégse
destroy: Törlés
edit: Szerkesztés
submit: Elküldés
@ -51,20 +51,20 @@ hu:
application_id: Ügyfélkulcs
callback_urls: Visszahívási URL-ek
scopes: Hatáskörök
secret: Ügyfél titkos kulcs
secret: Ügyféltitok
title: 'Alkalmazás: %{name}'
authorizations:
buttons:
authorize: Hitelesítés
authorize: Engedélyezés
deny: Tiltás
error:
title: Hiba történt
new:
prompt_html: "%{client_name} szeretné elérni a fiókodat. Ez egy harmadik féltől származó alkalmazás. <strong>Ha nem bízol meg benne, ne addj felhatalmazást neki.</strong>"
review_permissions: Jogosultságok áttekintése
title: Hitelesítés szükséges
title: Engedélyezés szükséges
show:
title: Másold le ezt az engedélyező kódot és írd be az alkalmazásba.
title: Másold le ezt az engedélyezési kódot és írd be az alkalmazásba.
authorized_applications:
buttons:
revoke: Visszavonás
@ -83,6 +83,7 @@ hu:
access_denied: Az erőforrás tulajdonosa vagy az engedélyező kiszolgáló elutasította a kérést.
credential_flow_not_configured: Az erőforrás tulajdonos jelszóadatainak átadása megszakadt, mert a Doorkeeper.configure.resource_owner_from_credentials beállítatlan.
invalid_client: A kliens hitelesítése megszakadt, mert ismeretlen a kliens, a kliens nem küldött hitelesítést, vagy a hitelesítés módja nem támogatott.
invalid_code_challenge_method: A kódkihívási módszernek S256-nak kell lennie, az egyszerű kód nem támogatott.
invalid_grant: A biztosított hitelesítés érvénytelen, lejárt, visszavont, vagy nem egyezik a hitelesítési kérésben használt URI-val, vagy más kliensnek címezték.
invalid_redirect_uri: Az átirányító URI nem valós.
invalid_request:

View File

@ -17,7 +17,7 @@ fi:
link_verified_on: Tämän linkin omistus on tarkastettu %{date}
nothing_here: Täällä ei ole mitään!
pin_errors:
following: Sinun täytyy seurata henkilöä jota haluat tukea
following: Sinun täytyy seurata yttäjää, jota haluat tukea
posts:
one: Julkaisu
other: viestiä
@ -632,7 +632,7 @@ fi:
create_and_resolve: Ratkaise ja lisää muistiinpano
create_and_unresolve: Avaa uudelleen ja lisää muistiinpano
delete: Poista
placeholder: Kuvaile tehtyjä toimia tai lisää muita käyttäjään liittyviä merkintöjä...
placeholder: Kuvaile tehtyjä toimia tai lisää muita käyttäjään liittyviä merkintöjä
title: Muistiinpanot
notes_description_html: Tarkastele ja jätä muistiinpanoja muille moderaattoreille ja itsellesi tulevaisuuteen
processed_msg: Raportin nro %{id} käsittely onnistui
@ -771,7 +771,7 @@ fi:
public_timelines: Julkiset aikajanat
publish_discovered_servers: Julkaise löydetyt palvelimet
publish_statistics: Julkaise tilastot
title: Löydettävyys
title: Löytäminen
trends: Trendit
domain_blocks:
all: Kaikille
@ -838,7 +838,7 @@ fi:
delete_statuses: "%{name} poisti käyttäjän %{target} julkaisut"
disable: "%{name} jäädytti %{target} tilin"
mark_statuses_as_sensitive: "%{name} merkitsi käyttäjän %{target} julkaisut arkaluonteisiksi"
none: "%{name} lähetti varoituksen henkilölle %{target}"
none: "%{name} lähetti varoituksen käyttäjälle %{target}"
sensitive: "%{name} merkitsi käyttäjän %{target} tilin arkaluonteiseksi"
silence: "%{name} rajoitti käyttäjän %{target} tiliä"
suspend: "%{name} jäädytti käyttäjän %{target} tilin"
@ -918,8 +918,8 @@ fi:
publishers:
no_publisher_selected: Julkaisijoita ei muutettu, koska yhtään ei ollut valittuna
shared_by_over_week:
one: Jakanut yksi henkilö viimeisen viikon aikana
other: Jakanut %{count} henkilöä viimeisen viikon aikana
one: Jakanut yksi käyttäjä viimeisen viikon aikana
other: Jakanut %{count} käyttäjää viimeisen viikon aikana
title: Suositut linkit
usage_comparison: Jaettu tänään %{today} kertaa verrattuna eilisen %{yesterday} kertaan
not_allowed_to_trend: Ei saa trendata
@ -951,7 +951,7 @@ fi:
tag_servers_dimension: Suosituimmat palvelimet
tag_servers_measure: eri palvelimet
tag_uses_measure: käyttökerrat yhteensä
description_html: Nämä aihetunnisteet näkyvät parhaillaan monissa julkaisuissa, jotka palvelimesi näkee. Tämä luettelo voi auttaa käyttäjiäsi selvittämään, mistä ihmiset puhuvat eniten juuri nyt. Mitkään aihetunnisteet ei näy julkisesti ennen kuin hyväksyt ne.
description_html: Nämä aihetunnisteet näkyvät parhaillaan monissa julkaisuissa, jotka palvelimesi näkee. Tämä luettelo voi auttaa käyttäjiäsi selvittämään, mistä puhutaan eniten juuri nyt. Mitkään aihetunnisteet ei näy julkisesti ennen kuin hyväksyt ne.
listable: Voi ehdottaa
no_tag_selected: Tunnisteita ei muutettu, koska yhtään ei ollut valittuna
not_listable: Ei ehdoteta
@ -964,8 +964,8 @@ fi:
usable: Voi käyttää
usage_comparison: Käytetty tänään %{today} kertaa, verrattuna elisen %{yesterday} kertaan
used_by_over_week:
one: Käyttänyt yksi henkilö viimeisen viikon aikana
other: Käyttänyt %{count} henkilöä viimeisen viikon aikana
one: Käyttänyt yksi käyttäjä viimeisen viikon aikana
other: Käyttänyt %{count} käyttäjää viimeisen viikon aikana
title: Trendit
trending: Trendaus
warning_presets:
@ -1043,8 +1043,8 @@ fi:
advanced_web_interface: Edistynyt selainkäyttöliittymä
advanced_web_interface_hint: 'Jos haluat hyödyntää näytön koko leveyttä, edistyneen selainkäyttöliittymän avulla voit määrittää useita erilaisia sarakkeita, niin näet kerralla niin paljon tietoa kuin haluat: kotisyöte, ilmoitukset, yleinen aikajana, mikä tahansa määrä listoja ja aihetunnisteita.'
animations_and_accessibility: Animaatiot ja saavutettavuus
confirmation_dialogs: Vahvistusvalinnat
discovery: Löydettävyys
confirmation_dialogs: Vahvistusikkunat
discovery: Löytäminen
localization:
body: Mastodonin ovat kääntäneet vapaaehtoiset.
guide_link: https://crowdin.com/project/mastodon
@ -1092,7 +1092,7 @@ fi:
dont_have_your_security_key: Eikö sinulla ole suojausavainta?
forgot_password: Unohditko salasanasi?
invalid_reset_password_token: Salasanan palautustunnus on virheellinen tai vanhentunut. Pyydä uusi.
link_to_otp: Syötä puhelimesi kaksivaiheisen todennuksen koodi tai palautuskoodi
link_to_otp: Syötä kaksivaiheisen todennuksen tunnusluku puhelimestasi tai palautuskoodi
link_to_webauth: Käytä suojausavaintasi
log_in_with: Kirjaudu käyttäen
login: Kirjaudu sisään
@ -1134,7 +1134,7 @@ fi:
title: Kirjaudu palvelimelle %{domain}
sign_up:
manual_review: Palvelimen %{domain} ylläpito tarkastaa rekisteröitymiset käsin. Helpottaaksesi rekisteröitymisesi käsittelyä kerro hieman itsestäsi ja siitä, miksi haluat luoda käyttäjätilin palvelimelle %{domain}.
preamble: Kun sinulla on tili tällä Mastodon-palvelimella, voit seurata kaikkia muita verkossa olevia henkilöitä riippumatta siitä, missä heidän tilinsä on.
preamble: Kun sinulla on tili tällä Mastodon-palvelimella, voit seurata kaikkia muita verkossa olevia käyttäjiä riippumatta siitä, missä heidän tilinsä on.
title: Otetaan %{domain} käyttöösi.
status:
account_status: Tilin tila
@ -1224,7 +1224,7 @@ fi:
invalid_domain: ei ole kelvollinen verkkotunnus
edit_profile:
basic_information: Perustiedot
hint_html: "<strong>Mukauta, mitä ihmiset näkevät julkisessa profiilissasi ja julkaisujesi vieressä.</strong> Ihmiset seuraavat sinua takaisin ja ovat kanssasi vuorovaikutuksessa todennäköisemmin, kun sinulla on täytetty profiili ja profiilikuva."
hint_html: "<strong>Mukauta, mitä ihmiset näkevät julkisessa profiilissasi ja julkaisujesi vieressä.</strong> Sinua seurataan takaisin ja kanssasi ollaan vuorovaikutuksessa todennäköisemmin, kun sinulla on täytetty profiili ja profiilikuva."
other: Muut
errors:
'400': Lähettämäsi pyyntö oli virheellinen tai muotoiltu virheellisesti.
@ -1249,7 +1249,7 @@ fi:
date: Päiväys
download: Lataa arkisto
hint_html: Voit pyytää arkistoa omista <strong>julkaisuista ja mediasta</strong>. Viedyt tiedot ovat ActivityPub-muodossa, ja ne voi lukea millä tahansa yhteensopivalla ohjelmalla. Voit pyytää arkistoa 7 päivän välein.
in_progress: Arkistoa kootaan...
in_progress: Arkistoa kootaan
request: Pyydä arkisto
size: Koko
blocks: Estot
@ -1262,8 +1262,8 @@ fi:
featured_tags:
add_new: Lisää uusi
errors:
limit: Olet nostanut esille jo enimmäismäärän aihetunnisteita
hint_html: "<strong>Nosta tärkeimmät aihetunnisteesi esille profiilissasi.</strong> Erinomainen työkalu, jolla pidät kirjaa luovista teoksistasi ja pitkäaikaisista projekteistasi. Esille nostamasi aihetunnisteet ovat näyttävällä paikalla profiilissasi ja mahdollistavat nopean pääsyn julkaisuihisi."
limit: Suosittelet jo aihetunnisteiden enimmäismäärää
hint_html: "<strong>Suosittele tärkeimpiä aihetunnisteitasi profiilissasi.</strong> Erinomainen työkalu, jolla pidät kirjaa luovista teoksistasi ja pitkäaikaisista projekteistasi. Suosittelemasi aihetunnisteet ovat näyttävällä paikalla profiilissasi ja mahdollistavat nopean pääsyn julkaisuihisi."
filters:
contexts:
account: Profiilit
@ -1359,7 +1359,7 @@ fi:
following_html: Olet aikeissa <strong>seurata</strong> kaikkiaan <strong>%{total_items} tiliä</strong> tiedostosta <strong>%{filename}</strong>.
lists_html: Olet aikeissa lisätä <strong>listoihisi</strong> kaikkiaan <strong>%{total_items} tiliä</strong> tiedostosta <strong>%{filename}</strong>. Uusia listoja luodaan, jos sopivaa kohdelistaa ei ole olemassa.
muting_html: Olet aikeissa <strong>mykistää</strong> kaikkiaan <strong>%{total_items} tiliä</strong> tiedostosta <strong>%{filename}</strong>.
preface: Voit tuoda toiselta palvelimelta viemiäsi tietoja, kuten seuraamiesi tai estämiesi henkilöiden luettelon.
preface: Voit tuoda toiselta palvelimelta viemiäsi tietoja, kuten seuraamiesi tai estämiesi käyttäjien luettelon.
recent_imports: Viimeksi tuotu
states:
finished: Valmis
@ -1386,7 +1386,7 @@ fi:
domain_blocking: Verkkotunnusten estoluettelo
following: Seurattujen luettelo
lists: Listat
muting: Mykistettyjen luettelo
muting: Mykistysluettelo
upload: Lähetä
invites:
delete: Poista käytöstä
@ -1480,7 +1480,7 @@ fi:
title: Moderointi
move_handler:
carry_blocks_over_text: Tämä käyttäjä siirtyi paikasta %{acct}, jonka olit estänyt.
carry_mutes_over_text: Tämä käyttäjä siirtyi tililtä %{acct}, jonka olet mykistänyt.
carry_mutes_over_text: Tämä käyttäjä muutti tilistä %{acct}, jonka olet mykistänyt.
copy_account_note_text: 'Tämä käyttäjä siirtyi tililtä %{acct}. Nämä olivat muistiinpanosi hänestä:'
navigation:
toggle_menu: Avaa/sulje valikko
@ -1569,7 +1569,7 @@ fi:
reach: Tavoittavuus
reach_hint_html: Määritä, haluatko tulla uusien käyttäjien löytämäksi ja seuraamaksi. Haluatko julkaisujesi näkyvän Selaa-sivulla? Haluatko muiden käyttäjien näkevän sinut seurantasuosituksissaan? Haluatko hyväksyä kaikki uudet seuraajat automaattisesti vai päättää jokaisesta erikseen?
search: Haku
search_hint_html: Määritä, kuinka haluat tulla löydetyksi. Haluatko, että ihmiset löytävät sinut julkisten julkaisujesi perusteella? Haluatko, että ihmiset Mastodonin ulkopuolella löytävät profiilisi tehdessään hakuja verkossa? Otathan huomioon, ettei julkisten tietojen täyttä kaikista hakukoneista poisjäämistä voi taata.
search_hint_html: Määritä, kuinka haluat tulla löydetyksi. Haluatko, että sinut löydetään julkisten julkaisujesi perusteella? Haluatko, että Mastodonin ulkopuoliset ihmiset löytävät profiilisi tehdessään hakuja verkossa? Otathan huomioon, ettei julkisten tietojen täyttä kaikista hakukoneista poisjäämistä voi taata.
title: Yksityisyys ja tavoittavuus
privacy_policy:
title: Tietosuojakäytäntö
@ -1675,16 +1675,16 @@ fi:
development: Kehitys
edit_profile: Muokkaa profiilia
export: Vie tietoja
featured_tags: Esille nostetut aihetunnisteet
featured_tags: Suositellut aihetunnisteet
import: Tuo tietoja
import_and_export: Tuonti ja vienti
migrate: Tilin muutto toisaalle
notifications: Sähköposti-ilmoitukset
preferences: Ominaisuudet
preferences: Asetukset
profile: Julkinen profiili
relationships: Seuratut ja seuraajat
severed_relationships: Katkenneet seurantasuhteet
statuses_cleanup: Autom. julkaisujen poisto
severed_relationships: Katkenneet suhteet
statuses_cleanup: Julkaisujen automaattipoisto
strikes: Moderointivaroitukset
two_factor_authentication: Kaksivaiheinen todennus
webauthn_authentication: Suojausavaimet
@ -1729,8 +1729,8 @@ fi:
reblog: Tehostusta ei voi kiinnittää
poll:
total_people:
one: "%{count} henkilö"
other: "%{count} henkilöä"
one: "%{count} käyttäjä"
other: "%{count} käyttäjää"
total_votes:
one: "%{count} ääni"
other: "%{count} ääntä"
@ -1750,7 +1750,7 @@ fi:
enabled: Poista vanhat julkaisut automaattisesti
enabled_hint: Poistaa julkaisusi automaattisesti, kun ne saavuttavat valitun ikäkynnyksen, ellei jokin alla olevista poikkeuksista tule kyseeseen
exceptions: Poikkeukset
explanation: Koska julkaisujen poistaminen on raskas toimi, se tapahtuu hitaasti ajan mittaan, kun palvelin ei ole muutoin ruuhkainen. Siksi viestejäsi voi poistua vasta tovi sen jälkeen, kun ne ovat saavuttaneet ikäkynnyksen.
explanation: Koska julkaisujen poistaminen on raskas toimi, se tapahtuu hitaasti aikaa myöten silloin kun palvelin ei ole muutoin ruuhkainen. Siksi viestejäsi voi poistua vasta tovi sen jälkeen kun ne ovat ylittäneet ikäkynnyksen.
ignore_favs: Ohita suosikit
ignore_reblogs: Ohita tehostukset
interaction_exceptions: Vuorovaikutuksiin perustuvat poikkeukset
@ -1857,7 +1857,7 @@ fi:
explanation:
delete_statuses: Joidenkin julkaisuistasi on havaittu rikkovan ainakin yhtä yhteisön sääntöä, joten palvelimen %{instance} moderaattorit ovat poistaneet ne.
disable: Et voi enää käyttää tiliäsi, mutta profiilisi ja muut tiedot pysyvät muuttumattomina. Voit pyytää varmuuskopiota tiedoistasi, vaihtaa tilin asetuksia tai poistaa tilisi.
mark_statuses_as_sensitive: Palvelimen %{instance} moderaattorit ovat merkinneet osan julkaisuistasi arkaluonteisiksi. Tämä tarkoittaa sitä, että ihmisten täytyy napauttaa mediaa ennen kuin sen esikatselu näytetään. Voit merkitä median itse arkaluonteiseksi, kun julkaiset tulevaisuudessa.
mark_statuses_as_sensitive: Palvelimen %{instance} moderaattorit ovat merkinneet osan julkaisuistasi arkaluonteisiksi. Tämä tarkoittaa sitä, että mediaa täytyy napauttaa ennen kuin sen esikatselu näytetään. Voit merkitä median itse arkaluonteiseksi, kun julkaiset tulevaisuudessa.
sensitive: Tästä lähtien kaikki lähetetyt mediatiedostot merkitään arkaluonteisiksi ja piilotetaan napsautusvaroituksen taakse.
silence: Voit edelleen käyttää tiliäsi, mutta vain sinua jo seuraavat käyttäjät näkevät julkaisusi tällä palvelimella ja sinut voidaan sulkea pois eri löytämisominaisuuksista. Toiset voivat kuitenkin edelleen seurata sinua manuaalisesti.
suspend: Et voi enää käyttää tiliäsi, eivätkä profiilisi ja muut tiedot ole enää käytettävissä. Voit silti kirjautua sisään pyytääksesi tietojesi varmuuskopiota, kunnes tiedot on poistettu kokonaan noin 30 päivän kuluttua. Säilytämme kuitenkin joitain perustietoja, jotka estävät sinua kiertämästä jäädytystä.
@ -1900,14 +1900,14 @@ fi:
feature_moderation: Mastodon palauttaa päätöksenteon käsiisi. Jokainen palvelin luo omat sääntönsä ja määräyksensä, joita valvotaan paikallisesti eikä ylhäältä alas kuten kaupallisessa sosiaalisessa mediassa, mikä tekee siitä joustavimman vastaamaan eri ihmisryhmien tarpeisiin. Liity palvelimelle, jonka säännöt sopivat sinulle, tai ylläpidä omaa palvelinta.
feature_moderation_title: Moderointi juuri kuten sen pitäisi olla
follow_action: Seuraa
follow_step: Mastodonissa on kyse kiinnostavien ihmisten seuraamisesta.
follow_step: Mastodonissa on kyse kiinnostavien käyttäjien seuraamisesta.
follow_title: Mukauta kotisyötettäsi
follows_subtitle: Seuraa tunnettuja tilejä
follows_title: Seurantaehdotuksia
follows_view_more: Näytä lisää seurattavia henkilöitä
follows_view_more: Näytä lisää seurattavia käyttäjiä
hashtags_recent_count:
one: "%{people} henkilö viimeisenä 2 päivänä"
other: "%{people} henkilöä viimeisenä 2 päivänä"
one: "%{people} käyttäjä viimeisenä 2 päivänä"
other: "%{people} käyttäjää viimeisenä 2 päivänä"
hashtags_subtitle: Tutki, mikä on ollut suosittua viimeisenä 2 päivänä
hashtags_title: Suositut aihetunnisteet
hashtags_view_more: Näytä lisää suosittuja aihetunnisteita
@ -1921,9 +1921,9 @@ fi:
subject: Tervetuloa Mastodoniin
title: Tervetuloa mukaan, %{name}!
users:
follow_limit_reached: Et voi seurata yli %{limit} henkilöä
follow_limit_reached: Et voi seurata yli %{limit} käyttäjää
go_to_sso_account_settings: Avaa identiteettitarjoajasi tiliasetukset
invalid_otp_token: Virheellinen kaksivaiheisen todentamisen koodi
invalid_otp_token: Virheellinen kaksivaiheisen todennuksen koodi
otp_lost_help_html: Jos sinulla ei ole pääsyä kumpaankaan, voit ottaa yhteyden osoitteeseen %{email}
rate_limited: Liian monta todennusyritystä yritä uudelleen myöhemmin.
seamless_external_login: Olet kirjautunut ulkoisen palvelun kautta, joten salasana- ja sähköpostiasetukset eivät ole käytettävissä.

View File

@ -882,6 +882,9 @@ ia:
action: Consulta hic pro plus information
message_html: "<strong>Tu immagazinage de objectos es mal configurate. Le confidentialitate de tu usatores es in risco.</strong>"
tags:
moderation:
pending_review: Attende revision
title: Stato
name: Nomine
review: Revide le stato
search: Cercar

View File

@ -211,6 +211,7 @@ be:
setting_default_privacy: Прыватнасць допісаў
setting_default_sensitive: Заўсёды пазначаць кантэнт як далікатны
setting_delete_modal: Паказваць акно пацвярджэння перад выдаленнем допісу
setting_disable_hover_cards: Адключыць перадпрагляд профілю пры навядзенні
setting_disable_swiping: Адключыць прагортванні
setting_display_media: Адлюстраванне медыя
setting_display_media_default: Перадвызначана
@ -242,11 +243,13 @@ be:
warn: Схаваць з папярэджаннем
form_admin_settings:
activity_api_enabled: Апублікаваць зводную статыстыку аб актыўнасці карыстальнікаў API
app_icon: Значок праграмы
backups_retention_period: Працягласць захавання архіву карыстальніка
bootstrap_timeline_accounts: Заўсёды раіць гэтыя ўліковыя запісы новым карыстальнікам
closed_registrations_message: Уласнае паведамленне, калі рэгістрацыя немагчымая
content_cache_retention_period: Перыяд захоўвання выдаленага змесціва
custom_css: CSS карыстальніка
favicon: Значок сайта
mascot: Уласны маскот(спадчына)
media_cache_retention_period: Працягласць захавання кэшу для медыя
peers_api_enabled: Апублікаваць спіс знойдзеных сервераў у API
@ -311,6 +314,7 @@ be:
listable: Дазволіць паказ хэштэгу ў пошуку і ў каталозе профіляў
name: Хэштэг
trendable: Дазволіць паказ гэтага хэштэга ў трэндах
usable: Дазволіць допісам выкарыстоўваць гэты хэштэг лакальна
user:
role: Роля
time_zone: Часавы пояс

View File

@ -242,11 +242,13 @@ cs:
warn: Skrýt s varováním
form_admin_settings:
activity_api_enabled: Zveřejnit souhrnné statistiky o aktivitě uživatele v API
app_icon: Ikona aplikace
backups_retention_period: Doba uchovávání archivu uživatelů
bootstrap_timeline_accounts: Vždy doporučovat tyto účty novým uživatelům
closed_registrations_message: Vlastní zpráva, když přihlášení není k dispozici
content_cache_retention_period: Doba uchovávání vzdáleného obsahu
custom_css: Vlastní CSS
favicon: Favicon
mascot: Vlastní maskot (zastaralé)
media_cache_retention_period: Doba uchovávání mezipaměti médií
peers_api_enabled: Zveřejnit seznam nalezených serverů v API

View File

@ -314,6 +314,7 @@ cy:
listable: Caniatáu i'r hashnod hwn ymddangos mewn chwiliadau ac awgrymiadau
name: Hashnod
trendable: Caniatáu i'r hashnod hwn ymddangos o dan bynciau llosg
usable: Caniatáu i bostiadau ddefnyddio'r hashnod hwn yn lleol
user:
role: Rôl
time_zone: Cylchfa amser

View File

@ -314,7 +314,7 @@ es-MX:
listable: Permitir que esta etiqueta aparezca en las búsquedas y en el directorio del perfil
name: Etiqueta
trendable: Permitir que esta etiqueta aparezca bajo tendencias
usable: Permitir a las publicacions usar esta etiqueta localmente
usable: Permitir a las publicaciones usar esta etiqueta localmente
user:
role: Rol
time_zone: Zona horaria

View File

@ -314,7 +314,7 @@ es:
listable: Permitir que esta etiqueta aparezca en las búsquedas y en el directorio del perfil
name: Etiqueta
trendable: Permitir que esta etiqueta aparezca bajo tendencias
usable: Permitir a las publicacions usar esta etiqueta localmente
usable: Permitir a las publicaciones usar esta etiqueta localmente
user:
role: Rol
time_zone: Zona horaria

View File

@ -6,7 +6,7 @@ fi:
discoverable: Julkisia julkaisujasi ja profiiliasi voidaan pitää esillä tai suositella Mastodonin eri alueilla ja profiiliasi voidaan ehdottaa toisille käyttäjille.
display_name: Koko nimesi tai lempinimesi.
fields: Verkkosivustosi, pronominisi, ikäsi ja mitä ikinä haluatkaan ilmoittaa.
indexable: Julkiset julkaisusi voivat näkyä hakutuloksissa Mastodonissa. Ihmiset, jotka ovat olleet vuorovaikutuksessa julkaisujesi kanssa, voivat etsiä niitä asetuksesta riippumatta.
indexable: Julkiset julkaisusi voivat näkyä Mastodonin hakutuloksissa. Käyttäjät, jotka ovat olleet vuorovaikutuksessa julkaisujesi kanssa, voivat etsiä niitä asetuksesta riippumatta.
note: 'Voit @mainita muita käyttäjiä tai #aihetunnisteita.'
show_collections: Käyttäjät voivat selata seurattujasi ja seuraajiasi. Käyttäjät, joita seuraat, näkevät joka tapauksessa, että seuraat heitä.
unlocked: Käyttäjät voivat seurata sinua pyytämättä hyväksyntääsi. Poista valinta, jos haluat tarkistaa sekä hyväksyä tai hylätä vastaanottamasi seurantapyynnöt.
@ -38,7 +38,7 @@ fi:
appeal:
text: Voit valittaa varoituksesta vain kerran
defaults:
autofollow: Henkilöt, jotka rekisteröityvät kutsun kautta, seuraavat sinua automaattisesti
autofollow: Kutsun kautta rekisteröityvät käyttäjät seuraavat sinua automaattisesti
avatar: WEBP, PNG, GIF tai JPG. Enintään %{size}. Skaalataan kokoon %{dimensions} px
bot: Ilmaise muille, että tili suorittaa enimmäkseen automaattisia toimia eikä sitä valvota
context: Ainakin yksi konteksti, jossa suodattimen pitäisi olla voimassa
@ -49,14 +49,14 @@ fi:
header: WEBP, PNG, GIF tai JPG. Enintään %{size}. Skaalataan kokoon %{dimensions} px
inbox_url: Kopioi URL-osoite haluamasi välittäjän etusivulta
irreversible: Suodatetut julkaisut katoavat peruuttamattomasti, vaikka suodatin poistettaisiin myöhemmin
locale: Käyttöliittymän, sähköpostien ja puskuilmoitusten kieli
locale: Käyttöliittymän, sähköpostiviestien ja puskuilmoitusten kieli
password: Käytä vähintään 8:aa merkkiä
phrase: Täsmää riippumatta tekstin aakkoslajista tai julkaisun sisältövaroituksesta
scopes: Mihin ohjelmointirajapintoihin sovelluksella on pääsy. Jos valitset ylätason käyttöoikeuden, sinun ei tarvitse valita yksittäisiä.
setting_aggregate_reblogs: Älä näytä uusia tehostuksia julkaisuille, joita on äskettäin tehostettu (koskee vain juuri vastaanotettuja tehostuksia)
setting_always_send_emails: Yleensä sähköposti-ilmoituksia ei lähetetä, kun käytät Mastodonia aktiivisesti
setting_default_sensitive: Arkaluonteinen media piilotetaan oletusarvoisesti, ja se voidaan näyttää yhdellä napsautuksella
setting_display_media_default: Piilota arkaluonteiseksi merkitty media
setting_display_media_default: Piilota arkaluonteiseksi merkitty mediasisältö
setting_display_media_hide_all: Piilota mediasisältö aina
setting_display_media_show_all: Näytä mediasisältö aina
setting_use_blurhash: Liukuvärit perustuvat piilotettujen kuvien väreihin mutta sumentavat yksityiskohdat
@ -89,12 +89,12 @@ fi:
peers_api_enabled: Luettelo verkkotunnuksista, jotka tämä palvelin on kohdannut fediversumissa. Se ei kerro, federoitko tietyn palvelimen kanssa, vaan että palvelimesi on ylipäätään tietoinen siitä. Tätä tietoa käytetään palveluissa, jotka keräävät tilastoja federoinnista yleisellä tasolla.
profile_directory: Profiilihakemisto luetteloi kaikki käyttäjät, jotka ovat valinneet olla löydettävissä.
require_invite_text: Kun rekisteröityminen vaatii manuaalisen hyväksynnän, tee ”Miksi haluat liittyä?” -tekstikentästä pakollinen vapaaehtoisen sijaan
site_contact_email: Miten ihmiset voivat tavoittaa sinut oikeus- tai tukikysymyksissä.
site_contact_username: Miten ihmiset voivat tavoittaa sinut Mastodonissa.
site_contact_email: Miten sinut voi tavoittaa oikeus- tai tukikysymyksissä.
site_contact_username: Miten sinut voi tavoittaa Mastodonissa.
site_extended_description: Kaikki lisätiedot, jotka voivat olla hyödyllisiä kävijöille ja käyttäjille. Voidaan jäsentää Markdown-syntaksilla.
site_short_description: Lyhyt kuvaus, joka auttaa yksilöimään palvelimesi. Kuka sitä johtaa, ja keille se on tarkoitettu?
site_terms: Käytä omaa tietosuojakäytäntöä tai jätä tyhjäksi, jos haluat käyttää oletusta. Voidaan jäsentää Markdown-syntaksilla.
site_title: Miten ihmiset voivat viitata palvelimeesi sen verkkotunnuksen lisäksi.
site_title: Miten palvelimeesi voi viitata sen verkkotunnuksen lisäksi.
status_page_url: URL-osoite sivulle, josta tämän palvelimen tilan voi ongelmatilanteissa tarkistaa
theme: Teema, jonka uloskirjautuneet vierailijat ja uudet käyttäjät näkevät.
thumbnail: Noin 2:1 kuva näkyy palvelimen tietojen ohessa.
@ -121,7 +121,7 @@ fi:
hint: Vapaaehtoinen. Anna yksityiskohtaisempia tietoja säännöstä
text: Kuvaile sääntöä tai edellytystä palvelimesi käyttäjille. Suosi tiivistä, yksinkertaista ilmaisua
sessions:
otp: 'Näppäile mobiilisovelluksessa näkyvä kaksivaiheisen todennuksen tunnusluku, tai käytä tarvittaessa palautuskoodia:'
otp: 'Näppäile mobiilisovelluksessa näkyvä kaksivaiheisen todennuksen tunnusluku tai käytä tarvittaessa palautuskoodia:'
webauthn: Jos kyseessä on USB-avain, muista laittaa se paikalleen ja tarvittaessa napauttaa sitä.
settings:
indexable: Profiilisi voi näkyä Googlen, Bingin ja muiden hakukoneiden hakutuloksissa.
@ -135,7 +135,7 @@ fi:
color: Väri, jota käytetään roolille kaikkialla käyttöliittymässä, RGB-heksadesimaalimuodossa
highlighted: Tämä tekee roolista julkisesti näkyvän
name: Roolin julkinen nimi, jos rooli on asetettu näytettäväksi merkkinä
permissions_as_keys: Käyttäjillä, joilla on tämä rooli, on käyttöoikeus...
permissions_as_keys: Käyttäjillä, joilla on tämä rooli, on käyttöoikeus
position: Korkeampi rooli ratkaisee konfliktit tietyissä tilanteissa. Tiettyjä toimia voidaan suorittaa vain rooleilla, joiden prioriteetti on pienempi
webhook:
events: Valitse lähetettävät tapahtumat
@ -213,7 +213,7 @@ fi:
setting_delete_modal: Kysy vahvistusta ennen julkaisun poistamista
setting_disable_hover_cards: Poista käytöstä profiilin esikatselu osoitettaessa
setting_disable_swiping: Poista pyyhkäisyeleet käytöstä
setting_display_media: Median näyttäminen
setting_display_media: Median näkyminen
setting_display_media_default: Oletus
setting_display_media_hide_all: Piilota kaikki
setting_display_media_show_all: Näytä kaikki
@ -224,7 +224,7 @@ fi:
setting_theme: Sivuston teema
setting_trends: Näytä päivän trendit
setting_unfollow_modal: Kysy vahvistusta ennen seuraamisen lopettamista
setting_use_blurhash: Käytä värikästä liukusävytystä piilotetulle medialle
setting_use_blurhash: Käytä värikästä liukusävytystä piilotetulle mediasisällölle
setting_use_pending_items: Hidas tila
severity: Vakavuus
sign_in_token_attempt: Turvakoodi
@ -294,7 +294,7 @@ fi:
follow: Joku seurasi sinua
follow_request: Joku pyysi lupaa seurata sinua
mention: Joku mainitsi sinut
pending_account: Uusi tili tarvitsee tarkistuksen
pending_account: Uusi tili tarvitsee tarkastuksen
reblog: Joku tehosti julkaisuasi
report: Uusi raportti lähetettiin
software_updates:

View File

@ -15,7 +15,7 @@ sk:
type_html: Vyber si, čo urobiť s účtom <strong>%{acct}</strong>
warning_preset_id: Voliteľné. Stále môžeš vložiť vlastný text na samý koniec predlohy
defaults:
autofollow: Ľudia ktorí sa zaregistrujú prostredníctvom pozvánky, ťa budú inheď následovať
autofollow: Ľudia ktorí sa zaregistrujú prostredníctvom pozvánky, ťa budú inheď nasledovať
avatar: WEBP, PNG, GIF, alebo JPG. Najviac %{size}. Bude zmenšený na %{dimensions}px
bot: Tento účet vykonáva hlavne automatizované akcie, a je pravdepodobne nespravovaný
context: Jedno, alebo viac kritérií, v ktorých má byť filtrovanie uplatnené

View File

@ -314,6 +314,7 @@ tr:
listable: Bu etiketin aramalarda ve profil dizininde görünmesine izin ver
name: Etiket
trendable: Bu etiketin gündem altında görünmesine izin ver
usable: Gönderilerin yerelde bu etiketi kullanmasına izin ver
user:
role: Rol
time_zone: Zaman dilimi

View File

@ -77,13 +77,13 @@ uk:
warn: Сховати відфільтрований вміст за попередженням, у якому вказано заголовок фільтра
form_admin_settings:
activity_api_enabled: Кількість локальних опублікованих дописів, активних і нових користувачів у тижневих розрізах
app_icon: WEBP, PNG, GIF або JPG. Замінює іконку програми за замовчуванням на мобільних пристроях на власну іконку.
app_icon: WEBP, PNG, GIF або JPG. Замінює типову піктограму застосунку на мобільних пристроях на власну.
backups_retention_period: Користувачі мають можливість створювати архіви своїх дописів, щоб завантажити їх пізніше. Якщо встановлено додатне значення, ці архіви будуть автоматично видалені з вашого сховища через вказану кількість днів.
bootstrap_timeline_accounts: Ці облікові записи будуть закріплені в топі пропозицій для нових користувачів.
closed_registrations_message: Показується, коли реєстрація закрита
content_cache_retention_period: Усі дописи з інших серверів (включно з коментарями та відповідями) будуть видалені через певну кількість днів, незважаючи на будь-яку локальну взаємодію користувачів з цими дописами. Сюди входять дописи, які локальний користувач позначив як закладки або вибране. Приватні згадки між користувачами з різних інстанцій також будуть втрачені і не підлягатимуть відновленню. Використання цього параметра призначено для екземплярів спеціального призначення і порушує багато очікувань користувачів, якщо його застосовано для загального використання.
custom_css: Ви можете застосувати користувацькі стилі у вебверсії Mastodon.
favicon: WEBP, PNG, GIF або JPG. Замінює стандартну піктограму Mastodon на власну піктограму.
favicon: WEBP, PNG, GIF або JPG. Замінює стандартну піктограму Mastodon на власну.
mascot: Змінює ілюстрацію в розширеному вебінтерфейсі.
media_cache_retention_period: Медіафайли з дописів віддалених користувачів кешуються на вашому сервері. Якщо встановлено додатне значення, медіа буде видалено через вказану кількість днів. Якщо медіа-дані будуть запитані після видалення, вони будуть завантажені повторно, якщо вихідний вміст все ще доступний. Через обмеження на частоту опитування карток попереднього перегляду посилань на сторонніх сайтах, рекомендується встановити це значення не менше 14 днів, інакше картки попереднього перегляду посилань не будуть оновлюватися на вимогу раніше цього часу.
peers_api_enabled: Список доменів імен цього сервера з'явився у федівсесвіті. Сюди не входять дані чи ви пов'язані федерацією з цим сервером, а лише відомості, що вашому серверу відомо про нього. Його використовують служби, які збирають загальну статистику про федерації.
@ -243,13 +243,13 @@ uk:
warn: Сховати за попередженням
form_admin_settings:
activity_api_enabled: Публікація агрегованої статистики про активність користувачів
app_icon: Значок застосунку
app_icon: Піктограма застосунку
backups_retention_period: Період утримання архіву користувача
bootstrap_timeline_accounts: Завжди рекомендувати новим користувачам ці облікові записи
closed_registrations_message: Показуване повідомлення, якщо реєстрація недоступна
content_cache_retention_period: Період збереження віддаленого вмісту
custom_css: Користувацький CSS
favicon: Значок сайту
favicon: Піктограма сайту
mascot: Користувацький символ (застарілий)
media_cache_retention_period: Період збереження кешу медіа
peers_api_enabled: Опублікувати список знайдених серверів у API

View File

@ -19,7 +19,7 @@ sk:
link_verified_on: Vlastníctvo tohto odkazu bolo skontrolované %{date}
nothing_here: Nič tu nie je!
pin_errors:
following: Musíš už následovať toho človeka, ktorého si praješ zviditeľniť
following: Už musíš nasledovať toho človeka, ktorého si praješ zviditeľniť
posts:
few: Príspevky
many: Príspevkov
@ -837,7 +837,7 @@ sk:
description:
prefix_invited_by_user: "@%{name} ťa pozýva na tento Mastodon server!"
prefix_sign_up: Zaregistruj sa na Mastodone už dnes!
suffix: S pomocou účtu budeš môcť nasledovať ľudí, posielať príspevky, a vymieňať si správy s užívateľmi na hocijakom Mastodon serveri, ale aj na iných serveroch!
suffix: S účtom budeš môcť nasledovať ľudí, posielať príspevky, a vymieňať si správy s užívateľmi z hocijakého Mastodon servera a viac!
dont_have_your_security_key: Nemáš svoj bezpečnostný kľúč?
forgot_password: Zabudnuté heslo?
invalid_reset_password_token: Token na obnovu hesla vypršal. Prosím vypítaj si nový.
@ -1129,7 +1129,7 @@ sk:
title: Nový sledovateľ
follow_request:
action: Spravuj žiadosti o sledovanie
body: "%{name} žiada povolenie ťa následovať"
body: "%{name} si žiada ťa nasledovať"
subject: "%{name} ťa žiadá o možnosť sledovania"
title: Nová žiadosť o následovanie
mention:
@ -1408,7 +1408,7 @@ sk:
subject: Vitaj na Mastodone
title: Vitaj na palube, %{name}!
users:
follow_limit_reached: Nemôžeš následovať viac ako %{limit} ľudí
follow_limit_reached: Nemôžeš nasledovať viac ako %{limit} ľudí
invalid_otp_token: Neplatný kód pre dvojfaktorovú autentikáciu
otp_lost_help_html: Pokiaľ si stratil/a prístup k obom, môžeš dať vedieť %{email}
rate_limited: Príliš veľa pokusov o overenie, skús to znova neskôr.

View File

@ -885,7 +885,23 @@ tr:
action: Daha fazla bilgi için buraya göz atın
message_html: "<strong>Nesne depolamanız hatalı yapılandırılmış. Kullanıcılarınızın gizliliği tehlikede.</strong>"
tags:
moderation:
not_trendable: Öne çıkarılamaz
not_usable: Kullanılamaz
pending_review: İnceleme bekliyor
review_requested: İnceleme istendi
reviewed: İncelendi
title: Durum
trendable: Öne çıkarılabilir
unreviewed: İncelenmemiş
usable: Kullanılabilir
name: Ad
newest: En yeni
oldest: En eski
reset: Sıfırla
review: Durumu gözden geçir
search: Ara
title: Etiketler
updated_msg: Etiket ayarları başarıyla güncellendi
title: Yönetim
trends:

View File

@ -292,7 +292,7 @@ uk:
update_custom_emoji_html: "%{name} оновлює емодзі %{target}"
update_domain_block_html: "%{name} оновлює блокування домену для %{target}"
update_ip_block_html: "%{name} змінює правило для IP %{target}"
update_report_html: "%{name} оновлений звіт %{target}"
update_report_html: "%{name} оновлює звіт %{target}"
update_status_html: "%{name} оновлює допис %{target}"
update_user_role_html: "%{name} змінює роль %{target}"
deleted_account: видалений обліковий запис

View File

@ -16,6 +16,8 @@ module Paperclip
private
def cache_current_values
@target.response.require_limit_not_exceeded!(@target.limit)
@original_filename = truncated_filename
@tempfile = copy_to_tempfile(@target)
@content_type = ContentTypeDetector.new(@tempfile.path).detect
@ -27,16 +29,15 @@ module Paperclip
source.response.body.each do |chunk|
bytes_read += chunk.bytesize
raise Mastodon::LengthValidationError, "Body size exceeds limit of #{source.limit}" if bytes_read > source.limit
destination.write(chunk)
chunk.clear
raise Mastodon::LengthValidationError if bytes_read > source.limit
end
destination.rewind
destination
rescue Mastodon::LengthValidationError
rescue
destination.close(true)
raise
ensure

View File

@ -1,7 +1,7 @@
{
"name": "@mastodon/mastodon",
"license": "AGPL-3.0-or-later",
"packageManager": "yarn@4.3.1",
"packageManager": "yarn@4.4.0",
"engines": {
"node": ">=18"
},
@ -90,7 +90,7 @@
"path-complete-extname": "^1.0.0",
"postcss": "^8.4.24",
"postcss-loader": "^4.3.0",
"postcss-preset-env": "^9.5.2",
"postcss-preset-env": "^10.0.0",
"prop-types": "^15.8.1",
"punycode": "^2.3.0",
"react": "^18.2.0",

View File

@ -79,6 +79,16 @@ RSpec.describe LinkDetailsExtractor do
},
}.to_json
end
let(:html) { <<~HTML }
<!doctype html>
<html>
<body>
<script type="application/ld+json">
#{ld_json}
</script>
</body>
</html>
HTML
shared_examples 'structured data' do
it 'extracts the expected values from structured data' do
@ -224,21 +234,27 @@ RSpec.describe LinkDetailsExtractor do
},
}.to_json
end
let(:html) { <<~HTML }
<!doctype html>
<html>
<body>
<script type="application/ld+json">
#{ld_json}
</script>
</body>
</html>
HTML
it 'joins author names' do
expect(subject.author_name).to eq 'Author 1, Author 2'
end
end
context 'with named graph' do
let(:ld_json) do
{
'@context' => 'https://schema.org',
'@graph' => [
'@type' => 'NewsArticle',
'headline' => "What's in a name",
],
}.to_json
end
it 'descends into @graph node' do
expect(subject.title).to eq "What's in a name"
end
end
end
context 'when Open Graph protocol data is present' do

View File

@ -0,0 +1,93 @@
# frozen_string_literal: true
require 'rails_helper'
describe Paperclip::ResponseWithLimitAdapter do
subject { described_class.new(response_with_limit) }
before { stub_request(:get, url).to_return(headers: headers, body: body) }
let(:response_with_limit) { ResponseWithLimit.new(response, 50.kilobytes) }
let(:response) { Request.new(:get, url).perform(&:itself) }
let(:url) { 'https://example.com/dir/foo.png' }
let(:headers) { nil }
let(:body) { attachment_fixture('600x400.jpeg').binmode.read }
it 'writes temporary file' do
expect(subject.tempfile.read).to eq body
expect(subject.size).to eq body.bytesize
end
context 'with Content-Disposition header' do
let(:headers) { { 'Content-Disposition' => 'attachment; filename="bar.png"' } }
it 'uses filename from header' do
expect(subject.original_filename).to eq 'bar.png'
end
it 'detects MIME type from content' do
expect(subject.content_type).to eq 'image/jpeg'
end
end
context 'without Content-Disposition header' do
it 'uses filename from path' do
expect(subject.original_filename).to eq 'foo.png'
end
it 'detects MIME type from content' do
expect(subject.content_type).to eq 'image/jpeg'
end
end
context 'without filename in path' do
let(:url) { 'https://example.com/' }
it 'falls back to "data"' do
expect(subject.original_filename).to eq 'data'
end
it 'detects MIME type from content' do
expect(subject.content_type).to eq 'image/jpeg'
end
end
context 'with very long filename' do
let(:url) { 'https://example.com/abcdefghijklmnopqrstuvwxyz.0123456789' }
it 'truncates the filename' do
expect(subject.original_filename).to eq 'abcdefghijklmnopqrst.0123'
end
end
context 'when response size exceeds limit' do
context 'with Content-Length header' do
let(:headers) { { 'Content-Length' => 5.megabytes } }
it 'raises without reading the body' do
allow(response).to receive(:body).and_call_original
expect { subject }.to raise_error(Mastodon::LengthValidationError, 'Content-Length 5242880 exceeds limit of 51200')
expect(response).to_not have_received(:body)
end
end
context 'without Content-Length header' do
let(:body) { SecureRandom.random_bytes(1.megabyte) }
it 'raises while reading the body' do
expect { subject }.to raise_error(Mastodon::LengthValidationError, 'Body size exceeds limit of 51200')
expect(response.content_length).to be_nil
end
end
end
context 'when response times out' do
it 'raises' do
allow(response.body.connection).to receive(:readpartial).and_raise(HTTP::TimeoutError)
expect { subject }.to raise_error(HTTP::TimeoutError)
end
end
end

View File

@ -100,7 +100,7 @@ describe Request do
describe "response's body_with_limit method" do
it 'rejects body more than 1 megabyte by default' do
stub_request(:any, 'http://example.com').to_return(body: SecureRandom.random_bytes(2.megabytes))
expect { subject.perform(&:body_with_limit) }.to raise_error Mastodon::LengthValidationError
expect { subject.perform(&:body_with_limit) }.to raise_error(Mastodon::LengthValidationError, 'Body size exceeds limit of 1048576')
end
it 'accepts body less than 1 megabyte by default' do
@ -110,17 +110,17 @@ describe Request do
it 'rejects body by given size' do
stub_request(:any, 'http://example.com').to_return(body: SecureRandom.random_bytes(2.kilobytes))
expect { subject.perform { |response| response.body_with_limit(1.kilobyte) } }.to raise_error Mastodon::LengthValidationError
expect { subject.perform { |response| response.body_with_limit(1.kilobyte) } }.to raise_error(Mastodon::LengthValidationError, 'Body size exceeds limit of 1024')
end
it 'rejects too large chunked body' do
stub_request(:any, 'http://example.com').to_return(body: SecureRandom.random_bytes(2.megabytes), headers: { 'Transfer-Encoding' => 'chunked' })
expect { subject.perform(&:body_with_limit) }.to raise_error Mastodon::LengthValidationError
expect { subject.perform(&:body_with_limit) }.to raise_error(Mastodon::LengthValidationError, 'Body size exceeds limit of 1048576')
end
it 'rejects too large monolithic body' do
stub_request(:any, 'http://example.com').to_return(body: SecureRandom.random_bytes(2.megabytes), headers: { 'Content-Length' => 2.megabytes })
expect { subject.perform(&:body_with_limit) }.to raise_error Mastodon::LengthValidationError
expect { subject.perform(&:body_with_limit) }.to raise_error(Mastodon::LengthValidationError, 'Content-Length 2097152 exceeds limit of 1048576')
end
it 'truncates large monolithic body' do

View File

@ -160,6 +160,36 @@ RSpec.describe 'Notifications' do
end
end
context 'when requesting stripped-down accounts' do
let(:params) { { expand_accounts: 'partial_avatars' } }
let(:recent_account) { Fabricate(:account) }
before do
FavouriteService.new.call(recent_account, user.account.statuses.first)
end
it 'returns an account in "partial_accounts", with the expected keys', :aggregate_failures do
subject
expect(response).to have_http_status(200)
expect(body_as_json[:partial_accounts].size).to be > 0
expect(body_as_json[:partial_accounts][0].keys).to contain_exactly(:acct, :avatar, :avatar_static, :bot, :id, :locked, :url)
expect(body_as_json[:partial_accounts].pluck(:id)).to_not include(recent_account.id.to_s)
expect(body_as_json[:accounts].pluck(:id)).to include(recent_account.id.to_s)
end
end
context 'when passing an invalid value for "expand_accounts"' do
let(:params) { { expand_accounts: 'unknown_foobar' } }
it 'returns http bad request' do
subject
expect(response).to have_http_status(400)
end
end
def body_json_types
body_as_json[:notification_groups].pluck(:type)
end

View File

@ -1,7 +1,7 @@
{
"name": "@mastodon/streaming",
"license": "AGPL-3.0-or-later",
"packageManager": "yarn@4.3.1",
"packageManager": "yarn@4.4.0",
"engines": {
"node": ">=18"
},

1033
yarn.lock

File diff suppressed because it is too large Load Diff