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

Merge upstream changes
master
Claire 3 years ago committed by GitHub
commit e0f3962697
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 335
      .circleci/config.yml
  2. 5
      .codeclimate.yml
  3. 10
      .env.production.sample
  4. 4
      Gemfile
  5. 18
      Gemfile.lock
  6. 9
      app/controllers/api/v1/accounts_controller.rb
  7. 15
      app/javascript/flavours/glitch/features/notifications/components/column_settings.js
  8. 8
      app/javascript/flavours/glitch/styles/admin.scss
  9. 4
      app/javascript/flavours/glitch/styles/dashboard.scss
  10. 15
      app/javascript/mastodon/features/notifications/components/column_settings.js
  11. 9
      app/javascript/mastodon/locales/af.json
  12. 25
      app/javascript/mastodon/locales/ar.json
  13. 9
      app/javascript/mastodon/locales/ast.json
  14. 9
      app/javascript/mastodon/locales/bg.json
  15. 43
      app/javascript/mastodon/locales/bn.json
  16. 65
      app/javascript/mastodon/locales/br.json
  17. 11
      app/javascript/mastodon/locales/ca.json
  18. 9
      app/javascript/mastodon/locales/co.json
  19. 15
      app/javascript/mastodon/locales/cs.json
  20. 17
      app/javascript/mastodon/locales/cy.json
  21. 11
      app/javascript/mastodon/locales/da.json
  22. 19
      app/javascript/mastodon/locales/de.json
  23. 60
      app/javascript/mastodon/locales/defaultMessages.json
  24. 9
      app/javascript/mastodon/locales/el.json
  25. 9
      app/javascript/mastodon/locales/en.json
  26. 39
      app/javascript/mastodon/locales/eo.json
  27. 9
      app/javascript/mastodon/locales/es-AR.json
  28. 11
      app/javascript/mastodon/locales/es-MX.json
  29. 25
      app/javascript/mastodon/locales/es.json
  30. 9
      app/javascript/mastodon/locales/et.json
  31. 9
      app/javascript/mastodon/locales/eu.json
  32. 423
      app/javascript/mastodon/locales/fa.json
  33. 225
      app/javascript/mastodon/locales/fi.json
  34. 65
      app/javascript/mastodon/locales/fr.json
  35. 9
      app/javascript/mastodon/locales/ga.json
  36. 19
      app/javascript/mastodon/locales/gd.json
  37. 11
      app/javascript/mastodon/locales/gl.json
  38. 41
      app/javascript/mastodon/locales/he.json
  39. 9
      app/javascript/mastodon/locales/hi.json
  40. 9
      app/javascript/mastodon/locales/hr.json
  41. 21
      app/javascript/mastodon/locales/hu.json
  42. 111
      app/javascript/mastodon/locales/hy.json
  43. 29
      app/javascript/mastodon/locales/id.json
  44. 9
      app/javascript/mastodon/locales/io.json
  45. 75
      app/javascript/mastodon/locales/is.json
  46. 11
      app/javascript/mastodon/locales/it.json
  47. 9
      app/javascript/mastodon/locales/ja.json
  48. 9
      app/javascript/mastodon/locales/ka.json
  49. 39
      app/javascript/mastodon/locales/kab.json
  50. 9
      app/javascript/mastodon/locales/kk.json
  51. 484
      app/javascript/mastodon/locales/kmr.json
  52. 9
      app/javascript/mastodon/locales/kn.json
  53. 85
      app/javascript/mastodon/locales/ko.json
  54. 9
      app/javascript/mastodon/locales/ku.json
  55. 9
      app/javascript/mastodon/locales/kw.json
  56. 9
      app/javascript/mastodon/locales/lt.json
  57. 755
      app/javascript/mastodon/locales/lv.json
  58. 9
      app/javascript/mastodon/locales/mk.json
  59. 11
      app/javascript/mastodon/locales/ml.json
  60. 9
      app/javascript/mastodon/locales/mr.json
  61. 487
      app/javascript/mastodon/locales/ms.json
  62. 11
      app/javascript/mastodon/locales/nl.json
  63. 49
      app/javascript/mastodon/locales/nn.json
  64. 55
      app/javascript/mastodon/locales/no.json
  65. 9
      app/javascript/mastodon/locales/oc.json
  66. 9
      app/javascript/mastodon/locales/pa.json
  67. 11
      app/javascript/mastodon/locales/pl.json
  68. 401
      app/javascript/mastodon/locales/pt-BR.json
  69. 11
      app/javascript/mastodon/locales/pt-PT.json
  70. 451
      app/javascript/mastodon/locales/ro.json
  71. 55
      app/javascript/mastodon/locales/ru.json
  72. 9
      app/javascript/mastodon/locales/sa.json
  73. 11
      app/javascript/mastodon/locales/sc.json
  74. 113
      app/javascript/mastodon/locales/si.json
  75. 105
      app/javascript/mastodon/locales/sk.json
  76. 11
      app/javascript/mastodon/locales/sl.json
  77. 9
      app/javascript/mastodon/locales/sq.json
  78. 9
      app/javascript/mastodon/locales/sr-Latn.json
  79. 39
      app/javascript/mastodon/locales/sr.json
  80. 15
      app/javascript/mastodon/locales/sv.json
  81. 9
      app/javascript/mastodon/locales/szl.json
  82. 9
      app/javascript/mastodon/locales/ta.json
  83. 9
      app/javascript/mastodon/locales/tai.json
  84. 9
      app/javascript/mastodon/locales/te.json
  85. 25
      app/javascript/mastodon/locales/th.json
  86. 103
      app/javascript/mastodon/locales/tr.json
  87. 9
      app/javascript/mastodon/locales/tt.json
  88. 9
      app/javascript/mastodon/locales/ug.json
  89. 17
      app/javascript/mastodon/locales/uk.json
  90. 175
      app/javascript/mastodon/locales/ur.json
  91. 45
      app/javascript/mastodon/locales/vi.json
  92. 2
      app/javascript/mastodon/locales/whitelist_kmr.json
  93. 9
      app/javascript/mastodon/locales/zgh.json
  94. 15
      app/javascript/mastodon/locales/zh-CN.json
  95. 25
      app/javascript/mastodon/locales/zh-HK.json
  96. 97
      app/javascript/mastodon/locales/zh-TW.json
  97. 8
      app/javascript/styles/mastodon/admin.scss
  98. 4
      app/javascript/styles/mastodon/dashboard.scss
  99. 4
      app/models/concerns/account_interactions.rb
  100. 12
      app/models/form/account_batch.rb
  101. Some files were not shown because too many files have changed in this diff Show More

