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

Merge upstream changes up to 640421f661
main
Claire 2023-10-09 15:44:35 +02:00 committed by GitHub
commit 9af24835f6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
157 changed files with 2196 additions and 1975 deletions

View File

@ -1,4 +0,0 @@
---
ignore:
# Sidekiq security issue, fixes in the latest Sidekiq 7 but we can not upgrade. Will be fixed in Sidekiq 6.5.10
- CVE-2023-26141

View File

@ -70,7 +70,7 @@ services:
hard: -1
libretranslate:
image: libretranslate/libretranslate:v1.3.11
image: libretranslate/libretranslate:v1.3.12
restart: unless-stopped
volumes:
- lt-data:/home/libretranslate/.local

View File

@ -282,8 +282,8 @@ jobs:
ports:
- 6379:6379
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.13
search:
image: ${{ matrix.search-image }}
env:
discovery.type: single-node
xpack.security.enabled: false
@ -313,6 +313,11 @@ jobs:
- '3.0'
- '3.1'
- '.ruby-version'
search-image:
- docker.elastic.co/elasticsearch/elasticsearch:7.17.13
include:
- ruby-version: '.ruby-version'
search-image: docker.elastic.co/elasticsearch/elasticsearch:8.10.2
steps:
- uses: actions/checkout@v4

3
.gitignore vendored
View File

@ -31,9 +31,6 @@
# Ignore Vagrant files
.vagrant/
# Ignore Capistrano customizations
/config/deploy/*
# Ignore IDE files
.vscode/
.idea/

View File

@ -1,13 +1,13 @@
# This configuration was generated by
# `haml-lint --auto-gen-config`
# on 2023-07-20 09:47:50 -0400 using Haml-Lint version 0.48.0.
# on 2023-10-03 08:32:28 -0400 using Haml-Lint version 0.51.0.
# The point is for the user to remove these configuration records
# one by one as the lints are removed from the code base.
# Note that changes in the inspected code, or installation of new
# versions of Haml-Lint, may require this file to be generated again.
linters:
# Offense count: 951
# Offense count: 944
LineLength:
enabled: false
@ -15,7 +15,7 @@ linters:
UnnecessaryStringOutput:
enabled: false
# Offense count: 57
# Offense count: 44
RuboCop:
enabled: false
@ -26,22 +26,16 @@ linters:
- 'app/views/admin/reports/show.html.haml'
- 'app/views/disputes/strikes/show.html.haml'
# Offense count: 32
# Offense count: 15
InstanceVariables:
exclude:
- 'app/views/admin/reports/_actions.html.haml'
- 'app/views/admin/roles/_form.html.haml'
- 'app/views/admin/webhooks/_form.html.haml'
- 'app/views/auth/registrations/_status.html.haml'
- 'app/views/auth/sessions/two_factor/_otp_authentication_form.html.haml'
- 'app/views/authorize_interactions/_post_follow_actions.html.haml'
- 'app/views/invites/_form.html.haml'
- 'app/views/relationships/_account.html.haml'
- 'app/views/shared/_og.html.haml'
# Offense count: 3
# Offense count: 2
IdNames:
exclude:
- 'app/views/authorize_interactions/error.html.haml'
- 'app/views/oauth/authorizations/error.html.haml'
- 'app/views/shared/_error_messages.html.haml'

2
.nvmrc
View File

@ -1 +1 @@
20.7
20.8

View File

@ -31,9 +31,6 @@
# Ignore Vagrant files
.vagrant/
# Ignore Capistrano customizations
/config/deploy/*
# Ignore IDE files
.vscode/
.idea/

View File

@ -28,6 +28,7 @@ AllCops:
- 'Vagrantfile'
- 'vendor/**/*'
- 'lib/json_ld/*' # Generated files
- 'lib/mastodon/migration_helpers.rb' # Vendored from GitLab
- 'lib/templates/**/*'
# Reason: Prefer Hashes without extreme indentation
@ -75,12 +76,6 @@ Metrics/AbcSize:
- 'lib/mastodon/cli/*.rb'
- db/*migrate/**/*
# Reason:
# https://docs.rubocop.org/rubocop/cops_metrics.html#metricsblocknesting
Metrics/BlockNesting:
Exclude:
- 'lib/mastodon/cli/*.rb'
# Reason: Currently disabled in .rubocop_todo.yml
# https://docs.rubocop.org/rubocop/cops_metrics.html#metricscyclomaticcomplexity
Metrics/CyclomaticComplexity:

View File

@ -13,32 +13,6 @@ Bundler/OrderedGems:
Exclude:
- 'Gemfile'
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle, IndentationWidth.
# SupportedStyles: with_first_argument, with_fixed_indentation
Layout/ArgumentAlignment:
Exclude:
- 'config/initializers/cors.rb'
- 'config/initializers/session_store.rb'
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: AllowMultipleStyles, EnforcedHashRocketStyle, EnforcedColonStyle, EnforcedLastArgumentHashStyle.
# SupportedHashRocketStyles: key, separator, table
# SupportedColonStyles: key, separator, table
# SupportedLastArgumentHashStyles: always_inspect, always_ignore, ignore_implicit, ignore_explicit
Layout/HashAlignment:
Exclude:
- 'config/environments/production.rb'
- 'config/initializers/rack_attack.rb'
- 'config/routes.rb'
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: AllowDoxygenCommentStyle, AllowGemfileRubyComment.
Layout/LeadingCommentSpace:
Exclude:
- 'config/application.rb'
- 'config/initializers/3_omniauth.rb'
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: Max, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, AllowedPatterns.
# URISchemes: http, https
@ -46,14 +20,6 @@ Layout/LineLength:
Exclude:
- 'app/models/account.rb'
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: require_no_space, require_space
Layout/SpaceInLambdaLiteral:
Exclude:
- 'config/environments/production.rb'
- 'config/initializers/content_security_policy.rb'
# Configuration parameters: AllowComments, AllowEmptyLambdas.
Lint/EmptyBlock:
Exclude:
@ -291,10 +257,6 @@ RSpec/MultipleMemoizedHelpers:
RSpec/NestedGroups:
Max: 6
RSpec/PendingWithoutReason:
Exclude:
- 'spec/models/account_spec.rb'
# This cop supports unsafe autocorrection (--autocorrect-all).
Rails/ApplicationController:
Exclude:
@ -844,6 +806,5 @@ Style/TrailingCommaInHashLiteral:
Style/WordArray:
Exclude:
- 'app/helpers/languages_helper.rb'
- 'config/initializers/cors.rb'
- 'spec/controllers/settings/imports_controller_spec.rb'
- 'spec/models/form/import_spec.rb'

15
Capfile
View File

@ -1,15 +0,0 @@
# frozen_string_literal: true
require 'capistrano/setup'
require 'capistrano/deploy'
require 'capistrano/scm/git'
install_plugin Capistrano::SCM::Git
require 'capistrano/rbenv'
require 'capistrano/bundler'
require 'capistrano/yarn'
require 'capistrano/rails/assets'
require 'capistrano/rails/migrations'
Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }

View File

@ -1,6 +1,6 @@
# syntax=docker/dockerfile:1.4
# This needs to be bookworm-slim because the Ruby image is built on bookworm-slim
ARG NODE_VERSION="20.7-bookworm-slim"
ARG NODE_VERSION="20.8-bookworm-slim"
FROM ghcr.io/moritzheiber/ruby-jemalloc:3.2.2-slim as ruby
FROM node:${NODE_VERSION} as build

View File

@ -170,12 +170,6 @@ group :development do
# Linter CLI for HAML files
gem 'haml_lint', require: false
# Deployment automation
gem 'capistrano', '~> 3.17'
gem 'capistrano-rails', '~> 1.6'
gem 'capistrano-rbenv', '~> 2.2'
gem 'capistrano-yarn', '~> 2.0'
# Validate missing i18n keys
gem 'i18n-tasks', '~> 1.0', require: false
end

View File

@ -84,9 +84,9 @@ GEM
erubi (~> 1.4)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.1, >= 1.2.0)
active_model_serializers (0.10.13)
actionpack (>= 4.1, < 7.1)
activemodel (>= 4.1, < 7.1)
active_model_serializers (0.10.14)
actionpack (>= 4.1)
activemodel (>= 4.1)
case_transform (>= 0.2)
jsonapi-renderer (>= 0.1.1.beta1, < 0.3)
activejob (7.0.8)
@ -112,8 +112,6 @@ GEM
addressable (2.8.5)
public_suffix (>= 2.0.2, < 6.0)
aes_key_wrap (1.1.0)
airbrussh (1.4.1)
sshkit (>= 1.6.1, != 1.7.0)
android_key_attestation (0.3.0)
annotate (3.2.0)
activerecord (>= 3.2, < 8.0)
@ -175,21 +173,6 @@ GEM
bundler-audit (0.9.1)
bundler (>= 1.2.0, < 3)
thor (~> 1.0)
capistrano (3.17.3)
airbrussh (>= 1.0.0)
i18n
rake (>= 10.0.0)
sshkit (>= 1.9.0)
capistrano-bundler (2.1.0)
capistrano (~> 3.1)
capistrano-rails (1.6.3)
capistrano (~> 3.1)
capistrano-bundler (>= 1.1, < 3)
capistrano-rbenv (2.2.0)
capistrano (~> 3.1)
sshkit (~> 1.3)
capistrano-yarn (2.0.2)
capistrano (~> 3.0)
capybara (3.39.2)
addressable
matrix
@ -324,7 +307,7 @@ GEM
ruby-progressbar (~> 1.4)
globalid (1.1.0)
activesupport (>= 5.0)
haml (6.1.2)
haml (6.2.0)
temple (>= 0.8.2)
thor
tilt
@ -333,8 +316,8 @@ GEM
activesupport (>= 5.1)
haml (>= 4.0.6)
railties (>= 5.1)
haml_lint (0.50.0)
haml (>= 4.0, < 6.2)
haml_lint (0.51.0)
haml (>= 4.0)
parallel (~> 1.10)
rainbow
rubocop (>= 1.0)
@ -473,11 +456,8 @@ GEM
net-protocol
net-protocol (0.2.1)
timeout
net-scp (4.0.0)
net-ssh (>= 2.6.5, < 8.0.0)
net-smtp (0.3.3)
net-protocol
net-ssh (7.1.0)
nio4r (2.5.9)
nokogiri (1.15.4)
mini_portile2 (~> 2.8.2)
@ -640,7 +620,7 @@ GEM
sidekiq (>= 5, < 8)
rspec-support (3.12.1)
rspec_chunked (0.6)
rubocop (1.56.3)
rubocop (1.56.4)
base64 (~> 0.1.1)
json (~> 2.3)
language_server-protocol (>= 3.17.0)
@ -691,7 +671,7 @@ GEM
rubyzip (>= 1.2.2, < 3.0)
websocket (~> 1.0)
semantic_range (3.0.0)
sidekiq (6.5.9)
sidekiq (6.5.10)
connection_pool (>= 2.2.5, < 3)
rack (~> 2.0)
redis (>= 4.5.0, < 5)
@ -726,9 +706,6 @@ GEM
actionpack (>= 5.2)
activesupport (>= 5.2)
sprockets (>= 3.0.0)
sshkit (1.21.5)
net-scp (>= 1.1.2)
net-ssh (>= 2.8.0)
stackprof (0.2.25)
statsd-ruby (1.5.0)
stoplight (3.0.2)
@ -747,7 +724,7 @@ GEM
climate_control (>= 0.0.3, < 1.0)
test-prof (1.2.3)
thor (1.2.2)
tilt (2.2.0)
tilt (2.3.0)
timeout (0.4.0)
tpm-key_attestation (0.12.0)
bindata (~> 2.4)
@ -773,7 +750,7 @@ GEM
unf (0.1.4)
unf_ext
unf_ext (0.0.8.2)
unicode-display_width (2.4.2)
unicode-display_width (2.5.0)
uri (0.12.2)
validate_email (0.1.6)
activemodel (>= 3.0)
@ -829,10 +806,6 @@ DEPENDENCIES
brakeman (~> 6.0)
browser
bundler-audit (~> 0.9)
capistrano (~> 3.17)
capistrano-rails (~> 1.6)
capistrano-rbenv (~> 2.2)
capistrano-yarn (~> 2.0)
capybara (~> 3.39)
charlock_holmes (~> 0.7.7)
chewy (~> 7.3)

View File

@ -15,6 +15,7 @@ A "vulnerability in Mastodon" is a vulnerability in the code distributed through
| Version | Supported |
| ------- | ---------------- |
| 4.2.x | Yes |
| 4.1.x | Yes |
| 4.0.x | Until 2023-10-31 |
| 3.5.x | Until 2023-12-31 |

View File

@ -5,15 +5,7 @@ class AboutController < ApplicationController
skip_before_action :require_functional!
before_action :set_instance_presenter
def show
expires_in(15.seconds, public: true, stale_while_revalidate: 30.seconds, stale_if_error: 1.day) unless user_signed_in?
end
private
def set_instance_presenter
@instance_presenter = InstancePresenter.new
end
end

View File

@ -11,7 +11,6 @@ class Auth::RegistrationsController < Devise::RegistrationsController
before_action :set_pack
before_action :set_sessions, only: [:edit, :update]
before_action :set_strikes, only: [:edit, :update]
before_action :set_instance_presenter, only: [:new, :create, :update]
before_action :set_body_classes, only: [:new, :create, :edit, :update]
before_action :require_not_suspended!, only: [:update]
before_action :set_cache_headers, only: [:edit, :update]
@ -112,10 +111,6 @@ class Auth::RegistrationsController < Devise::RegistrationsController
use_pack %w(edit update).include?(action_name) ? 'admin' : 'auth'
end
def set_instance_presenter
@instance_presenter = InstancePresenter.new
end
def set_body_classes
@body_classes = %w(edit update).include?(action_name) ? 'admin' : 'lighter'
end

View File

@ -12,7 +12,6 @@ class Auth::SessionsController < Devise::SessionsController
include TwoFactorAuthenticationConcern
before_action :set_instance_presenter, only: [:new]
before_action :set_body_classes
content_security_policy only: :new do |p|
@ -104,10 +103,6 @@ class Auth::SessionsController < Devise::SessionsController
use_pack 'auth'
end
def set_instance_presenter
@instance_presenter = InstancePresenter.new
end
def set_body_classes
@body_classes = 'lighter'
end

View File

