Browse Source

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

Conflicts:
- `.github/dependabot.yml`:
  Upstream modified it, but we deleted it in glitch-soc.
  Keep it deleted.
master
Claire 3 months ago
parent
commit
59864ff495
  1. 10
      .codeclimate.yml
  2. 20
      .devcontainer/devcontainer.json
  3. 5
      .devcontainer/docker-compose.yml
  4. 4
      .github/workflows/build-image.yml
  5. 40
      .github/workflows/check-i18n.yml
  6. 78
      .prettierignore
  7. 3
      .prettierrc.js
  8. 22
      .rubocop.yml
  9. 2
      Dockerfile
  10. 8
      Gemfile
  11. 30
      Gemfile.lock
  12. 5
      app.json
  13. 1
      app/controllers/activitypub/base_controller.rb
  14. 2
      app/controllers/api/base_controller.rb
  15. 9
      app/javascript/mastodon/features/compose/components/upload.js
  16. 24
      app/javascript/mastodon/locales/ca.json
  17. 46
      app/javascript/mastodon/locales/fa.json
  18. 22
      app/javascript/mastodon/locales/ja.json
  19. 32
      app/javascript/mastodon/locales/ru.json
  20. 8
      app/javascript/mastodon/locales/sk.json
  21. 10
      app/javascript/mastodon/locales/uk.json
  22. 20
      app/javascript/mastodon/locales/vi.json
  23. 2
      app/javascript/styles/mastodon/admin.scss
  24. 113
      app/javascript/styles/mastodon/components.scss
  25. 4
      app/views/accounts/_moved.html.haml
  26. 4
      app/views/admin/account_actions/new.html.haml
  27. 2
      app/views/admin/account_warnings/_account_warning.html.haml
  28. 2
      app/views/admin/accounts/index.html.haml
  29. 2
      app/views/admin/accounts/show.html.haml
  30. 2
      app/views/admin/change_emails/show.html.haml
  31. 2
      app/views/admin/disputes/appeals/_appeal.html.haml
  32. 2
      app/views/admin/relationships/index.html.haml
  33. 2
      app/views/admin/statuses/index.html.haml
  34. 2
      app/views/admin_mailer/new_report.text.erb
  35. 2
      app/views/auth/registrations/_status.html.haml
  36. 2
      app/views/authorize_interactions/show.html.haml
  37. 2
      app/views/authorize_interactions/success.html.haml
  38. 2
      app/views/notification_mailer/_status.html.haml
  39. 2
      app/views/notification_mailer/digest.text.erb
  40. 2
      app/views/notification_mailer/favourite.html.haml
  41. 2
      app/views/notification_mailer/favourite.text.erb
  42. 2
      app/views/notification_mailer/follow.html.haml
  43. 2
      app/views/notification_mailer/follow.text.erb
  44. 2
      app/views/notification_mailer/follow_request.html.haml
  45. 2
      app/views/notification_mailer/follow_request.text.erb
  46. 2
      app/views/notification_mailer/mention.html.haml
  47. 2
      app/views/notification_mailer/mention.text.erb
  48. 2
      app/views/notification_mailer/reblog.html.haml
  49. 2
      app/views/notification_mailer/reblog.text.erb
  50. 2
      app/views/settings/aliases/index.html.haml
  51. 4
      app/views/settings/migrations/show.html.haml
  52. 2
      app/workers/scheduler/user_cleanup_scheduler.rb
  53. 32
      boxfile.yml
  54. 80
      config/brakeman.ignore
  55. 1
      config/database.yml
  56. 4
      config/i18n-tasks.yml
  57. 22
      config/locales/ca.yml
  58. 32
      config/locales/devise.ca.yml
  59. 34
      config/locales/devise.da.yml
  60. 22
      config/locales/doorkeeper.ca.yml
  61. 68
      config/locales/doorkeeper.da.yml
  62. 1
      config/locales/doorkeeper.sk.yml
  63. 4
      config/locales/doorkeeper.uk.yml
  64. 8
      config/locales/doorkeeper.vi.yml
  65. 10
      config/locales/ja.yml
  66. 12
      config/locales/ku.yml
  67. 7
      config/locales/simple_form.ja.yml
  68. 3
      config/locales/simple_form.sk.yml
  69. 2
      config/locales/simple_form.th.yml
  70. 2
      config/locales/sk.yml
  71. 8
      config/locales/th.yml
  72. 18
      config/locales/uk.yml
  73. 48
      config/locales/vi.yml
  74. 2
      config/sidekiq.yml
  75. 89
      docker-compose.yml
  76. 33
      lib/mastodon/email_domain_blocks_cli.rb
  77. 13
      package.json
  78. 5
      scalingo.json
  79. 43
      streaming/index.js
  80. 67
      yarn.lock

10
.codeclimate.yml

@ -1,4 +1,4 @@
version: "2"
version: '2'
checks:
argument-count:
enabled: false
@ -34,8 +34,8 @@ plugins:
sass-lint:
enabled: true
exclude_patterns:
- spec/
- vendor/asset/
- spec/
- vendor/asset/
- app/javascript/mastodon/locales/**/*.json
- config/locales/**/*.yml
- app/javascript/mastodon/locales/**/*.json
- config/locales/**/*.yml

20
.devcontainer/devcontainer.json

@ -5,22 +5,22 @@
"workspaceFolder": "/workspaces/mastodon",
// Set *default* container specific settings.json values on container create.
"settings": {},
"settings": {},
// Add the IDs of extensions you want installed when the container is created.
"extensions": [
"extensions": [
"EditorConfig.EditorConfig",
"dbaeumer.vscode-eslint",
"rebornix.Ruby"
],
"rebornix.Ruby"
],
// Use 'forwardPorts' to make a list of ports inside the container available locally.
// This can be used to network with other containers or the host.
"forwardPorts": [3000, 4000],
// This can be used to network with other containers or the host.
"forwardPorts": [3000, 4000],
// Use 'postCreateCommand' to run commands after the container is created.
"postCreateCommand": "bundle install --path vendor/bundle && yarn install && ./bin/rails db:setup",
// Use 'postCreateCommand' to run commands after the container is created.
"postCreateCommand": "bundle install --path vendor/bundle && yarn install && ./bin/rails db:setup",
// Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
"remoteUser": "vscode"
// Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
"remoteUser": "vscode"
}

5
.devcontainer/docker-compose.yml

@ -9,9 +9,9 @@ services:
# Update 'VARIANT' to pick a version of Ruby: 3, 3.1, 3.0, 2, 2.7, 2.6
# Append -bullseye or -buster to pin to an OS version.
# Use -bullseye variants on local arm64/Apple Silicon.
VARIANT: "3.0-bullseye"
VARIANT: '3.0-bullseye'
# Optional Node.js version to install
NODE_VERSION: "14"
NODE_VERSION: '14'
volumes:
- ..:/workspaces/mastodon:cached
environment:
@ -34,7 +34,6 @@ services:
- internal_network
user: vscode
db:
image: postgres:14-alpine
restart: unless-stopped

