Merge branch 'main' into glitch-soc/merge-upstream

Conflicts:
- `package.json`:
  Upstream removed a dependency that was textually close to a glitch-soc-only
  dependency.
  Removed the dependency as upstream did, while keeping the glitch-soc-only
  dependency.
local
Claire 1 year ago
commit ce12934f5b
  1. 10
      .devcontainer/post-create.sh
  2. 17
      .github/workflows/check-i18n.yml
  3. 9
      .github/workflows/lint-js.yml
  4. 2
      .nvmrc
  5. 2
      .prettierignore
  6. 14
      CHANGELOG.md
  7. 3
      Dockerfile
  8. 6
      Gemfile
  9. 26
      Gemfile.lock
  10. 2
      app/controllers/backups_controller.rb
  11. 9
      app/controllers/settings/two_factor_authentication/otp_authentication_controller.rb
  12. 2
      app/javascript/mastodon/actions/markers.js
  13. 5
      app/javascript/mastodon/base_polyfills.js
  14. 4
      app/javascript/mastodon/components/admin/ReportReasonSelector.jsx
  15. 2
      app/javascript/mastodon/components/autosuggest_input.jsx
  16. 2
      app/javascript/mastodon/components/autosuggest_textarea.jsx
  17. 2
      app/javascript/mastodon/components/column_back_button_slim.jsx
  18. 2
      app/javascript/mastodon/components/dropdown_menu.jsx
  19. 4
      app/javascript/mastodon/components/gifv.jsx
  20. 4
      app/javascript/mastodon/components/icon_button.jsx
  21. 4
      app/javascript/mastodon/components/intersection_observer_article.jsx
  22. 2
      app/javascript/mastodon/components/picture_in_picture_placeholder.jsx
  23. 2
      app/javascript/mastodon/components/poll.jsx
  24. 4
      app/javascript/mastodon/components/status.jsx
  25. 6
      app/javascript/mastodon/components/status_content.jsx
  26. 2
      app/javascript/mastodon/containers/media_container.jsx
  27. 2
      app/javascript/mastodon/features/about/index.jsx
  28. 8
      app/javascript/mastodon/features/audio/index.jsx
  29. 2
      app/javascript/mastodon/features/compose/components/language_dropdown.jsx
  30. 2
      app/javascript/mastodon/features/compose/components/poll_form.jsx
  31. 2
      app/javascript/mastodon/features/compose/components/privacy_dropdown.jsx
  32. 2
      app/javascript/mastodon/features/compose/components/search.jsx
  33. 2
      app/javascript/mastodon/features/compose/components/upload.jsx
  34. 2
      app/javascript/mastodon/features/direct_timeline/components/conversation.jsx
  35. 4
      app/javascript/mastodon/features/direct_timeline/components/conversations_list.jsx
  36. 2
      app/javascript/mastodon/features/direct_timeline/index.jsx
  37. 4
      app/javascript/mastodon/features/emoji/emoji.js
  38. 4
      app/javascript/mastodon/features/filters/select_filter.jsx
  39. 2
      app/javascript/mastodon/features/getting_started/components/announcements.jsx
  40. 2
      app/javascript/mastodon/features/list_editor/components/search.jsx
  41. 2
      app/javascript/mastodon/features/list_editor/index.jsx
  42. 4
      app/javascript/mastodon/features/list_timeline/index.jsx
  43. 2
      app/javascript/mastodon/features/notifications/components/clear_column_button.jsx
  44. 2
      app/javascript/mastodon/features/notifications/components/grant_permission_button.jsx
  45. 18
      app/javascript/mastodon/features/notifications/components/notification.jsx
  46. 2
      app/javascript/mastodon/features/report/components/option.jsx
  47. 2
      app/javascript/mastodon/features/status/index.jsx
  48. 2
      app/javascript/mastodon/features/ui/components/actions_modal.jsx
  49. 4
      app/javascript/mastodon/features/ui/components/media_modal.jsx
  50. 2
      app/javascript/mastodon/features/ui/components/modal_root.jsx
  51. 6
      app/javascript/mastodon/features/video/index.jsx
  52. 2
      app/javascript/mastodon/initial_state.js
  53. 1
      app/javascript/mastodon/load_polyfills.js
  54. 14
      app/javascript/mastodon/locales/ast.json
  55. 18
      app/javascript/mastodon/locales/be.json
  56. 16
      app/javascript/mastodon/locales/ca.json
  57. 94
      app/javascript/mastodon/locales/ckb.json
  58. 30
      app/javascript/mastodon/locales/cs.json
  59. 16
      app/javascript/mastodon/locales/da.json
  60. 16
      app/javascript/mastodon/locales/de.json
  61. 16
      app/javascript/mastodon/locales/el.json
  62. 18
      app/javascript/mastodon/locales/eo.json
  63. 16
      app/javascript/mastodon/locales/es-AR.json
  64. 16
      app/javascript/mastodon/locales/es-MX.json
  65. 28
      app/javascript/mastodon/locales/es.json
  66. 18
      app/javascript/mastodon/locales/et.json
  67. 16
      app/javascript/mastodon/locales/eu.json
  68. 38
      app/javascript/mastodon/locales/fa.json
  69. 24
      app/javascript/mastodon/locales/fi.json
  70. 16
      app/javascript/mastodon/locales/fo.json
  71. 16
      app/javascript/mastodon/locales/fy.json
  72. 16
      app/javascript/mastodon/locales/gl.json
  73. 16
      app/javascript/mastodon/locales/he.json
  74. 16
      app/javascript/mastodon/locales/hi.json
  75. 16
      app/javascript/mastodon/locales/hu.json
  76. 16
      app/javascript/mastodon/locales/is.json
  77. 16
      app/javascript/mastodon/locales/it.json
  78. 16
      app/javascript/mastodon/locales/ja.json
  79. 16
      app/javascript/mastodon/locales/ko.json
  80. 16
      app/javascript/mastodon/locales/lv.json
  81. 34
      app/javascript/mastodon/locales/my.json
  82. 22
      app/javascript/mastodon/locales/nl.json
  83. 16
      app/javascript/mastodon/locales/pl.json
  84. 16
      app/javascript/mastodon/locales/pt-BR.json
  85. 16
      app/javascript/mastodon/locales/pt-PT.json
  86. 16
      app/javascript/mastodon/locales/sq.json
  87. 18
      app/javascript/mastodon/locales/th.json
  88. 20
      app/javascript/mastodon/locales/tr.json
  89. 16
      app/javascript/mastodon/locales/uk.json
  90. 16
      app/javascript/mastodon/locales/vi.json
  91. 42
      app/javascript/mastodon/locales/zh-CN.json
  92. 16
      app/javascript/mastodon/locales/zh-TW.json
  93. 9
      app/javascript/packs/public.jsx
  94. 8
      app/javascript/styles/mastodon/accounts.scss
  95. 6
      app/javascript/styles/mastodon/admin.scss
  96. 26
      app/javascript/styles/mastodon/components.scss
  97. 2
      app/javascript/styles/mastodon/rich_text.scss
  98. 12
      app/javascript/styles/mastodon/rtl.scss
  99. 4
      app/javascript/styles/mastodon/tables.scss
  100. 1
      app/services/notify_service.rb
  101. Some files were not shown because too many files have changed in this diff Show More

@ -3,14 +3,16 @@
set -e # Fail the whole script on first error set -e # Fail the whole script on first error
# Fetch Ruby gem dependencies # Fetch Ruby gem dependencies
bundle install --path vendor/bundle --with='development test' bundle config path 'vendor/bundle'
bundle config with 'development test'
# Fetch Javascript dependencies bundle install
yarn install
# Make Gemfile.lock pristine again # Make Gemfile.lock pristine again
git checkout -- Gemfile.lock git checkout -- Gemfile.lock
# Fetch Javascript dependencies
yarn --frozen-lockfile
# [re]create, migrate, and seed the test database # [re]create, migrate, and seed the test database
RAILS_ENV=test ./bin/rails db:setup RAILS_ENV=test ./bin/rails db:setup

@ -30,13 +30,28 @@ jobs:
ruby-version: .ruby-version ruby-version: .ruby-version
bundler-cache: true bundler-cache: true
- name: Set up Node.js
uses: actions/setup-node@v3
with:
cache: yarn
node-version-file: '.nvmrc'
- name: Install all yarn packages
run: yarn --frozen-lockfile
- name: Check for missing strings in English JSON
run: |
yarn build:development
yarn manage:translations
git diff --exit-code
- name: Check locale file normalization - name: Check locale file normalization
run: bundle exec i18n-tasks check-normalized run: bundle exec i18n-tasks check-normalized
- name: Check for unused strings - name: Check for unused strings
run: bundle exec i18n-tasks unused run: bundle exec i18n-tasks unused
- name: Check for missing strings in English - name: Check for missing strings in English YML
run: | run: |
bundle exec i18n-tasks add-missing -l en bundle exec i18n-tasks add-missing -l en
git diff --exit-code git diff --exit-code

@ -6,22 +6,28 @@ on:
paths: paths:
- 'package.json' - 'package.json'
- 'yarn.lock' - 'yarn.lock'
- 'tsconfig.json'
- '.nvmrc' - '.nvmrc'
- '.prettier*' - '.prettier*'
- '.eslint*' - '.eslint*'
- '**/*.js' - '**/*.js'
- '**/*.jsx' - '**/*.jsx'
- '**/*.ts'
- '**/*.tsx'
- '.github/workflows/lint-js.yml' - '.github/workflows/lint-js.yml'
pull_request: pull_request:
paths: paths:
- 'package.json' - 'package.json'
- 'yarn.lock' - 'yarn.lock'
- 'tsconfig.json'
- '.nvmrc' - '.nvmrc'
- '.prettier*' - '.prettier*'
- '.eslint*' - '.eslint*'
- '**/*.js' - '**/*.js'
- '**/*.jsx' - '**/*.jsx'
- '**/*.ts'
- '**/*.tsx'
- '.github/workflows/lint-js.yml' - '.github/workflows/lint-js.yml'
jobs: jobs:
@ -43,3 +49,6 @@ jobs:
- name: ESLint - name: ESLint
run: yarn test:lint:js run: yarn test:lint:js
- name: Typecheck
run: yarn test:typecheck

@ -1 +1 @@
16.19 16.20

@ -70,6 +70,8 @@ app/javascript/styles/mastodon/reset.scss
# Ignore Javascript pending https://github.com/mastodon/mastodon/pull/23631 # Ignore Javascript pending https://github.com/mastodon/mastodon/pull/23631
*.js *.js
*.jsx *.jsx
*.ts
*.tsx
# Ignore HTML till cleaned and included in CI # Ignore HTML till cleaned and included in CI
*.html *.html

@ -2,6 +2,20 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
## [4.1.2] - 2023-04-04
### Fixed
- Fix crash in `tootctl` commands making use of parallelization when Elasticsearch is enabled ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24182), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24377))
- Fix crash in `db:setup` when Elasticsearch is enabled ([rrgeorge](https://github.com/mastodon/mastodon/pull/24302))
- Fix user archive takeout when using OpenStack Swift or S3 providers with no ACL support ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24200))
- Fix invalid/expired invites being processed on sign-up ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24337))
### Security
- Update Ruby to 3.0.6 due to ReDoS vulnerabilities ([saizai](https://github.com/mastodon/mastodon/pull/24334))
- Fix unescaped user input in LDAP query ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24379))
## [4.1.1] - 2023-03-16 ## [4.1.1] - 2023-03-16
### Added ### Added

@ -1,6 +1,6 @@
# syntax=docker/dockerfile:1.4 # syntax=docker/dockerfile:1.4
# This needs to be bullseye-slim because the Ruby image is built on bullseye-slim # This needs to be bullseye-slim because the Ruby image is built on bullseye-slim
ARG NODE_VERSION="16.19-bullseye-slim" ARG NODE_VERSION="16.20-bullseye-slim"
FROM ghcr.io/moritzheiber/ruby-jemalloc:3.2.2-slim as ruby FROM ghcr.io/moritzheiber/ruby-jemalloc:3.2.2-slim as ruby
FROM node:${NODE_VERSION} as build FROM node:${NODE_VERSION} as build
@ -18,7 +18,6 @@ COPY Gemfile* package.json yarn.lock /opt/mastodon/
# hadolint ignore=DL3008 # hadolint ignore=DL3008
RUN apt-get update && \ RUN apt-get update && \
apt-get install -y --no-install-recommends build-essential \ apt-get install -y --no-install-recommends build-essential \
ca-certificates \
git \ git \
libicu-dev \ libicu-dev \
libidn11-dev \ libidn11-dev \

@ -5,7 +5,7 @@ ruby '>= 2.7.0', '< 3.3.0'
gem 'pkg-config', '~> 1.5' gem 'pkg-config', '~> 1.5'
gem 'puma', '~> 6.1' gem 'puma', '~> 6.2'
gem 'rails', '~> 6.1.7' gem 'rails', '~> 6.1.7'
gem 'sprockets', '~> 3.7.2' gem 'sprockets', '~> 3.7.2'
gem 'thor', '~> 1.2' gem 'thor', '~> 1.2'
@ -17,7 +17,7 @@ gem 'makara', '~> 0.5'
gem 'pghero' gem 'pghero'
gem 'dotenv-rails', '~> 2.8' gem 'dotenv-rails', '~> 2.8'
gem 'aws-sdk-s3', '~> 1.119', require: false gem 'aws-sdk-s3', '~> 1.120', require: false
gem 'fog-core', '<= 2.4.0' gem 'fog-core', '<= 2.4.0'
gem 'fog-openstack', '~> 0.3', require: false gem 'fog-openstack', '~> 0.3', require: false
gem 'kt-paperclip', '~> 7.1', github: 'kreeti/kt-paperclip', ref: '11abf222dc31bff71160a1d138b445214f434b2b' gem 'kt-paperclip', '~> 7.1', github: 'kreeti/kt-paperclip', ref: '11abf222dc31bff71160a1d138b445214f434b2b'
@ -118,7 +118,7 @@ group :production, :test do
end end
group :test do group :test do
gem 'capybara', '~> 3.38' gem 'capybara', '~> 3.39'
gem 'climate_control' gem 'climate_control'
gem 'faker', '~> 3.1' gem 'faker', '~> 3.1'
gem 'json-schema', '~> 3.0' gem 'json-schema', '~> 3.0'

@ -94,7 +94,7 @@ GEM
minitest (>= 5.1) minitest (>= 5.1)
tzinfo (~> 2.0) tzinfo (~> 2.0)
zeitwerk (~> 2.3) zeitwerk (~> 2.3)
addressable (2.8.1) addressable (2.8.2)
public_suffix (>= 2.0.2, < 6.0) public_suffix (>= 2.0.2, < 6.0)
aes_key_wrap (1.1.0) aes_key_wrap (1.1.0)
airbrussh (1.4.1) airbrussh (1.4.1)
@ -109,7 +109,7 @@ GEM
attr_required (1.0.1) attr_required (1.0.1)
awrence (1.2.1) awrence (1.2.1)
aws-eventstream (1.2.0) aws-eventstream (1.2.0)
aws-partitions (1.735.0) aws-partitions (1.739.0)
aws-sdk-core (3.171.0) aws-sdk-core (3.171.0)
aws-eventstream (~> 1, >= 1.0.2) aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1, >= 1.651.0) aws-partitions (~> 1, >= 1.651.0)
@ -118,7 +118,7 @@ GEM
aws-sdk-kms (1.63.0) aws-sdk-kms (1.63.0)
aws-sdk-core (~> 3, >= 3.165.0) aws-sdk-core (~> 3, >= 3.165.0)
aws-sigv4 (~> 1.1) aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.119.2) aws-sdk-s3 (1.120.0)
aws-sdk-core (~> 3, >= 3.165.0) aws-sdk-core (~> 3, >= 3.165.0)
aws-sdk-kms (~> 1) aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.4) aws-sigv4 (~> 1.4)
@ -166,7 +166,7 @@ GEM
sshkit (~> 1.3) sshkit (~> 1.3)
capistrano-yarn (2.0.2) capistrano-yarn (2.0.2)
capistrano (~> 3.0) capistrano (~> 3.0)
capybara (3.38.0) capybara (3.39.0)
addressable addressable
matrix matrix
mini_mime (>= 0.1.3) mini_mime (>= 0.1.3)
@ -438,7 +438,7 @@ GEM
net-smtp (0.3.3) net-smtp (0.3.3)
net-protocol net-protocol
net-ssh (7.0.1) net-ssh (7.0.1)
nio4r (2.5.8) nio4r (2.5.9)
nokogiri (1.14.2) nokogiri (1.14.2)
mini_portile2 (~> 2.8.0) mini_portile2 (~> 2.8.0)
racc (~> 1.4) racc (~> 1.4)
@ -481,7 +481,7 @@ GEM
orm_adapter (0.5.0) orm_adapter (0.5.0)
ox (2.14.14) ox (2.14.14)
parallel (1.22.1) parallel (1.22.1)
parser (3.2.1.1) parser (3.2.2.0)
ast (~> 2.4.1) ast (~> 2.4.1)
parslet (2.0.0) parslet (2.0.0)
pastel (0.8.0) pastel (0.8.0)
@ -501,7 +501,7 @@ GEM
premailer (~> 1.7, >= 1.7.9) premailer (~> 1.7, >= 1.7.9)
private_address_check (0.5.0) private_address_check (0.5.0)
public_suffix (5.0.1) public_suffix (5.0.1)
puma (6.1.1) puma (6.2.1)
nio4r (~> 2.0) nio4r (~> 2.0)
pundit (2.3.0) pundit (2.3.0)
activesupport (>= 3.0.0) activesupport (>= 3.0.0)
@ -603,17 +603,17 @@ GEM
rspec_chunked (0.6) rspec_chunked (0.6)
rspec_junit_formatter (0.6.0) rspec_junit_formatter (0.6.0)
rspec-core (>= 2, < 4, != 2.12.0) rspec-core (>= 2, < 4, != 2.12.0)
rubocop (1.48.1) rubocop (1.49.0)
json (~> 2.3) json (~> 2.3)
parallel (~> 1.10) parallel (~> 1.10)
parser (>= 3.2.0.0) parser (>= 3.2.0.0)
rainbow (>= 2.2.2, < 4.0) rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 1.8, < 3.0) regexp_parser (>= 1.8, < 3.0)
rexml (>= 3.2.5, < 4.0) rexml (>= 3.2.5, < 4.0)
rubocop-ast (>= 1.26.0, < 2.0) rubocop-ast (>= 1.28.0, < 2.0)
ruby-progressbar (~> 1.7) ruby-progressbar (~> 1.7)
unicode-display_width (>= 2.4.0, < 3.0) unicode-display_width (>= 2.4.0, < 3.0)
rubocop-ast (1.27.0) rubocop-ast (1.28.0)
parser (>= 3.2.1.0) parser (>= 3.2.1.0)
rubocop-capybara (2.17.1) rubocop-capybara (2.17.1)
rubocop (~> 1.41) rubocop (~> 1.41)
@ -771,7 +771,7 @@ DEPENDENCIES
active_model_serializers (~> 0.10) active_model_serializers (~> 0.10)
addressable (~> 2.8) addressable (~> 2.8)
annotate (~> 3.2) annotate (~> 3.2)
aws-sdk-s3 (~> 1.119) aws-sdk-s3 (~> 1.120)
better_errors (~> 2.9) better_errors (~> 2.9)
binding_of_caller (~> 1.0) binding_of_caller (~> 1.0)
blurhash (~> 0.1) blurhash (~> 0.1)
@ -783,7 +783,7 @@ DEPENDENCIES
capistrano-rails (~> 1.6) capistrano-rails (~> 1.6)
capistrano-rbenv (~> 2.2) capistrano-rbenv (~> 2.2)
capistrano-yarn (~> 2.0) capistrano-yarn (~> 2.0)
capybara (~> 3.38) capybara (~> 3.39)
charlock_holmes (~> 0.7.7) charlock_holmes (~> 0.7.7)
chewy (~> 7.2) chewy (~> 7.2)
climate_control climate_control
@ -847,7 +847,7 @@ DEPENDENCIES
premailer-rails premailer-rails
private_address_check (~> 0.5) private_address_check (~> 0.5)
public_suffix (~> 5.0) public_suffix (~> 5.0)
puma (~> 6.1) puma (~> 6.2)
pundit (~> 2.3) pundit (~> 2.3)
rack (~> 2.2.6) rack (~> 2.2.6)
rack-attack (~> 6.6) rack-attack (~> 6.6)

@ -13,7 +13,7 @@ class BackupsController < ApplicationController
when :s3 when :s3
redirect_to @backup.dump.expiring_url(10) redirect_to @backup.dump.expiring_url(10)
when :fog when :fog
if Paperclip::Attachment.default_options.dig(:storage, :fog_credentials, :openstack_temp_url_key).present? if Paperclip::Attachment.default_options.dig(:fog_credentials, :openstack_temp_url_key).present?
redirect_to @backup.dump.expiring_url(Time.now.utc + 10) redirect_to @backup.dump.expiring_url(Time.now.utc + 10)
else else
redirect_to full_asset_url(@backup.dump.url) redirect_to full_asset_url(@backup.dump.url)

@ -22,18 +22,9 @@ module Settings
private private
def confirmation_params
params.require(:form_two_factor_confirmation).permit(:otp_attempt)
end
def verify_otp_not_enabled def verify_otp_not_enabled
redirect_to settings_two_factor_authentication_methods_path if current_user.otp_enabled? redirect_to settings_two_factor_authentication_methods_path if current_user.otp_enabled?
end end
def acceptable_code?
current_user.validate_and_consume_otp!(confirmation_params[:otp_attempt]) ||
current_user.invalidate_otp_backup_code!(confirmation_params[:otp_attempt])
end
end end
end end
end end

@ -55,7 +55,7 @@ export const synchronouslySubmitMarkers = () => (dispatch, getState) => {
client.open('POST', '/api/v1/markers', false); client.open('POST', '/api/v1/markers', false);
client.setRequestHeader('Content-Type', 'application/json'); client.setRequestHeader('Content-Type', 'application/json');
client.setRequestHeader('Authorization', `Bearer ${accessToken}`); client.setRequestHeader('Authorization', `Bearer ${accessToken}`);
client.SUBMIT(JSON.stringify(params)); client.send(JSON.stringify(params));
} catch (e) { } catch (e) {
// Do not make the BeforeUnload handler error out // Do not make the BeforeUnload handler error out
} }

@ -1,16 +1,11 @@
import 'intl'; import 'intl';
import 'intl/locale-data/jsonp/en'; import 'intl/locale-data/jsonp/en';
import 'es6-symbol/implement'; import 'es6-symbol/implement';
import includes from 'array-includes';
import assign from 'object-assign'; import assign from 'object-assign';
import values from 'object.values'; import values from 'object.values';
import { decode as decodeBase64 } from './utils/base64'; import { decode as decodeBase64 } from './utils/base64';
import promiseFinally from 'promise.prototype.finally'; import promiseFinally from 'promise.prototype.finally';
if (!Array.prototype.includes) {
includes.shim();
}
if (!Object.assign) { if (!Object.assign) {
Object.assign = assign; Object.assign = assign;
} }

