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

Merge upstream changes
main
Claire 2 years ago committed by GitHub
commit 7233569474
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -0,0 +1,138 @@
# This is a GitHub workflow defining a set of jobs with a set of steps.
# ref: https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions
#
name: Test chart
on:
pull_request:
paths:
- "chart/**"
- "!**.md"
- ".github/workflows/test-chart.yml"
push:
paths:
- "chart/**"
- "!**.md"
- ".github/workflows/test-chart.yml"
branches-ignore:
- "dependabot/**"
workflow_dispatch:
permissions:
contents: read
defaults:
run:
working-directory: chart
jobs:
lint-templates:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: "3.x"
- name: Install dependencies (yamllint)
run: pip install yamllint
- run: helm dependency update
- name: helm lint
run: |
helm lint . \
--values dev-values.yaml
- name: helm template
run: |
helm template . \
--values dev-values.yaml \
--output-dir rendered-templates
- name: yamllint (only on templates we manage)
run: |
rm -rf rendered-templates/mastodon/charts
yamllint rendered-templates \
--config-data "{rules: {indentation: {spaces: 2}, line-length: disable}}"
# This job helps us validate that rendered templates are valid k8s resources
# against a k8s api-server, via "helm template --validate", but also that a
# basic configuration can be used to successfully startup mastodon.
#
test-install:
runs-on: ubuntu-22.04
timeout-minutes: 15
strategy:
fail-fast: false
matrix:
include:
# k3s-channel reference: https://update.k3s.io/v1-release/channels
- k3s-channel: latest
- k3s-channel: stable
# This represents the oldest configuration we test against.
#
# The k8s version chosen is based on the oldest still supported k8s
# version among two managed k8s services, GKE, EKS.
# - GKE: https://endoflife.date/google-kubernetes-engine
# - EKS: https://endoflife.date/amazon-eks
#
# The helm client's version can influence what helper functions is
# available for use in the templates, currently we need v3.6.0 or
# higher.
#
- k3s-channel: v1.21
helm-version: v3.6.0
steps:
- uses: actions/checkout@v3
# This action starts a k8s cluster with NetworkPolicy enforcement and
# installs both kubectl and helm.
#
# ref: https://github.com/jupyterhub/action-k3s-helm#readme
#
- uses: jupyterhub/action-k3s-helm@v3
with:
k3s-channel: ${{ matrix.k3s-channel }}
helm-version: ${{ matrix.helm-version }}
metrics-enabled: false
traefik-enabled: false
docker-enabled: false
- run: helm dependency update
# Validate rendered helm templates against the k8s api-server
- name: helm template --validate
run: |
helm template --validate mastodon . \
--values dev-values.yaml
- name: helm install
run: |
helm install mastodon . \
--values dev-values.yaml \
--timeout 10m
# This actions provides a report about the state of the k8s cluster,
# providing logs etc on anything that has failed and workloads marked as
# important.
#
# ref: https://github.com/jupyterhub/action-k8s-namespace-report#readme
#
- name: Kubernetes namespace report
uses: jupyterhub/action-k8s-namespace-report@v1
if: always()
with:
important-workloads: >-
deploy/mastodon-sidekiq
deploy/mastodon-streaming
deploy/mastodon-web
job/mastodon-assets-precompile
job/mastodon-chewy-upgrade
job/mastodon-create-admin
job/mastodon-db-migrate

File diff suppressed because it is too large Load Diff

