Merge branch 'main' into add-gsw
|
@ -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"]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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"]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
@ -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
|
@ -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
|
2
.github/workflows/lint-css.yml
vendored
|
@ -43,4 +43,4 @@ jobs:
|
|||
- run: echo "::add-matcher::.github/stylelint-matcher.json"
|
||||
|
||||
- name: Stylelint
|
||||
run: yarn lint:sass
|
||||
run: yarn lint:css
|
||||
|
|
2
.github/workflows/lint-haml.yml
vendored
|
@ -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
|
||||
|
|
38
.github/workflows/lint-json.yml
vendored
|
@ -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
|
38
.github/workflows/lint-md.yml
vendored
|
@ -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
|
40
.github/workflows/lint-yml.yml
vendored
|
@ -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
|
|
@ -1,4 +1 @@
|
|||
#!/bin/sh
|
||||
. "$(dirname "$0")/_/husky.sh"
|
||||
|
||||
yarn lint-staged
|
||||
|
|
|
@ -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
|
||||
|
|
118
Gemfile.lock
|
@ -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)
|
||||
|
|
18
README.md
|
@ -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
|
@ -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
|
||||
|
|
|
@ -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!
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
21
app/javascript/images/mailer-new/heading/LICENSE
Normal 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.
|
1
app/javascript/images/mailer-new/heading/README.md
Normal file
|
@ -0,0 +1 @@
|
|||
Images in this folder are based on [Tabler.io icons](https://tabler.io/icons).
|
BIN
app/javascript/images/mailer-new/store-icons/btn-app-store.png
Normal file
After Width: | Height: | Size: 2 KiB |
BIN
app/javascript/images/mailer-new/store-icons/btn-google-play.png
Normal file
After Width: | Height: | Size: 4.4 KiB |
21
app/javascript/images/mailer-new/welcome-icons/LICENSE
Normal 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.
|
1
app/javascript/images/mailer-new/welcome-icons/README.md
Normal file
|
@ -0,0 +1 @@
|
|||
Images in this folder are based on [Tabler.io icons](https://tabler.io/icons).
|
Before Width: | Height: | Size: 547 B After Width: | Height: | Size: 547 B |
BIN
app/javascript/images/mailer-new/welcome-icons/apps_step-on.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 1 KiB After Width: | Height: | Size: 1 KiB |
Before Width: | Height: | Size: 505 B After Width: | Height: | Size: 505 B |
After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 688 B After Width: | Height: | Size: 688 B |
BIN
app/javascript/images/mailer-new/welcome-icons/post_step-on.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 709 B After Width: | Height: | Size: 709 B |
BIN
app/javascript/images/mailer-new/welcome-icons/share_step-on.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
app/javascript/images/mailer-new/welcome/feature_audience.png
Normal file
After Width: | Height: | Size: 94 KiB |
BIN
app/javascript/images/mailer-new/welcome/feature_control.png
Normal file
After Width: | Height: | Size: 88 KiB |
BIN
app/javascript/images/mailer-new/welcome/feature_creativity.png
Normal file
After Width: | Height: | Size: 127 KiB |
BIN
app/javascript/images/mailer-new/welcome/feature_moderation.png
Normal file
After Width: | Height: | Size: 98 KiB |
After Width: | Height: | Size: 939 B |
After Width: | Height: | Size: 2.5 KiB |
|
@ -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>
|
||||
);
|
||||
|
|
|
@ -53,7 +53,6 @@ const messages = defineMessages({
|
|||
});
|
||||
|
||||
const dateFormatOptions = {
|
||||
hour12: false,
|
||||
year: 'numeric',
|
||||
month: 'short',
|
||||
day: '2-digit',
|
||||
|
|
|
@ -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'>
|
||||
|
|
|
@ -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'));
|
||||
|
|
|
@ -101,7 +101,6 @@ const dateFormatOptions = {
|
|||
month: 'short',
|
||||
day: 'numeric',
|
||||
year: 'numeric',
|
||||
hour12: false,
|
||||
hour: '2-digit',
|
||||
minute: '2-digit',
|
||||
};
|
||||
|
|
|
@ -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';
|
||||
|
|
|
@ -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';
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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';
|
||||
|
|
|
@ -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';
|
||||
|
||||
|
|
|
@ -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 = {
|
||||
|
|
|
@ -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,
|
||||
};
|
|
@ -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';
|
||||
|
|
|
@ -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({
|
||||
|
|
|
@ -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';
|
||||
|
|
|
@ -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'];
|
||||
}
|
||||
|
||||
|
|
|
@ -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];
|
||||
}
|
||||
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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} />
|
||||
|
|
|
@ -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' />,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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)} />
|
||||
)}
|
||||
|
|
|
@ -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": "Виж тенденции",
|
||||
|
|
|
@ -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}",
|
||||
|
|
|
@ -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 d’aquests 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.",
|
||||
|
|
|
@ -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": "بنەڕەتی",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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.",
|
||||
|
|
|
@ -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": "انسداد",
|
||||
|
|
|
@ -277,6 +277,17 @@
|
|||
"follow_request.authorize": "Autoriser",
|
||||
"follow_request.reject": "Rejeter",
|
||||
"follow_requests.unlocked_explanation": "Même si votre compte n’est 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",
|
||||
|
|
|
@ -277,6 +277,17 @@
|
|||
"follow_request.authorize": "Accepter",
|
||||
"follow_request.reject": "Rejeter",
|
||||
"follow_requests.unlocked_explanation": "Même si votre compte n’est 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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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": "개인정보처리방침",
|
||||
|
|
|
@ -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ų}}",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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}",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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": "เลิกดัน",
|
||||
|
|
|
@ -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ç",
|
||||
|
|
|
@ -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ả",
|
||||
|
|
|
@ -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": "新关注请求:",
|
||||
|
|
|
@ -668,7 +668,7 @@
|
|||
"status.mute": "靜音 @{name}",
|
||||
"status.mute_conversation": "靜音對話",
|
||||
"status.open": "展開此嘟文",
|
||||
"status.pin": "釘選到個人檔案頁面",
|
||||
"status.pin": "釘選至個人檔案頁面",
|
||||
"status.pinned": "釘選嘟文",
|
||||
"status.read_more": "閱讀更多",
|
||||
"status.reblog": "轉嘟",
|
||||
|
|
|
@ -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}>
|
||||
|
|
|
@ -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 |
|
@ -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 |
1
app/javascript/material-icons/400-20px/close-fill.svg
Normal 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 |
1
app/javascript/material-icons/400-20px/close.svg
Normal 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 |
1
app/javascript/material-icons/400-20px/mood-fill.svg
Normal 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 |
1
app/javascript/material-icons/400-20px/mood.svg
Normal 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 |
|
@ -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 |
1
app/javascript/material-icons/400-20px/photo_library.svg
Normal 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 |
1
app/javascript/material-icons/400-20px/warning-fill.svg
Normal 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 |