@ -1,255 +1,152 @@
version: 2
version: 2.1
aliases:
- &defaults
orbs:
ruby: circleci/ruby@1.2.0
node: circleci/node@4.7.0
executors:
default:
parameters:
ruby-version:
type: string
docker:
- image: circleci/ruby:2.7-buster-node
environment: &ruby_environment
- image: cimg/ruby:<< parameters.ruby-version >>
environment:
BUNDLE_JOBS: 3
BUNDLE_RETRY: 3
BUNDLE_APP_CONFIG: ./.bundle/
BUNDLE_PATH: ./vendor/bundle/
CONTINUOUS_INTEGRATION: true
DB_HOST: localhost
DB_USER: root
RAILS_ENV: test
ALLOW_NOPAM: true
CONTINUOUS_INTEGRATION: true
DISABLE_SIMPLECOV: true
PAM_ENABLED: true
PAM_DEFAULT_SERVICE: pam_test
PAM_CONTROLLED_SERVICE: pam_test_controlled
working_directory: ~/projects/mastodon/
- &attach_workspace
attach_workspace:
at: ~/projects/
- &persist_to_workspace
persist_to_workspace:
root: ~/projects/
paths:
- ./mastodon/
- &restore_ruby_dependencies
restore_cache:
keys:
- v3-ruby-dependencies-{{ checksum "/tmp/.ruby-version" }}-{{ checksum "Gemfile.lock" }}
- v3-ruby-dependencies-{{ checksum "/tmp/.ruby-version" }}-
- v3-ruby-dependencies-
RAILS_ENV: test
- image: cimg/postgres:12.7
environment:
POSTGRES_USER: root
POSTGRES_HOST_AUTH_METHOD: trust
- image: circleci/redis:5-alpine
- &install_steps
commands:
install-system-dependencies:
steps:
- checkout
- *attach_workspace
- restore_cache:
keys:
- v2-node-dependencies-{{ checksum "yarn.lock" }}
- v2-node-dependencies-
- run:
name: Install yarn dependencies
command: yarn install --frozen-lockfile
- save_cache:
key: v2-node-dependencies-{{ checksum "yarn.lock" }}
paths:
- ./node_modules/
- *persist_to_workspace
- &install_system_dependencies
run:
name: Install system dependencies
command: |
sudo apt-get update
sudo apt-get install -y libicu-dev libidn11-dev libprotobuf-dev protobuf-compiler
- &install_ruby_dependencies
steps:
- *attach_workspace
- *install_system_dependencies
- run:
name: Set Ruby version
command: ruby -e 'puts RUBY_VERSION' | tee /tmp/.ruby-version
- *restore_ruby_dependencies
- run:
name: Set bundler settings
command: |
bundle config --local clean 'true'
bundle config --local deployment 'true'
bundle config --local with 'pam_authentication'
bundle config --local without 'development production'
bundle config --local frozen 'true'
bundle config --local path $BUNDLE_PATH
- run:
name: Install bundler dependencies
command: bundle check || (bundle install && bundle clean)
- save_cache:
key: v3-ruby-dependencies-{{ checksum "/tmp/.ruby-version" }}-{{ checksum "Gemfile.lock" }}
paths:
- ./.bundle/
- ./vendor/bundle/
- persist_to_workspace:
root: ~/projects/
paths:
- ./mastodon/.bundle/
- ./mastodon/vendor/bundle/
name: Install system dependencies
command: |
sudo apt-get update
sudo apt-get install -y libicu-dev libidn11-dev libprotobuf-dev protobuf-compiler
install-ruby-dependencies:
parameters:
ruby-version:
type: string
steps:
- run:
command: |
bundle config clean 'true'
bundle config frozen 'true'
bundle config without 'development production'
name: Set bundler settings
- ruby/install-deps:
bundler-version: '2.2.29'
key: ruby<< parameters.ruby-version >>-gems-v1
wait-db:
steps:
- run:
command: dockerize -wait tcp://localhost:5432 -wait tcp://localhost:6379 -timeout 1m
name: Wait for PostgreSQL and Redis
- &test_steps
parallelism: 4
steps:
- *attach_workspace
- *install_system_dependencies
- run:
name: Install FFMPEG
command: sudo apt-get install -y ffmpeg
- run:
name: Load database schema
command: ./bin/rails db:create db:schema:load db:seed
- run:
name: Run rspec in parallel
command: |
bundle exec rspec --profile 10 \
--format RspecJunitFormatter \
--out test_results/rspec.xml \
--format progress \
$(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings)
- store_test_results:
path: test_results
jobs:
install:
<<: *defaults
<<: *install_steps
install-ruby2.7:
<<: *defaults
<<: *install_ruby_dependencies
install-ruby2.6:
<<: *defaults
docker:
- image: circleci/ruby:2.6-buster-node
environment: *ruby_environment
<<: *install_ruby_dependencies
install-ruby3.0:
<<: *defaults
docker:
- image: circleci/ruby:3.0-buster-node
environment: *ruby_environment
<<: *install_ruby_dependencies
build:
<<: *defaults
docker:
- image: cimg/ruby:2.7-node
environment:
RAILS_ENV: test
steps:
- *attach_workspace
- *install_system_dependencies
- checkout
- install-system-dependencies
- install-ruby-dependencies:
ruby-version: '2.7'
- node/install-packages:
cache-version: v1
pkg-manager: yarn
- run:
name: Precompile assets
command: ./bin/rails assets:precompile
name: Precompile assets
- persist_to_workspace:
root: ~/projects/
paths:
- ./mastodon/public/assets
- ./mastodon/public/packs-test/
- public/assets
- public/packs-test
root: .
test:
parameters:
ruby-version:
type: string
executor:
name: default
ruby-version: << parameters.ruby-version >>
environment:
ALLOW_NOPAM: true
PAM_ENABLED: true
PAM_DEFAULT_SERVICE: pam_test
PAM_CONTROLLED_SERVICE: pam_test_controlled
parallelism: 4
steps:
- checkout
- install-system-dependencies
- run:
command: sudo apt-get install -y ffmpeg imagemagick libpam-dev
name: Install additional system dependencies
- run:
command: bundle config with 'pam_authentication'
name: Enable PAM authentication
- install-ruby-dependencies:
ruby-version: << parameters.ruby-version >>
- attach_workspace:
at: .
- wait-db
- run:
command: ./bin/rails db:create db:schema:load db:seed
name: Load database schema
- ruby/rspec-test
test-migrations:
<<: *defaults
docker:
- image: circleci/ruby:2.7-buster-node
environment: *ruby_environment
- image: circleci/postgres:12.2
environment:
POSTGRES_USER: root
POSTGRES_HOST_AUTH_METHOD: trust
- image: circleci/redis:5-alpine
executor:
name: default
ruby-version: '2.7'
steps:
- *attach_workspace
- *install_system_dependencies
- checkout
- install-system-dependencies
- install-ruby-dependencies:
ruby-version: '2.7'
- wait-db
- run:
name: Create database
command: ./bin/rails db:create
name: Create database
- run:
name: Run migrations
command: ./bin/rails db:migrate
test-ruby2.7:
<<: *defaults
docker:
- image: circleci/ruby:2.7-buster-node
environment: *ruby_environment
- image: circleci/postgres:12.2
environment:
POSTGRES_USER: root
POSTGRES_HOST_AUTH_METHOD: trust
- image: circleci/redis:5-alpine
<<: *test_steps
test-ruby2.6:
<<: *defaults
docker:
- image: circleci/ruby:2.6-buster-node
environment: *ruby_environment
- image: circleci/postgres:12.2
environment:
POSTGRES_USER: root
POSTGRES_HOST_AUTH_METHOD: trust
- image: circleci/redis:5-alpine
<<: *test_steps
test-ruby3.0:
<<: *defaults
docker:
- image: circleci/ruby:3.0-buster-node
environment: *ruby_environment
- image: circleci/postgres:12.2
environment:
POSTGRES_USER: root
POSTGRES_HOST_AUTH_METHOD: trust
- image: circleci/redis:5-alpine
<<: *test_steps
test-webui:
<<: *defaults
docker:
- image: circleci/node:14-buster
steps:
- *attach_workspace
- run:
name: Run jest
command: yarn test:jest
name: Run migrations
workflows:
version: 2
build-and-test:
jobs:
- install
- install-ruby2.7:
requires:
- install
- install-ruby2.6:
requires:
- install
- install-ruby2.7
- install-ruby3.0:
- build
- test:
matrix:
parameters:
ruby-version:
- '2.7'
- '3.0'
name: test-ruby<< matrix.ruby-version >>
requires:
- install
- install-ruby2.7
- build:
requires:
- install-ruby2.7
- test-migrations:
requires:
- install-ruby2.7
- test-ruby2.7:
requires:
- install-ruby2.7
- build
- test-ruby2.6:
- test-migrations:
requires:
- install-ruby2.6
- build
- test-ruby3.0:
- node/run:
cache-version: v1
name: test-webui
pkg-manager: yarn
requires:
- install-ruby3.0
- build
- test-webui:
requires:
- install
version: lts
yarn-run: test:jest

