1
0
Fork 0
mirror of https://github.com/mastodon/mastodon.git synced 2024-08-20 21:08:15 -07:00

Merge branch 'main' into add-gsw

This commit is contained in:
Florian Kohler 2024-03-05 06:48:18 +00:00 committed by GitHub
commit 09c8947ea7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
364 changed files with 5529 additions and 4022 deletions

View file

@ -5,7 +5,7 @@
"workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}",
"features": {
"ghcr.io/devcontainers/features/sshd:1": {},
"ghcr.io/devcontainers/features/sshd:1": {}
},
"runServices": ["app", "db", "redis"],
@ -15,16 +15,16 @@
"portsAttributes": {
"3000": {
"label": "web",
"onAutoForward": "notify",
"onAutoForward": "notify"
},
"4000": {
"label": "stream",
"onAutoForward": "silent",
},
"onAutoForward": "silent"
}
},
"otherPortsAttributes": {
"onAutoForward": "silent",
"onAutoForward": "silent"
},
"remoteEnv": {
@ -33,7 +33,7 @@
"STREAMING_API_BASE_URL": "https://${localEnv:CODESPACE_NAME}-4000.app.github.dev",
"DISABLE_FORGERY_REQUEST_PROTECTION": "true",
"ES_ENABLED": "",
"LIBRE_TRANSLATE_ENDPOINT": "",
"LIBRE_TRANSLATE_ENDPOINT": ""
},
"onCreateCommand": "git config --global --add safe.directory ${containerWorkspaceFolder}",
@ -43,7 +43,7 @@
"customizations": {
"vscode": {
"settings": {},
"extensions": ["EditorConfig.EditorConfig", "webben.browserslist"],
},
},
"extensions": ["EditorConfig.EditorConfig", "webben.browserslist"]
}
}
}

View file

@ -5,7 +5,7 @@
"workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}",
"features": {
"ghcr.io/devcontainers/features/sshd:1": {},
"ghcr.io/devcontainers/features/sshd:1": {}
},
"forwardPorts": [3000, 4000],
@ -14,17 +14,17 @@
"3000": {
"label": "web",
"onAutoForward": "notify",
"requireLocalPort": true,
"requireLocalPort": true
},
"4000": {
"label": "stream",
"onAutoForward": "silent",
"requireLocalPort": true,
},
"requireLocalPort": true
}
},
"otherPortsAttributes": {
"onAutoForward": "silent",
"onAutoForward": "silent"
},
"onCreateCommand": "git config --global --add safe.directory ${containerWorkspaceFolder}",
@ -34,7 +34,7 @@
"customizations": {
"vscode": {
"settings": {},
"extensions": ["EditorConfig.EditorConfig", "webben.browserslist"],
},
},
"extensions": ["EditorConfig.EditorConfig", "webben.browserslist"]
}
}
}

View file