@ -9,17 +9,11 @@ module AccountControllerConcern
FOLLOW_PER_PAGE = 12
included do
before_action :set_instance_presenter
after_action :set_link_headers, if: -> { request.format.nil? || request.format == :html }
end
private
def set_instance_presenter
@instance_presenter = InstancePresenter.new
end
def set_link_headers
response.headers['Link'] = LinkHeader.new(
[

View File

@ -4,11 +4,11 @@ module WebAppControllerConcern
extend ActiveSupport::Concern
included do
prepend_before_action :redirect_unauthenticated_to_permalinks!
vary_by 'Accept, Accept-Language, Cookie'
before_action :redirect_unauthenticated_to_permalinks!
before_action :set_pack
before_action :set_app_body_class
vary_by 'Accept, Accept-Language, Cookie'
end
def skip_csrf_meta_tags?
@ -23,8 +23,10 @@ module WebAppControllerConcern
return if user_signed_in? # NOTE: Different from upstream because we allow moved users to log in
redirect_path = PermalinkRedirector.new(request.path).redirect_path
return if redirect_path.blank?
redirect_to(redirect_path) if redirect_path.present?
expires_in(15.seconds, public: true, stale_while_revalidate: 30.seconds, stale_if_error: 1.day) unless user_signed_in?
redirect_to(redirect_path)
end
def set_pack

View File

@ -3,7 +3,6 @@
class FollowerAccountsController < ApplicationController
include AccountControllerConcern
include SignatureVerification
include WebAppControllerConcern
vary_by -> { public_fetch_mode? ? 'Accept, Accept-Language, Cookie' : 'Accept, Accept-Language, Cookie, Signature' }

View File

@ -3,7 +3,6 @@
class FollowingAccountsController < ApplicationController
include AccountControllerConcern
include SignatureVerification
include WebAppControllerConcern
vary_by -> { public_fetch_mode? ? 'Accept, Accept-Language, Cookie' : 'Accept, Accept-Language, Cookie, Signature' }

View File

@ -3,15 +3,7 @@
class HomeController < ApplicationController
include WebAppControllerConcern
before_action :set_instance_presenter
def index
expires_in(15.seconds, public: true, stale_while_revalidate: 30.seconds, stale_if_error: 1.day) unless user_signed_in?
end
private
def set_instance_presenter
@instance_presenter = InstancePresenter.new
end
end

View File

@ -5,15 +5,7 @@ class PrivacyController < ApplicationController
skip_before_action :require_functional!
before_action :set_instance_presenter
def show
expires_in(15.seconds, public: true, stale_while_revalidate: 30.seconds, stale_if_error: 1.day) unless user_signed_in?
end
private
def set_instance_presenter
@instance_presenter = InstancePresenter.new
end
end

View File

@ -10,7 +10,6 @@ class StatusesController < ApplicationController
before_action :require_account_signature!, only: [:show, :activity], if: -> { request.format == :json && authorized_fetch_mode? }
before_action :set_status
before_action :set_instance_presenter
before_action :redirect_to_original, only: :show
before_action :set_body_classes, only: :embed
@ -68,10 +67,6 @@ class StatusesController < ApplicationController
not_found
end
def set_instance_presenter
@instance_presenter = InstancePresenter.new
end
def redirect_to_original
redirect_to(ActivityPub::TagManager.instance.url_for(@status.reblog), allow_other_host: true) if @status.reblog?
end

View File

@ -14,7 +14,6 @@ class TagsController < ApplicationController
before_action :set_local
before_action :set_tag
before_action :set_statuses, if: -> { request.format == :rss }
before_action :set_instance_presenter
skip_before_action :require_functional!, unless: :limited_federation_mode?
@ -49,10 +48,6 @@ class TagsController < ApplicationController
@statuses = cache_collection(TagFeed.new(@tag, nil, local: @local).get(limit_param), Status)
end
def set_instance_presenter
@instance_presenter = InstancePresenter.new
end
def limit_param
params[:limit].present? ? [params[:limit].to_i, PAGE_SIZE_MAX].min : PAGE_SIZE
end

View File

@ -0,0 +1,11 @@
# frozen_string_literal: true
module Admin::AnnouncementsHelper
def datetime_pattern
'[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}(:[0-9]{2}){1,2}'
end
def datetime_placeholder
Time.zone.now.strftime('%FT%R')
end
end

View File

@ -0,0 +1,11 @@
# frozen_string_literal: true
module InvitesHelper
def invites_max_uses_options
[1, 5, 10, 25, 50, 100]
end
def invites_expires_options
[30.minutes, 1.hour, 6.hours, 12.hours, 1.day, 1.week]
end
end

View File

@ -230,6 +230,24 @@ module LanguagesHelper
'sr-Latn': 'Srpski (latinica)',
}.freeze
# Helper for self.sorted_locale_keys
private_class_method def self.locale_name_for_sorting(locale)
if locale.blank? || locale == 'und'
'000'
elsif (supported_locale = SUPPORTED_LOCALES[locale.to_sym])
ASCIIFolding.new.fold(supported_locale[1]).downcase
elsif (regional_locale = REGIONAL_LOCALE_NAMES[locale.to_sym])
ASCIIFolding.new.fold(regional_locale).downcase
else
locale
end
end
# Sort locales by native name for dropdown menus
def self.sorted_locale_keys(locale_keys)
locale_keys.sort_by { |key, _| locale_name_for_sorting(key) }
end
def native_locale_name(locale)
if locale.blank? || locale == 'und'
I18n.t('generic.none')
@ -254,6 +272,7 @@ module LanguagesHelper
def valid_locale_or_nil(str)
return if str.blank?
return str if valid_locale?(str)
code, = str.to_s.split(/[_-]/) # Strip out the region from e.g. en_US or ja-JP

View File

@ -5,8 +5,6 @@ module MascotHelper
full_asset_url(instance_presenter.mascot&.file&.url || asset_pack_path('media/images/elephant_ui_plane.svg'))
end
private
def instance_presenter
@instance_presenter ||= InstancePresenter.new
end

View File

@ -3,11 +3,12 @@
module RoutingHelper
extend ActiveSupport::Concern
include Rails.application.routes.url_helpers
include ActionView::Helpers::AssetTagHelper
include Webpacker::Helper
included do
include Rails.application.routes.url_helpers
def default_url_options
ActionMailer::Base.default_url_options
end

View File

@ -2,7 +2,11 @@
module SettingsHelper
def filterable_languages
LanguagesHelper::SUPPORTED_LOCALES.keys
LanguagesHelper.sorted_locale_keys(LanguagesHelper::SUPPORTED_LOCALES.keys)
end
def ui_languages
LanguagesHelper.sorted_locale_keys(I18n.available_locales)
end
def session_device_icon(session)

View File

@ -9,11 +9,12 @@ import api from 'flavours/glitch/api';
import { roundTo10 } from 'flavours/glitch/utils/numbers';
const dateForCohort = cohort => {
const timeZone = 'UTC';
switch(cohort.frequency) {
case 'day':
return <FormattedDate value={cohort.period} month='long' day='2-digit' />;
return <FormattedDate value={cohort.period} month='long' day='2-digit' timeZone={timeZone} />;
default:
return <FormattedDate value={cohort.period} month='long' year='numeric' />;
return <FormattedDate value={cohort.period} month='long' year='numeric' timeZone={timeZone} />;
}
};

View File

@ -78,7 +78,7 @@ class ScrollableList extends PureComponent {
const clientHeight = this.getClientHeight();
const offset = scrollHeight - scrollTop - clientHeight;
if (400 > offset && this.props.onLoadMore && this.props.hasMore && !this.props.isLoading) {
if (scrollTop > 0 && offset < 400 && this.props.onLoadMore && this.props.hasMore && !this.props.isLoading) {
this.props.onLoadMore();
}

View File

@ -39,8 +39,17 @@ const getHomeFeedSpeed = createSelector([
], (statusIds, pendingStatusIds, statusMap) => {
const recentStatusIds = pendingStatusIds.size > 0 ? pendingStatusIds : statusIds;
const statuses = recentStatusIds.filter(id => id !== null).map(id => statusMap.get(id)).filter(status => status?.get('account') !== me).take(20);
const oldest = new Date(statuses.getIn([statuses.size - 1, 'created_at'], 0));
const newest = new Date(statuses.getIn([0, 'created_at'], 0));
if (statuses.isEmpty()) {
return {
gap: 0,
newest: new Date(0),
};
}
const datetimes = statuses.map(status => status.get('created_at', 0));
const oldest = new Date(datetimes.min());
const newest = new Date(datetimes.max());
const averageGap = (newest - oldest) / (1000 * (statuses.size + 1)); // Average gap between posts on first page in seconds
return {

View File

@ -100,7 +100,7 @@ class LinkFooter extends PureComponent {
{DividingCircle}
<a href={source_url} rel='noopener noreferrer' target='_blank'><FormattedMessage id='footer.source_code' defaultMessage='View source code' /></a>
{DividingCircle}
v{version}
<span class='version'>v{version}</span>
</p>
</div>
);

View File

@ -41,6 +41,10 @@
color: $dark-text-color;
margin-bottom: 20px;
.version {
white-space: nowrap;
}
strong {
font-weight: 500;
}

View File

@ -147,6 +147,10 @@ export const openURL = (value, history, onFailure) => (dispatch, getState) => {
const signedIn = !!getState().getIn(['meta', 'me']);
if (!signedIn) {
if (onFailure) {
onFailure();
}
return;
}

View File

@ -45,6 +45,21 @@ describe('computeHashtagBarForStatus', () => {
);
});
it('does not truncate the contents when the last child is a text node', () => {
const status = createStatus(
'this is a #<a class="zrl" href="https://example.com/search?tag=test">test</a>. Some more text',
['test'],
);
const { hashtagsInBar, statusContentProps } =
computeHashtagBarForStatus(status);
expect(hashtagsInBar).toEqual([]);
expect(statusContentProps.statusContent).toMatchInlineSnapshot(
`"this is a #<a class="zrl" href="https://example.com/search?tag=test">test</a>. Some more text"`,
);
});
it('extract tags from the last line', () => {
const status = createStatus(
'<p>Simple text</p><p><a href="test">#hashtag</a></p>',

View File

@ -9,11 +9,12 @@ import api from 'mastodon/api';
import { roundTo10 } from 'mastodon/utils/numbers';
const dateForCohort = cohort => {
const timeZone = 'UTC';
switch(cohort.frequency) {
case 'day':
return <FormattedDate value={cohort.period} month='long' day='2-digit' />;
return <FormattedDate value={cohort.period} month='long' day='2-digit' timeZone={timeZone} />;
default:
return <FormattedDate value={cohort.period} month='long' year='numeric' />;
return <FormattedDate value={cohort.period} month='long' year='numeric' timeZone={timeZone} />;
}
};

View File

@ -22,12 +22,6 @@ export default class Column extends PureComponent {
scrollable = document.scrollingElement;
} else {
scrollable = this.node.querySelector('.scrollable');
// Some columns have nested `.scrollable` containers, with the outer one
// being a wrapper while the actual scrollable content is deeper.
if (scrollable.classList.contains('scrollable--flex')) {
scrollable = scrollable?.querySelector('.scrollable') || scrollable;
}
}
if (!scrollable) {

View File

@ -109,7 +109,7 @@ export function computeHashtagBarForStatus(status: StatusLike): {
const lastChild = template.content.lastChild;
if (!lastChild) return defaultResult;
if (!lastChild || lastChild.nodeType === Node.TEXT_NODE) return defaultResult;
template.content.removeChild(lastChild);
const contentWithoutLastLine = template;

View File

@ -78,7 +78,7 @@ class ScrollableList extends PureComponent {
const clientHeight = this.getClientHeight();
const offset = scrollHeight - scrollTop - clientHeight;
if (400 > offset && this.props.onLoadMore && this.props.hasMore && !this.props.isLoading) {
if (scrollTop > 0 && offset < 400 && this.props.onLoadMore && this.props.hasMore && !this.props.isLoading) {
this.props.onLoadMore();
}

View File

@ -67,47 +67,45 @@ class Explore extends PureComponent {
<Search />
</div>
<div className='scrollable scrollable--flex' data-nosnippet>
{isSearching ? (
<SearchResults />
) : (
<>
<div className='account__section-headline'>
<NavLink exact to='/explore'>
<FormattedMessage tagName='div' id='explore.trending_statuses' defaultMessage='Posts' />
{isSearching ? (
<SearchResults />
) : (
<>
<div className='account__section-headline'>
<NavLink exact to='/explore'>
<FormattedMessage tagName='div' id='explore.trending_statuses' defaultMessage='Posts' />
</NavLink>
<NavLink exact to='/explore/tags'>
<FormattedMessage tagName='div' id='explore.trending_tags' defaultMessage='Hashtags' />
</NavLink>
{signedIn && (
<NavLink exact to='/explore/suggestions'>
<FormattedMessage tagName='div' id='explore.suggested_follows' defaultMessage='People' />
</NavLink>
)}
<NavLink exact to='/explore/tags'>
<FormattedMessage tagName='div' id='explore.trending_tags' defaultMessage='Hashtags' />
</NavLink>
<NavLink exact to='/explore/links'>
<FormattedMessage tagName='div' id='explore.trending_links' defaultMessage='News' />
</NavLink>
</div>
{signedIn && (
<NavLink exact to='/explore/suggestions'>
<FormattedMessage tagName='div' id='explore.suggested_follows' defaultMessage='People' />
</NavLink>
)}
<Switch>
<Route path='/explore/tags' component={Tags} />
<Route path='/explore/links' component={Links} />
<Route path='/explore/suggestions' component={Suggestions} />
<Route exact path={['/explore', '/explore/posts', '/search']}>
<Statuses multiColumn={multiColumn} />
</Route>
</Switch>
<NavLink exact to='/explore/links'>
<FormattedMessage tagName='div' id='explore.trending_links' defaultMessage='News' />
</NavLink>
</div>
<Switch>
<Route path='/explore/tags' component={Tags} />
<Route path='/explore/links' component={Links} />
<Route path='/explore/suggestions' component={Suggestions} />
<Route exact path={['/explore', '/explore/posts', '/search']}>
<Statuses multiColumn={multiColumn} />
</Route>
</Switch>
<Helmet>
<title>{intl.formatMessage(messages.title)}</title>
<meta name='robots' content={isSearching ? 'noindex' : 'all'} />
</Helmet>
</>
)}
</div>
<Helmet>
<title>{intl.formatMessage(messages.title)}</title>
<meta name='robots' content={isSearching ? 'noindex' : 'all'} />
</Helmet>
</>
)}
</Column>
);
}

View File

@ -52,7 +52,7 @@ class Links extends PureComponent {
}
return (
<div className='explore__links'>
<div className='explore__links scrollable' data-nosnippet>
{banner}
{isLoading ? (<LoadingIndicator />) : links.map((link, i) => (

View File

@ -204,7 +204,7 @@ class Results extends PureComponent {
<button onClick={this.handleSelectStatuses} className={type === 'statuses' ? 'active' : undefined}><FormattedMessage id='search_results.statuses' defaultMessage='Posts' /></button>
</div>
<div className='explore__search-results'>
<div className='explore__search-results' data-nosnippet>
<ScrollableList
scrollKey='search-results'
isLoading={isLoading}

View File

@ -42,7 +42,7 @@ class Suggestions extends PureComponent {
}
return (
<div className='explore__suggestions'>
<div className='explore__suggestions scrollable' data-nosnippet>
{isLoading ? <LoadingIndicator /> : suggestions.map(suggestion => (
<AccountCard key={suggestion.get('account')} id={suggestion.get('account')} />
))}

View File

@ -51,7 +51,7 @@ class Tags extends PureComponent {
}
return (
<div className='explore__links'>
<div className='scrollable explore__links' data-nosnippet>
{banner}
{isLoading ? (<LoadingIndicator />) : hashtags.map(hashtag => (

View File

@ -169,32 +169,30 @@ const Firehose = ({ feedType, multiColumn }) => {
<ColumnSettings />
</ColumnHeader>
<div className='scrollable scrollable--flex'>
<div className='account__section-headline'>
<NavLink exact to='/public/local'>
<FormattedMessage tagName='div' id='firehose.local' defaultMessage='This server' />
</NavLink>
<div className='account__section-headline'>
<NavLink exact to='/public/local'>
<FormattedMessage tagName='div' id='firehose.local' defaultMessage='This server' />
</NavLink>
<NavLink exact to='/public/remote'>
<FormattedMessage tagName='div' id='firehose.remote' defaultMessage='Other servers' />
</NavLink>
<NavLink exact to='/public/remote'>
<FormattedMessage tagName='div' id='firehose.remote' defaultMessage='Other servers' />
</NavLink>
<NavLink exact to='/public'>
<FormattedMessage tagName='div' id='firehose.all' defaultMessage='All' />
</NavLink>
</div>
<StatusListContainer
prepend={prependBanner}
timelineId={`${feedType}${onlyMedia ? ':media' : ''}`}
onLoadMore={handleLoadMore}
trackScroll
scrollKey='firehose'
emptyMessage={emptyMessage}
bindToDocument={!multiColumn}
/>
<NavLink exact to='/public'>
<FormattedMessage tagName='div' id='firehose.all' defaultMessage='All' />
</NavLink>
</div>
<StatusListContainer
prepend={prependBanner}
timelineId={`${feedType}${onlyMedia ? ':media' : ''}`}
onLoadMore={handleLoadMore}
trackScroll
scrollKey='firehose'
emptyMessage={emptyMessage}
bindToDocument={!multiColumn}
/>
<Helmet>
<title>{intl.formatMessage(messages.title)}</title>
<meta name='robots' content='noindex' />

View File

@ -39,8 +39,17 @@ const getHomeFeedSpeed = createSelector([
], (statusIds, pendingStatusIds, statusMap) => {
const recentStatusIds = pendingStatusIds.size > 0 ? pendingStatusIds : statusIds;
const statuses = recentStatusIds.filter(id => id !== null).map(id => statusMap.get(id)).filter(status => status?.get('account') !== me).take(20);
const oldest = new Date(statuses.getIn([statuses.size - 1, 'created_at'], 0));
const newest = new Date(statuses.getIn([0, 'created_at'], 0));
if (statuses.isEmpty()) {
return {
gap: 0,
newest: new Date(0),
};
}
const datetimes = statuses.map(status => status.get('created_at', 0));
const oldest = new Date(datetimes.min());
const newest = new Date(datetimes.max());
const averageGap = (newest - oldest) / (1000 * (statuses.size + 1)); // Average gap between posts on first page in seconds
return {

View File

@ -100,7 +100,7 @@ class LinkFooter extends PureComponent {
{DividingCircle}
<a href={source_url} rel='noopener noreferrer' target='_blank'><FormattedMessage id='footer.source_code' defaultMessage='View source code' /></a>
{DividingCircle}
v{version}
<span class='version'>v{version}</span>
</p>
</div>
);

View File

@ -190,6 +190,7 @@
"conversation.open": "কথপোকথন দেখান",
"conversation.with": "{names} এর সঙ্গে",
"copypaste.copied": "অনুলিপিকৃত",
"copypaste.copy_to_clipboard": "ক্লিপবোর্ডে কপি করুন",
"directory.federated": "পরিচিত ফেডিভারসের থেকে",
"directory.local": "শুধু {domain} থেকে",
"directory.new_arrivals": "নতুন আগত",

View File

@ -383,7 +383,7 @@
"lists.new.create": "Neue Liste erstellen",
"lists.new.title_placeholder": "Titel der neuen Liste",
"lists.replies_policy.followed": "Alle folgenden Profile",
"lists.replies_policy.list": "Mitglieder*innen der Liste",
"lists.replies_policy.list": "Mitglieder der Liste",
"lists.replies_policy.none": "Niemanden",
"lists.replies_policy.title": "Antworten anzeigen für:",
"lists.search": "Suche nach Leuten, denen du folgst",

View File

@ -338,7 +338,7 @@
"keyboard_shortcuts.column": "برای تمرکز روی یک فرسته در یکی از ستون‌ها",
"keyboard_shortcuts.compose": "تمرکز روی محیط نوشتن",
"keyboard_shortcuts.description": "توضیح",
"keyboard_shortcuts.direct": از کردن ستون اشاره‌های خصوصی",
"keyboard_shortcuts.direct": رای گشودن ستون اشاره‌های خصوصی",
"keyboard_shortcuts.down": "پایین بردن در سیاهه",
"keyboard_shortcuts.enter": "گشودن فرسته",
"keyboard_shortcuts.favourite": "پسندیدن فرسته",

View File

@ -1,9 +1,9 @@
{
"about.blocks": "Moderoidut palvelimet",
"about.contact": "Yhteystiedot:",
"about.blocks": "Valvotut palvelimet",
"about.contact": "Yhteydenotto:",
"about.disclaimer": "Mastodon on vapaa avoimen lähdekoodin ohjelmisto ja Mastodon gGmbH:n tavaramerkki.",
"about.domain_blocks.no_reason_available": "Syytä ei ole ilmoitettu",
"about.domain_blocks.preamble": "Yleisesti Mastodonin avulla voidaan tarkastella minkä tahansa muun fediverse-palvelinten sisältöä ja vuorovaikuttaa eri palvelinten käyttäjien kanssa. Nämä ovat tälle palvelimelle määritetyt poikkeukset.",
"about.domain_blocks.preamble": "Mastodonin avulla voidaan yleensä tarkastella minkä tahansa fediversumiin kuuluvan palvelimen sisältöä ja vuorovaikuttaa eri palvelinten käyttäjien kanssa. Nämä ovat tälle palvelimelle määritetyt poikkeukset.",
"about.domain_blocks.silenced.explanation": "Et yleensä näe tämän palvelimen profiileja ja sisältöä, jollet erityisesti etsi juuri sitä tai liity siihen seuraamalla.",
"about.domain_blocks.silenced.title": "Rajoitettu",
"about.domain_blocks.suspended.explanation": "Mitään tämän palvelimen tietoja ei käsitellä, tallenneta tai vaihdeta, mikä tekee vuorovaikutuksesta ja viestinnästä sen käyttäjien kanssa mahdotonta.",
@ -16,7 +16,7 @@
"account.badges.bot": "Botti",
"account.badges.group": "Ryhmä",
"account.block": "Estä @{name}",
"account.block_domain": "Estä palvelu {domain}",
"account.block_domain": "Estä verkkotunnus {domain}",
"account.block_short": "Estä",
"account.blocked": "Estetty",
"account.browse_more_on_origin_server": "Selaile lisää alkuperäisellä palvelimella",
@ -25,11 +25,11 @@
"account.disable_notifications": "Lopeta ilmoittamasta minulle, kun @{name} julkaisee",
"account.domain_blocked": "Verkkotunnus estetty",
"account.edit_profile": "Muokkaa profiilia",
"account.enable_notifications": "Ilmoita kun käyttäjä @{name} julkaisee viestin",
"account.enable_notifications": "Ilmoita minulle, kun @{name} julkaisee",
"account.endorse": "Suosittele profiilissasi",
"account.featured_tags.last_status_at": "Viimeisin viesti {date}",
"account.featured_tags.last_status_never": "Ei viestejä",
"account.featured_tags.title": "Käyttäjän {name} esillä olevat aihetunnisteet",
"account.featured_tags.last_status_at": "Viimeisin julkaisu {date}",
"account.featured_tags.last_status_never": "Ei julkaisuja",
"account.featured_tags.title": "Käyttäjän {name} esille nostetut aihetunnisteet",
"account.follow": "Seuraa",
"account.followers": "seuraaja(t)",
"account.followers.empty": "Kukaan ei seuraa tätä käyttäjää vielä.",
@ -54,21 +54,21 @@
"account.muted": "Mykistetty",
"account.no_bio": "Kuvausta ei ole annettu.",
"account.open_original_page": "Avaa alkuperäinen sivu",
"account.posts": "viesti(t)",
"account.posts_with_replies": "Viestit ja vastaukset",
"account.posts": "Julkaisut",
"account.posts_with_replies": "Julkaisut ja vastaukset",
"account.report": "Raportoi @{name}",
"account.requested": "Odottaa hyväksyntää. Peruuta seuraamispyyntö klikkaamalla",
"account.requested": "Odottaa hyväksyntää. Peruuta seuraamispyyntö napsauttamalla",
"account.requested_follow": "{name} on pyytänyt lupaa seurata sinua",
"account.share": "Jaa käyttäjän @{name} profiili",
"account.show_reblogs": "Näytä tehostukset käyttäjältä @{name}",
"account.statuses_counter": "{count, plural, one {{counter} viesti} other {{counter} viestiä}}",
"account.show_reblogs": "Näytä käyttäjän @{name} tehostukset",
"account.statuses_counter": "{count, plural, one {{counter} julkaisu} other {{counter} julkaisua}}",
"account.unblock": "Poista esto: @{name}",
"account.unblock_domain": "Salli palvelu {domain}",
"account.unblock_short": "Poista esto",
"account.unendorse": "Poista suosittelu profiilistasi",
"account.unfollow": "Lopeta seuraaminen",
"account.unmute": "Poista käyttäjän @{name} mykistys",
"account.unmute_notifications_short": "Kumoa ilmoitusten mykistys",
"account.unmute_notifications_short": "Poista ilmoitusten mykistys",
"account.unmute_short": "Poista mykistys",
"account_note.placeholder": "Lisää muistiinpano napsauttamalla",
"admin.dashboard.daily_retention": "Käyttäjän säilyminen rekisteröitymisen jälkeiseen päivään mennessä",
@ -112,7 +112,7 @@
"column.community": "Paikallinen aikajana",
"column.direct": "Yksityiset maininnat",
"column.directory": "Selaa profiileja",
"column.domain_blocks": "Estetyt palvelut",
"column.domain_blocks": "Estetyt verkkotunnukset",
"column.favourites": "Suosikit",
"column.firehose": "Live-syötteet",
"column.follow_requests": "Seuraamispyynnöt",
@ -120,7 +120,7 @@
"column.lists": "Listat",
"column.mutes": "Mykistetyt käyttäjät",
"column.notifications": "Ilmoitukset",
"column.pins": "Kiinnitetyt viestit",
"column.pins": "Kiinnitetyt julkaisut",
"column.public": "Yleinen aikajana",
"column_back_button.label": "Takaisin",
"column_header.hide_settings": "Piilota asetukset",
@ -128,7 +128,7 @@
"column_header.moveRight_settings": "Siirrä saraketta oikealle",
"column_header.pin": "Kiinnitä",
"column_header.show_settings": "Näytä asetukset",
"column_header.unpin": "Poista kiinnitys",
"column_header.unpin": "Irrota",
"column_subheading.settings": "Asetukset",
"community.column_settings.local_only": "Vain paikalliset",
"community.column_settings.media_only": "Vain media",
@ -137,13 +137,13 @@
"compose.language.search": "Hae kieliä...",
"compose.published.body": "Julkaisusi julkaistiin.",
"compose.published.open": "Avaa",
"compose.saved.body": "Viesti tallennettu.",
"compose.saved.body": "Julkaisu tallennettu.",
"compose_form.direct_message_warning_learn_more": "Lisätietoja",
"compose_form.encryption_warning": "Mastodonin viestit eivät ole päästä päähän salattuja. Älä jaa arkaluonteisia tietoja Mastodonissa.",
"compose_form.encryption_warning": "Mastodonin julkaisut eivät ole päästä päähän salattuja. Älä jaa arkaluonteisia tietoja Mastodonissa.",
"compose_form.hashtag_warning": "Tätä julkaisua ei voi liittää aihetunnisteisiin, koska se ei ole julkinen. Vain näkyvyydeltään julkisiksi määritettyjä julkaisuja voidaan hakea aihetunnisteiden avulla.",
"compose_form.lock_disclaimer": "Tilisi ei ole {locked}. Kuka tahansa voi seurata tiliäsi ja nähdä vain seuraajille rajaamasi julkaisut.",
"compose_form.lock_disclaimer.lock": "lukittu",
"compose_form.placeholder": "Mitä sinulla on mielessäsi?",
"compose_form.placeholder": "Mitä mietit?",
"compose_form.poll.add_option": "Lisää valinta",
"compose_form.poll.duration": "Äänestyksen kesto",
"compose_form.poll.option_placeholder": "Valinta {number}",
@ -167,24 +167,24 @@
"confirmations.cancel_follow_request.confirm": "Peruuta pyyntö",
"confirmations.cancel_follow_request.message": "Haluatko varmasti peruuttaa pyyntösi seurata profiilia {name}?",
"confirmations.delete.confirm": "Poista",
"confirmations.delete.message": "Haluatko varmasti poistaa tämän viestin?",
"confirmations.delete.message": "Haluatko varmasti poistaa tämän julkaisun?",
"confirmations.delete_list.confirm": "Poista",
"confirmations.delete_list.message": "Haluatko varmasti poistaa tämän listan kokonaan?",
"confirmations.delete_list.message": "Haluatko varmasti poistaa tämän listan pysyvästi?",
"confirmations.discard_edit_media.confirm": "Hylkää",
"confirmations.discard_edit_media.message": "Sinulla on tallentamattomia muutoksia median kuvaukseen tai esikatseluun, hylätäänkö ne silti?",
"confirmations.domain_block.confirm": "Estä koko verkkotunnus",
"confirmations.domain_block.message": "Haluatko aivan varmasti estää palvelun {domain} täysin? Useimmiten muutama kohdistettu esto tai mykistys on riittävä ja suositeltava toimenpide. Et näe kyseisen sisältöä kyseiseltä verkkoalueelta missään julkisissa aikajanoissa tai ilmoituksissa. Tälle verkkoalueelle kuuluvat seuraajasi poistetaan.",
"confirmations.domain_block.message": "Haluatko aivan varmasti estää koko verkkotunnuksen {domain}? Useimmiten muutama kohdistettu esto tai mykistys on riittävä ja suositeltava toimi. Et näe sisältöä tästä verkkotunnuksesta millään julkisilla aikajanoilla tai ilmoituksissa. Tähän verkkotunnukseen kuuluvat seuraajasi poistetaan.",
"confirmations.edit.confirm": "Muokkaa",
"confirmations.edit.message": "Muokkaaminen nyt korvaa viestin, jota paraikaa työstät. Haluatko varmasti jatkaa?",
"confirmations.edit.message": "Jos muokkaat viestiä nyt, se korvaa parhaillaan työstämäsi viestin. Haluatko varmasti jatkaa?",
"confirmations.logout.confirm": "Kirjaudu ulos",
"confirmations.logout.message": "Haluatko varmasti kirjautua ulos?",
"confirmations.mute.confirm": "Mykistä",
"confirmations.mute.explanation": "Tämä toiminto piilottaa heidän julkaisunsa sinulta mukaan lukien ne, joissa heidät mainitaan sallien heidän yhä nähdä julkaisusi ja seurata sinua.",
"confirmations.mute.message": "Haluatko varmasti mykistää profiilin {name}?",
"confirmations.mute.message": "Haluatko varmasti mykistää käyttäjän {name}?",
"confirmations.redraft.confirm": "Poista & palauta muokattavaksi",
"confirmations.redraft.message": "Haluatko varmasti poistaa viestin ja tehdä siitä luonnoksen? Suosikiksi lisäykset sekä tehostukset menetään, ja vastaukset alkuperäisviestiisi jäävät orvoiksi.",
"confirmations.redraft.message": "Haluatko varmasti poistaa julkaisun ja tehdä siitä luonnoksen? Suosikit ja tehostukset menetetään, ja alkuperäisen julkaisun vastaukset jäävät orvoiksi.",
"confirmations.reply.confirm": "Vastaa",
"confirmations.reply.message": "Jos vastaat nyt, vastaus korvaa tällä hetkellä työstämäsi viestin. Oletko varma, että haluat jatkaa?",
"confirmations.reply.message": "Jos vastaat nyt, vastaus korvaa parhaillaan työstämäsi viestin. Haluatko varmasti jatkaa?",
"confirmations.unfollow.confirm": "Lopeta seuraaminen",
"confirmations.unfollow.message": "Haluatko varmasti lakata seuraamasta profiilia {name}?",
"conversation.delete": "Poista keskustelu",
@ -193,20 +193,20 @@
"conversation.with": "{names} kanssa",
"copypaste.copied": "Kopioitu",
"copypaste.copy_to_clipboard": "Kopioi leikepöydälle",
"directory.federated": "Koko tunnettu fediverse",
"directory.federated": "Koko tunnettu fediversumi",
"directory.local": "Vain palvelusta {domain}",
"directory.new_arrivals": "Äskettäin saapuneet",
"directory.recently_active": "Hiljattain aktiiviset",
"disabled_account_banner.account_settings": "Tilin asetukset",
"disabled_account_banner.text": "Tilisi {disabledAccount} on tällä hetkellä poissa käytöstä.",
"dismissable_banner.community_timeline": "Nämä ovat uusimmat julkiset julkaisut käyttäjiltä, joiden tilejä isännöi {domain}.",
"dismissable_banner.community_timeline": "Nämä ovat viimeisimpiä julkaisuja käyttäjiltä, joiden tili sijaitsee palvelimella {domain}.",
"dismissable_banner.dismiss": "Hylkää",
"dismissable_banner.explore_links": "Näistä uutisista puhutaan juuri nyt tällä ja muilla hajautetun verkon palvelimilla.",
"dismissable_banner.explore_statuses": "Nämä ovat tänään huomiota keräävimpiä sosiaalisen verkon julkaisuja. Tuoreimmat, tehostetuimmat sekä suosikeiksi merkityimmät sijoitetaan listauksessa korkeammalle.",
"dismissable_banner.explore_tags": "Nämä aihetunnisteet saavat juuri nyt vetovoimaa tällä ja muilla hajautetun verkon palvelimilla olevien ihmisten keskuudessa.",
"dismissable_banner.public_timeline": "Nämä ovat viimeisimpiä julkaisuja sosiaalisen verkon käyttäjiltä, joita seurataan palvelussa {domain}.",
"dismissable_banner.explore_links": "Näitä uutisia jaetaan tänään sosiaalisessa verkossa eniten. Uusimmat ja eri käyttäjien eniten lähettämät uutiset nousevat listauksessa korkeimmalle.",
"dismissable_banner.explore_statuses": "Nämä sosiaalisen verkon julkaisut keräävät tänään eniten huomiota. Uusimmat, tehostetuimmat ja suosikiksi lisätyimmät nousevat listauksessa korkeimmalle.",
"dismissable_banner.explore_tags": "Nämä sosiaalisen verkon aihetunnisteet keräävät tänään eniten huomiota. Useimman käyttäjän käyttämät aihetunnisteet nousevat listauksessa korkeimmalle.",
"dismissable_banner.public_timeline": "Nämä ovat viimeisimpiä julkaisuja sosiaalisen verkon käyttäjiltä, joita seurataan palvelimella {domain}.",
"embed.instructions": "Upota julkaisu verkkosivullesi kopioimalla alla oleva koodi.",
"embed.preview": "Se tulee näyttämään tältä:",
"embed.preview": "Tältä se näyttää:",
"emoji_button.activity": "Aktiviteetit",
"emoji_button.clear": "Tyhjennä",
"emoji_button.custom": "Mukautetut",
@ -218,7 +218,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",
@ -226,25 +226,25 @@
"empty_column.account_timeline": "Ei viestejä täällä.",
"empty_column.account_unavailable": "Profiilia ei löydy",
"empty_column.blocks": "Et ole estänyt käyttäjiä.",
"empty_column.bookmarked_statuses": "Et ole vielä lisännyt viestejä kirjanmerkkeihisi. Kun lisäät yhden, se näkyy tässä.",
"empty_column.bookmarked_statuses": "Et ole vielä lisännyt julkaisuja kirjanmerkkeihisi. Kun lisäät yhden, se näkyy tässä.",
"empty_column.community": "Paikallinen aikajana on tyhjä. Kirjoita jotain julkista, niin homma lähtee käyntiin!",
"empty_column.direct": "Yksityisiä mainintoja ei vielä ole. Jos lähetät tai sinulle lähetetään sellaisia, näet ne täällä.",
"empty_column.domain_blocks": "Palveluita ei ole vielä estetty.",
"empty_column.explore_statuses": "Mikään ei trendaa nyt. Tarkista myöhemmin uudelleen!",
"empty_column.favourited_statuses": "Sinulla ei ole vielä yhtään suosikkiviestiä. Kun lisäät yhden, näkyy se tässä.",
"empty_column.favourites": "Kukaan ei ole vielä merkinnyt tätä viestiä suosikiksi. Kun joku tekee niin, näkyy asia täällä.",
"empty_column.follow_requests": "Et ole vielä vastaanottanut seurauspyyntöjä. Saamasi pyynnöt näytetään täällä.",
"empty_column.followed_tags": "Et ole vielä ottanut yhtään aihetunnistetta seurattavaksesi. Jos tai kun sitten teet niin, ne listautuvat tänne.",
"empty_column.favourited_statuses": "Sinulla ei ole vielä yhtään suosikkijulkaisua. Kun lisäät sellaisen, näkyy se tässä.",
"empty_column.favourites": "Kukaan ei ole vielä lisännyt tätä julkaisua suosikkeihinsa. Kun joku tekee niin, tulee hän tähän näkyviin.",
"empty_column.follow_requests": "Et ole vielä vastaanottanut seuraamispyyntöjä. Saamasi pyynnöt näkyvät täällä.",
"empty_column.followed_tags": "Et seuraa vielä yhtäkään aihetunnistetta. Kun alat seurata, ne tulevat tähän näkyviin.",
"empty_column.hashtag": "Tällä aihetunnisteella ei ole vielä mitään.",
"empty_column.home": "Kotiaikajanasi on tyhjä! Seuraa useampia henkilöjä, niin näet enemmän sisältöä.",
"empty_column.list": "Tässä luettelossa ei ole vielä mitään. Kun tämän luettelon jäsenet julkaisevat uusia viestejä, ne näkyvät täällä.",
"empty_column.list": "Tällä listalla ei ole vielä mitään. Kun tämän listan jäsenet lähettävät uusia julkaisuja, ne näkyvät tässä.",
"empty_column.lists": "Sinulla ei ole vielä yhtään listaa. Kun luot sellaisen, näkyy se tässä.",
"empty_column.mutes": "Et ole mykistänyt vielä yhtään käyttäjää.",
"empty_column.notifications": "Sinulla ei ole vielä ilmoituksia. Kun keskustelet muille, näet sen täällä.",
"empty_column.public": "Täällä ei ole mitään! Kirjoita jotain julkisesti. Voit myös seurata muiden palvelimien käyttäjiä",
"error.unexpected_crash.explanation": "Sivua ei voi näyttää oikein, johtuen bugista tai ongelmasta selaimen yhteensopivuudessa.",
"error.unexpected_crash.explanation_addons": "Sivua ei voitu näyttää oikein. Tämä virhe johtuu todennäköisesti selaimen lisäosasta tai automaattisista käännöstyökaluista.",
"error.unexpected_crash.next_steps": "Kokeile sivun päivitystä. Jos se ei auta, voi Mastodonin käyttö silti olla mahdollista eri selaimella tai natiivilla sovelluksella.",
"error.unexpected_crash.next_steps": "Kokeile päivittää sivu. Jos se ei auta, voi Mastodonin käyttö ehkä onnistua eri selaimella tai natiivisovelluksella.",
"error.unexpected_crash.next_steps_addons": "Yritä poistaa ne käytöstä ja päivittää sivu. Jos se ei auta, voit silti käyttää Mastodonia eri selaimen tai sovelluksen kautta.",
"errors.unexpected_crash.copy_stacktrace": "Kopioi pinon jäljitys leikepöydälle",
"errors.unexpected_crash.report_issue": "Ilmoita ongelmasta",
@ -254,28 +254,28 @@
"explore.trending_links": "Uutiset",
"explore.trending_statuses": "Julkaisut",
"explore.trending_tags": "Aihetunnisteet",
"filter_modal.added.context_mismatch_explanation": "Tämä suodatinluokka ei koske asiayhteyttä, jossa olet käyttänyt tätä viestiä. Jos haluat, että viesti suodatetaan myös tässä yhteydessä, sinun on muokattava suodatinta.",
"filter_modal.added.context_mismatch_title": "Asiayhteys ei täsmää!",
"filter_modal.added.expired_explanation": "Tämä suodatinluokka on vanhentunut ja sinun on muutettava viimeistä voimassaolon päivää, jotta sitä voidaan käyttää.",
"filter_modal.added.context_mismatch_explanation": "Tämä suodatinluokka ei koske kontekstia, jossa olet tarkastellut tätä julkaisua. Jos haluat, että julkaisu suodatetaan myös tässä kontekstissa, sinun pitää muokata suodatinta.",
"filter_modal.added.context_mismatch_title": "Konteksti ei täsmää!",
"filter_modal.added.expired_explanation": "Tämä suodatinluokka on vanhentunut, joten sinun on muutettava viimeistä voimassaolopäivää, jotta suodatin on voimassa.",
"filter_modal.added.expired_title": "Vanhentunut suodatin!",
"filter_modal.added.review_and_configure": "Voit tarkastella tätä suodatinluokkaa ja määrittää sen tarkemmin siirtymällä {settings_link}.",
"filter_modal.added.review_and_configure": "Voit tarkastella tätä suodatinluokkaa ja määrittää sen tarkemmin kohdassa {settings_link}.",
"filter_modal.added.review_and_configure_title": "Suodattimen asetukset",
"filter_modal.added.settings_link": "asetukset-sivulle",
"filter_modal.added.short_explanation": "Tämä viesti on lisätty seuraavaan suodatinluokkaan: {title}.",
"filter_modal.added.short_explanation": "Tämä julkaisu on lisätty seuraavaan suodatinluokkaan: {title}.",
"filter_modal.added.title": "Suodatin lisätty!",
"filter_modal.select_filter.context_mismatch": "ei sovellu tähän asiayhteyteen",
"filter_modal.select_filter.context_mismatch": "ei sovellu tähän kontekstiin",
"filter_modal.select_filter.expired": "vanhentunut",
"filter_modal.select_filter.prompt_new": "Uusi luokka: {name}",
"filter_modal.select_filter.search": "Etsi tai luo",
"filter_modal.select_filter.subtitle": "Käytä olemassa olevaa luokkaa tai luo uusi luokka",
"filter_modal.select_filter.title": "Suodata tämä viesti",
"filter_modal.title.status": "Suodata viesti",
"filter_modal.select_filter.subtitle": "Käytä olemassa olevaa luokkaa tai luo uusi",
"filter_modal.select_filter.title": "Suodata tämä julkaisu",
"filter_modal.title.status": "Suodata julkaisu",
"firehose.all": "Kaikki",
"firehose.local": "Tämä palvelin",
"firehose.remote": "Muut palvelimet",
"follow_request.authorize": "Valtuuta",
"follow_request.reject": "Hylkää",
"follow_requests.unlocked_explanation": "Vaikkei tiliäsi ole lukittu, on palvelun {domain} ylläpito arvioinut, että saatat olla halukas tarkistamaan nämä seurauspyynnöt erikseen.",
"follow_requests.unlocked_explanation": "Vaikkei tiliäsi ole lukittu, palvelimen {domain} ylläpito on arvioinut, että saatat olla halukas tarkistamaan nämä seuraamispyynnöt erikseen.",
"followed_tags": "Seuratut aihetunnisteet",
"footer.about": "Tietoja",
"footer.directory": "Profiilihakemisto",
@ -307,34 +307,34 @@
"home.column_settings.basic": "Perusasetukset",
"home.column_settings.show_reblogs": "Näytä tehostukset",
"home.column_settings.show_replies": "Näytä vastaukset",
"home.explore_prompt.body": "Kotisyötteesi on sekoitus seuraamistasi aihetunnisteista ja käyttäjistä sekä heidän tehostamistaan viesteistä. Jos se näyttää tällä hetkellä turhan hiljaiselta, saatat haluta:",
"home.explore_prompt.body": "Kotisyötteesi on sekoitus seuraamiasi aihetunnisteita ja käyttäjiä sekä heidän tehostamiaan julkaisuja. Jos se tuntuu liian hiljaiselta, saatat haluta:",
"home.explore_prompt.title": "Tämä on tukikohtasi Mastodonissa.",
"home.hide_announcements": "Piilota ilmoitukset",
"home.hide_announcements": "Piilota tiedotteet",
"home.pending_critical_update.body": "Päivitäthän Mastodon-palvelimen mahdollisimman pian!",
"home.pending_critical_update.link": "Tutustu päivityssisältöihin",
"home.pending_critical_update.title": "Kriittinen tietoturvapäivitys saatavilla!",
"home.show_announcements": "Näytä ilmoitukset",
"interaction_modal.description.favourite": "Mastodon-tilisi myötä voit merkitä julkaisuja suosikeiksi, jolloin osoitat julkaisijoille arvostavasi sisältöä, ja tallennat sitä myös helpommin saatavillesi jatkossa.",
"interaction_modal.description.follow": "Kun sinulla on Mastodon-tili, voit seurata käyttäjää {name} nähdäksesi hänen viestinsä kotisyötteessäsi.",
"interaction_modal.description.reblog": "Kun sinulla on tili Mastodonissa, voit tehostaa viestiä ja jakaa sen omien seuraajiesi kanssa.",
"interaction_modal.description.reply": "Kun sinulla on tili Mastodonissa, voit vastata tähän viestiin.",
"interaction_modal.login.action": "Palaa aloitussivulle",
"interaction_modal.login.prompt": "Kotipalvelimesi verkkotunnus (kuten mastodon.social)",
"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.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.",
"interaction_modal.login.action": "Siirry kotiin",
"interaction_modal.login.prompt": "Kotipalvelimesi verkkotunnus, kuten mastodon.social",
"interaction_modal.no_account_yet": "Etkö ole vielä Mastodonissa?",
"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, jolla loit tilisi. Jos et muista, etsi tervetuliaissähköpostia 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, 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 {name}",
"interaction_modal.title.reblog": "Tehosta käyttäjän {name} viestiä",
"interaction_modal.title.reply": "Vastaa käyttäjän {name} viestiin",
"interaction_modal.title.follow": "Seuraa käyttäjää {name}",
"interaction_modal.title.reblog": "Tehosta käyttäjän {name} julkaisua",
"interaction_modal.title.reply": "Vastaa käyttäjän {name} julkaisuun",
"intervals.full.days": "{number, plural, one {# päivä} other {# päivää}}",
"intervals.full.hours": "{number, plural, one {# tunti} other {# tuntia}}",
"intervals.full.minutes": "{number, plural, one {# minuutti} other {# minuuttia}}",
"keyboard_shortcuts.back": "Siirry takaisin",
"keyboard_shortcuts.blocked": "Avaa estettyjen käyttäjien luettelo",
"keyboard_shortcuts.boost": "Tehosta viestiä",
"keyboard_shortcuts.boost": "Tehosta julkaisua",
"keyboard_shortcuts.column": "Kohdista sarakkeeseen",
"keyboard_shortcuts.compose": "siirry tekstinsyöttöön",
"keyboard_shortcuts.description": "Kuvaus",
@ -342,7 +342,7 @@
"keyboard_shortcuts.down": "Siirry listassa alaspäin",
"keyboard_shortcuts.enter": "Avaa julkaisu",
"keyboard_shortcuts.favourite": "Lisää julkaisu suosikkeihin",
"keyboard_shortcuts.favourites": "Avaa suosikkilista",
"keyboard_shortcuts.favourites": "Avaa suosikkiluettelo",
"keyboard_shortcuts.federated": "Avaa yleinen aikajana",
"keyboard_shortcuts.heading": "Pikanäppäimet",
"keyboard_shortcuts.home": "Avaa kotiaikajana",
@ -354,16 +354,16 @@
"keyboard_shortcuts.my_profile": "Avaa profiilisi",
"keyboard_shortcuts.notifications": "Avaa ilmoitukset-valikko",
"keyboard_shortcuts.open_media": "Avaa media",
"keyboard_shortcuts.pinned": "Avaa lista kiinnitetyistä viesteistä",
"keyboard_shortcuts.pinned": "Avaa kiinnitettyjen julkaisujen luettelo",
"keyboard_shortcuts.profile": "Avaa kirjoittajan profiili",
"keyboard_shortcuts.reply": "Vastaa viestiin",
"keyboard_shortcuts.requests": "Avaa lista seurauspyynnöistä",
"keyboard_shortcuts.reply": "Vastaa julkaisuun",
"keyboard_shortcuts.requests": "Avaa seuraamispyyntöjen luettelo",
"keyboard_shortcuts.search": "siirry hakukenttään",
"keyboard_shortcuts.spoilers": "Näytä/piilota sisältövaroituskenttä",
"keyboard_shortcuts.start": "avaa \"Aloitus\"",
"keyboard_shortcuts.toggle_hidden": "näytä/piilota sisältövaroituksella merkitty teksti",
"keyboard_shortcuts.toggle_sensitivity": "näytä/piilota media",
"keyboard_shortcuts.toot": "Luo uusi viesti",
"keyboard_shortcuts.toot": "Luo uusi julkaisu",
"keyboard_shortcuts.unfocus": "Poistu teksti-/hakukentästä",
"keyboard_shortcuts.up": "Siirry listassa ylöspäin",
"lightbox.close": "Sulje",
@ -372,19 +372,19 @@
"lightbox.next": "Seuraava",
"lightbox.previous": "Edellinen",
"limited_account_hint.action": "Näytä profiili joka tapauksessa",
"limited_account_hint.title": "Palvelun {domain} ylläpito on piilottanut tämän profiilin.",
"limited_account_hint.title": "Palvelun {domain} valvojat ovat piilottaneet tämän profiilin.",
"link_preview.author": "Julkaissut {name}",
"lists.account.add": "Lisää listaan",
"lists.account.remove": "Poista listasta",
"lists.account.add": "Lisää listalle",
"lists.account.remove": "Poista listalta",
"lists.delete": "Poista lista",
"lists.edit": "Muokkaa listaa",
"lists.edit.submit": "Vaihda otsikko",
"lists.exclusive": "Piilota nämä julkaisut kotiaikajanaltasi",
"lists.edit.submit": "Vaihda nimi",
"lists.exclusive": "Piilota nämä julkaisut kotisyötteestä",
"lists.new.create": "Lisää lista",
"lists.new.title_placeholder": "Uuden listan nimi",
"lists.replies_policy.followed": "Jokainen seurattu käyttäjä",
"lists.replies_policy.list": "Listan jäsenet",
"lists.replies_policy.none": "Ei kukaan",
"lists.replies_policy.followed": "Jokaiselle seuratulle käyttäjälle",
"lists.replies_policy.list": "Listan jäsenille",
"lists.replies_policy.none": "Ei kellekään",
"lists.replies_policy.title": "Näytä vastaukset:",
"lists.search": "Etsi seuraamistasi henkilöistä",
"lists.subheading": "Omat listasi",
@ -400,23 +400,23 @@
"navigation_bar.blocks": "Estetyt käyttäjät",
"navigation_bar.bookmarks": "Kirjanmerkit",
"navigation_bar.community_timeline": "Paikallinen aikajana",
"navigation_bar.compose": "Julkaise",
"navigation_bar.compose": "Kirjoita uusi julkaisu",
"navigation_bar.direct": "Yksityiset maininnat",
"navigation_bar.discover": "Löydä uutta",
"navigation_bar.domain_blocks": "Estetyt palvelut",
"navigation_bar.domain_blocks": "Estetyt verkkotunnukset",
"navigation_bar.edit_profile": "Muokkaa profiilia",
"navigation_bar.explore": "Selaa",
"navigation_bar.favourites": "Suosikit",
"navigation_bar.filters": "Mykistetyt sanat",
"navigation_bar.follow_requests": "Seuraamispyynnöt",
"navigation_bar.followed_tags": "Seuratut aihetunnisteet",
"navigation_bar.follows_and_followers": "Seurattavat ja seuraajat",
"navigation_bar.follows_and_followers": "Seuratut ja seuraajat",
"navigation_bar.lists": "Listat",
"navigation_bar.logout": "Kirjaudu ulos",
"navigation_bar.mutes": "Mykistetyt käyttäjät",
"navigation_bar.opened_in_classic_interface": "Julkaisut, profiilit sekä tietyt muut sivut avataan oletuksena perinteisessä käyttöliittymässä.",
"navigation_bar.opened_in_classic_interface": "Julkaisut, profiilit ja tietyt muut sivut avautuvat oletuksena perinteiseen web-käyttöliittymään.",
"navigation_bar.personal": "Henkilökohtainen",
"navigation_bar.pins": "Kiinnitetyt viestit",
"navigation_bar.pins": "Kiinnitetyt julkaisut",
"navigation_bar.preferences": "Asetukset",
"navigation_bar.public_timeline": "Yleinen aikajana",
"navigation_bar.search": "Haku",
@ -430,9 +430,9 @@
"notification.mention": "{name} mainitsi sinut",
"notification.own_poll": "Äänestyksesi on päättynyt",
"notification.poll": "Äänestys, johon osallistuit, on päättynyt",
"notification.reblog": "{name} tehosti viestiäsi",
"notification.status": "{name} julkaisi juuri viestin",
"notification.update": "{name} muokkasi viestiä",
"notification.reblog": "{name} tehosti julkaisuasi",
"notification.status": "{name} julkaisi juuri",
"notification.update": "{name} muokkasi julkaisua",
"notifications.clear": "Tyhjennä ilmoitukset",
"notifications.clear_confirmation": "Haluatko varmasti poistaa kaikki ilmoitukset pysyvästi?",
"notifications.column_settings.admin.report": "Uudet ilmoitukset:",
@ -446,7 +446,7 @@
"notifications.column_settings.follow_request": "Uudet seuraamispyynnöt:",
"notifications.column_settings.mention": "Maininnat:",
"notifications.column_settings.poll": "Äänestyksen tulokset:",
"notifications.column_settings.push": "Push-ilmoitukset",
"notifications.column_settings.push": "Puskuilmoitukset",
"notifications.column_settings.reblog": "Tehostukset:",
"notifications.column_settings.show": "Näytä sarakkeessa",
"notifications.column_settings.sound": "Äänimerkki",
@ -473,11 +473,11 @@
"onboarding.action.back": "Palaa takaisin",
"onboarding.actions.back": "Palaa takaisin",
"onboarding.actions.go_to_explore": "Siirry suosituimpien aiheiden syötteeseen",
"onboarding.actions.go_to_home": "Siirry kotisyötteeseen",
"onboarding.actions.go_to_home": "Siirry kotisyötteeseeni",
"onboarding.compose.template": "Tervehdys #Mastodon!",
"onboarding.follows.empty": "Valitettavasti tuloksia ei voida näyttää juuri nyt. Voit kokeilla hakua tai selata tutustumissivua löytääksesi seurattavaa, tai yrittää myöhemmin uudelleen.",
"onboarding.follows.lead": "Kokoat oman kotisyötteesi itse. Mitä enemmän ihmisiä seuraat, sitä aktiivisempi ja kiinnostavampi syöte on. Nämä profiilit voivat olla alkuun hyvä lähtökohta — voit aina lopettaa niiden seuraamisen myöhemmin!",
"onboarding.follows.title": "Suosittua Mastodonissa",
"onboarding.follows.title": "Mukauta kotisyötettäsi",
"onboarding.share.lead": "Kerro ihmisille, kuinka he voivat löytää sinut Mastodonista!",
"onboarding.share.message": "Olen {username} #Mastodon'issa! Seuraa minua osoitteessa {url}",
"onboarding.share.next_steps": "Mahdolliset seuraavat vaiheet:",
@ -493,10 +493,10 @@
"onboarding.steps.setup_profile.title": "Mukauta profiiliasi",
"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 lisäsuojata tiliäsi ottamalla kaksivaiheisen todennuksen käyttöön palvelun tiliasetuksista. Ominaisuus toimii haluamasi TOTP-todennussovelluksen avulla, eikä käyttö edellytä puhelinnumeron antamista!",
"onboarding.tips.accounts_from_other_servers": "<strong>Tiesitkö?</strong> Koska Mastodon kuuluu hajautettuun verkkoon, osa kohtaamistasi profiileista sijaitsee muilla palvelimilla kuin sinun. Voit silti viestiä saumattomasti heidän kanssaan! Heidän palvelimensa ilmaistaan käyttäjänimen perässä!",
"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ä puhelinnumeroa!",
"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.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 tietoihin. Tämä ei maksa mitään, eikä sinun tarvitse lähetellä mitään asiakirjoja!",
"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",
"password_confirmation.mismatching": "Salasanan vahvistus ei täsmää",
"picture_in_picture.restore": "Laita se takaisin",
@ -510,15 +510,15 @@
"poll.votes": "{votes, plural, one {# ääni} other {# ääntä}}",
"poll_button.add_poll": "Lisää äänestys",
"poll_button.remove_poll": "Poista äänestys",
"privacy.change": "Muuta viestin näkyvyyttä",
"privacy.direct.long": "Näkyvissä vain mainituille käyttäjille",
"privacy.direct.short": "Vain mainitut henkilöt",
"privacy.private.long": "Näkyvissä vain seuraajille",
"privacy.change": "Muuta julkaisun näkyvyyttä",
"privacy.direct.long": "Näkyy vain mainituille käyttäjille",
"privacy.direct.short": "Vain mainitut käyttäjät",
"privacy.private.long": "Näkyy vain seuraajille",
"privacy.private.short": "Vain seuraajat",
"privacy.public.long": "Näkyvissä kaikille",
"privacy.public.long": "Näkyy kaikille",
"privacy.public.short": "Julkinen",
"privacy.unlisted.long": "Näkyvissä kaikille, mutta jättäen pois hakemisen mahdollisuus",
"privacy.unlisted.short": "Listaamaton julkinen",
"privacy.unlisted.long": "Näkyy kaikille, mutta jää pois löytämisominaisuuksista",
"privacy.unlisted.short": "Listaamaton",
"privacy_policy.last_updated": "Viimeksi päivitetty {date}",
"privacy_policy.title": "Tietosuojakäytäntö",
"refresh": "Päivitä",
@ -539,11 +539,11 @@
"report.block": "Estä",
"report.block_explanation": "Et näe hänen viestejään, eikä hän voi nähdä viestejäsi tai seurata sinua. Hän näkevät, että olet estänyt hänet.",
"report.categories.legal": "Lakiasiat",
"report.categories.other": "muu",
"report.categories.other": "Muu",
"report.categories.spam": "Roskaposti",
"report.categories.violation": "Sisältö rikkoo yhtä tai useampaa palvelimen sääntöä",
"report.category.subtitle": "Valitse se, mikä sopii parhaiten",
"report.category.title": "Kerro meille miksi tämä {type} pitää raportoida",
"report.category.subtitle": "Valitse sopivin",
"report.category.title": "Kerro meille, miksi tämä {type} pitää raportoida",
"report.category.title_account": "profiili",
"report.category.title_status": "julkaisu",
"report.close": "Valmis",
@ -551,7 +551,7 @@
"report.forward": "Välitä kohteeseen {target}",
"report.forward_hint": "Tämä tili on toisella palvelimella. Haluatko lähettää nimettömän raportin myös sinne?",
"report.mute": "Mykistä",
"report.mute_explanation": "Et näe hänen viestejään. Hän voi silti seurata sinua ja nähdä viestisi. Hän ei tiedä, että on mykistetty.",
"report.mute_explanation": "Et näe hänen julkaisujaan. Hän voi silti seurata sinua ja nähdä julkaisusi. Hän ei tiedä, että hänet on mykistetty.",
"report.next": "Seuraava",
"report.placeholder": "Lisäkommentit",
"report.reasons.dislike": "En pidä siitä",
@ -564,10 +564,10 @@
"report.reasons.spam_description": "Haitalliset linkit, väärennetyt sitoutumiset tai toistuvat vastaukset",
"report.reasons.violation": "Se rikkoo palvelimen sääntöjä",
"report.reasons.violation_description": "Tiedät, että se rikkoo tiettyjä sääntöjä",
"report.rules.subtitle": "Valitse kaikki jotka sopivat",
"report.rules.subtitle": "Valitse kaikki sopivat",
"report.rules.title": "Mitä sääntöjä rikotaan?",
"report.statuses.subtitle": "Valitse kaikki sopivat",
"report.statuses.title": "Onko olemassa yhtään viestiä, jotka tukevat tätä raporttia?",
"report.statuses.title": "Onko julkaisuja, jotka tukevat tätä raporttia?",
"report.submit": "Lähetä",
"report.target": "Raportoidaan {target}",
"report.thanks.take_action": "Tässä on vaihtoehtosi hallita näkemääsi Mastodonissa:",
@ -576,7 +576,7 @@
"report.thanks.title_actionable": "Kiitos raportista, tutkimme asiaa.",
"report.unfollow": "Lopeta käyttäjän @{name} seuraaminen",
"report.unfollow_explanation": "Seuraat tätä tiliä. Estääksesi tilin viestejä näykymästä kotisyötteessäsi, lopeta sen seuraaminen.",
"report_notification.attached_statuses": "{count, plural, one {{count} viesti} other {{count} viestiä}} liitteenä",
"report_notification.attached_statuses": "{count, plural, one {{count} julkaisu} other {{count} julkaisua}} liitteenä",
"report_notification.categories.legal": "Laillinen",
"report_notification.categories.other": "Muu",
"report_notification.categories.spam": "Roskaposti",
@ -588,7 +588,7 @@
"search.quick_action.go_to_account": "Avaa profiili {x}",
"search.quick_action.go_to_hashtag": "Siirry aihetunnisteeseen {x}",
"search.quick_action.open_url": "Avaa URL-osoite Mastodonissa",
"search.quick_action.status_search": "Julkaisut, jotka vastaavat hakua {x}",
"search.quick_action.status_search": "Julkaisut haulla {x}",
"search.search_or_paste": "Etsi tai kirjoita URL-osoite",
"search_popout.full_text_search_disabled_message": "Ei saatavilla palvelimella {domain}.",
"search_popout.language_code": "ISO-kielikoodi",
@ -602,8 +602,8 @@
"search_results.hashtags": "Aihetunnisteet",
"search_results.nothing_found": "Näille hakusanoille ei löytynyt mitään",
"search_results.see_all": "Näytä kaikki",
"search_results.statuses": "Viestit",
"search_results.title": "Etsi {q}",
"search_results.statuses": "Julkaisut",
"search_results.title": "Hae {q}",
"server_banner.about_active_users": "Palvelinta käyttäneet ihmiset viimeisen 30 päivän aikana (kuukauden aktiiviset käyttäjät)",
"server_banner.active_users": "aktiivista käyttäjää",
"server_banner.administered_by": "Ylläpitäjä:",
@ -613,15 +613,15 @@
"sign_in_banner.create_account": "Luo tili",
"sign_in_banner.sign_in": "Kirjaudu",
"sign_in_banner.sso_redirect": "Kirjaudu tai rekisteröidy",
"sign_in_banner.text": "Kirjaudu sisään seurataksesi profiileja tai aihetunnisteita, merkitäksesi julkaisuja suosikeiksi, julkaistaksesi sekä vastataksesi julkaisuihin. Voit vuorovaikuttaa myös eri palvelimella sijaitsevalta tililtäsi.",
"status.admin_account": "Avaa moderaattorinäkymä tilistä @{name}",
"status.admin_domain": "Avaa palvelimen {domain} moderointitoiminnot",
"status.admin_status": "Avaa viesti moderointinäkymässä",
"sign_in_banner.text": "Kirjaudu sisään, niin voit seurata profiileja tai aihetunnisteita, lisätä julkaisuja suosikkeihin, jakaa julkaisuja ja vastata niihin. Voit olla vuorovaikutuksessa myös eri palvelimella olevalta tililtäsi.",
"status.admin_account": "Avaa tilin @{name} valvontanäkymä",
"status.admin_domain": "Avaa palvelimen {domain} valvontanäkymä",
"status.admin_status": "Avaa julkaisu valvontanäkymässä",
"status.block": "Estä @{name}",
"status.bookmark": "Tallenna kirjanmerkki",
"status.bookmark": "Lisää kirjanmerkki",
"status.cancel_reblog_private": "Peru tehostus",
"status.cannot_reblog": "Tätä viestiä ei voi tehostaa",
"status.copy": "Kopioi linkki viestiin",
"status.cannot_reblog": "Tätä julkaisua ei voi tehostaa",
"status.copy": "Kopioi julkaisun linkki",
"status.delete": "Poista",
"status.detailed_status": "Yksityiskohtainen keskustelunäkymä",
"status.direct": "Mainitse @{name} yksityisesti",
@ -630,8 +630,8 @@
"status.edited": "Muokattu {date}",
"status.edited_x_times": "Muokattu {count, plural, one {{count} kerran} other {{count} kertaa}}",
"status.embed": "Upota",
"status.favourite": "Merkitse suosikiksi",
"status.filter": "Suodata tämä viesti",
"status.favourite": "Suosikki",
"status.filter": "Suodata tämä julkaisu",
"status.filtered": "Suodatettu",
"status.hide": "Piilota julkaisu",
"status.history.created": "{name} luotu {date}",
@ -644,27 +644,27 @@
"status.more": "Lisää",
"status.mute": "Mykistä @{name}",
"status.mute_conversation": "Mykistä keskustelu",
"status.open": "Laajenna viesti",
"status.open": "Laajenna julkaisu",
"status.pin": "Kiinnitä profiiliin",
"status.pinned": "Kiinnitetty julkaisu",
"status.read_more": "Näytä enemmän",
"status.reblog": "Tehosta",
"status.reblog_private": "Tehosta alkuperäiselle yleisölle",
"status.reblogged_by": "{name} tehosti",
"status.reblogs.empty": "Kukaan ei ole vielä tehostanut tätä viestiä. Kun joku tekee niin, näkyy kyseinen henkilö tässä.",
"status.reblogs.empty": "Kukaan ei ole vielä tehostanut tätä julkaisua. Kun joku tekee niin, tulee hän tähän näkyviin.",
"status.redraft": "Poista ja palauta muokattavaksi",
"status.remove_bookmark": "Poista kirjanmerkki",
"status.replied_to": "Vastattu {name}",
"status.reply": "Vastaa",
"status.replyAll": "Vastaa ketjuun",
"status.report": "Raportoi @{name}",
"status.sensitive_warning": "Arkaluontoista sisältöä",
"status.sensitive_warning": "Arkaluonteista sisältöä",
"status.share": "Jaa",
"status.show_filter_reason": "Näytä joka tapauksessa",
"status.show_less": "Näytä vähemmän",
"status.show_less_all": "Näytä vähemmän kaikista",
"status.show_less_all": "Näytä kaikista vähemmän",
"status.show_more": "Näytä lisää",
"status.show_more_all": "Näytä lisää kaikista",
"status.show_more_all": "Näytä kaikista enemmän",
"status.show_original": "Näytä alkuperäinen",
"status.title.with_attachments": "{user} liitti {attachmentCount, plural, one {{attachmentCount} tiedoston} other {{attachmentCount} tiedostoa}}",
"status.translate": "Käännä",
@ -672,7 +672,7 @@
"status.uncached_media_warning": "Esikatselu ei ole käytettävissä",
"status.unmute_conversation": "Poista keskustelun mykistys",
"status.unpin": "Irrota profiilista",
"subscribed_languages.lead": "Vain valituilla kielillä julkaistut viestit näkyvät etusivullasi ja aikajanalla muutoksen jälkeen. Valitse ei mitään, jos haluat vastaanottaa viestejä kaikilla kielillä.",
"subscribed_languages.lead": "Vain valituilla kielillä kirjoitetut julkaisut näkyvät koti- ja lista-aikajanoillasi muutoksen jälkeen. Älä valitse mitään, jos haluat nähdä julkaisuja kaikilla kielillä.",
"subscribed_languages.save": "Tallenna muutokset",
"subscribed_languages.target": "Vaihda tilatut kielet {target}",
"tabs_bar.home": "Koti",
@ -685,8 +685,8 @@
"timeline_hint.remote_resource_not_displayed": "{resource} muilta palvelimilta ei näytetä.",
"timeline_hint.resources.followers": "Seuraajat",
"timeline_hint.resources.follows": "seurattua",
"timeline_hint.resources.statuses": "Vanhemmat viestit",
"trends.counter_by_accounts": "{count, plural, one {{counter} henkilö} other {{counter} henkilöä}} viimeisten {days, plural, one {päivän} other {{days} päivän}}",
"timeline_hint.resources.statuses": "Vanhemmat julkaisut",
"trends.counter_by_accounts": "{count, plural, one {{counter} henkilö} other {{counter} henkilöä}} {days, plural, one {viimeisen päivän} other {viimeisten {days} päivän}} aikana",
"trends.trending_now": "Suosittua nyt",
"ui.beforeunload": "Luonnos häviää, jos poistut Mastodonista.",
"units.short.billion": "{count} mrd.",
@ -711,11 +711,11 @@
"upload_modal.detect_text": "Tunnista teksti kuvasta",
"upload_modal.edit_media": "Muokkaa mediaa",
"upload_modal.hint": "Klikkaa tai vedä ympyrä esikatselussa valitaksesi keskipiste, joka näkyy aina pienoiskuvissa.",
"upload_modal.preparing_ocr": "Valmistellaan OCR…",
"upload_modal.preparing_ocr": "Valmistellaan tekstintunnistusta…",
"upload_modal.preview_label": "Esikatselu ({ratio})",
"upload_progress.label": "Ladataan...",
"upload_progress.processing": "Käsitellään…",
"username.taken": "Kyseinen käyttäjätunnus on jo käytössä. Kokeile eri tunnusta",
"username.taken": "Käyttäjätunnus on jo varattu. Kokeile toista",
"video.close": "Sulje video",
"video.download": "Lataa tiedosto",
"video.exit_fullscreen": "Poistu koko näytön tilasta",
@ -725,5 +725,5 @@
"video.mute": "Mykistä ääni",
"video.pause": "Keskeytä",
"video.play": "Toista",
"video.unmute": "Poista äänen mykistys"
"video.unmute": "Palauta ääni"
}

View File

@ -308,7 +308,7 @@
"home.column_settings.show_reblogs": "Afficher boosts",
"home.column_settings.show_replies": "Afficher réponses",
"home.explore_prompt.body": "Votre fil d'actualité aura un mélange de messages depuis les hashtags que vous avez choisi de suivre, les personnes que vous avez choisi de suivre, et les messages qu'ils boostent. Si ça vous semble trop calme à votre goût, nhésitez pas à :",
"home.explore_prompt.title": "C'est chez vous dans Mastadon.",
"home.explore_prompt.title": "C'est votre page d'accueil dans Mastodon.",
"home.hide_announcements": "Masquer les annonces",
"home.pending_critical_update.body": "Veuillez mettre à jour votre serveur Mastodon dès que possible !",
"home.pending_critical_update.link": "Voir les mises à jour",

View File

@ -17,6 +17,7 @@
"account.blocked": "Արգելափակուած է",
"account.browse_more_on_origin_server": "Դիտել աւելին իրական պրոֆիլում",
"account.cancel_follow_request": "Withdraw follow request",
"account.direct": "Մասնաւոր յիշատակում @{name}",
"account.disable_notifications": "Ծանուցումները անջատել @{name} գրառումների համար",
"account.domain_blocked": "Տիրոյթը արգելափակուած է",
"account.edit_profile": "Խմբագրել հաշիւը",
@ -85,9 +86,11 @@
"column.blocks": "Արգելափակուած օգտատէրեր",
"column.bookmarks": "Էջանիշեր",
"column.community": "Տեղական հոսք",
"column.direct": "Մասնաւոր յիշատակումներ",
"column.directory": "Զննել անձնական էջերը",
"column.domain_blocks": "Թաքցուած տիրոյթները",
"column.favourites": "Հաւանածներ",
"column.firehose": "Հոսքեր",
"column.follow_requests": "Հետեւելու հայցեր",
"column.home": "Հիմնական",
"column.lists": "Ցանկեր",
@ -135,6 +138,7 @@
"confirmations.block.block_and_report": "Արգելափակել եւ բողոքել",
"confirmations.block.confirm": "Արգելափակել",
"confirmations.block.message": "Վստա՞հ ես, որ ուզում ես արգելափակել {name}֊ին։",
"confirmations.cancel_follow_request.confirm": "Կասեցնել հայցը",
"confirmations.delete.confirm": "Ջնջել",
"confirmations.delete.message": "Վստա՞հ ես, որ ուզում ես ջնջել այս գրառումը։",
"confirmations.delete_list.confirm": "Ջնջել",
@ -216,6 +220,8 @@
"filter_modal.select_filter.search": "Որոնել կամ ստեղծել",
"filter_modal.select_filter.title": "Զտել այս գրառումը",
"firehose.all": "Բոլորը",
"firehose.local": "Այս հանգոյցը",
"firehose.remote": "Այլ հանգոյցներ",
"follow_request.authorize": "Վաւերացնել",
"follow_request.reject": "Մերժել",
"follow_requests.unlocked_explanation": "Այս հարցումը ուղարկուած է հաշուից, որի համար {domain}-ի անձնակազմը միացրել է ձեռքով ստուգում։",
@ -246,6 +252,8 @@
"home.column_settings.show_replies": "Ցուցադրել պատասխանները",
"home.hide_announcements": "Թաքցնել յայտարարութիւնները",
"home.show_announcements": "Ցուցադրել յայտարարութիւնները",
"interaction_modal.on_another_server": "Այլ հանգոյցում",
"interaction_modal.on_this_server": "Այս հանգոյցում",
"interaction_modal.title.favourite": "Հաւանել {name}-ի գրառումը",
"interaction_modal.title.follow": "Հետեւել {name}-ին",
"interaction_modal.title.reblog": "Տարածել {name}-ի գրառումը",
@ -316,6 +324,7 @@
"navigation_bar.bookmarks": "Էջանիշեր",
"navigation_bar.community_timeline": "Տեղական հոսք",
"navigation_bar.compose": "Ստեղծել նոր գրառում",
"navigation_bar.direct": "Մասնաւոր յիշատակումներ",
"navigation_bar.discover": "Բացայայտել",
"navigation_bar.domain_blocks": "Թաքցուած տիրոյթներ",
"navigation_bar.edit_profile": "Խմբագրել հաշիւը",
@ -451,11 +460,15 @@
"report_notification.attached_statuses": "{count, plural, one {# post} other {# posts}} attached",
"report_notification.categories.other": "Այլ",
"report_notification.categories.spam": "Սպամ",
"search.no_recent_searches": "Որոնման պատմութիւն չկայ",
"search.placeholder": "Փնտրել",
"search.search_or_paste": "Որոնել կամ դնել URL",
"search_popout.options": "Որոնման տեսակները",
"search_popout.recent": "Վերջին որոնումները",
"search_results.accounts": "Հաշիւներ",
"search_results.all": "Բոլորը",
"search_results.hashtags": "Պիտակներ",
"search_results.see_all": "Տեսնել բոլորը",
"search_results.statuses": "Գրառումներ",
"search_results.title": "Որոնել {q}-ն",
"server_banner.active_users": "ակտիւ մարդիկ",
@ -475,6 +488,8 @@
"status.copy": "Պատճէնել գրառման յղումը",
"status.delete": "Ջնջել",
"status.detailed_status": "Շղթայի ընդլայնուած դիտում",
"status.direct": "Մասնաւոր յիշատակում @{name}",
"status.direct_indicator": "Մասնաւոր յիշատակում",
"status.edit": "Խմբագրել",
"status.edited": "Խմբագրուել է՝ {date}",
"status.edited_x_times": "Edited {count, plural, one {# time} other {# times}}",

View File

@ -1,13 +1,13 @@
{
"about.blocks": "制限中のサーバー",
"about.contact": "連絡先",
"about.disclaimer": "Mastodonは自由なオープンソースソフトウェアでMastodon gGmbHの商標です。",
"about.domain_blocks.no_reason_available": "制限理由",
"about.domain_blocks.preamble": "Mastodonでは連合先のどのようなサーバーのユーザーとも交流できます。ただし次のサーバーには例外が設定されています。",
"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.suspended.title": "停止済み",
"about.domain_blocks.suspended.title": "停止",
"about.not_available": "この情報はこのサーバーでは利用できません。",
"about.powered_by": "{mastodon}による分散型ソーシャルメディア",
"about.rules": "サーバーのルール",
@ -301,7 +301,7 @@
"hashtag.counter_by_uses_today": "今日{count, plural, other {{counter}件}}",
"hashtag.follow": "ハッシュタグをフォローする",
"hashtag.unfollow": "ハッシュタグのフォローを解除",
"hashtags.and_other": "+{count, plural, other {#件}}",
"hashtags.and_other": "ほか{count, plural, other {#個}}",
"home.actions.go_to_explore": "話題をさがす",
"home.actions.go_to_suggestions": "フォローするユーザーを検索",
"home.column_settings.basic": "基本設定",
@ -405,7 +405,7 @@
"navigation_bar.discover": "見つける",
"navigation_bar.domain_blocks": "ブロックしたドメイン",
"navigation_bar.edit_profile": "プロフィールを編集",
"navigation_bar.explore": "エクスプローラー",
"navigation_bar.explore": "探索する",
"navigation_bar.favourites": "お気に入り",
"navigation_bar.filters": "フィルター設定",
"navigation_bar.follow_requests": "フォローリクエスト",
@ -424,7 +424,7 @@
"not_signed_in_indicator.not_signed_in": "この機能を使うにはログインする必要があります。",
"notification.admin.report": "{name}さんが{target}さんを通報しました",
"notification.admin.sign_up": "{name}さんがサインアップしました",
"notification.favourite": "{name}さんがあなたの投稿をお気に入りに追加しました",
"notification.favourite": "{name}さんがお気に入りしました",
"notification.follow": "{name}さんにフォローされました",
"notification.follow_request": "{name}さんがあなたにフォローリクエストしました",
"notification.mention": "{name}さんがあなたに返信しました",
@ -518,7 +518,7 @@
"privacy.public.long": "誰でも閲覧可",
"privacy.public.short": "公開",
"privacy.unlisted.long": "誰でも閲覧可、サイレント",
"privacy.unlisted.short": "収載",
"privacy.unlisted.short": "収載",
"privacy_policy.last_updated": "{date}に更新",
"privacy_policy.title": "プライバシーポリシー",
"refresh": "更新",

View File

@ -13,7 +13,7 @@
"about.rules": "Servera noteikumi",
"account.account_note_header": "Piezīme",
"account.add_or_remove_from_list": "Pievienot vai Noņemt no sarakstiem",
"account.badges.bot": "Robots",
"account.badges.bot": "Automatizēts",
"account.badges.group": "Grupa",
"account.block": "Bloķēt @{name}",
"account.block_domain": "Bloķēt domēnu {domain}",
@ -26,7 +26,7 @@
"account.domain_blocked": "Domēns ir bloķēts",
"account.edit_profile": "Rediģēt profilu",
"account.enable_notifications": "Paziņot man, kad @{name} publicē ierakstu",
"account.endorse": "Izcelt profilā",
"account.endorse": "Izcelts profilā",
"account.featured_tags.last_status_at": "Beidzamā ziņa {date}",
"account.featured_tags.last_status_never": "Ierakstu nav",
"account.featured_tags.title": "{name} izceltie tēmturi",
@ -102,7 +102,7 @@
"bundle_modal_error.message": "Kaut kas nogāja greizi, ielādējot šo komponenti.",
"bundle_modal_error.retry": "Mēģināt vēlreiz",
"closed_registrations.other_server_instructions": "Tā kā Mastodon ir decentralizēts, tu vari izveidot kontu citā serverī un joprojām mijiedarboties ar šo.",
"closed_registrations_modal.description": "Pašlaik nav iespējams izveidot kontu domēnā {domain}, taču ņem vērā, ka tev nav nepieciešams konts tieši domēnā {domain}, lai izmantotu Mastodon.",
"closed_registrations_modal.description": "Pašlaik nav iespējams izveidot kontu domēnā {domain}, taču ņem vērā, ka tev nav nepieciešams konts tieši {domain}, lai lietotu Mastodon.",
"closed_registrations_modal.find_another_server": "Atrast citu serveri",
"closed_registrations_modal.preamble": "Mastodon ir decentralizēts, tāpēc neatkarīgi no tā, kur tu izveido savu kontu, varēsi sekot līdzi un sazināties ar ikvienu šajā serverī. Tu pat vari vadīt to pats!",
"closed_registrations_modal.title": "Reģistrēšanās Mastodon",
@ -113,7 +113,7 @@
"column.direct": "Privāti pieminēti",
"column.directory": "Pārlūkot profilus",
"column.domain_blocks": "Bloķētie domēni",
"column.favourites": "Iecienīti",
"column.favourites": "Iecienītie",
"column.firehose": "Tiešraides plūsmas",
"column.follow_requests": "Sekošanas pieprasījumi",
"column.home": "Sākums",
@ -151,7 +151,7 @@
"compose_form.poll.switch_to_multiple": "Mainīt aptaujas veidu, lai atļautu vairākas izvēles",
"compose_form.poll.switch_to_single": "Mainīt aptaujas veidu, lai atļautu vienu izvēli",
"compose_form.publish": "Publicēt",
"compose_form.publish_form": "Publicēt",
"compose_form.publish_form": "Jauns ieraksts",
"compose_form.publish_loud": "{publish}!",
"compose_form.save_changes": "Saglabāt izmaiņas",
"compose_form.sensitive.hide": "{count, plural, one {Atzīmēt multividi kā sensitīvu} other {Atzīmēt multivides kā sensitīvas}}",
@ -161,13 +161,13 @@
"compose_form.spoiler.unmarked": "Pievienot satura brīdinājumu",
"compose_form.spoiler_placeholder": "Ieraksti savu brīdinājumu šeit",
"confirmation_modal.cancel": "Atcelt",
"confirmations.block.block_and_report": "Bloķēt un sūdzēties",
"confirmations.block.block_and_report": "Bloķēt un ziņot",
"confirmations.block.confirm": "Bloķēt",
"confirmations.block.message": "Vai tiešām vēlies bloķēt {name}?",
"confirmations.cancel_follow_request.confirm": "Atsaukt pieprasījumu",
"confirmations.cancel_follow_request.message": "Vai tiešām vēlies atsaukt pieprasījumu sekot {name}?",
"confirmations.delete.confirm": "Dzēst",
"confirmations.delete.message": "Vai tiešām vēlies dzēst šo ziņu?",
"confirmations.delete.message": "Vai tiešām vēlies dzēst šo ierakstu?",
"confirmations.delete_list.confirm": "Dzēst",
"confirmations.delete_list.message": "Vai tiešam vēlies neatgriezeniski dzēst šo sarakstu?",
"confirmations.discard_edit_media.confirm": "Atmest",
@ -202,7 +202,7 @@
"dismissable_banner.community_timeline": "Šīs ir jaunākās publiskās ziņas no personām, kuru kontus mitina {domain}.",
"dismissable_banner.dismiss": "Atcelt",
"dismissable_banner.explore_links": "Par šiem jaunumiem šobrīd runā cilvēki šajā un citos decentralizētā tīkla serveros.",
"dismissable_banner.explore_statuses": "Šīs ir ziņas no visa sociālā tīkla, kas šodien kļūst arvien populārākas. Jaunākas ziņas ar vairāk uzlabojumiem un iecienītākajām ziņām tiek novērtētas augstāk.",
"dismissable_banner.explore_statuses": "Ieraksti, kas šobrīd gūst arvien lielāku ievērību visā sociālajā tīklā. Augstāk tiek kārtoti neseni ieraksti, kas pastiprināti un pievienoti izlasēm.",
"dismissable_banner.explore_tags": "Šie tēmturi šobrīd kļūst arvien populārāki cilvēku vidū šajā un citos decentralizētā tīkla serveros.",
"dismissable_banner.public_timeline": "Šīs ir jaunākās publiskās ziņas no lietotājiem sociālajā tīmeklī, kurām seko lietotāji domēnā {domain}.",
"embed.instructions": "Iestrādā šo ziņu savā mājaslapā, kopējot zemāk redzamo kodu.",
@ -236,7 +236,7 @@
"empty_column.follow_requests": "Šobrīd tev nav sekošanas pieprasījumu. Kad kāds pieteiksies tev sekot, pieprasījums parādīsies šeit.",
"empty_column.followed_tags": "Tu vēl neesi sekojis nevienam tēmturim. Kad to izdarīsi, tie tiks parādīti šeit.",
"empty_column.hashtag": "Ar šo tēmturi nekas nav atrodams.",
"empty_column.home": "Tava mājas laika līnija ir tukša! Lai to aizpildītu, pieseko vairāk cilvēkiem. {suggestions}",
"empty_column.home": "Tava mājas laikrinda ir tukša! Lai to aizpildītu, pieseko vairāk cilvēkiem.",
"empty_column.list": "Šis saraksts pašreiz ir tukšs. Kad šī saraksta dalībnieki publicēs jaunas ziņas, tās parādīsies šeit.",
"empty_column.lists": "Pašreiz tev nav neviena saraksta. Kad tādu izveidosi, tas parādīsies šeit.",
"empty_column.mutes": "Neviens lietotājs vēl nav apklusināts.",
@ -309,11 +309,11 @@
"home.column_settings.show_replies": "Rādīt atbildes",
"home.explore_prompt.body": "Tavā mājas plūsmā būs dažādu ziņu sajaukums no atsaucēm, kurām esi izvēlējies sekot, personām, kurām esi izvēlējies sekot, un ziņām, kuras tās izceļ. Ja tas šķiet pārāk kluss, iespējams, vēlēsies:",
"home.explore_prompt.title": "Šī ir tava Mastodon mājvieta.",
"home.hide_announcements": "Slēpt anonsus",
"home.hide_announcements": "Slēpt paziņojumus",
"home.pending_critical_update.body": "Lūdzu, pēc iespējas ātrāk atjaunini savu Mastodon serveri!",
"home.pending_critical_update.link": "Skatīt jauninājumus",
"home.pending_critical_update.title": "Pieejams kritisks drošības jauninājums!",
"home.show_announcements": "Rādīt anonsus",
"home.show_announcements": "Rādīt paziņojumus",
"interaction_modal.description.favourite": "Ar Mastodon kontu tu vari pievienot šo ziņu izlasei, lai informētu autoru, ka to novērtē, un saglabātu to vēlākai lasīšanai.",
"interaction_modal.description.follow": "Ar Mastodon kontu tu vari sekot {name}, lai saņemtu viņu ziņas savā mājas plūsmā.",
"interaction_modal.description.reblog": "Izmantojot kontu Mastodon, tu vari izcelt šo ziņu, lai kopīgotu to ar saviem sekotājiem.",
@ -369,7 +369,7 @@
"lightbox.close": "Aizvērt",
"lightbox.compress": "Saspiest attēla skata lodziņu",
"lightbox.expand": "Izvērst attēla skata lodziņu",
"lightbox.next": "Nākamais",
"lightbox.next": "Tālāk",
"lightbox.previous": "Iepriekšējais",
"limited_account_hint.action": "Tik un tā rādīt profilu",
"limited_account_hint.title": "{domain} moderatori ir paslēpuši šo profilu.",
@ -422,8 +422,8 @@
"navigation_bar.search": "Meklēt",
"navigation_bar.security": "Drošība",
"not_signed_in_indicator.not_signed_in": "Lai piekļūtu šim resursam, tev ir jāpierakstās.",
"notification.admin.report": "{name} sūdzējās par {target}",
"notification.admin.sign_up": "{name} pierakstījās",
"notification.admin.report": "{name} ziņoja par {target}",
"notification.admin.sign_up": "{name} ir pierakstījies",
"notification.favourite": "{name} pievienoja tavu ziņu izlasei",
"notification.follow": "{name} uzsāka tev sekot",
"notification.follow_request": "{name} nosūtīja tev sekošanas pieprasījumu",
@ -435,7 +435,7 @@
"notification.update": "{name} rediģēja ierakstu",
"notifications.clear": "Notīrīt paziņojumus",
"notifications.clear_confirmation": "Vai tiešām vēlies neatgriezeniski notīrīt visus savus paziņojumus?",
"notifications.column_settings.admin.report": "Jaunas sūdzības:",
"notifications.column_settings.admin.report": "Jauni ziņojumi:",
"notifications.column_settings.admin.sign_up": "Jaunas pierakstīšanās:",
"notifications.column_settings.alert": "Darbvirsmas paziņojumi",
"notifications.column_settings.favourite": "Izlase:",
@ -445,7 +445,7 @@
"notifications.column_settings.follow": "Jauni sekotāji:",
"notifications.column_settings.follow_request": "Jauni sekošanas pieprasījumi:",
"notifications.column_settings.mention": "Pieminējumi:",
"notifications.column_settings.poll": "Aptauju rezultāti:",
"notifications.column_settings.poll": "Aptaujas rezultāti:",
"notifications.column_settings.push": "Uznirstošie paziņojumi",
"notifications.column_settings.reblog": "Pastiprinātie ieraksti:",
"notifications.column_settings.show": "Rādīt kolonnā",
@ -457,13 +457,13 @@
"notifications.filter.all": "Visi",
"notifications.filter.boosts": "Pastiprinātie ieraksti",
"notifications.filter.favourites": "Izlases",
"notifications.filter.follows": "Sekošana",
"notifications.filter.follows": "Seko",
"notifications.filter.mentions": "Pieminējumi",
"notifications.filter.polls": "Aptauju rezultāti",
"notifications.filter.polls": "Aptaujas rezultāti",
"notifications.filter.statuses": "Jaunumi no cilvēkiem, kuriem tu seko",
"notifications.grant_permission": "Piešķirt atļauju.",
"notifications.group": "{count} paziņojumi",
"notifications.mark_as_read": "Atzīmēt visus paziņojumus kā izlasītus",
"notifications.mark_as_read": "Atzīmēt katru paziņojumu kā izlasītu",
"notifications.permission_denied": "Darbvirsmas paziņojumi nav pieejami, jo iepriekš tika noraidīts pārlūka atļauju pieprasījums",
"notifications.permission_denied_alert": "Darbvirsmas paziņojumus nevar iespējot, jo pārlūkprogrammai atļauja tika iepriekš atteikta",
"notifications.permission_required": "Darbvirsmas paziņojumi nav pieejami, jo nav piešķirta nepieciešamā atļauja.",
@ -476,23 +476,23 @@
"onboarding.actions.go_to_home": "Dodieties uz manu mājas plūsmu",
"onboarding.compose.template": "Sveiki, #Mastodon!",
"onboarding.follows.empty": "Diemžēl pašlaik nevar parādīt rezultātus. Vari mēģināt izmantot meklēšanu vai pārlūkot izpētes lapu, lai atrastu personas, kurām sekot, vai mēģināt vēlreiz vēlāk.",
"onboarding.follows.lead": "Savu mājas plūsmu veido tu pats. Jo vairāk cilvēkiem tu sekosi, jo aktīvāk un interesantāk viss būs. Šie profili var būt labs sākumpunkts — vēlāk vienmēr varēsi pārstāt sekot!",
"onboarding.follows.lead": "Tava mājas plūsma ir galvenais veids, kā izbaudīt Mastodon. Jo vairāk cilvēku sekosi, jo aktīvāk un interesantāk tas būs. Lai sāktu, šeit ir daži ieteikumi:",
"onboarding.follows.title": "Populārs Mastodon",
"onboarding.share.lead": "Paziņo citiem, kā viņi tevi var atrast Mastodon!",
"onboarding.share.message": "Es esmu {username} #Mastodon! Nāc sekot man uz {url}",
"onboarding.share.next_steps": "Iespējamie nākamie soļi:",
"onboarding.share.title": "Kopīgo savu profilu",
"onboarding.start.lead": "Tavs jaunais Mastodon konts ir gatavs lietošanai. Lūk, kā tu vari to pilnīgāk izmantot:",
"onboarding.start.skip": "Vai vēlies izlaist tieši uz priekšu?",
"onboarding.start.lead": "Tagad tu esat daļa no Mastodon — unikālas, decentralizētas sociālo mediju platformas, kurā tu, nevis algoritms, veido savu pieredzi. Sāksim darbu šajā jaunajā sociālajā jomā:",
"onboarding.start.skip": "Nav nepieciešama palīdzība darba sākšanai?",
"onboarding.start.title": "Tev tas izdevās!",
"onboarding.steps.follow_people.body": "Tu pats veido savu plūsmu. Piepildīsim to ar interesantiem cilvēkiem.",
"onboarding.steps.follow_people.title": "Sekot {count, plural, one {one person} other {# cilvēkiem}}",
"onboarding.steps.publish_status.body": "Sveicini pasauli.",
"onboarding.steps.publish_status.body": "Sveicini pasauli ar tekstu, fotoattēliem, video, vai aptaujām {emoji}",
"onboarding.steps.publish_status.title": "Izveido savu pirmo ziņu",
"onboarding.steps.setup_profile.body": "Citi, visticamāk, sazināsies ar tevi, izmantojot aizpildītu profilu.",
"onboarding.steps.setup_profile.title": "Pielāgo savu profilu",
"onboarding.steps.share_profile.body": "Paziņo saviem draugiem, kā tevi atrast Mastodon!",
"onboarding.steps.share_profile.title": "Kopīgo savu profilu",
"onboarding.steps.share_profile.title": "Kopīgo savu Mastodon profilu",
"onboarding.tips.2fa": "<strong>Vai zināji?</strong> Tu vari aizsargāt savu kontu, konta iestatījumos iestatot divu faktoru autentifikāciju. Tas darbojas ar jebkuru tevis izvēlētu TOTP lietotni, nav nepieciešams tālruņa numurs!",
"onboarding.tips.accounts_from_other_servers": "<strong>Vai zināji?</strong> Tā kā Mastodon ir decentralizēts, daži profili, ar kuriem saskaraties, tiks mitināti citos, nevis tavos serveros. Un tomēr tu varat sazināties ar viņiem nevainojami! Viņu serveris atrodas viņu lietotājvārda otrajā pusē!",
"onboarding.tips.migration": "<strong>Vai zināji?</strong> Ja uzskati, ka {domain} nākotnē nav lieliska servera izvēle, vari pāriet uz citu Mastodon serveri, nezaudējot savus sekotājus. Tu pat vari mitināt savu personīgo serveri!",
@ -518,7 +518,7 @@
"privacy.public.long": "Redzams visiem",
"privacy.public.short": "Publiska",
"privacy.unlisted.long": "Redzams visiem, bet izslēgts no satura atklāšanas funkcijām",
"privacy.unlisted.short": "Nerindota",
"privacy.unlisted.short": "Neiekļautie",
"privacy_policy.last_updated": "Pēdējo reizi atjaunināta {date}",
"privacy_policy.title": "Privātuma politika",
"refresh": "Atsvaidzināt",
@ -563,25 +563,25 @@
"report.reasons.spam": "Tas ir spams",
"report.reasons.spam_description": "Ļaunprātīgas saites, viltus iesaistīšana vai atkārtotas atbildes",
"report.reasons.violation": "Tas pārkāpj servera noteikumus",
"report.reasons.violation_description": "Tu zini, ka tas pārkāpj konkrētus noteikumus",
"report.reasons.violation_description": "Tu zini, ka tas pārkāpj īpašus noteikumus",
"report.rules.subtitle": "Atlasi visus atbilstošos",
"report.rules.title": "Kuri noteikumi tiek pārkāpti?",
"report.statuses.subtitle": "Atlasi visus atbilstošos",
"report.statuses.title": "Vai ir kādi ieraksti, kas atbalsta šo sūdzību?",
"report.submit": "Iesniegt",
"report.target": "Sūdzība par {target}",
"report.thanks.take_action": "Vari veikt šīs darbības, lai kontrolētu Mastodon redzamo saturu:",
"report.target": "Ziņošana par: {target}",
"report.thanks.take_action": "Tālāk ir norādītas iespējas, kā kontrolēt Mastodon redzamo saturu:",
"report.thanks.take_action_actionable": "Kamēr mēs to izskatām, tu vari veikt darbības pret @{name}:",
"report.thanks.title": "Vai nevēlies to redzēt?",
"report.thanks.title_actionable": "Paldies, ka ziņoji, mēs to izskatīsim.",
"report.unfollow": "Pārtraukt sekot @{name}",
"report.unfollow_explanation": "Tu seko šim kontam. Lai vairs neredzētu viņu ziņas savā mājas plūsmā, pārtrauc viņiem sekot.",
"report_notification.attached_statuses": "{count, plural, one {Pievienots {count} ieraksts} other {Pievienoti {count} ieraksti}}",
"report_notification.attached_statuses": "Pievienoti {count, plural,one {{count} sūtījums} other {{count} sūtījumi}}",
"report_notification.categories.legal": "Tiesisks",
"report_notification.categories.other": "Cita",
"report_notification.categories.spam": "Spams",
"report_notification.categories.violation": "Noteikumu pārkāpums",
"report_notification.open": "Atvērt sūdzību",
"report_notification.open": "Atvērt ziņojumu",
"search.no_recent_searches": "Nav nesen veiktu meklējumu",
"search.placeholder": "Meklēšana",
"search.quick_action.account_search": "Profili atbilst {x}",
@ -628,7 +628,7 @@
"status.direct_indicator": "Pieminēts privāti",
"status.edit": "Rediģēt",
"status.edited": "Rediģēts {date}",
"status.edited_x_times": "Rediģēts {count, plural, one {{count} reizi} other {{count} reizes}}",
"status.edited_x_times": "Rediģēts {count, plural, one {{count} reize} other {{count} reizes}}",
"status.embed": "Iestrādāt",
"status.favourite": "Iecienīts",
"status.filter": "Filtrē šo ziņu",
@ -656,8 +656,8 @@
"status.remove_bookmark": "Noņemt grāmatzīmi",
"status.replied_to": "Atbildēja {name}",
"status.reply": "Atbildēt",
"status.replyAll": "Atbildēt uz pavedienu",
"status.report": "Sūdzēties par @{name}",
"status.replyAll": "Atbildēt uz tematu",
"status.report": "Ziņot par @{name}",
"status.sensitive_warning": "Sensitīvs saturs",
"status.share": "Kopīgot",
"status.show_filter_reason": "Tomēr rādīt",
@ -668,7 +668,7 @@
"status.show_original": "Rādīt oriģinālu",
"status.title.with_attachments": "{user} publicējis {attachmentCount, plural, one {pielikumu} other {{attachmentCount} pielikumus}}",
"status.translate": "Tulkot",
"status.translated_from_with": "Tulkots no {lang}, izmantojot {provider}",
"status.translated_from_with": "Tulkots no {lang} izmantojot {provider}",
"status.uncached_media_warning": "Priekšskatījums nav pieejams",
"status.unmute_conversation": "Noņemt sarunas apklusinājumu",
"status.unpin": "Noņemt profila piespraudumu",
@ -681,16 +681,16 @@
"time_remaining.hours": "{number, plural, one {Atlikusi # stunda} other {Atlikušas # stundas}}",
"time_remaining.minutes": "{number, plural, one {Atlikusi # minūte} other {Atlikušas # minūtes}}",
"time_remaining.moments": "Atlikuši daži mirkļi",
"time_remaining.seconds": "{number, plural, one {Atlikusi # sekunde} other {Atlikušas # sekundes}}",
"time_remaining.seconds": "Atlikušas {number, plural, one {# sekunde} other {# sekundes}}",
"timeline_hint.remote_resource_not_displayed": "{resource} no citiem serveriem nav parādīti.",
"timeline_hint.resources.followers": "Sekotāji",
"timeline_hint.resources.follows": "Sekojošie",
"timeline_hint.resources.follows": "Seko",
"timeline_hint.resources.statuses": "Vecāki ieraksti",
"trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} cilvēki}} par {days, plural, one {# dienu} other {{days} dienām}}",
"trends.trending_now": "Aktuālās tendences",
"ui.beforeunload": "Ja pametīsiet Mastodon, jūsu melnraksts tiks zaudēts.",
"ui.beforeunload": "Ja pametīsit Mastodonu, jūsu melnraksts tiks zaudēts.",
"units.short.billion": "{count}Mjd",
"units.short.million": "{count}Mjn",
"units.short.million": "{count}M",
"units.short.thousand": "{count}Tk",
"upload_area.title": "Velc un nomet, lai augšupielādētu",
"upload_button.label": "Pievienot bildi, video vai audio datni",
@ -707,7 +707,7 @@
"upload_modal.apply": "Pielietot",
"upload_modal.applying": "Pielieto…",
"upload_modal.choose_image": "Izvēlēties attēlu",
"upload_modal.description_placeholder": "Raibais runcis Rīgā ratu rumbā rūc",
"upload_modal.description_placeholder": "Raibais runcis rīgā ratu rumbā rūc",
"upload_modal.detect_text": "Noteikt tekstu no attēla",
"upload_modal.edit_media": "Rediģēt multividi",
"upload_modal.hint": "Noklikšķini vai velc apli priekšskatījumā, lai izvēlētos fokusa punktu, kas vienmēr būs redzams visos sīktēlos.",

View File

@ -593,6 +593,7 @@
"search_results.all": "Semua",
"search_results.hashtags": "Tanda pagar",
"search_results.nothing_found": "Tidak dapat menemui apa-apa untuk istilah carian tersebut",
"search_results.see_all": "Lihat semua",
"search_results.statuses": "Hantaran",
"search_results.title": "Mencari {q}",
"server_banner.about_active_users": "Pengguna pelayan ini sepanjang 30 hari yang lalu (Pengguna Aktif Bulanan)",

View File

@ -537,7 +537,7 @@
"relative_time.today": "сегодня",
"reply_indicator.cancel": "Отмена",
"report.block": "Заблокировать",
"report.block_explanation": "В перестаните видеть посты этого пользователя, а он(а) больше не сможет подписаться на вас и читать ваши посты. Он(а) сможет понять что вы заблокировали его/её.",
"report.block_explanation": "Вы перестанете видеть посты этого пользователя, и он(а) больше не сможет подписаться на вас и читать ваши посты. Он(а) сможет понять, что вы заблокировали его/её.",
"report.categories.legal": "Правовая информация",
"report.categories.other": "Другое",
"report.categories.spam": "Спам",

View File

@ -1,79 +1,79 @@
{
"about.blocks": "මැදිහත්කරණ සේවාදායක",
"about.contact": "සබඳතාව:",
"about.disclaimer": "මාස්ටඩන් යනු නිදහස් විවෘත මූලාශ්‍ර මෘදුකාංගයකි. එය මාස්ටඩන් gGmbH හි වෙළඳ නාමයකි.",
"about.domain_blocks.suspended.title": "අත්හිටුවා ඇත",
"about.rules": "සේවාදායකයේ නීති",
"account.account_note_header": "සටහන",
"account.add_or_remove_from_list": "ලැයිස්තු වලින් එකතු හෝ ඉවත් කරන්න",
"account.badges.bot": "ස්වයං ක්‍රමලේඛය",
"account.badges.group": "සමූහය",
"account.block": "@{name} අවහිර කරන්න",
"account.block_domain": "{domain} වසම අවහිර කරන්න",
"account.block_short": "අවහිර",
"account.blocked": "අවහිර කර ඇත",
"account.browse_more_on_origin_server": "මුල් පැතිකඩෙහි තවත් පිරික්සන්න",
"account.cancel_follow_request": "Withdraw follow request",
"account.disable_notifications": "@{name} පළ කරන විට මට දැනුම් නොදෙන්න",
"account.domain_blocked": "වසම අවහිර කර ඇත",
"account.edit_profile": "පැතිකඩ සංස්කරණය",
"account.enable_notifications": "@{name} පළ කරන විට මට දැනුම් දෙන්න",
"account.endorse": "පැතිකඩෙහි විශේෂාංගය",
"account.featured_tags.last_status_never": "ලිපි නැත",
"account.follow": "අනුගමනය",
"account.followers": "අනුගාමිකයින්",
"account.followers.empty": "කිසිවෙක් අනුගමනය කර නැත.",
"account.followers_counter": "{count, plural, one {{counter} අනුගාමිකයෙක්} other {{counter} අනුගාමිකයින්}}",
"account.following": "අනුගමනය",
"account.following_counter": "{count, plural, one {අනුගාමිකයින් {counter}} other {අනුගාමිකයින් {counter}}}",
"account.follows.empty": "තවමත් කිසිවෙක් අනුගමනය නොකරයි.",
"account.follows_you": "ඔබව අනුගමනය කරයි",
"account.hide_reblogs": "@{name}සිට බූස්ට් සඟවන්න",
"account.go_to_profile": "පැතිකඩට යන්න",
"account.joined_short": "එක් වූ දිනය",
"account.link_verified_on": "මෙම සබැඳියේ අයිතිය {date} දී පරීක්‍ෂා කෙරිණි",
"account.locked_info": "මෙම ගිණුමේ රහස්‍යතා තත්ත්වය අගුලු දමා ඇත. හිමිකරු ඔවුන් අනුගමනය කළ හැක්කේ කාටදැයි හස්තීයව සමාලෝචනය කරයි.",
"account.media": "මාධ්‍යය",
"account.mention": "@{name} සැඳහුම",
"account.mention": "@{name} සඳහන් කරන්ක",
"account.mute": "@{name} නිහඬ කරන්න",
"account.mute_short": "නිහඬ",
"account.muted": "නිහඬ කළා",
"account.posts": "ලිපි",
"account.posts_with_replies": "ටූට්ස් සහ පිළිතුරු",
"account.posts_with_replies": "ලිපි සහ පිළිතුරු",
"account.report": "@{name} වාර්තා කරන්න",
"account.requested": "අනුමැතිය බලාපොරොත්තුවෙන්",
"account.share": "@{name} ගේ පැතිකඩ බෙදාගන්න",
"account.show_reblogs": "@{name}සිට බූස්ට් පෙන්වන්න",
"account.statuses_counter": "{count, plural, one {{counter} ටූට්} other {{counter} ටූට්ස්}}",
"account.unblock": "@{name} අනවහිර කරන්න",
"account.unblock_domain": "{domain} වසම අනවහිර කරන්න",
"account.unblock_short": "අනවහිර",
"account.unendorse": "පැතිකඩෙහි විශේෂාංග නොකරන්න",
"account.unfollow": "අනුගමනය නොකරන්න",
"account.unmute": "@{name}නිහඬ නොකරන්න",
"account.unmute_short": "නොනිහඬ",
"account_note.placeholder": "සටහන යෙදීමට ඔබන්න",
"admin.dashboard.daily_retention": "ලියාපදිංචි වීමෙන් පසු දිනකට පරිශීලක රඳවා ගැනීමේ අනුපාතය",
"admin.dashboard.monthly_retention": "ලියාපදිංචි වීමෙන් පසු මාසය අනුව පරිශීලක රඳවා ගැනීමේ අනුපාතය",
"admin.dashboard.retention.average": "සාමාන්යය",
"admin.dashboard.retention.cohort": "ලියාපදිංචි වීමේ මාසය",
"admin.dashboard.retention.cohort": "ලියාපදිංචි මාසය",
"admin.dashboard.retention.cohort_size": "නව පරිශ්‍රීලකයින්",
"alert.rate_limited.message": "{retry_time, time, medium} කට පසුව උත්සාහ කරන්න.",
"alert.rate_limited.title": "මිල සීමා සහිතයි",
"alert.unexpected.message": "අනපේක්ෂිත දෝෂයක් ඇතිවුනා.",
"alert.rate_limited.title": "අනුපාතනය වී ඇත",
"alert.unexpected.message": "අනපේක්‍ෂිත දෝෂයක් සිදු විය.",
"alert.unexpected.title": "අපොයි!",
"announcement.announcement": "නිවේදනය",
"attachments_list.unprocessed": "(සැකසුම් නොකළ)",
"audio.hide": "හඬපටය සඟවන්න",
"autosuggest_hashtag.per_week": "සතියකට {count}",
"boost_modal.combo": "ඊළඟ වතාවේ මෙය මඟ හැරීමට ඔබට {combo} එබිය හැක",
"boost_modal.combo": "ඊළඟ වතාවේ මෙය මඟ හැරීමට {combo} එබීමට හැකිය",
"bundle_column_error.retry": "නැවත උත්සාහ කරන්න",
"bundle_modal_error.close": "වසන්න",
"bundle_modal_error.message": "මෙම සංරචකය පූරණය කිරීමේදී යම් දෙයක් වැරදී ඇත.",
"bundle_modal_error.message": "මෙම සංරචකය පූරණය දී යම් දෙයක් වැරදී ඇත.",
"bundle_modal_error.retry": "නැවත උත්සාහ කරන්න",
"closed_registrations_modal.find_another_server": "වෙනත් සේවාදායක",
"column.about": "පිලිබඳව",
"column.blocks": "අවහිර කළ අය",
"column.bookmarks": "පොත් යොමු",
"column.community": "දේශීය කාලරේඛාව",
"column.bookmarks": "පොත්යොමු",
"column.community": "ස්ථානීය කාලරේඛාව",
"column.direct": "පෞද්ගලික සැඳහුම්",
"column.directory": "පැතිකඩ පිරික්සන්න",
"column.domain_blocks": "අවහිර කළ වසම්",
"column.favourites": "ප්‍රියතමයන්",
"column.firehose": "සජීව සංග්‍රහ",
"column.follow_requests": "අනුගමන ඉල්ලීම්",
"column.home": "මුල් පිටුව",
"column.lists": "ලේඛන",
"column.lists": "ලැයිස්තු",
"column.mutes": "නිහඬ කළ අය",
"column.notifications": "දැනුම්දීම්",
"column.pins": "ඇමිණූ ලිපි",
"column.public": "ෆෙඩරේටඩ් කාලරේඛාව",
"column.public": "ඒකාබද්ධ කාලරේඛාව",
"column_back_button.label": "ආපසු",
"column_header.hide_settings": "සැකසුම් සඟවන්න",
"column_header.moveLeft_settings": "තීරුව වමට ගෙනයන්න",
@ -87,70 +87,62 @@
"community.column_settings.remote_only": "දුරස්ථව පමණයි",
"compose.language.change": "භාෂාව සංශෝධනය",
"compose.language.search": "භාෂා සොයන්න...",
"compose.published.body": "ලිපිය පළ විය.",
"compose.published.open": "අරින්න",
"compose.saved.body": "ලිපිය සුරැකිණි.",
"compose_form.direct_message_warning_learn_more": "තව දැනගන්න",
"compose_form.encryption_warning": "Mastodon හි පළ කිරීම් අන්තයේ සිට අවසානය දක්වා සංකේතනය කර නොමැත. Mastodon හරහා කිසිදු සංවේදී තොරතුරක් බෙදා නොගන්න.",
"compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
"compose_form.lock_disclaimer": "ඔබගේ ගිණුම {locked}නොවේ. ඔබගේ අනුගාමිකයින්ට පමණක් පළ කිරීම් බැලීමට ඕනෑම කෙනෙකුට ඔබව අනුගමනය කළ හැක.",
"compose_form.encryption_warning": "මාස්ටඩන් වෙත පළ කරන දෑ අන්ත සංකේතනයෙන් ආරක්‍ෂා නොවේ. මාස්ටඩන් හරහා කිසිදු සංවේදී තොරතුරක් බෙදා නොගන්න.",
"compose_form.lock_disclaimer.lock": "අගුළු දමා ඇත",
"compose_form.placeholder": "ඔබගේ සිතුවිලි මොනවාද?",
"compose_form.poll.add_option": "තේරීමක් යොදන්න",
"compose_form.poll.duration": "මත විමසීමේ කාලය",
"compose_form.poll.option_placeholder": "තේරීම {number}",
"compose_form.poll.remove_option": "මෙම ඉවත් කරන්න",
"compose_form.poll.switch_to_multiple": "තේරීම් කිහිපයක් ඉඩ දීම සඳහා මත විමසුම වෙනස් කරන්න",
"compose_form.poll.switch_to_single": "තනි තේරීමකට ඉඩ දීම සඳහා මත විමසුම වෙනස් කරන්න",
"compose_form.poll.switch_to_multiple": "තේරීම් කිහිපයක මත විමසුම වෙනස් කරන්න",
"compose_form.poll.switch_to_single": "තනි තේරීමකට මත විමසුම වෙනස් කරන්න",
"compose_form.publish": "ප්‍රකාශනය",
"compose_form.publish_form": "Publish",
"compose_form.publish_form": "නව ලිපිය",
"compose_form.publish_loud": "{publish}!",
"compose_form.save_changes": "වෙනස්කම් සුරකින්න",
"compose_form.sensitive.hide": "{count, plural, one {මාධ්ය සංවේදී ලෙස සලකුණු කරන්න} other {මාධ්ය සංවේදී ලෙස සලකුණු කරන්න}}",
"compose_form.sensitive.marked": "{count, plural, one {මාධ්‍ය සංවේදී ලෙස සලකුණු කර ඇත} other {මාධ්‍ය සංවේදී ලෙස සලකුණු කර ඇත}}",
"compose_form.sensitive.unmarked": "{count, plural, one {මාධ්‍ය සංවේදී ලෙස සලකුණු කර නැත} other {මාධ්‍ය සංවේදී ලෙස සලකුණු කර නැත}}",
"compose_form.spoiler.marked": "අනතුරු ඇඟවීම පිටුපස පෙළ සඟවා ඇත",
"compose_form.spoiler.unmarked": "ප්‍රයෝජනය සඟවා නැත",
"compose_form.spoiler.marked": "අන්තර්ගත අවවාදය ඉවත් කරන්න",
"compose_form.spoiler.unmarked": "අන්තර්ගත අවවාදයක් එක් කරන්න",
"compose_form.spoiler_placeholder": "අවවාදය මෙහි ලියන්න",
"confirmation_modal.cancel": "අවලංගු",
"confirmations.block.block_and_report": "අවහිර කර වාර්තා කරන්න",
"confirmations.block.confirm": "අවහිර",
"confirmations.block.message": "ඔබට {name} අවහිර කිරීමට වුවමනා ද?",
"confirmations.delete.confirm": "මකන්න",
"confirmations.delete.message": "ඔබට මෙම තත්ත්වය මැකීමට අවශ්‍ය බව විශ්වාසද?",
"confirmations.delete.message": "ඔබට මෙම ලිපිය මැකීමට වුවමනා ද?",
"confirmations.delete_list.confirm": "මකන්න",
"confirmations.delete_list.message": "ඔබට මෙම ලැයිස්තුව ස්ථිරවම මැකීමට අවශ්‍ය බව විශ්වාසද?",
"confirmations.delete_list.message": "ඔබට මෙම ලැයිස්තුව සදහටම මැකීමට වුවමනා ද?",
"confirmations.discard_edit_media.confirm": "ඉවත ලන්න",
"confirmations.discard_edit_media.message": "ඔබට මාධ්‍ය විස්තරයට හෝ පෙරදසුනට නොසුරකින ලද වෙනස්කම් තිබේ, කෙසේ වෙතත් ඒවා ඉවත දමන්නද?",
"confirmations.domain_block.confirm": "සම්පූර්ණ වසම අවහිර කරන්න",
"confirmations.domain_block.message": "ඔබට සම්පූර්ණ {domain}අවහිර කිරීමට අවශ්‍ය බව ඔබට සැබවින්ම විශ්වාසද? බොහෝ අවස්ථාවලදී ඉලක්කගත බ්ලොක් හෝ නිශ්ශබ්ද කිරීම් කිහිපයක් ප්රමාණවත් වන අතර වඩාත් යෝග්ය වේ. ඔබ කිසිදු පොදු කාලරාමුවක හෝ ඔබගේ දැනුම්දීම් වල එම වසමේ අන්තර්ගතය නොදකිනු ඇත. එම වසමෙන් ඔබගේ අනුගාමිකයින් ඉවත් කරනු ලැබේ.",
"confirmations.edit.confirm": "සංස්කරණය",
"confirmations.logout.confirm": "නික්මෙන්න",
"confirmations.logout.message": "ඔබට නික්මෙන්න අවශ්‍ය බව විශ්වාසද?",
"confirmations.mute.confirm": "නිශ්ශබ්ද",
"confirmations.mute.explanation": "මෙය ඔවුන්ගෙන් පළ කිරීම් සහ ඒවා සඳහන් කරන පළ කිරීම් සඟවයි, නමුත් එය ඔවුන්ට ඔබේ පළ කිරීම් බැලීමට සහ ඔබව අනුගමනය කිරීමට තවමත් ඉඩ ලබා දේ.",
"confirmations.mute.message": "ඔබට {name} නිශ්ශබ්ද කිරීමට අවශ්‍ය බව විශ්වාසද?",
"confirmations.redraft.confirm": "මකන්න සහ නැවත කෙටුම්පත් කරන්න",
"confirmations.mute.message": "{name} නිහඬ කිරීමට වුවමනා ද?",
"confirmations.reply.confirm": "පිළිතුර",
"confirmations.reply.message": "දැන් පිළිතුරු දීම ඔබ දැනට රචනා කරන පණිවිඩය උඩින් ලියයි. ඔබට ඉදිරියට යාමට අවශ්‍ය බව විශ්වාසද?",
"confirmations.unfollow.confirm": "අනුගමනය නොකරන්න",
"confirmations.unfollow.message": "ඔබට {name}අනුගමනය නොකිරීමට අවශ්‍ය බව විශ්වාසද?",
"conversation.delete": "සංවාදය මකන්න",
"conversation.mark_as_read": "කියවූ බව යොදන්න",
"conversation.open": "සංවාදය බලන්න",
"conversation.with": "{names} සමඟ",
"copypaste.copied": "පිටපත් විය",
"directory.federated": "දන්නා fediverse වලින්",
"copypaste.copy_to_clipboard": "පසුරුපුවරුවට පිටපතක්",
"directory.federated": "දන්නා ෆෙඩිවර්ස් වෙතින්",
"directory.local": "{domain} වෙතින් පමණි",
"directory.new_arrivals": "නව පැමිණීම්",
"directory.recently_active": "මෑත දී සක්‍රියයි",
"dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.",
"dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.",
"embed.instructions": "පහත කේතය පිටපත් කිරීමෙන් මෙම තත්ත්වය ඔබේ වෙබ් අඩවියට ඇතුළත් කරන්න.",
"embed.preview": "එය පෙනෙන්නේ කෙසේද යන්න මෙන්න:",
"disabled_account_banner.account_settings": "ගිණුමේ සැකසුම්",
"embed.instructions": "පහත කේතය පිටපත් කිරීමෙන් මෙම ලිපිය ඔබගේ අඩවියට කාවද්දන්න.",
"embed.preview": "මෙන්න එය පෙනෙන අන්දම:",
"emoji_button.activity": "ක්‍රියාකාරකම",
"emoji_button.clear": "මකන්න",
"emoji_button.custom": "අභිරුචි",
"emoji_button.flags": "කොඩි",
"emoji_button.food": "ආහාර සහ පාන",
"emoji_button.label": "ඉමොජි යොදන්න",
"emoji_button.nature": "ස්වභාවික",
"emoji_button.nature": "සොබාදහම",
"emoji_button.not_found": "ගැළපෙන ඉමෝජි හමු නොවිණි",
"emoji_button.objects": "වස්තූන්",
"emoji_button.people": "මිනිසුන්",
@ -160,158 +152,149 @@
"emoji_button.symbols": "සංකේත",
"emoji_button.travel": "චාරිකා සහ ස්ථාන",
"empty_column.account_suspended": "ගිණුම අත්හිටුවා ඇත",
"empty_column.account_timeline": "මෙහි දත් නැත!",
"empty_column.account_timeline": "මෙහි ලිපි නැත!",
"empty_column.account_unavailable": "පැතිකඩ නොතිබේ",
"empty_column.blocks": "කිසිදු පරිශීලකයෙකු අවහිර කර නැත.",
"empty_column.bookmarked_statuses": "ඔබට තවමත් පිටු සලකුණු කළ මෙවලම් කිසිවක් නොමැත. ඔබ එකක් පිටු සලකුණු කළ විට, එය මෙහි පෙන්වනු ඇත.",
"empty_column.community": "දේශීය කාලරේඛාව හිස් ය. පන්දුව පෙරළීමට ප්‍රසිද්ධියේ යමක් ලියන්න!",
"empty_column.bookmarked_statuses": "ඔබ සතුව පොත්යොමු තබන ලද ලිපි කිසිවක් නැත. ඔබ පොත්යොමුවක් තබන විට, එය මෙහි දිස්වනු ඇත.",
"empty_column.domain_blocks": "අවහිර කරන ලද වසම් නැත.",
"empty_column.explore_statuses": "දැන් කිසිවක් නැඹුරු නොවේ. පසුව නැවත පරීක්ෂා කරන්න!",
"empty_column.follow_requests": "ඔබට තවමත් අනුගමනය කිරීමේ ඉල්ලීම් කිසිවක් නොමැත. ඔබට එකක් ලැබුණු විට, එය මෙහි පෙන්වනු ඇත.",
"empty_column.hashtag": "මෙම හැෂ් ටැග් එකේ තවම කිසිවක් නොමැත.",
"empty_column.home": "ඔබගේ නිවසේ කාලරේඛාව හිස්ය! එය පිරවීම සඳහා තවත් පුද්ගලයින් අනුගමනය කරන්න. {suggestions}",
"empty_column.list": "මෙම ලැයිස්තුවේ තවමත් කිසිවක් නොමැත. මෙම ලැයිස්තුවේ සාමාජිකයන් නව තත්ව පළ කරන විට, ඔවුන් මෙහි දිස් වනු ඇත.",
"empty_column.follow_requests": "ඔබට තවමත් අනුගමන ඉල්ලීම් ලැබී නැත. ඉල්ලීමක් ලැබුණු විට, එය මෙහි පෙන්වනු ඇත.",
"empty_column.home": "ඔබගේ මුල් පිටුව හිස් ය! මෙය පිරවීමට බොහෝ පුද්ගලයින් අනුගමනය කරන්න.",
"empty_column.lists": "ඔබට තවමත් ලැයිස්තු කිසිවක් නැත. ඔබ එකක් සාදන විට, එය මෙහි පෙන්වනු ඇත.",
"empty_column.mutes": "ඔබ තවමත් කිසිදු පරිශීලකයෙකු නිහඬ කර නැත.",
"empty_column.notifications": "ඔබට තවම දැනුම්දීම් කිසිවක් නැත. වෙනත් පුද්ගලයින් ඔබ සමඟ අන්තර් ක්‍රියා කරන විට, ඔබ එය මෙහි දකිනු ඇත.",
"empty_column.public": "මෙහි කිසිවක් නැත! යමක් ප්‍රසිද්ධියේ ලියන්න, නැතහොත් එය පිරවීම සඳහා වෙනත් සේවාදායකයන්ගෙන් පරිශීලකයන් හස්තීයව අනුගමනය කරන්න",
"empty_column.notifications": "ඔබට දැනුම්දීම් ලැබී නැත. අන් අය සහ ඔබ අතර අන්‍යෝන්‍ය බලපවත්වන දෑ මෙහි දිස්වනු ඇත.",
"error.unexpected_crash.explanation": "අපගේ කේතයේ දෝෂයක් හෝ බ්‍රවුසර ගැළපුම් ගැටලුවක් හේතුවෙන්, මෙම පිටුව නිවැරදිව ප්‍රදර්ශනය කළ නොහැක.",
"error.unexpected_crash.explanation_addons": "මෙම පිටුව නිවැරදිව ප්‍රදර්ශනය කළ නොහැක. මෙම දෝෂය බ්‍රවුසර ඇඩෝනයක් හෝ ස්වයංක්‍රීය පරිවර්තන මෙවලම් නිසා ඇති විය හැක.",
"error.unexpected_crash.next_steps": "පිටුව නැවුම් කිරීමට උත්සාහ කරන්න. එය උදව් නොකළහොත්, ඔබට තවමත් වෙනත් බ්‍රවුසරයක් හෝ ස්වදේශීය යෙදුමක් හරහා Mastodon භාවිත කිරීමට හැකි වේ.",
"error.unexpected_crash.next_steps_addons": "ඒවා අක්‍රිය කර පිටුව නැවුම් කිරීමට උත්සාහ කරන්න. එය උදව් නොකළහොත්, ඔබට තවමත් වෙනත් බ්‍රවුසරයක් හෝ ස්වදේශීය යෙදුමක් හරහා Mastodon භාවිත කිරීමට හැකි වේ.",
"errors.unexpected_crash.copy_stacktrace": "ස්ටැක්ට්රේස් පසුරු පුවරුවට පිටපත් කරන්න",
"error.unexpected_crash.next_steps": "පිටුව නැවුම් කර බලන්න. එයින් ඵලක් නොවේ නම්, වෙනත් අතිරික්සුවක් හෝ නිසග යෙදුමක් හරහා මාස්ටඩන් භාවිතා කරන්න.",
"error.unexpected_crash.next_steps_addons": "ඒවා අබල කර පිටුව නැවුම් කරන්න. එයින් ඵලක් නොවේ නම්, වෙනත් අතිරික්සුවක් හෝ නිසග යෙදුමක් හරහා මාස්ටඩන් භාවිතා කරන්න.",
"errors.unexpected_crash.report_issue": "ගැටළුව වාර්තාව",
"explore.search_results": "සෙවුම් ප්‍රතිඵල",
"explore.title": "ගවේශණය",
"explore.suggested_follows": "පුද්ගලයින්",
"explore.title": "ගවේශනය",
"explore.trending_links": "පුවත්",
"explore.trending_statuses": "ලිපි",
"filter_modal.added.expired_title": "පෙරහන ඉකුත්ය!",
"filter_modal.added.review_and_configure_title": "පෙරහන් සැකසුම්",
"filter_modal.added.settings_link": "සැකසුම් පිටුව",
"filter_modal.added.title": "පෙරහන එක් කළා!",
"filter_modal.select_filter.expired": "ඉකුත්ය",
"filter_modal.select_filter.prompt_new": "නව ප්‍රවර්ගය: {name}",
"filter_modal.select_filter.search": "සොයන්න හෝ සාදන්න",
"follow_request.authorize": "අවසරලත්",
"filter_modal.select_filter.title": "මෙම ලිපිය පෙරන්න",
"filter_modal.title.status": "ලිපියක් පෙරන්න",
"firehose.local": "මෙම සේවාදායකය",
"firehose.remote": "වෙනත් සේවාදායක",
"follow_request.reject": "ප්‍රතික්‍ෂේප",
"follow_requests.unlocked_explanation": "ඔබගේ ගිණුම අගුලු දමා නොතිබුණද, {domain} කාර්ය මණ්ඩලය සිතුවේ ඔබට මෙම ගිණුම් වලින් ලැබෙන ඉල්ලීම් හස්තීයව සමාලෝචනය කිරීමට අවශ්‍ය විය හැකි බවයි.",
"footer.about": "පිළිබඳව",
"footer.directory": "පැතිකඩ නාමාවලිය",
"footer.get_app": "යෙදුම ගන්න",
"footer.invite": "ආරාධනා කරන්න",
"footer.keyboard_shortcuts": "යතුරුපුවරුවේ කෙටිමං",
"footer.privacy_policy": "රහස්‍යතා ප්‍රතිපත්තිය",
"footer.source_code": "මූලාශ්‍ර කේතය බලන්න",
"footer.status": "තත්‍වය",
"generic.saved": "සුරැකිණි",
"getting_started.heading": "පටන් ගන්න",
"hashtag.column_header.tag_mode.all": "සහ {additional}",
"hashtag.column_header.tag_mode.any": "හෝ {additional}",
"hashtag.column_header.tag_mode.none": "{additional}නොමැතිව",
"hashtag.column_settings.select.no_options_message": "යෝජනා හමු නොවිණි",
"hashtag.column_settings.select.placeholder": "හැෂ් ටැග්…ඇතුලත් කරන්න",
"hashtag.column_settings.tag_mode.all": "මේ සියල්ලම",
"hashtag.column_settings.tag_mode.any": "ඇතුළත් එකක්",
"hashtag.column_settings.tag_mode.none": "මේ කිසිවක් නැත",
"hashtag.column_settings.tag_toggle": "මෙම තීරුවේ අමතර ටැග් ඇතුළත් කරන්න",
"home.actions.go_to_explore": "නැගී එන දෑ බලන්න",
"home.actions.go_to_suggestions": "පුද්ගලයින් සොයන්න",
"home.column_settings.basic": "මූලික",
"home.column_settings.show_reblogs": "බූස්ට් පෙන්වන්න",
"home.column_settings.show_replies": "පිළිතුරු පෙන්වන්න",
"home.explore_prompt.title": "මෙය ඔබගේ මාස්ටඩන් මුල් පිටුවයි.",
"home.hide_announcements": "නිවේදන සඟවන්න",
"home.pending_critical_update.link": "යාවත්කාල බලන්න",
"home.show_announcements": "නිවේදන පෙන්වන්න",
"intervals.full.days": "{number, plural, one {# දින} other {# දින}}",
"intervals.full.hours": "{number, plural, one {# පැය} other {# පැය}}",
"intervals.full.minutes": "{number, plural, one {විනාඩි #} other {# මිනිත්තු}}",
"interaction_modal.on_this_server": "මෙම සේවාදායකයෙහි",
"intervals.full.days": "{number, plural, one {දවස් #} other {දවස් #}}",
"intervals.full.hours": "{number, plural, one {පැය #} other {පැය #}}",
"intervals.full.minutes": "{number, plural, one {විනාඩි #} other {විනාඩි #}}",
"keyboard_shortcuts.back": "ආපසු යාත්‍රණය",
"keyboard_shortcuts.blocked": "අවහිර කළ පරිශීලක ලැයිස්තුව විවෘත කිරීමට",
"keyboard_shortcuts.boost": "වැඩි කිරීමට",
"keyboard_shortcuts.column": "එක් තීරුවක තත්ත්වය නාභිගත කිරීමට",
"keyboard_shortcuts.compose": "රචනා පාඨ ප්‍රදේශය නාභිගත කිරීමට",
"keyboard_shortcuts.description": "සවිස්තරය",
"keyboard_shortcuts.direct": "to open direct messages column",
"keyboard_shortcuts.down": "ලැයිස්තුවේ පහළට ගමන් කිරීමට",
"keyboard_shortcuts.down": "ලැයිස්තුවේ පහළට ගෙනයන්න",
"keyboard_shortcuts.enter": "ලිපිය අරින්න",
"keyboard_shortcuts.favourites": "ප්‍රියතමයන් ලැයිස්තුව අරින්න",
"keyboard_shortcuts.federated": "ෆෙඩරේටඩ් කාලරාමුව විවෘත කිරීමට",
"keyboard_shortcuts.heading": "යතුරුපුවරු කෙටිමං",
"keyboard_shortcuts.home": "නිවසේ කාලරේඛාව විවෘත කිරීමට",
"keyboard_shortcuts.hotkey": "උණු යතුර",
"keyboard_shortcuts.legend": "මෙම පුරාවෘත්තය ප්රදර්ශනය කිරීමට",
"keyboard_shortcuts.local": "දේශීය කාලරේඛාව විවෘත කිරීමට",
"keyboard_shortcuts.mention": "කතුවරයා සඳහන් කිරීමට",
"keyboard_shortcuts.muted": "නිශ්ශබ්ද පරිශීලක ලැයිස්තුව විවෘත කිරීමට",
"keyboard_shortcuts.muted": "නිහඬ කළ අය පෙන්වන්න",
"keyboard_shortcuts.my_profile": "ඔබගේ පැතිකඩ අරින්න",
"keyboard_shortcuts.notifications": "දැනුම්දීම් තීරුව විවෘත කිරීමට",
"keyboard_shortcuts.open_media": "මාධ්‍ය අරින්න",
"keyboard_shortcuts.pinned": "ඇමිණූ ලිපි ලේඛනය අරින්න",
"keyboard_shortcuts.pinned": "ඇමිණූ ලිපි ලැයිස්තුව අරින්න",
"keyboard_shortcuts.profile": "කතෘගේ පැතිකඩ අරින්න",
"keyboard_shortcuts.reply": "පිළිතුරු දීමට",
"keyboard_shortcuts.requests": "පහත ඉල්ලීම් ලැයිස්තුව විවෘත කිරීමට",
"keyboard_shortcuts.search": "සෙවුම් අවධානය යොමු කිරීමට",
"keyboard_shortcuts.spoilers": "CW ක්ෂේත්‍රය පෙන්වීමට/සැඟවීමට",
"keyboard_shortcuts.spoilers": "CW ක්‍ෂේත්‍රය පෙන්වන්න/සඟවන්න",
"keyboard_shortcuts.start": "\"පටන් ගන්න\" තීරුව අරින්න",
"keyboard_shortcuts.toggle_hidden": "CW පිටුපස පෙළ පෙන්වීමට/සැඟවීමට",
"keyboard_shortcuts.toggle_sensitivity": "මාධ්‍ය පෙන්වන්න/සඟවන්න",
"keyboard_shortcuts.toot": "අලුත්ම ටූට් එකක් පටන් ගන්න",
"keyboard_shortcuts.unfocus": "අවධානය යොමු නොකිරීමට textarea/search රචනා කරන්න",
"keyboard_shortcuts.up": "ලැයිස්තුවේ ඉහළට යාමට",
"keyboard_shortcuts.toot": "නව ලිපියක් අරඹන්න",
"keyboard_shortcuts.up": "ලැයිස්තුවේ ඉහළට ගෙනයන්න",
"lightbox.close": "වසන්න",
"lightbox.compress": "රූප බැලීමේ කොටුව සම්පීඩනය කරන්න",
"lightbox.expand": "රූප දර්ශන පෙට්ටිය දිග හරින්න",
"lightbox.next": "ඊළඟ",
"lightbox.previous": "පෙර",
"limited_account_hint.action": "කෙසේ හෝ පැතිකඩ පෙන්වන්න",
"lists.account.add": "ලේඛනයට දමන්න",
"lists.account.remove": "ලේඛනයෙන් ඉවතලන්න",
"lists.delete": "ලේඛනය මකන්න",
"lists.edit": "ලේඛනය සංස්කරණය",
"lists.edit.submit": "මාතෘකාව වෙනස් කරන්න",
"lists.new.create": "ලැයිස්තුව එකතු කරන්න",
"lists.new.title_placeholder": "නව ලැයිස්තු මාතෘකාව",
"lists.replies_policy.followed": "අනුගමනය කරන ඕනෑම පරිශීලකයෙක්",
"lists.replies_policy.list": "ලැයිස්තුවේ සාමාජිකයන්",
"lists.account.add": "ලැයිස්තුවට දමන්න",
"lists.account.remove": "ලැයිස්තුවෙන් ඉවතලන්න",
"lists.delete": "ලැයිස්තුව මකන්න",
"lists.edit": "ලැයිස්තුව සංස්කරණය",
"lists.edit.submit": "සිරැසිය සංශෝධනය",
"lists.new.title_placeholder": "නව ලැයිස්තුවේ සිරැසිය",
"lists.replies_policy.list": "ලැයිස්තුවේ සාමාජිකයින්",
"lists.replies_policy.none": "කිසිවෙක් නැත",
"lists.replies_policy.title": "පිළිතුරු පෙන්වන්න:",
"lists.search": "ඔබ අනුගමනය කරන පුද්ගලයින් අතර සොයන්න",
"lists.subheading": "ඔබගේ ලේඛන",
"load_pending": "{count, plural, one {# නව අයිතමයක්} other {නව අයිතම #ක්}}",
"lists.subheading": "ඔබගේ ලැයිස්තු",
"loading_indicator.label": "පූරණය වෙමින්...",
"media_gallery.toggle_visible": "{number, plural, one {රූපය සඟවන්න} other {පින්තූර සඟවන්න}}",
"mute_modal.duration": "පරාසය",
"mute_modal.hide_notifications": "මෙම පරිශීලකයාගෙන් දැනුම්දීම් සඟවන්නද?",
"mute_modal.indefinite": "අවිනිශ්චිත",
"mute_modal.hide_notifications": "මෙම පුද්ගලයාගේ දැනුම්දීම් සඟවන්නද?",
"navigation_bar.about": "පිළිබඳව",
"navigation_bar.blocks": "අවහිර කළ අය",
"navigation_bar.bookmarks": "පොත්යොමු",
"navigation_bar.community_timeline": "දේශීය කාලරේඛාව",
"navigation_bar.compose": "නව ටූට් සාදන්න",
"navigation_bar.discover": "සොයා ගන්න",
"navigation_bar.community_timeline": "ස්ථානීය කාලරේඛාව",
"navigation_bar.compose": "නව ලිපියක් ලියන්න",
"navigation_bar.direct": "පෞද්ගලික සැඳහුම්",
"navigation_bar.domain_blocks": "අවහිර කළ වසම්",
"navigation_bar.edit_profile": "පැතිකඩ සංස්කරණය",
"navigation_bar.explore": "ගවේෂණය කරන්න",
"navigation_bar.explore": "ගවේශනය",
"navigation_bar.favourites": "ප්‍රියතමයන්",
"navigation_bar.filters": "නිහඬ කළ වචන",
"navigation_bar.follow_requests": "අනුගමන ඉල්ලීම්",
"navigation_bar.follows_and_followers": "අනුගමනය හා අනුගාමිකයින්",
"navigation_bar.lists": "ලේඛන",
"navigation_bar.lists": "ලැයිස්තු",
"navigation_bar.logout": "නික්මෙන්න",
"navigation_bar.mutes": "නිහඬ කළ අය",
"navigation_bar.personal": "පුද්ගලික",
"navigation_bar.pins": "ඇමිණූ ලිපි",
"navigation_bar.preferences": "අභිප්‍රේත",
"navigation_bar.public_timeline": "ෆෙඩරේටඩ් කාලරේඛාව",
"navigation_bar.public_timeline": "ඒකාබද්ධ කාලරේඛාව",
"navigation_bar.search": "සොයන්න",
"navigation_bar.security": "ආරක්ෂාව",
"not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.",
"notification.admin.report": "{name} වාර්තා {target}",
"notification.admin.sign_up": "{name} අත්සන් කර ඇත",
"notification.follow": "{name} ඔබව අනුගමනය කළා",
"notification.follow_request": "{name} ඔබව අනුගමනය කිරීමට ඉල්ලා ඇත",
"notification.mention": "{name} ඔබව සඳහන් කර ඇත",
"notification.own_poll": "ඔබගේ මත විමසුම නිමයි",
"notification.poll": "ඔබ ඡන්දය දුන් මත විමසුමක් නිමයි",
"notification.reblog": "{name} ඔබේ තත්ත්වය ඉහළ නැංවීය",
"notification.status": "{name} දැන් පළ කළා",
"notification.update": "{name} පළ කිරීමක් සංස්කරණය කළා",
"notification.update": "{name} ලිපියක් සංස්කරණය කළා",
"notifications.clear": "දැනුම්දීම් මකන්න",
"notifications.clear_confirmation": "ඔබට ඔබගේ සියලු දැනුම්දීම් ස්ථිරවම හිස් කිරීමට අවශ්‍ය බව විශ්වාසද?",
"notifications.clear_confirmation": "දැනුම්දීම් සියල්ල හිස් කිරීමට වුවමනා ද?",
"notifications.column_settings.admin.report": "නව වාර්තා:",
"notifications.column_settings.admin.sign_up": "නව ලියාපදිංචි:",
"notifications.column_settings.alert": "වැඩතල දැනුම්දීම්",
"notifications.column_settings.favourite": "ප්‍රියතමයන්:",
"notifications.column_settings.filter_bar.advanced": "සියළු ප්‍රවර්ග පෙන්වන්න",
"notifications.column_settings.filter_bar.category": "ඉක්මන් පෙරහන් තීරුව",
"notifications.column_settings.filter_bar.show_bar": "පෙරහන් තීරුව පෙන්වන්න",
"notifications.column_settings.follow": "නව අනුගාමිකයින්:",
"notifications.column_settings.follow_request": "නව අනුගමන ඉල්ලීම්:",
"notifications.column_settings.mention": "සැඳහුම්:",
"notifications.column_settings.poll": "ඡන්ද ප්‍රතිඵල:",
"notifications.column_settings.poll": "මත විමසුමේ ප්‍රතිඵල:",
"notifications.column_settings.push": "තල්ලු දැනුම්දීම්",
"notifications.column_settings.reblog": "තල්ලු කිරීම්:",
"notifications.column_settings.show": "තීරුවෙහි පෙන්වන්න",
"notifications.column_settings.sound": "ශබ්දය වාදනය",
"notifications.column_settings.status": "නව ලිපි:",
@ -319,42 +302,26 @@
"notifications.column_settings.unread_notifications.highlight": "නොකියවූ දැනුම්දීම් ඉස්මතු කරන්න",
"notifications.column_settings.update": "සංශෝධන:",
"notifications.filter.all": "සියල්ල",
"notifications.filter.boosts": "බූස්ට් කරයි",
"notifications.filter.favourites": "ප්‍රියතමයන්",
"notifications.filter.follows": "අනුගමනය",
"notifications.filter.mentions": "සැඳහුම්",
"notifications.filter.polls": "ඡන්ද ප්‍රතිඵල",
"notifications.filter.statuses": "ඔබ අනුගමනය කරන පුද්ගලයින්ගෙන් යාවත්කාලීන",
"notifications.grant_permission": "අවසර දෙන්න.",
"notifications.filter.polls": "මත විමසුමේ ප්‍රතිඵල",
"notifications.group": "දැනුම්දීම් {count}",
"notifications.mark_as_read": "සියළු දැනුම්දීම් කියවූ බව යොදන්න",
"notifications.permission_denied": "කලින් ප්‍රතික්ෂේප කළ බ්‍රවුසර අවසර ඉල්ලීම හේතුවෙන් ඩෙස්ක්ටොප් දැනුම්දීම් නොමැත",
"notifications.permission_denied_alert": "බ්‍රවුසර අවසරය පෙර ප්‍රතික්ෂේප කර ඇති බැවින්, ඩෙස්ක්ටොප් දැනුම්දීම් සබල කළ නොහැක",
"notifications.permission_required": "අවශ්‍ය අවසරය ලබා දී නොමැති නිසා ඩෙස්ක්ටොප් දැනුම්දීම් නොමැත.",
"notifications_permission_banner.enable": "වැඩතල දැනුම්දීම් සබල කරන්න",
"notifications_permission_banner.how_to_control": "Mastodon විවෘතව නොමැති විට දැනුම්දීම් ලබා ගැනීමට, ඩෙස්ක්ටොප් දැනුම්දීම් සබල කරන්න. ඔබට ඒවා සක්‍රිය කළ පසු ඉහත {icon} බොත්තම හරහා ඩෙස්ක්ටොප් දැනුම්දීම් ජනනය කරන්නේ කුමන ආකාරයේ අන්තර්ක්‍රියාද යන්න නිවැරදිව පාලනය කළ හැක.",
"notifications_permission_banner.title": "කිසිම දෙයක් අතපසු කරන්න එපා",
"onboarding.actions.go_to_explore": "See what's trending",
"onboarding.actions.go_to_home": "Go to your home feed",
"onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
"onboarding.follows.title": "Popular on Mastodon",
"onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
"onboarding.start.skip": "Want to skip right ahead?",
"onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
"onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
"onboarding.steps.publish_status.body": "Say hello to the world.",
"onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
"onboarding.steps.setup_profile.title": "Customize your profile",
"onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
"onboarding.steps.share_profile.title": "Share your profile",
"picture_in_picture.restore": "ආපහු දාන්න",
"notifications_permission_banner.title": "කිසිවක් අතපසු නොකරන්න",
"onboarding.compose.template": "ආයුබෝ #මාස්ටඩන්!",
"onboarding.share.title": "ඔබගේ පැතිකඩ බෙදාගන්න",
"onboarding.steps.publish_status.title": "පළමු ලිපිය පළ කරන්න",
"onboarding.steps.setup_profile.title": "ඔබගේ පැතිකඩ අභිරුචිකරණය",
"onboarding.steps.share_profile.body": "මාස්ටඩන් හි ඔබව සොයා ගන්නේ කෙසේදැයි යහළුවන්ට දන්වන්න",
"onboarding.steps.share_profile.title": "ඔබගේ පැතිකඩ බෙදාගන්න",
"poll.closed": "වසා ඇත",
"poll.refresh": "නැවුම් කරන්න",
"poll.total_people": "{count, plural, one {# පුද්ගලයා} other {# මහජන}}",
"poll.total_votes": "{count, plural, one {# ඡන්දය} other {ඡන්ද #}}",
"poll.reveal": "ප්‍රතිඵල බලන්න",
"poll.vote": "ඡන්දය",
"poll.voted": "ඔබ මෙම පිළිතුරට ඡන්දය දුන්නා",
"poll.votes": "{votes, plural, one {# ඡන්දය} other {ඡන්ද #}}",
"poll_button.add_poll": "මත විමසුමක් යොදන්න",
"poll.voted": "ඔබ මෙම උත්තරයට ඡන්දය දී ඇත",
"poll_button.add_poll": "මත විමසුමක් අරඹන්න",
"poll_button.remove_poll": "මත විමසුම ඉවතලන්න",
"privacy.change": "ලිපියේ රහස්‍යතාව සංශෝධනය",
"privacy.direct.long": "සඳහන් කළ අයට දිස්වෙයි",
@ -363,13 +330,11 @@
"privacy.private.short": "අනුගාමිකයින් පමණි",
"privacy.public.long": "සැමට දිස්වෙයි",
"privacy.public.short": "ප්‍රසිද්ධ",
"privacy.unlisted.long": "සැමට දෘශ්‍යමාන, නමුත් සොයාගැනීමේ විශේෂාංග වලින් ඉවත් විය",
"privacy.unlisted.short": "ලැයිස්තුගත නොකළ",
"privacy_policy.title": "රහස්‍යතා ප්‍රතිපත්තිය",
"refresh": "නැවුම් කරන්න",
"regeneration_indicator.label": "පූරණය වෙමින්…",
"regeneration_indicator.sublabel": "ඔබේ නිවසේ පෝෂණය සූදානම් වෙමින් පවතී!",
"relative_time.days": "ද. {number}",
"relative_time.full.days": "{number, plural, one {# දින} other {# දින}} පෙර",
"relative_time.full.days": "{number, plural, one {දවස් #} other {දවස් #}} කට පෙර",
"relative_time.full.hours": "{number, plural, one {පැය #} other {පැය #}} කට පෙර",
"relative_time.full.just_now": "මේ දැන්",
"relative_time.full.minutes": "{number, plural, one {විනාඩි #} other {විනාඩි #}} කට පෙර",
@ -381,25 +346,23 @@
"relative_time.today": "අද",
"reply_indicator.cancel": "අවලංගු කරන්න",
"report.block": "අවහිර",
"report.block_explanation": "ඔබට ඔවුන්ගේ පෝස්ට් නොපෙනේ. ඔවුන්ට ඔබේ පළ කිරීම් බැලීමට හෝ ඔබව අනුගමනය කිරීමට නොහැකි වනු ඇත. ඔවුන් අවහිර කර ඇති බව ඔවුන්ට පැවසිය හැකිය.",
"report.categories.other": "වෙනත්",
"report.categories.spam": "ආයාචිත",
"report.categories.violation": "අන්තර්ගතය සේවාදායක නීති එකක් හෝ කිහිපයක් උල්ලංඝනය කරයි",
"report.category.subtitle": "හොඳම ගැලපීම තෝරන්න",
"report.categories.violation": "අන්තර්ගතය නිසා සේවාදායකයේ නීතියක් හෝ කිහිපයක් කඩ වේ",
"report.category.title": "මෙම {type}සමඟ සිදුවන්නේ කුමක්දැයි අපට කියන්න",
"report.category.title_account": "පැතිකඩ",
"report.category.title_status": "තැපැල්",
"report.category.title_status": "ලිපිය",
"report.close": "අහවරයි",
"report.comment.title": "අප දැනගත යුතු යැයි ඔබ සිතන තවත් යමක් තිබේද?",
"report.forward": "{target} වෙත හරවන්න",
"report.forward_hint": "ගිණුම වෙනත් සේවාදායකයකින්. වාර්තාවේ නිර්නාමික පිටපතක් එතනටත් එවන්න?",
"report.mute": "නිහඬ",
"report.mute_explanation": "ඔබට ඔවුන්ගේ පෝස්ට් නොපෙනේ. ඔවුන්ට තවමත් ඔබව අනුගමනය කිරීමට සහ ඔබේ පළ කිරීම් දැකීමට හැකි අතර ඒවා නිශ්ශබ්ද කර ඇති බව නොදැනේ.",
"report.mute_explanation": "ඔබ ඔවුන්ගේ ලිපි නොදකිනු ඇත. ඔවුන්ට තවමත් ඔබව අනුගමනයට සහ ඔබගේ ලිපි දැකීමට හැකි අතර ඔවුන්ව නිහඬ කර ඇති බව දැන ගැනීමට නොහැකිය.",
"report.next": "ඊළඟ",
"report.placeholder": "අමතර අදහස්",
"report.reasons.dislike": "මම එයට අකැමතියි",
"report.reasons.dislike_description": "ඒක බලන්න ඕන දෙයක් නෙවෙයි",
"report.reasons.other": "ඒක වෙන දෙයක්",
"report.reasons.other": "එය වෙනත් දෙයක්",
"report.reasons.other_description": "ගැටළුව වෙනත් වර්ග වලට නොගැලපේ",
"report.reasons.spam": "එය අයාචිතයි",
"report.reasons.spam_description": "අනිෂ්ට සබැඳි, ව්‍යාජ නියැලීම, හෝ පුනරාවර්තන පිළිතුරු",
@ -408,44 +371,48 @@
"report.rules.subtitle": "අදාළ සියල්ල තෝරන්න",
"report.rules.title": "කුමන නීති උල්ලංඝනය කරන්නේද?",
"report.statuses.subtitle": "අදාළ සියල්ල තෝරන්න",
"report.statuses.title": "මෙම වාර්තාව උපස්ථ කරන පෝස්ට් තිබේද?",
"report.statuses.title": "මෙම වාර්තාව උපස්ථ කළ ලිපි තිබේ ද?",
"report.submit": "යොමන්න",
"report.target": "වාර්තාව {target}",
"report.thanks.take_action": "Mastodon හි ඔබ දකින දේ පාලනය කිරීම සඳහා ඔබේ විකල්ප මෙන්න:",
"report.target": "{target} වාර්තා කිරීම",
"report.thanks.take_action": "මාස්ටඩන් හි ඔබ දකින දෑ පාලනයට තිබෙන විකල්ප:",
"report.thanks.take_action_actionable": "අපි මෙය සමාලෝචනය කරන අතරතුර, ඔබට @{name}ට එරෙහිව පියවර ගත හැක:",
"report.thanks.title": "මෙය නොපෙන්විය යුතුද?",
"report.thanks.title_actionable": "වාර්තා කිරීමට ස්තූතියි, අපි මේ ගැන සොයා බලමු.",
"report.unfollow": "@{name}අනුගමනය නොකරන්න",
"report.unfollow_explanation": "ඔබ මෙම ගිණුම අනුගමනය කරයි. ඔබේ නිවසේ සංග්‍රහයේ ඔවුන්ගේ පළ කිරීම් තවදුරටත් නොදැකීමට, ඒවා අනුගමනය නොකරන්න.",
"report.unfollow_explanation": "ඔබ මෙම ගිණුම අනුගමනය කරයි. ඔබගේ මුල් පිටුවේ ඔවුන්ගේ ලිපි නොදැකීමට, ඔවුන්ව තවදුරටත් අනුගමනය නොකරන්න.",
"report_notification.attached_statuses": "{count, plural, one {ලිපි {count}} other {ලිපි {count} ක්}} අමුණා ඇත",
"report_notification.categories.other": "වෙනත්",
"report_notification.categories.spam": "ආයාචිත",
"report_notification.categories.violation": "නීතිය කඩ කිරීම",
"report_notification.open": "විවෘත වාර්තාව",
"search.placeholder": "සොයන්න",
"search.quick_action.open_url": "ලිපිනය මාස්ටඩන්හි අරින්න",
"search.search_or_paste": "සොයන්න හෝ ඒ.ස.නි. අලවන්න",
"search_results.all": "සියල්ල",
"search_results.hashtags": "හැෂ් ටැග්",
"search_results.nothing_found": "මෙම සෙවුම් පද සඳහා කිසිවක් සොයාගත නොහැකි විය",
"search_results.see_all": "සියල්ල බලන්න",
"search_results.statuses": "ලිපි",
"sign_in_banner.sign_in": "Sign in",
"status.admin_account": "@{name}සඳහා මධ්‍යස්ථ අතුරුමුහුණත විවෘත කරන්න",
"status.admin_status": "මධ්‍යස්ථ අතුරුමුහුණතෙහි මෙම තත්ත්වය විවෘත කරන්න",
"search_results.title": "{q} සොයන්න",
"server_banner.learn_more": "තව දැනගන්න",
"sign_in_banner.create_account": "ගිණුමක් සාදන්න",
"sign_in_banner.sign_in": "පිවිසෙන්න",
"status.admin_status": "මෙම ලිපිය මැදිහත්කරණ අතුරුමුහුණතෙහි අරින්න",
"status.block": "@{name} අවහිර",
"status.bookmark": "පොත්යොමුවක්",
"status.cannot_reblog": "මෙම තනතුර වැඩි කළ නොහැක",
"status.copy": "තත්වයට සබැඳිය පිටපත් කරන්න",
"status.delete": "මකන්න",
"status.detailed_status": "විස්තරාත්මක සංවාද දැක්ම",
"status.edit": "සංස්කරණය",
"status.edited": "සංශෝධිතයි {date}",
"status.edited_x_times": "සංශෝධිතයි {count, plural, one {වාර {count}} other {වාර {count}}}",
"status.embed": "කාවැද්දූ",
"status.filter": "මෙම ලිපිය පෙරන්න",
"status.filtered": "පෙරන ලද",
"status.hide": "ලිපිය සඟවන්න",
"status.history.created": "{name} නිර්මාණය {date}",
"status.history.edited": "{name} සංස්කරණය {date}",
"status.load_more": "තව පූරණය",
"status.media_hidden": "මාධ්‍ය සඟවා ඇත",
"status.mention": "@{name} සැඳහුම",
"status.mention": "@{name} සඳහන් කරන්ක",
"status.more": "තව",
"status.mute": "@{name} නිහඬව",
"status.mute_conversation": "සංවාදය නිහඬව",
@ -453,15 +420,10 @@
"status.pin": "පැතිකඩට අමුණන්න",
"status.pinned": "ඇමිණූ ලිපියකි",
"status.read_more": "තව කියවන්න",
"status.reblog": "බූස්ට් කරන්න",
"status.reblog_private": "මුල් දෘශ්‍යතාව සමඟ වැඩි කරන්න",
"status.reblogged_by": "{name} වැඩි කරන ලදී",
"status.reblogs.empty": "තාම කවුරුත් මේ toot එක boost කරලා නැහැ. යමෙකු එසේ කළ විට, ඔවුන් මෙහි පෙන්වනු ඇත.",
"status.redraft": "මකන්න සහ නැවත කෙටුම්පත",
"status.remove_bookmark": "පොත්යොමුව ඉවතලන්න",
"status.reply": "පිළිතුරු",
"status.replyAll": "ත්‍රෙඩ් එකට පිළිතුරු දෙන්න",
"status.report": "@{name} වාර්තා",
"status.replyAll": "නූලට පිළිතුරු දෙන්න",
"status.report": "@{name} වාර්තා කරන්න",
"status.sensitive_warning": "සංවේදී අන්තර්ගතයකි",
"status.share": "බෙදාගන්න",
"status.show_filter_reason": "කෙසේ වුවද පෙන්වන්න",
@ -469,29 +431,29 @@
"status.show_less_all": "සියල්ල අඩුවෙන් පෙන්වන්න",
"status.show_more": "තවත් පෙන්වන්න",
"status.show_more_all": "සියල්ල වැඩියෙන් පෙන්වන්න",
"status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}",
"status.translate": "පරිවර්තනය",
"status.translated_from_with": "{provider} මගින් {lang} භාෂාවෙන් පරිවර්තනය කර ඇත",
"status.uncached_media_warning": "පෙරදසුන නැත",
"status.unmute_conversation": "සංවාදය නොනිහඬ",
"status.unpin": "පැතිකඩෙන් ගළවන්න",
"subscribed_languages.save": "වෙනස්කම් සුරකින්න",
"tabs_bar.home": "මුල් පිටුව",
"tabs_bar.notifications": "දැනුම්දීම්",
"time_remaining.days": "{number, plural, one {# දින} other {# දින}} අත්හැරියා",
"time_remaining.hours": "{number, plural, one {# පැය} other {# පැය}} අත්හැරියා",
"time_remaining.minutes": "{number, plural, one {විනාඩි #} other {# මිනිත්තු}} අත්හැරියා",
"time_remaining.moments": "ඉතිරිව ඇති මොහොත",
"time_remaining.seconds": "{number, plural, one {# දෙවැනි} other {# තත්පර}} අත්හැරියා",
"time_remaining.days": "{number, plural, one {දවස් #} other {දවස් #}} ක් ඉතිරිය",
"time_remaining.hours": "{number, plural, one {පැය #} other {පැය #}} ක් ඉතිරිය",
"time_remaining.minutes": "{number, plural, one {විනාඩි #} other {විනාඩි #}} ක් ඉතිරිය",
"time_remaining.seconds": "{number, plural, one {තත්පර #} other {තත්පර #}} ක් ඉතිරිය",
"timeline_hint.remote_resource_not_displayed": "වෙනත් සේවාදායකයන්ගෙන් {resource} දර්ශනය නොවේ.",
"timeline_hint.resources.followers": "අනුගාමිකයින්",
"timeline_hint.resources.follows": "අනුගමනය",
"timeline_hint.resources.statuses": "පරණ ලිපි",
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {# days}}",
"trends.trending_now": "දැන් ප්‍රවණතාවය",
"trends.trending_now": "දැන් නැගී එන",
"ui.beforeunload": "ඔබ මාස්ටඩන් හැර ගියහොත් කටුපිටපත අහිමි වේ.",
"units.short.billion": "{count}බී",
"units.short.million": "ද.ල. {count}",
"units.short.thousand": "{count}කි",
"upload_area.title": "උඩුගතයට ඇද දමන්න",
"upload_button.label": "රූප, දෘශ්‍යක හෝ හඬපට යොදන්න",
"upload_button.label": "රූප, දෘශ්‍යක හෝ හඬපට අමුණන්න",
"upload_error.limit": "සීමාව ඉක්මවා ඇත.",
"upload_error.poll": "මත විමසුම් සමඟ ගොනු යෙදීමට ඉඩ නොදේ.",
"upload_form.audio_description": "නොඇසෙන අය සඳහා විස්තර කරන්න",
@ -508,10 +470,11 @@
"upload_modal.description_placeholder": "කඩිසර දුඹුරු හිවලෙක් කම්මැලි බල්ලා මතින් පනී",
"upload_modal.detect_text": "රූපයෙහි පෙළ අනාවරණය",
"upload_modal.edit_media": "මාධ්‍ය සංස්කරණය",
"upload_modal.hint": "සියලුම සිඟිති රූ මත සැම විටම දර්ශනය වන නාභි ලක්ෂ්‍යය තේරීමට පෙරදසුනෙහි රවුම ක්ලික් කරන්න හෝ අදින්න.",
"upload_modal.preparing_ocr": "OCR…සූදානම් කරමින්",
"upload_modal.preparing_ocr": "OCR සඳහා සැරසෙමින්…",
"upload_modal.preview_label": "පෙරදසුන ({ratio})",
"upload_progress.label": "උඩුගත වෙමින්...",
"upload_progress.processing": "සැකසෙමින්…",
"username.taken": "නම දැනටමත් අරගෙන ඇත",
"video.close": "දෘශ්‍යකය වසන්න",
"video.download": "ගොනුව බාගන්න",
"video.exit_fullscreen": "පූර්ණ තිරයෙන් පිටවන්න",

View File

@ -12,53 +12,53 @@
"about.powered_by": "Decentralizované sociálne médiá poháňané technológiou {mastodon}",
"about.rules": "Pravidlá servera",
"account.account_note_header": "Poznámka",
"account.add_or_remove_from_list": "Pridaj do, alebo odober zo zoznamov",
"account.add_or_remove_from_list": "Pridaj alebo odober zo zoznamov",
"account.badges.bot": "Bot",
"account.badges.group": "Skupina",
"account.block": "Blokuj @{name}",
"account.block_domain": "Ukry všetko z {domain}",
"account.block_domain": "Skry všetko z {domain}",
"account.block_short": "Blokuj",
"account.blocked": "Blokovaný/á",
"account.browse_more_on_origin_server": "Prehľadávaj viac na pôvodnom profile",
"account.cancel_follow_request": "Stiahni žiadosť o nasledovanie",
"account.direct": "Spomeň @{name} v súkromí",
"account.disable_notifications": "Prestaň ma oboznamovať, keď má @{name} príspevky",
"account.domain_blocked": "Doména ukrytá",
"account.cancel_follow_request": "Zruš žiadosť o sledovanie",
"account.direct": "Spomeň @{name} súkromne",
"account.disable_notifications": "Prestaň mi oznamovať, keď má @{name} príspevky",
"account.domain_blocked": "Doména skrytá",
"account.edit_profile": "Uprav profil",
"account.enable_notifications": "Oboznamuj ma, keď má @{name} príspevky",
"account.enable_notifications": "Oznamuj mi, keď má @{name} príspevky",
"account.endorse": "Zobrazuj na profile",
"account.featured_tags.last_status_at": "Posledný príspevok dňa {date}",
"account.featured_tags.last_status_never": "Žiadne príspevky",
"account.featured_tags.title": "Odporúčané hashtagy používateľa {name}",
"account.follow": "Nasleduj",
"account.followers": "Nasledovatelia",
"account.follow": "Sleduj",
"account.followers": "Sledovatelia",
"account.followers.empty": "Tohto používateľa ešte nikto nenasleduje.",
"account.followers_counter": "{count, plural, one {{counter} Sledujúci} few {{counter} Sledujúci} many {{counter} Sledujúci} other {{counter} Sledujúci}}",
"account.following": "Nasledujem",
"account.followers_counter": "{count, plural, one {{counter} Sledujúci} few {{counter} Sledujúci} many {{counter} Sledujúcich} other {{counter} Sledujúcich}}",
"account.following": "Sledujem",
"account.following_counter": "{count, plural, one {{counter} Sledovaných} other {{counter} Sledujúcich}}",
"account.follows.empty": "Tento používateľ ešte nikoho nenasleduje.",
"account.follows_you": "Nasleduje ťa",
"account.follows.empty": "Tento používateľ ešte nikoho nesleduje.",
"account.follows_you": "Sleduje ťa",
"account.go_to_profile": "Prejdi na profil",
"account.hide_reblogs": "Skry vyzdvihnutia od @{name}",
"account.hide_reblogs": "Skry zdieľania od @{name}",
"account.in_memoriam": "In Memoriam.",
"account.joined_short": "Pridal/a sa",
"account.languages": "Zmeniť odoberané jazyky",
"account.link_verified_on": "Vlastníctvo tohto odkazu bolo skontrolované {date}",
"account.locked_info": "Stav súkromia pre tento účet je nastavený na zamknutý. Jeho vlastník sám prehodnocuje, kto ho môže sledovať.",
"account.locked_info": "Stav súkromia pre tento účet je nastavený na zamknutý. Jeho vlastník sa sám rozhoduje, kto ho môže sledovať.",
"account.media": "Médiá",
"account.mention": "Spomeň @{name}",
"account.moved_to": "{name} uvádza, že jeho/jej nový účet je teraz:",
"account.mute": "Nevšímaj si @{name}",
"account.mute_notifications_short": "Stíš oboznámenia",
"account.mute_short": "Nevšímaj si",
"account.muted": "Nevšímaný/á",
"account.no_bio": "Nieje uvedený žiadny popis.",
"account.mute": "Stíš @{name}",
"account.mute_notifications_short": "Stíš oznámenia",
"account.mute_short": "Stíš",
"account.muted": "Stíšený",
"account.no_bio": "Nie je uvedený žiadny popis.",
"account.open_original_page": "Otvor pôvodnú stránku",
"account.posts": "Príspevky",
"account.posts_with_replies": "Príspevky a odpovede",
"account.report": "Nahlás @{name}",
"account.requested": "Čaká na schválenie. Klikni pre zrušenie žiadosti",
"account.requested_follow": "{name} ťa žiada nasledovať",
"account.requested_follow": "{name} ti poslal žiadosť na sledovanie",
"account.share": "Zdieľaj @{name} profil",
"account.show_reblogs": "Ukáž vyzdvihnutia od @{name}",
"account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}",
@ -84,7 +84,7 @@
"alert.rate_limited.title": "Tempo obmedzené",
"alert.unexpected.message": "Vyskytla sa nečakaná chyba.",
"alert.unexpected.title": "Ups!",
"announcement.announcement": "Oboznámenie",
"announcement.announcement": "Oznámenie",
"attachments_list.unprocessed": "(nespracované)",
"audio.hide": "Skry zvuk",
"autosuggest_hashtag.per_week": "{count} týždenne",
@ -119,7 +119,7 @@
"column.home": "Domov",
"column.lists": "Zoznamy",
"column.mutes": "Nevšímaní užívatelia",
"column.notifications": "Oboznámenia",
"column.notifications": "Oznámenia",
"column.pins": "Pripnuté príspevky",
"column.public": "Federovaná časová os",
"column_back_button.label": "Späť",
@ -185,7 +185,7 @@
"confirmations.redraft.message": "Ste si istý, že chcete premazať a prepísať tento príspevok? Jeho nadobudnuté vyzdvihnutia a obľúbenia, ale i odpovede na pôvodný príspevok budú odlúčené.",
"confirmations.reply.confirm": "Odpovedz",
"confirmations.reply.message": "Odpovedaním akurát teraz prepíšeš správu, ktorú máš práve rozpísanú. Si si istý/á, že chceš pokračovať?",
"confirmations.unfollow.confirm": "Nesleduj",
"confirmations.unfollow.confirm": "Prestaň sledovať",
"confirmations.unfollow.message": "Naozaj chceš prestať sledovať {name}?",
"conversation.delete": "Vymaž konverzáciu",
"conversation.mark_as_read": "Označ za prečítané",
@ -223,7 +223,7 @@
"emoji_button.symbols": "Symboly",
"emoji_button.travel": "Cestovanie a miesta",
"empty_column.account_suspended": "Účet bol vylúčený",
"empty_column.account_timeline": "Niesu tu žiadne príspevky!",
"empty_column.account_timeline": "Nie tu žiadne príspevky!",
"empty_column.account_unavailable": "Profil nedostupný",
"empty_column.blocks": "Ešte si nikoho nezablokoval/a.",
"empty_column.bookmarked_statuses": "Ešte nemáš žiadné záložky. Keď si pridáš príspevok k záložkám, zobrazí sa tu.",
@ -296,19 +296,24 @@
"hashtag.column_settings.tag_mode.any": "Hociktorý z týchto",
"hashtag.column_settings.tag_mode.none": "Žiaden z týchto",
"hashtag.column_settings.tag_toggle": "Vlož dodatočné haštagy pre tento stĺpec",
"hashtag.follow": "Nasleduj haštag",
"hashtag.counter_by_accounts": "{count, plural, one {{counter} sledujúci} few {{counter} sledujúci} many {{counter} sledujúcich} other {{counter} sledujúcich}}",
"hashtag.counter_by_uses": "{count, plural, one {{counter} príspevok} few {{counter} príspevky} many {{counter} príspevkov} other {{counter} príspevkov}}",
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} príspevok} few {{counter} príspevky} many {{counter} príspevkov} other {{counter} príspevkov}} dnes",
"hashtag.follow": "Sleduj haštag",
"hashtag.unfollow": "Nesleduj haštag",
"hashtags.and_other": "…a {count, plural, one {} few {# ďalšie} many {# ďalších}other {# ďalších}}",
"home.actions.go_to_explore": "Pozrieť, čo je trendy",
"home.actions.go_to_suggestions": "Nájdi ľudí na sledovanie",
"home.column_settings.basic": "Základné",
"home.column_settings.show_reblogs": "Ukáž vyzdvihnuté",
"home.column_settings.show_replies": "Ukáž odpovede",
"home.explore_prompt.body": "Váš domovský informačný kanál bude obsahovať mix príspevkov z mriežok, ktoré ste sa rozhodli sledovať, ľudí, ktorých ste sa rozhodli sledovať, a príspevkov, ktoré preferujú. Ak sa vám to zdá príliš málo, možno budete chcieť:",
"home.explore_prompt.title": "Toto je tvoja domovina v rámci Mastodonu.",
"home.hide_announcements": "Skry oboznámenia",
"home.hide_announcements": "Skry oznámenia",
"home.pending_critical_update.body": "Prosím aktualizuj si svoj Mastodon server, ako náhle to bude možné!",
"home.pending_critical_update.link": "Pozri aktualizácie",
"home.pending_critical_update.title": "Je dostupná kritická bezpečnostná aktualizácia!",
"home.show_announcements": "Ukáž oboznámenia",
"home.show_announcements": "Ukáž oznámenia",
"interaction_modal.description.favourite": "S účtom na Mastodone si môžeš tento príspevok obľúbiť, aby si dal/a autorovi vedieť, že ho oceňuješ, a uložiť si ho na neskôr.",
"interaction_modal.description.follow": "Ak máte konto na Mastodone, môžete sledovať {name} a dostávať príspevky do svojho domovského kanála.",
"interaction_modal.description.reblog": "Ak máte účet na Mastodone, môžete tento príspevok posilniť a zdieľať ho s vlastnými sledovateľmi.",
@ -319,6 +324,7 @@
"interaction_modal.on_another_server": "Na inom serveri",
"interaction_modal.on_this_server": "Na tomto serveri",
"interaction_modal.sign_in": "Nie si prihláseý/á na tomto serveri. Kde je tvoj účet hostovaný?",
"interaction_modal.sign_in_hint": "Tip: Toto je webová stránka, na ktorej ste sa zaregistrovali. Ak si nepamätáte, pohľadajte uvítací e-mail vo svojej schránke. Môžete tiež zadať svoje celé používateľské meno! (napr. @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Obľúb si {name} ov/in príspevok",
"interaction_modal.title.follow": "Nasleduj {name}",
"interaction_modal.title.reblog": "Vyzdvihni {name}ov/in príspevok",
@ -346,7 +352,7 @@
"keyboard_shortcuts.mention": "spomeň autora",
"keyboard_shortcuts.muted": "otvor zoznam stíšených užívateľov",
"keyboard_shortcuts.my_profile": "otvor svoj profil",
"keyboard_shortcuts.notifications": "otvor panel oboznámení",
"keyboard_shortcuts.notifications": "Otvor panel oznámení",
"keyboard_shortcuts.open_media": "na otvorenie médií",
"keyboard_shortcuts.pinned": "otvor zoznam pripnutých príspevkov",
"keyboard_shortcuts.profile": "otvor autorov profil",
@ -373,6 +379,7 @@
"lists.delete": "Vymaž list",
"lists.edit": "Uprav zoznam",
"lists.edit.submit": "Zmeň názov",
"lists.exclusive": "Skryť tieto príspevky z domovskej stránky",
"lists.new.create": "Pridaj zoznam",
"lists.new.title_placeholder": "Názov nového zoznamu",
"lists.replies_policy.followed": "Akýkoľvek nasledovaný užívateľ",
@ -426,11 +433,11 @@
"notification.reblog": "{name} zdieľal/a tvoj príspevok",
"notification.status": "{name} práve uverejnil/a",
"notification.update": "{name} upravil/a príspevok",
"notifications.clear": "Vyčisti oboznámenia",
"notifications.clear_confirmation": "Naozaj chceš nenávratne prečistiť všetky tvoje oboznámenia?",
"notifications.clear": "Vyčisti oznámenia",
"notifications.clear_confirmation": "Naozaj chceš nenávratne odstrániť všetky tvoje oznámenia?",
"notifications.column_settings.admin.report": "Nové hlásenia:",
"notifications.column_settings.admin.sign_up": "Nové registrácie:",
"notifications.column_settings.alert": "Oboznámenia na ploche",
"notifications.column_settings.alert": "Oznámenia na ploche",
"notifications.column_settings.favourite": "Obľúbené:",
"notifications.column_settings.filter_bar.advanced": "Zobraz všetky kategórie",
"notifications.column_settings.filter_bar.category": "Rýchle triedenie",
@ -444,8 +451,8 @@
"notifications.column_settings.show": "Ukáž v stĺpci",
"notifications.column_settings.sound": "Prehraj zvuk",
"notifications.column_settings.status": "Nové príspevky:",
"notifications.column_settings.unread_notifications.category": "Neprečítané oboznámenia",
"notifications.column_settings.unread_notifications.highlight": "Zdôrazni neprečítané oboznámenia",
"notifications.column_settings.unread_notifications.category": "Neprečítané oznámenia",
"notifications.column_settings.unread_notifications.highlight": "Zdôrazni neprečítané oznámenia",
"notifications.column_settings.update": "Úpravy:",
"notifications.filter.all": "Všetky",
"notifications.filter.boosts": "Vyzdvihnutia",
@ -455,12 +462,12 @@
"notifications.filter.polls": "Výsledky ankiet",
"notifications.filter.statuses": "Aktualizácie od ľudí, ktorých nasleduješ",
"notifications.grant_permission": "Udeľ povolenie.",
"notifications.group": "{count} oboznámení",
"notifications.mark_as_read": "Označ každé oboznámenie za prečítané",
"notifications.permission_denied": "Oboznámenia na plochu sú nedostupné, kvôli predtým zamietnutej požiadavke prehliadača",
"notifications.permission_denied_alert": "Oboznámenia na ploche nemôžu byť zapnuté, pretože požiadavka prehliadača o to, bola už skôr zamietnutá",
"notifications.permission_required": "Oboznámenia na ploche sú nedostupné, pretože potrebné povolenia neboli udelené.",
"notifications_permission_banner.enable": "Povoliť oboznámenia na plochu",
"notifications.group": "{count} Oznámení",
"notifications.mark_as_read": "Označ každé oznámenie za prečítané",
"notifications.permission_denied": "Oznámenia na ploche sú nedostupné, kvôli predtým zamietnutej požiadavke prehliadača",
"notifications.permission_denied_alert": "Oznámenia na ploche nemôžu byť zapnuté, pretože požiadavka prehliadača bola už skôr zamietnutá",
"notifications.permission_required": "Oznámenia na ploche sú nedostupné, pretože potrebné povolenia neboli udelené.",
"notifications_permission_banner.enable": "Povoliť oznámenia na ploche",
"notifications_permission_banner.how_to_control": "Ak chcete dostávať upozornenia, keď Mastodon nie je otvorený, povoľte upozornenia na ploche. Po ich zapnutí môžete presne kontrolovať, ktoré typy interakcií generujú upozornenia na ploche, a to prostredníctvom tlačidla {icon} vyššie.",
"notifications_permission_banner.title": "Nikdy nezmeškaj jedinú vec",
"onboarding.action.back": "Vziať ma späť",
@ -468,6 +475,7 @@
"onboarding.actions.go_to_explore": "See what's trending",
"onboarding.actions.go_to_home": "Go to your home feed",
"onboarding.compose.template": "Nazdar #Mastodon!",
"onboarding.follows.empty": "Žiaľ, momentálne sa nedajú zobraziť žiadne výsledky. Môžete skúsiť použiť vyhľadávanie alebo navštíviť stránku objavovania a nájsť ľudí, ktorých chcete sledovať, alebo to skúste znova neskôr.",
"onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
"onboarding.follows.title": "Popular on Mastodon",
"onboarding.share.lead": "Daj ľudom vedieť, ako ťa môžu na Mastodone nájsť!",
@ -476,6 +484,7 @@
"onboarding.share.title": "Zdieľaj svoj profil",
"onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
"onboarding.start.skip": "Want to skip right ahead?",
"onboarding.start.title": "Zvládli ste to!",
"onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
"onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
"onboarding.steps.publish_status.body": "Say hello to the world.",
@ -484,6 +493,12 @@
"onboarding.steps.setup_profile.title": "Customize your profile",
"onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
"onboarding.steps.share_profile.title": "Share your profile",
"onboarding.tips.2fa": "<strong>Vedeli ste?</strong> Svoj účet môžete zabezpečiť nastavením dvojfaktorového overenia v nastaveniach účtu. Funguje to s akoukoľvek aplikáciou TOTP podľa vášho výberu, nie je potrebné žiadne telefónne číslo!",
"onboarding.tips.accounts_from_other_servers": "<strong>Vedeli ste?</strong> Keďže Mastodon je decentralizovaný, niektoré profily, s ktorými sa stretnete, budú na iných serveroch, ako je váš. Aj napriek tomu s nimi môžete bezproblémovo komunikovať! Ich server je v druhej časti ich používateľského mena!",
"onboarding.tips.migration": "<strong>Vedeli ste?</strong> Ak máte pocit, že doména {domain} pre vás v budúcnosti nebude skvelou voľbou, môžete prejsť na iný server Mastodon bez straty svojich sledovateľov. Môžete dokonca hostovať svoj vlastný server!",
"onboarding.tips.verification": "<strong>Vedeli ste?</strong> Svoj účet môžete overiť umiestnením odkazu na svoj profil Mastodon na svoju vlastnú webovú lokalitu a pridaním webovej lokality do svojho profilu. Nie sú potrebné žiadne poplatky ani doklady!",
"password_confirmation.exceeds_maxlength": "Potvrdené heslo presahuje maximálnu dĺžku hesla",
"password_confirmation.mismatching": "Zadané heslá sa nezhodujú",
"picture_in_picture.restore": "Vrátiť späť",
"poll.closed": "Uzatvorená",
"poll.refresh": "Obnoviť",
@ -542,6 +557,7 @@
"report.reasons.dislike": "Nepáči sa mi",
"report.reasons.dislike_description": "Nieje to niečo, čo chceš vidieť",
"report.reasons.legal": "Je to nelegálne",
"report.reasons.legal_description": "Domnievate sa, že porušuje zákony vašej krajiny alebo krajiny servera",
"report.reasons.other": "Je to niečo iné",
"report.reasons.other_description": "Tento problém nepatrí do iných kategórií",
"report.reasons.spam": "Je to spam",
@ -559,6 +575,7 @@
"report.thanks.title": "Nechceš to vidieť?",
"report.thanks.title_actionable": "Vďaka za nahlásenie, pozrieme sa na to.",
"report.unfollow": "Nesleduj @{name}",
"report.unfollow_explanation": "Tento účet sledujete. Ak už nechcete vidieť jeho príspevky vo svojom domovskom kanáli, zrušte jeho sledovanie.",
"report_notification.attached_statuses": "{count, plural, one {# post} other {# posts}} attached",
"report_notification.categories.legal": "Právne ujednania",
"report_notification.categories.other": "Ostatné",
@ -573,6 +590,8 @@
"search.quick_action.open_url": "Otvor URL v rámci Mastodonu",
"search.quick_action.status_search": "Príspevky zodpovedajúce {x}",
"search.search_or_paste": "Hľadaj, alebo vlož URL adresu",
"search_popout.full_text_search_disabled_message": "Nie je k dispozícii v doméne {domain}.",
"search_popout.language_code": "ISO kód jazyka",
"search_popout.options": "Možnosti vyhľadávania",
"search_popout.quick_actions": "Rýchle akcie",
"search_popout.recent": "Nedávne vyhľadávania",
@ -585,14 +604,18 @@
"search_results.see_all": "Ukáž všetky",
"search_results.statuses": "Príspevky",
"search_results.title": "Hľadaj {q}",
"server_banner.about_active_users": "Ľudia používajúci tento server za posledných 30 dní (Aktívni používatelia za mesiac)",
"server_banner.active_users": "aktívni užívatelia",
"server_banner.administered_by": "Správcom je:",
"server_banner.introduction": "{domain} je súčasťou decentralizovanej sociálnej siete využívajúcej technológiu {mastodon}.",
"server_banner.learn_more": "Zisti viac",
"server_banner.server_stats": "Serverové štatistiky:",
"sign_in_banner.create_account": "Vytvor účet",
"sign_in_banner.sign_in": "Prihlás sa",
"sign_in_banner.sso_redirect": "Prihlás sa, alebo zaregistruj",
"sign_in_banner.text": "Prihláste sa, aby ste mohli sledovať profily alebo haštagy, obľúbené veci, zdieľať ich a odpovedať na príspevky. Môžete tiež komunikovať zo svojho účtu na inom serveri.",
"status.admin_account": "Otvor moderovacie rozhranie užívateľa @{name}",
"status.admin_domain": "Otvor rozhranie na moderovanie domény {domain}",
"status.admin_status": "Otvor tento príspevok v moderovacom rozhraní",
"status.block": "Blokuj @{name}",
"status.bookmark": "Záložka",
@ -649,9 +672,11 @@
"status.uncached_media_warning": "Náhľad nie je k dispozícii",
"status.unmute_conversation": "Prestaň si nevšímať konverzáciu",
"status.unpin": "Odopni z profilu",
"subscribed_languages.lead": "Po zmene sa na vašej domovskej stránke a časovej osi zoznamu zobrazia iba príspevky vo vybraných jazykoch. Ak chcete dostávať príspevky vo všetkých jazykoch, vyberte možnosť žiadne.",
"subscribed_languages.save": "Ulož zmeny",
"subscribed_languages.target": "Zmeniť prihlásené jazyky pre {target}",
"tabs_bar.home": "Domov",
"tabs_bar.notifications": "Oboznámenia",
"tabs_bar.notifications": "Oznámenia",
"time_remaining.days": "Ostáva {number, plural, one {# deň} few {# dní} many {# dní} other {# dní}}",
"time_remaining.hours": "Ostáva {number, plural, one {# hodina} few {# hodín} many {# hodín} other {# hodiny}}",
"time_remaining.minutes": "Ostáva {number, plural, one {# minúta} few {# minút} many {# minút} other {# minúty}}",
@ -680,6 +705,7 @@
"upload_form.video_description": "Popíš, pre ľudí so stratou sluchu, alebo očným znevýhodnením",
"upload_modal.analyzing_picture": "Analyzujem obrázok…",
"upload_modal.apply": "Použi",
"upload_modal.applying": "Nastavovanie…",
"upload_modal.choose_image": "Vyber obrázok",
"upload_modal.description_placeholder": "Rýchla hnedá líška skáče ponad lenivého psa",
"upload_modal.detect_text": "Rozpoznaj text z obrázka",
@ -689,6 +715,7 @@
"upload_modal.preview_label": "Náhľad ({ratio})",
"upload_progress.label": "Nahráva sa...",
"upload_progress.processing": "Spracovávanie…",
"username.taken": "Používateľské meno je obsadené. Skúste iné",
"video.close": "Zavri video",
"video.download": "Stiahni súbor",
"video.exit_fullscreen": "Vypni zobrazenie na celú obrazovku",

View File

@ -514,7 +514,7 @@
"privacy.direct.long": "Vidljivo samo pomenutim korisnicima",
"privacy.direct.short": "Samo pomenute osobe",
"privacy.private.long": "Vidljivo samo pratiocima",
"privacy.private.short": "Samo pratiocima",
"privacy.private.short": "Samo pratioci",
"privacy.public.long": "Vidljivo za sve",
"privacy.public.short": "Javno",
"privacy.unlisted.long": "Vidljivo svima, ali isključeno iz funkcija otkrivanja",

View File

@ -514,7 +514,7 @@
"privacy.direct.long": "Видљиво само поменутим корисницима",
"privacy.direct.short": "Само поменуте особе",
"privacy.private.long": "Видљиво само пратиоцима",
"privacy.private.short": "Само пратиоцима",
"privacy.private.short": "Само пратиоци",
"privacy.public.long": "Видљиво за све",
"privacy.public.short": "Јавно",
"privacy.unlisted.long": "Видљиво свима, али искључено из функција откривања",

View File

@ -373,7 +373,7 @@
"lightbox.previous": "上一步",
"limited_account_hint.action": "一律顯示個人檔案",
"limited_account_hint.title": "此個人檔案已被 {domain} 的管理員隱藏。",
"link_preview.author": "按照 {name}",
"link_preview.author": "由 {name} 提供",
"lists.account.add": "新增至列表",
"lists.account.remove": "從列表中移除",
"lists.delete": "刪除列表",

View File

@ -8279,6 +8279,9 @@ noscript {
flex: 1 1 auto;
display: flex;
flex-direction: column;
background: $ui-base-color;
border-bottom-left-radius: 4px;
border-bottom-right-radius: 4px;
}
.story {
@ -9009,6 +9012,10 @@ noscript {
color: $dark-text-color;
margin-bottom: 20px;
.version {
white-space: nowrap;
}
strong {
font-weight: 500;
}
@ -9284,14 +9291,17 @@ noscript {
0 10px 15px -3px rgba($base-shadow-color, 0.25),
0 4px 6px -4px rgba($base-shadow-color, 0.25);
cursor: default;
transition: 0.5s cubic-bezier(0.89, 0.01, 0.5, 1.1);
transform: translateZ(0);
font-size: 15px;
line-height: 21px;
&.notification-bar-active {
inset-inline-start: 1rem;
}
.no-reduce-motion & {
transition: 0.5s cubic-bezier(0.89, 0.01, 0.5, 1.1);
transform: translateZ(0);
}
}
.notification-bar-title {

View File

@ -60,8 +60,12 @@ class AccountStatusesFilter
.where(reblog_of_id: nil)
.or(
scope
# This is basically `Status.not_domain_blocked_by_account(current_account)`
# and `Status.not_excluded_by_account(current_account)` but on the
# `reblog` association. Unfortunately, there seem to be no clean way
# to re-use those scopes in our case.
.where(reblog: { accounts: { domain: nil } }).or(scope.where.not(reblog: { accounts: { domain: current_account.excluded_from_timeline_domains } }))
.where.not(reblog: { account_id: current_account.excluded_from_timeline_account_ids })
.where.not(reblog: { accounts: { domain: current_account.excluded_from_timeline_domains } })
)
end

View File

@ -14,6 +14,8 @@ module ActivityPub::CaseTransform
when String
camel_lower_cache[value] ||= if value.start_with?('_:')
"_:#{value.delete_prefix('_:').underscore.camelize(:lower)}"
elsif LanguagesHelper::ISO_639_1_REGIONAL.key?(value.to_sym)
value
else
value.underscore.camelize(:lower)
end

View File

@ -25,7 +25,8 @@ class Admin::Metrics::Dimension::SoftwareVersionsDimension < Admin::Metrics::Dim
end
def ruby_version
value = "#{RUBY_VERSION}p#{RUBY_PATCHLEVEL}"
yjit = defined?(RubyVM::YJIT) && RubyVM::YJIT.enabled?
value = "#{RUBY_VERSION}p#{RUBY_PATCHLEVEL}#{yjit ? ' +YJIT' : ''}"
{
key: 'ruby',

View File

@ -11,7 +11,7 @@ class Admin::Metrics::Dimension::SpaceUsageDimension < Admin::Metrics::Dimension
protected
def perform_query
[postgresql_size, redis_size, media_size]
[postgresql_size, redis_size, media_size, search_size].compact
end
def postgresql_size
@ -65,4 +65,22 @@ class Admin::Metrics::Dimension::SpaceUsageDimension < Admin::Metrics::Dimension
redis.info
end
end
def search_size
return unless Chewy.enabled?
client_info = Chewy.client.info
value = Chewy.client.indices.stats['indices'].values.sum { |index_data| index_data['primaries']['store']['size_in_bytes'] }
{
key: 'search',
human_key: client_info.dig('version', 'distribution') == 'opensearch' ? 'OpenSearch' : 'Elasticsearch',
value: value.to_s,
unit: 'bytes',
human_value: number_to_human_size(value),
}
rescue Faraday::ConnectionFailed, Elasticsearch::Transport::Transport::Error
nil
end
end

View File

@ -76,14 +76,35 @@ class Admin::SystemCheck::ElasticsearchCheck < Admin::SystemCheck::BaseCheck
end
def compatible_version?
return false if running_version.nil?
Gem::Version.new(running_version) >= Gem::Version.new(required_version) ||
Gem::Version.new(compatible_wire_version) >= Gem::Version.new(required_version)
running_version_ok? || compatible_wire_version_ok?
rescue ArgumentError
false
end
def running_version_ok?
return false if running_version.blank?
gem_version_running >= gem_version_required
end
def compatible_wire_version_ok?
return false if compatible_wire_version.blank?
gem_version_compatible_wire >= gem_version_required
end
def gem_version_running
Gem::Version.new(running_version)
end
def gem_version_required
Gem::Version.new(required_version)
end
def gem_version_compatible_wire
Gem::Version.new(compatible_wire_version)
end
def mismatched_indexes
@mismatched_indexes ||= INDEXES.filter_map do |klass|
klass.base_name if Chewy.client.indices.get_mapping[klass.index_name]&.deep_symbolize_keys != klass.mappings_hash

View File

@ -34,7 +34,9 @@ class Importer::BaseImporter
# Estimate the amount of documents that would be indexed. Not exact!
# @returns [Integer]
def estimate!
ActiveRecord::Base.connection_pool.with_connection { |connection| connection.select_one("SELECT reltuples AS estimate FROM pg_class WHERE relname = '#{index.adapter.target.table_name}'")['estimate'].to_i }
reltuples = ActiveRecord::Base.connection_pool.with_connection { |connection| connection.select_one("SELECT reltuples FROM pg_class WHERE relname = '#{index.adapter.target.table_name}'")['reltuples'].to_i }
# If the table has never yet been vacuumed or analyzed, reltuples contains -1
[reltuples, 0].max
end
# Import data from the database into the index

View File

@ -66,7 +66,7 @@ class Account < ApplicationRecord
BACKGROUND_REFRESH_INTERVAL = 1.week.freeze
USERNAME_RE = /[a-z0-9_]+([a-z0-9_.-]+[a-z0-9_]+)?/i
MENTION_RE = %r{(?<=^|[^/[:word:]])@((#{USERNAME_RE})(?:@[[:word:].-]+[[:word:]]+)?)}i
MENTION_RE = %r{(?<![=/[:word:]])@((#{USERNAME_RE})(?:@[[:word:].-]+[[:word:]]+)?)}i
URL_PREFIX_RE = %r{\Ahttp(s?)://[^/]+}
USERNAME_ONLY_RE = /\A#{USERNAME_RE}\z/i
@ -131,7 +131,7 @@ class Account < ApplicationRecord
scope :searchable, -> { without_unapproved.without_suspended.where(moved_to_account_id: nil) }
scope :discoverable, -> { searchable.without_silenced.where(discoverable: true).joins(:account_stat) }
scope :followable_by, ->(account) { joins(arel_table.join(Follow.arel_table, Arel::Nodes::OuterJoin).on(arel_table[:id].eq(Follow.arel_table[:target_account_id]).and(Follow.arel_table[:account_id].eq(account.id))).join_sources).where(Follow.arel_table[:id].eq(nil)).joins(arel_table.join(FollowRequest.arel_table, Arel::Nodes::OuterJoin).on(arel_table[:id].eq(FollowRequest.arel_table[:target_account_id]).and(FollowRequest.arel_table[:account_id].eq(account.id))).join_sources).where(FollowRequest.arel_table[:id].eq(nil)) }
scope :by_recent_status, -> { order(Arel.sql('account_stats.last_status_at DESC NULLS LAST')) }
scope :by_recent_status, -> { includes(:account_stat).merge(AccountStat.order('last_status_at DESC NULLS LAST')).references(:account_stat) }
scope :by_recent_sign_in, -> { order(Arel.sql('users.current_sign_in_at DESC NULLS LAST')) }
scope :popular, -> { order('account_stats.followers_count desc') }
scope :by_domain_and_subdomains, ->(domain) { where(domain: Instance.by_domain_and_subdomains(domain).select(:domain)) }

View File

@ -38,7 +38,7 @@ class Admin::ActionLogFilter
destroy_status: { target_type: 'Status', action: 'destroy' }.freeze,
destroy_user_role: { target_type: 'UserRole', action: 'destroy' }.freeze,
destroy_canonical_email_block: { target_type: 'CanonicalEmailBlock', action: 'destroy' }.freeze,
disable_2fa_user: { target_type: 'User', action: 'disable' }.freeze,
disable_2fa_user: { target_type: 'User', action: 'disable_2fa' }.freeze,
disable_custom_emoji: { target_type: 'CustomEmoji', action: 'disable' }.freeze,
disable_user: { target_type: 'User', action: 'disable' }.freeze,
enable_custom_emoji: { target_type: 'CustomEmoji', action: 'enable' }.freeze,

View File

@ -43,14 +43,14 @@ class Form::Import
validate :validate_data
def guessed_type
return :muting if csv_data.headers.include?('Hide notifications')
return :following if csv_data.headers.include?('Show boosts') || csv_data.headers.include?('Notify on new posts') || csv_data.headers.include?('Languages')
return :following if data.original_filename&.start_with?('follows') || data.original_filename&.start_with?('following_accounts')
return :blocking if data.original_filename&.start_with?('blocks') || data.original_filename&.start_with?('blocked_accounts')
return :muting if data.original_filename&.start_with?('mutes') || data.original_filename&.start_with?('muted_accounts')
return :domain_blocking if data.original_filename&.start_with?('domain_blocks') || data.original_filename&.start_with?('blocked_domains')
return :bookmarks if data.original_filename&.start_with?('bookmarks')
return :lists if data.original_filename&.start_with?('lists')
return :muting if csv_headers_match?('Hide notifications')
return :following if csv_headers_match?('Show boosts') || csv_headers_match?('Notify on new posts') || csv_headers_match?('Languages')
return :following if file_name_matches?('follows') || file_name_matches?('following_accounts')
return :blocking if file_name_matches?('blocks') || file_name_matches?('blocked_accounts')
return :muting if file_name_matches?('mutes') || file_name_matches?('muted_accounts')
return :domain_blocking if file_name_matches?('domain_blocks') || file_name_matches?('blocked_domains')
return :bookmarks if file_name_matches?('bookmarks')
return :lists if file_name_matches?('lists')
end
# Whether the uploaded CSV file seems to correspond to a different import type than the one selected
@ -79,6 +79,14 @@ class Form::Import
private
def file_name_matches?(string)
data.original_filename&.start_with?(string)
end
def csv_headers_match?(string)
csv_data.headers.include?(string)
end
def default_csv_headers
case type.to_sym
when :following, :blocking, :muting

View File

@ -114,7 +114,7 @@ class RelationshipFilter
def activity_scope(value)
case value
when 'dormant'
AccountStat.where(last_status_at: nil).or(AccountStat.where(AccountStat.arel_table[:last_status_at].lt(1.month.ago)))
Account.joins(:account_stat).where(account_stat: { last_status_at: [nil, ...1.month.ago] })
else
raise Mastodon::InvalidParameterError, "Unknown activity: #{value}"
end

View File

@ -19,7 +19,7 @@ class ReportFilter
scope = Report.unresolved
params.each do |key, value|
scope = scope.merge scope_for(key, value), rewhere: true
scope = scope.merge scope_for(key, value)
end
scope

View File

@ -1,7 +1,7 @@
# frozen_string_literal: true
class BackupPolicy < ApplicationPolicy
MIN_AGE = 1.week
MIN_AGE = 6.days
def create?
user_signed_in? && current_user.backups.where('created_at >= ?', MIN_AGE.ago).count.zero?

View File

@ -84,6 +84,10 @@ class ManifestSerializer < ActiveModel::Serializer
name: 'Notifications',
url: '/notifications',
},
{
name: 'Explore',
url: '/explore',
},
]
end
end

View File

@ -35,11 +35,13 @@ class SoftwareUpdateCheckService < BaseService
end
def process_update_notices!(update_notices)
return if update_notices.blank? || update_notices['updatesAvailable'].blank?
return if update_notices.blank? || update_notices['updatesAvailable'].nil?
# Clear notices that are not listed by the update server anymore
SoftwareUpdate.where.not(version: update_notices['updatesAvailable'].pluck('version')).delete_all
return if update_notices['updatesAvailable'].blank?
# Check if any of the notices is new, and issue notifications
known_versions = SoftwareUpdate.where(version: update_notices['updatesAvailable'].pluck('version')).pluck(:version)
new_update_notices = update_notices['updatesAvailable'].filter { |notice| known_versions.exclude?(notice['version']) }

View File

@ -72,7 +72,7 @@
.dashboard__counters__label= t 'admin.accounts.login_status'
- if @account.local? && @account.user.nil?
= link_to t('admin.accounts.unblock_email'), unblock_email_admin_account_path(@account.id), method: :post, class: 'button' if can?(:unblock_email, @account) && CanonicalEmailBlock.where(reference_account_id: @account.id).exists?
= link_to t('admin.accounts.unblock_email'), unblock_email_admin_account_path(@account.id), method: :post, class: 'button' if can?(:unblock_email, @account) && CanonicalEmailBlock.exists?(reference_account_id: @account.id)
- else
.table-wrapper
%table.table.inline-table

View File

@ -5,8 +5,8 @@
= render 'shared/error_messages', object: @announcement
.fields-group
= f.input :starts_at, include_blank: true, wrapper: :with_block_label, html5: true, input_html: { pattern: '[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}(:[0-9]{2}){1,2}', placeholder: Time.now.strftime('%FT%R') }
= f.input :ends_at, include_blank: true, wrapper: :with_block_label, html5: true, input_html: { pattern: '[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}(:[0-9]{2}){1,2}', placeholder: Time.now.strftime('%FT%R') }
= f.input :starts_at, include_blank: true, wrapper: :with_block_label, html5: true, input_html: { pattern: datetime_pattern, placeholder: datetime_placeholder }
= f.input :ends_at, include_blank: true, wrapper: :with_block_label, html5: true, input_html: { pattern: datetime_pattern, placeholder: datetime_placeholder }
.fields-group
= f.input :all_day, as: :boolean, wrapper: :with_label
@ -16,7 +16,7 @@
- unless @announcement.published?
.fields-group
= f.input :scheduled_at, include_blank: true, wrapper: :with_block_label, html5: true, input_html: { pattern: '[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}(:[0-9]{2}){1,2}', placeholder: Time.now.strftime('%FT%R') }
= f.input :scheduled_at, include_blank: true, wrapper: :with_block_label, html5: true, input_html: { pattern: datetime_pattern, placeholder: datetime_placeholder }
.actions
= f.button :button, t('generic.save_changes'), type: :submit

View File

@ -5,8 +5,8 @@
= render 'shared/error_messages', object: @announcement
.fields-group
= f.input :starts_at, include_blank: true, wrapper: :with_block_label, html5: true, input_html: { pattern: '[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}(:[0-9]{2}){1,2}', placeholder: Time.now.strftime('%FT%R') }
= f.input :ends_at, include_blank: true, wrapper: :with_block_label, html5: true, input_html: { pattern: '[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}(:[0-9]{2}){1,2}', placeholder: Time.now.strftime('%FT%R') }
= f.input :starts_at, include_blank: true, wrapper: :with_block_label, html5: true, input_html: { pattern: datetime_pattern, placeholder: datetime_placeholder }
= f.input :ends_at, include_blank: true, wrapper: :with_block_label, html5: true, input_html: { pattern: datetime_pattern, placeholder: datetime_placeholder }
.fields-group
= f.input :all_day, as: :boolean, wrapper: :with_label
@ -15,7 +15,7 @@
= f.input :text, wrapper: :with_block_label
.fields-group
= f.input :scheduled_at, include_blank: true, wrapper: :with_block_label, html5: true, input_html: { pattern: '[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}(:[0-9]{2}){1,2}', placeholder: Time.now.strftime('%FT%R') }
= f.input :scheduled_at, include_blank: true, wrapper: :with_block_label, html5: true, input_html: { pattern: datetime_pattern, placeholder: datetime_placeholder }
.actions
= f.button :button, t('.create'), type: :submit

View File

@ -14,7 +14,8 @@
- if policy(:invite).create?
%p= t('invites.prompt')
= render 'invites/form'
= simple_form_for(@invite, url: admin_invites_path) do |form|
= render partial: 'invites/form', object: form
%hr.spacer/

View File

@ -61,7 +61,7 @@
= fa_icon 'link'
= media_attachment.file_file_name
.strike-card__statuses-list__item__meta
= link_to ActivityPub::TagManager.instance.url_for(status), target: '_blank' do
= link_to ActivityPub::TagManager.instance.url_for(status), target: '_blank', rel: 'noopener noreferrer' do
%time.formatted{ datetime: status.created_at.iso8601, title: l(status.created_at) }= l(status.created_at)
- unless status.application.nil?
·

View File

@ -1,40 +1,36 @@
= simple_form_for @role, url: @role.new_record? ? admin_roles_path : admin_role_path(@role) do |f|
= render 'shared/error_messages', object: @role
= render 'shared/error_messages', object: form.object
- if @role.everyone?
.flash-message.info
= t('admin.roles.everyone_full_description_html')
- else
- if form.object.everyone?
.flash-message.info
= t('admin.roles.everyone_full_description_html')
- else
.fields-group
= form.input :name, wrapper: :with_label
- unless current_user.role == form.object
.fields-group
= f.input :name, wrapper: :with_label
= form.input :position, wrapper: :with_label, input_html: { max: current_user.role.position - 1 }
- unless current_user.role.id == @role.id
.fields-group
= f.input :position, wrapper: :with_label, input_html: { max: current_user.role.position - 1 }
.fields-group
= form.input :color, wrapper: :with_label, input_html: { placeholder: '#000000', type: 'color' }
.fields-group
= f.input :color, wrapper: :with_label, input_html: { placeholder: '#000000', type: 'color' }
%hr.spacer/
%hr.spacer/
.fields-group
= form.input :highlighted, wrapper: :with_label
.fields-group
= f.input :highlighted, wrapper: :with_label
%hr.spacer/
%hr.spacer/
- unless current_user.role == form.object
- unless current_user.role.id == @role.id
.field-group
.input.with_block_label
%label= t('simple_form.labels.user_role.permissions_as_keys')
%span.hint= t('simple_form.hints.user_role.permissions_as_keys')
.field-group
.input.with_block_label
%label= t('simple_form.labels.user_role.permissions_as_keys')
%span.hint= t('simple_form.hints.user_role.permissions_as_keys')
- (form.object.everyone? ? UserRole::Flags::CATEGORIES.slice(:invites) : UserRole::Flags::CATEGORIES).each do |category, permissions|
%h4= t(category, scope: 'admin.roles.categories')
- (@role.everyone? ? UserRole::Flags::CATEGORIES.slice(:invites) : UserRole::Flags::CATEGORIES).each do |category, permissions|
%h4= t(category, scope: 'admin.roles.categories')
= form.input :permissions_as_keys, collection: permissions, wrapper: :with_block_label, include_blank: false, label_method: ->(privilege) { safe_join([t("admin.roles.privileges.#{privilege}"), content_tag(:span, t("admin.roles.privileges.#{privilege}_description"), class: 'hint')]) }, required: false, as: :check_boxes, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li', label: false, hint: false, disabled: permissions.filter { |privilege| UserRole::FLAGS[privilege] & current_user.role.computed_permissions == 0 }
= f.input :permissions_as_keys, collection: permissions, wrapper: :with_block_label, include_blank: false, label_method: ->(privilege) { safe_join([t("admin.roles.privileges.#{privilege}"), content_tag(:span, t("admin.roles.privileges.#{privilege}_description"), class: 'hint')]) }, required: false, as: :check_boxes, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li', label: false, hint: false, disabled: permissions.filter { |privilege| UserRole::FLAGS[privilege] & current_user.role.computed_permissions == 0 }
%hr.spacer/
.actions
= f.button :button, @role.new_record? ? t('admin.roles.add_new') : t('generic.save_changes'), type: :submit
%hr.spacer/

View File

@ -4,4 +4,7 @@
- content_for :heading_actions do
= link_to t('admin.roles.delete'), admin_role_path(@role), method: :delete, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button button--destructive' if can?(:destroy, @role)
= render partial: 'form'
= simple_form_for @role, url: admin_role_path(@role) do |form|
= render partial: 'form', object: form
.actions
= form.button :button, t('generic.save_changes'), type: :submit

View File

@ -1,4 +1,7 @@
- content_for :page_title do
= t('admin.roles.add_new')
= render partial: 'form'
= simple_form_for @role, url: admin_roles_path do |form|
= render partial: 'form', object: form
.actions
= form.button :button, t('admin.roles.add_new'), type: :submit

View File

@ -2,7 +2,7 @@
= t('statuses.title', name: display_name(@account), quote: truncate(@status.spoiler_text.presence || @status.text, length: 50, omission: '…', escape: false))
- content_for :heading_actions do
= link_to t('admin.statuses.open'), ActivityPub::TagManager.instance.url_for(@status), class: 'button', target: '_blank'
= link_to t('admin.statuses.open'), ActivityPub::TagManager.instance.url_for(@status), class: 'button', target: '_blank', rel: 'noopener noreferrer'
%h3= t('admin.statuses.metadata')

View File

@ -9,7 +9,7 @@
.dashboard
.dashboard__item
= react_admin_component :counter, measure: 'tag_accounts', start_at: @time_period.first, end_at: @time_period.last, params: { id: @tag.id }, label: t('admin.trends.tags.dashboard.tag_accounts_measure'), href: tag_url(@tag), target: '_blank'
= react_admin_component :counter, measure: 'tag_accounts', start_at: @time_period.first, end_at: @time_period.last, params: { id: @tag.id }, label: t('admin.trends.tags.dashboard.tag_accounts_measure'), href: tag_url(@tag), target: '_blank', rel: 'noopener noreferrer'
.dashboard__item
= react_admin_component :counter, measure: 'tag_uses', start_at: @time_period.first, end_at: @time_period.last, params: { id: @tag.id }, label: t('admin.trends.tags.dashboard.tag_uses_measure')
.dashboard__item

View File

@ -1,14 +1,10 @@
= simple_form_for @webhook, url: @webhook.new_record? ? admin_webhooks_path : admin_webhook_path(@webhook) do |f|
= render 'shared/error_messages', object: @webhook
= render 'shared/error_messages', object: form.object
.fields-group
= f.input :url, wrapper: :with_block_label, input_html: { placeholder: 'https://' }
.fields-group
= form.input :url, wrapper: :with_block_label, input_html: { placeholder: 'https://' }
.fields-group
= f.input :events, collection: Webhook::EVENTS, wrapper: :with_block_label, include_blank: false, as: :check_boxes, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li', disabled: Webhook::EVENTS.filter { |event| !current_user.role.can?(Webhook.permission_for_event(event)) }
.fields-group
= form.input :events, collection: Webhook::EVENTS, wrapper: :with_block_label, include_blank: false, as: :check_boxes, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li', disabled: Webhook::EVENTS.filter { |event| !current_user.role.can?(Webhook.permission_for_event(event)) }
.fields-group
= f.input :template, wrapper: :with_block_label, input_html: { placeholder: '{ "content": "Hello {{object.username}}" }' }
.actions
= f.button :button, @webhook.new_record? ? t('admin.webhooks.add_new') : t('generic.save_changes'), type: :submit
.fields-group
= form.input :template, wrapper: :with_block_label, input_html: { placeholder: '{ "content": "Hello {{object.username}}" }' }

View File

@ -1,4 +1,7 @@
- content_for :page_title do
= t('admin.webhooks.edit')
= render partial: 'form'
= simple_form_for @webhook, url: admin_webhook_path(@webhook) do |form|
= render partial: 'form', object: form
.actions
= form.button :button, t('generic.save_changes'), type: :submit

View File

@ -1,4 +1,7 @@
- content_for :page_title do
= t('admin.webhooks.new')
= render partial: 'form'
= simple_form_for @webhook, url: admin_webhooks_path do |form|
= render partial: 'form', object: form
.actions
= form.button :button, t('admin.webhooks.add_new'), type: :submit

View File

@ -26,7 +26,7 @@
= f.input :confirm_password, as: :string, placeholder: t('simple_form.labels.defaults.honeypot', label: t('simple_form.labels.defaults.password')), required: false, input_html: { 'aria-label': t('simple_form.labels.defaults.honeypot', label: t('simple_form.labels.defaults.password')), autocomplete: 'off' }, hint: false
= f.input :website, as: :url, wrapper: :with_label, label: t('simple_form.labels.defaults.honeypot', label: 'Website'), required: false, input_html: { 'aria-label': t('simple_form.labels.defaults.honeypot', label: 'Website'), autocomplete: 'off' }
- if approved_registrations? && !@invite.present?
- if approved_registrations? && @invite.blank?
%p.lead= t('auth.sign_up.manual_review', domain: site_hostname)
.fields-group

View File

@ -25,7 +25,7 @@
- unless @strike.none_action?
%p= t "user_mailer.warning.explanation.#{@strike.action}", instance: Rails.configuration.x.local_domain
- unless @strike.text.blank?
- if @strike.text.present?
= linkify(@strike.text)
- if @strike.report && !@strike.report.other?
@ -57,7 +57,7 @@
= fa_icon 'link'
= media_attachment.file_file_name
.strike-card__statuses-list__item__meta
= link_to ActivityPub::TagManager.instance.url_for(status), target: '_blank' do
= link_to ActivityPub::TagManager.instance.url_for(status), target: '_blank', rel: 'noopener noreferrer' do
%time.formatted{ datetime: status.created_at.iso8601, title: l(status.created_at) }= l(status.created_at)
- unless status.application.nil?
·

View File

@ -1,14 +1,13 @@
= simple_form_for(@invite, url: controller.is_a?(Admin::InvitesController) ? admin_invites_path : invites_path) do |f|
= render 'shared/error_messages', object: @invite
= render 'shared/error_messages', object: form.object
.fields-row
.fields-row__column.fields-row__column-6.fields-group
= f.input :max_uses, wrapper: :with_label, collection: [1, 5, 10, 25, 50, 100], label_method: ->(num) { I18n.t('invites.max_uses', count: num) }, prompt: I18n.t('invites.max_uses_prompt')
.fields-row__column.fields-row__column-6.fields-group
= f.input :expires_in, wrapper: :with_label, collection: [30.minutes, 1.hour, 6.hours, 12.hours, 1.day, 1.week].map(&:to_i), label_method: ->(i) { I18n.t("invites.expires_in.#{i}") }, prompt: I18n.t('invites.expires_in_prompt')
.fields-row
.fields-row__column.fields-row__column-6.fields-group
= form.input :max_uses, wrapper: :with_label, collection: invites_max_uses_options, label_method: ->(num) { I18n.t('invites.max_uses', count: num) }, prompt: I18n.t('invites.max_uses_prompt')
.fields-row__column.fields-row__column-6.fields-group
= form.input :expires_in, wrapper: :with_label, collection: invites_expires_options.map(&:to_i), label_method: ->(i) { I18n.t("invites.expires_in.#{i}") }, prompt: I18n.t('invites.expires_in_prompt')
.fields-group
= f.input :autofollow, wrapper: :with_label
.fields-group
= form.input :autofollow, wrapper: :with_label
.actions
= f.button :button, t('invites.generate'), type: :submit
.actions
= form.button :button, t('invites.generate'), type: :submit

View File

@ -4,7 +4,8 @@
- if policy(:invite).create?
%p= t('invites.prompt')
= render 'form'
= simple_form_for(@invite, url: invites_path) do |form|
= render partial: 'form', object: form
%hr.spacer/

View File

@ -7,8 +7,7 @@
= simple_form_for current_user, url: settings_preferences_appearance_path, html: { method: :put, id: 'edit_user' } do |f|
.fields-row
.fields-group.fields-row__column.fields-row__column-6
= f.input :locale, collection: I18n.available_locales, wrapper: :with_label, include_blank: false, label_method: ->(locale) { native_locale_name(locale) }, selected: I18n.locale, hint: false
= f.input :locale, collection: ui_languages, wrapper: :with_label, include_blank: false, label_method: ->(locale) { native_locale_name(locale) }, selected: I18n.locale, hint: false
.fields-group.fields-row__column.fields-row__column-6
= f.input :time_zone, wrapper: :with_label, collection: ActiveSupport::TimeZone.all.map { |tz| ["(GMT#{tz.formatted_offset}) #{tz.name}", tz.tzinfo.name] }, hint: false

View File

@ -1,12 +1,12 @@
- thumbnail = @instance_presenter.thumbnail
- description ||= @instance_presenter.description.presence || strip_tags(t('about.about_mastodon_html'))
- thumbnail = instance_presenter.thumbnail
- description ||= instance_presenter.description.presence || strip_tags(t('about.about_mastodon_html'))
%meta{ name: 'description', content: description }/
= opengraph 'og:site_name', t('about.hosted_on', domain: site_hostname)
= opengraph 'og:url', url_for(only_path: false)
= opengraph 'og:type', 'website'
= opengraph 'og:title', @instance_presenter.title
= opengraph 'og:title', instance_presenter.title
= opengraph 'og:description', description
= opengraph 'og:image', full_asset_url(thumbnail&.file&.url(:'@1x') || asset_pack_path('media/images/preview.png', protocol: :request))
= opengraph 'og:image:width', thumbnail ? thumbnail.meta['width'] : '1200'

View File

@ -77,4 +77,4 @@
- if user_signed_in?
·
= link_to t('statuses.open_in_web'), web_url("@#{status.account.pretty_acct}/#{status.id}"), class: 'detailed-status__application', target: '_blank'
= link_to t('statuses.open_in_web'), web_url("@#{status.account.pretty_acct}/#{status.id}"), class: 'detailed-status__application', target: '_blank', rel: 'noopener noreferrer'

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