4
.github/workflows/build-image.yml

@ -3,9 +3,9 @@ on:
workflow_dispatch:
push:
branches:
- "main"
- 'main'
tags:
- "*"
- '*'
pull_request:
paths:
- .github/workflows/build-image.yml

40
.github/workflows/check-i18n.yml

@ -2,9 +2,9 @@ name: Check i18n
on:
push:
branches: [ main ]
branches: [main]
pull_request:
branches: [ main ]
branches: [main]
env:
RAILS_ENV: test
@ -14,21 +14,21 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get install -y libicu-dev libidn11-dev
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.0'
bundler-cache: true
- name: Check locale file normalization
run: bundle exec i18n-tasks check-normalized
- name: Check for unused strings
run: bundle exec i18n-tasks unused -l en
- name: Check for wrong string interpolations
run: bundle exec i18n-tasks check-consistent-interpolations
- name: Check that all required locale files exist
run: bundle exec rake repo:check_locales_files
- uses: actions/checkout@v2
- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get install -y libicu-dev libidn11-dev
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.0'
bundler-cache: true
- name: Check locale file normalization
run: bundle exec i18n-tasks check-normalized
- name: Check for unused strings
run: bundle exec i18n-tasks unused -l en
- name: Check for wrong string interpolations
run: bundle exec i18n-tasks check-consistent-interpolations
- name: Check that all required locale files exist
run: bundle exec rake repo:check_locales_files

78
.prettierignore

@ -0,0 +1,78 @@
# See https://help.github.com/articles/ignoring-files for more about ignoring files.
#
# If you find yourself ignoring temporary files generated by your text editor
# or operating system, you probably want to add a global ignore instead:
# git config --global core.excludesfile '~/.gitignore_global'
# Ignore bundler config and downloaded libraries.
/.bundle
/vendor/bundle
# Ignore the default SQLite database.
/db/*.sqlite3
/db/*.sqlite3-journal
# Ignore all logfiles and tempfiles.
.eslintcache
/log/*
!/log/.keep
/tmp
/coverage
/public/system
/public/assets
/public/packs
/public/packs-test
.env
.env.production
.env.development
/node_modules/
/build/
# Ignore Vagrant files
.vagrant/
# Ignore Capistrano customizations
/config/deploy/*
# Ignore IDE files
.vscode/
.idea/
# Ignore postgres + redis + elasticsearch volume optionally created by docker-compose
/postgres
/postgres14
/redis
/elasticsearch
# ignore Helm dependency charts
/chart/charts/*.tgz
# Ignore Apple files
.DS_Store
# Ignore vim files
*~
*.swp
# Ignore npm debug log
npm-debug.log
# Ignore yarn log files
yarn-error.log
yarn-debug.log
# Ignore vagrant log files
*-cloudimg-console.log
# Ignore Docker option files
docker-compose.override.yml
# Ignore Helm files
/chart
# Ignore emoji map file
/app/javascript/mastodon/features/emoji/emoji_map.json
# Ignore locale files
/app/javascript/mastodon/locales
/config/locales

3
.prettierrc.js

@ -0,0 +1,3 @@
module.exports = {
singleQuote: true
}

22
.rubocop.yml

@ -5,17 +5,17 @@ AllCops:
TargetRubyVersion: 2.5
NewCops: disable
Exclude:
- 'spec/**/*'
- 'db/**/*'
- 'app/views/**/*'
- 'config/**/*'
- 'bin/*'
- 'Rakefile'
- 'node_modules/**/*'
- 'Vagrantfile'
- 'vendor/**/*'
- 'lib/json_ld/*'
- 'lib/templates/**/*'
- 'spec/**/*'
- 'db/**/*'
- 'app/views/**/*'
- 'config/**/*'
- 'bin/*'
- 'Rakefile'
- 'node_modules/**/*'
- 'Vagrantfile'
- 'vendor/**/*'
- 'lib/json_ld/*'
- 'lib/templates/**/*'
Bundler/OrderedGems:
Enabled: false

2
Dockerfile

@ -5,7 +5,7 @@ SHELL ["/bin/bash", "-c"]
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections
# Install Node v16 (LTS)
ENV NODE_VER="16.13.2"
ENV NODE_VER="16.14.2"
RUN ARCH= && \
dpkgArch="$(dpkg --print-architecture)" && \
case "${dpkgArch##*-}" in \

8
Gemfile

@ -89,7 +89,7 @@ gem 'stoplight', '~> 2.2.1'
gem 'strong_migrations', '~> 0.7'
gem 'tty-prompt', '~> 0.23', require: false
gem 'twitter-text', '~> 3.1.0'
gem 'tzinfo-data', '~> 1.2021'
gem 'tzinfo-data', '~> 1.2022'
gem 'webpacker', '~> 5.4'
gem 'webpush', '~> 0.3'
gem 'webauthn', '~> 3.0.0.alpha1'
@ -131,11 +131,11 @@ group :development do
gem 'better_errors', '~> 2.9'
gem 'binding_of_caller', '~> 1.0'
gem 'bullet', '~> 7.0'
gem 'letter_opener', '~> 1.7'
gem 'letter_opener', '~> 1.8'
gem 'letter_opener_web', '~> 2.0'
gem 'memory_profiler'
gem 'rubocop', '~> 1.25', require: false
gem 'rubocop-rails', '~> 2.13', require: false
gem 'rubocop', '~> 1.26', require: false
gem 'rubocop-rails', '~> 2.14', require: false
gem 'brakeman', '~> 5.2', require: false
gem 'bundler-audit', '~> 0.9', require: false

30
Gemfile.lock

