mirror of
https://git.kescher.at/CatCatNya/catstodon.git
synced 2024-11-22 07:08:07 +01:00
Merge branch 'refs/heads/glitch' into develop
This commit is contained in:
commit
1862a60e51
234 changed files with 1745 additions and 947 deletions
|
@ -1,5 +1,5 @@
|
||||||
# This is a sample configuration file. You can generate your configuration
|
# This is a sample configuration file. You can generate your configuration
|
||||||
# with the `rake mastodon:setup` interactive setup wizard, but to customize
|
# with the `bundle exec rails mastodon:setup` interactive setup wizard, but to customize
|
||||||
# your setup even further, you'll need to edit it manually. This sample does
|
# your setup even further, you'll need to edit it manually. This sample does
|
||||||
# not demonstrate all available configuration options. Please look at
|
# not demonstrate all available configuration options. Please look at
|
||||||
# https://docs.joinmastodon.org/admin/config/ for the full documentation.
|
# https://docs.joinmastodon.org/admin/config/ for the full documentation.
|
||||||
|
@ -68,7 +68,7 @@ DB_PORT=5432
|
||||||
|
|
||||||
# Secrets
|
# Secrets
|
||||||
# -------
|
# -------
|
||||||
# Generate each with the `RAILS_ENV=production bundle exec rake secret` task (`docker-compose run --rm web bundle exec rake secret` if you use docker compose)
|
# Generate each with the `RAILS_ENV=production bundle exec rails secret` task (`docker-compose run --rm web bundle exec rails secret` if you use docker compose)
|
||||||
# -------
|
# -------
|
||||||
SECRET_KEY_BASE=
|
SECRET_KEY_BASE=
|
||||||
OTP_SECRET=
|
OTP_SECRET=
|
||||||
|
@ -76,7 +76,7 @@ OTP_SECRET=
|
||||||
|
|
||||||
# Web Push
|
# Web Push
|
||||||
# --------
|
# --------
|
||||||
# Generate with `rake mastodon:webpush:generate_vapid_key` (first is the private key, second is the public one)
|
# Generate with `bundle exec rails mastodon:webpush:generate_vapid_key` (first is the private key, second is the public one)
|
||||||
# You should only generate this once per instance. If you later decide to change it, all push subscription will
|
# You should only generate this once per instance. If you later decide to change it, all push subscription will
|
||||||
# be invalidated, requiring the users to access the website again to resubscribe.
|
# be invalidated, requiring the users to access the website again to resubscribe.
|
||||||
# --------
|
# --------
|
||||||
|
|
6
.github/workflows/bundler-audit.yml
vendored
6
.github/workflows/bundler-audit.yml
vendored
|
@ -1,8 +1,10 @@
|
||||||
name: Bundler Audit
|
name: Bundler Audit
|
||||||
on:
|
on:
|
||||||
|
merge_group:
|
||||||
push:
|
push:
|
||||||
branches-ignore:
|
branches:
|
||||||
- 'dependabot/**'
|
- 'main'
|
||||||
|
- 'stable-*'
|
||||||
paths:
|
paths:
|
||||||
- 'Gemfile*'
|
- 'Gemfile*'
|
||||||
- '.ruby-version'
|
- '.ruby-version'
|
||||||
|
|
8
.github/workflows/check-i18n.yml
vendored
8
.github/workflows/check-i18n.yml
vendored
|
@ -2,9 +2,13 @@ name: Check i18n
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [main]
|
branches:
|
||||||
|
- 'main'
|
||||||
|
- 'stable-*'
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [main]
|
branches:
|
||||||
|
- 'main'
|
||||||
|
- 'stable-*'
|
||||||
|
|
||||||
env:
|
env:
|
||||||
RAILS_ENV: test
|
RAILS_ENV: test
|
||||||
|
|
10
.github/workflows/codeql.yml
vendored
10
.github/workflows/codeql.yml
vendored
|
@ -1,11 +1,15 @@
|
||||||
name: 'CodeQL'
|
name: 'CodeQL'
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
merge_group:
|
||||||
push:
|
push:
|
||||||
branches: ['main']
|
branches:
|
||||||
|
- 'main'
|
||||||
|
- 'stable-*'
|
||||||
pull_request:
|
pull_request:
|
||||||
# The branches below must be a subset of the branches above
|
branches:
|
||||||
branches: ['main']
|
- 'main'
|
||||||
|
- 'stable-*'
|
||||||
schedule:
|
schedule:
|
||||||
- cron: '22 6 * * 1'
|
- cron: '22 6 * * 1'
|
||||||
|
|
||||||
|
|
4
.github/workflows/crowdin-upload.yml
vendored
4
.github/workflows/crowdin-upload.yml
vendored
|
@ -1,9 +1,11 @@
|
||||||
name: Crowdin / Upload translations
|
name: Crowdin / Upload translations
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
merge_group:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- 'main'
|
||||||
|
- 'stable-*'
|
||||||
paths:
|
paths:
|
||||||
- crowdin-glitch.yml
|
- crowdin-glitch.yml
|
||||||
- app/javascript/flavours/glitch/locales/en.json
|
- app/javascript/flavours/glitch/locales/en.json
|
||||||
|
|
4
.github/workflows/format-check.yml
vendored
4
.github/workflows/format-check.yml
vendored
|
@ -1,6 +1,10 @@
|
||||||
name: Check formatting
|
name: Check formatting
|
||||||
on:
|
on:
|
||||||
|
merge_group:
|
||||||
push:
|
push:
|
||||||
|
branches:
|
||||||
|
- 'main'
|
||||||
|
- 'stable-*'
|
||||||
pull_request:
|
pull_request:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
|
7
.github/workflows/lint-css.yml
vendored
7
.github/workflows/lint-css.yml
vendored
|
@ -1,9 +1,10 @@
|
||||||
name: CSS Linting
|
name: CSS Linting
|
||||||
on:
|
on:
|
||||||
|
merge_group:
|
||||||
push:
|
push:
|
||||||
branches-ignore:
|
branches:
|
||||||
- 'dependabot/**'
|
- 'main'
|
||||||
- 'renovate/**'
|
- 'stable-*'
|
||||||
paths:
|
paths:
|
||||||
- 'package.json'
|
- 'package.json'
|
||||||
- 'yarn.lock'
|
- 'yarn.lock'
|
||||||
|
|
7
.github/workflows/lint-haml.yml
vendored
7
.github/workflows/lint-haml.yml
vendored
|
@ -1,9 +1,10 @@
|
||||||
name: Haml Linting
|
name: Haml Linting
|
||||||
on:
|
on:
|
||||||
|
merge_group:
|
||||||
push:
|
push:
|
||||||
branches-ignore:
|
branches:
|
||||||
- 'dependabot/**'
|
- 'main'
|
||||||
- 'renovate/**'
|
- 'stable-*'
|
||||||
paths:
|
paths:
|
||||||
- '.github/workflows/haml-lint-problem-matcher.json'
|
- '.github/workflows/haml-lint-problem-matcher.json'
|
||||||
- '.github/workflows/lint-haml.yml'
|
- '.github/workflows/lint-haml.yml'
|
||||||
|
|
7
.github/workflows/lint-js.yml
vendored
7
.github/workflows/lint-js.yml
vendored
|
@ -1,9 +1,10 @@
|
||||||
name: JavaScript Linting
|
name: JavaScript Linting
|
||||||
on:
|
on:
|
||||||
|
merge_group:
|
||||||
push:
|
push:
|
||||||
branches-ignore:
|
branches:
|
||||||
- 'dependabot/**'
|
- 'main'
|
||||||
- 'renovate/**'
|
- 'stable-*'
|
||||||
paths:
|
paths:
|
||||||
- 'package.json'
|
- 'package.json'
|
||||||
- 'yarn.lock'
|
- 'yarn.lock'
|
||||||
|
|
7
.github/workflows/lint-ruby.yml
vendored
7
.github/workflows/lint-ruby.yml
vendored
|
@ -1,9 +1,10 @@
|
||||||
name: Ruby Linting
|
name: Ruby Linting
|
||||||
on:
|
on:
|
||||||
|
merge_group:
|
||||||
push:
|
push:
|
||||||
branches-ignore:
|
branches:
|
||||||
- 'dependabot/**'
|
- 'main'
|
||||||
- 'renovate/**'
|
- 'stable-*'
|
||||||
paths:
|
paths:
|
||||||
- 'Gemfile*'
|
- 'Gemfile*'
|
||||||
- '.rubocop*.yml'
|
- '.rubocop*.yml'
|
||||||
|
|
7
.github/workflows/test-js.yml
vendored
7
.github/workflows/test-js.yml
vendored
|
@ -1,9 +1,10 @@
|
||||||
name: JavaScript Testing
|
name: JavaScript Testing
|
||||||
on:
|
on:
|
||||||
|
merge_group:
|
||||||
push:
|
push:
|
||||||
branches-ignore:
|
branches:
|
||||||
- 'dependabot/**'
|
- 'main'
|
||||||
- 'renovate/**'
|
- 'stable-*'
|
||||||
paths:
|
paths:
|
||||||
- 'package.json'
|
- 'package.json'
|
||||||
- 'yarn.lock'
|
- 'yarn.lock'
|
||||||
|
|
34
.github/workflows/test-migrations.yml
vendored
34
.github/workflows/test-migrations.yml
vendored
|
@ -1,29 +1,29 @@
|
||||||
name: Historical data migration test
|
name: Historical data migration test
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
merge_group:
|
||||||
push:
|
push:
|
||||||
branches-ignore:
|
branches:
|
||||||
- 'dependabot/**'
|
- 'main'
|
||||||
- 'renovate/**'
|
- 'stable-*'
|
||||||
|
paths:
|
||||||
|
- 'Gemfile*'
|
||||||
|
- '.ruby-version'
|
||||||
|
- '**/*.rb'
|
||||||
|
- '.github/workflows/test-migrations.yml'
|
||||||
|
- 'lib/tasks/tests.rake'
|
||||||
|
|
||||||
pull_request:
|
pull_request:
|
||||||
|
paths:
|
||||||
|
- 'Gemfile*'
|
||||||
|
- '.ruby-version'
|
||||||
|
- '**/*.rb'
|
||||||
|
- '.github/workflows/test-migrations.yml'
|
||||||
|
- 'lib/tasks/tests.rake'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
pre_job:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
outputs:
|
|
||||||
should_skip: ${{ steps.skip_check.outputs.should_skip }}
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- id: skip_check
|
|
||||||
uses: fkirc/skip-duplicate-actions@v5
|
|
||||||
with:
|
|
||||||
paths: '["Gemfile*", ".ruby-version", "**/*.rb", ".github/workflows/test-migrations.yml", "lib/tasks/tests.rake"]'
|
|
||||||
|
|
||||||
test:
|
test:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: pre_job
|
|
||||||
if: needs.pre_job.outputs.should_skip != 'true'
|
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
|
|
9
.github/workflows/test-ruby.yml
vendored
9
.github/workflows/test-ruby.yml
vendored
|
@ -1,10 +1,11 @@
|
||||||
name: Ruby Testing
|
name: Ruby Testing
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
merge_group:
|
||||||
push:
|
push:
|
||||||
branches-ignore:
|
branches:
|
||||||
- 'dependabot/**'
|
- 'main'
|
||||||
- 'renovate/**'
|
- 'stable-*'
|
||||||
pull_request:
|
pull_request:
|
||||||
|
|
||||||
env:
|
env:
|
||||||
|
@ -223,7 +224,7 @@ jobs:
|
||||||
- name: Load database schema
|
- name: Load database schema
|
||||||
run: './bin/rails db:create db:schema:load db:seed'
|
run: './bin/rails db:create db:schema:load db:seed'
|
||||||
|
|
||||||
- run: bin/rspec --tag paperclip_processing
|
- run: bin/rspec --tag attachment_processing
|
||||||
|
|
||||||
- name: Upload coverage reports to Codecov
|
- name: Upload coverage reports to Codecov
|
||||||
if: matrix.ruby-version == '.ruby-version'
|
if: matrix.ruby-version == '.ruby-version'
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# This configuration was generated by
|
# This configuration was generated by
|
||||||
# `rubocop --auto-gen-config --auto-gen-only-exclude --no-offense-counts --no-auto-gen-timestamp`
|
# `rubocop --auto-gen-config --auto-gen-only-exclude --no-offense-counts --no-auto-gen-timestamp`
|
||||||
# using RuboCop version 1.64.1.
|
# using RuboCop version 1.65.0.
|
||||||
# The point is for the user to remove these configuration records
|
# The point is for the user to remove these configuration records
|
||||||
# one by one as the offenses are removed from the code base.
|
# one by one as the offenses are removed from the code base.
|
||||||
# Note that changes in the inspected code, or installation of new
|
# Note that changes in the inspected code, or installation of new
|
||||||
|
@ -14,7 +14,7 @@ Lint/NonLocalExitFromIterator:
|
||||||
Metrics/AbcSize:
|
Metrics/AbcSize:
|
||||||
Max: 90
|
Max: 90
|
||||||
|
|
||||||
# Configuration parameters: CountBlocks, Max.
|
# Configuration parameters: CountBlocks, CountModifierForms, Max.
|
||||||
Metrics/BlockNesting:
|
Metrics/BlockNesting:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'lib/tasks/mastodon.rake'
|
- 'lib/tasks/mastodon.rake'
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
3.3.3
|
3.3.4
|
||||||
|
|
|
@ -12,7 +12,7 @@ ARG BUILDPLATFORM=${BUILDPLATFORM}
|
||||||
|
|
||||||
# Ruby image to use for base image, change with [--build-arg RUBY_VERSION="3.3.x"]
|
# Ruby image to use for base image, change with [--build-arg RUBY_VERSION="3.3.x"]
|
||||||
# renovate: datasource=docker depName=docker.io/ruby
|
# renovate: datasource=docker depName=docker.io/ruby
|
||||||
ARG RUBY_VERSION="3.3.3"
|
ARG RUBY_VERSION="3.3.4"
|
||||||
# # Node version to use in base image, change with [--build-arg NODE_MAJOR_VERSION="20"]
|
# # Node version to use in base image, change with [--build-arg NODE_MAJOR_VERSION="20"]
|
||||||
# renovate: datasource=node-version depName=node
|
# renovate: datasource=node-version depName=node
|
||||||
ARG NODE_MAJOR_VERSION="20"
|
ARG NODE_MAJOR_VERSION="20"
|
||||||
|
@ -67,7 +67,9 @@ ENV \
|
||||||
# Optimize jemalloc 5.x performance
|
# Optimize jemalloc 5.x performance
|
||||||
MALLOC_CONF="narenas:2,background_thread:true,thp:never,dirty_decay_ms:1000,muzzy_decay_ms:0" \
|
MALLOC_CONF="narenas:2,background_thread:true,thp:never,dirty_decay_ms:1000,muzzy_decay_ms:0" \
|
||||||
# Enable libvips, should not be changed
|
# Enable libvips, should not be changed
|
||||||
MASTODON_USE_LIBVIPS=true
|
MASTODON_USE_LIBVIPS=true \
|
||||||
|
# Sidekiq will touch tmp/sidekiq_process_has_started_and_will_begin_processing_jobs to indicate it is ready. This can be used for a readiness check in Kubernetes
|
||||||
|
MASTODON_SIDEKIQ_READY_FILENAME=sidekiq_process_has_started_and_will_begin_processing_jobs
|
||||||
|
|
||||||
# Set default shell used for running commands
|
# Set default shell used for running commands
|
||||||
SHELL ["/bin/bash", "-o", "pipefail", "-o", "errexit", "-c"]
|
SHELL ["/bin/bash", "-o", "pipefail", "-o", "errexit", "-c"]
|
||||||
|
|
24
Gemfile.lock
24
Gemfile.lock
|
@ -159,7 +159,7 @@ GEM
|
||||||
case_transform (0.2)
|
case_transform (0.2)
|
||||||
activesupport
|
activesupport
|
||||||
cbor (0.5.9.8)
|
cbor (0.5.9.8)
|
||||||
charlock_holmes (0.7.8)
|
charlock_holmes (0.7.9)
|
||||||
chewy (7.6.0)
|
chewy (7.6.0)
|
||||||
activesupport (>= 5.2)
|
activesupport (>= 5.2)
|
||||||
elasticsearch (>= 7.14.0, < 8)
|
elasticsearch (>= 7.14.0, < 8)
|
||||||
|
@ -180,7 +180,7 @@ GEM
|
||||||
css_parser (1.17.1)
|
css_parser (1.17.1)
|
||||||
addressable
|
addressable
|
||||||
csv (3.3.0)
|
csv (3.3.0)
|
||||||
database_cleaner-active_record (2.1.0)
|
database_cleaner-active_record (2.2.0)
|
||||||
activerecord (>= 5.a)
|
activerecord (>= 5.a)
|
||||||
database_cleaner-core (~> 2.0.0)
|
database_cleaner-core (~> 2.0.0)
|
||||||
database_cleaner-core (2.0.1)
|
database_cleaner-core (2.0.1)
|
||||||
|
@ -346,7 +346,7 @@ GEM
|
||||||
activesupport (>= 3.0)
|
activesupport (>= 3.0)
|
||||||
nokogiri (>= 1.6)
|
nokogiri (>= 1.6)
|
||||||
io-console (0.7.2)
|
io-console (0.7.2)
|
||||||
irb (1.13.2)
|
irb (1.14.0)
|
||||||
rdoc (>= 4.0.0)
|
rdoc (>= 4.0.0)
|
||||||
reline (>= 0.4.2)
|
reline (>= 0.4.2)
|
||||||
jmespath (1.6.2)
|
jmespath (1.6.2)
|
||||||
|
@ -367,7 +367,7 @@ GEM
|
||||||
json-ld-preloaded (3.3.0)
|
json-ld-preloaded (3.3.0)
|
||||||
json-ld (~> 3.3)
|
json-ld (~> 3.3)
|
||||||
rdf (~> 3.3)
|
rdf (~> 3.3)
|
||||||
json-schema (4.3.0)
|
json-schema (4.3.1)
|
||||||
addressable (>= 2.8)
|
addressable (>= 2.8)
|
||||||
jsonapi-renderer (0.2.2)
|
jsonapi-renderer (0.2.2)
|
||||||
jwt (2.7.1)
|
jwt (2.7.1)
|
||||||
|
@ -583,15 +583,15 @@ GEM
|
||||||
orm_adapter (0.5.0)
|
orm_adapter (0.5.0)
|
||||||
ox (2.14.18)
|
ox (2.14.18)
|
||||||
parallel (1.25.1)
|
parallel (1.25.1)
|
||||||
parser (3.3.3.0)
|
parser (3.3.4.0)
|
||||||
ast (~> 2.4.1)
|
ast (~> 2.4.1)
|
||||||
racc
|
racc
|
||||||
parslet (2.0.0)
|
parslet (2.0.0)
|
||||||
pastel (0.8.0)
|
pastel (0.8.0)
|
||||||
tty-color (~> 0.5)
|
tty-color (~> 0.5)
|
||||||
pg (1.5.6)
|
pg (1.5.6)
|
||||||
pghero (3.5.0)
|
pghero (3.6.0)
|
||||||
activerecord (>= 6)
|
activerecord (>= 6.1)
|
||||||
premailer (1.23.0)
|
premailer (1.23.0)
|
||||||
addressable
|
addressable
|
||||||
css_parser (>= 1.12.0)
|
css_parser (>= 1.12.0)
|
||||||
|
@ -733,13 +733,13 @@ GEM
|
||||||
rspec-mocks (~> 3.0)
|
rspec-mocks (~> 3.0)
|
||||||
sidekiq (>= 5, < 8)
|
sidekiq (>= 5, < 8)
|
||||||
rspec-support (3.13.1)
|
rspec-support (3.13.1)
|
||||||
rubocop (1.64.1)
|
rubocop (1.65.0)
|
||||||
json (~> 2.3)
|
json (~> 2.3)
|
||||||
language_server-protocol (>= 3.17.0)
|
language_server-protocol (>= 3.17.0)
|
||||||
parallel (~> 1.10)
|
parallel (~> 1.10)
|
||||||
parser (>= 3.3.0.2)
|
parser (>= 3.3.0.2)
|
||||||
rainbow (>= 2.2.2, < 4.0)
|
rainbow (>= 2.2.2, < 4.0)
|
||||||
regexp_parser (>= 1.8, < 3.0)
|
regexp_parser (>= 2.4, < 3.0)
|
||||||
rexml (>= 3.2.5, < 4.0)
|
rexml (>= 3.2.5, < 4.0)
|
||||||
rubocop-ast (>= 1.31.1, < 2.0)
|
rubocop-ast (>= 1.31.1, < 2.0)
|
||||||
ruby-progressbar (~> 1.7)
|
ruby-progressbar (~> 1.7)
|
||||||
|
@ -756,7 +756,7 @@ GEM
|
||||||
rack (>= 1.1)
|
rack (>= 1.1)
|
||||||
rubocop (>= 1.33.0, < 2.0)
|
rubocop (>= 1.33.0, < 2.0)
|
||||||
rubocop-ast (>= 1.31.1, < 2.0)
|
rubocop-ast (>= 1.31.1, < 2.0)
|
||||||
rubocop-rspec (3.0.2)
|
rubocop-rspec (3.0.3)
|
||||||
rubocop (~> 1.61)
|
rubocop (~> 1.61)
|
||||||
rubocop-rspec_rails (2.30.0)
|
rubocop-rspec_rails (2.30.0)
|
||||||
rubocop (~> 1.61)
|
rubocop (~> 1.61)
|
||||||
|
@ -793,10 +793,10 @@ GEM
|
||||||
redis (>= 4.5.0, < 5)
|
redis (>= 4.5.0, < 5)
|
||||||
sidekiq-bulk (0.2.0)
|
sidekiq-bulk (0.2.0)
|
||||||
sidekiq
|
sidekiq
|
||||||
sidekiq-scheduler (5.0.3)
|
sidekiq-scheduler (5.0.5)
|
||||||
rufus-scheduler (~> 3.2)
|
rufus-scheduler (~> 3.2)
|
||||||
sidekiq (>= 6, < 8)
|
sidekiq (>= 6, < 8)
|
||||||
tilt (>= 1.4.0)
|
tilt (>= 1.4.0, < 3)
|
||||||
sidekiq-unique-jobs (7.1.33)
|
sidekiq-unique-jobs (7.1.33)
|
||||||
brpoplpush-redis_script (> 0.1.1, <= 2.0.0)
|
brpoplpush-redis_script (> 0.1.1, <= 2.0.0)
|
||||||
concurrent-ruby (~> 1.0, >= 1.0.5)
|
concurrent-ruby (~> 1.0, >= 1.0.5)
|
||||||
|
|
|
@ -28,14 +28,14 @@ class Api::V1::Notifications::RequestsController < Api::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def dismiss
|
def dismiss
|
||||||
@request.update!(dismissed: true)
|
@request.destroy!
|
||||||
render_empty
|
render_empty
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def load_requests
|
def load_requests
|
||||||
requests = NotificationRequest.where(account: current_account).where(dismissed: truthy_param?(:dismissed) || false).includes(:last_status, from_account: [:account_stat, :user]).to_a_paginated_by_id(
|
requests = NotificationRequest.where(account: current_account).includes(:last_status, from_account: [:account_stat, :user]).to_a_paginated_by_id(
|
||||||
limit_param(DEFAULT_ACCOUNTS_LIMIT),
|
limit_param(DEFAULT_ACCOUNTS_LIMIT),
|
||||||
params_slice(:max_id, :since_id, :min_id)
|
params_slice(:max_id, :since_id, :min_id)
|
||||||
)
|
)
|
||||||
|
@ -68,8 +68,4 @@ class Api::V1::Notifications::RequestsController < Api::BaseController
|
||||||
def pagination_since_id
|
def pagination_since_id
|
||||||
@requests.first.id
|
@requests.first.id
|
||||||
end
|
end
|
||||||
|
|
||||||
def pagination_params(core_params)
|
|
||||||
params.slice(:dismissed).permit(:dismissed).merge(core_params)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -8,7 +8,7 @@ class Api::V1::Polls::VotesController < Api::BaseController
|
||||||
before_action :set_poll
|
before_action :set_poll
|
||||||
|
|
||||||
def create
|
def create
|
||||||
VoteService.new.call(current_account, @poll, vote_params[:choices])
|
VoteService.new.call(current_account, @poll, vote_params)
|
||||||
render json: @poll, serializer: REST::PollSerializer
|
render json: @poll, serializer: REST::PollSerializer
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -22,6 +22,6 @@ class Api::V1::Polls::VotesController < Api::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def vote_params
|
def vote_params
|
||||||
params.permit(choices: [])
|
params.require(:choices)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -10,7 +10,7 @@ class Api::V1::ReportsController < Api::BaseController
|
||||||
@report = ReportService.new.call(
|
@report = ReportService.new.call(
|
||||||
current_account,
|
current_account,
|
||||||
reported_account,
|
reported_account,
|
||||||
report_params
|
report_params.merge(application: doorkeeper_token.application)
|
||||||
)
|
)
|
||||||
|
|
||||||
render json: @report, serializer: REST::ReportSerializer
|
render json: @report, serializer: REST::ReportSerializer
|
||||||
|
|
|
@ -5,8 +5,10 @@ module ThemeHelper
|
||||||
flavour, theme = flavour_and_skin
|
flavour, theme = flavour_and_skin
|
||||||
|
|
||||||
if theme == 'system'
|
if theme == 'system'
|
||||||
stylesheet_pack_tag("skins/#{flavour}/mastodon-light", media: 'not all and (prefers-color-scheme: dark)', crossorigin: 'anonymous') +
|
''.html_safe.tap do |tags|
|
||||||
stylesheet_pack_tag("skins/#{flavour}/default", media: '(prefers-color-scheme: dark)', crossorigin: 'anonymous')
|
tags << stylesheet_pack_tag("skins/#{flavour}/mastodon-light", media: 'not all and (prefers-color-scheme: dark)', crossorigin: 'anonymous')
|
||||||
|
tags << stylesheet_pack_tag("skins/#{flavour}/default", media: '(prefers-color-scheme: dark)', crossorigin: 'anonymous')
|
||||||
|
end
|
||||||
else
|
else
|
||||||
stylesheet_pack_tag "skins/#{flavour}/#{theme}", media: 'all', crossorigin: 'anonymous'
|
stylesheet_pack_tag "skins/#{flavour}/#{theme}", media: 'all', crossorigin: 'anonymous'
|
||||||
end
|
end
|
||||||
|
@ -16,8 +18,10 @@ module ThemeHelper
|
||||||
_, theme = flavour_and_skin
|
_, theme = flavour_and_skin
|
||||||
|
|
||||||
if theme == 'system'
|
if theme == 'system'
|
||||||
tag.meta(name: 'theme-color', content: Themes::THEME_COLORS[:dark], media: '(prefers-color-scheme: dark)') +
|
''.html_safe.tap do |tags|
|
||||||
tag.meta(name: 'theme-color', content: Themes::THEME_COLORS[:light], media: '(prefers-color-scheme: light)')
|
tags << tag.meta(name: 'theme-color', content: Themes::THEME_COLORS[:dark], media: '(prefers-color-scheme: dark)')
|
||||||
|
tags << tag.meta(name: 'theme-color', content: Themes::THEME_COLORS[:light], media: '(prefers-color-scheme: light)')
|
||||||
|
end
|
||||||
else
|
else
|
||||||
tag.meta name: 'theme-color', content: theme_color_for(theme)
|
tag.meta name: 'theme-color', content: theme_color_for(theme)
|
||||||
end
|
end
|
||||||
|
|
|
@ -310,7 +310,7 @@ export function doodleSet(options) {
|
||||||
|
|
||||||
export function uploadCompose(files) {
|
export function uploadCompose(files) {
|
||||||
return function (dispatch, getState) {
|
return function (dispatch, getState) {
|
||||||
const uploadLimit = 4;
|
const uploadLimit = getState().getIn(['server', 'server', 'configuration', 'statuses', 'max_media_attachments']);
|
||||||
const media = getState().getIn(['compose', 'media_attachments']);
|
const media = getState().getIn(['compose', 'media_attachments']);
|
||||||
const pending = getState().getIn(['compose', 'pending_media_attachments']);
|
const pending = getState().getIn(['compose', 'pending_media_attachments']);
|
||||||
const progress = new Array(files.length).fill(0);
|
const progress = new Array(files.length).fill(0);
|
||||||
|
@ -330,7 +330,7 @@ export function uploadCompose(files) {
|
||||||
dispatch(uploadComposeRequest());
|
dispatch(uploadComposeRequest());
|
||||||
|
|
||||||
for (const [i, f] of Array.from(files).entries()) {
|
for (const [i, f] of Array.from(files).entries()) {
|
||||||
if (media.size + i > 3) break;
|
if (media.size + i > (uploadLimit - 1)) break;
|
||||||
|
|
||||||
resizeImage(f).then(file => {
|
resizeImage(f).then(file => {
|
||||||
const data = new FormData();
|
const data = new FormData();
|
||||||
|
|
|
@ -131,7 +131,7 @@ const Account = ({ size = 46, account, onFollow, onBlock, onMute, onMuteNotifica
|
||||||
return (
|
return (
|
||||||
<div className={classNames('account', { 'account--minimal': minimal })}>
|
<div className={classNames('account', { 'account--minimal': minimal })}>
|
||||||
<div className='account__wrapper'>
|
<div className='account__wrapper'>
|
||||||
<Permalink key={account.get('id')} className='account__display-name' title={account.get('acct')} href={account.get('url')} to={`/@${account.get('acct')}`}>
|
<Permalink key={account.get('id')} className='account__display-name' title={account.get('acct')} href={account.get('url')} to={`/@${account.get('acct')}`} data-hover-card-account={account.get('id')}>
|
||||||
<div className='account__avatar-wrapper'>
|
<div className='account__avatar-wrapper'>
|
||||||
<Avatar account={account} size={size} />
|
<Avatar account={account} size={size} />
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -43,6 +43,7 @@ export const HoverCardController: React.FC = () => {
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
let isScrolling = false;
|
let isScrolling = false;
|
||||||
let currentAnchor: HTMLElement | null = null;
|
let currentAnchor: HTMLElement | null = null;
|
||||||
|
let currentTitle: string | null = null;
|
||||||
|
|
||||||
const open = (target: HTMLElement) => {
|
const open = (target: HTMLElement) => {
|
||||||
target.setAttribute('aria-describedby', 'hover-card');
|
target.setAttribute('aria-describedby', 'hover-card');
|
||||||
|
@ -75,6 +76,9 @@ export const HoverCardController: React.FC = () => {
|
||||||
currentAnchor?.removeAttribute('aria-describedby');
|
currentAnchor?.removeAttribute('aria-describedby');
|
||||||
currentAnchor = target;
|
currentAnchor = target;
|
||||||
|
|
||||||
|
currentTitle = target.getAttribute('title');
|
||||||
|
target.removeAttribute('title');
|
||||||
|
|
||||||
setEnterTimeout(() => {
|
setEnterTimeout(() => {
|
||||||
open(target);
|
open(target);
|
||||||
}, enterDelay);
|
}, enterDelay);
|
||||||
|
@ -90,11 +94,20 @@ export const HoverCardController: React.FC = () => {
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleMouseLeave = (e: MouseEvent) => {
|
const handleMouseLeave = (e: MouseEvent) => {
|
||||||
|
const { target } = e;
|
||||||
|
|
||||||
if (!currentAnchor) {
|
if (!currentAnchor) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (e.target === currentAnchor || e.target === cardRef.current) {
|
if (
|
||||||
|
currentTitle &&
|
||||||
|
target instanceof HTMLElement &&
|
||||||
|
target === currentAnchor
|
||||||
|
)
|
||||||
|
target.setAttribute('title', currentTitle);
|
||||||
|
|
||||||
|
if (target === currentAnchor || target === cardRef.current) {
|
||||||
cancelEnterTimeout();
|
cancelEnterTimeout();
|
||||||
|
|
||||||
setLeaveTimeout(() => {
|
setLeaveTimeout(() => {
|
||||||
|
|
|
@ -311,7 +311,7 @@ class MediaGallery extends PureComponent {
|
||||||
render () {
|
render () {
|
||||||
const { media, lang, intl, sensitive, letterbox, fullwidth, defaultWidth, autoplay } = this.props;
|
const { media, lang, intl, sensitive, letterbox, fullwidth, defaultWidth, autoplay } = this.props;
|
||||||
const { visible } = this.state;
|
const { visible } = this.state;
|
||||||
const size = media.take(4).size;
|
const size = media.size;
|
||||||
const uncached = media.every(attachment => attachment.get('type') === 'unknown');
|
const uncached = media.every(attachment => attachment.get('type') === 'unknown');
|
||||||
|
|
||||||
const width = this.state.width || defaultWidth;
|
const width = this.state.width || defaultWidth;
|
||||||
|
@ -331,7 +331,7 @@ class MediaGallery extends PureComponent {
|
||||||
if (this.isStandaloneEligible()) {
|
if (this.isStandaloneEligible()) {
|
||||||
children = <Item standalone autoplay={autoplay} onClick={this.handleClick} attachment={media.get(0)} lang={lang} displayWidth={width} visible={visible} />;
|
children = <Item standalone autoplay={autoplay} onClick={this.handleClick} attachment={media.get(0)} lang={lang} displayWidth={width} visible={visible} />;
|
||||||
} else {
|
} else {
|
||||||
children = media.take(4).map((attachment, i) => <Item key={attachment.get('id')} autoplay={autoplay} onClick={this.handleClick} attachment={attachment} index={i} lang={lang} size={size} letterbox={letterbox} displayWidth={width} visible={visible || uncached} />);
|
children = media.map((attachment, i) => <Item key={attachment.get('id')} autoplay={autoplay} onClick={this.handleClick} attachment={attachment} index={i} lang={lang} size={size} letterbox={letterbox} displayWidth={width} visible={visible || uncached} />);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (uncached) {
|
if (uncached) {
|
||||||
|
|
|
@ -181,7 +181,7 @@ class StatusContent extends PureComponent {
|
||||||
|
|
||||||
if (mention) {
|
if (mention) {
|
||||||
link.addEventListener('click', this.onMentionClick.bind(this, mention), false);
|
link.addEventListener('click', this.onMentionClick.bind(this, mention), false);
|
||||||
link.removeAttribute('title');
|
link.setAttribute('title', `@${mention.get('acct')}`);
|
||||||
link.setAttribute('data-hover-card-account', mention.get('id'));
|
link.setAttribute('data-hover-card-account', mention.get('id'));
|
||||||
if (rewriteMentions !== 'no') {
|
if (rewriteMentions !== 'no') {
|
||||||
while (link.firstChild) link.removeChild(link.firstChild);
|
while (link.firstChild) link.removeChild(link.firstChild);
|
||||||
|
|
|
@ -51,6 +51,7 @@ export default class StatusHeader extends PureComponent {
|
||||||
target='_blank'
|
target='_blank'
|
||||||
onClick={this.handleAccountClick}
|
onClick={this.handleAccountClick}
|
||||||
rel='noopener noreferrer'
|
rel='noopener noreferrer'
|
||||||
|
title={status.getIn(['account', 'acct'])}
|
||||||
data-hover-card-account={status.getIn(['account', 'id'])}
|
data-hover-card-account={status.getIn(['account', 'id'])}
|
||||||
>
|
>
|
||||||
<div className='status__avatar'>
|
<div className='status__avatar'>
|
||||||
|
|
|
@ -10,7 +10,7 @@ const mapStateToProps = state => {
|
||||||
const readyAttachmentsSize = state.getIn(['compose', 'media_attachments']).size ?? 0;
|
const readyAttachmentsSize = state.getIn(['compose', 'media_attachments']).size ?? 0;
|
||||||
const pendingAttachmentsSize = state.getIn(['compose', 'pending_media_attachments']).size ?? 0;
|
const pendingAttachmentsSize = state.getIn(['compose', 'pending_media_attachments']).size ?? 0;
|
||||||
const attachmentsSize = readyAttachmentsSize + pendingAttachmentsSize;
|
const attachmentsSize = readyAttachmentsSize + pendingAttachmentsSize;
|
||||||
const isOverLimit = attachmentsSize > 3;
|
const isOverLimit = attachmentsSize > state.getIn(['server', 'server', 'configuration', 'statuses', 'max_media_attachments'])-1;
|
||||||
const hasVideoOrAudio = state.getIn(['compose', 'media_attachments']).some(m => ['video', 'audio'].includes(m.get('type')));
|
const hasVideoOrAudio = state.getIn(['compose', 'media_attachments']).some(m => ['video', 'audio'].includes(m.get('type')));
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -258,6 +258,13 @@ class Notifications extends PureComponent {
|
||||||
|
|
||||||
let scrollContainer;
|
let scrollContainer;
|
||||||
|
|
||||||
|
const prepend = (
|
||||||
|
<>
|
||||||
|
{needsNotificationPermission && <NotificationsPermissionBanner />}
|
||||||
|
<FilteredNotificationsBanner />
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
|
||||||
if (signedIn) {
|
if (signedIn) {
|
||||||
scrollContainer = (
|
scrollContainer = (
|
||||||
<ScrollableList
|
<ScrollableList
|
||||||
|
@ -267,7 +274,7 @@ class Notifications extends PureComponent {
|
||||||
showLoading={isLoading && notifications.size === 0}
|
showLoading={isLoading && notifications.size === 0}
|
||||||
hasMore={hasMore}
|
hasMore={hasMore}
|
||||||
numPending={numPending}
|
numPending={numPending}
|
||||||
prepend={needsNotificationPermission && <NotificationsPermissionBanner />}
|
prepend={prepend}
|
||||||
alwaysPrepend
|
alwaysPrepend
|
||||||
emptyMessage={emptyMessage}
|
emptyMessage={emptyMessage}
|
||||||
onLoadMore={this.handleLoadOlder}
|
onLoadMore={this.handleLoadOlder}
|
||||||
|
@ -356,8 +363,6 @@ class Notifications extends PureComponent {
|
||||||
|
|
||||||
{filterBarContainer}
|
{filterBarContainer}
|
||||||
|
|
||||||
<FilteredNotificationsBanner />
|
|
||||||
|
|
||||||
{scrollContainer}
|
{scrollContainer}
|
||||||
|
|
||||||
<Helmet>
|
<Helmet>
|
||||||
|
|
|
@ -130,7 +130,7 @@ export default class Card extends PureComponent {
|
||||||
const showAuthor = !!card.getIn(['authors', 0, 'accountId']);
|
const showAuthor = !!card.getIn(['authors', 0, 'accountId']);
|
||||||
|
|
||||||
const description = (
|
const description = (
|
||||||
<div className='status-card__content'>
|
<div className='status-card__content' dir='auto'>
|
||||||
<span className='status-card__host'>
|
<span className='status-card__host'>
|
||||||
<span lang={language}>{provider}</span>
|
<span lang={language}>{provider}</span>
|
||||||
{card.get('published_at') && <> · <RelativeTimestamp timestamp={card.get('published_at')} /></>}
|
{card.get('published_at') && <> · <RelativeTimestamp timestamp={card.get('published_at')} /></>}
|
||||||
|
|
|
@ -27,7 +27,7 @@ import { clearHeight } from '../../actions/height_cache';
|
||||||
import { expandNotifications, notificationsSetVisibility } from '../../actions/notifications';
|
import { expandNotifications, notificationsSetVisibility } from '../../actions/notifications';
|
||||||
import { fetchServer, fetchServerTranslationLanguages } from '../../actions/server';
|
import { fetchServer, fetchServerTranslationLanguages } from '../../actions/server';
|
||||||
import { expandHomeTimeline } from '../../actions/timelines';
|
import { expandHomeTimeline } from '../../actions/timelines';
|
||||||
import initialState, { me, owner, singleUserMode, trendsEnabled, trendsAsLanding, timelinePreview } from '../../initial_state';
|
import initialState, { me, owner, singleUserMode, trendsEnabled, trendsAsLanding, timelinePreview, disableHoverCards } from '../../initial_state';
|
||||||
|
|
||||||
import BundleColumnError from './components/bundle_column_error';
|
import BundleColumnError from './components/bundle_column_error';
|
||||||
import Header from './components/header';
|
import Header from './components/header';
|
||||||
|
@ -651,7 +651,7 @@ class UI extends PureComponent {
|
||||||
|
|
||||||
{layout !== 'mobile' && <PictureInPicture />}
|
{layout !== 'mobile' && <PictureInPicture />}
|
||||||
<NotificationsContainer />
|
<NotificationsContainer />
|
||||||
<HoverCardController />
|
{!disableHoverCards && <HoverCardController />}
|
||||||
<LoadingBarContainer className='loading-bar' />
|
<LoadingBarContainer className='loading-bar' />
|
||||||
<ModalContainer />
|
<ModalContainer />
|
||||||
<UploadArea active={draggingOver} onClose={this.closeUploadModal} />
|
<UploadArea active={draggingOver} onClose={this.closeUploadModal} />
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
* @property {boolean} crop_images
|
* @property {boolean} crop_images
|
||||||
* @property {boolean=} delete_modal
|
* @property {boolean=} delete_modal
|
||||||
* @property {boolean=} disable_swiping
|
* @property {boolean=} disable_swiping
|
||||||
|
* @property {boolean=} disable_hover_cards
|
||||||
* @property {string=} disabled_account_id
|
* @property {string=} disabled_account_id
|
||||||
* @property {string} display_media
|
* @property {string} display_media
|
||||||
* @property {string} domain
|
* @property {string} domain
|
||||||
|
@ -118,6 +119,7 @@ export const boostModal = getMeta('boost_modal');
|
||||||
export const cropImages = getMeta('crop_images');
|
export const cropImages = getMeta('crop_images');
|
||||||
export const deleteModal = getMeta('delete_modal');
|
export const deleteModal = getMeta('delete_modal');
|
||||||
export const disableSwiping = getMeta('disable_swiping');
|
export const disableSwiping = getMeta('disable_swiping');
|
||||||
|
export const disableHoverCards = getMeta('disable_hover_cards');
|
||||||
export const disabledAccountId = getMeta('disabled_account_id');
|
export const disabledAccountId = getMeta('disabled_account_id');
|
||||||
export const displayMedia = getMeta('display_media');
|
export const displayMedia = getMeta('display_media');
|
||||||
export const domain = getMeta('domain');
|
export const domain = getMeta('domain');
|
||||||
|
|
|
@ -154,6 +154,5 @@
|
||||||
"status.in_reply_to": "Dieser Toot ist eine Antwort",
|
"status.in_reply_to": "Dieser Toot ist eine Antwort",
|
||||||
"status.is_poll": "Dieser Toot ist eine Umfrage",
|
"status.is_poll": "Dieser Toot ist eine Umfrage",
|
||||||
"status.local_only": "Nur auf deiner Instanz sichtbar",
|
"status.local_only": "Nur auf deiner Instanz sichtbar",
|
||||||
"status.uncollapse": "Ausklappen",
|
"status.uncollapse": "Ausklappen"
|
||||||
"suggestions.dismiss": "Vorschlag ablehnen"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -155,6 +155,5 @@
|
||||||
"status.in_reply_to": "Esta publicación es una respuesta",
|
"status.in_reply_to": "Esta publicación es una respuesta",
|
||||||
"status.is_poll": "Esta publicación es una encuesta",
|
"status.is_poll": "Esta publicación es una encuesta",
|
||||||
"status.local_only": "Sólo visible para tu instancia",
|
"status.local_only": "Sólo visible para tu instancia",
|
||||||
"status.uncollapse": "Descolapsar",
|
"status.uncollapse": "Descolapsar"
|
||||||
"suggestions.dismiss": "Descartar sugerencia"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,9 @@
|
||||||
"compose.content-type.plain_meta": "고급 양식 없이 작성",
|
"compose.content-type.plain_meta": "고급 양식 없이 작성",
|
||||||
"compose.disable_threaded_mode": "글타래 모드 비활성화",
|
"compose.disable_threaded_mode": "글타래 모드 비활성화",
|
||||||
"compose.enable_threaded_mode": "글타래 모드 활성화",
|
"compose.enable_threaded_mode": "글타래 모드 활성화",
|
||||||
|
"compose_form.sensitive.hide": "{count, plural, other {미디어를 민감함으로 표시}}",
|
||||||
|
"compose_form.sensitive.marked": "{count, plural, other {미디어가 민감함으로 표시되었습니다}}",
|
||||||
|
"compose_form.sensitive.unmarked": "{count, plural, other {미디어가 민감함으로 표시되지 않았습니다}}",
|
||||||
"confirmation_modal.do_not_ask_again": "다음부터 확인창을 띄우지 않기",
|
"confirmation_modal.do_not_ask_again": "다음부터 확인창을 띄우지 않기",
|
||||||
"confirmations.deprecated_settings.confirm": "마스토돈 설정 사용",
|
"confirmations.deprecated_settings.confirm": "마스토돈 설정 사용",
|
||||||
"confirmations.deprecated_settings.message": "사용하던 몇몇 기기별 글리치 {app_settings}은 마스토돈 {preferences}으로 대체되었습니다:",
|
"confirmations.deprecated_settings.message": "사용하던 몇몇 기기별 글리치 {app_settings}은 마스토돈 {preferences}으로 대체되었습니다:",
|
||||||
|
@ -61,6 +64,7 @@
|
||||||
"notification_purge.btn_invert": "선택반전",
|
"notification_purge.btn_invert": "선택반전",
|
||||||
"notification_purge.btn_none": "전체선택해제",
|
"notification_purge.btn_none": "전체선택해제",
|
||||||
"notification_purge.start": "알림 삭제모드로 들어가기",
|
"notification_purge.start": "알림 삭제모드로 들어가기",
|
||||||
|
"notifications.column_settings.filter_bar.show_bar": "필터 막대 표시",
|
||||||
"notifications.marked_clear": "선택된 알림 모두 삭제",
|
"notifications.marked_clear": "선택된 알림 모두 삭제",
|
||||||
"notifications.marked_clear_confirmation": "정말로 선택된 알림들을 영구적으로 삭제할까요?",
|
"notifications.marked_clear_confirmation": "정말로 선택된 알림들을 영구적으로 삭제할까요?",
|
||||||
"settings.always_show_spoilers_field": "열람주의 항목을 언제나 활성화",
|
"settings.always_show_spoilers_field": "열람주의 항목을 언제나 활성화",
|
||||||
|
@ -124,6 +128,7 @@
|
||||||
"settings.shared_settings_link": "사용자 설정",
|
"settings.shared_settings_link": "사용자 설정",
|
||||||
"settings.show_action_bar": "접힌 글에 액션 버튼들 보이기",
|
"settings.show_action_bar": "접힌 글에 액션 버튼들 보이기",
|
||||||
"settings.show_content_type_choice": "글을 작성할 때 콘텐트 타입을 고를 수 있도록 합니다",
|
"settings.show_content_type_choice": "글을 작성할 때 콘텐트 타입을 고를 수 있도록 합니다",
|
||||||
|
"settings.show_published_toast": "게시물을 게시/저장할 때 토스트 표시",
|
||||||
"settings.show_reply_counter": "대략적인 답글 개수를 표시합니다",
|
"settings.show_reply_counter": "대략적인 답글 개수를 표시합니다",
|
||||||
"settings.side_arm": "보조 작성 버튼:",
|
"settings.side_arm": "보조 작성 버튼:",
|
||||||
"settings.side_arm.none": "없음",
|
"settings.side_arm.none": "없음",
|
||||||
|
|
|
@ -155,6 +155,5 @@
|
||||||
"status.in_reply_to": "此嘟文是回复",
|
"status.in_reply_to": "此嘟文是回复",
|
||||||
"status.is_poll": "此嘟文是投票",
|
"status.is_poll": "此嘟文是投票",
|
||||||
"status.local_only": "此嘟文仅本站可见",
|
"status.local_only": "此嘟文仅本站可见",
|
||||||
"status.uncollapse": "展开",
|
"status.uncollapse": "展开"
|
||||||
"suggestions.dismiss": "关闭建议"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -151,6 +151,5 @@
|
||||||
"status.in_reply_to": "貼文有回覆",
|
"status.in_reply_to": "貼文有回覆",
|
||||||
"status.is_poll": "貼文有投票",
|
"status.is_poll": "貼文有投票",
|
||||||
"status.local_only": "只在此實例可見",
|
"status.local_only": "只在此實例可見",
|
||||||
"status.uncollapse": "展開",
|
"status.uncollapse": "展開"
|
||||||
"suggestions.dismiss": "關閉建議"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1430,6 +1430,8 @@ body > [data-popper-placement] {
|
||||||
min-height: 54px;
|
min-height: 54px;
|
||||||
border-bottom: 1px solid var(--background-border-color);
|
border-bottom: 1px solid var(--background-border-color);
|
||||||
cursor: auto;
|
cursor: auto;
|
||||||
|
opacity: 1;
|
||||||
|
animation: fade 150ms linear;
|
||||||
|
|
||||||
@keyframes fade {
|
@keyframes fade {
|
||||||
0% {
|
0% {
|
||||||
|
@ -1441,9 +1443,6 @@ body > [data-popper-placement] {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
opacity: 1;
|
|
||||||
animation: fade 150ms linear;
|
|
||||||
|
|
||||||
.media-gallery,
|
.media-gallery,
|
||||||
.video-player,
|
.video-player,
|
||||||
.audio-player,
|
.audio-player,
|
||||||
|
@ -5216,8 +5215,10 @@ a.status-card {
|
||||||
&__menu {
|
&__menu {
|
||||||
@include search-popout;
|
@include search-popout;
|
||||||
|
|
||||||
padding: 0;
|
& {
|
||||||
background: $ui-secondary-color;
|
padding: 0;
|
||||||
|
background: $ui-secondary-color;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&__menu-list {
|
&__menu-list {
|
||||||
|
@ -10764,8 +10765,7 @@ noscript {
|
||||||
.filtered-notifications-banner {
|
.filtered-notifications-banner {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
border: 1px solid var(--background-border-color);
|
border-bottom: 1px solid var(--background-border-color);
|
||||||
border-top: 0;
|
|
||||||
padding: 24px 32px;
|
padding: 24px 32px;
|
||||||
gap: 16px;
|
gap: 16px;
|
||||||
color: $darker-text-color;
|
color: $darker-text-color;
|
||||||
|
@ -11026,7 +11026,7 @@ noscript {
|
||||||
gap: 4px;
|
gap: 4px;
|
||||||
|
|
||||||
dt {
|
dt {
|
||||||
flex: 0 0 auto;
|
flex: 0 1 auto;
|
||||||
color: $dark-text-color;
|
color: $dark-text-color;
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
|
@ -48,6 +48,10 @@ html {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.icon-button:disabled {
|
||||||
|
color: darken($action-button-color, 25%);
|
||||||
|
}
|
||||||
|
|
||||||
.account__header__bar .avatar .account__avatar {
|
.account__header__bar .avatar .account__avatar {
|
||||||
border-color: $white;
|
border-color: $white;
|
||||||
}
|
}
|
||||||
|
|
|
@ -281,7 +281,7 @@ export function submitComposeFail(error) {
|
||||||
|
|
||||||
export function uploadCompose(files) {
|
export function uploadCompose(files) {
|
||||||
return function (dispatch, getState) {
|
return function (dispatch, getState) {
|
||||||
const uploadLimit = 4;
|
const uploadLimit = getState().getIn(['server', 'server', 'configuration', 'statuses', 'max_media_attachments']);
|
||||||
const media = getState().getIn(['compose', 'media_attachments']);
|
const media = getState().getIn(['compose', 'media_attachments']);
|
||||||
const pending = getState().getIn(['compose', 'pending_media_attachments']);
|
const pending = getState().getIn(['compose', 'pending_media_attachments']);
|
||||||
const progress = new Array(files.length).fill(0);
|
const progress = new Array(files.length).fill(0);
|
||||||
|
@ -301,7 +301,7 @@ export function uploadCompose(files) {
|
||||||
dispatch(uploadComposeRequest());
|
dispatch(uploadComposeRequest());
|
||||||
|
|
||||||
for (const [i, file] of Array.from(files).entries()) {
|
for (const [i, file] of Array.from(files).entries()) {
|
||||||
if (media.size + i > 3) break;
|
if (media.size + i > (uploadLimit - 1)) break;
|
||||||
|
|
||||||
const data = new FormData();
|
const data = new FormData();
|
||||||
data.append('file', file);
|
data.append('file', file);
|
||||||
|
|
|
@ -165,7 +165,7 @@ describe('computeHashtagBarForStatus', () => {
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('puts the hashtags in the bar if a status content has hashtags in the only line and has a media', () => {
|
it('does not put the hashtags in the bar if a status content has hashtags in the only line and has a media', () => {
|
||||||
const status = createStatus(
|
const status = createStatus(
|
||||||
'<p>This is my content! <a href="test">#hashtag</a></p>',
|
'<p>This is my content! <a href="test">#hashtag</a></p>',
|
||||||
['hashtag'],
|
['hashtag'],
|
||||||
|
|
|
@ -131,7 +131,7 @@ const Account = ({ size = 46, account, onFollow, onBlock, onMute, onMuteNotifica
|
||||||
return (
|
return (
|
||||||
<div className={classNames('account', { 'account--minimal': minimal })}>
|
<div className={classNames('account', { 'account--minimal': minimal })}>
|
||||||
<div className='account__wrapper'>
|
<div className='account__wrapper'>
|
||||||
<Link key={account.get('id')} className='account__display-name' title={account.get('acct')} to={`/@${account.get('acct')}`}>
|
<Link key={account.get('id')} className='account__display-name' title={account.get('acct')} to={`/@${account.get('acct')}`} data-hover-card-account={account.get('id')}>
|
||||||
<div className='account__avatar-wrapper'>
|
<div className='account__avatar-wrapper'>
|
||||||
<Avatar account={account} size={size} />
|
<Avatar account={account} size={size} />
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -43,6 +43,7 @@ export const HoverCardController: React.FC = () => {
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
let isScrolling = false;
|
let isScrolling = false;
|
||||||
let currentAnchor: HTMLElement | null = null;
|
let currentAnchor: HTMLElement | null = null;
|
||||||
|
let currentTitle: string | null = null;
|
||||||
|
|
||||||
const open = (target: HTMLElement) => {
|
const open = (target: HTMLElement) => {
|
||||||
target.setAttribute('aria-describedby', 'hover-card');
|
target.setAttribute('aria-describedby', 'hover-card');
|
||||||
|
@ -75,6 +76,9 @@ export const HoverCardController: React.FC = () => {
|
||||||
currentAnchor?.removeAttribute('aria-describedby');
|
currentAnchor?.removeAttribute('aria-describedby');
|
||||||
currentAnchor = target;
|
currentAnchor = target;
|
||||||
|
|
||||||
|
currentTitle = target.getAttribute('title');
|
||||||
|
target.removeAttribute('title');
|
||||||
|
|
||||||
setEnterTimeout(() => {
|
setEnterTimeout(() => {
|
||||||
open(target);
|
open(target);
|
||||||
}, enterDelay);
|
}, enterDelay);
|
||||||
|
@ -90,11 +94,20 @@ export const HoverCardController: React.FC = () => {
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleMouseLeave = (e: MouseEvent) => {
|
const handleMouseLeave = (e: MouseEvent) => {
|
||||||
|
const { target } = e;
|
||||||
|
|
||||||
if (!currentAnchor) {
|
if (!currentAnchor) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (e.target === currentAnchor || e.target === cardRef.current) {
|
if (
|
||||||
|
currentTitle &&
|
||||||
|
target instanceof HTMLElement &&
|
||||||
|
target === currentAnchor
|
||||||
|
)
|
||||||
|
target.setAttribute('title', currentTitle);
|
||||||
|
|
||||||
|
if (target === currentAnchor || target === cardRef.current) {
|
||||||
cancelEnterTimeout();
|
cancelEnterTimeout();
|
||||||
|
|
||||||
setLeaveTimeout(() => {
|
setLeaveTimeout(() => {
|
||||||
|
|
|
@ -305,13 +305,13 @@ class MediaGallery extends PureComponent {
|
||||||
style.aspectRatio = '3 / 2';
|
style.aspectRatio = '3 / 2';
|
||||||
}
|
}
|
||||||
|
|
||||||
const size = media.take(4).size;
|
const size = media.size;
|
||||||
const uncached = media.every(attachment => attachment.get('type') === 'unknown');
|
const uncached = media.every(attachment => attachment.get('type') === 'unknown');
|
||||||
|
|
||||||
if (this.isFullSizeEligible()) {
|
if (this.isFullSizeEligible()) {
|
||||||
children = <Item standalone autoplay={autoplay} onClick={this.handleClick} attachment={media.get(0)} lang={lang} displayWidth={width} visible={visible} />;
|
children = <Item standalone autoplay={autoplay} onClick={this.handleClick} attachment={media.get(0)} lang={lang} displayWidth={width} visible={visible} />;
|
||||||
} else {
|
} else {
|
||||||
children = media.take(4).map((attachment, i) => <Item key={attachment.get('id')} autoplay={autoplay} onClick={this.handleClick} attachment={attachment} index={i} lang={lang} size={size} displayWidth={width} visible={visible || uncached} />);
|
children = media.map((attachment, i) => <Item key={attachment.get('id')} autoplay={autoplay} onClick={this.handleClick} attachment={attachment} index={i} lang={lang} size={size} displayWidth={width} visible={visible || uncached} />);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (uncached) {
|
if (uncached) {
|
||||||
|
|
|
@ -562,7 +562,7 @@ class Status extends ImmutablePureComponent {
|
||||||
<RelativeTimestamp timestamp={status.get('created_at')} />{status.get('edited_at') && <abbr title={intl.formatMessage(messages.edited, { date: intl.formatDate(status.get('edited_at'), { year: 'numeric', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }) })}> *</abbr>}
|
<RelativeTimestamp timestamp={status.get('created_at')} />{status.get('edited_at') && <abbr title={intl.formatMessage(messages.edited, { date: intl.formatDate(status.get('edited_at'), { year: 'numeric', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }) })}> *</abbr>}
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<a onClick={this.handleAccountClick} href={`/@${status.getIn(['account', 'acct'])}`} data-hover-card-account={status.getIn(['account', 'id'])} className='status__display-name' target='_blank' rel='noopener noreferrer'>
|
<a onClick={this.handleAccountClick} href={`/@${status.getIn(['account', 'acct'])}`} title={status.getIn(['account', 'acct'])} data-hover-card-account={status.getIn(['account', 'id'])} className='status__display-name' target='_blank' rel='noopener noreferrer'>
|
||||||
<div className='status__avatar'>
|
<div className='status__avatar'>
|
||||||
{statusAvatar}
|
{statusAvatar}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -116,7 +116,7 @@ class StatusContent extends PureComponent {
|
||||||
|
|
||||||
if (mention) {
|
if (mention) {
|
||||||
link.addEventListener('click', this.onMentionClick.bind(this, mention), false);
|
link.addEventListener('click', this.onMentionClick.bind(this, mention), false);
|
||||||
link.removeAttribute('title');
|
link.setAttribute('title', `@${mention.get('acct')}`);
|
||||||
link.setAttribute('href', `/@${mention.get('acct')}`);
|
link.setAttribute('href', `/@${mention.get('acct')}`);
|
||||||
link.setAttribute('data-hover-card-account', mention.get('id'));
|
link.setAttribute('data-hover-card-account', mention.get('id'));
|
||||||
} else if (link.textContent[0] === '#' || (link.previousSibling && link.previousSibling.textContent && link.previousSibling.textContent[link.previousSibling.textContent.length - 1] === '#')) {
|
} else if (link.textContent[0] === '#' || (link.previousSibling && link.previousSibling.textContent && link.previousSibling.textContent[link.previousSibling.textContent.length - 1] === '#')) {
|
||||||
|
|
|
@ -9,7 +9,7 @@ const mapStateToProps = state => {
|
||||||
const readyAttachmentsSize = state.getIn(['compose', 'media_attachments']).size ?? 0;
|
const readyAttachmentsSize = state.getIn(['compose', 'media_attachments']).size ?? 0;
|
||||||
const pendingAttachmentsSize = state.getIn(['compose', 'pending_media_attachments']).size ?? 0;
|
const pendingAttachmentsSize = state.getIn(['compose', 'pending_media_attachments']).size ?? 0;
|
||||||
const attachmentsSize = readyAttachmentsSize + pendingAttachmentsSize;
|
const attachmentsSize = readyAttachmentsSize + pendingAttachmentsSize;
|
||||||
const isOverLimit = attachmentsSize > 3;
|
const isOverLimit = attachmentsSize > state.getIn(['server', 'server', 'configuration', 'statuses', 'max_media_attachments'])-1;
|
||||||
const hasVideoOrAudio = state.getIn(['compose', 'media_attachments']).some(m => ['video', 'audio'].includes(m.get('type')));
|
const hasVideoOrAudio = state.getIn(['compose', 'media_attachments']).some(m => ['video', 'audio'].includes(m.get('type')));
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -435,7 +435,7 @@ class Notification extends ImmutablePureComponent {
|
||||||
|
|
||||||
const targetAccount = report.get('target_account');
|
const targetAccount = report.get('target_account');
|
||||||
const targetDisplayNameHtml = { __html: targetAccount.get('display_name_html') };
|
const targetDisplayNameHtml = { __html: targetAccount.get('display_name_html') };
|
||||||
const targetLink = <bdi><Link className='notification__display-name' data-hover-card-account={targetAccount.get('id')} to={`/@${targetAccount.get('acct')}`} dangerouslySetInnerHTML={targetDisplayNameHtml} /></bdi>;
|
const targetLink = <bdi><Link className='notification__display-name' title={targetAccount.get('acct')} data-hover-card-account={targetAccount.get('id')} to={`/@${targetAccount.get('acct')}`} dangerouslySetInnerHTML={targetDisplayNameHtml} /></bdi>;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<HotKeys handlers={this.getHandlers()}>
|
<HotKeys handlers={this.getHandlers()}>
|
||||||
|
@ -458,7 +458,7 @@ class Notification extends ImmutablePureComponent {
|
||||||
const { notification } = this.props;
|
const { notification } = this.props;
|
||||||
const account = notification.get('account');
|
const account = notification.get('account');
|
||||||
const displayNameHtml = { __html: account.get('display_name_html') };
|
const displayNameHtml = { __html: account.get('display_name_html') };
|
||||||
const link = <bdi><Link className='notification__display-name' href={`/@${account.get('acct')}`} data-hover-card-account={account.get('id')} to={`/@${account.get('acct')}`} dangerouslySetInnerHTML={displayNameHtml} /></bdi>;
|
const link = <bdi><Link className='notification__display-name' href={`/@${account.get('acct')}`} title={account.get('acct')} data-hover-card-account={account.get('id')} to={`/@${account.get('acct')}`} dangerouslySetInnerHTML={displayNameHtml} /></bdi>;
|
||||||
|
|
||||||
switch(notification.get('type')) {
|
switch(notification.get('type')) {
|
||||||
case 'follow':
|
case 'follow':
|
||||||
|
|
|
@ -223,6 +223,13 @@ class Notifications extends PureComponent {
|
||||||
|
|
||||||
let scrollContainer;
|
let scrollContainer;
|
||||||
|
|
||||||
|
const prepend = (
|
||||||
|
<>
|
||||||
|
{needsNotificationPermission && <NotificationsPermissionBanner />}
|
||||||
|
<FilteredNotificationsBanner />
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
|
||||||
if (signedIn) {
|
if (signedIn) {
|
||||||
scrollContainer = (
|
scrollContainer = (
|
||||||
<ScrollableList
|
<ScrollableList
|
||||||
|
@ -232,7 +239,7 @@ class Notifications extends PureComponent {
|
||||||
showLoading={isLoading && notifications.size === 0}
|
showLoading={isLoading && notifications.size === 0}
|
||||||
hasMore={hasMore}
|
hasMore={hasMore}
|
||||||
numPending={numPending}
|
numPending={numPending}
|
||||||
prepend={needsNotificationPermission && <NotificationsPermissionBanner />}
|
prepend={prepend}
|
||||||
alwaysPrepend
|
alwaysPrepend
|
||||||
emptyMessage={emptyMessage}
|
emptyMessage={emptyMessage}
|
||||||
onLoadMore={this.handleLoadOlder}
|
onLoadMore={this.handleLoadOlder}
|
||||||
|
@ -282,8 +289,6 @@ class Notifications extends PureComponent {
|
||||||
|
|
||||||
{filterBarContainer}
|
{filterBarContainer}
|
||||||
|
|
||||||
<FilteredNotificationsBanner />
|
|
||||||
|
|
||||||
{scrollContainer}
|
{scrollContainer}
|
||||||
|
|
||||||
<Helmet>
|
<Helmet>
|
||||||
|
|
|
@ -141,7 +141,7 @@ export default class Card extends PureComponent {
|
||||||
const showAuthor = !!card.getIn(['authors', 0, 'accountId']);
|
const showAuthor = !!card.getIn(['authors', 0, 'accountId']);
|
||||||
|
|
||||||
const description = (
|
const description = (
|
||||||
<div className='status-card__content'>
|
<div className='status-card__content' dir='auto'>
|
||||||
<span className='status-card__host'>
|
<span className='status-card__host'>
|
||||||
<span lang={language}>{provider}</span>
|
<span lang={language}>{provider}</span>
|
||||||
{card.get('published_at') && <> · <RelativeTimestamp timestamp={card.get('published_at')} /></>}
|
{card.get('published_at') && <> · <RelativeTimestamp timestamp={card.get('published_at')} /></>}
|
||||||
|
|
|
@ -25,7 +25,7 @@ import { clearHeight } from '../../actions/height_cache';
|
||||||
import { expandNotifications } from '../../actions/notifications';
|
import { expandNotifications } from '../../actions/notifications';
|
||||||
import { fetchServer, fetchServerTranslationLanguages } from '../../actions/server';
|
import { fetchServer, fetchServerTranslationLanguages } from '../../actions/server';
|
||||||
import { expandHomeTimeline } from '../../actions/timelines';
|
import { expandHomeTimeline } from '../../actions/timelines';
|
||||||
import initialState, { me, owner, singleUserMode, trendsEnabled, trendsAsLanding, timelinePreview } from '../../initial_state';
|
import initialState, { me, owner, singleUserMode, trendsEnabled, trendsAsLanding, timelinePreview, disableHoverCards } from '../../initial_state';
|
||||||
|
|
||||||
import BundleColumnError from './components/bundle_column_error';
|
import BundleColumnError from './components/bundle_column_error';
|
||||||
import Header from './components/header';
|
import Header from './components/header';
|
||||||
|
@ -588,7 +588,7 @@ class UI extends PureComponent {
|
||||||
|
|
||||||
{layout !== 'mobile' && <PictureInPicture />}
|
{layout !== 'mobile' && <PictureInPicture />}
|
||||||
<NotificationsContainer />
|
<NotificationsContainer />
|
||||||
<HoverCardController />
|
{!disableHoverCards && <HoverCardController />}
|
||||||
<LoadingBarContainer className='loading-bar' />
|
<LoadingBarContainer className='loading-bar' />
|
||||||
<ModalContainer />
|
<ModalContainer />
|
||||||
<UploadArea active={draggingOver} onClose={this.closeUploadModal} />
|
<UploadArea active={draggingOver} onClose={this.closeUploadModal} />
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
* @property {boolean=} boost_modal
|
* @property {boolean=} boost_modal
|
||||||
* @property {boolean=} delete_modal
|
* @property {boolean=} delete_modal
|
||||||
* @property {boolean=} disable_swiping
|
* @property {boolean=} disable_swiping
|
||||||
|
* @property {boolean=} disable_hover_cards
|
||||||
* @property {string=} disabled_account_id
|
* @property {string=} disabled_account_id
|
||||||
* @property {string} display_media
|
* @property {string} display_media
|
||||||
* @property {string} domain
|
* @property {string} domain
|
||||||
|
@ -96,6 +97,7 @@ export const autoPlayGif = getMeta('auto_play_gif');
|
||||||
export const boostModal = getMeta('boost_modal');
|
export const boostModal = getMeta('boost_modal');
|
||||||
export const deleteModal = getMeta('delete_modal');
|
export const deleteModal = getMeta('delete_modal');
|
||||||
export const disableSwiping = getMeta('disable_swiping');
|
export const disableSwiping = getMeta('disable_swiping');
|
||||||
|
export const disableHoverCards = getMeta('disable_hover_cards');
|
||||||
export const disabledAccountId = getMeta('disabled_account_id');
|
export const disabledAccountId = getMeta('disabled_account_id');
|
||||||
export const displayMedia = getMeta('display_media');
|
export const displayMedia = getMeta('display_media');
|
||||||
export const domain = getMeta('domain');
|
export const domain = getMeta('domain');
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
"about.disclaimer": "ماستدون برنامج حر ومفتوح المصدر وعلامة تجارية لـ Mastodon GmbH.",
|
"about.disclaimer": "ماستدون برنامج حر ومفتوح المصدر وعلامة تجارية لـ Mastodon GmbH.",
|
||||||
"about.domain_blocks.no_reason_available": "السبب غير متوفر",
|
"about.domain_blocks.no_reason_available": "السبب غير متوفر",
|
||||||
"about.domain_blocks.preamble": "يسمح لك ماستدون عموماً بعرض المحتوى من المستخدمين من أي خادم آخر في الفدرالية والتفاعل معهم. وهذه هي الاستثناءات التي وضعت على هذا الخادم بالذات.",
|
"about.domain_blocks.preamble": "يسمح لك ماستدون عموماً بعرض المحتوى من المستخدمين من أي خادم آخر في الفدرالية والتفاعل معهم. وهذه هي الاستثناءات التي وضعت على هذا الخادم بالذات.",
|
||||||
"about.domain_blocks.silenced.explanation": "عموماً، لن ترى ملفات التعريف والمحتوى من هذا الخادم، إلا إذا كنت تبحث عنه بشكل صريح أو تختار أن تتابعه.",
|
"about.domain_blocks.silenced.explanation": "لن تظهر لك ملفات التعريف الشخصية والمحتوى من هذا الخادوم، إلا إن بحثت عنه عمدًا أو تابعته.",
|
||||||
"about.domain_blocks.silenced.title": "محدود",
|
"about.domain_blocks.silenced.title": "محدود",
|
||||||
"about.domain_blocks.suspended.explanation": "لن يتم معالجة أي بيانات من هذا الخادم أو تخزينها أو تبادلها، مما يجعل أي تفاعل أو اتصال مع المستخدمين من هذا الخادم مستحيلا.",
|
"about.domain_blocks.suspended.explanation": "لن يتم معالجة أي بيانات من هذا الخادم أو تخزينها أو تبادلها، مما يجعل أي تفاعل أو اتصال مع المستخدمين من هذا الخادم مستحيلا.",
|
||||||
"about.domain_blocks.suspended.title": "مُعلّق",
|
"about.domain_blocks.suspended.title": "مُعلّق",
|
||||||
|
@ -21,7 +21,7 @@
|
||||||
"account.blocked": "محظور",
|
"account.blocked": "محظور",
|
||||||
"account.browse_more_on_origin_server": "تصفح المزيد في الملف الشخصي الأصلي",
|
"account.browse_more_on_origin_server": "تصفح المزيد في الملف الشخصي الأصلي",
|
||||||
"account.cancel_follow_request": "إلغاء طلب المتابعة",
|
"account.cancel_follow_request": "إلغاء طلب المتابعة",
|
||||||
"account.copy": "نسخ الرابط إلى الحساب",
|
"account.copy": "نسخ الرابط إلى الملف الشخصي",
|
||||||
"account.direct": "إشارة خاصة لـ @{name}",
|
"account.direct": "إشارة خاصة لـ @{name}",
|
||||||
"account.disable_notifications": "توقف عن إشعاري عندما ينشر @{name}",
|
"account.disable_notifications": "توقف عن إشعاري عندما ينشر @{name}",
|
||||||
"account.domain_blocked": "اسم النِّطاق محظور",
|
"account.domain_blocked": "اسم النِّطاق محظور",
|
||||||
|
@ -32,9 +32,10 @@
|
||||||
"account.featured_tags.last_status_never": "لا توجد رسائل",
|
"account.featured_tags.last_status_never": "لا توجد رسائل",
|
||||||
"account.featured_tags.title": "وسوم {name} المميَّزة",
|
"account.featured_tags.title": "وسوم {name} المميَّزة",
|
||||||
"account.follow": "متابعة",
|
"account.follow": "متابعة",
|
||||||
"account.follow_back": "رد المتابعة",
|
"account.follow_back": "تابعهم بالمثل",
|
||||||
"account.followers": "مُتابِعون",
|
"account.followers": "مُتابِعون",
|
||||||
"account.followers.empty": "لا أحدَ يُتابع هذا المُستخدم إلى حد الآن.",
|
"account.followers.empty": "لا أحدَ يُتابع هذا المُستخدم إلى حد الآن.",
|
||||||
|
"account.followers_counter": "{count, plural, zero {}one {{counter} متابع} two {{counter} متابعين} few {{counter} متابعين} many {{counter} متابعين} other {{counter} متابعين}}",
|
||||||
"account.following": "الاشتراكات",
|
"account.following": "الاشتراكات",
|
||||||
"account.follows.empty": "لا يُتابع هذا المُستخدمُ أيَّ أحدٍ حتى الآن.",
|
"account.follows.empty": "لا يُتابع هذا المُستخدمُ أيَّ أحدٍ حتى الآن.",
|
||||||
"account.go_to_profile": "اذهب إلى الملف الشخصي",
|
"account.go_to_profile": "اذهب إلى الملف الشخصي",
|
||||||
|
@ -51,7 +52,7 @@
|
||||||
"account.mute_notifications_short": "كتم الإشعارات",
|
"account.mute_notifications_short": "كتم الإشعارات",
|
||||||
"account.mute_short": "اكتم",
|
"account.mute_short": "اكتم",
|
||||||
"account.muted": "مَكتوم",
|
"account.muted": "مَكتوم",
|
||||||
"account.mutual": "متبادل",
|
"account.mutual": "متبادلة",
|
||||||
"account.no_bio": "لم يتم تقديم وصف.",
|
"account.no_bio": "لم يتم تقديم وصف.",
|
||||||
"account.open_original_page": "افتح الصفحة الأصلية",
|
"account.open_original_page": "افتح الصفحة الأصلية",
|
||||||
"account.posts": "منشورات",
|
"account.posts": "منشورات",
|
||||||
|
@ -70,8 +71,8 @@
|
||||||
"account.unmute_notifications_short": "إلغاء كَتم الإشعارات",
|
"account.unmute_notifications_short": "إلغاء كَتم الإشعارات",
|
||||||
"account.unmute_short": "إلغاء الكتم",
|
"account.unmute_short": "إلغاء الكتم",
|
||||||
"account_note.placeholder": "اضغط لإضافة مُلاحظة",
|
"account_note.placeholder": "اضغط لإضافة مُلاحظة",
|
||||||
"admin.dashboard.daily_retention": "معدل الاحتفاظ بالمستخدم بعد التسجيل بيوم",
|
"admin.dashboard.daily_retention": "معدّل بقاء المستخدمين بعد إنشاء الحسابات، بالأيام",
|
||||||
"admin.dashboard.monthly_retention": "معدل الاحتفاظ بالمستخدم بعد التسجيل بالشهور",
|
"admin.dashboard.monthly_retention": "معدّل بقاء المستخدمين بعد إنشاء الحسابات، بالشهور",
|
||||||
"admin.dashboard.retention.average": "المعدل",
|
"admin.dashboard.retention.average": "المعدل",
|
||||||
"admin.dashboard.retention.cohort": "شهر التسجيل",
|
"admin.dashboard.retention.cohort": "شهر التسجيل",
|
||||||
"admin.dashboard.retention.cohort_size": "المستخدمون الجدد",
|
"admin.dashboard.retention.cohort_size": "المستخدمون الجدد",
|
||||||
|
@ -87,12 +88,12 @@
|
||||||
"attachments_list.unprocessed": "(غير معالَج)",
|
"attachments_list.unprocessed": "(غير معالَج)",
|
||||||
"audio.hide": "إخفاء المقطع الصوتي",
|
"audio.hide": "إخفاء المقطع الصوتي",
|
||||||
"block_modal.remote_users_caveat": "سوف نطلب من الخادم {domain} أن يحترم قرارك، لكن الالتزام غير مضمون لأن بعض الخواديم قد تتعامل مع نصوص الكتل بشكل مختلف. قد تظل المنشورات العامة مرئية للمستخدمين غير المسجلين الدخول.",
|
"block_modal.remote_users_caveat": "سوف نطلب من الخادم {domain} أن يحترم قرارك، لكن الالتزام غير مضمون لأن بعض الخواديم قد تتعامل مع نصوص الكتل بشكل مختلف. قد تظل المنشورات العامة مرئية للمستخدمين غير المسجلين الدخول.",
|
||||||
"block_modal.show_less": "أظهر الأقل",
|
"block_modal.show_less": "تفاصيل أقلّ",
|
||||||
"block_modal.show_more": "أظهر المزيد",
|
"block_modal.show_more": "تفاصيل أكثر",
|
||||||
"block_modal.they_cant_mention": "لن يستطيع ذِكرك أو متابعتك.",
|
"block_modal.they_cant_mention": "لن يستطيع ذِكرك أو متابعتك.",
|
||||||
"block_modal.they_cant_see_posts": "لن يستطيع رؤية منشوراتك ولن ترى منشوراته.",
|
"block_modal.they_cant_see_posts": "لن يستطيع مطالعة منشوراتك ولن تطالع منشوراته.",
|
||||||
"block_modal.they_will_know": "يمكنه أن يرى أنه قد تم حظره.",
|
"block_modal.they_will_know": "سيعلم أنه قد حُظِر.",
|
||||||
"block_modal.title": "أتريد حظر المستخدم؟",
|
"block_modal.title": "أتريد حظر هذا المستخدم؟",
|
||||||
"block_modal.you_wont_see_mentions": "لن تر المنشورات التي يُشار فيهم إليه.",
|
"block_modal.you_wont_see_mentions": "لن تر المنشورات التي يُشار فيهم إليه.",
|
||||||
"boost_modal.combo": "يُمكنك الضّغط على {combo} لتخطي هذا في المرة المُقبلة",
|
"boost_modal.combo": "يُمكنك الضّغط على {combo} لتخطي هذا في المرة المُقبلة",
|
||||||
"bundle_column_error.copy_stacktrace": "انسخ تقرير الخطأ",
|
"bundle_column_error.copy_stacktrace": "انسخ تقرير الخطأ",
|
||||||
|
@ -156,7 +157,7 @@
|
||||||
"compose_form.poll.single": "اختر واحدا",
|
"compose_form.poll.single": "اختر واحدا",
|
||||||
"compose_form.poll.switch_to_multiple": "تغيِير الاستطلاع للسماح باِخيارات مُتعدِّدة",
|
"compose_form.poll.switch_to_multiple": "تغيِير الاستطلاع للسماح باِخيارات مُتعدِّدة",
|
||||||
"compose_form.poll.switch_to_single": "تغيِير الاستطلاع للسماح باِخيار واحد فقط",
|
"compose_form.poll.switch_to_single": "تغيِير الاستطلاع للسماح باِخيار واحد فقط",
|
||||||
"compose_form.poll.type": "الأسلوب",
|
"compose_form.poll.type": "الطراز",
|
||||||
"compose_form.publish": "نشر",
|
"compose_form.publish": "نشر",
|
||||||
"compose_form.publish_form": "منشور جديد",
|
"compose_form.publish_form": "منشور جديد",
|
||||||
"compose_form.reply": "ردّ",
|
"compose_form.reply": "ردّ",
|
||||||
|
|
|
@ -35,7 +35,9 @@
|
||||||
"account.follow_back": "Падпісацца ў адказ",
|
"account.follow_back": "Падпісацца ў адказ",
|
||||||
"account.followers": "Падпісчыкі",
|
"account.followers": "Падпісчыкі",
|
||||||
"account.followers.empty": "Ніхто пакуль не падпісаны на гэтага карыстальніка.",
|
"account.followers.empty": "Ніхто пакуль не падпісаны на гэтага карыстальніка.",
|
||||||
|
"account.followers_counter": "{count, plural, one {{counter} падпісчык} few {{counter} падпісчыкі} many {{counter} падпісчыкаў} other {{counter} падпісчыка}}",
|
||||||
"account.following": "Падпіскі",
|
"account.following": "Падпіскі",
|
||||||
|
"account.following_counter": "{count, plural, one {{counter} падпіска} few {{counter} падпіскі} many {{counter} падпісак} other {{counter} падпіскі}}",
|
||||||
"account.follows.empty": "Карыстальнік ні на каго не падпісаны.",
|
"account.follows.empty": "Карыстальнік ні на каго не падпісаны.",
|
||||||
"account.go_to_profile": "Перайсці да профілю",
|
"account.go_to_profile": "Перайсці да профілю",
|
||||||
"account.hide_reblogs": "Схаваць пашырэнні ад @{name}",
|
"account.hide_reblogs": "Схаваць пашырэнні ад @{name}",
|
||||||
|
@ -61,6 +63,7 @@
|
||||||
"account.requested_follow": "{name} адправіў запыт на падпіску",
|
"account.requested_follow": "{name} адправіў запыт на падпіску",
|
||||||
"account.share": "Абагуліць профіль @{name}",
|
"account.share": "Абагуліць профіль @{name}",
|
||||||
"account.show_reblogs": "Паказаць падштурхоўванні ад @{name}",
|
"account.show_reblogs": "Паказаць падштурхоўванні ад @{name}",
|
||||||
|
"account.statuses_counter": "{count, plural, one {{counter} допіс} few {{counter} допісы} many {{counter} допісаў} other {{counter} допісу}}",
|
||||||
"account.unblock": "Разблакіраваць @{name}",
|
"account.unblock": "Разблакіраваць @{name}",
|
||||||
"account.unblock_domain": "Разблакіраваць дамен {domain}",
|
"account.unblock_domain": "Разблакіраваць дамен {domain}",
|
||||||
"account.unblock_short": "Разблакіраваць",
|
"account.unblock_short": "Разблакіраваць",
|
||||||
|
@ -412,6 +415,7 @@
|
||||||
"limited_account_hint.title": "Гэты профіль быў схаваны мадэратарамі",
|
"limited_account_hint.title": "Гэты профіль быў схаваны мадэратарамі",
|
||||||
"link_preview.author": "Ад {name}",
|
"link_preview.author": "Ад {name}",
|
||||||
"link_preview.more_from_author": "Больш ад {name}",
|
"link_preview.more_from_author": "Больш ад {name}",
|
||||||
|
"link_preview.shares": "{count, plural, one {{counter} допіс} few {{counter} допісы} many {{counter} допісаў} other {{counter} допісу}}",
|
||||||
"lists.account.add": "Дадаць да спісу",
|
"lists.account.add": "Дадаць да спісу",
|
||||||
"lists.account.remove": "Выдаліць са спісу",
|
"lists.account.remove": "Выдаліць са спісу",
|
||||||
"lists.delete": "Выдаліць спіс",
|
"lists.delete": "Выдаліць спіс",
|
||||||
|
|
|
@ -35,7 +35,9 @@
|
||||||
"account.follow_back": "Последване взаимно",
|
"account.follow_back": "Последване взаимно",
|
||||||
"account.followers": "Последователи",
|
"account.followers": "Последователи",
|
||||||
"account.followers.empty": "Още никой не следва потребителя.",
|
"account.followers.empty": "Още никой не следва потребителя.",
|
||||||
|
"account.followers_counter": "{count, plural, one {{counter} последовател} other {{counter} последователи}}",
|
||||||
"account.following": "Последвано",
|
"account.following": "Последвано",
|
||||||
|
"account.following_counter": "{count, plural, one {{counter} последван} other {{counter} последвани}}",
|
||||||
"account.follows.empty": "Потребителят още никого не следва.",
|
"account.follows.empty": "Потребителят още никого не следва.",
|
||||||
"account.go_to_profile": "Към профила",
|
"account.go_to_profile": "Към профила",
|
||||||
"account.hide_reblogs": "Скриване на подсилвания от @{name}",
|
"account.hide_reblogs": "Скриване на подсилвания от @{name}",
|
||||||
|
@ -61,6 +63,7 @@
|
||||||
"account.requested_follow": "{name} поиска да ви последва",
|
"account.requested_follow": "{name} поиска да ви последва",
|
||||||
"account.share": "Споделяне на профила на @{name}",
|
"account.share": "Споделяне на профила на @{name}",
|
||||||
"account.show_reblogs": "Показване на подсилвания от @{name}",
|
"account.show_reblogs": "Показване на подсилвания от @{name}",
|
||||||
|
"account.statuses_counter": "{count, plural, one {{counter} публикация} other {{counter} публикации}}",
|
||||||
"account.unblock": "Отблокиране на @{name}",
|
"account.unblock": "Отблокиране на @{name}",
|
||||||
"account.unblock_domain": "Отблокиране на домейн {domain}",
|
"account.unblock_domain": "Отблокиране на домейн {domain}",
|
||||||
"account.unblock_short": "Отблокиране",
|
"account.unblock_short": "Отблокиране",
|
||||||
|
|
|
@ -197,7 +197,7 @@
|
||||||
"copy_icon_button.copied": "Zkopírováno do schránky",
|
"copy_icon_button.copied": "Zkopírováno do schránky",
|
||||||
"copypaste.copied": "Zkopírováno",
|
"copypaste.copied": "Zkopírováno",
|
||||||
"copypaste.copy_to_clipboard": "Zkopírovat do schránky",
|
"copypaste.copy_to_clipboard": "Zkopírovat do schránky",
|
||||||
"directory.federated": "Ze známého fedivesmíru",
|
"directory.federated": "Ze známého fediversu",
|
||||||
"directory.local": "Pouze z {domain}",
|
"directory.local": "Pouze z {domain}",
|
||||||
"directory.new_arrivals": "Nově příchozí",
|
"directory.new_arrivals": "Nově příchozí",
|
||||||
"directory.recently_active": "Nedávno aktivní",
|
"directory.recently_active": "Nedávno aktivní",
|
||||||
|
@ -213,7 +213,7 @@
|
||||||
"domain_block_modal.block_account_instead": "Raději blokovat @{name}",
|
"domain_block_modal.block_account_instead": "Raději blokovat @{name}",
|
||||||
"domain_block_modal.they_can_interact_with_old_posts": "Lidé z tohoto serveru mohou interagovat s vašimi starými příspěvky.",
|
"domain_block_modal.they_can_interact_with_old_posts": "Lidé z tohoto serveru mohou interagovat s vašimi starými příspěvky.",
|
||||||
"domain_block_modal.they_cant_follow": "Nikdo z tohoto serveru vás nemůže sledovat.",
|
"domain_block_modal.they_cant_follow": "Nikdo z tohoto serveru vás nemůže sledovat.",
|
||||||
"domain_block_modal.they_wont_know": "Nebude vědět, že je zablokován.",
|
"domain_block_modal.they_wont_know": "Nebude vědět, že je zablokován*a.",
|
||||||
"domain_block_modal.title": "Blokovat doménu?",
|
"domain_block_modal.title": "Blokovat doménu?",
|
||||||
"domain_block_modal.you_will_lose_followers": "Všichni vaši sledující z tohoto serveru budou odstraněni.",
|
"domain_block_modal.you_will_lose_followers": "Všichni vaši sledující z tohoto serveru budou odstraněni.",
|
||||||
"domain_block_modal.you_wont_see_posts": "Neuvidíte příspěvky ani upozornění od uživatelů z tohoto serveru.",
|
"domain_block_modal.you_wont_see_posts": "Neuvidíte příspěvky ani upozornění od uživatelů z tohoto serveru.",
|
||||||
|
@ -341,7 +341,7 @@
|
||||||
"hashtag.column_settings.tag_mode.any": "Jakýkoliv z těchto",
|
"hashtag.column_settings.tag_mode.any": "Jakýkoliv z těchto",
|
||||||
"hashtag.column_settings.tag_mode.none": "Žádný z těchto",
|
"hashtag.column_settings.tag_mode.none": "Žádný z těchto",
|
||||||
"hashtag.column_settings.tag_toggle": "Zahrnout v tomto sloupci další štítky",
|
"hashtag.column_settings.tag_toggle": "Zahrnout v tomto sloupci další štítky",
|
||||||
"hashtag.counter_by_accounts": "{count, plural, one {{counter} účastník} few {{counter} účastníci} other {{counter} účastníků}}",
|
"hashtag.counter_by_accounts": "{count, plural, one {{counter} účastník*ice} few {{counter} účastníci} other {{counter} účastníků}}",
|
||||||
"hashtag.counter_by_uses": "{count, plural, one {{counter} příspěvek} few {{counter} příspěvky} other {{counter} příspěvků}}",
|
"hashtag.counter_by_uses": "{count, plural, one {{counter} příspěvek} few {{counter} příspěvky} other {{counter} příspěvků}}",
|
||||||
"hashtag.counter_by_uses_today": "Dnes {count, plural, one {{counter} příspěvek} few {{counter} příspěvky} other {{counter} příspěvků}}",
|
"hashtag.counter_by_uses_today": "Dnes {count, plural, one {{counter} příspěvek} few {{counter} příspěvky} other {{counter} příspěvků}}",
|
||||||
"hashtag.follow": "Sledovat hashtag",
|
"hashtag.follow": "Sledovat hashtag",
|
||||||
|
@ -440,7 +440,7 @@
|
||||||
"mute_modal.show_options": "Zobrazit možnosti",
|
"mute_modal.show_options": "Zobrazit možnosti",
|
||||||
"mute_modal.they_can_mention_and_follow": "Mohou vás zmínit a sledovat, ale neuvidíte je.",
|
"mute_modal.they_can_mention_and_follow": "Mohou vás zmínit a sledovat, ale neuvidíte je.",
|
||||||
"mute_modal.they_wont_know": "Nebudou vědět, že byli skryti.",
|
"mute_modal.they_wont_know": "Nebudou vědět, že byli skryti.",
|
||||||
"mute_modal.title": "Ztlumit uživatele?",
|
"mute_modal.title": "Ztlumit uživatele*ku?",
|
||||||
"mute_modal.you_wont_see_mentions": "Neuvidíte příspěvky, které je zmiňují.",
|
"mute_modal.you_wont_see_mentions": "Neuvidíte příspěvky, které je zmiňují.",
|
||||||
"mute_modal.you_wont_see_posts": "Stále budou moci vidět vaše příspěvky, ale vy jejich neuvidíte.",
|
"mute_modal.you_wont_see_posts": "Stále budou moci vidět vaše příspěvky, ale vy jejich neuvidíte.",
|
||||||
"navigation_bar.about": "O aplikaci",
|
"navigation_bar.about": "O aplikaci",
|
||||||
|
@ -566,8 +566,8 @@
|
||||||
"onboarding.share.message": "Jsem {username} na #Mastodonu! Pojď mě sledovat na {url}",
|
"onboarding.share.message": "Jsem {username} na #Mastodonu! Pojď mě sledovat na {url}",
|
||||||
"onboarding.share.next_steps": "Možné další kroky:",
|
"onboarding.share.next_steps": "Možné další kroky:",
|
||||||
"onboarding.share.title": "Sdílejte svůj profil",
|
"onboarding.share.title": "Sdílejte svůj profil",
|
||||||
"onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
|
"onboarding.start.lead": "Nyní jste součástí Mastodonu, unikátní sociální sítě, kde vy - ne algoritmus - vytváří vaše vlastní prožitky. Začněte na této nové sociální platformě:",
|
||||||
"onboarding.start.skip": "Want to skip right ahead?",
|
"onboarding.start.skip": "Nepotřebujete pomoci začít?",
|
||||||
"onboarding.start.title": "Dokázali jste to!",
|
"onboarding.start.title": "Dokázali jste to!",
|
||||||
"onboarding.steps.follow_people.body": "Mastodon je o sledování zajimavých lidí.",
|
"onboarding.steps.follow_people.body": "Mastodon je o sledování zajimavých lidí.",
|
||||||
"onboarding.steps.follow_people.title": "Přispůsobit vlastní domovský kanál",
|
"onboarding.steps.follow_people.title": "Přispůsobit vlastní domovský kanál",
|
||||||
|
@ -581,7 +581,7 @@
|
||||||
"onboarding.tips.accounts_from_other_servers": "<strong>Víte, že?</strong> Protože je Mastodon decentralizovaný, některé profily, na které narazíte, budou hostovány na jiných serverech, než je ten váš. A přesto s nimi můžete bezproblémově komunikovat! Jejich server se nachází v druhé polovině uživatelského jména!",
|
"onboarding.tips.accounts_from_other_servers": "<strong>Víte, že?</strong> Protože je Mastodon decentralizovaný, některé profily, na které narazíte, budou hostovány na jiných serverech, než je ten váš. A přesto s nimi můžete bezproblémově komunikovat! Jejich server se nachází v druhé polovině uživatelského jména!",
|
||||||
"onboarding.tips.migration": "<strong>Víte, že?</strong> Pokud máte pocit, že {domain} pro vás v budoucnu není vhodnou volbou, můžete se přesunout na jiný Mastodon server, aniž byste přišli o své sledující. Můžete dokonce hostovat svůj vlastní server!",
|
"onboarding.tips.migration": "<strong>Víte, že?</strong> Pokud máte pocit, že {domain} pro vás v budoucnu není vhodnou volbou, můžete se přesunout na jiný Mastodon server, aniž byste přišli o své sledující. Můžete dokonce hostovat svůj vlastní server!",
|
||||||
"onboarding.tips.verification": "<strong>Víte, že?</strong> Svůj účet můžete ověřit tak, že na své webové stránky umístíte odkaz na váš Mastodon profil a odkaz na stránku přidáte do svého profilu. Nejsou k tomu potřeba žádné poplatky ani dokumenty!",
|
"onboarding.tips.verification": "<strong>Víte, že?</strong> Svůj účet můžete ověřit tak, že na své webové stránky umístíte odkaz na váš Mastodon profil a odkaz na stránku přidáte do svého profilu. Nejsou k tomu potřeba žádné poplatky ani dokumenty!",
|
||||||
"password_confirmation.exceeds_maxlength": "Potvrzení hesla překračuje maximální délku hesla",
|
"password_confirmation.exceeds_maxlength": "Potvrzení hesla překračuje maximální povolenou délku hesla",
|
||||||
"password_confirmation.mismatching": "Zadaná hesla se neshodují",
|
"password_confirmation.mismatching": "Zadaná hesla se neshodují",
|
||||||
"picture_in_picture.restore": "Vrátit zpět",
|
"picture_in_picture.restore": "Vrátit zpět",
|
||||||
"poll.closed": "Uzavřeno",
|
"poll.closed": "Uzavřeno",
|
||||||
|
@ -665,7 +665,7 @@
|
||||||
"report.unfollow": "Přestat sledovat @{name}",
|
"report.unfollow": "Přestat sledovat @{name}",
|
||||||
"report.unfollow_explanation": "Tento účet sledujete. Abyste už neviděli jeho příspěvky ve své domovské časové ose, přestaňte jej sledovat.",
|
"report.unfollow_explanation": "Tento účet sledujete. Abyste už neviděli jeho příspěvky ve své domovské časové ose, přestaňte jej sledovat.",
|
||||||
"report_notification.attached_statuses": "{count, plural, one {{count} připojený příspěvek} few {{count} připojené příspěvky} many {{count} připojených příspěvků} other {{count} připojených příspěvků}}",
|
"report_notification.attached_statuses": "{count, plural, one {{count} připojený příspěvek} few {{count} připojené příspěvky} many {{count} připojených příspěvků} other {{count} připojených příspěvků}}",
|
||||||
"report_notification.categories.legal": "Zákonné",
|
"report_notification.categories.legal": "Právní ustanovení",
|
||||||
"report_notification.categories.other": "Ostatní",
|
"report_notification.categories.other": "Ostatní",
|
||||||
"report_notification.categories.spam": "Spam",
|
"report_notification.categories.spam": "Spam",
|
||||||
"report_notification.categories.violation": "Porušení pravidla",
|
"report_notification.categories.violation": "Porušení pravidla",
|
||||||
|
|
|
@ -48,8 +48,8 @@
|
||||||
"account.mention": "Crybwyll @{name}",
|
"account.mention": "Crybwyll @{name}",
|
||||||
"account.moved_to": "Mae {name} wedi nodi fod eu cyfrif newydd yn:",
|
"account.moved_to": "Mae {name} wedi nodi fod eu cyfrif newydd yn:",
|
||||||
"account.mute": "Tewi @{name}",
|
"account.mute": "Tewi @{name}",
|
||||||
"account.mute_notifications_short": "Distewi hysbysiadau",
|
"account.mute_notifications_short": "Diffodd hysbysiadau",
|
||||||
"account.mute_short": "Tewi",
|
"account.mute_short": "Anwybyddu",
|
||||||
"account.muted": "Wedi anwybyddu",
|
"account.muted": "Wedi anwybyddu",
|
||||||
"account.mutual": "Cydgydnabod",
|
"account.mutual": "Cydgydnabod",
|
||||||
"account.no_bio": "Dim disgrifiad wedi'i gynnig.",
|
"account.no_bio": "Dim disgrifiad wedi'i gynnig.",
|
||||||
|
@ -92,7 +92,7 @@
|
||||||
"block_modal.they_cant_mention": "Nid ydynt yn gallu eich crybwyll na'ch dilyn.",
|
"block_modal.they_cant_mention": "Nid ydynt yn gallu eich crybwyll na'ch dilyn.",
|
||||||
"block_modal.they_cant_see_posts": "Nid ydynt yn gallu gweld eich postiadau ac ni fyddwch yn gweld eu rhai hwy.",
|
"block_modal.they_cant_see_posts": "Nid ydynt yn gallu gweld eich postiadau ac ni fyddwch yn gweld eu rhai hwy.",
|
||||||
"block_modal.they_will_know": "Gallant weld eu bod wedi'u rhwystro.",
|
"block_modal.they_will_know": "Gallant weld eu bod wedi'u rhwystro.",
|
||||||
"block_modal.title": "Rhwystro defnyddiwr?",
|
"block_modal.title": "Blocio defnyddiwr?",
|
||||||
"block_modal.you_wont_see_mentions": "Ni welwch bostiadau sy'n sôn amdanynt.",
|
"block_modal.you_wont_see_mentions": "Ni welwch bostiadau sy'n sôn amdanynt.",
|
||||||
"boost_modal.combo": "Mae modd pwyso {combo} er mwyn hepgor hyn tro nesa",
|
"boost_modal.combo": "Mae modd pwyso {combo} er mwyn hepgor hyn tro nesa",
|
||||||
"bundle_column_error.copy_stacktrace": "Copïo'r adroddiad gwall",
|
"bundle_column_error.copy_stacktrace": "Copïo'r adroddiad gwall",
|
||||||
|
@ -164,7 +164,7 @@
|
||||||
"compose_form.spoiler.marked": "Dileu rhybudd cynnwys",
|
"compose_form.spoiler.marked": "Dileu rhybudd cynnwys",
|
||||||
"compose_form.spoiler.unmarked": "Ychwanegu rhybudd cynnwys",
|
"compose_form.spoiler.unmarked": "Ychwanegu rhybudd cynnwys",
|
||||||
"compose_form.spoiler_placeholder": "Rhybudd cynnwys (dewisol)",
|
"compose_form.spoiler_placeholder": "Rhybudd cynnwys (dewisol)",
|
||||||
"confirmation_modal.cancel": "Diddymu",
|
"confirmation_modal.cancel": "Canslo",
|
||||||
"confirmations.block.confirm": "Blocio",
|
"confirmations.block.confirm": "Blocio",
|
||||||
"confirmations.cancel_follow_request.confirm": "Tynnu'r cais yn ôl",
|
"confirmations.cancel_follow_request.confirm": "Tynnu'r cais yn ôl",
|
||||||
"confirmations.cancel_follow_request.message": "Ydych chi'n siŵr eich bod am dynnu'ch cais i ddilyn {name} yn ôl?",
|
"confirmations.cancel_follow_request.message": "Ydych chi'n siŵr eich bod am dynnu'ch cais i ddilyn {name} yn ôl?",
|
||||||
|
@ -174,7 +174,7 @@
|
||||||
"confirmations.delete_list.message": "Ydych chi'n siŵr eich bod eisiau dileu'r rhestr hwn am byth?",
|
"confirmations.delete_list.message": "Ydych chi'n siŵr eich bod eisiau dileu'r rhestr hwn am byth?",
|
||||||
"confirmations.discard_edit_media.confirm": "Dileu",
|
"confirmations.discard_edit_media.confirm": "Dileu",
|
||||||
"confirmations.discard_edit_media.message": "Mae gennych newidiadau heb eu cadw i'r disgrifiad cyfryngau neu'r rhagolwg - eu dileu beth bynnag?",
|
"confirmations.discard_edit_media.message": "Mae gennych newidiadau heb eu cadw i'r disgrifiad cyfryngau neu'r rhagolwg - eu dileu beth bynnag?",
|
||||||
"confirmations.domain_block.confirm": "Rhwystro gweinydd",
|
"confirmations.domain_block.confirm": "Blocio gweinydd",
|
||||||
"confirmations.domain_block.message": "Ydych chi wir, wir eisiau blocio'r holl {domain}? Fel arfer, mae blocio neu dewi pobl penodol yn broses mwy effeithiol. Fyddwch chi ddim yn gweld cynnwys o'r parth hwnnw mewn ffrydiau cyhoeddus neu yn eich hysbysiadau. Bydd eich dilynwyr o'r parth hwnnw yn cael eu ddileu.",
|
"confirmations.domain_block.message": "Ydych chi wir, wir eisiau blocio'r holl {domain}? Fel arfer, mae blocio neu dewi pobl penodol yn broses mwy effeithiol. Fyddwch chi ddim yn gweld cynnwys o'r parth hwnnw mewn ffrydiau cyhoeddus neu yn eich hysbysiadau. Bydd eich dilynwyr o'r parth hwnnw yn cael eu ddileu.",
|
||||||
"confirmations.edit.confirm": "Golygu",
|
"confirmations.edit.confirm": "Golygu",
|
||||||
"confirmations.edit.message": "Bydd golygu nawr yn trosysgrifennu'r neges rydych yn ei ysgrifennu ar hyn o bryd. Ydych chi'n siŵr eich bod eisiau gwneud hyn?",
|
"confirmations.edit.message": "Bydd golygu nawr yn trosysgrifennu'r neges rydych yn ei ysgrifennu ar hyn o bryd. Ydych chi'n siŵr eich bod eisiau gwneud hyn?",
|
||||||
|
@ -201,17 +201,17 @@
|
||||||
"disabled_account_banner.account_settings": "Gosodiadau'r cyfrif",
|
"disabled_account_banner.account_settings": "Gosodiadau'r cyfrif",
|
||||||
"disabled_account_banner.text": "Mae eich cyfrif {disabledAccount} wedi ei analluogi ar hyn o bryd.",
|
"disabled_account_banner.text": "Mae eich cyfrif {disabledAccount} wedi ei analluogi ar hyn o bryd.",
|
||||||
"dismissable_banner.community_timeline": "Dyma'r postiadau cyhoeddus diweddaraf gan bobl sydd â chyfrifon ar {domain}.",
|
"dismissable_banner.community_timeline": "Dyma'r postiadau cyhoeddus diweddaraf gan bobl sydd â chyfrifon ar {domain}.",
|
||||||
"dismissable_banner.dismiss": "Diddymu",
|
"dismissable_banner.dismiss": "Cau",
|
||||||
"dismissable_banner.explore_links": "Dyma straeon newyddion sy’n cael eu rhannu fwyaf ar y we gymdeithasol heddiw. Mae'r straeon newyddion diweddaraf sy'n cael eu postio gan fwy o unigolion gwahanol yn cael eu graddio'n uwch.",
|
"dismissable_banner.explore_links": "Dyma straeon newyddion sy’n cael eu rhannu fwyaf ar y we gymdeithasol heddiw. Mae'r straeon newyddion diweddaraf sy'n cael eu postio gan fwy o unigolion gwahanol yn cael eu graddio'n uwch.",
|
||||||
"dismissable_banner.explore_statuses": "Mae'r rhain yn bostiadau o bob rhan o'r we gymdeithasol sydd ar gynnydd heddiw. Mae postiadau mwy diweddar sydd â mwy o hybiau a ffefrynu'n cael eu graddio'n uwch.",
|
"dismissable_banner.explore_statuses": "Mae'r rhain yn bostiadau o bob rhan o'r we gymdeithasol sydd ar gynnydd heddiw. Mae postiadau mwy diweddar sydd â mwy o hybiau a ffefrynu'n cael eu graddio'n uwch.",
|
||||||
"dismissable_banner.explore_tags": "Mae'r rhain yn hashnodau sydd ar gynnydd ar y we gymdeithasol heddiw. Mae hashnodau sy'n cael eu defnyddio gan fwy o unigolion gwahanol yn cael eu graddio'n uwch.",
|
"dismissable_banner.explore_tags": "Mae'r rhain yn hashnodau sydd ar gynnydd ar y we gymdeithasol heddiw. Mae hashnodau sy'n cael eu defnyddio gan fwy o unigolion gwahanol yn cael eu graddio'n uwch.",
|
||||||
"dismissable_banner.public_timeline": "Dyma'r postiadau cyhoeddus diweddaraf gan bobl ar y we gymdeithasol y mae pobl ar {domain} yn eu dilyn.",
|
"dismissable_banner.public_timeline": "Dyma'r postiadau cyhoeddus diweddaraf gan bobl ar y we gymdeithasol y mae pobl ar {domain} yn eu dilyn.",
|
||||||
"domain_block_modal.block": "Rhwystro gweinydd",
|
"domain_block_modal.block": "Blocio gweinydd",
|
||||||
"domain_block_modal.block_account_instead": "Rhwystro @{name} yn lle hynny",
|
"domain_block_modal.block_account_instead": "Blocio @{name} yn ei le",
|
||||||
"domain_block_modal.they_can_interact_with_old_posts": "Gall pobl o'r gweinydd hwn ryngweithio â'ch hen bostiadau.",
|
"domain_block_modal.they_can_interact_with_old_posts": "Gall pobl o'r gweinydd hwn ryngweithio â'ch hen bostiadau.",
|
||||||
"domain_block_modal.they_cant_follow": "Ni all neb o'r gweinydd hwn eich dilyn.",
|
"domain_block_modal.they_cant_follow": "Ni all neb o'r gweinydd hwn eich dilyn.",
|
||||||
"domain_block_modal.they_wont_know": "Fyddan nhw ddim yn gwybod eu bod wedi cael eu rhwystro.",
|
"domain_block_modal.they_wont_know": "Fyddan nhw ddim yn gwybod eu bod wedi cael eu blocio.",
|
||||||
"domain_block_modal.title": "Rhwystro parth?",
|
"domain_block_modal.title": "Blocio parth?",
|
||||||
"domain_block_modal.you_will_lose_followers": "Bydd eich holl ddilynwyr o'r gweinydd hwn yn cael eu tynnu.",
|
"domain_block_modal.you_will_lose_followers": "Bydd eich holl ddilynwyr o'r gweinydd hwn yn cael eu tynnu.",
|
||||||
"domain_block_modal.you_wont_see_posts": "Fyddwch chi ddim yn gweld postiadau na hysbysiadau gan ddefnyddwyr ar y gweinydd hwn.",
|
"domain_block_modal.you_wont_see_posts": "Fyddwch chi ddim yn gweld postiadau na hysbysiadau gan ddefnyddwyr ar y gweinydd hwn.",
|
||||||
"domain_pill.activitypub_lets_connect": "Mae'n caniatáu ichi gysylltu a rhyngweithio â phobl nid yn unig ar Mastodon, ond ar draws gwahanol apiau cymdeithasol hefyd.",
|
"domain_pill.activitypub_lets_connect": "Mae'n caniatáu ichi gysylltu a rhyngweithio â phobl nid yn unig ar Mastodon, ond ar draws gwahanol apiau cymdeithasol hefyd.",
|
||||||
|
@ -252,7 +252,7 @@
|
||||||
"empty_column.bookmarked_statuses": "Nid oes gennych unrhyw bostiad wedi'u cadw fel llyfrnodau eto. Pan fyddwch yn gosod nod tudalen i un, mi fydd yn ymddangos yma.",
|
"empty_column.bookmarked_statuses": "Nid oes gennych unrhyw bostiad wedi'u cadw fel llyfrnodau eto. Pan fyddwch yn gosod nod tudalen i un, mi fydd yn ymddangos yma.",
|
||||||
"empty_column.community": "Mae'r ffrwd lleol yn wag. Beth am ysgrifennu rhywbeth cyhoeddus!",
|
"empty_column.community": "Mae'r ffrwd lleol yn wag. Beth am ysgrifennu rhywbeth cyhoeddus!",
|
||||||
"empty_column.direct": "Nid oes gennych unrhyw grybwylliadau preifat eto. Pan fyddwch chi'n anfon neu'n derbyn un, bydd yn ymddangos yma.",
|
"empty_column.direct": "Nid oes gennych unrhyw grybwylliadau preifat eto. Pan fyddwch chi'n anfon neu'n derbyn un, bydd yn ymddangos yma.",
|
||||||
"empty_column.domain_blocks": "Nid oes yna unrhyw barthau cuddiedig eto.",
|
"empty_column.domain_blocks": "Nid oes unrhyw barthau wedi'u blocio eto.",
|
||||||
"empty_column.explore_statuses": "Does dim yn trendio ar hyn o bryd. Dewch nôl nes ymlaen!",
|
"empty_column.explore_statuses": "Does dim yn trendio ar hyn o bryd. Dewch nôl nes ymlaen!",
|
||||||
"empty_column.favourited_statuses": "Nid oes gennych unrhyw hoff bostiadau eto. Pan byddwch yn hoffi un, bydd yn ymddangos yma.",
|
"empty_column.favourited_statuses": "Nid oes gennych unrhyw hoff bostiadau eto. Pan byddwch yn hoffi un, bydd yn ymddangos yma.",
|
||||||
"empty_column.favourites": "Nid oes unrhyw un wedi hoffi'r postiad hwn eto. Pan fydd rhywun yn gwneud hynny, byddan nhw'n ymddangos yma.",
|
"empty_column.favourites": "Nid oes unrhyw un wedi hoffi'r postiad hwn eto. Pan fydd rhywun yn gwneud hynny, byddan nhw'n ymddangos yma.",
|
||||||
|
@ -411,6 +411,7 @@
|
||||||
"limited_account_hint.action": "Dangos y proffil beth bynnag",
|
"limited_account_hint.action": "Dangos y proffil beth bynnag",
|
||||||
"limited_account_hint.title": "Mae'r proffil hwn wedi cael ei guddio gan gymedrolwyr {domain}.",
|
"limited_account_hint.title": "Mae'r proffil hwn wedi cael ei guddio gan gymedrolwyr {domain}.",
|
||||||
"link_preview.author": "Gan {name}",
|
"link_preview.author": "Gan {name}",
|
||||||
|
"link_preview.more_from_author": "Mwy gan {name}",
|
||||||
"lists.account.add": "Ychwanegu at restr",
|
"lists.account.add": "Ychwanegu at restr",
|
||||||
"lists.account.remove": "Tynnu o'r rhestr",
|
"lists.account.remove": "Tynnu o'r rhestr",
|
||||||
"lists.delete": "Dileu rhestr",
|
"lists.delete": "Dileu rhestr",
|
||||||
|
@ -484,9 +485,9 @@
|
||||||
"notification.reblog": "Hybodd {name} eich post",
|
"notification.reblog": "Hybodd {name} eich post",
|
||||||
"notification.relationships_severance_event": "Wedi colli cysylltiad â {name}",
|
"notification.relationships_severance_event": "Wedi colli cysylltiad â {name}",
|
||||||
"notification.relationships_severance_event.account_suspension": "Mae gweinyddwr o {from} wedi atal {target}, sy'n golygu na allwch dderbyn diweddariadau ganddynt mwyach na rhyngweithio â nhw.",
|
"notification.relationships_severance_event.account_suspension": "Mae gweinyddwr o {from} wedi atal {target}, sy'n golygu na allwch dderbyn diweddariadau ganddynt mwyach na rhyngweithio â nhw.",
|
||||||
"notification.relationships_severance_event.domain_block": "Mae gweinyddwr o {from} wedi rhwystro {target}, gan gynnwys {followersCount} o'ch dilynwyr a {followingCount, plural, one {# cyfrif} other {# cyfrif}} arall rydych chi'n ei ddilyn.",
|
"notification.relationships_severance_event.domain_block": "Mae gweinyddwr o {from} wedi blocio {target}, gan gynnwys {followersCount} o'ch dilynwyr a {followingCount, plural, one {# cyfrif} other {# cyfrif}} arall rydych chi'n ei ddilyn.",
|
||||||
"notification.relationships_severance_event.learn_more": "Dysgu mwy",
|
"notification.relationships_severance_event.learn_more": "Dysgu mwy",
|
||||||
"notification.relationships_severance_event.user_domain_block": "Rydych wedi rhwystro {target}, gan ddileu {followersCount} o'ch dilynwyr a {followingCount, plural, one {# cyfrif} other {#cyfrifon}} arall rydych yn ei ddilyn.",
|
"notification.relationships_severance_event.user_domain_block": "Rydych wedi blocio {target}, gan ddileu {followersCount} o'ch dilynwyr a {followingCount, plural, one {# cyfrif} other {#cyfrifon}} arall rydych yn ei ddilyn.",
|
||||||
"notification.status": "{name} newydd ei bostio",
|
"notification.status": "{name} newydd ei bostio",
|
||||||
"notification.update": "Golygodd {name} bostiad",
|
"notification.update": "Golygodd {name} bostiad",
|
||||||
"notification_requests.accept": "Derbyn",
|
"notification_requests.accept": "Derbyn",
|
||||||
|
@ -803,7 +804,7 @@
|
||||||
"video.expand": "Ymestyn fideo",
|
"video.expand": "Ymestyn fideo",
|
||||||
"video.fullscreen": "Sgrin llawn",
|
"video.fullscreen": "Sgrin llawn",
|
||||||
"video.hide": "Cuddio fideo",
|
"video.hide": "Cuddio fideo",
|
||||||
"video.mute": "Tewi sain",
|
"video.mute": "Diffodd sain",
|
||||||
"video.pause": "Oedi",
|
"video.pause": "Oedi",
|
||||||
"video.play": "Chwarae",
|
"video.play": "Chwarae",
|
||||||
"video.unmute": "Dad-dewi sain"
|
"video.unmute": "Dad-dewi sain"
|
||||||
|
|
|
@ -205,10 +205,10 @@
|
||||||
"disabled_account_banner.text": "Dein Konto {disabledAccount} ist derzeit deaktiviert.",
|
"disabled_account_banner.text": "Dein Konto {disabledAccount} ist derzeit deaktiviert.",
|
||||||
"dismissable_banner.community_timeline": "Das sind die neuesten öffentlichen Beiträge von Profilen, deren Konten von {domain} verwaltet werden.",
|
"dismissable_banner.community_timeline": "Das sind die neuesten öffentlichen Beiträge von Profilen, deren Konten von {domain} verwaltet werden.",
|
||||||
"dismissable_banner.dismiss": "Ablehnen",
|
"dismissable_banner.dismiss": "Ablehnen",
|
||||||
"dismissable_banner.explore_links": "Diese Nachrichten werden heute am häufigsten im sozialen Netzwerk geteilt. Neuere Nachrichten, die von vielen verschiedenen Profilen veröffentlicht wurden, werden höher eingestuft.",
|
"dismissable_banner.explore_links": "Diese Nachrichten werden heute am häufigsten im Social Web geteilt. Neuere Nachrichten, die von vielen verschiedenen Profilen geteilt wurden, erscheinen weiter oben.",
|
||||||
"dismissable_banner.explore_statuses": "Diese Beiträge stammen aus dem gesamten sozialen Netzwerk und gewinnen derzeit an Reichweite. Neuere Beiträge, die häufiger geteilt und favorisiert wurden, werden höher eingestuft.",
|
"dismissable_banner.explore_statuses": "Diese Beiträge sind heute im Social Web sehr beliebt. Neuere Beiträge, die häufiger geteilt und favorisiert wurden, erscheinen weiter oben.",
|
||||||
"dismissable_banner.explore_tags": "Das sind Hashtags, die derzeit an Reichweite gewinnen. Hashtags, die von vielen verschiedenen Profilen verwendet werden, werden höher eingestuft.",
|
"dismissable_banner.explore_tags": "Diese Hashtags sind heute im Social Web sehr beliebt. Hashtags, die von vielen verschiedenen Profilen verwendet werden, erscheinen weiter oben.",
|
||||||
"dismissable_banner.public_timeline": "Das sind die neuesten öffentlichen Beiträge von Profilen im sozialen Netzwerk, denen Leute auf {domain} folgen.",
|
"dismissable_banner.public_timeline": "Das sind die neuesten öffentlichen Beiträge von Profilen im Social Web, denen Leute auf {domain} folgen.",
|
||||||
"domain_block_modal.block": "Server blockieren",
|
"domain_block_modal.block": "Server blockieren",
|
||||||
"domain_block_modal.block_account_instead": "Stattdessen @{name} blockieren",
|
"domain_block_modal.block_account_instead": "Stattdessen @{name} blockieren",
|
||||||
"domain_block_modal.they_can_interact_with_old_posts": "Profile von diesem Server werden mit deinen älteren Beiträgen interagieren können.",
|
"domain_block_modal.they_can_interact_with_old_posts": "Profile von diesem Server werden mit deinen älteren Beiträgen interagieren können.",
|
||||||
|
|
|
@ -92,7 +92,7 @@
|
||||||
"block_modal.remote_users_caveat": "Ímoslle pedir ao servidor {domain} que respecte a túa decisión. Emporiso, non hai garantía de que atenda a petición xa que os servidores xestionan os bloqueos de formas diferentes. As publicacións públicas poderían aínda ser visibles para usuarias que non iniciaron sesión.",
|
"block_modal.remote_users_caveat": "Ímoslle pedir ao servidor {domain} que respecte a túa decisión. Emporiso, non hai garantía de que atenda a petición xa que os servidores xestionan os bloqueos de formas diferentes. As publicacións públicas poderían aínda ser visibles para usuarias que non iniciaron sesión.",
|
||||||
"block_modal.show_less": "Mostrar menos",
|
"block_modal.show_less": "Mostrar menos",
|
||||||
"block_modal.show_more": "Mostrar máis",
|
"block_modal.show_more": "Mostrar máis",
|
||||||
"block_modal.they_cant_mention": "Non te poden seguir nin mencionar.",
|
"block_modal.they_cant_mention": "Non te pode seguir nin mencionar.",
|
||||||
"block_modal.they_cant_see_posts": "Non pode ver as túas publicacións nin ti as de ela.",
|
"block_modal.they_cant_see_posts": "Non pode ver as túas publicacións nin ti as de ela.",
|
||||||
"block_modal.they_will_know": "Pode ver que a bloqueaches.",
|
"block_modal.they_will_know": "Pode ver que a bloqueaches.",
|
||||||
"block_modal.title": "Bloquear usuaria?",
|
"block_modal.title": "Bloquear usuaria?",
|
||||||
|
@ -216,7 +216,7 @@
|
||||||
"domain_block_modal.they_wont_know": "Non saberá que a bloqueaches.",
|
"domain_block_modal.they_wont_know": "Non saberá que a bloqueaches.",
|
||||||
"domain_block_modal.title": "Bloquear dominio?",
|
"domain_block_modal.title": "Bloquear dominio?",
|
||||||
"domain_block_modal.you_will_lose_followers": "Vanse eliminar todas as túas seguidoras deste servidor.",
|
"domain_block_modal.you_will_lose_followers": "Vanse eliminar todas as túas seguidoras deste servidor.",
|
||||||
"domain_block_modal.you_wont_see_posts": "Non verás publicacións ou notificación das usuarias neste servidor.",
|
"domain_block_modal.you_wont_see_posts": "Non verás publicacións ou notificacións das usuarias deste servidor.",
|
||||||
"domain_pill.activitypub_lets_connect": "Permíteche conectar e interactuar con persoas non só de Mastodon, se non tamén con outras apps sociais.",
|
"domain_pill.activitypub_lets_connect": "Permíteche conectar e interactuar con persoas non só de Mastodon, se non tamén con outras apps sociais.",
|
||||||
"domain_pill.activitypub_like_language": "ActivityPub é algo así como o idioma que Mastodon fala con outras redes sociais.",
|
"domain_pill.activitypub_like_language": "ActivityPub é algo así como o idioma que Mastodon fala con outras redes sociais.",
|
||||||
"domain_pill.server": "Servidor",
|
"domain_pill.server": "Servidor",
|
||||||
|
|
|
@ -35,7 +35,9 @@
|
||||||
"account.follow_back": "フォローバック",
|
"account.follow_back": "フォローバック",
|
||||||
"account.followers": "フォロワー",
|
"account.followers": "フォロワー",
|
||||||
"account.followers.empty": "まだ誰もフォローしていません。",
|
"account.followers.empty": "まだ誰もフォローしていません。",
|
||||||
|
"account.followers_counter": "{count, plural, other {{counter} フォロワー}}",
|
||||||
"account.following": "フォロー中",
|
"account.following": "フォロー中",
|
||||||
|
"account.following_counter": "{count, plural, other {{counter} フォロー}}",
|
||||||
"account.follows.empty": "まだ誰もフォローしていません。",
|
"account.follows.empty": "まだ誰もフォローしていません。",
|
||||||
"account.go_to_profile": "プロフィールページへ",
|
"account.go_to_profile": "プロフィールページへ",
|
||||||
"account.hide_reblogs": "@{name}さんからのブーストを非表示",
|
"account.hide_reblogs": "@{name}さんからのブーストを非表示",
|
||||||
|
@ -61,6 +63,7 @@
|
||||||
"account.requested_follow": "{name}さんがあなたにフォローリクエストしました",
|
"account.requested_follow": "{name}さんがあなたにフォローリクエストしました",
|
||||||
"account.share": "@{name}さんのプロフィールを共有する",
|
"account.share": "@{name}さんのプロフィールを共有する",
|
||||||
"account.show_reblogs": "@{name}さんからのブーストを表示",
|
"account.show_reblogs": "@{name}さんからのブーストを表示",
|
||||||
|
"account.statuses_counter": "{count, plural, other {{counter} 投稿}}",
|
||||||
"account.unblock": "@{name}さんのブロックを解除",
|
"account.unblock": "@{name}さんのブロックを解除",
|
||||||
"account.unblock_domain": "{domain}のブロックを解除",
|
"account.unblock_domain": "{domain}のブロックを解除",
|
||||||
"account.unblock_short": "ブロック解除",
|
"account.unblock_short": "ブロック解除",
|
||||||
|
@ -411,6 +414,8 @@
|
||||||
"limited_account_hint.action": "構わず表示する",
|
"limited_account_hint.action": "構わず表示する",
|
||||||
"limited_account_hint.title": "このプロフィールは{domain}のモデレーターによって非表示にされています。",
|
"limited_account_hint.title": "このプロフィールは{domain}のモデレーターによって非表示にされています。",
|
||||||
"link_preview.author": "{name}",
|
"link_preview.author": "{name}",
|
||||||
|
"link_preview.more_from_author": "{name}さんの投稿をもっと読む",
|
||||||
|
"link_preview.shares": "{count, plural, other {{counter}件の投稿}}",
|
||||||
"lists.account.add": "リストに追加",
|
"lists.account.add": "リストに追加",
|
||||||
"lists.account.remove": "リストから外す",
|
"lists.account.remove": "リストから外す",
|
||||||
"lists.delete": "リストを削除",
|
"lists.delete": "リストを削除",
|
||||||
|
@ -691,8 +696,11 @@
|
||||||
"server_banner.about_active_users": "過去30日間にこのサーバーを使用している人 (月間アクティブユーザー)",
|
"server_banner.about_active_users": "過去30日間にこのサーバーを使用している人 (月間アクティブユーザー)",
|
||||||
"server_banner.active_users": "人のアクティブユーザー",
|
"server_banner.active_users": "人のアクティブユーザー",
|
||||||
"server_banner.administered_by": "管理者",
|
"server_banner.administered_by": "管理者",
|
||||||
|
"server_banner.is_one_of_many": "{domain} は、数々の独立したMastodonサーバーのうちのひとつです。サーバーに登録してFediverseのコミュニティに加わってみませんか。",
|
||||||
"server_banner.server_stats": "サーバーの情報",
|
"server_banner.server_stats": "サーバーの情報",
|
||||||
"sign_in_banner.create_account": "アカウント作成",
|
"sign_in_banner.create_account": "アカウント作成",
|
||||||
|
"sign_in_banner.follow_anyone": "連合内の誰でもフォローして投稿を時系列で見ることができます。アルゴリズム、広告、クリックベイトはありません。",
|
||||||
|
"sign_in_banner.mastodon_is": "Mastodonに参加して、世界で起きていることを見つけよう。",
|
||||||
"sign_in_banner.sign_in": "ログイン",
|
"sign_in_banner.sign_in": "ログイン",
|
||||||
"sign_in_banner.sso_redirect": "ログインまたは登録",
|
"sign_in_banner.sso_redirect": "ログインまたは登録",
|
||||||
"status.admin_account": "@{name}さんのモデレーション画面を開く",
|
"status.admin_account": "@{name}さんのモデレーション画面を開く",
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
{
|
{
|
||||||
|
"about.blocks": "Ulac agbur",
|
||||||
"about.contact": "Anermis:",
|
"about.contact": "Anermis:",
|
||||||
"about.disclaimer": "Mastodon d aseɣẓan ilelli, d aseɣẓan n uɣbalu yeldin, d tnezzut n Mastodon gGmbH.",
|
"about.disclaimer": "Mastodon d aseɣẓan ilelli, d aseɣẓan n uɣbalu yeldin, d tnezzut n Mastodon gGmbH.",
|
||||||
|
"about.domain_blocks.preamble": "Maṣṭudun s umata yeḍmen-ak ad teẓreḍ agbur, ad tesdemreḍ akked yimseqdacen-nniḍen seg yal aqeddac deg fedivers. Ha-tent-an ɣur-k tsuraf i yellan deg uqeddac-agi.",
|
||||||
|
"about.domain_blocks.silenced.title": "Ɣur-s talast",
|
||||||
|
"about.domain_blocks.suspended.title": "Yeḥbes",
|
||||||
"about.not_available": "Talɣut-a ur tettwabder ara deg uqeddac-a.",
|
"about.not_available": "Talɣut-a ur tettwabder ara deg uqeddac-a.",
|
||||||
"about.powered_by": "Azeṭṭa inmetti yettwasɣelsen sɣur {mastodon}",
|
"about.powered_by": "Azeṭṭa inmetti yettwasɣelsen sɣur {mastodon}",
|
||||||
"about.rules": "Ilugan n uqeddac",
|
"about.rules": "Ilugan n uqeddac",
|
||||||
|
@ -24,9 +28,12 @@
|
||||||
"account.featured_tags.last_status_at": "Tasuffeɣt taneggarut ass n {date}",
|
"account.featured_tags.last_status_at": "Tasuffeɣt taneggarut ass n {date}",
|
||||||
"account.featured_tags.last_status_never": "Ulac tisuffaɣ",
|
"account.featured_tags.last_status_never": "Ulac tisuffaɣ",
|
||||||
"account.follow": "Ḍfer",
|
"account.follow": "Ḍfer",
|
||||||
|
"account.follow_back": "Ḍfer-it ula d kečč·m",
|
||||||
"account.followers": "Imeḍfaren",
|
"account.followers": "Imeḍfaren",
|
||||||
"account.followers.empty": "Ar tura, ulac yiwen i yeṭṭafaṛen amseqdac-agi.",
|
"account.followers.empty": "Ar tura, ulac yiwen i yeṭṭafaṛen amseqdac-agi.",
|
||||||
|
"account.followers_counter": "{count, plural, one {{counter} n umḍfar} other {{counter} n yimeḍfaren}}",
|
||||||
"account.following": "Yeṭṭafaṛ",
|
"account.following": "Yeṭṭafaṛ",
|
||||||
|
"account.following_counter": "{count, plural, one {{counter} yettwaḍfaren} other {{counter} yettwaḍfaren}}",
|
||||||
"account.follows.empty": "Ar tura, amseqdac-agi ur yeṭṭafaṛ yiwen.",
|
"account.follows.empty": "Ar tura, amseqdac-agi ur yeṭṭafaṛ yiwen.",
|
||||||
"account.go_to_profile": "Ddu ɣer umaɣnu",
|
"account.go_to_profile": "Ddu ɣer umaɣnu",
|
||||||
"account.hide_reblogs": "Ffer ayen i ibeṭṭu @{name}",
|
"account.hide_reblogs": "Ffer ayen i ibeṭṭu @{name}",
|
||||||
|
@ -49,6 +56,7 @@
|
||||||
"account.requested_follow": "{name} yessuter ad k·m-yeḍfer",
|
"account.requested_follow": "{name} yessuter ad k·m-yeḍfer",
|
||||||
"account.share": "Bḍu amaɣnu n @{name}",
|
"account.share": "Bḍu amaɣnu n @{name}",
|
||||||
"account.show_reblogs": "Ssken-d inebḍa n @{name}",
|
"account.show_reblogs": "Ssken-d inebḍa n @{name}",
|
||||||
|
"account.statuses_counter": "{count, plural, one {{counter} n tsuffeɣt} other {{counter} n tsuffaɣ}}",
|
||||||
"account.unblock": "Serreḥ i @{name}",
|
"account.unblock": "Serreḥ i @{name}",
|
||||||
"account.unblock_domain": "Ssken-d {domain}",
|
"account.unblock_domain": "Ssken-d {domain}",
|
||||||
"account.unblock_short": "Serreḥ",
|
"account.unblock_short": "Serreḥ",
|
||||||
|
@ -166,6 +174,7 @@
|
||||||
"dismissable_banner.explore_tags": "D wiyi i d ihacṭagen i d-yettawin tamyigawt deg web anmetti ass-a. Ihacṭagen i sseqdacen ugar n medden, εlayit d imezwura.",
|
"dismissable_banner.explore_tags": "D wiyi i d ihacṭagen i d-yettawin tamyigawt deg web anmetti ass-a. Ihacṭagen i sseqdacen ugar n medden, εlayit d imezwura.",
|
||||||
"domain_block_modal.block": "Sewḥel aqeddac",
|
"domain_block_modal.block": "Sewḥel aqeddac",
|
||||||
"domain_block_modal.they_cant_follow": "Yiwen ur yezmir ad k·m-id-yeḍfer seg uqeddac-a.",
|
"domain_block_modal.they_cant_follow": "Yiwen ur yezmir ad k·m-id-yeḍfer seg uqeddac-a.",
|
||||||
|
"domain_block_modal.title": "Sewḥel taɣult?",
|
||||||
"domain_pill.activitypub_like_language": "ActivityPub am tutlayt yettmeslay Mastodon d izeḍwan inmettiyen nniḍen.",
|
"domain_pill.activitypub_like_language": "ActivityPub am tutlayt yettmeslay Mastodon d izeḍwan inmettiyen nniḍen.",
|
||||||
"domain_pill.server": "Aqeddac",
|
"domain_pill.server": "Aqeddac",
|
||||||
"domain_pill.username": "Isem n useqdac",
|
"domain_pill.username": "Isem n useqdac",
|
||||||
|
@ -214,6 +223,7 @@
|
||||||
"filter_modal.added.review_and_configure_title": "Iɣewwaṛen n imzizdig",
|
"filter_modal.added.review_and_configure_title": "Iɣewwaṛen n imzizdig",
|
||||||
"filter_modal.added.settings_link": "asebter n yiɣewwaṛen",
|
"filter_modal.added.settings_link": "asebter n yiɣewwaṛen",
|
||||||
"filter_modal.added.short_explanation": "Tasuffeɣt-a tettwarna ɣer taggayt-a n yimsizdegen: {title}.",
|
"filter_modal.added.short_explanation": "Tasuffeɣt-a tettwarna ɣer taggayt-a n yimsizdegen: {title}.",
|
||||||
|
"filter_modal.added.title": "Yettwarna umsizdeg!",
|
||||||
"filter_modal.select_filter.expired": "yemmut",
|
"filter_modal.select_filter.expired": "yemmut",
|
||||||
"filter_modal.select_filter.prompt_new": "Taggayt tamaynutt : {name}",
|
"filter_modal.select_filter.prompt_new": "Taggayt tamaynutt : {name}",
|
||||||
"filter_modal.select_filter.search": "Nadi neɣ snulfu-d",
|
"filter_modal.select_filter.search": "Nadi neɣ snulfu-d",
|
||||||
|
@ -224,9 +234,9 @@
|
||||||
"firehose.remote": "Iqeddacen nniḍen",
|
"firehose.remote": "Iqeddacen nniḍen",
|
||||||
"follow_request.authorize": "Ssireg",
|
"follow_request.authorize": "Ssireg",
|
||||||
"follow_request.reject": "Agi",
|
"follow_request.reject": "Agi",
|
||||||
"follow_suggestions.dismiss": "Ur ttɛawad ara ad t-id-sekneṭ",
|
"follow_suggestions.dismiss": "Dayen ur t-id-skan ara",
|
||||||
"follow_suggestions.view_all": "Wali-ten akk",
|
"follow_suggestions.view_all": "Wali-ten akk",
|
||||||
"follow_suggestions.who_to_follow": "Menhu ara ḍefṛeḍ",
|
"follow_suggestions.who_to_follow": "Ad tḍefreḍ?",
|
||||||
"followed_tags": "Ihacṭagen yettwaḍfaren",
|
"followed_tags": "Ihacṭagen yettwaḍfaren",
|
||||||
"footer.about": "Ɣef",
|
"footer.about": "Ɣef",
|
||||||
"footer.directory": "Akaram n imeɣna",
|
"footer.directory": "Akaram n imeɣna",
|
||||||
|
@ -235,6 +245,7 @@
|
||||||
"footer.keyboard_shortcuts": "Inegzumen n unasiw",
|
"footer.keyboard_shortcuts": "Inegzumen n unasiw",
|
||||||
"footer.privacy_policy": "Tasertit tabaḍnit",
|
"footer.privacy_policy": "Tasertit tabaḍnit",
|
||||||
"footer.source_code": "Wali tangalt taɣbalut",
|
"footer.source_code": "Wali tangalt taɣbalut",
|
||||||
|
"footer.status": "N tsuffeɣt",
|
||||||
"generic.saved": "Yettwasekles",
|
"generic.saved": "Yettwasekles",
|
||||||
"getting_started.heading": "Bdu",
|
"getting_started.heading": "Bdu",
|
||||||
"hashtag.column_header.tag_mode.all": "d {additional}",
|
"hashtag.column_header.tag_mode.all": "d {additional}",
|
||||||
|
@ -313,11 +324,14 @@
|
||||||
"lightbox.previous": "Ɣer deffir",
|
"lightbox.previous": "Ɣer deffir",
|
||||||
"limited_account_hint.action": "Wali amaɣnu akken yebɣu yili",
|
"limited_account_hint.action": "Wali amaɣnu akken yebɣu yili",
|
||||||
"link_preview.author": "S-ɣur {name}",
|
"link_preview.author": "S-ɣur {name}",
|
||||||
|
"link_preview.more_from_author": "Ugar sɣur {name}",
|
||||||
|
"link_preview.shares": "{count, plural, one {{counter} post} other {{counter} posts}}",
|
||||||
"lists.account.add": "Rnu ɣer tebdart",
|
"lists.account.add": "Rnu ɣer tebdart",
|
||||||
"lists.account.remove": "Kkes seg tebdart",
|
"lists.account.remove": "Kkes seg tebdart",
|
||||||
"lists.delete": "Kkes tabdart",
|
"lists.delete": "Kkes tabdart",
|
||||||
"lists.edit": "Ẓreg tabdart",
|
"lists.edit": "Ẓreg tabdart",
|
||||||
"lists.edit.submit": "Beddel azwel",
|
"lists.edit.submit": "Beddel azwel",
|
||||||
|
"lists.exclusive": "Ffer tisuffaɣ-a seg ugejdan",
|
||||||
"lists.new.create": "Rnu tabdart",
|
"lists.new.create": "Rnu tabdart",
|
||||||
"lists.new.title_placeholder": "Azwel amaynut n tebdart",
|
"lists.new.title_placeholder": "Azwel amaynut n tebdart",
|
||||||
"lists.replies_policy.followed": "Kra n useqdac i yettwaḍefren",
|
"lists.replies_policy.followed": "Kra n useqdac i yettwaḍefren",
|
||||||
|
@ -338,6 +352,7 @@
|
||||||
"navigation_bar.bookmarks": "Ticraḍ",
|
"navigation_bar.bookmarks": "Ticraḍ",
|
||||||
"navigation_bar.community_timeline": "Tasuddemt tadigant",
|
"navigation_bar.community_timeline": "Tasuddemt tadigant",
|
||||||
"navigation_bar.compose": "Aru tajewwiqt tamaynut",
|
"navigation_bar.compose": "Aru tajewwiqt tamaynut",
|
||||||
|
"navigation_bar.direct": "Tibdarin tusligin",
|
||||||
"navigation_bar.discover": "Ẓer",
|
"navigation_bar.discover": "Ẓer",
|
||||||
"navigation_bar.domain_blocks": "Tiɣula yeffren",
|
"navigation_bar.domain_blocks": "Tiɣula yeffren",
|
||||||
"navigation_bar.explore": "Snirem",
|
"navigation_bar.explore": "Snirem",
|
||||||
|
@ -357,9 +372,14 @@
|
||||||
"navigation_bar.search": "Nadi",
|
"navigation_bar.search": "Nadi",
|
||||||
"navigation_bar.security": "Taɣellist",
|
"navigation_bar.security": "Taɣellist",
|
||||||
"not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.",
|
"not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.",
|
||||||
|
"notification.admin.report": "Yemla-t-id {name} {target}",
|
||||||
|
"notification.admin.sign_up": "Ijerred {name}",
|
||||||
|
"notification.favourite": "{name} yesmenyaf addad-ik·im",
|
||||||
"notification.follow": "iṭṭafar-ik·em-id {name}",
|
"notification.follow": "iṭṭafar-ik·em-id {name}",
|
||||||
"notification.follow_request": "{name} yessuter-d ad k·m-yeḍfeṛ",
|
"notification.follow_request": "{name} yessuter-d ad k·m-yeḍfeṛ",
|
||||||
"notification.mention": "{name} yebder-ik-id",
|
"notification.mention": "{name} yebder-ik-id",
|
||||||
|
"notification.moderation-warning.learn_more": "Issin ugar",
|
||||||
|
"notification.moderation_warning.action_suspend": "Yettwaseḥbes umiḍan-ik.",
|
||||||
"notification.own_poll": "Tafrant-ik·im tfuk",
|
"notification.own_poll": "Tafrant-ik·im tfuk",
|
||||||
"notification.poll": "Tfukk tefrant ideg tettekkaḍ",
|
"notification.poll": "Tfukk tefrant ideg tettekkaḍ",
|
||||||
"notification.reblog": "{name} yebḍa tajewwiqt-ik i tikelt-nniḍen",
|
"notification.reblog": "{name} yebḍa tajewwiqt-ik i tikelt-nniḍen",
|
||||||
|
@ -370,6 +390,7 @@
|
||||||
"notification_requests.notifications_from": "Ilɣa sɣur {name}",
|
"notification_requests.notifications_from": "Ilɣa sɣur {name}",
|
||||||
"notifications.clear": "Sfeḍ tilɣa",
|
"notifications.clear": "Sfeḍ tilɣa",
|
||||||
"notifications.clear_confirmation": "Tebɣiḍ s tidet ad tekkseḍ akk tilɣa-inek·em i lebda?",
|
"notifications.clear_confirmation": "Tebɣiḍ s tidet ad tekkseḍ akk tilɣa-inek·em i lebda?",
|
||||||
|
"notifications.column_settings.admin.report": "Ineqqisen imaynuten:",
|
||||||
"notifications.column_settings.alert": "Tilɣa n tnarit",
|
"notifications.column_settings.alert": "Tilɣa n tnarit",
|
||||||
"notifications.column_settings.favourite": "Imenyafen:",
|
"notifications.column_settings.favourite": "Imenyafen:",
|
||||||
"notifications.column_settings.filter_bar.advanced": "Sken-d akk taggayin",
|
"notifications.column_settings.filter_bar.advanced": "Sken-d akk taggayin",
|
||||||
|
@ -384,6 +405,7 @@
|
||||||
"notifications.column_settings.sound": "Rmed imesli",
|
"notifications.column_settings.sound": "Rmed imesli",
|
||||||
"notifications.column_settings.status": "Tisuffaɣ timaynutin :",
|
"notifications.column_settings.status": "Tisuffaɣ timaynutin :",
|
||||||
"notifications.column_settings.unread_notifications.category": "Ilɣa ur nettwaɣra",
|
"notifications.column_settings.unread_notifications.category": "Ilɣa ur nettwaɣra",
|
||||||
|
"notifications.column_settings.update": "Iẓreg:",
|
||||||
"notifications.filter.all": "Akk",
|
"notifications.filter.all": "Akk",
|
||||||
"notifications.filter.boosts": "Seǧhed",
|
"notifications.filter.boosts": "Seǧhed",
|
||||||
"notifications.filter.favourites": "Imenyafen",
|
"notifications.filter.favourites": "Imenyafen",
|
||||||
|
@ -413,6 +435,7 @@
|
||||||
"onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
|
"onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
|
||||||
"onboarding.follows.title": "Ttwassnen deg Mastodon",
|
"onboarding.follows.title": "Ttwassnen deg Mastodon",
|
||||||
"onboarding.profile.display_name": "Isem ara d-yettwaskanen",
|
"onboarding.profile.display_name": "Isem ara d-yettwaskanen",
|
||||||
|
"onboarding.profile.display_name_hint": "Isem-ik·im ummid neɣ isem-ik·im n uqeṣṣer…",
|
||||||
"onboarding.profile.note": "Tameddurt",
|
"onboarding.profile.note": "Tameddurt",
|
||||||
"onboarding.profile.note_hint": "Tzemreḍ ad d-@tbedreḍ imdanen niḍen neɣ #ihacṭagen …",
|
"onboarding.profile.note_hint": "Tzemreḍ ad d-@tbedreḍ imdanen niḍen neɣ #ihacṭagen …",
|
||||||
"onboarding.profile.save_and_continue": "Sekles, tkemmleḍ",
|
"onboarding.profile.save_and_continue": "Sekles, tkemmleḍ",
|
||||||
|
@ -441,6 +464,7 @@
|
||||||
"poll.total_votes": "{count, plural, one {# n udɣaṛ} other {# n yedɣaṛen}}",
|
"poll.total_votes": "{count, plural, one {# n udɣaṛ} other {# n yedɣaṛen}}",
|
||||||
"poll.vote": "Dɣeṛ",
|
"poll.vote": "Dɣeṛ",
|
||||||
"poll.voted": "Tdeɣṛeḍ ɣef tririt-ayi",
|
"poll.voted": "Tdeɣṛeḍ ɣef tririt-ayi",
|
||||||
|
"poll.votes": "{votes, plural, one {# n udɣaṛ} other {# n yedɣaṛen}}",
|
||||||
"poll_button.add_poll": "Rnu asenqed",
|
"poll_button.add_poll": "Rnu asenqed",
|
||||||
"poll_button.remove_poll": "Kkes asenqed",
|
"poll_button.remove_poll": "Kkes asenqed",
|
||||||
"privacy.change": "Seggem tabaḍnit n yizen",
|
"privacy.change": "Seggem tabaḍnit n yizen",
|
||||||
|
@ -465,9 +489,12 @@
|
||||||
"relative_time.seconds": "{number}tas",
|
"relative_time.seconds": "{number}tas",
|
||||||
"relative_time.today": "assa",
|
"relative_time.today": "assa",
|
||||||
"reply_indicator.cancel": "Sefsex",
|
"reply_indicator.cancel": "Sefsex",
|
||||||
|
"reply_indicator.poll": "Afmiḍi",
|
||||||
"report.block": "Sewḥel",
|
"report.block": "Sewḥel",
|
||||||
|
"report.categories.legal": "Azerfan",
|
||||||
"report.categories.other": "Tiyyaḍ",
|
"report.categories.other": "Tiyyaḍ",
|
||||||
"report.categories.spam": "Aspam",
|
"report.categories.spam": "Aspam",
|
||||||
|
"report.category.subtitle": "Fren amṣada akk ufrin",
|
||||||
"report.category.title_account": "ameɣnu",
|
"report.category.title_account": "ameɣnu",
|
||||||
"report.category.title_status": "tasuffeɣt",
|
"report.category.title_status": "tasuffeɣt",
|
||||||
"report.close": "Immed",
|
"report.close": "Immed",
|
||||||
|
@ -476,13 +503,25 @@
|
||||||
"report.next": "Uḍfiṛ",
|
"report.next": "Uḍfiṛ",
|
||||||
"report.placeholder": "Iwenniten-nniḍen",
|
"report.placeholder": "Iwenniten-nniḍen",
|
||||||
"report.reasons.dislike": "Ur t-ḥemmleɣ ara",
|
"report.reasons.dislike": "Ur t-ḥemmleɣ ara",
|
||||||
|
"report.reasons.dislike_description": "D ayen akk ur bɣiɣ ara ad waliɣ",
|
||||||
"report.reasons.other": "D ayen nniḍen",
|
"report.reasons.other": "D ayen nniḍen",
|
||||||
|
"report.reasons.other_description": "Ugur ur yemṣada ara akk d taggayin-nniḍen",
|
||||||
"report.reasons.spam": "D aspam",
|
"report.reasons.spam": "D aspam",
|
||||||
|
"report.reasons.spam_description": "Yir iseɣwan, yir agman d tririyin i d-yettuɣalen",
|
||||||
|
"report.reasons.violation": "Truẓi n yilugan n uqeddac",
|
||||||
|
"report.reasons.violation_description": "Teẓriḍ y·tettruẓu kra n yilugan",
|
||||||
|
"report.rules.subtitle": "Fren ayen akk yemṣadan",
|
||||||
|
"report.rules.title": "Acu n yilugan i yettwarẓan?",
|
||||||
|
"report.statuses.subtitle": "Fren ayen akk yemṣadan",
|
||||||
|
"report.statuses.title": "Llant tsuffaɣ ara isdemren aneqqis-a?",
|
||||||
"report.submit": "Azen",
|
"report.submit": "Azen",
|
||||||
"report.target": "Mmel {target}",
|
"report.target": "Mmel {target}",
|
||||||
|
"report.thanks.take_action_actionable": "Ideg nekkni nessenqad tuttra-inek•inem, tzemreḍ ad tḥadreḍ mgal @{name}:",
|
||||||
"report.thanks.title": "Ur tebɣiḍ ara ad twaliḍ aya?",
|
"report.thanks.title": "Ur tebɣiḍ ara ad twaliḍ aya?",
|
||||||
|
"report.thanks.title_actionable": "Tanemmirt ɣef uneqqis, ad nwali deg waya.",
|
||||||
"report.unfollow": "Seḥbes aḍfar n @{name}",
|
"report.unfollow": "Seḥbes aḍfar n @{name}",
|
||||||
"report_notification.attached_statuses": "{count, plural, one {# post} other {# posts}} attached",
|
"report_notification.attached_statuses": "{count, plural, one {# post} other {# posts}} attached",
|
||||||
|
"report_notification.categories.legal": "Azerfan",
|
||||||
"report_notification.categories.other": "Ayen nniḍen",
|
"report_notification.categories.other": "Ayen nniḍen",
|
||||||
"report_notification.categories.spam": "Aspam",
|
"report_notification.categories.spam": "Aspam",
|
||||||
"report_notification.open": "Ldi aneqqis",
|
"report_notification.open": "Ldi aneqqis",
|
||||||
|
@ -497,6 +536,7 @@
|
||||||
"search_popout.full_text_search_disabled_message": "Ur yelli ara deg {domain}.",
|
"search_popout.full_text_search_disabled_message": "Ur yelli ara deg {domain}.",
|
||||||
"search_popout.language_code": "Tangalt ISO n tutlayt",
|
"search_popout.language_code": "Tangalt ISO n tutlayt",
|
||||||
"search_popout.options": "Iwellihen n unadi",
|
"search_popout.options": "Iwellihen n unadi",
|
||||||
|
"search_popout.quick_actions": "Tigawin tiruradin",
|
||||||
"search_popout.recent": "Inadiyen ineggura",
|
"search_popout.recent": "Inadiyen ineggura",
|
||||||
"search_popout.user": "amseqdac",
|
"search_popout.user": "amseqdac",
|
||||||
"search_results.accounts": "Imeɣna",
|
"search_results.accounts": "Imeɣna",
|
||||||
|
@ -505,7 +545,9 @@
|
||||||
"search_results.see_all": "Wali-ten akk",
|
"search_results.see_all": "Wali-ten akk",
|
||||||
"search_results.statuses": "Tisuffaɣ",
|
"search_results.statuses": "Tisuffaɣ",
|
||||||
"search_results.title": "Anadi ɣef {q}",
|
"search_results.title": "Anadi ɣef {q}",
|
||||||
|
"server_banner.active_users": "iseqdacen urmiden",
|
||||||
"server_banner.administered_by": "Yettwadbel sɣur :",
|
"server_banner.administered_by": "Yettwadbel sɣur :",
|
||||||
|
"server_banner.server_stats": "Tidaddanin n uqeddac:",
|
||||||
"sign_in_banner.create_account": "Snulfu-d amiḍan",
|
"sign_in_banner.create_account": "Snulfu-d amiḍan",
|
||||||
"sign_in_banner.sign_in": "Qqen",
|
"sign_in_banner.sign_in": "Qqen",
|
||||||
"sign_in_banner.sso_redirect": "Qqen neɣ jerred",
|
"sign_in_banner.sso_redirect": "Qqen neɣ jerred",
|
||||||
|
@ -516,13 +558,21 @@
|
||||||
"status.cannot_reblog": "Tasuffeɣt-a ur tezmir ara ad tettwabḍu tikelt-nniḍen",
|
"status.cannot_reblog": "Tasuffeɣt-a ur tezmir ara ad tettwabḍu tikelt-nniḍen",
|
||||||
"status.copy": "Nɣel assaɣ ɣer tasuffeɣt",
|
"status.copy": "Nɣel assaɣ ɣer tasuffeɣt",
|
||||||
"status.delete": "Kkes",
|
"status.delete": "Kkes",
|
||||||
|
"status.direct": "Bder-d @{name} weḥd-s",
|
||||||
|
"status.direct_indicator": "Abdar uslig",
|
||||||
"status.edit": "Ẓreg",
|
"status.edit": "Ẓreg",
|
||||||
"status.edited_x_times": "Tettwaẓreg {count, plural, one {{count} n tikkelt} other {{count} n tikkal}}",
|
"status.edited_x_times": "Tettwaẓreg {count, plural, one {{count} n tikkelt} other {{count} n tikkal}}",
|
||||||
"status.embed": "Seddu",
|
"status.embed": "Seddu",
|
||||||
|
"status.favourite": "Amenyaf",
|
||||||
|
"status.favourites": "{count, plural, one {n usmenyaf} other {n ismenyafen}}",
|
||||||
"status.filter": "Sizdeg tassufeɣt-a",
|
"status.filter": "Sizdeg tassufeɣt-a",
|
||||||
"status.filtered": "Yettwasizdeg",
|
"status.filtered": "Yettwasizdeg",
|
||||||
"status.hide": "Ffer tasuffeɣt",
|
"status.hide": "Ffer tasuffeɣt",
|
||||||
|
"status.history.created": "Yerna-t {name} {date}",
|
||||||
|
"status.history.edited": "Ibeddel-it {name} {date}",
|
||||||
"status.load_more": "Sali ugar",
|
"status.load_more": "Sali ugar",
|
||||||
|
"status.media.open": "Sit i ulday",
|
||||||
|
"status.media.show": "Sit i uskan",
|
||||||
"status.media_hidden": "Amidya yettwaffer",
|
"status.media_hidden": "Amidya yettwaffer",
|
||||||
"status.mention": "Bder-d @{name}",
|
"status.mention": "Bder-d @{name}",
|
||||||
"status.more": "Ugar",
|
"status.more": "Ugar",
|
||||||
|
@ -530,10 +580,11 @@
|
||||||
"status.mute_conversation": "Sgugem adiwenni",
|
"status.mute_conversation": "Sgugem adiwenni",
|
||||||
"status.open": "Semɣeṛ tasuffeɣt-ayi",
|
"status.open": "Semɣeṛ tasuffeɣt-ayi",
|
||||||
"status.pin": "Senteḍ-itt deg umaɣnu",
|
"status.pin": "Senteḍ-itt deg umaɣnu",
|
||||||
"status.pinned": "Tijewwiqin yettwasentḍen",
|
"status.pinned": "Tisuffaɣ yettwasentḍen",
|
||||||
"status.read_more": "Issin ugar",
|
"status.read_more": "Issin ugar",
|
||||||
"status.reblog": "Bḍu",
|
"status.reblog": "Bḍu",
|
||||||
"status.reblogged_by": "Yebḍa-tt {name}",
|
"status.reblogged_by": "Yebḍa-tt {name}",
|
||||||
|
"status.reblogs": "{count, plural, one {n usnerni} other {n yisnernuyen}}",
|
||||||
"status.reblogs.empty": "Ula yiwen ur yebḍi tajewwiqt-agi ar tura. Ticki yebḍa-tt yiwen, ad d-iban da.",
|
"status.reblogs.empty": "Ula yiwen ur yebḍi tajewwiqt-agi ar tura. Ticki yebḍa-tt yiwen, ad d-iban da.",
|
||||||
"status.redraft": "Kkes tɛiwdeḍ tira",
|
"status.redraft": "Kkes tɛiwdeḍ tira",
|
||||||
"status.remove_bookmark": "Kkes tacreḍt",
|
"status.remove_bookmark": "Kkes tacreḍt",
|
||||||
|
@ -548,6 +599,7 @@
|
||||||
"status.show_less_all": "Semẓi akk tisuffɣin",
|
"status.show_less_all": "Semẓi akk tisuffɣin",
|
||||||
"status.show_more": "Ssken-d ugar",
|
"status.show_more": "Ssken-d ugar",
|
||||||
"status.show_more_all": "Ẓerr ugar lebda",
|
"status.show_more_all": "Ẓerr ugar lebda",
|
||||||
|
"status.show_original": "Sken aɣbalu",
|
||||||
"status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}",
|
"status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}",
|
||||||
"status.translate": "Suqel",
|
"status.translate": "Suqel",
|
||||||
"status.translated_from_with": "Yettwasuqel seg {lang} s {provider}",
|
"status.translated_from_with": "Yettwasuqel seg {lang} s {provider}",
|
||||||
|
@ -582,6 +634,7 @@
|
||||||
"upload_form.video_description": "Glem-d i yemdanen i yesɛan ugur deg tmesliwt neɣ deg yiẓri",
|
"upload_form.video_description": "Glem-d i yemdanen i yesɛan ugur deg tmesliwt neɣ deg yiẓri",
|
||||||
"upload_modal.analyzing_picture": "Tasleḍt n tugna tetteddu…",
|
"upload_modal.analyzing_picture": "Tasleḍt n tugna tetteddu…",
|
||||||
"upload_modal.apply": "Snes",
|
"upload_modal.apply": "Snes",
|
||||||
|
"upload_modal.applying": "Asnas…",
|
||||||
"upload_modal.choose_image": "Fren tugna",
|
"upload_modal.choose_image": "Fren tugna",
|
||||||
"upload_modal.description_placeholder": "Aberraɣ arurad ineggez nnig n uqjun amuṭṭis",
|
"upload_modal.description_placeholder": "Aberraɣ arurad ineggez nnig n uqjun amuṭṭis",
|
||||||
"upload_modal.detect_text": "Sefru-d aḍris seg tugna",
|
"upload_modal.detect_text": "Sefru-d aḍris seg tugna",
|
||||||
|
@ -589,6 +642,7 @@
|
||||||
"upload_modal.preparing_ocr": "Aheyyi n OCR…",
|
"upload_modal.preparing_ocr": "Aheyyi n OCR…",
|
||||||
"upload_modal.preview_label": "Taskant ({ratio})",
|
"upload_modal.preview_label": "Taskant ({ratio})",
|
||||||
"upload_progress.label": "Asali iteddu...",
|
"upload_progress.label": "Asali iteddu...",
|
||||||
|
"upload_progress.processing": "Asesfer…",
|
||||||
"username.taken": "Yettwaṭṭef yisem-a n useqdac. Ɛreḍ wayeḍ",
|
"username.taken": "Yettwaṭṭef yisem-a n useqdac. Ɛreḍ wayeḍ",
|
||||||
"video.close": "Mdel tabidyutt",
|
"video.close": "Mdel tabidyutt",
|
||||||
"video.download": "Sidered afaylu",
|
"video.download": "Sidered afaylu",
|
||||||
|
|
|
@ -35,6 +35,7 @@
|
||||||
"account.follow_back": "Sekot atpakaļ",
|
"account.follow_back": "Sekot atpakaļ",
|
||||||
"account.followers": "Sekotāji",
|
"account.followers": "Sekotāji",
|
||||||
"account.followers.empty": "Šim lietotājam vēl nav sekotāju.",
|
"account.followers.empty": "Šim lietotājam vēl nav sekotāju.",
|
||||||
|
"account.followers_counter": "{count, plural, zero {{count} sekotāju} one {{count} sekotājs} other {{count} sekotāji}}",
|
||||||
"account.following": "Seko",
|
"account.following": "Seko",
|
||||||
"account.follows.empty": "Šis lietotājs pagaidām nevienam neseko.",
|
"account.follows.empty": "Šis lietotājs pagaidām nevienam neseko.",
|
||||||
"account.go_to_profile": "Doties uz profilu",
|
"account.go_to_profile": "Doties uz profilu",
|
||||||
|
@ -312,9 +313,9 @@
|
||||||
"home.column_settings.show_reblogs": "Rādīt pastiprinātos ierakstus",
|
"home.column_settings.show_reblogs": "Rādīt pastiprinātos ierakstus",
|
||||||
"home.column_settings.show_replies": "Rādīt atbildes",
|
"home.column_settings.show_replies": "Rādīt atbildes",
|
||||||
"home.hide_announcements": "Slēpt paziņojumus",
|
"home.hide_announcements": "Slēpt paziņojumus",
|
||||||
"home.pending_critical_update.body": "Lūdzu, pēc iespējas ātrāk atjaunini savu Mastodon serveri!",
|
"home.pending_critical_update.body": "Lūgums pēc iespējas drīzāk atjaunināt savu Mastodon serveri.",
|
||||||
"home.pending_critical_update.link": "Skatīt jauninājumus",
|
"home.pending_critical_update.link": "Skatīt jauninājumus",
|
||||||
"home.pending_critical_update.title": "Pieejams kritisks drošības jauninājums!",
|
"home.pending_critical_update.title": "Ir pieejams būtisks drošības atjauninājums.",
|
||||||
"home.show_announcements": "Rādīt paziņojumus",
|
"home.show_announcements": "Rādīt paziņojumus",
|
||||||
"interaction_modal.description.favourite": "Ar Mastodon kontu tu vari pievienot šo ziņu izlasei, lai informētu autoru, ka to novērtē, un saglabātu to vēlākai lasīšanai.",
|
"interaction_modal.description.favourite": "Ar Mastodon kontu tu vari pievienot šo ziņu izlasei, lai informētu autoru, ka to novērtē, un saglabātu to vēlākai lasīšanai.",
|
||||||
"interaction_modal.description.follow": "Ar Mastodon kontu Tu vari sekot {name}, lai saņemtu lietotāja ierakstus savā mājas plūsmā.",
|
"interaction_modal.description.follow": "Ar Mastodon kontu Tu vari sekot {name}, lai saņemtu lietotāja ierakstus savā mājas plūsmā.",
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
"about.contact": "Контакт:",
|
"about.contact": "Контакт:",
|
||||||
"about.disclaimer": "Mastodon є задарьнов проґрамов из удпертым кодом тай торговов значков Mastodon gGmbH.",
|
"about.disclaimer": "Mastodon є задарьнов проґрамов из удпертым кодом тай торговов значков Mastodon gGmbH.",
|
||||||
"about.domain_blocks.no_reason_available": "Причины не ясні",
|
"about.domain_blocks.no_reason_available": "Причины не ясні",
|
||||||
|
"about.domain_blocks.preamble": "Майбульш Mastodon поволят вам позирати контент тай комуніковати из хосновачами из другых федерованых серверув. Туй лиш уняткы учинені про сись конкретный сервер.",
|
||||||
|
"about.domain_blocks.silenced.explanation": "Вы майбульш не будете видіти профілі тай контент из сього сервера, кидь не будете го самі глядати авадь пудпишете ся на нього.",
|
||||||
"about.domain_blocks.silenced.title": "Обмежено",
|
"about.domain_blocks.silenced.title": "Обмежено",
|
||||||
"about.domain_blocks.suspended.explanation": "Ниякі податкы из сього сервера не будут уброблені, усокочені ци поміняні, што чинит невозможнов хоть-яку інтеракцію ци зязок из хосновачами из сього сервера.",
|
"about.domain_blocks.suspended.explanation": "Ниякі податкы из сього сервера не будут уброблені, усокочені ци поміняні, што чинит невозможнов хоть-яку інтеракцію ци зязок из хосновачами из сього сервера.",
|
||||||
"about.domain_blocks.suspended.title": "Заблоковано",
|
"about.domain_blocks.suspended.title": "Заблоковано",
|
||||||
|
@ -20,6 +22,7 @@
|
||||||
"account.browse_more_on_origin_server": "Позирайте бульше на ориґіналнум профілю",
|
"account.browse_more_on_origin_server": "Позирайте бульше на ориґіналнум профілю",
|
||||||
"account.cancel_follow_request": "Удмінити пудписку",
|
"account.cancel_follow_request": "Удмінити пудписку",
|
||||||
"account.copy": "Зкопіровати удкликованя на профіл",
|
"account.copy": "Зкопіровати удкликованя на профіл",
|
||||||
|
"account.direct": "Пошептати @{name}",
|
||||||
"account.disable_notifications": "Бульше не сповіщати ми коли {name} пише",
|
"account.disable_notifications": "Бульше не сповіщати ми коли {name} пише",
|
||||||
"account.domain_blocked": "Домен заблокованый",
|
"account.domain_blocked": "Домен заблокованый",
|
||||||
"account.edit_profile": "Управити профіл",
|
"account.edit_profile": "Управити профіл",
|
||||||
|
@ -39,8 +42,10 @@
|
||||||
"account.joined_short": "Датум прикапчованя",
|
"account.joined_short": "Датум прикапчованя",
|
||||||
"account.languages": "Поміняти убрані языкы",
|
"account.languages": "Поміняти убрані языкы",
|
||||||
"account.link_verified_on": "Властность сього удкликованя было звірено {date}",
|
"account.link_verified_on": "Властность сього удкликованя было звірено {date}",
|
||||||
|
"account.locked_info": "Сись профіл є замкнутый. Ґазда акаунта буде ручно провіряти тко го може зафоловити.",
|
||||||
"account.media": "Медіа",
|
"account.media": "Медіа",
|
||||||
"account.moved_to": "Хосновач {name} указав, ож новый профіл йим є:",
|
"account.mention": "Спомянути @{name}",
|
||||||
|
"account.moved_to": "Хосновач {name} указав, ож новый профіл му є:",
|
||||||
"account.mute": "Стишити {name}",
|
"account.mute": "Стишити {name}",
|
||||||
"account.mute_notifications_short": "Стишити голошіня",
|
"account.mute_notifications_short": "Стишити голошіня",
|
||||||
"account.mute_short": "Стишити",
|
"account.mute_short": "Стишити",
|
||||||
|
@ -60,9 +65,12 @@
|
||||||
"account.unblock_short": "Розблоковати",
|
"account.unblock_short": "Розблоковати",
|
||||||
"account.unendorse": "Не указовати на профілови",
|
"account.unendorse": "Не указовати на профілови",
|
||||||
"account.unfollow": "Удписати ся",
|
"account.unfollow": "Удписати ся",
|
||||||
|
"account.unmute": "Указовати {name}",
|
||||||
"account.unmute_notifications_short": "Указовати голошіня",
|
"account.unmute_notifications_short": "Указовати голошіня",
|
||||||
"account.unmute_short": "Указовати",
|
"account.unmute_short": "Указовати",
|
||||||
"account_note.placeholder": "Клопкніт обы додати примітку",
|
"account_note.placeholder": "Клопкніт обы додати примітку",
|
||||||
|
"admin.dashboard.retention.average": "Середньоє",
|
||||||
|
"admin.dashboard.retention.cohort": "Місяць прикапчованя",
|
||||||
"admin.dashboard.retention.cohort_size": "Нові хосновачі",
|
"admin.dashboard.retention.cohort_size": "Нові хосновачі",
|
||||||
"admin.impact_report.instance_accounts": "Профілі из акаунтув, котрі ся удалят",
|
"admin.impact_report.instance_accounts": "Профілі из акаунтув, котрі ся удалят",
|
||||||
"admin.impact_report.instance_followers": "Пудписникы, котрых стратят наші хосновачі",
|
"admin.impact_report.instance_followers": "Пудписникы, котрых стратят наші хосновачі",
|
||||||
|
@ -70,11 +78,77 @@
|
||||||
"admin.impact_report.title": "Вплыв цілком",
|
"admin.impact_report.title": "Вплыв цілком",
|
||||||
"alert.rate_limited.message": "Попробуйте зась по {retry_time, time, medium}.",
|
"alert.rate_limited.message": "Попробуйте зась по {retry_time, time, medium}.",
|
||||||
"alert.rate_limited.title": "Частота обмежена",
|
"alert.rate_limited.title": "Частота обмежена",
|
||||||
|
"alert.unexpected.message": "Стала ся нечекана хыба.",
|
||||||
|
"alert.unexpected.title": "Ийой!",
|
||||||
|
"announcement.announcement": "Голошіня",
|
||||||
|
"audio.hide": "Зпрятати звук",
|
||||||
|
"block_modal.remote_users_caveat": "Попросиме ґазду сервера {domain} честовати вашоє рішеня. Айбо не ґарантуєме повный соглас, бо даякі серверы можут брати блокованя по-инчакому. Публичні дописы годно быти видко незалоґованым хосновачам.",
|
||||||
|
"block_modal.show_less": "Указати менше",
|
||||||
|
"block_modal.show_more": "Указати бульше",
|
||||||
|
"block_modal.they_cant_mention": "Они не можут вас споминати авадь слідовати.",
|
||||||
|
"block_modal.they_cant_see_posts": "Они не можут видіти ваші публикації, тай наспак — вы йихні.",
|
||||||
|
"block_modal.they_will_know": "Они видят, ож сут заблоковані.",
|
||||||
|
"block_modal.title": "Заблоковати хосновача?",
|
||||||
|
"block_modal.you_wont_see_mentions": "Не будете видіти публикації тай споминкы сього хосновача.",
|
||||||
|
"boost_modal.combo": "Можете клынцнути {combo} другый раз обы сесе пропустити",
|
||||||
|
"bundle_column_error.copy_stacktrace": "Укопіровати звіт за хыбу",
|
||||||
|
"bundle_column_error.error.body": "Не годни сьме указати зажадану сторунку. Годно быти спозад хыбы у нашум сістемі, авадь проблемы зумісности бравзера.",
|
||||||
|
"bundle_column_error.error.title": "Ийой!",
|
||||||
|
"bundle_column_error.network.body": "Стала ся хыба як сьме пробовали напаровати сторунку. Годно ся йсе было стати спозад слабого споєня вашого інтернета, авадь сервера.",
|
||||||
|
"bundle_column_error.network.title": "Хыба споєня",
|
||||||
|
"bundle_column_error.retry": "Попробуйте зась",
|
||||||
"bundle_column_error.return": "Вернути ся на головну",
|
"bundle_column_error.return": "Вернути ся на головну",
|
||||||
"bundle_column_error.routing.body": "Не можеме найти сяку сторунку. Бизувні сьте, ож URL у адресному шорикови є добрый?",
|
"bundle_column_error.routing.body": "Не можеме найти сяку сторунку. Бизувні сьте, ож URL у адресному шорикови є добрый?",
|
||||||
"bundle_column_error.routing.title": "404",
|
"bundle_column_error.routing.title": "404",
|
||||||
"bundle_modal_error.close": "Заперти",
|
"bundle_modal_error.close": "Заперти",
|
||||||
"bundle_modal_error.message": "Штось ся показило, закидь сьме ладовали сись компонент.",
|
"bundle_modal_error.message": "Штось ся показило, закидь сьме ладовали сись компонент.",
|
||||||
"bundle_modal_error.retry": "Попробовати зась",
|
"bundle_modal_error.retry": "Попробовати зась",
|
||||||
"closed_registrations.other_server_instructions": "Mastodon є децентралізованов платформов, можете си учинити профіл и на другому серверови тай комуніковати из сим."
|
"closed_registrations.other_server_instructions": "Mastodon є децентралізованов платформов, можете си учинити профіл и на другому серверови тай комуніковати из сим.",
|
||||||
|
"closed_registrations_modal.description": "Раз не мож учинити профіл на {domain}, айбо не мусите мати профіл ипен на серверови {domain} обы хосновати Mastodon.",
|
||||||
|
"closed_registrations_modal.find_another_server": "Найти другый сервер",
|
||||||
|
"column.about": "За сайт",
|
||||||
|
"column.blocks": "Заблоковані хосновачі",
|
||||||
|
"column.bookmarks": "Усокоченоє",
|
||||||
|
"column.direct": "Шептаня",
|
||||||
|
"column.directory": "Никати профілі",
|
||||||
|
"column.domain_blocks": "Заблоковані домены",
|
||||||
|
"column.favourites": "Убраноє",
|
||||||
|
"column.follow_requests": "Запросы на пудписку",
|
||||||
|
"column.lists": "Исписы",
|
||||||
|
"column.mutes": "Стишені хосновачі",
|
||||||
|
"column.notifications": "Убвіщеня",
|
||||||
|
"column.pins": "Закріплені публикації",
|
||||||
|
"column_back_button.label": "Назад",
|
||||||
|
"column_header.hide_settings": "Спрятати штімованя",
|
||||||
|
"column_header.moveLeft_settings": "Посунути колонку до ліва",
|
||||||
|
"column_header.moveRight_settings": "Посунути колонку до права",
|
||||||
|
"column_header.pin": "Закріпити",
|
||||||
|
"column_header.show_settings": "Указати штімованя",
|
||||||
|
"column_header.unpin": "Удкріпити",
|
||||||
|
"column_subheading.settings": "Штімованя",
|
||||||
|
"compose.language.change": "Поміняти язык",
|
||||||
|
"compose.language.search": "Глядати языкы...",
|
||||||
|
"compose.published.body": "Пост опубликованый.",
|
||||||
|
"compose.saved.body": "Пост усокоченый.",
|
||||||
|
"compose_form.direct_message_warning_learn_more": "Читайте бульше",
|
||||||
|
"compose_form.encryption_warning": "Публикації на Mastodon не шіфрувут ся. Не шырьте чутливу інформацію через Mastodon.",
|
||||||
|
"compose_form.hashtag_warning": "Сись пост не буде ся появляти у исписови по гештеґови, бо вун не є публичный. Лишек публичні посты буде видко за гештеґом.",
|
||||||
|
"compose_form.lock_disclaimer": "Ваш профіл є {locked}. Хоть-тко може ся на вас пудписати, обы видїти ваші ексклузівні посты.",
|
||||||
|
"compose_form.lock_disclaimer.lock": "замкнено",
|
||||||
|
"compose_form.placeholder": "Што нового?",
|
||||||
|
"compose_form.poll.duration": "Трывалость убзвідованя",
|
||||||
|
"compose_form.poll.multiple": "Дакулько варіантув",
|
||||||
|
"compose_form.poll.option_placeholder": "Варіант {number}",
|
||||||
|
"compose_form.poll.single": "Уберіт єден",
|
||||||
|
"compose_form.poll.switch_to_multiple": "Змінити убзвідованя обы поволити дакулько варіантув",
|
||||||
|
"compose_form.poll.switch_to_single": "Змінити убзвідованя обы поволити лишек єден варіант",
|
||||||
|
"compose_form.poll.type": "Стіл",
|
||||||
|
"compose_form.publish": "Публикація",
|
||||||
|
"compose_form.publish_form": "Нова публикація",
|
||||||
|
"compose_form.reply": "Удповідь",
|
||||||
|
"copypaste.copy_to_clipboard": "Копіровати у памнять",
|
||||||
|
"directory.recently_active": "Недавно актівні",
|
||||||
|
"disabled_account_banner.account_settings": "Штімованя акаунта",
|
||||||
|
"disabled_account_banner.text": "Ваш акаунт {disabledAccount} раз є неактівный.",
|
||||||
|
"dismissable_banner.community_timeline": "Туй сут недавні публикації уд профілув на серверови {domain}."
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
"account.mute": "@{name} නිහඬ කරන්න",
|
"account.mute": "@{name} නිහඬ කරන්න",
|
||||||
"account.mute_short": "නිහඬ",
|
"account.mute_short": "නිහඬ",
|
||||||
"account.muted": "නිහඬ කළා",
|
"account.muted": "නිහඬ කළා",
|
||||||
|
"account.open_original_page": "මුල් පිටුව අරින්න",
|
||||||
"account.posts": "ලිපි",
|
"account.posts": "ලිපි",
|
||||||
"account.posts_with_replies": "ලිපි සහ පිළිතුරු",
|
"account.posts_with_replies": "ලිපි සහ පිළිතුරු",
|
||||||
"account.report": "@{name} වාර්තා කරන්න",
|
"account.report": "@{name} වාර්තා කරන්න",
|
||||||
|
@ -51,6 +52,10 @@
|
||||||
"alert.unexpected.title": "අපොයි!",
|
"alert.unexpected.title": "අපොයි!",
|
||||||
"announcement.announcement": "නිවේදනය",
|
"announcement.announcement": "නිවේදනය",
|
||||||
"audio.hide": "හඬපටය සඟවන්න",
|
"audio.hide": "හඬපටය සඟවන්න",
|
||||||
|
"block_modal.show_less": "අඩුවෙන් පෙන්වන්න",
|
||||||
|
"block_modal.show_more": "තව පෙන්වන්න",
|
||||||
|
"block_modal.they_will_know": "අවහිර කළ බව දකිනු ඇත.",
|
||||||
|
"block_modal.title": "අවහිර කරන්නද?",
|
||||||
"boost_modal.combo": "ඊළඟ වතාවේ මෙය මඟ හැරීමට {combo} එබීමට හැකිය",
|
"boost_modal.combo": "ඊළඟ වතාවේ මෙය මඟ හැරීමට {combo} එබීමට හැකිය",
|
||||||
"bundle_column_error.copy_stacktrace": "දෝෂ වාර්තාවේ පිටපතක්",
|
"bundle_column_error.copy_stacktrace": "දෝෂ වාර්තාවේ පිටපතක්",
|
||||||
"bundle_column_error.error.title": "අපොයි!",
|
"bundle_column_error.error.title": "අපොයි!",
|
||||||
|
@ -100,10 +105,13 @@
|
||||||
"compose_form.lock_disclaimer.lock": "අගුළු දමා ඇත",
|
"compose_form.lock_disclaimer.lock": "අගුළු දමා ඇත",
|
||||||
"compose_form.placeholder": "ඔබගේ සිතුවිලි මොනවාද?",
|
"compose_form.placeholder": "ඔබගේ සිතුවිලි මොනවාද?",
|
||||||
"compose_form.poll.duration": "මත විමසීමේ කාලය",
|
"compose_form.poll.duration": "මත විමසීමේ කාලය",
|
||||||
|
"compose_form.poll.option_placeholder": "විකල්පය {number}",
|
||||||
"compose_form.poll.switch_to_multiple": "තේරීම් කිහිපයකට මත විමසුම වෙනස් කරන්න",
|
"compose_form.poll.switch_to_multiple": "තේරීම් කිහිපයකට මත විමසුම වෙනස් කරන්න",
|
||||||
"compose_form.poll.switch_to_single": "තනි තේරීමකට මත විමසුම වෙනස් කරන්න",
|
"compose_form.poll.switch_to_single": "තනි තේරීමකට මත විමසුම වෙනස් කරන්න",
|
||||||
|
"compose_form.poll.type": "ශෛලිය",
|
||||||
"compose_form.publish": "ප්රකාශනය",
|
"compose_form.publish": "ප්රකාශනය",
|
||||||
"compose_form.publish_form": "නව ලිපිය",
|
"compose_form.publish_form": "නව ලිපිය",
|
||||||
|
"compose_form.reply": "පිළිතුරු",
|
||||||
"compose_form.spoiler.marked": "අන්තර්ගත අවවාදය ඉවත් කරන්න",
|
"compose_form.spoiler.marked": "අන්තර්ගත අවවාදය ඉවත් කරන්න",
|
||||||
"compose_form.spoiler.unmarked": "අන්තර්ගත අවවාදයක් එක් කරන්න",
|
"compose_form.spoiler.unmarked": "අන්තර්ගත අවවාදයක් එක් කරන්න",
|
||||||
"confirmation_modal.cancel": "අවලංගු",
|
"confirmation_modal.cancel": "අවලංගු",
|
||||||
|
@ -123,6 +131,7 @@
|
||||||
"conversation.mark_as_read": "කියවූ බව යොදන්න",
|
"conversation.mark_as_read": "කියවූ බව යොදන්න",
|
||||||
"conversation.open": "සංවාදය බලන්න",
|
"conversation.open": "සංවාදය බලන්න",
|
||||||
"conversation.with": "{names} සමඟ",
|
"conversation.with": "{names} සමඟ",
|
||||||
|
"copy_icon_button.copied": "පසුරුපුවරුවට පිටපත් විය",
|
||||||
"copypaste.copied": "පිටපත් විය",
|
"copypaste.copied": "පිටපත් විය",
|
||||||
"copypaste.copy_to_clipboard": "පසුරුපුවරුවට පිටපතක්",
|
"copypaste.copy_to_clipboard": "පසුරුපුවරුවට පිටපතක්",
|
||||||
"directory.federated": "දන්නා ෆෙඩිවර්ස් වෙතින්",
|
"directory.federated": "දන්නා ෆෙඩිවර්ස් වෙතින්",
|
||||||
|
@ -130,6 +139,9 @@
|
||||||
"directory.new_arrivals": "නව පැමිණීම්",
|
"directory.new_arrivals": "නව පැමිණීම්",
|
||||||
"directory.recently_active": "මෑත දී සක්රියයි",
|
"directory.recently_active": "මෑත දී සක්රියයි",
|
||||||
"disabled_account_banner.account_settings": "ගිණුමේ සැකසුම්",
|
"disabled_account_banner.account_settings": "ගිණුමේ සැකසුම්",
|
||||||
|
"dismissable_banner.dismiss": "ඉවතලන්න",
|
||||||
|
"domain_pill.server": "සේවාදායකය",
|
||||||
|
"domain_pill.username": "පරිශ්රීලක නාමය",
|
||||||
"embed.instructions": "පහත කේතය පිටපත් කිරීමෙන් මෙම ලිපිය ඔබගේ අඩවියට කාවද්දන්න.",
|
"embed.instructions": "පහත කේතය පිටපත් කිරීමෙන් මෙම ලිපිය ඔබගේ අඩවියට කාවද්දන්න.",
|
||||||
"embed.preview": "මෙන්න එය පෙනෙන අන්දම:",
|
"embed.preview": "මෙන්න එය පෙනෙන අන්දම:",
|
||||||
"emoji_button.activity": "ක්රියාකාරකම",
|
"emoji_button.activity": "ක්රියාකාරකම",
|
||||||
|
@ -178,9 +190,13 @@
|
||||||
"filter_modal.select_filter.search": "සොයන්න හෝ සාදන්න",
|
"filter_modal.select_filter.search": "සොයන්න හෝ සාදන්න",
|
||||||
"filter_modal.select_filter.title": "මෙම ලිපිය පෙරන්න",
|
"filter_modal.select_filter.title": "මෙම ලිපිය පෙරන්න",
|
||||||
"filter_modal.title.status": "ලිපියක් පෙරන්න",
|
"filter_modal.title.status": "ලිපියක් පෙරන්න",
|
||||||
|
"filtered_notifications_banner.title": "පෙරූ දැනුම්දීම්",
|
||||||
|
"firehose.all": "සියල්ල",
|
||||||
"firehose.local": "මෙම සේවාදායකය",
|
"firehose.local": "මෙම සේවාදායකය",
|
||||||
"firehose.remote": "වෙනත් සේවාදායක",
|
"firehose.remote": "වෙනත් සේවාදායක",
|
||||||
"follow_request.reject": "ප්රතික්ෂේප",
|
"follow_request.reject": "ප්රතික්ෂේප",
|
||||||
|
"follow_suggestions.dismiss": "නැවත පෙන්වන්න එපා",
|
||||||
|
"follow_suggestions.view_all": "සියල්ල බලන්න",
|
||||||
"footer.about": "පිළිබඳව",
|
"footer.about": "පිළිබඳව",
|
||||||
"footer.directory": "පැතිකඩ නාමාවලිය",
|
"footer.directory": "පැතිකඩ නාමාවලිය",
|
||||||
"footer.get_app": "යෙදුම ගන්න",
|
"footer.get_app": "යෙදුම ගන්න",
|
||||||
|
@ -202,6 +218,7 @@
|
||||||
"home.pending_critical_update.link": "යාවත්කාල බලන්න",
|
"home.pending_critical_update.link": "යාවත්කාල බලන්න",
|
||||||
"home.show_announcements": "නිවේදන පෙන්වන්න",
|
"home.show_announcements": "නිවේදන පෙන්වන්න",
|
||||||
"interaction_modal.login.action": "මුලට ගෙනයන්න",
|
"interaction_modal.login.action": "මුලට ගෙනයන්න",
|
||||||
|
"interaction_modal.on_another_server": "වෙනත් සේවාදායකයක",
|
||||||
"interaction_modal.on_this_server": "මෙම සේවාදායකයෙහි",
|
"interaction_modal.on_this_server": "මෙම සේවාදායකයෙහි",
|
||||||
"interaction_modal.title.favourite": "{name}ගේ ලිපිය ප්රිය කරන්න",
|
"interaction_modal.title.favourite": "{name}ගේ ලිපිය ප්රිය කරන්න",
|
||||||
"interaction_modal.title.follow": "{name} අනුගමනය",
|
"interaction_modal.title.follow": "{name} අනුගමනය",
|
||||||
|
|
|
@ -170,6 +170,8 @@
|
||||||
"domain_block_modal.block": "o weka e ma",
|
"domain_block_modal.block": "o weka e ma",
|
||||||
"domain_block_modal.you_will_lose_followers": "ma ni la jan alasa ale sina li weka",
|
"domain_block_modal.you_will_lose_followers": "ma ni la jan alasa ale sina li weka",
|
||||||
"domain_block_modal.you_wont_see_posts": "sina ken ala lukin e toki tan jan pi ma ni",
|
"domain_block_modal.you_wont_see_posts": "sina ken ala lukin e toki tan jan pi ma ni",
|
||||||
|
"domain_pill.server": "ma",
|
||||||
|
"domain_pill.username": "nimi jan",
|
||||||
"embed.preview": "ni li jo e sitelen ni:",
|
"embed.preview": "ni li jo e sitelen ni:",
|
||||||
"emoji_button.activity": "musi",
|
"emoji_button.activity": "musi",
|
||||||
"emoji_button.flags": "len ma",
|
"emoji_button.flags": "len ma",
|
||||||
|
@ -274,6 +276,7 @@
|
||||||
"load_pending": "{count, plural, other {ijo sin #}}",
|
"load_pending": "{count, plural, other {ijo sin #}}",
|
||||||
"loading_indicator.label": "ni li kama…",
|
"loading_indicator.label": "ni li kama…",
|
||||||
"media_gallery.toggle_visible": "{number, plural, other {o len e sitelen}}",
|
"media_gallery.toggle_visible": "{number, plural, other {o len e sitelen}}",
|
||||||
|
"mute_modal.title": "sina wile ala wile kute e jan ni?",
|
||||||
"navigation_bar.about": "sona",
|
"navigation_bar.about": "sona",
|
||||||
"navigation_bar.blocks": "jan weka",
|
"navigation_bar.blocks": "jan weka",
|
||||||
"navigation_bar.compose": "o pali e toki sin",
|
"navigation_bar.compose": "o pali e toki sin",
|
||||||
|
@ -290,24 +293,33 @@
|
||||||
"notification.follow": " {name} li kute e sina",
|
"notification.follow": " {name} li kute e sina",
|
||||||
"notification.follow_request": "{name} li wile kute e sina",
|
"notification.follow_request": "{name} li wile kute e sina",
|
||||||
"notification.mention": "jan {name} li toki e sina",
|
"notification.mention": "jan {name} li toki e sina",
|
||||||
|
"notification.moderation-warning.learn_more": "o kama sona e ijo ante",
|
||||||
"notification.poll": "sina pana lon pana la pana ni li pini",
|
"notification.poll": "sina pana lon pana la pana ni li pini",
|
||||||
"notification.reblog": "{name} li wawa e toki sina",
|
"notification.reblog": "{name} li wawa e toki sina",
|
||||||
"notification.status": "{name} li toki",
|
"notification.status": "{name} li toki",
|
||||||
"notification.update": "{name} li ante e toki",
|
"notification.update": "{name} li ante e toki",
|
||||||
|
"notification_requests.dismiss": "o weka",
|
||||||
"notifications.column_settings.favourite": "ijo pona:",
|
"notifications.column_settings.favourite": "ijo pona:",
|
||||||
"notifications.column_settings.follow": "jan kute sin",
|
"notifications.column_settings.follow": "jan kute sin",
|
||||||
"notifications.column_settings.poll": "pana lon pana ni:",
|
"notifications.column_settings.poll": "pana lon pana ni:",
|
||||||
"notifications.column_settings.reblog": "wawa:",
|
"notifications.column_settings.reblog": "wawa:",
|
||||||
|
"notifications.column_settings.status": "toki sin:",
|
||||||
"notifications.column_settings.update": "ante toki:",
|
"notifications.column_settings.update": "ante toki:",
|
||||||
"notifications.filter.all": "ale",
|
"notifications.filter.all": "ale",
|
||||||
|
"notifications.filter.boosts": "wawa",
|
||||||
"notifications.filter.favourites": "ijo pona",
|
"notifications.filter.favourites": "ijo pona",
|
||||||
|
"notifications.filter.mentions": "toki pi toki sina",
|
||||||
"notifications.filter.polls": "pana lon pana ni",
|
"notifications.filter.polls": "pana lon pana ni",
|
||||||
|
"onboarding.action.back": "o tawa monsi",
|
||||||
|
"onboarding.actions.back": "o tawa monsi",
|
||||||
"onboarding.compose.template": "toki a, #Mastodon o!",
|
"onboarding.compose.template": "toki a, #Mastodon o!",
|
||||||
"onboarding.profile.display_name": "nimi tawa jan ante",
|
"onboarding.profile.display_name": "nimi tawa jan ante",
|
||||||
|
"onboarding.profile.note": "sona sina",
|
||||||
"onboarding.share.lead": "o toki lon nasin Masoton pi alasa sina tawa jan",
|
"onboarding.share.lead": "o toki lon nasin Masoton pi alasa sina tawa jan",
|
||||||
"onboarding.share.message": "ilo #Mastodon la mi jan {username} a! o kute e mi lon ni: {url}",
|
"onboarding.share.message": "ilo #Mastodon la mi jan {username} a! o kute e mi lon ni: {url}",
|
||||||
"onboarding.start.title": "sina o kama pona a!",
|
"onboarding.start.title": "sina o kama pona a!",
|
||||||
"onboarding.tips.migration": "<strong>sina sona ala sona e ni?</strong> tenpo kama la sina pilin ike tawa ma {domain} la, sina ken tawa ma ante lon ilo Masoton. jan li kute e sina la jan ni li awen kute e sina. kin la sina ken lawa e ma pi sina taso a!",
|
"onboarding.tips.migration": "<strong>sina sona ala sona e ni?</strong> tenpo kama la sina pilin ike tawa ma {domain} la, sina ken tawa ma ante lon ilo Masoton. jan li kute e sina la jan ni li awen kute e sina. kin la sina ken lawa e ma pi sina taso a!",
|
||||||
|
"poll.closed": "ona li pini",
|
||||||
"poll.total_people": "{count, plural, other {jan #}}",
|
"poll.total_people": "{count, plural, other {jan #}}",
|
||||||
"poll.total_votes": "{count, plural, other {pana #}}",
|
"poll.total_votes": "{count, plural, other {pana #}}",
|
||||||
"poll.vote": "o pana",
|
"poll.vote": "o pana",
|
||||||
|
@ -315,9 +327,15 @@
|
||||||
"poll.votes": "{votes, plural, other {pana #}}",
|
"poll.votes": "{votes, plural, other {pana #}}",
|
||||||
"privacy.direct.long": "jan ale lon toki",
|
"privacy.direct.long": "jan ale lon toki",
|
||||||
"privacy.public.short": "tawa ale",
|
"privacy.public.short": "tawa ale",
|
||||||
|
"regeneration_indicator.label": "ni li kama…",
|
||||||
|
"relative_time.days": "{number}d",
|
||||||
"relative_time.full.just_now": "tenpo ni",
|
"relative_time.full.just_now": "tenpo ni",
|
||||||
|
"relative_time.hours": "{number}h",
|
||||||
"relative_time.just_now": "tenpo ni",
|
"relative_time.just_now": "tenpo ni",
|
||||||
|
"relative_time.minutes": "{number}m",
|
||||||
|
"relative_time.seconds": "{number}s",
|
||||||
"relative_time.today": "tenpo suno ni",
|
"relative_time.today": "tenpo suno ni",
|
||||||
|
"reply_indicator.cancel": "o ala",
|
||||||
"report.block": "o weka e jan",
|
"report.block": "o weka e jan",
|
||||||
"report.block_explanation": "sina kama lukin ala e toki ona. ona li kama ala ken lukin e toki sina li kama ala ken kute e sina. ona li ken sona e kama ni.",
|
"report.block_explanation": "sina kama lukin ala e toki ona. ona li kama ala ken lukin e toki sina li kama ala ken kute e sina. ona li ken sona e kama ni.",
|
||||||
"report.categories.other": "ante",
|
"report.categories.other": "ante",
|
||||||
|
@ -336,6 +354,7 @@
|
||||||
"report.thanks.title": "sina wile ala lukin e ni anu seme?",
|
"report.thanks.title": "sina wile ala lukin e ni anu seme?",
|
||||||
"report.unfollow": "o pini kute e {name}",
|
"report.unfollow": "o pini kute e {name}",
|
||||||
"report_notification.categories.legal": "ike tawa nasin lawa",
|
"report_notification.categories.legal": "ike tawa nasin lawa",
|
||||||
|
"report_notification.categories.other": "ante",
|
||||||
"search.placeholder": "o alasa",
|
"search.placeholder": "o alasa",
|
||||||
"search.quick_action.go_to_account": "o tawa lipu jan {x}",
|
"search.quick_action.go_to_account": "o tawa lipu jan {x}",
|
||||||
"search_popout.language_code": "nimi toki kepeken nasin ISO",
|
"search_popout.language_code": "nimi toki kepeken nasin ISO",
|
||||||
|
@ -343,6 +362,7 @@
|
||||||
"search_results.see_all": "ale",
|
"search_results.see_all": "ale",
|
||||||
"search_results.statuses": "toki",
|
"search_results.statuses": "toki",
|
||||||
"search_results.title": "o alasa e {q}",
|
"search_results.title": "o alasa e {q}",
|
||||||
|
"server_banner.administered_by": "jan lawa:",
|
||||||
"status.block": "o weka e @{name}",
|
"status.block": "o weka e @{name}",
|
||||||
"status.cancel_reblog_private": "o pini e pana",
|
"status.cancel_reblog_private": "o pini e pana",
|
||||||
"status.delete": "o weka",
|
"status.delete": "o weka",
|
||||||
|
@ -356,12 +376,14 @@
|
||||||
"status.media.open": "o open",
|
"status.media.open": "o open",
|
||||||
"status.media.show": "o lukin",
|
"status.media.show": "o lukin",
|
||||||
"status.media_hidden": "sitelen li len",
|
"status.media_hidden": "sitelen li len",
|
||||||
|
"status.more": "kin",
|
||||||
"status.mute": "o len e @{name}",
|
"status.mute": "o len e @{name}",
|
||||||
"status.mute_conversation": "o kute ala e ijo pi toki ni",
|
"status.mute_conversation": "o kute ala e ijo pi toki ni",
|
||||||
"status.pin": "o sewi lon lipu sina",
|
"status.pin": "o sewi lon lipu sina",
|
||||||
"status.pinned": "toki sewi",
|
"status.pinned": "toki sewi",
|
||||||
"status.reblog": "o wawa",
|
"status.reblog": "o wawa",
|
||||||
"status.share": "o pana tawa ante",
|
"status.share": "o pana tawa ante",
|
||||||
|
"status.show_filter_reason": "o lukin",
|
||||||
"status.show_less": "o lili e ni",
|
"status.show_less": "o lili e ni",
|
||||||
"status.show_less_all": "o lili e ale",
|
"status.show_less_all": "o lili e ale",
|
||||||
"status.show_more": "o suli e ni",
|
"status.show_more": "o suli e ni",
|
||||||
|
@ -378,7 +400,9 @@
|
||||||
"timeline_hint.resources.follows": "jan lukin",
|
"timeline_hint.resources.follows": "jan lukin",
|
||||||
"timeline_hint.resources.statuses": "ijo pi tenpo suli",
|
"timeline_hint.resources.statuses": "ijo pi tenpo suli",
|
||||||
"trends.trending_now": "jan mute li toki",
|
"trends.trending_now": "jan mute li toki",
|
||||||
|
"units.short.billion": "{count}B",
|
||||||
"units.short.million": "{count}AAA",
|
"units.short.million": "{count}AAA",
|
||||||
|
"units.short.thousand": "{count}K",
|
||||||
"upload_button.label": "o pana e sitelen anu kalama",
|
"upload_button.label": "o pana e sitelen anu kalama",
|
||||||
"upload_error.limit": "ilo li ken ala e suli pi ijo ni.",
|
"upload_error.limit": "ilo li ken ala e suli pi ijo ni.",
|
||||||
"upload_form.audio_description": "o toki e ijo kute tawa jan pi kute ala, tawa jan pi kute lili",
|
"upload_form.audio_description": "o toki e ijo kute tawa jan pi kute ala, tawa jan pi kute lili",
|
||||||
|
@ -386,6 +410,7 @@
|
||||||
"upload_form.edit": "o ante",
|
"upload_form.edit": "o ante",
|
||||||
"upload_form.thumbnail": "o ante e sitelen lili",
|
"upload_form.thumbnail": "o ante e sitelen lili",
|
||||||
"upload_form.video_description": "o toki e ijo kute tawa jan pi kute ala, tawa jan pi kute lili, e ijo lukin tawa jan pi lukin ala, tawa jan pi lukin lili",
|
"upload_form.video_description": "o toki e ijo kute tawa jan pi kute ala, tawa jan pi kute lili, e ijo lukin tawa jan pi lukin ala, tawa jan pi lukin lili",
|
||||||
|
"upload_modal.analyzing_picture": "ilo li lukin e sitelen...",
|
||||||
"upload_modal.choose_image": "o wile e sitelen",
|
"upload_modal.choose_image": "o wile e sitelen",
|
||||||
"upload_modal.description_placeholder": "mi pu jaki tan soweli",
|
"upload_modal.description_placeholder": "mi pu jaki tan soweli",
|
||||||
"upload_modal.detect_text": "ilo o alasa e nimi tan sitelen",
|
"upload_modal.detect_text": "ilo o alasa e nimi tan sitelen",
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
"account.featured_tags.last_status_never": "Немає дописів",
|
"account.featured_tags.last_status_never": "Немає дописів",
|
||||||
"account.featured_tags.title": "{name} виділяє хештеґи",
|
"account.featured_tags.title": "{name} виділяє хештеґи",
|
||||||
"account.follow": "Підписатися",
|
"account.follow": "Підписатися",
|
||||||
"account.follow_back": "Підписатися взаємно",
|
"account.follow_back": "Стежити також",
|
||||||
"account.followers": "Підписники",
|
"account.followers": "Підписники",
|
||||||
"account.followers.empty": "Ніхто ще не підписаний на цього користувача.",
|
"account.followers.empty": "Ніхто ще не підписаний на цього користувача.",
|
||||||
"account.followers_counter": "{count, plural, one {{counter} підписник} few {{counter} підписники} many {{counter} підписників} other {{counter} підписники}}",
|
"account.followers_counter": "{count, plural, one {{counter} підписник} few {{counter} підписники} many {{counter} підписників} other {{counter} підписники}}",
|
||||||
|
@ -217,18 +217,18 @@
|
||||||
"domain_block_modal.title": "Заблокувати домен?",
|
"domain_block_modal.title": "Заблокувати домен?",
|
||||||
"domain_block_modal.you_will_lose_followers": "Усіх ваших підписників з цього сервера буде вилучено.",
|
"domain_block_modal.you_will_lose_followers": "Усіх ваших підписників з цього сервера буде вилучено.",
|
||||||
"domain_block_modal.you_wont_see_posts": "Ви не бачитимете дописів і сповіщень від користувачів на цьому сервері.",
|
"domain_block_modal.you_wont_see_posts": "Ви не бачитимете дописів і сповіщень від користувачів на цьому сервері.",
|
||||||
"domain_pill.activitypub_lets_connect": "Це дозволяє вам спілкуватися та взаємодіяти з людьми не лише на Mastodon, але й у різних соціальних додатках.",
|
"domain_pill.activitypub_lets_connect": "Це дозволяє вам спілкуватися та взаємодіяти з людьми не лише на Mastodon, але й у різних соціальних застосунках.",
|
||||||
"domain_pill.activitypub_like_language": "ActivityPub - це як мова, якою Мастодонт розмовляє з іншими соціальними мережами.",
|
"domain_pill.activitypub_like_language": "ActivityPub - це як мова, якою Mastodon розмовляє з іншими соціальними мережами.",
|
||||||
"domain_pill.server": "Сервер",
|
"domain_pill.server": "Сервер",
|
||||||
"domain_pill.their_handle": "Їхня адреса:",
|
"domain_pill.their_handle": "Їхня адреса:",
|
||||||
"domain_pill.their_server": "Їхній цифровий дім, де живуть усі їхні пости.",
|
"domain_pill.their_server": "Їхній цифровий дім, де живуть усі їхні дописи.",
|
||||||
"domain_pill.their_username": "Їхній унікальний ідентифікатор на їхньому сервері. Ви можете знайти користувачів з однаковими іменами на різних серверах.",
|
"domain_pill.their_username": "Їхній унікальний ідентифікатор на їхньому сервері. Ви можете знайти користувачів з однаковими іменами на різних серверах.",
|
||||||
"domain_pill.username": "Ім'я користувача",
|
"domain_pill.username": "Ім'я користувача",
|
||||||
"domain_pill.whats_in_a_handle": "Що є в адресі?",
|
"domain_pill.whats_in_a_handle": "Що є в адресі?",
|
||||||
"domain_pill.who_they_are": "Оскільки дескриптори вказують, хто це і де він знаходиться, ви можете взаємодіяти з людьми через соціальну мережу платформ на основі <button>ActivityPub</button>.",
|
"domain_pill.who_they_are": "Оскільки дескриптори вказують, хто це і де він знаходиться, ви можете взаємодіяти з людьми через соціальну мережу платформ на основі <button>ActivityPub</button>.",
|
||||||
"domain_pill.who_you_are": "Оскільки ваш нікнейм вказує, хто ви та де ви, люди можуть взаємодіяти з вами через соціальну мережу платформ на основі <button>ActivityPub</button>.",
|
"domain_pill.who_you_are": "Оскільки ваш нікнейм вказує, хто ви та де ви, люди можуть взаємодіяти з вами через соціальну мережу платформ на основі <button>ActivityPub</button>.",
|
||||||
"domain_pill.your_handle": "Ваша адреса:",
|
"domain_pill.your_handle": "Ваша адреса:",
|
||||||
"domain_pill.your_server": "Ваш цифровий дім, де живуть усі ваші публікації. Не подобається цей? Перенесіть сервери в будь-який час і залучайте своїх підписників.",
|
"domain_pill.your_server": "Ваш цифровий дім, де живуть усі ваші дописи. Не подобається цей? Перенесіть сервери в будь-який час і залучайте своїх підписників.",
|
||||||
"domain_pill.your_username": "Ваш унікальний ідентифікатор на цьому сервері. Ви можете знайти користувачів з однаковими іменами на різних серверах.",
|
"domain_pill.your_username": "Ваш унікальний ідентифікатор на цьому сервері. Ви можете знайти користувачів з однаковими іменами на різних серверах.",
|
||||||
"embed.instructions": "Вбудуйте цей допис до вашого вебсайту, скопіювавши код нижче.",
|
"embed.instructions": "Вбудуйте цей допис до вашого вебсайту, скопіювавши код нижче.",
|
||||||
"embed.preview": "Ось який вигляд це матиме:",
|
"embed.preview": "Ось який вигляд це матиме:",
|
||||||
|
@ -489,9 +489,9 @@
|
||||||
"notification.reblog": "{name} поширює ваш допис",
|
"notification.reblog": "{name} поширює ваш допис",
|
||||||
"notification.relationships_severance_event": "Втрачено з'єднання з {name}",
|
"notification.relationships_severance_event": "Втрачено з'єднання з {name}",
|
||||||
"notification.relationships_severance_event.account_suspension": "Адміністратор з {from} призупинив {target}, що означає, що ви більше не можете отримувати оновлення від них або взаємодіяти з ними.",
|
"notification.relationships_severance_event.account_suspension": "Адміністратор з {from} призупинив {target}, що означає, що ви більше не можете отримувати оновлення від них або взаємодіяти з ними.",
|
||||||
"notification.relationships_severance_event.domain_block": "Адміністратор з {from} заблокував {target}, включаючи {followersCount} ваших підписників і {{followingCount, plural, one {# account} other {# accounts}}, на які ви підписані.",
|
"notification.relationships_severance_event.domain_block": "Адміністратор з {from} заблокував {target}, включаючи {followersCount} ваших підписників і {followingCount , plural, one {# обліковий запис} few {# облікові записи} many {# облікових записів} other {# обліковий запис}}, на які ви підписані.",
|
||||||
"notification.relationships_severance_event.learn_more": "Дізнатися більше",
|
"notification.relationships_severance_event.learn_more": "Докладніше",
|
||||||
"notification.relationships_severance_event.user_domain_block": "Ви заблокували {target}, видаливши {followersCount} ваших підписників і {followingCount, plural, one {# account} other {# accounts}}, за якими ви стежите.",
|
"notification.relationships_severance_event.user_domain_block": "Ви заблокували {target}, видаливши {followersCount} ваших підписників і {followingCount, plural, one {# обліковий запис} few {# облікові записи} many {# облікових записів} other {# обліковий запис}}, за якими ви стежите.",
|
||||||
"notification.status": "{name} щойно дописує",
|
"notification.status": "{name} щойно дописує",
|
||||||
"notification.update": "{name} змінює допис",
|
"notification.update": "{name} змінює допис",
|
||||||
"notification_requests.accept": "Прийняти",
|
"notification_requests.accept": "Прийняти",
|
||||||
|
|
|
@ -113,7 +113,7 @@
|
||||||
"closed_registrations.other_server_instructions": "因為 Mastodon 是去中心化的,所以您也能於其他伺服器上建立帳號,並仍然與這個伺服器互動。",
|
"closed_registrations.other_server_instructions": "因為 Mastodon 是去中心化的,所以您也能於其他伺服器上建立帳號,並仍然與這個伺服器互動。",
|
||||||
"closed_registrations_modal.description": "目前無法於 {domain} 建立新帳號,但也請別忘了,您並不一定需要有 {domain} 伺服器的帳號,也能使用 Mastodon。",
|
"closed_registrations_modal.description": "目前無法於 {domain} 建立新帳號,但也請別忘了,您並不一定需要有 {domain} 伺服器的帳號,也能使用 Mastodon。",
|
||||||
"closed_registrations_modal.find_another_server": "尋找另一個伺服器",
|
"closed_registrations_modal.find_another_server": "尋找另一個伺服器",
|
||||||
"closed_registrations_modal.preamble": "Mastodon 是去中心化的,所以無論您於哪個伺服器新增帳號,都可以與此伺服器上的任何人跟隨及互動。您甚至能自行架設一個自己的伺服器!",
|
"closed_registrations_modal.preamble": "Mastodon 是去中心化的,所以無論您於哪個伺服器新增帳號,都可以與此伺服器上的任何人跟隨及互動。您甚至能自行架設自己的伺服器!",
|
||||||
"closed_registrations_modal.title": "註冊 Mastodon",
|
"closed_registrations_modal.title": "註冊 Mastodon",
|
||||||
"column.about": "關於",
|
"column.about": "關於",
|
||||||
"column.blocks": "已封鎖的使用者",
|
"column.blocks": "已封鎖的使用者",
|
||||||
|
@ -271,7 +271,7 @@
|
||||||
"empty_column.public": "這裡什麼都沒有!嘗試寫些公開的嘟文,或者跟隨其他伺服器的使用者後,就會有嘟文出現了",
|
"empty_column.public": "這裡什麼都沒有!嘗試寫些公開的嘟文,或者跟隨其他伺服器的使用者後,就會有嘟文出現了",
|
||||||
"error.unexpected_crash.explanation": "由於發生系統故障或瀏覽器相容性問題,無法正常顯示此頁面。",
|
"error.unexpected_crash.explanation": "由於發生系統故障或瀏覽器相容性問題,無法正常顯示此頁面。",
|
||||||
"error.unexpected_crash.explanation_addons": "此頁面無法被正常顯示,這可能是由瀏覽器附加元件或網頁自動翻譯工具造成的。",
|
"error.unexpected_crash.explanation_addons": "此頁面無法被正常顯示,這可能是由瀏覽器附加元件或網頁自動翻譯工具造成的。",
|
||||||
"error.unexpected_crash.next_steps": "請嘗試重新整理頁面。如果狀況沒有改善,您可以使用不同的瀏覽器或應用程式來檢視來使用 Mastodon。",
|
"error.unexpected_crash.next_steps": "請嘗試重新整理頁面。如果狀況沒有改善,您可以使用不同的瀏覽器或應用程式以檢視來使用 Mastodon。",
|
||||||
"error.unexpected_crash.next_steps_addons": "請嘗試關閉它們然後重新整理頁面。如果狀況沒有改善,您可以使用不同的瀏覽器或應用程式來檢視來使用 Mastodon。",
|
"error.unexpected_crash.next_steps_addons": "請嘗試關閉它們然後重新整理頁面。如果狀況沒有改善,您可以使用不同的瀏覽器或應用程式來檢視來使用 Mastodon。",
|
||||||
"errors.unexpected_crash.copy_stacktrace": "複製 stacktrace 到剪貼簿",
|
"errors.unexpected_crash.copy_stacktrace": "複製 stacktrace 到剪貼簿",
|
||||||
"errors.unexpected_crash.report_issue": "回報問題",
|
"errors.unexpected_crash.report_issue": "回報問題",
|
||||||
|
@ -356,7 +356,7 @@
|
||||||
"home.show_announcements": "顯示公告",
|
"home.show_announcements": "顯示公告",
|
||||||
"interaction_modal.description.favourite": "若於 Mastodon 上有個帳號,您可以將此嘟文加入最愛使作者知道您欣賞它且將它儲存下來。",
|
"interaction_modal.description.favourite": "若於 Mastodon 上有個帳號,您可以將此嘟文加入最愛使作者知道您欣賞它且將它儲存下來。",
|
||||||
"interaction_modal.description.follow": "若於 Mastodon 上有個帳號,您可以跟隨 {name} 以於首頁時間軸接收他們的嘟文。",
|
"interaction_modal.description.follow": "若於 Mastodon 上有個帳號,您可以跟隨 {name} 以於首頁時間軸接收他們的嘟文。",
|
||||||
"interaction_modal.description.reblog": "若於 Mastodon 上有個帳號,您可以轉嘟此嘟文以分享給您的跟隨者們。",
|
"interaction_modal.description.reblog": "若於 Mastodon 上有個帳號,您可以轉嘟此嘟文以向您的跟隨者們分享。",
|
||||||
"interaction_modal.description.reply": "若於 Mastodon 上有個帳號,您可以回覆此嘟文。",
|
"interaction_modal.description.reply": "若於 Mastodon 上有個帳號,您可以回覆此嘟文。",
|
||||||
"interaction_modal.login.action": "返回首頁",
|
"interaction_modal.login.action": "返回首頁",
|
||||||
"interaction_modal.login.prompt": "您帳號所屬伺服器之網域,例如:mastodon.social",
|
"interaction_modal.login.prompt": "您帳號所屬伺服器之網域,例如:mastodon.social",
|
||||||
|
@ -552,7 +552,7 @@
|
||||||
"onboarding.follows.lead": "您的首頁時間軸是 Mastodon 的核心體驗。若您跟隨更多人,它將會變得更活躍有趣。這些個人檔案也許是個好起點,您可以隨時取消跟隨他們!",
|
"onboarding.follows.lead": "您的首頁時間軸是 Mastodon 的核心體驗。若您跟隨更多人,它將會變得更活躍有趣。這些個人檔案也許是個好起點,您可以隨時取消跟隨他們!",
|
||||||
"onboarding.follows.title": "客製化您的首頁時間軸",
|
"onboarding.follows.title": "客製化您的首頁時間軸",
|
||||||
"onboarding.profile.discoverable": "使我的個人檔案可以被找到",
|
"onboarding.profile.discoverable": "使我的個人檔案可以被找到",
|
||||||
"onboarding.profile.discoverable_hint": "當您於 Mastodon 上選擇加入可發現性時,您的嘟文可能會顯示於搜尋結果與趨勢中。您的個人檔案可能會被推薦給與您志趣相投的人。",
|
"onboarding.profile.discoverable_hint": "當您於 Mastodon 上選擇加入可發現性時,您的嘟文可能會顯示於搜尋結果與趨勢中。您的個人檔案可能會被推薦至與您志趣相投的人。",
|
||||||
"onboarding.profile.display_name": "顯示名稱",
|
"onboarding.profile.display_name": "顯示名稱",
|
||||||
"onboarding.profile.display_name_hint": "完整名稱或暱稱...",
|
"onboarding.profile.display_name_hint": "完整名稱或暱稱...",
|
||||||
"onboarding.profile.lead": "您隨時可以稍候於設定中完成此操作,將有更多自訂選項可使用。",
|
"onboarding.profile.lead": "您隨時可以稍候於設定中完成此操作,將有更多自訂選項可使用。",
|
||||||
|
@ -797,7 +797,7 @@
|
||||||
"upload_modal.applying": "正在套用...",
|
"upload_modal.applying": "正在套用...",
|
||||||
"upload_modal.choose_image": "選擇圖片",
|
"upload_modal.choose_image": "選擇圖片",
|
||||||
"upload_modal.description_placeholder": "我能吞下玻璃而不傷身體",
|
"upload_modal.description_placeholder": "我能吞下玻璃而不傷身體",
|
||||||
"upload_modal.detect_text": "從圖片中偵測文字",
|
"upload_modal.detect_text": "自圖片中偵測文字",
|
||||||
"upload_modal.edit_media": "編輯媒體",
|
"upload_modal.edit_media": "編輯媒體",
|
||||||
"upload_modal.hint": "於預覽中點擊或拖曳圓圈以選擇將於所有縮圖中顯示的焦點。",
|
"upload_modal.hint": "於預覽中點擊或拖曳圓圈以選擇將於所有縮圖中顯示的焦點。",
|
||||||
"upload_modal.preparing_ocr": "準備 OCR 中……",
|
"upload_modal.preparing_ocr": "準備 OCR 中……",
|
||||||
|
|
|
@ -48,6 +48,10 @@ html {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.icon-button:disabled {
|
||||||
|
color: darken($action-button-color, 25%);
|
||||||
|
}
|
||||||
|
|
||||||
.account__header__bar .avatar .account__avatar {
|
.account__header__bar .avatar .account__avatar {
|
||||||
border-color: $white;
|
border-color: $white;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1366,6 +1366,8 @@ body > [data-popper-placement] {
|
||||||
min-height: 54px;
|
min-height: 54px;
|
||||||
border-bottom: 1px solid var(--background-border-color);
|
border-bottom: 1px solid var(--background-border-color);
|
||||||
cursor: auto;
|
cursor: auto;
|
||||||
|
opacity: 1;
|
||||||
|
animation: fade 150ms linear;
|
||||||
|
|
||||||
@keyframes fade {
|
@keyframes fade {
|
||||||
0% {
|
0% {
|
||||||
|
@ -1377,9 +1379,6 @@ body > [data-popper-placement] {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
opacity: 1;
|
|
||||||
animation: fade 150ms linear;
|
|
||||||
|
|
||||||
.media-gallery,
|
.media-gallery,
|
||||||
.video-player,
|
.video-player,
|
||||||
.audio-player,
|
.audio-player,
|
||||||
|
@ -4851,8 +4850,10 @@ a.status-card {
|
||||||
&__menu {
|
&__menu {
|
||||||
@include search-popout;
|
@include search-popout;
|
||||||
|
|
||||||
padding: 0;
|
& {
|
||||||
background: $ui-secondary-color;
|
padding: 0;
|
||||||
|
background: $ui-secondary-color;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&__menu-list {
|
&__menu-list {
|
||||||
|
@ -10191,8 +10192,7 @@ noscript {
|
||||||
.filtered-notifications-banner {
|
.filtered-notifications-banner {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
border: 1px solid var(--background-border-color);
|
border-bottom: 1px solid var(--background-border-color);
|
||||||
border-top: 0;
|
|
||||||
padding: 24px 32px;
|
padding: 24px 32px;
|
||||||
gap: 16px;
|
gap: 16px;
|
||||||
color: $darker-text-color;
|
color: $darker-text-color;
|
||||||
|
@ -10453,7 +10453,7 @@ noscript {
|
||||||
gap: 4px;
|
gap: 4px;
|
||||||
|
|
||||||
dt {
|
dt {
|
||||||
flex: 0 0 auto;
|
flex: 0 1 auto;
|
||||||
color: $dark-text-color;
|
color: $dark-text-color;
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
|
@ -2503,6 +2503,7 @@ body {
|
||||||
background: $win95-tooltip-yellow;
|
background: $win95-tooltip-yellow;
|
||||||
border: 1px solid black;
|
border: 1px solid black;
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
|
margin-bottom: 24px;
|
||||||
|
|
||||||
h1, h1 small {
|
h1, h1 small {
|
||||||
color:black;
|
color:black;
|
||||||
|
@ -2510,8 +2511,6 @@ body {
|
||||||
text-overflow: unset;
|
text-overflow: unset;
|
||||||
}
|
}
|
||||||
|
|
||||||
margin-bottom: 24px;
|
|
||||||
|
|
||||||
&:after {
|
&:after {
|
||||||
content: "";
|
content: "";
|
||||||
display:block;
|
display:block;
|
||||||
|
|
|
@ -62,7 +62,8 @@ class LinkDetailsExtractor
|
||||||
end
|
end
|
||||||
|
|
||||||
def author_name
|
def author_name
|
||||||
author['name']
|
name = author['name']
|
||||||
|
name.is_a?(Array) ? name.join(', ') : name
|
||||||
end
|
end
|
||||||
|
|
||||||
def author_url
|
def author_url
|
||||||
|
@ -156,11 +157,11 @@ class LinkDetailsExtractor
|
||||||
end
|
end
|
||||||
|
|
||||||
def title
|
def title
|
||||||
html_entities.decode(structured_data&.headline || opengraph_tag('og:title') || document.xpath('//title').map(&:content).first).strip
|
html_entities_decode(structured_data&.headline || opengraph_tag('og:title') || document.xpath('//title').map(&:content).first)&.strip
|
||||||
end
|
end
|
||||||
|
|
||||||
def description
|
def description
|
||||||
html_entities.decode(structured_data&.description || opengraph_tag('og:description') || meta_tag('description'))
|
html_entities_decode(structured_data&.description || opengraph_tag('og:description') || meta_tag('description'))
|
||||||
end
|
end
|
||||||
|
|
||||||
def published_at
|
def published_at
|
||||||
|
@ -180,7 +181,7 @@ class LinkDetailsExtractor
|
||||||
end
|
end
|
||||||
|
|
||||||
def provider_name
|
def provider_name
|
||||||
html_entities.decode(structured_data&.publisher_name || opengraph_tag('og:site_name'))
|
html_entities_decode(structured_data&.publisher_name || opengraph_tag('og:site_name'))
|
||||||
end
|
end
|
||||||
|
|
||||||
def provider_url
|
def provider_url
|
||||||
|
@ -188,7 +189,7 @@ class LinkDetailsExtractor
|
||||||
end
|
end
|
||||||
|
|
||||||
def author_name
|
def author_name
|
||||||
html_entities.decode(structured_data&.author_name || opengraph_tag('og:author') || opengraph_tag('og:author:username'))
|
html_entities_decode(structured_data&.author_name || opengraph_tag('og:author') || opengraph_tag('og:author:username'))
|
||||||
end
|
end
|
||||||
|
|
||||||
def author_url
|
def author_url
|
||||||
|
@ -257,7 +258,7 @@ class LinkDetailsExtractor
|
||||||
|
|
||||||
next if json_ld.blank?
|
next if json_ld.blank?
|
||||||
|
|
||||||
structured_data = StructuredData.new(html_entities.decode(json_ld))
|
structured_data = StructuredData.new(html_entities_decode(json_ld))
|
||||||
|
|
||||||
next unless structured_data.valid?
|
next unless structured_data.valid?
|
||||||
|
|
||||||
|
@ -273,10 +274,11 @@ class LinkDetailsExtractor
|
||||||
end
|
end
|
||||||
|
|
||||||
def detect_encoding_and_parse_document
|
def detect_encoding_and_parse_document
|
||||||
[detect_encoding, nil, @html_charset, 'UTF-8'].uniq.each do |encoding|
|
[detect_encoding, nil, header_encoding].uniq.each do |encoding|
|
||||||
document = Nokogiri::HTML(@html, nil, encoding)
|
document = Nokogiri::HTML(@html, nil, encoding)
|
||||||
return document if document.to_s.valid_encoding?
|
return document if document.to_s.valid_encoding?
|
||||||
end
|
end
|
||||||
|
Nokogiri::HTML(@html, nil, 'UTF-8')
|
||||||
end
|
end
|
||||||
|
|
||||||
def detect_encoding
|
def detect_encoding
|
||||||
|
@ -284,12 +286,28 @@ class LinkDetailsExtractor
|
||||||
guess&.fetch(:confidence, 0).to_i > 60 ? guess&.fetch(:encoding, nil) : nil
|
guess&.fetch(:confidence, 0).to_i > 60 ? guess&.fetch(:encoding, nil) : nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def header_encoding
|
||||||
|
Encoding.find(@html_charset).name if @html_charset
|
||||||
|
rescue ArgumentError
|
||||||
|
# Encoding from HTTP header is not recognized by ruby
|
||||||
|
nil
|
||||||
|
end
|
||||||
|
|
||||||
def detector
|
def detector
|
||||||
@detector ||= CharlockHolmes::EncodingDetector.new.tap do |detector|
|
@detector ||= CharlockHolmes::EncodingDetector.new.tap do |detector|
|
||||||
detector.strip_tags = true
|
detector.strip_tags = true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def html_entities_decode(string)
|
||||||
|
return if string.nil?
|
||||||
|
|
||||||
|
unicode_string = string.to_s.encode('UTF-8')
|
||||||
|
raise EncodingError, 'cannot convert string to valid UTF-8' unless unicode_string.valid_encoding?
|
||||||
|
|
||||||
|
html_entities.decode(unicode_string)
|
||||||
|
end
|
||||||
|
|
||||||
def html_entities
|
def html_entities
|
||||||
@html_entities ||= HTMLEntities.new(:expanded)
|
@html_entities ||= HTMLEntities.new(:expanded)
|
||||||
end
|
end
|
||||||
|
|
|
@ -26,7 +26,7 @@ class Webfinger
|
||||||
private
|
private
|
||||||
|
|
||||||
def links
|
def links
|
||||||
@links ||= @json['links'].index_by { |link| link['rel'] }
|
@links ||= @json.fetch('links', []).index_by { |link| link['rel'] }
|
||||||
end
|
end
|
||||||
|
|
||||||
def validate_response!
|
def validate_response!
|
||||||
|
|
|
@ -103,6 +103,10 @@ module User::HasSettings
|
||||||
settings['web.disable_swiping']
|
settings['web.disable_swiping']
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def setting_disable_hover_cards
|
||||||
|
settings['web.disable_hover_cards']
|
||||||
|
end
|
||||||
|
|
||||||
def setting_always_send_emails
|
def setting_always_send_emails
|
||||||
settings['always_send_emails']
|
settings['always_send_emails']
|
||||||
end
|
end
|
||||||
|
|
|
@ -31,6 +31,6 @@ class NotificationPolicy < ApplicationRecord
|
||||||
private
|
private
|
||||||
|
|
||||||
def pending_notification_requests
|
def pending_notification_requests
|
||||||
@pending_notification_requests ||= notification_requests.where(dismissed: false).limit(MAX_MEANINGFUL_COUNT).pick(Arel.sql('count(*), coalesce(sum(notifications_count), 0)::bigint'))
|
@pending_notification_requests ||= notification_requests.limit(MAX_MEANINGFUL_COUNT).pick(Arel.sql('count(*), coalesce(sum(notifications_count), 0)::bigint'))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,12 +9,13 @@
|
||||||
# from_account_id :bigint(8) not null
|
# from_account_id :bigint(8) not null
|
||||||
# last_status_id :bigint(8)
|
# last_status_id :bigint(8)
|
||||||
# notifications_count :bigint(8) default(0), not null
|
# notifications_count :bigint(8) default(0), not null
|
||||||
# dismissed :boolean default(FALSE), not null
|
|
||||||
# created_at :datetime not null
|
# created_at :datetime not null
|
||||||
# updated_at :datetime not null
|
# updated_at :datetime not null
|
||||||
#
|
#
|
||||||
|
|
||||||
class NotificationRequest < ApplicationRecord
|
class NotificationRequest < ApplicationRecord
|
||||||
|
self.ignored_columns += %w(dismissed)
|
||||||
|
|
||||||
include Paginable
|
include Paginable
|
||||||
|
|
||||||
MAX_MEANINGFUL_COUNT = 100
|
MAX_MEANINGFUL_COUNT = 100
|
||||||
|
@ -34,8 +35,6 @@ class NotificationRequest < ApplicationRecord
|
||||||
end
|
end
|
||||||
|
|
||||||
def reconsider_existence!
|
def reconsider_existence!
|
||||||
return if dismissed?
|
|
||||||
|
|
||||||
prepare_notifications_count
|
prepare_notifications_count
|
||||||
|
|
||||||
if notifications_count.positive?
|
if notifications_count.positive?
|
||||||
|
|
|
@ -46,6 +46,11 @@ class PreviewCard < ApplicationRecord
|
||||||
y_comp: 4,
|
y_comp: 4,
|
||||||
}.freeze
|
}.freeze
|
||||||
|
|
||||||
|
# URL size limit to safely store in PosgreSQL's unique indexes
|
||||||
|
# Technically this is a byte-size limit but we use it as a
|
||||||
|
# character limit to work with length validation
|
||||||
|
URL_CHARACTER_LIMIT = 2692
|
||||||
|
|
||||||
self.inheritance_column = false
|
self.inheritance_column = false
|
||||||
|
|
||||||
enum :type, { link: 0, photo: 1, video: 2, rich: 3 }
|
enum :type, { link: 0, photo: 1, video: 2, rich: 3 }
|
||||||
|
@ -63,7 +68,7 @@ class PreviewCard < ApplicationRecord
|
||||||
convert_options: { all: '-quality 90 +profile "!icc,*" +set date:modify +set date:create +set date:timestamp' },
|
convert_options: { all: '-quality 90 +profile "!icc,*" +set date:modify +set date:create +set date:timestamp' },
|
||||||
validate_media_type: false
|
validate_media_type: false
|
||||||
|
|
||||||
validates :url, presence: true, uniqueness: true, url: true
|
validates :url, presence: true, uniqueness: true, url: true, length: { maximum: URL_CHARACTER_LIMIT }
|
||||||
validates_attachment_content_type :image, content_type: IMAGE_MIME_TYPES
|
validates_attachment_content_type :image, content_type: IMAGE_MIME_TYPES
|
||||||
validates_attachment_size :image, less_than: LIMIT
|
validates_attachment_size :image, less_than: LIMIT
|
||||||
remotable_attachment :image, LIMIT
|
remotable_attachment :image, LIMIT
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
# category :integer default("other"), not null
|
# category :integer default("other"), not null
|
||||||
# action_taken_at :datetime
|
# action_taken_at :datetime
|
||||||
# rule_ids :bigint(8) is an Array
|
# rule_ids :bigint(8) is an Array
|
||||||
|
# application_id :bigint(8)
|
||||||
#
|
#
|
||||||
|
|
||||||
class Report < ApplicationRecord
|
class Report < ApplicationRecord
|
||||||
|
@ -31,6 +32,7 @@ class Report < ApplicationRecord
|
||||||
rate_limit by: :account, family: :reports
|
rate_limit by: :account, family: :reports
|
||||||
|
|
||||||
belongs_to :account
|
belongs_to :account
|
||||||
|
belongs_to :application, class_name: 'Doorkeeper::Application', optional: true
|
||||||
|
|
||||||
with_options class_name: 'Account' do
|
with_options class_name: 'Account' do
|
||||||
belongs_to :target_account
|
belongs_to :target_account
|
||||||
|
|
|
@ -306,7 +306,7 @@ class Status < ApplicationRecord
|
||||||
else
|
else
|
||||||
map = media_attachments.index_by(&:id)
|
map = media_attachments.index_by(&:id)
|
||||||
ordered_media_attachment_ids.filter_map { |media_attachment_id| map[media_attachment_id] }
|
ordered_media_attachment_ids.filter_map { |media_attachment_id| map[media_attachment_id] }
|
||||||
end
|
end.take(MEDIA_ATTACHMENTS_LIMIT)
|
||||||
end
|
end
|
||||||
|
|
||||||
def replies_count
|
def replies_count
|
||||||
|
|
|
@ -54,12 +54,14 @@ class StatusEdit < ApplicationRecord
|
||||||
def ordered_media_attachments
|
def ordered_media_attachments
|
||||||
return @ordered_media_attachments if defined?(@ordered_media_attachments)
|
return @ordered_media_attachments if defined?(@ordered_media_attachments)
|
||||||
|
|
||||||
@ordered_media_attachments = if ordered_media_attachment_ids.nil?
|
@ordered_media_attachments = begin
|
||||||
[]
|
if ordered_media_attachment_ids.nil?
|
||||||
else
|
[]
|
||||||
map = status.media_attachments.index_by(&:id)
|
else
|
||||||
ordered_media_attachment_ids.map.with_index { |media_attachment_id, index| PreservedMediaAttachment.new(media_attachment: map[media_attachment_id], description: media_descriptions[index]) }
|
map = status.media_attachments.index_by(&:id)
|
||||||
end
|
ordered_media_attachment_ids.map.with_index { |media_attachment_id, index| PreservedMediaAttachment.new(media_attachment: map[media_attachment_id], description: media_descriptions[index]) }
|
||||||
|
end
|
||||||
|
end.take(Status::MEDIA_ATTACHMENTS_LIMIT)
|
||||||
end
|
end
|
||||||
|
|
||||||
def proper
|
def proper
|
||||||
|
|
|
@ -30,6 +30,7 @@ class UserSettings
|
||||||
setting :use_pending_items, default: false
|
setting :use_pending_items, default: false
|
||||||
setting :use_system_font, default: false
|
setting :use_system_font, default: false
|
||||||
setting :disable_swiping, default: false
|
setting :disable_swiping, default: false
|
||||||
|
setting :disable_hover_cards, default: false
|
||||||
setting :delete_modal, default: true
|
setting :delete_modal, default: true
|
||||||
setting :reblog_modal, default: false
|
setting :reblog_modal, default: false
|
||||||
setting :favourite_modal, default: false
|
setting :favourite_modal, default: false
|
||||||
|
|
|
@ -44,6 +44,7 @@ class InitialStateSerializer < ActiveModel::Serializer
|
||||||
store[:expand_spoilers] = object_account_user.setting_expand_spoilers
|
store[:expand_spoilers] = object_account_user.setting_expand_spoilers
|
||||||
store[:reduce_motion] = object_account_user.setting_reduce_motion
|
store[:reduce_motion] = object_account_user.setting_reduce_motion
|
||||||
store[:disable_swiping] = object_account_user.setting_disable_swiping
|
store[:disable_swiping] = object_account_user.setting_disable_swiping
|
||||||
|
store[:disable_hover_cards] = object_account_user.setting_disable_hover_cards
|
||||||
store[:advanced_layout] = object_account_user.setting_advanced_layout
|
store[:advanced_layout] = object_account_user.setting_advanced_layout
|
||||||
store[:use_blurhash] = object_account_user.setting_use_blurhash
|
store[:use_blurhash] = object_account_user.setting_use_blurhash
|
||||||
store[:use_pending_items] = object_account_user.setting_use_pending_items
|
store[:use_pending_items] = object_account_user.setting_use_pending_items
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
class REST::NotificationSerializer < ActiveModel::Serializer
|
class REST::NotificationSerializer < ActiveModel::Serializer
|
||||||
attributes :id, :type, :created_at, :group_key
|
attributes :id, :type, :created_at, :group_key
|
||||||
|
|
||||||
|
attribute :filtered, if: :filtered?
|
||||||
|
|
||||||
belongs_to :from_account, key: :account, serializer: REST::AccountSerializer
|
belongs_to :from_account, key: :account, serializer: REST::AccountSerializer
|
||||||
belongs_to :target_status, key: :status, if: :status_type?, serializer: REST::StatusSerializer
|
belongs_to :target_status, key: :status, if: :status_type?, serializer: REST::StatusSerializer
|
||||||
belongs_to :report, if: :report_type?, serializer: REST::ReportSerializer
|
belongs_to :report, if: :report_type?, serializer: REST::ReportSerializer
|
||||||
|
@ -32,4 +34,6 @@ class REST::NotificationSerializer < ActiveModel::Serializer
|
||||||
def moderation_warning_event?
|
def moderation_warning_event?
|
||||||
object.type == :moderation_warning
|
object.type == :moderation_warning
|
||||||
end
|
end
|
||||||
|
|
||||||
|
delegate :filtered?, to: :object
|
||||||
end
|
end
|
||||||
|
|
|
@ -15,9 +15,6 @@ class FetchLinkCardService < BaseService
|
||||||
)
|
)
|
||||||
}iox
|
}iox
|
||||||
|
|
||||||
# URL size limit to safely store in PosgreSQL's unique indexes
|
|
||||||
BYTESIZE_LIMIT = 2692
|
|
||||||
|
|
||||||
def call(status)
|
def call(status)
|
||||||
@status = status
|
@status = status
|
||||||
@original_url = parse_urls
|
@original_url = parse_urls
|
||||||
|
@ -32,7 +29,7 @@ class FetchLinkCardService < BaseService
|
||||||
end
|
end
|
||||||
|
|
||||||
attach_card if @card&.persisted?
|
attach_card if @card&.persisted?
|
||||||
rescue HTTP::Error, OpenSSL::SSL::SSLError, Addressable::URI::InvalidURIError, Mastodon::HostValidationError, Mastodon::LengthValidationError, Encoding::UndefinedConversionError => e
|
rescue HTTP::Error, OpenSSL::SSL::SSLError, Addressable::URI::InvalidURIError, Mastodon::HostValidationError, Mastodon::LengthValidationError, EncodingError, ActiveRecord::RecordInvalid => e
|
||||||
Rails.logger.debug { "Error fetching link #{@original_url}: #{e}" }
|
Rails.logger.debug { "Error fetching link #{@original_url}: #{e}" }
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
|
@ -88,7 +85,7 @@ class FetchLinkCardService < BaseService
|
||||||
|
|
||||||
def bad_url?(uri)
|
def bad_url?(uri)
|
||||||
# Avoid local instance URLs and invalid URLs
|
# Avoid local instance URLs and invalid URLs
|
||||||
uri.host.blank? || TagManager.instance.local_url?(uri.to_s) || !%w(http https).include?(uri.scheme) || uri.to_s.bytesize > BYTESIZE_LIMIT
|
uri.host.blank? || TagManager.instance.local_url?(uri.to_s) || !%w(http https).include?(uri.scheme)
|
||||||
end
|
end
|
||||||
|
|
||||||
def mention_link?(anchor)
|
def mention_link?(anchor)
|
||||||
|
|
|
@ -10,6 +10,7 @@ class ReportService < BaseService
|
||||||
@comment = options.delete(:comment).presence || ''
|
@comment = options.delete(:comment).presence || ''
|
||||||
@category = options[:rule_ids].present? ? 'violation' : (options.delete(:category).presence || 'other')
|
@category = options[:rule_ids].present? ? 'violation' : (options.delete(:category).presence || 'other')
|
||||||
@rule_ids = options.delete(:rule_ids).presence
|
@rule_ids = options.delete(:rule_ids).presence
|
||||||
|
@application = options.delete(:application).presence
|
||||||
@options = options
|
@options = options
|
||||||
|
|
||||||
raise ActiveRecord::RecordNotFound if @target_account.unavailable?
|
raise ActiveRecord::RecordNotFound if @target_account.unavailable?
|
||||||
|
@ -35,7 +36,8 @@ class ReportService < BaseService
|
||||||
uri: @options[:uri],
|
uri: @options[:uri],
|
||||||
forwarded: forward_to_origin?,
|
forwarded: forward_to_origin?,
|
||||||
category: @category,
|
category: @category,
|
||||||
rule_ids: @rule_ids
|
rule_ids: @rule_ids,
|
||||||
|
application: @application
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,12 @@
|
||||||
= admin_account_link_to report.account
|
= admin_account_link_to report.account
|
||||||
- else
|
- else
|
||||||
= report.account.domain
|
= report.account.domain
|
||||||
|
- if report.application.present?
|
||||||
|
.report-header__details__item
|
||||||
|
.report-header__details__item__header
|
||||||
|
%strong= t('admin.reports.reported_with_application')
|
||||||
|
.report-header__details__item__content
|
||||||
|
= report.application.name
|
||||||
.report-header__details__item
|
.report-header__details__item
|
||||||
.report-header__details__item__header
|
.report-header__details__item__header
|
||||||
%strong= t('admin.reports.status')
|
%strong= t('admin.reports.status')
|
||||||
|
|
|
@ -48,6 +48,7 @@
|
||||||
= ff.input :'web.auto_play', wrapper: :with_label, recommended: true, label: I18n.t('simple_form.labels.defaults.setting_auto_play_gif')
|
= ff.input :'web.auto_play', wrapper: :with_label, recommended: true, label: I18n.t('simple_form.labels.defaults.setting_auto_play_gif')
|
||||||
= ff.input :'web.reduce_motion', wrapper: :with_label, label: I18n.t('simple_form.labels.defaults.setting_reduce_motion')
|
= ff.input :'web.reduce_motion', wrapper: :with_label, label: I18n.t('simple_form.labels.defaults.setting_reduce_motion')
|
||||||
= ff.input :'web.disable_swiping', wrapper: :with_label, label: I18n.t('simple_form.labels.defaults.setting_disable_swiping')
|
= ff.input :'web.disable_swiping', wrapper: :with_label, label: I18n.t('simple_form.labels.defaults.setting_disable_swiping')
|
||||||
|
= ff.input :'web.disable_hover_cards', wrapper: :with_label, label: I18n.t('simple_form.labels.defaults.setting_disable_hover_cards')
|
||||||
= ff.input :'web.use_system_font', wrapper: :with_label, label: I18n.t('simple_form.labels.defaults.setting_system_font_ui')
|
= ff.input :'web.use_system_font', wrapper: :with_label, label: I18n.t('simple_form.labels.defaults.setting_system_font_ui')
|
||||||
= ff.input :'web.use_system_emoji_font', wrapper: :with_label, label: I18n.t('simple_form.labels.defaults.setting_system_emoji_font'), glitch_only: true
|
= ff.input :'web.use_system_emoji_font', wrapper: :with_label, label: I18n.t('simple_form.labels.defaults.setting_system_emoji_font'), glitch_only: true
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,23 @@ require_relative '../../lib/mastodon/sidekiq_middleware'
|
||||||
Sidekiq.configure_server do |config|
|
Sidekiq.configure_server do |config|
|
||||||
config.redis = REDIS_SIDEKIQ_PARAMS
|
config.redis = REDIS_SIDEKIQ_PARAMS
|
||||||
|
|
||||||
|
# This is used in Kubernetes setups, to signal that the Sidekiq process has started and will begin processing jobs
|
||||||
|
# This comes from https://github.com/sidekiq/sidekiq/wiki/Kubernetes#sidekiq
|
||||||
|
ready_filename = ENV.fetch('MASTODON_SIDEKIQ_READY_FILENAME', nil)
|
||||||
|
if ready_filename
|
||||||
|
raise 'MASTODON_SIDEKIQ_READY_FILENAME is not a valid filename' if File.basename(ready_filename) != ready_filename
|
||||||
|
|
||||||
|
ready_path = Rails.root.join('tmp', ready_filename)
|
||||||
|
|
||||||
|
config.on(:startup) do
|
||||||
|
FileUtils.touch(ready_path)
|
||||||
|
end
|
||||||
|
|
||||||
|
config.on(:shutdown) do
|
||||||
|
FileUtils.rm_f(ready_path)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
config.server_middleware do |chain|
|
config.server_middleware do |chain|
|
||||||
chain.add Mastodon::SidekiqMiddleware
|
chain.add Mastodon::SidekiqMiddleware
|
||||||
end
|
end
|
||||||
|
|
|
@ -5,7 +5,7 @@ Rails.application.configure do
|
||||||
# You should only generate this once per instance. If you later decide to change it, all push subscription will
|
# You should only generate this once per instance. If you later decide to change it, all push subscription will
|
||||||
# be invalidated, requiring the users to access the website again to resubscribe.
|
# be invalidated, requiring the users to access the website again to resubscribe.
|
||||||
#
|
#
|
||||||
# Generate with `rake mastodon:webpush:generate_vapid_key` task (`docker-compose run --rm web rake mastodon:webpush:generate_vapid_key` if you use docker compose)
|
# Generate with `bundle exec rails mastodon:webpush:generate_vapid_key` task (`docker-compose run --rm web bundle exec rails mastodon:webpush:generate_vapid_key` if you use docker compose)
|
||||||
#
|
#
|
||||||
# For more information visit https://rossta.net/blog/using-the-web-push-api-with-vapid.html
|
# For more information visit https://rossta.net/blog/using-the-web-push-api-with-vapid.html
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@ ko:
|
||||||
setting_default_content_type_markdown: 게시물을 작성할 때, 형식을 지정하지 않았다면, 마크다운이라고 가정합니다
|
setting_default_content_type_markdown: 게시물을 작성할 때, 형식을 지정하지 않았다면, 마크다운이라고 가정합니다
|
||||||
setting_default_content_type_plain: 게시물을 작성할 때, 형식을 지정하지 않았다면, 일반적인 텍스트라고 가정합니다. (마스토돈의 기본 동작)
|
setting_default_content_type_plain: 게시물을 작성할 때, 형식을 지정하지 않았다면, 일반적인 텍스트라고 가정합니다. (마스토돈의 기본 동작)
|
||||||
setting_default_language: 작성하는 게시물의 언어는 자동으로 설정될 수 있습니다, 하지만 언제나 정확하지는 않습니다
|
setting_default_language: 작성하는 게시물의 언어는 자동으로 설정될 수 있습니다, 하지만 언제나 정확하지는 않습니다
|
||||||
|
setting_show_followers_count: 팔로워 카운트를 프로필에서 숨깁니다. 팔로워 수를 숨기면 나에게도 보이지 않으며 몇몇 앱에서는 팔로워 수가 음수로 표시될 수 있습니다.
|
||||||
setting_skin: 선택한 마스토돈 풍미의 스킨을 바꿉니다
|
setting_skin: 선택한 마스토돈 풍미의 스킨을 바꿉니다
|
||||||
labels:
|
labels:
|
||||||
defaults:
|
defaults:
|
||||||
|
@ -16,6 +17,7 @@ ko:
|
||||||
setting_default_content_type_markdown: 마크다운
|
setting_default_content_type_markdown: 마크다운
|
||||||
setting_default_content_type_plain: 일반 텍스트
|
setting_default_content_type_plain: 일반 텍스트
|
||||||
setting_favourite_modal: 관심글을 지정할 때 확인 창을 띄웁니다(글리치 풍미에만 적용됨)
|
setting_favourite_modal: 관심글을 지정할 때 확인 창을 띄웁니다(글리치 풍미에만 적용됨)
|
||||||
|
setting_show_followers_count: 팔로워 수 표시
|
||||||
setting_skin: 스킨
|
setting_skin: 스킨
|
||||||
setting_system_emoji_font: 에모지에 시스템 기본 폰트 적용하기 (글리치 풍미에만 적용됨)
|
setting_system_emoji_font: 에모지에 시스템 기본 폰트 적용하기 (글리치 풍미에만 적용됨)
|
||||||
notification_emails:
|
notification_emails:
|
||||||
|
|
|
@ -21,6 +21,18 @@ kab:
|
||||||
username:
|
username:
|
||||||
invalid: ilaq ad ilin isekkilen, uṭṭunen d yijerriden n wadda kan
|
invalid: ilaq ad ilin isekkilen, uṭṭunen d yijerriden n wadda kan
|
||||||
reserved: yettwaṭṭef
|
reserved: yettwaṭṭef
|
||||||
|
admin/webhook:
|
||||||
|
attributes:
|
||||||
|
url:
|
||||||
|
invalid: mačči d URL ameɣtu
|
||||||
|
doorkeeper/application:
|
||||||
|
attributes:
|
||||||
|
website:
|
||||||
|
invalid: mačči d URL ameɣtu
|
||||||
|
import:
|
||||||
|
attributes:
|
||||||
|
data:
|
||||||
|
malformed: yir amsal
|
||||||
status:
|
status:
|
||||||
attributes:
|
attributes:
|
||||||
reblog:
|
reblog:
|
||||||
|
@ -28,4 +40,20 @@ kab:
|
||||||
user:
|
user:
|
||||||
attributes:
|
attributes:
|
||||||
email:
|
email:
|
||||||
|
blocked: isseqdac asaǧǧaw n yimayl ur yettusirgen ara
|
||||||
unreachable: ur d-ttban ara d akken yella
|
unreachable: ur d-ttban ara d akken yella
|
||||||
|
role_id:
|
||||||
|
elevated: ur yezmir ara ad iεeddi tamlilt-ik tamirant
|
||||||
|
user_role:
|
||||||
|
attributes:
|
||||||
|
permissions_as_keys:
|
||||||
|
dangerous: deg-s tisirag tiriɣelsanin i temlilt tazadurt
|
||||||
|
elevated: ur yezmir ara ad yesεu tirirag ur nelli ara deg temlilit-ik tamirant
|
||||||
|
own_role: ur yezmir ara ad yettwabeddel s temlilt-ik tamirant
|
||||||
|
position:
|
||||||
|
elevated: ur yezmir ara ad iεeddi tamlilt-ik tamirant
|
||||||
|
own_role: ur yezmir ara ad yettwabeddel s temlilt-ik tamirant
|
||||||
|
webhook:
|
||||||
|
attributes:
|
||||||
|
events:
|
||||||
|
invalid_permissions: ur yezmir ara ad yesεu tidyanin iwumi ur tesεiḍ ara tisirag
|
||||||
|
|
|
@ -1762,6 +1762,10 @@ ar:
|
||||||
webauthn_authentication: مفاتيح الأمان
|
webauthn_authentication: مفاتيح الأمان
|
||||||
severed_relationships:
|
severed_relationships:
|
||||||
download: تنزيل (%{count})
|
download: تنزيل (%{count})
|
||||||
|
lost_followers: المتابعون المفقودون
|
||||||
|
lost_follows: المتابعات المفقودة
|
||||||
|
preamble: بحجبكم اسم نطاق قد تخسرون متابَعاتٍ، و كذلك إذا قرّر مديرو الخادوم حظر خادوم ما. و في هذه الحالات يكون بوسعكم تنزيل قائمة بالصلات المبتورة لمعاينتها، مع القدرة على استيرادها إلى خادوم آخر.
|
||||||
|
purged: حذف مدير خادومكم المعلومات عن هذا الخادوم.
|
||||||
statuses:
|
statuses:
|
||||||
attached:
|
attached:
|
||||||
audio:
|
audio:
|
||||||
|
@ -1978,6 +1982,7 @@ ar:
|
||||||
edit_profile_title: قم بتخصيص ملفك التعريفي
|
edit_profile_title: قم بتخصيص ملفك التعريفي
|
||||||
explanation: ها هي بعض النصائح قبل بداية الاستخدام
|
explanation: ها هي بعض النصائح قبل بداية الاستخدام
|
||||||
feature_action: اعرف المزيد
|
feature_action: اعرف المزيد
|
||||||
|
feature_audience: يتيح لكم مًستُدون إدارة جمهوركم بلا وسطاء. فبتنصيب و تشغيل مَستُودون على بنيتكم التحتية تمكنكم متابعة مستخدمي مَستُدون من أيّ خادوم،كما يمكنهم متابعتكم، بلا تحكُّم من أي طرف ثالث.
|
||||||
feature_audience_title: اِبنوا جُمهورَكم بِثِقَة
|
feature_audience_title: اِبنوا جُمهورَكم بِثِقَة
|
||||||
feature_control: أنتم الأدرى بالمحتوى الذي تريدون أن تطالعوه في فيض المنشورات الرئيس. لا خوارزميات تتحكم فيما يظهر لكم ولا إعلانات تضيع وقتكم. بحساب واحد تمكنكم متابعة من تشاؤون على أيّ خادوم ماستدون، وتلقّى منشوراتهم بترتيبها الزمني، لتصنعوا ركنكم الأليف في الإنترنت.
|
feature_control: أنتم الأدرى بالمحتوى الذي تريدون أن تطالعوه في فيض المنشورات الرئيس. لا خوارزميات تتحكم فيما يظهر لكم ولا إعلانات تضيع وقتكم. بحساب واحد تمكنكم متابعة من تشاؤون على أيّ خادوم ماستدون، وتلقّى منشوراتهم بترتيبها الزمني، لتصنعوا ركنكم الأليف في الإنترنت.
|
||||||
feature_control_title: تحكَّموا في فيض المنشورات الخاص بكم
|
feature_control_title: تحكَّموا في فيض المنشورات الخاص بكم
|
||||||
|
|
|
@ -118,7 +118,7 @@ cs:
|
||||||
promote: Povýšit
|
promote: Povýšit
|
||||||
protocol: Protokol
|
protocol: Protokol
|
||||||
public: Veřejný
|
public: Veřejný
|
||||||
push_subscription_expires: Odebírání PuSH expiruje
|
push_subscription_expires: Odebírání PuSH vyprší
|
||||||
redownload: Obnovit profil
|
redownload: Obnovit profil
|
||||||
redownloaded_msg: Profil účtu %{username} byl úspěšně obnoven ze zdroje
|
redownloaded_msg: Profil účtu %{username} byl úspěšně obnoven ze zdroje
|
||||||
reject: Zamítnout
|
reject: Zamítnout
|
||||||
|
|
|
@ -305,6 +305,7 @@ cy:
|
||||||
filter_by_action: Hidlo yn ôl gweithred
|
filter_by_action: Hidlo yn ôl gweithred
|
||||||
filter_by_user: Hidlo yn ôl defnyddiwr
|
filter_by_user: Hidlo yn ôl defnyddiwr
|
||||||
title: Cofnod archwilio
|
title: Cofnod archwilio
|
||||||
|
unavailable_instance: "(nid yw enw'r parth ar gael)"
|
||||||
announcements:
|
announcements:
|
||||||
destroyed_msg: Cyhoeddiad wedi'i ddileu'n llwyddiannus!
|
destroyed_msg: Cyhoeddiad wedi'i ddileu'n llwyddiannus!
|
||||||
edit:
|
edit:
|
||||||
|
@ -1436,7 +1437,7 @@ cy:
|
||||||
domain_blocking_html: Rydych ar fin <strong>rhwystro</strong> hyd at <strong>%{total_items} parth</strong> o <strong>%{filename}</strong> .
|
domain_blocking_html: Rydych ar fin <strong>rhwystro</strong> hyd at <strong>%{total_items} parth</strong> o <strong>%{filename}</strong> .
|
||||||
following_html: Rydych ar fin <strong>dilyn</strong> hyd at <strong>%{total_items} cyfrif</strong> gan <strong>%{filename}</strong> .
|
following_html: Rydych ar fin <strong>dilyn</strong> hyd at <strong>%{total_items} cyfrif</strong> gan <strong>%{filename}</strong> .
|
||||||
lists_html: Rydych ar fin ychwanegu hyd at <strong>%{total_items} o gyfrifon</strong> o <strong>%{filename}</strong> at eich <strong>rhestrau</strong> . Bydd rhestrau newydd yn cael eu creu os nad oes rhestr i ychwanegu ati.
|
lists_html: Rydych ar fin ychwanegu hyd at <strong>%{total_items} o gyfrifon</strong> o <strong>%{filename}</strong> at eich <strong>rhestrau</strong> . Bydd rhestrau newydd yn cael eu creu os nad oes rhestr i ychwanegu ati.
|
||||||
muting_html: Rydych ar fin <strong>tewi</strong> hyd at <strong>%{total_items} cyfrif</strong> o <strong>%{filename}</strong> .
|
muting_html: Rydych ar fin <strong>anwybyddu</strong> hyd at <strong>%{total_items} cyfrif</strong> o <strong>%{filename}</strong>.
|
||||||
preface: Gallwch fewnforio data rydych chi wedi'i allforio o weinydd arall, fel rhestr o'r bobl rydych chi'n eu dilyn neu'n eu blocio.
|
preface: Gallwch fewnforio data rydych chi wedi'i allforio o weinydd arall, fel rhestr o'r bobl rydych chi'n eu dilyn neu'n eu blocio.
|
||||||
recent_imports: Mewnforion diweddar
|
recent_imports: Mewnforion diweddar
|
||||||
states:
|
states:
|
||||||
|
@ -1529,9 +1530,9 @@ cy:
|
||||||
too_many: Methu atodi mwy na 4 ffeil
|
too_many: Methu atodi mwy na 4 ffeil
|
||||||
migrations:
|
migrations:
|
||||||
acct: Symudwyd i
|
acct: Symudwyd i
|
||||||
cancel: Diddymu ailgyfeirio
|
cancel: Canslo ailgyfeirio
|
||||||
cancel_explanation: Bydd diddymu'r ailgyfeiriad yn ail agor eich cyfrif cyfredol, ond ni fydd yn dod â dilynwyr sydd wedi'u symud i'r cyfrif hwnnw yn ôl.
|
cancel_explanation: Bydd canslo'r ailgyfeiriad yn ail agor eich cyfrif cyfredol, ond ni fydd yn dod â dilynwyr sydd wedi'u symud i'r cyfrif hwnnw yn ôl.
|
||||||
cancelled_msg: Wedi diddymu'r ailgyfeiriad yn llwyddiannus.
|
cancelled_msg: Wedi canslo'r ailgyfeiriad yn llwyddiannus.
|
||||||
errors:
|
errors:
|
||||||
already_moved: yw'r un cyfrif rydych chi wedi symud iddo eisoes
|
already_moved: yw'r un cyfrif rydych chi wedi symud iddo eisoes
|
||||||
missing_also_known_as: nid yw'n arallenw o'r cyfrif hwn
|
missing_also_known_as: nid yw'n arallenw o'r cyfrif hwn
|
||||||
|
|
|
@ -93,7 +93,7 @@ cy:
|
||||||
updated: Mae eich cyfrinair wedi'i newid yn llwyddiannus. Rydych chi bellach wedi mewngofnodi.
|
updated: Mae eich cyfrinair wedi'i newid yn llwyddiannus. Rydych chi bellach wedi mewngofnodi.
|
||||||
updated_not_active: Mae eich cyfrinair wedi ei newid yn llwyddiannus.
|
updated_not_active: Mae eich cyfrinair wedi ei newid yn llwyddiannus.
|
||||||
registrations:
|
registrations:
|
||||||
destroyed: Hwyl fawr! Mae eich cyfrif wedi ei ddiddymu'n llwyddiannus. Gobeithiwn eich gweld chi eto'n fuan.
|
destroyed: Hwyl fawr! Mae eich cyfrif wedi ei chanslo'n llwyddiannus. Gobeithiwn eich gweld chi eto'n fuan.
|
||||||
signed_up: Croeso! Rydych wedi cofrestru'n llwyddiannus.
|
signed_up: Croeso! Rydych wedi cofrestru'n llwyddiannus.
|
||||||
signed_up_but_inactive: Yr ydych wedi cofrestru'n llwyddiannus. Fodd bynnag, ni allwn eich mewngofnodi achos nid yw eich cyfrif wedi ei hagor eto.
|
signed_up_but_inactive: Yr ydych wedi cofrestru'n llwyddiannus. Fodd bynnag, ni allwn eich mewngofnodi achos nid yw eich cyfrif wedi ei hagor eto.
|
||||||
signed_up_but_locked: Rydych chi wedi cofrestru'n llwyddiannus. Fodd bynnag, ni allem eich mewngofnodi oherwydd bod eich cyfrif wedi'i gloi.
|
signed_up_but_locked: Rydych chi wedi cofrestru'n llwyddiannus. Fodd bynnag, ni allem eich mewngofnodi oherwydd bod eich cyfrif wedi'i gloi.
|
||||||
|
|
|
@ -12,6 +12,7 @@ kab:
|
||||||
last_attempt: Γur-k yiwen n uɛraḍ-nniḍen kan send ad yettucekkel umiḍan-ik.
|
last_attempt: Γur-k yiwen n uɛraḍ-nniḍen kan send ad yettucekkel umiḍan-ik.
|
||||||
locked: Amiḍan-ik yettwargel.
|
locked: Amiḍan-ik yettwargel.
|
||||||
not_found_in_database: Tella tuccḍa deg %{authentication_keys} neγ deg wawal uffir.
|
not_found_in_database: Tella tuccḍa deg %{authentication_keys} neγ deg wawal uffir.
|
||||||
|
omniauth_user_creation_failure: Tuccḍa lawan n tmerna n umiḍan i timagit-a.
|
||||||
pending: Amiḍan-inek mazal-it deg ɛiwed n tmuγli.
|
pending: Amiḍan-inek mazal-it deg ɛiwed n tmuγli.
|
||||||
timeout: Tiɣimit n tuqqna tezri. Ma ulac aɣilif ɛiwed tuqqna akken ad tkemmleḍ.
|
timeout: Tiɣimit n tuqqna tezri. Ma ulac aɣilif ɛiwed tuqqna akken ad tkemmleḍ.
|
||||||
unauthenticated: Ilaq ad teqqneḍ neɣ ad tjerrḍeḍ akken ad tkemmelḍ.
|
unauthenticated: Ilaq ad teqqneḍ neɣ ad tjerrḍeḍ akken ad tkemmelḍ.
|
||||||
|
@ -47,21 +48,41 @@ kab:
|
||||||
subject: 'Mastodon: Iwellihen n uwennez n wawal uffir'
|
subject: 'Mastodon: Iwellihen n uwennez n wawal uffir'
|
||||||
title: Aɛiwed n wawal uffir
|
title: Aɛiwed n wawal uffir
|
||||||
two_factor_disabled:
|
two_factor_disabled:
|
||||||
|
explanation: Tuqqna tella tura s useqdec n tansa n yimayl tasuft d wawal n uεeddi.
|
||||||
subject: 'Mastodon: Asesteb s snat n tarrayin yensa'
|
subject: 'Mastodon: Asesteb s snat n tarrayin yensa'
|
||||||
|
subtitle: Asesteb s snat tarrayin i umiḍan-ik yensan.
|
||||||
title: Asesteb s snat n tarrayin insa
|
title: Asesteb s snat n tarrayin insa
|
||||||
two_factor_enabled:
|
two_factor_enabled:
|
||||||
|
explanation: Ajuṭu yettusirwen s usnas TOTP yeqqnen ilaq i wakken ad teqqneḍ.
|
||||||
subject: 'Mastodon: Asesteb s snat n tarrayin yermed'
|
subject: 'Mastodon: Asesteb s snat n tarrayin yermed'
|
||||||
|
subtitle: Asesteb s snat tarrayin yettwarmed i umiḍan-ik.
|
||||||
title: Asesteb s snat n tarrayin irmed
|
title: Asesteb s snat n tarrayin irmed
|
||||||
two_factor_recovery_codes_changed:
|
two_factor_recovery_codes_changed:
|
||||||
explanation: Tangalt n tuɣalin tettwaḥbes sakin nesnulfa-d yiwet d tamaynut.
|
explanation: Tangalt n tuɣalin tettwaḥbes sakin nesnulfa-d yiwet d tamaynut.
|
||||||
subject: 'Mastodon: Tingalin n tuɣalin n snat n tarayin ttwarnanat i tikkelt-nniḍen'
|
subject: 'Mastodon: Tingalin n tuɣalin n snat n tarayin ttwarnanat i tikkelt-nniḍen'
|
||||||
|
subtitle: Tangalt n tuɣalin tettwaḥbes sakin nesnulfa-d yiwet d tamaynut.
|
||||||
title: Tangalt n tuɣalin 2FA tettwabeddel
|
title: Tangalt n tuɣalin 2FA tettwabeddel
|
||||||
unlock_instructions:
|
unlock_instructions:
|
||||||
subject: 'Mastodon: iwelihhen n userreḥ'
|
subject: 'Mastodon: iwelihhen n userreḥ'
|
||||||
webauthn_credential:
|
webauthn_credential:
|
||||||
added:
|
added:
|
||||||
|
explanation: Tasarut-a n tɣellist tettwarna ɣer umiḍan-ik·im
|
||||||
subject: 'Maṣṭudun : Tasarutt tamaynutt n tɣellist'
|
subject: 'Maṣṭudun : Tasarutt tamaynutt n tɣellist'
|
||||||
title: Tasarut tamaynutt n tɣellist tamaynut tettwarna
|
title: Tasarut tamaynutt n tɣellist tamaynut tettwarna
|
||||||
|
deleted:
|
||||||
|
explanation: Tasarut-a n tɣellist tettwakkes seg umiḍan-ik·im
|
||||||
|
subject: 'Mastodon: Tasarut n tɣellsit tettwakkes'
|
||||||
|
title: Yiwet seg tsura-k·m n tɣellist tettwakkes
|
||||||
|
webauthn_disabled:
|
||||||
|
explanation: Yensa usesteb s tsura n tɣellist i umiḍan-ik.
|
||||||
|
extra: Tzemreḍ ad tkecmeḍ tura s useqdec asuf n ujuṭu yettwasran s usnas TOPTP yeqqnen.
|
||||||
|
subject: 'Mastodon: Asesteb s tsura n tɣellist yensa'
|
||||||
|
title: Tisura n tɣellist nsant
|
||||||
|
webauthn_enabled:
|
||||||
|
explanation: Asesteb n tsarut n tɣellist tettwarmed i umiḍan-ik.
|
||||||
|
extra: Tasarut-ik n tɣellist tezmer tura ad tettuseqdec i unekcum.
|
||||||
|
subject: 'Mastodon: Asesteb n tsarut n tɣellist yermed'
|
||||||
|
title: Tisura n tɣellist remdent
|
||||||
omniauth_callbacks:
|
omniauth_callbacks:
|
||||||
failure: Ur nezmir ara ad ak·akem-nsesṭeb seg %{kind} acku "%{reason}".
|
failure: Ur nezmir ara ad ak·akem-nsesṭeb seg %{kind} acku "%{reason}".
|
||||||
success: Asesṭeb idda akken iwata seg umiḍan %{kind}.
|
success: Asesṭeb idda akken iwata seg umiḍan %{kind}.
|
||||||
|
|
|
@ -75,7 +75,7 @@ nl:
|
||||||
title: Een van jouw beveiligingssleutels is verwijderd
|
title: Een van jouw beveiligingssleutels is verwijderd
|
||||||
webauthn_disabled:
|
webauthn_disabled:
|
||||||
explanation: Verificatie met beveiligingssleutels is uitgeschakeld voor je account.
|
explanation: Verificatie met beveiligingssleutels is uitgeschakeld voor je account.
|
||||||
extra: Het is nu alleen mogelijk om in te loggen met een door de authenticatie-app gegeneerde toegangscode.
|
extra: Het is nu alleen mogelijk om in te loggen met een door de authenticatie-app gegeneerde toegangscode als extra controle.
|
||||||
subject: 'Mastodon: Verificatie met beveiligingssleutels is uitgeschakeld'
|
subject: 'Mastodon: Verificatie met beveiligingssleutels is uitgeschakeld'
|
||||||
title: Beveiligingssleutels uitgeschakeld
|
title: Beveiligingssleutels uitgeschakeld
|
||||||
webauthn_enabled:
|
webauthn_enabled:
|
||||||
|
|
|
@ -75,7 +75,7 @@ zh-TW:
|
||||||
title: 您的一支安全密鑰已經被移除
|
title: 您的一支安全密鑰已經被移除
|
||||||
webauthn_disabled:
|
webauthn_disabled:
|
||||||
explanation: 您的帳號已停用安全金鑰身份驗證。
|
explanation: 您的帳號已停用安全金鑰身份驗證。
|
||||||
extra: 現在僅可使用配對的 TOTP 應用程式產生之 token 登入。
|
extra: 目前僅可使用配對的 TOTP 應用程式產生之 token 登入。
|
||||||
subject: Mastodon:安全密鑰認證方式已停用
|
subject: Mastodon:安全密鑰認證方式已停用
|
||||||
title: 已停用安全密鑰
|
title: 已停用安全密鑰
|
||||||
webauthn_enabled:
|
webauthn_enabled:
|
||||||
|
@ -90,7 +90,7 @@ zh-TW:
|
||||||
no_token: 您必須透過密碼重設信件才能存取此頁面。若確實如此,請確定輸入的網址是完整的。
|
no_token: 您必須透過密碼重設信件才能存取此頁面。若確實如此,請確定輸入的網址是完整的。
|
||||||
send_instructions: 若電子郵件地址存在於我們的資料庫,幾分鐘後您將於信箱中收到密碼復原連結。若未收到請檢查垃圾郵件資料夾。
|
send_instructions: 若電子郵件地址存在於我們的資料庫,幾分鐘後您將於信箱中收到密碼復原連結。若未收到請檢查垃圾郵件資料夾。
|
||||||
send_paranoid_instructions: 若電子郵件地址存在於我們的資料庫,幾分鐘後您將於信箱中收到密碼復原連結。若未收到請檢查垃圾郵件資料夾。
|
send_paranoid_instructions: 若電子郵件地址存在於我們的資料庫,幾分鐘後您將於信箱中收到密碼復原連結。若未收到請檢查垃圾郵件資料夾。
|
||||||
updated: 您的密碼已成功變更,現在已經登入。
|
updated: 您的密碼已成功變更,您現在已經成功登入。
|
||||||
updated_not_active: 您的密碼已成功變更。
|
updated_not_active: 您的密碼已成功變更。
|
||||||
registrations:
|
registrations:
|
||||||
destroyed: 再見!您的帳號已成功取消,期待再相逢。
|
destroyed: 再見!您的帳號已成功取消,期待再相逢。
|
||||||
|
|
|
@ -20,7 +20,7 @@ cy:
|
||||||
applications:
|
applications:
|
||||||
buttons:
|
buttons:
|
||||||
authorize: Awdurdodi
|
authorize: Awdurdodi
|
||||||
cancel: Diddymu
|
cancel: Canslo
|
||||||
destroy: Dinistrio
|
destroy: Dinistrio
|
||||||
edit: Golygu
|
edit: Golygu
|
||||||
submit: Cyflwyno
|
submit: Cyflwyno
|
||||||
|
@ -72,7 +72,7 @@ cy:
|
||||||
revoke: Ydych chi'n siŵr?
|
revoke: Ydych chi'n siŵr?
|
||||||
index:
|
index:
|
||||||
authorized_at: Wedi'i awdurdodi ar %{date}
|
authorized_at: Wedi'i awdurdodi ar %{date}
|
||||||
description_html: Mae'r rhain yn raglenni sy'n gallu cael mynediad i'ch cyfrif gan ddefnyddio'r API. Os oes yna rhaglenni nad ydych chi'n eu hadnabod yma, neu os yw rhaglen yn camymddwyn, gallwch chi ddiddymu ei fynediad.
|
description_html: Mae'r rhain yn raglenni sy'n gallu cael mynediad i'ch cyfrif gan ddefnyddio'r API. Os oes yna rhaglenni nad ydych chi'n eu hadnabod yma, neu os yw rhaglen yn camymddwyn, gallwch chi ddirymu ei fynediad.
|
||||||
last_used_at: Defnyddiwyd ddiwethaf ar %{date}
|
last_used_at: Defnyddiwyd ddiwethaf ar %{date}
|
||||||
never_used: Erioed wedi'i ddefnyddio
|
never_used: Erioed wedi'i ddefnyddio
|
||||||
scopes: Caniatâd
|
scopes: Caniatâd
|
||||||
|
@ -83,7 +83,7 @@ cy:
|
||||||
access_denied: Mae perchennog yr adnodd neu'r gweinydd awdurdodi wedi atal y cais.
|
access_denied: Mae perchennog yr adnodd neu'r gweinydd awdurdodi wedi atal y cais.
|
||||||
credential_flow_not_configured: Llif meini prawf cyfrinair perchennog yr adnodd wedi methu achos fod Doorkeeper.configure.resource_owner_from_credentials heb ei ffurfweddu.
|
credential_flow_not_configured: Llif meini prawf cyfrinair perchennog yr adnodd wedi methu achos fod Doorkeeper.configure.resource_owner_from_credentials heb ei ffurfweddu.
|
||||||
invalid_client: Methodd dilysu cleient oherwydd cleient anhysbys, dim dilysiad cleient wedi'i gynnwys, neu ddull dilysu heb ei gefnogi.
|
invalid_client: Methodd dilysu cleient oherwydd cleient anhysbys, dim dilysiad cleient wedi'i gynnwys, neu ddull dilysu heb ei gefnogi.
|
||||||
invalid_grant: Mae'r grant awdurdodi ar yr amod yn annilys, wedi dod i ben, wedi'i ddiddymu, nid yw'n cyfateb i'r URI ailgyfeirio a ddefnyddiwyd yn y cais am awdurdodiad, neu wedi'i roi i gleient arall.
|
invalid_grant: Mae'r grant awdurdodi ar yr amod yn annilys, wedi dod i ben, wedi'i ddirymu, nid yw'n cyfateb i'r URI ailgyfeirio a ddefnyddiwyd yn y cais am awdurdodiad, neu wedi'i roi i gleient arall.
|
||||||
invalid_redirect_uri: Nid yw'r uri ailgyfeirio a gynhwysir yn ddilys.
|
invalid_redirect_uri: Nid yw'r uri ailgyfeirio a gynhwysir yn ddilys.
|
||||||
invalid_request:
|
invalid_request:
|
||||||
missing_param: 'Paramedr gofynnol ar goll: %{value}.'
|
missing_param: 'Paramedr gofynnol ar goll: %{value}.'
|
||||||
|
@ -135,6 +135,7 @@ cy:
|
||||||
media: Atodiadau cyfryngau
|
media: Atodiadau cyfryngau
|
||||||
mutes: Anwybyddiadau
|
mutes: Anwybyddiadau
|
||||||
notifications: Hysbysiadau
|
notifications: Hysbysiadau
|
||||||
|
profile: Eich proffil Mastodon
|
||||||
push: Hysbysiadau gwthiadwy
|
push: Hysbysiadau gwthiadwy
|
||||||
reports: Adroddiadau
|
reports: Adroddiadau
|
||||||
search: Chwilio
|
search: Chwilio
|
||||||
|
@ -165,6 +166,7 @@ cy:
|
||||||
admin:write:reports: cyflawni camau cymedroli ar adroddiadau
|
admin:write:reports: cyflawni camau cymedroli ar adroddiadau
|
||||||
crypto: defnyddio amgryptio ben i ben
|
crypto: defnyddio amgryptio ben i ben
|
||||||
follow: addasu perthnasau cyfrif
|
follow: addasu perthnasau cyfrif
|
||||||
|
profile: darllen dim ond gwybodaeth proffil eich cyfrif
|
||||||
push: derbyn eich hysbysiadau gwthiadwy
|
push: derbyn eich hysbysiadau gwthiadwy
|
||||||
read: darllen holl ddata eich cyfrif
|
read: darllen holl ddata eich cyfrif
|
||||||
read:accounts: gweld gwybodaeth y cyfrif
|
read:accounts: gweld gwybodaeth y cyfrif
|
||||||
|
|
|
@ -5,6 +5,7 @@ kab:
|
||||||
doorkeeper/application:
|
doorkeeper/application:
|
||||||
name: Isem n usnas
|
name: Isem n usnas
|
||||||
redirect_uri: URI n uwelleh
|
redirect_uri: URI n uwelleh
|
||||||
|
scopes: Tinerfadin
|
||||||
website: Asmel web n usnas
|
website: Asmel web n usnas
|
||||||
errors:
|
errors:
|
||||||
models:
|
models:
|
||||||
|
@ -39,6 +40,7 @@ kab:
|
||||||
empty: Ulac ɣur-k·m isnasen.
|
empty: Ulac ɣur-k·m isnasen.
|
||||||
name: Isem
|
name: Isem
|
||||||
new: Asnas amaynut
|
new: Asnas amaynut
|
||||||
|
scopes: Tinerfadin
|
||||||
show: Ẓer
|
show: Ẓer
|
||||||
title: Isnasen-ik·im
|
title: Isnasen-ik·im
|
||||||
new:
|
new:
|
||||||
|
@ -47,6 +49,8 @@ kab:
|
||||||
actions: Tigawin
|
actions: Tigawin
|
||||||
application_id: ID n usnas
|
application_id: ID n usnas
|
||||||
callback_urls: URL n tririt n wawal
|
callback_urls: URL n tririt n wawal
|
||||||
|
scopes: Tinerfadin
|
||||||
|
secret: Tuffirt n umsaɣ
|
||||||
title: 'Asnas: %{name}'
|
title: 'Asnas: %{name}'
|
||||||
authorizations:
|
authorizations:
|
||||||
buttons:
|
buttons:
|
||||||
|
@ -55,6 +59,7 @@ kab:
|
||||||
error:
|
error:
|
||||||
title: Tella-d tuccḍa
|
title: Tella-d tuccḍa
|
||||||
new:
|
new:
|
||||||
|
review_permissions: Asenqed n tsirag
|
||||||
title: Tlaq tsiregt
|
title: Tlaq tsiregt
|
||||||
show:
|
show:
|
||||||
title: Nɣel tangalt n wurag sakkin senteḍ-itt deg usnas.
|
title: Nɣel tangalt n wurag sakkin senteḍ-itt deg usnas.
|
||||||
|
@ -64,8 +69,12 @@ kab:
|
||||||
confirmations:
|
confirmations:
|
||||||
revoke: Tetḥeqqeḍ?
|
revoke: Tetḥeqqeḍ?
|
||||||
index:
|
index:
|
||||||
|
authorized_at: Yettwasireg ɣef %{date}
|
||||||
description_html: Ha-t-an yisnasen i izemren ad kecmen ɣer umiḍan-ik·im, s useqdec n API. Ma llan yisnasen ur teεqileḍ ara da, neɣ kra n wesnas ur iteddu ara akken ilaq, tzemreḍ ad tekkseḍ anekcum-is.
|
description_html: Ha-t-an yisnasen i izemren ad kecmen ɣer umiḍan-ik·im, s useqdec n API. Ma llan yisnasen ur teεqileḍ ara da, neɣ kra n wesnas ur iteddu ara akken ilaq, tzemreḍ ad tekkseḍ anekcum-is.
|
||||||
last_used_at: Yettwaseqdec i tikkelt taneggarut ass n %{date}
|
last_used_at: Yettwaseqdec i tikkelt taneggarut ass n %{date}
|
||||||
|
never_used: Urǧin yettwaseqdac
|
||||||
|
scopes: Tisirag
|
||||||
|
superapp: Adigan
|
||||||
title: Isnasen-ik·im yettusirgen
|
title: Isnasen-ik·im yettusirgen
|
||||||
errors:
|
errors:
|
||||||
messages:
|
messages:
|
||||||
|
@ -82,13 +91,28 @@ kab:
|
||||||
destroy:
|
destroy:
|
||||||
notice: Yettwaḥwi wesnas.
|
notice: Yettwaḥwi wesnas.
|
||||||
grouped_scopes:
|
grouped_scopes:
|
||||||
|
access:
|
||||||
|
read: Anekcum i tɣuri kan
|
||||||
|
read/write: Anekcum i tɣuri d tira
|
||||||
|
write: Anekcum i tira kan
|
||||||
title:
|
title:
|
||||||
accounts: Imiḍanen
|
accounts: Imiḍanen
|
||||||
admin/accounts: Tadbelt n imiḍan
|
admin/accounts: Tadbelt n imiḍan
|
||||||
|
admin/all: Akk timahilin tinebdalin
|
||||||
|
admin/reports: Tadbelt n yineqqisen
|
||||||
|
blocks: Yewḥel
|
||||||
|
bookmarks: Ticraḍ
|
||||||
|
conversations: Idiwenniyen
|
||||||
crypto: Awgelhen seg yixef ɣer yixef
|
crypto: Awgelhen seg yixef ɣer yixef
|
||||||
|
favourites: Imenyafen
|
||||||
filters: Imzizdigen
|
filters: Imzizdigen
|
||||||
|
follow: Aḍfar, asgugem akked usewḥel
|
||||||
|
follows: Aḍfar
|
||||||
lists: Tibdarin
|
lists: Tibdarin
|
||||||
|
media: Imeddayen n umidya
|
||||||
|
mutes: Yeggugem
|
||||||
notifications: Tilɣa
|
notifications: Tilɣa
|
||||||
|
profile: Amaɣnu-k Mastodon
|
||||||
push: Tilɣa yettudemmren
|
push: Tilɣa yettudemmren
|
||||||
reports: Ineqqisen
|
reports: Ineqqisen
|
||||||
search: Nadi
|
search: Nadi
|
||||||
|
|
|
@ -31,7 +31,7 @@ ko:
|
||||||
form:
|
form:
|
||||||
error: 이런! 오류를 확인하세요
|
error: 이런! 오류를 확인하세요
|
||||||
help:
|
help:
|
||||||
native_redirect_uri: "%{native_redirect_uri}에서 로컬 테스트를 할 수 있습니다."
|
native_redirect_uri: "%{native_redirect_uri}를 이용해 로컬 테스트를 할 수 있습니다"
|
||||||
redirect_uri: 한 줄에 하나의 URI를 작성하세요
|
redirect_uri: 한 줄에 하나의 URI를 작성하세요
|
||||||
scopes: 스페이스로 범위를 구분하세요. 빈 칸으로 놔두면 기본 범위를 사용합니다.
|
scopes: 스페이스로 범위를 구분하세요. 빈 칸으로 놔두면 기본 범위를 사용합니다.
|
||||||
index:
|
index:
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue