1
0
Fork 0
mirror of https://github.com/mastodon/mastodon.git synced 2024-08-20 21:08:15 -07:00

Compare commits

...

27 commits

Author SHA1 Message Date
Matt Jankowski
17f29dee5f Update test-prof to version 1.4.0.rc.4 2024-07-31 09:17:35 -04:00
Matt Jankowski
724f87cdcc Update test-prof to version 1.4.0.rc.3 2024-07-31 09:17:35 -04:00
Matt Jankowski
078abefda6 Use test-prof 1.4.0.rc1 2024-07-31 09:17:35 -04:00
Matt Jankowski
a78128b826 format 2024-07-31 09:17:35 -04:00
Matt Jankowski
6a0cd08674 cache store is memory store in test env 2024-07-31 09:17:35 -04:00
Matt Jankowski
ed1f244a4e Restore default mail from 2024-07-31 09:17:35 -04:00
Matt Jankowski
3f2bc347b9 Use 7.2 defaults 2024-07-31 09:17:35 -04:00
Matt Jankowski
2393a5b8db Generated env updates 2024-07-31 09:17:35 -04:00
Matt Jankowski
051b02a88c Generated development.rb update 2024-07-31 09:17:35 -04:00
Matt Jankowski
c66a7d3e78 New framework defaults 2024-07-31 09:17:35 -04:00
Matt Jankowski
dd6d932f19 Update safe reblog insert for Rails 7.2 2024-07-31 09:17:35 -04:00
Matt Jankowski
25cb8c3a99 Moved migration_context method to connection pool 2024-07-31 09:17:35 -04:00
Matt Jankowski
392657f545 Use rails version 7.2.0.beta3 2024-07-31 09:17:35 -04:00
Claire
2c1e75727d
Change filtered notification banner design to take up less space (#31222) 2024-07-31 12:36:08 +00:00
Claire
549ab089ee
Change grouped notifications API shape (take 2) (#31214) 2024-07-31 10:50:13 +00:00
Claire
288961bbb9
Change private mention icon for consistency in grouped notifications (#31223) 2024-07-31 10:26:43 +00:00
github-actions[bot]
520ff04248
New Crowdin Translations (automated) (#31219)
Co-authored-by: GitHub Actions <noreply@github.com>
2024-07-31 08:09:49 +00:00
renovate[bot]
66a16bf49c
chore(deps): update dependency opentelemetry-instrumentation-active_job to v0.7.4 (#31218)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-31 08:01:07 +00:00
Claire
fd1bade135
Fix inconsistent dismiss icon for notification requests (#31220) 2024-07-31 07:52:59 +00:00
Claire
4eab6aef95
Change User-Agent to use Mastodon as the product, and http.rb as platform details (#31192) 2024-07-30 21:40:42 +00:00
Claire
598ae4f2da
Add endpoints for unread notifications count (#31191) 2024-07-30 08:39:11 +00:00
Tim Rogers
2ce99c51dd
Fixed Rails route covering %40-encoded profile URL paths to not 404 (#31184) 2024-07-30 08:18:00 +00:00
github-actions[bot]
7d11a6c9b0
New Crowdin Translations (automated) (#31206)
Co-authored-by: GitHub Actions <noreply@github.com>
2024-07-30 08:15:40 +00:00
renovate[bot]
e1f7ca7ced
chore(deps): update dependency json-ld to v3.3.2 (#31205)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-30 08:00:33 +00:00
Matt Jankowski
7e33583daa
Dont run crowdin upload workflow on forks (#31195) 2024-07-29 17:19:05 +00:00
renovate[bot]
1229d2907a
chore(deps): update docker/dockerfile docker tag to v1.9 (#31187)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-29 16:00:55 +00:00
Emelia Smith
c40e481169
Implement UI for Admin Search of Hashtags (#30880) 2024-07-29 15:49:44 +00:00
152 changed files with 1377 additions and 385 deletions

View file

@ -19,6 +19,7 @@ on:
jobs:
upload-translations:
runs-on: ubuntu-latest
if: github.repository == 'mastodon/mastodon'
steps:
- name: Checkout

View file

@ -1,4 +1,4 @@
# syntax=docker/dockerfile:1.8
# syntax=docker/dockerfile:1.9
# This file is designed for production server deployment, not local development work
# For a containerized local dev environment, see: https://github.com/mastodon/mastodon/blob/main/README.md#docker

View file

@ -6,7 +6,7 @@ ruby '>= 3.1.0'
gem 'propshaft'
gem 'puma', '~> 6.3'
gem 'rack', '~> 2.2.7'
gem 'rails', '~> 7.1.1'
gem 'rails', '7.2.0.beta3'
gem 'thor', '~> 1.2'
gem 'dotenv'
@ -63,6 +63,7 @@ gem 'kaminari', '~> 1.2'
gem 'link_header', '~> 0.0'
gem 'mario-redis-lock', '~> 1.2', require: 'redis_lock'
gem 'mime-types', '~> 3.5.0', require: 'mime/types/columnar'
gem 'mutex_m'
gem 'nokogiri', '~> 1.15'
gem 'nsa'
gem 'oj', '~> 3.14'
@ -141,7 +142,7 @@ group :test do
gem 'selenium-webdriver'
# Used to reset the database between system tests
gem 'database_cleaner-active_record'
gem 'database_cleaner-active_record', github: 'DatabaseCleaner/database_cleaner-active_record' # TODO: Release version?
# Used to mock environment variables
gem 'climate_control'
@ -208,7 +209,7 @@ group :development, :test do
gem 'memory_profiler', require: false
gem 'ruby-prof', require: false
gem 'stackprof', require: false
gem 'test-prof'
gem 'test-prof', github: 'test-prof/test-prof'
# RSpec runner for rails
gem 'rspec-rails', '~> 6.0'

View file

@ -7,38 +7,46 @@ GIT
hkdf (~> 0.2)
jwt (~> 2.0)
GIT
remote: https://github.com/DatabaseCleaner/database_cleaner-active_record.git
revision: 79b08760d66369f43c40c49cc845a68ea9727e6e
specs:
database_cleaner-active_record (2.1.0)
activerecord (>= 5.a)
database_cleaner-core (~> 2.0.0)
GIT
remote: https://github.com/test-prof/test-prof.git
revision: 065ca2465118769a1a809dac66ff57f07562691d
specs:
test-prof (1.4.0.rc.4)
GEM
remote: https://rubygems.org/
specs:
actioncable (7.1.3.4)
actionpack (= 7.1.3.4)
activesupport (= 7.1.3.4)
actioncable (7.2.0.beta3)
actionpack (= 7.2.0.beta3)
activesupport (= 7.2.0.beta3)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
zeitwerk (~> 2.6)
actionmailbox (7.1.3.4)
actionpack (= 7.1.3.4)
activejob (= 7.1.3.4)
activerecord (= 7.1.3.4)
activestorage (= 7.1.3.4)
activesupport (= 7.1.3.4)
mail (>= 2.7.1)
net-imap
net-pop
net-smtp
actionmailer (7.1.3.4)
actionpack (= 7.1.3.4)
actionview (= 7.1.3.4)
activejob (= 7.1.3.4)
activesupport (= 7.1.3.4)
mail (~> 2.5, >= 2.5.4)
net-imap
net-pop
net-smtp
actionmailbox (7.2.0.beta3)
actionpack (= 7.2.0.beta3)
activejob (= 7.2.0.beta3)
activerecord (= 7.2.0.beta3)
activestorage (= 7.2.0.beta3)
activesupport (= 7.2.0.beta3)
mail (>= 2.8.0)
actionmailer (7.2.0.beta3)
actionpack (= 7.2.0.beta3)
actionview (= 7.2.0.beta3)
activejob (= 7.2.0.beta3)
activesupport (= 7.2.0.beta3)
mail (>= 2.8.0)
rails-dom-testing (~> 2.2)
actionpack (7.1.3.4)
actionview (= 7.1.3.4)
activesupport (= 7.1.3.4)
actionpack (7.2.0.beta3)
actionview (= 7.2.0.beta3)
activesupport (= 7.2.0.beta3)
nokogiri (>= 1.8.5)
racc
rack (>= 2.2.4)
@ -46,15 +54,16 @@ GEM
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.6)
actiontext (7.1.3.4)
actionpack (= 7.1.3.4)
activerecord (= 7.1.3.4)
activestorage (= 7.1.3.4)
activesupport (= 7.1.3.4)
useragent (~> 0.16)
actiontext (7.2.0.beta3)
actionpack (= 7.2.0.beta3)
activerecord (= 7.2.0.beta3)
activestorage (= 7.2.0.beta3)
activesupport (= 7.2.0.beta3)
globalid (>= 0.6.0)
nokogiri (>= 1.8.5)
actionview (7.1.3.4)
activesupport (= 7.1.3.4)
actionview (7.2.0.beta3)
activesupport (= 7.2.0.beta3)
builder (~> 3.1)
erubi (~> 1.11)
rails-dom-testing (~> 2.2)
@ -64,31 +73,31 @@ GEM
activemodel (>= 4.1)
case_transform (>= 0.2)
jsonapi-renderer (>= 0.1.1.beta1, < 0.3)
activejob (7.1.3.4)
activesupport (= 7.1.3.4)
activejob (7.2.0.beta3)
activesupport (= 7.2.0.beta3)
globalid (>= 0.3.6)
activemodel (7.1.3.4)
activesupport (= 7.1.3.4)
activerecord (7.1.3.4)
activemodel (= 7.1.3.4)
activesupport (= 7.1.3.4)
activemodel (7.2.0.beta3)
activesupport (= 7.2.0.beta3)
activerecord (7.2.0.beta3)
activemodel (= 7.2.0.beta3)
activesupport (= 7.2.0.beta3)
timeout (>= 0.4.0)
activestorage (7.1.3.4)
actionpack (= 7.1.3.4)
activejob (= 7.1.3.4)
activerecord (= 7.1.3.4)
activesupport (= 7.1.3.4)
activestorage (7.2.0.beta3)
actionpack (= 7.2.0.beta3)
activejob (= 7.2.0.beta3)
activerecord (= 7.2.0.beta3)
activesupport (= 7.2.0.beta3)
marcel (~> 1.0)
activesupport (7.1.3.4)
activesupport (7.2.0.beta3)
base64
bigdecimal
concurrent-ruby (~> 1.0, >= 1.0.2)
concurrent-ruby (~> 1.0, >= 1.3.1)
connection_pool (>= 2.2.5)
drb
i18n (>= 1.6, < 2)
logger (>= 1.4.2)
minitest (>= 5.1)
mutex_m
tzinfo (~> 2.0)
tzinfo (~> 2.0, >= 2.0.5)
addressable (2.8.7)
public_suffix (>= 2.0.2, < 7.0)
aes_key_wrap (1.1.0)
@ -180,9 +189,6 @@ GEM
css_parser (1.17.1)
addressable
csv (3.3.0)
database_cleaner-active_record (2.2.0)
activerecord (>= 5.a)
database_cleaner-core (~> 2.0.0)
database_cleaner-core (2.0.1)
date (3.3.4)
debug (1.9.2)
@ -357,13 +363,14 @@ GEM
aes_key_wrap
bindata
httpclient
json-ld (3.3.1)
json-ld (3.3.2)
htmlentities (~> 4.3)
json-canonicalization (~> 1.0)
link_header (~> 0.0, >= 0.0.8)
multi_json (~> 1.15)
rack (>= 2.2, < 4)
rdf (~> 3.3)
rexml (~> 3.2)
json-ld-preloaded (3.3.0)
json-ld (~> 3.3)
rdf (~> 3.3)
@ -516,7 +523,7 @@ GEM
opentelemetry-api (~> 1.0)
opentelemetry-instrumentation-active_support (~> 0.1)
opentelemetry-instrumentation-base (~> 0.22.1)
opentelemetry-instrumentation-active_job (0.7.3)
opentelemetry-instrumentation-active_job (0.7.4)
opentelemetry-api (~> 1.0)
opentelemetry-instrumentation-base (~> 0.22.1)
opentelemetry-instrumentation-active_model_serializers (0.20.2)
@ -637,20 +644,20 @@ GEM
rackup (1.0.0)
rack (< 3)
webrick
rails (7.1.3.4)
actioncable (= 7.1.3.4)
actionmailbox (= 7.1.3.4)
actionmailer (= 7.1.3.4)
actionpack (= 7.1.3.4)
actiontext (= 7.1.3.4)
actionview (= 7.1.3.4)
activejob (= 7.1.3.4)
activemodel (= 7.1.3.4)
activerecord (= 7.1.3.4)
activestorage (= 7.1.3.4)
activesupport (= 7.1.3.4)
rails (7.2.0.beta3)
actioncable (= 7.2.0.beta3)
actionmailbox (= 7.2.0.beta3)
actionmailer (= 7.2.0.beta3)
actionpack (= 7.2.0.beta3)
actiontext (= 7.2.0.beta3)
actionview (= 7.2.0.beta3)
activejob (= 7.2.0.beta3)
activemodel (= 7.2.0.beta3)
activerecord (= 7.2.0.beta3)
activestorage (= 7.2.0.beta3)
activesupport (= 7.2.0.beta3)
bundler (>= 1.15.0)
railties (= 7.1.3.4)
railties (= 7.2.0.beta3)
rails-controller-testing (1.0.5)
actionpack (>= 5.0.1.rc1)
actionview (>= 5.0.1.rc1)
@ -665,18 +672,19 @@ GEM
rails-i18n (7.0.9)
i18n (>= 0.7, < 2)
railties (>= 6.0.0, < 8)
railties (7.1.3.4)
actionpack (= 7.1.3.4)
activesupport (= 7.1.3.4)
irb
railties (7.2.0.beta3)
actionpack (= 7.2.0.beta3)
activesupport (= 7.2.0.beta3)
irb (~> 1.13)
rackup (>= 1.0.0)
rake (>= 12.2)
thor (~> 1.0, >= 1.2.2)
zeitwerk (~> 2.6)
rainbow (3.1.1)
rake (13.2.1)
rdf (3.3.1)
rdf (3.3.2)
bcp47_spec (~> 0.2)
bigdecimal (~> 3.1, >= 3.1.5)
link_header (~> 0.0, >= 0.0.8)
rdf-normalize (0.7.0)
rdf (~> 3.3)
@ -834,7 +842,6 @@ GEM
unicode-display_width (>= 1.1.1, < 3)
terrapin (1.0.1)
climate_control
test-prof (1.3.3.1)
thor (1.3.1)
tilt (2.3.0)
timeout (0.4.1)
@ -864,6 +871,7 @@ GEM
unf_ext (0.0.9.1)
unicode-display_width (2.5.0)
uri (0.13.0)
useragent (0.16.10)
validate_email (0.1.6)
activemodel (>= 3.0)
mail (>= 2.2.5)
@ -928,7 +936,7 @@ DEPENDENCIES
concurrent-ruby
connection_pool
csv (~> 3.2)
database_cleaner-active_record
database_cleaner-active_record!
debug (~> 1.8)
devise (~> 4.9)
devise-two-factor
@ -973,6 +981,7 @@ DEPENDENCIES
md-paperclip-azure (~> 2.2)
memory_profiler
mime-types (~> 3.5.0)
mutex_m
net-http (~> 0.4.0)
net-ldap (~> 0.18)
nokogiri (~> 1.15)
@ -1012,7 +1021,7 @@ DEPENDENCIES
rack-attack (~> 6.6)
rack-cors (~> 2.0)
rack-test (~> 2.1)
rails (~> 7.1.1)
rails (= 7.2.0.beta3)
rails-controller-testing (~> 1.0)
rails-i18n (~> 7.0)
rdf-normalize (~> 0.5)
@ -1047,7 +1056,7 @@ DEPENDENCIES
stackprof
stoplight (~> 4.1)
strong_migrations
test-prof
test-prof!
thor (~> 1.2)
tty-prompt (~> 0.23)
twitter-text (~> 3.1.0)

View file

@ -2,7 +2,15 @@
module Admin
class TagsController < BaseController
before_action :set_tag
before_action :set_tag, except: [:index]
PER_PAGE = 20
def index
authorize :tag, :index?
@tags = filtered_tags.page(params[:page]).per(PER_PAGE)
end
def show
authorize @tag, :show?
@ -31,5 +39,13 @@ module Admin
def tag_params
params.require(:tag).permit(:name, :display_name, :trendable, :usable, :listable)
end
def filtered_tags
TagFilter.new(filter_params.with_defaults(order: 'newest')).results
end
def filter_params
params.slice(:page, *TagFilter::KEYS).permit(:page, *TagFilter::KEYS)
end
end
end

View file

@ -30,10 +30,10 @@ class Api::BaseController < ApplicationController
protected
def limit_param(default_limit)
def limit_param(default_limit, max_limit = nil)
return default_limit unless params[:limit]
[params[:limit].to_i.abs, default_limit * 2].min
[params[:limit].to_i.abs, max_limit || (default_limit * 2)].min
end
def params_slice(*keys)

View file

@ -7,6 +7,8 @@ class Api::V1::NotificationsController < Api::BaseController
after_action :insert_pagination_headers, only: :index
DEFAULT_NOTIFICATIONS_LIMIT = 40
DEFAULT_NOTIFICATIONS_COUNT_LIMIT = 100
MAX_NOTIFICATIONS_COUNT_LIMIT = 1_000
def index
with_read_replica do
@ -17,6 +19,14 @@ class Api::V1::NotificationsController < Api::BaseController
render json: @notifications, each_serializer: REST::NotificationSerializer, relationships: @relationships
end
def unread_count
limit = limit_param(DEFAULT_NOTIFICATIONS_COUNT_LIMIT, MAX_NOTIFICATIONS_COUNT_LIMIT)
with_read_replica do
render json: { count: browserable_account_notifications.paginate_by_min_id(limit, notification_marker&.last_read_id).count }
end
end
def show
@notification = current_account.notifications.without_suspended.find(params[:id])
render json: @notification, serializer: REST::NotificationSerializer
@ -54,6 +64,10 @@ class Api::V1::NotificationsController < Api::BaseController
)
end
def notification_marker
current_user.markers.find_by(timeline: 'notifications')
end
def target_statuses_from_notifications
@notifications.reject { |notification| notification.target_status.nil? }.map(&:target_status)
end

View file

@ -7,6 +7,8 @@ class Api::V2Alpha::NotificationsController < Api::BaseController
after_action :insert_pagination_headers, only: :index
DEFAULT_NOTIFICATIONS_LIMIT = 40
DEFAULT_NOTIFICATIONS_COUNT_LIMIT = 100
MAX_NOTIFICATIONS_COUNT_LIMIT = 1_000
def index
with_read_replica do
@ -31,13 +33,23 @@ class Api::V2Alpha::NotificationsController < Api::BaseController
'app.notification_grouping.status.unique_count' => statuses.uniq.size
)
render json: @grouped_notifications, each_serializer: REST::NotificationGroupSerializer, relationships: @relationships, group_metadata: @group_metadata
presenter = GroupedNotificationsPresenter.new(@grouped_notifications)
render json: presenter, serializer: REST::DedupNotificationGroupSerializer, relationships: @relationships, group_metadata: @group_metadata
end
end
def unread_count
limit = limit_param(DEFAULT_NOTIFICATIONS_COUNT_LIMIT, MAX_NOTIFICATIONS_COUNT_LIMIT)
with_read_replica do
render json: { count: browserable_account_notifications.paginate_groups_by_min_id(limit, min_id: notification_marker&.last_read_id).count }
end
end
def show
@notification = current_account.notifications.without_suspended.find_by!(group_key: params[:id])
render json: NotificationGroup.from_notification(@notification), serializer: REST::NotificationGroupSerializer
presenter = GroupedNotificationsPresenter.new([NotificationGroup.from_notification(@notification)])
render json: presenter, serializer: REST::DedupNotificationGroupSerializer
end
def clear
@ -92,6 +104,10 @@ class Api::V2Alpha::NotificationsController < Api::BaseController
)
end
def notification_marker
current_user.markers.find_by(timeline: 'notifications')
end
def target_statuses_from_notifications
@notifications.filter_map(&:target_status)
end

View file

@ -0,0 +1,15 @@
# frozen_string_literal: true
module Admin::TagsHelper
def admin_tags_moderation_options
[
[t('admin.tags.moderation.reviewed'), 'reviewed'],
[t('admin.tags.moderation.review_requested'), 'review_requested'],
[t('admin.tags.moderation.unreviewed'), 'unreviewed'],
[t('admin.tags.moderation.trendable'), 'trendable'],
[t('admin.tags.moderation.not_trendable'), 'not_trendable'],
[t('admin.tags.moderation.usable'), 'usable'],
[t('admin.tags.moderation.not_usable'), 'not_usable'],
]
end
end

View file

@ -38,10 +38,6 @@ function dispatchAssociatedRecords(
const fetchedStatuses: ApiStatusJSON[] = [];
notifications.forEach((notification) => {
if ('sample_accounts' in notification) {
fetchedAccounts.push(...notification.sample_accounts);
}
if (notification.type === 'admin.report') {
fetchedAccounts.push(notification.report.target_account);
}
@ -75,7 +71,9 @@ export const fetchNotifications = createDataLoadingThunk(
: excludeAllTypesExcept(activeFilter),
});
},
({ notifications }, { dispatch }) => {
({ notifications, accounts, statuses }, { dispatch }) => {
dispatch(importFetchedAccounts(accounts));
dispatch(importFetchedStatuses(statuses));
dispatchAssociatedRecords(dispatch, notifications);
const payload: (ApiNotificationGroupJSON | NotificationGap)[] =
notifications;
@ -95,7 +93,9 @@ export const fetchNotificationsGap = createDataLoadingThunk(
async (params: { gap: NotificationGap }) =>
apiFetchNotifications({ max_id: params.gap.maxId }),
({ notifications }, { dispatch }) => {
({ notifications, accounts, statuses }, { dispatch }) => {
dispatch(importFetchedAccounts(accounts));
dispatch(importFetchedStatuses(statuses));
dispatchAssociatedRecords(dispatch, notifications);
return { notifications };

View file

@ -1,17 +1,24 @@
import api, { apiRequest, getLinks } from 'mastodon/api';
import type { ApiNotificationGroupJSON } from 'mastodon/api_types/notifications';
import type { ApiNotificationGroupsResultJSON } from 'mastodon/api_types/notifications';
export const apiFetchNotifications = async (params?: {
exclude_types?: string[];
max_id?: string;
}) => {
const response = await api().request<ApiNotificationGroupJSON[]>({
const response = await api().request<ApiNotificationGroupsResultJSON>({
method: 'GET',
url: '/api/v2_alpha/notifications',
params,
});
return { notifications: response.data, links: getLinks(response) };
const { statuses, accounts, notification_groups } = response.data;
return {
statuses,
accounts,
notifications: notification_groups,
links: getLinks(response),
};
};
export const apiClearNotifications = () =>

View file

@ -51,7 +51,7 @@ export interface BaseNotificationGroupJSON {
group_key: string;
notifications_count: number;
type: NotificationType;
sample_accounts: ApiAccountJSON[];
sample_account_ids: string[];
latest_page_notification_at: string; // FIXME: This will only be present if the notification group is returned in a paginated list, not requested directly
most_recent_notification_id: string;
page_min_id?: string;
@ -143,3 +143,9 @@ export type ApiNotificationGroupJSON =
| AccountRelationshipSeveranceNotificationGroupJSON
| NotificationGroupWithStatusJSON
| ModerationWarningNotificationGroupJSON;
export interface ApiNotificationGroupsResultJSON {
accounts: ApiAccountJSON[];
statuses: ApiStatusJSON[];
notification_groups: ApiNotificationGroupJSON[];
}

View file

@ -49,21 +49,14 @@ export const FilteredNotificationsBanner: React.FC = () => {
<span>
<FormattedMessage
id='filtered_notifications_banner.pending_requests'
defaultMessage='Notifications from {count, plural, =0 {no one} one {one person} other {# people}} you may know'
defaultMessage='From {count, plural, =0 {no one} one {one person} other {# people}} you may know'
values={{ count: policy.summary.pending_requests_count }}
/>
</span>
</div>
<div className='filtered-notifications-banner__badge'>
<div className='filtered-notifications-banner__badge__badge'>
{toCappedNumber(policy.summary.pending_notifications_count)}
</div>
<FormattedMessage
id='filtered_notifications_banner.mentions'
defaultMessage='{count, plural, one {mention} other {mentions}}'
values={{ count: policy.summary.pending_notifications_count }}
/>
{toCappedNumber(policy.summary.pending_notifications_count)}
</div>
</Link>
);

View file

@ -7,9 +7,9 @@ import { Helmet } from 'react-helmet';
import { useSelector, useDispatch } from 'react-redux';
import DeleteIcon from '@/material-icons/400-24px/delete.svg?react';
import DoneIcon from '@/material-icons/400-24px/done.svg?react';
import InventoryIcon from '@/material-icons/400-24px/inventory_2.svg?react';
import VolumeOffIcon from '@/material-icons/400-24px/volume_off.svg?react';
import { fetchNotificationRequest, fetchNotificationsForRequest, expandNotificationsForRequest, acceptNotificationRequest, dismissNotificationRequest } from 'mastodon/actions/notifications';
import Column from 'mastodon/components/column';
import ColumnHeader from 'mastodon/components/column_header';
@ -101,7 +101,7 @@ export const NotificationRequest = ({ multiColumn, params: { id } }) => {
showBackButton
extraButton={!removed && (
<>
<IconButton className='column-header__button' iconComponent={VolumeOffIcon} onClick={handleDismiss} title={intl.formatMessage(messages.dismiss)} />
<IconButton className='column-header__button' iconComponent={DeleteIcon} onClick={handleDismiss} title={intl.formatMessage(messages.dismiss)} />
<IconButton className='column-header__button' iconComponent={DoneIcon} onClick={handleAccept} title={intl.formatMessage(messages.accept)} />
</>
)}

View file

@ -1,5 +1,6 @@
import { FormattedMessage } from 'react-intl';
import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react';
import ReplyIcon from '@/material-icons/400-24px/reply-fill.svg?react';
import type { StatusVisibility } from 'mastodon/api_types/statuses';
import type { NotificationGroupMention } from 'mastodon/models/notification_group';
@ -39,7 +40,7 @@ export const NotificationMention: React.FC<{
return (
<NotificationWithStatus
type='mention'
icon={ReplyIcon}
icon={statusVisibility === 'direct' ? AlternateEmailIcon : ReplyIcon}
iconId='reply'
accountIds={notification.sampleAccountIds}
count={notification.notifications_count}

View file

@ -300,8 +300,7 @@
"filter_modal.select_filter.subtitle": "Use an existing category or create a new one",
"filter_modal.select_filter.title": "Filter this post",
"filter_modal.title.status": "Filter a post",
"filtered_notifications_banner.mentions": "{count, plural, one {mention} other {mentions}}",
"filtered_notifications_banner.pending_requests": "Notifications from {count, plural, =0 {no one} one {one person} other {# people}} you may know",
"filtered_notifications_banner.pending_requests": "From {count, plural, =0 {no one} one {one person} other {# people}} you may know",
"filtered_notifications_banner.title": "Filtered notifications",
"firehose.all": "All",
"firehose.local": "This server",

View file

@ -1,6 +1,6 @@
{
"about.blocks": "Moderoidut palvelimet",
"about.contact": "Ota yhteys:",
"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.",
@ -45,7 +45,7 @@
"account.joined_short": "Liittynyt",
"account.languages": "Vaihda tilattuja kieliä",
"account.link_verified_on": "Linkin omistus tarkistettiin {date}",
"account.locked_info": "Tilin yksityisyystilaksi on määritetty lukittu ja tilin omistaja arvioi erikseen, kuka voi seurata häntä.",
"account.locked_info": "Tilin yksityisyystilaksi on määritetty lukittu. Tilin omistaja arvioi erikseen, kuka voi seurata häntä.",
"account.media": "Media",
"account.mention": "Mainitse @{name}",
"account.moved_to": "{name} on ilmoittanut uudeksi tilikseen",
@ -119,7 +119,7 @@
"column.blocks": "Estetyt käyttäjät",
"column.bookmarks": "Kirjanmerkit",
"column.community": "Paikallinen aikajana",
"column.direct": "Yksityiset maininnat",
"column.direct": "Yksityismaininnat",
"column.directory": "Selaa profiileja",
"column.domain_blocks": "Estetyt verkkotunnukset",
"column.favourites": "Suosikit",
@ -223,14 +223,14 @@
"domain_pill.activitypub_lets_connect": "Sen avulla voit muodostaa yhteyden ja olla vuorovaikutuksessa ihmisten kanssa, ei vain Mastodonissa vaan myös muissa sosiaalisissa sovelluksissa.",
"domain_pill.activitypub_like_language": "ActivityPub on kuin kieli, jota Mastodon puhuu muiden sosiaalisten verkostojen kanssa.",
"domain_pill.server": "Palvelin",
"domain_pill.their_handle": "Hänen käyttäjänimensä:",
"domain_pill.their_handle": "Hänen käyttäjätunnuksensa:",
"domain_pill.their_server": "Hänen digitaalinen kotinsa, jossa kaikki hänen julkaisunsa sijaitsevat.",
"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änimessä on?",
"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 läpi sosiaalisen verkon, 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 läpi sosiaalisen verkon, joka koostuu <button>ActivityPub-pohjaisista alustoista</button>.",
"domain_pill.your_handle": "Käyttäjänimesi:",
"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.",
"embed.instructions": "Upota julkaisu verkkosivullesi kopioimalla alla oleva koodi.",
@ -246,7 +246,7 @@
"emoji_button.objects": "Esineet",
"emoji_button.people": "Ihmiset",
"emoji_button.recent": "Usein käytetyt",
"emoji_button.search": "Etsi...",
"emoji_button.search": "Hae...",
"emoji_button.search_results": "Hakutulokset",
"emoji_button.symbols": "Symbolit",
"emoji_button.travel": "Matkailu ja paikat",
@ -357,7 +357,7 @@
"home.pending_critical_update.link": "Tutustu päivityssisältöihin",
"home.pending_critical_update.title": "Kriittinen tietoturvapäivitys saatavilla!",
"home.show_announcements": "Näytä tiedotteet",
"interaction_modal.description.favourite": "Mastodon-tilillä voit lisätä tämän julkaisun suosikkeihisi osoittaaksesi kirjoittajalle arvostavasi sitä ja tallentaaksesi sen tulevaa käyttöä varten.",
"interaction_modal.description.favourite": "Mastodon-tilillä voit lisätä tämän julkaisun suosikkeihisi osoittaaksesi tekijälle arvostavasi sitä ja tallentaaksesi sen tulevaa käyttöä varten.",
"interaction_modal.description.follow": "Mastodon-tilillä voit seurata käyttäjää {name} saadaksesi hänen julkaisunsa kotisyötteeseesi.",
"interaction_modal.description.reblog": "Mastodon-tilillä voit tehostaa tätä julkaisua jakaaksesi sen seuraajiesi kanssa.",
"interaction_modal.description.reply": "Mastodon-tilillä voit vastata tähän julkaisuun.",
@ -367,7 +367,7 @@
"interaction_modal.on_another_server": "Toisella palvelimella",
"interaction_modal.on_this_server": "Tällä palvelimella",
"interaction_modal.sign_in": "Et ole kirjautunut tälle palvelimelle. Millä palvelimella tilisi sijaitsee?",
"interaction_modal.sign_in_hint": "Vihje: Se on sama verkkosivusto, jolle rekisteröidyit. Jos et muista, etsi tervetulosähköposti saapuneista viesteistäsi. Voit myös syöttää koko käyttäjätunnuksesi! (Esimerkki: @Mastodon@Mastodon.social)",
"interaction_modal.sign_in_hint": "Vihje: Se on sama verkkosivusto, jolle rekisteröidyit. Jos et muista palvelintasi, etsi tervetulosähköposti saapuneista viesteistäsi. Voit myös syöttää koko käyttäjätunnuksesi! (Esimerkki: @Mastodon@Mastodon.social)",
"interaction_modal.title.favourite": "Lisää käyttäjän {name} julkaisu suosikkeihin",
"interaction_modal.title.follow": "Seuraa käyttäjää {name}",
"interaction_modal.title.reblog": "Tehosta käyttäjän {name} julkaisua",
@ -392,13 +392,13 @@
"keyboard_shortcuts.hotkey": "Pikanäppäin",
"keyboard_shortcuts.legend": "Näytä tämä ohje",
"keyboard_shortcuts.local": "Avaa paikallinen aikajana",
"keyboard_shortcuts.mention": "Mainitse julkaisija",
"keyboard_shortcuts.mention": "Mainitse tekijä",
"keyboard_shortcuts.muted": "Avaa mykistettyjen käyttäjien luettelo",
"keyboard_shortcuts.my_profile": "Avaa profiilisi",
"keyboard_shortcuts.notifications": "Avaa ilmoitussarake",
"keyboard_shortcuts.open_media": "Avaa media",
"keyboard_shortcuts.pinned": "Avaa kiinnitettyjen julkaisujen luettelo",
"keyboard_shortcuts.profile": "Avaa kirjoittajan profiili",
"keyboard_shortcuts.profile": "Avaa tekijän profiili",
"keyboard_shortcuts.reply": "Vastaa julkaisuun",
"keyboard_shortcuts.requests": "Avaa seurantapyyntöjen luettelo",
"keyboard_shortcuts.search": "Kohdista hakukenttään",
@ -544,13 +544,13 @@
"notifications.permission_denied": "Työpöytäilmoitukset eivät ole käytettävissä, koska selaimen käyttöoikeuspyyntö on aiemmin evätty",
"notifications.permission_denied_alert": "Työpöytäilmoituksia ei voi ottaa käyttöön, koska selaimen käyttöoikeus on aiemmin evätty",
"notifications.permission_required": "Työpöytäilmoitukset eivät ole käytettävissä, koska siihen tarvittavaa käyttöoikeutta ei ole myönnetty.",
"notifications.policy.filter_new_accounts.hint": "Luotu {days, plural, one {viime päivänä} other {viimeisenä # päivänä}}",
"notifications.policy.filter_new_accounts.hint": "Luotu {days, plural, one {viime päivän} other {viimeisen # päivän}} aikana",
"notifications.policy.filter_new_accounts_title": "Uudet tilit",
"notifications.policy.filter_not_followers_hint": "Mukaan lukien alle {days, plural, one {päivän} other {# päivää}} sinua seuranneet",
"notifications.policy.filter_not_followers_title": "Henkilöt, jotka eivät seuraa sinua",
"notifications.policy.filter_not_following_hint": "Kunnes hyväksyt ne manuaalisesti",
"notifications.policy.filter_not_following_hint": "Kunnes hyväksyt heidät manuaalisesti",
"notifications.policy.filter_not_following_title": "Henkilöt, joita et seuraa",
"notifications.policy.filter_private_mentions_hint": "Suodatetaan, ellei se vastaa omaan mainintaasi tai ellet seuraa lähettäjää",
"notifications.policy.filter_private_mentions_hint": "Suodatetaan, ellei se ole vastaus omaan mainintaasi tai ellet seuraa lähettäjää",
"notifications.policy.filter_private_mentions_title": "Ei-toivotut yksityismaininnat",
"notifications.policy.title": "Suodata ilmoitukset pois kohteesta…",
"notifications_permission_banner.enable": "Ota työpöytäilmoitukset käyttöön",
@ -573,8 +573,8 @@
"onboarding.profile.note_hint": "Voit @mainita muita käyttäjiä tai #aihetunnisteita…",
"onboarding.profile.save_and_continue": "Tallenna ja jatka",
"onboarding.profile.title": "Profiilin määritys",
"onboarding.profile.upload_avatar": "Lataa profiilikuva",
"onboarding.profile.upload_header": "Lataa profiilin otsakekuva",
"onboarding.profile.upload_avatar": "Lähetä profiilikuva",
"onboarding.profile.upload_header": "Lähetä profiilin otsakekuva",
"onboarding.share.lead": "Kerro ihmisille, kuinka he voivat löytää sinut Mastodonista!",
"onboarding.share.message": "Olen {username} #Mastodonissa! Seuraa minua osoitteessa {url}",
"onboarding.share.next_steps": "Mahdolliset seuraavat vaiheet:",
@ -591,7 +591,7 @@
"onboarding.steps.share_profile.body": "Kerro kavereillesi, kuinka sinut löytää Mastodonista",
"onboarding.steps.share_profile.title": "Jaa Mastodon-profiilisi",
"onboarding.tips.2fa": "<strong>Tiesitkö?</strong> Voit suojata tilisi ottamalla kaksivaiheisen todennuksen käyttöön tilisi asetuksista. Se toimii millä tahansa TOTP-sovelluksella, eikä sen käyttö edellytä puhelinnumeron luovuttamista!",
"onboarding.tips.accounts_from_other_servers": "<strong>Tiesitkö?</strong> Koska Mastodon on hajautettu, osa kohtaamistasi profiileista sijaitsee muilla kuin sinun palvelimellasi. Voit silti viestiä saumattomasti heidän kanssaan! Heidän palvelimensa mainitaan käyttäjänimen jälkiosassa!",
"onboarding.tips.accounts_from_other_servers": "<strong>Tiesitkö?</strong> Koska Mastodon on hajautettu, osa kohtaamistasi profiileista sijaitsee muilla kuin sinun palvelimellasi. Voit silti viestiä saumattomasti heidän kanssaan! Heidän palvelimensa mainitaan käyttäjätunnuksen jälkiosassa!",
"onboarding.tips.migration": "<strong>Tiesitkö?</strong> Jos koet, ettei {domain} ole jatkossa itsellesi hyvä palvelinvalinta, voit siirtyä toiselle Mastodon-palvelimelle menettämättä seuraajiasi. Voit jopa isännöidä omaa palvelintasi!",
"onboarding.tips.verification": "<strong>Tiesitkö?</strong> Voit vahvistaa tilisi lisäämällä omalle verkkosivustollesi linkin Mastodon-profiiliisi ja lisäämällä sitten verkkosivustosi osoitteen Mastodon-profiilisi lisäkenttään. Tämä ei maksa mitään, eikä sinun tarvitse lähetellä asiakirjoja!",
"password_confirmation.exceeds_maxlength": "Salasanan vahvistus ylittää salasanan enimmäispituuden",
@ -614,10 +614,10 @@
"privacy.private.short": "Seuraajat",
"privacy.public.long": "Kuka tahansa Mastodonissa ja sen ulkopuolella",
"privacy.public.short": "Julkinen",
"privacy.unlisted.additional": "Tämä on muutoin kuin julkinen julkaisu, mutta sitä ei näytetä livesyöte-, aihetunniste- tai selailunäkymissä eikä Mastodon-hakutuloksissakaan, vaikka ne olisivat käyttäjätililläsi yleisesti sallittuina.",
"privacy.unlisted.additional": "Tämä toimii muuten kuin julkinen, mutta julkaisut eivät näy livesyöte-, aihetunniste- tai selausnäkymissä eivätkä Mastodonin hakutuloksissa, vaikka ne olisivat käyttäjätililläsi yleisesti sallittuina.",
"privacy.unlisted.long": "Vähemmän algoritmiperusteista sisältöä",
"privacy.unlisted.short": "Vaivihkaisesti julkinen",
"privacy_policy.last_updated": "Viimeksi päivitetty {date}",
"privacy_policy.last_updated": "Päivitetty viimeksi {date}",
"privacy_policy.title": "Tietosuojakäytäntö",
"recommended": "Suositeltu",
"refresh": "Päivitä",
@ -692,7 +692,7 @@
"search.quick_action.account_search": "Profiilit haulla {x}",
"search.quick_action.go_to_account": "Siirry profiiliin {x}",
"search.quick_action.go_to_hashtag": "Siirry aihetunnisteeseen {x}",
"search.quick_action.open_url": "Avaa verkko-osoite Mastodonissa",
"search.quick_action.open_url": "Avaa URL-osoite Mastodonissa",
"search.quick_action.status_search": "Julkaisut haulla {x}",
"search.search_or_paste": "Hae tai liitä URL-osoite",
"search_popout.full_text_search_disabled_message": "Ei saatavilla palvelimella {domain}.",
@ -727,7 +727,7 @@
"status.bookmark": "Lisää kirjanmerkki",
"status.cancel_reblog_private": "Peru tehostus",
"status.cannot_reblog": "Tätä julkaisua ei voi tehostaa",
"status.copy": "Kopioi julkaisun linkki",
"status.copy": "Kopioi linkki julkaisuun",
"status.delete": "Poista",
"status.detailed_status": "Yksityiskohtainen keskustelunäkymä",
"status.direct": "Mainitse @{name} yksityisesti",
@ -800,10 +800,10 @@
"units.short.billion": "{count} mrd.",
"units.short.million": "{count} milj.",
"units.short.thousand": "{count} t.",
"upload_area.title": "Lataa raahaamalla ja pudottamalla tähän",
"upload_area.title": "Lähetä raahaamalla ja pudottamalla tähän",
"upload_button.label": "Lisää kuvia, video tai äänitiedosto",
"upload_error.limit": "Tiedostolatauksien rajoitus ylitetty.",
"upload_error.poll": "Tiedostojen lisääminen ei ole sallittua kyselyjen ohessa.",
"upload_error.limit": "Tiedostolähetysten rajoitus ylitetty.",
"upload_error.poll": "Tiedostojen lisääminen äänestysten oheen ei ole sallittua.",
"upload_form.audio_description": "Kuvaile sisältöä kuuroille ja kuulorajoitteisille",
"upload_form.description": "Kuvaile sisältöä sokeille ja näkörajoitteisille",
"upload_form.edit": "Muokkaa",
@ -819,9 +819,9 @@
"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": "Tallennetaan...",
"upload_progress.label": "Lähetetään...",
"upload_progress.processing": "Käsitellään…",
"username.taken": "Käyttäjänimi on jo varattu. Kokeile toista",
"username.taken": "Tämä käyttäjänimi on jo käytössä. Kokeile toista",
"video.close": "Sulje video",
"video.download": "Lataa tiedosto",
"video.exit_fullscreen": "Poistu koko näytön tilasta",

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": "ดูการสนทนา",
@ -503,6 +510,7 @@
"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": "การแจ้งเตือนบนเดสก์ท็อป",

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} 驱动的去中心化社交媒体",
@ -63,7 +63,7 @@
"account.requested_follow": "{name} 已经向你发送了关注请求",
"account.share": "分享 @{name} 的个人资料页",
"account.show_reblogs": "显示来自 @{name} 的转嘟",
"account.statuses_counter": "{count, plural, other {{counter} 嘟文}}",
"account.statuses_counter": "{count, plural, other {{counter} 嘟文}}",
"account.unblock": "取消屏蔽 @{name}",
"account.unblock_domain": "取消屏蔽 {domain} 域名",
"account.unblock_short": "取消屏蔽",
@ -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": "发生了意外错误。",
@ -89,14 +89,14 @@
"announcement.announcement": "公告",
"attachments_list.unprocessed": "(未处理)",
"audio.hide": "隐藏音频",
"block_modal.remote_users_caveat": "我们将要求服务器 {domain} 尊重您的决定。然而,无法保证对方一定遵从,因为某些服务器可能会以不同的方处理屏蔽操作。公开嘟文仍然可能对未登录用户可见。",
"block_modal.show_less": "显示更少",
"block_modal.show_more": "显示更多",
"block_modal.remote_users_caveat": "我们将要求服务器 {domain} 尊重您的决定。然而,我们无法保证对方一定遵从,因为某些服务器可能会以不同的方处理屏蔽操作。公开嘟文仍然可能对未登录用户可见。",
"block_modal.show_less": "隐藏",
"block_modal.show_more": "展开",
"block_modal.they_cant_mention": "他们不能提及或关注你。",
"block_modal.they_cant_see_posts": "他们看不到你的嘟文,你也看不到他们的嘟文。",
"block_modal.they_will_know": "他们可以看到他们被屏蔽。",
"block_modal.title": "屏蔽用户?",
"block_modal.you_wont_see_mentions": "你不会看到提及他们的嘟文。",
"block_modal.they_cant_see_posts": "嘟文将被设置为互相不可见。",
"block_modal.they_will_know": "他们将会获知他们被屏蔽。",
"block_modal.title": "屏蔽用户?",
"block_modal.you_wont_see_mentions": "你将无法看到提及他们的嘟文。",
"boost_modal.combo": "下次按住 {combo} 即可跳过此提示",
"bundle_column_error.copy_stacktrace": "复制错误报告",
"bundle_column_error.error.body": "请求的页面无法渲染,可能是代码出现错误或浏览器存在兼容性问题。",

View file

@ -14,7 +14,7 @@ import type { ApiReportJSON } from 'mastodon/api_types/reports';
export const NOTIFICATIONS_GROUP_MAX_AVATARS = 8;
interface BaseNotificationGroup
extends Omit<BaseNotificationGroupJSON, 'sample_accounts'> {
extends Omit<BaseNotificationGroupJSON, 'sample_account_ids'> {
sampleAccountIds: string[];
}
@ -115,8 +115,7 @@ function createAccountRelationshipSeveranceEventFromJSON(
export function createNotificationGroupFromJSON(
groupJson: ApiNotificationGroupJSON,
): NotificationGroup {
const { sample_accounts, ...group } = groupJson;
const sampleAccountIds = sample_accounts.map((account) => account.id);
const { sample_account_ids: sampleAccountIds, ...group } = groupJson;
switch (group.type) {
case 'favourite':

View file

@ -350,6 +350,10 @@
color: $primary-text-color;
font-weight: 700;
}
.warning-hint {
font-weight: normal !important;
}
}
&__body {

View file

@ -10171,25 +10171,10 @@ noscript {
}
&__badge {
display: flex;
align-items: center;
border-radius: 999px;
background: var(--background-border-color);
color: $darker-text-color;
padding: 4px;
padding-inline-end: 8px;
gap: 6px;
font-weight: 500;
font-size: 11px;
line-height: 16px;
word-break: keep-all;
&__badge {
background: $ui-button-background-color;
color: $white;
border-radius: 100px;
padding: 2px 8px;
}
background: $ui-button-background-color;
color: $white;
border-radius: 100px;
padding: 2px 8px;
}
}

View file

@ -286,6 +286,10 @@ a.table-action-link {
padding: 0;
}
&--padded {
padding: 12px 16px 16px;
}
&--with-image {
display: flex;
align-items: center;

View file

@ -6,7 +6,7 @@ class Admin::SystemCheck::DatabaseSchemaCheck < Admin::SystemCheck::BaseCheck
end
def pass?
!ActiveRecord::Base.connection.migration_context.needs_migration?
!ActiveRecord::Base.connection_pool.migration_context.needs_migration?
end
def message

View file

@ -0,0 +1,74 @@
# frozen_string_literal: true
class Admin::TagFilter
KEYS = %i(
status
name
order
).freeze
attr_reader :params
def initialize(params)
@params = params.to_h.symbolize_keys
end
def results
scope = Tag.reorder(nil)
params.each do |key, value|
next if key == :page
scope.merge!(scope_for(key, value)) if value.present?
end
scope
end
private
def scope_for(key, value)
case key
when :status
status_scope(value)
when :name
Tag.search_for(value.to_s.strip, params[:limit], params[:offset], exclude_unlistable: false)
when :order
order_scope(value)
else
raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end
end
def status_scope(value)
case value.to_s
when 'reviewed'
Tag.reviewed
when 'review_requested'
Tag.pending_review
when 'unreviewed'
Tag.unreviewed
when 'trendable'
Tag.trendable
when 'not_trendable'
Tag.not_trendable
when 'usable'
Tag.usable
when 'not_usable'
Tag.not_usable
else
raise Mastodon::InvalidParameterError, "Unknown status: #{value}"
end
end
def order_scope(value)
case value.to_s
when 'newest'
Tag.order(created_at: :desc)
when 'oldest'
Tag.order(created_at: :asc)
else
raise Mastodon::InvalidParameterError, "Unknown order: #{value}"
end
end
end

View file

@ -15,7 +15,9 @@ module Status::SafeReblogInsert
#
# The code is kept similar to ActiveRecord::Persistence code and calls it
# directly when we are not handling a reblog.
def _insert_record(values, returning)
#
# https://github.com/rails/rails/blob/7-2-stable/activerecord/lib/active_record/persistence.rb#L238-L263
def _insert_record(connection, values, returning)
return super unless values.is_a?(Hash) && values['reblog_of_id']&.value.present?
primary_key = self.primary_key
@ -34,10 +36,15 @@ module Status::SafeReblogInsert
# Instead, we use a custom builder when a reblog is happening:
im = _compile_reblog_insert(values)
connection.insert(im, "#{self} Create", primary_key || false, primary_key_value, returning: returning).tap do |result|
# Since we are using SELECT instead of VALUES, a non-error `nil` return is possible.
# For our purposes, it's equivalent to a foreign key constraint violation
raise ActiveRecord::InvalidForeignKey, "(reblog_of_id)=(#{values['reblog_of_id'].value}) is not present in table \"statuses\"" if result.nil?
with_connection do |_c|
connection.insert(
im, "#{self} Create", primary_key || false, primary_key_value,
returning: returning
).tap do |result|
# Since we are using SELECT instead of VALUES, a non-error `nil` return is possible.
# For our purposes, it's equivalent to a foreign key constraint violation
raise ActiveRecord::InvalidForeignKey, "(reblog_of_id)=(#{values['reblog_of_id'].value}) is not present in table \"statuses\"" if result.nil?
end
end
end

View file

@ -52,6 +52,7 @@ class Tag < ApplicationRecord
scope :unreviewed, -> { where(reviewed_at: nil) }
scope :pending_review, -> { unreviewed.where.not(requested_review_at: nil) }
scope :usable, -> { where(usable: [true, nil]) }
scope :not_usable, -> { where(usable: false) }
scope :listable, -> { where(listable: [true, nil]) }
scope :trendable, -> { Setting.trendable_by_default ? where(trendable: [true, nil]) : where(trendable: true) }
scope :not_trendable, -> { where(trendable: false) }
@ -74,6 +75,10 @@ class Tag < ApplicationRecord
attributes['display_name'] || name
end
def formatted_name
"##{display_name}"
end
def usable
boolean_with_default('usable', true)
end
@ -132,8 +137,10 @@ class Tag < ApplicationRecord
def search_for(term, limit = 5, offset = 0, options = {})
stripped_term = term.strip
options.reverse_merge!({ exclude_unlistable: true, exclude_unreviewed: false })
query = Tag.listable.matches_name(stripped_term)
query = Tag.matches_name(stripped_term)
query = query.merge(Tag.listable) if options[:exclude_unlistable]
query = query.merge(matching_name(stripped_term).or(where.not(reviewed_at: nil))) if options[:exclude_unreviewed]
query.order(Arel.sql('length(name) ASC, name ASC'))

View file

@ -0,0 +1,21 @@
# frozen_string_literal: true
class GroupedNotificationsPresenter < ActiveModelSerializers::Model
def initialize(grouped_notifications)
super()
@grouped_notifications = grouped_notifications
end
def notification_groups
@grouped_notifications
end
def statuses
@grouped_notifications.filter_map(&:target_status).uniq(&:id)
end
def accounts
@grouped_notifications.flat_map(&:sample_accounts).uniq(&:id)
end
end

View file

@ -0,0 +1,7 @@
# frozen_string_literal: true
class REST::DedupNotificationGroupSerializer < ActiveModel::Serializer
has_many :accounts, serializer: REST::AccountSerializer
has_many :statuses, serializer: REST::StatusSerializer
has_many :notification_groups, serializer: REST::NotificationGroupSerializer
end

View file

@ -8,12 +8,20 @@ class REST::NotificationGroupSerializer < ActiveModel::Serializer
attribute :page_max_id, if: :paginated?
attribute :latest_page_notification_at, if: :paginated?
has_many :sample_accounts, serializer: REST::AccountSerializer
belongs_to :target_status, key: :status, if: :status_type?, serializer: REST::StatusSerializer
attribute :sample_account_ids
attribute :status_id, if: :status_type?
belongs_to :report, if: :report_type?, serializer: REST::ReportSerializer
belongs_to :account_relationship_severance_event, key: :event, if: :relationship_severance_event?, serializer: REST::AccountRelationshipSeveranceEventSerializer
belongs_to :account_warning, key: :moderation_warning, if: :moderation_warning_event?, serializer: REST::AccountWarningSerializer
def sample_account_ids
object.sample_accounts.pluck(:id).map(&:to_s)
end
def status_id
object.target_status&.id&.to_s
end
def status_type?
[:favourite, :reblog, :status, :mention, :poll, :update].include?(object.type)
end

View file

@ -0,0 +1,27 @@
.batch-table__row{ class: [!tag.requires_review? && !tag.usable? && 'batch-table__row--muted'] }
.batch-table__row__content.batch-table__row__content--padded.pending-account
.pending-account__header
%strong
= link_to tag.formatted_name, admin_tag_path(tag.id)
%br/
- if tag.usable?
= t('admin.tags.moderation.usable')
- else
= t('admin.tags.moderation.not_usable')
·
- if tag.trendable?
= t('admin.tags.moderation.trendable')
- else
= t('admin.tags.moderation.not_trendable')
- if tag.requested_review? || tag.requires_review?
·
- if tag.requested_review?
%span.negative-hint
= t('admin.tags.moderation.review_requested')
- else
%span.warning-hint
= t('admin.tags.moderation.pending_review')

View file

@ -0,0 +1,39 @@
- content_for :page_title do
= t('admin.tags.title')
= form_with url: admin_tags_url, method: :get, class: :simple_form do |form|
.filters
.filter-subset.filter-subset--with-select
%strong= t('admin.tags.moderation.title')
.input.select.optional
= form.select :status,
options_for_select(admin_tags_moderation_options, params[:status]),
prompt: t('generic.all')
.filter-subset.filter-subset--with-select
%strong= t 'generic.order_by'
.input.select
= form.select :order,
options_for_select([[t('admin.tags.newest'), 'newest'], [t('admin.tags.oldest'), 'oldest']], params[:order])
.fields-group
.input.string.optional
= form.text_field :name,
value: params[:name],
class: 'string optional',
placeholder: t('admin.tags.name')
.actions
%button.button= t('admin.tags.search')
= link_to t('admin.tags.reset'), admin_tags_path, class: 'button negative'
%hr.spacer/
.batch-table
.batch-table__body
- if @tags.empty?
= nothing_here 'nothing-here--under-tabs'
- else
= render partial: 'tag', collection: @tags
= paginate @tags

View file

@ -1,12 +1,13 @@
- content_for :page_title do
= "##{@tag.display_name}"
= @tag.formatted_name
- if current_user.can?(:view_dashboard)
- content_for :heading_actions do
- content_for :heading_actions do
- if current_user.can?(:view_dashboard)
= l(@time_period.first)
= ' - '
= l(@time_period.last)
- if current_user.can?(:view_dashboard)
.dashboard
.dashboard__item
= react_admin_component :counter,

View file

@ -4,9 +4,7 @@
.batch-table__row__content.pending-account
.pending-account__header
= link_to admin_tag_path(tag.id) do
= material_symbol 'tag'
= tag.display_name
= link_to tag.formatted_name, admin_tag_path(tag.id)
%br/

View file

@ -61,10 +61,7 @@ Bundler.require(:pam_authentication) if ENV['PAM_ENABLED'] == 'true'
module Mastodon
class Application < Rails::Application
# Initialize configuration defaults for originally generated Rails version.
config.load_defaults 7.1
# Explicitly set the cache format version to align with Rails version
config.active_support.cache_format_version = 7.1
config.load_defaults 7.2
# Please, add to the `ignore` list any other `lib` subdirectories that do
# not contain `.rb` files, or that should not be reloaded or eager loaded.

View file

@ -16,7 +16,7 @@ Rails.application.configure do
# Show full error reports.
config.consider_all_requests_local = true
# Enable server timing
# Enable server timing.
config.server_timing = true
# Enable/disable caching. By default caching is disabled.
@ -37,11 +37,6 @@ Rails.application.configure do
config.action_controller.forgery_protection_origin_check = ENV['DISABLE_FORGERY_REQUEST_PROTECTION'].nil?
ActiveSupport::Logger.new($stdout).tap do |logger|
logger.formatter = config.log_formatter
config.logger = ActiveSupport::TaggedLogging.new(logger)
end
# Generate random VAPID keys
Webpush.generate_key.tap do |vapid_key|
config.x.vapid_private_key = vapid_key.private_key
@ -53,6 +48,8 @@ Rails.application.configure do
config.action_mailer.perform_caching = false
config.action_mailer.default_options = { from: 'notifications@localhost' }
# Print deprecation notices to the Rails logger.
config.active_support.deprecation = :log
@ -75,12 +72,7 @@ Rails.application.configure do
# config.i18n.raise_on_missing_translations = true
# Annotate rendered view with file names.
# config.action_view.annotate_rendered_view_with_filenames = true
# Uncomment if you wish to allow Action Cable access from any origin.
# config.action_cable.disable_request_forgery_protection = true
config.action_mailer.default_options = { from: 'notifications@localhost' }
config.action_view.annotate_rendered_view_with_filenames = true
# If using a Heroku, Vagrant or generic remote development environment,
# use letter_opener_web, accessible at /letter_opener.
@ -90,8 +82,11 @@ Rails.application.configure do
# TODO: Remove once devise-two-factor data migration complete
config.x.otp_secret = ENV.fetch('OTP_SECRET', '1fc2b87989afa6351912abeebe31ffc5c476ead9bf8b3d74cbc4a302c7b69a45b40b1bbef3506ddad73e942e15ed5ca4b402bf9a66423626051104f4b5f05109')
# Raise error when a before_action's only/except options reference missing actions
# Raise error when a before_action's only/except options reference missing actions.
config.action_controller.raise_on_missing_callback_actions = true
# Apply autocorrection by RuboCop to files generated by `bin/rails generate`.
# config.generators.apply_rubocop_autocorrect_after_generate!
end
Redis.raise_deprecations = true

View file

@ -15,22 +15,18 @@ Rails.application.configure do
config.eager_load = true
# Full error reports are disabled and caching is turned on.
config.consider_all_requests_local = false
config.consider_all_requests_local = false
config.action_controller.perform_caching = true
config.action_controller.asset_host = ENV['CDN_HOST'] if ENV['CDN_HOST'].present?
# Ensures that a master key has been made available in ENV["RAILS_MASTER_KEY"], config/master.key, or an environment
# key such as config/credentials/production.key. This key is used to decrypt credentials (and other encrypted files).
# config.require_master_key = true
# Compress CSS using a preprocessor.
# config.assets.css_compressor = :sass
# Do not fallback to assets pipeline if a precompiled asset is missed.
config.assets.compile = false
# Disable serving static files from `public/`, relying on NGINX/Apache to do so instead.
# config.public_file_server.enabled = false
# Enable serving of images, stylesheets, and JavaScripts from an asset server.
# config.asset_host = "http://assets.example.com"
config.asset_host = ENV['CDN_HOST'] if ENV['CDN_HOST'].present?
# Specifies the header that your server uses for sending files.
config.action_dispatch.x_sendfile_header = ENV['SENDFILE_HEADER'] if ENV['SENDFILE_HEADER'].present?
@ -40,27 +36,37 @@ Rails.application.configure do
# Allow to specify public IP of reverse proxy if it's needed
config.action_dispatch.trusted_proxies = ENV['TRUSTED_PROXY_IP'].split(/(?:\s*,\s*|\s+)/).map { |item| IPAddr.new(item) } if ENV['TRUSTED_PROXY_IP'].present?
# Assume all access to the app is happening through a SSL-terminating reverse proxy.
# Can be used together with config.force_ssl for Strict-Transport-Security and secure cookies.
# config.assume_ssl = true
# Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
config.force_ssl = true
# Skip http-to-https redirect for the default health check endpoint.
config.ssl_options = {
redirect: {
exclude: ->(request) { request.path.start_with?('/health') || request.headers['Host'].end_with?('.onion') || request.headers['Host'].end_with?('.i2p') },
},
}
# Info include generic and useful information about system operation, but avoids logging too much
# information to avoid inadvertent exposure of personally identifiable information (PII). If you
# want to log everything, set the level to "debug".
config.log_level = ENV.fetch('RAILS_LOG_LEVEL', 'info').to_sym
# Log to STDOUT by default
config.logger = ActiveSupport::Logger.new($stdout)
.tap { |logger| logger.formatter = ::Logger::Formatter.new }
.then { |logger| ActiveSupport::TaggedLogging.new(logger) }
# Prepend all log lines with the following tags.
config.log_tags = [:request_id]
# "info" includes generic and useful information about system operation, but avoids logging too much
# information to avoid inadvertent exposure of personally identifiable information (PII). If you
# want to log everything, set the level to "debug".
config.log_level = ENV.fetch('RAILS_LOG_LEVEL', 'info')
# Use a different cache store in production.
config.cache_store = :redis_cache_store, REDIS_CACHE_PARAMS
# Use a real queuing backend for Active Job (and separate queues per environment).
# config.active_job.queue_adapter = :resque
# config.active_job.queue_adapter = :resque
# config.active_job.queue_name_prefix = "mastodon_production"
config.action_mailer.perform_caching = false
@ -70,9 +76,8 @@ Rails.application.configure do
# config.action_mailer.raise_delivery_errors = false
# Enable locale fallbacks for I18n (makes lookups for any locale fall back to
# English when a translation cannot be found).
# This setting would typically be `true` to use the `I18n.default_locale`.
# Some locales are missing translation entries and would have errors:
# the I18n.default_locale when a translation cannot be found).
# Default value is `true`, but some locales have missing data and would have errors
# https://github.com/mastodon/mastodon/pull/24727
config.i18n.fallbacks = [:en]
@ -89,18 +94,8 @@ Rails.application.configure do
{ key: controller.signature_key_id } if controller.respond_to?(:signed_request?) && controller.signed_request?
end
# Use a different logger for distributed setups.
# require "syslog/logger"
# config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new "app-name")
# Log to STDOUT by default
config.logger = ActiveSupport::Logger.new($stdout)
.tap { |logger| logger.formatter = ::Logger::Formatter.new }
.then { |logger| ActiveSupport::TaggedLogging.new(logger) }
# Do not dump schema after migrations.
config.active_record.dump_schema_after_migration = false
config.action_mailer.perform_caching = false
# E-mails

View file

@ -19,14 +19,15 @@ Rails.application.configure do
# loading is working properly before deploying your code.
config.eager_load = ENV['CI'].present?
config.assets_digest = false
# Configure public file server for tests with Cache-Control for performance.
config.public_file_server.headers = { 'Cache-Control' => "public, max-age=#{1.hour.to_i}" }
# Show full error reports and disable caching.
config.consider_all_requests_local = true
config.consider_all_requests_local = true
config.action_controller.perform_caching = false
config.cache_store = :memory_store
# Raise exceptions instead of rendering exception templates.
# Render exception templates for rescuable exceptions and raise for other exceptions.
config.action_dispatch.show_exceptions = :rescuable
# Disable request forgery protection in test environment.
@ -41,6 +42,10 @@ Rails.application.configure do
# ActionMailer::Base.deliveries array.
config.action_mailer.delivery_method = :test
# Unlike controllers, the mailer instance doesn't have any context about the
# incoming request so you'll need to provide the :host parameter yourself.
config.action_mailer.default_url_options = { host: 'www.example.com' }
# Print deprecation notices to the stderr.
config.active_support.deprecation = :stderr
@ -58,7 +63,6 @@ Rails.application.configure do
# Raise exceptions for disallowed deprecations.
config.active_support.disallowed_deprecation = :raise
config.i18n.default_locale = :en
config.i18n.fallbacks = true
# Tell Active Support which deprecation messages to disallow.
@ -70,7 +74,7 @@ Rails.application.configure do
# Annotate rendered view with file names.
# config.action_view.annotate_rendered_view_with_filenames = true
# Raise error when a before_action's only/except options reference missing actions
# Raise error when a before_action's only/except options reference missing actions.
config.action_controller.raise_on_missing_callback_actions = true
end

View file

@ -0,0 +1,72 @@
# frozen_string_literal: true
# Be sure to restart your server when you modify this file.
#
# This file eases your Rails 7.2 framework defaults upgrade.
#
# Uncomment each configuration one by one to switch to the new default.
# Once your application is ready to run with all new defaults, you can remove
# this file and set the `config.load_defaults` to `7.2`.
#
# Read the Guide for Upgrading Ruby on Rails for more info on each option.
# https://guides.rubyonrails.org/upgrading_ruby_on_rails.html
###
# Controls whether Active Job's `#perform_later` and similar methods automatically defer
# the job queuing to after the current Active Record transaction is committed.
#
# Example:
# Topic.transaction do
# topic = Topic.create(...)
# NewTopicNotificationJob.perform_later(topic)
# end
#
# In this example, if the configuration is set to `:never`, the job will
# be enqueued immediately, even though the `Topic` hasn't been committed yet.
# Because of this, if the job is picked up almost immediately, or if the
# transaction doesn't succeed for some reason, the job will fail to find this
# topic in the database.
#
# If `enqueue_after_transaction_commit` is set to `:default`, the queue adapter
# will define the behaviour.
#
# Note: Active Job backends can disable this feature. This is generally done by
# backends that use the same database as Active Record as a queue, hence they
# don't need this feature.
#++
# Rails.application.config.active_job.enqueue_after_transaction_commit = :default
###
# Adds image/webp to the list of content types Active Storage considers as an image
# Prevents automatic conversion to a fallback PNG, and assumes clients support WebP, as they support gif, jpeg, and png.
# This is possible due to broad browser support for WebP, but older browsers and email clients may still not support
# WebP. Requires imagemagick/libvips built with WebP support.
#++
# Rails.application.config.active_storage.web_image_content_types = %w[image/png image/jpeg image/gif image/webp]
###
# Enable validation of migration timestamps. When set, an ActiveRecord::InvalidMigrationTimestampError
# will be raised if the timestamp prefix for a migration is more than a day ahead of the timestamp
# associated with the current time. This is done to prevent forward-dating of migration files, which can
# impact migration generation and other migration commands.
#
# Applications with existing timestamped migrations that do not adhere to the
# expected format can disable validation by setting this config to `false`.
#++
# Rails.application.config.active_record.validate_migration_timestamps = true
###
# Controls whether the PostgresqlAdapter should decode dates automatically with manual queries.
#
# Example:
# ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.select_value("select '2024-01-01'::date") #=> Date
#
# This query used to return a `String`.
#++
# Rails.application.config.active_record.postgresql_adapter_decode_dates = true
###
# Enables YJIT as of Ruby 3.3, to bring sizeable performance improvements. If you are
# deploying to a memory constrained environment you may want to set this to `false`.
#++
# Rails.application.config.yjit = true

View file

@ -885,7 +885,23 @@ bg:
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

@ -885,7 +885,23 @@ ca:
action: Consulta aquí per a més informació
message_html: "<strong>El teu emagatzamatge d'objectes no està ben configurat. La privacitat dels teus usuaris està en risc.</strong>"
tags:
moderation:
not_trendable: No pot ser en tendència
not_usable: No es pot fer servir
pending_review: Pendent de revisió
review_requested: Revisió demanada
reviewed: Revisada
title: Estat
trendable: Pot ser tendència
unreviewed: No revisada
usable: Es pot fer servir
name: Nom
newest: Més nous
oldest: Més vells
reset: Restableix
review: Revisar l'estat
search: Cerca
title: Etiquetes
updated_msg: Ajustaments d'etiquetes actualitzats amb èxit
title: Administració
trends:

View file

@ -884,7 +884,23 @@ da:
action: Tjek her for flere oplysninger
message_html: "<strong>Objektlageret er fejlopsat. Brugernes fortrolighed er i fare.</strong>"
tags:
moderation:
not_trendable: Ikke trendegnet
not_usable: Ikke brugbar
pending_review: Afventer revision
review_requested: Revision anmodet
reviewed: Revideret
title: Status
trendable: Trendegnet
unreviewed: Urevideret
usable: Brugbar
name: Navn
newest: Seneste
oldest: Ældste
reset: Nulstil
review: Revisionsstatus
search: Søg
title: Hashtags
updated_msg: Hashtag-indstillinger opdateret
title: Administration
trends:

View file

@ -151,7 +151,7 @@ de:
subscribe: Abonnieren
suspend: Sperren
suspended: Gesperrt
suspension_irreversible: Die Daten dieses Kontos wurden unwiderruflich gelöscht. Du kannst das Konto entsperren, um es wieder nutzbar zu machen, aber es wird keine Daten wiederherstellen, die es davor hatte.
suspension_irreversible: Die Daten dieses Kontos wurden unwiderruflich gelöscht. Du kannst das Konto entsperren, um es wieder zu verwenden, aber es wird keine Daten wiederherstellen, die es davor hatte.
suspension_reversible_hint_html: Das Konto wurde gesperrt und die Daten werden am %{date} vollständig gelöscht. Bis dahin kann das Konto ohne irgendwelche negativen Auswirkungen wiederhergestellt werden. Wenn du alle Daten des Kontos sofort entfernen möchtest, kannst du das nachfolgend tun.
title: Konten
unblock_email: E-Mail-Adresse entsperren
@ -885,7 +885,23 @@ de:
action: Für weitere Informationen hier klicken
message_html: "<strong>Die Konfiguration deines Objektspeichers ist fehlerhaft. Die Privatsphäre deiner Benutzer*innen ist gefährdet.</strong>"
tags:
moderation:
not_trendable: Nicht trendfähig
not_usable: Nicht verwendbar
pending_review: Überprüfung ausstehend
review_requested: Überprüfung angefordert
reviewed: Überprüft
title: Status
trendable: Trendfähig
unreviewed: Ungeprüft
usable: Verwendbar
name: Name
newest: Neueste
oldest: Älteste
reset: Zurücksetzen
review: Prüfstatus
search: Suchen
title: Hashtags
updated_msg: Hashtag-Einstellungen erfolgreich aktualisiert
title: Administration
trends:
@ -1455,7 +1471,7 @@ de:
backreference_required: Das neue Konto muss zuerst auf das alte Konto verweisen
before: 'Bevor du fortfährst, lies bitte diese Hinweise sorgfältig durch:'
cooldown: Nach dem Umzug wird es eine Weile dauern, bis du erneut umziehen darfst
disabled_account: Dein altes Konto ist nur noch eingeschränkt nutzbar. Du kannst jedoch deine Daten exportieren und das Konto wieder reaktivieren.
disabled_account: Dein altes Konto ist nur noch eingeschränkt verwendbar. Du kannst jedoch deine Daten exportieren und das Konto wieder reaktivieren.
followers: Alle Follower werden vom alten zum neuen Konto übertragen
only_redirect_html: Alternativ kannst du auch <a href="%{path}">nur eine Weiterleitung zu deinem neuen Konto</a> einrichten, ohne die Follower zu übertragen.
other_data: Keine anderen Daten werden automatisch zum neuen Konto übertragen

View file

@ -83,7 +83,7 @@ nl:
access_denied: De resource-eigenaar of autorisatie-server weigerde het verzoek.
credential_flow_not_configured: De wachtwoordgegevens-flow van de resource-eigenaar is mislukt omdat Doorkeeper.configure.resource_owner_from_credentials niet is ingesteld.
invalid_client: Clientverificatie is mislukt door een onbekende client, ontbrekende client-authenticatie of een niet ondersteunde authenticatie-methode.
invalid_code_challenge_method: De code-uitdagingsmethode moet S256 zijn, eenvoudig wordt niet ondersteund.
invalid_code_challenge_method: De code challenge method moet S256 zijn, plain wordt niet ondersteund.
invalid_grant: De verstrekte autorisatie is ongeldig, verlopen, ingetrokken, komt niet overeen met de redirect-URI die is opgegeven of werd uitgegeven aan een andere client.
invalid_redirect_uri: De opgegeven redirect-URI is ongeldig.
invalid_request:

View file

@ -83,6 +83,7 @@ th:
access_denied: เจ้าของทรัพยากรหรือเซิร์ฟเวอร์การอนุญาตปฏิเสธคำขอ
credential_flow_not_configured: โฟลว์ข้อมูลประจำตัวรหัสผ่านเจ้าของทรัพยากรล้มเหลวเนื่องจากไม่ได้กำหนดค่า Doorkeeper.configure.resource_owner_from_credentials
invalid_client: การรับรองความถูกต้องไคลเอ็นต์ล้มเหลวเนื่องจากไคลเอ็นต์ที่ไม่รู้จัก ไม่ได้รวมการรับรองความถูกต้องไคลเอ็นต์ หรือวิธีการรับรองความถูกต้องที่ไม่รองรับ
invalid_code_challenge_method: วิธีการทดสอบรหัสต้องเป็น S256 ไม่รองรับแบบธรรมดา
invalid_grant: การให้การรับรองความถูกต้องที่ให้มาไม่ถูกต้อง หมดอายุแล้ว เพิกถอนแล้ว ไม่ตรงกับ URI การเปลี่ยนเส้นทางที่ใช้ในคำขอการรับรองความถูกต้อง หรือออกให้ไคลเอ็นต์อื่น
invalid_redirect_uri: URI การเปลี่ยนเส้นทางที่รวมอยู่ไม่ถูกต้อง
invalid_request:

View file

@ -885,7 +885,23 @@ en:
action: Check here for more information
message_html: "<strong>Your object storage is misconfigured. The privacy of your users is at risk.</strong>"
tags:
moderation:
not_trendable: Not trendable
not_usable: Not usable
pending_review: Pending review
review_requested: Review requested
reviewed: Reviewed
title: Status
trendable: Trendable
unreviewed: Unreviewed
usable: Usable
name: Name
newest: Newest
oldest: Oldest
reset: Reset
review: Review status
search: Search
title: Hashtags
updated_msg: Hashtag settings updated successfully
title: Administration
trends:

View file

@ -642,7 +642,7 @@ es-AR:
report: 'Denuncia #%{id}'
reported_account: Cuenta denunciada
reported_by: Denunciada por
reported_with_application: Informado a través de la aplicación
reported_with_application: Denunciado con aplicación
resolved: Resueltas
resolved_msg: "¡Denuncia exitosamente resuelta!"
skip_to_actions: Ir directamente a las acciones
@ -885,7 +885,23 @@ es-AR:
action: Revisá acá para más información
message_html: "<strong>El almacenamiento de tu objeto está mal configurado. La privacidad de tus usuarios está en riesgo.</strong>"
tags:
moderation:
not_trendable: No disponible para tendencia
not_usable: No disponible para uso
pending_review: Revisión pendiente
review_requested: Revisión solicitada
reviewed: Revisada
title: Estado
trendable: Disponible para tendencia
unreviewed: No revisada
usable: Disponible para uso
name: Nombre
newest: Lo más reciente
oldest: Lo más antiguo
reset: Restablecer
review: Estado de revisión
search: Buscar
title: Etiquetas
updated_msg: La configuración de la etiqueta se actualizó exitosamente
title: Administración
trends:

View file

@ -101,7 +101,7 @@ fi:
most_recent_ip: Viimeisin IP
no_account_selected: Tilejä ei muutettu, koska yhtään ei ollut valittuna
no_limits_imposed: Rajoituksia ei ole asetettu
no_role_assigned: Roolia ei määritetty
no_role_assigned: Roolia ei asetettu
not_subscribed: Ei tilaaja
pending: Odottaa tarkastusta
perform_full_suspension: Jäädytä
@ -173,8 +173,8 @@ fi:
approve_appeal: Hyväksy valitus
approve_user: Hyväksy käyttäjä
assigned_to_self_report: Ota raportti käsiteltäväksi
change_email_user: Vaihda sähköposti käyttäjälle
change_role_user: Muuta käyttäjän roolia
change_email_user: Vaihda käyttäjän sähköpostiosoite
change_role_user: Vaihda käyttäjän roolia
confirm_user: Vahvista käyttäjä
create_account_warning: Luo varoitus
create_announcement: Luo tiedote
@ -231,44 +231,44 @@ fi:
update_user_role: Päivitä rooli
actions:
approve_appeal_html: "%{name} hyväksyi käyttäjän %{target} valituksen moderointipäätöksestä"
approve_user_html: "%{name} hyväksyi käyttäjän rekisteröitymisen kohteesta %{target}"
approve_user_html: "%{name} hyväksyi käyttäjän %{target} rekisteröitymisen"
assigned_to_self_report_html: "%{name} otti raportin %{target} käsiteltäväkseen"
change_email_user_html: "%{name} vaihtoi käyttäjän %{target} sähköpostiosoitteen"
change_role_user_html: "%{name} muutti käyttäjän %{target} roolia"
confirm_user_html: "%{name} vahvisti käyttäjän %{target} sähköpostiosoitteen"
create_account_warning_html: "%{name} lähetti varoituksen käyttäjälle %{target}"
create_announcement_html: "%{name} loi uuden tiedotteen %{target}"
create_canonical_email_block_html: "%{name} esti sähköpostin tiivisteellä %{target}"
create_canonical_email_block_html: "%{name} esti sähköpostiosoitteen tiivisteellä %{target}"
create_custom_emoji_html: "%{name} lähetti uuden emojin %{target}"
create_domain_allow_html: "%{name} salli federoinnin verkkotunnuksen %{target} kanssa"
create_domain_block_html: "%{name} esti verkkotunnuksen %{target}"
create_email_domain_block_html: "%{name} esti sähköpostiverkkotunnuksen %{target}"
create_ip_block_html: "%{name} loi IP-säännön %{target}"
create_ip_block_html: "%{name} loi säännön IP-osoitteelle %{target}"
create_unavailable_domain_html: "%{name} pysäytti toimituksen verkkotunnukseen %{target}"
create_user_role_html: "%{name} loi roolin %{target}"
demote_user_html: "%{name} alensi käyttäjän %{target}"
destroy_announcement_html: "%{name} poisti tiedotteen %{target}"
destroy_canonical_email_block_html: "%{name} kumosi sähköpostin eston tiivisteellä %{target}"
destroy_canonical_email_block_html: "%{name} kumosi sähköpostiosoitteen eston tiivisteellä %{target}"
destroy_custom_emoji_html: "%{name} poisti emojin %{target}"
destroy_domain_allow_html: "%{name} kielsi federoinnin verkkotunnuksen %{target} kanssa"
destroy_domain_block_html: "%{name} kumosi verkkotunnuksen %{target} eston"
destroy_email_domain_block_html: "%{name} kumosi sähköpostiverkkotunnuksen %{target} eston"
destroy_instance_html: "%{name} tyhjensi verkkotunnuksen %{target}"
destroy_ip_block_html: "%{name} poisti IP-säännön %{target}"
destroy_ip_block_html: "%{name} poisti säännön IP-osoitteelta %{target}"
destroy_status_html: "%{name} poisti käyttäjän %{target} julkaisun"
destroy_unavailable_domain_html: "%{name} jatkoi toimitusta verkkotunnukseen %{target}"
destroy_user_role_html: "%{name} poisti roolin %{target}"
disable_2fa_user_html: "%{name} poisti käyttäjältä %{target} vaatimuksen kaksivaiheisen todentamiseen"
disable_custom_emoji_html: "%{name} poisti käytöstä emojin %{target}"
disable_sign_in_token_auth_user_html: "%{name} poisti sähköpostitunnuksella todennuksen käytöstä tililtä %{target}"
disable_user_html: "%{name} poisti kirjautumisen käyttäjältä %{target}"
disable_2fa_user_html: "%{name} poisti käyttäjältä %{target} vaatimuksen kaksivaiheiseen todentamiseen"
disable_custom_emoji_html: "%{name} poisti emojin %{target} käytöstä"
disable_sign_in_token_auth_user_html: "%{name} poisti sähköpostitunnuksella todennuksen käytöstä käyttäjältä %{target}"
disable_user_html: "%{name} poisti kirjautumisen käytöstä käyttäjältä %{target}"
enable_custom_emoji_html: "%{name} otti emojin %{target} käyttöön"
enable_sign_in_token_auth_user_html: "%{name} otti sähköpostitunnuksella todennuksen käyttöön tilille %{target}"
enable_sign_in_token_auth_user_html: "%{name} otti sähköpostitunnuksella todennuksen käyttöön käyttäjälle %{target}"
enable_user_html: "%{name} otti kirjautumisen käyttöön käyttäjälle %{target}"
memorialize_account_html: "%{name} muutti käyttäjän %{target} tilin muistosivuksi"
promote_user_html: "%{name} ylensi käyttäjän %{target}"
reject_appeal_html: "%{name} hylkäsi käyttäjän %{target} valituksen moderointipäätöksestä"
reject_user_html: "%{name} hylkäsi käyttäjän rekisteröitymisen kohteesta %{target}"
reject_user_html: "%{name} hylkäsi käyttäjän %{target} rekisteröitymisen"
remove_avatar_user_html: "%{name} poisti käyttäjän %{target} profiilikuvan"
reopen_report_html: "%{name} avasi uudelleen raportin %{target}"
resend_user_html: "%{name} lähetti vahvistussähköpostiviestin uudelleen käyttäjälle %{target}"
@ -277,7 +277,7 @@ fi:
sensitive_account_html: "%{name} merkitsi käyttäjän %{target} median arkaluonteiseksi"
silence_account_html: "%{name} rajoitti käyttäjän %{target} tiliä"
suspend_account_html: "%{name} jäädytti käyttäjän %{target} tilin"
unassigned_report_html: "%{name} poisti raportin käsittelystä %{target}"
unassigned_report_html: "%{name} poisti raportin %{target} käsittelystä"
unblock_email_account_html: "%{name} kumosi käyttäjän %{target} sähköpostiosoitteen eston"
unsensitive_account_html: "%{name} kumosi käyttäjän %{target} median arkaluonteisuusmerkinnän"
unsilence_account_html: "%{name} kumosi käyttäjän %{target} rajoituksen"
@ -463,28 +463,28 @@ fi:
title: Tuo verkkotunnusten estoja
no_file: Yhtäkään tiedostoa ei ole valittu
follow_recommendations:
description_html: "<strong>Seuraamissuositukset auttavat uusia käyttäjiä löytämään nopeasti kiinnostavaa sisältöä</strong>. Kun käyttäjä ei ole ollut tarpeeksi vuorovaikutuksessa muiden kanssa, jotta hänelle olisi muodostunut henkilökohtaisia seuraamissuosituksia, suositellaan niiden sijaan näitä tilejä. Ne lasketaan päivittäin uudelleen yhdistelmästä tilejä, jotka ovat viime aikoina olleet aktiivisimmin sitoutuneita ja joilla on suurimmat paikalliset seuraajamäärät tietyllä kielellä."
description_html: "<strong>Seurantasuositukset auttavat uusia käyttäjiä löytämään nopeasti kiinnostavaa sisältöä</strong>. Kun käyttäjä ei ole ollut tarpeeksi vuorovaikutuksessa muiden kanssa, jotta hänelle olisi muodostunut henkilökohtaisia seuraamissuosituksia, suositellaan niiden sijaan näitä tilejä. Ne lasketaan päivittäin uudelleen yhdistelmästä tilejä, jotka ovat viime aikoina olleet aktiivisimmin sitoutuneita ja joilla on suurimmat paikalliset seuraajamäärät tietyllä kielellä."
language: Kielelle
status: Tila
suppress: Hylkää seuraamissuositus
suppress: Hylkää seurantasuositus
suppressed: Hylätty
title: Seuraamissuositukset
unsuppress: Palauta seuraamissuositus
title: Seurantasuositukset
unsuppress: Palauta seurantasuositus
instances:
audit_log:
title: Viimeaikaiset tarkastuslokit
view_all: Näytä kaikki tarkastuslokit
availability:
description_html:
one: Jos toimitus verkkotunnukseen epäonnistuu <strong>%{count} päivän</strong> ajan, sitä ei yritetä uudelleen ennen kuin verkkotunnuksesta <em>vastaanotetaan</em> toimitus.
other: Jos toimitus verkkotunnukseen epäonnistuu <strong>%{count} päivän</strong> ajan, sitä ei yritetä uudelleen ennen kuin verkkotunnuksesta <em>vastaanotetaan</em> toimitus.
failure_threshold_reached: Epäonnistumisen kynnys saavutettu %{date}.
one: Jos toimitus verkkotunnukseen epäonnistuu <strong>päivän ajan</strong>, sitä ei yritetä uudelleen ennen kuin verkkotunnuksesta <em>vastaanotetaan</em> toimitus.
other: Jos toimitus verkkotunnukseen epäonnistuu <strong>%{count} päivän ajan</strong>, sitä ei yritetä uudelleen ennen kuin verkkotunnuksesta <em>vastaanotetaan</em> toimitus.
failure_threshold_reached: Epäonnistumisten yläraja saavutettu %{date}.
failures_recorded:
one: Epäonnistuneita yrityksiä %{count} päivässä.
other: Epäonnistuneita yrityksiä %{count} päivää.
no_failures_recorded: Ei epäonnistumisia kirjattu.
one: Epäonnistuneita yrityksiä %{count} päivänä.
other: Epäonnistuneita yrityksiä %{count} päivänä.
no_failures_recorded: Epäonnistumisia ei kirjattu.
title: Saatavuus
warning: Viimeisin yritys yhdistää yhteys tähän palvelimeen on epäonnistunut
warning: Viimeisin yritys yhdistää tähän palvelimeen epäonnistui
back_to_all: Kaikki
back_to_limited: Rajoitettu
back_to_warning: Varoitus
@ -492,24 +492,24 @@ fi:
confirm_purge: Haluatko varmasti poistaa pysyvästi tämän verkkotunnuksen tiedot?
content_policies:
comment: Sisäinen muistiinpano
description_html: Voit määrittää sisältökäytännöt, joita sovelletaan kaikkiin tämän verkkotunnuksen ja sen aliverkkotunnuksien tileihin.
description_html: Voit määrittää sisältökäytännöt, joita sovelletaan kaikkiin tämän verkkotunnuksen ja sen aliverkkotunnusten tileihin.
limited_federation_mode_description_html: Voit valita sallitaanko federointi tällä verkkotunnuksella.
policies:
reject_media: Hylkää media
reject_reports: Hylkää raportit
silence: Rajoita
suspend: Jäädytä
policy: Käytännöt
policy: Käytän
reason: Julkinen syy
title: Sisällön toimintatavat
title: Sisältökäytännöt
dashboard:
instance_accounts_dimension: Seuratuimmat tilit
instance_accounts_measure: tallennetut tilit
instance_followers_measure: seuraajamme siellä
instance_follows_measure: heidän seuraajansa täällä
instance_languages_dimension: Suosituimmat kielet
instance_media_attachments_measure: tallennetut median liitteet
instance_reports_measure: niitä koskevat raportit
instance_media_attachments_measure: tallennetut medialiitteet
instance_reports_measure: heitä koskevat raportit
instance_statuses_measure: tallennetut julkaisut
delivery:
all: Kaikki
@ -520,7 +520,7 @@ fi:
unavailable: Ei saatavilla
delivery_available: Toimitus on saatavilla
delivery_error_days: Toimitusvirheen päivät
delivery_error_hint: Jos toimitus ei ole mahdollista %{count} päivän aikana, se merkitään automaattisesti toimittamattomaksi.
delivery_error_hint: Jos toimitus ei ole mahdollista %{count} päivään, se merkitään automaattisesti toimituskelvottomaksi.
destroyed_msg: Palvelimelta %{domain} peräisin olevat tiedot ovat nyt jonossa poistattaviksi.
empty: Verkkotunnuksia ei löytynyt.
known_accounts:
@ -533,14 +533,14 @@ fi:
private_comment: Yksityinen kommentti
public_comment: Julkinen kommentti
purge: Tyhjennä
purge_description_html: Jos uskot, että tämä verkkotunnus on offline-tilassa tarkoituksella, voit poistaa kaikki verkkotunnuksen tilitietueet ja niihin liittyvät tiedot tallennustilastasi. Tämä voi kestää jonkin aikaa.
purge_description_html: Jos uskot, että tämä verkkotunnus on yhteydettömässä tilassa tarkoituksella, voit poistaa kaikki verkkotunnuksen tilitietueet ja niihin liittyvät tiedot tallennustilastasi. Tämä voi kestää jonkin aikaa.
title: Federointi
total_blocked_by_us: Estämämme
total_followed_by_them: Heidän seuraama
total_followed_by_us: Meidän seuraama
total_reported: Niitä koskevat raportit
total_reported: Heitä koskevat raportit
total_storage: Medialiitteet
totals_time_period_hint_html: Alla näkyvät yhteenlasketut tiedot sisältävät koko ajan.
totals_time_period_hint_html: Seuraavassa näkyvät määrät sisältävät tiedot koko ajalta.
unknown_instance: Tällä palvelimella ei tällä hetkellä ole tähän verkkotunnukseen liittyviä tietueita.
invites:
deactivate_all: Poista kaikki käytöstä
@ -689,7 +689,7 @@ fi:
description_html: "<strong>Käyttäjärooleilla</strong> voit mukauttaa, mihin Mastodonin toimintoihin ja alueisiin käyttäjäsi pääsevät käsiksi."
edit: Muokkaa roolia ”%{name}”
everyone: Oletuskäyttöoikeudet
everyone_full_description_html: Tämä on <strong>perusrooli</strong>, joka vaikuttaa <strong>kaikkiin käyttäjiin</strong>, jopa ilman määrättyä roolia. Kaikki muut roolit perivät sen käyttöoikeudet.
everyone_full_description_html: Tämä on <strong>perusrooli</strong>, joka vaikuttaa <strong>kaikkiin käyttäjiin</strong>, jopa ilman asetettua roolia. Kaikki muut roolit perivät sen käyttöoikeudet.
permissions_count:
one: "%{count} käyttöoikeus"
other: "%{count} käyttöoikeutta"
@ -765,7 +765,7 @@ fi:
desc_html: Vaikuttaa kaikkiin käyttäjiin, jotka eivät ole muuttaneet tätä asetusta itse
title: Jätä käyttäjät oletusarvoisesti hakukoneindeksoinnin ulkopuolelle
discovery:
follow_recommendations: Seuraamissuositukset
follow_recommendations: Seurantasuositukset
preamble: Mielenkiintoisen sisällön esille tuominen auttaa saamaan uusia käyttäjiä, jotka eivät ehkä tunne ketään Mastodonista. Määrittele, kuinka erilaiset löytämisominaisuudet toimivat palvelimellasi.
profile_directory: Profiilihakemisto
public_timelines: Julkiset aikajanat
@ -794,7 +794,7 @@ fi:
federation_authentication: Federoinnin todennuksen valvonta
title: Palvelimen asetukset
site_uploads:
delete: Poista ladattu tiedosto
delete: Poista lähetetty tiedosto
destroyed_msg: Sivustolatauksen poisto onnistui!
software_updates:
critical_update: Kriittinen päivitä viivyttelemättä
@ -851,7 +851,7 @@ fi:
elasticsearch_health_red:
message_html: Elasticsearch-klusteri on vikatilassa (punainen tila), joten hakuominaisuudet eivät ole käytettävissä
elasticsearch_health_yellow:
message_html: Elasticsearch-klusteri on häiriötilassa (keltainen tila), joten suosittelemme tutkimaan syyn
message_html: Elasticsearch-klusteri on vikatilassa (keltainen tila), joten suosittelemme tutkimaan syyn
elasticsearch_index_mismatch:
message_html: Elasticsearch-indeksin sidokset ovat vanhentuneet. Suorita <code>tootctl search deploy --only=%{value}</code>
elasticsearch_preset:
@ -863,10 +863,10 @@ fi:
elasticsearch_reset_chewy:
message_html: Elasticsearch-järjestelmäindeksi on vanhentunut asetusmuutoksen vuoksi. Suorita <code>tootctl search deploy --reset-chewy</code> päivittääksesi sen.
elasticsearch_running_check:
message_html: Ei saatu yhteyttä Elasticsearchiin. Tarkista, että se on käynnissä tai poista kokotekstihaku käytöstä
message_html: Elasticsearchiin ei saatu yhteyttä. Tarkista, että se on käynnissä, tai poista kokotekstihaku käytöstä
elasticsearch_version_check:
message_html: 'Yhteensopimaton Elasticsearch-versio: %{value}'
version_comparison: Elasticsearch %{running_version} on käynnissä, kun %{required_version} vaaditaan
version_comparison: Käynnissä on Elasticsearch %{running_version}, kun vaaditaan %{required_version}
rules_check:
action: Hallitse palvelimen sääntöjä
message_html: Et ole määrittänyt lainkaan palvelimen sääntöjä.
@ -879,13 +879,29 @@ fi:
action: Näytä saatavilla olevat päivitykset
message_html: Mastodonin virhekorjauspäivitys on saatavilla.
upload_check_privacy_error:
action: Katso täältä lisätietoja
message_html: "<strong>Verkkopalvelimesi on määritetty väärin. Käyttäjiesi yksityisyys on vaarassa.</strong>"
action: Katso lisätietoja täältä
message_html: "<strong>Verkkopalvelimesi on määritetty väärin. Käyttäjiesi tietosuoja on vaarassa.</strong>"
upload_check_privacy_error_object_storage:
action: Katso täältä lisätietoja
message_html: "<strong>Objektivarastosi on määritetty virheellisesti, ja käyttäjiesi yksityisyys on vaarassa.</strong>"
action: Katso lisätietoja täältä
message_html: "<strong>Oliovarastosi on määritetty virheellisesti. Käyttäjiesi tietosuoja on vaarassa.</strong>"
tags:
moderation:
not_trendable: Ei trendattava
not_usable: Ei käytettävissä
pending_review: Odottaa tarkastusta
review_requested: Tarkastus pyydetty
reviewed: Tarkastettu
title: Tila
trendable: Trendattava
unreviewed: Tarkastamaton
usable: Käytettävissä
name: Nimi
newest: Uusin
oldest: Vanhin
reset: Tyhjennä
review: Tarkista tila
search: Hae
title: Aihetunnisteet
updated_msg: Aihetunnisteiden asetusten päivitys onnistui
title: Ylläpito
trends:
@ -918,7 +934,7 @@ fi:
statuses:
allow: Salli julkaisu
allow_account: Salli tekijä
description_html: Nämä ovat julkaisuja, joita palvelimesi tietää jaettavan ja lisättävän suosikkeihin paljon tällä hetkellä. Listaus voi auttaa uusia ja palaavia käyttäjiäsi löytämään lisää seurattavia. Julkaisut eivät näy julkisesti ennen kuin hyväksyt niiden julkaisijan ja julkaisija sallii tilinsä ehdottamisen. Voit myös sallia tai hylätä yksittäisiä julkaisuja.
description_html: Nämä ovat julkaisuja, joita palvelimesi tietää jaettavan ja lisättävän suosikkeihin paljon tällä hetkellä. Listaus voi auttaa uusia ja palaavia käyttäjiäsi löytämään lisää seurattavia. Julkaisut eivät näy julkisesti ennen kuin hyväksyt niiden tekijän ja tekijä sallii tilinsä ehdottamisen. Voit myös sallia tai hylätä yksittäisiä julkaisuja.
disallow: Kiellä julkaisu
disallow_account: Estä tekijä
no_status_selected: Suosittuja julkaisuja ei muutettu, koska yhtään ei ollut valittuna
@ -1054,7 +1070,7 @@ fi:
apply_for_account: Pyydä tiliä
captcha_confirmation:
help_html: Jos kohtaat ongelmia CAPTCHAn ratkaisemisessa, voit pyytää meiltä apua osoitteella %{email}.
hint_html: Vielä yksi juttu! Meidän on vahvistettava, että olet ihminen (tämän avulla pidämme roskapostin poissa!). Ratkaise alla oleva CAPTCHA-vahvistus ja paina "Jatka".
hint_html: Vielä yksi asia! Meidän on vahvistettava, että olet ihminen (tämän avulla pidämme roskapostin poissa!). Ratkaise alla oleva CAPTCHA-vahvistus ja paina ”Jatka”.
title: Turvatarkastus
confirmations:
awaiting_review: Sähköpostiosoitteesi on vahvistettu! Seuraavaksi palvelimen %{domain} ylläpito tarkastaa rekisteröitymisesi, ja saat lopuksi ilmoituksen sähköpostitse, jos tilisi hyväksytään!
@ -1084,7 +1100,7 @@ fi:
migrate_account: Muuta toiseen tiliin
migrate_account_html: Jos haluat ohjata tämän tilin toiseen, voit <a href="%{path}">asettaa toisen tilin tästä</a>.
or_log_in_with: Tai käytä kirjautumiseen
privacy_policy_agreement_html: Olen lukenut ja hyväksynyt <a href="%{privacy_policy_path}" target="_blank">tietosuojakäytännön</a>
privacy_policy_agreement_html: Olen lukenut ja hyväksyn <a href="%{privacy_policy_path}" target="_blank">tietosuojakäytännön</a>
progress:
confirm: Vahvista sähköpostiosoite
details: Omat tietosi
@ -1171,7 +1187,7 @@ fi:
email_contact_html: Jos ei saavu perille, voit pyytää apua sähköpostilla <a href="mailto:%{email}">%{email}</a>
email_reconfirmation_html: Jos et saa vahvistuksen sähköpostia, niin voit <a href="%{path}">pyytää sitä uudelleen</a>
irreversible: Et voi palauttaa tiliäsi tai aktivoida sitä uudelleen
more_details_html: Lisätietoja saat <a href="%{terms_path}">tietosuojakäytännöstämme</a>.
more_details_html: Tarkempia tietoja saat <a href="%{terms_path}">tietosuojakäytännöstämme</a>.
username_available: Käyttäjänimesi tulee saataville uudelleen
username_unavailable: Käyttäjänimesi ei tule saataville enää uudelleen
disputes:
@ -1227,7 +1243,7 @@ fi:
noscript_html: Käyttääksesi Mastodonin verkkosovellusta, ota JavaScript käyttöön. Vaihtoehtoisesti voit kokeilla käyttämällesi alustalle kehitettyjä Mastodonin <a href="%{apps_path}">natiivisovelluksia</a>.
existing_username_validator:
not_found: paikallista käyttäjää ei löydy kyseisellä käyttäjänimellä
not_found_multiple: "%{usernames} ei löytynyt"
not_found_multiple: käyttäjänimiä %{usernames} ei löytynyt
exports:
archive_takeout:
date: Päiväys
@ -1265,7 +1281,7 @@ fi:
deprecated_api_multiple_keywords: Näitä parametreja ei voi muuttaa tästä sovelluksesta, koska ne koskevat useampaa kuin yhtä suodattimen avainsanaa. Käytä uudempaa sovellusta tai selainkäyttöliittymää.
invalid_context: Ei sisältöä tai se on virheellinen
index:
contexts: Suodattaa kontektissa %{contexts}
contexts: Suodattaa kontekstissa %{contexts}
delete: Poista
empty: Sinulla ei ole suodattimia.
expires_in: Vanhenee %{distance}
@ -1296,8 +1312,8 @@ fi:
one: "<strong>%{count}</strong> kohde tällä sivulla on valittu."
other: Kaikki <strong>%{count}</strong> kohdetta tällä sivulla on valittu.
all_matching_items_selected_html:
one: "<strong>%{count}</strong> kohde, joka vastaa hakuasi."
other: Kaikki <strong>%{count}</strong> hakuasi vastaavaa kohdetta.
one: "<strong>%{count}</strong> hakuasi vastaava kohde on valittuna."
other: Kaikki <strong>%{count}</strong> hakuasi vastaavat kohteet ovat valittuina.
cancel: Peruuta
changes_saved_msg: Muutosten tallennus onnistui!
confirm: Vahvista
@ -1308,7 +1324,7 @@ fi:
order_by: Järjestys
save_changes: Tallenna muutokset
select_all_matching_items:
one: Valitse %{count} kohde, joka vastaa hakuasi.
one: Valitse %{count} hakuasi vastaava kohde.
other: Valitse kaikki %{count} hakuasi vastaavaa kohdetta.
today: tänään
validation_errors:
@ -1459,7 +1475,7 @@ fi:
followers: Tämä toiminto siirtää kaikki seuraajat nykyisestä tilistä uudelle tilille
only_redirect_html: Vaihtoehtoisesti voit <a href="%{path}">asettaa vain ohjauksen profiiliisi</a>.
other_data: Muita tietoja ei siirretä automaattisesti
redirect: Nykyisen tilisi profiili päivitetään ohjaushuomautuksella ja suljetaan pois hauista
redirect: Nykyisen tilisi profiili päivitetään uudelleenohjaushuomautuksella ja suljetaan pois hauista
moderation:
title: Moderointi
move_handler:
@ -1551,7 +1567,7 @@ fi:
privacy: Yksityisyys
privacy_hint_html: Määritä, kuinka paljon muita avustavia tietoja haluat paljastaa. Käyttäjät löytävät kiinnostavia profiileja ja hienoja sovelluksia, kun he selaavat toisten seuraamia käyttäjiä ja kun he näkevät, millä sovelluksilla nämä julkaisevat. Saatat kuitenkin haluta piilottaa nämä tiedot.
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 seuraamissuosituksissaan? Haluatko hyväksyä kaikki uudet seuraajat automaattisesti vai päättää jokaisesta erikseen?
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.
title: Yksityisyys ja tavoittavuus
@ -1842,7 +1858,7 @@ fi:
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.
sensitive: Tästä lähtien kaikki ladatut mediatiedostot merkitään arkaluonteisiksi ja piilotetaan napsautusvaroituksen taakse.
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ä.
reason: 'Syy:'

View file

@ -885,7 +885,23 @@ fo:
action: Kekka her fyri at fáa fleiri upplýsingar
message_html: "<strong>Objekt-goymslan hjá tær er skeivt uppsett. Privatlívið hjá brúkarunum hjá tær er í vanda.</strong>"
tags:
moderation:
not_trendable: Ikki rákbært
not_usable: Kann ikki brúkast
pending_review: Viðgerð í gongd
review_requested: Viðgerð umbiðin
reviewed: Viðgjørt
title: Støða
trendable: Rákbært
unreviewed: Ikki viðgjørt
usable: Ónýtiligt
name: Navn
newest: Nýggjasta/u
oldest: Elsta/u
reset: Endurstilla
review: Eftirkanna støðu
search: Leita
title: Frámerki
updated_msg: Frámerkjastillingar dagførdar
title: Umsiting
trends:

View file

@ -885,7 +885,23 @@ gl:
action: Mira aquí para máis información
message_html: "<strong>A almacenaxe de obxectos está mal configurada. A privacidade das usuarias está en risco.</strong>"
tags:
moderation:
not_trendable: Non permitir en voga
not_usable: Non utilizable
pending_review: Pendente de revisión
review_requested: Revisión solicitada
reviewed: Revisada
title: Estado
trendable: Permitir en voga
unreviewed: Sen revisar
usable: Utilizable
name: Nome
newest: Máis recente
oldest: Máis antiga
reset: Restabelecer
review: Estado de revisión
search: Buscar
title: Cancelos
updated_msg: Actualizaronse os axustes dos cancelos
title: Administración
trends:

View file

@ -40,6 +40,23 @@ hi:
upload_check_privacy_error_object_storage:
action: अधिक जानकारी हेतु यहां क्लिक करें।
message_html: "<strong> आपके वेब सर्वर का कन्फिगरेशन सही नहीं है। उपयोगकर्ताओं की निजता खतरे में है। </strong>"
tags:
moderation:
not_trendable: ट्रेंड नहीं किया जाएगा
not_usable: उपयोगी नहीं
pending_review: लंबित समीक्षा
review_requested: समीक्षा की मांग की गई
reviewed: समीक्षित
title: स्टेटस
trendable: चर्चा में
unreviewed: गैर समीक्षित
usable: उपयुक्त
name: नाम
newest: नवीनतम
oldest: सबसे पुराने
reset: पुनः नियत करें
search: खोजें
title: हैशटैग
redirects:
prompt: अगर आपको इस लिंक पर भरोसा है तो आगे बढ़ने के लिए इसे क्लिक करें
title: आप इस %{instance} को छोड़ने वाले हैं

View file

@ -885,7 +885,23 @@ hu:
action: Itt találsz több információt
message_html: "<strong>Az objektumtárolód félre van konfigurálva. Kockázat merül fel a felhasználóid adatainak biztonságával kapcsolatban.</strong>"
tags:
moderation:
not_trendable: Nem lehet felkapott
not_usable: Nem használható
pending_review: Ellenőrzésre vár
review_requested: Ellenőrzés kérve
reviewed: Ellenőrizve
title: Állapot
trendable: Lehet felkapott
unreviewed: Nem ellenőrzött
usable: Használható
name: Név
newest: Legújabb
oldest: Legrégebbi
reset: Visszaállítás
review: Engedélyezés állapota
search: Keresés
title: Hashtagek
updated_msg: A hashtag beállításokat sikeresen frissítettük
title: Karbantartás
trends:

View file

@ -882,7 +882,10 @@ 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:
name: Nomine
review: Revide le stato
search: Cercar
title: Hashtags
updated_msg: Parametros de hashtag actualisate con successo
title: Administration
trends:

View file

@ -887,7 +887,23 @@ is:
action: Skoðaðu hér til að fá frekari upplýsingar
message_html: "<strong>Gagnageymslan þín er ekki rétt stillt. Friðhelgi notendanna þinna gæti verið í hættu.</strong>"
tags:
moderation:
not_trendable: Getur ekki orðið vinsælt
not_usable: Ekki nothæft
pending_review: Bíður eftir yfirferð
review_requested: Beðið um yfirferð
reviewed: Yfirfarið
title: Staða
trendable: Getur orðið vinsælt
unreviewed: Óyfirfarið
usable: Nothæft
name: Nafn
newest: Nýjast
oldest: Elsta
reset: Endurstilla
review: Yfirfara stöðufærslu
search: Leita
title: Myllumerki
updated_msg: Það tókst að uppfæra stillingar myllumerkja
title: Stjórnendur
trends:

View file

@ -885,7 +885,23 @@ it:
action: Controlla qui per maggiori informazioni
message_html: "<strong>La tua archiviazione oggetti è mal configurata. La privacy dei tuoi utenti è a rischio.</strong>"
tags:
moderation:
not_trendable: Non di tendenza
not_usable: Non utilizzabile
pending_review: In attesa di revisione
review_requested: Revisione richiesta
reviewed: Controllato
title: Stato
trendable: Di tendenza
unreviewed: Non revisionato
usable: Utilizzabile
name: Nome
newest: Più recenti
oldest: Più vecchio
reset: Ripristina
review: Esamina status
search: Cerca
title: Hashtag
updated_msg: Impostazioni hashtag aggiornate con successo
title: Amministrazione
trends:

View file

@ -611,6 +611,23 @@ lt:
message_html: Tavo Elasticsearch klasteris turi tik vieną mazgą, <code>ES_PRESET</code> turėtų būti nustatyta į <code>single_node_cluster</code>.
elasticsearch_running_check:
message_html: Nepavyko prijungti prie Elasticsearch. Patikrink, ar ji veikia, arba išjunk viso teksto paiešką.
tags:
moderation:
not_trendable: Netendencinga
not_usable: Nenaudojama
pending_review: Laukiama peržiūros
review_requested: Paprašyta peržiūros
reviewed: Peržiūrėta
title: Statusas
trendable: Tendencinga
unreviewed: Neperžiūrėta
usable: Naudojama
name: Pavadinimas
newest: Naujausias
oldest: Seniausias
reset: Atkurti
search: Paieška
title: Saitažodžiai
title: Administracija
trends:
allow: Leisti

View file

@ -885,7 +885,23 @@ nl:
action: Klik hier voor meer informatie
message_html: "<strong>Jouw objectopslag is verkeerd geconfigureerd. De privacy van je gebruikers is in gevaar.</strong>"
tags:
moderation:
not_trendable: Niet trendbaar
not_usable: Niet bruikbaar
pending_review: In afwachting van beoordeling
review_requested: Beoordeling aangevraagd
reviewed: Beoordeeld
title: Status
trendable: Trendbaar
unreviewed: Onbeoordeeld
usable: Bruikbaar
name: Naam
newest: Nieuwste
oldest: Oudste
reset: Opnieuw
review: Status beoordelen
search: Zoeken
title: Hashtags
updated_msg: Instellingen hashtag succesvol bijgewerkt
title: Beheer
trends:

View file

@ -913,7 +913,23 @@ pl:
action: Kliknij tutaj, aby dowiedzieć się więcej
message_html: "<strong>Pamięć obiektu jest nieprawidłowa. Prywatność twoich użytkowników jest zagrożona.</strong>"
tags:
moderation:
not_trendable: Nie mogą trendować
not_usable: Nieużywalne
pending_review: Oczekuje na przejrzenie
review_requested: Prośba o przejrzenie
reviewed: Przejrzane
title: Status
trendable: Mogą trendować
unreviewed: Nieprzejrzane
usable: Używalne
name: Nazwa
newest: Najnowsze
oldest: Najstarsze
reset: Resetuj
review: Stan przeglądu
search: Szukaj
title: Hashtagi
updated_msg: Pomyślnie uaktualniono ustawienia hashtagów
title: Administracja
trends:

View file

@ -885,7 +885,23 @@ pt-PT:
action: Verifique aqui para mais informações
message_html: "<strong>O seu armazenamento de objetos está mal configurado. A privacidade dos seus utilizadores está em risco.</strong>"
tags:
moderation:
not_trendable: Não pode ser tendência
not_usable: Não utilizável
pending_review: Pendente de revisão
review_requested: Revisão solicitada
reviewed: Revista
title: Estado
trendable: Pode ser tendência
unreviewed: Não revista
usable: Utilizável
name: Nome
newest: Mais recente
oldest: Mais antiga
reset: Repor
review: Estado da revisão
search: Pesquisar
title: Hashtags
updated_msg: 'Definições de #etiquetas correctamente actualizadas'
title: Administração
trends:

View file

@ -271,7 +271,6 @@ an:
listable: Permitir que esta etiqueta amaneixca en as busquedas y en o directorio d'o perfil
name: Etiqueta
trendable: Permitir que esta etiqueta amaneixca baixo tendencias
usable: Permitir a las publicacions usar esta etiqueta
user:
role: Rol
user_role:

View file

@ -311,7 +311,6 @@ ar:
listable: اسمح لهذا الوسم بالظهور في البحث وفي دليل الصفحات التعريفية
name: الوسم
trendable: السماح لهذه الكلمة المفتاحية بالظهور تحت المتداوَلة
usable: اسمح للمنشورات استخدام هذا الوسم
user:
role: الدور
time_zone: النطاق الزمني

View file

@ -180,7 +180,6 @@ ast:
listable: Permitir qu'esta etiqueta apaeza nes busques y nes suxerencies
name: Etiqueta
trendable: Permitir qu'esta etiqueta apaeza nes tendencies
usable: Permitir que los artículos usen esta etiqueta
user:
role: Rol
time_zone: Fusu horariu

View file

@ -311,7 +311,6 @@ be:
listable: Дазволіць паказ хэштэгу ў пошуку і ў каталозе профіляў
name: Хэштэг
trendable: Дазволіць паказ гэтага хэштэга ў трэндах
usable: Дазволіць выкарыстанне хэштэгу ў допісах
user:
role: Роля
time_zone: Часавы пояс

View file

@ -314,7 +314,7 @@ bg:
listable: Позволяване на хаштага да се появява при търсене и предложения
name: Хаштаг
trendable: Показване на хаштага да се появява под нашумели
usable: Позволяване на публикациите да употребяват този хаштаг
usable: Позволяване на публикациите да употребяват този хаштаг локално
user:
role: Роля
time_zone: Часова зона

View file

@ -72,7 +72,6 @@ br:
tag:
name: Hashtag
trendable: Aotren an hashtag-mañ da zont war wel dindan tuadurioù
usable: Aotren an embannadurioù da implijout an hashtag-mañ
user:
role: Roll
time_zone: Gwerzhid eur

View file

@ -314,7 +314,7 @@ ca:
listable: Permet que aquesta etiqueta aparegui en les cerques i en el directori de perfils
name: Etiqueta
trendable: Permet que aquesta etiqueta aparegui en les tendències
usable: Permet als tuts emprar aquesta etiqueta
usable: Permet a les publicacions emprar aquesta etiqueta localment
user:
role: Rol
time_zone: Zona horària

View file

@ -182,7 +182,6 @@ ckb:
listable: ڕیگەبدە ئەم هاشتاگە لە پێرستی هەڵبژاردەی بەکارهێنەران و پەڕەی گەڕان نیشان بدرێت
name: هەشتاگ
trendable: ڕێگەبدە ئەم هەشتاگە لە نووسراوەی بەرچاوکراو نیسان بدرێت
usable: ڕێگەبدە بە توتەکان بۆ بەکارهێنانی ئەم هەشتاگە
'no': نە
recommended: پێشنیارکراوە
required:

View file

@ -186,7 +186,6 @@ co:
listable: Auturizà stu hashtag à esse vistu nant'à l'annuariu di i prufili
name: Hashtag
trendable: Auturizà stu hashtag à esse vistu in e tendenze
usable: Auturizà i statuti à utilizà stu hashtag
'no':
recommended: Ricumandati
required:

View file

@ -311,7 +311,6 @@ cs:
listable: Povolit zobrazení tohoto hashtagu ve vyhledávání a návrzích
name: Hashtag
trendable: Povolit zobrazení tohoto hashtagu mezi populárními
usable: Povolit používat tento hashtag v příspěvcích
user:
role: Role
time_zone: Časové pásmo

View file

@ -314,7 +314,6 @@ 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
user:
role: Rôl
time_zone: Cylchfa amser

View file

@ -314,7 +314,7 @@ da:
listable: Tillad visning af dette hashtag i søgninger og forslag
name: Hashtag
trendable: Tillad visning af dette hashtag under trends
usable: Tillad indlæg at benytte dette hashtag
usable: Tillad indlæg at benytte dette hashtag lokalt
user:
role: Rolle
time_zone: Tidszone

View file

@ -314,7 +314,7 @@ de:
listable: Erlaube, dass dieser Hashtag in Suchen und Empfehlungen erscheint
name: Hashtag
trendable: Erlaube, dass dieser Hashtag in den Trends erscheint
usable: Erlaube, dass dieser Hashtag in Beiträgen erscheint
usable: Beiträge dürfen diesen Hashtag lokal verwenden
user:
role: Rolle
time_zone: Zeitzone

View file

@ -276,7 +276,6 @@ el:
listable: Εμφάνιση αυτής της ετικέτας στο δημόσιο κατάλογο
name: Ετικέτα
trendable: Εμφάνιση της ετικέτας στις τάσεις
usable: Χρήση της ετικέτας σε τουτ
user:
role: Ρόλος
user_role:

View file

@ -314,7 +314,6 @@ en-GB:
listable: Allow this hashtag to appear in searches and suggestions
name: Hashtag
trendable: Allow this hashtag to appear under trends
usable: Allow posts to use this hashtag
user:
role: Role
time_zone: Time Zone

View file

@ -314,7 +314,7 @@ en:
listable: Allow this hashtag to appear in searches and suggestions
name: Hashtag
trendable: Allow this hashtag to appear under trends
usable: Allow posts to use this hashtag
usable: Allow posts to use this hashtag locally
user:
role: Role
time_zone: Time zone

View file

@ -303,7 +303,6 @@ eo:
listable: Permesi ĉi tiun kradvorton aperi en serĉoj kaj sugestoj
name: Kradvorto
trendable: Permesi al ĉi tiu kradvorto aperi en furoraĵoj
usable: Permesi mesaĝojn uzi ĉi tiun kradvorton
user:
role: Rolo
time_zone: Horzono

View file

@ -314,7 +314,7 @@ es-AR:
listable: Permitir que esta etiqueta aparezca en las búsquedas y en las sugerencias
name: Etiqueta
trendable: Permitir que esta etiqueta aparezca bajo tendencias
usable: Permitir a los mensajes usar esta etiqueta
usable: Permitir que los mensajes usen esta etiqueta localmente
user:
role: Rol
time_zone: Zona horaria

View file

@ -314,7 +314,6 @@ 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 los toots usar esta etiqueta
user:
role: Rol
time_zone: Zona horaria

View file

@ -314,7 +314,6 @@ 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 publicaciones usar esta etiqueta
user:
role: Rol
time_zone: Zona horaria

View file

@ -311,7 +311,6 @@ et:
listable: Luba sellel sildil ilmuda profiilide kataloogis
name: Silt
trendable: Luba sellel sildil trendida
usable: Luba postitustel seda silti kasutada
user:
role: Roll
time_zone: Ajavöönd

View file

@ -311,7 +311,6 @@ eu:
listable: Baimendu traola hau bilaketetan agertzea eta profilen direktorioan
name: Traola
trendable: Baimendu traola hau joeretan agertzea
usable: Baimendu tootek traola hau erabiltzea
user:
role: Rola
time_zone: Ordu zona

View file

@ -286,7 +286,6 @@ fa:
listable: اجازه به این برچسب برای ظاهر شدن در جست‌وجوها و پیشنهادها
name: برچسب
trendable: بگذارید که این برچسب در موضوعات پرطرفدار دیده شود
usable: بگذارید که این برچسب در فرسته‌ها به کار بروند
user:
role: نقش
time_zone: منطقهٔ زمانی

View file

@ -73,17 +73,17 @@ fi:
filters:
action: Valitse, mikä toiminto suoritetaan, kun julkaisu vastaa suodatinta
actions:
hide: Piilota suodatettu sisältö kokonaan ja käyttäydy ikään kuin sitä ei olisi olemassa
hide: Piilota suodatettu sisältö kokonaan, ikään kuin sitä ei olisi olemassa
warn: Piilota suodatettu sisältö varoituksen taakse, jossa mainitaan suodattimen nimi
form_admin_settings:
activity_api_enabled: Paikallisesti julkaistujen julkaisujen, aktiivisten käyttäjien ja rekisteröitymisten viikoittainen määrä
app_icon: WEBP, PNG, GIF tai JPG. Korvaa oletusarvoisen mobiililaitteiden sovelluskuvakkeen omalla kuvakkeella.
app_icon: WEBP, PNG, GIF tai JPG. Korvaa oletusarvoisen mobiililaitteiden sovelluskuvakkeen haluamallasi kuvakkeella.
backups_retention_period: Käyttäjillä on mahdollisuus arkistoida julkaisujaan myöhemmin ladattaviksi. Kun kentän arvo on positiivinen, nämä arkistot poistuvat automaattisesti, kun määritetty määrä päiviä on kulunut.
bootstrap_timeline_accounts: Nämä tilit kiinnitetään uusien käyttäjien seuraamissuositusten alkuun.
bootstrap_timeline_accounts: Nämä tilit kiinnitetään uusien käyttäjien seurantasuositusten alkuun.
closed_registrations_message: Näkyy, kun rekisteröityminen on suljettu
content_cache_retention_period: Kaikki muiden palvelinten julkaisut (mukaan lukien tehostukset ja vastaukset) poistuvat, kun määritetty määrä päiviä on kulunut, lukuun ottamatta paikallisen käyttäjän vuorovaikutusta näiden julkaisujen kanssa. Tämä sisältää julkaisut, jotka paikallinen käyttäjä on merkinnyt kirjanmerkiksi tai suosikiksi. Myös yksityismaininnat eri palvelinten käyttäjien välillä menetetään, eikä niitä voi palauttaa. Tämä asetus on tarkoitettu käytettäväksi erityistapauksissa ja rikkoo monia käyttäjien odotuksia, kun sitä sovelletaan yleiskäyttöön.
custom_css: Voit käyttää mukautettuja tyylejä Mastodonin selainversiossa.
favicon: WEBP, PNG, GIF tai JPG. Korvaa oletusarvoisen Mastodonin sivustokuvakkeen (favicon) haluamallasi kuvakkeella.
favicon: WEBP, PNG, GIF tai JPG. Korvaa oletusarvoisen Mastodonin sivustokuvakkeen haluamallasi kuvakkeella.
mascot: Ohittaa kuvituksen edistyneessä selainkäyttöliittymässä.
media_cache_retention_period: Etäkäyttäjien tekemien julkaisujen mediatiedostot ovat välimuistissa palvelimellasi. Kun kentän arvo on positiivinen, media poistuu, kun määritetty määrä päiviä on kulunut. Jos mediaa pyydetään sen poistamisen jälkeen, se ladataan uudelleen, jos lähdesisältö on vielä saatavilla. Koska linkkien esikatselun kyselyitä kolmansien osapuolien sivustoille on rajoitettu, on suositeltavaa asettaa tämä arvo vähintään 14 päivään, tai linkkien kortteja ei päivitetä pyynnöstä ennen tätä ajankohtaa.
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.
@ -109,14 +109,14 @@ fi:
invite_request:
text: Tämä auttaa meitä arvioimaan hakemustasi
ip_block:
comment: Valinnainen. Muista miksi lisäsit tämän säännön.
comment: Valinnainen. Muista, miksi lisäsit tämän säännön.
expires_in: IP-osoitteet ovat rajallinen resurssi joskus niitä jaetaan eteenpäin, ja ne vaihtavat usein omistajaa. Niinpä epämääräisiä IP-lohkoja ei suositella.
ip: Kirjoita IPv4- tai IPv6-osoite. Voit estää kokonaisia IP-osoitealueita CIDR-syntaksin avulla. Varo lukitsemasta itseäsi ulos!
severities:
no_access: Estä pääsy kaikkiin resursseihin
sign_up_block: Uudet rekisteröitymiset eivät ole mahdollisia
sign_up_requires_approval: Uudet rekisteröitymiset edellyttävät hyväksyntääsi
severity: Valitse, mitä tapahtuu tämän IP-osoitteen pyynnöille
severity: Valitse, mitä tapahtuu tästä IP-osoitteesta tuleville pyynnöille
rule:
hint: Vapaaehtoinen. Anna yksityiskohtaisempia tietoja säännöstä
text: Kuvaile sääntöä tai edellytystä palvelimesi käyttäjille. Suosi tiivistä, yksinkertaista ilmaisua
@ -151,9 +151,9 @@ fi:
show_collections: Näytä seuratut ja seuraajat profiilissa
unlocked: Hyväksy uudet seuraajat automaattisesti
account_alias:
acct: Vanhan tilin käyttäjänimi
acct: Vanhan tilin käyttäjätunnus
account_migration:
acct: Uuden tilin käyttäjänimi
acct: Uuden tilin käyttäjätunnus
account_warning_preset:
text: Esimääritetty teksti
title: Nimi
@ -249,7 +249,7 @@ fi:
closed_registrations_message: Mukautettu viesti, kun rekisteröityminen ei ole saatavilla
content_cache_retention_period: Etäsisällön säilytysaika
custom_css: Mukautettu CSS
favicon: Suosikkikuvake
favicon: Sivustokuvake
mascot: Mukautettu maskotti (vanhentunut)
media_cache_retention_period: Mediasisällön välimuistin säilytysaika
peers_api_enabled: Julkaise löydettyjen palvelinten luettelo ohjelmointirajapinnassa
@ -314,7 +314,7 @@ fi:
listable: Salli tämän aihetunnisteen näkyä hauissa ja ehdotuksissa
name: Aihetunniste
trendable: Salli tämän aihetunnisteen näkyä trendeissä
usable: Salli julkaisujen käyttää tätä aihetunnistetta
usable: Salli julkaisujen käyttää tätä aihetunnistetta paikallisesti
user:
role: Rooli
time_zone: Aikavyöhyke

View file

@ -314,7 +314,7 @@ fo:
listable: Loyva hesum tvíkrossið, at verða vístur í leitingum og uppskotum
name: Tvíkrossur
trendable: Loyv hesum frámerki at síggjast undir rákum
usable: Loyva uppsløgum at brúka hendan tvíkross
usable: Loyv postum at brúka hetta frámerki lokalt
user:
role: Leiklutur
time_zone: Tíðarsona

View file

@ -305,7 +305,6 @@ fr-CA:
listable: Autoriser ce hashtag à apparaître dans les recherches et dans lannuaire des profils
name: Mot-clic
trendable: Autoriser ce hashtag à apparaitre dans les tendances
usable: Autoriser les messages à utiliser ce hashtag
user:
role: Rôle
time_zone: Fuseau horaire

View file

@ -305,7 +305,6 @@ fr:
listable: Autoriser ce hashtag à apparaître dans les recherches et dans lannuaire des profils
name: Hashtag
trendable: Autoriser ce hashtag à apparaitre dans les tendances
usable: Autoriser les messages à utiliser ce hashtag
user:
role: Rôle
time_zone: Fuseau horaire

View file

@ -314,7 +314,6 @@ fy:
listable: Tastean dat dizze hashtag yn sykopdrachten en oanrekommandaasjes te sjen is
name: Hashtag
trendable: Goedkarre dat dizze hashtag ûnder trends te sjen is
usable: Tastean dat dizze hashtag yn berjochten brûkt wurde mei
user:
role: Rol
time_zone: Tiidsône

View file

@ -314,7 +314,6 @@ ga:
listable: Lig don hashchlib seo a bheith le feiceáil i gcuardach agus i moltaí
name: Haischlib
trendable: Lig don haischlib seo a bheith le feiceáil faoi threochtaí
usable: Lig do phostálacha an hashchlib seo a úsáid
user:
role: Ról
time_zone: Crios ama

View file

@ -305,7 +305,6 @@ gd:
listable: Faodaidh an taga hais seo nochdadh ann an toraidhean luirg s am measg nam molaidhean
name: Taga hais
trendable: Faodaidh an taga hais seo nochdadh am measg nan treandaichean
usable: Faodaidh postaichean an taga hais seo a chleachdadh
user:
role: Dreuchd
time_zone: Roinn-tìde

View file

@ -314,7 +314,7 @@ gl:
listable: Permitir que este cancelo apareza en buscas e no directorio de perfil
name: Cancelo
trendable: Permitir que este cancelo apareza en tendencias
usable: Permitir que as publicacións utilicen este cancelo
usable: Permitir que as publicacións usen este cancelo localmente
user:
role: Rol
time_zone: Fuso horario

View file

@ -314,7 +314,6 @@ he:
listable: הרשה/י לתגית זו להופיע בחיפושים והצעות
name: תגית
trendable: הרשה/י לתגית זו להופיע תחת נושאים חמים
usable: הרשה/י להודעות להכיל תגית זו
user:
role: תפקיד
time_zone: אזור זמן

View file

@ -1 +1,6 @@
---
hi:
simple_form:
labels:
tag:
usable: पोस्ट को ये हैशटैग स्थानीय उपयोग करने दें

View file

@ -314,7 +314,7 @@ hu:
listable: A hashtag megjelenhet a profiladatbázisban
name: Hashtag
trendable: A hashtag megjelenhet a felkapottak között
usable: Bejegyzések használhatják ezt a hashtaget
usable: A helyi bejegyzések használhatják ezt a hashtaget
user:
role: Szerep
time_zone: Időzóna

View file

@ -187,7 +187,6 @@ hy:
listable: Թոյլատրել, որ այս պիտակը յայտնուի որոնումների եւ հաշուի մատեանում
name: Պիտակ
trendable: Թոյլատրել, որ այս պիտակը յայտնուի թրենդներում
usable: Թոյլատրել գրառումներին օգտագործել այս պիտակը
'no': Ոչ
recommended: Խորհուրդ է տրվում
required:

View file

@ -313,7 +313,6 @@ ia:
listable: Permitter a iste hashtag apparer in le recercas e suggestiones
name: Hashtag
trendable: Permitter a iste hashtag de sub tendentias
usable: Permitter al messages usar iste hashtag
user:
role: Rolo
time_zone: Fuso horari

View file

@ -268,7 +268,6 @@ id:
listable: Izinkan tagar ini muncul di penelusuran dan di direktori profil
name: Tagar
trendable: Izinkan tagar ini muncul di bawah tren
usable: Izinkan toot memakai tagar ini
user:
role: Peran
user_role:

View file

@ -311,7 +311,6 @@ ie:
listable: Permisser que ti hashtag apari in serchas e suggestiones
name: Hashtag
trendable: Permisse que ti-ci hashtag apari sub tendenties
usable: Permisser que postas usa ti hashtag
user:
role: Rol
time_zone: Zone temporal

View file

@ -300,7 +300,6 @@ io:
listable: Permisez ca hashtago aparar en trovaji e sugestaji
name: Hashtago
trendable: Permisez ca hashtago aparar che tendenci
usable: Permisez posti uzar ca hashtago
user:
role: Rolo
time_zone: Klokozono

View file

@ -314,7 +314,7 @@ is:
listable: Leyfa þessu myllumerki að birtast í leitum og í persónusniðamöppunni
name: Myllumerki
trendable: Leyfa þessu myllumerki að birtast undir vinsælu efni
usable: Leyfa færslum að nota þetta myllumerki
usable: Leyfa færslum að nota þetta myllumerki staðvært
user:
role: Hlutverk
time_zone: Tímabelti

View file

@ -314,7 +314,7 @@ it:
listable: Permetti a questo hashtag di apparire nella directory dei profili
name: Hashtag
trendable: Permetti a questo hashtag di apparire nelle tendenze
usable: Permetti ai post di usare questo hashtag
usable: Permetti ai post di utilizzare questo hashtag localmente
user:
role: Ruolo
time_zone: Fuso orario

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