Merge commit 'a9643cb7e77fd345b48877ed958d406403ad1b46' into glitch-soc/merge-upstream

Conflicts:
- `.github/workflows/build-nightly.yml`:
  We had modified the file to disable the custom ARM64 builder.
  Upstream has removed it, using github's runners.
  Took upstream's changes.
- `.github/workflows/build-push-pr.yml`:
  We had modified the file to disable the custom ARM64 builder.
  Upstream has removed it, using github's runners.
  Took upstream's changes.
- `.github/workflows/build-releases.yml`:
  We had modified the file to disable the custom ARM64 builder.
  Upstream has removed it, using github's runners.
  Took upstream's changes.
- `.github/workflows/build-security.yml`:
  We had modified the file to disable the custom ARM64 builder.
  Upstream has removed it, using github's runners.
  Took upstream's changes.
This commit is contained in:
Claire 2025-02-05 18:03:22 +01:00
commit 6ab5b9c790
39 changed files with 307 additions and 197 deletions

View File

@ -1,14 +1,9 @@
on: on:
workflow_call: workflow_call:
inputs: inputs:
platforms:
required: true
type: string
cache: cache:
type: boolean type: boolean
default: true default: true
use_native_arm64_builder:
type: boolean
push_to_images: push_to_images:
type: string type: string
version_prerelease: version_prerelease:
@ -24,42 +19,36 @@ on:
file_to_build: file_to_build:
type: string type: string
# This builds multiple images with one runner each, allowing us to build for multiple architectures
# using Github's runners.
# The two-step process is adapted form:
# https://docs.docker.com/build/ci/github-actions/multi-platform/#distribute-build-across-multiple-runners
jobs: jobs:
# Build each (amd64 and arm64) image separately
build-image: build-image:
runs-on: ubuntu-latest runs-on: ${{ startsWith(matrix.platform, 'linux/arm') && 'ubuntu-24.04-arm' || 'ubuntu-24.04' }}
strategy:
fail-fast: false
matrix:
platform:
- linux/amd64
- linux/arm64
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- uses: docker/setup-qemu-action@v3 - name: Prepare
if: contains(inputs.platforms, 'linux/arm64') && !inputs.use_native_arm64_builder env:
PUSH_TO_IMAGES: ${{ inputs.push_to_images }}
run: |
platform=${{ matrix.platform }}
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
# Transform multi-line variable into comma-separated variable
image_names=${PUSH_TO_IMAGES//$'\n'/,}
echo "IMAGE_NAMES=${image_names%,}" >> $GITHUB_ENV
- uses: docker/setup-buildx-action@v3 - uses: docker/setup-buildx-action@v3
id: buildx id: buildx
if: ${{ !(inputs.use_native_arm64_builder && contains(inputs.platforms, 'linux/arm64')) }}
- name: Start a local Docker Builder
if: inputs.use_native_arm64_builder && contains(inputs.platforms, 'linux/arm64')
run: |
docker run --rm -d --name buildkitd -p 1234:1234 --privileged moby/buildkit:latest --addr tcp://0.0.0.0:1234
- uses: docker/setup-buildx-action@v3
id: buildx-native
if: inputs.use_native_arm64_builder && contains(inputs.platforms, 'linux/arm64')
with:
driver: remote
endpoint: tcp://localhost:1234
platforms: linux/amd64
append: |
- endpoint: tcp://${{ vars.DOCKER_BUILDER_HETZNER_ARM64_01_HOST }}:13865
platforms: linux/arm64
name: mastodon-docker-builder-arm64-01
driver-opts:
- servername=mastodon-docker-builder-arm64-01
env:
BUILDER_NODE_1_AUTH_TLS_CACERT: ${{ secrets.DOCKER_BUILDER_HETZNER_ARM64_01_CACERT }}
BUILDER_NODE_1_AUTH_TLS_CERT: ${{ secrets.DOCKER_BUILDER_HETZNER_ARM64_01_CERT }}
BUILDER_NODE_1_AUTH_TLS_KEY: ${{ secrets.DOCKER_BUILDER_HETZNER_ARM64_01_KEY }}
- name: Log in to Docker Hub - name: Log in to Docker Hub
if: contains(inputs.push_to_images, 'tootsuite') if: contains(inputs.push_to_images, 'tootsuite')
@ -76,16 +65,18 @@ jobs:
username: ${{ github.actor }} username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }} password: ${{ secrets.GITHUB_TOKEN }}
- uses: docker/metadata-action@v5 - name: Docker meta
id: meta id: meta
uses: docker/metadata-action@v5
if: ${{ inputs.push_to_images != '' }} if: ${{ inputs.push_to_images != '' }}
with: with:
images: ${{ inputs.push_to_images }} images: ${{ inputs.push_to_images }}
flavor: ${{ inputs.flavor }} flavor: ${{ inputs.flavor }}
tags: ${{ inputs.tags }}
labels: ${{ inputs.labels }} labels: ${{ inputs.labels }}
- uses: docker/build-push-action@v6 - name: Build and push by digest
id: build
uses: docker/build-push-action@v6
with: with:
context: . context: .
file: ${{ inputs.file_to_build }} file: ${{ inputs.file_to_build }}
@ -93,11 +84,87 @@ jobs:
MASTODON_VERSION_PRERELEASE=${{ inputs.version_prerelease }} MASTODON_VERSION_PRERELEASE=${{ inputs.version_prerelease }}
MASTODON_VERSION_METADATA=${{ inputs.version_metadata }} MASTODON_VERSION_METADATA=${{ inputs.version_metadata }}
SOURCE_COMMIT=${{ github.sha }} SOURCE_COMMIT=${{ github.sha }}
platforms: ${{ inputs.platforms }} platforms: ${{ matrix.platform }}
provenance: false provenance: false
builder: ${{ steps.buildx.outputs.name || steps.buildx-native.outputs.name }}
push: ${{ inputs.push_to_images != '' }} push: ${{ inputs.push_to_images != '' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: ${{ inputs.cache && 'type=gha' || '' }} cache-from: ${{ inputs.cache && 'type=gha' || '' }}
cache-to: ${{ inputs.cache && 'type=gha,mode=max' || '' }} cache-to: ${{ inputs.cache && 'type=gha,mode=max' || '' }}
outputs: type=image,"name=${{ env.IMAGE_NAMES }}",push-by-digest=true,name-canonical=true,push=${{ inputs.push_to_images != '' }}
- name: Export digest
if: ${{ inputs.push_to_images != '' }}
run: |
mkdir -p "${{ runner.temp }}/digests"
digest="${{ steps.build.outputs.digest }}"
touch "${{ runner.temp }}/digests/${digest#sha256:}"
- name: Upload digest
if: ${{ inputs.push_to_images != '' }}
uses: actions/upload-artifact@v4
with:
# `hashFiles` is used to disambiguate between streaming and non-streaming images
name: digests-${{ hashFiles(inputs.file_to_build) }}-${{ env.PLATFORM_PAIR }}
path: ${{ runner.temp }}/digests/*
if-no-files-found: error
retention-days: 1
# Then merge the docker images into a single one
merge-images:
if: ${{ inputs.push_to_images != '' }}
runs-on: ubuntu-24.04
needs:
- build-image
env:
PUSH_TO_IMAGES: ${{ inputs.push_to_images }}
steps:
- uses: actions/checkout@v4
- name: Download digests
uses: actions/download-artifact@v4
with:
path: ${{ runner.temp }}/digests
# `hashFiles` is used to disambiguate between streaming and non-streaming images
pattern: digests-${{ hashFiles(inputs.file_to_build) }}-*
merge-multiple: true
- name: Log in to Docker Hub
if: contains(inputs.push_to_images, 'tootsuite')
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Log in to the GitHub Container registry
if: contains(inputs.push_to_images, 'ghcr.io')
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
if: ${{ inputs.push_to_images != '' }}
with:
images: ${{ inputs.push_to_images }}
flavor: ${{ inputs.flavor }}
tags: ${{ inputs.tags }}
labels: ${{ inputs.labels }}
- name: Create manifest list and push
working-directory: ${{ runner.temp }}/digests
run: |
echo "$PUSH_TO_IMAGES" | xargs -I{} \
docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
$(printf '{}@sha256:%s ' *)
- name: Inspect image
run: |
echo "$PUSH_TO_IMAGES" | xargs -i{} \
docker buildx imagetools inspect {}:${{ steps.meta.outputs.version }}

View File

@ -26,8 +26,6 @@ jobs:
uses: ./.github/workflows/build-container-image.yml uses: ./.github/workflows/build-container-image.yml
with: with:
file_to_build: Dockerfile file_to_build: Dockerfile
platforms: linux/amd64,linux/arm64
use_native_arm64_builder: false
cache: false cache: false
push_to_images: | push_to_images: |
ghcr.io/${{ github.repository_owner }}/mastodon ghcr.io/${{ github.repository_owner }}/mastodon
@ -47,8 +45,6 @@ jobs:
uses: ./.github/workflows/build-container-image.yml uses: ./.github/workflows/build-container-image.yml
with: with:
file_to_build: streaming/Dockerfile file_to_build: streaming/Dockerfile
platforms: linux/amd64,linux/arm64
use_native_arm64_builder: false
cache: false cache: false
push_to_images: | push_to_images: |
ghcr.io/${{ github.repository_owner }}/mastodon-streaming ghcr.io/${{ github.repository_owner }}/mastodon-streaming

View File

@ -32,8 +32,6 @@ jobs:
uses: ./.github/workflows/build-container-image.yml uses: ./.github/workflows/build-container-image.yml
with: with:
file_to_build: Dockerfile file_to_build: Dockerfile
platforms: linux/amd64,linux/arm64
use_native_arm64_builder: false
push_to_images: | push_to_images: |
ghcr.io/${{ github.repository_owner }}/mastodon ghcr.io/${{ github.repository_owner }}/mastodon
version_metadata: ${{ needs.compute-suffix.outputs.metadata }} version_metadata: ${{ needs.compute-suffix.outputs.metadata }}
@ -49,8 +47,6 @@ jobs:
uses: ./.github/workflows/build-container-image.yml uses: ./.github/workflows/build-container-image.yml
with: with:
file_to_build: streaming/Dockerfile file_to_build: streaming/Dockerfile
platforms: linux/amd64,linux/arm64
use_native_arm64_builder: false
push_to_images: | push_to_images: |
ghcr.io/${{ github.repository_owner }}/mastodon-streaming ghcr.io/${{ github.repository_owner }}/mastodon-streaming
version_metadata: ${{ needs.compute-suffix.outputs.metadata }} version_metadata: ${{ needs.compute-suffix.outputs.metadata }}

View File

@ -13,8 +13,6 @@ jobs:
uses: ./.github/workflows/build-container-image.yml uses: ./.github/workflows/build-container-image.yml
with: with:
file_to_build: Dockerfile file_to_build: Dockerfile
platforms: linux/amd64,linux/arm64
use_native_arm64_builder: false
push_to_images: | push_to_images: |
ghcr.io/${{ github.repository_owner }}/mastodon ghcr.io/${{ github.repository_owner }}/mastodon
# Do not use cache when building releases, so apt update is always ran and the release always contain the latest packages # Do not use cache when building releases, so apt update is always ran and the release always contain the latest packages
@ -33,8 +31,6 @@ jobs:
uses: ./.github/workflows/build-container-image.yml uses: ./.github/workflows/build-container-image.yml
with: with:
file_to_build: streaming/Dockerfile file_to_build: streaming/Dockerfile
platforms: linux/amd64,linux/arm64
use_native_arm64_builder: false
push_to_images: | push_to_images: |
ghcr.io/${{ github.repository_owner }}/mastodon-streaming ghcr.io/${{ github.repository_owner }}/mastodon-streaming
# Do not use cache when building releases, so apt update is always ran and the release always contain the latest packages # Do not use cache when building releases, so apt update is always ran and the release always contain the latest packages

View File

@ -23,8 +23,6 @@ jobs:
uses: ./.github/workflows/build-container-image.yml uses: ./.github/workflows/build-container-image.yml
with: with:
file_to_build: Dockerfile file_to_build: Dockerfile
platforms: linux/amd64,linux/arm64
use_native_arm64_builder: false
cache: false cache: false
push_to_images: | push_to_images: |
ghcr.io/${{ github.repository_owner }}/mastodon ghcr.io/${{ github.repository_owner }}/mastodon
@ -44,8 +42,6 @@ jobs:
uses: ./.github/workflows/build-container-image.yml uses: ./.github/workflows/build-container-image.yml
with: with:
file_to_build: streaming/Dockerfile file_to_build: streaming/Dockerfile
platforms: linux/amd64,linux/arm64
use_native_arm64_builder: false
cache: false cache: false
push_to_images: | push_to_images: |
ghcr.io/${{ github.repository_owner }}/mastodon-streaming ghcr.io/${{ github.repository_owner }}/mastodon-streaming

View File

@ -20,7 +20,6 @@ jobs:
uses: ./.github/workflows/build-container-image.yml uses: ./.github/workflows/build-container-image.yml
with: with:
file_to_build: Dockerfile file_to_build: Dockerfile
platforms: linux/amd64 # Testing only on native platform so it is performant
cache: true cache: true
build-image-streaming: build-image-streaming:
@ -31,5 +30,4 @@ jobs:
uses: ./.github/workflows/build-container-image.yml uses: ./.github/workflows/build-container-image.yml
with: with:
file_to_build: streaming/Dockerfile file_to_build: streaming/Dockerfile
platforms: linux/amd64 # Testing only on native platform so it is performant
cache: true cache: true

View File

@ -116,7 +116,7 @@ group :opentelemetry do
gem 'opentelemetry-instrumentation-net_http', '~> 0.23.0', require: false gem 'opentelemetry-instrumentation-net_http', '~> 0.23.0', require: false
gem 'opentelemetry-instrumentation-pg', '~> 0.30.0', require: false gem 'opentelemetry-instrumentation-pg', '~> 0.30.0', require: false
gem 'opentelemetry-instrumentation-rack', '~> 0.26.0', require: false gem 'opentelemetry-instrumentation-rack', '~> 0.26.0', require: false
gem 'opentelemetry-instrumentation-rails', '~> 0.35.0', require: false gem 'opentelemetry-instrumentation-rails', '~> 0.36.0', require: false
gem 'opentelemetry-instrumentation-redis', '~> 0.26.0', require: false gem 'opentelemetry-instrumentation-redis', '~> 0.26.0', require: false
gem 'opentelemetry-instrumentation-sidekiq', '~> 0.26.0', require: false gem 'opentelemetry-instrumentation-sidekiq', '~> 0.26.0', require: false
gem 'opentelemetry-sdk', '~> 1.4', require: false gem 'opentelemetry-sdk', '~> 1.4', require: false

View File

@ -480,7 +480,7 @@ GEM
opentelemetry-api (~> 1.0) opentelemetry-api (~> 1.0)
opentelemetry-instrumentation-active_support (~> 0.7) opentelemetry-instrumentation-active_support (~> 0.7)
opentelemetry-instrumentation-base (~> 0.23.0) opentelemetry-instrumentation-base (~> 0.23.0)
opentelemetry-instrumentation-action_pack (0.11.0) opentelemetry-instrumentation-action_pack (0.12.0)
opentelemetry-api (~> 1.0) opentelemetry-api (~> 1.0)
opentelemetry-instrumentation-base (~> 0.23.0) opentelemetry-instrumentation-base (~> 0.23.0)
opentelemetry-instrumentation-rack (~> 0.21) opentelemetry-instrumentation-rack (~> 0.21)
@ -498,6 +498,10 @@ GEM
opentelemetry-instrumentation-active_record (0.9.0) opentelemetry-instrumentation-active_record (0.9.0)
opentelemetry-api (~> 1.0) opentelemetry-api (~> 1.0)
opentelemetry-instrumentation-base (~> 0.23.0) opentelemetry-instrumentation-base (~> 0.23.0)
opentelemetry-instrumentation-active_storage (0.1.0)
opentelemetry-api (~> 1.4.0)
opentelemetry-instrumentation-active_support (~> 0.7)
opentelemetry-instrumentation-base (~> 0.23.0)
opentelemetry-instrumentation-active_support (0.8.0) opentelemetry-instrumentation-active_support (0.8.0)
opentelemetry-api (~> 1.0) opentelemetry-api (~> 1.0)
opentelemetry-instrumentation-base (~> 0.23.0) opentelemetry-instrumentation-base (~> 0.23.0)
@ -530,17 +534,18 @@ GEM
opentelemetry-instrumentation-rack (0.26.0) opentelemetry-instrumentation-rack (0.26.0)
opentelemetry-api (~> 1.0) opentelemetry-api (~> 1.0)
opentelemetry-instrumentation-base (~> 0.23.0) opentelemetry-instrumentation-base (~> 0.23.0)
opentelemetry-instrumentation-rails (0.35.1) opentelemetry-instrumentation-rails (0.36.0)
opentelemetry-api (~> 1.0) opentelemetry-api (~> 1.0)
opentelemetry-instrumentation-action_mailer (~> 0.4.0) opentelemetry-instrumentation-action_mailer (~> 0.4.0)
opentelemetry-instrumentation-action_pack (~> 0.11.0) opentelemetry-instrumentation-action_pack (~> 0.12.0)
opentelemetry-instrumentation-action_view (~> 0.9.0) opentelemetry-instrumentation-action_view (~> 0.9.0)
opentelemetry-instrumentation-active_job (~> 0.8.0) opentelemetry-instrumentation-active_job (~> 0.8.0)
opentelemetry-instrumentation-active_record (~> 0.9.0) opentelemetry-instrumentation-active_record (~> 0.9.0)
opentelemetry-instrumentation-active_storage (~> 0.1.0)
opentelemetry-instrumentation-active_support (~> 0.8.0) opentelemetry-instrumentation-active_support (~> 0.8.0)
opentelemetry-instrumentation-base (~> 0.23.0) opentelemetry-instrumentation-base (~> 0.23.0)
opentelemetry-instrumentation-concurrent_ruby (~> 0.22.0) opentelemetry-instrumentation-concurrent_ruby (~> 0.22.0)
opentelemetry-instrumentation-redis (0.26.0) opentelemetry-instrumentation-redis (0.26.1)
opentelemetry-api (~> 1.0) opentelemetry-api (~> 1.0)
opentelemetry-instrumentation-base (~> 0.23.0) opentelemetry-instrumentation-base (~> 0.23.0)
opentelemetry-instrumentation-sidekiq (0.26.0) opentelemetry-instrumentation-sidekiq (0.26.0)
@ -548,7 +553,7 @@ GEM
opentelemetry-instrumentation-base (~> 0.23.0) opentelemetry-instrumentation-base (~> 0.23.0)
opentelemetry-registry (0.3.1) opentelemetry-registry (0.3.1)
opentelemetry-api (~> 1.1) opentelemetry-api (~> 1.1)
opentelemetry-sdk (1.6.0) opentelemetry-sdk (1.7.0)
opentelemetry-api (~> 1.1) opentelemetry-api (~> 1.1)
opentelemetry-common (~> 0.20) opentelemetry-common (~> 0.20)
opentelemetry-registry (~> 0.2) opentelemetry-registry (~> 0.2)
@ -977,7 +982,7 @@ DEPENDENCIES
opentelemetry-instrumentation-net_http (~> 0.23.0) opentelemetry-instrumentation-net_http (~> 0.23.0)
opentelemetry-instrumentation-pg (~> 0.30.0) opentelemetry-instrumentation-pg (~> 0.30.0)
opentelemetry-instrumentation-rack (~> 0.26.0) opentelemetry-instrumentation-rack (~> 0.26.0)
opentelemetry-instrumentation-rails (~> 0.35.0) opentelemetry-instrumentation-rails (~> 0.36.0)
opentelemetry-instrumentation-redis (~> 0.26.0) opentelemetry-instrumentation-redis (~> 0.26.0)
opentelemetry-instrumentation-sidekiq (~> 0.26.0) opentelemetry-instrumentation-sidekiq (~> 0.26.0)
opentelemetry-sdk (~> 1.4) opentelemetry-sdk (~> 1.4)

View File

@ -7,17 +7,12 @@ module Admin
layout 'admin' layout 'admin'
before_action :set_cache_headers
before_action :set_referrer_policy_header before_action :set_referrer_policy_header
after_action :verify_authorized after_action :verify_authorized
private private
def set_cache_headers
response.cache_control.replace(private: true, no_store: true)
end
def set_referrer_policy_header def set_referrer_policy_header
response.headers['Referrer-Policy'] = 'same-origin' response.headers['Referrer-Policy'] = 'same-origin'
end end

View File

@ -12,7 +12,6 @@ class Auth::RegistrationsController < Devise::RegistrationsController
before_action :set_sessions, only: [:edit, :update] before_action :set_sessions, only: [:edit, :update]
before_action :set_strikes, only: [:edit, :update] before_action :set_strikes, only: [:edit, :update]
before_action :require_not_suspended!, only: [:update] before_action :require_not_suspended!, only: [:update]
before_action :set_cache_headers, only: [:edit, :update]
before_action :set_rules, only: :new before_action :set_rules, only: :new
before_action :require_rules_acceptance!, only: :new before_action :require_rules_acceptance!, only: :new
before_action :set_registration_form_time, only: :new before_action :set_registration_form_time, only: :new
@ -139,10 +138,6 @@ class Auth::RegistrationsController < Devise::RegistrationsController
set_locale { render :rules } set_locale { render :rules }
end end
def set_cache_headers
response.cache_control.replace(private: true, no_store: true)
end
def is_flashing_format? # rubocop:disable Naming/PredicateName def is_flashing_format? # rubocop:disable Naming/PredicateName
if params[:action] == 'create' if params[:action] == 'create'
false # Disable flash messages for sign-up false # Disable flash messages for sign-up

View File

@ -8,11 +8,4 @@ class Disputes::BaseController < ApplicationController
skip_before_action :require_functional! skip_before_action :require_functional!
before_action :authenticate_user! before_action :authenticate_user!
before_action :set_cache_headers
private
def set_cache_headers
response.cache_control.replace(private: true, no_store: true)
end
end end

View File

@ -6,7 +6,6 @@ class Filters::StatusesController < ApplicationController
before_action :authenticate_user! before_action :authenticate_user!
before_action :set_filter before_action :set_filter
before_action :set_status_filters before_action :set_status_filters
before_action :set_cache_headers
PER_PAGE = 20 PER_PAGE = 20
@ -40,8 +39,4 @@ class Filters::StatusesController < ApplicationController
def action_from_button def action_from_button
'remove' if params[:remove] 'remove' if params[:remove]
end end
def set_cache_headers
response.cache_control.replace(private: true, no_store: true)
end
end end

View File

@ -5,7 +5,6 @@ class FiltersController < ApplicationController
before_action :authenticate_user! before_action :authenticate_user!
before_action :set_filter, only: [:edit, :update, :destroy] before_action :set_filter, only: [:edit, :update, :destroy]
before_action :set_cache_headers
def index def index
@filters = current_account.custom_filters.includes(:keywords, :statuses).order(:phrase) @filters = current_account.custom_filters.includes(:keywords, :statuses).order(:phrase)
@ -50,8 +49,4 @@ class FiltersController < ApplicationController
def resource_params def resource_params
params.expect(custom_filter: [:title, :expires_in, :filter_action, context: [], keywords_attributes: [[:id, :keyword, :whole_word, :_destroy]]]) params.expect(custom_filter: [:title, :expires_in, :filter_action, context: [], keywords_attributes: [[:id, :keyword, :whole_word, :_destroy]]])
end end
def set_cache_headers
response.cache_control.replace(private: true, no_store: true)
end
end end

View File

@ -6,7 +6,6 @@ class InvitesController < ApplicationController
layout 'admin' layout 'admin'
before_action :authenticate_user! before_action :authenticate_user!
before_action :set_cache_headers
def index def index
authorize :invite, :create? authorize :invite, :create?
@ -45,8 +44,4 @@ class InvitesController < ApplicationController
def resource_params def resource_params
params.expect(invite: [:max_uses, :expires_in, :autofollow, :comment]) params.expect(invite: [:max_uses, :expires_in, :autofollow, :comment])
end end
def set_cache_headers
response.cache_control.replace(private: true, no_store: true)
end
end end

View File

@ -5,7 +5,6 @@ class Oauth::AuthorizationsController < Doorkeeper::AuthorizationsController
before_action :store_current_location before_action :store_current_location
before_action :authenticate_resource_owner! before_action :authenticate_resource_owner!
before_action :set_cache_headers
content_security_policy do |p| content_security_policy do |p|
p.form_action(false) p.form_action(false)
@ -32,8 +31,4 @@ class Oauth::AuthorizationsController < Doorkeeper::AuthorizationsController
def truthy_param?(key) def truthy_param?(key)
ActiveModel::Type::Boolean.new.cast(params[key]) ActiveModel::Type::Boolean.new.cast(params[key])
end end
def set_cache_headers
response.cache_control.replace(private: true, no_store: true)
end
end end

View File

@ -6,7 +6,6 @@ class Oauth::AuthorizedApplicationsController < Doorkeeper::AuthorizedApplicatio
before_action :store_current_location before_action :store_current_location
before_action :authenticate_resource_owner! before_action :authenticate_resource_owner!
before_action :require_not_suspended!, only: :destroy before_action :require_not_suspended!, only: :destroy
before_action :set_cache_headers
before_action :set_last_used_at_by_app, only: :index, unless: -> { request.format == :json } before_action :set_last_used_at_by_app, only: :index, unless: -> { request.format == :json }
@ -30,10 +29,6 @@ class Oauth::AuthorizedApplicationsController < Doorkeeper::AuthorizedApplicatio
forbidden if current_account.unavailable? forbidden if current_account.unavailable?
end end
def set_cache_headers
response.cache_control.replace(private: true, no_store: true)
end
def set_last_used_at_by_app def set_last_used_at_by_app
@last_used_at_by_app = current_resource_owner.applications_last_used @last_used_at_by_app = current_resource_owner.applications_last_used
end end

View File

@ -6,7 +6,6 @@ class RelationshipsController < ApplicationController
before_action :authenticate_user! before_action :authenticate_user!
before_action :set_accounts, only: :show before_action :set_accounts, only: :show
before_action :set_relationships, only: :show before_action :set_relationships, only: :show
before_action :set_cache_headers
helper_method :following_relationship?, :followed_by_relationship?, :mutual_relationship? helper_method :following_relationship?, :followed_by_relationship?, :mutual_relationship?
@ -66,8 +65,4 @@ class RelationshipsController < ApplicationController
'remove_domains_from_followers' 'remove_domains_from_followers'
end end
end end
def set_cache_headers
response.cache_control.replace(private: true, no_store: true)
end
end end

View File

@ -4,14 +4,9 @@ class Settings::BaseController < ApplicationController
layout 'admin' layout 'admin'
before_action :authenticate_user! before_action :authenticate_user!
before_action :set_cache_headers
private private
def set_cache_headers
response.cache_control.replace(private: true, no_store: true)
end
def require_not_suspended! def require_not_suspended!
forbidden if current_account.unavailable? forbidden if current_account.unavailable?
end end

View File

@ -4,7 +4,6 @@ class SeveredRelationshipsController < ApplicationController
layout 'admin' layout 'admin'
before_action :authenticate_user! before_action :authenticate_user!
before_action :set_cache_headers
before_action :set_event, only: [:following, :followers] before_action :set_event, only: [:following, :followers]
@ -49,8 +48,4 @@ class SeveredRelationshipsController < ApplicationController
def acct(account) def acct(account)
account.local? ? account.local_username_and_domain : account.acct account.local? ? account.local_username_and_domain : account.acct
end end
def set_cache_headers
response.cache_control.replace(private: true, no_store: true)
end
end end

View File

@ -5,7 +5,6 @@ class StatusesCleanupController < ApplicationController
before_action :authenticate_user! before_action :authenticate_user!
before_action :set_policy before_action :set_policy
before_action :set_cache_headers
def show; end def show; end
@ -30,8 +29,4 @@ class StatusesCleanupController < ApplicationController
def resource_params def resource_params
params.expect(account_statuses_cleanup_policy: [:enabled, :min_status_age, :keep_direct, :keep_pinned, :keep_polls, :keep_media, :keep_self_fav, :keep_self_bookmark, :min_favs, :min_reblogs]) params.expect(account_statuses_cleanup_policy: [:enabled, :min_status_age, :keep_direct, :keep_pinned, :keep_polls, :keep_media, :keep_self_fav, :keep_self_bookmark, :min_favs, :min_reblogs])
end end
def set_cache_headers
response.cache_control.replace(private: true, no_store: true)
end
end end

View File

@ -86,6 +86,13 @@
"alert.unexpected.message": "Bilinməyən bir xəta baş verdi.", "alert.unexpected.message": "Bilinməyən bir xəta baş verdi.",
"alert.unexpected.title": "Ah!", "alert.unexpected.title": "Ah!",
"alt_text_badge.title": "Alternativ mətn", "alt_text_badge.title": "Alternativ mətn",
"alt_text_modal.add_alt_text": "Alternativ mətn əlavə et",
"alt_text_modal.add_text_from_image": "Şəkildəki mətni əlavə et",
"alt_text_modal.cancel": "İmtina",
"alt_text_modal.change_thumbnail": "Miniatürü dəyişdir",
"alt_text_modal.describe_for_people_with_hearing_impairments": "Eşitmə məhdudiyyətli insanlar üçün bunu izah et…",
"alt_text_modal.describe_for_people_with_visual_impairments": "Görmə məhdudiyyətli insanlar üçün bunu təsvir et…",
"alt_text_modal.done": "Oldu",
"announcement.announcement": "Elan", "announcement.announcement": "Elan",
"annual_report.summary.archetype.booster": "Trend ovçusu", "annual_report.summary.archetype.booster": "Trend ovçusu",
"annual_report.summary.archetype.lurker": "Lurker", "annual_report.summary.archetype.lurker": "Lurker",
@ -211,6 +218,10 @@
"confirmations.logout.confirm": ıxış et", "confirmations.logout.confirm": ıxış et",
"confirmations.logout.message": ıxmaq istədiyinizə əminsiniz?", "confirmations.logout.message": ıxmaq istədiyinizə əminsiniz?",
"confirmations.logout.title": ıxış edilsin?", "confirmations.logout.title": ıxış edilsin?",
"confirmations.missing_alt_text.confirm": "Alternativ mətn əlavə et",
"confirmations.missing_alt_text.message": "Paylaşımınız alternativ mətn ehtiva etmir. Təsvir əlavə etmək onun daha çox insan üçün əlçatan olmasına kömək edir.",
"confirmations.missing_alt_text.secondary": "Yenə də paylaş",
"confirmations.missing_alt_text.title": "Alternativ mətn əlavə edilsin?",
"confirmations.mute.confirm": "Səssizləşdir", "confirmations.mute.confirm": "Səssizləşdir",
"confirmations.redraft.confirm": "Sil və qaralamaya köçür", "confirmations.redraft.confirm": "Sil və qaralamaya köçür",
"confirmations.redraft.message": "Bu paylaşımı silmək və qaralamaya köçürmək istədiyinizə əminsiniz? Bəyənmələr və gücləndirmələr itəcək və orijinal paylaşıma olan cavablar tənha qalacaq.", "confirmations.redraft.message": "Bu paylaşımı silmək və qaralamaya köçürmək istədiyinizə əminsiniz? Bəyənmələr və gücləndirmələr itəcək və orijinal paylaşıma olan cavablar tənha qalacaq.",
@ -241,6 +252,7 @@
"dismissable_banner.dismiss": "Bağla", "dismissable_banner.dismiss": "Bağla",
"dismissable_banner.explore_links": "Bu xəbərlər bu gün fediversedə ən çox paylaşılır. Daha fərqli insanlar tərəfindən dərc edilən daha yeni xəbərlər daha yuxarıda sıralanır.", "dismissable_banner.explore_links": "Bu xəbərlər bu gün fediversedə ən çox paylaşılır. Daha fərqli insanlar tərəfindən dərc edilən daha yeni xəbərlər daha yuxarıda sıralanır.",
"dismissable_banner.explore_statuses": "Fediversedən olan bu paylaşımlar bu gün maraq qazanır. Daha çox gücləndirici və bəyənmə olan daha yeni paylaşımlar daha yuxarıda sıralanır.", "dismissable_banner.explore_statuses": "Fediversedən olan bu paylaşımlar bu gün maraq qazanır. Daha çox gücləndirici və bəyənmə olan daha yeni paylaşımlar daha yuxarıda sıralanır.",
"dismissable_banner.explore_tags": "Bu heşteqlər fediverse-də trend olublar. Daha çox fərqli insanlar tərəfindən istifadə olunan heşteqlər daha yuxarıda sıralanır.",
"domain_block_modal.block_account_instead": "@{name} istifadəçisini blokla", "domain_block_modal.block_account_instead": "@{name} istifadəçisini blokla",
"domain_block_modal.they_can_interact_with_old_posts": "Bu serverdən olan insanlar köhnə paylaşımlarınızla əlaqə qura bilər." "domain_block_modal.they_can_interact_with_old_posts": "Bu serverdən olan insanlar köhnə paylaşımlarınızla əlaqə qura bilər."
} }

View File

@ -86,6 +86,13 @@
"alert.unexpected.message": "Digwyddodd gwall annisgwyl.", "alert.unexpected.message": "Digwyddodd gwall annisgwyl.",
"alert.unexpected.title": "Wps!", "alert.unexpected.title": "Wps!",
"alt_text_badge.title": "Testun Amgen", "alt_text_badge.title": "Testun Amgen",
"alt_text_modal.add_alt_text": "Ychwanegu testun amgen",
"alt_text_modal.add_text_from_image": "Ychwanegu testun o'r ddelwedd",
"alt_text_modal.cancel": "Diddymu",
"alt_text_modal.change_thumbnail": "Newid llun bach",
"alt_text_modal.describe_for_people_with_hearing_impairments": "Disgrifiwch hyn ar gyfer pobl â nam ar eu clyw…",
"alt_text_modal.describe_for_people_with_visual_impairments": "Disgrifiwch hyn ar gyfer pobl â nam ar eu golwg…",
"alt_text_modal.done": "Gorffen",
"announcement.announcement": "Cyhoeddiad", "announcement.announcement": "Cyhoeddiad",
"annual_report.summary.archetype.booster": "Y hyrwyddwr", "annual_report.summary.archetype.booster": "Y hyrwyddwr",
"annual_report.summary.archetype.lurker": "Yr arsylwr", "annual_report.summary.archetype.lurker": "Yr arsylwr",
@ -211,6 +218,10 @@
"confirmations.logout.confirm": "Allgofnodi", "confirmations.logout.confirm": "Allgofnodi",
"confirmations.logout.message": "Ydych chi'n siŵr eich bod am allgofnodi?", "confirmations.logout.message": "Ydych chi'n siŵr eich bod am allgofnodi?",
"confirmations.logout.title": "Allgofnodi?", "confirmations.logout.title": "Allgofnodi?",
"confirmations.missing_alt_text.confirm": "Ychwanegu testun amgen",
"confirmations.missing_alt_text.message": "Mae eich postiad yn cynnwys cyfryngau heb destun amgen. Mae ychwanegu disgrifiadau yn helpu i wneud eich cynnwys yn hygyrch i fwy o bobl.",
"confirmations.missing_alt_text.secondary": "Postio beth bynnag",
"confirmations.missing_alt_text.title": "Ychwanegu testun amgen?",
"confirmations.mute.confirm": "Tewi", "confirmations.mute.confirm": "Tewi",
"confirmations.redraft.confirm": "Dileu ac ailddrafftio", "confirmations.redraft.confirm": "Dileu ac ailddrafftio",
"confirmations.redraft.message": "Ydych chi wir eisiau'r dileu'r postiad hwn a'i ailddrafftio? Bydd ffefrynnau a hybiau'n cael eu colli, a bydd atebion i'r post gwreiddiol yn mynd yn amddifad.", "confirmations.redraft.message": "Ydych chi wir eisiau'r dileu'r postiad hwn a'i ailddrafftio? Bydd ffefrynnau a hybiau'n cael eu colli, a bydd atebion i'r post gwreiddiol yn mynd yn amddifad.",
@ -407,6 +418,8 @@
"ignore_notifications_modal.not_followers_title": "Anwybyddu hysbysiadau gan bobl nad ydynt yn eich dilyn?", "ignore_notifications_modal.not_followers_title": "Anwybyddu hysbysiadau gan bobl nad ydynt yn eich dilyn?",
"ignore_notifications_modal.not_following_title": "Anwybyddu hysbysiadau gan bobl nad ydych yn eu dilyn?", "ignore_notifications_modal.not_following_title": "Anwybyddu hysbysiadau gan bobl nad ydych yn eu dilyn?",
"ignore_notifications_modal.private_mentions_title": "Anwybyddu hysbysiadau o Grybwylliadau Preifat digymell?", "ignore_notifications_modal.private_mentions_title": "Anwybyddu hysbysiadau o Grybwylliadau Preifat digymell?",
"info_button.label": "Cymorth",
"info_button.what_is_alt_text": "<h1>Beth yw testun amgen?</h1><p> Mae Testun Amgen yn darparu disgrifiadau delwedd ar gyfer pobl â nam ar eu golwg, cysylltiadau lled band isel, neu'r rhai sy'n ceisio cyd-destun ychwanegol.</p><p> Gallwch wella hygyrchedd a dealltwriaeth i bawb trwy ysgrifennu testun amgen clir, cryno a gwrthrychol.</p><ul><li> Dal elfennau pwysig</li><li> Crynhoi testun mewn delweddau</li><li> Defnyddiwch strwythur brawddegau rheolaidd</li><li> Osgoi gwybodaeth ddiangen</li><li> Canolbwyntio ar dueddiadau a chanfyddiadau allweddol mewn delweddau cymhleth (fel diagramau neu fapiau)</li></ul>",
"interaction_modal.action.favourite": "I barhau, mae angen i chi hoffi o'ch cyfrif.", "interaction_modal.action.favourite": "I barhau, mae angen i chi hoffi o'ch cyfrif.",
"interaction_modal.action.follow": "I barhau, mae angen i chi ddilyn o'ch cyfrif.", "interaction_modal.action.follow": "I barhau, mae angen i chi ddilyn o'ch cyfrif.",
"interaction_modal.action.reblog": "I barhau, mae angen i chi ail-flogio o'ch cyfrif.", "interaction_modal.action.reblog": "I barhau, mae angen i chi ail-flogio o'ch cyfrif.",

View File

@ -29,7 +29,7 @@
"account.endorse": "Fremhæv på profil", "account.endorse": "Fremhæv på profil",
"account.featured_tags.last_status_at": "Seneste indlæg {date}", "account.featured_tags.last_status_at": "Seneste indlæg {date}",
"account.featured_tags.last_status_never": "Ingen indlæg", "account.featured_tags.last_status_never": "Ingen indlæg",
"account.featured_tags.title": "{name}s fremhævede hashtags", "account.featured_tags.title": "{name}s fremhævede etiketter",
"account.follow": "Følg", "account.follow": "Følg",
"account.follow_back": "Følg tilbage", "account.follow_back": "Følg tilbage",
"account.followers": "Følgere", "account.followers": "Følgere",
@ -102,12 +102,12 @@
"annual_report.summary.followers.followers": "følgere", "annual_report.summary.followers.followers": "følgere",
"annual_report.summary.followers.total": "{count} i alt", "annual_report.summary.followers.total": "{count} i alt",
"annual_report.summary.here_it_is": "Her er dit {year} i sammendrag:", "annual_report.summary.here_it_is": "Her er dit {year} i sammendrag:",
"annual_report.summary.highlighted_post.by_favourites": "mest favoritmærkede indlæg", "annual_report.summary.highlighted_post.by_favourites": "mest favoritmarkerede indlæg",
"annual_report.summary.highlighted_post.by_reblogs": "mest fremhævede indlæg", "annual_report.summary.highlighted_post.by_reblogs": "mest fremhævede indlæg",
"annual_report.summary.highlighted_post.by_replies": "mest besvarede indlæg", "annual_report.summary.highlighted_post.by_replies": "mest besvarede indlæg",
"annual_report.summary.highlighted_post.possessive": "{name}s", "annual_report.summary.highlighted_post.possessive": "{name}s",
"annual_report.summary.most_used_app.most_used_app": "mest benyttede app", "annual_report.summary.most_used_app.most_used_app": "mest benyttede app",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "mest benyttede hashtag", "annual_report.summary.most_used_hashtag.most_used_hashtag": "mest benyttede etiket",
"annual_report.summary.most_used_hashtag.none": "Intet", "annual_report.summary.most_used_hashtag.none": "Intet",
"annual_report.summary.new_posts.new_posts": "nye indlæg", "annual_report.summary.new_posts.new_posts": "nye indlæg",
"annual_report.summary.percentile.text": "<topLabel>Det betyder, at man er i top</topLabel><percentage></percentage><bottomLabel>af {domain}-brugere.</bottomLabel>", "annual_report.summary.percentile.text": "<topLabel>Det betyder, at man er i top</topLabel><percentage></percentage><bottomLabel>af {domain}-brugere.</bottomLabel>",
@ -181,7 +181,7 @@
"compose.saved.body": "Indlæg gemt.", "compose.saved.body": "Indlæg gemt.",
"compose_form.direct_message_warning_learn_more": "Få mere at vide", "compose_form.direct_message_warning_learn_more": "Få mere at vide",
"compose_form.encryption_warning": "Indlæg på Mastodon er ikke ende-til-ende-krypteret. Del derfor ikke sensitiv information via Mastodon.", "compose_form.encryption_warning": "Indlæg på Mastodon er ikke ende-til-ende-krypteret. Del derfor ikke sensitiv information via Mastodon.",
"compose_form.hashtag_warning": "Da indlægget ikke er offentligt, vises det ikke under noget hashtag, da kun offentlige indlæg er søgbare via hashtags.", "compose_form.hashtag_warning": "Da indlægget ikke er offentligt, vises det ikke under nogen etiket, da kun offentlige indlæg er søgbare via etiketter.",
"compose_form.lock_disclaimer": "Din konto er ikke {locked}. Enhver kan følge dig og se indlæg kun beregnet for følgere.", "compose_form.lock_disclaimer": "Din konto er ikke {locked}. Enhver kan følge dig og se indlæg kun beregnet for følgere.",
"compose_form.lock_disclaimer.lock": "låst", "compose_form.lock_disclaimer.lock": "låst",
"compose_form.placeholder": "Hvad tænker du på?", "compose_form.placeholder": "Hvad tænker du på?",
@ -250,9 +250,9 @@
"disabled_account_banner.text": "Din konto {disabledAccount} er pt. deaktiveret.", "disabled_account_banner.text": "Din konto {disabledAccount} er pt. deaktiveret.",
"dismissable_banner.community_timeline": "Disse er de seneste offentlige indlæg fra personer med konti hostet af {domain}.", "dismissable_banner.community_timeline": "Disse er de seneste offentlige indlæg fra personer med konti hostet af {domain}.",
"dismissable_banner.dismiss": "Afvis", "dismissable_banner.dismiss": "Afvis",
"dismissable_banner.explore_links": "Disse nyhedshistorier deles mest på fediverset i dag. Nyere nyhedshistorier lagt op af flere forskellige personer rangeres højere.", "dismissable_banner.explore_links": "Disse nyhedshistorier deles mest på fødiverset i dag. Nyere nyhedshistorier lagt op af flere forskellige personer rangeres højere.",
"dismissable_banner.explore_statuses": "Disse indlæg på tværs af fødiverset opnår momentum i dag. Nyere indlæg med flere fremhævninger og favoritmærker rangeres højere.", "dismissable_banner.explore_statuses": "Disse indlæg på tværs af fødiverset opnår momentum i dag. Nyere indlæg med flere fremhævninger og favoritmærker rangeres højere.",
"dismissable_banner.explore_tags": "Disse hashtags opnår momentum på fødiverset i dag. Hashtags brugt af flere forskellige personer rangeres højere.", "dismissable_banner.explore_tags": "Disse etiketter opnår momentum på fødiverset i dag. Etiketter brugt af flere forskellige personer rangeres højere.",
"dismissable_banner.public_timeline": "Dette er de seneste offentlige indlæg fra personer på fødiverset, som folk på {domain} følger.", "dismissable_banner.public_timeline": "Dette er de seneste offentlige indlæg fra personer på fødiverset, som folk på {domain} følger.",
"domain_block_modal.block": "Blokér server", "domain_block_modal.block": "Blokér server",
"domain_block_modal.block_account_instead": "Blokér i stedet @{name}", "domain_block_modal.block_account_instead": "Blokér i stedet @{name}",
@ -300,14 +300,14 @@
"empty_column.blocks": "Ingen brugere blokeret endnu.", "empty_column.blocks": "Ingen brugere blokeret endnu.",
"empty_column.bookmarked_statuses": "Du har ingen bogmærkede indlæg endnu. Når du bogmærker ét, vil det dukke op hér.", "empty_column.bookmarked_statuses": "Du har ingen bogmærkede indlæg endnu. Når du bogmærker ét, vil det dukke op hér.",
"empty_column.community": "Den lokale tidslinje er tom. Skriv noget offentligt for at sætte tingene i gang!", "empty_column.community": "Den lokale tidslinje er tom. Skriv noget offentligt for at sætte tingene i gang!",
"empty_column.direct": "Der er endnu ingen private omtaler. Når en sendes eller modtages, dukker den op hér.", "empty_column.direct": "Der er endnu ingen private omtaler. Når en sendes eller modtages, dukker den op her.",
"empty_column.domain_blocks": "Ingen blokerede domæner endnu.", "empty_column.domain_blocks": "Ingen blokerede domæner endnu.",
"empty_column.explore_statuses": "Ingen nye tendenser lige nu. Tjek igen senere!", "empty_column.explore_statuses": "Ingen nye tendenser lige nu. Tjek igen senere!",
"empty_column.favourited_statuses": "Du har endnu ingen favoritindlæg. Når du favoritmarkerer ét, vil det dukke op hér.", "empty_column.favourited_statuses": "Du har endnu ingen favoritindlæg. Når du føjer et opslag til favoritter, vil det dukke op her.",
"empty_column.favourites": "Ingen har endnu favoritmarkeret dette indlæg. Når nogen gør dét, vil det dukke op her.", "empty_column.favourites": "Ingen har endnu føjet dette indlæg til favoritter. Når nogen gør det, vil det dukke op her.",
"empty_column.follow_requests": "Du har endnu ingen følgeanmodninger. Når du modtager én, vil den dukke op her.", "empty_column.follow_requests": "Du har endnu ingen følgeanmodninger. Når du modtager én, vil den dukke op her.",
"empty_column.followed_tags": "Ingen hashtags følges endnu. Når det sker, vil de fremgå her.", "empty_column.followed_tags": "Ingen etiketter følges endnu. Når det sker, vil de fremgå her.",
"empty_column.hashtag": "Der er intet med dette hashtag endnu.", "empty_column.hashtag": "Der er intet med denne etiket endnu.",
"empty_column.home": "Din hjemmetidslinje er tom! Følg nogle personer, for at fylde den op.", "empty_column.home": "Din hjemmetidslinje er tom! Følg nogle personer, for at fylde den op.",
"empty_column.list": "Der er ikke noget på denne liste endnu. Når medlemmer af listen udgiver nye indlæg vil de fremgå her.", "empty_column.list": "Der er ikke noget på denne liste endnu. Når medlemmer af listen udgiver nye indlæg vil de fremgå her.",
"empty_column.mutes": "Du har endnu ikke skjult nogle brugere.", "empty_column.mutes": "Du har endnu ikke skjult nogle brugere.",
@ -324,7 +324,7 @@
"explore.title": "Udforsk", "explore.title": "Udforsk",
"explore.trending_links": "Nyheder", "explore.trending_links": "Nyheder",
"explore.trending_statuses": "Indlæg", "explore.trending_statuses": "Indlæg",
"explore.trending_tags": "Hashtags", "explore.trending_tags": "Etiketter",
"filter_modal.added.context_mismatch_explanation": "Denne filterkategori omfatter ikke konteksten, hvorunder dette indlæg er tilgået. Redigér filteret, hvis indlægget også ønskes filtreret i denne kontekst.", "filter_modal.added.context_mismatch_explanation": "Denne filterkategori omfatter ikke konteksten, hvorunder dette indlæg er tilgået. Redigér filteret, hvis indlægget også ønskes filtreret i denne kontekst.",
"filter_modal.added.context_mismatch_title": "Kontekstmisforhold!", "filter_modal.added.context_mismatch_title": "Kontekstmisforhold!",
"filter_modal.added.expired_explanation": "Denne filterkategori er udløbet. Ændr dens udløbsdato, for at anvende den.", "filter_modal.added.expired_explanation": "Denne filterkategori er udløbet. Ændr dens udløbsdato, for at anvende den.",
@ -365,7 +365,7 @@
"follow_suggestions.similar_to_recently_followed_longer": "Svarende til profiler, som for nylig er fulgt", "follow_suggestions.similar_to_recently_followed_longer": "Svarende til profiler, som for nylig er fulgt",
"follow_suggestions.view_all": "Vis alle", "follow_suggestions.view_all": "Vis alle",
"follow_suggestions.who_to_follow": "Hvem, som skal følges", "follow_suggestions.who_to_follow": "Hvem, som skal følges",
"followed_tags": "Hashtag, som følges", "followed_tags": "Etiketter, som følges",
"footer.about": "Om", "footer.about": "Om",
"footer.directory": "Profiloversigt", "footer.directory": "Profiloversigt",
"footer.get_app": "Hent appen", "footer.get_app": "Hent appen",
@ -381,7 +381,7 @@
"hashtag.column_header.tag_mode.any": "eller {additional}", "hashtag.column_header.tag_mode.any": "eller {additional}",
"hashtag.column_header.tag_mode.none": "uden {additional}", "hashtag.column_header.tag_mode.none": "uden {additional}",
"hashtag.column_settings.select.no_options_message": "Ingen forslag fundet", "hashtag.column_settings.select.no_options_message": "Ingen forslag fundet",
"hashtag.column_settings.select.placeholder": "Angiv hashtags…", "hashtag.column_settings.select.placeholder": "Angiv etiketter…",
"hashtag.column_settings.tag_mode.all": "Alle disse", "hashtag.column_settings.tag_mode.all": "Alle disse",
"hashtag.column_settings.tag_mode.any": "Nogle af disse", "hashtag.column_settings.tag_mode.any": "Nogle af disse",
"hashtag.column_settings.tag_mode.none": "Ingen af disse", "hashtag.column_settings.tag_mode.none": "Ingen af disse",
@ -389,8 +389,8 @@
"hashtag.counter_by_accounts": "{count, plural, one {{counter} deltager} other {{counter} deltagere}}", "hashtag.counter_by_accounts": "{count, plural, one {{counter} deltager} other {{counter} deltagere}}",
"hashtag.counter_by_uses": "{count, plural, one {{counter} indlæg} other {{counter} indlæg}}", "hashtag.counter_by_uses": "{count, plural, one {{counter} indlæg} other {{counter} indlæg}}",
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} indlæg} other {{counter} indlæg}} i dag", "hashtag.counter_by_uses_today": "{count, plural, one {{counter} indlæg} other {{counter} indlæg}} i dag",
"hashtag.follow": "Følg hashtag", "hashtag.follow": "Følg etiket",
"hashtag.unfollow": "Stop med at følge hashtag", "hashtag.unfollow": "Stop med at følge etiket",
"hashtags.and_other": "…og {count, plural, one {}other {# flere}}", "hashtags.and_other": "…og {count, plural, one {}other {# flere}}",
"hints.profiles.followers_may_be_missing": "Der kan mangle følgere for denne profil.", "hints.profiles.followers_may_be_missing": "Der kan mangle følgere for denne profil.",
"hints.profiles.follows_may_be_missing": "Fulgte kan mangle for denne profil.", "hints.profiles.follows_may_be_missing": "Fulgte kan mangle for denne profil.",
@ -420,7 +420,7 @@
"ignore_notifications_modal.private_mentions_title": "Ignorér notifikationer fra uopfordrede Private omtaler?", "ignore_notifications_modal.private_mentions_title": "Ignorér notifikationer fra uopfordrede Private omtaler?",
"info_button.label": "Hjælp", "info_button.label": "Hjælp",
"info_button.what_is_alt_text": "<h1>Hvad er alt-tekst?</h1> <p>Alt-tekst leverer billedbeskrivelser til folk med synsnedsættelser, lav båndbredde-forbindelser eller med ønske om ekstra kontekst.</p> <p>Tilgængelighed og forståelse kan forbedres for alle ved at skrive klar, kortfattet og objektiv alt-tekst.</p> <ul> <li>Fang vigtige elementer</li> <li>Opsummér tekst i billeder</li> <li>Brug almindelig sætningsstruktur</li> <li>Undgå overflødig information</li> <li>Fokusér på tendenser og centrale resultater i kompleks grafik (såsom diagrammer eller kort)</li> </ul>", "info_button.what_is_alt_text": "<h1>Hvad er alt-tekst?</h1> <p>Alt-tekst leverer billedbeskrivelser til folk med synsnedsættelser, lav båndbredde-forbindelser eller med ønske om ekstra kontekst.</p> <p>Tilgængelighed og forståelse kan forbedres for alle ved at skrive klar, kortfattet og objektiv alt-tekst.</p> <ul> <li>Fang vigtige elementer</li> <li>Opsummér tekst i billeder</li> <li>Brug almindelig sætningsstruktur</li> <li>Undgå overflødig information</li> <li>Fokusér på tendenser og centrale resultater i kompleks grafik (såsom diagrammer eller kort)</li> </ul>",
"interaction_modal.action.favourite": "For at fortsætte, skal man vælge Gør til favorit fra sin konto.", "interaction_modal.action.favourite": "For at fortsætte, skal du føje til favoritter fra din konto.",
"interaction_modal.action.follow": "For at fortsætte, skal man vælge Følg fra sin konto.", "interaction_modal.action.follow": "For at fortsætte, skal man vælge Følg fra sin konto.",
"interaction_modal.action.reblog": "For at fortsætte, skal man vælge Fremhæv fra sin konto.", "interaction_modal.action.reblog": "For at fortsætte, skal man vælge Fremhæv fra sin konto.",
"interaction_modal.action.reply": "For at fortsætte, skal man besvar fra sin konto.", "interaction_modal.action.reply": "For at fortsætte, skal man besvar fra sin konto.",
@ -429,7 +429,7 @@
"interaction_modal.no_account_yet": "Har endnu ingen konto?", "interaction_modal.no_account_yet": "Har endnu ingen konto?",
"interaction_modal.on_another_server": "På en anden server", "interaction_modal.on_another_server": "På en anden server",
"interaction_modal.on_this_server": "På denne server", "interaction_modal.on_this_server": "På denne server",
"interaction_modal.title.favourite": "Favoritmarkér {name}s indlæg", "interaction_modal.title.favourite": "Føj {name}s indlæg til favoritter",
"interaction_modal.title.follow": "Følg {name}", "interaction_modal.title.follow": "Følg {name}",
"interaction_modal.title.reblog": "Fremhæv {name}s indlæg", "interaction_modal.title.reblog": "Fremhæv {name}s indlæg",
"interaction_modal.title.reply": "Besvar {name}s indlæg", "interaction_modal.title.reply": "Besvar {name}s indlæg",
@ -447,7 +447,7 @@
"keyboard_shortcuts.direct": "for at åbne kolonnen private omtaler", "keyboard_shortcuts.direct": "for at åbne kolonnen private omtaler",
"keyboard_shortcuts.down": "Flyt nedad på listen", "keyboard_shortcuts.down": "Flyt nedad på listen",
"keyboard_shortcuts.enter": "Åbn indlæg", "keyboard_shortcuts.enter": "Åbn indlæg",
"keyboard_shortcuts.favourite": "Favoritmarkér indlæg", "keyboard_shortcuts.favourite": "Føj indlæg til favoritter",
"keyboard_shortcuts.favourites": "Åbn favoritlisten", "keyboard_shortcuts.favourites": "Åbn favoritlisten",
"keyboard_shortcuts.federated": "Åbn fødereret tidslinje", "keyboard_shortcuts.federated": "Åbn fødereret tidslinje",
"keyboard_shortcuts.heading": "Tastaturgenveje", "keyboard_shortcuts.heading": "Tastaturgenveje",
@ -536,7 +536,7 @@
"navigation_bar.favourites": "Favoritter", "navigation_bar.favourites": "Favoritter",
"navigation_bar.filters": "Skjulte ord", "navigation_bar.filters": "Skjulte ord",
"navigation_bar.follow_requests": "Følgeanmodninger", "navigation_bar.follow_requests": "Følgeanmodninger",
"navigation_bar.followed_tags": "Hashtag, som følges", "navigation_bar.followed_tags": "Etiketter, som følges",
"navigation_bar.follows_and_followers": "Følges og følgere", "navigation_bar.follows_and_followers": "Følges og følgere",
"navigation_bar.lists": "Lister", "navigation_bar.lists": "Lister",
"navigation_bar.logout": "Log af", "navigation_bar.logout": "Log af",
@ -559,10 +559,10 @@
"notification.admin.sign_up.name_and_others": "{name} og {count, plural, one {# anden} other {# andre}} tilmeldte sig", "notification.admin.sign_up.name_and_others": "{name} og {count, plural, one {# anden} other {# andre}} tilmeldte sig",
"notification.annual_report.message": "{year} #Wrapstodon venter! Afslør årets højdepunkter og mindeværdige øjeblikke på Mastodon!", "notification.annual_report.message": "{year} #Wrapstodon venter! Afslør årets højdepunkter og mindeværdige øjeblikke på Mastodon!",
"notification.annual_report.view": "Vis #Wrapstodon", "notification.annual_report.view": "Vis #Wrapstodon",
"notification.favourite": "{name} favoritmarkerede dit indlæg", "notification.favourite": "{name} føjede dit indlæg til favoritter",
"notification.favourite.name_and_others_with_link": "{name} og <a>{count, plural, one {# anden} other {# andre}}</a> favoritmarkerede dit indlæg", "notification.favourite.name_and_others_with_link": "{name} og <a>{count, plural, one {# anden} other {# andre}}</a> føjede dit indlæg til favoritter",
"notification.favourite_pm": "{name} favoritmarkerede din private omtale", "notification.favourite_pm": "{name} føjede din private omtale til favoritter",
"notification.favourite_pm.name_and_others_with_link": "{name} og <a>{count, plural, one {# anden} other {# andre}}</a> favoritmarkerede dit indlæg", "notification.favourite_pm.name_and_others_with_link": "{name} og <a>{count, plural, one {# anden} other {# andre}}</a> føjede dit indlæg til favoritter",
"notification.follow": "{name} begyndte at følge dig", "notification.follow": "{name} begyndte at følge dig",
"notification.follow.name_and_others": "{name} og <a>{count, plural, one {# andre} other {# andre}}</a> begyndte at følge dig", "notification.follow.name_and_others": "{name} og <a>{count, plural, one {# andre} other {# andre}}</a> begyndte at følge dig",
"notification.follow_request": "{name} har anmodet om at følge dig", "notification.follow_request": "{name} har anmodet om at følge dig",
@ -677,7 +677,7 @@
"onboarding.profile.display_name": "Vist navn", "onboarding.profile.display_name": "Vist navn",
"onboarding.profile.display_name_hint": "Dit fulde navn eller dit sjove navn…", "onboarding.profile.display_name_hint": "Dit fulde navn eller dit sjove navn…",
"onboarding.profile.note": "Bio", "onboarding.profile.note": "Bio",
"onboarding.profile.note_hint": "Man kan @omtale andre personer eller #hashtags…", "onboarding.profile.note_hint": "Man kan @omtale andre personer eller #etiketter…",
"onboarding.profile.save_and_continue": "Gem og fortsæt", "onboarding.profile.save_and_continue": "Gem og fortsæt",
"onboarding.profile.title": "Profilopsætning", "onboarding.profile.title": "Profilopsætning",
"onboarding.profile.upload_avatar": "Upload profilbillede", "onboarding.profile.upload_avatar": "Upload profilbillede",
@ -702,7 +702,7 @@
"privacy.private.short": "Følgere", "privacy.private.short": "Følgere",
"privacy.public.long": "Alle på og udenfor Mastodon", "privacy.public.long": "Alle på og udenfor Mastodon",
"privacy.public.short": "Offentlig", "privacy.public.short": "Offentlig",
"privacy.unlisted.additional": "Dette er præcis som offentlig adfærd, dog vises indlægget ikke i realtids-strømme/hashtags, udforsk eller Mastodon-søgning, selv hvis valget gælder hele kontoen.", "privacy.unlisted.additional": "Dette er præcis som offentlig adfærd, dog vises indlægget ikke i realtids-strømme/etiketter, udforsk eller Mastodon-søgning, selv hvis valget gælder hele kontoen.",
"privacy.unlisted.long": "Færre algoritmiske fanfarer", "privacy.unlisted.long": "Færre algoritmiske fanfarer",
"privacy.unlisted.short": "Stille offentligt", "privacy.unlisted.short": "Stille offentligt",
"privacy_policy.last_updated": "Senest opdateret {date}", "privacy_policy.last_updated": "Senest opdateret {date}",
@ -779,7 +779,7 @@
"search.placeholder": "Søg", "search.placeholder": "Søg",
"search.quick_action.account_search": "Profiler matchende {x}", "search.quick_action.account_search": "Profiler matchende {x}",
"search.quick_action.go_to_account": "Gå til profilen {x}", "search.quick_action.go_to_account": "Gå til profilen {x}",
"search.quick_action.go_to_hashtag": "Gå til hashtagget {x}", "search.quick_action.go_to_hashtag": "Gå til etiketten {x}",
"search.quick_action.open_url": "Åbn URL i Mastodon", "search.quick_action.open_url": "Åbn URL i Mastodon",
"search.quick_action.status_search": "Indlæg matchende {x}", "search.quick_action.status_search": "Indlæg matchende {x}",
"search.search_or_paste": "Søg efter eller angiv URL", "search.search_or_paste": "Søg efter eller angiv URL",
@ -793,19 +793,19 @@
"search_popout.user": "bruger", "search_popout.user": "bruger",
"search_results.accounts": "Profiler", "search_results.accounts": "Profiler",
"search_results.all": "Alle", "search_results.all": "Alle",
"search_results.hashtags": "Hashtags", "search_results.hashtags": "Etiketter",
"search_results.no_results": "Ingen resultater.", "search_results.no_results": "Ingen resultater.",
"search_results.no_search_yet": "Prøv at søge efter indlæg, profiler eller hashtags.", "search_results.no_search_yet": "Prøv at søge efter indlæg, profiler eller etiketter.",
"search_results.see_all": "Vis alle", "search_results.see_all": "Vis alle",
"search_results.statuses": "Indlæg", "search_results.statuses": "Indlæg",
"search_results.title": "Søg efter \"{q}\"", "search_results.title": "Søg efter \"{q}\"",
"server_banner.about_active_users": "Folk, som brugte denne server de seneste 30 dage (månedlige aktive brugere)", "server_banner.about_active_users": "Folk, som brugte denne server de seneste 30 dage (månedlige aktive brugere)",
"server_banner.active_users": "aktive brugere", "server_banner.active_users": "aktive brugere",
"server_banner.administered_by": "Håndteres af:", "server_banner.administered_by": "Håndteres af:",
"server_banner.is_one_of_many": "{domain} er en af de mange uafhængige Mastodon-servere, man kan bruge for at deltage i fediverset.", "server_banner.is_one_of_many": "{domain} er en af de mange uafhængige Mastodon-servere, man kan bruge for at deltage i fødiverset.",
"server_banner.server_stats": "Serverstatstik:", "server_banner.server_stats": "Serverstatstik:",
"sign_in_banner.create_account": "Opret konto", "sign_in_banner.create_account": "Opret konto",
"sign_in_banner.follow_anyone": "Følg alle på tværs af fediverset og se alt i kronologisk rækkefølge. Ingen algoritmer, annoncer eller clickbait i syne.", "sign_in_banner.follow_anyone": "Følg alle på tværs af fødiverset og se alt i kronologisk rækkefølge. Ingen algoritmer, annoncer eller clickbait i syne.",
"sign_in_banner.mastodon_is": "Mastodon er den bedste måde at holde sig ajour med, hvad der sker.", "sign_in_banner.mastodon_is": "Mastodon er den bedste måde at holde sig ajour med, hvad der sker.",
"sign_in_banner.sign_in": "Log ind", "sign_in_banner.sign_in": "Log ind",
"sign_in_banner.sso_redirect": "Log ind eller Tilmeld", "sign_in_banner.sso_redirect": "Log ind eller Tilmeld",

View File

@ -218,6 +218,10 @@
"confirmations.logout.confirm": "Log out", "confirmations.logout.confirm": "Log out",
"confirmations.logout.message": "Are you sure you want to log out?", "confirmations.logout.message": "Are you sure you want to log out?",
"confirmations.logout.title": "Log out?", "confirmations.logout.title": "Log out?",
"confirmations.missing_alt_text.confirm": "Add alt text",
"confirmations.missing_alt_text.message": "Your post contains media without alt text. Adding descriptions helps make your content accessible to more people.",
"confirmations.missing_alt_text.secondary": "Post anyway",
"confirmations.missing_alt_text.title": "Add alt text?",
"confirmations.mute.confirm": "Mute", "confirmations.mute.confirm": "Mute",
"confirmations.redraft.confirm": "Delete & redraft", "confirmations.redraft.confirm": "Delete & redraft",
"confirmations.redraft.message": "Are you sure you want to delete this post and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.", "confirmations.redraft.message": "Are you sure you want to delete this post and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.",

View File

@ -86,6 +86,13 @@
"alert.unexpected.message": "Tharla earráid gan choinne.", "alert.unexpected.message": "Tharla earráid gan choinne.",
"alert.unexpected.title": "Hiúps!", "alert.unexpected.title": "Hiúps!",
"alt_text_badge.title": "Téacs alt", "alt_text_badge.title": "Téacs alt",
"alt_text_modal.add_alt_text": "Cuir téacs alt leis",
"alt_text_modal.add_text_from_image": "Cuir téacs ón íomhá leis",
"alt_text_modal.cancel": "Cealaigh",
"alt_text_modal.change_thumbnail": "Athraigh mionsamhail",
"alt_text_modal.describe_for_people_with_hearing_impairments": "Déan cur síos air seo do dhaoine le lagú éisteachta…",
"alt_text_modal.describe_for_people_with_visual_impairments": "Déan cur síos air seo do dhaoine a bhfuil lagú amhairc orthu…",
"alt_text_modal.done": "Déanta",
"announcement.announcement": "Fógra", "announcement.announcement": "Fógra",
"annual_report.summary.archetype.booster": "An sealgair fionnuar", "annual_report.summary.archetype.booster": "An sealgair fionnuar",
"annual_report.summary.archetype.lurker": "An lurker", "annual_report.summary.archetype.lurker": "An lurker",
@ -211,6 +218,10 @@
"confirmations.logout.confirm": "Logáil amach", "confirmations.logout.confirm": "Logáil amach",
"confirmations.logout.message": "An bhfuil tú cinnte gur mhaith leat logáil amach?", "confirmations.logout.message": "An bhfuil tú cinnte gur mhaith leat logáil amach?",
"confirmations.logout.title": "Logáil Amach?", "confirmations.logout.title": "Logáil Amach?",
"confirmations.missing_alt_text.confirm": "Cuir téacs alt leis",
"confirmations.missing_alt_text.message": "Tá meáin gan alt téacs i do phostáil. Má chuirtear tuairiscí leis, cabhraíonn sé seo leat dinneachar a rochtain do níos mó daoine.",
"confirmations.missing_alt_text.secondary": "Post ar aon nós",
"confirmations.missing_alt_text.title": "Cuir téacs alt leis?",
"confirmations.mute.confirm": "Balbhaigh", "confirmations.mute.confirm": "Balbhaigh",
"confirmations.redraft.confirm": "Scrios ⁊ athdhréachtaigh", "confirmations.redraft.confirm": "Scrios ⁊ athdhréachtaigh",
"confirmations.redraft.message": "An bhfuil tú cinnte gur mhaith leat an postáil seo a scriosadh agus é a athdhréachtú? Caillfear ceanáin agus treisithe, agus dílleachtaí freagraí ar an mbunphostála.", "confirmations.redraft.message": "An bhfuil tú cinnte gur mhaith leat an postáil seo a scriosadh agus é a athdhréachtú? Caillfear ceanáin agus treisithe, agus dílleachtaí freagraí ar an mbunphostála.",
@ -407,6 +418,8 @@
"ignore_notifications_modal.not_followers_title": "An dtugann tú aird ar fhógraí ó dhaoine nach leanann tú?", "ignore_notifications_modal.not_followers_title": "An dtugann tú aird ar fhógraí ó dhaoine nach leanann tú?",
"ignore_notifications_modal.not_following_title": "An ndéanann tú neamhaird de fhógraí ó dhaoine nach leanann tú?", "ignore_notifications_modal.not_following_title": "An ndéanann tú neamhaird de fhógraí ó dhaoine nach leanann tú?",
"ignore_notifications_modal.private_mentions_title": "An dtugann tú aird ar fhógraí ó Luaintí Príobháideacha gan iarraidh?", "ignore_notifications_modal.private_mentions_title": "An dtugann tú aird ar fhógraí ó Luaintí Príobháideacha gan iarraidh?",
"info_button.label": "Cabhrú",
"info_button.what_is_alt_text": "<h1>Cad is téacs altach ann?</h1> <p>Soláthraíonn téacs Alt cur síos ar íomhánna do dhaoine le lagú radhairc, naisc íseal-bandaleithead, nó daoine atá ag lorg comhthéacs breise.</p> <p>Is féidir leat inrochtaineacht agus tuiscint a fheabhsú do chách trí théacs alt soiléir, gonta, oibiachtúil a scríobh.</p> <ul> <li>Glac gnéithe tábhachtacha</li> <li>Déan achoimre ar théacs in íomhánna</li> <li>Úsáid struchtúr abairtí rialta</li> li> <li>Seachain faisnéis iomarcach</li> <li>Fócas ar threochtaí agus ar phríomhthorthaí i bhfíseanna casta (amhail léaráidí nó léarscáileanna)</li> </ul>",
"interaction_modal.action.favourite": "Chun leanúint ar aghaidh, ní mór duit an ceann is fearr leat ó do chuntas.", "interaction_modal.action.favourite": "Chun leanúint ar aghaidh, ní mór duit an ceann is fearr leat ó do chuntas.",
"interaction_modal.action.follow": "Chun leanúint ar aghaidh, ní mór duit leanúint ó do chuntas.", "interaction_modal.action.follow": "Chun leanúint ar aghaidh, ní mór duit leanúint ó do chuntas.",
"interaction_modal.action.reblog": "Chun leanúint ar aghaidh, ní mór duit athbhlagáil ó do chuntas.", "interaction_modal.action.reblog": "Chun leanúint ar aghaidh, ní mór duit athbhlagáil ó do chuntas.",

View File

@ -218,6 +218,7 @@
"confirmations.logout.confirm": "Wyloguj", "confirmations.logout.confirm": "Wyloguj",
"confirmations.logout.message": "Czy na pewno chcesz się wylogować?", "confirmations.logout.message": "Czy na pewno chcesz się wylogować?",
"confirmations.logout.title": "Wylogować?", "confirmations.logout.title": "Wylogować?",
"confirmations.missing_alt_text.message": "Twój wpis zawiera treści graficzne bez opisu pomocniczego. Dodając opis, sprawisz, że będzie on bardziej dostępny dla większej liczby osób.",
"confirmations.mute.confirm": "Wycisz", "confirmations.mute.confirm": "Wycisz",
"confirmations.redraft.confirm": "Usuń i przeredaguj", "confirmations.redraft.confirm": "Usuń i przeredaguj",
"confirmations.redraft.message": "Czy na pewno chcesz usunąć i przeredagować ten wpis? Polubienia i podbicia zostaną utracone, a odpowiedzi do oryginalnego wpisu zostaną osierocone.", "confirmations.redraft.message": "Czy na pewno chcesz usunąć i przeredagować ten wpis? Polubienia i podbicia zostaną utracone, a odpowiedzi do oryginalnego wpisu zostaną osierocone.",
@ -414,6 +415,8 @@
"ignore_notifications_modal.not_followers_title": "Ignoruj powiadomienia od użytkowników którzy cię nie obserwują?", "ignore_notifications_modal.not_followers_title": "Ignoruj powiadomienia od użytkowników którzy cię nie obserwują?",
"ignore_notifications_modal.not_following_title": "Ignoruj powiadomienia od użytkowników których nie obserwujesz?", "ignore_notifications_modal.not_following_title": "Ignoruj powiadomienia od użytkowników których nie obserwujesz?",
"ignore_notifications_modal.private_mentions_title": "Ignoruj powiadomienia o nieproszonych wzmiankach prywatnych?", "ignore_notifications_modal.private_mentions_title": "Ignoruj powiadomienia o nieproszonych wzmiankach prywatnych?",
"info_button.label": "Pomoc",
"info_button.what_is_alt_text": "<h1>Czym jest tekst pomocniczy obrazków?</h1><p> Tekst pomocniczy zapewnia osobom z zaburzeniem widzenia, słabym łączem internetowym oraz tym, którzy szukają dodatkowego kontekstu opis grafik i zdjęć.</p>\n<p>Możesz zwiększyć jego dostępność i zrozumienie poprzez jasne, zwięzłe i obiektywne sformułowanie tekstu pomocniczego.</p>\n<ul>\n<li>Uchwyć ważne elementy</li>\n<li>Streść tekst na obrazkach</li>\n<li>Używaj standardowej składni zdań</li>\n<li>Unikaj wprowadzania zbędnych informacji</li>\n<li>Skup się na głównych trendach i kluczowych informacjach w skomplikowanych materiałach (tkaich jak wykresy czy mapy)</li>\n</ul>",
"interaction_modal.action.favourite": "Aby kontynuować, musisz dodać do ulubionych na swoim koncie.", "interaction_modal.action.favourite": "Aby kontynuować, musisz dodać do ulubionych na swoim koncie.",
"interaction_modal.action.follow": "Aby kontynuować, musisz obserwować ze swojego konta.", "interaction_modal.action.follow": "Aby kontynuować, musisz obserwować ze swojego konta.",
"interaction_modal.action.reblog": "Aby kontynuować, musisz podać dalej ze swojego konta.", "interaction_modal.action.reblog": "Aby kontynuować, musisz podać dalej ze swojego konta.",

View File

@ -42,7 +42,7 @@ class FeedManager
when :home when :home
filter_from_home(status, receiver.id, build_crutches(receiver.id, [status]), :home) filter_from_home(status, receiver.id, build_crutches(receiver.id, [status]), :home)
when :list when :list
(filter_from_list?(status, receiver) ? :filter : nil) || filter_from_home(status, receiver.account_id, build_crutches(receiver.account_id, [status]), :list) (filter_from_list?(status, receiver) ? :filter : nil) || filter_from_home(status, receiver.account_id, build_crutches(receiver.account_id, [status], list: receiver), :list)
when :mentions when :mentions
filter_from_mentions?(status, receiver.id) ? :filter : nil filter_from_mentions?(status, receiver.id) ? :filter : nil
when :direct when :direct
@ -146,7 +146,7 @@ class FeedManager
timeline_key = key(:home, into_account.id) timeline_key = key(:home, into_account.id)
aggregate = into_account.user&.aggregates_reblogs? aggregate = into_account.user&.aggregates_reblogs?
query = from_account.statuses.list_eligible_visibility.includes(:preloadable_poll, :media_attachments, reblog: :account).limit(FeedManager::MAX_ITEMS / 4) query = from_account.statuses.list_eligible_visibility.includes(reblog: :account).limit(FeedManager::MAX_ITEMS / 4)
if redis.zcard(timeline_key) >= FeedManager::MAX_ITEMS / 4 if redis.zcard(timeline_key) >= FeedManager::MAX_ITEMS / 4
oldest_home_score = redis.zrange(timeline_key, 0, 0, with_scores: true).first.last.to_i oldest_home_score = redis.zrange(timeline_key, 0, 0, with_scores: true).first.last.to_i
@ -174,7 +174,7 @@ class FeedManager
timeline_key = key(:list, list.id) timeline_key = key(:list, list.id)
aggregate = list.account.user&.aggregates_reblogs? aggregate = list.account.user&.aggregates_reblogs?
query = from_account.statuses.list_eligible_visibility.includes(:preloadable_poll, :media_attachments, reblog: :account).limit(FeedManager::MAX_ITEMS / 4) query = from_account.statuses.list_eligible_visibility.includes(reblog: :account).limit(FeedManager::MAX_ITEMS / 4)
if redis.zcard(timeline_key) >= FeedManager::MAX_ITEMS / 4 if redis.zcard(timeline_key) >= FeedManager::MAX_ITEMS / 4
oldest_home_score = redis.zrange(timeline_key, 0, 0, with_scores: true).first.last.to_i oldest_home_score = redis.zrange(timeline_key, 0, 0, with_scores: true).first.last.to_i
@ -182,10 +182,10 @@ class FeedManager
end end
statuses = query.to_a statuses = query.to_a
crutches = build_crutches(list.account_id, statuses) crutches = build_crutches(list.account_id, statuses, list: list)
statuses.each do |status| statuses.each do |status|
next if filter_from_home(status, list.account_id, crutches) || filter_from_list?(status, list) next if filter_from_home(status, list.account_id, crutches, :list)
add_to_feed(:list, list.id, status, aggregate_reblogs: aggregate) add_to_feed(:list, list.id, status, aggregate_reblogs: aggregate)
end end
@ -297,23 +297,32 @@ class FeedManager
limit = FeedManager::MAX_ITEMS / 2 limit = FeedManager::MAX_ITEMS / 2
aggregate = account.user&.aggregates_reblogs? aggregate = account.user&.aggregates_reblogs?
timeline_key = key(:home, account.id) timeline_key = key(:home, account.id)
over_limit = false
account.statuses.limit(limit).each do |status| account.statuses.limit(limit).each do |status|
add_to_feed(:home, account.id, status, aggregate_reblogs: aggregate) add_to_feed(:home, account.id, status, aggregate_reblogs: aggregate)
end end
account.following.includes(:account_stat).reorder(nil).find_each do |target_account| account.following.includes(:account_stat).reorder(nil).find_each do |target_account|
if redis.zcard(timeline_key) >= limit query = target_account.statuses.list_eligible_visibility.includes(reblog: :account).limit(limit)
over_limit ||= redis.zcard(timeline_key) >= limit
if over_limit
oldest_home_score = redis.zrange(timeline_key, 0, 0, with_scores: true).first.last.to_i oldest_home_score = redis.zrange(timeline_key, 0, 0, with_scores: true).first.last.to_i
last_status_score = Mastodon::Snowflake.id_at(target_account.last_status_at) last_status_score = Mastodon::Snowflake.id_at(target_account.last_status_at, with_random: false)
# If the feed is full and this account has not posted more recently # If the feed is full and this account has not posted more recently
# than the last item on the feed, then we can skip the whole account # than the last item on the feed, then we can skip the whole account
# because none of its statuses would stay on the feed anyway # because none of its statuses would stay on the feed anyway
next if last_status_score < oldest_home_score next if last_status_score < oldest_home_score
# No need to get older statuses
query = query.where(id: oldest_home_score...)
end end
statuses = target_account.statuses.list_eligible_visibility.includes(:preloadable_poll, :media_attachments, :account, reblog: :account).limit(limit) statuses = query.to_a
next if statuses.empty?
crutches = build_crutches(account.id, statuses) crutches = build_crutches(account.id, statuses)
statuses.each do |status| statuses.each do |status|
@ -358,23 +367,32 @@ class FeedManager
limit = FeedManager::MAX_ITEMS / 2 limit = FeedManager::MAX_ITEMS / 2
aggregate = list.account.user&.aggregates_reblogs? aggregate = list.account.user&.aggregates_reblogs?
timeline_key = key(:list, list.id) timeline_key = key(:list, list.id)
over_limit = false
list.active_accounts.includes(:account_stat).reorder(nil).find_each do |target_account| list.active_accounts.includes(:account_stat).reorder(nil).find_each do |target_account|
if redis.zcard(timeline_key) >= limit query = target_account.statuses.list_eligible_visibility.includes(reblog: :account).limit(limit)
over_limit ||= redis.zcard(timeline_key) >= limit
if over_limit
oldest_home_score = redis.zrange(timeline_key, 0, 0, with_scores: true).first.last.to_i oldest_home_score = redis.zrange(timeline_key, 0, 0, with_scores: true).first.last.to_i
last_status_score = Mastodon::Snowflake.id_at(target_account.last_status_at) last_status_score = Mastodon::Snowflake.id_at(target_account.last_status_at, with_random: false)
# If the feed is full and this account has not posted more recently # If the feed is full and this account has not posted more recently
# than the last item on the feed, then we can skip the whole account # than the last item on the feed, then we can skip the whole account
# because none of its statuses would stay on the feed anyway # because none of its statuses would stay on the feed anyway
next if last_status_score < oldest_home_score next if last_status_score < oldest_home_score
# No need to get older statuses
query = query.where(id: oldest_home_score...)
end end
statuses = target_account.statuses.list_eligible_visibility.includes(:preloadable_poll, :media_attachments, :account, reblog: :account).limit(limit) statuses = query.to_a
crutches = build_crutches(list.account_id, statuses) next if statuses.empty?
crutches = build_crutches(list.account_id, statuses, list: list)
statuses.each do |status| statuses.each do |status|
next if filter_from_home(status, list.account_id, crutches) || filter_from_list?(status, list) next if filter_from_home(status, list.account_id, crutches, :list)
add_to_feed(:list, list.id, status, aggregate_reblogs: aggregate) add_to_feed(:list, list.id, status, aggregate_reblogs: aggregate)
end end
@ -652,8 +670,9 @@ class FeedManager
# are going to be checked by the filtering methods # are going to be checked by the filtering methods
# @param [Integer] receiver_id # @param [Integer] receiver_id
# @param [Array<Status>] statuses # @param [Array<Status>] statuses
# @param [List] list
# @return [Hash] # @return [Hash]
def build_crutches(receiver_id, statuses) def build_crutches(receiver_id, statuses, list: nil)
crutches = {} crutches = {}
crutches[:active_mentions] = crutches_active_mentions(statuses) crutches[:active_mentions] = crutches_active_mentions(statuses)
@ -670,20 +689,33 @@ class FeedManager
arr arr
end end
lists = List.where(account_id: receiver_id, exclusive: true) crutches[:following] = crutches_following(receiver_id, statuses, list)
crutches[:following] = Follow.where(account_id: receiver_id, target_account_id: statuses.filter_map(&:in_reply_to_account_id)).pluck(:target_account_id).index_with(true)
crutches[:languages] = Follow.where(account_id: receiver_id, target_account_id: statuses.map(&:account_id)).pluck(:target_account_id, :languages).to_h crutches[:languages] = Follow.where(account_id: receiver_id, target_account_id: statuses.map(&:account_id)).pluck(:target_account_id, :languages).to_h
crutches[:hiding_reblogs] = Follow.where(account_id: receiver_id, target_account_id: statuses.filter_map { |s| s.account_id if s.reblog? }, show_reblogs: false).pluck(:target_account_id).index_with(true) crutches[:hiding_reblogs] = Follow.where(account_id: receiver_id, target_account_id: statuses.filter_map { |s| s.account_id if s.reblog? }, show_reblogs: false).pluck(:target_account_id).index_with(true)
crutches[:blocking] = Block.where(account_id: receiver_id, target_account_id: check_for_blocks).pluck(:target_account_id).index_with(true) crutches[:blocking] = Block.where(account_id: receiver_id, target_account_id: check_for_blocks).pluck(:target_account_id).index_with(true)
crutches[:muting] = Mute.where(account_id: receiver_id, target_account_id: check_for_blocks).pluck(:target_account_id).index_with(true) crutches[:muting] = Mute.where(account_id: receiver_id, target_account_id: check_for_blocks).pluck(:target_account_id).index_with(true)
crutches[:domain_blocking] = AccountDomainBlock.where(account_id: receiver_id, domain: statuses.flat_map { |s| [s.account.domain, s.reblog&.account&.domain] }.compact).pluck(:domain).index_with(true) crutches[:domain_blocking] = AccountDomainBlock.where(account_id: receiver_id, domain: statuses.flat_map { |s| [s.account.domain, s.reblog&.account&.domain] }.compact).pluck(:domain).index_with(true)
crutches[:blocked_by] = Block.where(target_account_id: receiver_id, account_id: statuses.map { |s| [s.account_id, s.reblog&.account_id] }.flatten.compact).pluck(:account_id).index_with(true) crutches[:blocked_by] = Block.where(target_account_id: receiver_id, account_id: statuses.map { |s| [s.account_id, s.reblog&.account_id] }.flatten.compact).pluck(:account_id).index_with(true)
crutches[:exclusive_list_users] = ListAccount.where(list: lists, account_id: statuses.map(&:account_id)).pluck(:account_id).index_with(true) crutches[:exclusive_list_users] = crutches_exclusive_list_users(receiver_id, statuses) if list.blank?
crutches crutches
end end
def crutches_exclusive_list_users(recipient_id, statuses)
lists = List.where(account_id: recipient_id, exclusive: true)
ListAccount.where(list: lists, account_id: statuses.map(&:account_id)).pluck(:account_id).index_with(true)
end
def crutches_following(recipient_id, statuses, list)
if list.blank? || list.show_followed?
Follow.where(account_id: recipient_id, target_account_id: statuses.filter_map(&:in_reply_to_account_id)).pluck(:target_account_id).index_with(true)
elsif list.show_list?
ListAccount.where(list_id: list.id, account_id: statuses.filter_map(&:in_reply_to_account_id)).pluck(:account_id).index_with(true)
else
{}
end
end
def crutches_active_mentions(statuses) def crutches_active_mentions(statuses)
Mention Mention
.active .active

View File

@ -2,6 +2,7 @@
if ENV['MASTODON_PROMETHEUS_EXPORTER_ENABLED'] == 'true' if ENV['MASTODON_PROMETHEUS_EXPORTER_ENABLED'] == 'true'
if ENV['MASTODON_PROMETHEUS_EXPORTER_LOCAL'] == 'true' if ENV['MASTODON_PROMETHEUS_EXPORTER_LOCAL'] == 'true'
require 'prometheus_exporter'
require 'prometheus_exporter/server' require 'prometheus_exporter/server'
require 'prometheus_exporter/client' require 'prometheus_exporter/client'

View File

@ -1285,6 +1285,7 @@ cy:
too_fast: Cafodd y ffurflen ei chyflwyno'n rhy gyflym, ceisiwch eto. too_fast: Cafodd y ffurflen ei chyflwyno'n rhy gyflym, ceisiwch eto.
use_security_key: Defnyddiwch allwedd diogelwch use_security_key: Defnyddiwch allwedd diogelwch
user_agreement_html: Rwyf wedi darllen ac yn cytuno i <a href="%{terms_of_service_path}" target="_blank">delerau gwasanaeth</a> a'r <a href="%{privacy_policy_path}" target="_blank">polisi preifatrwydd</a> user_agreement_html: Rwyf wedi darllen ac yn cytuno i <a href="%{terms_of_service_path}" target="_blank">delerau gwasanaeth</a> a'r <a href="%{privacy_policy_path}" target="_blank">polisi preifatrwydd</a>
user_privacy_agreement_html: Rwyf wedi darllen ac yn cytuno i'r <a href="%{privacy_policy_path}" target="_blank">polisi preifatrwydd</a>
author_attribution: author_attribution:
example_title: Testun enghreifftiol example_title: Testun enghreifftiol
hint_html: Ydych chi'n ysgrifennu erthyglau newyddion neu flog y tu allan i Mastodon? Rheolwch sut y byddwch yn cael eich cydnabod pan fyddan nhw'n cael eu rhannu ar Mastodon. hint_html: Ydych chi'n ysgrifennu erthyglau newyddion neu flog y tu allan i Mastodon? Rheolwch sut y byddwch yn cael eich cydnabod pan fyddan nhw'n cael eu rhannu ar Mastodon.

View File

@ -374,7 +374,7 @@ da:
other: "<strong>%{count}</strong> verserende anmeldelser" other: "<strong>%{count}</strong> verserende anmeldelser"
pending_tags_html: pending_tags_html:
one: "<strong>%{count}</strong> afventende hashtag" one: "<strong>%{count}</strong> afventende hashtag"
other: "<strong>%{count}</strong> afventende hashtags" other: "<strong>%{count}</strong> afventende etiketter"
pending_users_html: pending_users_html:
one: "<strong>%{count}</strong> afventende bruger" one: "<strong>%{count}</strong> afventende bruger"
other: "<strong>%{count}</strong> afventende brugere" other: "<strong>%{count}</strong> afventende brugere"
@ -735,7 +735,7 @@ da:
manage_settings: Håndtere indstillinger manage_settings: Håndtere indstillinger
manage_settings_description: Tillader brugere at ændre webstedsindstillinger manage_settings_description: Tillader brugere at ændre webstedsindstillinger
manage_taxonomies: Håndtere taksonomier manage_taxonomies: Håndtere taksonomier
manage_taxonomies_description: Tillader brugere at gennemse tenderende indhold og opdatere hashtag-indstillinger manage_taxonomies_description: Tillader brugere at gennemse tenderende indhold og opdatere etiket-indstillinger
manage_user_access: Håndtere brugeradgang manage_user_access: Håndtere brugeradgang
manage_user_access_description: Tillader brugere at deaktivere andre brugeres tofaktorgodkendelse, skifte deres e-mailadresse og nulstille deres adgangskode manage_user_access_description: Tillader brugere at deaktivere andre brugeres tofaktorgodkendelse, skifte deres e-mailadresse og nulstille deres adgangskode
manage_users: Håndtere brugere manage_users: Håndtere brugere
@ -925,7 +925,7 @@ da:
reset: Nulstil reset: Nulstil
review: Gennmgangsstatus review: Gennmgangsstatus
search: Søg search: Søg
title: Hashtags title: Etiketter
updated_msg: Hashtag-indstillinger opdateret updated_msg: Hashtag-indstillinger opdateret
terms_of_service: terms_of_service:
back: Tilbage til Tjenestevilkår back: Tilbage til Tjenestevilkår
@ -1014,14 +1014,14 @@ da:
tag_servers_dimension: Topservere tag_servers_dimension: Topservere
tag_servers_measure: forskellige servere tag_servers_measure: forskellige servere
tag_uses_measure: anvendelser i alt tag_uses_measure: anvendelser i alt
description_html: Disse er hashtags, som pt. vises i en masse indlæg, som serveren ser. Det kan hjælpe brugerne til at finde ud af, hvad folk taler mest om pt. Ingen hashtags vises offentligt, før man godkender dem. description_html: Disse er etiketter, som pt. vises i en masse indlæg, som serveren ser. Det kan hjælpe brugerne til at finde ud af, hvad folk taler mest om pt. Ingen etiketter vises offentligt, før man godkender dem.
listable: Kan foreslås listable: Kan foreslås
no_tag_selected: Intet tag ændret (da intet var valgt) no_tag_selected: Intet tag ændret (da intet var valgt)
not_listable: Foreslås ikke not_listable: Foreslås ikke
not_trendable: Vises ikke under tendenser not_trendable: Vises ikke under tendenser
not_usable: Kan ikke anvendes not_usable: Kan ikke anvendes
peaked_on_and_decaying: Toppede pr. %{date}, nu for nedadgående peaked_on_and_decaying: Toppede pr. %{date}, nu for nedadgående
title: Populære hashtags title: Populære etiketter
trendable: Kan vises under tendenser trendable: Kan vises under tendenser
trending_rank: 'Populær #%{rank}' trending_rank: 'Populær #%{rank}'
usable: Kan anvendes usable: Kan anvendes
@ -1093,7 +1093,7 @@ da:
new_trending_statuses: new_trending_statuses:
title: Populære opslag title: Populære opslag
new_trending_tags: new_trending_tags:
title: Populære hashtags title: Populære etiketter
subject: Nye tendenser klar til gennemgang på %{instance} subject: Nye tendenser klar til gennemgang på %{instance}
aliases: aliases:
add_new: Opret alias add_new: Opret alias
@ -1104,7 +1104,7 @@ da:
remove: Fjern aliaslinkning remove: Fjern aliaslinkning
appearance: appearance:
advanced_web_interface: Avanceret webgrænseflade advanced_web_interface: Avanceret webgrænseflade
advanced_web_interface_hint: 'Ønsker du udnytte hele skærmbredden, lader den avancerede webgrænseflade dig opsætte mange forskellige kolonner for at se så meget information på samme tid som ønsket: Hjem, notifikationer, federeret tidslinje, et hvilket som helst antal lister og hashtags.' advanced_web_interface_hint: 'Ønsker du udnytte hele skærmbredden, lader den avancerede netgrænseflade dig opsætte mange forskellige kolonner for at se så meget information på samme tid som ønsket: Hjem, notifikationer, fødereret tidslinje, et hvilket som helst antal lister og etiketter.'
animations_and_accessibility: Animationer og tilgængelighed animations_and_accessibility: Animationer og tilgængelighed
confirmation_dialogs: Bekræftelsesdialoger confirmation_dialogs: Bekræftelsesdialoger
discovery: Opdagelse discovery: Opdagelse
@ -1331,8 +1331,8 @@ da:
featured_tags: featured_tags:
add_new: Tilføj nyt add_new: Tilføj nyt
errors: errors:
limit: Det maksimale antal hashtags er allerede fremhævet limit: Det maksimale antal etiketter er allerede fremhævet
hint_html: "<strong>Hvad er fremhævede hashtags?</strong> De vises i en fremtrædende position på din offentlige profil og giver folk mulighed for at gennemse dine offentlige indlæg specifikt under disse hashtags. De er et fantastisk værktøj til at holde styr på kreative værker eller langsigtede projekter." hint_html: "<strong>Hvad er fremhævede etiketter?</strong> De vises i en fremtrædende position på din offentlige profil og giver folk mulighed for at gennemse dine offentlige indlæg specifikt under disse etiketter. De er et fantastisk værktøj til at holde styr på kreative værker eller langsigtede projekter."
filters: filters:
contexts: contexts:
account: Profiler account: Profiler
@ -1704,7 +1704,7 @@ da:
content_warning: 'Indholdsadvarsel:' content_warning: 'Indholdsadvarsel:'
descriptions: descriptions:
account: Offentlige indlæg fra @%{acct} account: Offentlige indlæg fra @%{acct}
tag: 'Offentlige indlæg tagget #%{hashtag}' tag: 'Offentlige indlæg etiketteret #%{hashtag}'
scheduled_statuses: scheduled_statuses:
over_daily_limit: Den daglige grænse på %{limit} planlagte indlæg er nået over_daily_limit: Den daglige grænse på %{limit} planlagte indlæg er nået
over_total_limit: Grænsen på %{limit} planlagte indlæg er nået over_total_limit: Grænsen på %{limit} planlagte indlæg er nået
@ -1769,7 +1769,7 @@ da:
development: Udvikling development: Udvikling
edit_profile: Redigér profil edit_profile: Redigér profil
export: Eksport export: Eksport
featured_tags: Udvalgte hashtags featured_tags: Udvalgte etiketter
import: Import import: Import
import_and_export: Import og eksport import_and_export: Import og eksport
migrate: Kontomigrering migrate: Kontomigrering
@ -1809,8 +1809,8 @@ da:
content_warning: 'Indholdsadvarsel: %{warning}' content_warning: 'Indholdsadvarsel: %{warning}'
default_language: Samme som UI-sproget default_language: Samme som UI-sproget
disallowed_hashtags: disallowed_hashtags:
one: 'indeholdte et ikke tilladt hashtag: %{tags}' one: 'indeholdte en ikke tilladt etiket: %{tags}'
other: 'indeholdte de ikke tilladte hashtags: %{tags}' other: 'indeholdte de ikke tilladte etiketter: %{tags}'
edited_at_html: Redigeret %{date} edited_at_html: Redigeret %{date}
errors: errors:
in_reply_not_found: Indlægget, der forsøges besvaret, ser ikke ud til at eksistere. in_reply_not_found: Indlægget, der forsøges besvaret, ser ikke ud til at eksistere.
@ -2003,8 +2003,8 @@ da:
one: "%{people} person de seneste 2 dage" one: "%{people} person de seneste 2 dage"
other: "%{people} personer de seneste 2 dage" other: "%{people} personer de seneste 2 dage"
hashtags_subtitle: Udforsk de seneste 2 dages tendenser hashtags_subtitle: Udforsk de seneste 2 dages tendenser
hashtags_title: Populære hashtags hashtags_title: Populære etiketter
hashtags_view_more: Se flere populære hashtags hashtags_view_more: Se flere populære etiketter
post_action: Skriv post_action: Skriv
post_step: Sig hej til verden med tekst, fotos, videoer eller afstemninger. post_step: Sig hej til verden med tekst, fotos, videoer eller afstemninger.
post_title: Opret det første indlæg post_title: Opret det første indlæg

View File

@ -1266,6 +1266,7 @@ ga:
too_fast: Cuireadh an fhoirm isteach róthapa, triail arís. too_fast: Cuireadh an fhoirm isteach róthapa, triail arís.
use_security_key: Úsáid eochair shlándála use_security_key: Úsáid eochair shlándála
user_agreement_html: Léigh mé agus aontaím leis na <a href="%{terms_of_service_path}" target="_blank">téarmaí seirbhíse</a> agus <a href="%{privacy_policy_path}" target="_blank">polasaí príobháideachais</a> user_agreement_html: Léigh mé agus aontaím leis na <a href="%{terms_of_service_path}" target="_blank">téarmaí seirbhíse</a> agus <a href="%{privacy_policy_path}" target="_blank">polasaí príobháideachais</a>
user_privacy_agreement_html: Léigh mé agus aontaím leis an <a href="%{privacy_policy_path}" target="_blank">polasaí príobháideachais</a>
author_attribution: author_attribution:
example_title: Téacs samplach example_title: Téacs samplach
hint_html: An bhfuil tú ag scríobh altanna nuachta nó blag lasmuigh de Mastodon? Rialú conas a gheobhaidh tú creidmheas nuair a roinntear iad ar Mastodon. hint_html: An bhfuil tú ag scríobh altanna nuachta nó blag lasmuigh de Mastodon? Rialú conas a gheobhaidh tú creidmheas nuair a roinntear iad ar Mastodon.

View File

@ -1247,6 +1247,7 @@ pl:
too_fast: Zbyt szybko przesłano formularz, spróbuj ponownie. too_fast: Zbyt szybko przesłano formularz, spróbuj ponownie.
use_security_key: Użyj klucza bezpieczeństwa use_security_key: Użyj klucza bezpieczeństwa
user_agreement_html: Przeczytałem i akceptuję <a href="%{terms_of_service_path}" target="_blank">warunki korzystania z usługi</a> oraz <a href="%{privacy_policy_path}" target="_blank">politykę prywatności</a> user_agreement_html: Przeczytałem i akceptuję <a href="%{terms_of_service_path}" target="_blank">warunki korzystania z usługi</a> oraz <a href="%{privacy_policy_path}" target="_blank">politykę prywatności</a>
user_privacy_agreement_html: Przeczytałem/am/o i akceptuję <a href="%{privacy_policy_path}" target="_blank">politykę prywatności</a>
author_attribution: author_attribution:
example_title: Przykładowy tekst example_title: Przykładowy tekst
hint_html: Piszesz wiadomości albo bloga poza Mastodonem? Kontroluj jak będą ci przypisywane podczas dizielenia się nimi na Mastodonie. hint_html: Piszesz wiadomości albo bloga poza Mastodonem? Kontroluj jak będą ci przypisywane podczas dizielenia się nimi na Mastodonie.

View File

@ -3,6 +3,7 @@ cy:
simple_form: simple_form:
hints: hints:
account: account:
attribution_domains: Un i bob llinell. Yn amddiffyn rhag priodoli ffug.
discoverable: Mae'n bosibl y bydd eich postiadau cyhoeddus a'ch proffil yn cael sylw neu'n cael eu hargymell mewn gwahanol feysydd o Mastodon ac efallai y bydd eich proffil yn cael ei awgrymu i ddefnyddwyr eraill. discoverable: Mae'n bosibl y bydd eich postiadau cyhoeddus a'ch proffil yn cael sylw neu'n cael eu hargymell mewn gwahanol feysydd o Mastodon ac efallai y bydd eich proffil yn cael ei awgrymu i ddefnyddwyr eraill.
display_name: Eich enw llawn neu'ch enw hwyl. display_name: Eich enw llawn neu'ch enw hwyl.
fields: Eich tudalen cartref, rhagenwau, oed, neu unrhyw beth. fields: Eich tudalen cartref, rhagenwau, oed, neu unrhyw beth.
@ -155,6 +156,7 @@ cy:
url: I ble bydd digwyddiadau'n cael eu hanfon url: I ble bydd digwyddiadau'n cael eu hanfon
labels: labels:
account: account:
attribution_domains: Gwefannau sy'n cael caniatâd i'ch cydnabod chi
discoverable: Proffil nodwedd a phostiadau mewn algorithmau darganfod discoverable: Proffil nodwedd a phostiadau mewn algorithmau darganfod
fields: fields:
name: Label name: Label
@ -231,6 +233,7 @@ cy:
setting_display_media_show_all: Dangos popeth setting_display_media_show_all: Dangos popeth
setting_expand_spoilers: Dangos postiadau wedi'u marcio â rhybudd cynnwys bob tro setting_expand_spoilers: Dangos postiadau wedi'u marcio â rhybudd cynnwys bob tro
setting_hide_network: Cuddio eich graff cymdeithasol setting_hide_network: Cuddio eich graff cymdeithasol
setting_missing_alt_text_modal: Dangos deialog cadarnhau cyn postio cyfrwng heb destun amgen
setting_reduce_motion: Lleihau mudiant mewn animeiddiadau setting_reduce_motion: Lleihau mudiant mewn animeiddiadau
setting_system_font_ui: Defnyddio ffont rhagosodedig y system setting_system_font_ui: Defnyddio ffont rhagosodedig y system
setting_system_scrollbars_ui: Defnyddiwch far sgrolio rhagosodedig y system setting_system_scrollbars_ui: Defnyddiwch far sgrolio rhagosodedig y system

View File

@ -8,7 +8,7 @@ da:
display_name: Dit fulde navn eller dit sjove navn. display_name: Dit fulde navn eller dit sjove navn.
fields: Din hjemmeside, dine pronominer, din alder, eller hvad du har lyst til. fields: Din hjemmeside, dine pronominer, din alder, eller hvad du har lyst til.
indexable: Dine offentlige indlæg vil kunne vises i Mastodon-søgeresultater. Folk, som har interageret med dem, vil kunne finde dem uanset. indexable: Dine offentlige indlæg vil kunne vises i Mastodon-søgeresultater. Folk, som har interageret med dem, vil kunne finde dem uanset.
note: 'Du kan @omtale andre personer eller #hashtags.' note: 'Du kan @omtale andre personer eller #etiketter.'
show_collections: Folk vil ikke kunne tjekke dine Følger og Følgere. Folk, du selv følger, vil stadig kunne se dette. show_collections: Folk vil ikke kunne tjekke dine Følger og Følgere. Folk, du selv følger, vil stadig kunne se dette.
unlocked: Man vil kunne følges af folk uden først at godkende dem. Ønsker man at gennemgå Følg-anmodninger og individuelt acceptere/afvise nye følgere, så fjern markeringen. unlocked: Man vil kunne følges af folk uden først at godkende dem. Ønsker man at gennemgå Følg-anmodninger og individuelt acceptere/afvise nye følgere, så fjern markeringen.
account_alias: account_alias:
@ -16,7 +16,7 @@ da:
account_migration: account_migration:
acct: Angiv brugernavn@domain for den konto, hvortil du vil flytte acct: Angiv brugernavn@domain for den konto, hvortil du vil flytte
account_warning_preset: account_warning_preset:
text: Du kan bruge indlægssyntaks, såsom URL'er, hashtags og omtaler text: Du kan bruge indlægssyntaks, såsom URL'er, etiketter og omtaler
title: Valgfri. Ikke synlig for modtageren title: Valgfri. Ikke synlig for modtageren
admin_account_action: admin_account_action:
include_statuses: Brugeren vil se, hvilke indlæg, som har forårsaget modereringen/advarslen include_statuses: Brugeren vil se, hvilke indlæg, som har forårsaget modereringen/advarslen
@ -71,7 +71,7 @@ da:
domain: Dette kan være domænenavnet vist i den benyttede i e-mailadresse eller MX-post. Begge tjekkes under tilmelding. domain: Dette kan være domænenavnet vist i den benyttede i e-mailadresse eller MX-post. Begge tjekkes under tilmelding.
with_dns_records: Et forsøg på at opløse det givne domænes DNS-poster foretages, og resultaterne blokeres ligeledes with_dns_records: Et forsøg på at opløse det givne domænes DNS-poster foretages, og resultaterne blokeres ligeledes
featured_tag: featured_tag:
name: 'Her er nogle af dine hyppigst brugte hashtags:' name: 'Her er nogle af dine hyppigst brugte etiketter:'
filters: filters:
action: Vælg handlingen til eksekvering, når et indlæg matcher filteret action: Vælg handlingen til eksekvering, når et indlæg matcher filteret
actions: actions:
@ -102,7 +102,7 @@ da:
thumbnail: Et ca. 2:1 billede vist sammen med serveroplysningerne. thumbnail: Et ca. 2:1 billede vist sammen med serveroplysningerne.
timeline_preview: Udloggede besøgende kan gennemse serverens seneste offentlige indlæg. timeline_preview: Udloggede besøgende kan gennemse serverens seneste offentlige indlæg.
trendable_by_default: Spring manuel gennemgang af trendindhold over. Individuelle elementer kan stadig fjernes fra trends efter kendsgerningen. trendable_by_default: Spring manuel gennemgang af trendindhold over. Individuelle elementer kan stadig fjernes fra trends efter kendsgerningen.
trends: Tendenser viser, hvilke indlæg, hashtags og nyheder opnår momentum på serveren. trends: Tendenser viser, hvilke indlæg, etiketter og nyheder opnår momentum på serveren.
trends_as_landing_page: Vis tendensindhold til udloggede brugere og besøgende i stedet for en beskrivelse af denne server. Kræver, at tendenser er aktiveret. trends_as_landing_page: Vis tendensindhold til udloggede brugere og besøgende i stedet for en beskrivelse af denne server. Kræver, at tendenser er aktiveret.
form_challenge: form_challenge:
current_password: Du bevæger dig ind på et sikkert område current_password: Du bevæger dig ind på et sikkert område
@ -327,10 +327,10 @@ da:
indexable: Inkludér profilside i søgemaskiner indexable: Inkludér profilside i søgemaskiner
show_application: Vis, fra hvilken app et indlæg er sendt show_application: Vis, fra hvilken app et indlæg er sendt
tag: tag:
listable: Tillad visning af dette hashtag i søgninger og forslag listable: Tillad visning af denne etiket i søgninger og forslag
name: Hashtag name: Hashtag
trendable: Tillad visning af dette hashtag under trends trendable: Tillad visning af denne etiket under tendenser
usable: Tillad indlæg at benytte dette hashtag lokalt usable: Tillad indlæg at benytte denne etiket lokalt
terms_of_service: terms_of_service:
changelog: Hvad der er ændret? changelog: Hvad der er ændret?
text: Tjenestevilkår text: Tjenestevilkår

View File

@ -233,6 +233,7 @@ en-GB:
setting_display_media_show_all: Show all setting_display_media_show_all: Show all
setting_expand_spoilers: Always expand posts marked with content warnings setting_expand_spoilers: Always expand posts marked with content warnings
setting_hide_network: Hide your social graph setting_hide_network: Hide your social graph
setting_missing_alt_text_modal: Show confirmation dialogue before posting media without alt text
setting_reduce_motion: Reduce motion in animations setting_reduce_motion: Reduce motion in animations
setting_system_font_ui: Use system's default font setting_system_font_ui: Use system's default font
setting_system_scrollbars_ui: Use system's default scrollbar setting_system_scrollbars_ui: Use system's default scrollbar

View File

@ -3,6 +3,7 @@ ga:
simple_form: simple_form:
hints: hints:
account: account:
attribution_domains: Ceann in aghaidh an líne. Cosnaíonn sé ó sannadh bréagach.
discoverable: Seans go mbeidh do phostálacha poiblí agus do phróifíl le feiceáil nó molta i réimsí éagsúla de Mastodon agus is féidir do phróifíl a mholadh dúsáideoirí eile. discoverable: Seans go mbeidh do phostálacha poiblí agus do phróifíl le feiceáil nó molta i réimsí éagsúla de Mastodon agus is féidir do phróifíl a mholadh dúsáideoirí eile.
display_name: D'ainm iomlán nó d'ainm spraoi. display_name: D'ainm iomlán nó d'ainm spraoi.
fields: Do leathanach baile, forainmneacha, aois, rud ar bith is mian leat. fields: Do leathanach baile, forainmneacha, aois, rud ar bith is mian leat.
@ -155,6 +156,7 @@ ga:
url: An áit a seolfar imeachtaí chuig url: An áit a seolfar imeachtaí chuig
labels: labels:
account: account:
attribution_domains: Tá cead ag suíomhanna Gréasáin creidmheas a thabhairt duit
discoverable: Próifíl gné agus postálacha in halgartaim fionnachtana discoverable: Próifíl gné agus postálacha in halgartaim fionnachtana
fields: fields:
name: Lipéad name: Lipéad
@ -231,6 +233,7 @@ ga:
setting_display_media_show_all: Taispeáin uile setting_display_media_show_all: Taispeáin uile
setting_expand_spoilers: Méadaigh postálacha atá marcáilte le rabhaidh inneachair i gcónaí setting_expand_spoilers: Méadaigh postálacha atá marcáilte le rabhaidh inneachair i gcónaí
setting_hide_network: Folaigh do ghraf sóisialta setting_hide_network: Folaigh do ghraf sóisialta
setting_missing_alt_text_modal: Taispeáin dialóg deimhnithe sula bpostálann tú meán gan alt téacs
setting_reduce_motion: Laghdú ar an tairiscint i beochan setting_reduce_motion: Laghdú ar an tairiscint i beochan
setting_system_font_ui: Úsáid cló réamhshocraithe an chórais setting_system_font_ui: Úsáid cló réamhshocraithe an chórais
setting_system_scrollbars_ui: Bain úsáid as scrollbharra réamhshocraithe an chórais setting_system_scrollbars_ui: Bain úsáid as scrollbharra réamhshocraithe an chórais

View File

@ -137,6 +137,10 @@ pl:
admin_email: Zawiadomienia prawne obejmują środki zapobiegawcze, nakazy sądowe, wnioski o popełnienie sprawy oraz wnioski organów ścigania. admin_email: Zawiadomienia prawne obejmują środki zapobiegawcze, nakazy sądowe, wnioski o popełnienie sprawy oraz wnioski organów ścigania.
arbitration_address: Może być taki sam jak adres fizyczny powyżej lub „N/A” jeśli używasz adresu e-mail arbitration_address: Może być taki sam jak adres fizyczny powyżej lub „N/A” jeśli używasz adresu e-mail
arbitration_website: Może być formularzem internetowym lub „N/A”, jeśli używasz adresu e-mail arbitration_website: Może być formularzem internetowym lub „N/A”, jeśli używasz adresu e-mail
dmca_address: W przypadku operatorów z USA należy użyć adresu zarejestrowanego w DMCA Designated Agent Directory. Lista skrytek pocztowych dostępna jest na bezpośrednią prośbę użytkownika. Użyj DMCA Agent Post Office Box Waiver Request, aby wysłać email do Copyright Office z informacją, że jesteś domowym administratorm treści i z powodu obawy o zemstę lub odwetu za swoje działania, musisz użyć skrytki pocztowej, żeby usunąć swój adres domowy z dostępu publicznego.
dmca_email: Adres email może być taki sam jak wcześniejszy "adres e-mail przeznaczony do celów prawnych"
domain: Unikalny numer identyfikacji świadczonej przez Ciebie usługi online.
jurisdiction: Wymień państwo, w którym mieszkają osoby płacące rachunki. Jeżeli jest to spółka lub inny zarejestrowany podmiot, w zależności od przypadku podaj państwo, w którym jest zarejestrowany, a także miasto, region czy województwo.
user: user:
chosen_languages: Jeżeli zaznaczone, tylko wpisy w wybranych językach będą wyświetlane na publicznych osiach czasu chosen_languages: Jeżeli zaznaczone, tylko wpisy w wybranych językach będą wyświetlane na publicznych osiach czasu
role: Rola kontroluje uprawnienia użytkownika. role: Rola kontroluje uprawnienia użytkownika.
@ -152,6 +156,7 @@ pl:
url: Dokąd będą wysłane zdarzenia url: Dokąd będą wysłane zdarzenia
labels: labels:
account: account:
attribution_domains: Strony które mogą ci przypisywać autorstwo
discoverable: Udostępniaj profil i wpisy funkcjom odkrywania discoverable: Udostępniaj profil i wpisy funkcjom odkrywania
fields: fields:
name: Nazwa name: Nazwa
@ -228,6 +233,7 @@ pl:
setting_display_media_show_all: Pokaż wszystko setting_display_media_show_all: Pokaż wszystko
setting_expand_spoilers: Zawsze rozwijaj wpisy oznaczone ostrzeżeniem o zawartości setting_expand_spoilers: Zawsze rozwijaj wpisy oznaczone ostrzeżeniem o zawartości
setting_hide_network: Ukryj swoją sieć setting_hide_network: Ukryj swoją sieć
setting_missing_alt_text_modal: Pokaż okno potwierdzenia przed opublikowaniem materiałów bez pomocniczego opisu obrazów
setting_reduce_motion: Ogranicz ruch w animacjach setting_reduce_motion: Ogranicz ruch w animacjach
setting_system_font_ui: Używaj domyślnej czcionki systemu setting_system_font_ui: Używaj domyślnej czcionki systemu
setting_system_scrollbars_ui: Używaj domyślnego paska przewijania systemu setting_system_scrollbars_ui: Używaj domyślnego paska przewijania systemu
@ -329,6 +335,7 @@ pl:
changelog: Co się zmieniło? changelog: Co się zmieniło?
text: Warunki korzystania z usługi text: Warunki korzystania z usługi
terms_of_service_generator: terms_of_service_generator:
admin_email: Adres e-mail przeznaczony do celów prawnych
arbitration_address: Adres fizyczny powiadomień arbitrażowych arbitration_address: Adres fizyczny powiadomień arbitrażowych
arbitration_website: Strona internetowa do składania zgłoszeń arbitrażowych arbitration_website: Strona internetowa do składania zgłoszeń arbitrażowych
dmca_address: Adres fizyczny dla zgłoszeń naruszenia DMCA/praw autorskich dmca_address: Adres fizyczny dla zgłoszeń naruszenia DMCA/praw autorskich

View File

@ -1365,6 +1365,7 @@ sk:
explanation: Tu nájdeš nejaké tipy do začiatku explanation: Tu nájdeš nejaké tipy do začiatku
feature_action: Zisti viac feature_action: Zisti viac
follow_action: Nasleduj follow_action: Nasleduj
follow_title: Prispôsob svoj domáci kanál
follows_title: Koho nasledovať follows_title: Koho nasledovať
post_title: Vytvor svoj prvý príspevok post_title: Vytvor svoj prvý príspevok
share_action: Zdieľaj share_action: Zdieľaj

View File

@ -203,6 +203,28 @@ RSpec.describe FeedManager do
end end
end end
context 'with list feed' do
let(:list) { Fabricate(:list, account: bob) }
before do
bob.follow!(alice)
list.list_accounts.create!(account: alice)
end
it "returns false for followee's status" do
status = Fabricate(:status, text: 'Hello world', account: alice)
expect(subject.filter?(:list, status, list)).to be false
end
it 'returns false for reblog by followee' do
status = Fabricate(:status, text: 'Hello world', account: jeff)
reblog = Fabricate(:status, reblog: status, account: alice)
expect(subject.filter?(:list, reblog, list)).to be false
end
end
context 'with mentions feed' do context 'with mentions feed' do
it 'returns true for status that mentions blocked account' do it 'returns true for status that mentions blocked account' do
bob.block!(jeff) bob.block!(jeff)