@ -35,4 +35,7 @@ plugins:
enabled: true
exclude_patterns:
- spec/
- vendor/asset
- vendor/asset/
- app/javascript/mastodon/locales/**/*.json
- config/locales/**/*.yml

@ -4,6 +4,12 @@
# not demonstrate all available configuration options. Please look at
# https://docs.joinmastodon.org/admin/config/ for the full documentation.
# Note that this file accepts slightly different syntax depending on whether
# you are using `docker-compose` or not. In particular, if you use
# `docker-compose`, the value of each declared variable will be taken verbatim,
# including surrounding quotes.
# See: https://github.com/mastodon/mastodon/issues/16895
# Federation
# ----------
# This identifies your server and cannot be changed safely later
@ -55,7 +61,9 @@ DB_PORT=5432
#ES_ENABLED=true
#ES_HOST=localhost
#ES_PORT=9200
# Authentication for ES (optional)
#ES_USER=elastic
#ES_PASS=password
# Secrets
# -------

@ -65,7 +65,6 @@ gem 'nsa', '~> 0.2'
gem 'oj', '~> 3.13'
gem 'ox', '~> 2.14'
gem 'parslet'
gem 'parallel', '~> 1.21'
gem 'posix-spawn'
gem 'pundit', '~> 2.1'
gem 'premailer-rails'
@ -73,7 +72,7 @@ gem 'rack-attack', '~> 6.5'
gem 'rack-cors', '~> 1.1', require: 'rack/cors'
gem 'rails-i18n', '~> 6.0'
gem 'rails-settings-cached', '~> 0.6'
gem 'redis', '~> 4.4', require: ['redis', 'redis/connection/hiredis']
gem 'redis', '~> 4.5', require: ['redis', 'redis/connection/hiredis']
gem 'mario-redis-lock', '~> 1.2', require: 'redis_lock'
gem 'rqrcode', '~> 2.1'
gem 'ruby-progressbar', '~> 1.11'
@ -123,7 +122,6 @@ group :test do
gem 'rspec-sidekiq', '~> 3.1'
gem 'simplecov', '~> 0.21', require: false
gem 'webmock', '~> 3.14'
gem 'parallel_tests', '~> 3.7'
gem 'rspec_junit_formatter', '~> 0.4'
end

@ -316,7 +316,7 @@ GEM
activerecord
kaminari-core (= 1.2.1)
kaminari-core (1.2.1)
kt-paperclip (7.0.0)
kt-paperclip (7.0.1)
activemodel (>= 4.2.0)
activesupport (>= 4.2.0)
marcel (~> 1.0.1)
@ -356,7 +356,7 @@ GEM
nokogiri (~> 1.10)
mime-types (3.3.1)
mime-types-data (~> 3.2015)
mime-types-data (3.2020.0512)
mime-types-data (3.2021.0901)
mini_mime (1.1.2)
mini_portile2 (2.6.1)
minitest (5.14.4)
@ -395,8 +395,6 @@ GEM
orm_adapter (0.5.0)
ox (2.14.5)
parallel (1.21.0)
parallel_tests (3.7.3)
parallel
parser (3.0.2.0)
ast (~> 2.4.1)
parslet (2.0.0)
@ -424,7 +422,7 @@ GEM
pry-rails (0.3.9)
pry (>= 0.10.4)
public_suffix (4.0.6)
puma (5.5.1)
puma (5.5.2)
nio4r (~> 2.0)
pundit (2.1.1)
activesupport (>= 3.0.0)
@ -482,7 +480,7 @@ GEM
rdf-normalize (0.4.0)
rdf (~> 3.1)
redcarpet (3.5.1)
redis (4.4.0)
redis (4.5.1)
redis-namespace (1.8.1)
redis (>= 3.0.4)
regexp_parser (2.1.1)
@ -531,7 +529,7 @@ GEM
unicode-display_width (>= 1.4.0, < 3.0)
rubocop-ast (1.12.0)
parser (>= 3.0.1.1)
rubocop-rails (2.12.3)
rubocop-rails (2.12.4)
activesupport (>= 4.2.0)
rack (>= 1.1)
rubocop (>= 1.7.0, < 2.0)
@ -623,7 +621,7 @@ GEM
unf (~> 0.1.0)
tzinfo (2.0.4)
concurrent-ruby (~> 1.0)
tzinfo-data (1.2021.3)
tzinfo-data (1.2021.4)
tzinfo (>= 1.0.0)
unf (0.1.4)
unf_ext
@ -737,8 +735,6 @@ DEPENDENCIES
omniauth-rails_csrf_protection (~> 0.1)
omniauth-saml (~> 1.10)
ox (~> 2.14)
parallel (~> 1.21)
parallel_tests (~> 3.7)
parslet
pg (~> 1.2)
pghero (~> 2.8)
@ -759,7 +755,7 @@ DEPENDENCIES
rails-settings-cached (~> 0.6)
rdf-normalize (~> 0.4)
redcarpet (~> 3.5)
redis (~> 4.4)
redis (~> 4.5)
redis-namespace (~> 1.8)
rqrcode (~> 2.1)
rspec-rails (~> 5.0)

@ -1,8 +1,8 @@
# frozen_string_literal: true
class Api::V1::AccountsController < Api::BaseController
before_action -> { authorize_if_got_token! :read, :'read:accounts' }, except: [:create, :follow, :unfollow, :block, :unblock, :mute, :unmute]
before_action -> { doorkeeper_authorize! :follow, :'write:follows' }, only: [:follow, :unfollow]
before_action -> { authorize_if_got_token! :read, :'read:accounts' }, except: [:create, :follow, :unfollow, :remove_from_followers, :block, :unblock, :mute, :unmute]
before_action -> { doorkeeper_authorize! :follow, :'write:follows' }, only: [:follow, :unfollow, :remove_from_followers]
before_action -> { doorkeeper_authorize! :follow, :'write:mutes' }, only: [:mute, :unmute]
before_action -> { doorkeeper_authorize! :follow, :'write:blocks' }, only: [:block, :unblock]
before_action -> { doorkeeper_authorize! :write, :'write:accounts' }, only: [:create]
@ -53,6 +53,11 @@ class Api::V1::AccountsController < Api::BaseController
render json: @account, serializer: REST::RelationshipSerializer, relationships: relationships
end
def remove_from_followers
RemoveFromFollowersService.new.call(current_user.account, @account)
render json: @account, serializer: REST::RelationshipSerializer, relationships: relationships
end
def unblock
UnblockService.new.call(current_user.account, @account)
render json: @account, serializer: REST::RelationshipSerializer, relationships: relationships