@ -33,7 +33,7 @@ class Category extends React.PureComponent {
const { id, text, disabled, selected, children } = this.props; const { id, text, disabled, selected, children } = this.props;
return ( return (
<div tabIndex='0' role='button' className={classNames('report-reason-selector__category', { selected, disabled })} onClick={this.handleClick}> <div tabIndex={0} role='button' className={classNames('report-reason-selector__category', { selected, disabled })} onClick={this.handleClick}>
{selected && <input type='hidden' name='report[category]' value={id} />} {selected && <input type='hidden' name='report[category]' value={id} />}
<div className='report-reason-selector__category__label'> <div className='report-reason-selector__category__label'>
@ -74,7 +74,7 @@ class Rule extends React.PureComponent {
const { id, text, disabled, selected } = this.props; const { id, text, disabled, selected } = this.props;
return ( return (
<div tabIndex='0' role='button' className={classNames('report-reason-selector__rule', { selected, disabled })} onClick={this.handleClick}> <div tabIndex={0} role='button' className={classNames('report-reason-selector__rule', { selected, disabled })} onClick={this.handleClick}>
<span className={classNames('poll__input', { checkbox: true, active: selected, disabled })} /> <span className={classNames('poll__input', { checkbox: true, active: selected, disabled })} />
{selected && <input type='hidden' name='report[rule_ids][]' value={id} />} {selected && <input type='hidden' name='report[rule_ids][]' value={id} />}
{text} {text}

@ -180,7 +180,7 @@ export default class AutosuggestInput extends ImmutablePureComponent {
} }
return ( return (
<div role='button' tabIndex='0' key={key} data-index={i} className={classNames('autosuggest-textarea__suggestions__item', { selected: i === selectedSuggestion })} onMouseDown={this.onSuggestionClick}> <div role='button' tabIndex={0} key={key} data-index={i} className={classNames('autosuggest-textarea__suggestions__item', { selected: i === selectedSuggestion })} onMouseDown={this.onSuggestionClick}>
{inner} {inner}
</div> </div>
); );

@ -186,7 +186,7 @@ export default class AutosuggestTextarea extends ImmutablePureComponent {
} }
return ( return (
<div role='button' tabIndex='0' key={key} data-index={i} className={classNames('autosuggest-textarea__suggestions__item', { selected: i === selectedSuggestion })} onMouseDown={this.onSuggestionClick}> <div role='button' tabIndex={0} key={key} data-index={i} className={classNames('autosuggest-textarea__suggestions__item', { selected: i === selectedSuggestion })} onMouseDown={this.onSuggestionClick}>
{inner} {inner}
</div> </div>
); );

@ -8,7 +8,7 @@ export default class ColumnBackButtonSlim extends ColumnBackButton {
render () { render () {
return ( return (
<div className='column-back-button--slim'> <div className='column-back-button--slim'>
<div role='button' tabIndex='0' onClick={this.handleClick} className='column-back-button column-back-button--slim-button'> <div role='button' tabIndex={0} onClick={this.handleClick} className='column-back-button column-back-button--slim-button'>
<Icon id='chevron-left' className='column-back-button__icon' fixedWidth /> <Icon id='chevron-left' className='column-back-button__icon' fixedWidth />
<FormattedMessage id='column_back_button.label' defaultMessage='Back' /> <FormattedMessage id='column_back_button.label' defaultMessage='Back' />
</div> </div>

@ -119,7 +119,7 @@ class DropdownMenu extends React.PureComponent {
return ( return (
<li className='dropdown-menu__item' key={`${text}-${i}`}> <li className='dropdown-menu__item' key={`${text}-${i}`}>
<a href={href} target={target} data-method={method} rel='noopener noreferrer' role='button' tabIndex='0' ref={i === 0 ? this.setFocusRef : null} onClick={this.handleClick} onKeyPress={this.handleItemKeyPress} data-index={i}> <a href={href} target={target} data-method={method} rel='noopener noreferrer' role='button' tabIndex={0} ref={i === 0 ? this.setFocusRef : null} onClick={this.handleClick} onKeyPress={this.handleItemKeyPress} data-index={i}>
{text} {text}
</a> </a>
</li> </li>

@ -46,7 +46,7 @@ export default class GIFV extends React.PureComponent {
width={width} width={width}
height={height} height={height}
role='button' role='button'
tabIndex='0' tabIndex={0}
aria-label={alt} aria-label={alt}
title={alt} title={alt}
lang={lang} lang={lang}
@ -57,7 +57,7 @@ export default class GIFV extends React.PureComponent {
<video <video
src={src} src={src}
role='button' role='button'
tabIndex='0' tabIndex={0}
aria-label={alt} aria-label={alt}
title={alt} title={alt}
lang={lang} lang={lang}

@ -23,7 +23,7 @@ export default class IconButton extends React.PureComponent {
inverted: PropTypes.bool, inverted: PropTypes.bool,
animate: PropTypes.bool, animate: PropTypes.bool,
overlay: PropTypes.bool, overlay: PropTypes.bool,
tabIndex: PropTypes.string, tabIndex: PropTypes.number,
counter: PropTypes.number, counter: PropTypes.number,
obfuscateCount: PropTypes.bool, obfuscateCount: PropTypes.bool,
href: PropTypes.string, href: PropTypes.string,
@ -36,7 +36,7 @@ export default class IconButton extends React.PureComponent {
disabled: false, disabled: false,
animate: false, animate: false,
overlay: false, overlay: false,
tabIndex: '0', tabIndex: 0,
ariaHidden: false, ariaHidden: false,
}; };

@ -113,7 +113,7 @@ export default class IntersectionObserverArticle extends React.Component {
aria-setsize={listLength} aria-setsize={listLength}
style={{ height: `${this.height || cachedHeight}px`, opacity: 0, overflow: 'hidden' }} style={{ height: `${this.height || cachedHeight}px`, opacity: 0, overflow: 'hidden' }}
data-id={id} data-id={id}
tabIndex='0' tabIndex={0}
> >
{children && React.cloneElement(children, { hidden: true })} {children && React.cloneElement(children, { hidden: true })}
</article> </article>
@ -121,7 +121,7 @@ export default class IntersectionObserverArticle extends React.Component {
} }
return ( return (
<article ref={this.handleRef} aria-posinset={index + 1} aria-setsize={listLength} data-id={id} tabIndex='0'> <article ref={this.handleRef} aria-posinset={index + 1} aria-setsize={listLength} data-id={id} tabIndex={0}>
{children && React.cloneElement(children, { hidden: false })} {children && React.cloneElement(children, { hidden: false })}
</article> </article>
); );

@ -58,7 +58,7 @@ class PictureInPicturePlaceholder extends React.PureComponent {
const { height } = this.state; const { height } = this.state;
return ( return (
<div ref={this.setRef} className='picture-in-picture-placeholder' style={{ height }} role='button' tabIndex='0' onClick={this.handleClick}> <div ref={this.setRef} className='picture-in-picture-placeholder' style={{ height }} role='button' tabIndex={0} onClick={this.handleClick}>
<Icon id='window-restore' /> <Icon id='window-restore' />
<FormattedMessage id='picture_in_picture.restore' defaultMessage='Put it back' /> <FormattedMessage id='picture_in_picture.restore' defaultMessage='Put it back' />
</div> </div>

@ -154,7 +154,7 @@ class Poll extends ImmutablePureComponent {
{!showResults && ( {!showResults && (
<span <span
className={classNames('poll__input', { checkbox: poll.get('multiple'), active })} className={classNames('poll__input', { checkbox: poll.get('multiple'), active })}
tabIndex='0' tabIndex={0}
role={poll.get('multiple') ? 'checkbox' : 'radio'} role={poll.get('multiple') ? 'checkbox' : 'radio'}
onKeyPress={this.handleOptionKeyPress} onKeyPress={this.handleOptionKeyPress}
aria-checked={active} aria-checked={active}

@ -337,7 +337,7 @@ class Status extends ImmutablePureComponent {
if (hidden) { if (hidden) {
return ( return (
<HotKeys handlers={handlers}> <HotKeys handlers={handlers}>
<div ref={this.handleRef} className={classNames('status__wrapper', { focusable: !this.props.muted })} tabIndex='0'> <div ref={this.handleRef} className={classNames('status__wrapper', { focusable: !this.props.muted })} tabIndex={0}>
<span>{status.getIn(['account', 'display_name']) || status.getIn(['account', 'username'])}</span> <span>{status.getIn(['account', 'display_name']) || status.getIn(['account', 'username'])}</span>
<span>{status.get('content')}</span> <span>{status.get('content')}</span>
</div> </div>
@ -354,7 +354,7 @@ class Status extends ImmutablePureComponent {
return ( return (
<HotKeys handlers={minHandlers}> <HotKeys handlers={minHandlers}>
<div className='status__wrapper status__wrapper--filtered focusable' tabIndex='0' ref={this.handleRef}> <div className='status__wrapper status__wrapper--filtered focusable' tabIndex={0} ref={this.handleRef}>
<FormattedMessage id='status.filtered' defaultMessage='Filtered' />: {matchedFilters.join(', ')}. <FormattedMessage id='status.filtered' defaultMessage='Filtered' />: {matchedFilters.join(', ')}.
{' '} {' '}
<button className='status__wrapper--filtered__button' onClick={this.handleUnfilterClick}> <button className='status__wrapper--filtered__button' onClick={this.handleUnfilterClick}>

@ -268,7 +268,7 @@ class StatusContent extends React.PureComponent {
} }
return ( return (
<div className={classNames} ref={this.setRef} tabIndex='0' onMouseDown={this.handleMouseDown} onMouseUp={this.handleMouseUp} onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave}> <div className={classNames} ref={this.setRef} tabIndex={0} onMouseDown={this.handleMouseDown} onMouseUp={this.handleMouseUp} onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave}>
<p style={{ marginBottom: hidden && status.get('mentions').isEmpty() ? '0px' : null }}> <p style={{ marginBottom: hidden && status.get('mentions').isEmpty() ? '0px' : null }}>
<span dangerouslySetInnerHTML={spoilerContent} className='translate' lang={lang} /> <span dangerouslySetInnerHTML={spoilerContent} className='translate' lang={lang} />
{' '} {' '}
@ -286,7 +286,7 @@ class StatusContent extends React.PureComponent {
} else if (this.props.onClick) { } else if (this.props.onClick) {
return ( return (
<> <>
<div className={classNames} ref={this.setRef} tabIndex='0' onMouseDown={this.handleMouseDown} onMouseUp={this.handleMouseUp} key='status-content' onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave}> <div className={classNames} ref={this.setRef} tabIndex={0} onMouseDown={this.handleMouseDown} onMouseUp={this.handleMouseUp} key='status-content' onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave}>
<div className='status__content__text status__content__text--visible translate' lang={lang} dangerouslySetInnerHTML={content} /> <div className='status__content__text status__content__text--visible translate' lang={lang} dangerouslySetInnerHTML={content} />
{poll} {poll}
@ -298,7 +298,7 @@ class StatusContent extends React.PureComponent {
); );
} else { } else {
return ( return (
<div className={classNames} ref={this.setRef} tabIndex='0' onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave}> <div className={classNames} ref={this.setRef} tabIndex={0} onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave}>
<div className='status__content__text status__content__text--visible translate' lang={lang} dangerouslySetInnerHTML={content} /> <div className='status__content__text status__content__text--visible translate' lang={lang} dangerouslySetInnerHTML={content} />
{poll} {poll}

@ -54,7 +54,7 @@ export default class MediaContainer extends PureComponent {
handleCloseMedia = () => { handleCloseMedia = () => {
document.body.classList.remove('with-modals--active'); document.body.classList.remove('with-modals--active');
document.documentElement.style.marginRight = 0; document.documentElement.style.marginRight = '0';
this.setState({ this.setState({
media: null, media: null,

@ -67,7 +67,7 @@ class Section extends React.PureComponent {
return ( return (
<div className={classNames('about__section', { active: !collapsed })}> <div className={classNames('about__section', { active: !collapsed })}>
<div className='about__section__title' role='button' tabIndex='0' onClick={this.handleClick}> <div className='about__section__title' role='button' tabIndex={0} onClick={this.handleClick}>
<Icon id={collapsed ? 'chevron-right' : 'chevron-down'} fixedWidth /> {title} <Icon id={collapsed ? 'chevron-right' : 'chevron-down'} fixedWidth /> {title}
</div> </div>

@ -470,7 +470,7 @@ class Audio extends React.PureComponent {
} }
return ( return (
<div className={classNames('audio-player', { editable, inactive: !revealed })} ref={this.setPlayerRef} style={{ backgroundColor: this._getBackgroundColor(), color: this._getForegroundColor(), width: '100%', height: this.props.fullscreen ? '100%' : (this.state.height || this.props.height) }} onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave} tabIndex='0' onKeyDown={this.handleKeyDown}> <div className={classNames('audio-player', { editable, inactive: !revealed })} ref={this.setPlayerRef} style={{ backgroundColor: this._getBackgroundColor(), color: this._getForegroundColor(), width: '100%', height: this.props.fullscreen ? '100%' : (this.state.height || this.props.height) }} onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave} tabIndex={0} onKeyDown={this.handleKeyDown}>
<Blurhash <Blurhash
hash={blurhash} hash={blurhash}
@ -493,7 +493,7 @@ class Audio extends React.PureComponent {
<canvas <canvas
role='button' role='button'
tabIndex='0' tabIndex={0}
className='audio-player__canvas' className='audio-player__canvas'
width={this.state.width} width={this.state.width}
height={this.state.height} height={this.state.height}
@ -526,7 +526,7 @@ class Audio extends React.PureComponent {
<span <span
className={classNames('video-player__seek__handle', { active: dragging })} className={classNames('video-player__seek__handle', { active: dragging })}
tabIndex='0' tabIndex={0}
style={{ left: `${progress}%`, backgroundColor: this._getAccentColor() }} style={{ left: `${progress}%`, backgroundColor: this._getAccentColor() }}
onKeyDown={this.handleAudioKeyDown} onKeyDown={this.handleAudioKeyDown}
/> />
@ -543,7 +543,7 @@ class Audio extends React.PureComponent {
<span <span
className='video-player__volume__handle' className='video-player__volume__handle'
tabIndex='0' tabIndex={0}
style={{ left: `${volume * 100}%`, backgroundColor: this._getAccentColor() }} style={{ left: `${volume * 100}%`, backgroundColor: this._getAccentColor() }}
/> />
</div> </div>

@ -209,7 +209,7 @@ class LanguageDropdownMenu extends React.PureComponent {
const { value } = this.props; const { value } = this.props;
return ( return (
<div key={lang[0]} role='option' tabIndex='0' data-index={lang[0]} className={classNames('language-dropdown__dropdown__results__item', { active: lang[0] === value })} aria-selected={lang[0] === value} onClick={this.handleClick} onKeyDown={this.handleKeyDown}> <div key={lang[0]} role='option' tabIndex={0} data-index={lang[0]} className={classNames('language-dropdown__dropdown__results__item', { active: lang[0] === value })} aria-selected={lang[0] === value} onClick={this.handleClick} onKeyDown={this.handleKeyDown}>
<span className='language-dropdown__dropdown__results__item__native-name' lang={lang[0]}>{lang[2]}</span> <span className='language-dropdown__dropdown__results__item__common-name'>({lang[1]})</span> <span className='language-dropdown__dropdown__results__item__native-name' lang={lang[0]}>{lang[2]}</span> <span className='language-dropdown__dropdown__results__item__common-name'>({lang[1]})</span>
</div> </div>
); );

@ -82,7 +82,7 @@ class OptionIntl extends React.PureComponent {
onClick={this.handleToggleMultiple} onClick={this.handleToggleMultiple}
onKeyPress={this.handleCheckboxKeypress} onKeyPress={this.handleCheckboxKeypress}
role='button' role='button'
tabIndex='0' tabIndex={0}
title={intl.formatMessage(isPollMultiple ? messages.switchToSingle : messages.switchToMultiple)} title={intl.formatMessage(isPollMultiple ? messages.switchToSingle : messages.switchToMultiple)}
aria-label={intl.formatMessage(isPollMultiple ? messages.switchToSingle : messages.switchToMultiple)} aria-label={intl.formatMessage(isPollMultiple ? messages.switchToSingle : messages.switchToMultiple)}
/> />

@ -115,7 +115,7 @@ class PrivacyDropdownMenu extends React.PureComponent {
return ( return (
<div style={{ ...style }} role='listbox' ref={this.setRef}> <div style={{ ...style }} role='listbox' ref={this.setRef}>
{items.map(item => ( {items.map(item => (
<div role='option' tabIndex='0' key={item.value} data-index={item.value} onKeyDown={this.handleKeyDown} onClick={this.handleClick} className={classNames('privacy-dropdown__option', { active: item.value === value })} aria-selected={item.value === value} ref={item.value === value ? this.setFocusRef : null}> <div role='option' tabIndex={0} key={item.value} data-index={item.value} onKeyDown={this.handleKeyDown} onClick={this.handleClick} className={classNames('privacy-dropdown__option', { active: item.value === value })} aria-selected={item.value === value} ref={item.value === value ? this.setFocusRef : null}>
<div className='privacy-dropdown__option__icon'> <div className='privacy-dropdown__option__icon'>
<Icon id={item.icon} fixedWidth /> <Icon id={item.icon} fixedWidth />
</div> </div>

@ -287,7 +287,7 @@ class Search extends React.PureComponent {
onBlur={this.handleBlur} onBlur={this.handleBlur}
/> />
<div role='button' tabIndex='0' className='search__icon' onClick={this.handleClear}> <div role='button' tabIndex={0} className='search__icon' onClick={this.handleClear}>
<Icon id='search' className={hasValue ? '' : 'active'} /> <Icon id='search' className={hasValue ? '' : 'active'} />
<Icon id='times-circle' className={hasValue ? 'active' : ''} aria-label={intl.formatMessage(messages.placeholder)} /> <Icon id='times-circle' className={hasValue ? 'active' : ''} aria-label={intl.formatMessage(messages.placeholder)} />
</div> </div>

@ -42,7 +42,7 @@ export default class Upload extends ImmutablePureComponent {
const y = ((focusY / -2) + .5) * 100; const y = ((focusY / -2) + .5) * 100;
return ( return (
<div className='compose-form__upload' tabIndex='0' role='button'> <div className='compose-form__upload' tabIndex={0} role='button'>
<Motion defaultStyle={{ scale: 0.8 }} style={{ scale: spring(1, { stiffness: 180, damping: 12 }) }}> <Motion defaultStyle={{ scale: 0.8 }} style={{ scale: spring(1, { stiffness: 180, damping: 12 }) }}>
{({ scale }) => ( {({ scale }) => (
<div className='compose-form__upload-thumbnail' style={{ transform: `scale(${scale})`, backgroundImage: `url(${media.get('preview_url')})`, backgroundPosition: `${x}% ${y}%` }}> <div className='compose-form__upload-thumbnail' style={{ transform: `scale(${scale})`, backgroundImage: `url(${media.get('preview_url')})`, backgroundPosition: `${x}% ${y}%` }}>

@ -144,7 +144,7 @@ class Conversation extends ImmutablePureComponent {
return ( return (
<HotKeys handlers={handlers}> <HotKeys handlers={handlers}>
<div className={classNames('conversation focusable muted', { 'conversation--unread': unread })} tabIndex='0'> <div className={classNames('conversation focusable muted', { 'conversation--unread': unread })} tabIndex={0}>
<div className='conversation__avatar' onClick={this.handleClick} role='presentation'> <div className='conversation__avatar' onClick={this.handleClick} role='presentation'>
<AvatarComposite accounts={accounts} size={48} /> <AvatarComposite accounts={accounts} size={48} />
</div> </div>

@ -55,10 +55,10 @@ export default class ConversationsList extends ImmutablePureComponent {
}, 300, { leading: true }); }, 300, { leading: true });
render () { render () {
const { conversations, onLoadMore, ...other } = this.props; const { conversations, isLoading, onLoadMore, ...other } = this.props;
return ( return (
<ScrollableList {...other} onLoadMore={onLoadMore && this.handleLoadOlder} ref={this.setRef}> <ScrollableList {...other} isLoading={isLoading} showLoading={isLoading && conversations.isEmpty()} onLoadMore={onLoadMore && this.handleLoadOlder} ref={this.setRef}>
{conversations.map(item => ( {conversations.map(item => (
<ConversationContainer <ConversationContainer
key={item.get('id')} key={item.get('id')}

@ -89,8 +89,10 @@ class DirectTimeline extends React.PureComponent {
trackScroll={!pinned} trackScroll={!pinned}
scrollKey={`direct_timeline-${columnId}`} scrollKey={`direct_timeline-${columnId}`}
timelineId='direct' timelineId='direct'
bindToDocument={!multiColumn}
onLoadMore={this.handleLoadMore} onLoadMore={this.handleLoadMore}
prepend={<div className='follow_requests-unlocked_explanation'><span><FormattedMessage id='compose_form.encryption_warning' defaultMessage='Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.' /> <a href='/terms' target='_blank'><FormattedMessage id='compose_form.direct_message_warning_learn_more' defaultMessage='Learn more' /></a></span></div>} prepend={<div className='follow_requests-unlocked_explanation'><span><FormattedMessage id='compose_form.encryption_warning' defaultMessage='Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.' /> <a href='/terms' target='_blank'><FormattedMessage id='compose_form.direct_message_warning_learn_more' defaultMessage='Learn more' /></a></span></div>}
alwaysPrepend
emptyMessage={<FormattedMessage id='empty_column.direct' defaultMessage="You don't have any private mentions yet. When you send or receive one, it will show up here." />} emptyMessage={<FormattedMessage id='empty_column.direct' defaultMessage="You don't have any private mentions yet. When you send or receive one, it will show up here." />}
/> />

@ -50,7 +50,7 @@ const emojifyTextNode = (node, customEmojis) => {
if (shortname in customEmojis) { if (shortname in customEmojis) {
const filename = autoPlayGif ? customEmojis[shortname].url : customEmojis[shortname].static_url; const filename = autoPlayGif ? customEmojis[shortname].url : customEmojis[shortname].static_url;
replacement = document.createElement('img'); replacement = document.createElement('img');
replacement.setAttribute('draggable', false); replacement.setAttribute('draggable', 'false');
replacement.setAttribute('class', 'emojione custom-emoji'); replacement.setAttribute('class', 'emojione custom-emoji');
replacement.setAttribute('alt', shortname); replacement.setAttribute('alt', shortname);
replacement.setAttribute('title', shortname); replacement.setAttribute('title', shortname);
@ -65,7 +65,7 @@ const emojifyTextNode = (node, customEmojis) => {
const { filename, shortCode } = unicodeMapping[match]; const { filename, shortCode } = unicodeMapping[match];
const title = shortCode ? `:${shortCode}:` : ''; const title = shortCode ? `:${shortCode}:` : '';
replacement = document.createElement('img'); replacement = document.createElement('img');
replacement.setAttribute('draggable', false); replacement.setAttribute('draggable', 'false');
replacement.setAttribute('class', 'emojione'); replacement.setAttribute('class', 'emojione');
replacement.setAttribute('alt', match); replacement.setAttribute('alt', match);
replacement.setAttribute('title', title); replacement.setAttribute('title', title);

@ -65,7 +65,7 @@ class SelectFilter extends React.PureComponent {
} }
return ( return (
<div key={filter[0]} role='button' tabIndex='0' data-index={filter[0]} className='language-dropdown__dropdown__results__item' onClick={this.handleItemClick} onKeyDown={this.handleKeyDown}> <div key={filter[0]} role='button' tabIndex={0} data-index={filter[0]} className='language-dropdown__dropdown__results__item' onClick={this.handleItemClick} onKeyDown={this.handleKeyDown}>
<span className='language-dropdown__dropdown__results__item__native-name'>{filter[1]}</span> {warning} <span className='language-dropdown__dropdown__results__item__native-name'>{filter[1]}</span> {warning}
</div> </div>
); );
@ -73,7 +73,7 @@ class SelectFilter extends React.PureComponent {
renderCreateNew (name) { renderCreateNew (name) {
return ( return (
<div key='add-new-filter' role='button' tabIndex='0' className='language-dropdown__dropdown__results__item' onClick={this.handleNewFilterClick} onKeyDown={this.handleKeyDown}> <div key='add-new-filter' role='button' tabIndex={0} className='language-dropdown__dropdown__results__item' onClick={this.handleNewFilterClick} onKeyDown={this.handleKeyDown}>
<Icon id='plus' fixedWidth /> <FormattedMessage id='filter_modal.select_filter.prompt_new' defaultMessage='New category: {name}' values={{ name }} /> <Icon id='plus' fixedWidth /> <FormattedMessage id='filter_modal.select_filter.prompt_new' defaultMessage='New category: {name}' values={{ name }} />
</div> </div>
); );

@ -418,7 +418,7 @@ class Announcements extends ImmutablePureComponent {
<img className='announcements__mastodon' alt='' draggable='false' src={mascot || elephantUIPlane} /> <img className='announcements__mastodon' alt='' draggable='false' src={mascot || elephantUIPlane} />
<div className='announcements__container'> <div className='announcements__container'>
<ReactSwipeableViews animateHeight={!reduceMotion} adjustHeight={reduceMotion} index={index} onChangeIndex={this.handleChangeIndex}> <ReactSwipeableViews animateHeight animateTransitions={!reduceMotion} index={index} onChangeIndex={this.handleChangeIndex}>
{announcements.map((announcement, idx) => ( {announcements.map((announcement, idx) => (
<Announcement <Announcement
key={announcement.get('id')} key={announcement.get('id')}

@ -63,7 +63,7 @@ class Search extends React.PureComponent {
/> />
</label> </label>
<div role='button' tabIndex='0' className='search__icon' onClick={this.handleClear}> <div role='button' tabIndex={0} className='search__icon' onClick={this.handleClear}>
<Icon id='search' className={classNames({ active: !hasValue })} /> <Icon id='search' className={classNames({ active: !hasValue })} />
<Icon id='times-circle' aria-label={intl.formatMessage(messages.search)} className={classNames({ active: hasValue })} /> <Icon id='times-circle' aria-label={intl.formatMessage(messages.search)} className={classNames({ active: hasValue })} />
</div> </div>

@ -60,7 +60,7 @@ class ListEditor extends ImmutablePureComponent {
{accountIds.map(accountId => <Account key={accountId} accountId={accountId} added />)} {accountIds.map(accountId => <Account key={accountId} accountId={accountId} added />)}
</div> </div>
{showSearch && <div role='button' tabIndex='-1' className='drawer__backdrop' onClick={onClear} />} {showSearch && <div role='button' tabIndex={-1} className='drawer__backdrop' onClick={onClear} />}
<Motion defaultStyle={{ x: -100 }} style={{ x: spring(showSearch ? 0 : -100, { stiffness: 210, damping: 20 }) }}> <Motion defaultStyle={{ x: -100 }} style={{ x: spring(showSearch ? 0 : -100, { stiffness: 210, damping: 20 }) }}>
{({ x }) => ( {({ x }) => (

@ -176,11 +176,11 @@ class ListTimeline extends React.PureComponent {
multiColumn={multiColumn} multiColumn={multiColumn}
> >
<div className='column-settings__row column-header__links'> <div className='column-settings__row column-header__links'>
<button type='button' className='text-btn column-header__setting-btn' tabIndex='0' onClick={this.handleEditClick}> <button type='button' className='text-btn column-header__setting-btn' tabIndex={0} onClick={this.handleEditClick}>
<Icon id='pencil' /> <FormattedMessage id='lists.edit' defaultMessage='Edit list' /> <Icon id='pencil' /> <FormattedMessage id='lists.edit' defaultMessage='Edit list' />
</button> </button>
<button type='button' className='text-btn column-header__setting-btn' tabIndex='0' onClick={this.handleDeleteClick}> <button type='button' className='text-btn column-header__setting-btn' tabIndex={0} onClick={this.handleDeleteClick}>
<Icon id='trash' /> <FormattedMessage id='lists.delete' defaultMessage='Delete list' /> <Icon id='trash' /> <FormattedMessage id='lists.delete' defaultMessage='Delete list' />
</button> </button>
</div> </div>

@ -11,7 +11,7 @@ export default class ClearColumnButton extends React.PureComponent {
render () { render () {
return ( return (
<button className='text-btn column-header__setting-btn' tabIndex='0' onClick={this.props.onClick}><Icon id='eraser' /> <FormattedMessage id='notifications.clear' defaultMessage='Clear notifications' /></button> <button className='text-btn column-header__setting-btn' tabIndex={0} onClick={this.props.onClick}><Icon id='eraser' /> <FormattedMessage id='notifications.clear' defaultMessage='Clear notifications' /></button>
); );
} }

@ -10,7 +10,7 @@ export default class GrantPermissionButton extends React.PureComponent {
render () { render () {
return ( return (
<button className='text-btn column-header__permission-btn' tabIndex='0' onClick={this.props.onClick}> <button className='text-btn column-header__permission-btn' tabIndex={0} onClick={this.props.onClick}>
<FormattedMessage id='notifications.grant_permission' defaultMessage='Grant permission.' /> <FormattedMessage id='notifications.grant_permission' defaultMessage='Grant permission.' />
</button> </button>
); );

@ -123,7 +123,7 @@ class Notification extends ImmutablePureComponent {
return ( return (
<HotKeys handlers={this.getHandlers()}> <HotKeys handlers={this.getHandlers()}>
<div className={classNames('notification notification-follow focusable', { unread })} tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage(messages.follow, { name: account.get('acct') }), notification.get('created_at'))}> <div className={classNames('notification notification-follow focusable', { unread })} tabIndex={0} aria-label={notificationForScreenReader(intl, intl.formatMessage(messages.follow, { name: account.get('acct') }), notification.get('created_at'))}>
<div className='notification__message'> <div className='notification__message'>
<div className='notification__favourite-icon-wrapper'> <div className='notification__favourite-icon-wrapper'>
<Icon id='user-plus' fixedWidth /> <Icon id='user-plus' fixedWidth />
@ -145,7 +145,7 @@ class Notification extends ImmutablePureComponent {
return ( return (
<HotKeys handlers={this.getHandlers()}> <HotKeys handlers={this.getHandlers()}>
<div className={classNames('notification notification-follow-request focusable', { unread })} tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage({ id: 'notification.follow_request', defaultMessage: '{name} has requested to follow you' }, { name: account.get('acct') }), notification.get('created_at'))}> <div className={classNames('notification notification-follow-request focusable', { unread })} tabIndex={0} aria-label={notificationForScreenReader(intl, intl.formatMessage({ id: 'notification.follow_request', defaultMessage: '{name} has requested to follow you' }, { name: account.get('acct') }), notification.get('created_at'))}>
<div className='notification__message'> <div className='notification__message'>
<div className='notification__favourite-icon-wrapper'> <div className='notification__favourite-icon-wrapper'>
<Icon id='user' fixedWidth /> <Icon id='user' fixedWidth />
@ -185,7 +185,7 @@ class Notification extends ImmutablePureComponent {
return ( return (
<HotKeys handlers={this.getHandlers()}> <HotKeys handlers={this.getHandlers()}>
<div className={classNames('notification notification-favourite focusable', { unread })} tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage(messages.favourite, { name: notification.getIn(['account', 'acct']) }), notification.get('created_at'))}> <div className={classNames('notification notification-favourite focusable', { unread })} tabIndex={0} aria-label={notificationForScreenReader(intl, intl.formatMessage(messages.favourite, { name: notification.getIn(['account', 'acct']) }), notification.get('created_at'))}>
<div className='notification__message'> <div className='notification__message'>
<div className='notification__favourite-icon-wrapper'> <div className='notification__favourite-icon-wrapper'>
<Icon id='star' className='star-icon' fixedWidth /> <Icon id='star' className='star-icon' fixedWidth />
@ -217,7 +217,7 @@ class Notification extends ImmutablePureComponent {
return ( return (
<HotKeys handlers={this.getHandlers()}> <HotKeys handlers={this.getHandlers()}>
<div className={classNames('notification notification-reblog focusable', { unread })} tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage(messages.reblog, { name: notification.getIn(['account', 'acct']) }), notification.get('created_at'))}> <div className={classNames('notification notification-reblog focusable', { unread })} tabIndex={0} aria-label={notificationForScreenReader(intl, intl.formatMessage(messages.reblog, { name: notification.getIn(['account', 'acct']) }), notification.get('created_at'))}>
<div className='notification__message'> <div className='notification__message'>
<div className='notification__favourite-icon-wrapper'> <div className='notification__favourite-icon-wrapper'>
<Icon id='retweet' fixedWidth /> <Icon id='retweet' fixedWidth />
@ -253,7 +253,7 @@ class Notification extends ImmutablePureComponent {
return ( return (
<HotKeys handlers={this.getHandlers()}> <HotKeys handlers={this.getHandlers()}>
<div className={classNames('notification notification-status focusable', { unread })} tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage(messages.status, { name: notification.getIn(['account', 'acct']) }), notification.get('created_at'))}> <div className={classNames('notification notification-status focusable', { unread })} tabIndex={0} aria-label={notificationForScreenReader(intl, intl.formatMessage(messages.status, { name: notification.getIn(['account', 'acct']) }), notification.get('created_at'))}>
<div className='notification__message'> <div className='notification__message'>
<div className='notification__favourite-icon-wrapper'> <div className='notification__favourite-icon-wrapper'>
<Icon id='home' fixedWidth /> <Icon id='home' fixedWidth />
@ -290,7 +290,7 @@ class Notification extends ImmutablePureComponent {
return ( return (
<HotKeys handlers={this.getHandlers()}> <HotKeys handlers={this.getHandlers()}>
<div className={classNames('notification notification-update focusable', { unread })} tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage(messages.update, { name: notification.getIn(['account', 'acct']) }), notification.get('created_at'))}> <div className={classNames('notification notification-update focusable', { unread })} tabIndex={0} aria-label={notificationForScreenReader(intl, intl.formatMessage(messages.update, { name: notification.getIn(['account', 'acct']) }), notification.get('created_at'))}>
<div className='notification__message'> <div className='notification__message'>
<div className='notification__favourite-icon-wrapper'> <div className='notification__favourite-icon-wrapper'>
<Icon id='pencil' fixedWidth /> <Icon id='pencil' fixedWidth />
@ -329,7 +329,7 @@ class Notification extends ImmutablePureComponent {
return ( return (
<HotKeys handlers={this.getHandlers()}> <HotKeys handlers={this.getHandlers()}>
<div className={classNames('notification notification-poll focusable', { unread })} tabIndex='0' aria-label={notificationForScreenReader(intl, message, notification.get('created_at'))}> <div className={classNames('notification notification-poll focusable', { unread })} tabIndex={0} aria-label={notificationForScreenReader(intl, message, notification.get('created_at'))}>
<div className='notification__message'> <div className='notification__message'>
<div className='notification__favourite-icon-wrapper'> <div className='notification__favourite-icon-wrapper'>
<Icon id='tasks' fixedWidth /> <Icon id='tasks' fixedWidth />
@ -366,7 +366,7 @@ class Notification extends ImmutablePureComponent {
return ( return (
<HotKeys handlers={this.getHandlers()}> <HotKeys handlers={this.getHandlers()}>
<div className={classNames('notification notification-admin-sign-up focusable', { unread })} tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage(messages.adminSignUp, { name: account.get('acct') }), notification.get('created_at'))}> <div className={classNames('notification notification-admin-sign-up focusable', { unread })} tabIndex={0} aria-label={notificationForScreenReader(intl, intl.formatMessage(messages.adminSignUp, { name: account.get('acct') }), notification.get('created_at'))}>
<div className='notification__message'> <div className='notification__message'>
<div className='notification__favourite-icon-wrapper'> <div className='notification__favourite-icon-wrapper'>
<Icon id='user-plus' fixedWidth /> <Icon id='user-plus' fixedWidth />
@ -396,7 +396,7 @@ class Notification extends ImmutablePureComponent {
return ( return (
<HotKeys handlers={this.getHandlers()}> <HotKeys handlers={this.getHandlers()}>
<div className={classNames('notification notification-admin-report focusable', { unread })} tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage(messages.adminReport, { name: account.get('acct'), target: notification.getIn(['report', 'target_account', 'acct']) }), notification.get('created_at'))}> <div className={classNames('notification notification-admin-report focusable', { unread })} tabIndex={0} aria-label={notificationForScreenReader(intl, intl.formatMessage(messages.adminReport, { name: account.get('acct'), target: notification.getIn(['report', 'target_account', 'acct']) }), notification.get('created_at'))}>
<div className='notification__message'> <div className='notification__message'>
<div className='notification__favourite-icon-wrapper'> <div className='notification__favourite-icon-wrapper'>
<Icon id='flag' fixedWidth /> <Icon id='flag' fixedWidth />

@ -40,7 +40,7 @@ export default class Option extends React.PureComponent {
<span <span
className={classNames('poll__input', { active: checked, checkbox: multiple })} className={classNames('poll__input', { active: checked, checkbox: multiple })}
tabIndex='0' tabIndex={0}
role='radio' role='radio'
onKeyPress={this.handleKeyPress} onKeyPress={this.handleKeyPress}
aria-checked={checked} aria-checked={checked}

@ -630,7 +630,7 @@ class Status extends ImmutablePureComponent {
{ancestors} {ancestors}
<HotKeys handlers={handlers}> <HotKeys handlers={handlers}>
<div className={classNames('focusable', 'detailed-status__wrapper', `detailed-status__wrapper-${status.get('visibility')}`)} tabIndex='0' aria-label={textForScreenReader(intl, status, false)}> <div className={classNames('focusable', 'detailed-status__wrapper', `detailed-status__wrapper-${status.get('visibility')}`)} tabIndex={0} aria-label={textForScreenReader(intl, status, false)}>
<DetailedStatus <DetailedStatus
key={`details-${status.get('id')}`} key={`details-${status.get('id')}`}
status={status} status={status}

@ -23,7 +23,7 @@ export default class ActionsModal extends ImmutablePureComponent {
return ( return (
<li key={`${text}-${i}`}> <li key={`${text}-${i}`}>
<a href={href} target='_blank' rel='noopener noreferrer' onClick={this.props.onClick} data-index={i} className={classNames({ active })}> <a href={href} target='_blank' rel='noopener noreferrer' onClick={this.props.onClick} data-index={i} className={classNames({ active })}>
{icon && <IconButton title={text} icon={icon} role='presentation' tabIndex='-1' inverted />} {icon && <IconButton title={text} icon={icon} role='presentation' tabIndex={-1} inverted />}
<div> <div>
<div className={classNames({ 'actions-modal__item-label': !!meta })}>{text}</div> <div className={classNames({ 'actions-modal__item-label': !!meta })}>{text}</div>
<div>{meta}</div> <div>{meta}</div>

@ -138,8 +138,8 @@ class MediaModal extends ImmutablePureComponent {
const index = this.getIndex(); const index = this.getIndex();
const leftNav = media.size > 1 && <button tabIndex='0' className='media-modal__nav media-modal__nav--left' onClick={this.handlePrevClick} aria-label={intl.formatMessage(messages.previous)}><Icon id='chevron-left' fixedWidth /></button>; const leftNav = media.size > 1 && <button tabIndex={0} className='media-modal__nav media-modal__nav--left' onClick={this.handlePrevClick} aria-label={intl.formatMessage(messages.previous)}><Icon id='chevron-left' fixedWidth /></button>;
const rightNav = media.size > 1 && <button tabIndex='0' className='media-modal__nav media-modal__nav--right' onClick={this.handleNextClick} aria-label={intl.formatMessage(messages.next)}><Icon id='chevron-right' fixedWidth /></button>; const rightNav = media.size > 1 && <button tabIndex={0} className='media-modal__nav media-modal__nav--right' onClick={this.handleNextClick} aria-label={intl.formatMessage(messages.next)}><Icon id='chevron-right' fixedWidth /></button>;
const content = media.map((image) => { const content = media.map((image) => {
const width = image.getIn(['meta', 'original', 'width']) || null; const width = image.getIn(['meta', 'original', 'width']) || null;

@ -73,7 +73,7 @@ export default class ModalRoot extends React.PureComponent {
document.documentElement.style.marginRight = `${getScrollbarWidth()}px`; document.documentElement.style.marginRight = `${getScrollbarWidth()}px`;
} else { } else {
document.body.classList.remove('with-modals--active'); document.body.classList.remove('with-modals--active');
document.documentElement.style.marginRight = 0; document.documentElement.style.marginRight = '0';
} }
} }

@ -582,7 +582,7 @@ class Video extends React.PureComponent {
poster={preview} poster={preview}
preload={preload} preload={preload}
role='button' role='button'
tabIndex='0' tabIndex={0}
aria-label={alt} aria-label={alt}
title={alt} title={alt}
lang={lang} lang={lang}
@ -611,7 +611,7 @@ class Video extends React.PureComponent {
<span <span
className={classNames('video-player__seek__handle', { active: dragging })} className={classNames('video-player__seek__handle', { active: dragging })}
tabIndex='0' tabIndex={0}
style={{ left: `${progress}%` }} style={{ left: `${progress}%` }}
onKeyDown={this.handleVideoKeyDown} onKeyDown={this.handleVideoKeyDown}
/> />
@ -627,7 +627,7 @@ class Video extends React.PureComponent {
<span <span
className={classNames('video-player__volume__handle')} className={classNames('video-player__volume__handle')}
tabIndex='0' tabIndex={0}
style={{ left: `${volume * 100}%` }} style={{ left: `${volume * 100}%` }}
/> />
</div> </div>

@ -55,7 +55,7 @@
* @property {boolean=} delete_modal * @property {boolean=} delete_modal
* @property {boolean=} disable_swiping * @property {boolean=} disable_swiping
* @property {string=} disabled_account_id * @property {string=} disabled_account_id
* @property {boolean} display_media * @property {string} display_media
* @property {string} domain * @property {string} domain
* @property {boolean=} expand_spoilers * @property {boolean=} expand_spoilers
* @property {boolean} limited_federation_mode * @property {boolean} limited_federation_mode

@ -12,7 +12,6 @@ function importExtraPolyfills() {
function loadPolyfills() { function loadPolyfills() {
const needsBasePolyfills = !( const needsBasePolyfills = !(
Array.prototype.includes &&
HTMLCanvasElement.prototype.toBlob && HTMLCanvasElement.prototype.toBlob &&
window.Intl && window.Intl &&
Object.assign && Object.assign &&

@ -20,7 +20,7 @@
"account.blocked": "Blocked", "account.blocked": "Blocked",
"account.browse_more_on_origin_server": "Restolar más nel perfil orixinal", "account.browse_more_on_origin_server": "Restolar más nel perfil orixinal",
"account.cancel_follow_request": "Withdraw follow request", "account.cancel_follow_request": "Withdraw follow request",
"account.direct": "Privately mention @{name}", "account.direct": "Mentar a @{name} per privao",
"account.disable_notifications": "Dexar d'avisame cuando @{name} espublice artículos", "account.disable_notifications": "Dexar d'avisame cuando @{name} espublice artículos",
"account.domain_blocked": "Domain blocked", "account.domain_blocked": "Domain blocked",
"account.edit_profile": "Editar el perfil", "account.edit_profile": "Editar el perfil",
@ -102,7 +102,7 @@
"column.blocks": "Perfiles bloquiaos", "column.blocks": "Perfiles bloquiaos",
"column.bookmarks": "Marcadores", "column.bookmarks": "Marcadores",
"column.community": "Llinia de tiempu llocal", "column.community": "Llinia de tiempu llocal",
"column.direct": "Private mentions", "column.direct": "Menciones privaes",
"column.directory": "Browse profiles", "column.directory": "Browse profiles",
"column.domain_blocks": "Dominios bloquiaos", "column.domain_blocks": "Dominios bloquiaos",
"column.favourites": "Favoritos", "column.favourites": "Favoritos",
@ -216,7 +216,7 @@
"empty_column.blocks": "Entá nun bloquiesti a nengún perfil.", "empty_column.blocks": "Entá nun bloquiesti a nengún perfil.",
"empty_column.bookmarked_statuses": "Entá nun tienes nengún artículu en Marcadores. Cuando amiestes dalgún, apaez equí.", "empty_column.bookmarked_statuses": "Entá nun tienes nengún artículu en Marcadores. Cuando amiestes dalgún, apaez equí.",
"empty_column.community": "La llinia de tiempu llocal ta balera. ¡Espubliza daqué públicamente pa comenzar l'alderique!", "empty_column.community": "La llinia de tiempu llocal ta balera. ¡Espubliza daqué públicamente pa comenzar l'alderique!",
"empty_column.direct": "You don't have any private mentions yet. When you send or receive one, it will show up here.", "empty_column.direct": "Entá nun tienes nenguna mención privada. Cuando unvies o recibas dalguna, apaez equí.",
"empty_column.domain_blocks": "Entá nun hai nengún dominiu bloquiáu.", "empty_column.domain_blocks": "Entá nun hai nengún dominiu bloquiáu.",
"empty_column.explore_statuses": "Agora nun hai nada en tendencia. ¡Volvi equí dempués!", "empty_column.explore_statuses": "Agora nun hai nada en tendencia. ¡Volvi equí dempués!",
"empty_column.favourited_statuses": "Entá nun marquesti nengún artículu como favoritu. Cuando marques dalgún, apaez equí.", "empty_column.favourited_statuses": "Entá nun marquesti nengún artículu como favoritu. Cuando marques dalgún, apaez equí.",
@ -314,7 +314,7 @@
"keyboard_shortcuts.column": "Enfocar una columna", "keyboard_shortcuts.column": "Enfocar una columna",
"keyboard_shortcuts.compose": "Enfocar l'área de composición", "keyboard_shortcuts.compose": "Enfocar l'área de composición",
"keyboard_shortcuts.description": "Descripción", "keyboard_shortcuts.description": "Descripción",
"keyboard_shortcuts.direct": "to open direct messages column", "keyboard_shortcuts.direct": "p'abrir la columna de les menciones privaes",
"keyboard_shortcuts.down": "Baxar na llista", "keyboard_shortcuts.down": "Baxar na llista",
"keyboard_shortcuts.enter": "Abrir un artículu", "keyboard_shortcuts.enter": "Abrir un artículu",
"keyboard_shortcuts.favourite": "Marcar un artículu como favoritu", "keyboard_shortcuts.favourite": "Marcar un artículu como favoritu",
@ -376,7 +376,7 @@
"navigation_bar.bookmarks": "Marcadores", "navigation_bar.bookmarks": "Marcadores",
"navigation_bar.community_timeline": "Llinia de tiempu llocal", "navigation_bar.community_timeline": "Llinia de tiempu llocal",
"navigation_bar.compose": "Compose new post", "navigation_bar.compose": "Compose new post",
"navigation_bar.direct": "Private mentions", "navigation_bar.direct": "Menciones privaes",
"navigation_bar.discover": "Discover", "navigation_bar.discover": "Discover",
"navigation_bar.domain_blocks": "Dominios bloquiaos", "navigation_bar.domain_blocks": "Dominios bloquiaos",
"navigation_bar.edit_profile": "Editar el perfil", "navigation_bar.edit_profile": "Editar el perfil",
@ -559,8 +559,8 @@
"status.copy": "Copiar l'enllaz al artículu", "status.copy": "Copiar l'enllaz al artículu",
"status.delete": "Desaniciar", "status.delete": "Desaniciar",
"status.detailed_status": "Detailed conversation view", "status.detailed_status": "Detailed conversation view",
"status.direct": "Privately mention @{name}", "status.direct": "Mentar a @{name} per privao",
"status.direct_indicator": "Private mention", "status.direct_indicator": "Mención privada",
"status.edit": "Edit", "status.edit": "Edit",
"status.edited": "Editóse'l {date}", "status.edited": "Editóse'l {date}",
"status.edited_x_times": "Editóse {count, plural, one {{count} vegada} other {{count} vegaes}}", "status.edited_x_times": "Editóse {count, plural, one {{count} vegada} other {{count} vegaes}}",

@ -522,17 +522,17 @@
"report_notification.categories.spam": "Спам", "report_notification.categories.spam": "Спам",
"report_notification.categories.violation": "Парушэнне правілаў", "report_notification.categories.violation": "Парушэнне правілаў",
"report_notification.open": "Адкрыць скаргу", "report_notification.open": "Адкрыць скаргу",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "Гісторыя пошуку пустая",
"search.placeholder": "Пошук", "search.placeholder": "Пошук",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "Супадзенне профіляў {x}",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "Перайсці да профілю {x}",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "Перайсці да хэштэгу {x}",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "Адкрыць спасылку ў Mastodon",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "Супадзенне паведамленняў {x}",
"search.search_or_paste": "Увядзіце спасылку або пошукавы запыт", "search.search_or_paste": "Увядзіце спасылку або пошукавы запыт",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "Хуткія дзеянні",
"search_popout.recent": "Recent searches", "search_popout.recent": "Нядаўнія запыты",
"search_results.accounts": "Profiles", "search_results.accounts": "Профілі",
"search_results.all": "Усё", "search_results.all": "Усё",
"search_results.hashtags": "Хэштэгі", "search_results.hashtags": "Хэштэгі",
"search_results.nothing_found": "Па дадзенаму запыту нічога не знойдзена", "search_results.nothing_found": "Па дадзенаму запыту нічога не знойдзена",

@ -522,16 +522,16 @@
"report_notification.categories.spam": "Brossa", "report_notification.categories.spam": "Brossa",
"report_notification.categories.violation": "Violació de norma", "report_notification.categories.violation": "Violació de norma",
"report_notification.open": "Obre un informe", "report_notification.open": "Obre un informe",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "No hi ha cerques recents",
"search.placeholder": "Cerca", "search.placeholder": "Cerca",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "Perfils coincidents {x}",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "Anar al perfil {x}",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "Anar a la etiqueta {x}",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "Obrir URL a Mastodon",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "Tuts coincidents {x}",
"search.search_or_paste": "Cerca o escriu l'URL", "search.search_or_paste": "Cerca o escriu l'URL",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "Accions ràpides",
"search_popout.recent": "Recent searches", "search_popout.recent": "Cerques recents",
"search_results.accounts": "Perfils", "search_results.accounts": "Perfils",
"search_results.all": "Tots", "search_results.all": "Tots",
"search_results.hashtags": "Etiquetes", "search_results.hashtags": "Etiquetes",

@ -20,7 +20,7 @@
"account.blocked": "بلۆککرا", "account.blocked": "بلۆککرا",
"account.browse_more_on_origin_server": "گەڕانی فرەتر لە سەر پرۆفایلی سەرەکی", "account.browse_more_on_origin_server": "گەڕانی فرەتر لە سەر پرۆفایلی سەرەکی",
"account.cancel_follow_request": "داواکاری فۆڵۆو بکشێنەوە", "account.cancel_follow_request": "داواکاری فۆڵۆو بکشێنەوە",
"account.direct": "Privately mention @{name}", "account.direct": "بە شێوەیەکی تایبەت باسی @{name} بکە",
"account.disable_notifications": "ئاگانامە مەنێرە بۆم کاتێک @{name} پۆست دەکرێت", "account.disable_notifications": "ئاگانامە مەنێرە بۆم کاتێک @{name} پۆست دەکرێت",
"account.domain_blocked": "دۆمەین قەپاتکرا", "account.domain_blocked": "دۆمەین قەپاتکرا",
"account.edit_profile": "دەستکاری پرۆفایل", "account.edit_profile": "دەستکاری پرۆفایل",
@ -29,14 +29,14 @@
"account.featured_tags.last_status_at": "دوایین پۆست لە {date}", "account.featured_tags.last_status_at": "دوایین پۆست لە {date}",
"account.featured_tags.last_status_never": "هیچ پۆستێک نییە", "account.featured_tags.last_status_never": "هیچ پۆستێک نییە",
"account.featured_tags.title": "هاشتاگە تایبەتەکانی {name}", "account.featured_tags.title": "هاشتاگە تایبەتەکانی {name}",
"account.follow": "شوێنکەوتن", "account.follow": "بەدواداچوون",
"account.followers": "شوێنکەوتووان", "account.followers": "شوێنکەوتووان",
"account.followers.empty": "کەسێک شوێن ئەم بەکارهێنەرە نەکەوتووە", "account.followers.empty": "کەسێک شوێن ئەم بەکارهێنەرە نەکەوتووە",
"account.followers_counter": "{count, plural, one {{counter} شوێنکەوتوو} other {{counter} شوێنکەوتوو}}", "account.followers_counter": "{count, plural, one {{counter} شوێنکەوتوو} other {{counter} شوێنکەوتوو}}",
"account.following": "دواکەوتن", "account.following": "بەدوادا",
"account.following_counter": "{count, plural, one {{counter} شوێنکەوتوو} other {{counter} شوێنکەوتوو}}", "account.following_counter": "{count, plural, one {{counter} شوێنکەوتوو} other {{counter} شوێنکەوتوو}}",
"account.follows.empty": "ئەم بەکارهێنەرە تا ئێستا شوێن کەس نەکەوتووە.", "account.follows.empty": "ئەم بەکارهێنەرە تا ئێستا شوێن کەس نەکەوتووە.",
"account.follows_you": "شوێنکەوتووەکانت", "account.follows_you": "شوێنت دەکەوێت",
"account.go_to_profile": "بڕۆ بۆ پڕۆفایلی", "account.go_to_profile": "بڕۆ بۆ پڕۆفایلی",
"account.hide_reblogs": "داشاردنی بووستەکان لە @{name}", "account.hide_reblogs": "داشاردنی بووستەکان لە @{name}",
"account.joined_short": "بەشداری کردووە", "account.joined_short": "بەشداری کردووە",
@ -50,7 +50,7 @@
"account.mute_notifications": "هۆشیارکەرەوەکان لاببە لە @{name}", "account.mute_notifications": "هۆشیارکەرەوەکان لاببە لە @{name}",
"account.muted": "بێ دەنگ", "account.muted": "بێ دەنگ",
"account.open_original_page": "لاپەڕەی ئەسڵی بکەرەوە", "account.open_original_page": "لاپەڕەی ئەسڵی بکەرەوە",
"account.posts": "توتس", "account.posts": "نووسراوەکان",
"account.posts_with_replies": "توتس و وەڵامەکان", "account.posts_with_replies": "توتس و وەڵامەکان",
"account.report": "گوزارشت @{name}", "account.report": "گوزارشت @{name}",
"account.requested": "چاوەڕێی ڕەزامەندین. کرتە بکە بۆ هەڵوەشاندنەوەی داواکاری شوێنکەوتن", "account.requested": "چاوەڕێی ڕەزامەندین. کرتە بکە بۆ هەڵوەشاندنەوەی داواکاری شوێنکەوتن",
@ -102,7 +102,7 @@
"column.blocks": "بەکارهێنەرە بلۆککراوەکان", "column.blocks": "بەکارهێنەرە بلۆککراوەکان",
"column.bookmarks": "نیشانەکان", "column.bookmarks": "نیشانەکان",
"column.community": "هێڵی کاتی ناوخۆیی", "column.community": "هێڵی کاتی ناوخۆیی",
"column.direct": "Private mentions", "column.direct": "ئاماژەی تایبەت",
"column.directory": "گەڕان لە پرۆفایلەکان", "column.directory": "گەڕان لە پرۆفایلەکان",
"column.domain_blocks": "دۆمەینە داخراوەکان", "column.domain_blocks": "دۆمەینە داخراوەکان",
"column.favourites": "دڵخوازترینەکان", "column.favourites": "دڵخوازترینەکان",
@ -216,7 +216,7 @@
"empty_column.blocks": "تۆ هێشتا هیچ بەکارهێنەرێکت بلۆک نەکردووە.", "empty_column.blocks": "تۆ هێشتا هیچ بەکارهێنەرێکت بلۆک نەکردووە.",
"empty_column.bookmarked_statuses": "تۆ هێشتا هیچ توتێکی دیاریکراوت نیە کاتێک نیشانەیەک نیشان دەکەیت، لێرە دەرئەکەویت.", "empty_column.bookmarked_statuses": "تۆ هێشتا هیچ توتێکی دیاریکراوت نیە کاتێک نیشانەیەک نیشان دەکەیت، لێرە دەرئەکەویت.",
"empty_column.community": "هێڵی کاتی ناوخۆیی بەتاڵە. شتێک بە ئاشکرا بنووسە بۆ ئەوەی تۆپەکە بسووڕێت!", "empty_column.community": "هێڵی کاتی ناوخۆیی بەتاڵە. شتێک بە ئاشکرا بنووسە بۆ ئەوەی تۆپەکە بسووڕێت!",
"empty_column.direct": "You don't have any private mentions yet. When you send or receive one, it will show up here.", "empty_column.direct": "تا ئێستا هیچ نامەیەکی ڕاستەوخۆت نییە. کاتێک یەکێکیان دەنێری یان وەریدەگریت، لێرە دەردەکەوێت.",
"empty_column.domain_blocks": "هێشتا هیچ دۆمەینێکی بلۆک کراو نییە.", "empty_column.domain_blocks": "هێشتا هیچ دۆمەینێکی بلۆک کراو نییە.",
"empty_column.explore_statuses": "لە ئێستادا هیچ شتێک ترێند نییە. دواتر سەیری بکە!", "empty_column.explore_statuses": "لە ئێستادا هیچ شتێک ترێند نییە. دواتر سەیری بکە!",
"empty_column.favourited_statuses": "تۆ هێشتا هیچ توتێکی دڵخوازت نییە، کاتێک حەزت لە دانەیەکی باشە، لێرە دەرئەکەویت.", "empty_column.favourited_statuses": "تۆ هێشتا هیچ توتێکی دڵخوازت نییە، کاتێک حەزت لە دانەیەکی باشە، لێرە دەرئەکەویت.",
@ -299,12 +299,12 @@
"interaction_modal.description.reply": "بە هەژمارێک لەسەر ماستدۆن، ئەتوانیت وەڵامی ئەم بڵاوکراوەیە بدەیتەوە.", "interaction_modal.description.reply": "بە هەژمارێک لەسەر ماستدۆن، ئەتوانیت وەڵامی ئەم بڵاوکراوەیە بدەیتەوە.",
"interaction_modal.on_another_server": "لەسەر ڕاژەیەکی جیا", "interaction_modal.on_another_server": "لەسەر ڕاژەیەکی جیا",
"interaction_modal.on_this_server": "لەسەر ئەم ڕاژەیە", "interaction_modal.on_this_server": "لەسەر ئەم ڕاژەیە",
"interaction_modal.other_server_instructions": "Copy and paste this URL into the search field of your favourite Mastodon app or the web interface of your Mastodon server.", "interaction_modal.other_server_instructions": "ئەم URLە کۆپی بکە و بیخە ناو بواری گەڕانی ئەپی دڵخوازت لە ماستۆدۆن یان ڕووکاری وێبی سێرڤەری ماستۆدۆنەکەت.",
"interaction_modal.preamble": "Since Mastodon is decentralized, you can use your existing account hosted by another Mastodon server or compatible platform if you don't have an account on this one.", "interaction_modal.preamble": "بەو پێیەی ماستۆدۆن لامەرکەزییە، دەتوانیت ئەکاونتی ئێستات بەکاربهێنیت کە لەلایەن سێرڤەرێکی تری ماستۆدۆن یان پلاتفۆرمی گونجاوەوە هۆست کراوە ئەگەر ئەکاونتێکت لەسەر ئەم ئەکاونتە نەبێت.",
"interaction_modal.title.favourite": "Favourite {name}'s post", "interaction_modal.title.favourite": "پۆستی {name}ی دڵخواز",
"interaction_modal.title.follow": "Follow {name}", "interaction_modal.title.follow": "دوای {name} بکەوە",
"interaction_modal.title.reblog": "Boost {name}'s post", "interaction_modal.title.reblog": "پۆستی {name} زیاد بکە",
"interaction_modal.title.reply": "Reply to {name}'s post", "interaction_modal.title.reply": "وەڵامی پۆستەکەی {name} بدەرەوە",
"intervals.full.days": "{number, plural, one {# ڕۆژ} other {# ڕۆژەک}}", "intervals.full.days": "{number, plural, one {# ڕۆژ} other {# ڕۆژەک}}",
"intervals.full.hours": "{number, plural, one {# کات} other {# کات}}", "intervals.full.hours": "{number, plural, one {# کات} other {# کات}}",
"intervals.full.minutes": "{number, plural, one {# خولەک} other {# خولەک}}", "intervals.full.minutes": "{number, plural, one {# خولەک} other {# خولەک}}",
@ -314,7 +314,7 @@
"keyboard_shortcuts.column": "بۆ ئەوەی تیشک بخاتە سەر توتێک لە یەکێک لە ستوونەکان", "keyboard_shortcuts.column": "بۆ ئەوەی تیشک بخاتە سەر توتێک لە یەکێک لە ستوونەکان",
"keyboard_shortcuts.compose": "بۆ سەرنجدان بە نووسینی ناوچەی دەق", "keyboard_shortcuts.compose": "بۆ سەرنجدان بە نووسینی ناوچەی دەق",
"keyboard_shortcuts.description": "وهسف", "keyboard_shortcuts.description": "وهسف",
"keyboard_shortcuts.direct": "to open direct messages column", "keyboard_shortcuts.direct": "بۆ کردنەوەی ستوونی ئاماژەی تایبەت",
"keyboard_shortcuts.down": "بۆ چوونە خوارەوە لە لیستەکەدا", "keyboard_shortcuts.down": "بۆ چوونە خوارەوە لە لیستەکەدا",
"keyboard_shortcuts.enter": "بۆ کردنەوەی توت", "keyboard_shortcuts.enter": "بۆ کردنەوەی توت",
"keyboard_shortcuts.favourite": "بۆ دڵخواز", "keyboard_shortcuts.favourite": "بۆ دڵخواز",
@ -348,7 +348,7 @@
"lightbox.next": "داهاتوو", "lightbox.next": "داهاتوو",
"lightbox.previous": "پێشوو", "lightbox.previous": "پێشوو",
"limited_account_hint.action": "بەهەر حاڵ پڕۆفایلی پیشان بدە", "limited_account_hint.action": "بەهەر حاڵ پڕۆفایلی پیشان بدە",
"limited_account_hint.title": "This profile has been hidden by the moderators of {domain}.", "limited_account_hint.title": "ئەم پرۆفایلە لەلایەن بەڕێوەبەرانی {domain} شاراوەتەوە.",
"lists.account.add": "زیادکردن بۆ لیست", "lists.account.add": "زیادکردن بۆ لیست",
"lists.account.remove": "لابردن لە لیست", "lists.account.remove": "لابردن لە لیست",
"lists.delete": "سڕینەوەی لیست", "lists.delete": "سڕینەوەی لیست",
@ -367,16 +367,16 @@
"media_gallery.toggle_visible": "شاردنەوەی {number, plural, one {image} other {images}}", "media_gallery.toggle_visible": "شاردنەوەی {number, plural, one {image} other {images}}",
"missing_indicator.label": "نەدۆزرایەوە", "missing_indicator.label": "نەدۆزرایەوە",
"missing_indicator.sublabel": "ئەو سەرچاوەیە نادۆزرێتەوە", "missing_indicator.sublabel": "ئەو سەرچاوەیە نادۆزرێتەوە",
"moved_to_account_banner.text": "Your account {disabledAccount} is currently disabled because you moved to {movedToAccount}.", "moved_to_account_banner.text": "ئەکاونتەکەت {disabledAccount} لە ئێستادا لەکارخراوە چونکە تۆ چوویتە {movedToAccount}.",
"mute_modal.duration": "ماوە", "mute_modal.duration": "ماوە",
"mute_modal.hide_notifications": "شاردنەوەی ئاگانامەکان لەم بەکارهێنەرە؟ ", "mute_modal.hide_notifications": "شاردنەوەی ئاگانامەکان لەم بەکارهێنەرە؟ ",
"mute_modal.indefinite": "نادیار", "mute_modal.indefinite": "نادیار",
"navigation_bar.about": "About", "navigation_bar.about": "دەربارە",
"navigation_bar.blocks": "بەکارهێنەرە بلۆککراوەکان", "navigation_bar.blocks": "بەکارهێنەرە بلۆککراوەکان",
"navigation_bar.bookmarks": "نیشانکراوەکان", "navigation_bar.bookmarks": "نیشانکراوەکان",
"navigation_bar.community_timeline": "دەمنامەی ناوخۆیی", "navigation_bar.community_timeline": "دەمنامەی ناوخۆیی",
"navigation_bar.compose": "نووسینی توتی نوێ", "navigation_bar.compose": "نووسینی توتی نوێ",
"navigation_bar.direct": "Private mentions", "navigation_bar.direct": "ئاماژەی تایبەت",
"navigation_bar.discover": "دۆزینەوە", "navigation_bar.discover": "دۆزینەوە",
"navigation_bar.domain_blocks": "دۆمەینە بلۆک کراوەکان", "navigation_bar.domain_blocks": "دۆمەینە بلۆک کراوەکان",
"navigation_bar.edit_profile": "دەستکاری پرۆفایل بکە", "navigation_bar.edit_profile": "دەستکاری پرۆفایل بکە",
@ -384,7 +384,7 @@
"navigation_bar.favourites": "دڵخوازەکان", "navigation_bar.favourites": "دڵخوازەکان",
"navigation_bar.filters": "وشە کپەکان", "navigation_bar.filters": "وشە کپەکان",
"navigation_bar.follow_requests": "بەدواداچوی داواکاریەکان بکە", "navigation_bar.follow_requests": "بەدواداچوی داواکاریەکان بکە",
"navigation_bar.followed_tags": "Followed hashtags", "navigation_bar.followed_tags": "هاشتاگی بەدوادا هات",
"navigation_bar.follows_and_followers": "شوێنکەوتوو و شوێنکەوتوان", "navigation_bar.follows_and_followers": "شوێنکەوتوو و شوێنکەوتوان",
"navigation_bar.lists": "لیستەکان", "navigation_bar.lists": "لیستەکان",
"navigation_bar.logout": "دەرچوون", "navigation_bar.logout": "دەرچوون",
@ -393,10 +393,10 @@
"navigation_bar.pins": "توتی چەسپاو", "navigation_bar.pins": "توتی چەسپاو",
"navigation_bar.preferences": "پەسەندەکان", "navigation_bar.preferences": "پەسەندەکان",
"navigation_bar.public_timeline": "نووسراوەکانی هەمووشوێنێک", "navigation_bar.public_timeline": "نووسراوەکانی هەمووشوێنێک",
"navigation_bar.search": "Search", "navigation_bar.search": "گەڕان",
"navigation_bar.security": "ئاسایش", "navigation_bar.security": "ئاسایش",
"not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.", "not_signed_in_indicator.not_signed_in": "پێویستە بچیتە ژوورەوە بۆ دەستگەیشتن بەم سەرچاوەیە.",
"notification.admin.report": "{name} reported {target}", "notification.admin.report": "{name} ڕاپۆرت کراوە {target}",
"notification.admin.sign_up": "{name} تۆمارکرا", "notification.admin.sign_up": "{name} تۆمارکرا",
"notification.favourite": "{name} نووسراوەکەتی پەسەند کرد", "notification.favourite": "{name} نووسراوەکەتی پەسەند کرد",
"notification.follow": "{name} دوای تۆ کەوت", "notification.follow": "{name} دوای تۆ کەوت",
@ -409,7 +409,7 @@
"notification.update": "{name} پۆستێکی دەستکاریکرد", "notification.update": "{name} پۆستێکی دەستکاریکرد",
"notifications.clear": "ئاگانامەکان بسڕیەوە", "notifications.clear": "ئاگانامەکان بسڕیەوە",
"notifications.clear_confirmation": "ئایا دڵنیایت لەوەی دەتەوێت بە هەمیشەیی هەموو ئاگانامەکانت بسڕیتەوە?", "notifications.clear_confirmation": "ئایا دڵنیایت لەوەی دەتەوێت بە هەمیشەیی هەموو ئاگانامەکانت بسڕیتەوە?",
"notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.report": "ڕاپۆرتە نوێیەکان:",
"notifications.column_settings.admin.sign_up": "چوونەژوورەوەی نوێ:", "notifications.column_settings.admin.sign_up": "چوونەژوورەوەی نوێ:",
"notifications.column_settings.alert": "ئاگانامەکانی پیشانگەرر ڕومێزی", "notifications.column_settings.alert": "ئاگانامەکانی پیشانگەرر ڕومێزی",
"notifications.column_settings.favourite": "دڵخوازترین:", "notifications.column_settings.favourite": "دڵخوازترین:",
@ -463,8 +463,8 @@
"privacy.public.short": "گشتی", "privacy.public.short": "گشتی",
"privacy.unlisted.long": "بۆ هەمووان دیارە، بەڵام لە تایبەتمەندییەکانی دۆزینەوە دەرچووە", "privacy.unlisted.long": "بۆ هەمووان دیارە، بەڵام لە تایبەتمەندییەکانی دۆزینەوە دەرچووە",
"privacy.unlisted.short": "لە لیست نەکراو", "privacy.unlisted.short": "لە لیست نەکراو",
"privacy_policy.last_updated": "Last updated {date}", "privacy_policy.last_updated": "دوایین نوێکردنەوە {date}",
"privacy_policy.title": "Privacy Policy", "privacy_policy.title": "سیاسەتی تایبەتێتی",
"refresh": "نوێکردنەوە", "refresh": "نوێکردنەوە",
"regeneration_indicator.label": "بارکردن…", "regeneration_indicator.label": "بارکردن…",
"regeneration_indicator.sublabel": "ڕاگەیەنەری ماڵەوەت ئامادە دەکرێت!", "regeneration_indicator.sublabel": "ڕاگەیەنەری ماڵەوەت ئامادە دەکرێت!",
@ -518,29 +518,29 @@
"report.unfollow": "بەدوادانەچوو@{name}", "report.unfollow": "بەدوادانەچوو@{name}",
"report.unfollow_explanation": "تۆ شوێنکەوتووی ئەم هەژماررەی دەکەیت. بۆ ئەوەی چیتر نووسراوەکانیان لە هۆم فیدی خۆت نەبینی، بەدوایان مەچۆ.", "report.unfollow_explanation": "تۆ شوێنکەوتووی ئەم هەژماررەی دەکەیت. بۆ ئەوەی چیتر نووسراوەکانیان لە هۆم فیدی خۆت نەبینی، بەدوایان مەچۆ.",
"report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached",
"report_notification.categories.other": "Other", "report_notification.categories.other": "هی تر",
"report_notification.categories.spam": "Spam", "report_notification.categories.spam": "سپام",
"report_notification.categories.violation": "Rule violation", "report_notification.categories.violation": "پێشێلکردنی یاسا",
"report_notification.open": "Open report", "report_notification.open": "ڕاپۆرتەکان بکەوە",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "گەڕانەکانی ئەم دواییە",
"search.placeholder": "گەڕان", "search.placeholder": "گەڕان",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "پڕۆفایلی هاوتا لەگەڵ {x}",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "بڕۆ بۆ پڕۆفایلی{x}",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "بڕۆ بۆ هاشتاگی {x}",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "بەستەرەکان لەناو ماستۆدۆن بکەوە",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "پڕۆفایلی هاوتا لەگەڵ {x}",
"search.search_or_paste": "Search or paste URL", "search.search_or_paste": "گەڕان یان لێدانی URL",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "کرداری خێرا",
"search_popout.recent": "Recent searches", "search_popout.recent": "گەڕانەکانی ئەم دواییە",
"search_results.accounts": "Profiles", "search_results.accounts": "پرۆفایلەکان",
"search_results.all": "هەموو", "search_results.all": "هەموو",
"search_results.hashtags": "هەشتاگ", "search_results.hashtags": "هەشتاگ",
"search_results.nothing_found": "Could not find anything for these search terms", "search_results.nothing_found": "هیچ بۆ ئەم زاراوە گەڕانانە نەدۆزراوەتەوە",
"search_results.statuses": "توتەکان", "search_results.statuses": "توتەکان",
"search_results.statuses_fts_disabled": "گەڕانی توتەکان بە ناوەڕۆکیان لەسەر ئەم ڕاژەی ماستۆدۆن چالاک نەکراوە.", "search_results.statuses_fts_disabled": "گەڕانی توتەکان بە ناوەڕۆکیان لەسەر ئەم ڕاژەی ماستۆدۆن چالاک نەکراوە.",
"search_results.title": "Search for {q}", "search_results.title": "گەڕان بەدوای {q}",
"search_results.total": "{count, number} {count, plural, one {دەرئەنجام} other {دەرئەنجام}}", "search_results.total": "{count, number} {count, plural, one {دەرئەنجام} other {دەرئەنجام}}",
"server_banner.about_active_users": "People using this server during the last 30 days (Monthly Active Users)", "server_banner.about_active_users": "ئەو کەسانەی لە ماوەی ٣٠ ڕۆژی ڕابردوودا ئەم سێرڤەرە بەکاردەهێنن (بەکارهێنەرانی چالاک مانگانە)",
"server_banner.active_users": "بەکارهێنەرانی چالاک", "server_banner.active_users": "بەکارهێنەرانی چالاک",
"server_banner.administered_by": "بەڕێوەبردن لەلایەن:", "server_banner.administered_by": "بەڕێوەبردن لەلایەن:",
"server_banner.introduction": "{domain} بەشێکە لەو تۆڕە کۆمەڵایەتییە لامەرکەزییەی کە لەلایەن {mastodon}ەوە بەهێز دەکرێت.", "server_banner.introduction": "{domain} بەشێکە لەو تۆڕە کۆمەڵایەتییە لامەرکەزییەی کە لەلایەن {mastodon}ەوە بەهێز دەکرێت.",
@ -548,9 +548,9 @@
"server_banner.server_stats": "دۆخی ڕاژەکار:", "server_banner.server_stats": "دۆخی ڕاژەکار:",
"sign_in_banner.create_account": "هەژمار دروستبکە", "sign_in_banner.create_account": "هەژمار دروستبکە",
"sign_in_banner.sign_in": "بچۆ ژوورەوە", "sign_in_banner.sign_in": "بچۆ ژوورەوە",
"sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts. You can also interact from your account on a different server.", "sign_in_banner.text": "چوونەژوورەوە بۆ فۆڵۆوکردنی پڕۆفایلی یان هاشتاگەکان، دڵخوازەکان، شەیرکردن و وەڵامدانەوەی پۆستەکان. هەروەها دەتوانیت لە ئەکاونتەکەتەوە لەسەر سێرڤەرێکی جیاواز کارلێک بکەیت.",
"status.admin_account": "کردنەوەی میانڕەوی بەڕێوەبەر بۆ @{name}", "status.admin_account": "کردنەوەی میانڕەوی بەڕێوەبەر بۆ @{name}",
"status.admin_domain": "Open moderation interface for {domain}", "status.admin_domain": "ڕووکاری مامناوەندی بکەرەوە بۆ {domain}",
"status.admin_status": "ئەم توتە بکەوە لە ناو ڕووکاری بەڕیوەبەر", "status.admin_status": "ئەم توتە بکەوە لە ناو ڕووکاری بەڕیوەبەر",
"status.block": "@{name} ئاستەنگ بکە", "status.block": "@{name} ئاستەنگ بکە",
"status.bookmark": "نیشانه", "status.bookmark": "نیشانه",
@ -559,8 +559,8 @@
"status.copy": "ڕوونووسی بەستەر بۆ توت", "status.copy": "ڕوونووسی بەستەر بۆ توت",
"status.delete": "سڕینەوە", "status.delete": "سڕینەوە",
"status.detailed_status": "ڕوانگەی گفتوگۆ بە وردەکاری", "status.detailed_status": "ڕوانگەی گفتوگۆ بە وردەکاری",
"status.direct": "Privately mention @{name}", "status.direct": "بە شێوەیەکی تایبەت باسی @{name} بکە",
"status.direct_indicator": "Private mention", "status.direct_indicator": "ئاماژەی تایبەت",
"status.edit": "دەستکاری", "status.edit": "دەستکاری",
"status.edited": "بەشداری {date}", "status.edited": "بەشداری {date}",
"status.edited_x_times": "دەستکاریکراوە {count, plural, one {{count} کات} other {{count} کات}}", "status.edited_x_times": "دەستکاریکراوە {count, plural, one {{count} کات} other {{count} کات}}",
@ -568,7 +568,7 @@
"status.favourite": "دڵخواز", "status.favourite": "دڵخواز",
"status.filter": "ئەم پۆستە فلتەر بکە", "status.filter": "ئەم پۆستە فلتەر بکە",
"status.filtered": "پاڵاوتن", "status.filtered": "پاڵاوتن",
"status.hide": "Hide post", "status.hide": "شاردنەوەی پۆست",
"status.history.created": "{name} دروستکراوە لە{date}", "status.history.created": "{name} دروستکراوە لە{date}",
"status.history.edited": "{name} دروستکاریکراوە لە{date}", "status.history.edited": "{name} دروستکاریکراوە لە{date}",
"status.load_more": "زیاتر بار بکە", "status.load_more": "زیاتر بار بکە",

@ -20,7 +20,7 @@
"account.blocked": "Blokovaný", "account.blocked": "Blokovaný",
"account.browse_more_on_origin_server": "Více na původním profilu", "account.browse_more_on_origin_server": "Více na původním profilu",
"account.cancel_follow_request": "Zrušit žádost o sledování", "account.cancel_follow_request": "Zrušit žádost o sledování",
"account.direct": "Privately mention @{name}", "account.direct": "Soukromě zmínit @{name}",
"account.disable_notifications": "Přestat mě upozorňovat, když @{name} zveřejní příspěvek", "account.disable_notifications": "Přestat mě upozorňovat, když @{name} zveřejní příspěvek",
"account.domain_blocked": "Doména blokována", "account.domain_blocked": "Doména blokována",
"account.edit_profile": "Upravit profil", "account.edit_profile": "Upravit profil",
@ -102,7 +102,7 @@
"column.blocks": "Blokovaní uživatelé", "column.blocks": "Blokovaní uživatelé",
"column.bookmarks": "Záložky", "column.bookmarks": "Záložky",
"column.community": "Místní časová osa", "column.community": "Místní časová osa",
"column.direct": "Private mentions", "column.direct": "Soukromé zmínky",
"column.directory": "Prozkoumat profily", "column.directory": "Prozkoumat profily",
"column.domain_blocks": "Blokované domény", "column.domain_blocks": "Blokované domény",
"column.favourites": "Oblíbené", "column.favourites": "Oblíbené",
@ -163,7 +163,7 @@
"confirmations.domain_block.confirm": "Blokovat celou doménu", "confirmations.domain_block.confirm": "Blokovat celou doménu",
"confirmations.domain_block.message": "Opravdu chcete blokovat celou doménu {domain}? Ve většině případů stačí blokovat nebo skrýt pár konkrétních uživatelů, což také doporučujeme. Z této domény neuvidíte obsah v žádné veřejné časové ose ani v oznámeních. Vaši sledující z této domény budou odstraněni.", "confirmations.domain_block.message": "Opravdu chcete blokovat celou doménu {domain}? Ve většině případů stačí blokovat nebo skrýt pár konkrétních uživatelů, což také doporučujeme. Z této domény neuvidíte obsah v žádné veřejné časové ose ani v oznámeních. Vaši sledující z této domény budou odstraněni.",
"confirmations.edit.confirm": "Upravit", "confirmations.edit.confirm": "Upravit",
"confirmations.edit.message": "Editing now will overwrite the message you are currently composing. Are you sure you want to proceed?", "confirmations.edit.message": "Editovat teď znamená přepsání zprávy, kterou právě tvoříte. Opravdu chcete pokračovat?",
"confirmations.logout.confirm": "Odhlásit se", "confirmations.logout.confirm": "Odhlásit se",
"confirmations.logout.message": "Opravdu se chcete odhlásit?", "confirmations.logout.message": "Opravdu se chcete odhlásit?",
"confirmations.mute.confirm": "Skrýt", "confirmations.mute.confirm": "Skrýt",
@ -216,7 +216,7 @@
"empty_column.blocks": "Ještě jste nezablokovali žádného uživatele.", "empty_column.blocks": "Ještě jste nezablokovali žádného uživatele.",
"empty_column.bookmarked_statuses": "Zatím v záložkách nemáte žádné příspěvky. Až si do nich nějaký přidáte, zobrazí se zde.", "empty_column.bookmarked_statuses": "Zatím v záložkách nemáte žádné příspěvky. Až si do nich nějaký přidáte, zobrazí se zde.",
"empty_column.community": "Místní časová osa je prázdná. Napište něco veřejně a rozhýbejte to tu!", "empty_column.community": "Místní časová osa je prázdná. Napište něco veřejně a rozhýbejte to tu!",
"empty_column.direct": "You don't have any private mentions yet. When you send or receive one, it will show up here.", "empty_column.direct": "Zatím nemáte žádné soukromé zmínky. Až nějakou pošlete nebo dostanete, zobrazí se zde.",
"empty_column.domain_blocks": "Ještě nemáte žádné zablokované domény.", "empty_column.domain_blocks": "Ještě nemáte žádné zablokované domény.",
"empty_column.explore_statuses": "Momentálně není nic populární. Vraťte se později!", "empty_column.explore_statuses": "Momentálně není nic populární. Vraťte se později!",
"empty_column.favourited_statuses": "Zatím nemáte žádné oblíbené příspěvky. Až si nějaký oblíbíte, zobrazí se zde.", "empty_column.favourited_statuses": "Zatím nemáte žádné oblíbené příspěvky. Až si nějaký oblíbíte, zobrazí se zde.",
@ -376,7 +376,7 @@
"navigation_bar.bookmarks": "Záložky", "navigation_bar.bookmarks": "Záložky",
"navigation_bar.community_timeline": "Místní časová osa", "navigation_bar.community_timeline": "Místní časová osa",
"navigation_bar.compose": "Vytvořit nový příspěvek", "navigation_bar.compose": "Vytvořit nový příspěvek",
"navigation_bar.direct": "Private mentions", "navigation_bar.direct": "Soukromé zmínky",
"navigation_bar.discover": "Objevit", "navigation_bar.discover": "Objevit",
"navigation_bar.domain_blocks": "Blokované domény", "navigation_bar.domain_blocks": "Blokované domény",
"navigation_bar.edit_profile": "Upravit profil", "navigation_bar.edit_profile": "Upravit profil",
@ -522,17 +522,17 @@
"report_notification.categories.spam": "Spam", "report_notification.categories.spam": "Spam",
"report_notification.categories.violation": "Porušení pravidla", "report_notification.categories.violation": "Porušení pravidla",
"report_notification.open": "Otevřít hlášení", "report_notification.open": "Otevřít hlášení",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "Žádná nedávná vyhledávání",
"search.placeholder": "Hledat", "search.placeholder": "Hledat",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "Profily odpovídající {x}",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "Přejít na profil {x}",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "Přejít na hashtag {x}",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "Otevřít URL v Mastodonu",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "Příspěvky odpovídající {x}",
"search.search_or_paste": "Hledat nebo vložit URL", "search.search_or_paste": "Hledat nebo vložit URL",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "Rychlé akce",
"search_popout.recent": "Recent searches", "search_popout.recent": "Nedávná vyhledávání",
"search_results.accounts": "Profiles", "search_results.accounts": "Profily",
"search_results.all": "Vše", "search_results.all": "Vše",
"search_results.hashtags": "Hashtagy", "search_results.hashtags": "Hashtagy",
"search_results.nothing_found": "Pro tyto hledané výrazy nebylo nic nenalezeno", "search_results.nothing_found": "Pro tyto hledané výrazy nebylo nic nenalezeno",
@ -560,7 +560,7 @@
"status.delete": "Smazat", "status.delete": "Smazat",
"status.detailed_status": "Podrobné zobrazení konverzace", "status.detailed_status": "Podrobné zobrazení konverzace",
"status.direct": "Privately mention @{name}", "status.direct": "Privately mention @{name}",
"status.direct_indicator": "Private mention", "status.direct_indicator": "Soukromá zmínka",
"status.edit": "Upravit", "status.edit": "Upravit",
"status.edited": "Upraveno {date}", "status.edited": "Upraveno {date}",
"status.edited_x_times": "Upraveno {count, plural, one {{count}krát} few {{count}krát} many {{count}krát} other {{count}krát}}", "status.edited_x_times": "Upraveno {count, plural, one {{count}krát} few {{count}krát} many {{count}krát} other {{count}krát}}",

@ -522,16 +522,16 @@
"report_notification.categories.spam": "Spam", "report_notification.categories.spam": "Spam",
"report_notification.categories.violation": "Regelovertrædelse", "report_notification.categories.violation": "Regelovertrædelse",
"report_notification.open": "Åbn anmeldelse", "report_notification.open": "Åbn anmeldelse",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "Ingen seneste søgninger",
"search.placeholder": "Søg", "search.placeholder": "Søg",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "Profiler matchende {x}",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "Gå til profilen {x}",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "Gå til hashtagget {x}",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "Åbn URL i Mastodon",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "Indlæg matchende {x}",
"search.search_or_paste": "Søg efter eller angiv URL", "search.search_or_paste": "Søg efter eller angiv URL",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "Hurtige handlinger",
"search_popout.recent": "Recent searches", "search_popout.recent": "Seneste søgninger",
"search_results.accounts": "Profiler", "search_results.accounts": "Profiler",
"search_results.all": "Alle", "search_results.all": "Alle",
"search_results.hashtags": "Hashtags", "search_results.hashtags": "Hashtags",

@ -522,16 +522,16 @@
"report_notification.categories.spam": "Spam", "report_notification.categories.spam": "Spam",
"report_notification.categories.violation": "Regelverstoß", "report_notification.categories.violation": "Regelverstoß",
"report_notification.open": "Meldung öffnen", "report_notification.open": "Meldung öffnen",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "Keine kürzlichen Suchanfragen",
"search.placeholder": "Suche", "search.placeholder": "Suche",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "Profile passend zu {x}",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "Profil {x} aufrufen",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "Hashtag {x} aufrufen",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "URL in Mastodon öffnen",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "Beiträge passend zu {x}",
"search.search_or_paste": "Suchen oder URL einfügen", "search.search_or_paste": "Suchen oder URL einfügen",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "Schnellaktionen",
"search_popout.recent": "Recent searches", "search_popout.recent": "Kürzliche Suchanfragen",
"search_results.accounts": "Profile", "search_results.accounts": "Profile",
"search_results.all": "Alles", "search_results.all": "Alles",
"search_results.hashtags": "Hashtags", "search_results.hashtags": "Hashtags",

@ -522,16 +522,16 @@
"report_notification.categories.spam": "Ανεπιθύμητα", "report_notification.categories.spam": "Ανεπιθύμητα",
"report_notification.categories.violation": "Παραβίαση κανόνα", "report_notification.categories.violation": "Παραβίαση κανόνα",
"report_notification.open": "Ανοικτό", "report_notification.open": "Ανοικτό",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "Καμμία πρόσφατη αναζήτηση",
"search.placeholder": "Αναζήτηση", "search.placeholder": "Αναζήτηση",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "Προφίλ που ταιριάζουν με {x}",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "Μετάβαση στο προφίλ {x}",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "Μετάβαση στην ετικέτα {x}",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "Άνοιγμα διεύθυνσης URL στο Mastodon",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "Αναρτήσεις που ταιριάζουν με {x}",
"search.search_or_paste": "Αναζήτηση ή εισαγωγή URL", "search.search_or_paste": "Αναζήτηση ή εισαγωγή URL",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "Γρήγορες ενέργειες",
"search_popout.recent": "Recent searches", "search_popout.recent": "Πρόσφατες αναζητήσεις",
"search_results.accounts": "Προφίλ", "search_results.accounts": "Προφίλ",
"search_results.all": "Όλα", "search_results.all": "Όλα",
"search_results.hashtags": "Ετικέτες", "search_results.hashtags": "Ετικέτες",

@ -522,17 +522,17 @@
"report_notification.categories.spam": "Trudmesaĝo", "report_notification.categories.spam": "Trudmesaĝo",
"report_notification.categories.violation": "Malobservo de la regulo", "report_notification.categories.violation": "Malobservo de la regulo",
"report_notification.open": "Malfermi la raporton", "report_notification.open": "Malfermi la raporton",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "Neniuj lastaj serĉoj",
"search.placeholder": "Serĉi", "search.placeholder": "Serĉi",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "Profiloj kiuj kongruas kun {x}",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "Iri al profilo {x}",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "Iri al kradvorto {x}",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "Malfermi URL en Mastodono",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "Afiŝoj kiuj kongruas kun {x}",
"search.search_or_paste": "Serĉu aŭ algluu URL-on", "search.search_or_paste": "Serĉu aŭ algluu URL-on",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "Rapidaj agoj",
"search_popout.recent": "Recent searches", "search_popout.recent": "Lastaj serĉoj",
"search_results.accounts": "Profiles", "search_results.accounts": "Profiloj",
"search_results.all": "Ĉiuj", "search_results.all": "Ĉiuj",
"search_results.hashtags": "Kradvortoj", "search_results.hashtags": "Kradvortoj",
"search_results.nothing_found": "Povis trovi nenion por ĉi tiuj serĉaj terminoj", "search_results.nothing_found": "Povis trovi nenion por ĉi tiuj serĉaj terminoj",

@ -522,16 +522,16 @@
"report_notification.categories.spam": "Spam", "report_notification.categories.spam": "Spam",
"report_notification.categories.violation": "Violación de regla", "report_notification.categories.violation": "Violación de regla",
"report_notification.open": "Abrir denuncia", "report_notification.open": "Abrir denuncia",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "Sin búsquedas recientes",
"search.placeholder": "Buscar", "search.placeholder": "Buscar",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "Perfiles que coinciden con {x}",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "Ir al perfil de {x}",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "Ir a la etiqueta {x}",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "Abrir enlace en Mastodon",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "Mensajes que coinciden con {x}",
"search.search_or_paste": "Buscar o pegar dirección web", "search.search_or_paste": "Buscar o pegar dirección web",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "Acciones rápidas",
"search_popout.recent": "Recent searches", "search_popout.recent": "Búsquedas recientes",
"search_results.accounts": "Perfiles", "search_results.accounts": "Perfiles",
"search_results.all": "Todos", "search_results.all": "Todos",
"search_results.hashtags": "Etiquetas", "search_results.hashtags": "Etiquetas",

@ -522,16 +522,16 @@
"report_notification.categories.spam": "Spam", "report_notification.categories.spam": "Spam",
"report_notification.categories.violation": "Infracción de regla", "report_notification.categories.violation": "Infracción de regla",
"report_notification.open": "Abrir denuncia", "report_notification.open": "Abrir denuncia",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "Sin búsquedas recientes",
"search.placeholder": "Buscar", "search.placeholder": "Buscar",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "Perfiles que coinciden con {x}",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "Ir al perfil {x}",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "Ir a la etiqueta {x}",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "Abrir enlace en Mastodon",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "Publicaciones que coinciden con {x}",
"search.search_or_paste": "Buscar o pegar URL", "search.search_or_paste": "Buscar o pegar URL",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "Acciones rápidas",
"search_popout.recent": "Recent searches", "search_popout.recent": "Búsquedas recientes",
"search_results.accounts": "Perfiles", "search_results.accounts": "Perfiles",
"search_results.all": "Todos", "search_results.all": "Todos",
"search_results.hashtags": "Etiquetas", "search_results.hashtags": "Etiquetas",

@ -59,13 +59,13 @@
"account.show_reblogs": "Mostrar impulsos de @{name}", "account.show_reblogs": "Mostrar impulsos de @{name}",
"account.statuses_counter": "{count, plural, one {{counter} Publicación} other {{counter} Publicaciones}}", "account.statuses_counter": "{count, plural, one {{counter} Publicación} other {{counter} Publicaciones}}",
"account.unblock": "Desbloquear a @{name}", "account.unblock": "Desbloquear a @{name}",
"account.unblock_domain": "Mostrar {domain}", "account.unblock_domain": "Desbloquear dominio {domain}",
"account.unblock_short": "Desbloquear", "account.unblock_short": "Desbloquear",
"account.unendorse": "No destacar en el perfil", "account.unendorse": "No destacar en el perfil",
"account.unfollow": "Dejar de seguir", "account.unfollow": "Dejar de seguir",
"account.unmute": "Dejar de silenciar a @{name}", "account.unmute": "Dejar de silenciar a @{name}",
"account.unmute_notifications": "Dejar de silenciar las notificaciones de @{name}", "account.unmute_notifications": "Dejar de silenciar las notificaciones de @{name}",
"account.unmute_short": "Desilenciar", "account.unmute_short": "Dejar de silenciar",
"account_note.placeholder": "Clic para añadir nota", "account_note.placeholder": "Clic para añadir nota",
"admin.dashboard.daily_retention": "Tasa de retención de usuarios por día después del registro", "admin.dashboard.daily_retention": "Tasa de retención de usuarios por día después del registro",
"admin.dashboard.monthly_retention": "Tasa de retención de usuarios por mes después del registro", "admin.dashboard.monthly_retention": "Tasa de retención de usuarios por mes después del registro",
@ -76,7 +76,7 @@
"alert.rate_limited.title": "Tráfico limitado", "alert.rate_limited.title": "Tráfico limitado",
"alert.unexpected.message": "Hubo un error inesperado.", "alert.unexpected.message": "Hubo un error inesperado.",
"alert.unexpected.title": "¡Ups!", "alert.unexpected.title": "¡Ups!",
"announcement.announcement": "Comunicación", "announcement.announcement": "Anuncio",
"attachments_list.unprocessed": "(sin procesar)", "attachments_list.unprocessed": "(sin procesar)",
"audio.hide": "Ocultar audio", "audio.hide": "Ocultar audio",
"autosuggest_hashtag.per_week": "{count} por semana", "autosuggest_hashtag.per_week": "{count} por semana",
@ -140,12 +140,12 @@
"compose_form.poll.switch_to_single": "Modificar encuesta para permitir una única opción", "compose_form.poll.switch_to_single": "Modificar encuesta para permitir una única opción",
"compose_form.publish": "Publicar", "compose_form.publish": "Publicar",
"compose_form.publish_form": "Publicar", "compose_form.publish_form": "Publicar",
"compose_form.publish_loud": "{publish}!", "compose_form.publish_loud": "¡{publish}!",
"compose_form.save_changes": "Guardar cambios", "compose_form.save_changes": "Guardar cambios",
"compose_form.sensitive.hide": "{count, plural, one {Marcar material como sensible} other {Marcar material como sensible}}", "compose_form.sensitive.hide": "{count, plural, one {Marcar material como sensible} other {Marcar material como sensible}}",
"compose_form.sensitive.marked": "{count, plural, one {Material marcado como sensible} other {Material marcado como sensible}}", "compose_form.sensitive.marked": "{count, plural, one {Material marcado como sensible} other {Material marcado como sensible}}",
"compose_form.sensitive.unmarked": "{count, plural, one {Material no marcado como sensible} other {Material no marcado como sensible}}", "compose_form.sensitive.unmarked": "{count, plural, one {Material no marcado como sensible} other {Material no marcado como sensible}}",
"compose_form.spoiler.marked": "Texto oculto tras la advertencia", "compose_form.spoiler.marked": "Quitar advertencia de contenido",
"compose_form.spoiler.unmarked": "Añadir advertencia de contenido", "compose_form.spoiler.unmarked": "Añadir advertencia de contenido",
"compose_form.spoiler_placeholder": "Escribe aquí tu advertencia", "compose_form.spoiler_placeholder": "Escribe aquí tu advertencia",
"confirmation_modal.cancel": "Cancelar", "confirmation_modal.cancel": "Cancelar",
@ -160,7 +160,7 @@
"confirmations.delete_list.message": "¿Seguro que quieres borrar esta lista permanentemente?", "confirmations.delete_list.message": "¿Seguro que quieres borrar esta lista permanentemente?",
"confirmations.discard_edit_media.confirm": "Descartar", "confirmations.discard_edit_media.confirm": "Descartar",
"confirmations.discard_edit_media.message": "Tienes cambios sin guardar en la descripción o vista previa del archivo audiovisual, ¿descartarlos de todos modos?", "confirmations.discard_edit_media.message": "Tienes cambios sin guardar en la descripción o vista previa del archivo audiovisual, ¿descartarlos de todos modos?",
"confirmations.domain_block.confirm": "Ocultar dominio entero", "confirmations.domain_block.confirm": "Bloquear dominio entero",
"confirmations.domain_block.message": "¿Seguro de que quieres bloquear al dominio {domain} entero? En general unos cuantos bloqueos y silenciados concretos es suficiente y preferible.", "confirmations.domain_block.message": "¿Seguro de que quieres bloquear al dominio {domain} entero? En general unos cuantos bloqueos y silenciados concretos es suficiente y preferible.",
"confirmations.edit.confirm": "Editar", "confirmations.edit.confirm": "Editar",
"confirmations.edit.message": "Editar ahora reemplazará el mensaje que está escribiendo. ¿Está seguro que quiere proceder?", "confirmations.edit.message": "Editar ahora reemplazará el mensaje que está escribiendo. ¿Está seguro que quiere proceder?",
@ -522,16 +522,16 @@
"report_notification.categories.spam": "Spam", "report_notification.categories.spam": "Spam",
"report_notification.categories.violation": "Infracción de regla", "report_notification.categories.violation": "Infracción de regla",
"report_notification.open": "Abrir informe", "report_notification.open": "Abrir informe",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "Sin búsquedas recientes",
"search.placeholder": "Buscar", "search.placeholder": "Buscar",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "Perfiles que coinciden con {x}",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "Ir al perfil {x}",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "Ir a la etiqueta {x}",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "Abrir enlace en Mastodon",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "Publicaciones que coinciden con {x}",
"search.search_or_paste": "Buscar o pegar URL", "search.search_or_paste": "Buscar o pegar URL",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "Acciones rápidas",
"search_popout.recent": "Recent searches", "search_popout.recent": "Búsquedas recientes",
"search_results.accounts": "Perfiles", "search_results.accounts": "Perfiles",
"search_results.all": "Todos", "search_results.all": "Todos",
"search_results.hashtags": "Etiquetas", "search_results.hashtags": "Etiquetas",

@ -224,7 +224,7 @@
"empty_column.follow_recommendations": "Tundub, et sinu jaoks ei ole võimalik soovitusi luua. Proovi kasutada otsingut, et leida tuttavaid inimesi, või sirvi populaarseid silte.", "empty_column.follow_recommendations": "Tundub, et sinu jaoks ei ole võimalik soovitusi luua. Proovi kasutada otsingut, et leida tuttavaid inimesi, või sirvi populaarseid silte.",
"empty_column.follow_requests": "Pole hetkel ühtegi jälgimistaotlust. Kui saad mõne, näed neid siin.", "empty_column.follow_requests": "Pole hetkel ühtegi jälgimistaotlust. Kui saad mõne, näed neid siin.",
"empty_column.followed_tags": "Sa ei jälgi veel ühtegi märksõna. Kui jälgid, ilmuvad need siia.", "empty_column.followed_tags": "Sa ei jälgi veel ühtegi märksõna. Kui jälgid, ilmuvad need siia.",
"empty_column.hashtag": "Seda sildi all ei ole ühtegi postitust.", "empty_column.hashtag": "Selle sildi all ei ole ühtegi postitust.",
"empty_column.home": "Su koduajajoon on tühi. Jälgi rohkemaid inimesi, et seda täita {suggestions}", "empty_column.home": "Su koduajajoon on tühi. Jälgi rohkemaid inimesi, et seda täita {suggestions}",
"empty_column.home.suggestions": "Vaata mõndasid soovitusi", "empty_column.home.suggestions": "Vaata mõndasid soovitusi",
"empty_column.list": "Siin loetelus pole veel midagi. Kui loetelu liikmed teevad uusi postitusi, näed neid siin.", "empty_column.list": "Siin loetelus pole veel midagi. Kui loetelu liikmed teevad uusi postitusi, näed neid siin.",
@ -522,16 +522,16 @@
"report_notification.categories.spam": "Rämpspost", "report_notification.categories.spam": "Rämpspost",
"report_notification.categories.violation": "Reeglite rikkumine", "report_notification.categories.violation": "Reeglite rikkumine",
"report_notification.open": "Ava teavitus", "report_notification.open": "Ava teavitus",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "Pole viimatisi otsinguid",
"search.placeholder": "Otsi", "search.placeholder": "Otsi",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "Sobivaid profiile {x}",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "Mine profiili {x}",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "Ava silt {x}",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "Ava URL Mastodonis",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "Sobivad postitused {x}",
"search.search_or_paste": "Otsi või kleebi URL", "search.search_or_paste": "Otsi või kleebi URL",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "Kiirtegevused",
"search_popout.recent": "Recent searches", "search_popout.recent": "Viimatised otsingud",
"search_results.accounts": "Profiilid", "search_results.accounts": "Profiilid",
"search_results.all": "Kõik", "search_results.all": "Kõik",
"search_results.hashtags": "Sildid", "search_results.hashtags": "Sildid",

@ -522,16 +522,16 @@
"report_notification.categories.spam": "Spam", "report_notification.categories.spam": "Spam",
"report_notification.categories.violation": "Arau haustea", "report_notification.categories.violation": "Arau haustea",
"report_notification.open": "Ireki salaketa", "report_notification.open": "Ireki salaketa",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "Duela gutxiko bilaketarik ez",
"search.placeholder": "Bilatu", "search.placeholder": "Bilatu",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "{x}-(r)ekin bat datozen profilak",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "Joan {x} profilera",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "Joan {x} traolara",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "Ireki URLa Mastodonen",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "{x}-(r)ekin bat datozen argitalpenak",
"search.search_or_paste": "Bilatu edo itsatsi URLa", "search.search_or_paste": "Bilatu edo itsatsi URLa",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "Ekintza azkarrak",
"search_popout.recent": "Recent searches", "search_popout.recent": "Duela gutxiko bilaketak",
"search_results.accounts": "Profilak", "search_results.accounts": "Profilak",
"search_results.all": "Guztiak", "search_results.all": "Guztiak",
"search_results.hashtags": "Traolak", "search_results.hashtags": "Traolak",

@ -20,7 +20,7 @@
"account.blocked": "مسدود", "account.blocked": "مسدود",
"account.browse_more_on_origin_server": "مرور بیشتر روی نمایهٔ اصلی", "account.browse_more_on_origin_server": "مرور بیشتر روی نمایهٔ اصلی",
"account.cancel_follow_request": "رد کردن درخواست پیگیری", "account.cancel_follow_request": "رد کردن درخواست پیگیری",
"account.direct": "Privately mention @{name}", "account.direct": "خصوصی از @{name} نام ببرید",
"account.disable_notifications": "آگاه کردن من هنگام فرستههای @{name} را متوقّف کن", "account.disable_notifications": "آگاه کردن من هنگام فرستههای @{name} را متوقّف کن",
"account.domain_blocked": "دامنه مسدود شد", "account.domain_blocked": "دامنه مسدود شد",
"account.edit_profile": "ویرایش نمایه", "account.edit_profile": "ویرایش نمایه",
@ -102,7 +102,7 @@
"column.blocks": "کاربران مسدود شده", "column.blocks": "کاربران مسدود شده",
"column.bookmarks": "نشانکها", "column.bookmarks": "نشانکها",
"column.community": "خط زمانی محلّی", "column.community": "خط زمانی محلّی",
"column.direct": "Private mentions", "column.direct": "خصوصی نام ببرید",
"column.directory": "مرور نمایهها", "column.directory": "مرور نمایهها",
"column.domain_blocks": "دامنههای مسدود شده", "column.domain_blocks": "دامنههای مسدود شده",
"column.favourites": "پسندیدهها", "column.favourites": "پسندیدهها",
@ -163,7 +163,7 @@
"confirmations.domain_block.confirm": "مسدود کردن تمام دامنه", "confirmations.domain_block.confirm": "مسدود کردن تمام دامنه",
"confirmations.domain_block.message": "آیا جدی جدی میخواهید تمام دامنهٔ {domain} را مسدود کنید؟ در بیشتر موارد مسدود کردن یا خموشاندن چند حساب خاص کافی است و توصیه میشود. پس از این کار شما هیچ محتوایی را از این دامنه در خط زمانی عمومی یا آگاهیهایتان نخواهید دید. پیگیرانتان از این دامنه هم برداشته خواهند شد.", "confirmations.domain_block.message": "آیا جدی جدی میخواهید تمام دامنهٔ {domain} را مسدود کنید؟ در بیشتر موارد مسدود کردن یا خموشاندن چند حساب خاص کافی است و توصیه میشود. پس از این کار شما هیچ محتوایی را از این دامنه در خط زمانی عمومی یا آگاهیهایتان نخواهید دید. پیگیرانتان از این دامنه هم برداشته خواهند شد.",
"confirmations.edit.confirm": "ویرایش", "confirmations.edit.confirm": "ویرایش",
"confirmations.edit.message": "Editing now will overwrite the message you are currently composing. Are you sure you want to proceed?", "confirmations.edit.message": "در صورت ویرایش، پیامی که در حال نوشتنش بودید از بین خواهد رفت. میخواهید ادامه دهید؟",
"confirmations.logout.confirm": "خروج از حساب", "confirmations.logout.confirm": "خروج از حساب",
"confirmations.logout.message": "مطمئنید میخواهید خارج شوید؟", "confirmations.logout.message": "مطمئنید میخواهید خارج شوید؟",
"confirmations.mute.confirm": "خموش", "confirmations.mute.confirm": "خموش",
@ -216,14 +216,14 @@
"empty_column.blocks": "هنوز کسی را مسدود نکردهاید.", "empty_column.blocks": "هنوز کسی را مسدود نکردهاید.",
"empty_column.bookmarked_statuses": "هنوز هیچ فرستهٔ نشانهگذاری شدهای ندارید. هنگامی که فرستهای را نشانهگذاری کنید، اینجا نشان داده خواهد شد.", "empty_column.bookmarked_statuses": "هنوز هیچ فرستهٔ نشانهگذاری شدهای ندارید. هنگامی که فرستهای را نشانهگذاری کنید، اینجا نشان داده خواهد شد.",
"empty_column.community": "خط زمانی محلّی خالی است. چیزی بنویسید تا چرخش بچرخد!", "empty_column.community": "خط زمانی محلّی خالی است. چیزی بنویسید تا چرخش بچرخد!",
"empty_column.direct": "You don't have any private mentions yet. When you send or receive one, it will show up here.", "empty_column.direct": "هنوز هیچ اشاره خصوصیای ندارید. هنگامی که چنین پیامی بگیرید یا بفرستید اینجا نشان داده خواهد شد.",
"empty_column.domain_blocks": "هنوز هیچ دامنهای مسدود نشده است.", "empty_column.domain_blocks": "هنوز هیچ دامنهای مسدود نشده است.",
"empty_column.explore_statuses": "الآن چیزی پرطرفدار نیست. بعداً دوباره بررسی کنید!", "empty_column.explore_statuses": "الآن چیزی پرطرفدار نیست. بعداً دوباره بررسی کنید!",
"empty_column.favourited_statuses": "شما هنوز هیچ فرستهای را نپسندیدهاید. هنگامی که فرستهای را بپسندید، اینجا نشان داده خواهد شد.", "empty_column.favourited_statuses": "شما هنوز هیچ فرستهای را نپسندیدهاید. هنگامی که فرستهای را بپسندید، اینجا نشان داده خواهد شد.",
"empty_column.favourites": "هنوز هیچ کسی این فرسته را نپسندیده است. هنگامی که کسی آن را بپسندد، اینجا نشان داده خواهد شد.", "empty_column.favourites": "هنوز هیچ کسی این فرسته را نپسندیده است. هنگامی که کسی آن را بپسندد، اینجا نشان داده خواهد شد.",
"empty_column.follow_recommendations": "به نظر نمیتوان هیچ پیشنهادی برایتان ایجاد کرد. میتوانید برای یافتن افرادی که ممکن است بشناسید از جستوجو یا کاوش برچسبهای داغ استفاده کنید.", "empty_column.follow_recommendations": "به نظر نمیتوان هیچ پیشنهادی برایتان ایجاد کرد. میتوانید برای یافتن افرادی که ممکن است بشناسید از جستوجو یا کاوش برچسبهای داغ استفاده کنید.",
"empty_column.follow_requests": "شما هنوز هیچ درخواست پیگیریای ندارید. هنگامی که چنین درخواستی بگیرید، اینجا نشان داده خواهد شد.", "empty_column.follow_requests": "شما هنوز هیچ درخواست پیگیریای ندارید. هنگامی که چنین درخواستی بگیرید، اینجا نشان داده خواهد شد.",
"empty_column.followed_tags": "You have not followed any hashtags yet. When you do, they will show up here.", "empty_column.followed_tags": "شما هیچ برچسبی را پینگرفتید. هنگامی که برچسبی را پیگیری کنید اینجا نمایان میشوند.",
"empty_column.hashtag": "هنوز هیچ چیزی در این برچسب نیست.", "empty_column.hashtag": "هنوز هیچ چیزی در این برچسب نیست.",
"empty_column.home": "خط زمانی خانگیتان خالی است! برای پر کردنش، افراد بیشتری را پی بگیرید. {suggestions}", "empty_column.home": "خط زمانی خانگیتان خالی است! برای پر کردنش، افراد بیشتری را پی بگیرید. {suggestions}",
"empty_column.home.suggestions": "چند پیشنهاد را ببینید", "empty_column.home.suggestions": "چند پیشنهاد را ببینید",
@ -314,7 +314,7 @@
"keyboard_shortcuts.column": "برای تمرکز روی یک فرسته در یکی از ستونها", "keyboard_shortcuts.column": "برای تمرکز روی یک فرسته در یکی از ستونها",
"keyboard_shortcuts.compose": "تمرکز روی محیط نوشتن", "keyboard_shortcuts.compose": "تمرکز روی محیط نوشتن",
"keyboard_shortcuts.description": "توضیح", "keyboard_shortcuts.description": "توضیح",
"keyboard_shortcuts.direct": "to open direct messages column", "keyboard_shortcuts.direct": "باز کردن ستون اشارههای خصوصی",
"keyboard_shortcuts.down": "پایین بردن در سیاهه", "keyboard_shortcuts.down": "پایین بردن در سیاهه",
"keyboard_shortcuts.enter": "گشودن فرسته", "keyboard_shortcuts.enter": "گشودن فرسته",
"keyboard_shortcuts.favourite": "پسندیدن فرسته", "keyboard_shortcuts.favourite": "پسندیدن فرسته",
@ -376,7 +376,7 @@
"navigation_bar.bookmarks": "نشانکها", "navigation_bar.bookmarks": "نشانکها",
"navigation_bar.community_timeline": "خط زمانی محلّی", "navigation_bar.community_timeline": "خط زمانی محلّی",
"navigation_bar.compose": "نوشتن فرستهٔ تازه", "navigation_bar.compose": "نوشتن فرستهٔ تازه",
"navigation_bar.direct": "Private mentions", "navigation_bar.direct": "اشارههای خصوصی",
"navigation_bar.discover": "گشت و گذار", "navigation_bar.discover": "گشت و گذار",
"navigation_bar.domain_blocks": "دامنههای مسدود شده", "navigation_bar.domain_blocks": "دامنههای مسدود شده",
"navigation_bar.edit_profile": "ویرایش نمایه", "navigation_bar.edit_profile": "ویرایش نمایه",
@ -522,17 +522,17 @@
"report_notification.categories.spam": "هرزنامه", "report_notification.categories.spam": "هرزنامه",
"report_notification.categories.violation": "تخطّی از قانون", "report_notification.categories.violation": "تخطّی از قانون",
"report_notification.open": "گشودن گزارش", "report_notification.open": "گشودن گزارش",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "جستوجوی اخیری نیست",
"search.placeholder": "جستوجو", "search.placeholder": "جستوجو",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "نمایههای جور با {x}",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "برو به نمایه {x}",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "برو به برچسب {x}",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "باز کردن پیوند در ماستودون",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "فرستههای جور با {x}",
"search.search_or_paste": "جستوجو یا جایگذاری نشانی", "search.search_or_paste": "جستوجو یا جایگذاری نشانی",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "کنشهای سریع",
"search_popout.recent": "Recent searches", "search_popout.recent": "جستوجوهای اخیر",
"search_results.accounts": "Profiles", "search_results.accounts": "نمایهها",
"search_results.all": "همه", "search_results.all": "همه",
"search_results.hashtags": "برچسبها", "search_results.hashtags": "برچسبها",
"search_results.nothing_found": "چیزی برای این عبارت جستوجو یافت نشد", "search_results.nothing_found": "چیزی برای این عبارت جستوجو یافت نشد",
@ -548,7 +548,7 @@
"server_banner.server_stats": "آمار کارساز:", "server_banner.server_stats": "آمار کارساز:",
"sign_in_banner.create_account": "ایجاد حساب", "sign_in_banner.create_account": "ایجاد حساب",
"sign_in_banner.sign_in": "ورود", "sign_in_banner.sign_in": "ورود",
"sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts. You can also interact from your account on a different server.", "sign_in_banner.text": "برای پیگیری نمایهها یا برچسبها، پسندیدن، همرسانی و یا پاسخ به فرستهها وارد شوید. همچنین میتوانید این کارها را با حسابتان در کارسازی دیگر انجام دهید.",
"status.admin_account": "گشودن واسط مدیریت برای @{name}", "status.admin_account": "گشودن واسط مدیریت برای @{name}",
"status.admin_domain": "گشودن واسط مدیریت برای {domain}", "status.admin_domain": "گشودن واسط مدیریت برای {domain}",
"status.admin_status": "گشودن این فرسته در واسط مدیریت", "status.admin_status": "گشودن این فرسته در واسط مدیریت",
@ -559,8 +559,8 @@
"status.copy": "رونوشت از پیوند فرسته", "status.copy": "رونوشت از پیوند فرسته",
"status.delete": "حذف", "status.delete": "حذف",
"status.detailed_status": "نمایش کامل گفتگو", "status.detailed_status": "نمایش کامل گفتگو",
"status.direct": "Privately mention @{name}", "status.direct": "خصوصی به @{name} اشاره کنید",
"status.direct_indicator": "Private mention", "status.direct_indicator": "اشاره خصوصی",
"status.edit": "ویرایش", "status.edit": "ویرایش",
"status.edited": "ویرایش شده در {date}", "status.edited": "ویرایش شده در {date}",
"status.edited_x_times": "{count, plural, one {{count} مرتبه} other {{count} مرتبه}} ویرایش شد", "status.edited_x_times": "{count, plural, one {{count} مرتبه} other {{count} مرتبه}} ویرایش شد",

@ -153,14 +153,14 @@
"confirmations.block.confirm": "Estä", "confirmations.block.confirm": "Estä",
"confirmations.block.message": "Haluatko varmasti estää käyttäjän {name}?", "confirmations.block.message": "Haluatko varmasti estää käyttäjän {name}?",
"confirmations.cancel_follow_request.confirm": "Peruuta pyyntö", "confirmations.cancel_follow_request.confirm": "Peruuta pyyntö",
"confirmations.cancel_follow_request.message": "Haluatko varmasti peruuttaa pyyntösi seurata käyttäjää {name}?", "confirmations.cancel_follow_request.message": "Haluatko varmasti peruuttaa pyyntösi seurata profiilia {name}?",
"confirmations.delete.confirm": "Poista", "confirmations.delete.confirm": "Poista",
"confirmations.delete.message": "Haluatko varmasti poistaa tämän viestin?", "confirmations.delete.message": "Haluatko varmasti poistaa tämän viestin?",
"confirmations.delete_list.confirm": "Poista", "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 kokonaan?",
"confirmations.discard_edit_media.confirm": "Hylkää", "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.discard_edit_media.message": "Sinulla on tallentamattomia muutoksia median kuvaukseen tai esikatseluun, hylätäänkö ne silti?",
"confirmations.domain_block.confirm": "Estä koko palvelu", "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ää 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.edit.confirm": "Muokkaa", "confirmations.edit.confirm": "Muokkaa",
"confirmations.edit.message": "Muokkaaminen nyt korvaa viestin, jota paraikaa työstät. Haluatko varmasti jatkaa?", "confirmations.edit.message": "Muokkaaminen nyt korvaa viestin, jota paraikaa työstät. Haluatko varmasti jatkaa?",
@ -168,13 +168,13 @@
"confirmations.logout.message": "Haluatko varmasti kirjautua ulos?", "confirmations.logout.message": "Haluatko varmasti kirjautua ulos?",
"confirmations.mute.confirm": "Mykistä", "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.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ää käyttäjän {name}?", "confirmations.mute.message": "Haluatko varmasti mykistää profiilin {name}?",
"confirmations.redraft.confirm": "Poista & palauta muokattavaksi", "confirmations.redraft.confirm": "Poista & palauta muokattavaksi",
"confirmations.redraft.message": "Oletko varma että haluat poistaa tämän julkaisun ja tehdä siitä uuden luonnoksen? Suosikit ja tehostukset menetään, alkuperäisen julkaisusi vastaukset jäävät orvoiksi.", "confirmations.redraft.message": "Oletko varma että haluat poistaa tämän julkaisun ja tehdä siitä uuden luonnoksen? Suosikit ja tehostukset menetään, alkuperäisen julkaisusi vastaukset jäävät orvoiksi.",
"confirmations.reply.confirm": "Vastaa", "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 tällä hetkellä työstämäsi viestin. Oletko varma, että haluat jatkaa?",
"confirmations.unfollow.confirm": "Lopeta seuraaminen", "confirmations.unfollow.confirm": "Lopeta seuraaminen",
"confirmations.unfollow.message": "Haluatko varmasti lakata seuraamasta käyttäjää {name}?", "confirmations.unfollow.message": "Haluatko varmasti lakata seuraamasta profiilia {name}?",
"conversation.delete": "Poista keskustelu", "conversation.delete": "Poista keskustelu",
"conversation.mark_as_read": "Merkitse luetuksi", "conversation.mark_as_read": "Merkitse luetuksi",
"conversation.open": "Näytä keskustelu", "conversation.open": "Näytä keskustelu",
@ -522,16 +522,16 @@
"report_notification.categories.spam": "Roskaposti", "report_notification.categories.spam": "Roskaposti",
"report_notification.categories.violation": "Sääntöjen rikkominen", "report_notification.categories.violation": "Sääntöjen rikkominen",
"report_notification.open": "Avaa ilmoitus", "report_notification.open": "Avaa ilmoitus",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "Edellisiä hakuja ei ole",
"search.placeholder": "Hae", "search.placeholder": "Hae",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "Profiilit, jotka vastaavat \"{x}\"",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "Avaa profiili {x}",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "Avaa aihetunniste {x}",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "Avaa URL-osoite Mastodonissa",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "Julkaisut, jotka vastaavat \"{x}\"",
"search.search_or_paste": "Etsi tai kirjoita URL-osoite", "search.search_or_paste": "Etsi tai kirjoita URL-osoite",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "Pikatoiminnot",
"search_popout.recent": "Recent searches", "search_popout.recent": "Edelliset haut",
"search_results.accounts": "Profiilit", "search_results.accounts": "Profiilit",
"search_results.all": "Kaikki", "search_results.all": "Kaikki",
"search_results.hashtags": "Aihetunnisteet", "search_results.hashtags": "Aihetunnisteet",

@ -522,16 +522,16 @@
"report_notification.categories.spam": "Ruskpostur", "report_notification.categories.spam": "Ruskpostur",
"report_notification.categories.violation": "Brotin regla", "report_notification.categories.violation": "Brotin regla",
"report_notification.open": "Opna melding", "report_notification.open": "Opna melding",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "Ongar nýggjar leitingar",
"search.placeholder": "Leita", "search.placeholder": "Leita",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "Vangar, ið samsvara {x}",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "Far til vanga {x}",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "Far til frámerki {x}",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "Lat URL upp í Mastodon",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "Postar, ið samsvara {x}",
"search.search_or_paste": "Leita ella set URL inn", "search.search_or_paste": "Leita ella set URL inn",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "Skjótar atgerðir",
"search_popout.recent": "Recent searches", "search_popout.recent": "Nýggjar leitingar",
"search_results.accounts": "Vangar", "search_results.accounts": "Vangar",
"search_results.all": "Alt", "search_results.all": "Alt",
"search_results.hashtags": "Frámerki", "search_results.hashtags": "Frámerki",

@ -522,16 +522,16 @@
"report_notification.categories.spam": "Spam", "report_notification.categories.spam": "Spam",
"report_notification.categories.violation": "Skeinde regels", "report_notification.categories.violation": "Skeinde regels",
"report_notification.open": "Rapport iepenje", "report_notification.open": "Rapport iepenje",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "Gjin resinte sykopdrachten",
"search.placeholder": "Sykje", "search.placeholder": "Sykje",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "Accounts dy’t oerienkomme mei {x}",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "Gean nei account {x}",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "Gean nei hashtag {x}",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "URL yn Mastodon iepenje",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "Berjochten dy’t oerienkomme mei {x}",
"search.search_or_paste": "Sykje of fier URL yn", "search.search_or_paste": "Sykje of fier URL yn",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "Flugge aksjes",
"search_popout.recent": "Recent searches", "search_popout.recent": "Resinte sykopdrachten",
"search_results.accounts": "Profilen", "search_results.accounts": "Profilen",
"search_results.all": "Alles", "search_results.all": "Alles",
"search_results.hashtags": "Hashtags", "search_results.hashtags": "Hashtags",

@ -522,16 +522,16 @@
"report_notification.categories.spam": "Spam", "report_notification.categories.spam": "Spam",
"report_notification.categories.violation": "Faltou ás regras", "report_notification.categories.violation": "Faltou ás regras",
"report_notification.open": "Abrir a denuncia", "report_notification.open": "Abrir a denuncia",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "Non hai buscas recentes",
"search.placeholder": "Procurar", "search.placeholder": "Procurar",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "Perfís coincidentes {x}",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "Ir ao perfil {x}",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "Ir ao cancelo {x}",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "Abrir URL en Mastodon",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "Publicacións coincidentes {x}",
"search.search_or_paste": "Busca ou insire URL", "search.search_or_paste": "Busca ou insire URL",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "Accións rápidas",
"search_popout.recent": "Recent searches", "search_popout.recent": "Buscas recentes",
"search_results.accounts": "Perfís", "search_results.accounts": "Perfís",
"search_results.all": "Todo", "search_results.all": "Todo",
"search_results.hashtags": "Cancelos", "search_results.hashtags": "Cancelos",

@ -522,16 +522,16 @@
"report_notification.categories.spam": "ספאם (דואר זבל)", "report_notification.categories.spam": "ספאם (דואר זבל)",
"report_notification.categories.violation": "הפרת כלל", "report_notification.categories.violation": "הפרת כלל",
"report_notification.open": "פתח דו\"ח", "report_notification.open": "פתח דו\"ח",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "לא נמצאו חיפושים אחרונים",
"search.placeholder": "חיפוש", "search.placeholder": "חיפוש",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "פרופילים המכילים {x}",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "לצפיה בפרופיל {x}",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "לצפיה בתגית {x}",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "לפתיחת {x} במסטודון",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "הודעות המכילות {x}",
"search.search_or_paste": "חפש או הזן קישור", "search.search_or_paste": "חפש או הזן קישור",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "פעולות זריזות",
"search_popout.recent": "Recent searches", "search_popout.recent": "חיפושים אחרונים",
"search_results.accounts": "פרופילים", "search_results.accounts": "פרופילים",
"search_results.all": "כל התוצאות", "search_results.all": "כל התוצאות",
"search_results.hashtags": "תגיות", "search_results.hashtags": "תגיות",

@ -522,16 +522,16 @@
"report_notification.categories.spam": "Spam", "report_notification.categories.spam": "Spam",
"report_notification.categories.violation": "Rule violation", "report_notification.categories.violation": "Rule violation",
"report_notification.open": "Open report", "report_notification.open": "Open report",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "ई हिज नह",
"search.placeholder": "ख", "search.placeholder": "ख",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "इल मि {x}",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "इल पर ज {x}",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "शटग पर ज {x}",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "URL मन म",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "ट मि {x}",
"search.search_or_paste": "Search or paste URL", "search.search_or_paste": "Search or paste URL",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "वरित कि",
"search_popout.recent": "Recent searches", "search_popout.recent": "ि",
"search_results.accounts": "पइल", "search_results.accounts": "पइल",
"search_results.all": "All", "search_results.all": "All",
"search_results.hashtags": "Hashtags", "search_results.hashtags": "Hashtags",

@ -522,16 +522,16 @@
"report_notification.categories.spam": "Kéretlen üzenet", "report_notification.categories.spam": "Kéretlen üzenet",
"report_notification.categories.violation": "Szabálysértés", "report_notification.categories.violation": "Szabálysértés",
"report_notification.open": "Bejelentés megnyitása", "report_notification.open": "Bejelentés megnyitása",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "Nincsenek keresési előzmények",
"search.placeholder": "Keresés", "search.placeholder": "Keresés",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "Profilok a következő keresésre: {x}",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "Ugrás a következő profilhoz: {x}",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "Ugrás a következő hashtaghez: {x}",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "Webcím megnyitása a Mastodonon",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "Bejegyzések a következő keresésre: {x}",
"search.search_or_paste": "Keresés vagy webcím beillesztése", "search.search_or_paste": "Keresés vagy webcím beillesztése",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "Gyors műveletek",
"search_popout.recent": "Recent searches", "search_popout.recent": "Legutóbbi keresések",
"search_results.accounts": "Profilok", "search_results.accounts": "Profilok",
"search_results.all": "Összes", "search_results.all": "Összes",
"search_results.hashtags": "#Címkék", "search_results.hashtags": "#Címkék",

@ -522,16 +522,16 @@
"report_notification.categories.spam": "Ruslpóstur", "report_notification.categories.spam": "Ruslpóstur",
"report_notification.categories.violation": "Brot á reglum", "report_notification.categories.violation": "Brot á reglum",
"report_notification.open": "Opin kæra", "report_notification.open": "Opin kæra",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "Engar nýlegar leitir",
"search.placeholder": "Leita", "search.placeholder": "Leita",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "Notandasnið sem samsvara {x}",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "Fara á notandasnið {x}",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "Fara á myllumerkið {x}",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "Opna slóð í Mastodon",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "Færslur sem samsvara {x}",
"search.search_or_paste": "Leita eða líma slóð", "search.search_or_paste": "Leita eða líma slóð",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "Flýtiaðgerðir",
"search_popout.recent": "Recent searches", "search_popout.recent": "Nýlegar leitir",
"search_results.accounts": "Notendasnið", "search_results.accounts": "Notendasnið",
"search_results.all": "Allt", "search_results.all": "Allt",
"search_results.hashtags": "Myllumerki", "search_results.hashtags": "Myllumerki",

@ -522,16 +522,16 @@
"report_notification.categories.spam": "Spam", "report_notification.categories.spam": "Spam",
"report_notification.categories.violation": "Violazione delle regole", "report_notification.categories.violation": "Violazione delle regole",
"report_notification.open": "Apri segnalazione", "report_notification.open": "Apri segnalazione",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "Nessuna ricerca recente",
"search.placeholder": "Cerca", "search.placeholder": "Cerca",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "Profili corrispondenti a {x}",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "Vai al profilo {x}",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "Vai all'hashtag {x}",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "Apri URL in Mastodon",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "Post corrispondenti a {x}",
"search.search_or_paste": "Cerca o incolla URL", "search.search_or_paste": "Cerca o incolla URL",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "Azioni rapide",
"search_popout.recent": "Recent searches", "search_popout.recent": "Ricerche recenti",
"search_results.accounts": "Profili", "search_results.accounts": "Profili",
"search_results.all": "Tutto", "search_results.all": "Tutto",
"search_results.hashtags": "Hashtag", "search_results.hashtags": "Hashtag",

@ -526,16 +526,16 @@
"report_notification.categories.spam": "スパム", "report_notification.categories.spam": "スパム",
"report_notification.categories.violation": "ルール違反", "report_notification.categories.violation": "ルール違反",
"report_notification.open": "通報を開く", "report_notification.open": "通報を開く",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "検索履歴はありません",
"search.placeholder": "検索", "search.placeholder": "検索",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "{x} に該当するプロフィール",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "{x} のプロフィールを見る",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "{x} に該当するハッシュタグ",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "MastodonでURLを開く",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "{x} に該当する投稿",
"search.search_or_paste": "検索またはURLを入力", "search.search_or_paste": "検索またはURLを入力",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "クイック操作",
"search_popout.recent": "Recent searches", "search_popout.recent": "最近の検索",
"search_results.accounts": "ユーザー", "search_results.accounts": "ユーザー",
"search_results.all": "すべて", "search_results.all": "すべて",
"search_results.hashtags": "ハッシュタグ", "search_results.hashtags": "ハッシュタグ",

@ -522,16 +522,16 @@
"report_notification.categories.spam": "스팸", "report_notification.categories.spam": "스팸",
"report_notification.categories.violation": "규칙 위반", "report_notification.categories.violation": "규칙 위반",
"report_notification.open": "신고 열기", "report_notification.open": "신고 열기",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "최근 검색 기록이 없습니다",
"search.placeholder": "검색", "search.placeholder": "검색",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "{x}에 맞는 프로필",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "{x} 프로필로 이동",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "{x} 해시태그로 이동",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "마스토돈에서 URL 열기",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "{x}에 맞는 게시물",
"search.search_or_paste": "검색하거나 URL 붙여넣기", "search.search_or_paste": "검색하거나 URL 붙여넣기",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "빠른 작업",
"search_popout.recent": "Recent searches", "search_popout.recent": "최근 검색",
"search_results.accounts": "프로필", "search_results.accounts": "프로필",
"search_results.all": "전부", "search_results.all": "전부",
"search_results.hashtags": "해시태그", "search_results.hashtags": "해시태그",

@ -522,16 +522,16 @@
"report_notification.categories.spam": "Spams", "report_notification.categories.spam": "Spams",
"report_notification.categories.violation": "Noteikumu pārkāpums", "report_notification.categories.violation": "Noteikumu pārkāpums",
"report_notification.open": "Atvērt sūdzību", "report_notification.open": "Atvērt sūdzību",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "Nav nesen veiktu meklējumu",
"search.placeholder": "Meklēšana", "search.placeholder": "Meklēšana",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "Profili atbilst {x}",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "Doties uz profilu {x}",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "Doties uz tēmturi {x}",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "Atvērt URL Mastodonā",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "Ziņas atbilst {x}",
"search.search_or_paste": "Meklē vai iekopē URL", "search.search_or_paste": "Meklē vai iekopē URL",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "Ātrās darbības",
"search_popout.recent": "Recent searches", "search_popout.recent": "Nesen meklētais",
"search_results.accounts": "Profili", "search_results.accounts": "Profili",
"search_results.all": "Visi", "search_results.all": "Visi",
"search_results.hashtags": "Tēmturi", "search_results.hashtags": "Tēmturi",

@ -20,7 +20,7 @@
"account.blocked": "ဘလသည", "account.blocked": "ဘလသည",
"account.browse_more_on_origin_server": "မရငပရက။", "account.browse_more_on_origin_server": "မရငပရက။",
"account.cancel_follow_request": "ဖပယက", "account.cancel_follow_request": "ဖပယက",
"account.direct": "Privately mention @{name}", "account.direct": "@{name}မနမည",
"account.disable_notifications": "@{name} ပတငသညအခ ကက အသရပ။", "account.disable_notifications": "@{name} ပတငသညအခ ကက အသရပ။",
"account.domain_blocked": "ဒပငသည\n", "account.domain_blocked": "ဒပငသည\n",
"account.edit_profile": "ကတမဆငမည", "account.edit_profile": "ကတမဆငမည",
@ -102,7 +102,7 @@
"column.blocks": "ဘလအက", "column.blocks": "ဘလအက",
"column.bookmarks": "မတမ", "column.bookmarks": "မတမ",
"column.community": "ဒသတ အခဇယ", "column.community": "ဒသတ အခဇယ",
"column.direct": "Private mentions", "column.direct": "သန",
"column.directory": "ပရကမည\n", "column.directory": "ပရကမည\n",
"column.domain_blocks": " ဒကမည", "column.domain_blocks": " ဒကမည",
"column.favourites": "အကက", "column.favourites": "အကက",
@ -216,7 +216,7 @@
"empty_column.blocks": "ပအကမရ", "empty_column.blocks": "ပအကမရ",
"empty_column.bookmarked_statuses": "သင မရ။ တစက အမအသကက ၎ငက ဤနမည။", "empty_column.bookmarked_statuses": "သင မရ။ တစက အမအသကက ၎ငက ဤနမည။",
"empty_column.community": "ဒသတက အလသည။ အမရနအတက တစ။", "empty_column.community": "ဒသတက အလသည။ အမရနအတက တစ။",
"empty_column.direct": "You don't have any private mentions yet. When you send or receive one, it will show up here.", "empty_column.direct": "သငသနက မရ။ ပမဟ လကအခ၊ ၎ငသည ဤနမည",
"empty_column.domain_blocks": "သငမရ", "empty_column.domain_blocks": "သငမရ",
"empty_column.explore_statuses": "အခဆယပန မရ။ နကစစရန။", "empty_column.explore_statuses": "အခဆယပန မရ။ နကစစရန။",
"empty_column.favourited_statuses": "သင အကက မရ။ တစက သငသကက ၎ငက ဤနမည။", "empty_column.favourited_statuses": "သင အကက မရ။ တစက သငသကက ၎ငက ဤနမည။",
@ -314,7 +314,7 @@
"keyboard_shortcuts.column": "to focus a status in one of the columns", "keyboard_shortcuts.column": "to focus a status in one of the columns",
"keyboard_shortcuts.compose": "to focus the compose textarea", "keyboard_shortcuts.compose": "to focus the compose textarea",
"keyboard_shortcuts.description": "ဖက", "keyboard_shortcuts.description": "ဖက",
"keyboard_shortcuts.direct": "to open direct messages column", "keyboard_shortcuts.direct": "သနကကကရန",
"keyboard_shortcuts.down": "to move down in the list", "keyboard_shortcuts.down": "to move down in the list",
"keyboard_shortcuts.enter": "to open status", "keyboard_shortcuts.enter": "to open status",
"keyboard_shortcuts.favourite": "to favourite", "keyboard_shortcuts.favourite": "to favourite",
@ -376,7 +376,7 @@
"navigation_bar.bookmarks": "မသည", "navigation_bar.bookmarks": "မသည",
"navigation_bar.community_timeline": "ဒသစ", "navigation_bar.community_timeline": "ဒသစ",
"navigation_bar.compose": "ပအသစ", "navigation_bar.compose": "ပအသစ",
"navigation_bar.direct": "Private mentions", "navigation_bar.direct": "သနက",
"navigation_bar.discover": "ရ", "navigation_bar.discover": "ရ",
"navigation_bar.domain_blocks": "Hidden domains", "navigation_bar.domain_blocks": "Hidden domains",
"navigation_bar.edit_profile": "ကတမဆငမည", "navigation_bar.edit_profile": "ကတမဆငမည",
@ -522,17 +522,17 @@
"report_notification.categories.spam": "Spam", "report_notification.categories.spam": "Spam",
"report_notification.categories.violation": "စညကမကက", "report_notification.categories.violation": "စညကမကက",
"report_notification.open": "အစရငက", "report_notification.open": "အစရငက",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "လတတလမရ",
"search.placeholder": "ရရန", "search.placeholder": "ရရန",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "{x} ကက ပရ",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "ပရ {x} သမည",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "hashtag {x}မည",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "Mastodon URL ကမည",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "{x} ကက",
"search.search_or_paste": "URL ရကထညမဟ", "search.search_or_paste": "URL ရကထညမဟ",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "အမ",
"search_popout.recent": "Recent searches", "search_popout.recent": "လတတလ",
"search_results.accounts": "Profiles", "search_results.accounts": "က",
"search_results.all": "အ", "search_results.all": "အ",
"search_results.hashtags": "ဟကတက", "search_results.hashtags": "ဟကတက",
"search_results.nothing_found": "ရအရမရ", "search_results.nothing_found": "ရအရမရ",
@ -559,8 +559,8 @@
"status.copy": "Copy link to status", "status.copy": "Copy link to status",
"status.delete": "ဖကရန", "status.delete": "ဖကရန",
"status.detailed_status": "အသစကက", "status.detailed_status": "အသစကက",
"status.direct": "Privately mention @{name}", "status.direct": "@{name} ကသနမည\n",
"status.direct_indicator": "Private mention", "status.direct_indicator": "သန",
"status.edit": "ပဆငရန", "status.edit": "ပဆငရန",
"status.edited": "{date} ကဆင", "status.edited": "{date} ကဆင",
"status.edited_x_times": "{count, plural, one {{count} time} other {{count} times}} ပဆငသည", "status.edited_x_times": "{count, plural, one {{count} time} other {{count} times}} ပဆငသည",
@ -646,7 +646,7 @@
"upload_modal.description_placeholder": "သကသညဝဍဎနဆက ဇလပငထက အဓက ဂဃနဏဖတသည", "upload_modal.description_placeholder": "သကသညဝဍဎနဆက ဇလပငထက အဓက ဂဃနဏဖတသည",
"upload_modal.detect_text": "ပက", "upload_modal.detect_text": "ပက",
"upload_modal.edit_media": "မကဆငရန", "upload_modal.edit_media": "မကဆငရန",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", "upload_modal.hint": " အမတမကသည focal point ကရန Preview ပ စကကမဟ",
"upload_modal.preparing_ocr": "OCR ပဆငသည…", "upload_modal.preparing_ocr": "OCR ပဆငသည…",
"upload_modal.preview_label": "({ratio}) အစမကရန", "upload_modal.preview_label": "({ratio}) အစမကရန",
"upload_progress.label": "တငသည...", "upload_progress.label": "တငသည...",

@ -55,7 +55,7 @@
"account.report": "@{name} rapporteren", "account.report": "@{name} rapporteren",
"account.requested": "Wachten op goedkeuring. Klik om het volgverzoek te annuleren", "account.requested": "Wachten op goedkeuring. Klik om het volgverzoek te annuleren",
"account.requested_follow": "{name} wil je graag volgen", "account.requested_follow": "{name} wil je graag volgen",
"account.share": "Profiel van @{name} delen", "account.share": "Account van @{name} delen",
"account.show_reblogs": "Boosts van @{name} tonen", "account.show_reblogs": "Boosts van @{name} tonen",
"account.statuses_counter": "{count, plural, one {{counter} bericht} other {{counter} berichten}}", "account.statuses_counter": "{count, plural, one {{counter} bericht} other {{counter} berichten}}",
"account.unblock": "@{name} deblokkeren", "account.unblock": "@{name} deblokkeren",
@ -487,7 +487,7 @@
"report.categories.violation": "De inhoud overtreedt een of meerdere serverregels", "report.categories.violation": "De inhoud overtreedt een of meerdere serverregels",
"report.category.subtitle": "Kies wat het beste overeenkomt", "report.category.subtitle": "Kies wat het beste overeenkomt",
"report.category.title": "Vertel ons wat er met dit {type} aan de hand is", "report.category.title": "Vertel ons wat er met dit {type} aan de hand is",
"report.category.title_account": "profiel", "report.category.title_account": "account",
"report.category.title_status": "bericht", "report.category.title_status": "bericht",
"report.close": "Klaar", "report.close": "Klaar",
"report.comment.title": "Zijn er nog andere dingen waarvan je denkt dat wij dat moeten weten?", "report.comment.title": "Zijn er nog andere dingen waarvan je denkt dat wij dat moeten weten?",
@ -522,17 +522,17 @@
"report_notification.categories.spam": "Spam", "report_notification.categories.spam": "Spam",
"report_notification.categories.violation": "Overtreden regel(s)", "report_notification.categories.violation": "Overtreden regel(s)",
"report_notification.open": "Rapportage openen", "report_notification.open": "Rapportage openen",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "Geen recente zoekopdrachten",
"search.placeholder": "Zoeken", "search.placeholder": "Zoeken",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "Accounts die overeenkomen met {x}",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "Ga naar account {x}",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "Ga naar hashtag {x}",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "URL in Mastodon openen",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "Berichten die overeenkomen met {x}",
"search.search_or_paste": "Zoek of voer een URL in", "search.search_or_paste": "Zoek of voer een URL in",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "Snelle acties",
"search_popout.recent": "Recent searches", "search_popout.recent": "Recente zoekopdrachten",
"search_results.accounts": "Profielen", "search_results.accounts": "Accounts",
"search_results.all": "Alles", "search_results.all": "Alles",
"search_results.hashtags": "Hashtags", "search_results.hashtags": "Hashtags",
"search_results.nothing_found": "Deze zoektermen leveren geen resultaat op", "search_results.nothing_found": "Deze zoektermen leveren geen resultaat op",

@ -527,16 +527,16 @@
"report_notification.categories.spam": "Spam", "report_notification.categories.spam": "Spam",
"report_notification.categories.violation": "Naruszenie zasad", "report_notification.categories.violation": "Naruszenie zasad",
"report_notification.open": "Otwórz raport", "report_notification.open": "Otwórz raport",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "Brak ostatnich wyszukiwań",
"search.placeholder": "Szukaj", "search.placeholder": "Szukaj",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "Profile pasujące do {x}",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "Przejdź do profilu {x}",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "Przejdź do hasztaga {x}",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "Otwórz adres URL w Mastodonie",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "Wpisy pasujące do {x}",
"search.search_or_paste": "Wyszukaj lub wklej adres", "search.search_or_paste": "Wyszukaj lub wklej adres",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "Szybkie akcje",
"search_popout.recent": "Recent searches", "search_popout.recent": "Ostatnie wyszukiwania",
"search_results.accounts": "Profile", "search_results.accounts": "Profile",
"search_results.all": "Wszystkie", "search_results.all": "Wszystkie",
"search_results.hashtags": "Hasztagi", "search_results.hashtags": "Hasztagi",

@ -522,16 +522,16 @@
"report_notification.categories.spam": "Spam", "report_notification.categories.spam": "Spam",
"report_notification.categories.violation": "Violação de regra", "report_notification.categories.violation": "Violação de regra",
"report_notification.open": "Abrir denúncia", "report_notification.open": "Abrir denúncia",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "Nenhuma busca recente",
"search.placeholder": "Pesquisar", "search.placeholder": "Pesquisar",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "Perfis correspondentes a {x}",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "Ir para a página do perfil {x}",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "Ir para a hashtag {x}",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "Abrir link no Mastodon",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "Publicações correspondentes a {x}",
"search.search_or_paste": "Buscar ou colar URL", "search.search_or_paste": "Buscar ou colar URL",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "Ações rápidas",
"search_popout.recent": "Recent searches", "search_popout.recent": "Buscas Recentes",
"search_results.accounts": "Perfis", "search_results.accounts": "Perfis",
"search_results.all": "Tudo", "search_results.all": "Tudo",
"search_results.hashtags": "Hashtags", "search_results.hashtags": "Hashtags",

@ -522,16 +522,16 @@
"report_notification.categories.spam": "Spam", "report_notification.categories.spam": "Spam",
"report_notification.categories.violation": "Violação de regra", "report_notification.categories.violation": "Violação de regra",
"report_notification.open": "Abrir denúncia", "report_notification.open": "Abrir denúncia",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "Nenhuma pesquisa recente",
"search.placeholder": "Pesquisar", "search.placeholder": "Pesquisar",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "Perfis com correspondência a {x}",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "Ir para o perfil {x}",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "Ir para a hashtag {x}",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "Abrir ligação no Mastodon",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "Publicações com correspondência a {x}",
"search.search_or_paste": "Pesquisar ou introduzir URL", "search.search_or_paste": "Pesquisar ou introduzir URL",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "Ações rápidas",
"search_popout.recent": "Recent searches", "search_popout.recent": "Pesquisas recentes",
"search_results.accounts": "Perfis", "search_results.accounts": "Perfis",
"search_results.all": "Tudo", "search_results.all": "Tudo",
"search_results.hashtags": "Etiquetas", "search_results.hashtags": "Etiquetas",

@ -522,16 +522,16 @@
"report_notification.categories.spam": "I padëshiruar", "report_notification.categories.spam": "I padëshiruar",
"report_notification.categories.violation": "Cenim rregullash", "report_notification.categories.violation": "Cenim rregullash",
"report_notification.open": "Hape raportimin", "report_notification.open": "Hape raportimin",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "Pa kërkime së fundi",
"search.placeholder": "Kërkoni", "search.placeholder": "Kërkoni",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "Profile me përputhje me {x}",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "Kalo te profili {x}",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "Kalo te hashtag-u {x}",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "Hape URL-në në Mastodon",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "Postime me përputhje me {x}",
"search.search_or_paste": "Kërkoni, ose hidhni një URL", "search.search_or_paste": "Kërkoni, ose hidhni një URL",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "Veprime të shpejta",
"search_popout.recent": "Recent searches", "search_popout.recent": "Kërkime së fundi",
"search_results.accounts": "Profile", "search_results.accounts": "Profile",
"search_results.all": "Krejt", "search_results.all": "Krejt",
"search_results.hashtags": "Hashtag-ë", "search_results.hashtags": "Hashtag-ë",

@ -522,17 +522,17 @@
"report_notification.categories.spam": "สแปม", "report_notification.categories.spam": "สแปม",
"report_notification.categories.violation": "การละเมดกฎ", "report_notification.categories.violation": "การละเมดกฎ",
"report_notification.open": "รายงานทเปด", "report_notification.open": "รายงานทเปด",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "ไมการคนหาลาส",
"search.placeholder": "คนหา", "search.placeholder": "คนหา",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "โปรไฟลตรงก {x}",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "ไปยงโปรไฟล {x}",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "ไปยงแฮชแท {x}",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "เปด URL ใน Mastodon",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "โพสตตรงก {x}",
"search.search_or_paste": "คนหาหรอวาง URL", "search.search_or_paste": "คนหาหรอวาง URL",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "การกระทำดวน",
"search_popout.recent": "Recent searches", "search_popout.recent": "การคนหาลาส",
"search_results.accounts": "Profiles", "search_results.accounts": "โปรไฟล",
"search_results.all": "ทงหมด", "search_results.all": "ทงหมด",
"search_results.hashtags": "แฮชแทก", "search_results.hashtags": "แฮชแทก",
"search_results.nothing_found": "ไมพบสงใดสำหรบคำคนหาเหลาน", "search_results.nothing_found": "ไมพบสงใดสำหรบคำคนหาเหลาน",

@ -72,8 +72,8 @@
"admin.dashboard.retention.average": "Ortalama", "admin.dashboard.retention.average": "Ortalama",
"admin.dashboard.retention.cohort": "Kayıt ayı", "admin.dashboard.retention.cohort": "Kayıt ayı",
"admin.dashboard.retention.cohort_size": "Yeni kullanıcılar", "admin.dashboard.retention.cohort_size": "Yeni kullanıcılar",
"alert.rate_limited.message": "Lütfen {retry_time, time, medium} süresinden sonra tekrar deneyin.", "alert.rate_limited.message": "Lütfen {retry_time, time, medium} saatinden sonra tekrar deneyin.",
"alert.rate_limited.title": "Oran sınırlıdır", "alert.rate_limited.title": "Aşırı istek gönderildi",
"alert.unexpected.message": "Beklenmedik bir hata oluştu.", "alert.unexpected.message": "Beklenmedik bir hata oluştu.",
"alert.unexpected.title": "Hay aksi!", "alert.unexpected.title": "Hay aksi!",
"announcement.announcement": "Duyuru", "announcement.announcement": "Duyuru",
@ -522,16 +522,16 @@
"report_notification.categories.spam": "İstenmeyen", "report_notification.categories.spam": "İstenmeyen",
"report_notification.categories.violation": "Kural ihlali", "report_notification.categories.violation": "Kural ihlali",
"report_notification.open": "Bildirim aç", "report_notification.open": "Bildirim aç",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "Son arama yok",
"search.placeholder": "Ara", "search.placeholder": "Ara",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "Eşleşen profiller {x}",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "Profile git {x}",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "Etikete git {x}",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "URL'yi Mastodon'da Aç",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "Eşleşen gönderiler {x}",
"search.search_or_paste": "Ara veya URL gir", "search.search_or_paste": "Ara veya URL gir",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "Hızlı eylemler",
"search_popout.recent": "Recent searches", "search_popout.recent": "Son aramalar",
"search_results.accounts": "Profiller", "search_results.accounts": "Profiller",
"search_results.all": "Tümü", "search_results.all": "Tümü",
"search_results.hashtags": "Etiketler", "search_results.hashtags": "Etiketler",

@ -522,16 +522,16 @@
"report_notification.categories.spam": "Спам", "report_notification.categories.spam": "Спам",
"report_notification.categories.violation": "Порушення правил", "report_notification.categories.violation": "Порушення правил",
"report_notification.open": "Відкрити скаргу", "report_notification.open": "Відкрити скаргу",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "Немає останніх пошуків",
"search.placeholder": "Пошук", "search.placeholder": "Пошук",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "Збіг профілів {x}",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "Перейти до профілю {x}",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "Перейти до хештегу {x}",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "Відкрити URL-адресу в Mastodon",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "Збіг дописів {x}",
"search.search_or_paste": "Введіть адресу або пошуковий запит", "search.search_or_paste": "Введіть адресу або пошуковий запит",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "Швидкі дії",
"search_popout.recent": "Recent searches", "search_popout.recent": "Нещодавні запити",
"search_results.accounts": "Профілі", "search_results.accounts": "Профілі",
"search_results.all": "Усі", "search_results.all": "Усі",
"search_results.hashtags": "Хештеґи", "search_results.hashtags": "Хештеґи",

@ -522,16 +522,16 @@
"report_notification.categories.spam": "Spam", "report_notification.categories.spam": "Spam",
"report_notification.categories.violation": "Vi phạm nội quy", "report_notification.categories.violation": "Vi phạm nội quy",
"report_notification.open": "Mở báo cáo", "report_notification.open": "Mở báo cáo",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "Không có tìm kiếm gần đây",
"search.placeholder": "Tìm kiếm", "search.placeholder": "Tìm kiếm",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "Người trùng khớp {x}",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "Xem trang {x}",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "Xem hashtag {x}",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "Mở liên kết trong Mastodon",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "Tút trùng khớp {x}",
"search.search_or_paste": "Tìm kiếm hoặc nhập URL", "search.search_or_paste": "Tìm kiếm hoặc nhập URL",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "Thao tác nhanh",
"search_popout.recent": "Recent searches", "search_popout.recent": "Tìm kiếm gần đây",
"search_results.accounts": "Mọi người", "search_results.accounts": "Mọi người",
"search_results.all": "Toàn bộ", "search_results.all": "Toàn bộ",
"search_results.hashtags": "Hashtags", "search_results.hashtags": "Hashtags",

@ -37,7 +37,7 @@
"account.following_counter": "正在关注 {counter} 人", "account.following_counter": "正在关注 {counter} 人",
"account.follows.empty": "此用户目前尚未关注任何人。", "account.follows.empty": "此用户目前尚未关注任何人。",
"account.follows_you": "关注了你", "account.follows_you": "关注了你",
"account.go_to_profile": "转到个人资料界面", "account.go_to_profile": "转到个人资料",
"account.hide_reblogs": "隐藏来自 @{name} 的转贴", "account.hide_reblogs": "隐藏来自 @{name} 的转贴",
"account.joined_short": "加入于", "account.joined_short": "加入于",
"account.languages": "更改订阅语言", "account.languages": "更改订阅语言",
@ -53,7 +53,7 @@
"account.posts": "嘟文", "account.posts": "嘟文",
"account.posts_with_replies": "嘟文和回复", "account.posts_with_replies": "嘟文和回复",
"account.report": "举报 @{name}", "account.report": "举报 @{name}",
"account.requested": "正在等待对方同意。点击取消发送关注请求", "account.requested": "正在等待对方同意。点击取消发送关注请求",
"account.requested_follow": "{name} 已经向你发送了关注请求", "account.requested_follow": "{name} 已经向你发送了关注请求",
"account.share": "分享 @{name} 的个人资料页", "account.share": "分享 @{name} 的个人资料页",
"account.show_reblogs": "显示来自 @{name} 的转嘟", "account.show_reblogs": "显示来自 @{name} 的转嘟",
@ -202,7 +202,7 @@
"emoji_button.food": "食物和饮料", "emoji_button.food": "食物和饮料",
"emoji_button.label": "插入表情符号", "emoji_button.label": "插入表情符号",
"emoji_button.nature": "自然", "emoji_button.nature": "自然",
"emoji_button.not_found": "木有这个表情符号!(╯°□°)╯︵ ┻━┻", "emoji_button.not_found": "未找到匹配的表情符号",
"emoji_button.objects": "物体", "emoji_button.objects": "物体",
"emoji_button.people": "人物", "emoji_button.people": "人物",
"emoji_button.recent": "常用", "emoji_button.recent": "常用",
@ -246,18 +246,18 @@
"explore.trending_tags": "话题标签", "explore.trending_tags": "话题标签",
"filter_modal.added.context_mismatch_explanation": "此过滤器分类不适用访问过嘟文的环境中。如果你想要在环境中过滤嘟文,你必须编辑此过滤器。", "filter_modal.added.context_mismatch_explanation": "此过滤器分类不适用访问过嘟文的环境中。如果你想要在环境中过滤嘟文,你必须编辑此过滤器。",
"filter_modal.added.context_mismatch_title": "环境不匹配!", "filter_modal.added.context_mismatch_title": "环境不匹配!",
"filter_modal.added.expired_explanation": "此过滤器类已过期,你需要修改到期日期才能应用。", "filter_modal.added.expired_explanation": "此过滤器类已过期,你需要修改到期日期才能应用。",
"filter_modal.added.expired_title": "过滤器已过期!", "filter_modal.added.expired_title": "过滤器已过期!",
"filter_modal.added.review_and_configure": "要审核并进一步配置此过滤器分类,请前往{settings_link}。", "filter_modal.added.review_and_configure": "要审核并进一步配置此过滤器分类,请前往{settings_link}。",
"filter_modal.added.review_and_configure_title": "过滤器设置", "filter_modal.added.review_and_configure_title": "过滤器设置",
"filter_modal.added.settings_link": "设置页面", "filter_modal.added.settings_link": "设置页面",
"filter_modal.added.short_explanation": "此嘟文已添加到以下过滤器类:{title}。", "filter_modal.added.short_explanation": "此嘟文已添加到以下过滤器类:{title}。",
"filter_modal.added.title": "过滤器已添加 !", "filter_modal.added.title": "过滤器已添加 !",
"filter_modal.select_filter.context_mismatch": "不适用于此环境", "filter_modal.select_filter.context_mismatch": "不适用于这个情境",
"filter_modal.select_filter.expired": "已过期", "filter_modal.select_filter.expired": "已过期",
"filter_modal.select_filter.prompt_new": "新类:{name}", "filter_modal.select_filter.prompt_new": "新类:{name}",
"filter_modal.select_filter.search": "搜索或创建", "filter_modal.select_filter.search": "搜索或创建",
"filter_modal.select_filter.subtitle": "使用一个已存在分类,或创建一个新类", "filter_modal.select_filter.subtitle": "使用一个已存在分类,或创建一个新类",
"filter_modal.select_filter.title": "过滤此嘟文", "filter_modal.select_filter.title": "过滤此嘟文",
"filter_modal.title.status": "过滤一条嘟文", "filter_modal.title.status": "过滤一条嘟文",
"follow_recommendations.done": "完成", "follow_recommendations.done": "完成",
@ -269,7 +269,7 @@
"followed_tags": "关注的话题标签", "followed_tags": "关注的话题标签",
"footer.about": "关于", "footer.about": "关于",
"footer.directory": "用户目录", "footer.directory": "用户目录",
"footer.get_app": "获取应用程序", "footer.get_app": "获取应用",
"footer.invite": "邀请", "footer.invite": "邀请",
"footer.keyboard_shortcuts": "快捷键列表", "footer.keyboard_shortcuts": "快捷键列表",
"footer.privacy_policy": "隐私政策", "footer.privacy_policy": "隐私政策",
@ -363,8 +363,8 @@
"lists.search": "搜索你关注的人", "lists.search": "搜索你关注的人",
"lists.subheading": "你的列表", "lists.subheading": "你的列表",
"load_pending": "{count} 项", "load_pending": "{count} 项",
"loading_indicator.label": "加载中…", "loading_indicator.label": "加载中…",
"media_gallery.toggle_visible": "隐藏图片", "media_gallery.toggle_visible": "{number, plural, other {隐藏图像}}",
"missing_indicator.label": "找不到内容", "missing_indicator.label": "找不到内容",
"missing_indicator.sublabel": "无法找到此资源", "missing_indicator.sublabel": "无法找到此资源",
"moved_to_account_banner.text": "您的账号 {disabledAccount} 已停用,因为您已迁移到 {movedToAccount} 。", "moved_to_account_banner.text": "您的账号 {disabledAccount} 已停用,因为您已迁移到 {movedToAccount} 。",
@ -387,7 +387,7 @@
"navigation_bar.followed_tags": "关注的话题标签", "navigation_bar.followed_tags": "关注的话题标签",
"navigation_bar.follows_and_followers": "关注管理", "navigation_bar.follows_and_followers": "关注管理",
"navigation_bar.lists": "列表", "navigation_bar.lists": "列表",
"navigation_bar.logout": "登出", "navigation_bar.logout": "退出登录",
"navigation_bar.mutes": "已隐藏的用户", "navigation_bar.mutes": "已隐藏的用户",
"navigation_bar.personal": "个人", "navigation_bar.personal": "个人",
"navigation_bar.pins": "置顶嘟文", "navigation_bar.pins": "置顶嘟文",
@ -503,7 +503,7 @@
"report.reasons.other_description": "该问题不符合其他类别", "report.reasons.other_description": "该问题不符合其他类别",
"report.reasons.spam": "它是垃圾信息", "report.reasons.spam": "它是垃圾信息",
"report.reasons.spam_description": "恶意链接,虚假互动和重复回复", "report.reasons.spam_description": "恶意链接,虚假互动和重复回复",
"report.reasons.violation": "违反服务器规则", "report.reasons.violation": "违反服务器规则",
"report.reasons.violation_description": "你清楚它违反了特定的规则", "report.reasons.violation_description": "你清楚它违反了特定的规则",
"report.rules.subtitle": "选择所有适用选项", "report.rules.subtitle": "选择所有适用选项",
"report.rules.title": "哪些规则被违反了?", "report.rules.title": "哪些规则被违反了?",
@ -522,16 +522,16 @@
"report_notification.categories.spam": "骚扰", "report_notification.categories.spam": "骚扰",
"report_notification.categories.violation": "违反规则", "report_notification.categories.violation": "违反规则",
"report_notification.open": "打开举报", "report_notification.open": "打开举报",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "无最近搜索",
"search.placeholder": "搜索", "search.placeholder": "搜索",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "匹配 {x} 的个人资料",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "转到 {x} 个人资料",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "转到标签 {x}",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "在 Mastodon 中打开链接",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "匹配 {x} 的帖子",
"search.search_or_paste": "搜索或输入链接", "search.search_or_paste": "搜索或输入链接",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "快捷操作",
"search_popout.recent": "Recent searches", "search_popout.recent": "最近搜索",
"search_results.accounts": "个人资料", "search_results.accounts": "个人资料",
"search_results.all": "全部", "search_results.all": "全部",
"search_results.hashtags": "话题标签", "search_results.hashtags": "话题标签",

@ -522,16 +522,16 @@
"report_notification.categories.spam": "垃圾訊息", "report_notification.categories.spam": "垃圾訊息",
"report_notification.categories.violation": "違反規則", "report_notification.categories.violation": "違反規則",
"report_notification.open": "開啟檢舉報告", "report_notification.open": "開啟檢舉報告",
"search.no_recent_searches": "No recent searches", "search.no_recent_searches": "尚無最近的搜尋紀錄",
"search.placeholder": "搜尋", "search.placeholder": "搜尋",
"search.quick_action.account_search": "Profiles matching {x}", "search.quick_action.account_search": "符合的個人檔案 {x}",
"search.quick_action.go_to_account": "Go to profile {x}", "search.quick_action.go_to_account": "前往個人檔案 {x}",
"search.quick_action.go_to_hashtag": "Go to hashtag {x}", "search.quick_action.go_to_hashtag": "前往主題標籤 {x}",
"search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.open_url": "於 Mastodon 中開啟連結",
"search.quick_action.status_search": "Posts matching {x}", "search.quick_action.status_search": "符合的嘟文 {x}",
"search.search_or_paste": "搜尋或輸入網址", "search.search_or_paste": "搜尋或輸入網址",
"search_popout.quick_actions": "Quick actions", "search_popout.quick_actions": "快捷操作",
"search_popout.recent": "Recent searches", "search_popout.recent": "最近的搜尋紀錄",
"search_results.accounts": "個人檔案", "search_results.accounts": "個人檔案",
"search_results.all": "全部", "search_results.all": "全部",
"search_results.hashtags": "主題標籤", "search_results.hashtags": "主題標籤",

@ -100,11 +100,12 @@ function main() {
const datetime = new Date(content.getAttribute('datetime')); const datetime = new Date(content.getAttribute('datetime'));
const now = new Date(); const now = new Date();
content.title = dateTimeFormat.format(datetime); const timeGiven = content.getAttribute('datetime').includes('T');
content.title = timeGiven ? dateTimeFormat.format(datetime) : dateFormat.format(datetime);
content.textContent = timeAgoString({ content.textContent = timeAgoString({
formatMessage: ({ id, defaultMessage }, values) => (new IntlMessageFormat(messages[id] || defaultMessage, locale)).format(values), formatMessage: ({ id, defaultMessage }, values) => (new IntlMessageFormat(messages[id] || defaultMessage, locale)).format(values),
formatDate: (date, options) => (new Intl.DateTimeFormat(locale, options)).format(date), formatDate: (date, options) => (new Intl.DateTimeFormat(locale, options)).format(date),
}, datetime, now, now.getFullYear(), content.getAttribute('datetime').includes('T')); }, datetime, now, now.getFullYear(), timeGiven);
}); });
const reactComponents = document.querySelectorAll('[data-component]'); const reactComponents = document.querySelectorAll('[data-component]');
@ -188,10 +189,10 @@ function main() {
if (sidebar.classList.contains('visible')) { if (sidebar.classList.contains('visible')) {
document.body.style.overflow = null; document.body.style.overflow = null;
toggleButton.setAttribute('aria-expanded', false); toggleButton.setAttribute('aria-expanded', 'false');
} else { } else {
document.body.style.overflow = 'hidden'; document.body.style.overflow = 'hidden';
toggleButton.setAttribute('aria-expanded', true); toggleButton.setAttribute('aria-expanded', 'true');
} }
toggleButton.classList.toggle('active'); toggleButton.classList.toggle('active');

@ -36,10 +36,6 @@
@media screen and (max-width: 600px) { @media screen and (max-width: 600px) {
height: 200px; height: 200px;
} }
@media screen and (max-width: $no-gap-breakpoint) {
display: none;
}
} }
&__bar { &__bar {
@ -138,7 +134,7 @@
} }
.older { .older {
float: inline-start; float: left;
padding-inline-start: 0; padding-inline-start: 0;
.fa { .fa {
@ -148,7 +144,7 @@
} }
.newer { .newer {
float: inline-end; float: right;
padding-inline-end: 0; padding-inline-end: 0;
.fa { .fa {

@ -651,7 +651,7 @@ body,
.button { .button {
overflow: visible; overflow: visible;
margin: 0 0 5px 5px; margin: 0 0 5px 5px;
float: inline-end; float: right;
} }
} }
} }
@ -799,7 +799,7 @@ a.name-tag,
.speech-bubble { .speech-bubble {
margin-bottom: 20px; margin-bottom: 20px;
border-inset-inline-start: 4px solid $ui-highlight-color; border-inline-start: 4px solid $ui-highlight-color;
&.positive { &.positive {
border-left-color: $success-green; border-left-color: $success-green;
@ -1678,7 +1678,7 @@ a.sparkline {
} }
.section-skip-link { .section-skip-link {
float: inline-end; float: right;
a { a {
color: $ui-highlight-color; color: $ui-highlight-color;

@ -826,7 +826,7 @@ body > [data-popper-placement] {
} }
.reply-indicator__cancel { .reply-indicator__cancel {
float: inline-end; float: right;
line-height: 24px; line-height: 24px;
} }
@ -841,7 +841,7 @@ body > [data-popper-placement] {
} }
.reply-indicator__display-avatar { .reply-indicator__display-avatar {
float: inline-start; float: left;
margin-inline-end: 5px; margin-inline-end: 5px;
} }
@ -1159,7 +1159,7 @@ body > [data-popper-placement] {
.notification__relative_time { .notification__relative_time {
color: $dark-text-color; color: $dark-text-color;
float: inline-end; float: right;
font-size: 14px; font-size: 14px;
padding-bottom: 1px; padding-bottom: 1px;
} }
@ -1507,7 +1507,7 @@ body > [data-popper-placement] {
position: relative; position: relative;
& > div { & > div {
float: inline-start; float: left;
position: relative; position: relative;
box-sizing: border-box; box-sizing: border-box;
} }
@ -1622,7 +1622,7 @@ a .account__avatar {
text-decoration: none; text-decoration: none;
overflow: hidden; overflow: hidden;
flex: 0 1 100%; flex: 0 1 100%;
border-inset-inline-end: 1px solid lighten($ui-base-color, 8%); border-inline-end: 1px solid lighten($ui-base-color, 8%);
padding: 10px 0; padding: 10px 0;
border-bottom: 4px solid transparent; border-bottom: 4px solid transparent;
@ -1662,7 +1662,7 @@ a .account__avatar {
} }
.account-authorize__avatar { .account-authorize__avatar {
float: inline-start; float: left;
margin-inline-end: 10px; margin-inline-end: 10px;
} }
@ -2642,7 +2642,7 @@ $ui-header-height: 55px;
.navigation-panel { .navigation-panel {
margin: 0; margin: 0;
background: $ui-base-color; background: $ui-base-color;
border-inset-inline-start: 1px solid lighten($ui-base-color, 8%); border-inline-start: 1px solid lighten($ui-base-color, 8%);
height: 100vh; height: 100vh;
} }
@ -2941,7 +2941,6 @@ $ui-header-height: 55px;
width: 85%; width: 85%;
height: 100%; height: 100%;
pointer-events: none; pointer-events: none;
user-drag: none;
user-select: none; user-select: none;
} }
@ -3879,7 +3878,7 @@ a.status-card.compact:hover {
} }
.column-header__setting-arrows { .column-header__setting-arrows {
float: inline-end; float: right;
.column-header__setting-btn { .column-header__setting-btn {
padding: 5px; padding: 5px;
@ -4340,6 +4339,7 @@ a.status-card.compact:hover {
.follow_requests-unlocked_explanation { .follow_requests-unlocked_explanation {
background: darken($ui-base-color, 4%); background: darken($ui-base-color, 4%);
contain: initial; contain: initial;
flex-grow: 0;
} }
.error-column { .error-column {
@ -5753,7 +5753,7 @@ a.status-card.compact:hover {
.report-modal__comment { .report-modal__comment {
padding: 20px; padding: 20px;
border-inset-inline-end: 1px solid $ui-secondary-color; border-inline-end: 1px solid $ui-secondary-color;
max-width: 320px; max-width: 320px;
p { p {
@ -6044,7 +6044,7 @@ a.status-card.compact:hover {
color: $dark-text-color; color: $dark-text-color;
padding: 8px 18px; padding: 8px 18px;
cursor: default; cursor: default;
border-inset-inline-end: 1px solid lighten($ui-base-color, 8%); border-inline-end: 1px solid lighten($ui-base-color, 8%);
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
@ -6109,7 +6109,7 @@ a.status-card.compact:hover {
border: 0; border: 0;
box-sizing: border-box; box-sizing: border-box;
display: block; display: block;
float: inline-start; float: left;
position: relative; position: relative;
border-radius: 4px; border-radius: 4px;
overflow: hidden; overflow: hidden;
@ -7930,7 +7930,7 @@ noscript {
inset-inline-start: 0; inset-inline-start: 0;
width: 100%; width: 100%;
height: 100%; height: 100%;
border-inset-inline-start: 4px solid $highlight-text-color; border-inline-start: 4px solid $highlight-text-color;
pointer-events: none; pointer-events: none;
} }
} }

@ -14,7 +14,7 @@
blockquote { blockquote {
padding-inline-start: 10px; padding-inline-start: 10px;
border-inset-inline-start: 3px solid $darker-text-color; border-inline-start: 3px solid $darker-text-color;
color: $darker-text-color; color: $darker-text-color;
white-space: normal; white-space: normal;

@ -19,10 +19,22 @@ body.rtl {
direction: rtl; direction: rtl;
} }
.account__avatar-wrapper {
float: right;
}
.column-header__setting-arrows {
float: left;
}
.admin-wrapper { .admin-wrapper {
direction: rtl; direction: rtl;
} }
.react-swipeable-view-container > * {
direction: rtl;
}
.simple_form .label_input__append { .simple_form .label_input__append {
&::after { &::after {
background-image: linear-gradient( background-image: linear-gradient(

@ -91,12 +91,12 @@
&:first-child { &:first-child {
border-radius: 4px 0 0; border-radius: 4px 0 0;
border-inset-inline-start: 1px solid darken($ui-base-color, 8%); border-inline-start: 1px solid darken($ui-base-color, 8%);
} }
&:last-child { &:last-child {
border-radius: 0 4px 0 0; border-radius: 0 4px 0 0;
border-inset-inline-end: 1px solid darken($ui-base-color, 8%); border-inline-end: 1px solid darken($ui-base-color, 8%);
} }
} }
} }

@ -6,6 +6,7 @@ class NotifyService < BaseService
NON_EMAIL_TYPES = %i( NON_EMAIL_TYPES = %i(
admin.report admin.report
admin.sign_up admin.sign_up
update
).freeze ).freeze
def call(recipient, type, activity) def call(recipient, type, activity)

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

Loading…
Cancel
Save