@ -58,12 +58,13 @@ Some of the features in this release have been funded through the [NGI0 Discover
- Add reputation and followers score boost to SQL-only account search ([Gargron](https://github.com/mastodon/mastodon/pull/19251)) - Add reputation and followers score boost to SQL-only account search ([Gargron](https://github.com/mastodon/mastodon/pull/19251))
- Add Scots, Balaibalan, Láadan, Lingua Franca Nova, Lojban, Toki Pona to languages list ([VyrCossont](https://github.com/mastodon/mastodon/pull/20168)) - Add Scots, Balaibalan, Láadan, Lingua Franca Nova, Lojban, Toki Pona to languages list ([VyrCossont](https://github.com/mastodon/mastodon/pull/20168))
- Set autocomplete hints for e-mail, password and OTP fields ([rcombs](https://github.com/mastodon/mastodon/pull/19833), [offbyone](https://github.com/mastodon/mastodon/pull/19946), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/20071)) - Set autocomplete hints for e-mail, password and OTP fields ([rcombs](https://github.com/mastodon/mastodon/pull/19833), [offbyone](https://github.com/mastodon/mastodon/pull/19946), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/20071))
- Add support for DigitalOcean Spaces in setup wizard ([v-aisac](https://github.com/mastodon/mastodon/pull/20573))
### Changed ### Changed
- **Change brand color and logotypes** ([Gargron](https://github.com/mastodon/mastodon/pull/18592), [Gargron](https://github.com/mastodon/mastodon/pull/18639), [Gargron](https://github.com/mastodon/mastodon/pull/18691), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/18634), [Gargron](https://github.com/mastodon/mastodon/pull/19254), [mayaeh](https://github.com/mastodon/mastodon/pull/18710)) - **Change brand color and logotypes** ([Gargron](https://github.com/mastodon/mastodon/pull/18592), [Gargron](https://github.com/mastodon/mastodon/pull/18639), [Gargron](https://github.com/mastodon/mastodon/pull/18691), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/18634), [Gargron](https://github.com/mastodon/mastodon/pull/19254), [mayaeh](https://github.com/mastodon/mastodon/pull/18710))
- **Change post editing to be enabled in web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/19103)) - **Change post editing to be enabled in web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/19103))
- **Change web UI to work for logged-out users** ([Gargron](https://github.com/mastodon/mastodon/pull/18961), [Gargron](https://github.com/mastodon/mastodon/pull/19250), [Gargron](https://github.com/mastodon/mastodon/pull/19294), [Gargron](https://github.com/mastodon/mastodon/pull/19306), [Gargron](https://github.com/mastodon/mastodon/pull/19315), [ykzts](https://github.com/mastodon/mastodon/pull/19322), [Gargron](https://github.com/mastodon/mastodon/pull/19412), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19437), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19415), [Gargron](https://github.com/mastodon/mastodon/pull/19348), [Gargron](https://github.com/mastodon/mastodon/pull/19295), [Gargron](https://github.com/mastodon/mastodon/pull/19422), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19414), [Gargron](https://github.com/mastodon/mastodon/pull/19319), [Gargron](https://github.com/mastodon/mastodon/pull/19345), [Gargron](https://github.com/mastodon/mastodon/pull/19310), [Gargron](https://github.com/mastodon/mastodon/pull/19301), [Gargron](https://github.com/mastodon/mastodon/pull/19423), [ykzts](https://github.com/mastodon/mastodon/pull/19471), [ykzts](https://github.com/mastodon/mastodon/pull/19333), [ykzts](https://github.com/mastodon/mastodon/pull/19337), [ykzts](https://github.com/mastodon/mastodon/pull/19272), [ykzts](https://github.com/mastodon/mastodon/pull/19468), [Gargron](https://github.com/mastodon/mastodon/pull/19466), [Gargron](https://github.com/mastodon/mastodon/pull/19457), [Gargron](https://github.com/mastodon/mastodon/pull/19426), [Gargron](https://github.com/mastodon/mastodon/pull/19427), [Gargron](https://github.com/mastodon/mastodon/pull/19421), [Gargron](https://github.com/mastodon/mastodon/pull/19417), [Gargron](https://github.com/mastodon/mastodon/pull/19413), [Gargron](https://github.com/mastodon/mastodon/pull/19397), [Gargron](https://github.com/mastodon/mastodon/pull/19387), [Gargron](https://github.com/mastodon/mastodon/pull/19396), [Gargron](https://github.com/mastodon/mastodon/pull/19385), [ykzts](https://github.com/mastodon/mastodon/pull/19334), [ykzts](https://github.com/mastodon/mastodon/pull/19329), [Gargron](https://github.com/mastodon/mastodon/pull/19324), [Gargron](https://github.com/mastodon/mastodon/pull/19318), [Gargron](https://github.com/mastodon/mastodon/pull/19316), [Gargron](https://github.com/mastodon/mastodon/pull/19263), [trwnh](https://github.com/mastodon/mastodon/pull/19305), [ykzts](https://github.com/mastodon/mastodon/pull/19273), [Gargron](https://github.com/mastodon/mastodon/pull/19801), [Gargron](https://github.com/mastodon/mastodon/pull/19790), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19773), [Gargron](https://github.com/mastodon/mastodon/pull/19798), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19724), [Gargron](https://github.com/mastodon/mastodon/pull/19709), [Gargron](https://github.com/mastodon/mastodon/pull/19514), [Gargron](https://github.com/mastodon/mastodon/pull/19562), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19981), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19978), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/20148), [Gargron](https://github.com/mastodon/mastodon/pull/20302)) - **Change web UI to work for logged-out users** ([Gargron](https://github.com/mastodon/mastodon/pull/18961), [Gargron](https://github.com/mastodon/mastodon/pull/19250), [Gargron](https://github.com/mastodon/mastodon/pull/19294), [Gargron](https://github.com/mastodon/mastodon/pull/19306), [Gargron](https://github.com/mastodon/mastodon/pull/19315), [ykzts](https://github.com/mastodon/mastodon/pull/19322), [Gargron](https://github.com/mastodon/mastodon/pull/19412), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19437), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19415), [Gargron](https://github.com/mastodon/mastodon/pull/19348), [Gargron](https://github.com/mastodon/mastodon/pull/19295), [Gargron](https://github.com/mastodon/mastodon/pull/19422), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19414), [Gargron](https://github.com/mastodon/mastodon/pull/19319), [Gargron](https://github.com/mastodon/mastodon/pull/19345), [Gargron](https://github.com/mastodon/mastodon/pull/19310), [Gargron](https://github.com/mastodon/mastodon/pull/19301), [Gargron](https://github.com/mastodon/mastodon/pull/19423), [ykzts](https://github.com/mastodon/mastodon/pull/19471), [ykzts](https://github.com/mastodon/mastodon/pull/19333), [ykzts](https://github.com/mastodon/mastodon/pull/19337), [ykzts](https://github.com/mastodon/mastodon/pull/19272), [ykzts](https://github.com/mastodon/mastodon/pull/19468), [Gargron](https://github.com/mastodon/mastodon/pull/19466), [Gargron](https://github.com/mastodon/mastodon/pull/19457), [Gargron](https://github.com/mastodon/mastodon/pull/19426), [Gargron](https://github.com/mastodon/mastodon/pull/19427), [Gargron](https://github.com/mastodon/mastodon/pull/19421), [Gargron](https://github.com/mastodon/mastodon/pull/19417), [Gargron](https://github.com/mastodon/mastodon/pull/19413), [Gargron](https://github.com/mastodon/mastodon/pull/19397), [Gargron](https://github.com/mastodon/mastodon/pull/19387), [Gargron](https://github.com/mastodon/mastodon/pull/19396), [Gargron](https://github.com/mastodon/mastodon/pull/19385), [ykzts](https://github.com/mastodon/mastodon/pull/19334), [ykzts](https://github.com/mastodon/mastodon/pull/19329), [Gargron](https://github.com/mastodon/mastodon/pull/19324), [Gargron](https://github.com/mastodon/mastodon/pull/19318), [Gargron](https://github.com/mastodon/mastodon/pull/19316), [Gargron](https://github.com/mastodon/mastodon/pull/19263), [trwnh](https://github.com/mastodon/mastodon/pull/19305), [ykzts](https://github.com/mastodon/mastodon/pull/19273), [Gargron](https://github.com/mastodon/mastodon/pull/19801), [Gargron](https://github.com/mastodon/mastodon/pull/19790), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19773), [Gargron](https://github.com/mastodon/mastodon/pull/19798), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19724), [Gargron](https://github.com/mastodon/mastodon/pull/19709), [Gargron](https://github.com/mastodon/mastodon/pull/19514), [Gargron](https://github.com/mastodon/mastodon/pull/19562), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19981), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19978), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/20148), [Gargron](https://github.com/mastodon/mastodon/pull/20302), [cutls](https://github.com/mastodon/mastodon/pull/20400))
- The web app can now be accessed without being logged in - The web app can now be accessed without being logged in
- No more `/web` prefix on web app paths - No more `/web` prefix on web app paths
- Profiles, posts, and other public pages now use the same interface for logged in and logged out users - Profiles, posts, and other public pages now use the same interface for logged in and logged out users
@ -79,7 +80,7 @@ Some of the features in this release have been funded through the [NGI0 Discover
- Change label of publish button to be "Publish" again in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/18583)) - Change label of publish button to be "Publish" again in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/18583))
- Change language to be carried over on reply in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/18557)) - Change language to be carried over on reply in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/18557))
- Change "Unfollow" to "Cancel follow request" when request still pending in web UI ([prplecake](https://github.com/mastodon/mastodon/pull/19363)) - Change "Unfollow" to "Cancel follow request" when request still pending in web UI ([prplecake](https://github.com/mastodon/mastodon/pull/19363))
- **Change post filtering system** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/18058), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19050), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/18894), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19051), [noellabo](https://github.com/mastodon/mastodon/pull/18923), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/18956), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/18744), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19878)) - **Change post filtering system** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/18058), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19050), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/18894), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19051), [noellabo](https://github.com/mastodon/mastodon/pull/18923), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/18956), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/18744), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19878), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/20567))
- Filtered keywords and phrases can now be grouped into named categories - Filtered keywords and phrases can now be grouped into named categories
- Filtered posts show which exact filter was hit - Filtered posts show which exact filter was hit
- Individual posts can be added to a filter - Individual posts can be added to a filter
@ -105,6 +106,8 @@ Some of the features in this release have been funded through the [NGI0 Discover
- Change incoming activity processing to happen in `ingress` queue ([Gargron](https://github.com/mastodon/mastodon/pull/20264)) - Change incoming activity processing to happen in `ingress` queue ([Gargron](https://github.com/mastodon/mastodon/pull/20264))
- Change notifications to not link show preview cards in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20335)) - Change notifications to not link show preview cards in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20335))
- Change amount of replies returned for logged out users in REST API ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20355)) - Change amount of replies returned for logged out users in REST API ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20355))
- Change in-app links to keep you in-app in web UI ([trwnh](https://github.com/mastodon/mastodon/pull/20540), [Gargron](https://github.com/mastodon/mastodon/pull/20628))
- Change table header to be sticky in admin UI ([sk22](https://github.com/mastodon/mastodon/pull/20442))
### Removed ### Removed
@ -117,6 +120,9 @@ Some of the features in this release have been funded through the [NGI0 Discover
### Fixed ### Fixed
- Fix rules with same priority being sorted non-deterministically ([Gargron](https://github.com/mastodon/mastodon/pull/20623))
- Fix error when invalid domain name is submitted ([Gargron](https://github.com/mastodon/mastodon/pull/19474))
- Fix icons having an image role ([Gargron](https://github.com/mastodon/mastodon/pull/20600))
- Fix connections to IPv6-only servers ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20108)) - Fix connections to IPv6-only servers ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20108))
- Fix unnecessary service worker registration and preloading when logged out in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20341)) - Fix unnecessary service worker registration and preloading when logged out in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20341))
- Fix unnecessary and slow regex construction ([raggi](https://github.com/mastodon/mastodon/pull/20215)) - Fix unnecessary and slow regex construction ([raggi](https://github.com/mastodon/mastodon/pull/20215))
@ -185,6 +191,7 @@ Some of the features in this release have been funded through the [NGI0 Discover
- Fix `CDN_HOST` not being used in some asset URLs ([tribela](https://github.com/mastodon/mastodon/pull/18662)) - Fix `CDN_HOST` not being used in some asset URLs ([tribela](https://github.com/mastodon/mastodon/pull/18662))
- Fix `CAS_DISPLAY_NAME`, `SAML_DISPLAY_NAME` and `OIDC_DISPLAY_NAME` being ignored ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/18568)) - Fix `CAS_DISPLAY_NAME`, `SAML_DISPLAY_NAME` and `OIDC_DISPLAY_NAME` being ignored ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/18568))
- Fix various typos in comments throughout the codebase ([luzpaz](https://github.com/mastodon/mastodon/pull/18604)) - Fix various typos in comments throughout the codebase ([luzpaz](https://github.com/mastodon/mastodon/pull/18604))
- Fix CSV import error when rows include unicode characters ([HamptonMakes](https://github.com/mastodon/mastodon/pull/20592))
### Security ### Security

@ -92,7 +92,7 @@ gem 'tty-prompt', '~> 0.23', require: false
gem 'twitter-text', '~> 3.1.0' gem 'twitter-text', '~> 3.1.0'
gem 'tzinfo-data', '~> 1.2022' gem 'tzinfo-data', '~> 1.2022'
gem 'webpacker', '~> 5.4' gem 'webpacker', '~> 5.4'
gem 'webpush', git: 'https://github.com/ClearlyClaire/webpush.git', ref: 'f14a4d52e201128b1b00245d11b6de80d6cfdcd9' gem 'webpush', github: 'ClearlyClaire/webpush', ref: 'f14a4d52e201128b1b00245d11b6de80d6cfdcd9'
gem 'webauthn', '~> 2.5' gem 'webauthn', '~> 2.5'
gem 'json-ld' gem 'json-ld'

@ -57,7 +57,7 @@ class Api::BaseController < ApplicationController
render json: { error: I18n.t('errors.429') }, status: 429 render json: { error: I18n.t('errors.429') }, status: 429
end end
rescue_from ActionController::ParameterMissing do |e| rescue_from ActionController::ParameterMissing, Mastodon::InvalidParameterError do |e|
render json: { error: e.to_s }, status: 400 render json: { error: e.to_s }, status: 400
end end

@ -33,7 +33,7 @@ class Api::V2::Admin::AccountsController < Api::V1::Admin::AccountsController
end end
def filter_params def filter_params
params.permit(*FILTER_PARAMS) params.permit(*FILTER_PARAMS, role_ids: [])
end end
def pagination_params(core_params) def pagination_params(core_params)

@ -1,6 +1,6 @@
# frozen_string_literal: true # frozen_string_literal: true
class Api::V1::Filters::KeywordsController < Api::BaseController class Api::V2::Filters::KeywordsController < Api::BaseController
before_action -> { doorkeeper_authorize! :read, :'read:filters' }, only: [:index, :show] before_action -> { doorkeeper_authorize! :read, :'read:filters' }, only: [:index, :show]
before_action -> { doorkeeper_authorize! :write, :'write:filters' }, except: [:index, :show] before_action -> { doorkeeper_authorize! :write, :'write:filters' }, except: [:index, :show]
before_action :require_user! before_action :require_user!

@ -1,6 +1,6 @@
# frozen_string_literal: true # frozen_string_literal: true
class Api::V1::Filters::StatusesController < Api::BaseController class Api::V2::Filters::StatusesController < Api::BaseController
before_action -> { doorkeeper_authorize! :read, :'read:filters' }, only: [:index, :show] before_action -> { doorkeeper_authorize! :read, :'read:filters' }, only: [:index, :show]
before_action -> { doorkeeper_authorize! :write, :'write:filters' }, except: [:index, :show] before_action -> { doorkeeper_authorize! :write, :'write:filters' }, except: [:index, :show]
before_action :require_user! before_action :require_user!

@ -43,7 +43,7 @@ export const fetchFilters = () => (dispatch, getState) => {
export const createFilterStatus = (params, onSuccess, onFail) => (dispatch, getState) => { export const createFilterStatus = (params, onSuccess, onFail) => (dispatch, getState) => {
dispatch(createFilterStatusRequest()); dispatch(createFilterStatusRequest());
api(getState).post(`/api/v1/filters/${params.filter_id}/statuses`, params).then(response => { api(getState).post(`/api/v2/filters/${params.filter_id}/statuses`, params).then(response => {
dispatch(createFilterStatusSuccess(response.data)); dispatch(createFilterStatusSuccess(response.data));
if (onSuccess) onSuccess(); if (onSuccess) onSuccess();
}).catch(error => { }).catch(error => {

@ -317,8 +317,6 @@ class Header extends ImmutablePureComponent {
<Avatar account={suspended || hidden ? undefined : account} size={90} /> <Avatar account={suspended || hidden ? undefined : account} size={90} />
</a> </a>
<div className='spacer' />
{!suspended && ( {!suspended && (
<div className='account__header__tabs__buttons'> <div className='account__header__tabs__buttons'>
{!hidden && ( {!hidden && (

@ -535,8 +535,11 @@
&__tabs { &__tabs {
display: flex; display: flex;
align-items: flex-start; align-items: flex-start;
justify-content: space-between;
padding: 7px 10px; padding: 7px 10px;
margin-top: -55px; margin-top: -55px;
gap: 8px;
overflow: hidden;
&__buttons { &__buttons {
display: flex; display: flex;
@ -545,6 +548,15 @@
padding-top: 55px; padding-top: 55px;
overflow: hidden; overflow: hidden;
.button {
flex-shrink: 1;
white-space: nowrap;
@media screen and (max-width: $no-gap-breakpoint) {
min-width: 0;
}
}
.icon-button { .icon-button {
border: 1px solid lighten($ui-base-color, 12%); border: 1px solid lighten($ui-base-color, 12%);
border-radius: 4px; border-radius: 4px;

@ -178,6 +178,9 @@ a.table-action-link {
} }
&__toolbar { &__toolbar {
position: sticky;
top: 0;
z-index: 1;
border: 1px solid darken($ui-base-color, 8%); border: 1px solid darken($ui-base-color, 8%);
background: $ui-base-color; background: $ui-base-color;
border-radius: 4px 0 0; border-radius: 4px 0 0;

@ -43,7 +43,7 @@ export const fetchFilters = () => (dispatch, getState) => {
export const createFilterStatus = (params, onSuccess, onFail) => (dispatch, getState) => { export const createFilterStatus = (params, onSuccess, onFail) => (dispatch, getState) => {
dispatch(createFilterStatusRequest()); dispatch(createFilterStatusRequest());
api(getState).post(`/api/v1/filters/${params.filter_id}/statuses`, params).then(response => { api(getState).post(`/api/v2/filters/${params.filter_id}/statuses`, params).then(response => {
dispatch(createFilterStatusSuccess(response.data)); dispatch(createFilterStatusSuccess(response.data));
if (onSuccess) onSuccess(); if (onSuccess) onSuccess();
}).catch(error => { }).catch(error => {

@ -3,13 +3,13 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import Avatar from './avatar'; import Avatar from './avatar';
import DisplayName from './display_name'; import DisplayName from './display_name';
import Permalink from './permalink';
import IconButton from './icon_button'; import IconButton from './icon_button';
import { defineMessages, injectIntl } from 'react-intl'; import { defineMessages, injectIntl } from 'react-intl';
import ImmutablePureComponent from 'react-immutable-pure-component'; import ImmutablePureComponent from 'react-immutable-pure-component';
import { me } from '../initial_state'; import { me } from '../initial_state';
import RelativeTimestamp from './relative_timestamp'; import RelativeTimestamp from './relative_timestamp';
import Skeleton from 'mastodon/components/skeleton'; import Skeleton from 'mastodon/components/skeleton';
import { Link } from 'react-router-dom';
const messages = defineMessages({ const messages = defineMessages({
follow: { id: 'account.follow', defaultMessage: 'Follow' }, follow: { id: 'account.follow', defaultMessage: 'Follow' },
@ -140,11 +140,11 @@ class Account extends ImmutablePureComponent {
return ( return (
<div className='account'> <div className='account'>
<div className='account__wrapper'> <div className='account__wrapper'>
<Permalink key={account.get('id')} className='account__display-name' title={account.get('acct')} href={account.get('url')} to={`/@${account.get('acct')}`}> <Link key={account.get('id')} className='account__display-name' title={account.get('acct')} to={`/@${account.get('acct')}`}>
<div className='account__avatar-wrapper'><Avatar account={account} size={size} /></div> <div className='account__avatar-wrapper'><Avatar account={account} size={size} /></div>
{mute_expires_at} {mute_expires_at}
<DisplayName account={account} /> <DisplayName account={account} />
</Permalink> </Link>
<div className='account__relationship'> <div className='account__relationship'>
{buttons} {buttons}

@ -50,7 +50,7 @@ export default class Trends extends React.PureComponent {
<Hashtag <Hashtag
key={hashtag.name} key={hashtag.name}
name={hashtag.name} name={hashtag.name}
href={`/admin/tags/${hashtag.id}`} to={`/admin/tags/${hashtag.id}`}
people={hashtag.history[0].accounts * 1 + hashtag.history[1].accounts * 1} people={hashtag.history[0].accounts * 1 + hashtag.history[1].accounts * 1}
uses={hashtag.history[0].uses * 1 + hashtag.history[1].uses * 1} uses={hashtag.history[0].uses * 1 + hashtag.history[1].uses * 1}
history={hashtag.history.reverse().map(day => day.uses)} history={hashtag.history.reverse().map(day => day.uses)}

@ -4,7 +4,7 @@ import { Sparklines, SparklinesCurve } from 'react-sparklines';
import { FormattedMessage } from 'react-intl'; import { FormattedMessage } from 'react-intl';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePropTypes from 'react-immutable-proptypes';
import Permalink from './permalink'; import { Link } from 'react-router-dom';
import ShortNumber from 'mastodon/components/short_number'; import ShortNumber from 'mastodon/components/short_number';
import Skeleton from 'mastodon/components/skeleton'; import Skeleton from 'mastodon/components/skeleton';
import classNames from 'classnames'; import classNames from 'classnames';
@ -53,7 +53,6 @@ export const accountsCountRenderer = (displayNumber, pluralReady) => (
export const ImmutableHashtag = ({ hashtag }) => ( export const ImmutableHashtag = ({ hashtag }) => (
<Hashtag <Hashtag
name={hashtag.get('name')} name={hashtag.get('name')}
href={hashtag.get('url')}
to={`/tags/${hashtag.get('name')}`} to={`/tags/${hashtag.get('name')}`}
people={hashtag.getIn(['history', 0, 'accounts']) * 1 + hashtag.getIn(['history', 1, 'accounts']) * 1} people={hashtag.getIn(['history', 0, 'accounts']) * 1 + hashtag.getIn(['history', 1, 'accounts']) * 1}
history={hashtag.get('history').reverse().map((day) => day.get('uses')).toArray()} history={hashtag.get('history').reverse().map((day) => day.get('uses')).toArray()}
@ -64,12 +63,12 @@ ImmutableHashtag.propTypes = {
hashtag: ImmutablePropTypes.map.isRequired, hashtag: ImmutablePropTypes.map.isRequired,
}; };
const Hashtag = ({ name, href, to, people, uses, history, className, description, withGraph }) => ( const Hashtag = ({ name, to, people, uses, history, className, description, withGraph }) => (
<div className={classNames('trends__item', className)}> <div className={classNames('trends__item', className)}>
<div className='trends__item__name'> <div className='trends__item__name'>
<Permalink href={href} to={to}> <Link to={to}>
{name ? <React.Fragment>#<span>{name}</span></React.Fragment> : <Skeleton width={50} />} {name ? <React.Fragment>#<span>{name}</span></React.Fragment> : <Skeleton width={50} />}
</Permalink> </Link>
{description ? ( {description ? (
<span>{description}</span> <span>{description}</span>
@ -98,7 +97,6 @@ const Hashtag = ({ name, href, to, people, uses, history, className, description
Hashtag.propTypes = { Hashtag.propTypes = {
name: PropTypes.string, name: PropTypes.string,
href: PropTypes.string,
to: PropTypes.string, to: PropTypes.string,
people: PropTypes.number, people: PropTypes.number,
description: PropTypes.node, description: PropTypes.node,

@ -14,7 +14,7 @@ export default class Icon extends React.PureComponent {
const { id, className, fixedWidth, ...other } = this.props; const { id, className, fixedWidth, ...other } = this.props;
return ( return (
<i role='img' className={classNames('fa', `fa-${id}`, className, { 'fa-fw': fixedWidth })} {...other} /> <i className={classNames('fa', `fa-${id}`, className, { 'fa-fw': fixedWidth })} {...other} />
); );
} }

@ -1,40 +0,0 @@
import React from 'react';
import PropTypes from 'prop-types';
export default class Permalink extends React.PureComponent {
static contextTypes = {
router: PropTypes.object,
};
static propTypes = {
className: PropTypes.string,
href: PropTypes.string.isRequired,
to: PropTypes.string.isRequired,
children: PropTypes.node,
onInterceptClick: PropTypes.func,
};
handleClick = e => {
if (this.props.onInterceptClick && this.props.onInterceptClick()) {
e.preventDefault();
return;
}
if (this.context.router && e.button === 0 && !(e.ctrlKey || e.metaKey)) {
e.preventDefault();
this.context.router.history.push(this.props.to);
}
}
render () {
const { href, children, className, onInterceptClick, ...other } = this.props;
return (
<a target='_blank' href={href} onClick={this.handleClick} {...other} className={`permalink${className ? ' ' + className : ''}`}>
{children}
</a>
);
}
}

@ -378,7 +378,7 @@ class Status extends ImmutablePureComponent {
prepend = ( prepend = (
<div className='status__prepend'> <div className='status__prepend'>
<div className='status__prepend-icon-wrapper'><Icon id='retweet' className='status__prepend-icon' fixedWidth /></div> <div className='status__prepend-icon-wrapper'><Icon id='retweet' className='status__prepend-icon' fixedWidth /></div>
<FormattedMessage id='status.reblogged_by' defaultMessage='{name} boosted' values={{ name: <a onClick={this.handlePrependAccountClick} data-id={status.getIn(['account', 'id'])} href={status.getIn(['account', 'url'])} className='status__display-name muted'><bdi><strong dangerouslySetInnerHTML={display_name_html} /></bdi></a> }} /> <FormattedMessage id='status.reblogged_by' defaultMessage='{name} boosted' values={{ name: <a onClick={this.handlePrependAccountClick} data-id={status.getIn(['account', 'id'])} href={`/@${status.getIn(['account', 'acct'])}`} className='status__display-name muted'><bdi><strong dangerouslySetInnerHTML={display_name_html} /></bdi></a> }} />
</div> </div>
); );
@ -392,7 +392,7 @@ class Status extends ImmutablePureComponent {
prepend = ( prepend = (
<div className='status__prepend'> <div className='status__prepend'>
<div className='status__prepend-icon-wrapper'><Icon id='reply' className='status__prepend-icon' fixedWidth /></div> <div className='status__prepend-icon-wrapper'><Icon id='reply' className='status__prepend-icon' fixedWidth /></div>
<FormattedMessage id='status.replied_to' defaultMessage='Replied to {name}' values={{ name: <a onClick={this.handlePrependAccountClick} data-id={status.getIn(['account', 'id'])} href={status.getIn(['account', 'url'])} className='status__display-name muted'><bdi><strong dangerouslySetInnerHTML={display_name_html} /></bdi></a> }} /> <FormattedMessage id='status.replied_to' defaultMessage='Replied to {name}' values={{ name: <a onClick={this.handlePrependAccountClick} data-id={status.getIn(['account', 'id'])} href={`/@${status.getIn(['account', 'acct'])}`} className='status__display-name muted'><bdi><strong dangerouslySetInnerHTML={display_name_html} /></bdi></a> }} />
</div> </div>
); );
} }
@ -511,12 +511,12 @@ class Status extends ImmutablePureComponent {
<div className={classNames('status', `status-${status.get('visibility')}`, { 'status-reply': !!status.get('in_reply_to_id'), muted: this.props.muted })} data-id={status.get('id')}> <div className={classNames('status', `status-${status.get('visibility')}`, { 'status-reply': !!status.get('in_reply_to_id'), muted: this.props.muted })} data-id={status.get('id')}>
<div className='status__info'> <div className='status__info'>
<a onClick={this.handleClick} href={status.get('url')} className='status__relative-time' target='_blank' rel='noopener noreferrer'> <a onClick={this.handleClick} href={`/@${status.getIn(['account', 'acct'])}\/${status.get('id')}`} className='status__relative-time' target='_blank' rel='noopener noreferrer'>
<span className='status__visibility-icon'><Icon id={visibilityIcon.icon} title={visibilityIcon.text} /></span> <span className='status__visibility-icon'><Icon id={visibilityIcon.icon} title={visibilityIcon.text} /></span>
<RelativeTimestamp timestamp={status.get('created_at')} />{status.get('edited_at') && <abbr title={intl.formatMessage(messages.edited, { date: intl.formatDate(status.get('edited_at'), { hour12: false, year: 'numeric', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }) })}> *</abbr>} <RelativeTimestamp timestamp={status.get('created_at')} />{status.get('edited_at') && <abbr title={intl.formatMessage(messages.edited, { date: intl.formatDate(status.get('edited_at'), { hour12: false, year: 'numeric', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }) })}> *</abbr>}
</a> </a>
<a onClick={this.handleAccountClick} href={status.getIn(['account', 'url'])} title={status.getIn(['account', 'acct'])} className='status__display-name' target='_blank' rel='noopener noreferrer'> <a onClick={this.handleAccountClick} href={`/@${status.getIn(['account', 'acct'])}`} title={status.getIn(['account', 'acct'])} className='status__display-name' target='_blank' rel='noopener noreferrer'>
<div className='status__avatar'> <div className='status__avatar'>
{statusAvatar} {statusAvatar}
</div> </div>

@ -2,13 +2,13 @@ import React from 'react';
import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePropTypes from 'react-immutable-proptypes';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { FormattedMessage, injectIntl } from 'react-intl'; import { FormattedMessage, injectIntl } from 'react-intl';
import Permalink from './permalink'; import { Link } from 'react-router-dom';
import classnames from 'classnames'; import classnames from 'classnames';
import PollContainer from 'mastodon/containers/poll_container'; import PollContainer from 'mastodon/containers/poll_container';
import Icon from 'mastodon/components/icon'; import Icon from 'mastodon/components/icon';
import { autoPlayGif, languages as preloadedLanguages, translationEnabled } from 'mastodon/initial_state'; import { autoPlayGif, languages as preloadedLanguages, translationEnabled } from 'mastodon/initial_state';
const MAX_HEIGHT = 642; // 20px * 32 (+ 2px padding at the top) const MAX_HEIGHT = 706; // 22px * 32 (+ 2px padding at the top)
class TranslateButton extends React.PureComponent { class TranslateButton extends React.PureComponent {
@ -77,38 +77,45 @@ class StatusContent extends React.PureComponent {
return; return;
} }
const { status, onCollapsedToggle } = this.props;
const links = node.querySelectorAll('a'); const links = node.querySelectorAll('a');
let link, mention;
for (var i = 0; i < links.length; ++i) { for (var i = 0; i < links.length; ++i) {
let link = links[i]; link = links[i];
if (link.classList.contains('status-link')) { if (link.classList.contains('status-link')) {
continue; continue;
} }
link.classList.add('status-link'); link.classList.add('status-link');
let mention = this.props.status.get('mentions').find(item => link.href === item.get('url')); mention = this.props.status.get('mentions').find(item => link.href === item.get('url'));
if (mention) { if (mention) {
link.addEventListener('click', this.onMentionClick.bind(this, mention), false); link.addEventListener('click', this.onMentionClick.bind(this, mention), false);
link.setAttribute('title', mention.get('acct')); link.setAttribute('title', mention.get('acct'));
link.setAttribute('href', `/@${mention.get('acct')}`);
} else if (link.textContent[0] === '#' || (link.previousSibling && link.previousSibling.textContent && link.previousSibling.textContent[link.previousSibling.textContent.length - 1] === '#')) { } else if (link.textContent[0] === '#' || (link.previousSibling && link.previousSibling.textContent && link.previousSibling.textContent[link.previousSibling.textContent.length - 1] === '#')) {
link.addEventListener('click', this.onHashtagClick.bind(this, link.text), false); link.addEventListener('click', this.onHashtagClick.bind(this, link.text), false);
link.setAttribute('href', `/tags/${link.text.slice(1)}`);
} else { } else {
link.setAttribute('title', link.href); link.setAttribute('title', link.href);
link.classList.add('unhandled-link'); link.classList.add('unhandled-link');
} }
} }
if (this.props.status.get('collapsed', null) === null) { if (status.get('collapsed', null) === null && onCollapsedToggle) {
let collapsed = const { collapsable, onClick } = this.props;
this.props.collapsable
&& this.props.onClick
&& node.clientHeight > MAX_HEIGHT
&& this.props.status.get('spoiler_text').length === 0;
if(this.props.onCollapsedToggle) this.props.onCollapsedToggle(collapsed); const collapsed =
collapsable
&& onClick
&& node.clientHeight > MAX_HEIGHT
&& status.get('spoiler_text').length === 0;
this.props.status.set('collapsed', collapsed); onCollapsedToggle(collapsed);
} }
} }
@ -242,9 +249,9 @@ class StatusContent extends React.PureComponent {
let mentionsPlaceholder = ''; let mentionsPlaceholder = '';
const mentionLinks = status.get('mentions').map(item => ( const mentionLinks = status.get('mentions').map(item => (
<Permalink to={`/@${item.get('acct')}`} href={item.get('url')} key={item.get('id')} className='mention'> <Link to={`/@${item.get('acct')}`} key={item.get('id')} className='mention'>
@<span>{item.get('username')}</span> @<span>{item.get('username')}</span>
</Permalink> </Link>
)).reduce((aggregate, item) => [...aggregate, item, ' '], []); )).reduce((aggregate, item) => [...aggregate, item, ' '], []);
const toggleText = hidden ? <FormattedMessage id='status.show_more' defaultMessage='Show more' /> : <FormattedMessage id='status.show_less' defaultMessage='Show less' />; const toggleText = hidden ? <FormattedMessage id='status.show_more' defaultMessage='Show more' /> : <FormattedMessage id='status.show_less' defaultMessage='Show less' />;

@ -39,7 +39,6 @@ class FeaturedTags extends ImmutablePureComponent {
<Hashtag <Hashtag
key={featuredTag.get('name')} key={featuredTag.get('name')}
name={featuredTag.get('name')} name={featuredTag.get('name')}
href={featuredTag.get('url')}
to={`/@${account.get('acct')}/tagged/${featuredTag.get('name')}`} to={`/@${account.get('acct')}/tagged/${featuredTag.get('name')}`}
uses={featuredTag.get('statuses_count') * 1} uses={featuredTag.get('statuses_count') * 1}
withGraph={false} withGraph={false}

@ -314,8 +314,6 @@ class Header extends ImmutablePureComponent {
<Avatar account={suspended || hidden ? undefined : account} size={90} /> <Avatar account={suspended || hidden ? undefined : account} size={90} />
</a> </a>
<div className='spacer' />
{!suspended && ( {!suspended && (
<div className='account__header__tabs__buttons'> <div className='account__header__tabs__buttons'>
{!hidden && ( {!hidden && (

@ -129,7 +129,7 @@ export default class MediaItem extends ImmutablePureComponent {
return ( return (
<div className='account-gallery__item' style={{ width, height }}> <div className='account-gallery__item' style={{ width, height }}>
<a className='media-gallery__item-thumbnail' href={status.get('url')} onClick={this.handleClick} title={title} target='_blank' rel='noopener noreferrer'> <a className='media-gallery__item-thumbnail' href={`/@${status.getIn(['account', 'acct'])}\/${status.get('id')}`} onClick={this.handleClick} title={title} target='_blank' rel='noopener noreferrer'>
<Blurhash <Blurhash
hash={attachment.get('blurhash')} hash={attachment.get('blurhash')}
className={classNames('media-gallery__preview', { 'media-gallery__preview--hidden': visible && loaded })} className={classNames('media-gallery__preview', { 'media-gallery__preview--hidden': visible && loaded })}

@ -4,7 +4,7 @@ import { FormattedMessage } from 'react-intl';
import ImmutablePureComponent from 'react-immutable-pure-component'; import ImmutablePureComponent from 'react-immutable-pure-component';
import AvatarOverlay from '../../../components/avatar_overlay'; import AvatarOverlay from '../../../components/avatar_overlay';
import DisplayName from '../../../components/display_name'; import DisplayName from '../../../components/display_name';
import Permalink from 'mastodon/components/permalink'; import { Link } from 'react-router-dom';
export default class MovedNote extends ImmutablePureComponent { export default class MovedNote extends ImmutablePureComponent {
@ -23,12 +23,12 @@ export default class MovedNote extends ImmutablePureComponent {
</div> </div>
<div className='moved-account-banner__action'> <div className='moved-account-banner__action'>
<Permalink href={to.get('url')} to={`/@${to.get('acct')}`} className='detailed-status__display-name'> <Link to={`/@${to.get('acct')}`} className='detailed-status__display-name'>
<div className='detailed-status__display-avatar'><AvatarOverlay account={to} friend={from} /></div> <div className='detailed-status__display-avatar'><AvatarOverlay account={to} friend={from} /></div>
<DisplayName account={to} /> <DisplayName account={to} />
</Permalink> </Link>
<Permalink href={to.get('url')} to={`/@${to.get('acct')}`} className='button'><FormattedMessage id='account.go_to_profile' defaultMessage='Go to profile' /></Permalink> <Link to={`/@${to.get('acct')}`} className='button'><FormattedMessage id='account.go_to_profile' defaultMessage='Go to profile' /></Link>
</div> </div>
</div> </div>
); );

@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePropTypes from 'react-immutable-proptypes';
import ActionBar from './action_bar'; import ActionBar from './action_bar';
import Avatar from '../../../components/avatar'; import Avatar from '../../../components/avatar';
import Permalink from '../../../components/permalink'; import { Link } from 'react-router-dom';
import IconButton from '../../../components/icon_button'; import IconButton from '../../../components/icon_button';
import { FormattedMessage } from 'react-intl'; import { FormattedMessage } from 'react-intl';
import ImmutablePureComponent from 'react-immutable-pure-component'; import ImmutablePureComponent from 'react-immutable-pure-component';
@ -19,15 +19,15 @@ export default class NavigationBar extends ImmutablePureComponent {
render () { render () {
return ( return (
<div className='navigation-bar'> <div className='navigation-bar'>
<Permalink href={this.props.account.get('url')} to={`/@${this.props.account.get('acct')}`}> <Link to={`/@${this.props.account.get('acct')}`}>
<span style={{ display: 'none' }}>{this.props.account.get('acct')}</span> <span style={{ display: 'none' }}>{this.props.account.get('acct')}</span>
<Avatar account={this.props.account} size={46} /> <Avatar account={this.props.account} size={46} />
</Permalink> </Link>
<div className='navigation-bar__profile'> <div className='navigation-bar__profile'>
<Permalink href={this.props.account.get('url')} to={`/@${this.props.account.get('acct')}`}> <Link to={`/@${this.props.account.get('acct')}`}>
<strong className='navigation-bar__profile-account'>@{this.props.account.get('acct')}</strong> <strong className='navigation-bar__profile-account'>@{this.props.account.get('acct')}</strong>
</Permalink> </Link>
<a href='/settings/profile' className='navigation-bar__profile-edit'><FormattedMessage id='navigation_bar.edit_profile' defaultMessage='Edit profile' /></a> <a href='/settings/profile' className='navigation-bar__profile-edit'><FormattedMessage id='navigation_bar.edit_profile' defaultMessage='Edit profile' /></a>
</div> </div>

@ -50,7 +50,7 @@ class ReplyIndicator extends ImmutablePureComponent {
<div className='reply-indicator__header'> <div className='reply-indicator__header'>
<div className='reply-indicator__cancel'><IconButton title={intl.formatMessage(messages.cancel)} icon='times' onClick={this.handleClick} inverted /></div> <div className='reply-indicator__cancel'><IconButton title={intl.formatMessage(messages.cancel)} icon='times' onClick={this.handleClick} inverted /></div>
<a href={status.getIn(['account', 'url'])} onClick={this.handleAccountClick} className='reply-indicator__display-name'> <a href={`/@${status.getIn(['account', 'acct'])}`} onClick={this.handleAccountClick} className='reply-indicator__display-name'>
<div className='reply-indicator__display-avatar'><Avatar account={status.get('account')} size={24} /></div> <div className='reply-indicator__display-avatar'><Avatar account={status.get('account')} size={24} /></div>
<DisplayName account={status.get('account')} /> <DisplayName account={status.get('account')} />
</a> </a>

@ -7,7 +7,7 @@ import AttachmentList from 'mastodon/components/attachment_list';
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
import DropdownMenuContainer from 'mastodon/containers/dropdown_menu_container'; import DropdownMenuContainer from 'mastodon/containers/dropdown_menu_container';
import AvatarComposite from 'mastodon/components/avatar_composite'; import AvatarComposite from 'mastodon/components/avatar_composite';
import Permalink from 'mastodon/components/permalink'; import { Link } from 'react-router-dom';
import IconButton from 'mastodon/components/icon_button'; import IconButton from 'mastodon/components/icon_button';
import RelativeTimestamp from 'mastodon/components/relative_timestamp'; import RelativeTimestamp from 'mastodon/components/relative_timestamp';
import { HotKeys } from 'react-hotkeys'; import { HotKeys } from 'react-hotkeys';
@ -133,7 +133,7 @@ class Conversation extends ImmutablePureComponent {
menu.push({ text: intl.formatMessage(messages.delete), action: this.handleDelete }); menu.push({ text: intl.formatMessage(messages.delete), action: this.handleDelete });
const names = accounts.map(a => <Permalink to={`/@${a.get('acct')}`} href={a.get('url')} key={a.get('id')} title={a.get('acct')}><bdi><strong className='display-name__html' dangerouslySetInnerHTML={{ __html: a.get('display_name_html') }} /></bdi></Permalink>).reduce((prev, cur) => [prev, ', ', cur]); const names = accounts.map(a => <Link to={`/@${a.get('acct')}`} key={a.get('id')} title={a.get('acct')}><bdi><strong className='display-name__html' dangerouslySetInnerHTML={{ __html: a.get('display_name_html') }} /></bdi></Link>).reduce((prev, cur) => [prev, ', ', cur]);
const handlers = { const handlers = {
reply: this.handleReply, reply: this.handleReply,

@ -6,7 +6,7 @@ import { connect } from 'react-redux';
import { makeGetAccount } from 'mastodon/selectors'; import { makeGetAccount } from 'mastodon/selectors';
import Avatar from 'mastodon/components/avatar'; import Avatar from 'mastodon/components/avatar';
import DisplayName from 'mastodon/components/display_name'; import DisplayName from 'mastodon/components/display_name';
import Permalink from 'mastodon/components/permalink'; import { Link } from 'react-router-dom';
import Button from 'mastodon/components/button'; import Button from 'mastodon/components/button';
import { FormattedMessage, injectIntl, defineMessages } from 'react-intl'; import { FormattedMessage, injectIntl, defineMessages } from 'react-intl';
import { autoPlayGif, me, unfollowModal } from 'mastodon/initial_state'; import { autoPlayGif, me, unfollowModal } from 'mastodon/initial_state';
@ -169,7 +169,7 @@ class AccountCard extends ImmutablePureComponent {
return ( return (
<div className='account-card'> <div className='account-card'>
<Permalink href={account.get('url')} to={`/@${account.get('acct')}`} className='account-card__permalink'> <Link to={`/@${account.get('acct')}`} className='account-card__permalink'>
<div className='account-card__header'> <div className='account-card__header'>
<img <img
src={ src={
@ -183,7 +183,7 @@ class AccountCard extends ImmutablePureComponent {
<div className='account-card__title__avatar'><Avatar account={account} size={56} /></div> <div className='account-card__title__avatar'><Avatar account={account} size={56} /></div>
<DisplayName account={account} /> <DisplayName account={account} />
</div> </div>
</Permalink> </Link>
{account.get('note').length > 0 && ( {account.get('note').length > 0 && (
<div <div

@ -6,7 +6,7 @@ import { connect } from 'react-redux';
import { makeGetAccount } from 'mastodon/selectors'; import { makeGetAccount } from 'mastodon/selectors';
import Avatar from 'mastodon/components/avatar'; import Avatar from 'mastodon/components/avatar';
import DisplayName from 'mastodon/components/display_name'; import DisplayName from 'mastodon/components/display_name';
import Permalink from 'mastodon/components/permalink'; import { Link } from 'react-router-dom';
import IconButton from 'mastodon/components/icon_button'; import IconButton from 'mastodon/components/icon_button';
import { injectIntl, defineMessages } from 'react-intl'; import { injectIntl, defineMessages } from 'react-intl';
import { followAccount, unfollowAccount } from 'mastodon/actions/accounts'; import { followAccount, unfollowAccount } from 'mastodon/actions/accounts';
@ -66,13 +66,13 @@ class Account extends ImmutablePureComponent {
return ( return (
<div className='account follow-recommendations-account'> <div className='account follow-recommendations-account'>
<div className='account__wrapper'> <div className='account__wrapper'>
<Permalink className='account__display-name account__display-name--with-note' title={account.get('acct')} href={account.get('url')} to={`/@${account.get('acct')}`}> <Link className='account__display-name account__display-name--with-note' title={account.get('acct')} to={`/@${account.get('acct')}`}>
<div className='account__avatar-wrapper'><Avatar account={account} size={36} /></div> <div className='account__avatar-wrapper'><Avatar account={account} size={36} /></div>
<DisplayName account={account} /> <DisplayName account={account} />
<div className='account__note'>{getFirstSentence(account.get('note_plain'))}</div> <div className='account__note'>{getFirstSentence(account.get('note_plain'))}</div>
</Permalink> </Link>
<div className='account__relationship'> <div className='account__relationship'>
{button} {button}

@ -1,7 +1,7 @@
import React from 'react'; import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePropTypes from 'react-immutable-proptypes';
import Permalink from '../../../components/permalink'; import { Link } from 'react-router-dom';
import Avatar from '../../../components/avatar'; import Avatar from '../../../components/avatar';
import DisplayName from '../../../components/display_name'; import DisplayName from '../../../components/display_name';
import IconButton from '../../../components/icon_button'; import IconButton from '../../../components/icon_button';
@ -30,10 +30,10 @@ class AccountAuthorize extends ImmutablePureComponent {
return ( return (
<div className='account-authorize__wrapper'> <div className='account-authorize__wrapper'>
<div className='account-authorize'> <div className='account-authorize'>
<Permalink href={account.get('url')} to={`/@${account.get('acct')}`} className='detailed-status__display-name'> <Link to={`/@${account.get('acct')}`} className='detailed-status__display-name'>
<div className='account-authorize__avatar'><Avatar account={account} size={48} /></div> <div className='account-authorize__avatar'><Avatar account={account} size={48} /></div>
<DisplayName account={account} /> <DisplayName account={account} />
</Permalink> </Link>
<div className='account__header__content translate' dangerouslySetInnerHTML={content} /> <div className='account__header__content translate' dangerouslySetInnerHTML={content} />
</div> </div>

@ -3,7 +3,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import Avatar from 'mastodon/components/avatar'; import Avatar from 'mastodon/components/avatar';
import DisplayName from 'mastodon/components/display_name'; import DisplayName from 'mastodon/components/display_name';
import Permalink from 'mastodon/components/permalink'; import { Link } from 'react-router-dom';
import IconButton from 'mastodon/components/icon_button'; import IconButton from 'mastodon/components/icon_button';
import { defineMessages, injectIntl } from 'react-intl'; import { defineMessages, injectIntl } from 'react-intl';
import ImmutablePureComponent from 'react-immutable-pure-component'; import ImmutablePureComponent from 'react-immutable-pure-component';
@ -42,10 +42,10 @@ class FollowRequest extends ImmutablePureComponent {
return ( return (
<div className='account'> <div className='account'>
<div className='account__wrapper'> <div className='account__wrapper'>
<Permalink key={account.get('id')} className='account__display-name' title={account.get('acct')} href={account.get('url')} to={`/@${account.get('acct')}`}> <Link key={account.get('id')} className='account__display-name' title={account.get('acct')} to={`/@${account.get('acct')}`}>
<div className='account__avatar-wrapper'><Avatar account={account} size={36} /></div> <div className='account__avatar-wrapper'><Avatar account={account} size={36} /></div>
<DisplayName account={account} /> <DisplayName account={account} />
</Permalink> </Link>
<div className='account__relationship'> <div className='account__relationship'>
<IconButton title={intl.formatMessage(messages.authorize)} icon='check' onClick={onAuthorize} /> <IconButton title={intl.formatMessage(messages.authorize)} icon='check' onClick={onAuthorize} />

@ -10,7 +10,7 @@ import AccountContainer from 'mastodon/containers/account_container';
import Report from './report'; import Report from './report';
import FollowRequestContainer from '../containers/follow_request_container'; import FollowRequestContainer from '../containers/follow_request_container';
import Icon from 'mastodon/components/icon'; import Icon from 'mastodon/components/icon';
import Permalink from 'mastodon/components/permalink'; import { Link } from 'react-router-dom';
import classNames from 'classnames'; import classNames from 'classnames';
const messages = defineMessages({ const messages = defineMessages({
@ -378,7 +378,7 @@ class Notification extends ImmutablePureComponent {
const targetAccount = report.get('target_account'); const targetAccount = report.get('target_account');
const targetDisplayNameHtml = { __html: targetAccount.get('display_name_html') }; const targetDisplayNameHtml = { __html: targetAccount.get('display_name_html') };
const targetLink = <bdi><Permalink className='notification__display-name' href={targetAccount.get('url')} title={targetAccount.get('acct')} to={`/@${targetAccount.get('acct')}`} dangerouslySetInnerHTML={targetDisplayNameHtml} /></bdi>; const targetLink = <bdi><Link className='notification__display-name' title={targetAccount.get('acct')} to={`/@${targetAccount.get('acct')}`} dangerouslySetInnerHTML={targetDisplayNameHtml} /></bdi>;
return ( return (
<HotKeys handlers={this.getHandlers()}> <HotKeys handlers={this.getHandlers()}>
@ -403,7 +403,7 @@ class Notification extends ImmutablePureComponent {
const { notification } = this.props; const { notification } = this.props;
const account = notification.get('account'); const account = notification.get('account');
const displayNameHtml = { __html: account.get('display_name_html') }; const displayNameHtml = { __html: account.get('display_name_html') };
const link = <bdi><Permalink className='notification__display-name' href={account.get('url')} title={account.get('acct')} to={`/@${account.get('acct')}`} dangerouslySetInnerHTML={displayNameHtml} /></bdi>; const link = <bdi><Link className='notification__display-name' href={`/@${account.get('acct')}`} title={account.get('acct')} to={`/@${account.get('acct')}`} dangerouslySetInnerHTML={displayNameHtml} /></bdi>;
switch(notification.get('type')) { switch(notification.get('type')) {
case 'follow': case 'follow':

@ -184,7 +184,7 @@ class Footer extends ImmutablePureComponent {
<IconButton className='status__action-bar-button' title={replyTitle} icon={status.get('in_reply_to_account_id') === status.getIn(['account', 'id']) ? 'reply' : replyIcon} onClick={this.handleReplyClick} counter={status.get('replies_count')} obfuscateCount /> <IconButton className='status__action-bar-button' title={replyTitle} icon={status.get('in_reply_to_account_id') === status.getIn(['account', 'id']) ? 'reply' : replyIcon} onClick={this.handleReplyClick} counter={status.get('replies_count')} obfuscateCount />
<IconButton className={classNames('status__action-bar-button', { reblogPrivate })} disabled={!publicStatus && !reblogPrivate} active={status.get('reblogged')} title={reblogTitle} icon='retweet' onClick={this.handleReblogClick} counter={status.get('reblogs_count')} /> <IconButton className={classNames('status__action-bar-button', { reblogPrivate })} disabled={!publicStatus && !reblogPrivate} active={status.get('reblogged')} title={reblogTitle} icon='retweet' onClick={this.handleReblogClick} counter={status.get('reblogs_count')} />
<IconButton className='status__action-bar-button star-icon' animate active={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='star' onClick={this.handleFavouriteClick} counter={status.get('favourites_count')} /> <IconButton className='status__action-bar-button star-icon' animate active={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='star' onClick={this.handleFavouriteClick} counter={status.get('favourites_count')} />
{withOpenButton && <IconButton className='status__action-bar-button' title={intl.formatMessage(messages.open)} icon='external-link' onClick={this.handleOpenClick} href={status.get('url')} />} {withOpenButton && <IconButton className='status__action-bar-button' title={intl.formatMessage(messages.open)} icon='external-link' onClick={this.handleOpenClick} href={`/@${status.getIn(['account', 'acct'])}\/${status.get('id')}`} />}
</div> </div>
); );
} }

@ -261,7 +261,7 @@ class DetailedStatus extends ImmutablePureComponent {
return ( return (
<div style={outerStyle}> <div style={outerStyle}>
<div ref={this.setRef} className={classNames('detailed-status', `detailed-status-${status.get('visibility')}`, { compact })}> <div ref={this.setRef} className={classNames('detailed-status', `detailed-status-${status.get('visibility')}`, { compact })}>
<a href={status.getIn(['account', 'url'])} onClick={this.handleAccountClick} className='detailed-status__display-name'> <a href={`/@${status.getIn(['account', 'acct'])}`} onClick={this.handleAccountClick} className='detailed-status__display-name'>
<div className='detailed-status__display-avatar'><Avatar account={status.get('account')} size={46} /></div> <div className='detailed-status__display-avatar'><Avatar account={status.get('account')} size={46} /></div>
<DisplayName account={status.get('account')} localDomain={this.props.domain} /> <DisplayName account={status.get('account')} localDomain={this.props.domain} />
</a> </a>
@ -276,7 +276,7 @@ class DetailedStatus extends ImmutablePureComponent {
{media} {media}
<div className='detailed-status__meta'> <div className='detailed-status__meta'>
<a className='detailed-status__datetime' href={status.get('url')} target='_blank' rel='noopener noreferrer'> <a className='detailed-status__datetime' href={`/@${status.getIn(['account', 'acct'])}\/${status.get('id')}`} target='_blank' rel='noopener noreferrer'>
<FormattedDate value={new Date(status.get('created_at'))} hour12={false} year='numeric' month='short' day='2-digit' hour='2-digit' minute='2-digit' /> <FormattedDate value={new Date(status.get('created_at'))} hour12={false} year='numeric' month='short' day='2-digit' hour='2-digit' minute='2-digit' />
</a>{edited}{visibilityLink}{applicationLink}{reblogLink} · {favouriteLink} </a>{edited}{visibilityLink}{applicationLink}{reblogLink} · {favouriteLink}
</div> </div>

@ -98,12 +98,12 @@ class BoostModal extends ImmutablePureComponent {
<div className='boost-modal__container'> <div className='boost-modal__container'>
<div className={classNames('status', `status-${status.get('visibility')}`, 'light')}> <div className={classNames('status', `status-${status.get('visibility')}`, 'light')}>
<div className='status__info'> <div className='status__info'>
<a href={status.get('url')} className='status__relative-time' target='_blank' rel='noopener noreferrer'> <a href={`/@${status.getIn(['account', 'acct'])}\/${status.get('id')}`} className='status__relative-time' target='_blank' rel='noopener noreferrer'>
<span className='status__visibility-icon'><Icon id={visibilityIcon.icon} title={visibilityIcon.text} /></span> <span className='status__visibility-icon'><Icon id={visibilityIcon.icon} title={visibilityIcon.text} /></span>
<RelativeTimestamp timestamp={status.get('created_at')} /> <RelativeTimestamp timestamp={status.get('created_at')} />
</a> </a>
<a onClick={this.handleAccountClick} href={status.getIn(['account', 'url'])} className='status__display-name'> <a onClick={this.handleAccountClick} href={`/@${status.getIn(['account', 'acct'])}`} className='status__display-name'>
<div className='status__avatar'> <div className='status__avatar'>
<Avatar account={status.get('account')} size={48} /> <Avatar account={status.get('account')} size={48} />
</div> </div>

@ -4,16 +4,15 @@ import { Link, withRouter } from 'react-router-dom';
import { FormattedMessage } from 'react-intl'; import { FormattedMessage } from 'react-intl';
import { registrationsOpen, me } from 'mastodon/initial_state'; import { registrationsOpen, me } from 'mastodon/initial_state';
import Avatar from 'mastodon/components/avatar'; import Avatar from 'mastodon/components/avatar';
import Permalink from 'mastodon/components/permalink';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
const Account = connect(state => ({ const Account = connect(state => ({
account: state.getIn(['accounts', me]), account: state.getIn(['accounts', me]),
}))(({ account }) => ( }))(({ account }) => (
<Permalink href={account.get('url')} to={`/@${account.get('acct')}`} title={account.get('acct')}> <Link to={`/@${account.get('acct')}`} title={account.get('acct')}>
<Avatar account={account} size={35} /> <Avatar account={account} size={35} />
</Permalink> </Link>
)); ));
export default @withRouter export default @withRouter

@ -1,14 +1,14 @@
{ {
"about.blocks": "Servidors moderats", "about.blocks": "Servidors moderats",
"about.contact": "Contacte:", "about.contact": "Contacte:",
"about.disclaimer": "Mastodon és un programari lliure de codi obert i una marca comercial de Mastodon gGmbH.", "about.disclaimer": "Mastodon és programari lliure de codi obert i una marca comercial de Mastodon gGmbH.",
"about.domain_blocks.no_reason_available": "Motiu no disponible", "about.domain_blocks.no_reason_available": "No és disponible el motiu",
"about.domain_blocks.preamble": "En general, Mastodon et permet veure el contingut i interaccionar amb els usuaris de qualsevol altre servidor del fedivers. Aquestes són les excepcions que s'han fet en aquest servidor particular.", "about.domain_blocks.preamble": "En general, Mastodon et permet veure el contingut i interaccionar amb els usuaris de qualsevol altre servidor del fedivers. Aquestes són les excepcions que s'han fet en aquest servidor particular.",
"about.domain_blocks.silenced.explanation": "Generalment no veuràs perfils ni contingut d'aquest servidor, a menys que el cerquis explícitament o optis per ell seguint-lo.", "about.domain_blocks.silenced.explanation": "Generalment no veuràs perfils ni contingut d'aquest servidor, a menys que el cerquis explícitament o optis per seguir-lo.",
"about.domain_blocks.silenced.title": "Limitat", "about.domain_blocks.silenced.title": "Limitat",
"about.domain_blocks.suspended.explanation": "No es processaran, emmagatzemaran ni s'intercanviaran dades d'aquest servidor, fent impossible qualsevol interacció o comunicació amb els usuaris d'aquest servidor.", "about.domain_blocks.suspended.explanation": "No es processaran, emmagatzemaran ni intercanviaran dades d'aquest servidor, fent impossible qualsevol interacció o comunicació amb els seus usuaris.",
"about.domain_blocks.suspended.title": "Suspès", "about.domain_blocks.suspended.title": "Suspès",
"about.not_available": "Aquesta informació no s'ha fet disponible en aquest servidor.", "about.not_available": "Aquesta informació no és disponible en aquest servidor.",
"about.powered_by": "Xarxa social descentralitzada impulsada per {mastodon}", "about.powered_by": "Xarxa social descentralitzada impulsada per {mastodon}",
"about.rules": "Normes del servidor", "about.rules": "Normes del servidor",
"account.account_note_header": "Nota", "account.account_note_header": "Nota",
@ -19,19 +19,19 @@
"account.block_domain": "Bloqueja el domini {domain}", "account.block_domain": "Bloqueja el domini {domain}",
"account.blocked": "Bloquejat", "account.blocked": "Bloquejat",
"account.browse_more_on_origin_server": "Navega més en el perfil original", "account.browse_more_on_origin_server": "Navega més en el perfil original",
"account.cancel_follow_request": "Retirar la sol·licitud de seguiment", "account.cancel_follow_request": "Retira la sol·licitud de seguiment",
"account.direct": "Envia missatge directe a @{name}", "account.direct": "Envia missatge directe a @{name}",
"account.disable_notifications": "No em notifiquis les publicacions de @{name}", "account.disable_notifications": "No em notifiquis les publicacions de @{name}",
"account.domain_blocked": "Domini bloquejat", "account.domain_blocked": "Domini blocat",
"account.edit_profile": "Edita el perfil", "account.edit_profile": "Edita el perfil",
"account.enable_notifications": "Notificam les publicacions de @{name}", "account.enable_notifications": "Notifica'm les publicacions de @{name}",
"account.endorse": "Recomana en el perfil", "account.endorse": "Recomana en el perfil",
"account.featured_tags.last_status_at": "Última publicació el {date}", "account.featured_tags.last_status_at": "Última publicació el {date}",
"account.featured_tags.last_status_never": "Cap publicació", "account.featured_tags.last_status_never": "No hi ha publicacions",
"account.featured_tags.title": "Etiquetes destacades de: {name}", "account.featured_tags.title": "Etiquetes destacades de: {name}",
"account.follow": "Segueix", "account.follow": "Segueix",
"account.followers": "Seguidors", "account.followers": "Seguidors",
"account.followers.empty": "Ningú segueix aquest usuari encara.", "account.followers.empty": "Encara ningú no segueix aquest usuari.",
"account.followers_counter": "{count, plural, one {{counter} Seguidor} other {{counter} Seguidors}}", "account.followers_counter": "{count, plural, one {{counter} Seguidor} other {{counter} Seguidors}}",
"account.following": "Seguint", "account.following": "Seguint",
"account.following_counter": "{count, plural, other {{counter} Seguint}}", "account.following_counter": "{count, plural, other {{counter} Seguint}}",
@ -52,25 +52,25 @@
"account.open_original_page": "Obre la pàgina original", "account.open_original_page": "Obre la pàgina original",
"account.posts": "Publicacions", "account.posts": "Publicacions",
"account.posts_with_replies": "Publicacions i respostes", "account.posts_with_replies": "Publicacions i respostes",
"account.report": "Informa sobre @{name}", "account.report": "Informa quant a @{name}",
"account.requested": "Esperant aprovació. Fes clic per cancel·lar la petició de seguiment", "account.requested": "S'està esperant l'aprovació. Feu clic per a cancel·lar la petició de seguiment",
"account.share": "Comparteix el perfil de @{name}", "account.share": "Comparteix el perfil de @{name}",
"account.show_reblogs": "Mostra els impulsos de @{name}", "account.show_reblogs": "Mostra els impulsos de @{name}",
"account.statuses_counter": "{count, plural, one {{counter} Publicació} other {{counter} Publicacions}}", "account.statuses_counter": "{count, plural, one {{counter} Publicació} other {{counter} Publicacions}}",
"account.unblock": "Desbloqueja @{name}", "account.unblock": "Desbloqueja @{name}",
"account.unblock_domain": "Desbloqueja el domini {domain}", "account.unblock_domain": "Desbloqueja el domini {domain}",
"account.unblock_short": "Desbloquejar", "account.unblock_short": "Desbloqueja",
"account.unendorse": "No recomanar en el perfil", "account.unendorse": "No recomanis en el perfil",
"account.unfollow": "Deixar de seguir", "account.unfollow": "Deixa de seguir",
"account.unmute": "Deixar de silenciar @{name}", "account.unmute": "Deixar de silenciar @{name}",
"account.unmute_notifications": "Activar notificacions de @{name}", "account.unmute_notifications": "Activa les notificacions de @{name}",
"account.unmute_short": "Deixa de silenciar", "account.unmute_short": "Deixa de silenciar",
"account_note.placeholder": "Clica per afegir-hi una nota", "account_note.placeholder": "Clica per afegir-hi una nota",
"admin.dashboard.daily_retention": "Ràtio de retenció d'usuaris nous, per dia, després del registre", "admin.dashboard.daily_retention": "Ràtio de retenció d'usuaris nous per dia, després del registre",
"admin.dashboard.monthly_retention": "Ràtio de retenció d'usuaris nous, per mes, després del registre", "admin.dashboard.monthly_retention": "Ràtio de retenció d'usuaris nous per mes, després del registre",
"admin.dashboard.retention.average": "Mitjana", "admin.dashboard.retention.average": "Mitjana",
"admin.dashboard.retention.cohort": "Mes del registre", "admin.dashboard.retention.cohort": "Mes de registre",
"admin.dashboard.retention.cohort_size": "Nous usuaris", "admin.dashboard.retention.cohort_size": "Usuaris nous",
"alert.rate_limited.message": "Si us plau, torna-ho a provar després de {retry_time, time, medium}.", "alert.rate_limited.message": "Si us plau, torna-ho a provar després de {retry_time, time, medium}.",
"alert.rate_limited.title": "Límit de freqüència", "alert.rate_limited.title": "Límit de freqüència",
"alert.unexpected.message": "S'ha produït un error inesperat.", "alert.unexpected.message": "S'ha produït un error inesperat.",
@ -79,21 +79,21 @@
"attachments_list.unprocessed": "(sense processar)", "attachments_list.unprocessed": "(sense processar)",
"audio.hide": "Amaga l'àudio", "audio.hide": "Amaga l'àudio",
"autosuggest_hashtag.per_week": "{count} per setmana", "autosuggest_hashtag.per_week": "{count} per setmana",
"boost_modal.combo": "Pots prémer {combo} per evitar-ho el pròxim cop", "boost_modal.combo": "Podeu prémer {combo} per a evitar-ho el pròxim cop",
"bundle_column_error.copy_stacktrace": "Copiar l'informe d'error", "bundle_column_error.copy_stacktrace": "Copia l'informe d'error",
"bundle_column_error.error.body": "No s'ha pogut renderitzar la pàgina sol·licitada. Podría ser degut a un error en el nostre codi o un problema de compatibilitat del navegador.", "bundle_column_error.error.body": "No s'ha pogut renderitzar la pàgina sol·licitada. Podria ser per un error en el nostre codi o per un problema de compatibilitat del navegador.",
"bundle_column_error.error.title": "Oh, no!", "bundle_column_error.error.title": "Oh, no!",
"bundle_column_error.network.body": "Hi ha hagut un error al intentar carregar aquesta pàgina. Això podria ser degut a un problem temporal amb la teva connexió a internet o amb aquest servidor.", "bundle_column_error.network.body": "Hi ha hagut un error en intentar carregar aquesta pàgina. Això podria ser per un problema temporal amb la teva connexió a internet o amb aquest servidor.",
"bundle_column_error.network.title": "Error de xarxa", "bundle_column_error.network.title": "Error de connexió",
"bundle_column_error.retry": "Tornar-ho a provar", "bundle_column_error.retry": "Torna-ho a provar",
"bundle_column_error.return": "Torna a Inici", "bundle_column_error.return": "Torna a Inici",
"bundle_column_error.routing.body": "No es pot trobar la pàgina sol·licitada. Estàs segur que la URL de la barra d'adreces és correcte?", "bundle_column_error.routing.body": "No es pot trobar la pàgina sol·licitada. Segur que la URL de la barra d'adreces és correcta?",
"bundle_column_error.routing.title": "404", "bundle_column_error.routing.title": "404",
"bundle_modal_error.close": "Tanca", "bundle_modal_error.close": "Tanca",
"bundle_modal_error.message": "S'ha produït un error en carregar aquest component.", "bundle_modal_error.message": "S'ha produït un error en carregar aquest component.",
"bundle_modal_error.retry": "Tornar-ho a provar", "bundle_modal_error.retry": "Torna-ho a provar",
"closed_registrations.other_server_instructions": "Donat que Mastodon és descentralitzat, pots crear un compte en un altre servidor i encara interactuar amb aquest.", "closed_registrations.other_server_instructions": "Com que Mastodon és descentralitzat, pots crear un compte en un altre servidor i seguir interactuant amb aquest.",
"closed_registrations_modal.description": "Crear un compte a {domain} no és possible ara mateix però, si us plau, tingues en compte que no necessites específicament un compte a {domain} per a usar Mastodon.", "closed_registrations_modal.description": "No es pot crear un compte a {domain} ara mateix, però tingueu en compte que no necessiteu específicament un compte a {domain} per a usar Mastodon.",
"closed_registrations_modal.find_another_server": "Troba un altre servidor", "closed_registrations_modal.find_another_server": "Troba un altre servidor",
"closed_registrations_modal.preamble": "Mastodon és descentralitzat per tant no importa on tinguis el teu compte, seràs capaç de seguir i interactuar amb tothom des d'aquest servidor. Fins i tot pots tenir el compte en el teu propi servidor!", "closed_registrations_modal.preamble": "Mastodon és descentralitzat per tant no importa on tinguis el teu compte, seràs capaç de seguir i interactuar amb tothom des d'aquest servidor. Fins i tot pots tenir el compte en el teu propi servidor!",
"closed_registrations_modal.title": "Registrant-se a Mastodon", "closed_registrations_modal.title": "Registrant-se a Mastodon",
@ -130,7 +130,7 @@
"compose_form.hashtag_warning": "Aquesta publicació no es mostrarà en cap etiqueta, ja que no està llistada. Només les publicacions públiques es poden cercar per etiqueta.", "compose_form.hashtag_warning": "Aquesta publicació no es mostrarà en cap etiqueta, ja que no està llistada. Només les publicacions públiques es poden cercar per etiqueta.",
"compose_form.lock_disclaimer": "El teu compte no està {locked}. Tothom pot seguir-te i veure les publicacions de només per a seguidors.", "compose_form.lock_disclaimer": "El teu compte no està {locked}. Tothom pot seguir-te i veure les publicacions de només per a seguidors.",
"compose_form.lock_disclaimer.lock": "bloquejat", "compose_form.lock_disclaimer.lock": "bloquejat",
"compose_form.placeholder": "Què et passa pel cap?", "compose_form.placeholder": "Què tens en ment?",
"compose_form.poll.add_option": "Afegir una opció", "compose_form.poll.add_option": "Afegir una opció",
"compose_form.poll.duration": "Durada de l'enquesta", "compose_form.poll.duration": "Durada de l'enquesta",
"compose_form.poll.option_placeholder": "Opció {number}", "compose_form.poll.option_placeholder": "Opció {number}",
@ -210,7 +210,7 @@
"empty_column.account_timeline": "No hi ha publicacions aquí!", "empty_column.account_timeline": "No hi ha publicacions aquí!",
"empty_column.account_unavailable": "Perfil no disponible", "empty_column.account_unavailable": "Perfil no disponible",
"empty_column.blocks": "Encara no has bloquejat cap usuari.", "empty_column.blocks": "Encara no has bloquejat cap usuari.",
"empty_column.bookmarked_statuses": "Encara no has marcat com publicació com a preferida. Quan en marquis una apareixerà aquí.", "empty_column.bookmarked_statuses": "Encara no has marcat cap publicació com a preferida. Quan en marquis una, apareixerà aquí.",
"empty_column.community": "La línia de temps local és buida. Escriu alguna cosa públicament per posar-ho tot en marxa!", "empty_column.community": "La línia de temps local és buida. Escriu alguna cosa públicament per posar-ho tot en marxa!",
"empty_column.direct": "Encara no tens missatges directes. Quan n'enviïs o en rebis, es mostraran aquí.", "empty_column.direct": "Encara no tens missatges directes. Quan n'enviïs o en rebis, es mostraran aquí.",
"empty_column.domain_blocks": "Encara no hi ha dominis bloquejats.", "empty_column.domain_blocks": "Encara no hi ha dominis bloquejats.",
@ -257,7 +257,7 @@
"filter_modal.title.status": "Filtra una publicació", "filter_modal.title.status": "Filtra una publicació",
"follow_recommendations.done": "Fet", "follow_recommendations.done": "Fet",
"follow_recommendations.heading": "Segueix a la gent de la que t'agradaria veure les seves publicacions! Aquí hi ha algunes recomanacions.", "follow_recommendations.heading": "Segueix a la gent de la que t'agradaria veure les seves publicacions! Aquí hi ha algunes recomanacions.",
"follow_recommendations.lead": "Les publicacions del usuaris que segueixes es mostraran en ordre cronològic en la teva línia de temps Inici. No tinguis por en cometre errors, pots fàcilment deixar de seguir-los en qualsevol moment!", "follow_recommendations.lead": "Les publicacions dels usuaris que segueixes es mostraran en ordre cronològic en la teva línia de temps Inici. No tinguis por en cometre errors, pots fàcilment deixar de seguir-los en qualsevol moment!",
"follow_request.authorize": "Autoritza", "follow_request.authorize": "Autoritza",
"follow_request.reject": "Rebutja", "follow_request.reject": "Rebutja",
"follow_requests.unlocked_explanation": "Tot i que el teu compte no està bloquejat, el personal de {domain} ha pensat que és possible que vulguis revisar les sol·licituds de seguiment daquests comptes manualment.", "follow_requests.unlocked_explanation": "Tot i que el teu compte no està bloquejat, el personal de {domain} ha pensat que és possible que vulguis revisar les sol·licituds de seguiment daquests comptes manualment.",
@ -294,7 +294,7 @@
"interaction_modal.on_this_server": "En aquest servidor", "interaction_modal.on_this_server": "En aquest servidor",
"interaction_modal.other_server_instructions": "Copia i enganxa aquest enllaç en el camp de cerca de la teva aplicació Mastodon preferida o en l'interfície web del teu servidor Mastodon.", "interaction_modal.other_server_instructions": "Copia i enganxa aquest enllaç en el camp de cerca de la teva aplicació Mastodon preferida o en l'interfície web del teu servidor Mastodon.",
"interaction_modal.preamble": "Donat que Mastodon és descentralitzat, pots fer servir el teu compte existent a un altre servidor Mastodon o plataforma compatible si és que no tens compte en aquest.", "interaction_modal.preamble": "Donat que Mastodon és descentralitzat, pots fer servir el teu compte existent a un altre servidor Mastodon o plataforma compatible si és que no tens compte en aquest.",
"interaction_modal.title.favourite": "Afavoreix la publicació de {name}", "interaction_modal.title.favourite": "Marca la publicació de {name}",
"interaction_modal.title.follow": "Segueix {name}", "interaction_modal.title.follow": "Segueix {name}",
"interaction_modal.title.reblog": "Impulsa la publicació de {name}", "interaction_modal.title.reblog": "Impulsa la publicació de {name}",
"interaction_modal.title.reply": "Respon a la publicació de {name}", "interaction_modal.title.reply": "Respon a la publicació de {name}",
@ -310,7 +310,7 @@
"keyboard_shortcuts.direct": "per obrir la columna de missatges directes", "keyboard_shortcuts.direct": "per obrir la columna de missatges directes",
"keyboard_shortcuts.down": "Mou-lo avall en la llista", "keyboard_shortcuts.down": "Mou-lo avall en la llista",
"keyboard_shortcuts.enter": "Obrir publicació", "keyboard_shortcuts.enter": "Obrir publicació",
"keyboard_shortcuts.favourite": "Afavoreix la publicació", "keyboard_shortcuts.favourite": "Marca la publicació",
"keyboard_shortcuts.favourites": "Obre la llista de preferits", "keyboard_shortcuts.favourites": "Obre la llista de preferits",
"keyboard_shortcuts.federated": "Obre la línia de temps federada", "keyboard_shortcuts.federated": "Obre la línia de temps federada",
"keyboard_shortcuts.heading": "Dreceres de teclat", "keyboard_shortcuts.heading": "Dreceres de teclat",
@ -542,7 +542,7 @@
"status.admin_account": "Obre l'interfície de moderació per a @{name}", "status.admin_account": "Obre l'interfície de moderació per a @{name}",
"status.admin_status": "Obrir aquesta publicació a la interfície de moderació", "status.admin_status": "Obrir aquesta publicació a la interfície de moderació",
"status.block": "Bloqueja @{name}", "status.block": "Bloqueja @{name}",
"status.bookmark": "Afavoreix", "status.bookmark": "Marca",
"status.cancel_reblog_private": "Desfés l'impuls", "status.cancel_reblog_private": "Desfés l'impuls",
"status.cannot_reblog": "Aquesta publicació no es pot impulsar", "status.cannot_reblog": "Aquesta publicació no es pot impulsar",
"status.copy": "Copia l'enllaç a la publicació", "status.copy": "Copia l'enllaç a la publicació",

@ -2,7 +2,7 @@
"about.blocks": "Gweinyddion sy'n cael eu cymedroli", "about.blocks": "Gweinyddion sy'n cael eu cymedroli",
"about.contact": "Cyswllt:", "about.contact": "Cyswllt:",
"about.disclaimer": "Mae Mastodon yn feddalwedd rhydd, cod agored ac o dan hawlfraint Mastodon gGmbH.", "about.disclaimer": "Mae Mastodon yn feddalwedd rhydd, cod agored ac o dan hawlfraint Mastodon gGmbH.",
"about.domain_blocks.no_reason_available": "Reason not available", "about.domain_blocks.no_reason_available": "Rheswm ddim ar gael",
"about.domain_blocks.preamble": "Yn gyffredinol, mae Mastodon yn caniatáu i chi weld cynnwys gan unrhyw weinyddwr arall yn y ffederasiwn a rhyngweithio â hi. Dyma'r eithriadau a wnaed ar y gweinydd penodol hwn.", "about.domain_blocks.preamble": "Yn gyffredinol, mae Mastodon yn caniatáu i chi weld cynnwys gan unrhyw weinyddwr arall yn y ffederasiwn a rhyngweithio â hi. Dyma'r eithriadau a wnaed ar y gweinydd penodol hwn.",
"about.domain_blocks.silenced.explanation": "Yn gyffredinol, fyddwch chi ddim yn gweld proffiliau a chynnwys o'r gweinydd hwn, oni bai eich bod yn chwilio'n benodol amdano neu yn ymuno drwy ei ddilyn.", "about.domain_blocks.silenced.explanation": "Yn gyffredinol, fyddwch chi ddim yn gweld proffiliau a chynnwys o'r gweinydd hwn, oni bai eich bod yn chwilio'n benodol amdano neu yn ymuno drwy ei ddilyn.",
"about.domain_blocks.silenced.title": "Tawelwyd", "about.domain_blocks.silenced.title": "Tawelwyd",
@ -28,7 +28,7 @@
"account.endorse": "Arddangos ar fy mhroffil", "account.endorse": "Arddangos ar fy mhroffil",
"account.featured_tags.last_status_at": "Y cofnod diwethaf ar {date}", "account.featured_tags.last_status_at": "Y cofnod diwethaf ar {date}",
"account.featured_tags.last_status_never": "Dim postiadau", "account.featured_tags.last_status_never": "Dim postiadau",
"account.featured_tags.title": "{name}'s featured hashtags", "account.featured_tags.title": "hashnodau dan sylw {name}",
"account.follow": "Dilyn", "account.follow": "Dilyn",
"account.followers": "Dilynwyr", "account.followers": "Dilynwyr",
"account.followers.empty": "Does neb yn dilyn y defnyddiwr hwn eto.", "account.followers.empty": "Does neb yn dilyn y defnyddiwr hwn eto.",
@ -49,7 +49,7 @@
"account.mute": "Tawelu @{name}", "account.mute": "Tawelu @{name}",
"account.mute_notifications": "Cuddio hysbysiadau o @{name}", "account.mute_notifications": "Cuddio hysbysiadau o @{name}",
"account.muted": "Distewyd", "account.muted": "Distewyd",
"account.open_original_page": "Open original page", "account.open_original_page": "Agor y dudalen wreiddiol",
"account.posts": "Postiadau", "account.posts": "Postiadau",
"account.posts_with_replies": "Postiadau ac atebion", "account.posts_with_replies": "Postiadau ac atebion",
"account.report": "Adrodd @{name}", "account.report": "Adrodd @{name}",
@ -95,7 +95,7 @@
"closed_registrations.other_server_instructions": "Gan fod Mastodon yn ddatganoledig, gallwch greu cyfrif ar weinydd arall a dal i ryngweithio gyda hwn.", "closed_registrations.other_server_instructions": "Gan fod Mastodon yn ddatganoledig, gallwch greu cyfrif ar weinydd arall a dal i ryngweithio gyda hwn.",
"closed_registrations_modal.description": "Ar hyn o bryd nid yw'n bosib creu cyfrif ar {domain}, ond cadwch mewn cof nad oes raid i chi gael cyfrif yn benodol ar {domain} i ddefnyddio Mastodon.", "closed_registrations_modal.description": "Ar hyn o bryd nid yw'n bosib creu cyfrif ar {domain}, ond cadwch mewn cof nad oes raid i chi gael cyfrif yn benodol ar {domain} i ddefnyddio Mastodon.",
"closed_registrations_modal.find_another_server": "Dod o hyd i weinydd arall", "closed_registrations_modal.find_another_server": "Dod o hyd i weinydd arall",
"closed_registrations_modal.preamble": "Mastodon is decentralized, so no matter where you create your account, you will be able to follow and interact with anyone on this server. You can even self-host it!", "closed_registrations_modal.preamble": "Mae Mastodon wedi'i ddatganoli, felly does dim gwahaniaeth ble rydych chi'n creu eich cyfrif, byddwch chi'n gallu dilyn a rhyngweithio ag unrhyw un ar y gweinydd hwn. Gallwch hyd yn oed ei gynnal ef eich hun!",
"closed_registrations_modal.title": "Cofrestru ar Mastodon", "closed_registrations_modal.title": "Cofrestru ar Mastodon",
"column.about": "Ynghylch", "column.about": "Ynghylch",
"column.blocks": "Defnyddwyr a flociwyd", "column.blocks": "Defnyddwyr a flociwyd",
@ -181,12 +181,12 @@
"directory.local": "O {domain} yn unig", "directory.local": "O {domain} yn unig",
"directory.new_arrivals": "Newydd-ddyfodiaid", "directory.new_arrivals": "Newydd-ddyfodiaid",
"directory.recently_active": "Yn weithredol yn ddiweddar", "directory.recently_active": "Yn weithredol yn ddiweddar",
"disabled_account_banner.account_settings": "Account settings", "disabled_account_banner.account_settings": "Gosodiadau'r cyfrif",
"disabled_account_banner.text": "Mae eich cyfrif {disabledAccount} wedi ei analluogi ar hyn o bryd.", "disabled_account_banner.text": "Mae eich cyfrif {disabledAccount} wedi ei analluogi ar hyn o bryd.",
"dismissable_banner.community_timeline": "Dyma'r postiadau cyhoeddus diweddaraf gan bobl y caiff eu cyfrifon eu cynnal ar {domain}.", "dismissable_banner.community_timeline": "Dyma'r postiadau cyhoeddus diweddaraf gan bobl y caiff eu cyfrifon eu cynnal ar {domain}.",
"dismissable_banner.dismiss": "Diystyru", "dismissable_banner.dismiss": "Diystyru",
"dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.", "dismissable_banner.explore_links": "Mae'r straeon newyddion hyn yn cael eu trafod gan bobl ar y gweinydd hwn a rhai eraill ar y rhwydwaith datganoledig hwn, ar hyn o bryd.",
"dismissable_banner.explore_statuses": "These posts from this and other servers in the decentralized network are gaining traction on this server right now.", "dismissable_banner.explore_statuses": "Mae'r cofnodion hyn o'r gweinydd hwn a gweinyddion eraill yn y rhwydwaith datganoledig hwn yn denu sylw ar y gweinydd hwn ar hyn o bryd.",
"dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.", "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.",
"dismissable_banner.public_timeline": "These are the most recent public posts from people on this and other servers of the decentralized network that this server knows about.", "dismissable_banner.public_timeline": "These are the most recent public posts from people on this and other servers of the decentralized network that this server knows about.",
"embed.instructions": "Gosodwch y post hwn ar eich gwefan drwy gopïo'r côd isod.", "embed.instructions": "Gosodwch y post hwn ar eich gwefan drwy gopïo'r côd isod.",

@ -42,7 +42,7 @@
"account.joined_short": "Beigetreten", "account.joined_short": "Beigetreten",
"account.languages": "Genutzte Sprachen überarbeiten", "account.languages": "Genutzte Sprachen überarbeiten",
"account.link_verified_on": "Das Profil mit dieser E-Mail-Adresse wurde bereits am {date} bestätigt", "account.link_verified_on": "Das Profil mit dieser E-Mail-Adresse wurde bereits am {date} bestätigt",
"account.locked_info": "Der Privatsphärenstatus dieses Kontos wurde auf „gesperrt“ gesetzt. Die Person bestimmt manuell, wer ihm/ihr folgen darf.", "account.locked_info": "Die Privatsphäre dieses Kontos wurde auf „geschützt“ gesetzt. Die Person bestimmt manuell, wer ihrem Profil folgen darf.",
"account.media": "Medien", "account.media": "Medien",
"account.mention": "@{name} im Beitrag erwähnen", "account.mention": "@{name} im Beitrag erwähnen",
"account.moved_to": "{name} hat angegeben, dass dieser der neue Account ist:", "account.moved_to": "{name} hat angegeben, dass dieser der neue Account ist:",
@ -87,15 +87,15 @@
"bundle_column_error.network.title": "Netzwerkfehler", "bundle_column_error.network.title": "Netzwerkfehler",
"bundle_column_error.retry": "Erneut versuchen", "bundle_column_error.retry": "Erneut versuchen",
"bundle_column_error.return": "Zurück zur Startseite", "bundle_column_error.return": "Zurück zur Startseite",
"bundle_column_error.routing.body": "Die angeforderte Seite konnte nicht gefunden werden. Sind Sie sicher, dass die URL in der Adressleiste korrekt ist?", "bundle_column_error.routing.body": "Die angeforderte Seite konnte nicht gefunden werden. Bist du dir sicher, dass die URL in der Adressleiste korrekt ist?",
"bundle_column_error.routing.title": "404", "bundle_column_error.routing.title": "404",
"bundle_modal_error.close": "Schließen", "bundle_modal_error.close": "Schließen",
"bundle_modal_error.message": "Etwas ist beim Laden schiefgelaufen.", "bundle_modal_error.message": "Etwas ist beim Laden schiefgelaufen.",
"bundle_modal_error.retry": "Erneut versuchen", "bundle_modal_error.retry": "Erneut versuchen",
"closed_registrations.other_server_instructions": "Da Mastodon dezentralisiert ist, können Sie ein Konto auf einem anderen Server erstellen und trotzdem mit diesem Server interagieren.", "closed_registrations.other_server_instructions": "Da Mastodon dezentralisiert ist, kannst du ein Konto auf einem anderen Server erstellen und trotzdem mit diesem Server interagieren.",
"closed_registrations_modal.description": "Das Anlegen eines Kontos auf {domain} ist derzeit nicht möglich, aber bedenken Sie bitte, dass Sie kein spezielles Konto auf {domain} benötigen, um Mastodon nutzen zu können.", "closed_registrations_modal.description": "Das Anlegen eines Kontos auf {domain} ist derzeit nicht möglich, aber bedenke, dass du kein extra Konto auf {domain} benötigst, um Mastodon nutzen zu können.",
"closed_registrations_modal.find_another_server": "Einen anderen Server auswählen", "closed_registrations_modal.find_another_server": "Einen anderen Server auswählen",
"closed_registrations_modal.preamble": "Mastodon ist dezentralisiert, d.h. unabhängig davon, wo Sie Ihr Konto erstellen, können Sie jedem auf diesem Server folgen und mit ihm interagieren. Sie können ihn sogar selbst hosten!", "closed_registrations_modal.preamble": "Mastodon ist dezentralisiert, das heißt unabhängig davon, wo du dein Konto erstellst, kannst du jedes Konto auf diesem Server folgen und mit dem interagieren. Du kannst auch deinen eigenen Server hosten!",
"closed_registrations_modal.title": "Bei Mastodon registrieren", "closed_registrations_modal.title": "Bei Mastodon registrieren",
"column.about": "Über", "column.about": "Über",
"column.blocks": "Blockierte Profile", "column.blocks": "Blockierte Profile",
@ -292,7 +292,7 @@
"interaction_modal.description.reply": "Mit einem Account auf Mastodon kannst du auf diesen Beitrag antworten.", "interaction_modal.description.reply": "Mit einem Account auf Mastodon kannst du auf diesen Beitrag antworten.",
"interaction_modal.on_another_server": "Auf einem anderen Server", "interaction_modal.on_another_server": "Auf einem anderen Server",
"interaction_modal.on_this_server": "Auf diesem Server", "interaction_modal.on_this_server": "Auf diesem Server",
"interaction_modal.other_server_instructions": "Kopieren Sie diese Adresse und fügen Sie diese in das Suchfeld Ihrer bevorzugten Mastodon-App oder in die Weboberfläche Ihres Mastodon-Servers ein.", "interaction_modal.other_server_instructions": "Kopiere diese URL und füge sie in das Suchfeld deiner bevorzugten Mastodon-App oder im Webinterface deiner Mastodon-Instanz ein.",
"interaction_modal.preamble": "Da Mastodon dezentralisiert ist, kannst du dein bestehendes Konto auf einem anderen Mastodon-Server oder einer kompatiblen Plattform nutzen, wenn du kein Konto auf dieser Plattform hast.", "interaction_modal.preamble": "Da Mastodon dezentralisiert ist, kannst du dein bestehendes Konto auf einem anderen Mastodon-Server oder einer kompatiblen Plattform nutzen, wenn du kein Konto auf dieser Plattform hast.",
"interaction_modal.title.favourite": "Lieblingsbeitrag von {name}", "interaction_modal.title.favourite": "Lieblingsbeitrag von {name}",
"interaction_modal.title.follow": "Folge {name}", "interaction_modal.title.follow": "Folge {name}",
@ -341,7 +341,7 @@
"lightbox.next": "Weiter", "lightbox.next": "Weiter",
"lightbox.previous": "Zurück", "lightbox.previous": "Zurück",
"limited_account_hint.action": "Profil trotzdem anzeigen", "limited_account_hint.action": "Profil trotzdem anzeigen",
"limited_account_hint.title": "Dieses Profil wurde von den Moderator*innnen der Mastodon-Instanz {domain} ausgeblendet.", "limited_account_hint.title": "Dieses Profil wurde von den Moderator*innen der Mastodon-Instanz {domain} ausgeblendet.",
"lists.account.add": "Zur Liste hinzufügen", "lists.account.add": "Zur Liste hinzufügen",
"lists.account.remove": "Von der Liste entfernen", "lists.account.remove": "Von der Liste entfernen",
"lists.delete": "Liste löschen", "lists.delete": "Liste löschen",
@ -491,7 +491,7 @@
"report.placeholder": "Zusätzliche Kommentare", "report.placeholder": "Zusätzliche Kommentare",
"report.reasons.dislike": "Das gefällt mir nicht", "report.reasons.dislike": "Das gefällt mir nicht",
"report.reasons.dislike_description": "Es ist etwas, das du nicht sehen willst", "report.reasons.dislike_description": "Es ist etwas, das du nicht sehen willst",
"report.reasons.other": "Da ist was anderes", "report.reasons.other": "Es geht um etwas anderes",
"report.reasons.other_description": "Das Problem passt nicht in die Kategorien", "report.reasons.other_description": "Das Problem passt nicht in die Kategorien",
"report.reasons.spam": "Das ist Spam", "report.reasons.spam": "Das ist Spam",
"report.reasons.spam_description": "Bösartige Links, gefälschtes Engagement oder wiederholte Antworten", "report.reasons.spam_description": "Bösartige Links, gefälschtes Engagement oder wiederholte Antworten",
@ -545,7 +545,7 @@
"status.bookmark": "Lesezeichen setzen", "status.bookmark": "Lesezeichen setzen",
"status.cancel_reblog_private": "Teilen des Beitrags rückgängig machen", "status.cancel_reblog_private": "Teilen des Beitrags rückgängig machen",
"status.cannot_reblog": "Dieser Beitrag kann nicht geteilt werden", "status.cannot_reblog": "Dieser Beitrag kann nicht geteilt werden",
"status.copy": "Kopiere Link des Beitrags", "status.copy": "Link zum Beitrag kopieren",
"status.delete": "Beitrag löschen", "status.delete": "Beitrag löschen",
"status.detailed_status": "Detaillierte Ansicht der Unterhaltung", "status.detailed_status": "Detaillierte Ansicht der Unterhaltung",
"status.direct": "Direktnachricht an @{name}", "status.direct": "Direktnachricht an @{name}",
@ -588,7 +588,7 @@
"status.show_more_all": "Alle Inhaltswarnungen aufklappen", "status.show_more_all": "Alle Inhaltswarnungen aufklappen",
"status.show_original": "Original anzeigen", "status.show_original": "Original anzeigen",
"status.translate": "Übersetzen", "status.translate": "Übersetzen",
"status.translated_from_with": "Von {lang} mit {provider} übersetzt", "status.translated_from_with": "Aus {lang} mittels {provider} übersetzt",
"status.uncached_media_warning": "Nicht verfügbar", "status.uncached_media_warning": "Nicht verfügbar",
"status.unmute_conversation": "Stummschaltung der Unterhaltung aufheben", "status.unmute_conversation": "Stummschaltung der Unterhaltung aufheben",
"status.unpin": "Vom Profil lösen", "status.unpin": "Vom Profil lösen",
@ -638,7 +638,7 @@
"upload_modal.preparing_ocr": "Vorbereitung von OCR…", "upload_modal.preparing_ocr": "Vorbereitung von OCR…",
"upload_modal.preview_label": "Vorschau ({ratio})", "upload_modal.preview_label": "Vorschau ({ratio})",
"upload_progress.label": "Wird hochgeladen …", "upload_progress.label": "Wird hochgeladen …",
"upload_progress.processing": "Wird verarbeitet …", "upload_progress.processing": "Wird verarbeitet…",
"video.close": "Video schließen", "video.close": "Video schließen",
"video.download": "Datei herunterladen", "video.download": "Datei herunterladen",
"video.exit_fullscreen": "Vollbild verlassen", "video.exit_fullscreen": "Vollbild verlassen",

@ -2,8 +2,8 @@
"about.blocks": "Moderigitaj serviloj", "about.blocks": "Moderigitaj serviloj",
"about.contact": "Kontakto:", "about.contact": "Kontakto:",
"about.disclaimer": "Mastodon estas libera, malfermitkoda programaro kaj varmarko de la firmao Mastodon gGmbH.", "about.disclaimer": "Mastodon estas libera, malfermitkoda programaro kaj varmarko de la firmao Mastodon gGmbH.",
"about.domain_blocks.no_reason_available": "Kialo ne estas disponebla", "about.domain_blocks.no_reason_available": "Kialo ne disponebla",
"about.domain_blocks.preamble": "Mastodon generally allows you to view content from and interact with users from any other server in the fediverse. These are the exceptions that have been made on this particular server.", "about.domain_blocks.preamble": "Mastodono ebligas vidi enhavojn el uzantoj kaj komuniki kun ilin el aliaj serviloj el la Fediverso. Estas la limigoj deciditaj por tiu ĉi servilo.",
"about.domain_blocks.silenced.explanation": "Vi ne ĝenerale vidos profilojn kaj enhavojn de ĉi tiu servilo, krom se vi eksplice trovas aŭ estas permesita de via sekvato.", "about.domain_blocks.silenced.explanation": "Vi ne ĝenerale vidos profilojn kaj enhavojn de ĉi tiu servilo, krom se vi eksplice trovas aŭ estas permesita de via sekvato.",
"about.domain_blocks.silenced.title": "Limigita", "about.domain_blocks.silenced.title": "Limigita",
"about.domain_blocks.suspended.explanation": "No data from this server will be processed, stored or exchanged, making any interaction or communication with users from this server impossible.", "about.domain_blocks.suspended.explanation": "No data from this server will be processed, stored or exchanged, making any interaction or communication with users from this server impossible.",
@ -40,7 +40,7 @@
"account.go_to_profile": "Iri al profilo", "account.go_to_profile": "Iri al profilo",
"account.hide_reblogs": "Kaŝi la plusendojn de @{name}", "account.hide_reblogs": "Kaŝi la plusendojn de @{name}",
"account.joined_short": "Aliĝis", "account.joined_short": "Aliĝis",
"account.languages": "Change subscribed languages", "account.languages": "Ŝanĝi elekton de abonitaj lingvoj",
"account.link_verified_on": "La posedanto de tiu ligilo estis kontrolita je {date}", "account.link_verified_on": "La posedanto de tiu ligilo estis kontrolita je {date}",
"account.locked_info": "La privateco de tiu konto estas elektita kiel fermita. La posedanto povas mane akcepti tiun, kiu povas sekvi rin.", "account.locked_info": "La privateco de tiu konto estas elektita kiel fermita. La posedanto povas mane akcepti tiun, kiu povas sekvi rin.",
"account.media": "Aŭdovidaĵoj", "account.media": "Aŭdovidaĵoj",
@ -49,7 +49,7 @@
"account.mute": "Silentigi @{name}", "account.mute": "Silentigi @{name}",
"account.mute_notifications": "Silentigi la sciigojn de @{name}", "account.mute_notifications": "Silentigi la sciigojn de @{name}",
"account.muted": "Silentigita", "account.muted": "Silentigita",
"account.open_original_page": "Open original page", "account.open_original_page": "Malfermi originan paĝon",
"account.posts": "Mesaĝoj", "account.posts": "Mesaĝoj",
"account.posts_with_replies": "Mesaĝoj kaj respondoj", "account.posts_with_replies": "Mesaĝoj kaj respondoj",
"account.report": "Raporti @{name}", "account.report": "Raporti @{name}",
@ -96,7 +96,7 @@
"closed_registrations_modal.description": "Creating an account on {domain} is currently not possible, but please keep in mind that you do not need an account specifically on {domain} to use Mastodon.", "closed_registrations_modal.description": "Creating an account on {domain} is currently not possible, but please keep in mind that you do not need an account specifically on {domain} to use Mastodon.",
"closed_registrations_modal.find_another_server": "Trovi alian servilon", "closed_registrations_modal.find_another_server": "Trovi alian servilon",
"closed_registrations_modal.preamble": "Mastodon is decentralized, so no matter where you create your account, you will be able to follow and interact with anyone on this server. You can even self-host it!", "closed_registrations_modal.preamble": "Mastodon is decentralized, so no matter where you create your account, you will be able to follow and interact with anyone on this server. You can even self-host it!",
"closed_registrations_modal.title": "Registri en Mastodon", "closed_registrations_modal.title": "Krei konton en Mastodon",
"column.about": "Pri", "column.about": "Pri",
"column.blocks": "Blokitaj uzantoj", "column.blocks": "Blokitaj uzantoj",
"column.bookmarks": "Legosignoj", "column.bookmarks": "Legosignoj",
@ -389,7 +389,7 @@
"navigation_bar.security": "Sekureco", "navigation_bar.security": "Sekureco",
"not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.", "not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.",
"notification.admin.report": "{name} raportis {target}", "notification.admin.report": "{name} raportis {target}",
"notification.admin.sign_up": "{name} registris", "notification.admin.sign_up": "{name} kreis konton",
"notification.favourite": "{name} aldonis vian mesaĝon al siaj preferaĵoj", "notification.favourite": "{name} aldonis vian mesaĝon al siaj preferaĵoj",
"notification.follow": "{name} eksekvis vin", "notification.follow": "{name} eksekvis vin",
"notification.follow_request": "{name} petis sekvi vin", "notification.follow_request": "{name} petis sekvi vin",
@ -464,8 +464,8 @@
"relative_time.full.days": "antaŭ {number, plural, one {# tago} other {# tagoj}}", "relative_time.full.days": "antaŭ {number, plural, one {# tago} other {# tagoj}}",
"relative_time.full.hours": "antaŭ {number, plural, one {# horo} other {# horoj}}", "relative_time.full.hours": "antaŭ {number, plural, one {# horo} other {# horoj}}",
"relative_time.full.just_now": "ĵus nun", "relative_time.full.just_now": "ĵus nun",
"relative_time.full.minutes": "{number, plural, one {# minute} other {# minutes}} ago", "relative_time.full.minutes": "antaŭ {number, plural, one {# minuto} other {# minutoj}}",
"relative_time.full.seconds": "{number, plural, one {# second} other {# seconds}} ago", "relative_time.full.seconds": "antaŭ {number, plural, one {# sekundo} other {# sekundoj}}",
"relative_time.hours": "{number}h", "relative_time.hours": "{number}h",
"relative_time.just_now": "nun", "relative_time.just_now": "nun",
"relative_time.minutes": "{number}m", "relative_time.minutes": "{number}m",
@ -476,7 +476,7 @@
"report.block_explanation": "You will not see their posts. They will not be able to see your posts or follow you. They will be able to tell that they are blocked.", "report.block_explanation": "You will not see their posts. They will not be able to see your posts or follow you. They will be able to tell that they are blocked.",
"report.categories.other": "Aliaj", "report.categories.other": "Aliaj",
"report.categories.spam": "Trudmesaĝo", "report.categories.spam": "Trudmesaĝo",
"report.categories.violation": "Content violates one or more server rules", "report.categories.violation": "Enhavo malobservas unu aŭ plurajn servilajn regulojn",
"report.category.subtitle": "Elektu la plej bonan kongruon", "report.category.subtitle": "Elektu la plej bonan kongruon",
"report.category.title": "Diru al ni kio okazas pri ĉi tiu {type}", "report.category.title": "Diru al ni kio okazas pri ĉi tiu {type}",
"report.category.title_account": "profilo", "report.category.title_account": "profilo",
@ -528,15 +528,15 @@
"search_results.nothing_found": "Povis trovi nenion por ĉi tiuj serĉaj terminoj", "search_results.nothing_found": "Povis trovi nenion por ĉi tiuj serĉaj terminoj",
"search_results.statuses": "Mesaĝoj", "search_results.statuses": "Mesaĝoj",
"search_results.statuses_fts_disabled": "Serĉi mesaĝojn laŭ enhavo ne estas ebligita en ĉi tiu Mastodon-servilo.", "search_results.statuses_fts_disabled": "Serĉi mesaĝojn laŭ enhavo ne estas ebligita en ĉi tiu Mastodon-servilo.",
"search_results.title": "Search for {q}", "search_results.title": "Serĉ-rezultoj por {q}",
"search_results.total": "{count, number} {count, plural, one {rezulto} other {rezultoj}}", "search_results.total": "{count, number} {count, plural, one {rezulto} other {rezultoj}}",
"server_banner.about_active_users": "People using this server during the last 30 days (Monthly Active Users)", "server_banner.about_active_users": "People using this server during the last 30 days (Monthly Active Users)",
"server_banner.active_users": "active users", "server_banner.active_users": "active users",
"server_banner.administered_by": "Administered by:", "server_banner.administered_by": "Administrata de:",
"server_banner.introduction": "{domain} is part of the decentralized social network powered by {mastodon}.", "server_banner.introduction": "{domain} is part of the decentralized social network powered by {mastodon}.",
"server_banner.learn_more": "Learn more", "server_banner.learn_more": "Learn more",
"server_banner.server_stats": "Server stats:", "server_banner.server_stats": "Statistikoj de la servilo:",
"sign_in_banner.create_account": "Create account", "sign_in_banner.create_account": "Krei konton",
"sign_in_banner.sign_in": "Sign in", "sign_in_banner.sign_in": "Sign in",
"sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.",
"status.admin_account": "Malfermi la kontrolan interfacon por @{name}", "status.admin_account": "Malfermi la kontrolan interfacon por @{name}",
@ -587,13 +587,13 @@
"status.show_more": "Montri pli", "status.show_more": "Montri pli",
"status.show_more_all": "Montri pli ĉiun", "status.show_more_all": "Montri pli ĉiun",
"status.show_original": "Show original", "status.show_original": "Show original",
"status.translate": "Translate", "status.translate": "Traduki",
"status.translated_from_with": "Translated from {lang} using {provider}", "status.translated_from_with": "Tradukita el {lang} per {provider}",
"status.uncached_media_warning": "Nedisponebla", "status.uncached_media_warning": "Nedisponebla",
"status.unmute_conversation": "Malsilentigi la konversacion", "status.unmute_conversation": "Malsilentigi la konversacion",
"status.unpin": "Depingli de profilo", "status.unpin": "Depingli de profilo",
"subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.",
"subscribed_languages.save": "Save changes", "subscribed_languages.save": "Konservi ŝanĝojn",
"subscribed_languages.target": "Change subscribed languages for {target}", "subscribed_languages.target": "Change subscribed languages for {target}",
"suggestions.dismiss": "Forigi la proponon", "suggestions.dismiss": "Forigi la proponon",
"suggestions.header": "Vi povus interesiĝi pri…", "suggestions.header": "Vi povus interesiĝi pri…",
@ -610,7 +610,7 @@
"timeline_hint.resources.followers": "Sekvantoj", "timeline_hint.resources.followers": "Sekvantoj",
"timeline_hint.resources.follows": "Sekvatoj", "timeline_hint.resources.follows": "Sekvatoj",
"timeline_hint.resources.statuses": "Pli malnovaj mesaĝoj", "timeline_hint.resources.statuses": "Pli malnovaj mesaĝoj",
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.counter_by_accounts": "{count, plural, one {{counter} persono} other {{counter} personoj}} dum la pasinta{days, plural, one { tago} other {j {days} tagoj}}",
"trends.trending_now": "Nunaj furoraĵoj", "trends.trending_now": "Nunaj furoraĵoj",
"ui.beforeunload": "Via malneto perdiĝos se vi eliras de Mastodon.", "ui.beforeunload": "Via malneto perdiĝos se vi eliras de Mastodon.",
"units.short.billion": "{count}Md", "units.short.billion": "{count}Md",

@ -2,7 +2,7 @@
"about.blocks": "Servidores moderados", "about.blocks": "Servidores moderados",
"about.contact": "Contacto:", "about.contact": "Contacto:",
"about.disclaimer": "Mastodon es software libre y de código abierto y una marca comercial de Mastodon gGmbH.", "about.disclaimer": "Mastodon es software libre y de código abierto y una marca comercial de Mastodon gGmbH.",
"about.domain_blocks.no_reason_available": "Reason not available", "about.domain_blocks.no_reason_available": "Motivo no disponible",
"about.domain_blocks.preamble": "Mastodon normalmente te permite ver el contenido e interactuar con los usuarios de cualquier otro servidor en el fediverso. Estas son las excepciones que se han hecho en este servidor en particular.", "about.domain_blocks.preamble": "Mastodon normalmente te permite ver el contenido e interactuar con los usuarios de cualquier otro servidor en el fediverso. Estas son las excepciones que se han hecho en este servidor en particular.",
"about.domain_blocks.silenced.explanation": "Normalmente no verás perfiles y contenido de este servidor, a menos que lo busqués explícitamente o sigás alguna cuenta.", "about.domain_blocks.silenced.explanation": "Normalmente no verás perfiles y contenido de este servidor, a menos que lo busqués explícitamente o sigás alguna cuenta.",
"about.domain_blocks.silenced.title": "Limitados", "about.domain_blocks.silenced.title": "Limitados",
@ -49,7 +49,7 @@
"account.mute": "Silenciar a @{name}", "account.mute": "Silenciar a @{name}",
"account.mute_notifications": "Silenciar notificaciones de @{name}", "account.mute_notifications": "Silenciar notificaciones de @{name}",
"account.muted": "Silenciado", "account.muted": "Silenciado",
"account.open_original_page": "Open original page", "account.open_original_page": "Abrir página original",
"account.posts": "Mensajes", "account.posts": "Mensajes",
"account.posts_with_replies": "Mnsjs y resp. públicas", "account.posts_with_replies": "Mnsjs y resp. públicas",
"account.report": "Denunciar a @{name}", "account.report": "Denunciar a @{name}",
@ -292,7 +292,7 @@
"interaction_modal.description.reply": "Con una cuenta en Mastodon, podés responder a este mensaje.", "interaction_modal.description.reply": "Con una cuenta en Mastodon, podés responder a este mensaje.",
"interaction_modal.on_another_server": "En un servidor diferente", "interaction_modal.on_another_server": "En un servidor diferente",
"interaction_modal.on_this_server": "En este servidor", "interaction_modal.on_this_server": "En este servidor",
"interaction_modal.other_server_instructions": "Copia y pega esta URL en la barra de búsqueda de tu aplicación Mastodon favorita o la interfaz web de tu servidor Mastodon.", "interaction_modal.other_server_instructions": "Copiá y pegá esta dirección web en la barra de búsqueda de tu aplicación favorita de Mastodon, o en la interface web de tu servidor de Mastodon.",
"interaction_modal.preamble": "Ya que Mastodon es descentralizado, podés usar tu cuenta existente alojada por otro servidor Mastodon (u otra plataforma compatible, si no tenés una cuenta en ésta).", "interaction_modal.preamble": "Ya que Mastodon es descentralizado, podés usar tu cuenta existente alojada por otro servidor Mastodon (u otra plataforma compatible, si no tenés una cuenta en ésta).",
"interaction_modal.title.favourite": "Marcar como favorito el mensaje de {name}", "interaction_modal.title.favourite": "Marcar como favorito el mensaje de {name}",
"interaction_modal.title.follow": "Seguir a {name}", "interaction_modal.title.follow": "Seguir a {name}",
@ -614,8 +614,8 @@
"trends.trending_now": "Tendencia ahora", "trends.trending_now": "Tendencia ahora",
"ui.beforeunload": "Tu borrador se perderá si abandonás Mastodon.", "ui.beforeunload": "Tu borrador se perderá si abandonás Mastodon.",
"units.short.billion": "{count}MM", "units.short.billion": "{count}MM",
"units.short.million": "{count}M", "units.short.million": "{count} M",
"units.short.thousand": "{count}mil", "units.short.thousand": "{count} mil",
"upload_area.title": "Para subir, arrastrá y soltá", "upload_area.title": "Para subir, arrastrá y soltá",
"upload_button.label": "Agregá imágenes, o un archivo de audio o video", "upload_button.label": "Agregá imágenes, o un archivo de audio o video",
"upload_error.limit": "Se excedió el límite de subida de archivos.", "upload_error.limit": "Se excedió el límite de subida de archivos.",

@ -501,7 +501,7 @@
"report.rules.title": "¿Qué normas se están violando?", "report.rules.title": "¿Qué normas se están violando?",
"report.statuses.subtitle": "Selecciona todos los que correspondan", "report.statuses.subtitle": "Selecciona todos los que correspondan",
"report.statuses.title": "¿Hay alguna publicación que respalde este informe?", "report.statuses.title": "¿Hay alguna publicación que respalde este informe?",
"report.submit": "Publicar", "report.submit": "Enviar",
"report.target": "Reportando", "report.target": "Reportando",
"report.thanks.take_action": "Aquí están tus opciones para controlar lo que ves en Mastodon:", "report.thanks.take_action": "Aquí están tus opciones para controlar lo que ves en Mastodon:",
"report.thanks.take_action_actionable": "Mientras revisamos esto, puedes tomar medidas contra @{name}:", "report.thanks.take_action_actionable": "Mientras revisamos esto, puedes tomar medidas contra @{name}:",

@ -2,7 +2,7 @@
"about.blocks": "Moderoidut palvelimet", "about.blocks": "Moderoidut palvelimet",
"about.contact": "Yhteystiedot:", "about.contact": "Yhteystiedot:",
"about.disclaimer": "Mastodon on vapaa avoimen lähdekoodin ohjelmisto ja Mastodon gGmbH:n tavaramerkki.", "about.disclaimer": "Mastodon on vapaa avoimen lähdekoodin ohjelmisto ja Mastodon gGmbH:n tavaramerkki.",
"about.domain_blocks.no_reason_available": "Reason not available", "about.domain_blocks.no_reason_available": "Syy ei saatavilla",
"about.domain_blocks.preamble": "Mastodonin avulla voit yleensä tarkastella sisältöä ja olla vuorovaikutuksessa käyttäjien kanssa millä tahansa muulla palvelimella fediversessä. Nämä ovat poikkeuksia, jotka on tehty tälle palvelimelle.", "about.domain_blocks.preamble": "Mastodonin avulla voit yleensä tarkastella sisältöä ja olla vuorovaikutuksessa käyttäjien kanssa millä tahansa muulla palvelimella fediversessä. Nämä ovat poikkeuksia, jotka on tehty tälle palvelimelle.",
"about.domain_blocks.silenced.explanation": "Et yleensä näe profiileja ja sisältöä tältä palvelimelta, ellet nimenomaisesti etsi tai valitse sitä seuraamalla.", "about.domain_blocks.silenced.explanation": "Et yleensä näe profiileja ja sisältöä tältä palvelimelta, ellet nimenomaisesti etsi tai valitse sitä seuraamalla.",
"about.domain_blocks.silenced.title": "Rajoitettu", "about.domain_blocks.silenced.title": "Rajoitettu",
@ -49,7 +49,7 @@
"account.mute": "Mykistä @{name}", "account.mute": "Mykistä @{name}",
"account.mute_notifications": "Mykistä ilmoitukset käyttäjältä @{name}", "account.mute_notifications": "Mykistä ilmoitukset käyttäjältä @{name}",
"account.muted": "Mykistetty", "account.muted": "Mykistetty",
"account.open_original_page": "Open original page", "account.open_original_page": "Avaa alkuperäinen sivu",
"account.posts": "Viestit", "account.posts": "Viestit",
"account.posts_with_replies": "Viestit ja vastaukset", "account.posts_with_replies": "Viestit ja vastaukset",
"account.report": "Raportoi @{name}", "account.report": "Raportoi @{name}",

@ -2,7 +2,7 @@
"about.blocks": "Servidores moderados", "about.blocks": "Servidores moderados",
"about.contact": "Contacto:", "about.contact": "Contacto:",
"about.disclaimer": "Mastodon é software libre, de código aberto, e unha marca comercial de Mastodon gGmbH.", "about.disclaimer": "Mastodon é software libre, de código aberto, e unha marca comercial de Mastodon gGmbH.",
"about.domain_blocks.no_reason_available": "Reason not available", "about.domain_blocks.no_reason_available": "Non está indicada a razón",
"about.domain_blocks.preamble": "Mastodon de xeito xeral permíteche ver contidos doutros servidores do fediverso e interactuar coas súas usuarias. Estas son as excepcións que se estabeleceron neste servidor en particular.", "about.domain_blocks.preamble": "Mastodon de xeito xeral permíteche ver contidos doutros servidores do fediverso e interactuar coas súas usuarias. Estas son as excepcións que se estabeleceron neste servidor en particular.",
"about.domain_blocks.silenced.explanation": "Por defecto non verás perfís e contido desde este servidor, a menos que mires de xeito explícito ou optes por seguir ese contido ou usuaria.", "about.domain_blocks.silenced.explanation": "Por defecto non verás perfís e contido desde este servidor, a menos que mires de xeito explícito ou optes por seguir ese contido ou usuaria.",
"about.domain_blocks.silenced.title": "Limitado", "about.domain_blocks.silenced.title": "Limitado",
@ -49,7 +49,7 @@
"account.mute": "Acalar @{name}", "account.mute": "Acalar @{name}",
"account.mute_notifications": "Acalar as notificacións de @{name}", "account.mute_notifications": "Acalar as notificacións de @{name}",
"account.muted": "Acalada", "account.muted": "Acalada",
"account.open_original_page": "Open original page", "account.open_original_page": "Abrir páxina orixinal",
"account.posts": "Publicacións", "account.posts": "Publicacións",
"account.posts_with_replies": "Publicacións e respostas", "account.posts_with_replies": "Publicacións e respostas",
"account.report": "Informar sobre @{name}", "account.report": "Informar sobre @{name}",

@ -2,7 +2,7 @@
"about.blocks": "制限中のサーバー", "about.blocks": "制限中のサーバー",
"about.contact": "連絡先", "about.contact": "連絡先",
"about.disclaimer": "Mastodonは自由なオープンソースソフトウェアでMastodon gGmbHの商標です。", "about.disclaimer": "Mastodonは自由なオープンソースソフトウェアでMastodon gGmbHの商標です。",
"about.domain_blocks.no_reason_available": "Reason not available", "about.domain_blocks.no_reason_available": "制限理由",
"about.domain_blocks.preamble": "Mastodonでは連合先のどのようなサーバーのユーザーとも交流できます。ただし次のサーバーには例外が設定されています。", "about.domain_blocks.preamble": "Mastodonでは連合先のどのようなサーバーのユーザーとも交流できます。ただし次のサーバーには例外が設定されています。",
"about.domain_blocks.silenced.explanation": "このサーバーのプロフィールやコンテンツは、明示的に検索したり、フォローでオプトインしない限り、通常は表示されません。", "about.domain_blocks.silenced.explanation": "このサーバーのプロフィールやコンテンツは、明示的に検索したり、フォローでオプトインしない限り、通常は表示されません。",
"about.domain_blocks.silenced.title": "制限", "about.domain_blocks.silenced.title": "制限",
@ -49,7 +49,7 @@
"account.mute": "@{name}さんをミュート", "account.mute": "@{name}さんをミュート",
"account.mute_notifications": "@{name}さんからの通知を受け取らない", "account.mute_notifications": "@{name}さんからの通知を受け取らない",
"account.muted": "ミュート済み", "account.muted": "ミュート済み",
"account.open_original_page": "Open original page", "account.open_original_page": "元のページを開く",
"account.posts": "投稿", "account.posts": "投稿",
"account.posts_with_replies": "投稿と返信", "account.posts_with_replies": "投稿と返信",
"account.report": "@{name}さんを通報", "account.report": "@{name}さんを通報",
@ -296,7 +296,7 @@
"interaction_modal.description.reply": "Mastodonのアカウントでこの投稿に反応できます。", "interaction_modal.description.reply": "Mastodonのアカウントでこの投稿に反応できます。",
"interaction_modal.on_another_server": "別のサーバー", "interaction_modal.on_another_server": "別のサーバー",
"interaction_modal.on_this_server": "このサーバー", "interaction_modal.on_this_server": "このサーバー",
"interaction_modal.other_server_instructions": "Copy and paste this URL into the search field of your favourite Mastodon app or the web interface of your Mastodon server.", "interaction_modal.other_server_instructions": "このURLをお気に入りのMastodonアプリやMastodonサーバーのWebインターフェースの検索フィールドにコピーして貼り付けます。",
"interaction_modal.preamble": "Mastodonは分散化されているためアカウントを持っていなくても別のMastodonサーバーまたは互換性のあるプラットフォームでホストされているアカウントを使用できます。", "interaction_modal.preamble": "Mastodonは分散化されているためアカウントを持っていなくても別のMastodonサーバーまたは互換性のあるプラットフォームでホストされているアカウントを使用できます。",
"interaction_modal.title.favourite": "{name}さんの投稿をお気に入り", "interaction_modal.title.favourite": "{name}さんの投稿をお気に入り",
"interaction_modal.title.follow": "{name}さんをフォロー", "interaction_modal.title.follow": "{name}さんをフォロー",

@ -461,11 +461,11 @@
"regeneration_indicator.label": "Ielādē…", "regeneration_indicator.label": "Ielādē…",
"regeneration_indicator.sublabel": "Tiek gatavota tava plūsma!", "regeneration_indicator.sublabel": "Tiek gatavota tava plūsma!",
"relative_time.days": "{number}d", "relative_time.days": "{number}d",
"relative_time.full.days": "{number, plural, one {# diena} other {# dienas}} atpakaļ", "relative_time.full.days": "Pirms {number, plural, one {# dienas} other {# dienām}}",
"relative_time.full.hours": "{number, plural, one {# stunda} other {# stundas}} atpakaļ", "relative_time.full.hours": "Pirms {number, plural, one {# stundas} other {# stundām}}",
"relative_time.full.just_now": "tikko", "relative_time.full.just_now": "tikko",
"relative_time.full.minutes": "{number, plural, one {# minūte} other {# minūtes}} atpakaļ", "relative_time.full.minutes": "Pirms {number, plural, one {# minūtes} other {# minūtēm}}",
"relative_time.full.seconds": "{number, plural, one {# sekunde} other {# sekundes}} atpakaļ", "relative_time.full.seconds": "Pirms {number, plural, one {# sekundes} other {# sekundēm}}",
"relative_time.hours": "{number}st", "relative_time.hours": "{number}st",
"relative_time.just_now": "tagad", "relative_time.just_now": "tagad",
"relative_time.minutes": "{number}m", "relative_time.minutes": "{number}m",
@ -553,7 +553,7 @@
"status.edited": "Rediģēts {date}", "status.edited": "Rediģēts {date}",
"status.edited_x_times": "Rediģēts {count, plural, one {{count} reize} other {{count} reizes}}", "status.edited_x_times": "Rediģēts {count, plural, one {{count} reize} other {{count} reizes}}",
"status.embed": "Iestrādāt", "status.embed": "Iestrādāt",
"status.favourite": "Iecienītā", "status.favourite": "Patīk",
"status.filter": "Filtrē šo ziņu", "status.filter": "Filtrē šo ziņu",
"status.filtered": "Filtrēts", "status.filtered": "Filtrēts",
"status.hide": "Slēpt", "status.hide": "Slēpt",

@ -1,8 +1,8 @@
{ {
"about.blocks": "Moderated servers", "about.blocks": "മോഡറേറ്റഡ് സെർവറുകൾ",
"about.contact": "Contact:", "about.contact": "ബന്ധപ്പെടുക:",
"about.disclaimer": "Mastodon is free, open-source software, and a trademark of Mastodon gGmbH.", "about.disclaimer": "Mastodon is free, open-source software, and a trademark of Mastodon gGmbH.",
"about.domain_blocks.no_reason_available": "Reason not available", "about.domain_blocks.no_reason_available": "കാരണം ലഭ്യമല്",
"about.domain_blocks.preamble": "Mastodon generally allows you to view content from and interact with users from any other server in the fediverse. These are the exceptions that have been made on this particular server.", "about.domain_blocks.preamble": "Mastodon generally allows you to view content from and interact with users from any other server in the fediverse. These are the exceptions that have been made on this particular server.",
"about.domain_blocks.silenced.explanation": "You will generally not see profiles and content from this server, unless you explicitly look it up or opt into it by following.", "about.domain_blocks.silenced.explanation": "You will generally not see profiles and content from this server, unless you explicitly look it up or opt into it by following.",
"about.domain_blocks.silenced.title": "Limited", "about.domain_blocks.silenced.title": "Limited",

@ -2,7 +2,7 @@
"about.blocks": "Gemodereerde servers", "about.blocks": "Gemodereerde servers",
"about.contact": "Contact:", "about.contact": "Contact:",
"about.disclaimer": "Mastodon is vrije, opensourcesoftware en een handelsmerk van Mastodon gGmbH.", "about.disclaimer": "Mastodon is vrije, opensourcesoftware en een handelsmerk van Mastodon gGmbH.",
"about.domain_blocks.no_reason_available": "Reason not available", "about.domain_blocks.no_reason_available": "Reden niet beschikbaar",
"about.domain_blocks.preamble": "In het algemeen kun je met Mastodon berichten ontvangen van, en interactie hebben met gebruikers van elke server in de fediverse. Dit zijn de uitzonderingen die op deze specifieke server gelden.", "about.domain_blocks.preamble": "In het algemeen kun je met Mastodon berichten ontvangen van, en interactie hebben met gebruikers van elke server in de fediverse. Dit zijn de uitzonderingen die op deze specifieke server gelden.",
"about.domain_blocks.silenced.explanation": "In het algemeen zie je geen berichten en accounts van deze server, tenzij je berichten expliciet opzoekt of ervoor kiest om een account van deze server te volgen.", "about.domain_blocks.silenced.explanation": "In het algemeen zie je geen berichten en accounts van deze server, tenzij je berichten expliciet opzoekt of ervoor kiest om een account van deze server te volgen.",
"about.domain_blocks.silenced.title": "Beperkt", "about.domain_blocks.silenced.title": "Beperkt",
@ -49,7 +49,7 @@
"account.mute": "@{name} negeren", "account.mute": "@{name} negeren",
"account.mute_notifications": "Meldingen van @{name} negeren", "account.mute_notifications": "Meldingen van @{name} negeren",
"account.muted": "Genegeerd", "account.muted": "Genegeerd",
"account.open_original_page": "Open original page", "account.open_original_page": "Originele pagina openen",
"account.posts": "Berichten", "account.posts": "Berichten",
"account.posts_with_replies": "Berichten en reacties", "account.posts_with_replies": "Berichten en reacties",
"account.report": "@{name} rapporteren", "account.report": "@{name} rapporteren",

@ -151,7 +151,7 @@
"confirmations.block.confirm": "Blokker", "confirmations.block.confirm": "Blokker",
"confirmations.block.message": "Er du sikker på at du vil blokkera {name}?", "confirmations.block.message": "Er du sikker på at du vil blokkera {name}?",
"confirmations.cancel_follow_request.confirm": "Trekk attende førespurnad", "confirmations.cancel_follow_request.confirm": "Trekk attende førespurnad",
"confirmations.cancel_follow_request.message": "Er du sikker på at du vil trekke attende førespurnaden din for å fylgje {name}?", "confirmations.cancel_follow_request.message": "Er du sikker på at du vil trekkje attende førespurnaden din om å fylgje {name}?",
"confirmations.delete.confirm": "Slett", "confirmations.delete.confirm": "Slett",
"confirmations.delete.message": "Er du sikker på at du vil sletta denne statusen?", "confirmations.delete.message": "Er du sikker på at du vil sletta denne statusen?",
"confirmations.delete_list.confirm": "Slett", "confirmations.delete_list.confirm": "Slett",

@ -110,7 +110,7 @@
"column.lists": "Lister", "column.lists": "Lister",
"column.mutes": "Dempede brukere", "column.mutes": "Dempede brukere",
"column.notifications": "Varsler", "column.notifications": "Varsler",
"column.pins": "Pinned toot", "column.pins": "Festede innlegg",
"column.public": "Felles tidslinje", "column.public": "Felles tidslinje",
"column_back_button.label": "Tilbake", "column_back_button.label": "Tilbake",
"column_header.hide_settings": "Skjul innstillinger", "column_header.hide_settings": "Skjul innstillinger",
@ -265,7 +265,7 @@
"footer.directory": "Profilkatalog", "footer.directory": "Profilkatalog",
"footer.get_app": "Last ned appen", "footer.get_app": "Last ned appen",
"footer.invite": "Invitér folk", "footer.invite": "Invitér folk",
"footer.keyboard_shortcuts": "Keyboard shortcuts", "footer.keyboard_shortcuts": "Hurtigtaster",
"footer.privacy_policy": "Personvernregler", "footer.privacy_policy": "Personvernregler",
"footer.source_code": "Vis kildekode", "footer.source_code": "Vis kildekode",
"generic.saved": "Lagret", "generic.saved": "Lagret",
@ -494,26 +494,26 @@
"report.reasons.other": "Det er noe annet", "report.reasons.other": "Det er noe annet",
"report.reasons.other_description": "Problemet passer ikke inn i de andre kategoriene", "report.reasons.other_description": "Problemet passer ikke inn i de andre kategoriene",
"report.reasons.spam": "Det er spam", "report.reasons.spam": "Det er spam",
"report.reasons.spam_description": "Malicious links, fake engagement, or repetitive replies", "report.reasons.spam_description": "Ondsinnede lenker, falsk engasjement eller repeterende svar",
"report.reasons.violation": "Det bryter serverregler", "report.reasons.violation": "Det bryter serverregler",
"report.reasons.violation_description": "Du er klar over at det bryter spesifikke regler", "report.reasons.violation_description": "Du er klar over at det bryter spesifikke regler",
"report.rules.subtitle": "Velg alle som passer", "report.rules.subtitle": "Velg alle som passer",
"report.rules.title": "Hvilke regler brytes?", "report.rules.title": "Hvilke regler brytes?",
"report.statuses.subtitle": "Velg alle som passer", "report.statuses.subtitle": "Velg alle som passer",
"report.statuses.title": "Are there any posts that back up this report?", "report.statuses.title": "Er det noen innlegg som støtter opp under denne rapporten?",
"report.submit": "Send inn", "report.submit": "Send inn",
"report.target": "Rapporterer", "report.target": "Rapporterer",
"report.thanks.take_action": "Her er alternativene dine for å kontrollere hva du ser på Mastodon:", "report.thanks.take_action": "Her er alternativene dine for å kontrollere hva du ser på Mastodon:",
"report.thanks.take_action_actionable": "While we review this, you can take action against @{name}:", "report.thanks.take_action_actionable": "Mens vi går gjennom dette, kan du iverksettet tiltak mot @{name}:",
"report.thanks.title": "Ønsker du ikke å se dette?", "report.thanks.title": "Ønsker du ikke å se dette?",
"report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.thanks.title_actionable": "Takk for at du rapporterer, vi skal se på dette.",
"report.unfollow": "Slutt å følge @{name}", "report.unfollow": "Slutt å følge @{name}",
"report.unfollow_explanation": "Du følger denne kontoen. For ikke å se innleggene deres i din hjem-feed lenger, slutt å følge dem.", "report.unfollow_explanation": "Du følger denne kontoen. For ikke å se innleggene deres i din hjem-feed lenger, slutt å følge dem.",
"report_notification.attached_statuses": "{count, plural,one {{count} innlegg} other {{count} innlegg}} vedlagt", "report_notification.attached_statuses": "{count, plural,one {{count} innlegg} other {{count} innlegg}} vedlagt",
"report_notification.categories.other": "Annet", "report_notification.categories.other": "Annet",
"report_notification.categories.spam": "Søppelpost", "report_notification.categories.spam": "Søppelpost",
"report_notification.categories.violation": "Regelbrudd", "report_notification.categories.violation": "Regelbrudd",
"report_notification.open": "Open report", "report_notification.open": "Åpne rapport",
"search.placeholder": "Søk", "search.placeholder": "Søk",
"search.search_or_paste": "Søk eller lim inn URL", "search.search_or_paste": "Søk eller lim inn URL",
"search_popout.search_format": "Avansert søkeformat", "search_popout.search_format": "Avansert søkeformat",
@ -592,9 +592,9 @@
"status.uncached_media_warning": "Ikke tilgjengelig", "status.uncached_media_warning": "Ikke tilgjengelig",
"status.unmute_conversation": "Ikke demp samtale", "status.unmute_conversation": "Ikke demp samtale",
"status.unpin": "Angre festing på profilen", "status.unpin": "Angre festing på profilen",
"subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", "subscribed_languages.lead": "Bare innlegg på valgte språk vil dukke opp i dine hjem- og liste-tidslinjer etter endringen. Velg ingen for å motta innlegg på alle språk.",
"subscribed_languages.save": "Save changes", "subscribed_languages.save": "Lagre endringer",
"subscribed_languages.target": "Change subscribed languages for {target}", "subscribed_languages.target": "Endre abbonerte språk for {target}",
"suggestions.dismiss": "Utelukk forslaget", "suggestions.dismiss": "Utelukk forslaget",
"suggestions.header": "Du er kanskje interessert i …", "suggestions.header": "Du er kanskje interessert i …",
"tabs_bar.federated_timeline": "Felles", "tabs_bar.federated_timeline": "Felles",
@ -610,7 +610,7 @@
"timeline_hint.resources.followers": "Følgere", "timeline_hint.resources.followers": "Følgere",
"timeline_hint.resources.follows": "Følger", "timeline_hint.resources.follows": "Følger",
"timeline_hint.resources.statuses": "Eldre innlegg", "timeline_hint.resources.statuses": "Eldre innlegg",
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} folk}} {days, plural, one {den siste dagen} other {de siste {days} dagene}}",
"trends.trending_now": "Trender nå", "trends.trending_now": "Trender nå",
"ui.beforeunload": "Din kladd vil bli forkastet om du forlater Mastodon.", "ui.beforeunload": "Din kladd vil bli forkastet om du forlater Mastodon.",
"units.short.billion": "{count}m.ard", "units.short.billion": "{count}m.ard",
@ -629,7 +629,7 @@
"upload_form.video_description": "Beskriv det for folk med hørselstap eller synshemminger", "upload_form.video_description": "Beskriv det for folk med hørselstap eller synshemminger",
"upload_modal.analyzing_picture": "Analyserer bildet …", "upload_modal.analyzing_picture": "Analyserer bildet …",
"upload_modal.apply": "Bruk", "upload_modal.apply": "Bruk",
"upload_modal.applying": "Applying…", "upload_modal.applying": "Utfører…",
"upload_modal.choose_image": "Velg et bilde", "upload_modal.choose_image": "Velg et bilde",
"upload_modal.description_placeholder": "Når du en gang kommer, neste sommer, skal vi atter drikke vin", "upload_modal.description_placeholder": "Når du en gang kommer, neste sommer, skal vi atter drikke vin",
"upload_modal.detect_text": "Oppdag tekst i bildet", "upload_modal.detect_text": "Oppdag tekst i bildet",
@ -638,7 +638,7 @@
"upload_modal.preparing_ocr": "Forbereder OCR…", "upload_modal.preparing_ocr": "Forbereder OCR…",
"upload_modal.preview_label": "Forhåndsvisning ({ratio})", "upload_modal.preview_label": "Forhåndsvisning ({ratio})",
"upload_progress.label": "Laster opp...", "upload_progress.label": "Laster opp...",
"upload_progress.processing": "Processing…", "upload_progress.processing": "Behandler…",
"video.close": "Lukk video", "video.close": "Lukk video",
"video.download": "Last ned fil", "video.download": "Last ned fil",
"video.exit_fullscreen": "Lukk fullskjerm", "video.exit_fullscreen": "Lukk fullskjerm",

@ -9,7 +9,7 @@
"about.domain_blocks.suspended.explanation": "Żadne dane z tego serwera nie będą przetwarzane, przechowywane lub wymieniane, co uniemożliwia jakąkolwiek interakcję lub komunikację z użytkownikami z tego serwera.", "about.domain_blocks.suspended.explanation": "Żadne dane z tego serwera nie będą przetwarzane, przechowywane lub wymieniane, co uniemożliwia jakąkolwiek interakcję lub komunikację z użytkownikami z tego serwera.",
"about.domain_blocks.suspended.title": "Zawieszono", "about.domain_blocks.suspended.title": "Zawieszono",
"about.not_available": "Ta informacja nie została udostępniona na tym serwerze.", "about.not_available": "Ta informacja nie została udostępniona na tym serwerze.",
"about.powered_by": "Zdecentralizowane media społecznościowe w technologii {mastodon}", "about.powered_by": "Zdecentralizowane media społecznościowe napędzane przez {mastodon}",
"about.rules": "Regulamin serwera", "about.rules": "Regulamin serwera",
"account.account_note_header": "Notatka", "account.account_note_header": "Notatka",
"account.add_or_remove_from_list": "Dodaj lub usuń z list", "account.add_or_remove_from_list": "Dodaj lub usuń z list",
@ -336,7 +336,7 @@
"keyboard_shortcuts.start": "aby otworzyć kolumnę „Rozpocznij”", "keyboard_shortcuts.start": "aby otworzyć kolumnę „Rozpocznij”",
"keyboard_shortcuts.toggle_hidden": "aby wyświetlić lub ukryć wpis spod CW", "keyboard_shortcuts.toggle_hidden": "aby wyświetlić lub ukryć wpis spod CW",
"keyboard_shortcuts.toggle_sensitivity": "by pokazać/ukryć multimedia", "keyboard_shortcuts.toggle_sensitivity": "by pokazać/ukryć multimedia",
"keyboard_shortcuts.toot": "aby utworzyć nowy wpis", "keyboard_shortcuts.toot": "Stwórz nowy post",
"keyboard_shortcuts.unfocus": "aby opuścić pole wyszukiwania/pisania", "keyboard_shortcuts.unfocus": "aby opuścić pole wyszukiwania/pisania",
"keyboard_shortcuts.up": "aby przejść na górę listy", "keyboard_shortcuts.up": "aby przejść na górę listy",
"lightbox.close": "Zamknij", "lightbox.close": "Zamknij",

@ -1,16 +1,16 @@
{ {
"about.blocks": "Moderated servers", "about.blocks": "Moderated servers",
"about.contact": "Contact:", "about.contact": "Kontakt:",
"about.disclaimer": "Mastodon is free, open-source software, and a trademark of Mastodon gGmbH.", "about.disclaimer": "Mastodon is free, open-source software, and a trademark of Mastodon gGmbH.",
"about.domain_blocks.no_reason_available": "Reason not available", "about.domain_blocks.no_reason_available": "Reason not available",
"about.domain_blocks.preamble": "Mastodon generally allows you to view content from and interact with users from any other server in the fediverse. These are the exceptions that have been made on this particular server.", "about.domain_blocks.preamble": "Mastodon generally allows you to view content from and interact with users from any other server in the fediverse. These are the exceptions that have been made on this particular server.",
"about.domain_blocks.silenced.explanation": "You will generally not see profiles and content from this server, unless you explicitly look it up or opt into it by following.", "about.domain_blocks.silenced.explanation": "You will generally not see profiles and content from this server, unless you explicitly look it up or opt into it by following.",
"about.domain_blocks.silenced.title": "Limited", "about.domain_blocks.silenced.title": "Obmedzená",
"about.domain_blocks.suspended.explanation": "No data from this server will be processed, stored or exchanged, making any interaction or communication with users from this server impossible.", "about.domain_blocks.suspended.explanation": "No data from this server will be processed, stored or exchanged, making any interaction or communication with users from this server impossible.",
"about.domain_blocks.suspended.title": "Suspended", "about.domain_blocks.suspended.title": "Vylúčený/á",
"about.not_available": "This information has not been made available on this server.", "about.not_available": "This information has not been made available on this server.",
"about.powered_by": "Decentralized social media powered by {mastodon}", "about.powered_by": "Decentralized social media powered by {mastodon}",
"about.rules": "Server rules", "about.rules": "Serverové pravidlá",
"account.account_note_header": "Poznámka", "account.account_note_header": "Poznámka",
"account.add_or_remove_from_list": "Pridaj do, alebo odober zo zoznamov", "account.add_or_remove_from_list": "Pridaj do, alebo odober zo zoznamov",
"account.badges.bot": "Bot", "account.badges.bot": "Bot",
@ -26,8 +26,8 @@
"account.edit_profile": "Uprav profil", "account.edit_profile": "Uprav profil",
"account.enable_notifications": "Oboznamuj ma, keď má @{name} príspevky", "account.enable_notifications": "Oboznamuj ma, keď má @{name} príspevky",
"account.endorse": "Zobrazuj na profile", "account.endorse": "Zobrazuj na profile",
"account.featured_tags.last_status_at": "Last post on {date}", "account.featured_tags.last_status_at": "Posledný príspevok dňa {date}",
"account.featured_tags.last_status_never": "No posts", "account.featured_tags.last_status_never": "Žiadne príspevky",
"account.featured_tags.title": "{name}'s featured hashtags", "account.featured_tags.title": "{name}'s featured hashtags",
"account.follow": "Nasleduj", "account.follow": "Nasleduj",
"account.followers": "Sledujúci", "account.followers": "Sledujúci",
@ -37,9 +37,9 @@
"account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}",
"account.follows.empty": "Tento používateľ ešte nikoho nenasleduje.", "account.follows.empty": "Tento používateľ ešte nikoho nenasleduje.",
"account.follows_you": "Nasleduje ťa", "account.follows_you": "Nasleduje ťa",
"account.go_to_profile": "Go to profile", "account.go_to_profile": "Prejdi na profil",
"account.hide_reblogs": "Skry vyzdvihnutia od @{name}", "account.hide_reblogs": "Skry vyzdvihnutia od @{name}",
"account.joined_short": "Joined", "account.joined_short": "Pridal/a sa",
"account.languages": "Change subscribed languages", "account.languages": "Change subscribed languages",
"account.link_verified_on": "Vlastníctvo tohto odkazu bolo skontrolované {date}", "account.link_verified_on": "Vlastníctvo tohto odkazu bolo skontrolované {date}",
"account.locked_info": "Stav súkromia pre tento účet je nastavený na zamknutý. Jeho vlastník sám prehodnocuje, kto ho môže sledovať.", "account.locked_info": "Stav súkromia pre tento účet je nastavený na zamknutý. Jeho vlastník sám prehodnocuje, kto ho môže sledovať.",
@ -51,7 +51,7 @@
"account.muted": "Nevšímaný/á", "account.muted": "Nevšímaný/á",
"account.open_original_page": "Open original page", "account.open_original_page": "Open original page",
"account.posts": "Príspevky/ov", "account.posts": "Príspevky/ov",
"account.posts_with_replies": "Príspevky, aj s odpoveďami", "account.posts_with_replies": "Príspevky a odpovede",
"account.report": "Nahlás @{name}", "account.report": "Nahlás @{name}",
"account.requested": "Čaká na schválenie. Klikni pre zrušenie žiadosti", "account.requested": "Čaká na schválenie. Klikni pre zrušenie žiadosti",
"account.share": "Zdieľaj @{name} profil", "account.share": "Zdieľaj @{name} profil",
@ -84,20 +84,20 @@
"bundle_column_error.error.body": "The requested page could not be rendered. It could be due to a bug in our code, or a browser compatibility issue.", "bundle_column_error.error.body": "The requested page could not be rendered. It could be due to a bug in our code, or a browser compatibility issue.",
"bundle_column_error.error.title": "Oh, no!", "bundle_column_error.error.title": "Oh, no!",
"bundle_column_error.network.body": "There was an error when trying to load this page. This could be due to a temporary problem with your internet connection or this server.", "bundle_column_error.network.body": "There was an error when trying to load this page. This could be due to a temporary problem with your internet connection or this server.",
"bundle_column_error.network.title": "Network error", "bundle_column_error.network.title": "Chyba siete",
"bundle_column_error.retry": "Skús to znova", "bundle_column_error.retry": "Skús to znova",
"bundle_column_error.return": "Go back home", "bundle_column_error.return": "Prejdi späť na domovskú stránku",
"bundle_column_error.routing.body": "The requested page could not be found. Are you sure the URL in the address bar is correct?", "bundle_column_error.routing.body": "The requested page could not be found. Are you sure the URL in the address bar is correct?",
"bundle_column_error.routing.title": "404", "bundle_column_error.routing.title": "404",
"bundle_modal_error.close": "Zatvor", "bundle_modal_error.close": "Zatvor",
"bundle_modal_error.message": "Nastala chyba pri načítaní tohto komponentu.", "bundle_modal_error.message": "Nastala chyba pri načítaní tohto komponentu.",
"bundle_modal_error.retry": "Skúsiť znova", "bundle_modal_error.retry": "Skúsiť znova",
"closed_registrations.other_server_instructions": "Since Mastodon is decentralized, you can create an account on another server and still interact with this one.", "closed_registrations.other_server_instructions": "Since Mastodon is decentralized, you can create an account on another server and still interact with this one.",
"closed_registrations_modal.description": "Creating an account on {domain} is currently not possible, but please keep in mind that you do not need an account specifically on {domain} to use Mastodon.", "closed_registrations_modal.description": "Vytvorenie účtu na {domain} nie je v súčasnosti možné, ale majte prosím na pamäti, že nepotrebujete účet práve na {domain}, aby bolo možné používať Mastodon.",
"closed_registrations_modal.find_another_server": "Find another server", "closed_registrations_modal.find_another_server": "Nájdi iný server",
"closed_registrations_modal.preamble": "Mastodon is decentralized, so no matter where you create your account, you will be able to follow and interact with anyone on this server. You can even self-host it!", "closed_registrations_modal.preamble": "Mastodon is decentralized, so no matter where you create your account, you will be able to follow and interact with anyone on this server. You can even self-host it!",
"closed_registrations_modal.title": "Signing up on Mastodon", "closed_registrations_modal.title": "Registrácia na Mastodon",
"column.about": "About", "column.about": "O tomto serveri",
"column.blocks": "Blokovaní užívatelia", "column.blocks": "Blokovaní užívatelia",
"column.bookmarks": "Záložky", "column.bookmarks": "Záložky",
"column.community": "Miestna časová os", "column.community": "Miestna časová os",
@ -175,13 +175,13 @@
"conversation.mark_as_read": "Označ za prečítané", "conversation.mark_as_read": "Označ za prečítané",
"conversation.open": "Ukáž konverzáciu", "conversation.open": "Ukáž konverzáciu",
"conversation.with": "S {names}", "conversation.with": "S {names}",
"copypaste.copied": "Copied", "copypaste.copied": "Skopírované",
"copypaste.copy": "Copy", "copypaste.copy": "Kopíruj",
"directory.federated": "Zo známého fedivesmíru", "directory.federated": "Zo známého fedivesmíru",
"directory.local": "Iba z {domain}", "directory.local": "Iba z {domain}",
"directory.new_arrivals": "Nové príchody", "directory.new_arrivals": "Nové príchody",
"directory.recently_active": "Nedávno aktívne", "directory.recently_active": "Nedávno aktívne",
"disabled_account_banner.account_settings": "Account settings", "disabled_account_banner.account_settings": "Nastavenia účtu",
"disabled_account_banner.text": "Your account {disabledAccount} is currently disabled.", "disabled_account_banner.text": "Your account {disabledAccount} is currently disabled.",
"dismissable_banner.community_timeline": "These are the most recent public posts from people whose accounts are hosted by {domain}.", "dismissable_banner.community_timeline": "These are the most recent public posts from people whose accounts are hosted by {domain}.",
"dismissable_banner.dismiss": "Dismiss", "dismissable_banner.dismiss": "Dismiss",
@ -264,10 +264,10 @@
"footer.about": "About", "footer.about": "About",
"footer.directory": "Profiles directory", "footer.directory": "Profiles directory",
"footer.get_app": "Get the app", "footer.get_app": "Get the app",
"footer.invite": "Invite people", "footer.invite": "Pozvi ľudí",
"footer.keyboard_shortcuts": "Keyboard shortcuts", "footer.keyboard_shortcuts": "Klávesové skratky",
"footer.privacy_policy": "Privacy policy", "footer.privacy_policy": "Zásady súkromia",
"footer.source_code": "View source code", "footer.source_code": "Zobraziť zdrojový kód",
"generic.saved": "Uložené", "generic.saved": "Uložené",
"getting_started.heading": "Začni tu", "getting_started.heading": "Začni tu",
"hashtag.column_header.tag_mode.all": "a {additional}", "hashtag.column_header.tag_mode.all": "a {additional}",
@ -290,14 +290,14 @@
"interaction_modal.description.follow": "With an account on Mastodon, you can follow {name} to receive their posts in your home feed.", "interaction_modal.description.follow": "With an account on Mastodon, you can follow {name} to receive their posts in your home feed.",
"interaction_modal.description.reblog": "With an account on Mastodon, you can boost this post to share it with your own followers.", "interaction_modal.description.reblog": "With an account on Mastodon, you can boost this post to share it with your own followers.",
"interaction_modal.description.reply": "With an account on Mastodon, you can respond to this post.", "interaction_modal.description.reply": "With an account on Mastodon, you can respond to this post.",
"interaction_modal.on_another_server": "On a different server", "interaction_modal.on_another_server": "Na inom serveri",
"interaction_modal.on_this_server": "On this server", "interaction_modal.on_this_server": "Na tomto serveri",
"interaction_modal.other_server_instructions": "Copy and paste this URL into the search field of your favourite Mastodon app or the web interface of your Mastodon server.", "interaction_modal.other_server_instructions": "Copy and paste this URL into the search field of your favourite Mastodon app or the web interface of your Mastodon server.",
"interaction_modal.preamble": "Since Mastodon is decentralized, you can use your existing account hosted by another Mastodon server or compatible platform if you don't have an account on this one.", "interaction_modal.preamble": "Since Mastodon is decentralized, you can use your existing account hosted by another Mastodon server or compatible platform if you don't have an account on this one.",
"interaction_modal.title.favourite": "Favourite {name}'s post", "interaction_modal.title.favourite": "Favourite {name}'s post",
"interaction_modal.title.follow": "Follow {name}", "interaction_modal.title.follow": "Nasleduj {name}",
"interaction_modal.title.reblog": "Boost {name}'s post", "interaction_modal.title.reblog": "Vyzdvihni {name}ov/in príspevok",
"interaction_modal.title.reply": "Reply to {name}'s post", "interaction_modal.title.reply": "Odpovedz na {name}ov/in príspevok",
"intervals.full.days": "{number, plural, one {# deň} few {# dní} many {# dní} other {# dní}}", "intervals.full.days": "{number, plural, one {# deň} few {# dní} many {# dní} other {# dní}}",
"intervals.full.hours": "{number, plural, one {# hodina} few {# hodín} many {# hodín} other {# hodín}}", "intervals.full.hours": "{number, plural, one {# hodina} few {# hodín} many {# hodín} other {# hodín}}",
"intervals.full.minutes": "{number, plural, one {# minúta} few {# minút} many {# minút} other {# minút}}", "intervals.full.minutes": "{number, plural, one {# minúta} few {# minút} many {# minút} other {# minút}}",
@ -364,7 +364,7 @@
"mute_modal.duration": "Trvanie", "mute_modal.duration": "Trvanie",
"mute_modal.hide_notifications": "Skry oznámenia od tohto používateľa?", "mute_modal.hide_notifications": "Skry oznámenia od tohto používateľa?",
"mute_modal.indefinite": "Bez obmedzenia", "mute_modal.indefinite": "Bez obmedzenia",
"navigation_bar.about": "About", "navigation_bar.about": "O tomto serveri",
"navigation_bar.blocks": "Blokovaní užívatelia", "navigation_bar.blocks": "Blokovaní užívatelia",
"navigation_bar.bookmarks": "Záložky", "navigation_bar.bookmarks": "Záložky",
"navigation_bar.community_timeline": "Miestna časová os", "navigation_bar.community_timeline": "Miestna časová os",
@ -385,7 +385,7 @@
"navigation_bar.pins": "Pripnuté príspevky", "navigation_bar.pins": "Pripnuté príspevky",
"navigation_bar.preferences": "Nastavenia", "navigation_bar.preferences": "Nastavenia",
"navigation_bar.public_timeline": "Federovaná časová os", "navigation_bar.public_timeline": "Federovaná časová os",
"navigation_bar.search": "Search", "navigation_bar.search": "Hľadaj",
"navigation_bar.security": "Zabezbečenie", "navigation_bar.security": "Zabezbečenie",
"not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.", "not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.",
"notification.admin.report": "{name} nahlásil/a {target}", "notification.admin.report": "{name} nahlásil/a {target}",
@ -455,8 +455,8 @@
"privacy.public.short": "Verejné", "privacy.public.short": "Verejné",
"privacy.unlisted.long": "Visible for all, but opted-out of discovery features", "privacy.unlisted.long": "Visible for all, but opted-out of discovery features",
"privacy.unlisted.short": "Verejne, ale nezobraziť v osi", "privacy.unlisted.short": "Verejne, ale nezobraziť v osi",
"privacy_policy.last_updated": "Last updated {date}", "privacy_policy.last_updated": "Posledná úprava {date}",
"privacy_policy.title": "Privacy Policy", "privacy_policy.title": "Zásady súkromia",
"refresh": "Obnoviť", "refresh": "Obnoviť",
"regeneration_indicator.label": "Načítava sa…", "regeneration_indicator.label": "Načítava sa…",
"regeneration_indicator.sublabel": "Tvoja domovská nástenka sa pripravuje!", "regeneration_indicator.sublabel": "Tvoja domovská nástenka sa pripravuje!",
@ -532,12 +532,12 @@
"search_results.total": "{count, number} {count, plural, one {výsledok} many {výsledkov} other {výsledky}}", "search_results.total": "{count, number} {count, plural, one {výsledok} many {výsledkov} other {výsledky}}",
"server_banner.about_active_users": "People using this server during the last 30 days (Monthly Active Users)", "server_banner.about_active_users": "People using this server during the last 30 days (Monthly Active Users)",
"server_banner.active_users": "active users", "server_banner.active_users": "active users",
"server_banner.administered_by": "Administered by:", "server_banner.administered_by": "Správcom je:",
"server_banner.introduction": "{domain} is part of the decentralized social network powered by {mastodon}.", "server_banner.introduction": "{domain} is part of the decentralized social network powered by {mastodon}.",
"server_banner.learn_more": "Learn more", "server_banner.learn_more": "Zisti viac",
"server_banner.server_stats": "Server stats:", "server_banner.server_stats": "Serverové štatistiky:",
"sign_in_banner.create_account": "Create account", "sign_in_banner.create_account": "Vytvor účet",
"sign_in_banner.sign_in": "Sign in", "sign_in_banner.sign_in": "Prihlás sa",
"sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.",
"status.admin_account": "Otvor moderovacie rozhranie užívateľa @{name}", "status.admin_account": "Otvor moderovacie rozhranie užívateľa @{name}",
"status.admin_status": "Otvor tento príspevok v moderovacom rozhraní", "status.admin_status": "Otvor tento príspevok v moderovacom rozhraní",
@ -575,7 +575,7 @@
"status.reblogs.empty": "Nikto ešte nevyzdvihol tento príspevok. Keď tak niekto urobí, bude to zobrazené práve tu.", "status.reblogs.empty": "Nikto ešte nevyzdvihol tento príspevok. Keď tak niekto urobí, bude to zobrazené práve tu.",
"status.redraft": "Vymaž a prepíš", "status.redraft": "Vymaž a prepíš",
"status.remove_bookmark": "Odstráň záložku", "status.remove_bookmark": "Odstráň záložku",
"status.replied_to": "Replied to {name}", "status.replied_to": "Odpoveď na {name}",
"status.reply": "Odpovedať", "status.reply": "Odpovedať",
"status.replyAll": "Odpovedz na diskusiu", "status.replyAll": "Odpovedz na diskusiu",
"status.report": "Nahlás @{name}", "status.report": "Nahlás @{name}",
@ -586,14 +586,14 @@
"status.show_less_all": "Všetkým ukáž menej", "status.show_less_all": "Všetkým ukáž menej",
"status.show_more": "Ukáž viac", "status.show_more": "Ukáž viac",
"status.show_more_all": "Všetkým ukáž viac", "status.show_more_all": "Všetkým ukáž viac",
"status.show_original": "Show original", "status.show_original": "Ukáž pôvodný",
"status.translate": "Translate", "status.translate": "Preložiť",
"status.translated_from_with": "Translated from {lang} using {provider}", "status.translated_from_with": "Translated from {lang} using {provider}",
"status.uncached_media_warning": "Nedostupný/é", "status.uncached_media_warning": "Nedostupný/é",
"status.unmute_conversation": "Prestaň si nevšímať konverzáciu", "status.unmute_conversation": "Prestaň si nevšímať konverzáciu",
"status.unpin": "Odopni z profilu", "status.unpin": "Odopni z profilu",
"subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.",
"subscribed_languages.save": "Save changes", "subscribed_languages.save": "Ulož zmeny",
"subscribed_languages.target": "Change subscribed languages for {target}", "subscribed_languages.target": "Change subscribed languages for {target}",
"suggestions.dismiss": "Zavrhni návrh", "suggestions.dismiss": "Zavrhni návrh",
"suggestions.header": "Mohlo by ťa zaujímať…", "suggestions.header": "Mohlo by ťa zaujímať…",

@ -2,7 +2,7 @@
"about.blocks": "Shërbyes të moderuar", "about.blocks": "Shërbyes të moderuar",
"about.contact": "Kontakt:", "about.contact": "Kontakt:",
"about.disclaimer": "Mastodon-i është software i lirë, me burim të hapët dhe shenjë tregtare e Mastodon gGmbH.", "about.disclaimer": "Mastodon-i është software i lirë, me burim të hapët dhe shenjë tregtare e Mastodon gGmbH.",
"about.domain_blocks.no_reason_available": "Reason not available", "about.domain_blocks.no_reason_available": "Ska arsye",
"about.domain_blocks.preamble": "Mastodon-i ju lë përgjithësisht të shihni lëndë prej përdoruesish dhe të ndërveproni me ta nga cilido shërbyes tjetër qofshin në fedivers. Ka përjashtime që janë bërë në këtë shërbyes të dhënë.", "about.domain_blocks.preamble": "Mastodon-i ju lë përgjithësisht të shihni lëndë prej përdoruesish dhe të ndërveproni me ta nga cilido shërbyes tjetër qofshin në fedivers. Ka përjashtime që janë bërë në këtë shërbyes të dhënë.",
"about.domain_blocks.silenced.explanation": "Përgjithësisht sdo të shihni profile dhe lëndë nga ky shërbyes, veç në i kërkofshi shprehimisht apo zgjidhni të bëhet kjo, duke i ndjekur.", "about.domain_blocks.silenced.explanation": "Përgjithësisht sdo të shihni profile dhe lëndë nga ky shërbyes, veç në i kërkofshi shprehimisht apo zgjidhni të bëhet kjo, duke i ndjekur.",
"about.domain_blocks.silenced.title": "E kufizuar", "about.domain_blocks.silenced.title": "E kufizuar",
@ -49,7 +49,7 @@
"account.mute": "Heshtoni @{name}", "account.mute": "Heshtoni @{name}",
"account.mute_notifications": "Heshtoji njoftimet prej @{name}", "account.mute_notifications": "Heshtoji njoftimet prej @{name}",
"account.muted": "Heshtuar", "account.muted": "Heshtuar",
"account.open_original_page": "Open original page", "account.open_original_page": "Hap faqen origjinale",
"account.posts": "Mesazhe", "account.posts": "Mesazhe",
"account.posts_with_replies": "Mesazhe dhe përgjigje", "account.posts_with_replies": "Mesazhe dhe përgjigje",
"account.report": "Raportojeni @{name}", "account.report": "Raportojeni @{name}",
@ -292,7 +292,7 @@
"interaction_modal.description.reply": "Me një llogari në Mastodon, mund ti përgjigjeni këtij postimi.", "interaction_modal.description.reply": "Me një llogari në Mastodon, mund ti përgjigjeni këtij postimi.",
"interaction_modal.on_another_server": "Në një tjetër shërbyes", "interaction_modal.on_another_server": "Në një tjetër shërbyes",
"interaction_modal.on_this_server": "Në këtë shërbyes", "interaction_modal.on_this_server": "Në këtë shërbyes",
"interaction_modal.other_server_instructions": "Copy and paste this URL into the search field of your favourite Mastodon app or the web interface of your Mastodon server.", "interaction_modal.other_server_instructions": "Kopjojeni dhe ngjiteni këtë URL te fusha e kërkimeve të aplikacionit tuaj të parapëlqyer Mastodon, ose të ndërfaqes web të shërbyesit tuaj Mastodon.",
"interaction_modal.preamble": "Ngaqë Mastodon-i është i decentralizuar, mund të përdorni llogarinë tuaj ekzistuese të sterhuar nga një tjetër shërbyes Mastodon, ose platformë e përputhshme, nëse skeni një llogari në këtë shërbyes.", "interaction_modal.preamble": "Ngaqë Mastodon-i është i decentralizuar, mund të përdorni llogarinë tuaj ekzistuese të sterhuar nga një tjetër shërbyes Mastodon, ose platformë e përputhshme, nëse skeni një llogari në këtë shërbyes.",
"interaction_modal.title.favourite": "Parapëlqejeni postimin e {name}", "interaction_modal.title.favourite": "Parapëlqejeni postimin e {name}",
"interaction_modal.title.follow": "Ndiq {name}", "interaction_modal.title.follow": "Ndiq {name}",

@ -4,11 +4,11 @@
"about.disclaimer": "Mastodon เป็นซอฟต์แวร์เสรี โอเพนซอร์ส และเครื่องหมายการค้าของ Mastodon gGmbH", "about.disclaimer": "Mastodon เป็นซอฟต์แวร์เสรี โอเพนซอร์ส และเครื่องหมายการค้าของ Mastodon gGmbH",
"about.domain_blocks.no_reason_available": "เหตุผลไม่พร้อมใช้งาน", "about.domain_blocks.no_reason_available": "เหตุผลไม่พร้อมใช้งาน",
"about.domain_blocks.preamble": "โดยทั่วไป Mastodon อนุญาตให้คุณดูเนื้อหาจากและโต้ตอบกับผู้ใช้จากเซิร์ฟเวอร์อื่นใดในจักรวาลสหพันธ์ นี่คือข้อยกเว้นที่ทำขึ้นในเซิร์ฟเวอร์นี้โดยเฉพาะ", "about.domain_blocks.preamble": "โดยทั่วไป Mastodon อนุญาตให้คุณดูเนื้อหาจากและโต้ตอบกับผู้ใช้จากเซิร์ฟเวอร์อื่นใดในจักรวาลสหพันธ์ นี่คือข้อยกเว้นที่ทำขึ้นในเซิร์ฟเวอร์นี้โดยเฉพาะ",
"about.domain_blocks.silenced.explanation": "You will generally not see profiles and content from this server, unless you explicitly look it up or opt into it by following.", "about.domain_blocks.silenced.explanation": "โดยทั่วไปคุณจะไม่เห็นโปรไฟล์และเนื้อหาจากเซิร์ฟเวอร์นี้ เว้นแต่คุณจะค้นหาเซิร์ฟเวอร์หรือเลือกรับเซิร์ฟเวอร์โดยการติดตามอย่างชัดเจน",
"about.domain_blocks.silenced.title": "จำกัดอยู่", "about.domain_blocks.silenced.title": "จำกัดอยู่",
"about.domain_blocks.suspended.explanation": "จะไม่ประมวลผล จัดเก็บ หรือแลกเปลี่ยนข้อมูลจากเซิร์ฟเวอร์นี้ ทำให้การโต้ตอบหรือการสื่อสารใด ๆ กับผู้ใช้จากเซิร์ฟเวอร์นี้เป็นไปไม่ได้", "about.domain_blocks.suspended.explanation": "จะไม่ประมวลผล จัดเก็บ หรือแลกเปลี่ยนข้อมูลจากเซิร์ฟเวอร์นี้ ทำให้การโต้ตอบหรือการสื่อสารใด ๆ กับผู้ใช้จากเซิร์ฟเวอร์นี้เป็นไปไม่ได้",
"about.domain_blocks.suspended.title": "ระงับอยู่", "about.domain_blocks.suspended.title": "ระงับอยู่",
"about.not_available": "This information has not been made available on this server.", "about.not_available": "ไม่ได้ทำให้ข้อมูลนี้พร้อมใช้งานในเซิร์ฟเวอร์นี้",
"about.powered_by": "สื่อสังคมแบบกระจายศูนย์ที่ขับเคลื่อนโดย {mastodon}", "about.powered_by": "สื่อสังคมแบบกระจายศูนย์ที่ขับเคลื่อนโดย {mastodon}",
"about.rules": "กฎของเซิร์ฟเวอร์", "about.rules": "กฎของเซิร์ฟเวอร์",
"account.account_note_header": "หมายเหตุ", "account.account_note_header": "หมายเหตุ",
@ -93,9 +93,9 @@
"bundle_modal_error.message": "มีบางอย่างผิดพลาดขณะโหลดส่วนประกอบนี้", "bundle_modal_error.message": "มีบางอย่างผิดพลาดขณะโหลดส่วนประกอบนี้",
"bundle_modal_error.retry": "ลองอีกครั้ง", "bundle_modal_error.retry": "ลองอีกครั้ง",
"closed_registrations.other_server_instructions": "เนื่องจาก Mastodon เป็นแบบกระจายศูนย์ คุณสามารถสร้างบัญชีในเซิร์ฟเวอร์อื่นและยังคงโต้ตอบกับเซิร์ฟเวอร์นี้", "closed_registrations.other_server_instructions": "เนื่องจาก Mastodon เป็นแบบกระจายศูนย์ คุณสามารถสร้างบัญชีในเซิร์ฟเวอร์อื่นและยังคงโต้ตอบกับเซิร์ฟเวอร์นี้",
"closed_registrations_modal.description": "Creating an account on {domain} is currently not possible, but please keep in mind that you do not need an account specifically on {domain} to use Mastodon.", "closed_registrations_modal.description": "ไม่สามารถสร้างบัญชีใน {domain} ได้ในปัจจุบัน แต่โปรดจำไว้ว่าคุณไม่จำเป็นต้องมีบัญชีใน {domain} โดยเฉพาะเพื่อใช้ Mastodon",
"closed_registrations_modal.find_another_server": "ค้นหาเซิร์ฟเวอร์อื่น", "closed_registrations_modal.find_another_server": "ค้นหาเซิร์ฟเวอร์อื่น",
"closed_registrations_modal.preamble": "Mastodon is decentralized, so no matter where you create your account, you will be able to follow and interact with anyone on this server. You can even self-host it!", "closed_registrations_modal.preamble": "Mastodon เป็นแบบกระจายศูนย์ ดังนั้นไม่ว่าคุณจะสร้างบัญชีของคุณที่ใด คุณจะสามารถติดตามและโต้ตอบกับใครก็ตามในเซิร์ฟเวอร์นี้ คุณยังสามารถโฮสต์บัญชีด้วยตนเองได้อีกด้วย!",
"closed_registrations_modal.title": "การลงทะเบียนใน Mastodon", "closed_registrations_modal.title": "การลงทะเบียนใน Mastodon",
"column.about": "เกี่ยวกับ", "column.about": "เกี่ยวกับ",
"column.blocks": "ผู้ใช้ที่ปิดกั้นอยู่", "column.blocks": "ผู้ใช้ที่ปิดกั้นอยู่",
@ -127,7 +127,7 @@
"compose.language.search": "ค้นหาภาษา...", "compose.language.search": "ค้นหาภาษา...",
"compose_form.direct_message_warning_learn_more": "เรียนรู้เพิ่มเติม", "compose_form.direct_message_warning_learn_more": "เรียนรู้เพิ่มเติม",
"compose_form.encryption_warning": "โพสต์ใน Mastodon ไม่ได้เข้ารหัสแบบต้นทางถึงปลายทาง อย่าแบ่งปันข้อมูลที่ละเอียดอ่อนใด ๆ ผ่าน Mastodon", "compose_form.encryption_warning": "โพสต์ใน Mastodon ไม่ได้เข้ารหัสแบบต้นทางถึงปลายทาง อย่าแบ่งปันข้อมูลที่ละเอียดอ่อนใด ๆ ผ่าน Mastodon",
"compose_form.hashtag_warning": "จะไม่แสดงรายการโพสต์นี้ภายใต้แฮชแท็กใด ๆ เนื่องจากไม่อยู่ในรายการ เฉพาะโพสต์สาธารณะเท่านั้นที่สามารถค้นหาได้โดยแฮชแท็ก", "compose_form.hashtag_warning": "จะไม่แสดงรายการโพสต์นี้ภายใต้แฮชแท็กใด ๆ เนื่องจากโพสต์ไม่อยู่ในรายการ เฉพาะโพสต์สาธารณะเท่านั้นที่สามารถค้นหาได้โดยแฮชแท็ก",
"compose_form.lock_disclaimer": "บัญชีของคุณไม่ได้ {locked} ใครก็ตามสามารถติดตามคุณเพื่อดูโพสต์สำหรับผู้ติดตามเท่านั้นของคุณ", "compose_form.lock_disclaimer": "บัญชีของคุณไม่ได้ {locked} ใครก็ตามสามารถติดตามคุณเพื่อดูโพสต์สำหรับผู้ติดตามเท่านั้นของคุณ",
"compose_form.lock_disclaimer.lock": "ล็อคอยู่", "compose_form.lock_disclaimer.lock": "ล็อคอยู่",
"compose_form.placeholder": "คุณกำลังคิดอะไรอยู่?", "compose_form.placeholder": "คุณกำลังคิดอะไรอยู่?",
@ -239,7 +239,7 @@
"explore.trending_links": "ข่าว", "explore.trending_links": "ข่าว",
"explore.trending_statuses": "โพสต์", "explore.trending_statuses": "โพสต์",
"explore.trending_tags": "แฮชแท็ก", "explore.trending_tags": "แฮชแท็ก",
"filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", "filter_modal.added.context_mismatch_explanation": "หมวดหมู่ตัวกรองนี้ไม่ได้นำไปใช้กับบริบทที่คุณได้เข้าถึงโพสต์นี้ หากคุณต้องการกรองโพสต์ในบริบทนี้ด้วย คุณจะต้องแก้ไขตัวกรอง",
"filter_modal.added.context_mismatch_title": "บริบทไม่ตรงกัน!", "filter_modal.added.context_mismatch_title": "บริบทไม่ตรงกัน!",
"filter_modal.added.expired_explanation": "หมวดหมู่ตัวกรองนี้หมดอายุแล้ว คุณจะต้องเปลี่ยนวันหมดอายุสำหรับหมวดหมู่เพื่อนำไปใช้", "filter_modal.added.expired_explanation": "หมวดหมู่ตัวกรองนี้หมดอายุแล้ว คุณจะต้องเปลี่ยนวันหมดอายุสำหรับหมวดหมู่เพื่อนำไปใช้",
"filter_modal.added.expired_title": "ตัวกรองหมดอายุแล้ว!", "filter_modal.added.expired_title": "ตัวกรองหมดอายุแล้ว!",
@ -496,7 +496,7 @@
"report.reasons.spam": "โพสต์เป็นสแปม", "report.reasons.spam": "โพสต์เป็นสแปม",
"report.reasons.spam_description": "ลิงก์ที่เป็นอันตราย, การมีส่วนร่วมปลอม หรือการตอบกลับซ้ำ ๆ", "report.reasons.spam_description": "ลิงก์ที่เป็นอันตราย, การมีส่วนร่วมปลอม หรือการตอบกลับซ้ำ ๆ",
"report.reasons.violation": "โพสต์ละเมิดกฎของเซิร์ฟเวอร์", "report.reasons.violation": "โพสต์ละเมิดกฎของเซิร์ฟเวอร์",
"report.reasons.violation_description": "คุณทราบว่าโพสต์แหกกฎเฉพาะ", "report.reasons.violation_description": "คุณตระหนักว่าโพสต์แหกกฎเฉพาะ",
"report.rules.subtitle": "เลือกทั้งหมดที่นำไปใช้", "report.rules.subtitle": "เลือกทั้งหมดที่นำไปใช้",
"report.rules.title": "กำลังละเมิดกฎใด?", "report.rules.title": "กำลังละเมิดกฎใด?",
"report.statuses.subtitle": "เลือกทั้งหมดที่นำไปใช้", "report.statuses.subtitle": "เลือกทั้งหมดที่นำไปใช้",

@ -2,7 +2,7 @@
"about.blocks": "Denetlenen sunucular", "about.blocks": "Denetlenen sunucular",
"about.contact": "İletişim:", "about.contact": "İletişim:",
"about.disclaimer": "Mastodon özgür, açık kaynak bir yazılımdır ve Mastodon gGmbH şirketinin ticari markasıdır.", "about.disclaimer": "Mastodon özgür, açık kaynak bir yazılımdır ve Mastodon gGmbH şirketinin ticari markasıdır.",
"about.domain_blocks.no_reason_available": "Grerekçe mevcut değil", "about.domain_blocks.no_reason_available": "Gerekçe mevcut değil",
"about.domain_blocks.preamble": "Mastodon, genel olarak fediverse'teki herhangi bir sunucudan içerik görüntülemenize ve kullanıcılarıyla etkileşim kurmanıza izin verir. Bunlar, bu sunucuda yapılmış olan istisnalardır.", "about.domain_blocks.preamble": "Mastodon, genel olarak fediverse'teki herhangi bir sunucudan içerik görüntülemenize ve kullanıcılarıyla etkileşim kurmanıza izin verir. Bunlar, bu sunucuda yapılmış olan istisnalardır.",
"about.domain_blocks.silenced.explanation": "Açık bir şekilde aramadığınız veya takip ederek abone olmadığınız sürece, bu sunucudaki profilleri veya içerikleri genelde göremeyeceksiniz.", "about.domain_blocks.silenced.explanation": "Açık bir şekilde aramadığınız veya takip ederek abone olmadığınız sürece, bu sunucudaki profilleri veya içerikleri genelde göremeyeceksiniz.",
"about.domain_blocks.silenced.title": "Sınırlı", "about.domain_blocks.silenced.title": "Sınırlı",

@ -964,7 +964,7 @@
} }
.status__content.status__content--collapsed { .status__content.status__content--collapsed {
max-height: 20px * 15; // 15 lines is roughly above 500 characters max-height: 22px * 15; // 15 lines is roughly above 500 characters
} }
.status__content__read-more-button { .status__content__read-more-button {
@ -1869,9 +1869,6 @@ a.account__display-name {
a { a {
color: inherit; color: inherit;
}
.permalink {
text-decoration: none; text-decoration: none;
} }
@ -7026,8 +7023,11 @@ noscript {
&__tabs { &__tabs {
display: flex; display: flex;
align-items: flex-start; align-items: flex-start;
justify-content: space-between;
margin-top: -55px; margin-top: -55px;
padding-top: 10px; padding-top: 10px;
gap: 8px;
overflow: hidden;
&__buttons { &__buttons {
display: flex; display: flex;
@ -7036,6 +7036,15 @@ noscript {
padding-top: 55px; padding-top: 55px;
overflow: hidden; overflow: hidden;
.button {
flex-shrink: 1;
white-space: nowrap;
@media screen and (max-width: $no-gap-breakpoint) {
min-width: 0;
}
}
.icon-button { .icon-button {
border: 1px solid lighten($ui-base-color, 12%); border: 1px solid lighten($ui-base-color, 12%);
border-radius: 4px; border-radius: 4px;

@ -178,6 +178,9 @@ a.table-action-link {
} }
&__toolbar { &__toolbar {
position: sticky;
top: 0;
z-index: 1;
border: 1px solid darken($ui-base-color, 8%); border: 1px solid darken($ui-base-color, 8%);
background: $ui-base-color; background: $ui-base-color;
border-radius: 4px 0 0; border-radius: 4px 0 0;

@ -57,7 +57,7 @@ class AccountFilter
when 'order' when 'order'
order_scope(value) order_scope(value)
else else
raise "Unknown filter: #{key}" raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end end
end end
@ -68,7 +68,7 @@ class AccountFilter
when 'remote' when 'remote'
Account.remote Account.remote
else else
raise "Unknown origin: #{value}" raise Mastodon::InvalidParameterError, "Unknown origin: #{value}"
end end
end end
@ -84,8 +84,10 @@ class AccountFilter
accounts_with_users.merge(User.disabled) accounts_with_users.merge(User.disabled)
when 'silenced' when 'silenced'
Account.silenced Account.silenced
when 'sensitized'
Account.sensitized
else else
raise "Unknown status: #{value}" raise Mastodon::InvalidParameterError, "Unknown status: #{value}"
end end
end end
@ -96,7 +98,7 @@ class AccountFilter
when 'recent' when 'recent'
Account.recent Account.recent
else else
raise "Unknown order: #{value}" raise Mastodon::InvalidParameterError, "Unknown order: #{value}"
end end
end end

@ -95,7 +95,7 @@ class Admin::ActionLogFilter
account = Account.find_or_initialize_by(id: value) account = Account.find_or_initialize_by(id: value)
Admin::ActionLog.where(target: [account, account.user].compact) Admin::ActionLog.where(target: [account, account.user].compact)
else else
raise "Unknown filter: #{key}" raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end end
end end
end end

@ -30,7 +30,7 @@ class Admin::AppealFilter
when 'status' when 'status'
status_scope(value) status_scope(value)
else else
raise "Unknown filter: #{key}" raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end end
end end
@ -43,7 +43,7 @@ class Admin::AppealFilter
when 'pending' when 'pending'
Appeal.pending Appeal.pending
else else
raise "Unknown status: #{value}" raise Mastodon::InvalidParameterError, "Unknown status: #{value}"
end end
end end
end end

@ -32,7 +32,7 @@ class Admin::StatusFilter
when 'media' when 'media'
Status.joins(:media_attachments).merge(@account.media_attachments.reorder(nil)).group(:id).reorder('statuses.id desc') Status.joins(:media_attachments).merge(@account.media_attachments.reorder(nil)).group(:id).reorder('statuses.id desc')
else else
raise "Unknown filter: #{key}" raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end end
end end
end end

@ -33,7 +33,7 @@ class AnnouncementFilter
when 'unpublished' when 'unpublished'
Announcement.unpublished Announcement.unpublished
else else
raise "Unknown filter: #{key}" raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end end
end end
end end

@ -11,5 +11,7 @@ module DomainNormalizable
def normalize_domain def normalize_domain
self.domain = TagManager.instance.normalize_domain(domain&.strip) self.domain = TagManager.instance.normalize_domain(domain&.strip)
rescue Addressable::URI::InvalidURIError
errors.add(:domain, :invalid)
end end
end end

@ -39,7 +39,7 @@ class CustomEmojiFilter
when 'shortcode' when 'shortcode'
CustomEmoji.search(value.strip) CustomEmoji.search(value.strip)
else else
raise "Unknown filter: #{key}" raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end end
end end
end end

@ -36,7 +36,7 @@ class InstanceFilter
when 'availability' when 'availability'
availability_scope(value) availability_scope(value)
else else
raise "Unknown filter: #{key}" raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end end
end end
@ -47,7 +47,7 @@ class InstanceFilter
when 'unavailable' when 'unavailable'
Instance.joins(:unavailable_domain) Instance.joins(:unavailable_domain)
else else
raise "Unknown availability: #{value}" raise Mastodon::InvalidParameterError, "Unknown availability: #{value}"
end end
end end
end end

@ -31,7 +31,7 @@ class InviteFilter
when 'expired' when 'expired'
Invite.expired Invite.expired
else else
raise "Unknown filter: #{key}" raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end end
end end
end end

@ -82,6 +82,7 @@ class MediaAttachment < ApplicationRecord
IMAGE_CONVERTED_STYLES = { IMAGE_CONVERTED_STYLES = {
original: { original: {
format: 'jpeg', format: 'jpeg',
content_type: 'image/jpeg',
}.merge(IMAGE_STYLES[:original]).freeze, }.merge(IMAGE_STYLES[:original]).freeze,
small: { small: {

@ -53,7 +53,7 @@ class RelationshipFilter
when 'activity' when 'activity'
activity_scope(value) activity_scope(value)
else else
raise "Unknown filter: #{key}" raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end end
end end
@ -68,7 +68,7 @@ class RelationshipFilter
when 'invited' when 'invited'
Account.joins(user: :invite).merge(Invite.where(user: account.user)).eager_load(:account_stat).reorder(nil) Account.joins(user: :invite).merge(Invite.where(user: account.user)).eager_load(:account_stat).reorder(nil)
else else
raise "Unknown relationship: #{value}" raise Mastodon::InvalidParameterError, "Unknown relationship: #{value}"
end end
end end
@ -83,7 +83,7 @@ class RelationshipFilter
when 'remote' when 'remote'
Account.remote Account.remote
else else
raise "Unknown location: #{value}" raise Mastodon::InvalidParameterError, "Unknown location: #{value}"
end end
end end
@ -94,7 +94,7 @@ class RelationshipFilter
when 'primary' when 'primary'
Account.where(moved_to_account_id: nil) Account.where(moved_to_account_id: nil)
else else
raise "Unknown status: #{value}" raise Mastodon::InvalidParameterError, "Unknown status: #{value}"
end end
end end
@ -105,7 +105,7 @@ class RelationshipFilter
when 'recent' when 'recent'
params[:relationship] == 'invited' ? Account.recent : Follow.recent params[:relationship] == 'invited' ? Account.recent : Follow.recent
else else
raise "Unknown order: #{value}" raise Mastodon::InvalidParameterError, "Unknown order: #{value}"
end end
end end
@ -114,7 +114,7 @@ class RelationshipFilter
when 'dormant' when 'dormant'
AccountStat.where(last_status_at: nil).or(AccountStat.where(AccountStat.arel_table[:last_status_at].lt(1.month.ago))) AccountStat.where(last_status_at: nil).or(AccountStat.where(AccountStat.arel_table[:last_status_at].lt(1.month.ago)))
else else
raise "Unknown activity: #{value}" raise Mastodon::InvalidParameterError, "Unknown activity: #{value}"
end end
end end
end end

@ -38,7 +38,7 @@ class ReportFilter
when :target_origin when :target_origin
target_origin_scope(value) target_origin_scope(value)
else else
raise "Unknown filter: #{key}" raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end end
end end
@ -49,7 +49,7 @@ class ReportFilter
when :remote when :remote
Report.where(target_account: Account.remote) Report.where(target_account: Account.remote)
else else
raise "Unknown value: #{value}" raise Mastodon::InvalidParameterError, "Unknown value: #{value}"
end end
end end
end end

@ -18,5 +18,5 @@ class Rule < ApplicationRecord
validates :text, presence: true, length: { maximum: 300 } validates :text, presence: true, length: { maximum: 300 }
scope :ordered, -> { kept.order(priority: :asc) } scope :ordered, -> { kept.order(priority: :asc, id: :asc) }
end end

@ -40,7 +40,7 @@ class Trends::PreviewCardFilter
when 'locale' when 'locale'
PreviewCardTrend.where(language: value) PreviewCardTrend.where(language: value)
else else
raise "Unknown filter: #{key}" raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end end
end end

@ -30,7 +30,7 @@ class Trends::PreviewCardProviderFilter
when 'status' when 'status'
status_scope(value) status_scope(value)
else else
raise "Unknown filter: #{key}" raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end end
end end
@ -43,7 +43,7 @@ class Trends::PreviewCardProviderFilter
when 'pending_review' when 'pending_review'
PreviewCardProvider.pending_review PreviewCardProvider.pending_review
else else
raise "Unknown status: #{value}" raise Mastodon::InvalidParameterError, "Unknown status: #{value}"
end end
end end
end end

@ -40,7 +40,7 @@ class Trends::StatusFilter
when 'locale' when 'locale'
StatusTrend.where(language: value) StatusTrend.where(language: value)
else else
raise "Unknown filter: #{key}" raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end end
end end

@ -136,7 +136,7 @@ class ImportService < BaseService
end end
def import_data def import_data
Paperclip.io_adapters.for(@import.data).read Paperclip.io_adapters.for(@import.data).read.force_encoding(Encoding::UTF_8)
end end
def relations_map_for_account(account, account_ids) def relations_map_for_account(account, account_ids)

@ -1,7 +1,7 @@
- content_for :page_title do - content_for :page_title do
= t('.title') = t('.title')
= simple_form_for @announcement, url: admin_announcement_path(@announcement) do |f| = simple_form_for @announcement, url: admin_announcement_path(@announcement), html: { novalidate: false } do |f|
= render 'shared/error_messages', object: @announcement = render 'shared/error_messages', object: @announcement
.fields-group .fields-group

@ -1,7 +1,7 @@
- content_for :page_title do - content_for :page_title do
= t('.title') = t('.title')
= simple_form_for @announcement, url: admin_announcements_path do |f| = simple_form_for @announcement, url: admin_announcements_path, html: { novalidate: false } do |f|
= render 'shared/error_messages', object: @announcement = render 'shared/error_messages', object: @announcement
.fields-group .fields-group

@ -5,7 +5,7 @@
%h2= t('admin.settings.title') %h2= t('admin.settings.title')
= render partial: 'admin/settings/shared/links' = render partial: 'admin/settings/shared/links'
= simple_form_for @admin_settings, url: admin_settings_branding_path, html: { method: :patch } do |f| = simple_form_for @admin_settings, url: admin_settings_registrations_path, html: { method: :patch } do |f|
= render 'shared/error_messages', object: @admin_settings = render 'shared/error_messages', object: @admin_settings
%p.lead= t('admin.settings.registrations.preamble') %p.lead= t('admin.settings.registrations.preamble')

@ -1,3 +1,17 @@
# A helm chart's templates and default values can be packaged into a .tgz file.
# When doing that, not everything should be bundled into the .tgz file. This
# file describes what to not bundle.
#
# Manually added by us
# --------------------
#
dev-values.yaml
mastodon-*.tgz
# Boilerplate .helmignore from `helm create mastodon`
# ---------------------------------------------------
#
# Patterns to ignore when building packages. # Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and # This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line. # negation (prefixed with !). Only one pattern per line.
@ -21,4 +35,3 @@
.idea/ .idea/
*.tmproj *.tmproj
.vscode/ .vscode/
mastodon-*.tgz

@ -15,7 +15,7 @@ type: application
# This is the chart version. This version number should be incremented each time you make changes # This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version. # to the chart and its templates, including the app version.
# Versions are expected to follow Semantic Versioning (https://semver.org/) # Versions are expected to follow Semantic Versioning (https://semver.org/)
version: 2.2.0 version: 2.3.0
# This is the version number of the application being deployed. This version number should be # This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application. Versions are not expected to # incremented each time you make changes to the application. Versions are not expected to

@ -7,7 +7,7 @@ Kubernetes cluster. The basic usage is:
1. `helm dep update` 1. `helm dep update`
1. `helm install --namespace mastodon --create-namespace my-mastodon ./ -f path/to/additional/values.yaml` 1. `helm install --namespace mastodon --create-namespace my-mastodon ./ -f path/to/additional/values.yaml`
This chart has been tested on Helm 3.0.1 and above. This chart is tested with k8s 1.21+ and helm 3.6.0+.
# Configuration # Configuration

@ -0,0 +1,25 @@
# Chart values used for testing the Helm chart.
#
mastodon:
secrets:
secret_key_base: dummy-secret_key_base
otp_secret: dummy-otp_secret
vapid:
private_key: dummy-vapid-private_key
public_key: dummy-vapid-public_key
# ref: https://github.com/bitnami/charts/tree/main/bitnami/redis#parameters
redis:
replica:
replicaCount: 1
# ref: https://github.com/bitnami/charts/tree/main/bitnami/elasticsearch#parameters
elasticsearch:
master:
replicaCount: 1
data:
replicaCount: 1
coordinating:
replicaCount: 1
ingest:
replicaCount: 1

@ -7,12 +7,13 @@ metadata:
data: data:
{{- if .Values.postgresql.enabled }} {{- if .Values.postgresql.enabled }}
DB_HOST: {{ template "mastodon.postgresql.fullname" . }} DB_HOST: {{ template "mastodon.postgresql.fullname" . }}
DB_PORT: "5432"
{{- else }} {{- else }}
DB_HOST: {{ .Values.postgresql.postgresqlHostname }} DB_HOST: {{ .Values.postgresql.postgresqlHostname }}
DB_PORT: {{ .Values.postgresql.postgresqlPort | default "5432" | quote }}
{{- end }} {{- end }}
DB_NAME: {{ .Values.postgresql.auth.database }} DB_NAME: {{ .Values.postgresql.auth.database }}
DB_POOL: {{ .Values.mastodon.sidekiq.concurrency | quote }} DB_POOL: {{ .Values.mastodon.sidekiq.concurrency | quote }}
DB_PORT: "5432"
DB_USER: {{ .Values.postgresql.auth.username }} DB_USER: {{ .Values.postgresql.auth.username }}
DEFAULT_LOCALE: {{ .Values.mastodon.locale }} DEFAULT_LOCALE: {{ .Values.mastodon.locale }}
{{- if .Values.elasticsearch.enabled }} {{- if .Values.elasticsearch.enabled }}
@ -310,3 +311,6 @@ data:
LDAP_UID_CONVERSION_REPLACE: {{ .Values.externalAuth.ldap.uid_conversion.replace }} LDAP_UID_CONVERSION_REPLACE: {{ .Values.externalAuth.ldap.uid_conversion.replace }}
{{- end }} {{- end }}
{{- end }} {{- end }}
{{- with .Values.mastodon.metrics.statsd.address }}
STATSD_ADDR: {{ . }}
{{- end }}

@ -25,13 +25,13 @@ spec:
affinity: affinity:
podAffinity: podAffinity:
requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector: - labelSelector:
matchExpressions: matchExpressions:
- key: app.kubernetes.io/part-of - key: app.kubernetes.io/part-of
operator: In operator: In
values: values:
- rails - rails
topologyKey: kubernetes.io/hostname topologyKey: kubernetes.io/hostname
{{- end }} {{- end }}
volumes: volumes:
- name: assets - name: assets

@ -42,13 +42,13 @@ spec:
affinity: affinity:
podAffinity: podAffinity:
requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector: - labelSelector:
matchExpressions: matchExpressions:
- key: app.kubernetes.io/part-of - key: app.kubernetes.io/part-of
operator: In operator: In
values: values:
- rails - rails
topologyKey: kubernetes.io/hostname topologyKey: kubernetes.io/hostname
{{- end }} {{- end }}
volumes: volumes:
- name: assets - name: assets

@ -25,13 +25,13 @@ spec:
affinity: affinity:
podAffinity: podAffinity:
requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector: - labelSelector:
matchExpressions: matchExpressions:
- key: app.kubernetes.io/part-of - key: app.kubernetes.io/part-of
operator: In operator: In
values: values:
- rails - rails
topologyKey: kubernetes.io/hostname topologyKey: kubernetes.io/hostname
{{- end }} {{- end }}
volumes: volumes:
- name: assets - name: assets

@ -26,13 +26,13 @@ spec:
affinity: affinity:
podAffinity: podAffinity:
requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector: - labelSelector:
matchExpressions: matchExpressions:
- key: app.kubernetes.io/part-of - key: app.kubernetes.io/part-of
operator: In operator: In
values: values:
- rails - rails
topologyKey: kubernetes.io/hostname topologyKey: kubernetes.io/hostname
{{- end }} {{- end }}
volumes: volumes:
- name: assets - name: assets

@ -25,13 +25,13 @@ spec:
affinity: affinity:
podAffinity: podAffinity:
requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector: - labelSelector:
matchExpressions: matchExpressions:
- key: app.kubernetes.io/part-of - key: app.kubernetes.io/part-of
operator: In operator: In
values: values:
- rails - rails
topologyKey: kubernetes.io/hostname topologyKey: kubernetes.io/hostname
{{- end }} {{- end }}
volumes: volumes:
- name: assets - name: assets

@ -101,6 +101,11 @@ mastodon:
web: web:
port: 3000 port: 3000
metrics:
statsd:
# Enable statsd publishing via STATSD_ADDR environment variable
address: ""
ingress: ingress:
enabled: true enabled: true
annotations: annotations:
@ -144,6 +149,7 @@ postgresql:
# must match those of that external postgres instance # must match those of that external postgres instance
enabled: true enabled: true
# postgresqlHostname: preexisting-postgresql # postgresqlHostname: preexisting-postgresql
# postgresqlPort: 5432
auth: auth:
database: mastodon_production database: mastodon_production
username: mastodon username: mastodon

@ -67,6 +67,12 @@ if ENV['S3_ENABLED'] == 'true'
retry_limit: 0, retry_limit: 0,
} }
) )
if ENV['S3_PERMISSION'] == ''
Paperclip::Attachment.default_options.merge!(
s3_permissions: ->(*) { nil }
)
end
if ENV.has_key?('S3_ENDPOINT') if ENV.has_key?('S3_ENDPOINT')
Paperclip::Attachment.default_options[:s3_options].merge!( Paperclip::Attachment.default_options[:s3_options].merge!(
@ -119,6 +125,8 @@ elsif ENV['SWIFT_ENABLED'] == 'true'
openstack_region: ENV['SWIFT_REGION'], openstack_region: ENV['SWIFT_REGION'],
openstack_cache_ttl: ENV.fetch('SWIFT_CACHE_TTL') { 60 }, openstack_cache_ttl: ENV.fetch('SWIFT_CACHE_TTL') { 60 },
}, },
fog_file: { 'Cache-Control' => 'public, max-age=315576000, immutable' },
fog_directory: ENV['SWIFT_CONTAINER'], fog_directory: ENV['SWIFT_CONTAINER'],
fog_host: ENV['SWIFT_OBJECT_URL'], fog_host: ENV['SWIFT_OBJECT_URL'],

@ -29,6 +29,10 @@ ru:
attributes: attributes:
website: website:
invalid: не является допустимым URL invalid: не является допустимым URL
import:
attributes:
data:
malformed: неверный формат
status: status:
attributes: attributes:
reblog: reblog:

@ -27,6 +27,11 @@ af:
back_to_limited: Beperk back_to_limited: Beperk
moderation: moderation:
limited: Beperk limited: Beperk
roles:
categories:
devops: DevOps
privileges:
view_devops: DevOps
settings: settings:
about: about:
title: Aangaande title: Aangaande
@ -109,6 +114,13 @@ af:
descriptions: descriptions:
account: Publieke plasings vanaf @%{acct} account: Publieke plasings vanaf @%{acct}
tag: 'Publieke plasings met die #%{hashtag} etiket' tag: 'Publieke plasings met die #%{hashtag} etiket'
sessions:
browsers:
blackberry: BlackBerry
uc_browser: UC Browser
platforms:
blackberry: BlackBerry
chrome_os: ChromeOS
settings: settings:
edit_profile: Redigeer profiel edit_profile: Redigeer profiel
preferences: Voorkeure preferences: Voorkeure

@ -609,7 +609,6 @@ ar:
manage_user_access: إدارة وصول المستخدم manage_user_access: إدارة وصول المستخدم
manage_users: إدارة المستخدمين manage_users: إدارة المستخدمين
view_dashboard: عرض لوحة التحكم view_dashboard: عرض لوحة التحكم
view_devops: DevOps
view_devops_description: السماح للمستخدمين بالوصول إلى لوحة Sidekiq و pgHero view_devops_description: السماح للمستخدمين بالوصول إلى لوحة Sidekiq و pgHero
title: الأدوار title: الأدوار
rules: rules:
@ -1231,7 +1230,6 @@ ar:
browser: المتصفح browser: المتصفح
browsers: browsers:
alipay: أليباي alipay: أليباي
blackberry: بلاك بيري
chrome: كروم chrome: كروم
edge: مايكروسوفت إيدج edge: مايكروسوفت إيدج
electron: إلكترون electron: إلكترون
@ -1245,7 +1243,6 @@ ar:
phantom_js: فانتوم جي آس phantom_js: فانتوم جي آس
qq: متصفح كيوكيو qq: متصفح كيوكيو
safari: سفاري safari: سفاري
uc_browser: متصفح يوسي براوزر
weibo: وايبو weibo: وايبو
current_session: الجلسة الحالية current_session: الجلسة الحالية
description: "%{browser} على %{platform}" description: "%{browser} على %{platform}"
@ -1254,8 +1251,6 @@ ar:
platforms: platforms:
adobe_air: أدوبي إيير adobe_air: أدوبي إيير
android: أندرويد android: أندرويد
blackberry: بلاك بيري
chrome_os: نظام كروم أواس
firefox_os: نظام فايرفكس أواس firefox_os: نظام فايرفكس أواس
ios: نظام آي أواس ios: نظام آي أواس
linux: لينكس linux: لينكس

@ -325,7 +325,6 @@ ast:
browser: Restolador browser: Restolador
browsers: browsers:
alipay: Alipay alipay: Alipay
blackberry: Blackberry
chrome: Chrome chrome: Chrome
edge: Microsoft Edge edge: Microsoft Edge
electron: Electron electron: Electron
@ -336,7 +335,6 @@ ast:
opera: Opera opera: Opera
otter: Otter otter: Otter
phantom_js: PhantomJS phantom_js: PhantomJS
uc_browser: UCBrowser
weibo: Weibo weibo: Weibo
current_session: Sesión actual current_session: Sesión actual
description: "%{browser} en %{platform}" description: "%{browser} en %{platform}"
@ -344,8 +342,6 @@ ast:
platforms: platforms:
adobe_air: Adobe Air adobe_air: Adobe Air
android: Android android: Android
blackberry: Blackberry
chrome_os: Chrome OS
firefox_os: Firefox OS firefox_os: Firefox OS
ios: iOS ios: iOS
linux: GNU/Linux linux: GNU/Linux

@ -602,7 +602,6 @@ bg:
browser: Браузър browser: Браузър
browsers: browsers:
alipay: Alipay alipay: Alipay
blackberry: Blackberry
chrome: Chrome chrome: Chrome
edge: Edge на Майкрософт edge: Edge на Майкрософт
electron: Electron electron: Electron
@ -616,7 +615,6 @@ bg:
phantom_js: PhantomJS phantom_js: PhantomJS
qq: Браузър QQ qq: Браузър QQ
safari: Сафари safari: Сафари
uc_browser: UCBrowser
weibo: Weibo weibo: Weibo
current_session: Текуща сесия current_session: Текуща сесия
description: "%{browser} на %{platform}" description: "%{browser} на %{platform}"
@ -624,8 +622,6 @@ bg:
platforms: platforms:
adobe_air: Adobe Air adobe_air: Adobe Air
android: Android android: Android
blackberry: Blackberry
chrome_os: Оп. сист. Chrome
firefox_os: Оп. сист. Firefox firefox_os: Оп. сист. Firefox
ios: iOS ios: iOS
linux: Линукс linux: Линукс

@ -249,7 +249,6 @@ br:
browser: Merdeer browser: Merdeer
browsers: browsers:
alipay: Alipay alipay: Alipay
blackberry: Blackberry
chrome: Chrome chrome: Chrome
edge: Microsoft Edge edge: Microsoft Edge
electron: Electron electron: Electron
@ -263,7 +262,6 @@ br:
phantom_js: PhantomJS phantom_js: PhantomJS
qq: QQ Browser qq: QQ Browser
safari: Safari safari: Safari
uc_browser: UCBrowser
weibo: Weibo weibo: Weibo
description: "%{browser} war %{platform}" description: "%{browser} war %{platform}"
platforms: platforms:

@ -1097,7 +1097,7 @@ ca:
public: Línies de temps públiques public: Línies de temps públiques
thread: Converses thread: Converses
edit: edit:
add_keyword: Afegeix paraula clau add_keyword: Afegeix una paraula clau
keywords: Paraules clau keywords: Paraules clau
statuses: Publicacions individuals statuses: Publicacions individuals
statuses_hint_html: Aquest filtre s'aplica a la selecció de publicacions individuals, independentment de si coincideixen amb les paraules clau següents. <a href="%{path}">Revisa o elimina publicacions del filtre</a>. statuses_hint_html: Aquest filtre s'aplica a la selecció de publicacions individuals, independentment de si coincideixen amb les paraules clau següents. <a href="%{path}">Revisa o elimina publicacions del filtre</a>.
@ -1122,7 +1122,7 @@ ca:
other: "%{count} publicacions individuals ocultades" other: "%{count} publicacions individuals ocultades"
title: Filtres title: Filtres
new: new:
save: Desa el nou filtre save: Desa el filtre nou
title: Afegir un nou filtre title: Afegir un nou filtre
statuses: statuses:
back_to_filter: Tornar al filtre back_to_filter: Tornar al filtre
@ -1387,7 +1387,7 @@ ca:
phantom_js: PhantomJS phantom_js: PhantomJS
qq: QQ Browser qq: QQ Browser
safari: Safari safari: Safari
uc_browser: UCBrowser uc_browser: Navegador UC
weibo: Weibo weibo: Weibo
current_session: Sessió actual current_session: Sessió actual
description: "%{browser} de %{platform}" description: "%{browser} de %{platform}"

@ -933,7 +933,6 @@ ckb:
activity: دوایین چالاکی activity: دوایین چالاکی
browser: وێبگەڕ browser: وێبگەڕ
browsers: browsers:
blackberry: بلاکبێری
chrome: کرۆم chrome: کرۆم
edge: مایکرۆسۆفت ئیچ edge: مایکرۆسۆفت ئیچ
electron: ئەلکترۆن electron: ئەلکترۆن
@ -947,15 +946,12 @@ ckb:
phantom_js: فانتۆم جەی ئێس phantom_js: فانتۆم جەی ئێس
qq: وێبگەڕی QQ qq: وێبگەڕی QQ
safari: سافری safari: سافری
uc_browser: وێبگەڕی UC
current_session: دانیشتنی ئێستا current_session: دانیشتنی ئێستا
description: "%{browser} لەسەر %{platform}" description: "%{browser} لەسەر %{platform}"
explanation: ئەمانە وێبگەڕەکەن کە ئێستا چووەتە ژوورەوە بۆ ئەژمێری ماستۆدۆنی خۆت. explanation: ئەمانە وێبگەڕەکەن کە ئێستا چووەتە ژوورەوە بۆ ئەژمێری ماستۆدۆنی خۆت.
ip: ئای‌پی ip: ئای‌پی
platforms: platforms:
android: ئەندرۆید android: ئەندرۆید
blackberry: بلاکبێری
chrome_os: سیستەمی کارگێڕی کرۆم
firefox_os: سیستەمی کارگێڕی فایەرفۆکس firefox_os: سیستەمی کارگێڕی فایەرفۆکس
linux: لینۆکس linux: لینۆکس
mac: ماک mac: ماک

@ -914,7 +914,6 @@ co:
browser: Navigatore browser: Navigatore
browsers: browsers:
alipay: Alipay alipay: Alipay
blackberry: Blackberry
chrome: Chrome chrome: Chrome
edge: Microsoft Edge edge: Microsoft Edge
electron: Electron electron: Electron
@ -928,7 +927,6 @@ co:
phantom_js: PhantomJS phantom_js: PhantomJS
qq: QQ Browser qq: QQ Browser
safari: Safari safari: Safari
uc_browser: UCBrowser
weibo: Weibo weibo: Weibo
current_session: Sessione attuale current_session: Sessione attuale
description: "%{browser} nantà %{platform}" description: "%{browser} nantà %{platform}"
@ -937,8 +935,6 @@ co:
platforms: platforms:
adobe_air: Adobe Air adobe_air: Adobe Air
android: Android android: Android
blackberry: Blackberry
chrome_os: ChromeOS
firefox_os: Firefox OS firefox_os: Firefox OS
ios: iOS ios: iOS
linux: Linux linux: Linux

@ -634,7 +634,7 @@ cs:
other: "%{count} uživatelů" other: "%{count} uživatelů"
categories: categories:
administration: Administrace administration: Administrace
devops: Devops devops: DevOps
invites: Pozvánky invites: Pozvánky
moderation: Moderování moderation: Moderování
special: Speciální special: Speciální
@ -687,7 +687,7 @@ cs:
view_audit_log_description: Umožňuje uživatelům vidět historii administrativních akcí na serveru view_audit_log_description: Umožňuje uživatelům vidět historii administrativních akcí na serveru
view_dashboard: Zobrazit ovládací panel view_dashboard: Zobrazit ovládací panel
view_dashboard_description: Umožňuje uživatelům přístup k ovládacímu panelu a různým metrikám view_dashboard_description: Umožňuje uživatelům přístup k ovládacímu panelu a různým metrikám
view_devops: Devops view_devops: DevOps
view_devops_description: Umožňuje uživatelům přístup k ovládacím panelům Sidekiq a pgHero view_devops_description: Umožňuje uživatelům přístup k ovládacím panelům Sidekiq a pgHero
title: Role title: Role
rules: rules:
@ -1177,6 +1177,16 @@ cs:
trending_now: Právě populární trending_now: Právě populární
generic: generic:
all: Všechny all: Všechny
all_items_on_page_selected_html:
few: "<strong>%{count}</strong> položky na této stránce jsou vybrány."
many: "<strong>%{count}</strong> položek na této stránce je vybráno."
one: "<strong>%{count}</strong> položka na této stránce vybrána."
other: Všech <strong>%{count}</strong> položek na této stránce vybráno.
all_matching_items_selected_html:
few: "<strong>%{count}</strong> položky odpovídající vašemu hledání jsou vybrány."
many: "<strong>%{count}</strong> položek odpovídající vašemu hledání je vybráno."
one: "<strong>%{count}</strong> položka odpovídající vašemu hledání je vybrána."
other: Všech <strong>%{count}</strong> položek odpovídající vašemu hledání je vybráno.
changes_saved_msg: Změny byly úspěšně uloženy! changes_saved_msg: Změny byly úspěšně uloženy!
copy: Kopírovat copy: Kopírovat
delete: Smazat delete: Smazat
@ -1429,7 +1439,7 @@ cs:
phantom_js: PhantomJS phantom_js: PhantomJS
qq: QQ Browser qq: QQ Browser
safari: Safari safari: Safari
uc_browser: UCBrowser uc_browser: UC Browser
weibo: Weibo weibo: Weibo
current_session: Aktuální relace current_session: Aktuální relace
description: "%{browser} na systému %{platform}" description: "%{browser} na systému %{platform}"
@ -1438,8 +1448,8 @@ cs:
platforms: platforms:
adobe_air: Adobe Air adobe_air: Adobe Air
android: Android android: Android
blackberry: Blackberry blackberry: BlackBerry
chrome_os: Chrome OS chrome_os: ChromeOS
firefox_os: Firefox OS firefox_os: Firefox OS
ios: iOS ios: iOS
linux: Linux linux: Linux

@ -773,7 +773,6 @@ cy:
description: "%{browser} ar %{platform}" description: "%{browser} ar %{platform}"
explanation: Dyma'r porwyr gwê sydd wedi mewngofnodi i'ch cyfrif Mastododon ar hyn o bryd. explanation: Dyma'r porwyr gwê sydd wedi mewngofnodi i'ch cyfrif Mastododon ar hyn o bryd.
platforms: platforms:
chrome_os: OS Chrome
firefox_os: OS Firefox firefox_os: OS Firefox
mac: Mac mac: Mac
other: platfform anhysbys other: platfform anhysbys

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

Loading…
Cancel
Save