@ -351,8 +351,8 @@ GEM
terrapin (~> 0.6.0)
launchy (2.5.0)
addressable (~> 2.7)
letter_opener (1.7.0)
launchy (~> 2.2)
letter_opener (1.8.1)
launchy (>= 2.2, < 3)
letter_opener_web (2.0.0)
actionmailer (>= 5.2)
letter_opener (~> 1.7)
@ -433,8 +433,8 @@ GEM
openssl-signature_algorithm (0.4.0)
orm_adapter (0.5.0)
ox (2.14.10)
parallel (1.21.0)
parser (3.1.0.0)
parallel (1.22.0)
parser (3.1.1.0)
ast (~> 2.4.1)
parslet (2.0.0)
pastel (0.8.0)
@ -527,7 +527,7 @@ GEM
redis (4.5.1)
redis-namespace (1.8.2)
redis (>= 3.0.4)
regexp_parser (2.2.0)
regexp_parser (2.2.1)
request_store (1.5.0)
rack (>= 1.4)
responders (3.0.1)
@ -562,18 +562,18 @@ GEM
rspec-support (3.11.0)
rspec_junit_formatter (0.5.1)
rspec-core (>= 2, < 4, != 2.12.0)
rubocop (1.25.1)
rubocop (1.26.0)
parallel (~> 1.10)
parser (>= 3.1.0.0)
rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 1.8, < 3.0)
rexml
rubocop-ast (>= 1.15.1, < 2.0)
rubocop-ast (>= 1.16.0, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 1.4.0, < 3.0)
rubocop-ast (1.15.1)
parser (>= 3.0.1.1)
rubocop-rails (2.13.2)
rubocop-ast (1.16.0)
parser (>= 3.1.1.0)
rubocop-rails (2.14.2)
activesupport (>= 4.2.0)
rack (>= 1.1)
rubocop (>= 1.7.0, < 2.0)
@ -669,7 +669,7 @@ GEM
unf (~> 0.1.0)
tzinfo (2.0.4)
concurrent-ruby (~> 1.0)
tzinfo-data (1.2021.5)
tzinfo-data (1.2022.1)
tzinfo (>= 1.0.0)
unf (0.1.4)
unf_ext
@ -774,7 +774,7 @@ DEPENDENCIES
json-ld-preloaded (~> 3.2)
kaminari (~> 1.2)
kt-paperclip (~> 7.1)
letter_opener (~> 1.7)
letter_opener (~> 1.8)
letter_opener_web (~> 2.0)
link_header (~> 0.0)
lograge (~> 0.11)
@ -819,8 +819,8 @@ DEPENDENCIES
rspec-rails (~> 5.1)
rspec-sidekiq (~> 3.1)
rspec_junit_formatter (~> 0.5)
rubocop (~> 1.25)
rubocop-rails (~> 2.13)
rubocop (~> 1.26)
rubocop-rails (~> 2.14)
ruby-progressbar (~> 1.11)
sanitize (~> 6.0)
scenic (~> 1.6)
@ -839,7 +839,7 @@ DEPENDENCIES
thor (~> 1.2)
tty-prompt (~> 0.23)
twitter-text (~> 3.1.0)
tzinfo-data (~> 1.2021)
tzinfo-data (~> 1.2022)
webauthn (~> 3.0.0.alpha1)
webmock (~> 3.14)
webpacker (~> 5.4)

5
app.json

@ -95,8 +95,5 @@
"scripts": {
"postdeploy": "bundle exec rails db:migrate && bundle exec rails db:seed"
},
"addons": [
"heroku-postgresql",
"heroku-redis"
]
"addons": ["heroku-postgresql", "heroku-redis"]
}

1
app/controllers/activitypub/base_controller.rb

@ -2,6 +2,7 @@
class ActivityPub::BaseController < Api::BaseController
skip_before_action :require_authenticated_user!
skip_around_action :set_locale
private

2
app/controllers/api/base_controller.rb

@ -15,8 +15,6 @@ class Api::BaseController < ApplicationController
protect_from_forgery with: :null_session
skip_around_action :set_locale
rescue_from ActiveRecord::RecordInvalid, Mastodon::ValidationError do |e|
render json: { error: e.to_s }, status: 422
end

9
app/javascript/mastodon/features/compose/components/upload.js