@ -27,11 +27,12 @@ export default class ColumnSettings extends React.PureComponent {
render () {
const { settings, pushSettings, onChange, onClear, alertsEnabled, browserSupport, browserPermission, onRequestNotificationPermission } = this.props;
const filterShowStr = <FormattedMessage id='notifications.column_settings.filter_bar.show' defaultMessage='Show' />;
const unreadMarkersShowStr = <FormattedMessage id='notifications.column_settings.unread_notifications.highlight' defaultMessage='Highlight unread notifications' />;
const filterBarShowStr = <FormattedMessage id='notifications.column_settings.filter_bar.show_bar' defaultMessage='Show filter bar' />;
const filterAdvancedStr = <FormattedMessage id='notifications.column_settings.filter_bar.advanced' defaultMessage='Display all categories' />;
const alertStr = <FormattedMessage id='notifications.column_settings.alert' defaultMessage='Desktop notifications' />;
const showStr = <FormattedMessage id='notifications.column_settings.show' defaultMessage='Show in column' />;
const soundStr = <FormattedMessage id='notifications.column_settings.sound' defaultMessage='Play sound' />;
const alertStr = <FormattedMessage id='notifications.column_settings.alert' defaultMessage='Desktop notifications' />;
const showStr = <FormattedMessage id='notifications.column_settings.show' defaultMessage='Show in column' />;
const soundStr = <FormattedMessage id='notifications.column_settings.sound' defaultMessage='Play sound' />;
const showPushSettings = pushSettings.get('browserSupport') && pushSettings.get('isSubscribed');
const pushStr = showPushSettings && <FormattedMessage id='notifications.column_settings.push' defaultMessage='Push notifications' />;
@ -58,11 +59,11 @@ export default class ColumnSettings extends React.PureComponent {
<div role='group' aria-labelledby='notifications-unread-markers'>
<span id='notifications-unread-markers' className='column-settings__section'>
<FormattedMessage id='notifications.column_settings.unread_markers.category' defaultMessage='Unread notification markers' />
<FormattedMessage id='notifications.column_settings.unread_notifications.category' defaultMessage='Unread notifications' />
</span>
<div className='column-settings__row'>
<SettingToggle id='unread-notification-markers' prefix='notifications' settings={settings} settingPath={['showUnread']} onChange={onChange} label={filterShowStr} />
<SettingToggle id='unread-notification-markers' prefix='notifications' settings={settings} settingPath={['showUnread']} onChange={onChange} label={unreadMarkersShowStr} />
</div>
</div>
@ -72,7 +73,7 @@ export default class ColumnSettings extends React.PureComponent {
</span>
<div className='column-settings__row'>
<SettingToggle id='show-filter-bar' prefix='notifications' settings={settings} settingPath={['quickFilter', 'show']} onChange={onChange} label={filterShowStr} />
<SettingToggle id='show-filter-bar' prefix='notifications' settings={settings} settingPath={['quickFilter', 'show']} onChange={onChange} label={filterBarShowStr} />
<SettingToggle id='show-filter-bar' prefix='notifications' settings={settings} settingPath={['quickFilter', 'advanced']} onChange={onChange} label={filterAdvancedStr} />
</div>
</div>

@ -936,6 +936,13 @@ a.name-tag,
}
.retention {
overflow: auto;
> h4 {
position: sticky;
left: 0;
}
&__table {
&__number {
color: $secondary-text-color;
@ -1034,6 +1041,7 @@ a.name-tag,
&__graph {
position: absolute;
bottom: 0;
width: 100%;
svg {
display: block;

@ -61,6 +61,10 @@
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr);
grid-gap: 10px;
@media screen and (max-width: 1350px) {
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
}
&__item {
&--span-double-column {
grid-column: span 2;

@ -26,11 +26,12 @@ export default class ColumnSettings extends React.PureComponent {
render () {
const { settings, pushSettings, onChange, onClear, alertsEnabled, browserSupport, browserPermission, onRequestNotificationPermission } = this.props;
const filterShowStr = <FormattedMessage id='notifications.column_settings.filter_bar.show' defaultMessage='Show' />;
const unreadMarkersShowStr = <FormattedMessage id='notifications.column_settings.unread_notifications.highlight' defaultMessage='Highlight unread notifications' />;
const filterBarShowStr = <FormattedMessage id='notifications.column_settings.filter_bar.show_bar' defaultMessage='Show filter bar' />;
const filterAdvancedStr = <FormattedMessage id='notifications.column_settings.filter_bar.advanced' defaultMessage='Display all categories' />;
const alertStr = <FormattedMessage id='notifications.column_settings.alert' defaultMessage='Desktop notifications' />;
const showStr = <FormattedMessage id='notifications.column_settings.show' defaultMessage='Show in column' />;
const soundStr = <FormattedMessage id='notifications.column_settings.sound' defaultMessage='Play sound' />;
const alertStr = <FormattedMessage id='notifications.column_settings.alert' defaultMessage='Desktop notifications' />;
const showStr = <FormattedMessage id='notifications.column_settings.show' defaultMessage='Show in column' />;
const soundStr = <FormattedMessage id='notifications.column_settings.sound' defaultMessage='Play sound' />;
const showPushSettings = pushSettings.get('browserSupport') && pushSettings.get('isSubscribed');
const pushStr = showPushSettings && <FormattedMessage id='notifications.column_settings.push' defaultMessage='Push notifications' />;
@ -57,11 +58,11 @@ export default class ColumnSettings extends React.PureComponent {
<div role='group' aria-labelledby='notifications-unread-markers'>
<span id='notifications-unread-markers' className='column-settings__section'>
<FormattedMessage id='notifications.column_settings.unread_markers.category' defaultMessage='Unread notification markers' />
<FormattedMessage id='notifications.column_settings.unread_notifications.category' defaultMessage='Unread notifications' />
</span>
<div className='column-settings__row'>
<SettingToggle id='unread-notification-markers' prefix='notifications' settings={settings} settingPath={['showUnread']} onChange={onChange} label={filterShowStr} />
<SettingToggle id='unread-notification-markers' prefix='notifications' settings={settings} settingPath={['showUnread']} onChange={onChange} label={unreadMarkersShowStr} />
</div>
</div>
@ -71,7 +72,7 @@ export default class ColumnSettings extends React.PureComponent {
</span>
<div className='column-settings__row'>
<SettingToggle id='show-filter-bar' prefix='notifications' settings={settings} settingPath={['quickFilter', 'show']} onChange={onChange} label={filterShowStr} />
<SettingToggle id='show-filter-bar' prefix='notifications' settings={settings} settingPath={['quickFilter', 'show']} onChange={onChange} label={filterBarShowStr} />
<SettingToggle id='show-filter-bar' prefix='notifications' settings={settings} settingPath={['quickFilter', 'advanced']} onChange={onChange} label={filterAdvancedStr} />
</div>
</div>

@ -47,11 +47,16 @@
"account.unmute": "Unmute @{name}",
"account.unmute_notifications": "Unmute notifications from @{name}",
"account_note.placeholder": "Click to add a note",
"admin.dashboard.retention": "Retention",
"admin.dashboard.retention.average": "Average",
"admin.dashboard.retention.cohort": "Sign-up month",
"admin.dashboard.retention.cohort_size": "New users",
"alert.rate_limited.message": "Please retry after {retry_time, time, medium}.",
"alert.rate_limited.title": "Rate limited",
"alert.unexpected.message": "An unexpected error occurred.",
"alert.unexpected.title": "Oops!",
"announcement.announcement": "Announcement",
"attachments_list.unprocessed": "(unprocessed)",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "You can press {combo} to skip this next time",
"bundle_column_error.body": "Something went wrong while loading this component.",
@ -113,6 +118,8 @@
"confirmations.delete.message": "Are you sure you want to delete this status?",
"confirmations.delete_list.confirm": "Delete",
"confirmations.delete_list.message": "Are you sure you want to permanently delete this list?",
"confirmations.discard_edit_media.confirm": "Discard",
"confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?",
"confirmations.domain_block.confirm": "Hide entire domain",
"confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.",
"confirmations.logout.confirm": "Log out",
@ -339,6 +346,7 @@
"poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
"poll.vote": "Vote",
"poll.voted": "You voted for this answer",
"poll.votes": "{votes, plural, one {# vote} other {# votes}}",
"poll_button.add_poll": "Add a poll",
"poll_button.remove_poll": "Remove poll",
"privacy.change": "Adjust status privacy",
@ -454,6 +462,7 @@
"upload_form.video_description": "Describe for people with hearing loss or visual impairment",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.applying": "Applying…",
"upload_modal.choose_image": "Choose image",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",

@ -8,7 +8,7 @@
"account.blocked": "محظور",
"account.browse_more_on_origin_server": "تصفح المزيد في الملف الشخصي الأصلي",
"account.cancel_follow_request": "إلغاء طلب المتابَعة",
"account.direct": "مراسلة @{name} بشكلة مباشر",
"account.direct": "مراسلة @{name} بشكل مباشر",
"account.disable_notifications": "توقف عن إشعاري عندما ينشر @{name}",
"account.domain_blocked": "اسم النِّطاق محظور",
"account.edit_profile": "تحرير الملف الشخصي",
@ -22,7 +22,7 @@
"account.follows.empty": "لا يُتابع هذا المُستخدمُ أيَّ أحدٍ حتى الآن.",
"account.follows_you": ُتابِعُك",
"account.hide_reblogs": "إخفاء تعزيزات @{name}",
"account.joined": "Joined {date}",
"account.joined": "انضم في {date}",
"account.last_status": "آخر نشاط",
"account.link_verified_on": "تمَّ التَّحقق مِن مِلْكيّة هذا الرابط بتاريخ {date}",
"account.locked_info": "تمَّ تعيين حالة خصوصية هذا الحساب إلى مُقفَل. يُراجع المالك يدويًا من يمكنه متابعته.",
@ -47,11 +47,16 @@
"account.unmute": "إلغاء الكَتم عن @{name}",
"account.unmute_notifications": "إلغاء كَتم الإشعارات عن @{name}",
"account_note.placeholder": ِنقُر لإضافة مُلاحظة",
"admin.dashboard.retention": "Retention",
"admin.dashboard.retention.average": "Average",
"admin.dashboard.retention.cohort": "Sign-up month",
"admin.dashboard.retention.cohort_size": "New users",
"alert.rate_limited.message": ُرجى إعادة المحاولة بعد {retry_time, time, medium}.",
"alert.rate_limited.title": "المُعَدَّل مَحدود",
"alert.unexpected.message": "لقد طرأ خطأ غير متوقّع.",
"alert.unexpected.title": "المعذرة!",
"announcement.announcement": "إعلان",
"attachments_list.unprocessed": "(unprocessed)",
"autosuggest_hashtag.per_week": "{count} في الأسبوع",
"boost_modal.combo": ُمكنك الضّغط على {combo} لتخطي هذا في المرة المُقبِلَة",
"bundle_column_error.body": "لقد حدث خطأ ما أثناء تحميل هذا العنصر.",
@ -113,6 +118,8 @@
"confirmations.delete.message": "هل أنتَ مُتأكدٌ أنك تُريدُ حَذفَ هذا المنشور؟",
"confirmations.delete_list.confirm": "حذف",
"confirmations.delete_list.message": "هل أنتَ مُتأكدٌ أنكَ تُريدُ حَذفَ هذِهِ القائمةَ بشكلٍ دائم؟",
"confirmations.discard_edit_media.confirm": "Discard",
"confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?",
"confirmations.domain_block.confirm": "حظر اِسم النِّطاق بشكلٍ كامل",
"confirmations.domain_block.message": "متأكد من أنك تود حظر اسم النطاق {domain} بالكامل ؟ في غالب الأحيان يُستَحسَن كتم أو حظر بعض الحسابات بدلا من حظر نطاق بالكامل.\nلن تتمكن مِن رؤية محتوى هذا النطاق لا على خيوطك العمومية و لا في إشعاراتك. سوف يتم كذلك إزالة كافة متابعيك المنتمين إلى هذا النطاق.",
"confirmations.logout.confirm": "خروج",
@ -160,11 +167,11 @@
"empty_column.domain_blocks": "ليس هناك نطاقات مخفية بعد.",
"empty_column.favourited_statuses": "ليس لديك أية تبويقات مفضلة بعد. عندما ستقوم بالإعجاب بواحد، سيظهر هنا.",
"empty_column.favourites": "لم يقم أي أحد بالإعجاب بهذا التبويق بعد. عندما يقوم أحدهم بذلك سوف يظهر هنا.",
"empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
"empty_column.follow_recommendations": "يبدو أنه لا يمكن إنشاء أي اقتراحات لك. يمكنك البحث عن أشخاص قد تعرفهم أو استكشاف الوسوم الرائجة.",
"empty_column.follow_requests": "ليس عندك أي طلب للمتابعة بعد. سوف تظهر طلباتك هنا إن قمت بتلقي البعض منها.",
"empty_column.hashtag": "ليس هناك بعدُ أي محتوى ذو علاقة بهذا الوسم.",
"empty_column.home": "إنّ الخيط الزمني لصفحتك الرئيسية فارغ. قم بزيارة {public} أو استخدم حقل البحث لكي تكتشف مستخدمين آخرين.",
"empty_column.home.suggestions": "See some suggestions",
"empty_column.home.suggestions": "شاهد بعض الاقتراحات",
"empty_column.list": "هذه القائمة فارغة مؤقتا و لكن سوف تمتلئ تدريجيا عندما يبدأ الأعضاء المُنتَمين إليها بنشر تبويقات.",
"empty_column.lists": "ليس عندك أية قائمة بعد. سوف تظهر قائمتك هنا إن قمت بإنشاء واحدة.",
"empty_column.mutes": "لم تقم بكتم أي مستخدم بعد.",
@ -176,9 +183,9 @@
"error.unexpected_crash.next_steps_addons": "حاول تعطيلهم وإنعاش الصفحة. إن لم ينجح ذلك، يمكنك دائمًا استخدام ماستدون عبر متصفح آخر أو تطبيق أصلي.",
"errors.unexpected_crash.copy_stacktrace": "انسخ تتبع الارتباطات إلى الحافظة",
"errors.unexpected_crash.report_issue": "الإبلاغ عن خلل",
"follow_recommendations.done": "Done",
"follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
"follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
"follow_recommendations.done": "تم",
"follow_recommendations.heading": "تابع الأشخاص الذين ترغب في رؤية منشوراتهم! إليك بعض الاقتراحات.",
"follow_recommendations.lead": "ستظهر المنشورات من الأشخاص الذين تُتابعتهم بترتيب تسلسلي زمني على صفحتك الرئيسية. لا تخف إذا ارتكبت أي أخطاء، تستطيع إلغاء متابعة أي شخص في أي وقت تريد!",
"follow_request.authorize": "ترخيص",
"follow_request.reject": "رفض",
"follow_requests.unlocked_explanation": "على الرغم من أن حسابك غير مقفل، فإن موظفين الـ{domain} ظنوا أنك قد ترغب في مراجعة طلبات المتابعة من هذه الحسابات يدوياً.",
@ -315,7 +322,7 @@
"notifications.column_settings.show": "اعرِضها في عمود",
"notifications.column_settings.sound": "أصدر صوتا",
"notifications.column_settings.status": "تبويقات جديدة:",
"notifications.column_settings.unread_markers.category": "Unread notification markers",
"notifications.column_settings.unread_markers.category": "علامات إشعار غير مقروءة",
"notifications.filter.all": "الكل",
"notifications.filter.boosts": "الترقيات",
"notifications.filter.favourites": "المفضلة",
@ -339,6 +346,7 @@
"poll.total_votes": "{count, plural, one {# صوت} other {# أصوات}}",
"poll.vote": َوّت",
"poll.voted": "لقد صوّتت على هذه الإجابة",
"poll.votes": "{votes, plural, one {# vote} other {# votes}}",
"poll_button.add_poll": "إضافة استطلاع للرأي",
"poll_button.remove_poll": "إزالة استطلاع الرأي",
"privacy.change": "اضبط خصوصية المنشور",
@ -454,6 +462,7 @@
"upload_form.video_description": "وصف للمعاقين بصريا أو لِذي قِصر السمع",
"upload_modal.analyzing_picture": "جارٍ فحص الصورة…",
"upload_modal.apply": "طبّق",
"upload_modal.applying": "Applying…",
"upload_modal.choose_image": "اختر صورة",
"upload_modal.description_placeholder": "نصٌّ حكيمٌ لهُ سِرٌّ قاطِعٌ وَذُو شَأنٍ عَظيمٍ مكتوبٌ على ثوبٍ أخضرَ ومُغلفٌ بجلدٍ أزرق",
"upload_modal.detect_text": "اكتشف النص مِن الصورة",

@ -47,11 +47,16 @@
"account.unmute": "Unmute @{name}",
"account.unmute_notifications": "Unmute notifications from @{name}",
"account_note.placeholder": "Click to add a note",
"admin.dashboard.retention": "Retention",
"admin.dashboard.retention.average": "Average",
"admin.dashboard.retention.cohort": "Sign-up month",
"admin.dashboard.retention.cohort_size": "New users",
"alert.rate_limited.message": "Please retry after {retry_time, time, medium}.",
"alert.rate_limited.title": "Rate limited",
"alert.unexpected.message": "Asocedió un fallu inesperáu.",
"alert.unexpected.title": "¡Meca!",
"announcement.announcement": "Anunciu",
"attachments_list.unprocessed": "(unprocessed)",
"autosuggest_hashtag.per_week": "{count} per selmana",
"boost_modal.combo": "Pues primir {combo} pa saltar esto la próxima vegada",
"bundle_column_error.body": "Asocedió daqué malo mentanto se cargaba esti componente.",
@ -113,6 +118,8 @@
"confirmations.delete.message": "¿De xuru que quies desaniciar esti estáu?",
"confirmations.delete_list.confirm": "Desaniciar",
"confirmations.delete_list.message": "¿De xuru que quies desaniciar dafechu esta llista?",
"confirmations.discard_edit_media.confirm": "Discard",
"confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?",
"confirmations.domain_block.confirm": "Anubrir tol dominiu",
"confirmations.domain_block.message": "¿De xuru xurísimu que quies bloquiar el dominiu {domain} enteru? Na mayoría de casos bloquiar o silenciar dalguna cuenta ye abondo y preferible. Nun vas ver el conteníu d'esi dominiu en nenguna llinia temporal pública o nos avisos, y van desanciase los tos siguidores d'esi dominiu.",
"confirmations.logout.confirm": "Zarrar sesión",
@ -339,6 +346,7 @@
"poll.total_votes": "{count, plural, one {# votu} other {# votos}}",
"poll.vote": "Vote",
"poll.voted": "You voted for this answer",
"poll.votes": "{votes, plural, one {# vote} other {# votes}}",
"poll_button.add_poll": "Amestar una encuesta",
"poll_button.remove_poll": "Desaniciar la encuesta",
"privacy.change": "Adjust status privacy",
@ -454,6 +462,7 @@
"upload_form.video_description": "Descripción pa persones con perda auditiva o discapacidá visual",
"upload_modal.analyzing_picture": "Analizando la semeya…",
"upload_modal.apply": "Aplicar",
"upload_modal.applying": "Applying…",
"upload_modal.choose_image": "Choose image",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Deteutar el testu de la semeya",

@ -47,11 +47,16 @@
"account.unmute": "Раззаглушаване на @{name}",
"account.unmute_notifications": "Раззаглушаване на известия от @{name}",
"account_note.placeholder": "Click to add a note",
"admin.dashboard.retention": "Retention",
"admin.dashboard.retention.average": "Average",
"admin.dashboard.retention.cohort": "Sign-up month",
"admin.dashboard.retention.cohort_size": "New users",
"alert.rate_limited.message": "Моля, опитайте отново след {retry_time, time, medium}.",
"alert.rate_limited.title": "Скоростта е ограничена",
"alert.unexpected.message": "Възникна неочаквана грешка.",
"alert.unexpected.title": "Опаа!",
"announcement.announcement": "Оповестяване",
"attachments_list.unprocessed": "(unprocessed)",
"autosuggest_hashtag.per_week": "{count} на седмица",
"boost_modal.combo": "Можете да натиснете {combo}, за да пропуснете това следващия път",
"bundle_column_error.body": "Нещо се обърка при зареждането на този компонент.",
@ -113,6 +118,8 @@
"confirmations.delete.message": "Are you sure you want to delete this status?",
"confirmations.delete_list.confirm": "Изтриване",
"confirmations.delete_list.message": "Сигурни ли сте, че искате да изтриете окончателно този списък?",
"confirmations.discard_edit_media.confirm": "Discard",
"confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?",
"confirmations.domain_block.confirm": "Hide entire domain",
"confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.",
"confirmations.logout.confirm": "Излизане",
@ -339,6 +346,7 @@
"poll.total_votes": "{count, plural, one {# глас} other {# гласа}}",
"poll.vote": "Гласуване",
"poll.voted": "Вие гласувахте за този отговор",
"poll.votes": "{votes, plural, one {# vote} other {# votes}}",
"poll_button.add_poll": "Добавяне на анкета",
"poll_button.remove_poll": "Премахване на анкета",
"privacy.change": "Adjust status privacy",
@ -454,6 +462,7 @@
"upload_form.video_description": "Опишете за хора със загуба на слуха или зрително увреждане",
"upload_modal.analyzing_picture": "Анализ на снимка…",
"upload_modal.apply": "Прилагане",
"upload_modal.applying": "Applying…",
"upload_modal.choose_image": "Избор на изображение",
"upload_modal.description_placeholder": "Ах, чудна българска земьо, полюшвай цъфтящи жита",
"upload_modal.detect_text": "Откриване на текст от картина",

@ -1,26 +1,26 @@
{
"account.account_note_header": "",
"account.add_or_remove_from_list": "তিত ব অপসরণ কর",
"account.account_note_header": "িঞপি",
"account.add_or_remove_from_list": "তিগ ব অপসরণ কর",
"account.badges.bot": "বট",
"account.badges.group": "",
"account.block": "@{name} কলক কর",
"account.block_domain": "{domain} থ সব আডল কর",
"account.badges.group": "দল",
"account.block": "@{name} কলক কর",
"account.block_domain": "{domain} থ সব ",
"account.blocked": "অবরধ",
"account.browse_more_on_origin_server": "মল পইলটি আরও বউজ করন",
"account.cancel_follow_request": "অনসরণ অনধ বিল কর",
"account.cancel_follow_request": "অনসরণ অনধ বিল কর",
"account.direct": "@{name} ক সরসরি",
"account.disable_notifications": "Stop notifying me when @{name} posts",
"account.domain_blocked": "ডন গপন করন",
"account.edit_profile": "পইল পরিবরতন করন",
"account.enable_notifications": "Notify me when @{name} posts",
"account.endorse": "নির পয় দন",
"account.follow": "অনসরণ কর",
"account.follow": "অনসরণ",
"account.followers": "অনসরণক",
"account.followers.empty": "এই সদস এখনউ অনসরণ কর.",
"account.followers.empty": "এই যকি এখনউ অনসরণ কর।",
"account.followers_counter": "{count, plural,one {{counter} জন অনসরণক } other {{counter} জন অনসরণক}}",
"account.following_counter": "{count, plural,one {{counter} জনক অনসরণ} other {{counter} জনক অনসরণ}}",
"account.follows.empty": "এই সদসয কওক এখন অনসরণ করন ন.",
"account.follows_you": "আপন অনসরণ কর",
"account.follows_you": " অনসরণ কর",
"account.hide_reblogs": "@{name}'র সমরথনগিিন",
"account.joined": "Joined {date}",
"account.last_status": "শষ সকিিল",
@ -43,15 +43,20 @@
"account.unblock": "@{name} র কযকলপ দন",
"account.unblock_domain": "{domain} ক আবর দন",
"account.unendorse": "আপনর নির পয় এটখবন ন",
"account.unfollow": "অনসরণ ন করত",
"account.unfollow": "অনসরণ কর ",
"account.unmute": "@{name} র কযকলপ আবর দন",
"account.unmute_notifications": "@{name} র পরজপন দন",
"account_note.placeholder": "নট যগ করতিক করন",
"admin.dashboard.retention": "Retention",
"admin.dashboard.retention.average": "Average",
"admin.dashboard.retention.cohort": "Sign-up month",
"admin.dashboard.retention.cohort_size": "New users",
"alert.rate_limited.message": "{retry_time, time, medium} -এর পর আবর পরচ করন।",
"alert.rate_limited.title": "হর সিত",
"alert.unexpected.message": "সমস অপরতিত.",
"alert.unexpected.title": "ওহ!",
"announcement.announcement": "ঘষণ",
"attachments_list.unprocessed": "(unprocessed)",
"autosuggest_hashtag.per_week": "পরতি সপ {count}",
"boost_modal.combo": "পররবর আপনি {combo} টিপল এটি আর আসব",
"bundle_column_error.body": "এই অশটিখত সমস হয়।.",
@ -67,7 +72,7 @@
"column.directory": "পইল বউজ করন",
"column.domain_blocks": "লনগি",
"column.favourites": "পছনর গ",
"column.follow_requests": "অনসরণর অনমতি ",
"column.follow_requests": "অনসরণর অনমতি অনধক",
"column.home": "বি",
"column.lists": "তি",
"column.mutes": "যর কযকরম দ বনধ আছ",
@ -113,6 +118,8 @@
"confirmations.delete.message": "আপনিিিিত য এই লিলতন ?",
"confirmations.delete_list.confirm": "মন",
"confirmations.delete_list.message": "আপনিিিিত য আপনি এই তিিিলতন ?",
"confirmations.discard_edit_media.confirm": "Discard",
"confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?",
"confirmations.domain_block.confirm": "এই ডন থ সব লন",
"confirmations.domain_block.message": "আপনিি সতিই সতযই নিিত য আপনি {domain}'টিলক করতন? বিরভগ ক কযকটি লকযযত বলক বরবত যথট এব পছনদসই। আপনিনও পবলিক টইমলইন ব আপনর বিঞপিিই ডন থমগখতন ন। সই ডন থ আপনর অনসরণকর সর হব।",
"confirmations.logout.confirm": "পরসন",
@ -124,8 +131,8 @@
"confirmations.redraft.message": "আপনিিিিত এটি এব আবর সমদন করতন ? এট পছনিত, সমরথন ব মতমত আছ নতন লর সত থকব।",
"confirmations.reply.confirm": "মতমত",
"confirmations.reply.message": "এখন মতমত লিখত আপনর এখন যিখছন স। আপনিিিিত এট করতন ?",
"confirmations.unfollow.confirm": "অনসরণ করিল করত",
"confirmations.unfollow.message": "আপনিিিিত {name} ক আর অনসরণ করতন ন ?",
"confirmations.unfollow.confirm": "অনসরণ বনধ কর",
"confirmations.unfollow.message": "িিিিত {name} ক আর অনসরণ করতও ন?",
"conversation.delete": "কথপকথন মন",
"conversation.mark_as_read": "পঠিত হিিিত করন",
"conversation.open": "কথপকথন দন",
@ -161,7 +168,7 @@
"empty_column.favourited_statuses": "আপনর পছনর কট এখনই। আপনি পছনর হিিিত করল এখওয়।",
"empty_column.favourites": "কও এখন এট পছনর টট হিিিত করি। যদি কর, তখন তর এখওয়।",
"empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
"empty_column.follow_requests": "আপনর এখন অনসরণর আবদন পই। যদিয়, এখওয়।",
"empty_column.follow_requests": "র এখন অনসরণর আবদন পওনি। যদিয়, এখওয়।",
"empty_column.hashtag": "এই হসট এখনিই।",
"empty_column.home": "আপনর বির সময়র এখনি! {public} এ ঘ আসন অথব অনসনন ববহর কর করতন এব অনয বযবহরকর সৎ করতন।",
"empty_column.home.suggestions": "See some suggestions",
@ -176,7 +183,7 @@
"error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
"errors.unexpected_crash.copy_stacktrace": "সকটস কিপব কপি করন",
"errors.unexpected_crash.report_issue": "সমসর পরতিদন করন",
"follow_recommendations.done": "Done",
"follow_recommendations.done": "সমপন",
"follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
"follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
"follow_request.authorize": "অনমতিিন",
@ -256,7 +263,7 @@
"lists.new.title_placeholder": "তির নতন শিম দি",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.none": "উ ন",
"lists.replies_policy.title": "Show replies to:",
"lists.search": "যর অনসরণ করন তর ভতরন",
"lists.subheading": "আপনর তি",
@ -265,7 +272,7 @@
"media_gallery.toggle_visible": "দযতর অবস বদলন",
"missing_indicator.label": "খওয়য়নি",
"missing_indicator.sublabel": "জিিসটওয়য়নি",
"mute_modal.duration": "Duration",
"mute_modal.duration": "সময়ক",
"mute_modal.hide_notifications": "এই বযবহরকর পরজপন বনধ করবন ?",
"mute_modal.indefinite": "Indefinite",
"navigation_bar.apps": "মইলর আপপ",
@ -339,6 +346,7 @@
"poll.total_votes": "{count, plural, one {# ভট} other {# ভট}}",
"poll.vote": "ভট",
"poll.voted": "আপনি এই উততরর পকট দিন",
"poll.votes": "{votes, plural, one {# vote} other {# votes}}",
"poll_button.add_poll": "একটিচন যগ করত",
"poll_button.remove_poll": "নিচন বদ দি",
"privacy.change": "লর গপনয়ত অবসিক করত",
@ -454,6 +462,7 @@
"upload_form.video_description": "শরবণশকিস বষ পরতিবনযকির জনয বরণন করন",
"upload_modal.analyzing_picture": "চির বিষণ কর হচ…",
"upload_modal.apply": "পরয়গ করন",
"upload_modal.applying": "Applying…",
"upload_modal.choose_image": "ছবিিচন করন",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "ছবিয সনত করন",