@ -338,7 +338,6 @@ module.exports = defineConfig({
'plugin:import/typescript',
'plugin:promise/recommended',
'plugin:jsdoc/recommended-typescript',
'plugin:prettier/recommended',
],
parserOptions: {
@ -347,6 +346,9 @@ module.exports = defineConfig({
},
rules: {
// Disable formatting rules that have been enabled in the base config
'indent': 'off',
'import/consistent-type-specifier-style': ['error', 'prefer-top-level'],
'@typescript-eslint/consistent-type-definitions': ['warn', 'interface'],

4
.github/codecov.yml vendored
View file

@ -1,3 +1,4 @@
comment: false # Do not leave PR comments
coverage:
status:
project:
@ -8,6 +9,3 @@ coverage:
default:
# Github status check is not blocking
informational: true
comment:
# Only write a comment in PR if there are changes
require_changes: true

18
.github/workflows/format-check.yml vendored Normal file
View file

@ -0,0 +1,18 @@
name: Check formatting
on:
push:
pull_request:
jobs:
lint:
runs-on: ubuntu-latest
steps:
- name: Clone repository
uses: actions/checkout@v4
- name: Set up Javascript environment
uses: ./.github/actions/setup-javascript
- name: Check formatting with Prettier
run: yarn format:check

View file

@ -43,4 +43,4 @@ jobs:
- run: echo "::add-matcher::.github/stylelint-matcher.json"
- name: Stylelint
run: yarn lint:sass
run: yarn lint:css

View file

@ -36,4 +36,4 @@ jobs:
- name: Run haml-lint
run: |
echo "::add-matcher::.github/workflows/haml-lint-problem-matcher.json"
bundle exec haml-lint
bundle exec haml-lint --reporter github

View file

@ -1,38 +0,0 @@
name: JSON Linting
on:
push:
branches-ignore:
- 'dependabot/**'
- 'renovate/**'
paths:
- 'package.json'
- 'yarn.lock'
- '.nvmrc'
- '.prettier*'
- '**/*.json'
- '.github/workflows/lint-json.yml'
- '!app/javascript/mastodon/locales/*.json'
pull_request:
paths:
- 'package.json'
- 'yarn.lock'
- '.nvmrc'
- '.prettier*'
- '**/*.json'
- '.github/workflows/lint-json.yml'
- '!app/javascript/mastodon/locales/*.json'
jobs:
lint:
runs-on: ubuntu-latest
steps:
- name: Clone repository
uses: actions/checkout@v4
- name: Set up Javascript environment
uses: ./.github/actions/setup-javascript
- name: Prettier
run: yarn lint:json

View file

@ -1,38 +0,0 @@
name: Markdown Linting
on:
push:
branches-ignore:
- 'dependabot/**'
- 'renovate/**'
paths:
- '.github/workflows/lint-md.yml'
- '.nvmrc'
- '.prettier*'
- '**/*.md'
- '!AUTHORS.md'
- 'package.json'
- 'yarn.lock'
pull_request:
paths:
- '.github/workflows/lint-md.yml'
- '.nvmrc'
- '.prettier*'
- '**/*.md'
- '!AUTHORS.md'
- 'package.json'
- 'yarn.lock'
jobs:
lint:
runs-on: ubuntu-latest
steps:
- name: Clone repository
uses: actions/checkout@v4
- name: Set up Javascript environment
uses: ./.github/actions/setup-javascript
- name: Prettier
run: yarn lint:md

View file

@ -1,40 +0,0 @@
name: YML Linting
on:
push:
branches-ignore:
- 'dependabot/**'
- 'renovate/**'
paths:
- 'package.json'
- 'yarn.lock'
- '.nvmrc'
- '.prettier*'
- '**/*.yaml'
- '**/*.yml'
- '.github/workflows/lint-yml.yml'
- '!config/locales/*.yml'
pull_request:
paths:
- 'package.json'
- 'yarn.lock'
- '.nvmrc'
- '.prettier*'
- '**/*.yaml'
- '**/*.yml'
- '.github/workflows/lint-yml.yml'
- '!config/locales/*.yml'
jobs:
lint:
runs-on: ubuntu-latest
steps:
- name: Clone repository
uses: actions/checkout@v4
- name: Set up Javascript environment
uses: ./.github/actions/setup-javascript
- name: Prettier
run: yarn lint:yml

View file

@ -1,4 +1 @@
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
yarn lint-staged

View file

@ -54,6 +54,13 @@
# Ignore Docker option files
docker-compose.override.yml
# Ignore public
/public/assets
/public/emoji
/public/packs
/public/packs-test
/public/system
# Ignore emoji map file
/app/javascript/mastodon/features/emoji/emoji_map.json
@ -74,4 +81,5 @@ app/javascript/styles/mastodon/reset.scss
# Ignore the generated AUTHORS.md
AUTHORS.md
# Process a few selected JS files
!lint-staged.config.js

View file

@ -10,35 +10,35 @@ GIT
GEM
remote: https://rubygems.org/
specs:
actioncable (7.1.3)
actionpack (= 7.1.3)
activesupport (= 7.1.3)
actioncable (7.1.3.2)
actionpack (= 7.1.3.2)
activesupport (= 7.1.3.2)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
zeitwerk (~> 2.6)
actionmailbox (7.1.3)
actionpack (= 7.1.3)
activejob (= 7.1.3)
activerecord (= 7.1.3)
activestorage (= 7.1.3)
activesupport (= 7.1.3)
actionmailbox (7.1.3.2)
actionpack (= 7.1.3.2)
activejob (= 7.1.3.2)
activerecord (= 7.1.3.2)
activestorage (= 7.1.3.2)
activesupport (= 7.1.3.2)
mail (>= 2.7.1)
net-imap
net-pop
net-smtp
actionmailer (7.1.3)
actionpack (= 7.1.3)
actionview (= 7.1.3)
activejob (= 7.1.3)
activesupport (= 7.1.3)
actionmailer (7.1.3.2)
actionpack (= 7.1.3.2)
actionview (= 7.1.3.2)
activejob (= 7.1.3.2)
activesupport (= 7.1.3.2)
mail (~> 2.5, >= 2.5.4)
net-imap
net-pop
net-smtp
rails-dom-testing (~> 2.2)
actionpack (7.1.3)
actionview (= 7.1.3)
activesupport (= 7.1.3)
actionpack (7.1.3.2)
actionview (= 7.1.3.2)
activesupport (= 7.1.3.2)
nokogiri (>= 1.8.5)
racc
rack (>= 2.2.4)
@ -46,15 +46,15 @@ GEM
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.6)
actiontext (7.1.3)
actionpack (= 7.1.3)
activerecord (= 7.1.3)
activestorage (= 7.1.3)
activesupport (= 7.1.3)
actiontext (7.1.3.2)
actionpack (= 7.1.3.2)
activerecord (= 7.1.3.2)
activestorage (= 7.1.3.2)
activesupport (= 7.1.3.2)
globalid (>= 0.6.0)
nokogiri (>= 1.8.5)
actionview (7.1.3)
activesupport (= 7.1.3)
actionview (7.1.3.2)
activesupport (= 7.1.3.2)
builder (~> 3.1)
erubi (~> 1.11)
rails-dom-testing (~> 2.2)
@ -64,22 +64,22 @@ GEM
activemodel (>= 4.1)
case_transform (>= 0.2)
jsonapi-renderer (>= 0.1.1.beta1, < 0.3)
activejob (7.1.3)
activesupport (= 7.1.3)
activejob (7.1.3.2)
activesupport (= 7.1.3.2)
globalid (>= 0.3.6)
activemodel (7.1.3)
activesupport (= 7.1.3)
activerecord (7.1.3)
activemodel (= 7.1.3)
activesupport (= 7.1.3)
activemodel (7.1.3.2)
activesupport (= 7.1.3.2)
activerecord (7.1.3.2)
activemodel (= 7.1.3.2)
activesupport (= 7.1.3.2)
timeout (>= 0.4.0)
activestorage (7.1.3)
actionpack (= 7.1.3)
activejob (= 7.1.3)
activerecord (= 7.1.3)
activesupport (= 7.1.3)
activestorage (7.1.3.2)
actionpack (= 7.1.3.2)
activejob (= 7.1.3.2)
activerecord (= 7.1.3.2)
activesupport (= 7.1.3.2)
marcel (~> 1.0)
activesupport (7.1.3)
activesupport (7.1.3.2)
base64
bigdecimal
concurrent-ruby (~> 1.0, >= 1.0.2)
@ -309,7 +309,7 @@ GEM
activesupport (>= 5.1)
haml (>= 4.0.6)
railties (>= 5.1)
haml_lint (0.56.0)
haml_lint (0.57.0)
haml (>= 5.0)
parallel (~> 1.10)
rainbow
@ -333,7 +333,7 @@ GEM
http-form_data (2.3.0)
http_accept_language (2.1.1)
httpclient (2.8.3)
httplog (1.6.2)
httplog (1.6.3)
rack (>= 2.0)
rainbow (>= 2.0.0)
i18n (1.14.1)
@ -444,7 +444,7 @@ GEM
uri
net-http-persistent (4.0.2)
connection_pool (~> 2.2)
net-imap (0.4.9.1)
net-imap (0.4.10)
date
net-protocol
net-ldap (0.19.0)
@ -532,7 +532,7 @@ GEM
activesupport (>= 3.0.0)
raabro (1.4.0)
racc (1.7.3)
rack (2.2.8)
rack (2.2.8.1)
rack-attack (6.7.0)
rack (>= 1.0, < 4)
rack-cors (2.0.1)
@ -554,20 +554,20 @@ GEM
rackup (1.0.0)
rack (< 3)
webrick
rails (7.1.3)
actioncable (= 7.1.3)
actionmailbox (= 7.1.3)
actionmailer (= 7.1.3)
actionpack (= 7.1.3)
actiontext (= 7.1.3)
actionview (= 7.1.3)
activejob (= 7.1.3)
activemodel (= 7.1.3)
activerecord (= 7.1.3)
activestorage (= 7.1.3)
activesupport (= 7.1.3)
rails (7.1.3.2)
actioncable (= 7.1.3.2)
actionmailbox (= 7.1.3.2)
actionmailer (= 7.1.3.2)
actionpack (= 7.1.3.2)
actiontext (= 7.1.3.2)
actionview (= 7.1.3.2)
activejob (= 7.1.3.2)
activemodel (= 7.1.3.2)
activerecord (= 7.1.3.2)
activestorage (= 7.1.3.2)
activesupport (= 7.1.3.2)
bundler (>= 1.15.0)
railties (= 7.1.3)
railties (= 7.1.3.2)
rails-controller-testing (1.0.5)
actionpack (>= 5.0.1.rc1)
actionview (>= 5.0.1.rc1)
@ -582,9 +582,9 @@ GEM
rails-i18n (7.0.8)
i18n (>= 0.7, < 2)
railties (>= 6.0.0, < 8)
railties (7.1.3)
actionpack (= 7.1.3)
activesupport (= 7.1.3)
railties (7.1.3.2)
actionpack (= 7.1.3.2)
activesupport (= 7.1.3.2)
irb
rackup (>= 1.0.0)
rake (>= 12.2)
@ -744,7 +744,7 @@ GEM
terrapin (1.0.1)
climate_control
test-prof (1.3.1)
thor (1.3.0)
thor (1.3.1)
tilt (2.3.0)
timeout (0.4.1)
tpm-key_attestation (0.12.0)
@ -793,7 +793,7 @@ GEM
webfinger (1.2.0)
activesupport
httpclient (>= 2.4)
webmock (3.21.2)
webmock (3.22.0)
addressable (>= 2.8.0)
crack (>= 0.3.2)
hashdiff (>= 0.4.0, < 2.0.0)

View file

@ -83,23 +83,19 @@ A **Vagrant** configuration is included for development purposes. To use it, com
- Install Vagrant and Virtualbox
- Install the `vagrant-hostsupdater` plugin: `vagrant plugin install vagrant-hostsupdater`
- Run `vagrant up`
- Run `vagrant ssh -c "cd /vagrant && foreman start"`
- Run `vagrant ssh -c "cd /vagrant && bin/dev"`
- Open `http://mastodon.local` in your browser
### MacOS
To set up **MacOS** for native development, complete the following steps:
- Install the latest stable Ruby version (use a Ruby version manager for easy installation and management of Ruby versions)
- Run `brew install postgresql@14`
- Run `brew install redis`
- Run `brew install imagemagick`
- Run `brew install libidn`
- Install Foreman or a similar tool (such as [overmind](https://github.com/DarthSim/overmind)) to handle multiple process launching.
- Navigate to Mastodon's root directory and run `brew install nvm` then `nvm use` to use the version from .nvmrc
- Use a Ruby version manager to install the specified version from `.ruby-version`
- Run `brew install postgresql@14 redis imagemagick libidn` to install required dependencies
- Navigate to Mastodon's root directory and run `brew install nvm` then `nvm use` to use the version from `.nvmrc`
- Run `corepack enable && corepack prepare`
- Run `bundle exec rails db:setup` (optionally prepend `RAILS_ENV=development` to target the dev environment)
- Finally, run `overmind start -f Procfile.dev`
- Finally, run `bin/dev` which will launch the local services via `overmind` (if installed) or `foreman`
### Docker
@ -108,7 +104,7 @@ For development with **Docker**, complete the following steps:
- Install Docker Desktop
- Run `docker compose -f .devcontainer/docker-compose.yml up -d`
- Run `docker compose -f .devcontainer/docker-compose.yml exec app .devcontainer/post-create.sh`
- Finally, run `docker compose -f .devcontainer/docker-compose.yml exec app foreman start -f Procfile.dev`
- Finally, run `docker compose -f .devcontainer/docker-compose.yml exec app bin/dev`
If you are using an IDE with [support for the Development Container specification](https://containers.dev/supporting), it will run the above `docker compose` commands automatically. For **Visual Studio Code** this requires the [Dev Container extension](https://containers.dev/supporting#dev-containers).
@ -119,7 +115,7 @@ To get you coding in just a few minutes, GitHub Codespaces provides a web-based
- Click this button to create a new codespace:<br>
[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new?hide_repo_select=true&ref=main&repo=52281283&devcontainer_path=.devcontainer%2Fcodespaces%2Fdevcontainer.json)
- Wait for the environment to build. This will take a few minutes.
- When the editor is ready, run `foreman start -f Procfile.dev` in the terminal.
- When the editor is ready, run `bin/dev` in the terminal.
- After a few seconds, a popup will appear with a button labeled _Open in Browser_. This will open Mastodon.
- On the _Ports_ tab, right click on the “stream” row and select _Port visibility__Public_.

2
Vagrantfile vendored
View file

@ -188,7 +188,7 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.post_up_message = <<MESSAGE
To start server
$ vagrant ssh -c "cd /vagrant && foreman start"
$ vagrant ssh -c "cd /vagrant && bin/dev"
MESSAGE
end

View file

@ -4,7 +4,7 @@ class Api::V1::Accounts::StatusesController < Api::BaseController
before_action -> { authorize_if_got_token! :read, :'read:statuses' }
before_action :set_account
after_action :insert_pagination_headers, unless: -> { truthy_param?(:pinned) }
after_action :insert_pagination_headers
def index
cache_if_unauthenticated!

View file

@ -178,7 +178,7 @@ class ApplicationController < ActionController::Base
respond_to do |format|
format.any { render 'errors/self_destruct', layout: 'auth', status: 410, formats: [:html] }
format.json { render json: { error: Rack::Utils::HTTP_STATUS_CODES[410] }, status: code }
format.json { render json: { error: Rack::Utils::HTTP_STATUS_CODES[410] }, status: 410 }
end
end

View file

@ -127,7 +127,7 @@ module LanguagesHelper
om: ['Oromo', 'Afaan Oromoo'].freeze,
or: ['Oriya', 'ଓଡ଼ିଆ'].freeze,
os: ['Ossetian', 'ирон æвзаг'].freeze,
pa: ['Panjabi', 'ਪੰਜਾਬੀ'].freeze,
pa: ['Punjabi', 'ਪੰਜਾਬੀ'].freeze,
pi: ['Pāli', 'पाऴि'].freeze,
pl: ['Polish', 'Polski'].freeze,
ps: ['Pashto', 'پښتو'].freeze,
@ -191,16 +191,19 @@ module LanguagesHelper
chr: ['Cherokee', 'ᏣᎳᎩ ᎦᏬᏂᎯᏍᏗ'].freeze,
ckb: ['Sorani (Kurdish)', 'سۆرانی'].freeze,
cnr: ['Montenegrin', 'crnogorski'].freeze,
csb: ['Kashubian', 'Kaszëbsczi'].freeze,
gsw: ['Swiss German', 'Schwiizertütsch'].freeze,
jbo: ['Lojban', 'la .lojban.'].freeze,
kab: ['Kabyle', 'Taqbaylit'].freeze,
ldn: ['Láadan', 'Láadan'].freeze,
lfn: ['Lingua Franca Nova', 'lingua franca nova'].freeze,
pdc: ['Pennsylvania Dutch', 'Pennsilfaani-Deitsch'].freeze,
sco: ['Scots', 'Scots'].freeze,
sma: ['Southern Sami', 'Åarjelsaemien Gïele'].freeze,
smj: ['Lule Sami', 'Julevsámegiella'].freeze,
szl: ['Silesian', 'ślůnsko godka'].freeze,
tok: ['Toki Pona', 'toki pona'].freeze,
vai: ['Vai', 'ꕙꔤ'].freeze,
xal: ['Kalmyk', 'Хальмг келн'].freeze,
zba: ['Balaibalan', 'باليبلن'].freeze,
zgh: ['Standard Moroccan Tamazight', 'ⵜⴰⵎⴰⵣⵉⵖⵜ'].freeze,

View file

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2020-2024 Paweł Kuna
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View file

@ -0,0 +1 @@
Images in this folder are based on [Tabler.io icons](https://tabler.io/icons).

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

View file

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2020-2024 Paweł Kuna
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View file

@ -0,0 +1 @@
Images in this folder are based on [Tabler.io icons](https://tabler.io/icons).

View file

Before

Width:  |  Height:  |  Size: 547 B

After

Width:  |  Height:  |  Size: 547 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

View file

Before

Width:  |  Height:  |  Size: 1 KiB

After

Width:  |  Height:  |  Size: 1 KiB

View file

Before

Width:  |  Height:  |  Size: 505 B

After

Width:  |  Height:  |  Size: 505 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

Before

Width:  |  Height:  |  Size: 688 B

After

Width:  |  Height:  |  Size: 688 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View file

Before

Width:  |  Height:  |  Size: 709 B

After

Width:  |  Height:  |  Size: 709 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 939 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

View file

@ -67,7 +67,7 @@ class EditedTimestamp extends PureComponent {
return (
<DropdownMenu statusId={statusId} renderItem={this.renderItem} scrollable renderHeader={this.renderHeader} onItemClick={this.handleItemClick}>
<button className='dropdown-menu__text-button'>
<FormattedMessage id='status.edited' defaultMessage='Edited {date}' values={{ date: intl.formatDate(timestamp, { hour12: false, month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }) }} /> <Icon id='caret-down' icon={ArrowDropDownIcon} />
<FormattedMessage id='status.edited' defaultMessage='Edited {date}' values={{ date: intl.formatDate(timestamp, { month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }) }} /> <Icon id='caret-down' icon={ArrowDropDownIcon} />
</button>
</DropdownMenu>
);

View file

@ -53,7 +53,6 @@ const messages = defineMessages({
});
const dateFormatOptions = {
hour12: false,
year: 'numeric',
month: 'short',
day: '2-digit',

View file

@ -554,7 +554,7 @@ class Status extends ImmutablePureComponent {
<div onClick={this.handleClick} className='status__info'>
<a href={`/@${status.getIn(['account', 'acct'])}/${status.get('id')}`} className='status__relative-time' target='_blank' rel='noopener noreferrer'>
<span className='status__visibility-icon'><VisibilityIcon visibility={status.get('visibility')} /></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'), { year: 'numeric', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }) })}> *</abbr>}
</a>
<a onClick={this.handleAccountClick} href={`/@${status.getIn(['account', 'acct'])}`} title={status.getIn(['account', 'acct'])} className='status__display-name' target='_blank' rel='noopener noreferrer'>

View file

@ -80,7 +80,7 @@ export default class MediaContainer extends PureComponent {
return (
<IntlProvider>
<>
{[].map.call(components, (component, i) => {
{Array.from(components).map((component, i) => {
const componentName = component.getAttribute('data-component');
const Component = MEDIA_COMPONENTS[componentName];
const { media, card, poll, hashtag, ...props } = JSON.parse(component.getAttribute('data-props'));

View file

@ -101,7 +101,6 @@ const dateFormatOptions = {
month: 'short',
day: 'numeric',
year: 'numeric',
hour12: false,
hour: '2-digit',
minute: '2-digit',
};

View file

@ -6,9 +6,9 @@ import { Link } from 'react-router-dom';
import { useDispatch, useSelector } from 'react-redux';
import BarChart4BarsIcon from 'mastodon/../material-icons/400-24px/bar_chart_4_bars.svg?react';
import CloseIcon from 'mastodon/../material-icons/400-24px/close.svg?react';
import PhotoLibraryIcon from 'mastodon/../material-icons/400-24px/photo_library.svg?react';
import BarChart4BarsIcon from '@/material-icons/400-24px/bar_chart_4_bars.svg?react';
import CloseIcon from '@/material-icons/400-24px/close.svg?react';
import PhotoLibraryIcon from '@/material-icons/400-24px/photo_library.svg?react';
import { cancelReplyCompose } from 'mastodon/actions/compose';
import { Icon } from 'mastodon/components/icon';
import { IconButton } from 'mastodon/components/icon_button';

View file

@ -10,7 +10,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
import { supportsPassiveEvents } from 'detect-passive-events';
import Overlay from 'react-overlays/Overlay';
import MoodIcon from 'mastodon/../material-icons/400-24px/mood.svg?react';
import MoodIcon from '@/material-icons/400-20px/mood.svg?react';
import { IconButton } from 'mastodon/components/icon_button';
import { assetHost } from 'mastodon/utils/config';

View file

@ -9,9 +9,9 @@ import { supportsPassiveEvents } from 'detect-passive-events';
import fuzzysort from 'fuzzysort';
import Overlay from 'react-overlays/Overlay';
import CancelIcon from 'mastodon/../material-icons/400-24px/cancel-fill.svg?react';
import SearchIcon from 'mastodon/../material-icons/400-24px/search.svg?react';
import TranslateIcon from 'mastodon/../material-icons/400-24px/translate.svg?react';
import CancelIcon from '@/material-icons/400-24px/cancel-fill.svg?react';
import SearchIcon from '@/material-icons/400-24px/search.svg?react';
import TranslateIcon from '@/material-icons/400-24px/translate.svg?react';
import { Icon } from 'mastodon/components/icon';
import { languages as preloadedLanguages } from 'mastodon/initial_state';
@ -141,6 +141,7 @@ class LanguageDropdownMenu extends PureComponent {
case 'Escape':
onClose();
break;
case ' ':
case 'Enter':
this.handleClick(e);
break;

View file

@ -4,7 +4,7 @@ import { useIntl, defineMessages } from 'react-intl';
import { useSelector, useDispatch } from 'react-redux';
import CloseIcon from 'mastodon/../material-icons/400-24px/close.svg?react';
import CloseIcon from '@/material-icons/400-24px/close.svg?react';
import { cancelReplyCompose } from 'mastodon/actions/compose';
import Account from 'mastodon/components/account';
import { IconButton } from 'mastodon/components/icon_button';

View file

@ -3,7 +3,7 @@ import { PureComponent } from 'react';
import { defineMessages, injectIntl } from 'react-intl';
import BarChart4BarsIcon from '@/material-icons/400-24px/bar_chart_4_bars.svg?react';
import BarChart4BarsIcon from '@/material-icons/400-20px/bar_chart_4_bars.svg?react';
import { IconButton } from '../../../components/icon_button';

View file

@ -5,16 +5,16 @@ import { injectIntl, defineMessages } from 'react-intl';
import classNames from 'classnames';
import { supportsPassiveEvents } from 'detect-passive-events';
import Overlay from 'react-overlays/Overlay';
import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react';
import InfoIcon from '@/material-icons/400-24px/info.svg?react';
import LockIcon from '@/material-icons/400-24px/lock.svg?react';
import PublicIcon from '@/material-icons/400-24px/public.svg?react';
import QuietTimeIcon from '@/material-icons/400-24px/quiet_time.svg?react';
import { Icon } from 'mastodon/components/icon';
import { PrivacyDropdownMenu } from './privacy_dropdown_menu';
const messages = defineMessages({
public_short: { id: 'privacy.public.short', defaultMessage: 'Public' },
public_long: { id: 'privacy.public.long', defaultMessage: 'Anyone on and off Mastodon' },
@ -28,126 +28,6 @@ const messages = defineMessages({
unlisted_extra: { id: 'privacy.unlisted.additional', defaultMessage: 'This behaves exactly like public, except the post will not appear in live feeds or hashtags, explore, or Mastodon search, even if you are opted-in account-wide.' },
});
const listenerOptions = supportsPassiveEvents ? { passive: true, capture: true } : true;
class PrivacyDropdownMenu extends PureComponent {
static propTypes = {
style: PropTypes.object,
items: PropTypes.array.isRequired,
value: PropTypes.string.isRequired,
onClose: PropTypes.func.isRequired,
onChange: PropTypes.func.isRequired,
};
handleDocumentClick = e => {
if (this.node && !this.node.contains(e.target)) {
this.props.onClose();
e.stopPropagation();
}
};
handleKeyDown = e => {
const { items } = this.props;
const value = e.currentTarget.getAttribute('data-index');
const index = items.findIndex(item => {
return (item.value === value);
});
let element = null;
switch(e.key) {
case 'Escape':
this.props.onClose();
break;
case 'Enter':
this.handleClick(e);
break;
case 'ArrowDown':
element = this.node.childNodes[index + 1] || this.node.firstChild;
break;
case 'ArrowUp':
element = this.node.childNodes[index - 1] || this.node.lastChild;
break;
case 'Tab':
if (e.shiftKey) {
element = this.node.childNodes[index - 1] || this.node.lastChild;
} else {
element = this.node.childNodes[index + 1] || this.node.firstChild;
}
break;
case 'Home':
element = this.node.firstChild;
break;
case 'End':
element = this.node.lastChild;
break;
}
if (element) {
element.focus();
this.props.onChange(element.getAttribute('data-index'));
e.preventDefault();
e.stopPropagation();
}
};
handleClick = e => {
const value = e.currentTarget.getAttribute('data-index');
e.preventDefault();
this.props.onClose();
this.props.onChange(value);
};
componentDidMount () {
document.addEventListener('click', this.handleDocumentClick, { capture: true });
document.addEventListener('touchend', this.handleDocumentClick, listenerOptions);
if (this.focusedItem) this.focusedItem.focus({ preventScroll: true });
}
componentWillUnmount () {
document.removeEventListener('click', this.handleDocumentClick, { capture: true });
document.removeEventListener('touchend', this.handleDocumentClick, listenerOptions);
}
setRef = c => {
this.node = c;
};
setFocusRef = c => {
this.focusedItem = c;
};
render () {
const { style, items, value } = this.props;
return (
<div style={{ ...style }} role='listbox' ref={this.setRef}>
{items.map(item => (
<div role='option' tabIndex={0} key={item.value} data-index={item.value} onKeyDown={this.handleKeyDown} onClick={this.handleClick} className={classNames('privacy-dropdown__option', { active: item.value === value })} aria-selected={item.value === value} ref={item.value === value ? this.setFocusRef : null}>
<div className='privacy-dropdown__option__icon'>
<Icon id={item.icon} icon={item.iconComponent} />
</div>
<div className='privacy-dropdown__option__content'>
<strong>{item.text}</strong>
{item.meta}
</div>
{item.extra && (
<div className='privacy-dropdown__option__additional' title={item.extra}>
<Icon id='info-circle' icon={InfoIcon} />
</div>
)}
</div>
))}
</div>
);
}
}
class PrivacyDropdown extends PureComponent {
static propTypes = {

View file

@ -0,0 +1,128 @@
import PropTypes from 'prop-types';
import { useCallback, useEffect, useRef, useState } from 'react';
import classNames from 'classnames';
import { supportsPassiveEvents } from 'detect-passive-events';
import InfoIcon from '@/material-icons/400-24px/info.svg?react';
import { Icon } from 'mastodon/components/icon';
const listenerOptions = supportsPassiveEvents ? { passive: true, capture: true } : true;
export const PrivacyDropdownMenu = ({ style, items, value, onClose, onChange }) => {
const nodeRef = useRef(null);
const focusedItemRef = useRef(null);
const [currentValue, setCurrentValue] = useState(value);
const handleDocumentClick = useCallback((e) => {
if (nodeRef.current && !nodeRef.current.contains(e.target)) {
onClose();
e.stopPropagation();
}
}, [nodeRef, onClose]);
const handleClick = useCallback((e) => {
const value = e.currentTarget.getAttribute('data-index');
e.preventDefault();
onClose();
onChange(value);
}, [onClose, onChange]);
const handleKeyDown = useCallback((e) => {
const value = e.currentTarget.getAttribute('data-index');
const index = items.findIndex(item => (item.value === value));
let element = null;
switch (e.key) {
case 'Escape':
onClose();
break;
case ' ':
case 'Enter':
handleClick(e);
break;
case 'ArrowDown':
element = nodeRef.current.childNodes[index + 1] || nodeRef.current.firstChild;
break;
case 'ArrowUp':
element = nodeRef.current.childNodes[index - 1] || nodeRef.current.lastChild;
break;
case 'Tab':
if (e.shiftKey) {
element = nodeRef.current.childNodes[index + 1] || nodeRef.current.firstChild;
} else {
element = nodeRef.current.childNodes[index - 1] || nodeRef.current.lastChild;
}
break;
case 'Home':
element = nodeRef.current.firstChild;
break;
case 'End':
element = nodeRef.current.lastChild;
break;
}
if (element) {
element.focus();
setCurrentValue(element.getAttribute('data-index'));
e.preventDefault();
e.stopPropagation();
}
}, [nodeRef, items, onClose, handleClick, setCurrentValue]);
useEffect(() => {
document.addEventListener('click', handleDocumentClick, { capture: true });
document.addEventListener('touchend', handleDocumentClick, listenerOptions);
focusedItemRef.current?.focus({ preventScroll: true });
return () => {
document.removeEventListener('click', handleDocumentClick, { capture: true });
document.removeEventListener('touchend', handleDocumentClick, listenerOptions);
};
}, [handleDocumentClick]);
return (
<ul style={{ ...style }} role='listbox' ref={nodeRef}>
{items.map(item => (
<li
role='option'
tabIndex={0}
key={item.value}
data-index={item.value}
onKeyDown={handleKeyDown}
onClick={handleClick}
className={classNames('privacy-dropdown__option', { active: item.value === currentValue })}
aria-selected={item.value === currentValue}
ref={item.value === currentValue ? focusedItemRef : null}
>
<div className='privacy-dropdown__option__icon'>
<Icon id={item.icon} icon={item.iconComponent} />
</div>
<div className='privacy-dropdown__option__content'>
<strong>{item.text}</strong>
{item.meta}
</div>
{item.extra && (
<div className='privacy-dropdown__option__additional' title={item.extra}>
<Icon id='info-circle' icon={InfoIcon} />
</div>
)}
</li>
))}
</ul>
);
};
PrivacyDropdownMenu.propTypes = {
style: PropTypes.object,
items: PropTypes.array.isRequired,
value: PropTypes.string.isRequired,
onClose: PropTypes.func.isRequired,
onChange: PropTypes.func.isRequired,
};

View file

@ -9,7 +9,7 @@ import ImmutablePureComponent from 'react-immutable-pure-component';
import spring from 'react-motion/lib/spring';
import CloseIcon from '@/material-icons/400-24px/close.svg?react';
import CloseIcon from '@/material-icons/400-20px/close.svg?react';
import EditIcon from '@/material-icons/400-24px/edit.svg?react';
import WarningIcon from '@/material-icons/400-24px/warning.svg?react';
import { Blurhash } from 'mastodon/components/blurhash';

View file

@ -6,7 +6,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
import ImmutablePureComponent from 'react-immutable-pure-component';
import { connect } from 'react-redux';
import PhotoLibraryIcon from '@/material-icons/400-24px/photo_library.svg?react';
import PhotoLibraryIcon from '@/material-icons/400-20px/photo_library.svg?react';
import { IconButton } from 'mastodon/components/icon_button';
const messages = defineMessages({

View file

@ -2,7 +2,7 @@ import { injectIntl, defineMessages } from 'react-intl';
import { connect } from 'react-redux';
import WarningIcon from 'mastodon/../material-icons/400-24px/warning.svg?react';
import WarningIcon from '@/material-icons/400-20px/warning.svg?react';
import { IconButton } from 'mastodon/components/icon_button';
import { changeComposeSpoilerness } from '../../../actions/compose';

View file

@ -36,7 +36,7 @@ Object.keys(emojiIndex.emojis).forEach(key => {
let emoji = emojiIndex.emojis[key];
// Emojis with skin tone modifiers are stored like this
if (Object.prototype.hasOwnProperty.call(emoji, '1')) {
if (Object.hasOwn(emoji, '1')) {
emoji = emoji['1'];
}
@ -88,7 +88,7 @@ Object.keys(emojiIndex.emojis).forEach(key => {
let emoji = emojiIndex.emojis[key];
// Emojis with skin tone modifiers are stored like this
if (Object.prototype.hasOwnProperty.call(emoji, '1')) {
if (Object.hasOwn(emoji, '1')) {
emoji = emoji['1'];
}

View file

@ -135,19 +135,19 @@ function getData(emoji, skin, set) {
}
}
if (Object.prototype.hasOwnProperty.call(data.short_names, emoji)) {
if (Object.hasOwn(data.short_names, emoji)) {
emoji = data.short_names[emoji];
}
if (Object.prototype.hasOwnProperty.call(data.emojis, emoji)) {
if (Object.hasOwn(data.emojis, emoji)) {
emojiData = data.emojis[emoji];
}
} else if (emoji.id) {
if (Object.prototype.hasOwnProperty.call(data.short_names, emoji.id)) {
if (Object.hasOwn(data.short_names, emoji.id)) {
emoji.id = data.short_names[emoji.id];
}
if (Object.prototype.hasOwnProperty.call(data.emojis, emoji.id)) {
if (Object.hasOwn(data.emojis, emoji.id)) {
emojiData = data.emojis[emoji.id];
skin = skin || emoji.skin;
}
@ -216,7 +216,7 @@ function deepMerge(a, b) {
let originalValue = a[key],
value = originalValue;
if (Object.prototype.hasOwnProperty.call(b, key)) {
if (Object.hasOwn(b, key)) {
value = b[key];
}

View file

@ -58,7 +58,7 @@ class Explore extends PureComponent {
return (
<Column bindToDocument={!multiColumn} ref={this.setRef} label={intl.formatMessage(messages.title)}>
<ColumnHeader
icon={isSearching ? 'search' : 'hashtag'}
icon={isSearching ? 'search' : 'explore'}
iconComponent={isSearching ? SearchIcon : ExploreIcon}
title={intl.formatMessage(isSearching ? messages.searchResults : messages.title)}
onClick={this.handleHeaderClick}

View file

@ -343,7 +343,7 @@ class Announcement extends ImmutablePureComponent {
<div className='announcements__item'>
<strong className='announcements__item__range'>
<FormattedMessage id='announcement.announcement' defaultMessage='Announcement' />
{hasTimeRange && <span> · <FormattedDate value={startsAt} hour12={false} year={(skipYear || startsAt.getFullYear() === now.getFullYear()) ? undefined : 'numeric'} month='short' day='2-digit' hour={skipTime ? undefined : '2-digit'} minute={skipTime ? undefined : '2-digit'} /> - <FormattedDate value={endsAt} hour12={false} year={(skipYear || endsAt.getFullYear() === now.getFullYear()) ? undefined : 'numeric'} month={skipEndDate ? undefined : 'short'} day={skipEndDate ? undefined : '2-digit'} hour={skipTime ? undefined : '2-digit'} minute={skipTime ? undefined : '2-digit'} /></span>}
{hasTimeRange && <span> · <FormattedDate value={startsAt} year={(skipYear || startsAt.getFullYear() === now.getFullYear()) ? undefined : 'numeric'} month='short' day='2-digit' hour={skipTime ? undefined : '2-digit'} minute={skipTime ? undefined : '2-digit'} /> - <FormattedDate value={endsAt} year={(skipYear || endsAt.getFullYear() === now.getFullYear()) ? undefined : 'numeric'} month={skipEndDate ? undefined : 'short'} day={skipEndDate ? undefined : '2-digit'} hour={skipTime ? undefined : '2-digit'} minute={skipTime ? undefined : '2-digit'} /></span>}
</strong>
<Content announcement={announcement} />

View file

@ -112,7 +112,7 @@ class GettingStarted extends ImmutablePureComponent {
if (showTrends) {
navItems.push(
<ColumnLink key='explore' icon='hashtag' iconComponent={TagIcon} text={intl.formatMessage(messages.explore)} to='/explore' />,
<ColumnLink key='explore' icon='explore' iconComponent={TagIcon} text={intl.formatMessage(messages.explore)} to='/explore' />,
);
}

View file

@ -92,6 +92,10 @@ export default class Card extends PureComponent {
this.setState({ embedded: true });
};
handleExternalLinkClick = (e) => {
e.stopPropagation();
};
setRef = c => {
this.node = c;
};
@ -201,7 +205,7 @@ export default class Card extends PureComponent {
<div className='status-card__actions' onClick={this.handleEmbedClick} role='none'>
<div>
<button type='button' onClick={this.handleEmbedClick}><Icon id='play' icon={PlayArrowIcon} /></button>
<a href={card.get('url')} target='_blank' rel='noopener noreferrer'><Icon id='external-link' icon={OpenInNewIcon} /></a>
<a href={card.get('url')} onClick={this.handleExternalLinkClick} target='_blank' rel='noopener noreferrer'><Icon id='external-link' icon={OpenInNewIcon} /></a>
</div>
</div>
) : spoilerButton}

View file

@ -311,7 +311,7 @@ class DetailedStatus extends ImmutablePureComponent {
<div className='detailed-status__meta'>
<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'))} year='numeric' month='short' day='2-digit' hour='2-digit' minute='2-digit' />
</a>{edited}{visibilityLink}{applicationLink}{reblogLink} · {favouriteLink}
</div>
</div>

View file

@ -94,7 +94,7 @@ class NavigationPanel extends Component {
)}
{trendsEnabled ? (
<ColumnLink transparent to='/explore' icon='hashtag' iconComponent={ExploreIcon} text={intl.formatMessage(messages.explore)} />
<ColumnLink transparent to='/explore' icon='explore' iconComponent={ExploreIcon} text={intl.formatMessage(messages.explore)} />
) : (
<ColumnLink transparent to='/search' icon='search' iconComponent={SearchIcon} text={intl.formatMessage(messages.search)} />
)}

View file

@ -277,7 +277,13 @@
"follow_request.authorize": "Упълномощаване",
"follow_request.reject": "Отхвърляне",
"follow_requests.unlocked_explanation": "Въпреки че акаунтът ви не е заключен, служителите на {domain} помислиха, че може да искате да преглеждате ръчно заявките за последване на тези профили.",
"follow_suggestions.curated_suggestion": "Избор на персонал",
"follow_suggestions.dismiss": "Без ново показване",
"follow_suggestions.hints.featured": "Този профил е ръчно подбран от отбора на {domain}.",
"follow_suggestions.hints.friends_of_friends": "Този профил е популярен измежду хората, които следвате.",
"follow_suggestions.hints.most_followed": "Този профил е един от най-следваните при {domain}.",
"follow_suggestions.hints.most_interactions": "Този профил наскоро получи много внимание при {domain}.",
"follow_suggestions.hints.similar_to_recently_followed": "Този профил е подобен на профилите, които сте последвали наскоро.",
"follow_suggestions.personalized_suggestion": "Персонализирано предложение",
"follow_suggestions.popular_suggestion": "Популярно предложение",
"follow_suggestions.view_all": "Преглед на всички",
@ -470,7 +476,7 @@
"notifications.permission_required": "Известията на работния плот ги няма, щото няма дадено нужното позволение.",
"notifications_permission_banner.enable": "Включване на известията на работния плот",
"notifications_permission_banner.how_to_control": "За да получавате известия, когато Mastodon не е отворен, включете известията на работния плот. Може да управлявате точно кои видове взаимодействия пораждат известия на работния плот чрез бутона {icon} по-горе, след като бъдат включени.",
"notifications_permission_banner.title": "Никога не пропускате нещо",
"notifications_permission_banner.title": "Никога не пропускайте нищо",
"onboarding.action.back": "Върнете ме обратно",
"onboarding.actions.back": "Върнете ме обратно",
"onboarding.actions.go_to_explore": "Виж тенденции",

View file

@ -29,7 +29,7 @@
"account.enable_notifications": "Ma c'hemenn pa vez embannet traoù gant @{name}",
"account.endorse": "Lakaat war-wel war ar profil",
"account.featured_tags.last_status_at": "Toud diwezhañ : {date}",
"account.featured_tags.last_status_never": "Toud ebet",
"account.featured_tags.last_status_never": "Embannadur ebet",
"account.featured_tags.title": "Hashtagoù pennañ {name}",
"account.follow": "Heuliañ",
"account.follow_back": "Heuliañ d'ho tro",
@ -62,7 +62,7 @@
"account.requested_follow": "Gant {name} eo bet goulennet ho heuliañ",
"account.share": "Skignañ profil @{name}",
"account.show_reblogs": "Diskouez skignadennoù @{name}",
"account.statuses_counter": "{count, plural, one {{counter} Toud} two {{counter} Doud} other {{counter} a Doudoù}}",
"account.statuses_counter": "{count, plural, one {{counter} C'hannad} two {{counter} Gannad} other {{counter} a Gannadoù}}",
"account.unblock": "Diverzañ @{name}",
"account.unblock_domain": "Diverzañ an domani {domain}",
"account.unblock_short": "Distankañ",
@ -118,9 +118,9 @@
"column.lists": "Listennoù",
"column.mutes": "Implijer·ion·ezed kuzhet",
"column.notifications": "Kemennoù",
"column.pins": "Toudoù spilhennet",
"column.pins": "Embannadurioù spilhennet",
"column.public": "Red-amzer kevredet",
"column_back_button.label": "Distro",
"column_back_button.label": "Distreiñ",
"column_header.hide_settings": "Kuzhat an arventennoù",
"column_header.moveLeft_settings": "Dilec'hiañ ar bannad a-gleiz",
"column_header.moveRight_settings": "Dilec'hiañ ar bannad a-zehou",
@ -199,9 +199,9 @@
"embed.preview": "Setu penaos e teuio war wel :",
"emoji_button.activity": "Obererezh",
"emoji_button.clear": "Diverkañ",
"emoji_button.custom": "Kempennet",
"emoji_button.custom": "Personelaet",
"emoji_button.flags": "Bannieloù",
"emoji_button.food": "Boued hag Evaj",
"emoji_button.food": "Boued & Evajoù",
"emoji_button.label": "Enlakaat un emoji",
"emoji_button.nature": "Natur",
"emoji_button.not_found": "Emoji ebet !! (╯°□°)╯︵ ┻━┻",
@ -211,12 +211,12 @@
"emoji_button.search": "O klask...",
"emoji_button.search_results": "Disoc'hoù an enklask",
"emoji_button.symbols": "Arouezioù",
"emoji_button.travel": "Lec'hioù ha Beajoù",
"emoji_button.travel": "Beajiñ & Lec'hioù",
"empty_column.account_suspended": "Kont ehanet",
"empty_column.account_timeline": "Toud ebet amañ !",
"empty_column.account_unavailable": "Profil dihegerz",
"empty_column.blocks": "N'eus ket bet berzet implijer·ez ganeoc'h c'hoazh.",
"empty_column.bookmarked_statuses": "N'ho peus toud ebet enrollet en ho sinedoù c'hoazh. Pa vo ouzhpennet unan e teuio war wel amañ.",
"empty_column.bookmarked_statuses": "N'ho peus embannadur ebet enrollet en ho sinedoù c'hoazh. Pa vo ouzhpennet unan e teuio war wel amañ.",
"empty_column.community": "Goulo eo ar red-amzer lec'hel. Skrivit'ta un dra evit lakaat tan dezhi !",
"empty_column.domain_blocks": "N'eus domani kuzh ebet c'hoazh.",
"empty_column.explore_statuses": "N'eus tuadur ebet evit c'hoazh. Distroit diwezhatoc'h !",
@ -260,6 +260,7 @@
"follow_request.authorize": "Aotren",
"follow_request.reject": "Nac'hañ",
"follow_requests.unlocked_explanation": "Daoust ma n'eo ket ho kont prennet, skipailh {domain} a soñj e fellfe deoc'h gwiriekaat pedadennoù heuliañ deus ar c'hontoù-se diwar-zorn.",
"follow_suggestions.view_all": "Gwelet pep tra",
"followed_tags": "Hashtagoù o heuliañ",
"footer.about": "Diwar-benn",
"footer.directory": "Kavlec'h ar profiloù",
@ -267,7 +268,7 @@
"footer.invite": "Pediñ tud",
"footer.keyboard_shortcuts": "Berradennoù klavier",
"footer.privacy_policy": "Reolennoù prevezded",
"footer.source_code": "Gwelet kod mammenn",
"footer.source_code": "Gwelet ar c'hod mammenn",
"footer.status": "Statud",
"generic.saved": "Enrollet",
"getting_started.heading": "Loc'hañ",
@ -295,7 +296,7 @@
"interaction_modal.description.follow": "Gant ur gont Mastodon e c'hellit heuliañ {name} evit resev an toudoù a embann war ho red degemer.",
"interaction_modal.description.reblog": "Gant ur gont Mastodon e c'hellit skignañ an toud-mañ evit rannañ anezhañ gant ho heulierien·ezed.",
"interaction_modal.description.reply": "Gant ur gont Mastodon e c'hellit respont d'an toud-mañ.",
"interaction_modal.no_account_yet": "N'eo ket war vMastodon?",
"interaction_modal.no_account_yet": "N'emañ ket war vMastodon?",
"interaction_modal.on_another_server": "War ur servijer all",
"interaction_modal.on_this_server": "War ar servijer-mañ",
"interaction_modal.title.favourite": "Ouzhpennañ embannadur {name} d'ar re vuiañ-karet",
@ -463,7 +464,7 @@
"onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
"onboarding.steps.setup_profile.title": "Customize your profile",
"onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
"onboarding.steps.share_profile.title": "Share your profile",
"onboarding.steps.share_profile.title": "Rannit ho kont Mastodon",
"password_confirmation.mismatching": "Disheñvel eo an daou c'her-termen-se",
"picture_in_picture.restore": "Adlakaat",
"poll.closed": "Serret",
@ -476,7 +477,8 @@
"poll.votes": "{votes, plural,one {#votadenn} other {# votadenn}}",
"poll_button.add_poll": "Ouzhpennañ ur sontadeg",
"poll_button.remove_poll": "Dilemel ar sontadeg",
"privacy.change": "Cheñch prevezded an toud",
"privacy.change": "Cheñch prevezded an embannadur",
"privacy.direct.short": "Tud resis",
"privacy.private.short": "Heulierien",
"privacy.public.short": "Publik",
"privacy_policy.last_updated": "Hizivadenn ziwezhañ {date}",

View file

@ -279,8 +279,8 @@
"follow_requests.unlocked_explanation": "Tot i que el teu compte no està blocat, el personal de {domain} ha pensat que és possible que vulguis revisar manualment les sol·licituds de seguiment daquests comptes.",
"follow_suggestions.curated_suggestion": "Tria de l'equip",
"follow_suggestions.dismiss": "No ho tornis a mostrar",
"follow_suggestions.hints.featured": "Aquest perfil ha estat triat per l'equip de {domain}.",
"follow_suggestions.hints.friends_of_friends": "Aquest perfil és popular entre la gent que segueixes.",
"follow_suggestions.hints.featured": "L'equip de {domain} ha seleccionat aquest perfil.",
"follow_suggestions.hints.friends_of_friends": "Aquest perfil és popular entre la gent que seguiu.",
"follow_suggestions.hints.most_followed": "Aquest perfil és un dels més seguits a {domain}.",
"follow_suggestions.hints.most_interactions": "Aquest perfil ha estat rebent un munt d'atenció recentment a {domain}.",
"follow_suggestions.hints.similar_to_recently_followed": "Aquest perfil és similar a d'altres que heu seguit recentment.",

View file

@ -17,9 +17,11 @@
"account.badges.group": "گرووپ",
"account.block": "بلۆکی @{name}",
"account.block_domain": "بلۆکی هەموو شتێک لە {domain}",
"account.block_short": "بلۆک",
"account.blocked": "بلۆککرا",
"account.browse_more_on_origin_server": "گەڕانی فرەتر لە سەر پرۆفایلی سەرەکی",
"account.cancel_follow_request": "داواکاری فۆڵۆو بکشێنەوە",
"account.copy": "ڕوونووسی بەستەر بۆ توت",
"account.direct": "بە شێوەیەکی تایبەت باسی @{name} بکە",
"account.disable_notifications": "ئاگانامە مەنێرە بۆم کاتێک @{name} پۆست دەکرێت",
"account.domain_blocked": "دۆمەین قەپاتکرا",
@ -30,6 +32,7 @@
"account.featured_tags.last_status_never": "هیچ پۆستێک نییە",
"account.featured_tags.title": "هاشتاگە تایبەتەکانی {name}",
"account.follow": "بەدواداچوون",
"account.follow_back": "فۆڵۆو بکەنەوە",
"account.followers": "شوێنکەوتووان",
"account.followers.empty": "کەسێک شوێن ئەم بەکارهێنەرە نەکەوتووە",
"account.followers_counter": "{count, plural, one {{counter} شوێنکەوتوو} other {{counter} شوێنکەوتوو}}",
@ -38,6 +41,7 @@
"account.follows.empty": "ئەم بەکارهێنەرە تا ئێستا شوێن کەس نەکەوتووە.",
"account.go_to_profile": "بڕۆ بۆ پڕۆفایلی",
"account.hide_reblogs": "داشاردنی بووستەکان لە @{name}",
"account.in_memoriam": "لە یادەوەریدا.",
"account.joined_short": "بەشداری کردووە",
"account.languages": "گۆڕینی زمانە بەشداربووەکان",
"account.link_verified_on": "خاوەنداریەتی ئەم لینکە لە {date} چێک کراوە",
@ -46,7 +50,11 @@
"account.mention": "ئاماژە @{name}",
"account.moved_to": "{name} ئاماژەی بەوە کردووە کە ئەکاونتە نوێیەکەیان ئێستا:",
"account.mute": "بێدەنگکردن @{name}",
"account.mute_notifications_short": "پاڵ بە ئاگادارکردنەوەکانەوە بنێ",
"account.mute_short": "بێدەنگ",
"account.muted": "بێ دەنگ",
"account.mutual": "دوولایەنە",
"account.no_bio": "هیچ وەسفێک نەخراوەتەڕوو.",
"account.open_original_page": "لاپەڕەی ئەسڵی بکەرەوە",
"account.posts": "نووسراوەکان",
"account.posts_with_replies": "توتس و وەڵامەکان",
@ -62,6 +70,7 @@
"account.unendorse": "تایبەتمەندی لەسەر پرۆفایلەکە نیە",
"account.unfollow": "بەدوادانەچو",
"account.unmute": "بێدەنگکردنی @{name}",
"account.unmute_notifications_short": "ئاگادارکردنەوەکان بێدەنگ بکەرەوە",
"account.unmute_short": "بێدەنگی مەکە",
"account_note.placeholder": "کرتەبکە بۆ زیادکردنی تێبینی",
"admin.dashboard.daily_retention": "ڕێژەی مانەوەی بەکارهێنەر بەپێی ڕۆژ دوای ناو تۆمارکردن",
@ -69,6 +78,10 @@
"admin.dashboard.retention.average": "ڕێژە",
"admin.dashboard.retention.cohort": "چوونەژوورەوەی مانگانە",
"admin.dashboard.retention.cohort_size": "ئەندامی نوێ",
"admin.impact_report.instance_accounts": "پڕۆفایلی هەژمارەکان ئەمە دەسڕێتەوە",
"admin.impact_report.instance_followers": "فۆڵۆوەرەکان بەکارهێنەران لەدەست دەدەن",
"admin.impact_report.instance_follows": "فۆڵۆوەرەکان ئەمبەکارهێنەرە لەدەست دەدەن",
"admin.impact_report.title": "پوختەی کاریگەرییەکان",
"alert.rate_limited.message": "تکایە هەوڵبدەرەوە دوای {retry_time, time, medium}.",
"alert.rate_limited.title": "ڕێژەی سنووردار",
"alert.unexpected.message": "هەڵەیەکی چاوەڕوان نەکراو ڕوویدا.",
@ -101,6 +114,8 @@
"column.direct": "ئاماژەی تایبەت",
"column.directory": "گەڕان لە پرۆفایلەکان",
"column.domain_blocks": "دۆمەینە داخراوەکان",
"column.favourites": "دڵخوازەکان",
"column.firehose": "فیدی ڕاستەوخۆ",
"column.follow_requests": "بەدواداچوی داواکاریەکان بکە",
"column.home": "سەرەتا",
"column.lists": "پێرست",
@ -121,6 +136,9 @@
"community.column_settings.remote_only": "تەنها بۆ دوور",
"compose.language.change": "گۆڕینی زمان",
"compose.language.search": "گەڕان بە زمانەکان...",
"compose.published.body": "پۆست بڵاوکراوەتەوە.",
"compose.published.open": "بیکەوە",
"compose.saved.body": "پۆستەکە سەیڤ کراوە.",
"compose_form.direct_message_warning_learn_more": "زیاتر فێربه",
"compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
"compose_form.hashtag_warning": "ئەم بڵاوکراوەیە لە ژێر هیچ هاشتاگێکدا دا نانرێت وەک ئەوەیە، کە گشتی نەبێت. تەنها بڵاوکراوە گشتیەکان دەتوانرێ بە هاشتاگ گەڕانی بۆ بکرێت.",
@ -128,11 +146,19 @@
"compose_form.lock_disclaimer.lock": "قفڵ دراوە",
"compose_form.placeholder": "چی لە مێشکتدایە?",
"compose_form.poll.duration": "ماوەی ڕاپرسی",
"compose_form.poll.multiple": "فرە هەڵبژاردە",
"compose_form.poll.option_placeholder": "بژاردەی {number}",
"compose_form.poll.single": "یەکێك هەلبژێرە",
"compose_form.poll.switch_to_multiple": "ڕاپرسی بگۆڕە بۆ ڕێگەدان بە چەند هەڵبژاردنێک",
"compose_form.poll.switch_to_single": "گۆڕینی ڕاپرسی بۆ ڕێگەدان بە تاکە هەڵبژاردنێک",
"compose_form.poll.type": "ستایڵ",
"compose_form.publish": "پۆست",
"compose_form.publish_form": "بڵاوی بکەوە",
"compose_form.reply": "وەڵام",
"compose_form.save_changes": "نوێکردنەوە",
"compose_form.spoiler.marked": "دەق لە پشت ئاگاداریدا شاراوەتەوە",
"compose_form.spoiler.unmarked": "دەق شاراوە نییە",
"compose_form.spoiler_placeholder": "ئاگادارکردنەوەی ناوەڕۆک (ئیختیاری)",
"confirmation_modal.cancel": "هەڵوەشاندنەوه",
"confirmations.block.block_and_report": "بلۆک & گوزارشت",
"confirmations.block.confirm": "بلۆک",
@ -155,6 +181,7 @@
"confirmations.mute.explanation": "ئەمەش دەبێتە هۆی شاردنەوەی پۆستەکان یان ئەو بابەتانەی کە ئاماژەیان پێ دەکات ، بەڵام هێشتا ڕێگەیان پێ دەدات کە پۆستەکانتان ببینن و شوێنتان بکەون.",
"confirmations.mute.message": "ئایا دڵنیایت لەوەی دەتەوێت بیلێیت {name}?",
"confirmations.redraft.confirm": "سڕینەوە & دووبارە ڕەشکردنەوە",
"confirmations.redraft.message": "دڵنیای دەتەوێت ئەم پۆستە بسڕیتەوە و دووبارە دایبڕێژیتەوە؟ فەڤۆریت و بووستەکان لەدەست دەچن، وەڵامەکانی پۆستە ئەسڵیەکەش هەتیو دەبن.",
"confirmations.reply.confirm": "وەڵام",
"confirmations.reply.message": "وەڵامدانەوە ئێستا ئەو نامەیە ی کە تۆ ئێستا دایڕشتووە، دەنووسێتەوە. ئایا دڵنیایت کە دەتەوێت بەردەوام بیت?",
"confirmations.unfollow.confirm": "بەدوادانەچو",
@ -163,7 +190,9 @@
"conversation.mark_as_read": "نیشانەکردن وەک خوێندراوە",
"conversation.open": "نیشاندان گفتوگۆ",
"conversation.with": "لەگەڵ{names}",
"copy_icon_button.copied": "کۆپی کراوە بۆ کلیپبۆرد",
"copypaste.copied": "کۆپی کراوە",
"copypaste.copy_to_clipboard": "کۆپی کراوە بۆ کلیپبۆرد",
"directory.federated": "لە ڕاژەکانی ناسراو",
"directory.local": "تەنها لە {domain}",
"directory.new_arrivals": "تازە گەیشتنەکان",
@ -173,6 +202,7 @@
"dismissable_banner.community_timeline": "ئەمانە دوایین پۆستی گشتی ئەو کەسانەن کە ئەکاونتەکانیان لەلایەن {domain}ەوە هۆست کراوە.",
"dismissable_banner.dismiss": "بەلاوە نان",
"dismissable_banner.explore_links": "ئەم هەواڵانە لە ئێستادا لەلایەن کەسانێکەوە لەسەر ئەم سێرڤەرە و سێرڤەرەکانی تری تۆڕی لامەرکەزی باس دەکرێن.",
"dismissable_banner.explore_statuses": "ئەمانە پۆستەکانن لە سەرانسەری وێبی کۆمەڵایەتی کە ئەمڕۆ کێشکردنیان بەدەستهێناوە. پۆستە نوێیەکان کە بووست و فەڤریتی زیاتریان هەیە ڕیزبەندی بەرزتریان هەیە.",
"dismissable_banner.explore_tags": "ئەم هاشتاگانە لە ئێستادا لە نێو خەڵکی سەر ئەم سێرڤەرە و سێرڤەرەکانی تری تۆڕی لامەرکەزیدا جێگەی خۆیان دەگرن.",
"embed.instructions": "ئەم توتە بنچین بکە لەسەر وێب سایتەکەت بە کۆپیکردنی کۆدەکەی خوارەوە.",
"embed.preview": "ئەمە ئەو شتەیە کە لە شێوەی خۆی دەچێت:",
@ -216,6 +246,7 @@
"errors.unexpected_crash.copy_stacktrace": "کۆپیکردنی ستێکتراسی بۆ کلیپ بۆرد",
"errors.unexpected_crash.report_issue": "کێشەی گوزارشت",
"explore.search_results": "ئەنجامەکانی گەڕان",
"explore.suggested_follows": "خەڵک",
"explore.title": "گەڕان",
"explore.trending_links": "هەواڵەکان",
"explore.trending_statuses": "بڵاوکراوەکان",
@ -236,9 +267,16 @@
"filter_modal.select_filter.subtitle": "بەکارهێنانی پۆلێنی بەردەست یان دروستکردنی پۆلێنێکی نوێ",
"filter_modal.select_filter.title": "ئەم بڵاوکراوەیە بپاڵێوە",
"filter_modal.title.status": "بڵاوکراوەیەک بپاڵێوە",
"firehose.all": "هەموو",
"firehose.local": "لەسەر ئەم ڕاژەیە",
"firehose.remote": "ڕاژەکانی دی",
"follow_request.authorize": "ده‌سه‌ڵاتپێدراو",
"follow_request.reject": "ڕەتکردنەوە",
"follow_requests.unlocked_explanation": "هەرچەندە هەژمارەکەت داخراو نییە، ستافی {domain} وا بیریان کردەوە کە لەوانەیە بتانەوێت پێداچوونەوە بە داواکاریەکانی ئەم هەژمارەدا بکەن بە دەستی.",
"follow_suggestions.curated_suggestion": "ستاف هەڵبژاردنی",
"follow_suggestions.dismiss": "دوبارە پشانی مەدە",
"follow_suggestions.view_all": "بینینی هەموو",
"follow_suggestions.who_to_follow": "دواکەوتنی کێ",
"followed_tags": "هاشتاگە شوێنکەوتووەکان",
"footer.about": "دەربارە",
"footer.directory": "ڕابەری پەڕەی ناساندن",
@ -259,6 +297,7 @@
"hashtag.column_settings.tag_mode.any": "هەر کام لەمانە",
"hashtag.column_settings.tag_mode.none": "هیچ کام لەمانە",
"hashtag.column_settings.tag_toggle": "تاگی زیادە ی ئەم ستوونە لەخۆ بنووسە",
"hashtag.counter_by_accounts": "{count, plural, one {{counter} participant} other {{counter} participants}}",
"hashtag.follow": "شوێنکەوتنی هاشتاگ",
"hashtag.unfollow": "شوێن نەکەوتنی هاشتاگ",
"home.column_settings.basic": "بنەڕەتی",

View file

@ -277,7 +277,13 @@
"follow_request.authorize": "Awdurdodi",
"follow_request.reject": "Gwrthod",
"follow_requests.unlocked_explanation": "Er nid yw eich cyfrif wedi'i gloi, roedd y staff {domain} yn meddwl efallai hoffech adolygu ceisiadau dilyn o'r cyfrifau rhain wrth law.",
"follow_suggestions.curated_suggestion": "Dewis staff",
"follow_suggestions.dismiss": "Peidio â dangos hwn eto",
"follow_suggestions.hints.featured": "Mae'r proffil hwn wedi'i ddewis yn arbennig gan dîm {domain}.",
"follow_suggestions.hints.friends_of_friends": "Mae'r proffil hwn yn boblogaidd ymhlith y bobl rydych chi'n eu dilyn.",
"follow_suggestions.hints.most_followed": "Mae'r proffil hwn yn un o'r rhai sy'n cael ei ddilyn fwyaf ar {domain}.",
"follow_suggestions.hints.most_interactions": "Mae'r proffil hwn wedi bod yn cael llawer o sylw yn ddiweddar ar {domain}.",
"follow_suggestions.hints.similar_to_recently_followed": "Mae'r proffil hwn yn debyg i'r proffiliau rydych chi wedi'u dilyn yn fwyaf diweddar.",
"follow_suggestions.personalized_suggestion": "Awgrym personol",
"follow_suggestions.popular_suggestion": "Awgrym poblogaidd",
"follow_suggestions.view_all": "Gweld y cyfan",

View file

@ -277,9 +277,13 @@
"follow_request.authorize": "Autorizar",
"follow_request.reject": "Rechazar",
"follow_requests.unlocked_explanation": "A pesar de que tu cuenta no es privada, el personal de {domain} ha pensado que quizás deberías revisar manualmente las solicitudes de seguimiento de estas cuentas.",
"follow_suggestions.curated_suggestion": "Recomendaciones del equipo",
"follow_suggestions.dismiss": "No mostrar de nuevo",
"follow_suggestions.hints.featured": "Este perfil ha sido elegido a mano por el equipo de {domain}.",
"follow_suggestions.hints.friends_of_friends": "Este perfil es popular entre las personas que sigues.",
"follow_suggestions.hints.most_followed": "Este perfil es uno de los más seguidos en {domain}.",
"follow_suggestions.hints.most_interactions": "Este perfil ha estado recibiendo recientemente mucha atención en {domain}.",
"follow_suggestions.hints.similar_to_recently_followed": "Este perfil es similar a los perfiles que has seguido recientemente.",
"follow_suggestions.personalized_suggestion": "Sugerencia personalizada",
"follow_suggestions.popular_suggestion": "Sugerencia popular",
"follow_suggestions.view_all": "Ver todo",

View file

@ -171,21 +171,21 @@
"confirmations.delete_list.message": "¿Seguro que quieres borrar esta lista permanentemente?",
"confirmations.discard_edit_media.confirm": "Descartar",
"confirmations.discard_edit_media.message": "Tienes cambios sin guardar en la descripción o vista previa del archivo audiovisual, ¿descartarlos de todos modos?",
"confirmations.domain_block.confirm": "Bloquear dominio entero",
"confirmations.domain_block.message": "¿Seguro de que quieres bloquear al dominio {domain} entero? En general unos cuantos bloqueos y silenciados concretos es suficiente y preferible.",
"confirmations.domain_block.confirm": "Bloquear todo el dominio",
"confirmations.domain_block.message": "¿Seguro que quieres bloquear todo el dominio {domain}? En general, unos cuantos bloqueos y silenciados concretos es suficiente y preferible. No verás contenido del dominio en ninguna cronología pública ni en tus notificaciones. Se eliminarán tus seguidores procedentes de ese dominio.",
"confirmations.edit.confirm": "Editar",
"confirmations.edit.message": "Editar ahora reemplazará el mensaje que está escribiendo. ¿Está seguro que quiere proceder?",
"confirmations.edit.message": "Editar ahora reemplazará el mensaje que estás escribiendo. ¿Seguro que quieres proceder?",
"confirmations.logout.confirm": "Cerrar sesión",
"confirmations.logout.message": "¿Estás seguro de querer cerrar la sesión?",
"confirmations.logout.message": "¿Seguro que quieres cerrar la sesión?",
"confirmations.mute.confirm": "Silenciar",
"confirmations.mute.explanation": "Esto esconderá las publicaciones de ellos y en las que los has mencionado, pero les permitirá ver tus mensajes y seguirte.",
"confirmations.mute.message": "¿Estás seguro de que quieres silenciar a {name}?",
"confirmations.mute.explanation": "Esto esconderá sus publicaciones y las publicaciones que los mencionen, pero podrán seguir viendo tus mensajes y seguirte.",
"confirmations.mute.message": "¿Seguro que quieres silenciar a {name}?",
"confirmations.redraft.confirm": "Borrar y volver a borrador",
"confirmations.redraft.message": "¿Estás seguro de querer borrar esta publicación y reescribirla? Los favoritos e impulsos se perderán, y las respuestas a la publicación original quedarán sin contexto.",
"confirmations.reply.confirm": "Responder",
"confirmations.reply.message": "Responder sobrescribirá el mensaje que estás escribiendo. ¿Seguro que deseas continuar?",
"confirmations.unfollow.confirm": "Dejar de seguir",
"confirmations.unfollow.message": "¿Estás seguro de que quieres dejar de seguir a {name}?",
"confirmations.unfollow.message": "¿Seguro que quieres dejar de seguir a {name}?",
"conversation.delete": "Borrar conversación",
"conversation.mark_as_read": "Marcar como leído",
"conversation.open": "Ver conversación",
@ -194,7 +194,7 @@
"copypaste.copied": "Copiado",
"copypaste.copy_to_clipboard": "Copiar al portapapeles",
"directory.federated": "Desde el fediverso conocido",
"directory.local": "Sólo de {domain}",
"directory.local": "Solo de {domain}",
"directory.new_arrivals": "Recién llegados",
"directory.recently_active": "Recientemente activo",
"disabled_account_banner.account_settings": "Ajustes de la cuenta",
@ -210,11 +210,11 @@
"emoji_button.activity": "Actividad",
"emoji_button.clear": "Limpiar",
"emoji_button.custom": "Personalizado",
"emoji_button.flags": "Marcas",
"emoji_button.flags": "Banderas",
"emoji_button.food": "Comida y bebida",
"emoji_button.label": "Insertar emoji",
"emoji_button.nature": "Naturaleza",
"emoji_button.not_found": "No hay emojis!! ¯\\_(ツ)_/¯",
"emoji_button.not_found": "No se encontró ningún emoji coincidente",
"emoji_button.objects": "Objetos",
"emoji_button.people": "Personas",
"emoji_button.recent": "Usados frecuentemente",
@ -230,8 +230,8 @@
"empty_column.bookmarked_statuses": "Aún no tienes ninguna publicación guardada como marcador. Cuando guardes una, se mostrará aquí.",
"empty_column.community": "La línea de tiempo local está vacía. ¡Escribe algo para empezar la fiesta!",
"empty_column.direct": "Aún no tienes menciones privadas. Cuando envíes o recibas una, aparecerán aquí.",
"empty_column.domain_blocks": "Todavía no hay dominios ocultos.",
"empty_column.explore_statuses": "Nada está en tendencia en este momento. ¡Revisa más tarde!",
"empty_column.domain_blocks": "Todavía no hay dominios bloqueados.",
"empty_column.explore_statuses": "No hay nada en tendencia en este momento. ¡Revisa más tarde!",
"empty_column.favourited_statuses": "Todavía no tienes publicaciones favoritas. Cuando marques una publicación como favorita, se mostrarán aquí.",
"empty_column.favourites": "Todavía nadie marcó esta publicación como favorita. Cuando alguien lo haga, se mostrarán aquí.",
"empty_column.follow_requests": "No tienes ninguna petición de seguidor. Cuando recibas una, se mostrará aquí.",
@ -277,9 +277,13 @@
"follow_request.authorize": "Autorizar",
"follow_request.reject": "Rechazar",
"follow_requests.unlocked_explanation": "A pesar de que tu cuenta no es privada, el personal de {domain} ha pensado que quizás deberías revisar manualmente las solicitudes de seguimiento de estas cuentas.",
"follow_suggestions.curated_suggestion": "Recomendaciones del equipo",
"follow_suggestions.dismiss": "No mostrar de nuevo",
"follow_suggestions.hints.featured": "Este perfil ha sido elegido a mano por el equipo de {domain}.",
"follow_suggestions.hints.friends_of_friends": "Este perfil es popular entre las personas que sigues.",
"follow_suggestions.hints.most_followed": "Este perfil es uno de los más seguidos en {domain}.",
"follow_suggestions.hints.most_interactions": "Este perfil ha estado recibiendo recientemente mucha atención en {domain}.",
"follow_suggestions.hints.similar_to_recently_followed": "Este perfil es similar a los perfiles que has seguido recientemente.",
"follow_suggestions.personalized_suggestion": "Sugerencia personalizada",
"follow_suggestions.popular_suggestion": "Sugerencia popular",
"follow_suggestions.view_all": "Ver todo",
@ -551,6 +555,7 @@
"relative_time.minutes": "{number} m",
"relative_time.seconds": "{number} s",
"relative_time.today": "hoy",
"reply_indicator.attachments": "{count, plural, one {# adjunto} other {# adjuntos}}",
"reply_indicator.cancel": "Cancelar",
"reply_indicator.poll": "Encuesta",
"report.block": "Bloquear",

View file

@ -500,7 +500,7 @@
"onboarding.share.message": "{username} naiz #Mastodon-en! Jarrai nazazu hemen: {url}",
"onboarding.share.next_steps": "Hurrengo urrats posibleak:",
"onboarding.share.title": "Partekatu zure profila",
"onboarding.start.lead": "Zure Mastodoneko kontu berria prest dago. Jakin nola atera diezaioekun etekin handiena hemen:",
"onboarding.start.lead": "Mastodonen parte zara orain, bakarra eta deszentralizatua den sare-sozialaren plataforma, non zuk, eta ez algoritmo batek, zeure esperientzia pertsonaliza dezakezun. Igaro ezazu muga soziala:",
"onboarding.start.skip": "Urrats guztiak saltatu nahi dituzu?",
"onboarding.start.title": "Lortu duzu!",
"onboarding.steps.follow_people.body": "Zure jarioa zuk pertsonalizatzen duzu. Bete dezagun jende interesgarriaz.",

View file

@ -110,7 +110,7 @@
"column.about": "درباره",
"column.blocks": "کاربران مسدود شده",
"column.bookmarks": "نشانک‌ها",
"column.community": "خط زمانی محلّی",
"column.community": "خط زمانی محلی",
"column.direct": "اشاره‌های خصوصی",
"column.directory": "مرور نمایه‌ها",
"column.domain_blocks": "دامنه‌های مسدود شده",
@ -131,7 +131,7 @@
"column_header.show_settings": "نمایش تنظیمات",
"column_header.unpin": "برداشتن سنجاق",
"column_subheading.settings": "تنظیمات",
"community.column_settings.local_only": "فقط محلّی",
"community.column_settings.local_only": "فقط محلی",
"community.column_settings.media_only": "فقط رسانه",
"community.column_settings.remote_only": "تنها دوردست",
"compose.language.change": "تغییر زبان",
@ -228,7 +228,7 @@
"empty_column.account_unavailable": "نمایهٔ موجود نیست",
"empty_column.blocks": "هنوز کسی را مسدود نکرده‌اید.",
"empty_column.bookmarked_statuses": "هنوز هیچ فرستهٔ نشانه‌گذاری شده‌ای ندارید. هنگامی که فرسته‌ای را نشانه‌گذاری کنید، این‌جا نشان داده خواهد شد.",
"empty_column.community": "خط زمانی محلّی خالی است. چیزی بنویسید تا چرخش بچرخد!",
"empty_column.community": "خط زمانی محلی خالیست. چیزی نوشته تا چرخش بچرخد!",
"empty_column.direct": "هنوز هیچ اشاره خصوصی‌ای ندارید. هنگامی که چنین پیامی بگیرید یا بفرستید این‌جا نشان داده خواهد شد.",
"empty_column.domain_blocks": "هنوز هیچ دامنه‌ای مسدود نشده است.",
"empty_column.explore_statuses": "الآن چیزی پرطرفدار نیست. بعداً دوباره بررسی کنید!",
@ -277,6 +277,17 @@
"follow_request.authorize": "اجازه دهید",
"follow_request.reject": "رد کنید",
"follow_requests.unlocked_explanation": "با این که حسابتان قفل نیست، کارکنان {domain} فکر کردند که ممکن است بخواهید درخواست‌ها از این حساب‌ها را به صورت دستی بازبینی کنید.",
"follow_suggestions.curated_suggestion": "گزینش سردبیر",
"follow_suggestions.dismiss": "دیگر نشان داده نشود",
"follow_suggestions.hints.featured": "این نمایه به دست گروه {domain} دستچین شده.",
"follow_suggestions.hints.friends_of_friends": "این نمایه بین کسانی که پی می‌گیرید محبوب است.",
"follow_suggestions.hints.most_followed": "این نمایه روی {domain} بسیار پی‌گرفته شده.",
"follow_suggestions.hints.most_interactions": "این نمایه اخیراُ روی {domain} توجّه زیادی گرفته.",
"follow_suggestions.hints.similar_to_recently_followed": "این نمایه شبیه نمایه‌هاییست که اخیراً پی‌گرفته‌اید.",
"follow_suggestions.personalized_suggestion": "پیشنهاد شخصی",
"follow_suggestions.popular_suggestion": "پیشنهاد محبوب",
"follow_suggestions.view_all": "دیدن همه",
"follow_suggestions.who_to_follow": "افرادی برای پی‌گیری",
"followed_tags": "برچسب‌های پی‌گرفته",
"footer.about": "درباره",
"footer.directory": "فهرست نمایه‌ها",
@ -345,7 +356,7 @@
"keyboard_shortcuts.home": "گشودن خط زمانی خانگی",
"keyboard_shortcuts.hotkey": "میان‌بر",
"keyboard_shortcuts.legend": "نمایش این نشانه",
"keyboard_shortcuts.local": "گشودن خط زمانی محلّی",
"keyboard_shortcuts.local": "گشودن خط زمانی محلی",
"keyboard_shortcuts.mention": "اشاره به نویسنده",
"keyboard_shortcuts.muted": "گشودن فهرست کاربران خموش",
"keyboard_shortcuts.my_profile": "گشودن نمایه‌تان",
@ -396,7 +407,7 @@
"navigation_bar.advanced_interface": "بازکردن در رابط کاربری وب پیشرفته",
"navigation_bar.blocks": "کاربران مسدود شده",
"navigation_bar.bookmarks": "نشانک‌ها",
"navigation_bar.community_timeline": "خط زمانی محلّی",
"navigation_bar.community_timeline": "خط زمانی محلی",
"navigation_bar.compose": "نوشتن فرستهٔ تازه",
"navigation_bar.direct": "اشاره‌های خصوصی",
"navigation_bar.discover": "گشت و گذار",
@ -475,8 +486,10 @@
"onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
"onboarding.follows.title": "Popular on Mastodon",
"onboarding.profile.discoverable": "نمایه خود را قابل نمایش کنید",
"onboarding.profile.discoverable_hint": "خواسته‌اید روی ماستودون کشف شوید. ممکن است فرسته‌هایتان در نتیحهٔ جست‌وجوها و فرسته‌های داغ ظاهر شده و نمایه‌تان به افرادی با علایق مشابهتان پیشنهاد شود.",
"onboarding.profile.display_name": "نام نمایشی",
"onboarding.profile.display_name_hint": "نام کامل یا نام باحالتان…",
"onboarding.profile.lead": "همواره می‌توانید این مورد را در تنظیمات که گزینه‌ّای شخصی سازی بیش‌تری نیز دارد کامل کنید.",
"onboarding.profile.note": "درباره شما",
"onboarding.profile.note_hint": "می‌توانید افراد دیگر را @نام‌بردن یا #برچسب بزنید…",
"onboarding.profile.save_and_continue": "ذخیره کن و ادامه بده",
@ -522,6 +535,7 @@
"privacy.private.short": "پی‌گیرندگان",
"privacy.public.long": "هرکسی در و بیرون از ماستودون",
"privacy.public.short": "عمومی",
"privacy.unlisted.additional": "درست مثل عمومی رفتار می‌کند؛ جز این که فرسته در برچسب‌ها یا خوراک‌های زنده، کشف یا جست‌وجوی ماستودون ظاهر نخواهد شد. حتا اگر کلیّت نمایه‌تان اجازه داده باشد.",
"privacy.unlisted.long": "سروصدای الگوریتمی کم‌تر",
"privacy.unlisted.short": "عمومی ساکت",
"privacy_policy.last_updated": "آخرین به‌روز رسانی در {date}",
@ -541,6 +555,7 @@
"relative_time.minutes": "{number} دقیقه",
"relative_time.seconds": "{number} ثانیه",
"relative_time.today": "امروز",
"reply_indicator.attachments": "{count, plural, one {# پیوست} other {# پیوست}}",
"reply_indicator.cancel": "لغو",
"reply_indicator.poll": "نظرسنجی",
"report.block": "انسداد",

View file

@ -277,6 +277,17 @@
"follow_request.authorize": "Autoriser",
"follow_request.reject": "Rejeter",
"follow_requests.unlocked_explanation": "Même si votre compte nest pas privé, léquipe de {domain} a pensé que vous pourriez vouloir peut-être consulter manuellement les demandes d'abonnement de ces comptes.",
"follow_suggestions.curated_suggestion": "Choix du staff",
"follow_suggestions.dismiss": "Ne plus afficher",
"follow_suggestions.hints.featured": "Ce profil a été sélectionné par l'équipe de {domain}.",
"follow_suggestions.hints.friends_of_friends": "Ce profil est populaire parmi les personnes que vous suivez.",
"follow_suggestions.hints.most_followed": "Ce profil est l'un des plus suivis sur {domain}.",
"follow_suggestions.hints.most_interactions": "Ce profil a récemment fait l'objet d'une grande attention sur {domain}.",
"follow_suggestions.hints.similar_to_recently_followed": "Ce profil est similaire aux profils que vous avez suivis le plus récemment.",
"follow_suggestions.personalized_suggestion": "Suggestion personnalisée",
"follow_suggestions.popular_suggestion": "Suggestion populaire",
"follow_suggestions.view_all": "Tout afficher",
"follow_suggestions.who_to_follow": "Qui suivre",
"followed_tags": "Hashtags suivis",
"footer.about": "À propos",
"footer.directory": "Annuaire des profils",

View file

@ -277,6 +277,17 @@
"follow_request.authorize": "Accepter",
"follow_request.reject": "Rejeter",
"follow_requests.unlocked_explanation": "Même si votre compte nest pas privé, léquipe de {domain} a pensé que vous pourriez vouloir consulter manuellement les demandes de suivi de ces comptes.",
"follow_suggestions.curated_suggestion": "Choix du staff",
"follow_suggestions.dismiss": "Ne plus afficher",
"follow_suggestions.hints.featured": "Ce profil a été sélectionné par l'équipe de {domain}.",
"follow_suggestions.hints.friends_of_friends": "Ce profil est populaire parmi les personnes que vous suivez.",
"follow_suggestions.hints.most_followed": "Ce profil est l'un des plus suivis sur {domain}.",
"follow_suggestions.hints.most_interactions": "Ce profil a récemment fait l'objet d'une grande attention sur {domain}.",
"follow_suggestions.hints.similar_to_recently_followed": "Ce profil est similaire aux profils que vous avez suivis le plus récemment.",
"follow_suggestions.personalized_suggestion": "Suggestion personnalisée",
"follow_suggestions.popular_suggestion": "Suggestion populaire",
"follow_suggestions.view_all": "Tout afficher",
"follow_suggestions.who_to_follow": "Qui suivre",
"followed_tags": "Hashtags suivis",
"footer.about": "À propos",
"footer.directory": "Annuaire des profils",

View file

@ -277,7 +277,13 @@
"follow_request.authorize": "Autorizar",
"follow_request.reject": "Rexeitar",
"follow_requests.unlocked_explanation": "Malia que a túa conta non é privada, a administración de {domain} pensou que quizabes terías que revisar de xeito manual as solicitudes de seguiminto.",
"follow_suggestions.curated_suggestion": "Suxestións do Servidor",
"follow_suggestions.dismiss": "Non mostrar máis",
"follow_suggestions.hints.featured": "Este perfil foi escollido pola administración de {domain}.",
"follow_suggestions.hints.friends_of_friends": "Este perfil é popular entre as persoas que segues.",
"follow_suggestions.hints.most_followed": "Este perfil é un dos máis seguidos en {domain}.",
"follow_suggestions.hints.most_interactions": "Este perfil tivo moitas interaccións últimamente en {domain}.",
"follow_suggestions.hints.similar_to_recently_followed": "Este perfil ten semellanzas cos perfís que ti seguiches últimamente.",
"follow_suggestions.personalized_suggestion": "Suxestión personalizada",
"follow_suggestions.popular_suggestion": "Suxestión popular",
"follow_suggestions.view_all": "Ver todas",

View file

@ -277,7 +277,13 @@
"follow_request.authorize": "Autorisar",
"follow_request.reject": "Rejecter",
"follow_requests.unlocked_explanation": "Benque tu conto ne es cludet, li administratores de {domain} pensat que tu fórsan vell voler tractar seque-petitiones de tis-ci contos manualmen.",
"follow_suggestions.curated_suggestion": "Selection del employates",
"follow_suggestions.dismiss": "Ne monstrar plu",
"follow_suggestions.hints.featured": "Ti-ci profil ha esset selectet directmen del equip de {domain}.",
"follow_suggestions.hints.friends_of_friends": "Ti-ci profil es populari ínter tis qui tu seque.",
"follow_suggestions.hints.most_followed": "Ti-ci profil es un del max sequet sur {domain}.",
"follow_suggestions.hints.most_interactions": "Ti-ci profil ha recivet mult atention recentmen sur {domain}.",
"follow_suggestions.hints.similar_to_recently_followed": "Ti-ci profil es simil al profiles queles tu ha recentmen sequet.",
"follow_suggestions.personalized_suggestion": "Personalisat suggestion",
"follow_suggestions.popular_suggestion": "Populari suggestion",
"follow_suggestions.view_all": "Vider omnicos",

View file

@ -22,6 +22,7 @@
"account.followers": "Imeḍfaren",
"account.followers.empty": "Ar tura, ulac yiwen i yeṭṭafaṛen amseqdac-agi.",
"account.followers_counter": "{count, plural, one {{count} n umeḍfar} other {{count} n imeḍfaren}}",
"account.following": "Yeṭṭafaṛ",
"account.following_counter": "{count, plural, one {{counter} yettwaḍfaren} other {{counter} yettwaḍfaren}}",
"account.follows.empty": "Ar tura, amseqdac-agi ur yeṭṭafaṛ yiwen.",
"account.go_to_profile": "Ddu ɣer umaɣnu",
@ -39,6 +40,7 @@
"account.posts_with_replies": "Tisuffaɣ d tririyin",
"account.report": "Cetki ɣef @{name}",
"account.requested": "Di laɛḍil ad yettwaqbel. Ssit i wakken ad yefsex usuter n uḍfar",
"account.requested_follow": "{name} yessuter ad k-yeḍfer",
"account.share": "Bḍu amaɣnu n @{name}",
"account.show_reblogs": "Ssken-d inebḍa n @{name}",
"account.statuses_counter": "{count, plural, one {{counter} n tsuffeɣt} other {{counter} n tsuffaɣ}}",
@ -57,7 +59,7 @@
"alert.unexpected.title": "Ayhuh!",
"announcement.announcement": "Ulɣu",
"audio.hide": "Ffer amesli",
"boost_modal.combo": "Tzemreḍ ad tetekkiḍ ɣef {combo} akken ad tessurfeḍ aya tikelt-nniḍen",
"boost_modal.combo": "Tzemreḍ ad tsiteḍ ɣef {combo} akken ad tzegleḍ aya tikelt i d-iteddun",
"bundle_column_error.copy_stacktrace": "Nɣel tuccḍa n uneqqis",
"bundle_column_error.error.title": "Uh, ala !",
"bundle_column_error.network.title": "Tuccḍa deg uẓeṭṭa",
@ -73,7 +75,8 @@
"column.blocks": "Imiḍanen yettusḥebsen",
"column.bookmarks": "Ticraḍ",
"column.community": "Tasuddemt tadigant",
"column.directory": "Inig deg imaɣnuten",
"column.direct": "Tabdarin tusligin",
"column.directory": "Inig deg imeɣna",
"column.domain_blocks": "Taɣulin yeffren",
"column.favourites": "Imenyafen",
"column.follow_requests": "Isuturen n teḍfeṛt",
@ -105,6 +108,7 @@
"compose_form.lock_disclaimer.lock": "yettwacekkel",
"compose_form.placeholder": "D acu i itezzin deg wallaɣ?",
"compose_form.poll.duration": "Tanzagt n tefrant",
"compose_form.poll.multiple": "Aṭas n ufran",
"compose_form.poll.option_placeholder": "Taxtiṛt {number}",
"compose_form.poll.single": "Fren yiwen",
"compose_form.publish": "Suffeɣ",
@ -187,17 +191,20 @@
"explore.trending_links": "Isallen",
"explore.trending_statuses": "Tisuffaɣ",
"explore.trending_tags": "Ihacṭagen",
"filter_modal.added.review_and_configure_title": "Iɣewwaṛen n imzizdig",
"filter_modal.added.settings_link": "asebter n yiɣewwaṛen",
"filter_modal.select_filter.prompt_new": "Taggayt tamaynutt : {name}",
"filter_modal.select_filter.search": "Nadi neɣ snulfu-d",
"firehose.all": "Akk",
"firehose.local": "Deg uqeddac-ayi",
"firehose.remote": "Iqeddacen nniḍen",
"follow_request.authorize": "Ssireg",
"follow_request.reject": "Agi",
"follow_suggestions.dismiss": "Ur ttɛawad ara ad t-id-sekneṭ",
"follow_suggestions.who_to_follow": "Menhu ara ḍefṛeḍ",
"followed_tags": "Ihacṭagen yettwaḍfaren",
"footer.about": "Ɣef",
"footer.directory": "Akaram n imaɣnuten",
"footer.directory": "Akaram n imeɣna",
"footer.get_app": "Awi-d asnas",
"footer.invite": "Ɛreḍ-d kra n yimdanen",
"footer.keyboard_shortcuts": "Inegzumen n unasiw",
@ -221,9 +228,12 @@
"home.column_settings.show_reblogs": "Ssken-d beṭṭu",
"home.column_settings.show_replies": "Ssken-d tiririyin",
"home.hide_announcements": "Ffer ulɣuyen",
"home.pending_critical_update.body": "Ma ulac aɣilif, leqqem aqeddac-ik Mastodon akken kan tzemreḍ !",
"home.show_announcements": "Ssken-d ulɣuyen",
"interaction_modal.no_account_yet": "Ulac-ik·ikem deg Maṣṭudun?",
"interaction_modal.on_another_server": "Deg uqeddac nniḍen",
"interaction_modal.on_this_server": "Deg uqeddac-ayi",
"interaction_modal.sign_in": "Ur tekcimeḍ ara ɣer uqeddac-a. Anda yella umiḍan-ik·im ?",
"interaction_modal.title.follow": "Ḍfer {name}",
"intervals.full.days": "{number, plural, one {# n wass} other {# n wussan}}",
"intervals.full.hours": "{number, plural, one {# n usarag} other {# n yesragen}}",
@ -351,12 +361,15 @@
"onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
"onboarding.follows.title": "Popular on Mastodon",
"onboarding.profile.display_name": "Isem ara d-yettwaskanen",
"onboarding.share.message": "Nekk d {username} deg #Mastodon! Ḍfer iyi-d sya {url}",
"onboarding.share.title": "Bḍu amaɣnu-inek·inem",
"onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
"onboarding.start.skip": "Want to skip right ahead?",
"onboarding.start.title": "Tseggmeḍ-tt !",
"onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
"onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
"onboarding.steps.publish_status.body": "Say hello to the world.",
"onboarding.steps.publish_status.title": "Aru tasuffeɣt-inek·inem tamezwarutt",
"onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
"onboarding.steps.setup_profile.title": "Customize your profile",
"onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
@ -371,7 +384,10 @@
"poll_button.add_poll": "Rnu asenqed",
"poll_button.remove_poll": "Kkes asenqed",
"privacy.change": "Seggem tabaḍnit n yizen",
"privacy.direct.long": "Wid akk i d-yettwabdaren deg tuffeɣt",
"privacy.private.long": "Ala wid i k-yeṭṭafaṛen",
"privacy.private.short": "Imeḍfaren",
"privacy.public.long": "Kra n win yellan deg Masṭudun neɣ berra-s",
"privacy.public.short": "Azayez",
"privacy_policy.title": "Tasertit tabaḍnit",
"refresh": "Smiren",
@ -404,9 +420,14 @@
"report_notification.categories.other": "Ayen nniḍen",
"report_notification.categories.spam": "Aspam",
"report_notification.open": "Ldi aneqqis",
"search.no_recent_searches": "Ulac inadiyen ineggura",
"search.placeholder": "Nadi",
"search.search_or_paste": "Nadi neɣ senṭeḍ URL",
"search_popout.language_code": "Tangalt ISO n tutlayt",
"search_popout.options": "Iwellihen n unadi",
"search_popout.recent": "Inadiyen ineggura",
"search_popout.user": "amseqdac",
"search_results.accounts": "Imeɣna",
"search_results.all": "Akk",
"search_results.hashtags": "Ihacṭagen",
"search_results.see_all": "Wali-ten akk",
@ -471,7 +492,7 @@
"timeline_hint.resources.followers": "Imeḍfaṛen",
"timeline_hint.resources.follows": "T·Yeṭafaṛ",
"timeline_hint.resources.statuses": "Tisuffaɣ tiqdimin",
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {# days}}",
"trends.counter_by_accounts": "{count, plural, one {{counter} n wemdan} other {{counter} n medden}} deg {days, plural, one {ass} other {{days} n wussan}} iɛeddan",
"trends.trending_now": "Ayen mucaɛen tura",
"ui.beforeunload": "Arewway-ik·im ad iruḥ ma yella tefeɣ-d deg Maṣṭudun.",
"units.short.billion": "{count}B",

View file

@ -212,7 +212,7 @@
"emoji_button.custom": "사용자 지정",
"emoji_button.flags": "깃발",
"emoji_button.food": "음식과 마실것",
"emoji_button.label": "에모지 추가",
"emoji_button.label": "에모지 추가",
"emoji_button.nature": "자연",
"emoji_button.not_found": "해당하는 에모지가 없습니다",
"emoji_button.objects": "물건",
@ -536,7 +536,7 @@
"privacy.public.long": "마스토돈 내외 모두",
"privacy.public.short": "공개",
"privacy.unlisted.additional": "공개와 똑같지만 게시물이 실시간 피드나 해시태그, 둘러보기, (계정 설정에서 허용했더라도) 마스토돈 검색에서 제외됩니다.",
"privacy.unlisted.long": "더 적은 알고리즘 팡파",
"privacy.unlisted.long": "더 적은 알고리즘 팡파",
"privacy.unlisted.short": "조용한 공개",
"privacy_policy.last_updated": "{date}에 마지막으로 업데이트됨",
"privacy_policy.title": "개인정보처리방침",

View file

@ -1,6 +1,6 @@
{
"about.blocks": "Prižiūrimi serveriai",
"about.contact": "Kontaktuoti:",
"about.contact": "Kontaktai:",
"about.disclaimer": "Mastodon nemokama atvirojo kodo programa ir Mastodon gGmbH prekės ženklas.",
"about.domain_blocks.no_reason_available": "Priežastis nepateikta",
"about.domain_blocks.preamble": "Mastodon paprastai leidžia peržiūrėti turinį ir bendrauti su naudotojais iš bet kurio kito fediverse esančio serverio. Šios yra išimtys, kurios buvo padarytos šiame konkrečiame serveryje.",
@ -269,6 +269,7 @@
"follow_request.authorize": "Autorizuoti",
"follow_request.reject": "Atmesti",
"follow_requests.unlocked_explanation": "Nors tavo paskyra neužrakinta, {domain} personalas mano, kad galbūt norėsi rankiniu būdu patikrinti šių paskyrų sekimo užklausas.",
"follow_suggestions.curated_suggestion": "Personalo pasirinkimai",
"follow_suggestions.dismiss": "Daugiau nerodyti",
"follow_suggestions.hints.friends_of_friends": "Šis profilis yra populiarus tarp žmonių, kuriuos sekei.",
"follow_suggestions.hints.most_followed": "Šis profilis yra vienas iš labiausiai sekamų {domain}.",
@ -423,7 +424,7 @@
"notifications.column_settings.mention": "Paminėjimai:",
"notifications.column_settings.poll": "Balsavimo rezultatai:",
"notifications.column_settings.push": "\"Push\" pranešimai",
"notifications.column_settings.reblog": "\"Boost\" kiekis:",
"notifications.column_settings.reblog": "Pakėlimai:",
"notifications.column_settings.show": "Rodyti stulpelyje",
"notifications.column_settings.sound": "Paleisti garsą",
"notifications.column_settings.status": "New toots:",
@ -635,6 +636,7 @@
"status.translate": "Versti",
"status.translated_from_with": "Išversta iš {lang} naudojant {provider}",
"status.uncached_media_warning": "Peržiūra nepasiekiama",
"subscribed_languages.lead": "Po pakeitimo tavo pagrindinėje ir sąrašo laiko juostose bus rodomi tik įrašai pasirinktomis kalbomis. Jei nori gauti įrašus visomis kalbomis, pasirink nė vieno.",
"tabs_bar.home": "Pradžia",
"tabs_bar.notifications": "Pranešimai",
"time_remaining.days": "Liko {number, plural, one {# diena} few {# dienos} many {# dieno} other {# dienų}}",

View file

@ -277,7 +277,11 @@
"follow_request.authorize": "Benarkan",
"follow_request.reject": "Tolak",
"follow_requests.unlocked_explanation": "Walaupun akaun anda tidak dikunci, kakitangan {domain} merasakan anda mungkin ingin menyemak permintaan ikutan daripada akaun ini secara manual.",
"follow_suggestions.curated_suggestion": "",
"follow_suggestions.dismiss": "Jangan papar lagi",
"follow_suggestions.hints.featured": "Profil{domain.",
"follow_suggestions.hints.friends_of_friends": "This profile is popular among the people you follow.",
"follow_suggestions.hints.most_followed": ".",
"follow_suggestions.personalized_suggestion": "Cadangan peribadi",
"follow_suggestions.popular_suggestion": "Cadangan terkenal",
"follow_suggestions.view_all": "Lihat semua",

View file

@ -279,11 +279,11 @@
"follow_requests.unlocked_explanation": "Ook al is jouw account niet besloten, de medewerkers van {domain} denken dat jij misschien de volgende volgverzoeken handmatig wil controleren.",
"follow_suggestions.curated_suggestion": "Speciaal geselecteerd",
"follow_suggestions.dismiss": "Niet meer weergeven",
"follow_suggestions.hints.featured": "Dit profiel is geselecteerd door het team van {domain}.",
"follow_suggestions.hints.friends_of_friends": "Dit profiel is populair onder de mensen die jij volgt.",
"follow_suggestions.hints.most_followed": "Dit profiel is een van de meest gevolgde op {domain}.",
"follow_suggestions.hints.most_interactions": "Dit profiel heeft de laatste tijd veel aandacht gekregen op {domain}.",
"follow_suggestions.hints.similar_to_recently_followed": "Dit profiel is vergelijkbaar met de profielen die je recentelijk hebt gevolgd.",
"follow_suggestions.hints.featured": "Deze gebruiker is geselecteerd door het team van {domain}.",
"follow_suggestions.hints.friends_of_friends": "Deze gebruiker is populair onder de mensen die jij volgt.",
"follow_suggestions.hints.most_followed": "Deze gebruiker is een van de meest gevolgde gebruikers op {domain}.",
"follow_suggestions.hints.most_interactions": "Deze gebruiker is de laatste tijd erg populair op {domain}.",
"follow_suggestions.hints.similar_to_recently_followed": "Deze gebruiker is vergelijkbaar met gebruikers die je recentelijk hebt gevolgd.",
"follow_suggestions.personalized_suggestion": "Gepersonaliseerde aanbeveling",
"follow_suggestions.popular_suggestion": "Populaire aanbeveling",
"follow_suggestions.view_all": "Alles weergeven",
@ -529,8 +529,8 @@
"poll_button.add_poll": "Peiling toevoegen",
"poll_button.remove_poll": "Peiling verwijderen",
"privacy.change": "Zichtbaarheid van bericht aanpassen",
"privacy.direct.long": "Iedereen die in het bericht wordt vermeld",
"privacy.direct.short": "Bepaalde mensen",
"privacy.direct.long": "Alleen voor mensen die specifiek in het bericht worden vermeld",
"privacy.direct.short": "Specifieke mensen",
"privacy.private.long": "Alleen jouw volgers",
"privacy.private.short": "Volgers",
"privacy.public.long": "Iedereen op Mastodon en daarbuiten",

View file

@ -40,7 +40,7 @@
"account.following_counter": "{count, plural, one {Fylgjer {counter}} other {Fylgjer {counter}}}",
"account.follows.empty": "Denne brukaren fylgjer ikkje nokon enno.",
"account.go_to_profile": "Gå til profil",
"account.hide_reblogs": "Skjul framhevingar frå @{name}",
"account.hide_reblogs": "Gøym framhevingar frå @{name}",
"account.in_memoriam": "Til minne om.",
"account.joined_short": "Vart med",
"account.languages": "Endre språktingingar",
@ -113,7 +113,7 @@
"column.community": "Lokal tidsline",
"column.direct": "Private omtaler",
"column.directory": "Sjå gjennom profilar",
"column.domain_blocks": "Skjulte domene",
"column.domain_blocks": "Blokkerte domene",
"column.favourites": "Favorittar",
"column.firehose": "Tidslinjer",
"column.follow_requests": "Fylgjeførespurnadar",
@ -124,7 +124,7 @@
"column.pins": "Festa tut",
"column.public": "Samla tidsline",
"column_back_button.label": "Attende",
"column_header.hide_settings": "Gøym innstillingar",
"column_header.hide_settings": "Gøym innstillingane",
"column_header.moveLeft_settings": "Flytt kolonne til venstre",
"column_header.moveRight_settings": "Flytt kolonne til høgre",
"column_header.pin": "Fest",
@ -171,14 +171,14 @@
"confirmations.delete_list.message": "Er du sikker på at du vil sletta denne lista for alltid?",
"confirmations.discard_edit_media.confirm": "Forkast",
"confirmations.discard_edit_media.message": "Du har ulagra endringar i mediaskildringa eller førehandsvisinga. Vil du forkasta dei likevel?",
"confirmations.domain_block.confirm": "Skjul alt frå domenet",
"confirmations.domain_block.confirm": "Blokker heile domenet",
"confirmations.domain_block.message": "Er du heilt, heilt sikker på at du vil skjula heile {domain}? I dei fleste tilfelle er det godt nok og føretrekt med nokre få målretta blokkeringar eller målbindingar. Du kjem ikkje til å sjå innhald frå domenet i fødererte tidsliner eller i varsla dine. Fylgjarane dine frå domenet vert fjerna.",
"confirmations.edit.confirm": "Rediger",
"confirmations.edit.message": "Å redigera no vil overskriva den meldinga du er i ferd med å skriva. Er du sikker på at du vil halda fram?",
"confirmations.logout.confirm": "Logg ut",
"confirmations.logout.message": "Er du sikker på at du vil logga ut?",
"confirmations.mute.confirm": "Målbind",
"confirmations.mute.explanation": "Dette vil skjula innlegg som kjem frå og som nemner dei, men vil framleis la dei sjå innlegga dine og fylgje deg.",
"confirmations.mute.explanation": "Dette vil gøyma innlegga deira og innlegg som nemner dei, men dei vil framleis kunna sjå innlegga dine og fylgja deg.",
"confirmations.mute.message": "Er du sikker på at du vil målbinda {name}?",
"confirmations.redraft.confirm": "Slett & skriv på nytt",
"confirmations.redraft.message": "Er du sikker på at du vil sletta denne statusen og skriva han på nytt? Då misser du favorittar og framhevingar, og svar til det opprinnelege innlegget vert foreldrelause.",
@ -230,7 +230,7 @@
"empty_column.bookmarked_statuses": "Du har ikkje lagra noko bokmerke enno. Når du set bokmerke på eit innlegg, dukkar det opp her.",
"empty_column.community": "Den lokale tidslina er tom. Skriv noko offentleg å få ballen til å rulle!",
"empty_column.direct": "Du har ingen private omtaler enda. Etter du har sendt eller mottatt en, så vil den dukke opp her.",
"empty_column.domain_blocks": "Det er ingen skjulte domene til no.",
"empty_column.domain_blocks": "Det er ingen blokkerte domene enno.",
"empty_column.explore_statuses": "Ingenting er i støytet nett no. Prøv igjen seinare!",
"empty_column.favourited_statuses": "Du har ingen favoritt-statusar ennå. Når du merkjer ein som favoritt, dukkar han opp her.",
"empty_column.favourites": "Ingen har merkt denne statusen som favoritt enno. Når nokon gjer det, dukkar dei opp her.",
@ -277,7 +277,13 @@
"follow_request.authorize": "Autoriser",
"follow_request.reject": "Avvis",
"follow_requests.unlocked_explanation": "Sjølv om kontoen din ikkje er låst tenkte dei som driv {domain} at du kanskje ville gå gjennom førespurnadar frå desse kontoane manuelt.",
"follow_suggestions.curated_suggestion": "Utvalt av staben",
"follow_suggestions.dismiss": "Ikkje vis igjen",
"follow_suggestions.hints.featured": "Denne profilen er handplukka av folka på {domain}.",
"follow_suggestions.hints.friends_of_friends": "Denne profilen er populær hjå dei du fylgjer.",
"follow_suggestions.hints.most_followed": "Mange på {domain} fylgjer denne profilen.",
"follow_suggestions.hints.most_interactions": "Denne profilen har nyss fått mykje merksemd på {domain}.",
"follow_suggestions.hints.similar_to_recently_followed": "Denne profilen liknar på dei andre profilane du har fylgt i det siste.",
"follow_suggestions.personalized_suggestion": "Personleg forslag",
"follow_suggestions.popular_suggestion": "Populært forslag",
"follow_suggestions.view_all": "Vis alle",
@ -395,7 +401,7 @@
"media_gallery.toggle_visible": "{number, plural, one {Skjul bilete} other {Skjul bilete}}",
"moved_to_account_banner.text": "Kontoen din, {disabledAccount} er for tida deaktivert fordi du har flytta til {movedToAccount}.",
"mute_modal.duration": "Varigheit",
"mute_modal.hide_notifications": "Skjul varsel frå denne brukaren?",
"mute_modal.hide_notifications": "Gøym varsel frå denne brukaren?",
"mute_modal.indefinite": "På ubestemt tid",
"navigation_bar.about": "Om",
"navigation_bar.advanced_interface": "Opne i avansert nettgrensesnitt",
@ -479,7 +485,8 @@
"onboarding.follows.empty": "Me kan ikkje visa deg nokon resultat no. Du kan prøva å søkja eller bla gjennom utforsk-sida for å finna folk å fylgja, eller du kan prøva att seinare.",
"onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
"onboarding.follows.title": "Popular on Mastodon",
"onboarding.profile.discoverable": "Gjør min profil synlig",
"onboarding.profile.discoverable": "Gjer profilen min synleg",
"onboarding.profile.discoverable_hint": "Når du vel å gjera profilen din synleg på Mastodon, vil innlegga dine syna i søkjeresultat og populære innlegg, og profilen din kan bli føreslegen for folk med liknande interesser som deg.",
"onboarding.profile.display_name": "Synleg namn",
"onboarding.profile.display_name_hint": "Det fulle namnet eller kallenamnet ditt…",
"onboarding.profile.lead": "Du kan alltid fullføra dette seinare i innstillingane, og der er det endå fleire tilpassingsalternativ.",
@ -528,11 +535,12 @@
"privacy.private.short": "Følgjarar",
"privacy.public.long": "Kven som helst på og av Mastodon",
"privacy.public.short": "Offentleg",
"privacy.unlisted.additional": "Dette er akkurat som offentleg, bortsett frå at innlegga ikkje dukkar opp i direktestraumar eller merkelappar, i oppdagingar eller Mastodon-søk, sjølv om du har sagt ja til at kontoen skal vera synleg.",
"privacy.unlisted.long": "Færre algoritmiske fanfarar",
"privacy.unlisted.short": "Stille offentleg",
"privacy_policy.last_updated": "Sist oppdatert {date}",
"privacy_policy.title": "Personvernsreglar",
"recommended": "Anbefalt",
"recommended": "Tilrådd",
"refresh": "Oppdater",
"regeneration_indicator.label": "Lastar…",
"regeneration_indicator.sublabel": "Heimetidslina di vert førebudd!",
@ -605,7 +613,7 @@
"search.quick_action.status_search": "Innlegg som samsvarer med {x}",
"search.search_or_paste": "Søk eller lim inn URL",
"search_popout.full_text_search_disabled_message": "Ikkje tilgjengeleg på {domain}.",
"search_popout.full_text_search_logged_out_message": "Bare tilgjengelig når man er logget inn.",
"search_popout.full_text_search_logged_out_message": "Berre tilgjengeleg når du er logga inn.",
"search_popout.language_code": "ISO-språkkode",
"search_popout.options": "Søkjealternativ",
"search_popout.quick_actions": "Hurtighandlinger",
@ -654,7 +662,7 @@
"status.load_more": "Last inn meir",
"status.media.open": "Klikk for å opne",
"status.media.show": "Klikk for å vise",
"status.media_hidden": "Medium gøymd",
"status.media_hidden": "Mediet er gøymt",
"status.mention": "Nemn @{name}",
"status.more": "Meir",
"status.mute": "Målbind @{name}",

View file

@ -277,6 +277,7 @@
"follow_request.authorize": "Povoľ prístup",
"follow_request.reject": "Odmietni",
"follow_requests.unlocked_explanation": "Síce Váš učet nie je uzamknutý, ale {domain} tím si myslel že môžete chcieť skontrolovať žiadosti o sledovanie z týchto účtov manuálne.",
"follow_suggestions.curated_suggestion": "Staff pick",
"follow_suggestions.dismiss": "Znovu nezobrazuj",
"follow_suggestions.personalized_suggestion": "Prispôsobené odporúčania",
"follow_suggestions.popular_suggestion": "Populárne návrhy",

View file

@ -276,11 +276,18 @@
"firehose.remote": "Andra servrar",
"follow_request.authorize": "Godkänn",
"follow_request.reject": "Avvisa",
"follow_requests.unlocked_explanation": "Även om ditt konto inte är låst tror {domain} personalen att du kanske vill granska dessa följares förfrågningar manuellt.",
"follow_requests.unlocked_explanation": "Även om ditt konto inte är låst tror {domain}-personalen att du kanske vill granska dessa följares förfrågningar manuellt.",
"follow_suggestions.curated_suggestion": "Utvald av personalen",
"follow_suggestions.dismiss": "Visa inte igen",
"follow_suggestions.hints.featured": "Denna profil är handplockad av {domain}-teamet.",
"follow_suggestions.hints.friends_of_friends": "Denna profil är populär bland de personer du följer.",
"follow_suggestions.hints.most_followed": "Denna profil är en av de mest följda på {domain}.",
"follow_suggestions.hints.most_interactions": "Denna profil har nyligen fått mycket uppmärksamhet på {domain}.",
"follow_suggestions.hints.similar_to_recently_followed": "Denna profil liknar de profiler som du nyligen har följt.",
"follow_suggestions.personalized_suggestion": "Personligt förslag",
"follow_suggestions.popular_suggestion": "Populärt förslag",
"follow_suggestions.view_all": "Visa alla",
"follow_suggestions.who_to_follow": "Rekommenderade profiler",
"followed_tags": "Följda hashtags",
"footer.about": "Om",
"footer.directory": "Profilkatalog",
@ -486,7 +493,9 @@
"onboarding.profile.note": "Bio",
"onboarding.profile.note_hint": "Du kan @nämna andra personer eller #hashtags…",
"onboarding.profile.save_and_continue": "Spara och fortsätt",
"onboarding.profile.title": "Konfiguration av profil",
"onboarding.profile.upload_avatar": "Ladda upp profilbild",
"onboarding.profile.upload_header": "Ladda upp profilbanner",
"onboarding.share.lead": "Låt folk veta hur de kan hitta dig på Mastodon!",
"onboarding.share.message": "Jag är {username} på #Mastodon! Följ mig på {url}",
"onboarding.share.next_steps": "Möjliga nästa steg:",
@ -521,10 +530,14 @@
"poll_button.remove_poll": "Ta bort omröstning",
"privacy.change": "Ändra inläggsintegritet",
"privacy.direct.long": "Alla som nämns i inlägget",
"privacy.direct.short": "Särskilda personer",
"privacy.private.long": "Endast dina följare",
"privacy.private.short": "Följare",
"privacy.public.long": "Alla på och utanför Mastodon",
"privacy.public.short": "Publik",
"privacy.public.short": "Offentlig",
"privacy.unlisted.additional": "Detta fungerar precis som offentlig, förutom att inlägget inte visas i liveflöden eller hashtaggar, utforska eller Mastodon-sökning, även om du har valt detta för hela kontot.",
"privacy.unlisted.long": "Mindre beaktat av algoritmen",
"privacy.unlisted.short": "Offentlig (begränsad)",
"privacy_policy.last_updated": "Senast uppdaterad {date}",
"privacy_policy.title": "Integritetspolicy",
"recommended": "Rekommenderas",

View file

@ -2,25 +2,25 @@
"about.blocks": "Siū kuán-tsè ê su-hāu-khì",
"about.contact": "Liân-lo̍k:",
"about.disclaimer": "Ling-khí-tshiūnn sī tsi̍t-ê khai-guân nńg-théi ê siong-phiau sī Mastodon gGmbH.",
"account.badges.bot": "Bot",
"account.cancel_follow_request": "Withdraw follow request",
"account.badges.bot": "Tsū-tōng-ê",
"account.cancel_follow_request": "Mài-koh tui-tsong",
"account.media": "Mûi-thé",
"account.mention": "Thê-khí @{name}",
"account.posts": "Toots",
"account.posts_with_replies": "Toots and replies",
"account.requested": "Awaiting approval",
"account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}",
"account_note.placeholder": "Click to add a note",
"column.pins": "Pinned toot",
"community.column_settings.media_only": "Media only",
"compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
"compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
"compose_form.placeholder": "What is on your mind?",
"compose_form.publish_form": "Publish",
"compose_form.spoiler.marked": "Text is hidden behind warning",
"compose_form.spoiler.unmarked": "Text is not hidden",
"confirmations.delete.message": "Are you sure you want to delete this status?",
"confirmations.domain_block.confirm": "Hide entire domain",
"account.posts": "Huah-siann",
"account.posts_with_replies": "Huah-siann kah huê-ìng",
"account.requested": "Tán-thāi phue-tsún",
"account.statuses_counter": "{count, plural, one {{counter} Huah-siann} other {{counter} Huah-siann}}",
"account_note.placeholder": "Tiám tsi̍t-ē ka-thiam pī-tsù",
"column.pins": "Tah thâu-tsîng ê huah-siann",
"community.column_settings.media_only": "Kan-na muî-thé",
"compose_form.encryption_warning": "Tī Mastodon tah huah-siann m̄-sī tuan-tuì-tuan ka-pì ê. M̄-thang tī Mastodon hun-hióng jīm-hô bín-kám ê tsū-sìn.",
"compose_form.hashtag_warning": "Tsit-ê huah-siann in-uī m̄-sī kong-khai ê, sóo-í buē tī jīm-hô tsú-tê piau-tshiam hián-sī. Kan-na kong-khai ê huah-siann ē-tàng hōo tsú-tê piau-tshiam tshâ-tshuē.",
"compose_form.placeholder": "Lí teh siūnn siánn?",
"compose_form.publish_form": "Huah--tshut-khì",
"compose_form.spoiler.marked": "Î-tû luē-iông kíng-kò",
"compose_form.spoiler.unmarked": "Tsing-ka luē-iông kíng-kò",
"confirmations.delete.message": "Lí kám bueh thâi-tiāu tsi̍t-ē huah-siann?",
"confirmations.domain_block.confirm": "Hong-só tsíng-kò bāng-hi̍k",
"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_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.",
"embed.instructions": "Embed this status on your website by copying the code below.",
@ -46,7 +46,7 @@
"keyboard_shortcuts.muted": "to open muted users list",
"keyboard_shortcuts.my_profile": "to open your profile",
"keyboard_shortcuts.notifications": "to open notifications column",
"keyboard_shortcuts.open_media": "to open media",
"keyboard_shortcuts.open_media": "Khui muî-thé",
"keyboard_shortcuts.pinned": "to open pinned toots list",
"keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "to reply",

View file

@ -1,5 +1,5 @@
{
"about.blocks": "เซิร์ฟเวอร์ที่มีการควบคุม",
"about.blocks": "เซิร์ฟเวอร์ที่มีการกลั่นกรอง",
"about.contact": "ติดต่อ:",
"about.disclaimer": "Mastodon เป็นซอฟต์แวร์เสรี โอเพนซอร์ส และเครื่องหมายการค้าของ Mastodon gGmbH",
"about.domain_blocks.no_reason_available": "เหตุผลไม่พร้อมใช้งาน",
@ -277,7 +277,13 @@
"follow_request.authorize": "อนุญาต",
"follow_request.reject": "ปฏิเสธ",
"follow_requests.unlocked_explanation": "แม้ว่าไม่มีการล็อคบัญชีของคุณ พนักงานของ {domain} คิดว่าคุณอาจต้องการตรวจทานคำขอติดตามจากบัญชีเหล่านี้ด้วยตนเอง",
"follow_suggestions.curated_suggestion": "คัดสรรโดยพนักงาน",
"follow_suggestions.dismiss": "ไม่ต้องแสดงอีก",
"follow_suggestions.hints.featured": "โปรไฟล์นี้ได้รับการคัดสรรโดยทีม {domain}",
"follow_suggestions.hints.friends_of_friends": "โปรไฟล์นี้ได้รับความนิยมในหมู่ผู้คนที่คุณติดตาม",
"follow_suggestions.hints.most_followed": "โปรไฟล์นี้เป็นหนึ่งในโปรไฟล์ที่ได้รับการติดตามมากที่สุดใน {domain}",
"follow_suggestions.hints.most_interactions": "โปรไฟล์นี้เพิ่งได้รับความสนใจอย่างมากใน {domain}",
"follow_suggestions.hints.similar_to_recently_followed": "โปรไฟล์นี้คล้ายกับโปรไฟล์ที่คุณได้ติดตามล่าสุด",
"follow_suggestions.personalized_suggestion": "ข้อเสนอแนะเฉพาะบุคคล",
"follow_suggestions.popular_suggestion": "ข้อเสนอแนะยอดนิยม",
"follow_suggestions.view_all": "ดูทั้งหมด",
@ -374,7 +380,7 @@
"lightbox.next": "ถัดไป",
"lightbox.previous": "ก่อนหน้า",
"limited_account_hint.action": "แสดงโปรไฟล์ต่อไป",
"limited_account_hint.title": "มีการซ่อนโปรไฟล์นี้โดยผู้ควบคุมของ {domain}",
"limited_account_hint.title": "มีการซ่อนโปรไฟล์นี้โดยผู้กลั่นกรองของ {domain}",
"link_preview.author": "โดย {name}",
"lists.account.add": "เพิ่มไปยังรายการ",
"lists.account.remove": "เอาออกจากรายการ",
@ -631,9 +637,9 @@
"sign_in_banner.sign_in": "เข้าสู่ระบบ",
"sign_in_banner.sso_redirect": "เข้าสู่ระบบหรือลงทะเบียน",
"sign_in_banner.text": "เข้าสู่ระบบเพื่อติดตามโปรไฟล์หรือแฮชแท็ก ชื่นชอบ แชร์ และตอบกลับโพสต์ คุณยังสามารถโต้ตอบจากบัญชีของคุณในเซิร์ฟเวอร์อื่น",
"status.admin_account": "เปิดส่วนติดต่อการควบคุมสำหรับ @{name}",
"status.admin_domain": "เปิดส่วนติดต่อการควบคุมสำหรับ {domain}",
"status.admin_status": "เปิดโพสต์นี้ในส่วนติดต่อการควบคุม",
"status.admin_account": "เปิดส่วนติดต่อการกลั่นกรองสำหรับ @{name}",
"status.admin_domain": "เปิดส่วนติดต่อการกลั่นกรองสำหรับ {domain}",
"status.admin_status": "เปิดโพสต์นี้ในส่วนติดต่อการกลั่นกรอง",
"status.block": "ปิดกั้น @{name}",
"status.bookmark": "เพิ่มที่คั่นหน้า",
"status.cancel_reblog_private": "เลิกดัน",

View file

@ -214,7 +214,7 @@
"emoji_button.food": "Yiyecek ve İçecek",
"emoji_button.label": "İfade ekle",
"emoji_button.nature": "Doğa",
"emoji_button.not_found": "İfade yok!! (╯°□°)╯︵ ┻━┻",
"emoji_button.not_found": "Eşleşen emoji yok",
"emoji_button.objects": "Nesneler",
"emoji_button.people": "Kullanıcılar",
"emoji_button.recent": "Sık kullanılan",
@ -348,7 +348,7 @@
"keyboard_shortcuts.description": "Açıklama",
"keyboard_shortcuts.direct": "özel değinmeler sütununu açmak için",
"keyboard_shortcuts.down": "Listede aşağıya inmek için",
"keyboard_shortcuts.enter": "gönderiyi aç",
"keyboard_shortcuts.enter": "Gönderiyi açınız",
"keyboard_shortcuts.favourite": "Gönderiyi favorilerine ekle",
"keyboard_shortcuts.favourites": "Gözde listeni aç",
"keyboard_shortcuts.federated": "Federe akışı aç",

View file

@ -277,7 +277,13 @@
"follow_request.authorize": "Chấp nhận",
"follow_request.reject": "Từ chối",
"follow_requests.unlocked_explanation": "Mặc dù tài khoản của bạn đang ở chế độ công khai, quản trị viên của {domain} vẫn tin rằng bạn sẽ muốn xem lại yêu cầu theo dõi từ những người khác.",
"follow_suggestions.curated_suggestion": "Gợi ý từ máy chủ",
"follow_suggestions.dismiss": "Không hiện lại",
"follow_suggestions.hints.featured": "Người này được đội ngũ {domain} đề xuất.",
"follow_suggestions.hints.friends_of_friends": "Người này nổi tiếng với những người bạn theo dõi.",
"follow_suggestions.hints.most_followed": "Người này được theo dõi nhiều nhất trên {domain}.",
"follow_suggestions.hints.most_interactions": "Người này đang thu hút sự chú ý trên {domain}.",
"follow_suggestions.hints.similar_to_recently_followed": "Người này có nét giống những người mà bạn theo dõi gần đây.",
"follow_suggestions.personalized_suggestion": "Gợi ý cá nhân hóa",
"follow_suggestions.popular_suggestion": "Những người nổi tiếng",
"follow_suggestions.view_all": "Xem tất cả",

View file

@ -21,7 +21,7 @@
"account.blocked": "已屏蔽",
"account.browse_more_on_origin_server": "在原始个人资料页面上浏览详情",
"account.cancel_follow_request": "撤回关注请求",
"account.copy": "复制资料链接",
"account.copy": "复制个人资料链接",
"account.direct": "私下提及 @{name}",
"account.disable_notifications": "当 @{name} 发布嘟文时不要通知我",
"account.domain_blocked": "域名已屏蔽",
@ -53,7 +53,7 @@
"account.mute_notifications_short": "关闭通知",
"account.mute_short": "隐藏",
"account.muted": "已隐藏",
"account.mutual": "互关",
"account.mutual": "互",
"account.no_bio": "未提供描述。",
"account.open_original_page": "打开原始页面",
"account.posts": "嘟文",
@ -277,13 +277,13 @@
"follow_request.authorize": "同意",
"follow_request.reject": "拒绝",
"follow_requests.unlocked_explanation": "尽管你没有锁嘟,但是 {domain} 的工作人员认为你也许会想手动审核审核这些账号的关注请求。",
"follow_suggestions.curated_suggestion": "管理员精选",
"follow_suggestions.curated_suggestion": "站务人员精选",
"follow_suggestions.dismiss": "不再显示",
"follow_suggestions.hints.featured": "该个人资料已被 {domain} 管理团队精选。",
"follow_suggestions.hints.friends_of_friends": "该个人资料在您关注的人中很受欢迎。",
"follow_suggestions.hints.most_followed": "该个人资料是 {domain} 上关注度最高的个人资料之一。",
"follow_suggestions.hints.most_interactions": "该个人资料最近在 {domain} 上获得了很多关注。",
"follow_suggestions.hints.similar_to_recently_followed": "该个人资料与您最近关注的个人资料类似。",
"follow_suggestions.hints.featured": "该用户已被 {domain} 管理团队精选。",
"follow_suggestions.hints.friends_of_friends": "该用户在您关注的人中很受欢迎。",
"follow_suggestions.hints.most_followed": "该用户是 {domain} 上关注度最高的用户之一。",
"follow_suggestions.hints.most_interactions": "该用户最近在 {domain} 上获得了很多关注。",
"follow_suggestions.hints.similar_to_recently_followed": "该用户与您最近关注的用户类似。",
"follow_suggestions.personalized_suggestion": "个性化建议",
"follow_suggestions.popular_suggestion": "热门建议",
"follow_suggestions.view_all": "查看全部",
@ -447,7 +447,7 @@
"notifications.column_settings.alert": "桌面通知",
"notifications.column_settings.favourite": "喜欢:",
"notifications.column_settings.filter_bar.advanced": "显示所有类别",
"notifications.column_settings.filter_bar.category": "快速过滤栏",
"notifications.column_settings.filter_bar.category": "快速筛选栏",
"notifications.column_settings.filter_bar.show_bar": "显示过滤栏",
"notifications.column_settings.follow": "新粉丝:",
"notifications.column_settings.follow_request": "新关注请求:",

View file

@ -668,7 +668,7 @@
"status.mute": "靜音 @{name}",
"status.mute_conversation": "靜音對話",
"status.open": "展開此嘟文",
"status.pin": "釘選個人檔案頁面",
"status.pin": "釘選個人檔案頁面",
"status.pinned": "釘選嘟文",
"status.read_more": "閱讀更多",
"status.reblog": "轉嘟",

View file

@ -40,7 +40,7 @@ function render(
ui: React.ReactElement,
{ locale = 'en', signedIn = true, ...renderOptions } = {},
) {
const Wrapper = (props: { children: React.ReactElement }) => {
const Wrapper = (props: { children: React.ReactNode }) => {
return (
<MemoryRouter>
<IntlProvider locale={locale}>

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 -960 960 960" width="20"><path d="M96-144v-72h768v72H96Zm48-120v-264h96v264h-96Zm192 0v-456h96v456h-96Zm192 0v-336h96v336h-96Zm192 0v-552h96v552h-96Z"/></svg>

After

Width:  |  Height:  |  Size: 221 B

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 -960 960 960" width="20"><path d="M96-144v-72h768v72H96Zm48-120v-264h96v264h-96Zm192 0v-456h96v456h-96Zm192 0v-336h96v336h-96Zm192 0v-552h96v552h-96Z"/></svg>

After

Width:  |  Height:  |  Size: 221 B

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 -960 960 960" width="20"><path d="m291-240-51-51 189-189-189-189 51-51 189 189 189-189 51 51-189 189 189 189-51 51-189-189-189 189Z"/></svg>

After

Width:  |  Height:  |  Size: 203 B

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 -960 960 960" width="20"><path d="m291-240-51-51 189-189-189-189 51-51 189 189 189-189 51 51-189 189 189 189-51 51-189-189-189 189Z"/></svg>

After

Width:  |  Height:  |  Size: 203 B

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 -960 960 960" width="20"><path d="M612-516q25 0 42.5-17.5T672-576q0-25-17.5-42.5T612-636q-25 0-42.5 17.5T552-576q0 25 17.5 42.5T612-516Zm-264 0q25 0 42.5-17.5T408-576q0-25-17.5-42.5T348-636q-25 0-42.5 17.5T288-576q0 25 17.5 42.5T348-516Zm132 228q62 0 114.5-29t75.5-86H290q23 57 75.5 86T480-288Zm.276 192Q401-96 331-126q-70-30-122.5-82.5T126-330.958q-30-69.959-30-149.5Q96-560 126-629.5t82.5-122Q261-804 330.958-834q69.959-30 149.5-30Q560-864 629.5-834t122 82.5Q804-699 834-629.276q30 69.725 30 149Q864-401 834-331q-30 70-82.5 122.5T629.276-126q-69.725 30-149 30Z"/></svg>

After

Width:  |  Height:  |  Size: 634 B

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 -960 960 960" width="20"><path d="M612-516q25 0 42.5-17.5T672-576q0-25-17.5-42.5T612-636q-25 0-42.5 17.5T552-576q0 25 17.5 42.5T612-516Zm-264 0q25 0 42.5-17.5T408-576q0-25-17.5-42.5T348-636q-25 0-42.5 17.5T288-576q0 25 17.5 42.5T348-516Zm132 228q60 0 110.5-31t79.5-84H290q29 53 79.5 84T480-288Zm.276 192Q401-96 331-126q-70-30-122.5-82.5T126-330.958q-30-69.959-30-149.5Q96-560 126-629.5t82.5-122Q261-804 330.958-834q69.959-30 149.5-30Q560-864 629.5-834t122 82.5Q804-699 834-629.276q30 69.725 30 149Q864-401 834-331q-30 70-82.5 122.5T629.276-126q-69.725 30-149 30ZM480-480Zm0 312q130 0 221-91t91-221q0-130-91-221t-221-91q-130 0-221 91t-91 221q0 130 91 221t221 91Z"/></svg>

After

Width:  |  Height:  |  Size: 733 B

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 -960 960 960" width="20"><path d="M360-384h384L618-552l-90 120-66-88-102 136Zm-48 144q-29.7 0-50.85-21.15Q240-282.3 240-312v-480q0-29.7 21.15-50.85Q282.3-864 312-864h480q29.7 0 50.85 21.15Q864-821.7 864-792v480q0 29.7-21.15 50.85Q821.7-240 792-240H312ZM168-96q-29.7 0-50.85-21.15Q96-138.3 96-168v-552h72v552h552v72H168Z"/></svg>

After

Width:  |  Height:  |  Size: 391 B

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 -960 960 960" width="20"><path d="M360-384h384L618-552l-90 120-66-88-102 136Zm-48 144q-29.7 0-50.85-21.15Q240-282.3 240-312v-480q0-29.7 21.15-50.85Q282.3-864 312-864h480q29.7 0 50.85 21.15Q864-821.7 864-792v480q0 29.7-21.15 50.85Q821.7-240 792-240H312Zm0-72h480v-480H312v480ZM168-96q-29.7 0-50.85-21.15Q96-138.3 96-168v-552h72v552h552v72H168Zm144-696v480-480Z"/></svg>

After

Width:  |  Height:  |  Size: 431 B

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 -960 960 960" width="20"><path d="m48-144 432-720 432 720H48Zm431.789-120Q495-264 505.5-274.289q10.5-10.29 10.5-25.5Q516-315 505.711-325.5q-10.29-10.5-25.5-10.5Q465-336 454.5-325.711q-10.5 10.29-10.5 25.5Q444-285 454.289-274.5q10.29 10.5 25.5 10.5ZM444-384h72v-192h-72v192Z"/></svg>

After

Width:  |  Height:  |  Size: 345 B

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