@ -5,7 +5,6 @@ import Motion from '../../ui/util/optional_motion';
import spring from 'react-motion/lib/spring';
import ImmutablePureComponent from 'react-immutable-pure-component';
import { FormattedMessage } from 'react-intl';
import classNames from 'classnames';
import Icon from 'mastodon/components/icon';
export default class Upload extends ImmutablePureComponent {
@ -43,10 +42,16 @@ export default class Upload extends ImmutablePureComponent {
<Motion defaultStyle={{ scale: 0.8 }} style={{ scale: spring(1, { stiffness: 180, damping: 12 }) }}>
{({ scale }) => (
<div className='compose-form__upload-thumbnail' style={{ transform: `scale(${scale})`, backgroundImage: `url(${media.get('preview_url')})`, backgroundPosition: `${x}% ${y}%` }}>
<div className={classNames('compose-form__upload__actions', { active: true })}>
<div className='compose-form__upload__actions'>
<button className='icon-button' onClick={this.handleUndoClick}><Icon id='times' /> <FormattedMessage id='upload_form.undo' defaultMessage='Delete' /></button>
{!isEditingStatus && (<button className='icon-button' onClick={this.handleFocalPointClick}><Icon id='pencil' /> <FormattedMessage id='upload_form.edit' defaultMessage='Edit' /></button>)}
</div>
{(media.get('description') || '').length === 0 && (
<div className='compose-form__upload__warning'>
<button className='icon-button' onClick={this.handleFocalPointClick}><Icon id='info-circle' /> <FormattedMessage id='upload_form.description_missing' defaultMessage='No description added' /></button>
</div>
)}
</div>
)}
</Motion>

24
app/javascript/mastodon/locales/ca.json

@ -328,7 +328,7 @@
"notifications.column_settings.filter_bar.category": "Barra ràpida de filtres",
"notifications.column_settings.filter_bar.show_bar": "Mostra la barra de filtres",
"notifications.column_settings.follow": "Nous seguidors:",
"notifications.column_settings.follow_request": "Nova sol·licitud de seguiment:",
"notifications.column_settings.follow_request": "Noves sol·licituts de seguiment:",
"notifications.column_settings.mention": "Mencions:",
"notifications.column_settings.poll": "Resultats de l’enquesta:",
"notifications.column_settings.push": "Notificacions push",
@ -353,7 +353,7 @@
"notifications.permission_denied_alert": "No es poden activar les notificacions del escriptori perquè el permís del navegador ha estat denegat abans",
"notifications.permission_required": "Les notificacions d'escriptori no estan disponibles perquè el permís requerit no ha estat concedit.",
"notifications_permission_banner.enable": "Activar les notificacions d’escriptori",
"notifications_permission_banner.how_to_control": "Per a rebre notificacions quan Mastodon no està obert cal activar les notificacions d’escriptori. Pots controlar amb precisió quins tipus d’interaccions generen notificacions d’escriptori després d’activar el botó {icon} de dalt.",
"notifications_permission_banner.how_to_control": "Per a rebre notificacions quan Mastodon no és obert cal activar les notificacions d’escriptori. Pots controlar amb precisió quins tipus d’interaccions generen notificacions d’escriptori després d’activar el botó {icon} de dalt.",
"notifications_permission_banner.title": "Mai et perdis res",
"picture_in_picture.restore": "Retorna’l",
"poll.closed": "Finalitzada",
@ -376,7 +376,7 @@
"privacy.unlisted.short": "No llistat",
"refresh": "Actualitza",
"regeneration_indicator.label": "Carregant…",
"regeneration_indicator.sublabel": "S'està preparant la línia de temps Inici!",
"regeneration_indicator.sublabel": "S'està preparant la teva línia de temps Inici!",
"relative_time.days": "fa {number} dies",
"relative_time.full.days": "fa {number, plural, one {# dia} other {# dies}}",
"relative_time.full.hours": "fa {number, plural, one {# hora} other {# hores}}",
@ -394,7 +394,7 @@
"report.categories.other": "Altres",
"report.categories.spam": "Contingut brossa",
"report.categories.violation": "El contingut viola una o més regles del servidor",
"report.category.subtitle": "Tria la millor combinació",
"report.category.subtitle": "Tria la millor coincidència",
"report.category.title": "Digue'ns què està passant amb aquest {type}",
"report.category.title_account": "perfil",
"report.category.title_status": "publicació",
@ -410,7 +410,7 @@
"report.reasons.dislike_description": "Això no és quelcom que vulguis veure",
"report.reasons.other": "Això és una altre cosa",
"report.reasons.other_description": "El problema no encaixa en altres categories",
"report.reasons.spam": "Això és brossa",
"report.reasons.spam": "Això és contingut brossa",
"report.reasons.spam_description": "Enllaços maliciosos, compromís falç o respostes repetitives",
"report.reasons.violation": "Viola les regles del servidor",
"report.reasons.violation_description": "Ets conscient que trenca regles especifiques",
@ -447,7 +447,7 @@
"status.cancel_reblog_private": "Desfer l'impuls",
"status.cannot_reblog": "Aquesta publicació no pot ser impulsada",
"status.copy": "Copia l'enllaç a l'estat",
"status.delete": "Esborrar",
"status.delete": "Esborra",
"status.detailed_status": "Visualització detallada de la conversa",
"status.direct": "Missatge directe @{name}",
"status.edit": "Edita",
@ -465,17 +465,17 @@
"status.mute": "Silenciar @{name}",
"status.mute_conversation": "Silenciar conversació",
"status.open": "Ampliar aquest estat",
"status.pin": "Fixat en el perfil",
"status.pin": "Fixa en el perfil",
"status.pinned": "Publicació fixada",
"status.read_more": "Llegir més",
"status.reblog": "Impuls",
"status.reblog_private": "Impulsar a l'audiència original",
"status.reblog_private": "Impulsar amb la visibilitat original",
"status.reblogged_by": "{name} ha impulsat",
"status.reblogs.empty": "Encara ningú no ha impulsat aquesta publicació. Quan algú ho faci, apareixeran aquí.",
"status.redraft": "Esborrar i reescriure",
"status.remove_bookmark": "Suprimeix el marcador",
"status.reply": "Respondre",
"status.replyAll": "Respondre al tema",
"status.replyAll": "Respondre al fil",
"status.report": "Informar sobre @{name}",
"status.sensitive_warning": "Contingut sensible",
"status.share": "Compartir",
@ -510,11 +510,11 @@
"units.short.million": "{count}M",
"units.short.thousand": "{count}K",
"upload_area.title": "Arrossega i deixa anar per a carregar",
"upload_button.label": "Afegir multimèdia (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_button.label": "Afegir mèdia, un vídeo o un fitxer d'audio",
"upload_error.limit": "S'ha superat el límit de càrrega d'arxius.",
"upload_error.poll": "No es permet l'enviament de fitxers en les enquestes.",
"upload_form.audio_description": "Descriviu per a les persones amb pèrdua auditiva",
"upload_form.description": "Descriure els problemes visuals",
"upload_form.description": "Descriure per els que tenen problemes visuals",
"upload_form.edit": "Edita",
"upload_form.thumbnail": "Canvia la miniatura",
"upload_form.undo": "Esborra",
@ -523,7 +523,7 @@
"upload_modal.apply": "Aplica",
"upload_modal.applying": "Aplicant…",
"upload_modal.choose_image": "Tria imatge",
"upload_modal.description_placeholder": "Jove xef, porti whisky amb quinze glaçons d’hidrogen, coi!",
"upload_modal.description_placeholder": "Una ràpida guineu marró salta sobre el gos mandrós",
"upload_modal.detect_text": "Detecta el text de l'imatge",
"upload_modal.edit_media": "Editar multimèdia",
"upload_modal.hint": "Fes clic o arrossega el cercle en la previsualització per escollir el punt focal que sempre serà visible de totes les miniatures.",

46
app/javascript/mastodon/locales/fa.json

@ -18,7 +18,7 @@
"account.followers": "پیگیرندگان",
"account.followers.empty": "هنوز کسی این کاربر را پیگیری نمیکند.",
"account.followers_counter": "{count, plural, one {{counter} پیگیرنده} other {{counter} پیگیرنده}}",
"account.following": "Following",
"account.following": "پی میگیرید",
"account.following_counter": "{count, plural, one {{counter} پیگرفته} other {{counter} پیگرفته}}",
"account.follows.empty": "این کاربر هنوز پیگیر کسی نیست.",
"account.follows_you": "پی میگیردتان",
@ -41,12 +41,12 @@
"account.statuses_counter": "{count, plural, one {{counter} فرسته} other {{counter} فرسته}}",
"account.unblock": "رفع مسدودیت @{name}",
"account.unblock_domain": "رفع مسدودیت دامنهٔ {domain}",
"account.unblock_short": "Unblock",
"account.unblock_short": "رفع مسدودیت",
"account.unendorse": "معرّفی نکردن در نمایه",
"account.unfollow": "ناپیگیری",
"account.unmute": "ناخموشی @{name}",
"account.unmute_notifications": "ناخموشی آگاهیها از @{name}",
"account.unmute_short": "Unmute",
"account.unmute_short": "ناخموشی",
"account_note.placeholder": "برای افزودن یادداشت کلیک کنید",
"admin.dashboard.daily_retention": "User retention rate by day after sign-up",
"admin.dashboard.monthly_retention": "User retention rate by month after sign-up",
@ -106,7 +106,7 @@
"compose_form.poll.switch_to_single": "تبدیل به نظرسنجی تکگزینهای",
"compose_form.publish": "بوق",
"compose_form.publish_loud": "{publish}!",
"compose_form.save_changes": "Save changes",
"compose_form.save_changes": "ذخیرهٔ تغییرات",
"compose_form.sensitive.hide": "{count, plural, one {علامتگذاری رسانه به عنوان حساس} other {علامتگذاری رسانهها به عنوان حساس}}",
"compose_form.sensitive.marked": "{count, plural, one {رسانه به عنوان حساس علامتگذاری شد} other {رسانهها به عنوان حساس علامتگذاری شدند}}",
"compose_form.sensitive.unmarked": "{count, plural, one {رسانه به عنوان حساس علامتگذاری نشد} other {رسانهها به عنوان حساس علامتگذاری نشدند}}",
@ -187,12 +187,12 @@
"error.unexpected_crash.next_steps_addons": "لطفاً از کارشان انداخته و صفحه را نوسازی کنید. اگر کمکی نکرد، شاید همچنان بتوانید با مرورگری دیگر یا با کارهای بومی از ماستودون استفاده کنید.",
"errors.unexpected_crash.copy_stacktrace": "رونوشت از جزئیات اشکال",
"errors.unexpected_crash.report_issue": "گزارش مشکل",
"explore.search_results": "Search results",
"explore.suggested_follows": "For you",
"explore.title": "Explore",
"explore.trending_links": "News",
"explore.trending_statuses": "Posts",
"explore.trending_tags": "Hashtags",
"explore.search_results": "نتایج جستوجو",
"explore.suggested_follows": "برای شما",
"explore.title": "کاوش",
"explore.trending_links": "اخبار",
"explore.trending_statuses": "فرستهها",
"explore.trending_tags": "هشتگها",
"follow_recommendations.done": "انجام شد",
"follow_recommendations.heading": "افرادی را که میخواهید فرستههایشان را ببینید پیگیری کنید! اینها تعدادی پیشنهاد هستند.",
"follow_recommendations.lead": "فرستههای افرادی که دنبال میکنید به ترتیب زمانی در خوراک خانهتان نشان داده خواهد شد. از اشتباه کردن نترسید. میتوانید به همین سادگی در هر زمانی از دنبال کردن افراد دست بکشید!",
@ -294,7 +294,7 @@
"navigation_bar.discover": "گشت و گذار",
"navigation_bar.domain_blocks": "دامنههای مسدود شده",
"navigation_bar.edit_profile": "ویرایش نمایه",
"navigation_bar.explore": "Explore",
"navigation_bar.explore": "کاوش",
"navigation_bar.favourites": "پسندیدهها",
"navigation_bar.filters": "واژههای خموش",
"navigation_bar.follow_requests": "درخواستهای پیگیری",
@ -309,7 +309,7 @@
"navigation_bar.preferences": "ترجیحات",
"navigation_bar.public_timeline": "خط زمانی همگانی",
"navigation_bar.security": "امنیت",
"notification.admin.sign_up": "{name} signed up",
"notification.admin.sign_up": "{name} ثبت نام کرد",
"notification.favourite": "{name} فرستهتان را پسندید",
"notification.follow": "{name} پیگیرتان شد",
"notification.follow_request": "{name} میخواهد پیگیر شما باشد",
@ -318,10 +318,10 @@
"notification.poll": "نظرسنجیای که در آن رأی دادید به پایان رسیده است",
"notification.reblog": "{name} فرستهتان را تقویت کرد",
"notification.status": "{name} چیزی فرستاد",
"notification.update": "{name} edited a post",
"notification.update": "{name} فرستهای را ویرایش کرد",
"notifications.clear": "پاکسازی آگاهیها",
"notifications.clear_confirmation": "مطمئنید میخواهید همهٔ آگاهیهایتان را برای همیشه پاک کنید؟",
"notifications.column_settings.admin.sign_up": "New sign-ups:",
"notifications.column_settings.admin.sign_up": "ثبت نامهای جدید:",
"notifications.column_settings.alert": "آگاهیهای میزکار",
"notifications.column_settings.favourite": "پسندیدهها:",
"notifications.column_settings.filter_bar.advanced": "نمایش همۀ دستهها",
@ -338,7 +338,7 @@
"notifications.column_settings.status": "فرستههای جدید:",
"notifications.column_settings.unread_notifications.category": "آگاهیهای خوانده نشده",
"notifications.column_settings.unread_notifications.highlight": "پررنگ کردن آگاهیهای خوانده نشده",
"notifications.column_settings.update": "Edits:",
"notifications.column_settings.update": "ویرایشها:",
"notifications.filter.all": "همه",
"notifications.filter.boosts": "تقویتها",
"notifications.filter.favourites": "پسندها",
@ -378,20 +378,20 @@
"regeneration_indicator.label": "در حال بار شدن…",
"regeneration_indicator.sublabel": "خوراک خانگیان دارد آماده میشود!",
"relative_time.days": "{number} روز",
"relative_time.full.days": "{number, plural, one {# day} other {# days}} ago",
"relative_time.full.hours": "{number, plural, one {# hour} other {# hours}} ago",
"relative_time.full.just_now": "just now",
"relative_time.full.minutes": "{number, plural, one {# minute} other {# minutes}} ago",
"relative_time.full.seconds": "{number, plural, one {# second} other {# seconds}} ago",
"relative_time.full.days": "{number, plural, one {# روز} other {# روز}} پیش",
"relative_time.full.hours": "{number, plural, one {# ساعت} other {# ساعت}} پیش",
"relative_time.full.just_now": "همين آلان",
"relative_time.full.minutes": "{number, plural, one {# دقیقه} other {# دقیقه}} پیش",
"relative_time.full.seconds": "{number, plural, one {# ثانیه} other {# ثانیه}} پیش",
"relative_time.hours": "{number} ساعت",
"relative_time.just_now": "حالا",
"relative_time.minutes": "{number} دقیقه",
"relative_time.seconds": "{number} ثانیه",
"relative_time.today": "امروز",
"reply_indicator.cancel": "لغو",
"report.block": "Block",
"report.block_explanation": "You will not see their posts. They will not be able to see your posts or follow you. They will be able to tell that they are blocked.",
"report.categories.other": "Other",
"report.block": "مسدود کردن",
"report.block_explanation": "شما فرستههایشان را نخواهید دید. آنها نمیتوانند فرستههایتان را ببینند یا شما را پیبگیرند. آنها میتوانند بگویند که مسدود شدهاند.",
"report.categories.other": "غیره",
"report.categories.spam": "Spam",
"report.categories.violation": "Content violates one or more server rules",
"report.category.subtitle": "Choose the best match",

22
app/javascript/mastodon/locales/ja.json

@ -18,7 +18,7 @@
"account.followers": "フォロワー",
"account.followers.empty": "まだ誰もフォローしていません。",
"account.followers_counter": "{counter} フォロワー",
"account.following": "Following",
"account.following": "フォロー中",
"account.following_counter": "{counter} フォロー",
"account.follows.empty": "まだ誰もフォローしていません。",
"account.follows_you": "フォローされています",
@ -41,12 +41,12 @@
"account.statuses_counter": "{counter} 投稿",
"account.unblock": "@{name}さんのブロックを解除",
"account.unblock_domain": "{domain}のブロックを解除",
"account.unblock_short": "Unblock",
"account.unblock_short": "ブロック解除",
"account.unendorse": "プロフィールから外す",
"account.unfollow": "フォロー解除",
"account.unmute": "@{name}さんのミュートを解除",
"account.unmute_notifications": "@{name}さんからの通知を受け取るようにする",
"account.unmute_short": "Unmute",
"account.unmute_short": "ミュート解除",
"account_note.placeholder": "クリックしてメモを追加",
"admin.dashboard.daily_retention": "サインアップ後の日ごとのユーザー継続率",
"admin.dashboard.monthly_retention": "サインアップ後の月ごとのユーザー継続率",
@ -192,7 +192,7 @@
"errors.unexpected_crash.copy_stacktrace": "スタックトレースをクリップボードにコピー",
"errors.unexpected_crash.report_issue": "問題を報告",
"explore.search_results": "検索結果",
"explore.suggested_follows": "For you",
"explore.suggested_follows": "あなたに",
"explore.title": "エクスプローラー",
"explore.trending_links": "ニュース",
"explore.trending_statuses": "投稿",
@ -326,7 +326,7 @@
"notification.update": "{name} が投稿を編集しました",
"notifications.clear": "通知を消去",
"notifications.clear_confirmation": "本当に通知を消去しますか?",
"notifications.column_settings.admin.sign_up": "New sign-ups:",
"notifications.column_settings.admin.sign_up": "新規登録:",
"notifications.column_settings.alert": "デスクトップ通知",
"notifications.column_settings.favourite": "お気に入り:",
"notifications.column_settings.filter_bar.advanced": "すべてのカテゴリを表示",
@ -395,7 +395,7 @@
"relative_time.today": "今日",
"reply_indicator.cancel": "キャンセル",
"report.block": "ブロック",
"report.block_explanation": "You will not see their posts. They will not be able to see your posts or follow you. They will be able to tell that they are blocked.",
"report.block_explanation": "相手の投稿が表示されなくなります。相手はあなたの投稿を見ることやフォローすることができません。相手はブロックされていることがわかります。",
"report.categories.other": "その他",
"report.categories.spam": "スパム",
"report.categories.violation": "サーバーのルールに違反",
@ -404,11 +404,11 @@
"report.category.title_account": "プロフィール",
"report.category.title_status": "投稿",
"report.close": "完了",
"report.comment.title": "Is there anything else you think we should know?",
"report.comment.title": "その他に私たちに伝えておくべき事はありますか?",
"report.forward": "{target} に転送する",
"report.forward_hint": "このアカウントは別のサーバーに所属しています。通報内容を匿名で転送しますか?",
"report.mute": "ミュート",
"report.mute_explanation": "You will not see their posts. They can still follow you and see your posts and will not know that they are muted.",
"report.mute_explanation": "相手の投稿は表示されなくなります。相手は引き続きあなたをフォローして、あなたの投稿を表示することができますが、ミュートされていることはわかりません。",
"report.next": "次へ",
"report.placeholder": "追加コメント",
"report.reasons.dislike": "興味がありません",
@ -426,9 +426,9 @@
"report.submit": "通報する",
"report.target": "{target}さんを通報する",
"report.thanks.take_action": "次のような方法はいかがでしょうか?",
"report.thanks.take_action_actionable": "While we review this, you can take action against @{name}:",
"report.thanks.take_action_actionable": "私達が確認している間でも、あなたは @{name} さんに対して対応することが出来ます:",
"report.thanks.title": "見えないようにしたいですか?",
"report.thanks.title_actionable": "Thanks for reporting, we'll look into this.",
"report.thanks.title_actionable": "ご報告ありがとうございます、追って確認します。",
"report.unfollow": "@{name}のフォローを解除",
"report.unfollow_explanation": "このアカウントをフォローしています。ホームフィードに彼らの投稿を表示しないようにするには、彼らのフォローを外してください。",
"search.placeholder": "検索",
@ -441,7 +441,7 @@
"search_results.accounts": "人々",
"search_results.all": "すべて",
"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_fts_disabled": "このサーバーでは投稿本文の検索は利用できません。",
"search_results.total": "{count, number}件の結果",

32
app/javascript/mastodon/locales/ru.json

@ -18,7 +18,7 @@
"account.followers": "Подписчики",
"account.followers.empty": "На этого пользователя пока никто не подписан.",
"account.followers_counter": "{count, plural, one {{counter} подписчик} many {{counter} подписчиков} other {{counter} подписчика}}",
"account.following": "Following",
"account.following": "Подписки",
"account.following_counter": "{count, plural, one {{counter} подписка} many {{counter} подписок} other {{counter} подписки}}",
"account.follows.empty": "Этот пользователь пока ни на кого не подписался.",
"account.follows_you": "Подписан(а) на вас",
@ -95,7 +95,7 @@
"compose_form.direct_message_warning": "Адресованные посты отправляются и видны только упомянутым в них пользователям.",
"compose_form.direct_message_warning_learn_more": "Подробнее",
"compose_form.hashtag_warning": "Так как этот пост не публичный, он не отобразится в поиске по хэштегам.",
"compose_form.lock_disclaimer": "Ваша учётная запись не {locked}. Любой пользователь сможет подписаться на вас и просматривать посты для подписчиков.",
"compose_form.lock_disclaimer": "Ваша учётная запись {locked}. Любой пользователь сможет подписаться на вас и просматривать посты для подписчиков.",
"compose_form.lock_disclaimer.lock": "не закрыта",
"compose_form.placeholder": "О чём думаете?",
"compose_form.poll.add_option": "Добавить вариант",
@ -390,42 +390,42 @@
"relative_time.today": "сегодня",
"reply_indicator.cancel": "Отмена",
"report.block": "Заблокировать",
"report.block_explanation": "You will not see their posts. They will not be able to see your posts or follow you. They will be able to tell that they are blocked.",
"report.block_explanation": "В перестаните видеть посты этого пользователя, а он(а) больше не сможет подписаться на вас и читать ваши посты. Он(а) сможет понять что вы заблокировали его/её.",
"report.categories.other": "Другое",
"report.categories.spam": "Спам",
"report.categories.violation": "Содержимое нарушает одно или несколько правил узла",
"report.category.subtitle": "Выберите наиболее подходящее",
"report.category.title": "Расскажите нам, что происходит с {type}",
"report.category.title_account": "профиль",
"report.category.title_status": "пост",
"report.category.title": "Расскажите нам, что не так с {type}",
"report.category.title_account": "этим профилем",
"report.category.title_status": "этим постом",
"report.close": "Готово",
"report.comment.title": "Есть что-нибудь еще, что мы должны знать?",
"report.forward": "Переслать в {target}",
"report.comment.title": "Есть ли что-нибудь ещё, что нам стоит знать?",
"report.forward": "Переслать на {target}",
"report.forward_hint": "Эта учётная запись расположена на другом узле. Отправить туда анонимную копию вашей жалобы?",
"report.mute": "Mute",
"report.mute": "Игнорировать",
"report.mute_explanation": "Вы не будете видеть их посты. Они по-прежнему могут подписываться на вас и видеть ваши посты, но не будут знать, что они в списке игнорируемых.",
"report.next": "Далее",
"report.placeholder": "Комментарий",
"report.placeholder": "Дополнительные комментарии",
"report.reasons.dislike": "Мне не нравится",
"report.reasons.dislike_description": "Не хотел(а) бы видеть такой контент",
"report.reasons.other": "Другое",
"report.reasons.other_description": "Проблема не подпадает под другие категории",
"report.reasons.other_description": "Проблема не попадает ни под одну из категорий",
"report.reasons.spam": "Это спам",
"report.reasons.spam_description": "Вредоносные ссылки, поддельные действия или повторяющиеся ответы",
"report.reasons.spam_description": "Вредоносные ссылки, фальшивое взаимодействие или повторяющиеся ответы",
"report.reasons.violation": "Нарушаются правила сервера",
"report.reasons.violation_description": "Вы знаете, что подобное нарушает определенные правила",
"report.rules.subtitle": "Выберите все подходящие варианты",
"report.rules.title": "Какие правила нарушены?",
"report.statuses.subtitle": "Выберите все подходящие варианты",
"report.statuses.title": "Есть ли сообщения, подтверждающие основания этой жалобы?",
"report.statuses.title": "Выберите посты, которые относятся к вашей жалобе.",
"report.submit": "Отправить",
"report.target": "Жалоба на {target}",
"report.thanks.take_action": "Here are your options for controlling what you see on Mastodon:",
"report.thanks.take_action_actionable": "While we review this, you can take action against @{name}:",
"report.thanks.take_action": "Вот несколько опций управления тем, что вы видите в Mastodon:",
"report.thanks.take_action_actionable": "Пока мы рассматриваем его, вот действия, которые вы можете предпринять лично против @{name}:",
"report.thanks.title": "Не хотите видеть это?",
"report.thanks.title_actionable": "Спасибо за обращение, мы его рассмотрим.",
"report.unfollow": "Отписаться от @{name}",
"report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.",
"report.unfollow_explanation": "Вы подписаны на этого пользователя. Чтобы не видеть его/её посты в своей домашней ленте, отпишитесь от него/неё.",
"search.placeholder": "Поиск",
"search_popout.search_format": "Продвинутый формат поиска",
"search_popout.tips.full_text": "Поиск по простому тексту отобразит посты, которые вы написали, добавили в избранное, продвинули или в которых были упомянуты, а также подходящие имена пользователей и хэштеги.",

8
app/javascript/mastodon/locales/sk.json

@ -389,7 +389,7 @@
"relative_time.seconds": "{number}sek",
"relative_time.today": "dnes",
"reply_indicator.cancel": "Zrušiť",
"report.block": "Block",
"report.block": "Blokuj",
"report.block_explanation": "You will not see their posts. They will not be able to see your posts or follow you. They will be able to tell that they are blocked.",
"report.categories.other": "Other",
"report.categories.spam": "Spam",
@ -424,7 +424,7 @@
"report.thanks.take_action_actionable": "While we review this, you can take action against @{name}:",
"report.thanks.title": "Nechceš to vidieť?",
"report.thanks.title_actionable": "Thanks for reporting, we'll look into this.",
"report.unfollow": "Unfollow @{name}",
"report.unfollow": "Nesleduj @{name}",
"report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.",
"search.placeholder": "Hľadaj",
"search_popout.search_format": "Pokročilé vyhľadávanie",
@ -434,7 +434,7 @@
"search_popout.tips.text": "Vráti jednoduchý textový výpis zhodujúcich sa mien, prezývok a haštagov",
"search_popout.tips.user": "užívateľ",
"search_results.accounts": "Ľudia",
"search_results.all": "All",
"search_results.all": "Všetky",
"search_results.hashtags": "Haštagy",
"search_results.nothing_found": "Could not find anything for these search terms",
"search_results.statuses": "Príspevky",
@ -451,7 +451,7 @@
"status.detailed_status": "Podrobný náhľad celej konverzácie",
"status.direct": "Priama správa pre @{name}",
"status.edit": "Uprav",
"status.edited": "Edited {date}",
"status.edited": "Upravené {date}",
"status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",
"status.embed": "Vložiť",
"status.favourite": "Páči sa mi",

10
app/javascript/mastodon/locales/uk.json

@ -41,7 +41,7 @@
"account.statuses_counter": "{count, plural, one {{counter} Пост} few {{counter} Пости} many {{counter} Постів} other {{counter} Пости}}",
"account.unblock": "Розблокувати @{name}",
"account.unblock_domain": "Розблокувати {domain}",
"account.unblock_short": "Unblock",
"account.unblock_short": "Розблокувати",
"account.unendorse": "Не публікувати у профілі",
"account.unfollow": "Відписатися",
"account.unmute": "Зняти глушення з @{name}",
@ -187,7 +187,7 @@
"error.unexpected_crash.next_steps_addons": "Спробуйте їх вимкнути та оновити сторінку. Якщо це не допомагає, ви можете використовувати Mastodon через інший браузер або окремий застосунок.",
"errors.unexpected_crash.copy_stacktrace": "Скопіювати трасування стека у буфер обміну",
"errors.unexpected_crash.report_issue": "Повідомити про проблему",
"explore.search_results": "Search results",
"explore.search_results": "Результати пошуку",
"explore.suggested_follows": "Для вас",
"explore.title": "Огляд",
"explore.trending_links": "Новини",
@ -309,7 +309,7 @@
"navigation_bar.preferences": "Налаштування",
"navigation_bar.public_timeline": "Глобальна стрічка",
"navigation_bar.security": "Безпека",
"notification.admin.sign_up": "{name} signed up",
"notification.admin.sign_up": "{name} приєднується",
"notification.favourite": "{name} вподобав(-ла) ваш допис",
"notification.follow": "{name} підписався(-лась) на вас",
"notification.follow_request": "{name} відправив(-ла) запит на підписку",
@ -321,7 +321,7 @@
"notification.update": "{name} змінює допис",
"notifications.clear": "Очистити сповіщення",
"notifications.clear_confirmation": "Ви впевнені, що хочете назавжди видалити всі сповіщеня?",
"notifications.column_settings.admin.sign_up": "New sign-ups:",
"notifications.column_settings.admin.sign_up": "Нові реєстрації:",
"notifications.column_settings.alert": "Сповіщення на комп'ютері",
"notifications.column_settings.favourite": "Вподобане:",
"notifications.column_settings.filter_bar.advanced": "Показати всі категорії",
@ -389,7 +389,7 @@
"relative_time.seconds": "{number}с",
"relative_time.today": "сьогодні",
"reply_indicator.cancel": "Відмінити",
"report.block": "Block",
"report.block": "Заблокувати",
"report.block_explanation": "You will not see their posts. They will not be able to see your posts or follow you. They will be able to tell that they are blocked.",
"report.categories.other": "Інше",
"report.categories.spam": "Спам",

20
app/javascript/mastodon/locales/vi.json

@ -8,7 +8,7 @@
"account.blocked": "Đã chặn",
"account.browse_more_on_origin_server": "Truy cập trang của người này",
"account.cancel_follow_request": "Hủy yêu cầu theo dõi",
"account.direct": "Nhắn tin @{name}",
"account.direct": "Nhắn riêng @{name}",
"account.disable_notifications": "Không thông báo khi @{name} đăng tút",
"account.domain_blocked": "Người đã chặn",
"account.edit_profile": "Chỉnh sửa trang cá nhân",
@ -49,9 +49,9 @@
"account.unmute_short": "Bỏ ẩn",
"account_note.placeholder": "Nhấn để thêm",
"admin.dashboard.daily_retention": "Tỉ lệ người dùng sau đăng ký ở lại theo ngày",
"admin.dashboard.monthly_retention": "Tỉ lệ người dùng sau đăng ký ở lại theo tháng",
"admin.dashboard.monthly_retention": "Tỉ lệ người dùng ở lại sau khi đăng ký",
"admin.dashboard.retention.average": "Trung bình",
"admin.dashboard.retention.cohort": "Đăng ký tháng",
"admin.dashboard.retention.cohort": "Tháng đăng ký",
"admin.dashboard.retention.cohort_size": "Người dùng mới",
"alert.rate_limited.message": "Vui lòng thử lại sau {retry_time, time, medium}.",
"alert.rate_limited.title": "Vượt giới hạn",
@ -179,7 +179,7 @@
"empty_column.list": "Chưa có tút. Khi những người trong danh sách này đăng tút mới, chúng sẽ xuất hiện ở đây.",
"empty_column.lists": "Bạn chưa tạo danh sách nào.",
"empty_column.mutes": "Bạn chưa ẩn bất kỳ ai.",
"empty_column.notifications": "Bạn chưa có thông báo nào. Hãy thử theo dõi hoặc nhắn tin cho một ai đó.",
"empty_column.notifications": "Bạn chưa có thông báo nào. Hãy thử theo dõi hoặc nhắn riêng cho một ai đó.",
"empty_column.public": "Trống trơn! Bạn hãy viết gì đó hoặc bắt đầu theo dõi những người khác",
"error.unexpected_crash.explanation": "Trang này có thể không hiển thị chính xác do lỗi lập trình Mastodon hoặc vấn đề tương thích trình duyệt.",
"error.unexpected_crash.explanation_addons": "Trang này không thể hiển thị do xung khắc với add-on của trình duyệt hoặc công cụ tự động dịch ngôn ngữ.",
@ -188,7 +188,7 @@
"errors.unexpected_crash.copy_stacktrace": "Sao chép stacktrace vào clipboard",
"errors.unexpected_crash.report_issue": "Báo cáo lỗi",
"explore.search_results": "Kết quả tìm kiếm",
"explore.suggested_follows": "Đề xuất cho bạn",
"explore.suggested_follows": "Dành cho bạn",
"explore.title": "Khám phá",
"explore.trending_links": "Tin tức",
"explore.trending_statuses": "Tút",
@ -294,7 +294,7 @@
"navigation_bar.discover": "Khám phá",
"navigation_bar.domain_blocks": "Máy chủ đã ẩn",
"navigation_bar.edit_profile": "Trang cá nhân",
"navigation_bar.explore": "Khám phá",
"navigation_bar.explore": "Xu hướng",
"navigation_bar.favourites": "Thích",
"navigation_bar.filters": "Bộ lọc từ ngữ",
"navigation_bar.follow_requests": "Yêu cầu theo dõi",
@ -309,7 +309,7 @@
"navigation_bar.preferences": "Cài đặt",
"navigation_bar.public_timeline": "Thế giới",
"navigation_bar.security": "Bảo mật",
"notification.admin.sign_up": "{name} vừa đăng ký",
"notification.admin.sign_up": "{name} đăng ký máy chủ của bạn",
"notification.favourite": "{name} thích tút của bạn",
"notification.follow": "{name} theo dõi bạn",
"notification.follow_request": "{name} yêu cầu theo dõi bạn",
@ -367,7 +367,7 @@
"poll_button.remove_poll": "Hủy cuộc bình chọn",
"privacy.change": "Thay đổi quyền riêng tư",
"privacy.direct.long": "Chỉ người được nhắc đến mới thấy",
"privacy.direct.short": "Tin nhắn",
"privacy.direct.short": "Nhắn riêng",
"privacy.private.long": "Dành riêng cho người theo dõi",
"privacy.private.short": "Riêng tư",
"privacy.public.long": "Hiện trên bảng tin máy chủ",
@ -449,7 +449,7 @@
"status.copy": "Sao chép URL",
"status.delete": "Xóa",
"status.detailed_status": "Xem chi tiết thêm",
"status.direct": "Nhắn tin @{name}",
"status.direct": "Nhắn riêng @{name}",
"status.edit": "Sửa",
"status.edited": "Đã sửa {date}",
"status.edited_x_times": "Đã sửa {count, plural, other {{count} lần}}",
@ -483,7 +483,7 @@
"status.show_less_all": "Thu gọn toàn bộ",
"status.show_more": "Xem thêm",
"status.show_more_all": "Hiển thị tất cả",
"status.show_thread": "Toàn chủ đề",
"status.show_thread": "Xem chuỗi tút này",
"status.uncached_media_warning": "Uncached",
"status.unmute_conversation": "Quan tâm",
"status.unpin": "Bỏ ghim trên trang cá nhân",

2
app/javascript/styles/mastodon/admin.scss

@ -1322,7 +1322,7 @@ a.sparkline {
width: 50px;
height: 21px;
position: absolute;
bottom: 8px;
bottom: 0;
right: 15px;
background: linear-gradient(to left, $ui-base-color, transparent);
pointer-events: none;

113
app/javascript/styles/mastodon/components.scss

@ -596,30 +596,24 @@
display: flex;
align-items: flex-start;
justify-content: space-between;
opacity: 0;
transition: opacity .1s ease;
}
.icon-button {
flex: 0 1 auto;
color: $secondary-text-color;
font-size: 14px;
font-weight: 500;
padding: 10px;
font-family: inherit;
&:hover,
&:focus,
&:active {
color: lighten($secondary-text-color, 7%);
}
}
.icon-button {
flex: 0 1 auto;
color: $secondary-text-color;
font-size: 14px;
font-weight: 500;
padding: 10px;
font-family: inherit;
&.active {
opacity: 1;
&:hover,
&:focus,
&:active {
color: lighten($secondary-text-color, 7%);
}
}
&-description {
&__warning {
position: absolute;
z-index: 2;
bottom: 0;
@ -627,34 +621,6 @@
right: 0;
box-sizing: border-box;
background: linear-gradient(0deg, rgba($base-shadow-color, 0.8) 0, rgba($base-shadow-color, 0.35) 80%, transparent);
padding: 10px;
opacity: 0;
transition: opacity .1s ease;
textarea {
background: transparent;
color: $secondary-text-color;
border: 0;
padding: 0;
margin: 0;
width: 100%;
font-family: inherit;
font-size: 14px;
font-weight: 500;
&:focus {
color: $white;
}
&::placeholder {
opacity: 0.75;
color: $secondary-text-color;
}
}
&.active {
opacity: 1;
}
}
}
@ -870,7 +836,8 @@
.status__content__spoiler-link {
background: $action-button-color;
&:hover {
&:hover,
&:focus {
background: lighten($action-button-color, 7%);
text-decoration: none;
}
@ -982,7 +949,7 @@
text-transform: uppercase;
line-height: 20px;
cursor: pointer;
vertical-align: middle;
vertical-align: top;
}
.status__wrapper--filtered {
@ -1042,42 +1009,6 @@
.audio-player {
margin-top: 8px;
}
&.light {
.status__relative-time,