mirror of
https://github.com/misskey-dev/misskey.git
synced 2026-07-30 03:45:50 +00:00
Compare commits
201 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b97683cdb2 | |||
| ece9679cc4 | |||
| c5fd36094d | |||
| b5a6e12439 | |||
| 1d171aeb96 | |||
| b826a16231 | |||
| 9e38288da5 | |||
| 57ed2914d1 | |||
| 54e94263a8 | |||
| 0e4732180f | |||
| df1fa8b90a | |||
| 45df44899a | |||
| 2904b5a342 | |||
| f16ef2ef56 | |||
| a3b0dc91e8 | |||
| 07bbc5ab33 | |||
| bbffa563d9 | |||
| 1eefd8d3f0 | |||
| 589a3e229b | |||
| 9377e94072 | |||
| bc19359876 | |||
| 47db963d8d | |||
| 277716bc49 | |||
| db5cc6c058 | |||
| 06f8dd39ca | |||
| 307e90427a | |||
| d083855f7f | |||
| 4ec56ba9f6 | |||
| 5e62ad160e | |||
| e554e72b55 | |||
| 25783425e1 | |||
| 582ebe422c | |||
| 06e74508a2 | |||
| b361a10c48 | |||
| a07dc589e7 | |||
| b5d399674a | |||
| e074a91189 | |||
| 29c357a988 | |||
| ac45781ef9 | |||
| 5d78b320de | |||
| a025209602 | |||
| d5b86a8b49 | |||
| 1a62318bcc | |||
| 9c30c0915a | |||
| 53b9abd098 | |||
| 3980b2ca55 | |||
| 810faa8e5d | |||
| ae1304d645 | |||
| 676e164634 | |||
| 71f50d3280 | |||
| d4cd47f455 | |||
| 22a6935468 | |||
| 264068c58b | |||
| 97f7659bac | |||
| 41620600cc | |||
| b5121dc70e | |||
| bd992661f4 | |||
| 799f5ab504 | |||
| d4bc753e72 | |||
| af40eb4d31 | |||
| a22b82c414 | |||
| 28f5b2f173 | |||
| c86cbfcfba | |||
| 00cbd1e6db | |||
| 65e51463c8 | |||
| 39362f78a6 | |||
| d2154214ba | |||
| 97312b97f8 | |||
| 5e2b041f84 | |||
| ec97f49919 | |||
| 4910fff7fb | |||
| fc7655c808 | |||
| ae2ac9d50f | |||
| 8932492fd3 | |||
| a168e7b648 | |||
| 1adcb03b93 | |||
| b6e737dc76 | |||
| 2fa6ecc7ef | |||
| f744b5711f | |||
| 2b3d72bb73 | |||
| 3205eb6925 | |||
| d4fcc694a6 | |||
| 389861f1da | |||
| ec683f04d1 | |||
| bd81a6c8ad | |||
| d8318c02a1 | |||
| b941c896aa | |||
| 153ebd4392 | |||
| bc5aef846b | |||
| 4a0edf348a | |||
| f3aa5081ed | |||
| c0d5c0df69 | |||
| 0b383efa5a | |||
| abe745ec87 | |||
| 2168395b71 | |||
| 7a9c4591c2 | |||
| 4bc0026900 | |||
| faf2399e31 | |||
| 106fffdcfe | |||
| 141964e57c | |||
| 41592eafb3 | |||
| 2a14025c29 | |||
| 75b5dc1cd8 | |||
| ee0eeb052f | |||
| ece4efcefe | |||
| cd973b252a | |||
| 666f78e676 | |||
| cf89c4e363 | |||
| bf41e9edd1 | |||
| f92c187e2b | |||
| 8c5572dd3b | |||
| e18b92823f | |||
| 2d709ceeb4 | |||
| 38b3eecc8c | |||
| f6fc78f578 | |||
| 6e99acf7a7 | |||
| 553a147396 | |||
| 7bcfeba7e5 | |||
| 4f65c1529b | |||
| 589ae8d4c6 | |||
| 0be4405a79 | |||
| 2fba2e7049 | |||
| 96b03a7179 | |||
| cdb958cdf0 | |||
| 245775ea87 | |||
| 40d55fc6a3 | |||
| 9c22538454 | |||
| a1ba403f9a | |||
| 443e1ed29e | |||
| b5454cb2c4 | |||
| 8577f10456 | |||
| 16ffd88ecc | |||
| 866e675134 | |||
| 01aa56c602 | |||
| ff7d2c1083 | |||
| 404fca6c2d | |||
| 3fe0477cac | |||
| 97d485bdd2 | |||
| 4285303c81 | |||
| 14f58255ee | |||
| b69b0acf59 | |||
| 7a5430199f | |||
| c32307dca4 | |||
| bc78bb9b8e | |||
| a33b003282 | |||
| 74e847a04d | |||
| 06657c81d3 | |||
| 5c5e965151 | |||
| b07a1e692f | |||
| 78348007ed | |||
| 92f1e599db | |||
| 26b5979c76 | |||
| b1048525d2 | |||
| 4c31eb409c | |||
| f739cb6270 | |||
| 81bacb6203 | |||
| ee8dccea2f | |||
| 6d00645bc7 | |||
| baeed4bc80 | |||
| dba44daf9c | |||
| 46e6dd99d1 | |||
| f48af7f73b | |||
| 834e8b4c24 | |||
| 7ef0c96758 | |||
| b10074e939 | |||
| 260dbd150b | |||
| 79cbbcfe0f | |||
| c893f85864 | |||
| 24d4ffa2ec | |||
| 0b931daefd | |||
| cc05d93194 | |||
| 90345591bb | |||
| 730227f353 | |||
| 4acb37ee9d | |||
| 7025769c69 | |||
| 1a4ef8769f | |||
| 055cd0c250 | |||
| d35ddc77d2 | |||
| 8d871a58e3 | |||
| 99b0b436e0 | |||
| e3d5b95672 | |||
| 0d52145b2b | |||
| 467404d5bb | |||
| 99e25784ad | |||
| 9e1e40d35a | |||
| 8eb6e29d2c | |||
| 2d198a711b | |||
| e0b872dc09 | |||
| 711b86ab7d | |||
| e8b4dae553 | |||
| 36d404818d | |||
| cb03f3f013 | |||
| c109bec013 | |||
| 6fa4eb8c4f | |||
| 5fb4caa14b | |||
| bc1f83664f | |||
| 78435dc8d4 | |||
| d74aded35f | |||
| d605680524 | |||
| 1096ce8e4a | |||
| 8e6fffee68 |
+47
-5
@@ -107,13 +107,51 @@ port: 3000
|
|||||||
|
|
||||||
# Proxy trust settings
|
# Proxy trust settings
|
||||||
#
|
#
|
||||||
# Changes how the server interpret the origin IP of the request.
|
# Specifies the IP addresses that Misskey will use as trusted
|
||||||
|
# reverse proxies (e.g., nginx, Cloudflare). This affects how
|
||||||
|
# Misskey determines the source IP for each request and is used
|
||||||
|
# for important rate limiting and security features. If the value
|
||||||
|
# is not set correctly, Misskey may use the IP address of the
|
||||||
|
# reverse proxy instead of the actual source IP, which may lead to
|
||||||
|
# unintended rate limiting or security vulnerabilities.
|
||||||
|
# By default, the loopback network and private network address
|
||||||
|
# ranges shown below are trusted.
|
||||||
|
# If you are using a single reverse proxy and it is on the same
|
||||||
|
# machine or the same private network as Misskey, it is unlikely you
|
||||||
|
# need to change this setting, and the default setting is fine.
|
||||||
|
# Also, if you are using multiple reverse proxy servers and they are
|
||||||
|
# all on the same private network as Misskey, the default setting
|
||||||
|
# is fine.
|
||||||
|
# However, if you are using a reverse proxy server that accesses
|
||||||
|
# Misskey web servers and streaming servers via public IP addresses
|
||||||
|
# (for example, Cloudflare), you must set this variable.
|
||||||
|
# When changing this setting, you can use one of the following values:
|
||||||
#
|
#
|
||||||
# Any format supported by Fastify is accepted.
|
# - true: Trust all proxies
|
||||||
# Default: do not trust any proxies (i.e. trustProxy: false)
|
# - false: Do not trust any proxies
|
||||||
# See: https://fastify.dev/docs/latest/reference/server/#trustproxy
|
# - IP address, IP address range, or array of them: Trust hops that
|
||||||
|
# match the specified criteria.
|
||||||
|
# - Integer: Trust the nth hop from the front-facing proxy server as
|
||||||
|
# the client.
|
||||||
|
# For more information on how to configure this setting, please refer
|
||||||
|
# to the Fastify documentation:
|
||||||
|
# https://fastify.dev/docs/latest/Reference/Server/#trustproxy
|
||||||
#
|
#
|
||||||
# trustProxy: false
|
# Note that if this variable is set, it overrides the default range,
|
||||||
|
# so if you have both an external reverse proxy and a proxy on the
|
||||||
|
# local host, you must include both IPs (or IP ranges).
|
||||||
|
#
|
||||||
|
#trustProxy:
|
||||||
|
# - '10.0.0.0/8'
|
||||||
|
# - '172.16.0.0/12'
|
||||||
|
# - '192.168.0.0/16'
|
||||||
|
# - '127.0.0.1/32'
|
||||||
|
# - '::1/128'
|
||||||
|
# - 'fc00::/7'
|
||||||
|
# # Example: If you are using some external reverse proxies like CDNs,
|
||||||
|
# # you may need to add the CDN IP ranges here.
|
||||||
|
# # If you're using Cloudflare, you can find IP Ranges at:
|
||||||
|
# # https://www.cloudflare.com/ips/
|
||||||
|
|
||||||
# ┌──────────────────────────┐
|
# ┌──────────────────────────┐
|
||||||
#───┘ PostgreSQL configuration └────────────────────────────────
|
#───┘ PostgreSQL configuration └────────────────────────────────
|
||||||
@@ -283,6 +321,10 @@ id: 'aidx'
|
|||||||
# Whether disable HSTS
|
# Whether disable HSTS
|
||||||
#disableHsts: true
|
#disableHsts: true
|
||||||
|
|
||||||
|
# Enable internal IP-based rate limiting (default: true)
|
||||||
|
# To configure them in reverse proxy instead, set this to false.
|
||||||
|
#enableIpRateLimit: true
|
||||||
|
|
||||||
# Number of worker processes
|
# Number of worker processes
|
||||||
#clusterLimit: 1
|
#clusterLimit: 1
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
Dockerfile
|
Dockerfile
|
||||||
build/
|
build/
|
||||||
built/
|
built/
|
||||||
|
src-js/
|
||||||
db/
|
db/
|
||||||
.devcontainer/compose.yml
|
.devcontainer/compose.yml
|
||||||
node_modules/
|
node_modules/
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ body:
|
|||||||
* Model and OS of the device(s): MacBook Pro (14inch, 2021), macOS Ventura 13.4
|
* Model and OS of the device(s): MacBook Pro (14inch, 2021), macOS Ventura 13.4
|
||||||
* Browser: Chrome 113.0.5672.126
|
* Browser: Chrome 113.0.5672.126
|
||||||
* Server URL: misskey.example.com
|
* Server URL: misskey.example.com
|
||||||
* Misskey: 2025.x.x
|
* Misskey: 2026.x.x
|
||||||
value: |
|
value: |
|
||||||
* Model and OS of the device(s):
|
* Model and OS of the device(s):
|
||||||
* Browser:
|
* Browser:
|
||||||
@@ -74,7 +74,7 @@ body:
|
|||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
* Installation Method or Hosting Service: docker compose, k8s/docker, systemd, "Misskey install shell script", development environment
|
* Installation Method or Hosting Service: docker compose, k8s/docker, systemd, "Misskey install shell script", development environment
|
||||||
* Misskey: 2025.x.x
|
* Misskey: 2026.x.x
|
||||||
* Node: 20.x.x
|
* Node: 20.x.x
|
||||||
* PostgreSQL: 18.x.x
|
* PostgreSQL: 18.x.x
|
||||||
* Redis: 7.x.x
|
* Redis: 7.x.x
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
# Copilot Instructions for Misskey
|
||||||
|
|
||||||
|
- en-US.yml を編集しないでください。
|
||||||
@@ -16,13 +16,13 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4.3.0
|
uses: actions/checkout@v6.0.2
|
||||||
|
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@v4.2.0
|
uses: pnpm/action-setup@v4.4.0
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
uses: actions/setup-node@v4.4.0
|
uses: actions/setup-node@v6.3.0
|
||||||
with:
|
with:
|
||||||
node-version-file: '.node-version'
|
node-version-file: '.node-version'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
|||||||
@@ -12,9 +12,9 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout head
|
- name: Checkout head
|
||||||
uses: actions/checkout@v4.3.0
|
uses: actions/checkout@v6.0.2
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
uses: actions/setup-node@v4.4.0
|
uses: actions/setup-node@v6.3.0
|
||||||
with:
|
with:
|
||||||
node-version-file: '.node-version'
|
node-version-file: '.node-version'
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ jobs:
|
|||||||
if: ${{ github.event.pull_request.mergeable == null || github.event.pull_request.mergeable == true }}
|
if: ${{ github.event.pull_request.mergeable == null || github.event.pull_request.mergeable == true }}
|
||||||
steps:
|
steps:
|
||||||
- name: checkout
|
- name: checkout
|
||||||
uses: actions/checkout@v4.3.0
|
uses: actions/checkout@v6.0.2
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
@@ -29,7 +29,7 @@ jobs:
|
|||||||
|
|
||||||
- name: setup node
|
- name: setup node
|
||||||
id: setup-node
|
id: setup-node
|
||||||
uses: actions/setup-node@v4.4.0
|
uses: actions/setup-node@v6.3.0
|
||||||
with:
|
with:
|
||||||
node-version-file: '.node-version'
|
node-version-file: '.node-version'
|
||||||
cache: pnpm
|
cache: pnpm
|
||||||
@@ -53,7 +53,7 @@ jobs:
|
|||||||
|
|
||||||
# packages/misskey-js/generator/built/autogen
|
# packages/misskey-js/generator/built/autogen
|
||||||
- name: Upload Generated
|
- name: Upload Generated
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
name: generated-misskey-js
|
name: generated-misskey-js
|
||||||
path: packages/misskey-js/generator/built/autogen
|
path: packages/misskey-js/generator/built/autogen
|
||||||
@@ -66,14 +66,14 @@ jobs:
|
|||||||
if: ${{ github.event.pull_request.mergeable == null || github.event.pull_request.mergeable == true }}
|
if: ${{ github.event.pull_request.mergeable == null || github.event.pull_request.mergeable == true }}
|
||||||
steps:
|
steps:
|
||||||
- name: checkout
|
- name: checkout
|
||||||
uses: actions/checkout@v4.3.0
|
uses: actions/checkout@v6.0.2
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
ref: refs/pull/${{ github.event.pull_request.number }}/merge
|
ref: refs/pull/${{ github.event.pull_request.number }}/merge
|
||||||
|
|
||||||
- name: Upload From Merged
|
- name: Upload From Merged
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
name: actual-misskey-js
|
name: actual-misskey-js
|
||||||
path: packages/misskey-js/src/autogen
|
path: packages/misskey-js/src/autogen
|
||||||
@@ -86,13 +86,13 @@ jobs:
|
|||||||
pull-requests: write
|
pull-requests: write
|
||||||
steps:
|
steps:
|
||||||
- name: download generated-misskey-js
|
- name: download generated-misskey-js
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: generated-misskey-js
|
name: generated-misskey-js
|
||||||
path: misskey-js-generated
|
path: misskey-js-generated
|
||||||
|
|
||||||
- name: download actual-misskey-js
|
- name: download actual-misskey-js
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: actual-misskey-js
|
name: actual-misskey-js
|
||||||
path: misskey-js-actual
|
path: misskey-js-actual
|
||||||
@@ -113,9 +113,9 @@ jobs:
|
|||||||
|
|
||||||
- name: send message
|
- name: send message
|
||||||
if: steps.check-changes.outputs.changes == 'true'
|
if: steps.check-changes.outputs.changes == 'true'
|
||||||
uses: thollander/actions-comment-pull-request@v2
|
uses: thollander/actions-comment-pull-request@v3
|
||||||
with:
|
with:
|
||||||
comment_tag: check-misskey-js-autogen
|
comment-tag: check-misskey-js-autogen
|
||||||
message: |-
|
message: |-
|
||||||
Thank you for sending us a great Pull Request! 👍
|
Thank you for sending us a great Pull Request! 👍
|
||||||
Please regenerate misskey-js type definitions! 🙏
|
Please regenerate misskey-js type definitions! 🙏
|
||||||
@@ -127,9 +127,9 @@ jobs:
|
|||||||
|
|
||||||
- name: send message
|
- name: send message
|
||||||
if: steps.check-changes.outputs.changes == 'false'
|
if: steps.check-changes.outputs.changes == 'false'
|
||||||
uses: thollander/actions-comment-pull-request@v2
|
uses: thollander/actions-comment-pull-request@v3
|
||||||
with:
|
with:
|
||||||
comment_tag: check-misskey-js-autogen
|
comment-tag: check-misskey-js-autogen
|
||||||
mode: delete
|
mode: delete
|
||||||
message: "Thank you!"
|
message: "Thank you!"
|
||||||
create_if_not_exists: false
|
create_if_not_exists: false
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4.3.0
|
uses: actions/checkout@v6.0.2
|
||||||
- name: Check version
|
- name: Check version
|
||||||
run: |
|
run: |
|
||||||
if [ "$(jq -r '.version' package.json)" != "$(jq -r '.version' packages/misskey-js/package.json)" ]; then
|
if [ "$(jq -r '.version' package.json)" != "$(jq -r '.version' packages/misskey-js/package.json)" ]; then
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4.3.0
|
uses: actions/checkout@v6.0.2
|
||||||
- name: Check
|
- name: Check
|
||||||
run: |
|
run: |
|
||||||
counter=0
|
counter=0
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ jobs:
|
|||||||
check_copyright_year:
|
check_copyright_year:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.3.0
|
- uses: actions/checkout@v6.0.2
|
||||||
- run: |
|
- run: |
|
||||||
if [ "$(grep Copyright COPYING | sed -e 's/.*2014-\([0-9]*\) .*/\1/g')" -ne "$(date +%Y)" ]; then
|
if [ "$(grep Copyright COPYING | sed -e 's/.*2014-\([0-9]*\) .*/\1/g')" -ne "$(date +%Y)" ]; then
|
||||||
echo "Please change copyright year!"
|
echo "Please change copyright year!"
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ jobs:
|
|||||||
wait_time: ${{ steps.get-wait-time.outputs.wait_time }}
|
wait_time: ${{ steps.get-wait-time.outputs.wait_time }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4.3.0
|
uses: actions/checkout@v6.0.2
|
||||||
|
|
||||||
- name: Check allowed users
|
- name: Check allowed users
|
||||||
id: check-allowed-users
|
id: check-allowed-users
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ jobs:
|
|||||||
platform=${{ matrix.platform }}
|
platform=${{ matrix.platform }}
|
||||||
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
|
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
|
||||||
- name: Check out the repo
|
- name: Check out the repo
|
||||||
uses: actions/checkout@v4.3.0
|
uses: actions/checkout@v6.0.2
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v3
|
uses: docker/setup-buildx-action@v3
|
||||||
- name: Log in to Docker Hub
|
- name: Log in to Docker Hub
|
||||||
@@ -53,7 +53,7 @@ jobs:
|
|||||||
digest="${{ steps.build.outputs.digest }}"
|
digest="${{ steps.build.outputs.digest }}"
|
||||||
touch "/tmp/digests/${digest#sha256:}"
|
touch "/tmp/digests/${digest#sha256:}"
|
||||||
- name: Upload digest
|
- name: Upload digest
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
name: digests-${{ env.PLATFORM_PAIR }}
|
name: digests-${{ env.PLATFORM_PAIR }}
|
||||||
path: /tmp/digests/*
|
path: /tmp/digests/*
|
||||||
@@ -66,7 +66,7 @@ jobs:
|
|||||||
- build
|
- build
|
||||||
steps:
|
steps:
|
||||||
- name: Download digests
|
- name: Download digests
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v7
|
||||||
with:
|
with:
|
||||||
path: /tmp/digests
|
path: /tmp/digests
|
||||||
pattern: digests-*
|
pattern: digests-*
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ jobs:
|
|||||||
platform=${{ matrix.platform }}
|
platform=${{ matrix.platform }}
|
||||||
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
|
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
|
||||||
- name: Check out the repo
|
- name: Check out the repo
|
||||||
uses: actions/checkout@v4.3.0
|
uses: actions/checkout@v6.0.2
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v3
|
uses: docker/setup-buildx-action@v3
|
||||||
- name: Docker meta
|
- name: Docker meta
|
||||||
@@ -64,7 +64,7 @@ jobs:
|
|||||||
digest="${{ steps.build.outputs.digest }}"
|
digest="${{ steps.build.outputs.digest }}"
|
||||||
touch "/tmp/digests/${digest#sha256:}"
|
touch "/tmp/digests/${digest#sha256:}"
|
||||||
- name: Upload digest
|
- name: Upload digest
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
name: digests-${{ env.PLATFORM_PAIR }}
|
name: digests-${{ env.PLATFORM_PAIR }}
|
||||||
path: /tmp/digests/*
|
path: /tmp/digests/*
|
||||||
@@ -77,7 +77,7 @@ jobs:
|
|||||||
- build
|
- build
|
||||||
steps:
|
steps:
|
||||||
- name: Download digests
|
- name: Download digests
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v7
|
||||||
with:
|
with:
|
||||||
path: /tmp/digests
|
path: /tmp/digests
|
||||||
pattern: digests-*
|
pattern: digests-*
|
||||||
|
|||||||
@@ -11,38 +11,43 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
dockle:
|
dockle:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
env:
|
env:
|
||||||
DOCKER_CONTENT_TRUST: 1
|
DOCKER_CONTENT_TRUST: 1
|
||||||
DOCKLE_VERSION: 0.4.15
|
DOCKLE_VERSION: 0.4.15
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.3.0
|
- uses: actions/checkout@v6.0.2
|
||||||
|
|
||||||
- name: Download and install dockle v${{ env.DOCKLE_VERSION }}
|
- name: Download and install dockle v${{ env.DOCKLE_VERSION }}
|
||||||
run: |
|
run: |
|
||||||
|
set -eux
|
||||||
curl -L -o dockle.deb "https://github.com/goodwithtech/dockle/releases/download/v${DOCKLE_VERSION}/dockle_${DOCKLE_VERSION}_Linux-64bit.deb"
|
curl -L -o dockle.deb "https://github.com/goodwithtech/dockle/releases/download/v${DOCKLE_VERSION}/dockle_${DOCKLE_VERSION}_Linux-64bit.deb"
|
||||||
sudo dpkg -i dockle.deb
|
sudo dpkg -i dockle.deb
|
||||||
|
|
||||||
- run: |
|
- name: Build web image (docker build)
|
||||||
cp .config/docker_example.env .config/docker.env
|
|
||||||
cp ./compose_example.yml ./compose.yml
|
|
||||||
|
|
||||||
- run: |
|
|
||||||
docker compose up -d web
|
|
||||||
IMAGE_ID=$(docker compose images --format json web | jq -r '.[0].ID')
|
|
||||||
docker tag "${IMAGE_ID}" misskey-web:latest
|
|
||||||
|
|
||||||
- name: Prune docker junk (optional but recommended)
|
|
||||||
run: |
|
run: |
|
||||||
docker system prune -af
|
set -eux
|
||||||
docker volume prune -f
|
docker build -t "misskey-web:ci" .
|
||||||
|
docker image ls
|
||||||
|
|
||||||
- name: Save image for Dockle
|
- name: Mount tmpfs for Dockle tar
|
||||||
|
env:
|
||||||
|
TMPFS_SIZE: 8G
|
||||||
run: |
|
run: |
|
||||||
docker save misskey-web:latest -o ./misskey-web.tar
|
set -eux
|
||||||
ls -lh ./misskey-web.tar
|
sudo mkdir -p /mnt/dockle-tmp
|
||||||
|
sudo mount -t tmpfs -o size=${{ env.TMPFS_SIZE }} tmpfs /mnt/dockle-tmp
|
||||||
|
free -h
|
||||||
|
df -h
|
||||||
|
|
||||||
- name: Run Dockle with tar input
|
- name: Save image tar into tmpfs
|
||||||
run: |
|
run: |
|
||||||
dockle --exit-code 1 --input ./misskey-web.tar
|
set -eux
|
||||||
|
docker save misskey-web:ci -o /mnt/dockle-tmp/misskey-web.tar
|
||||||
|
ls -lh /mnt/dockle-tmp/misskey-web.tar
|
||||||
|
|
||||||
|
- name: Run Dockle Scan (tar input)
|
||||||
|
run: |
|
||||||
|
set -eux
|
||||||
|
dockle --exit-code 1 --input /mnt/dockle-tmp/misskey-web.tar
|
||||||
|
|||||||
@@ -25,14 +25,14 @@ jobs:
|
|||||||
ref: refs/pull/${{ github.event.number }}/merge
|
ref: refs/pull/${{ github.event.number }}/merge
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.3.0
|
- uses: actions/checkout@v6.0.2
|
||||||
with:
|
with:
|
||||||
ref: ${{ matrix.ref }}
|
ref: ${{ matrix.ref }}
|
||||||
submodules: true
|
submodules: true
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@v4.2.0
|
uses: pnpm/action-setup@v4.4.0
|
||||||
- name: Use Node.js
|
- name: Use Node.js
|
||||||
uses: actions/setup-node@v4.4.0
|
uses: actions/setup-node@v6.3.0
|
||||||
with:
|
with:
|
||||||
node-version-file: '.node-version'
|
node-version-file: '.node-version'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
@@ -48,7 +48,7 @@ jobs:
|
|||||||
- name: Copy API.json
|
- name: Copy API.json
|
||||||
run: cp packages/backend/built/api.json ${{ matrix.api-json-name }}
|
run: cp packages/backend/built/api.json ${{ matrix.api-json-name }}
|
||||||
- name: Upload Artifact
|
- name: Upload Artifact
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
name: api-artifact-${{ matrix.api-json-name }}
|
name: api-artifact-${{ matrix.api-json-name }}
|
||||||
path: ${{ matrix.api-json-name }}
|
path: ${{ matrix.api-json-name }}
|
||||||
@@ -61,7 +61,7 @@ jobs:
|
|||||||
PR_NUMBER: ${{ github.event.number }}
|
PR_NUMBER: ${{ github.event.number }}
|
||||||
run: |
|
run: |
|
||||||
echo "$PR_NUMBER" > ./pr_number
|
echo "$PR_NUMBER" > ./pr_number
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
name: api-artifact-pr-number
|
name: api-artifact-pr-number
|
||||||
path: pr_number
|
path: pr_number
|
||||||
|
|||||||
@@ -40,14 +40,14 @@ jobs:
|
|||||||
- 56312:6379
|
- 56312:6379
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.3.0
|
- uses: actions/checkout@v6.0.2
|
||||||
with:
|
with:
|
||||||
ref: ${{ matrix.ref }}
|
ref: ${{ matrix.ref }}
|
||||||
submodules: true
|
submodules: true
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@v4.2.0
|
uses: pnpm/action-setup@v4.4.0
|
||||||
- name: Use Node.js
|
- name: Use Node.js
|
||||||
uses: actions/setup-node@v4.4.0
|
uses: actions/setup-node@v6.3.0
|
||||||
with:
|
with:
|
||||||
node-version-file: '.node-version'
|
node-version-file: '.node-version'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
@@ -67,7 +67,7 @@ jobs:
|
|||||||
# Start the server and measure memory usage
|
# Start the server and measure memory usage
|
||||||
node packages/backend/scripts/measure-memory.mjs > ${{ matrix.memory-json-name }}
|
node packages/backend/scripts/measure-memory.mjs > ${{ matrix.memory-json-name }}
|
||||||
- name: Upload Artifact
|
- name: Upload Artifact
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
name: memory-artifact-${{ matrix.memory-json-name }}
|
name: memory-artifact-${{ matrix.memory-json-name }}
|
||||||
path: ${{ matrix.memory-json-name }}
|
path: ${{ matrix.memory-json-name }}
|
||||||
@@ -81,7 +81,7 @@ jobs:
|
|||||||
PR_NUMBER: ${{ github.event.number }}
|
PR_NUMBER: ${{ github.event.number }}
|
||||||
run: |
|
run: |
|
||||||
echo "$PR_NUMBER" > ./pr_number
|
echo "$PR_NUMBER" > ./pr_number
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
name: memory-artifact-pr-number
|
name: memory-artifact-pr-number
|
||||||
path: pr_number
|
path: pr_number
|
||||||
|
|||||||
@@ -11,6 +11,6 @@ jobs:
|
|||||||
pull-requests: write
|
pull-requests: write
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/labeler@v5
|
- uses: actions/labeler@v6
|
||||||
with:
|
with:
|
||||||
repo-token: "${{ secrets.GITHUB_TOKEN }}"
|
repo-token: "${{ secrets.GITHUB_TOKEN }}"
|
||||||
|
|||||||
@@ -36,13 +36,13 @@ jobs:
|
|||||||
pnpm_install:
|
pnpm_install:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.3.0
|
- uses: actions/checkout@v6.0.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
submodules: true
|
submodules: true
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@v4.2.0
|
uses: pnpm/action-setup@v4.4.0
|
||||||
- uses: actions/setup-node@v4.4.0
|
- uses: actions/setup-node@v6.3.0
|
||||||
with:
|
with:
|
||||||
node-version-file: '.node-version'
|
node-version-file: '.node-version'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
@@ -69,13 +69,13 @@ jobs:
|
|||||||
eslint-cache-version: v1
|
eslint-cache-version: v1
|
||||||
eslint-cache-path: ${{ github.workspace }}/node_modules/.cache/eslint-${{ matrix.workspace }}
|
eslint-cache-path: ${{ github.workspace }}/node_modules/.cache/eslint-${{ matrix.workspace }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.3.0
|
- uses: actions/checkout@v6.0.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
submodules: true
|
submodules: true
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@v4.2.0
|
uses: pnpm/action-setup@v4.4.0
|
||||||
- uses: actions/setup-node@v4.4.0
|
- uses: actions/setup-node@v6.3.0
|
||||||
with:
|
with:
|
||||||
node-version-file: '.node-version'
|
node-version-file: '.node-version'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
@@ -100,13 +100,13 @@ jobs:
|
|||||||
- sw
|
- sw
|
||||||
- misskey-js
|
- misskey-js
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.3.0
|
- uses: actions/checkout@v6.0.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
submodules: true
|
submodules: true
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@v4.2.0
|
uses: pnpm/action-setup@v4.4.0
|
||||||
- uses: actions/setup-node@v4.4.0
|
- uses: actions/setup-node@v6.3.0
|
||||||
with:
|
with:
|
||||||
node-version-file: '.node-version'
|
node-version-file: '.node-version'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
|||||||
@@ -16,13 +16,13 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.3.0
|
- uses: actions/checkout@v6.0.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
submodules: true
|
submodules: true
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@v4.2.0
|
uses: pnpm/action-setup@v4.4.0
|
||||||
- uses: actions/setup-node@v4.4.0
|
- uses: actions/setup-node@v6.3.0
|
||||||
with:
|
with:
|
||||||
node-version-file: ".node-version"
|
node-version-file: ".node-version"
|
||||||
cache: "pnpm"
|
cache: "pnpm"
|
||||||
|
|||||||
@@ -16,13 +16,13 @@ jobs:
|
|||||||
id-token: write
|
id-token: write
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.3.0
|
- uses: actions/checkout@v6.0.2
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@v4.2.0
|
uses: pnpm/action-setup@v4.4.0
|
||||||
- name: Use Node.js
|
- name: Use Node.js
|
||||||
uses: actions/setup-node@v4.4.0
|
uses: actions/setup-node@v6.3.0
|
||||||
with:
|
with:
|
||||||
node-version-file: '.node-version'
|
node-version-file: '.node-version'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ jobs:
|
|||||||
edit:
|
edit:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
# headが$GITHUB_REF_NAME, baseが$STABLE_BRANCHかつopenのPRを1つ取得
|
# headが$GITHUB_REF_NAME, baseが$STABLE_BRANCHかつopenのPRを1つ取得
|
||||||
- name: Get PR
|
- name: Get PR
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ jobs:
|
|||||||
outputs:
|
outputs:
|
||||||
pr_number: ${{ steps.get_pr.outputs.pr_number }}
|
pr_number: ${{ steps.get_pr.outputs.pr_number }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
# headが$GITHUB_REF_NAME, baseが$STABLE_BRANCHかつopenのPRを1つ取得
|
# headが$GITHUB_REF_NAME, baseが$STABLE_BRANCHかつopenのPRを1つ取得
|
||||||
- name: Get PRs
|
- name: Get PRs
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ jobs:
|
|||||||
# api-artifact
|
# api-artifact
|
||||||
steps:
|
steps:
|
||||||
- name: Download artifact
|
- name: Download artifact
|
||||||
uses: actions/github-script@v7.1.0
|
uses: actions/github-script@v8.0.0
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
@@ -60,7 +60,7 @@ jobs:
|
|||||||
- name: Echo full diff
|
- name: Echo full diff
|
||||||
run: cat ./api-full.json.diff
|
run: cat ./api-full.json.diff
|
||||||
- name: Upload full diff to Artifact
|
- name: Upload full diff to Artifact
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
name: api-artifact
|
name: api-artifact
|
||||||
path: |
|
path: |
|
||||||
@@ -89,16 +89,16 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
echo "$FOOTER" >> ./output.md
|
echo "$FOOTER" >> ./output.md
|
||||||
- uses: thollander/actions-comment-pull-request@v2
|
- uses: thollander/actions-comment-pull-request@v3
|
||||||
with:
|
with:
|
||||||
pr_number: ${{ steps.load-pr-num.outputs.pr-number }}
|
pr-number: ${{ steps.load-pr-num.outputs.pr-number }}
|
||||||
comment_tag: show_diff
|
comment-tag: show_diff
|
||||||
filePath: ./output.md
|
file-path: ./output.md
|
||||||
- name: Tell error to PR
|
- name: Tell error to PR
|
||||||
uses: thollander/actions-comment-pull-request@v2
|
uses: thollander/actions-comment-pull-request@v3
|
||||||
if: failure() && steps.load-pr-num.outputs.pr-number
|
if: failure() && steps.load-pr-num.outputs.pr-number
|
||||||
with:
|
with:
|
||||||
pr_number: ${{ steps.load-pr-num.outputs.pr-number }}
|
pr-number: ${{ steps.load-pr-num.outputs.pr-number }}
|
||||||
comment_tag: show_diff_error
|
comment-tag: show_diff_error
|
||||||
message: |
|
message: |
|
||||||
api.jsonの差分作成中にエラーが発生しました。詳細は[Workflowのログ](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})を確認してください。
|
api.jsonの差分作成中にエラーが発生しました。詳細は[Workflowのログ](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})を確認してください。
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Download artifact
|
- name: Download artifact
|
||||||
uses: actions/github-script@v7.1.0
|
uses: actions/github-script@v8.0.0
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
@@ -54,69 +54,124 @@ jobs:
|
|||||||
BASE_MEMORY=$(cat ./artifacts/memory-base.json)
|
BASE_MEMORY=$(cat ./artifacts/memory-base.json)
|
||||||
HEAD_MEMORY=$(cat ./artifacts/memory-head.json)
|
HEAD_MEMORY=$(cat ./artifacts/memory-head.json)
|
||||||
|
|
||||||
BASE_RSS=$(echo "$BASE_MEMORY" | jq -r '.memory.rss // 0')
|
variation() {
|
||||||
HEAD_RSS=$(echo "$HEAD_MEMORY" | jq -r '.memory.rss // 0')
|
calc() {
|
||||||
|
BASE=$(echo "$BASE_MEMORY" | jq -r ".${1}.${2} // 0")
|
||||||
|
HEAD=$(echo "$HEAD_MEMORY" | jq -r ".${1}.${2} // 0")
|
||||||
|
|
||||||
# Calculate difference
|
DIFF=$((HEAD - BASE))
|
||||||
if [ "$BASE_RSS" -gt 0 ] && [ "$HEAD_RSS" -gt 0 ]; then
|
if [ "$BASE" -gt 0 ]; then
|
||||||
DIFF=$((HEAD_RSS - BASE_RSS))
|
DIFF_PERCENT=$(echo "scale=2; ($DIFF * 100) / $BASE" | bc)
|
||||||
DIFF_PERCENT=$(echo "scale=2; ($DIFF * 100) / $BASE_RSS" | bc)
|
|
||||||
|
|
||||||
# Convert to MB for readability
|
|
||||||
BASE_MB=$(echo "scale=2; $BASE_RSS / 1048576" | bc)
|
|
||||||
HEAD_MB=$(echo "scale=2; $HEAD_RSS / 1048576" | bc)
|
|
||||||
DIFF_MB=$(echo "scale=2; $DIFF / 1048576" | bc)
|
|
||||||
|
|
||||||
echo "base_mb=$BASE_MB" >> "$GITHUB_OUTPUT"
|
|
||||||
echo "head_mb=$HEAD_MB" >> "$GITHUB_OUTPUT"
|
|
||||||
echo "diff_mb=$DIFF_MB" >> "$GITHUB_OUTPUT"
|
|
||||||
echo "diff_percent=$DIFF_PERCENT" >> "$GITHUB_OUTPUT"
|
|
||||||
echo "has_data=true" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
# Determine if this is a significant change (more than 5% increase)
|
|
||||||
if [ "$(echo "$DIFF_PERCENT > 5" | bc)" -eq 1 ]; then
|
|
||||||
echo "significant_increase=true" >> "$GITHUB_OUTPUT"
|
|
||||||
else
|
else
|
||||||
echo "significant_increase=false" >> "$GITHUB_OUTPUT"
|
DIFF_PERCENT=0
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "has_data=false" >> "$GITHUB_OUTPUT"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Convert KB to MB for readability
|
||||||
|
BASE_MB=$(echo "scale=2; $BASE / 1024" | bc)
|
||||||
|
HEAD_MB=$(echo "scale=2; $HEAD / 1024" | bc)
|
||||||
|
DIFF_MB=$(echo "scale=2; $DIFF / 1024" | bc)
|
||||||
|
|
||||||
|
JSON=$(jq -c -n \
|
||||||
|
--argjson base "$BASE_MB" \
|
||||||
|
--argjson head "$HEAD_MB" \
|
||||||
|
--argjson diff "$DIFF_MB" \
|
||||||
|
--argjson diff_percent "$DIFF_PERCENT" \
|
||||||
|
'{base: $base, head: $head, diff: $diff, diff_percent: $diff_percent}')
|
||||||
|
|
||||||
|
echo "$JSON"
|
||||||
|
}
|
||||||
|
|
||||||
|
JSON=$(jq -c -n \
|
||||||
|
--argjson VmRSS "$(calc $1 VmRSS)" \
|
||||||
|
--argjson VmHWM "$(calc $1 VmHWM)" \
|
||||||
|
--argjson VmSize "$(calc $1 VmSize)" \
|
||||||
|
--argjson VmData "$(calc $1 VmData)" \
|
||||||
|
'{VmRSS: $VmRSS, VmHWM: $VmHWM, VmSize: $VmSize, VmData: $VmData}')
|
||||||
|
|
||||||
|
echo "$JSON"
|
||||||
|
}
|
||||||
|
|
||||||
|
JSON=$(jq -c -n \
|
||||||
|
--argjson beforeGc "$(variation beforeGc)" \
|
||||||
|
--argjson afterGc "$(variation afterGc)" \
|
||||||
|
--argjson afterRequest "$(variation afterRequest)" \
|
||||||
|
'{beforeGc: $beforeGc, afterGc: $afterGc, afterRequest: $afterRequest}')
|
||||||
|
|
||||||
|
echo "res=$JSON" >> "$GITHUB_OUTPUT"
|
||||||
- id: build-comment
|
- id: build-comment
|
||||||
name: Build memory comment
|
name: Build memory comment
|
||||||
|
env:
|
||||||
|
RES: ${{ steps.compare.outputs.res }}
|
||||||
run: |
|
run: |
|
||||||
HEADER="## Backend Memory Usage Comparison"
|
HEADER="## Backend memory usage comparison"
|
||||||
FOOTER="[See workflow logs for details](https://github.com/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID})"
|
FOOTER="[See workflow logs for details](https://github.com/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID})"
|
||||||
|
|
||||||
echo "$HEADER" > ./output.md
|
echo "$HEADER" > ./output.md
|
||||||
echo >> ./output.md
|
echo >> ./output.md
|
||||||
|
|
||||||
if [ "${{ steps.compare.outputs.has_data }}" == "true" ]; then
|
table() {
|
||||||
echo "| Metric | base | head | Diff |" >> ./output.md
|
echo "| Metric | base (MB) | head (MB) | Diff (MB) | Diff (%) |" >> ./output.md
|
||||||
echo "|--------|------|------|------|" >> ./output.md
|
echo "|--------|------:|------:|------:|------:|" >> ./output.md
|
||||||
echo "| RSS | ${{ steps.compare.outputs.base_mb }} MB | ${{ steps.compare.outputs.head_mb }} MB | ${{ steps.compare.outputs.diff_mb }} MB (${{ steps.compare.outputs.diff_percent }}%) |" >> ./output.md
|
|
||||||
|
line() {
|
||||||
|
METRIC=$2
|
||||||
|
BASE=$(echo "$RES" | jq -r ".${1}.${2}.base")
|
||||||
|
HEAD=$(echo "$RES" | jq -r ".${1}.${2}.head")
|
||||||
|
DIFF=$(echo "$RES" | jq -r ".${1}.${2}.diff")
|
||||||
|
DIFF_PERCENT=$(echo "$RES" | jq -r ".${1}.${2}.diff_percent")
|
||||||
|
|
||||||
|
if (( $(echo "$DIFF_PERCENT > 0" | bc -l) )); then
|
||||||
|
DIFF="+$DIFF"
|
||||||
|
DIFF_PERCENT="+$DIFF_PERCENT"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# highlight VmRSS
|
||||||
|
if [ "$2" = "VmRSS" ]; then
|
||||||
|
METRIC="**${METRIC}**"
|
||||||
|
BASE="**${BASE}**"
|
||||||
|
HEAD="**${HEAD}**"
|
||||||
|
DIFF="**${DIFF}**"
|
||||||
|
DIFF_PERCENT="**${DIFF_PERCENT}**"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "| ${METRIC} | ${BASE} MB | ${HEAD} MB | ${DIFF} MB | ${DIFF_PERCENT}% |" >> ./output.md
|
||||||
|
}
|
||||||
|
|
||||||
|
line $1 VmRSS
|
||||||
|
line $1 VmHWM
|
||||||
|
line $1 VmSize
|
||||||
|
line $1 VmData
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "### Before GC" >> ./output.md
|
||||||
|
table beforeGc
|
||||||
echo >> ./output.md
|
echo >> ./output.md
|
||||||
|
|
||||||
if [ "${{ steps.compare.outputs.significant_increase }}" == "true" ]; then
|
echo "### After GC" >> ./output.md
|
||||||
echo "⚠️ **Warning**: Memory usage has increased by more than 5%. Please verify this is not an unintended change." >> ./output.md
|
table afterGc
|
||||||
echo >> ./output.md
|
echo >> ./output.md
|
||||||
fi
|
|
||||||
else
|
echo "### After Request" >> ./output.md
|
||||||
echo "Could not retrieve memory usage data." >> ./output.md
|
table afterRequest
|
||||||
|
echo >> ./output.md
|
||||||
|
|
||||||
|
# Determine if this is a significant change (more than 5% increase)
|
||||||
|
if [ "$(echo "$RES" | jq -r '.afterGc.VmRSS.diff_percent | tonumber > 5')" = "true" ]; then
|
||||||
|
echo "⚠️ **Warning**: Memory usage has increased by more than 5%. Please verify this is not an unintended change." >> ./output.md
|
||||||
echo >> ./output.md
|
echo >> ./output.md
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "$FOOTER" >> ./output.md
|
echo "$FOOTER" >> ./output.md
|
||||||
- uses: thollander/actions-comment-pull-request@v2
|
- uses: thollander/actions-comment-pull-request@v3
|
||||||
with:
|
with:
|
||||||
pr_number: ${{ steps.load-pr-num.outputs.pr-number }}
|
pr-number: ${{ steps.load-pr-num.outputs.pr-number }}
|
||||||
comment_tag: show_memory_diff
|
comment-tag: show_memory_diff
|
||||||
filePath: ./output.md
|
file-path: ./output.md
|
||||||
- name: Tell error to PR
|
- name: Tell error to PR
|
||||||
uses: thollander/actions-comment-pull-request@v2
|
uses: thollander/actions-comment-pull-request@v3
|
||||||
if: failure() && steps.load-pr-num.outputs.pr-number
|
if: failure() && steps.load-pr-num.outputs.pr-number
|
||||||
with:
|
with:
|
||||||
pr_number: ${{ steps.load-pr-num.outputs.pr-number }}
|
pr-number: ${{ steps.load-pr-num.outputs.pr-number }}
|
||||||
comment_tag: show_memory_diff_error
|
comment-tag: show_memory_diff_error
|
||||||
message: |
|
message: |
|
||||||
An error occurred while comparing backend memory usage. See [workflow logs](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}) for details.
|
An error occurred while comparing backend memory usage. See [workflow logs](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}) for details.
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ jobs:
|
|||||||
pull-requests: write
|
pull-requests: write
|
||||||
steps:
|
steps:
|
||||||
- name: Reply
|
- name: Reply
|
||||||
uses: actions/github-script@v6
|
uses: actions/github-script@v8
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
const body = `To dev team (@misskey-dev/dev):
|
const body = `To dev team (@misskey-dev/dev):
|
||||||
|
|||||||
@@ -22,12 +22,12 @@ jobs:
|
|||||||
NODE_OPTIONS: "--max_old_space_size=7168"
|
NODE_OPTIONS: "--max_old_space_size=7168"
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.3.0
|
- uses: actions/checkout@v6.0.2
|
||||||
if: github.event_name != 'pull_request_target'
|
if: github.event_name != 'pull_request_target'
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
submodules: true
|
submodules: true
|
||||||
- uses: actions/checkout@v4.3.0
|
- uses: actions/checkout@v6.0.2
|
||||||
if: github.event_name == 'pull_request_target'
|
if: github.event_name == 'pull_request_target'
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
@@ -37,9 +37,9 @@ jobs:
|
|||||||
if: github.event_name == 'pull_request_target'
|
if: github.event_name == 'pull_request_target'
|
||||||
run: git checkout "$(git rev-list --parents -n1 HEAD | cut -d" " -f3)"
|
run: git checkout "$(git rev-list --parents -n1 HEAD | cut -d" " -f3)"
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@v4.2.0
|
uses: pnpm/action-setup@v4.4.0
|
||||||
- name: Use Node.js
|
- name: Use Node.js
|
||||||
uses: actions/setup-node@v4.4.0
|
uses: actions/setup-node@v6.3.0
|
||||||
with:
|
with:
|
||||||
node-version-file: '.node-version'
|
node-version-file: '.node-version'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
@@ -90,7 +90,7 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
|
CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
|
||||||
- name: Notify that Chromatic detects changes
|
- name: Notify that Chromatic detects changes
|
||||||
uses: actions/github-script@v7.1.0
|
uses: actions/github-script@v8.0.0
|
||||||
if: github.event_name != 'pull_request_target' && steps.chromatic_push.outputs.success == 'false'
|
if: github.event_name != 'pull_request_target' && steps.chromatic_push.outputs.success == 'false'
|
||||||
with:
|
with:
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
@@ -102,7 +102,7 @@ jobs:
|
|||||||
body: 'Chromatic detects changes. Please [review the changes on Chromatic](https://www.chromatic.com/builds?appId=6428f7d7b962f0b79f97d6e4).'
|
body: 'Chromatic detects changes. Please [review the changes on Chromatic](https://www.chromatic.com/builds?appId=6428f7d7b962f0b79f97d6e4).'
|
||||||
})
|
})
|
||||||
- name: Upload Artifacts
|
- name: Upload Artifacts
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
name: storybook
|
name: storybook
|
||||||
path: packages/frontend/storybook-static
|
path: packages/frontend/storybook-static
|
||||||
|
|||||||
@@ -48,13 +48,20 @@ jobs:
|
|||||||
image: redis:7
|
image: redis:7
|
||||||
ports:
|
ports:
|
||||||
- 56312:6379
|
- 56312:6379
|
||||||
|
meilisearch:
|
||||||
|
image: getmeili/meilisearch:v1.38.2
|
||||||
|
ports:
|
||||||
|
- 57712:7700
|
||||||
|
env:
|
||||||
|
MEILI_NO_ANALYTICS: true
|
||||||
|
MEILI_ENV: development
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.3.0
|
- uses: actions/checkout@v6.0.2
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@v4.2.0
|
uses: pnpm/action-setup@v4.4.0
|
||||||
- name: Get current date
|
- name: Get current date
|
||||||
id: current-date
|
id: current-date
|
||||||
run: echo "today=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT
|
run: echo "today=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT
|
||||||
@@ -86,7 +93,7 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
- name: Use Node.js
|
- name: Use Node.js
|
||||||
uses: actions/setup-node@v4.4.0
|
uses: actions/setup-node@v6.3.0
|
||||||
with:
|
with:
|
||||||
node-version-file: ${{ matrix.node-version-file }}
|
node-version-file: ${{ matrix.node-version-file }}
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
@@ -129,13 +136,13 @@ jobs:
|
|||||||
- 56312:6379
|
- 56312:6379
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.3.0
|
- uses: actions/checkout@v6.0.2
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@v4.2.0
|
uses: pnpm/action-setup@v4.4.0
|
||||||
- name: Use Node.js
|
- name: Use Node.js
|
||||||
uses: actions/setup-node@v4.4.0
|
uses: actions/setup-node@v6.3.0
|
||||||
with:
|
with:
|
||||||
node-version-file: ${{ matrix.node-version-file }}
|
node-version-file: ${{ matrix.node-version-file }}
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
@@ -173,16 +180,16 @@ jobs:
|
|||||||
POSTGRES_HOST_AUTH_METHOD: trust
|
POSTGRES_HOST_AUTH_METHOD: trust
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.3.0
|
- uses: actions/checkout@v6.0.2
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@v4.2.0
|
uses: pnpm/action-setup@v4.4.0
|
||||||
- name: Get current date
|
- name: Get current date
|
||||||
id: current-date
|
id: current-date
|
||||||
run: echo "today=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT
|
run: echo "today=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT
|
||||||
- name: Use Node.js
|
- name: Use Node.js
|
||||||
uses: actions/setup-node@v4.4.0
|
uses: actions/setup-node@v6.3.0
|
||||||
with:
|
with:
|
||||||
node-version-file: ${{ matrix.node-version-file }}
|
node-version-file: ${{ matrix.node-version-file }}
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
|||||||
@@ -32,11 +32,11 @@ jobs:
|
|||||||
- .node-version
|
- .node-version
|
||||||
- .github/min.node-version
|
- .github/min.node-version
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@v4.2.0
|
uses: pnpm/action-setup@v4.4.0
|
||||||
- name: Get current date
|
- name: Get current date
|
||||||
id: current-date
|
id: current-date
|
||||||
run: echo "today=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT
|
run: echo "today=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT
|
||||||
@@ -68,7 +68,7 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
- name: Use Node.js
|
- name: Use Node.js
|
||||||
uses: actions/setup-node@v4.4.0
|
uses: actions/setup-node@v6.3.0
|
||||||
with:
|
with:
|
||||||
node-version-file: ${{ matrix.node-version-file }}
|
node-version-file: ${{ matrix.node-version-file }}
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
|||||||
@@ -28,13 +28,13 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.3.0
|
- uses: actions/checkout@v6.0.2
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@v4.2.0
|
uses: pnpm/action-setup@v4.4.0
|
||||||
- name: Use Node.js
|
- name: Use Node.js
|
||||||
uses: actions/setup-node@v4.4.0
|
uses: actions/setup-node@v6.3.0
|
||||||
with:
|
with:
|
||||||
node-version-file: '.node-version'
|
node-version-file: '.node-version'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
@@ -76,7 +76,7 @@ jobs:
|
|||||||
- 56312:6379
|
- 56312:6379
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.3.0
|
- uses: actions/checkout@v6.0.2
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
# https://github.com/cypress-io/cypress-docker-images/issues/150
|
# https://github.com/cypress-io/cypress-docker-images/issues/150
|
||||||
@@ -86,9 +86,9 @@ jobs:
|
|||||||
#- uses: browser-actions/setup-firefox@latest
|
#- uses: browser-actions/setup-firefox@latest
|
||||||
# if: ${{ matrix.browser == 'firefox' }}
|
# if: ${{ matrix.browser == 'firefox' }}
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@v4.2.0
|
uses: pnpm/action-setup@v4.4.0
|
||||||
- name: Use Node.js
|
- name: Use Node.js
|
||||||
uses: actions/setup-node@v4.4.0
|
uses: actions/setup-node@v6.3.0
|
||||||
with:
|
with:
|
||||||
node-version-file: '.node-version'
|
node-version-file: '.node-version'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
@@ -113,12 +113,12 @@ jobs:
|
|||||||
wait-on: 'http://localhost:61812'
|
wait-on: 'http://localhost:61812'
|
||||||
headed: true
|
headed: true
|
||||||
browser: ${{ matrix.browser }}
|
browser: ${{ matrix.browser }}
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v6
|
||||||
if: failure()
|
if: failure()
|
||||||
with:
|
with:
|
||||||
name: ${{ matrix.browser }}-cypress-screenshots
|
name: ${{ matrix.browser }}-cypress-screenshots
|
||||||
path: cypress/screenshots
|
path: cypress/screenshots
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v6
|
||||||
if: always()
|
if: always()
|
||||||
with:
|
with:
|
||||||
name: ${{ matrix.browser }}-cypress-videos
|
name: ${{ matrix.browser }}-cypress-videos
|
||||||
|
|||||||
@@ -22,13 +22,13 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4.3.0
|
uses: actions/checkout@v6.0.2
|
||||||
|
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@v4.2.0
|
uses: pnpm/action-setup@v4.4.0
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
uses: actions/setup-node@v4.4.0
|
uses: actions/setup-node@v6.3.0
|
||||||
with:
|
with:
|
||||||
node-version-file: '.node-version'
|
node-version-file: '.node-version'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
|||||||
@@ -16,13 +16,13 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.3.0
|
- uses: actions/checkout@v6.0.2
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@v4.2.0
|
uses: pnpm/action-setup@v4.4.0
|
||||||
- name: Use Node.js
|
- name: Use Node.js
|
||||||
uses: actions/setup-node@v4.4.0
|
uses: actions/setup-node@v6.3.0
|
||||||
with:
|
with:
|
||||||
node-version-file: '.node-version'
|
node-version-file: '.node-version'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
|||||||
@@ -17,13 +17,13 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.3.0
|
- uses: actions/checkout@v6.0.2
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@v4.2.0
|
uses: pnpm/action-setup@v4.4.0
|
||||||
- name: Use Node.js
|
- name: Use Node.js
|
||||||
uses: actions/setup-node@v4.4.0
|
uses: actions/setup-node@v6.3.0
|
||||||
with:
|
with:
|
||||||
node-version-file: '.node-version'
|
node-version-file: '.node-version'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ docker-compose.yml
|
|||||||
built
|
built
|
||||||
built-test
|
built-test
|
||||||
js-built
|
js-built
|
||||||
|
src-js
|
||||||
/data
|
/data
|
||||||
/.cache-loader
|
/.cache-loader
|
||||||
/db
|
/db
|
||||||
|
|||||||
+103
-2
@@ -1,11 +1,112 @@
|
|||||||
## Unreleased
|
## 2026.3.2
|
||||||
|
|
||||||
### General
|
### General
|
||||||
-
|
- 依存関係の更新
|
||||||
|
|
||||||
|
### Client
|
||||||
|
- Enhance: アプリ内ウィンドウの初期サイズを画面サイズに応じて自動で調整するように
|
||||||
|
- Fix: 絵文字パレットが空の状態でMisskeyについてのページが閲覧できない問題を修正
|
||||||
|
- Fix: ウィンドウのタイトルをクリックしても最前面に出ないことがある問題を修正
|
||||||
|
|
||||||
|
### Server
|
||||||
|
- Fix: 自分の行ったフォロワー限定投稿または指名投稿に自分自身でリアクションなどを行った場合のイベントが流れない問題を修正
|
||||||
|
- Fix: 署名付きGETリクエストにおいてAcceptヘッダを署名の対象から除外(Acceptヘッダを正規化するCDNやリバースプロキシを使用している際に挙動がおかしくなる問題を修正)
|
||||||
|
- Fix: WebSocket接続におけるノートの非表示ロジックを修正
|
||||||
|
- Fix: チャンネルミュートを有効にしている際に、一部のタイムラインやノート一覧が空になる問題を修正
|
||||||
|
- Fix: 初期読込時に必要なフロントエンドのアセットがすべて読み込まれていない問題を修正
|
||||||
|
|
||||||
|
|
||||||
|
## 2026.3.1
|
||||||
|
|
||||||
|
### General
|
||||||
|
- 依存関係の更新
|
||||||
|
|
||||||
|
### Server
|
||||||
|
- Fix: セキュリティに関する修正
|
||||||
|
|
||||||
|
|
||||||
|
## 2026.3.0
|
||||||
|
|
||||||
|
### Note
|
||||||
|
- `users/following` の `birthday` プロパティは非推奨になりました。代わりに `users/get-following-users-by-birthday` をご利用ください。
|
||||||
|
|
||||||
|
### General
|
||||||
|
- Enhance: 「もうすぐ誕生日のユーザー」ウィジェットで、誕生日が至近のユーザーも表示できるように
|
||||||
|
(Cherry-picked from https://github.com/MisskeyIO/misskey)
|
||||||
|
- 「今日誕生日のユーザー」は「もうすぐ誕生日のユーザー」に名称変更されました
|
||||||
|
- Fix: ユーザーハッシュタグページでユーザーの読み込みが重複する問題を修正
|
||||||
|
- 依存関係の更新
|
||||||
|
|
||||||
|
### Client
|
||||||
|
- Enhance: ドライブのファイル一覧で自動でもっと見るを利用可能に
|
||||||
|
- Enhance: ウィジェットの表示設定をプレビューを見ながら行えるように
|
||||||
|
- Enhance: ウィジェットの設定項目のラベルの多言語対応
|
||||||
|
- Enhance: 画面幅が広いときにメディアを横並びで表示できるようにするオプションを追加
|
||||||
|
- Enhance: パフォーマンスの向上
|
||||||
|
- Fix: ドライブクリーナーでファイルを削除しても画面に反映されない問題を修正 #16061
|
||||||
|
- Fix: 非ログイン時にログインを求めるダイアログが表示された後にダイアログのぼかしが解除されず操作不能になることがある問題を修正
|
||||||
|
- Fix: ドライブのソートが「登録日(昇順)」の場合に正しく動作しない問題を修正
|
||||||
|
- Fix: 高度なMFMのピッカーを使用する際の挙動を改善
|
||||||
|
- Fix: 管理画面でアーカイブ済のお知らせを表示した際にアクティブなお知らせが多い旨の警告が出る問題を修正
|
||||||
|
- Fix: ファイルタブのセンシティブメディアを開く際に確認ダイアログを出す設定が適用されない問題を修正
|
||||||
|
- Fix: 2月29日を誕生日に設定している場合、閏年以外は3月1日を誕生日として扱うように修正
|
||||||
|
- Fix: `Mk:C:container` の `borderWidth` が正しく反映されない問題を修正
|
||||||
|
- Fix: mCaptchaが正しく動作しない問題を修正
|
||||||
|
- Fix: 非ログイン時にリバーシの対局が表示されない問題を修正
|
||||||
|
- Fix: ノートの詳細表示でリアクションが全件表示されない問題を修正
|
||||||
|
- Fix: 動画埋め込みプレイヤーなどの一部ウィンドウで、ウィンドウのサイズ変更や移動が正常に行えない問題を修正
|
||||||
|
- Fix: 画像エフェクトの修正
|
||||||
|
- 塗りつぶし・モザイク・ぼかしエフェクトを回転させると歪む問題を修正
|
||||||
|
- モザイクの格子のサイズが画像の縦横比によって長方形となる問題を修正
|
||||||
|
- モザイクの色味がより自然になるように修正
|
||||||
|
- ぼかしに不自然な縦線が入る問題を修正
|
||||||
|
- Fix: フォロー承認通知でフォローされた際のメッセージの絵文字が表示されない問題を修正
|
||||||
|
- Fix: HTTP環境など(Secure Contextのない環境)で、設定画面が閲覧できない問題を修正
|
||||||
|
|
||||||
|
### Server
|
||||||
|
- Enhance: OAuthのクライアント情報取得(Client Information Discovery)において、IndieWeb Living Standard 11 July 2024で定義されているJSONドキュメント形式に対応しました
|
||||||
|
- JSONによるClient Information Discoveryを行うには、レスポンスの`Content-Type`ヘッダーが`application/json`である必要があります
|
||||||
|
- 従来の実装(12 February 2022版・HTML Microformat形式)も引き続きサポートされます
|
||||||
|
- Enhance: メモリ使用量を削減
|
||||||
|
- Fix: `/admin/get-user-ips` エンドポイントのアクセス権限を管理者のみに修正
|
||||||
|
|
||||||
|
## 2025.12.2
|
||||||
|
|
||||||
|
### Note
|
||||||
|
v2025.12.0で行われた「configの`trustProxy`のデフォルト値を`false`に変更」について、正しく環境に応じた設定を行わないとサインインが困難になるといった状態を緩和するために、以下の対応を行いました。
|
||||||
|
|
||||||
|
**正しく設定しないと、上記のような不具合の原因となったり、セキュリティリスクが高まったりする可能性があります。必ず現在のconfigをご確認の上、必要に応じて値を変更してください。**
|
||||||
|
|
||||||
|
- `trustProxy`について、デフォルト(configに値が設定されていない状態)ではループバックアドレスとローカルIPアドレス空間を信頼するようにしました。
|
||||||
|
- `trustProxy`の設定方法について、より詳細に記述しました。
|
||||||
|
- リバースプロキシやCDNなどのより上流のレイヤでレートリミットを設定したい場合や、緊急時の一時的な緩和策として、Misskey内部でのIPアドレスペースでのレートリミットを無効化できるようにしました。
|
||||||
|
|
||||||
|
### General
|
||||||
|
- 依存関係の更新
|
||||||
|
|
||||||
|
### Client
|
||||||
|
- Enhance: デッキのUI説明を追加
|
||||||
|
- Enhance: 設定がブラウザによって消去されないようにするオプションを追加
|
||||||
|
- Fix: バージョン表記のないPlayが正しく動作しない問題を修正
|
||||||
|
バージョン表記のないものは v0.x 系として実行されます。v1.x 系で動作させたい場合は必ずバージョン表記を含めてください。
|
||||||
|
- Fix: デッキUIでメニュー位置を下にしているとプロファイル削除ボタンが表示されないのを修正
|
||||||
|
- Fix: 一部のUnicode絵文字のリアクションがボタンにならない問題を修正
|
||||||
|
|
||||||
|
### Server
|
||||||
|
- Enhance: Misskey内部でのIPアドレスペースでのレートリミットを無効化できるように
|
||||||
|
- リバースプロキシやCDNなど別のレイヤで別途レートリミットを設定する場合や、ローカルでのテスト用途等として利用することを想定しています。
|
||||||
|
- デフォルトは `enableIpRateLimit: true`(Misskey内部でのIPアドレスペースでのレートリミットは有効)です。
|
||||||
|
- Fix: コントロールパネルのジョブキューページで使用される一部APIの応答速度を改善
|
||||||
|
|
||||||
|
## 2025.12.1
|
||||||
|
|
||||||
### Client
|
### Client
|
||||||
- Fix: 特定の条件下でMisskeyが起動せず空白のページが表示されることがある問題を軽減
|
- Fix: 特定の条件下でMisskeyが起動せず空白のページが表示されることがある問題を軽減
|
||||||
- Fix: 初回読み込み時などに、言語設定で不整合が発生することがある問題を修正
|
- Fix: 初回読み込み時などに、言語設定で不整合が発生することがある問題を修正
|
||||||
|
- Fix: 削除されたノートのリノートが正しく動作されない問題を修正
|
||||||
|
- Fix: チャンネルオーナーが削除済みの時にチャンネルのヘッダーメニューが表示されない不具合を修正
|
||||||
|
- Fix: ドライブで登録日以外でソートする場合は月でグループ化して表示しないように
|
||||||
|
- Fix: `null` を返す note_view_intrruptor プラグインが動作しない問題を修正
|
||||||
|
|
||||||
### Server
|
### Server
|
||||||
- Fix: ジョブキューでSentryが有効にならない問題を修正
|
- Fix: ジョブキューでSentryが有効にならない問題を修正
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
Unless otherwise stated this repository is
|
Unless otherwise stated this repository is
|
||||||
Copyright © 2014-2025 syuilo and contributors
|
Copyright © 2014-2026 syuilo and contributors
|
||||||
|
|
||||||
And is distributed under The GNU Affero General Public License Version 3, you should have received a copy of the license file as LICENSE.
|
And is distributed under The GNU Affero General Public License Version 3, you should have received a copy of the license file as LICENSE.
|
||||||
|
|
||||||
|
|||||||
+3
-2
@@ -1,6 +1,6 @@
|
|||||||
# syntax = docker/dockerfile:1.4
|
# syntax = docker/dockerfile:1.21
|
||||||
|
|
||||||
ARG NODE_VERSION=22.15.0-bookworm
|
ARG NODE_VERSION=22.22.0-bookworm
|
||||||
|
|
||||||
# build assets & compile TypeScript
|
# build assets & compile TypeScript
|
||||||
|
|
||||||
@@ -102,6 +102,7 @@ COPY --chown=misskey:misskey --from=native-builder /misskey/packages/misskey-js/
|
|||||||
COPY --chown=misskey:misskey --from=native-builder /misskey/packages/misskey-reversi/built ./packages/misskey-reversi/built
|
COPY --chown=misskey:misskey --from=native-builder /misskey/packages/misskey-reversi/built ./packages/misskey-reversi/built
|
||||||
COPY --chown=misskey:misskey --from=native-builder /misskey/packages/misskey-bubble-game/built ./packages/misskey-bubble-game/built
|
COPY --chown=misskey:misskey --from=native-builder /misskey/packages/misskey-bubble-game/built ./packages/misskey-bubble-game/built
|
||||||
COPY --chown=misskey:misskey --from=native-builder /misskey/packages/backend/built ./packages/backend/built
|
COPY --chown=misskey:misskey --from=native-builder /misskey/packages/backend/built ./packages/backend/built
|
||||||
|
COPY --chown=misskey:misskey --from=native-builder /misskey/packages/backend/src-js ./packages/backend/src-js
|
||||||
COPY --chown=misskey:misskey --from=native-builder /misskey/packages/i18n/built ./packages/i18n/built
|
COPY --chown=misskey:misskey --from=native-builder /misskey/packages/i18n/built ./packages/i18n/built
|
||||||
COPY --chown=misskey:misskey --from=native-builder /misskey/fluent-emojis /misskey/fluent-emojis
|
COPY --chown=misskey:misskey --from=native-builder /misskey/fluent-emojis /misskey/fluent-emojis
|
||||||
COPY --chown=misskey:misskey . ./
|
COPY --chown=misskey:misskey . ./
|
||||||
|
|||||||
@@ -26,6 +26,8 @@
|
|||||||
|
|
||||||
[](https://deepwiki.com/misskey-dev/misskey)
|
[](https://deepwiki.com/misskey-dev/misskey)
|
||||||
|
|
||||||
|
<a href="https://flatt.tech/oss/gmo/trampoline" target="_blank"><img src="https://flatt.tech/assets/images/badges/gmo-oss.svg" height="24px"/></a>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
## Thanks
|
## Thanks
|
||||||
@@ -49,3 +51,13 @@ Thanks to [Crowdin](https://crowdin.com/) for providing the localization platfor
|
|||||||
<a href="https://hub.docker.com/"><img src="https://user-images.githubusercontent.com/20679825/230148221-f8e73a32-a49b-47c3-9029-9a15c3824f92.png" height="30" alt="Docker" /></a>
|
<a href="https://hub.docker.com/"><img src="https://user-images.githubusercontent.com/20679825/230148221-f8e73a32-a49b-47c3-9029-9a15c3824f92.png" height="30" alt="Docker" /></a>
|
||||||
|
|
||||||
Thanks to [Docker](https://hub.docker.com/) for providing the container platform that helps us run Misskey in production.
|
Thanks to [Docker](https://hub.docker.com/) for providing the container platform that helps us run Misskey in production.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
Support us with a ⭐ !
|
||||||
|
|
||||||
|
[](https://star-history.com/#misskey-dev/misskey&Date)
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ services:
|
|||||||
env_file:
|
env_file:
|
||||||
- .config/docker.env
|
- .config/docker.env
|
||||||
volumes:
|
volumes:
|
||||||
- ./db:/var/lib/postgresql/data
|
- ./db:/var/lib/postgresql
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"
|
test: "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"
|
||||||
interval: 5s
|
interval: 5s
|
||||||
|
|||||||
+1
-1
@@ -43,7 +43,7 @@ services:
|
|||||||
env_file:
|
env_file:
|
||||||
- .config/docker.env
|
- .config/docker.env
|
||||||
volumes:
|
volumes:
|
||||||
- ./db:/var/lib/postgresql/data
|
- ./db:/var/lib/postgresql
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"
|
test: "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"
|
||||||
interval: 5s
|
interval: 5s
|
||||||
|
|||||||
@@ -1365,6 +1365,14 @@ _widgets:
|
|||||||
userList: "قائمة المستخدمين"
|
userList: "قائمة المستخدمين"
|
||||||
_userList:
|
_userList:
|
||||||
chooseList: "اختر قائمة"
|
chooseList: "اختر قائمة"
|
||||||
|
_widgetOptions:
|
||||||
|
height: "الإرتفاع"
|
||||||
|
_button:
|
||||||
|
colored: "ملوّن"
|
||||||
|
_clock:
|
||||||
|
size: "الحجم"
|
||||||
|
_birthdayFollowings:
|
||||||
|
period: "المدة"
|
||||||
_cw:
|
_cw:
|
||||||
hide: "إخفاء"
|
hide: "إخفاء"
|
||||||
show: "عرض المزيد"
|
show: "عرض المزيد"
|
||||||
|
|||||||
@@ -1137,6 +1137,14 @@ _widgets:
|
|||||||
aichan: "আই চান"
|
aichan: "আই চান"
|
||||||
_userList:
|
_userList:
|
||||||
chooseList: "লিস্ট নির্বাচন করুন"
|
chooseList: "লিস্ট নির্বাচন করুন"
|
||||||
|
_widgetOptions:
|
||||||
|
height: "উচ্চতা"
|
||||||
|
_button:
|
||||||
|
colored: "রঙ্গিন"
|
||||||
|
_clock:
|
||||||
|
size: "আকার"
|
||||||
|
_birthdayFollowings:
|
||||||
|
period: "ব্যাপ্তিকাল"
|
||||||
_cw:
|
_cw:
|
||||||
hide: "লুকান"
|
hide: "লুকান"
|
||||||
show: "আরও দেখুন"
|
show: "আরও দেখুন"
|
||||||
|
|||||||
+59
-11
@@ -264,7 +264,7 @@ noJobs: "No hi ha feines"
|
|||||||
federating: "Federant"
|
federating: "Federant"
|
||||||
blocked: "Bloquejat"
|
blocked: "Bloquejat"
|
||||||
suspended: "Anul·lar subscripció "
|
suspended: "Anul·lar subscripció "
|
||||||
all: "tot"
|
all: "Tot"
|
||||||
subscribing: "Subscrit a"
|
subscribing: "Subscrit a"
|
||||||
publishing: "S'està publicant"
|
publishing: "S'està publicant"
|
||||||
notResponding: "Sense resposta"
|
notResponding: "Sense resposta"
|
||||||
@@ -543,6 +543,7 @@ regenerate: "Regenera"
|
|||||||
fontSize: "Mida del text"
|
fontSize: "Mida del text"
|
||||||
mediaListWithOneImageAppearance: "Altura de la llista de fitxers amb una única imatge"
|
mediaListWithOneImageAppearance: "Altura de la llista de fitxers amb una única imatge"
|
||||||
limitTo: "Limita a {x}"
|
limitTo: "Limita a {x}"
|
||||||
|
showMediaListByGridInWideArea: "Mostra la llista de medis en vista quadrícula quan l'amplada de la pantalla ho permeti"
|
||||||
noFollowRequests: "No tens sol·licituds de seguiment"
|
noFollowRequests: "No tens sol·licituds de seguiment"
|
||||||
openImageInNewTab: "Obre imatges a una nova pestanya"
|
openImageInNewTab: "Obre imatges a una nova pestanya"
|
||||||
dashboard: "Tauler de control"
|
dashboard: "Tauler de control"
|
||||||
@@ -1389,7 +1390,7 @@ defaultCompressionLevel_description: "Si el redueixes augmentaràs la qualitat d
|
|||||||
inMinutes: "Minut(s)"
|
inMinutes: "Minut(s)"
|
||||||
inDays: "Di(a)(es)"
|
inDays: "Di(a)(es)"
|
||||||
safeModeEnabled: "Mode segur activat"
|
safeModeEnabled: "Mode segur activat"
|
||||||
pluginsAreDisabledBecauseSafeMode: "Els afegits no estan activats perquè el mode segur està activat."
|
pluginsAreDisabledBecauseSafeMode: "Les extensions no estan activades perquè el mode segur està activat."
|
||||||
customCssIsDisabledBecauseSafeMode: "El CSS personalitzat no s'aplica perquè el mode segur es troba activat."
|
customCssIsDisabledBecauseSafeMode: "El CSS personalitzat no s'aplica perquè el mode segur es troba activat."
|
||||||
themeIsDefaultBecauseSafeMode: "El tema predeterminat es farà servir mentre el mode segur estigui activat. Una vegada es desactivi el mode segur es restablirà el tema escollit."
|
themeIsDefaultBecauseSafeMode: "El tema predeterminat es farà servir mentre el mode segur estigui activat. Una vegada es desactivi el mode segur es restablirà el tema escollit."
|
||||||
thankYouForTestingBeta: "Gràcies per ajudar-nos a provar la versió beta!"
|
thankYouForTestingBeta: "Gràcies per ajudar-nos a provar la versió beta!"
|
||||||
@@ -1406,6 +1407,7 @@ youAreAdmin: "Ets l'administrador "
|
|||||||
frame: "Marc"
|
frame: "Marc"
|
||||||
presets: "Predefinit"
|
presets: "Predefinit"
|
||||||
zeroPadding: "Sense omplir"
|
zeroPadding: "Sense omplir"
|
||||||
|
nothingToConfigure: "No hi ha res a configurar"
|
||||||
_imageEditing:
|
_imageEditing:
|
||||||
_vars:
|
_vars:
|
||||||
caption: "Títol de l'arxiu"
|
caption: "Títol de l'arxiu"
|
||||||
@@ -1550,6 +1552,9 @@ _settings:
|
|||||||
showPageTabBarBottom: "Mostrar les pestanyes de les línies de temps a la part inferior"
|
showPageTabBarBottom: "Mostrar les pestanyes de les línies de temps a la part inferior"
|
||||||
emojiPaletteBanner: "Pots registrar ajustos preestablerts com paletes perquè es mostrin permanentment al selector d'emojis, o personalitzar la configuració de visió del selector."
|
emojiPaletteBanner: "Pots registrar ajustos preestablerts com paletes perquè es mostrin permanentment al selector d'emojis, o personalitzar la configuració de visió del selector."
|
||||||
enableAnimatedImages: "Activar imatges animades"
|
enableAnimatedImages: "Activar imatges animades"
|
||||||
|
settingsPersistence_title: "Persistència de la configuració "
|
||||||
|
settingsPersistence_description1: "Habilitar la persistència de la configuració permet que no es perdi la informació de la configuració "
|
||||||
|
settingsPersistence_description2: "Depenent de l'entorn pot ser que no puguis habilitar aquesta opció."
|
||||||
_chat:
|
_chat:
|
||||||
showSenderName: "Mostrar el nom del remitent"
|
showSenderName: "Mostrar el nom del remitent"
|
||||||
sendOnEnter: "Introdueix per enviar"
|
sendOnEnter: "Introdueix per enviar"
|
||||||
@@ -1609,8 +1614,8 @@ _bubbleGame:
|
|||||||
highScore: "Millor puntuació "
|
highScore: "Millor puntuació "
|
||||||
maxChain: "Nombre màxim de combos"
|
maxChain: "Nombre màxim de combos"
|
||||||
yen: "{yen}Ien"
|
yen: "{yen}Ien"
|
||||||
estimatedQty: "{qty}peces"
|
estimatedQty: "{qty} Peces"
|
||||||
scoreSweets: "{onigiriQtyWithUnit}ongiris"
|
scoreSweets: "{onigiriQtyWithUnit} Boles d'arròs "
|
||||||
_howToPlay:
|
_howToPlay:
|
||||||
section1: "Ajusta la posició i deixa caure l'objecte dintre la caixa."
|
section1: "Ajusta la posició i deixa caure l'objecte dintre la caixa."
|
||||||
section2: "Quan dos objectes del mateix tipus es toquen, canviaran en un objecte diferent i guanyares punts."
|
section2: "Quan dos objectes del mateix tipus es toquen, canviaran en un objecte diferent i guanyares punts."
|
||||||
@@ -2180,8 +2185,8 @@ _email:
|
|||||||
title: "Has rebut una sol·licitud de seguiment"
|
title: "Has rebut una sol·licitud de seguiment"
|
||||||
_plugin:
|
_plugin:
|
||||||
install: "Instal·lar un afegit "
|
install: "Instal·lar un afegit "
|
||||||
installWarn: "Si us plau, no instal·lis afegits que no siguin de confiança."
|
installWarn: "Si us plau, no instal·lis extensions que no siguin de confiança."
|
||||||
manage: "Gestionar els afegits"
|
manage: "Gestiona les extensions"
|
||||||
viewSource: "Veure l'origen "
|
viewSource: "Veure l'origen "
|
||||||
viewLog: "Mostra el registre"
|
viewLog: "Mostra el registre"
|
||||||
_preferencesBackups:
|
_preferencesBackups:
|
||||||
@@ -2541,6 +2546,44 @@ _widgets:
|
|||||||
clicker: "Clicker"
|
clicker: "Clicker"
|
||||||
birthdayFollowings: "Usuaris que fan l'aniversari avui"
|
birthdayFollowings: "Usuaris que fan l'aniversari avui"
|
||||||
chat: "Xateja amb aquest usuari"
|
chat: "Xateja amb aquest usuari"
|
||||||
|
_widgetOptions:
|
||||||
|
showHeader: "Mostrar la capçalera"
|
||||||
|
transparent: "Fons transparent"
|
||||||
|
height: "Alçada "
|
||||||
|
_button:
|
||||||
|
colored: "Colorit"
|
||||||
|
_clock:
|
||||||
|
size: "Mida"
|
||||||
|
thickness: "Amplada de l'agulla "
|
||||||
|
thicknessThin: "Esvelt "
|
||||||
|
thicknessMedium: "Normal"
|
||||||
|
thicknessThick: "Gruixut "
|
||||||
|
graduations: "Marques de l'esfera "
|
||||||
|
graduationDots: "Punt"
|
||||||
|
graduationArabic: "Nombres àrabs "
|
||||||
|
fadeGraduations: "Efecte gradient "
|
||||||
|
sAnimation: "Animació de la maneta dels segons"
|
||||||
|
sAnimationElastic: "Real"
|
||||||
|
sAnimationEaseOut: "Suau"
|
||||||
|
twentyFour: "Format 24 hores"
|
||||||
|
labelTime: "Temps"
|
||||||
|
labelTz: "Fus horari"
|
||||||
|
labelTimeAndTz: "Hora i fus horari"
|
||||||
|
timezone: "Fus horari"
|
||||||
|
showMs: "Mostrar mil·lisegons"
|
||||||
|
showLabel: "Mostrar etiqueta"
|
||||||
|
_jobQueue:
|
||||||
|
sound: "Reprodueix so"
|
||||||
|
_rss:
|
||||||
|
url: "URL del canal RSS"
|
||||||
|
refreshIntervalSec: "Interval d'actualitzacions (segons)"
|
||||||
|
maxEntries: "Nombre màxim d'entrades a mostrar"
|
||||||
|
_rssTicker:
|
||||||
|
shuffle: "Visualització aleatòria "
|
||||||
|
duration: "Velocitat desplaçament bàner informatiu "
|
||||||
|
reverse: "Desplaçament contrari"
|
||||||
|
_birthdayFollowings:
|
||||||
|
period: "Període"
|
||||||
_cw:
|
_cw:
|
||||||
hide: "Amagar"
|
hide: "Amagar"
|
||||||
show: "Carregar més"
|
show: "Carregar més"
|
||||||
@@ -2816,6 +2859,14 @@ _deck:
|
|||||||
usedAsMinWidthWhenFlexible: "L'amplada mínima es farà servir quan \"Ajust automàtic de l'amplada\" estigui activat"
|
usedAsMinWidthWhenFlexible: "L'amplada mínima es farà servir quan \"Ajust automàtic de l'amplada\" estigui activat"
|
||||||
flexible: "Ajust automàtic de l'amplada"
|
flexible: "Ajust automàtic de l'amplada"
|
||||||
enableSyncBetweenDevicesForProfiles: "Activar la sincronització de la informació de perfils de dispositiu a dispositiu"
|
enableSyncBetweenDevicesForProfiles: "Activar la sincronització de la informació de perfils de dispositiu a dispositiu"
|
||||||
|
showHowToUse: "Veure la descripció de la interfície d'usuari "
|
||||||
|
_howToUse:
|
||||||
|
addColumn_title: "Afegir columna"
|
||||||
|
addColumn_description: "Pots seleccionar i afegir tipus de columnes."
|
||||||
|
settings_title: "Configuració de la interfície d'usuari "
|
||||||
|
settings_description: "Pots configurar la interfície d'usuari amb detall."
|
||||||
|
switchProfile_title: "Canviar perfil"
|
||||||
|
switchProfile_description: "Pots desar el disseny de la interfície d'usuari com un perfil i anar canviant entre ells quan vulguis."
|
||||||
_columns:
|
_columns:
|
||||||
main: "Principal"
|
main: "Principal"
|
||||||
widgets: "Ginys"
|
widgets: "Ginys"
|
||||||
@@ -3299,7 +3350,6 @@ _imageEffector:
|
|||||||
title: "Efecte"
|
title: "Efecte"
|
||||||
addEffect: "Afegeix un efecte"
|
addEffect: "Afegeix un efecte"
|
||||||
discardChangesConfirm: "Vols descartar els canvis i sortir?"
|
discardChangesConfirm: "Vols descartar els canvis i sortir?"
|
||||||
nothingToConfigure: "No hi ha opcions de configuració disponibles"
|
|
||||||
failedToLoadImage: "Error en carregar la imatge"
|
failedToLoadImage: "Error en carregar la imatge"
|
||||||
_fxs:
|
_fxs:
|
||||||
chromaticAberration: "Aberració cromàtica"
|
chromaticAberration: "Aberració cromàtica"
|
||||||
@@ -3351,11 +3401,9 @@ _imageEffector:
|
|||||||
threshold: "Llindar"
|
threshold: "Llindar"
|
||||||
centerX: "Centre de X"
|
centerX: "Centre de X"
|
||||||
centerY: "Centre de Y"
|
centerY: "Centre de Y"
|
||||||
zoomLinesSmoothing: "Suavitzat"
|
density: "Densitat"
|
||||||
zoomLinesSmoothingDescription: "Els paràmetres de suavitzat i amplada de línia en augmentar no es poden fer servir junts."
|
zoomLinesOutlineThickness: "Amplada de les vores exteriors"
|
||||||
zoomLinesThreshold: "Amplada de línia a l'augmentar "
|
|
||||||
zoomLinesMaskSize: "Diàmetre del centre"
|
zoomLinesMaskSize: "Diàmetre del centre"
|
||||||
zoomLinesBlack: "Obscurir"
|
|
||||||
circle: "Cercle"
|
circle: "Cercle"
|
||||||
drafts: "Esborrany "
|
drafts: "Esborrany "
|
||||||
_drafts:
|
_drafts:
|
||||||
|
|||||||
@@ -130,6 +130,7 @@ reactions: "Reakce"
|
|||||||
reactionSettingDescription2: "Přetažením změníte pořadí, kliknutím smažete, zmáčkněte \"+\" k přidání"
|
reactionSettingDescription2: "Přetažením změníte pořadí, kliknutím smažete, zmáčkněte \"+\" k přidání"
|
||||||
rememberNoteVisibility: "Zapamatovat nastavení zobrazení poznámky"
|
rememberNoteVisibility: "Zapamatovat nastavení zobrazení poznámky"
|
||||||
attachCancel: "Odstranit přílohu"
|
attachCancel: "Odstranit přílohu"
|
||||||
|
deleteFile: "Smazat soubor"
|
||||||
markAsSensitive: "Označit jako NSFW"
|
markAsSensitive: "Označit jako NSFW"
|
||||||
unmarkAsSensitive: "Odznačit jako NSFW"
|
unmarkAsSensitive: "Odznačit jako NSFW"
|
||||||
enterFileName: "Zadejte název souboru"
|
enterFileName: "Zadejte název souboru"
|
||||||
@@ -205,6 +206,7 @@ blockThisInstance: "Blokovat tuto instanci"
|
|||||||
silenceThisInstance: "Utišit tuto instanci"
|
silenceThisInstance: "Utišit tuto instanci"
|
||||||
operations: "Operace"
|
operations: "Operace"
|
||||||
software: "Software"
|
software: "Software"
|
||||||
|
softwareName: "Software"
|
||||||
version: "Verze"
|
version: "Verze"
|
||||||
metadata: "Metadata"
|
metadata: "Metadata"
|
||||||
withNFiles: "{n} soubor(ů)"
|
withNFiles: "{n} soubor(ů)"
|
||||||
@@ -231,6 +233,7 @@ noteDeleteConfirm: "Jste si jistí že chcete smazat tuhle poznámku?"
|
|||||||
pinLimitExceeded: "Nemůžete připnout další poznámky."
|
pinLimitExceeded: "Nemůžete připnout další poznámky."
|
||||||
done: "Hotovo"
|
done: "Hotovo"
|
||||||
processing: "Zpracovávám"
|
processing: "Zpracovávám"
|
||||||
|
preprocessing: "Připravuji..."
|
||||||
preview: "Náhled"
|
preview: "Náhled"
|
||||||
default: "Výchozí"
|
default: "Výchozí"
|
||||||
defaultValueIs: "Základní hodnota: {value}"
|
defaultValueIs: "Základní hodnota: {value}"
|
||||||
@@ -265,6 +268,7 @@ removed: "Smazáno"
|
|||||||
removeAreYouSure: "Jste si jistí že chcete smazat \"{x}\"?"
|
removeAreYouSure: "Jste si jistí že chcete smazat \"{x}\"?"
|
||||||
deleteAreYouSure: "Jste si jistí že chcete smazat \"{x}\"?"
|
deleteAreYouSure: "Jste si jistí že chcete smazat \"{x}\"?"
|
||||||
resetAreYouSure: "Opravdu resetovat?"
|
resetAreYouSure: "Opravdu resetovat?"
|
||||||
|
areYouSure: "Jste si jistí?"
|
||||||
saved: "Uloženo"
|
saved: "Uloženo"
|
||||||
upload: "Nahrát soubory"
|
upload: "Nahrát soubory"
|
||||||
keepOriginalUploading: "Ponechat originální obrázek"
|
keepOriginalUploading: "Ponechat originální obrázek"
|
||||||
@@ -275,9 +279,12 @@ uploadFromUrl: "Nahrát z URL adresy"
|
|||||||
uploadFromUrlDescription: "URL adresa souboru, který chcete nahrát"
|
uploadFromUrlDescription: "URL adresa souboru, který chcete nahrát"
|
||||||
uploadFromUrlRequested: "Upload zažádán"
|
uploadFromUrlRequested: "Upload zažádán"
|
||||||
uploadFromUrlMayTakeTime: "Může trvat nějakou dobu, dokud nebude dokončeno nahrávání."
|
uploadFromUrlMayTakeTime: "Může trvat nějakou dobu, dokud nebude dokončeno nahrávání."
|
||||||
|
uploadNFiles: "Uploadovat {n} souborů"
|
||||||
explore: "Objevovat"
|
explore: "Objevovat"
|
||||||
messageRead: "Přečtené"
|
messageRead: "Přečtené"
|
||||||
|
readAllChatMessages: "Označit všechny zprávy za přečtené"
|
||||||
noMoreHistory: "To je vše"
|
noMoreHistory: "To je vše"
|
||||||
|
startChat: "Začít chat"
|
||||||
nUsersRead: "přečteno {n} uživateli"
|
nUsersRead: "přečteno {n} uživateli"
|
||||||
agreeTo: "Souhlasím s {0}"
|
agreeTo: "Souhlasím s {0}"
|
||||||
agree: "Souhlasím"
|
agree: "Souhlasím"
|
||||||
@@ -308,12 +315,15 @@ selectFile: "Vybrat soubor"
|
|||||||
selectFiles: "Vybrat soubory"
|
selectFiles: "Vybrat soubory"
|
||||||
selectFolder: "Vyberte složku"
|
selectFolder: "Vyberte složku"
|
||||||
selectFolders: "Vyberte složky"
|
selectFolders: "Vyberte složky"
|
||||||
|
fileNotSelected: "Nebyl vybrán žádný soubor"
|
||||||
renameFile: "Přejmenovat soubor"
|
renameFile: "Přejmenovat soubor"
|
||||||
folderName: "Název složky"
|
folderName: "Název složky"
|
||||||
createFolder: "Vytvořit složku"
|
createFolder: "Vytvořit složku"
|
||||||
renameFolder: "Přejmenovat složku"
|
renameFolder: "Přejmenovat složku"
|
||||||
deleteFolder: "Odstranit složku"
|
deleteFolder: "Odstranit složku"
|
||||||
|
folder: "Složka "
|
||||||
addFile: "Přidat soubor"
|
addFile: "Přidat soubor"
|
||||||
|
showFile: "Procházet soubory"
|
||||||
emptyDrive: "Váš disk je prázdný"
|
emptyDrive: "Váš disk je prázdný"
|
||||||
emptyFolder: "Tato složka je prázdná"
|
emptyFolder: "Tato složka je prázdná"
|
||||||
unableToDelete: "Nelze smazat"
|
unableToDelete: "Nelze smazat"
|
||||||
@@ -424,6 +434,7 @@ totp: "Ověřovací aplikace"
|
|||||||
totpDescription: "Použít ověřovací aplikaci pro použití jednorázových hesel"
|
totpDescription: "Použít ověřovací aplikaci pro použití jednorázových hesel"
|
||||||
moderator: "Moderátor"
|
moderator: "Moderátor"
|
||||||
moderation: "Moderování"
|
moderation: "Moderování"
|
||||||
|
moderationNote: "Poznámka moderátora"
|
||||||
nUsersMentioned: "{n} uživatelů zmínilo"
|
nUsersMentioned: "{n} uživatelů zmínilo"
|
||||||
securityKeyAndPasskey: "Bezpečnostní klíče a tokeny"
|
securityKeyAndPasskey: "Bezpečnostní klíče a tokeny"
|
||||||
securityKey: "Bezpečnostní klíč"
|
securityKey: "Bezpečnostní klíč"
|
||||||
@@ -479,7 +490,9 @@ uiLanguage: "Jazyk uživatelského rozhraní"
|
|||||||
aboutX: "O {x}"
|
aboutX: "O {x}"
|
||||||
emojiStyle: "Styl emoji"
|
emojiStyle: "Styl emoji"
|
||||||
native: "Výchozí"
|
native: "Výchozí"
|
||||||
|
menuStyle: "Styl nabídky"
|
||||||
style: "Vzhled"
|
style: "Vzhled"
|
||||||
|
drawer: "Boční menu"
|
||||||
popup: "Vyskakovací okno"
|
popup: "Vyskakovací okno"
|
||||||
showNoteActionsOnlyHover: "Zobrazit akce poznámky jenom při naběhnutí myši"
|
showNoteActionsOnlyHover: "Zobrazit akce poznámky jenom při naběhnutí myši"
|
||||||
noHistory: "Žádná historie"
|
noHistory: "Žádná historie"
|
||||||
@@ -535,6 +548,7 @@ deleteAll: "Smazat vše"
|
|||||||
showFixedPostForm: "Zobrazit formulář pro nové příspěvky nad časovou osou"
|
showFixedPostForm: "Zobrazit formulář pro nové příspěvky nad časovou osou"
|
||||||
showFixedPostFormInChannel: "Zobrazit vkládací formulář na vrcholu časové osy (Kanály)"
|
showFixedPostFormInChannel: "Zobrazit vkládací formulář na vrcholu časové osy (Kanály)"
|
||||||
newNoteRecived: "Jsou k dispozici nové poznámky"
|
newNoteRecived: "Jsou k dispozici nové poznámky"
|
||||||
|
newNote: "Nová poznámka"
|
||||||
sounds: "Zvuky"
|
sounds: "Zvuky"
|
||||||
sound: "Zvuky"
|
sound: "Zvuky"
|
||||||
listen: "Poslouchat"
|
listen: "Poslouchat"
|
||||||
@@ -614,6 +628,7 @@ medium: "Střední"
|
|||||||
small: "Malé"
|
small: "Malé"
|
||||||
generateAccessToken: "Vygenerovat přístupový token"
|
generateAccessToken: "Vygenerovat přístupový token"
|
||||||
permission: "Oprávnění"
|
permission: "Oprávnění"
|
||||||
|
adminPermission: "Administrátorská práva"
|
||||||
enableAll: "Povolit vše"
|
enableAll: "Povolit vše"
|
||||||
disableAll: "Vypnout vše"
|
disableAll: "Vypnout vše"
|
||||||
tokenRequested: "Povolit přístup k účtu"
|
tokenRequested: "Povolit přístup k účtu"
|
||||||
@@ -889,6 +904,9 @@ oneHour: "1 hodina"
|
|||||||
oneDay: "1 den"
|
oneDay: "1 den"
|
||||||
oneWeek: "1 týden"
|
oneWeek: "1 týden"
|
||||||
oneMonth: "1 měsíc"
|
oneMonth: "1 měsíc"
|
||||||
|
threeMonths: "3 měsíce"
|
||||||
|
oneYear: "1 rok"
|
||||||
|
threeDays: "3 dny"
|
||||||
reflectMayTakeTime: "Může trvat nějakou dobu, než se projeví změny."
|
reflectMayTakeTime: "Může trvat nějakou dobu, než se projeví změny."
|
||||||
failedToFetchAccountInformation: "Nepodařily se načíst informace o účtě"
|
failedToFetchAccountInformation: "Nepodařily se načíst informace o účtě"
|
||||||
rateLimitExceeded: "Překročení rychlostního limitu"
|
rateLimitExceeded: "Překročení rychlostního limitu"
|
||||||
@@ -1026,6 +1044,8 @@ showClipButtonInNoteFooter: "Přidat \"Připnout\" do akčního menu poznámky"
|
|||||||
noteIdOrUrl: "ID nebo URL poznámky"
|
noteIdOrUrl: "ID nebo URL poznámky"
|
||||||
video: "Video"
|
video: "Video"
|
||||||
videos: "Videa"
|
videos: "Videa"
|
||||||
|
audio: "Zvuk"
|
||||||
|
audioFiles: "Zvuk"
|
||||||
dataSaver: "Spořič dat"
|
dataSaver: "Spořič dat"
|
||||||
accountMigration: "Migrace účtu"
|
accountMigration: "Migrace účtu"
|
||||||
accountMoved: "Tenhle uživatel se přesunul na nový účet:"
|
accountMoved: "Tenhle uživatel se přesunul na nový účet:"
|
||||||
@@ -1053,6 +1073,8 @@ preservedUsernames: "Rezervované uživatelské jména"
|
|||||||
preservedUsernamesDescription: "Seznam uživatelských jmén na rezervaci oddělené mezerama. Tyhle jména se potom nebudou moc použít při normálním procesu vytvoření účtu ale můžou být použiti manuálně administratorém. Existujících účtů se to nedotkne."
|
preservedUsernamesDescription: "Seznam uživatelských jmén na rezervaci oddělené mezerama. Tyhle jména se potom nebudou moc použít při normálním procesu vytvoření účtu ale můžou být použiti manuálně administratorém. Existujících účtů se to nedotkne."
|
||||||
createNoteFromTheFile: "Vytvořit poznámku z tohodle souboru"
|
createNoteFromTheFile: "Vytvořit poznámku z tohodle souboru"
|
||||||
archive: "Archiv"
|
archive: "Archiv"
|
||||||
|
archived: "Archivované"
|
||||||
|
unarchive: "Obnovit"
|
||||||
channelArchiveConfirmTitle: "Opravdu chcete archivovat {name}?"
|
channelArchiveConfirmTitle: "Opravdu chcete archivovat {name}?"
|
||||||
channelArchiveConfirmDescription: "Archivovaný kanál se objeví v seznamu kanálů nebo ve výsledcích hledání. Nové poznámky se nedají vložit do seznamu."
|
channelArchiveConfirmDescription: "Archivovaný kanál se objeví v seznamu kanálů nebo ve výsledcích hledání. Nové poznámky se nedají vložit do seznamu."
|
||||||
thisChannelArchived: "Tenhle kanál je archivovaný"
|
thisChannelArchived: "Tenhle kanál je archivovaný"
|
||||||
@@ -1099,6 +1121,7 @@ doYouAgree: "Souhlasíte?"
|
|||||||
beSureToReadThisAsItIsImportant: "Přečtěte si prosím tyto důležité informace."
|
beSureToReadThisAsItIsImportant: "Přečtěte si prosím tyto důležité informace."
|
||||||
iHaveReadXCarefullyAndAgree: "Přečetl jsem si text \"{x}\" a souhlasím s ním."
|
iHaveReadXCarefullyAndAgree: "Přečetl jsem si text \"{x}\" a souhlasím s ním."
|
||||||
icon: "Avatar"
|
icon: "Avatar"
|
||||||
|
forYou: "Pro vás"
|
||||||
replies: "Odpovědět"
|
replies: "Odpovědět"
|
||||||
renotes: "Přeposlat"
|
renotes: "Přeposlat"
|
||||||
sourceCode: "Zdrojový kód"
|
sourceCode: "Zdrojový kód"
|
||||||
@@ -1789,6 +1812,14 @@ _widgets:
|
|||||||
_userList:
|
_userList:
|
||||||
chooseList: "Vybrat seznam"
|
chooseList: "Vybrat seznam"
|
||||||
clicker: "Clicker"
|
clicker: "Clicker"
|
||||||
|
_widgetOptions:
|
||||||
|
height: "Výška"
|
||||||
|
_button:
|
||||||
|
colored: "Barevné"
|
||||||
|
_clock:
|
||||||
|
size: "Velikost"
|
||||||
|
_birthdayFollowings:
|
||||||
|
period: "Trvání"
|
||||||
_cw:
|
_cw:
|
||||||
hide: "Skrýt"
|
hide: "Skrýt"
|
||||||
show: "Zobrazit více"
|
show: "Zobrazit více"
|
||||||
|
|||||||
@@ -83,6 +83,8 @@ files: "Dateien"
|
|||||||
download: "Herunterladen"
|
download: "Herunterladen"
|
||||||
driveFileDeleteConfirm: "Möchtest du die Datei „{name}“ wirklich löschen? Einige Inhalte, die diese Datei verwenden, werden auch verschwinden."
|
driveFileDeleteConfirm: "Möchtest du die Datei „{name}“ wirklich löschen? Einige Inhalte, die diese Datei verwenden, werden auch verschwinden."
|
||||||
unfollowConfirm: "Möchtest du {name} wirklich nicht mehr folgen?"
|
unfollowConfirm: "Möchtest du {name} wirklich nicht mehr folgen?"
|
||||||
|
cancelFollowRequestConfirm: "Möchten Sie die Voll-Anfrage an {name} zurückziehen?"
|
||||||
|
rejectFollowRequestConfirm: "Möchtest du die Follow-Anfrage von {name} ablehnen?"
|
||||||
exportRequested: "Du hast einen Export angefragt. Dies kann etwas Zeit in Anspruch nehmen. Sobald der Export abgeschlossen ist, wird er deiner Drive hinzugefügt."
|
exportRequested: "Du hast einen Export angefragt. Dies kann etwas Zeit in Anspruch nehmen. Sobald der Export abgeschlossen ist, wird er deiner Drive hinzugefügt."
|
||||||
importRequested: "Du hast einen Import angefragt. Dies kann etwas Zeit in Anspruch nehmen."
|
importRequested: "Du hast einen Import angefragt. Dies kann etwas Zeit in Anspruch nehmen."
|
||||||
lists: "Listen"
|
lists: "Listen"
|
||||||
@@ -253,6 +255,7 @@ noteDeleteConfirm: "Möchtest du diese Notiz wirklich löschen?"
|
|||||||
pinLimitExceeded: "Du kannst nicht noch mehr Notizen anheften."
|
pinLimitExceeded: "Du kannst nicht noch mehr Notizen anheften."
|
||||||
done: "Fertig"
|
done: "Fertig"
|
||||||
processing: "In Bearbeitung …"
|
processing: "In Bearbeitung …"
|
||||||
|
preprocessing: "In Vorbereitung"
|
||||||
preview: "Vorschau"
|
preview: "Vorschau"
|
||||||
default: "Standard"
|
default: "Standard"
|
||||||
defaultValueIs: "Standardwert: {value}"
|
defaultValueIs: "Standardwert: {value}"
|
||||||
@@ -301,6 +304,7 @@ uploadFromUrlMayTakeTime: "Es kann eine Weile dauern, bis das Hochladen abgeschl
|
|||||||
uploadNFiles: "Lade {n} Dateien hoch"
|
uploadNFiles: "Lade {n} Dateien hoch"
|
||||||
explore: "Erkunden"
|
explore: "Erkunden"
|
||||||
messageRead: "Gelesen"
|
messageRead: "Gelesen"
|
||||||
|
readAllChatMessages: "Alle Nachrichten als gelesen markieren"
|
||||||
noMoreHistory: "Kein weiterer Verlauf vorhanden"
|
noMoreHistory: "Kein weiterer Verlauf vorhanden"
|
||||||
startChat: "Chat starten"
|
startChat: "Chat starten"
|
||||||
nUsersRead: "Von {n} Benutzern gelesen"
|
nUsersRead: "Von {n} Benutzern gelesen"
|
||||||
@@ -333,6 +337,7 @@ fileName: "Dateiname"
|
|||||||
selectFile: "Datei auswählen"
|
selectFile: "Datei auswählen"
|
||||||
selectFiles: "Dateien auswählen"
|
selectFiles: "Dateien auswählen"
|
||||||
selectFolder: "Ordner auswählen"
|
selectFolder: "Ordner auswählen"
|
||||||
|
unselectFolder: "Ordnerauswahl aufheben"
|
||||||
selectFolders: "Ordner auswählen"
|
selectFolders: "Ordner auswählen"
|
||||||
fileNotSelected: "Keine Datei ausgewählt"
|
fileNotSelected: "Keine Datei ausgewählt"
|
||||||
renameFile: "Datei umbenennen"
|
renameFile: "Datei umbenennen"
|
||||||
@@ -345,6 +350,7 @@ addFile: "Datei hinzufügen"
|
|||||||
showFile: "Datei anzeigen"
|
showFile: "Datei anzeigen"
|
||||||
emptyDrive: "Deine Drive ist leer"
|
emptyDrive: "Deine Drive ist leer"
|
||||||
emptyFolder: "Dieser Ordner ist leer"
|
emptyFolder: "Dieser Ordner ist leer"
|
||||||
|
dropHereToUpload: "Dateien hier ablegen, um sie hochzuladen."
|
||||||
unableToDelete: "Nicht löschbar"
|
unableToDelete: "Nicht löschbar"
|
||||||
inputNewFileName: "Gib einen neuen Dateinamen ein"
|
inputNewFileName: "Gib einen neuen Dateinamen ein"
|
||||||
inputNewDescription: "Gib eine neue Beschreibung ein"
|
inputNewDescription: "Gib eine neue Beschreibung ein"
|
||||||
@@ -537,6 +543,7 @@ regenerate: "Regenerieren"
|
|||||||
fontSize: "Schriftgröße"
|
fontSize: "Schriftgröße"
|
||||||
mediaListWithOneImageAppearance: "Höhe von Medienlisten mit nur einem Bild"
|
mediaListWithOneImageAppearance: "Höhe von Medienlisten mit nur einem Bild"
|
||||||
limitTo: "Auf {x} begrenzen"
|
limitTo: "Auf {x} begrenzen"
|
||||||
|
showMediaListByGridInWideArea: "Medienlisten auf breiteren Bildschirmen nebeneinander anzeigen"
|
||||||
noFollowRequests: "Keine ausstehenden Follow-Anfragen vorhanden"
|
noFollowRequests: "Keine ausstehenden Follow-Anfragen vorhanden"
|
||||||
openImageInNewTab: "Bilder in neuem Tab öffnen"
|
openImageInNewTab: "Bilder in neuem Tab öffnen"
|
||||||
dashboard: "Dashboard"
|
dashboard: "Dashboard"
|
||||||
@@ -772,6 +779,7 @@ lockedAccountInfo: "Auch wenn du Follow-Anfragen auf manuelle Bestätigung setzt
|
|||||||
alwaysMarkSensitive: "Medien standardmäßig als sensibel markieren"
|
alwaysMarkSensitive: "Medien standardmäßig als sensibel markieren"
|
||||||
loadRawImages: "Anstatt Vorschaubilder immer Originalbilder anzeigen"
|
loadRawImages: "Anstatt Vorschaubilder immer Originalbilder anzeigen"
|
||||||
disableShowingAnimatedImages: "Animierte Bilder nicht abspielen"
|
disableShowingAnimatedImages: "Animierte Bilder nicht abspielen"
|
||||||
|
disableShowingAnimatedImages_caption: "Unabhängig von dieser Einstellung kann es vorkommen, dass animierte Bilder nicht abgespielt werden, wenn z. B. die Barrierefreiheits- oder Energiespareinstellungen des Browsers oder des Betriebssystems eingreifen."
|
||||||
highlightSensitiveMedia: "Sensitive Medien markieren"
|
highlightSensitiveMedia: "Sensitive Medien markieren"
|
||||||
verificationEmailSent: "Eine Bestätigungsmail wurde an deine Email-Adresse versendet. Besuche den dort enthaltenen Link, um die Verifizierung abzuschließen."
|
verificationEmailSent: "Eine Bestätigungsmail wurde an deine Email-Adresse versendet. Besuche den dort enthaltenen Link, um die Verifizierung abzuschließen."
|
||||||
notSet: "Nicht konfiguriert"
|
notSet: "Nicht konfiguriert"
|
||||||
@@ -1018,6 +1026,9 @@ pushNotificationAlreadySubscribed: "Push-Benachrichtigungen sind bereits aktivie
|
|||||||
pushNotificationNotSupported: "Entweder dein Browser oder deine Instanz unterstützt Push-Benachrichtigungen nicht"
|
pushNotificationNotSupported: "Entweder dein Browser oder deine Instanz unterstützt Push-Benachrichtigungen nicht"
|
||||||
sendPushNotificationReadMessage: "Push-Benachrichtigungen löschen, sobald sie gelesen wurden"
|
sendPushNotificationReadMessage: "Push-Benachrichtigungen löschen, sobald sie gelesen wurden"
|
||||||
sendPushNotificationReadMessageCaption: "Dies kann gegebenenfalls den Batterieverbrauch deines Gerätes erhöhen."
|
sendPushNotificationReadMessageCaption: "Dies kann gegebenenfalls den Batterieverbrauch deines Gerätes erhöhen."
|
||||||
|
pleaseAllowPushNotification: "Bitte erlauben Sie Benachrichtigungen in Ihrem Browser."
|
||||||
|
browserPushNotificationDisabled: "Das Abrufen der Berechtigung zum Senden von Benachrichtigungen ist fehlgeschlagen."
|
||||||
|
browserPushNotificationDisabledDescription: "Sie haben keine Berechtigung, Benachrichtigungen von {serverName} zu senden. Bitte erlauben Sie Benachrichtigungen in den Browser-Einstellungen und versuchen Sie es erneut."
|
||||||
windowMaximize: "Maximieren"
|
windowMaximize: "Maximieren"
|
||||||
windowMinimize: "Minimieren"
|
windowMinimize: "Minimieren"
|
||||||
windowRestore: "Wiederherstellen"
|
windowRestore: "Wiederherstellen"
|
||||||
@@ -1054,6 +1065,7 @@ permissionDeniedError: "Aktion verweigert"
|
|||||||
permissionDeniedErrorDescription: "Dieses Benutzerkonto besitzt nicht die Berechtigung, um diese Aktion auszuführen."
|
permissionDeniedErrorDescription: "Dieses Benutzerkonto besitzt nicht die Berechtigung, um diese Aktion auszuführen."
|
||||||
preset: "Vorlage"
|
preset: "Vorlage"
|
||||||
selectFromPresets: "Aus Vorlagen wählen"
|
selectFromPresets: "Aus Vorlagen wählen"
|
||||||
|
custom: "Benutzerdefiniert"
|
||||||
achievements: "Errungenschaften"
|
achievements: "Errungenschaften"
|
||||||
gotInvalidResponseError: "Ungültige Antwort des Servers"
|
gotInvalidResponseError: "Ungültige Antwort des Servers"
|
||||||
gotInvalidResponseErrorDescription: "Eventuell ist der Server momentan nicht erreichbar oder untergeht Wartungsarbeiten. Bitte versuche es später noch einmal."
|
gotInvalidResponseErrorDescription: "Eventuell ist der Server momentan nicht erreichbar oder untergeht Wartungsarbeiten. Bitte versuche es später noch einmal."
|
||||||
@@ -1092,6 +1104,7 @@ prohibitedWordsDescription2: "Durch die Verwendung von Leerzeichen können AND-V
|
|||||||
hiddenTags: "Ausgeblendete Hashtags"
|
hiddenTags: "Ausgeblendete Hashtags"
|
||||||
hiddenTagsDescription: "Die hier eingestellten Tags werden nicht mehr in den Trends angezeigt. Mit der Umschalttaste können mehrere ausgewählt werden."
|
hiddenTagsDescription: "Die hier eingestellten Tags werden nicht mehr in den Trends angezeigt. Mit der Umschalttaste können mehrere ausgewählt werden."
|
||||||
notesSearchNotAvailable: "Die Notizsuche ist nicht verfügbar."
|
notesSearchNotAvailable: "Die Notizsuche ist nicht verfügbar."
|
||||||
|
usersSearchNotAvailable: "Die Benutzersuche ist nicht verfügbar."
|
||||||
license: "Lizenz"
|
license: "Lizenz"
|
||||||
unfavoriteConfirm: "Wirklich aus Favoriten entfernen?"
|
unfavoriteConfirm: "Wirklich aus Favoriten entfernen?"
|
||||||
myClips: "Meine Clips"
|
myClips: "Meine Clips"
|
||||||
@@ -1166,6 +1179,7 @@ installed: "Installiert"
|
|||||||
branding: "Branding"
|
branding: "Branding"
|
||||||
enableServerMachineStats: "Hardwareinformationen des Servers veröffentlichen"
|
enableServerMachineStats: "Hardwareinformationen des Servers veröffentlichen"
|
||||||
enableIdenticonGeneration: "Generierung von Benutzer-Identicons aktivieren"
|
enableIdenticonGeneration: "Generierung von Benutzer-Identicons aktivieren"
|
||||||
|
showRoleBadgesOfRemoteUsers: "Rollensymbole anzeigen, die Remote-Benutzern zugewiesen wurden."
|
||||||
turnOffToImprovePerformance: "Deaktivierung kann zu höherer Leistung führen."
|
turnOffToImprovePerformance: "Deaktivierung kann zu höherer Leistung führen."
|
||||||
createInviteCode: "Einladung erstellen"
|
createInviteCode: "Einladung erstellen"
|
||||||
createWithOptions: "Einladung mit Optionen erstellen"
|
createWithOptions: "Einladung mit Optionen erstellen"
|
||||||
@@ -1243,6 +1257,7 @@ releaseToRefresh: "Zum Aktualisieren loslassen"
|
|||||||
refreshing: "Wird aktualisiert..."
|
refreshing: "Wird aktualisiert..."
|
||||||
pullDownToRefresh: "Zum Aktualisieren ziehen"
|
pullDownToRefresh: "Zum Aktualisieren ziehen"
|
||||||
useGroupedNotifications: "Benachrichtigungen gruppieren"
|
useGroupedNotifications: "Benachrichtigungen gruppieren"
|
||||||
|
emailVerificationFailedError: "Es gab ein Problem bei der Überprüfung Ihrer E-Mail-Adresse. Der Link ist möglicherweise abgelaufen."
|
||||||
cwNotationRequired: "Ist \"Inhaltswarnung verwenden\" aktiviert, muss eine Beschreibung gegeben werden."
|
cwNotationRequired: "Ist \"Inhaltswarnung verwenden\" aktiviert, muss eine Beschreibung gegeben werden."
|
||||||
doReaction: "Reagieren"
|
doReaction: "Reagieren"
|
||||||
code: "Code"
|
code: "Code"
|
||||||
@@ -1313,6 +1328,7 @@ acknowledgeNotesAndEnable: "Schalten Sie dies erst ein, wenn Sie die Vorsichtsma
|
|||||||
federationSpecified: "Dieser Server arbeitet mit Whitelist-Föderation. Er kann nicht mit anderen als den vom Administrator angegebenen Servern interagieren."
|
federationSpecified: "Dieser Server arbeitet mit Whitelist-Föderation. Er kann nicht mit anderen als den vom Administrator angegebenen Servern interagieren."
|
||||||
federationDisabled: "Föderation ist auf diesem Server deaktiviert. Es ist nicht möglich, mit Benutzern auf anderen Servern zu interagieren."
|
federationDisabled: "Föderation ist auf diesem Server deaktiviert. Es ist nicht möglich, mit Benutzern auf anderen Servern zu interagieren."
|
||||||
draft: "Entwurf"
|
draft: "Entwurf"
|
||||||
|
draftsAndScheduledNotes: "Entwürfe und geplante Beiträge"
|
||||||
confirmOnReact: "Reagieren bestätigen"
|
confirmOnReact: "Reagieren bestätigen"
|
||||||
reactAreYouSure: "Willst du eine \"{emoji}\"-Reaktion hinzufügen?"
|
reactAreYouSure: "Willst du eine \"{emoji}\"-Reaktion hinzufügen?"
|
||||||
markAsSensitiveConfirm: "Möchtest du dieses Medium als sensibel kennzeichnen?"
|
markAsSensitiveConfirm: "Möchtest du dieses Medium als sensibel kennzeichnen?"
|
||||||
@@ -1341,6 +1357,7 @@ textCount: "Zeichenanzahl"
|
|||||||
information: "Über"
|
information: "Über"
|
||||||
chat: "Chat"
|
chat: "Chat"
|
||||||
directMessage: "Mit dem Benutzer chatten"
|
directMessage: "Mit dem Benutzer chatten"
|
||||||
|
directMessage_short: "Nachrichten"
|
||||||
migrateOldSettings: "Alte Client-Einstellungen migrieren"
|
migrateOldSettings: "Alte Client-Einstellungen migrieren"
|
||||||
migrateOldSettings_description: "Dies sollte normalerweise automatisch geschehen, aber wenn die Migration aus irgendeinem Grund nicht erfolgreich war, kannst du den Migrationsprozess selbst manuell auslösen. Die aktuellen Konfigurationsinformationen werden dabei überschrieben."
|
migrateOldSettings_description: "Dies sollte normalerweise automatisch geschehen, aber wenn die Migration aus irgendeinem Grund nicht erfolgreich war, kannst du den Migrationsprozess selbst manuell auslösen. Die aktuellen Konfigurationsinformationen werden dabei überschrieben."
|
||||||
compress: "Komprimieren"
|
compress: "Komprimieren"
|
||||||
@@ -1368,23 +1385,83 @@ redisplayAllTips: "Alle „Tipps und Tricks“ wieder anzeigen"
|
|||||||
hideAllTips: "Alle „Tipps und Tricks“ ausblenden"
|
hideAllTips: "Alle „Tipps und Tricks“ ausblenden"
|
||||||
defaultImageCompressionLevel: "Standard-Bildkomprimierungsstufe"
|
defaultImageCompressionLevel: "Standard-Bildkomprimierungsstufe"
|
||||||
defaultImageCompressionLevel_description: "Ein niedrigerer Wert erhält die Bildqualität, erhöht aber die Dateigröße. <br>Höhere Werte reduzieren die Dateigröße, verringern aber die Bildqualität."
|
defaultImageCompressionLevel_description: "Ein niedrigerer Wert erhält die Bildqualität, erhöht aber die Dateigröße. <br>Höhere Werte reduzieren die Dateigröße, verringern aber die Bildqualität."
|
||||||
|
defaultCompressionLevel: "Standard-Kompressionsgrad"
|
||||||
|
defaultCompressionLevel_description: "Bei einem niedrigeren Wert bleibt die Qualität erhalten, aber die Dateigröße nimmt zu.<br> Bei einem höheren Wert lässt sich die Dateigröße verringern, aber die Qualität nimmt ab."
|
||||||
inMinutes: "Minute(n)"
|
inMinutes: "Minute(n)"
|
||||||
inDays: "Tag(en)"
|
inDays: "Tag(en)"
|
||||||
|
safeModeEnabled: "Der abgesicherte Modus ist aktiviert."
|
||||||
|
pluginsAreDisabledBecauseSafeMode: "Da der abgesicherte Modus aktiviert ist, sind alle Plugins deaktiviert."
|
||||||
|
customCssIsDisabledBecauseSafeMode: "Da der abgesicherte Modus aktiviert ist, wird benutzerdefiniertes CSS nicht angewendet."
|
||||||
|
themeIsDefaultBecauseSafeMode: "Solange der abgesicherte Modus aktiviert ist, wird das Standard-Theme verwendet. Wenn Sie den abgesicherten Modus deaktivieren, wird es wieder zurückgesetzt."
|
||||||
|
thankYouForTestingBeta: "Vielen Dank für Ihre Unterstützung beim Testen der Beta-Version!"
|
||||||
|
createUserSpecifiedNote: "Benutzerdefinierte Notiz erstellen"
|
||||||
|
schedulePost: "Beitrag planen"
|
||||||
|
scheduleToPostOnX: "Der Beitrag wird für {x} geplant.x"
|
||||||
|
scheduledToPostOnX: "Der Beitrag ist für {x} geplant."
|
||||||
|
schedule: "Planen"
|
||||||
|
scheduled: "Geplant"
|
||||||
widgets: "Widgets"
|
widgets: "Widgets"
|
||||||
|
deviceInfo: "Geräteinformation"
|
||||||
|
deviceInfoDescription: "Bei technischen Anfragen kann es hilfreich sein, die folgenden Informationen anzugeben, da dies zur Lösung des Problems beitragen kann."
|
||||||
|
youAreAdmin: "Sie sind ein Administrator"
|
||||||
|
frame: "Rahmen"
|
||||||
presets: "Vorlage"
|
presets: "Vorlage"
|
||||||
|
zeroPadding: "Nullauffüllung"
|
||||||
|
nothingToConfigure: "Es sind keine Einstellungen verfügbar"
|
||||||
_imageEditing:
|
_imageEditing:
|
||||||
_vars:
|
_vars:
|
||||||
|
caption: "Dateibeschriftung"
|
||||||
filename: "Dateiname"
|
filename: "Dateiname"
|
||||||
|
filename_without_ext: "Dateiname ohne Erweiterung"
|
||||||
|
year: "Jahr der Aufnahme"
|
||||||
|
month: "Monat der Aufnahme"
|
||||||
|
day: "Tag der Aufnahme"
|
||||||
|
hour: "Stunde der Aufnahmezeit"
|
||||||
|
minute: "Minute der Aufnahmezeit"
|
||||||
|
second: "Sekunde der Aufnahmezeit"
|
||||||
|
camera_model: "Kameraname"
|
||||||
|
camera_lens_model: "Objektivname"
|
||||||
|
camera_mm: "Brennweite"
|
||||||
|
camera_mm_35: "Brennweite (35-mm-Äquivalent)"
|
||||||
|
camera_f: "Blende"
|
||||||
|
camera_s: "Verschlusszeit"
|
||||||
|
camera_iso: "ISO-Empfindlichkeit"
|
||||||
|
gps_lat: "Breitengrad"
|
||||||
|
gps_long: "Längengrad"
|
||||||
_imageFrameEditor:
|
_imageFrameEditor:
|
||||||
|
title: "Rahmenbearbeitung"
|
||||||
|
tip: "Sie können das Bild dekorieren, indem Sie einen Rahmen sowie ein Etikett mit Metadaten hinzufügen."
|
||||||
header: "Kopfzeile"
|
header: "Kopfzeile"
|
||||||
|
footer: "Fußzeile"
|
||||||
|
borderThickness: "Randbreite"
|
||||||
|
labelThickness: "Beschriftungsbreite"
|
||||||
|
labelScale: "Etikettenskala"
|
||||||
|
centered: "Zentriert"
|
||||||
|
captionMain: "Überschrift (groß)"
|
||||||
|
captionSub: "Beschriftung (klein)"
|
||||||
|
availableVariables: "Verfügbare Variablen"
|
||||||
|
withQrCode: "QR-Code"
|
||||||
|
backgroundColor: "Hintergrundfarbe"
|
||||||
|
textColor: "Textfarbe"
|
||||||
font: "Schriftart"
|
font: "Schriftart"
|
||||||
fontSerif: "Serif"
|
fontSerif: "Serif"
|
||||||
fontSansSerif: "Sans Serif"
|
fontSansSerif: "Sans Serif"
|
||||||
quitWithoutSaveConfirm: "Nicht gespeicherte Änderungen verwerfen?"
|
quitWithoutSaveConfirm: "Nicht gespeicherte Änderungen verwerfen?"
|
||||||
|
failedToLoadImage: "Das Laden des Bildes ist fehlgeschlagen."
|
||||||
|
_compression:
|
||||||
|
_quality:
|
||||||
|
high: "Hohe Qualität"
|
||||||
|
medium: "Mittlere Qualität"
|
||||||
|
low: "Niedrige Qualität"
|
||||||
|
_size:
|
||||||
|
large: "Groß"
|
||||||
|
medium: "Medium"
|
||||||
|
small: "Klein"
|
||||||
_order:
|
_order:
|
||||||
newest: "Neueste zuerst"
|
newest: "Neueste zuerst"
|
||||||
oldest: "Älteste zuerst"
|
oldest: "Älteste zuerst"
|
||||||
_chat:
|
_chat:
|
||||||
|
messages: "Nachrichten"
|
||||||
noMessagesYet: "Noch keine Nachrichten"
|
noMessagesYet: "Noch keine Nachrichten"
|
||||||
newMessage: "Neue Nachricht"
|
newMessage: "Neue Nachricht"
|
||||||
individualChat: "Privater Chat"
|
individualChat: "Privater Chat"
|
||||||
@@ -1472,6 +1549,12 @@ _settings:
|
|||||||
contentsUpdateFrequency_description2: "Wenn der Echtzeitmodus aktiviert ist, werden die Inhalte unabhängig von dieser Einstellung in Echtzeit aktualisiert."
|
contentsUpdateFrequency_description2: "Wenn der Echtzeitmodus aktiviert ist, werden die Inhalte unabhängig von dieser Einstellung in Echtzeit aktualisiert."
|
||||||
showUrlPreview: "URL-Vorschau anzeigen"
|
showUrlPreview: "URL-Vorschau anzeigen"
|
||||||
showAvailableReactionsFirstInNote: "Zeige die verfügbaren Reaktionen im oberen Bereich an."
|
showAvailableReactionsFirstInNote: "Zeige die verfügbaren Reaktionen im oberen Bereich an."
|
||||||
|
showPageTabBarBottom: "Tab-Leiste der Seite unten anzeigen"
|
||||||
|
emojiPaletteBanner: "Sie können Voreinstellungen, die im Emoji-Picker dauerhaft angezeigt werden sollen, als Palette registrieren oder die Anzeigeart des Pickers anpassen."
|
||||||
|
enableAnimatedImages: "Animierte Bilder aktivieren"
|
||||||
|
settingsPersistence_title: "Persistenz der Einstellungen"
|
||||||
|
settingsPersistence_description1: "Durch das Aktivieren der persistenten Speicherung der Einstellungen kann verhindert werden, dass Einstellungsinformationen verloren gehen."
|
||||||
|
settingsPersistence_description2: "Je nach Umgebung ist eine Aktivierung möglicherweise nicht möglich."
|
||||||
_chat:
|
_chat:
|
||||||
showSenderName: "Name des Absenders anzeigen"
|
showSenderName: "Name des Absenders anzeigen"
|
||||||
sendOnEnter: "Eingabetaste sendet Nachricht"
|
sendOnEnter: "Eingabetaste sendet Nachricht"
|
||||||
@@ -1480,6 +1563,8 @@ _preferencesProfile:
|
|||||||
profileNameDescription: "Lege einen Namen fest, der dieses Gerät identifiziert."
|
profileNameDescription: "Lege einen Namen fest, der dieses Gerät identifiziert."
|
||||||
profileNameDescription2: "Beispiel: \"Haupt-PC\", \"Smartphone\""
|
profileNameDescription2: "Beispiel: \"Haupt-PC\", \"Smartphone\""
|
||||||
manageProfiles: "Profile verwalten"
|
manageProfiles: "Profile verwalten"
|
||||||
|
shareSameProfileBetweenDevicesIsNotRecommended: "Es wird nicht empfohlen, dasselbe Profil auf mehreren Geräten zu teilen."
|
||||||
|
useSyncBetweenDevicesOptionIfYouWantToSyncSetting: "Wenn es Einstellungselemente gibt, die Sie über mehrere Geräte synchronisieren möchten, aktivieren Sie bitte die Option „Über mehrere Geräte synchronisieren“ jeweils einzeln."
|
||||||
_preferencesBackup:
|
_preferencesBackup:
|
||||||
autoBackup: "Automatische Sicherung"
|
autoBackup: "Automatische Sicherung"
|
||||||
restoreFromBackup: "Wiederherstellen aus der Sicherung"
|
restoreFromBackup: "Wiederherstellen aus der Sicherung"
|
||||||
@@ -1489,6 +1574,7 @@ _preferencesBackup:
|
|||||||
youNeedToNameYourProfileToEnableAutoBackup: "Um die automatische Sicherung zu aktivieren, müssen Profilnamen festgelegt werden."
|
youNeedToNameYourProfileToEnableAutoBackup: "Um die automatische Sicherung zu aktivieren, müssen Profilnamen festgelegt werden."
|
||||||
autoPreferencesBackupIsNotEnabledForThisDevice: "Die automatische Sicherung der Einstellungen ist auf diesem Gerät nicht aktiviert."
|
autoPreferencesBackupIsNotEnabledForThisDevice: "Die automatische Sicherung der Einstellungen ist auf diesem Gerät nicht aktiviert."
|
||||||
backupFound: "Konfigurationssicherung gefunden."
|
backupFound: "Konfigurationssicherung gefunden."
|
||||||
|
forceBackup: "Erzwungenes Backup der Einstellungen"
|
||||||
_accountSettings:
|
_accountSettings:
|
||||||
requireSigninToViewContents: "Anmeldung erfordern, um Inhalte anzuzeigen"
|
requireSigninToViewContents: "Anmeldung erfordern, um Inhalte anzuzeigen"
|
||||||
requireSigninToViewContentsDescription1: "Erfordere eine Anmeldung, um alle Notizen und andere Inhalte anzuzeigen, die du erstellt hast. Dadurch wird verhindert, dass Crawler deine Informationen sammeln."
|
requireSigninToViewContentsDescription1: "Erfordere eine Anmeldung, um alle Notizen und andere Inhalte anzuzeigen, die du erstellt hast. Dadurch wird verhindert, dass Crawler deine Informationen sammeln."
|
||||||
@@ -1645,6 +1731,10 @@ _serverSettings:
|
|||||||
fanoutTimelineDbFallback: "Auf die Datenbank zurückfallen"
|
fanoutTimelineDbFallback: "Auf die Datenbank zurückfallen"
|
||||||
fanoutTimelineDbFallbackDescription: "Ist diese Option aktiviert, wird die Chronik auf zusätzliche Abfragen in der Datenbank zurückgreifen, wenn sich die Chronik nicht im Cache befindet. Eine Deaktivierung führt zu geringerer Serverlast, aber schränkt den Zeitraum der abrufbaren Chronik ein. "
|
fanoutTimelineDbFallbackDescription: "Ist diese Option aktiviert, wird die Chronik auf zusätzliche Abfragen in der Datenbank zurückgreifen, wenn sich die Chronik nicht im Cache befindet. Eine Deaktivierung führt zu geringerer Serverlast, aber schränkt den Zeitraum der abrufbaren Chronik ein. "
|
||||||
reactionsBufferingDescription: "Wenn diese Option aktiviert ist, kann sie die Leistung beim Erstellen von Reaktionen erheblich verbessern und die Belastung der Datenbank verringern. Allerdings steigt die Speichernutzung von Redis."
|
reactionsBufferingDescription: "Wenn diese Option aktiviert ist, kann sie die Leistung beim Erstellen von Reaktionen erheblich verbessern und die Belastung der Datenbank verringern. Allerdings steigt die Speichernutzung von Redis."
|
||||||
|
remoteNotesCleaning: "Automatische Bereinigung von Remote-Beiträgen"
|
||||||
|
remoteNotesCleaning_description: "Wenn diese Option aktiviert ist, werden Remote-Beiträge, die eine bestimmte Zeit überschritten haben, regelmäßig bereinigt, um ein Aufblähen der Datenbank zu verhindern."
|
||||||
|
remoteNotesCleaningMaxProcessingDuration: "Maximale fortlaufende Dauer des Reinigungsverarbeitungsprozesses"
|
||||||
|
remoteNotesCleaningExpiryDaysForEachNotes: "Mindestaufbewahrungsdauer für Notizen"
|
||||||
inquiryUrl: "Kontakt-URL"
|
inquiryUrl: "Kontakt-URL"
|
||||||
inquiryUrlDescription: "Gib eine URL für das Kontaktformular der Serverbetreiber oder eine Webseite an, die Kontaktinformationen enthält."
|
inquiryUrlDescription: "Gib eine URL für das Kontaktformular der Serverbetreiber oder eine Webseite an, die Kontaktinformationen enthält."
|
||||||
openRegistration: "Registrierung von Konten aktivieren"
|
openRegistration: "Registrierung von Konten aktivieren"
|
||||||
@@ -1663,6 +1753,11 @@ _serverSettings:
|
|||||||
userGeneratedContentsVisibilityForVisitor: "Sichtbarkeit von nutzergenerierten Inhalten für Gäste"
|
userGeneratedContentsVisibilityForVisitor: "Sichtbarkeit von nutzergenerierten Inhalten für Gäste"
|
||||||
userGeneratedContentsVisibilityForVisitor_description: "Dies ist nützlich, um zu verhindern, dass unangemessene Inhalte, die nicht gut moderiert sind, ungewollt über deinen eigenen Server im Internet veröffentlicht werden."
|
userGeneratedContentsVisibilityForVisitor_description: "Dies ist nützlich, um zu verhindern, dass unangemessene Inhalte, die nicht gut moderiert sind, ungewollt über deinen eigenen Server im Internet veröffentlicht werden."
|
||||||
userGeneratedContentsVisibilityForVisitor_description2: "Die uneingeschränkte Veröffentlichung aller Inhalte des Servers im Internet, einschließlich der vom Server empfangenen Fremdinhalte, birgt Risiken. Dies ist besonders wichtig für Betrachter, die sich des dezentralen Charakters der Inhalte nicht bewusst sind, da sie selbst fremde Inhalte fälschlicherweise als auf dem Server erstellte Inhalte wahrnehmen könnten."
|
userGeneratedContentsVisibilityForVisitor_description2: "Die uneingeschränkte Veröffentlichung aller Inhalte des Servers im Internet, einschließlich der vom Server empfangenen Fremdinhalte, birgt Risiken. Dies ist besonders wichtig für Betrachter, die sich des dezentralen Charakters der Inhalte nicht bewusst sind, da sie selbst fremde Inhalte fälschlicherweise als auf dem Server erstellte Inhalte wahrnehmen könnten."
|
||||||
|
restartServerSetupWizardConfirm_title: "Möchten Sie den Assistenten für die Ersteinrichtung des Servers erneut ausführen?"
|
||||||
|
restartServerSetupWizardConfirm_text: "Einige aktuelle Einstellungen werden zurückgesetzt."
|
||||||
|
entrancePageStyle: "Stil der Einstiegsseite"
|
||||||
|
showTimelineForVisitor: "Zeitleiste anzeigen"
|
||||||
|
showActivitiesForVisitor: "Aktivitäten anzeigen"
|
||||||
_userGeneratedContentsVisibilityForVisitor:
|
_userGeneratedContentsVisibilityForVisitor:
|
||||||
all: "Alles ist öffentlich"
|
all: "Alles ist öffentlich"
|
||||||
localOnly: "Nur lokale Inhalte werden veröffentlicht, fremde Inhalte bleiben privat"
|
localOnly: "Nur lokale Inhalte werden veröffentlicht, fremde Inhalte bleiben privat"
|
||||||
@@ -1985,6 +2080,7 @@ _role:
|
|||||||
canManageAvatarDecorations: "Profilbilddekorationen verwalten"
|
canManageAvatarDecorations: "Profilbilddekorationen verwalten"
|
||||||
driveCapacity: "Drive-Kapazität"
|
driveCapacity: "Drive-Kapazität"
|
||||||
maxFileSize: "Maximale Dateigröße, die hochgeladen werden kann"
|
maxFileSize: "Maximale Dateigröße, die hochgeladen werden kann"
|
||||||
|
maxFileSize_caption: "Bei einem Reverse Proxy oder einem CDN können andere vorgelagerte Konfigurationswerte vorhanden sein."
|
||||||
alwaysMarkNsfw: "Dateien immer als NSFW markieren"
|
alwaysMarkNsfw: "Dateien immer als NSFW markieren"
|
||||||
canUpdateBioMedia: "Kann ein Profil- oder ein Bannerbild bearbeiten"
|
canUpdateBioMedia: "Kann ein Profil- oder ein Bannerbild bearbeiten"
|
||||||
pinMax: "Maximale Anzahl an angehefteten Notizen"
|
pinMax: "Maximale Anzahl an angehefteten Notizen"
|
||||||
@@ -1999,6 +2095,7 @@ _role:
|
|||||||
descriptionOfRateLimitFactor: "Je niedriger desto weniger restriktiv, je höher destro restriktiver."
|
descriptionOfRateLimitFactor: "Je niedriger desto weniger restriktiv, je höher destro restriktiver."
|
||||||
canHideAds: "Kann Werbung ausblenden"
|
canHideAds: "Kann Werbung ausblenden"
|
||||||
canSearchNotes: "Nutzung der Notizsuchfunktion"
|
canSearchNotes: "Nutzung der Notizsuchfunktion"
|
||||||
|
canSearchUsers: "Nutzung der Benutzersuche"
|
||||||
canUseTranslator: "Verwendung des Übersetzers"
|
canUseTranslator: "Verwendung des Übersetzers"
|
||||||
avatarDecorationLimit: "Maximale Anzahl an Profilbilddekorationen, die angebracht werden können"
|
avatarDecorationLimit: "Maximale Anzahl an Profilbilddekorationen, die angebracht werden können"
|
||||||
canImportAntennas: "Importieren von Antennen erlauben"
|
canImportAntennas: "Importieren von Antennen erlauben"
|
||||||
@@ -2011,6 +2108,7 @@ _role:
|
|||||||
uploadableFileTypes_caption: "Gibt die zulässigen MIME-/Dateitypen an. Mehrere MIME-Typen können durch einen Zeilenumbruch getrennt angegeben werden, und Platzhalter können mit einem Sternchen (*) angegeben werden. (z. B. image/*)"
|
uploadableFileTypes_caption: "Gibt die zulässigen MIME-/Dateitypen an. Mehrere MIME-Typen können durch einen Zeilenumbruch getrennt angegeben werden, und Platzhalter können mit einem Sternchen (*) angegeben werden. (z. B. image/*)"
|
||||||
uploadableFileTypes_caption2: "Bei manchen Dateien ist es nicht möglich, den Typ zu bestimmen. Um solche Dateien zuzulassen, füge {x} der Spezifikation hinzu."
|
uploadableFileTypes_caption2: "Bei manchen Dateien ist es nicht möglich, den Typ zu bestimmen. Um solche Dateien zuzulassen, füge {x} der Spezifikation hinzu."
|
||||||
noteDraftLimit: "Anzahl der möglichen Entwürfe für serverseitige Notizen"
|
noteDraftLimit: "Anzahl der möglichen Entwürfe für serverseitige Notizen"
|
||||||
|
scheduledNoteLimit: "Maximale Anzahl gleichzeitig erstellbarer geplanter Beiträge"
|
||||||
watermarkAvailable: "Kann die Wasserzeichenfunktion verwenden"
|
watermarkAvailable: "Kann die Wasserzeichenfunktion verwenden"
|
||||||
_condition:
|
_condition:
|
||||||
roleAssignedTo: "Manuellen Rollen zugewiesen"
|
roleAssignedTo: "Manuellen Rollen zugewiesen"
|
||||||
@@ -2271,6 +2369,7 @@ _time:
|
|||||||
minute: "Minute(n)"
|
minute: "Minute(n)"
|
||||||
hour: "Stunde(n)"
|
hour: "Stunde(n)"
|
||||||
day: "Tag(en)"
|
day: "Tag(en)"
|
||||||
|
month: "Monat(e)"
|
||||||
_2fa:
|
_2fa:
|
||||||
alreadyRegistered: "Du hast bereits ein Gerät für Zwei-Faktor-Authentifizierung registriert."
|
alreadyRegistered: "Du hast bereits ein Gerät für Zwei-Faktor-Authentifizierung registriert."
|
||||||
registerTOTP: "Authentifizierungs-App registrieren"
|
registerTOTP: "Authentifizierungs-App registrieren"
|
||||||
@@ -2400,6 +2499,7 @@ _auth:
|
|||||||
scopeUser: "Als folgender Benutzer agieren"
|
scopeUser: "Als folgender Benutzer agieren"
|
||||||
pleaseLogin: "Bitte logge dich ein, um Apps zu authorisieren."
|
pleaseLogin: "Bitte logge dich ein, um Apps zu authorisieren."
|
||||||
byClickingYouWillBeRedirectedToThisUrl: "Wenn der Zugang gewährt wird, wirst du automatisch zu folgender URL weitergeleitet"
|
byClickingYouWillBeRedirectedToThisUrl: "Wenn der Zugang gewährt wird, wirst du automatisch zu folgender URL weitergeleitet"
|
||||||
|
alreadyAuthorized: "Dieser Anwendung wurde bereits Zugriff gewährt."
|
||||||
_antennaSources:
|
_antennaSources:
|
||||||
all: "Alle Notizen"
|
all: "Alle Notizen"
|
||||||
homeTimeline: "Notizen von Benutzern, denen gefolgt wird"
|
homeTimeline: "Notizen von Benutzern, denen gefolgt wird"
|
||||||
@@ -2446,6 +2546,44 @@ _widgets:
|
|||||||
clicker: "Klickzähler"
|
clicker: "Klickzähler"
|
||||||
birthdayFollowings: "Nutzer, die heute Geburtstag haben"
|
birthdayFollowings: "Nutzer, die heute Geburtstag haben"
|
||||||
chat: "Mit dem Benutzer chatten"
|
chat: "Mit dem Benutzer chatten"
|
||||||
|
_widgetOptions:
|
||||||
|
showHeader: "Kopfzeile anzeigen"
|
||||||
|
transparent: "Hintergrund transparent machen"
|
||||||
|
height: "Höhe"
|
||||||
|
_button:
|
||||||
|
colored: "Farbig"
|
||||||
|
_clock:
|
||||||
|
size: "Größe"
|
||||||
|
thickness: "Dicke"
|
||||||
|
thicknessThin: "Dünn"
|
||||||
|
thicknessMedium: "Normal"
|
||||||
|
thicknessThick: "Dick"
|
||||||
|
graduations: "Zifferblattskala"
|
||||||
|
graduationDots: "Punkt"
|
||||||
|
graduationArabic: "Zahlen"
|
||||||
|
fadeGraduations: "Skala ausblenden"
|
||||||
|
sAnimation: "Zweite Animation"
|
||||||
|
sAnimationElastic: "Elastisch"
|
||||||
|
sAnimationEaseOut: "Weich"
|
||||||
|
twentyFour: "24-Stunden-Format"
|
||||||
|
labelTime: "Uhrzeit"
|
||||||
|
labelTz: "Zeitzone"
|
||||||
|
labelTimeAndTz: "Zeit und Zeitzone"
|
||||||
|
timezone: "Zeitzone"
|
||||||
|
showMs: "Millisekunden anzeigen"
|
||||||
|
showLabel: "Beschriftung anzeigen"
|
||||||
|
_jobQueue:
|
||||||
|
sound: "Ton abspielen"
|
||||||
|
_rss:
|
||||||
|
url: "RSS-Feed-URL"
|
||||||
|
refreshIntervalSec: "Aktualisierungsintervall (Sekunden)"
|
||||||
|
maxEntries: "Maximale Anzahl der angezeigten Einträge"
|
||||||
|
_rssTicker:
|
||||||
|
shuffle: "Zufällige Anzeigereihenfolge"
|
||||||
|
duration: "Banner-Scrollgeschwindigkeit (in Sekunden)"
|
||||||
|
reverse: "In andere Richtung scrollen"
|
||||||
|
_birthdayFollowings:
|
||||||
|
period: "Dauer"
|
||||||
_cw:
|
_cw:
|
||||||
hide: "Inhalt verbergen"
|
hide: "Inhalt verbergen"
|
||||||
show: "Inhalt anzeigen"
|
show: "Inhalt anzeigen"
|
||||||
@@ -2490,9 +2628,20 @@ _postForm:
|
|||||||
replyPlaceholder: "Dieser Notiz antworten …"
|
replyPlaceholder: "Dieser Notiz antworten …"
|
||||||
quotePlaceholder: "Diese Notiz zitieren …"
|
quotePlaceholder: "Diese Notiz zitieren …"
|
||||||
channelPlaceholder: "In einen Kanal senden"
|
channelPlaceholder: "In einen Kanal senden"
|
||||||
|
showHowToUse: "Formularbeschreibung anzeigen"
|
||||||
_howToUse:
|
_howToUse:
|
||||||
|
content_title: "Dieser Text"
|
||||||
|
content_description: "Bitte geben Sie den Inhalt ein, den Sie veröffentlichen möchten."
|
||||||
|
toolbar_title: "Symbolleiste"
|
||||||
|
toolbar_description: "Sie können Dateien oder Umfragen anhängen, Anmerkungen und Hashtags festlegen sowie Emojis und Erwähnungen einfügen."
|
||||||
|
account_title: "Profilmenü"
|
||||||
|
account_description: "Du kannst das Konto wechseln, von dem du postest, und dir eine Liste der im Konto gespeicherten Entwürfe und geplanten Beiträge anzeigen lassen."
|
||||||
visibility_title: "Sichtbarkeit"
|
visibility_title: "Sichtbarkeit"
|
||||||
|
visibility_description: "Sie können den Umfang festlegen, in dem die Notizen veröffentlicht werden."
|
||||||
menu_title: "Menü"
|
menu_title: "Menü"
|
||||||
|
menu_description: "Sie können außerdem weitere Aktionen durchführen, z. B. als Entwurf speichern, das Posten planen oder Reaktionen einstellen."
|
||||||
|
submit_title: "Senden-Button"
|
||||||
|
submit_description: "Du kannst die Notiz posten. Du kannst sie auch mit Strg + Enter / Cmd + Enter posten."
|
||||||
_placeholders:
|
_placeholders:
|
||||||
a: "Was machst du momentan?"
|
a: "Was machst du momentan?"
|
||||||
b: "Was ist um dich herum los?"
|
b: "Was ist um dich herum los?"
|
||||||
@@ -2638,6 +2787,8 @@ _notification:
|
|||||||
youReceivedFollowRequest: "Du hast eine Follow-Anfrage erhalten"
|
youReceivedFollowRequest: "Du hast eine Follow-Anfrage erhalten"
|
||||||
yourFollowRequestAccepted: "Deine Follow-Anfrage wurde akzeptiert"
|
yourFollowRequestAccepted: "Deine Follow-Anfrage wurde akzeptiert"
|
||||||
pollEnded: "Umfrageergebnisse sind verfügbar"
|
pollEnded: "Umfrageergebnisse sind verfügbar"
|
||||||
|
scheduledNotePosted: "Geplante Notiz wurde veröffentlicht"
|
||||||
|
scheduledNotePostFailed: "Veröffentlichen der geplanten Notiz fehlgeschlagen"
|
||||||
newNote: "Neue Notiz"
|
newNote: "Neue Notiz"
|
||||||
unreadAntennaNote: "Antenne {name}"
|
unreadAntennaNote: "Antenne {name}"
|
||||||
roleAssigned: "Rolle zugewiesen"
|
roleAssigned: "Rolle zugewiesen"
|
||||||
@@ -2667,6 +2818,8 @@ _notification:
|
|||||||
quote: "Zitationen"
|
quote: "Zitationen"
|
||||||
reaction: "Reaktionen"
|
reaction: "Reaktionen"
|
||||||
pollEnded: "Ende von Umfragen"
|
pollEnded: "Ende von Umfragen"
|
||||||
|
scheduledNotePosted: "Der geplante Beitrag wurde erfolgreich veröffentlicht."
|
||||||
|
scheduledNotePostFailed: "Der geplante Beitrag ist fehlgeschlagen."
|
||||||
receiveFollowRequest: "Erhaltene Follow-Anfragen"
|
receiveFollowRequest: "Erhaltene Follow-Anfragen"
|
||||||
followRequestAccepted: "Akzeptierte Follow-Anfragen"
|
followRequestAccepted: "Akzeptierte Follow-Anfragen"
|
||||||
roleAssigned: "Rolle zugewiesen"
|
roleAssigned: "Rolle zugewiesen"
|
||||||
@@ -2706,6 +2859,14 @@ _deck:
|
|||||||
usedAsMinWidthWhenFlexible: "Ist \"Automatische Breitenanpassung\" aktiviert, wird hierfür die minimale Breite verwendet"
|
usedAsMinWidthWhenFlexible: "Ist \"Automatische Breitenanpassung\" aktiviert, wird hierfür die minimale Breite verwendet"
|
||||||
flexible: "Automatische Breitenanpassung"
|
flexible: "Automatische Breitenanpassung"
|
||||||
enableSyncBetweenDevicesForProfiles: "Aktivieren der Synchronisierung von Profilinformationen zwischen Geräten"
|
enableSyncBetweenDevicesForProfiles: "Aktivieren der Synchronisierung von Profilinformationen zwischen Geräten"
|
||||||
|
showHowToUse: "Siehe dir die UI-Beschreibung an."
|
||||||
|
_howToUse:
|
||||||
|
addColumn_title: "Spalte hinzufügen"
|
||||||
|
addColumn_description: "Sie können den Spaltentyp auswählen und hinzufügen."
|
||||||
|
settings_title: "UI-Einstellungen"
|
||||||
|
settings_description: "Sie können die detaillierten Einstellungen der Deck-UI vornehmen."
|
||||||
|
switchProfile_title: "Profil wechseln"
|
||||||
|
switchProfile_description: "Das UI-Layout kann als Profil gespeichert werden, sodass du jederzeit zwischen den Profilen wechseln kannst."
|
||||||
_columns:
|
_columns:
|
||||||
main: "Hauptspalte"
|
main: "Hauptspalte"
|
||||||
widgets: "Widgets"
|
widgets: "Widgets"
|
||||||
@@ -2766,6 +2927,8 @@ _abuseReport:
|
|||||||
notifiedWebhook: "Zu verwendender Webhook"
|
notifiedWebhook: "Zu verwendender Webhook"
|
||||||
deleteConfirm: "Bist du sicher, dass du den Empfänger der Benachrichtigung entfernen möchtest?"
|
deleteConfirm: "Bist du sicher, dass du den Empfänger der Benachrichtigung entfernen möchtest?"
|
||||||
_moderationLogTypes:
|
_moderationLogTypes:
|
||||||
|
clearQueue: "Warteschlange leeren"
|
||||||
|
promoteQueue: "Warteschlange erneut ausführen"
|
||||||
createRole: "Rolle erstellt"
|
createRole: "Rolle erstellt"
|
||||||
deleteRole: "Rolle gelöscht"
|
deleteRole: "Rolle gelöscht"
|
||||||
updateRole: "Rolle aktualisiert"
|
updateRole: "Rolle aktualisiert"
|
||||||
@@ -2823,6 +2986,7 @@ _fileViewer:
|
|||||||
url: "URL"
|
url: "URL"
|
||||||
uploadedAt: "Hochgeladen am"
|
uploadedAt: "Hochgeladen am"
|
||||||
attachedNotes: "Zugehörige Notizen"
|
attachedNotes: "Zugehörige Notizen"
|
||||||
|
usage: "Nutzung"
|
||||||
thisPageCanBeSeenFromTheAuthor: "Nur der Benutzer, der diese Datei hochgeladen hat, kann diese Seite sehen."
|
thisPageCanBeSeenFromTheAuthor: "Nur der Benutzer, der diese Datei hochgeladen hat, kann diese Seite sehen."
|
||||||
_externalResourceInstaller:
|
_externalResourceInstaller:
|
||||||
title: "Von externer Seite installieren"
|
title: "Von externer Seite installieren"
|
||||||
@@ -3075,6 +3239,7 @@ _bootErrors:
|
|||||||
otherOption1: "Client-Einstellungen und Cache löschen"
|
otherOption1: "Client-Einstellungen und Cache löschen"
|
||||||
otherOption2: "Einfachen Client starten"
|
otherOption2: "Einfachen Client starten"
|
||||||
otherOption3: "Starte das Reparaturwerkzeug"
|
otherOption3: "Starte das Reparaturwerkzeug"
|
||||||
|
otherOption4: "Misskey im abgesicherten Modus starten"
|
||||||
_search:
|
_search:
|
||||||
searchScopeAll: "Alle"
|
searchScopeAll: "Alle"
|
||||||
searchScopeLocal: "Lokal"
|
searchScopeLocal: "Lokal"
|
||||||
@@ -3111,6 +3276,8 @@ _serverSetupWizard:
|
|||||||
doYouConnectToFediverse_description1: "Bei Anschluss an ein Netz von verteilten Servern (Fediverse) können Inhalte mit anderen Servern ausgetauscht werden."
|
doYouConnectToFediverse_description1: "Bei Anschluss an ein Netz von verteilten Servern (Fediverse) können Inhalte mit anderen Servern ausgetauscht werden."
|
||||||
doYouConnectToFediverse_description2: "Die Verbindung mit dem Fediverse wird auch als „Föderation“ bezeichnet."
|
doYouConnectToFediverse_description2: "Die Verbindung mit dem Fediverse wird auch als „Föderation“ bezeichnet."
|
||||||
youCanConfigureMoreFederationSettingsLater: "Erweiterte Einstellungen, wie z. B. die Angabe von föderierbaren Servern, können später vorgenommen werden."
|
youCanConfigureMoreFederationSettingsLater: "Erweiterte Einstellungen, wie z. B. die Angabe von föderierbaren Servern, können später vorgenommen werden."
|
||||||
|
remoteContentsCleaning: "Automatische Bereinigung von Remote-Inhalten"
|
||||||
|
remoteContentsCleaning_description: "Wenn Sie eine Föderation durchführen, empfangen Sie fortlaufend viele Inhalte. Wenn Sie die automatische Bereinigung aktivieren, werden Remote-Inhalte, deren bestimmter Zeitraum abgelaufen ist, automatisch vom Server gelöscht, wodurch Speicherplatz eingespart werden kann."
|
||||||
adminInfo: "Administrator-Informationen"
|
adminInfo: "Administrator-Informationen"
|
||||||
adminInfo_description: "Legt die Administrator-Informationen fest, die für den Empfang von Anfragen verwendet werden."
|
adminInfo_description: "Legt die Administrator-Informationen fest, die für den Empfang von Anfragen verwendet werden."
|
||||||
adminInfo_mustBeFilled: "Dies ist auf einem offenen Server oder bei aktivierter Föderation erforderlich."
|
adminInfo_mustBeFilled: "Dies ist auf einem offenen Server oder bei aktivierter Föderation erforderlich."
|
||||||
@@ -3135,6 +3302,7 @@ _uploader:
|
|||||||
allowedTypes: "Hochladbare Dateitypen"
|
allowedTypes: "Hochladbare Dateitypen"
|
||||||
tip: "Die Datei ist noch nicht hochgeladen worden. In diesem Dialog kannst du die Datei vor dem Hochladen anzeigen, umbenennen, komprimieren und zuschneiden. Wenn du fertig bist, klicke auf „Hochladen“, um den Upload zu starten."
|
tip: "Die Datei ist noch nicht hochgeladen worden. In diesem Dialog kannst du die Datei vor dem Hochladen anzeigen, umbenennen, komprimieren und zuschneiden. Wenn du fertig bist, klicke auf „Hochladen“, um den Upload zu starten."
|
||||||
_clientPerformanceIssueTip:
|
_clientPerformanceIssueTip:
|
||||||
|
title: "Wenn du das Gefühl hast, dass der Akku sich schnell entlädt."
|
||||||
makeSureDisabledAdBlocker: "Deaktiviere deinen Adblocker"
|
makeSureDisabledAdBlocker: "Deaktiviere deinen Adblocker"
|
||||||
makeSureDisabledAdBlocker_description: "Adblocker können die Leistung beeinträchtigen; vergewissere dich, ob in deinem Betriebssystem, Browser oder deinen Add-ons Adblocker aktiviert sind."
|
makeSureDisabledAdBlocker_description: "Adblocker können die Leistung beeinträchtigen; vergewissere dich, ob in deinem Betriebssystem, Browser oder deinen Add-ons Adblocker aktiviert sind."
|
||||||
makeSureDisabledCustomCss: "Benutzerdefiniertes CSS deaktivieren"
|
makeSureDisabledCustomCss: "Benutzerdefiniertes CSS deaktivieren"
|
||||||
@@ -3154,10 +3322,14 @@ _watermarkEditor:
|
|||||||
driveFileTypeWarnDescription: "Bilddatei auswählen"
|
driveFileTypeWarnDescription: "Bilddatei auswählen"
|
||||||
title: "Wasserzeichen bearbeiten"
|
title: "Wasserzeichen bearbeiten"
|
||||||
cover: "Alles bedecken"
|
cover: "Alles bedecken"
|
||||||
|
repeat: "Wiederholen"
|
||||||
|
preserveBoundingRect: "So einstellen, dass beim Drehen nichts herausragt"
|
||||||
opacity: "Transparenz"
|
opacity: "Transparenz"
|
||||||
scale: "Größe"
|
scale: "Größe"
|
||||||
text: "Text"
|
text: "Text"
|
||||||
|
qr: "QR-Code"
|
||||||
position: "Position"
|
position: "Position"
|
||||||
|
margin: "Abstand"
|
||||||
type: "Art"
|
type: "Art"
|
||||||
image: "Bilder"
|
image: "Bilder"
|
||||||
advanced: "Fortgeschritten"
|
advanced: "Fortgeschritten"
|
||||||
@@ -3166,35 +3338,71 @@ _watermarkEditor:
|
|||||||
stripeWidth: "Linienbreite"
|
stripeWidth: "Linienbreite"
|
||||||
stripeFrequency: "Linienanzahl"
|
stripeFrequency: "Linienanzahl"
|
||||||
polkadot: "Punktmuster"
|
polkadot: "Punktmuster"
|
||||||
|
checker: "Prüfer"
|
||||||
polkadotMainDotOpacity: "Deckkraft des Hauptpunktes"
|
polkadotMainDotOpacity: "Deckkraft des Hauptpunktes"
|
||||||
polkadotMainDotRadius: "Größe des Hauptpunktes"
|
polkadotMainDotRadius: "Größe des Hauptpunktes"
|
||||||
polkadotSubDotOpacity: "Deckkraft des Unterpunktes"
|
polkadotSubDotOpacity: "Deckkraft des Unterpunktes"
|
||||||
polkadotSubDotRadius: "Größe des Unterpunktes"
|
polkadotSubDotRadius: "Größe des Unterpunktes"
|
||||||
polkadotSubDotDivisions: "Anzahl der Unterpunkte"
|
polkadotSubDotDivisions: "Anzahl der Unterpunkte"
|
||||||
|
leaveBlankToAccountUrl: "Wenn Sie es leer lassen, wird das Profilbild des Kontos verwendet."
|
||||||
|
failedToLoadImage: "Bild konnte nicht geladen werden"
|
||||||
_imageEffector:
|
_imageEffector:
|
||||||
title: "Effekte"
|
title: "Effekte"
|
||||||
addEffect: "Effekte hinzufügen"
|
addEffect: "Effekte hinzufügen"
|
||||||
discardChangesConfirm: "Änderungen verwerfen und beenden?"
|
discardChangesConfirm: "Änderungen verwerfen und beenden?"
|
||||||
|
failedToLoadImage: "Bild konnte nicht geladen werden"
|
||||||
_fxs:
|
_fxs:
|
||||||
chromaticAberration: "Chromatische Abweichung"
|
chromaticAberration: "Chromatische Abweichung"
|
||||||
glitch: "Glitch"
|
glitch: "Glitch"
|
||||||
mirror: "Spiegeln"
|
mirror: "Spiegeln"
|
||||||
invert: "Farben umkehren"
|
invert: "Farben umkehren"
|
||||||
grayscale: "Schwarzweiß"
|
grayscale: "Schwarzweiß"
|
||||||
|
blur: "Verwischen"
|
||||||
|
pixelate: "Verpixeln"
|
||||||
colorAdjust: "Farbkorrektur"
|
colorAdjust: "Farbkorrektur"
|
||||||
colorClamp: "Farbkomprimierung"
|
colorClamp: "Farbkomprimierung"
|
||||||
colorClampAdvanced: "Farbkomprimierung (erweitert)"
|
colorClampAdvanced: "Farbkomprimierung (erweitert)"
|
||||||
distort: "Verzerrung"
|
distort: "Verzerrung"
|
||||||
|
threshold: "inarisierun"
|
||||||
|
zoomLines: "Konzentrationslinien"
|
||||||
stripe: "Streifen"
|
stripe: "Streifen"
|
||||||
polkadot: "Punktmuster"
|
polkadot: "Punktmuster"
|
||||||
|
checker: "Prüfer"
|
||||||
|
blockNoise: "Blockrauschen"
|
||||||
|
tearing: "Tearing"
|
||||||
|
fill: "Ausfüllen"
|
||||||
_fxProps:
|
_fxProps:
|
||||||
angle: "Winkel"
|
angle: "Winkel"
|
||||||
scale: "Größe"
|
scale: "Größe"
|
||||||
size: "Größe"
|
size: "Größe"
|
||||||
|
radius: "Radius"
|
||||||
|
samples: "Stichprobengröße"
|
||||||
offset: "Position"
|
offset: "Position"
|
||||||
color: "Farbe"
|
color: "Farbe"
|
||||||
opacity: "Transparenz"
|
opacity: "Transparenz"
|
||||||
|
normalize: "Normalisierung"
|
||||||
|
amount: "Menge"
|
||||||
lightness: "Erhellen"
|
lightness: "Erhellen"
|
||||||
|
contrast: "Kontrast"
|
||||||
|
hue: "Farbton"
|
||||||
|
brightness: "Helligkeit"
|
||||||
|
saturation: "Sättigung"
|
||||||
|
max: "Maximum"
|
||||||
|
min: "Minimum"
|
||||||
|
direction: "Richtung"
|
||||||
|
phase: "Sättigung"
|
||||||
|
frequency: "Häufigkeit"
|
||||||
|
strength: "Stärke"
|
||||||
|
glitchChannelShift: "Verschiebung"
|
||||||
|
seed: "Seed-Wert"
|
||||||
|
redComponent: "Rot-Anteil"
|
||||||
|
greenComponent: "Grün-Anteil"
|
||||||
|
blueComponent: "Blau-Anteil"
|
||||||
|
threshold: "Schwellenwert"
|
||||||
|
centerX: "Zentrum X"
|
||||||
|
centerY: "Zentrum Y"
|
||||||
|
zoomLinesMaskSize: "Mitteldurchmesser"
|
||||||
|
circle: "Kreisförmig"
|
||||||
drafts: "Entwurf"
|
drafts: "Entwurf"
|
||||||
_drafts:
|
_drafts:
|
||||||
select: "Entwurf auswählen"
|
select: "Entwurf auswählen"
|
||||||
@@ -3205,10 +3413,27 @@ _drafts:
|
|||||||
noDrafts: "Keine Entwürfe"
|
noDrafts: "Keine Entwürfe"
|
||||||
replyTo: "Antwort an {user}"
|
replyTo: "Antwort an {user}"
|
||||||
quoteOf: "Zitat von {user}s Notiz"
|
quoteOf: "Zitat von {user}s Notiz"
|
||||||
|
postTo: "Beitrag im {channel}"
|
||||||
saveToDraft: "Als Entwurf speichern"
|
saveToDraft: "Als Entwurf speichern"
|
||||||
restoreFromDraft: "Aus Entwurf wiederherstellen"
|
restoreFromDraft: "Aus Entwurf wiederherstellen"
|
||||||
restore: "Wiederherstellen"
|
restore: "Wiederherstellen"
|
||||||
listDrafts: "Liste der Entwürfe"
|
listDrafts: "Liste der Entwürfe"
|
||||||
|
schedule: "Beitragsplanung"
|
||||||
|
listScheduledNotes: "Liste der geplanten Beiträge"
|
||||||
|
cancelSchedule: "Reservierung stornieren"
|
||||||
|
qr: "QR-Code"
|
||||||
_qr:
|
_qr:
|
||||||
showTabTitle: "Anzeigeart"
|
showTabTitle: "Anzeigeart"
|
||||||
|
readTabTitle: "Auslesen"
|
||||||
|
shareTitle: "{name} {acct}"
|
||||||
|
shareText: "Bitte folge mir im Fediverse!"
|
||||||
|
chooseCamera: "Kamera auswählen"
|
||||||
|
cannotToggleFlash: "Blitzauswahl nicht möglich"
|
||||||
|
turnOnFlash: "Blitz einschalten"
|
||||||
|
turnOffFlash: "Blitz ausschalten"
|
||||||
|
startQr: "QR-Code-Leser starten"
|
||||||
|
stopQr: "QR-Code-Leser stoppen"
|
||||||
|
noQrCodeFound: "QR-Code wurde nicht gefunden"
|
||||||
|
scanFile: "Gerätebilder scannen"
|
||||||
raw: "Text"
|
raw: "Text"
|
||||||
|
mfm: "MFM"
|
||||||
|
|||||||
+53
-5
@@ -83,6 +83,8 @@ files: "Files"
|
|||||||
download: "Download"
|
download: "Download"
|
||||||
driveFileDeleteConfirm: "Are you sure you want to delete \"{name}\"? All notes with this file attached will also be deleted."
|
driveFileDeleteConfirm: "Are you sure you want to delete \"{name}\"? All notes with this file attached will also be deleted."
|
||||||
unfollowConfirm: "Are you sure you want to unfollow {name}?"
|
unfollowConfirm: "Are you sure you want to unfollow {name}?"
|
||||||
|
cancelFollowRequestConfirm: "Are you sure that you want to cancel your follow request to {name}?"
|
||||||
|
rejectFollowRequestConfirm: "Are you sure that you want to reject the follow request from {name}?"
|
||||||
exportRequested: "You've requested an export. This may take a while. It will be added to your Drive once completed."
|
exportRequested: "You've requested an export. This may take a while. It will be added to your Drive once completed."
|
||||||
importRequested: "You've requested an import. This may take a while."
|
importRequested: "You've requested an import. This may take a while."
|
||||||
lists: "Lists"
|
lists: "Lists"
|
||||||
@@ -541,6 +543,7 @@ regenerate: "Regenerate"
|
|||||||
fontSize: "Font size"
|
fontSize: "Font size"
|
||||||
mediaListWithOneImageAppearance: "Height of media lists with one image only"
|
mediaListWithOneImageAppearance: "Height of media lists with one image only"
|
||||||
limitTo: "Limit to {x}"
|
limitTo: "Limit to {x}"
|
||||||
|
showMediaListByGridInWideArea: "Display the media list in a grid when the screen width is wide"
|
||||||
noFollowRequests: "You don't have any pending follow requests"
|
noFollowRequests: "You don't have any pending follow requests"
|
||||||
openImageInNewTab: "Open images in new tab"
|
openImageInNewTab: "Open images in new tab"
|
||||||
dashboard: "Dashboard"
|
dashboard: "Dashboard"
|
||||||
@@ -1404,6 +1407,7 @@ youAreAdmin: "You are admin"
|
|||||||
frame: "Frame"
|
frame: "Frame"
|
||||||
presets: "Preset"
|
presets: "Preset"
|
||||||
zeroPadding: "Zero padding"
|
zeroPadding: "Zero padding"
|
||||||
|
nothingToConfigure: "No configurable options available"
|
||||||
_imageEditing:
|
_imageEditing:
|
||||||
_vars:
|
_vars:
|
||||||
caption: "File caption"
|
caption: "File caption"
|
||||||
@@ -1548,6 +1552,9 @@ _settings:
|
|||||||
showPageTabBarBottom: "Show page tab bar at the bottom"
|
showPageTabBarBottom: "Show page tab bar at the bottom"
|
||||||
emojiPaletteBanner: "You can register presets as palettes to display prominently in the emoji picker or customize the appearance of the picker."
|
emojiPaletteBanner: "You can register presets as palettes to display prominently in the emoji picker or customize the appearance of the picker."
|
||||||
enableAnimatedImages: "Enable animated images"
|
enableAnimatedImages: "Enable animated images"
|
||||||
|
settingsPersistence_title: "Persistence of Settings"
|
||||||
|
settingsPersistence_description1: "Enabling setting persistence prevents configuration information from being lost."
|
||||||
|
settingsPersistence_description2: "It may not be possible to enable this depending on the environment."
|
||||||
_chat:
|
_chat:
|
||||||
showSenderName: "Show sender's name"
|
showSenderName: "Show sender's name"
|
||||||
sendOnEnter: "Press Enter to send"
|
sendOnEnter: "Press Enter to send"
|
||||||
@@ -2539,6 +2546,44 @@ _widgets:
|
|||||||
clicker: "Clicker"
|
clicker: "Clicker"
|
||||||
birthdayFollowings: "Today's Birthdays"
|
birthdayFollowings: "Today's Birthdays"
|
||||||
chat: "Chat with user"
|
chat: "Chat with user"
|
||||||
|
_widgetOptions:
|
||||||
|
showHeader: "Show header"
|
||||||
|
transparent: "Make background transparent"
|
||||||
|
height: "Height"
|
||||||
|
_button:
|
||||||
|
colored: "Colored"
|
||||||
|
_clock:
|
||||||
|
size: "Size"
|
||||||
|
thickness: "Needle thickness"
|
||||||
|
thicknessThin: "Thin"
|
||||||
|
thicknessMedium: "Normal"
|
||||||
|
thicknessThick: "Thick"
|
||||||
|
graduations: "Dial markings"
|
||||||
|
graduationDots: "Dot"
|
||||||
|
graduationArabic: "Arabic numbers"
|
||||||
|
fadeGraduations: "Fade the scale"
|
||||||
|
sAnimation: "Second hand animation"
|
||||||
|
sAnimationElastic: "Real"
|
||||||
|
sAnimationEaseOut: "Smooth"
|
||||||
|
twentyFour: "24 Hour Format"
|
||||||
|
labelTime: "Time"
|
||||||
|
labelTz: "Timezone"
|
||||||
|
labelTimeAndTz: "Time and time zone"
|
||||||
|
timezone: "Timezone"
|
||||||
|
showMs: "Show Miliseconds"
|
||||||
|
showLabel: "Show Label"
|
||||||
|
_jobQueue:
|
||||||
|
sound: "Play Sounds"
|
||||||
|
_rss:
|
||||||
|
url: "RSS Feed Url"
|
||||||
|
refreshIntervalSec: "Update interval (in seconds)"
|
||||||
|
maxEntries: "Maximum number of items to display"
|
||||||
|
_rssTicker:
|
||||||
|
shuffle: "Random display order"
|
||||||
|
duration: "Banner scroll speed (in seconds)"
|
||||||
|
reverse: "Scroll in the opposite direction"
|
||||||
|
_birthdayFollowings:
|
||||||
|
period: "Duration"
|
||||||
_cw:
|
_cw:
|
||||||
hide: "Hide"
|
hide: "Hide"
|
||||||
show: "Show content"
|
show: "Show content"
|
||||||
@@ -2814,6 +2859,14 @@ _deck:
|
|||||||
usedAsMinWidthWhenFlexible: "Minimum width will be used for this when the \"Auto-adjust width\" option is enabled"
|
usedAsMinWidthWhenFlexible: "Minimum width will be used for this when the \"Auto-adjust width\" option is enabled"
|
||||||
flexible: "Auto-adjust width"
|
flexible: "Auto-adjust width"
|
||||||
enableSyncBetweenDevicesForProfiles: "Enable profile information sync between devices"
|
enableSyncBetweenDevicesForProfiles: "Enable profile information sync between devices"
|
||||||
|
showHowToUse: ""
|
||||||
|
_howToUse:
|
||||||
|
addColumn_title: "Add column"
|
||||||
|
addColumn_description: "You can select and add column types."
|
||||||
|
settings_title: "UI Settings"
|
||||||
|
settings_description: "You can configure detailed settings for the deck UI."
|
||||||
|
switchProfile_title: "Profile Switching"
|
||||||
|
switchProfile_description: "You can save UI layouts as profiles and switch between them at any time."
|
||||||
_columns:
|
_columns:
|
||||||
main: "Main"
|
main: "Main"
|
||||||
widgets: "Widgets"
|
widgets: "Widgets"
|
||||||
@@ -3297,7 +3350,6 @@ _imageEffector:
|
|||||||
title: "Effects"
|
title: "Effects"
|
||||||
addEffect: "Add Effects"
|
addEffect: "Add Effects"
|
||||||
discardChangesConfirm: "Are you sure you want to leave? You have unsaved changes."
|
discardChangesConfirm: "Are you sure you want to leave? You have unsaved changes."
|
||||||
nothingToConfigure: "No configurable options available"
|
|
||||||
failedToLoadImage: "Failed to load image"
|
failedToLoadImage: "Failed to load image"
|
||||||
_fxs:
|
_fxs:
|
||||||
chromaticAberration: "Chromatic Aberration"
|
chromaticAberration: "Chromatic Aberration"
|
||||||
@@ -3349,11 +3401,7 @@ _imageEffector:
|
|||||||
threshold: "Threshold"
|
threshold: "Threshold"
|
||||||
centerX: "Center X"
|
centerX: "Center X"
|
||||||
centerY: "Center Y"
|
centerY: "Center Y"
|
||||||
zoomLinesSmoothing: "Smoothing"
|
|
||||||
zoomLinesSmoothingDescription: "Smoothing and zoom line width cannot be used together."
|
|
||||||
zoomLinesThreshold: "Zoom line width"
|
|
||||||
zoomLinesMaskSize: "Center diameter"
|
zoomLinesMaskSize: "Center diameter"
|
||||||
zoomLinesBlack: "Make black"
|
|
||||||
circle: "Circular"
|
circle: "Circular"
|
||||||
drafts: "Drafts"
|
drafts: "Drafts"
|
||||||
_drafts:
|
_drafts:
|
||||||
|
|||||||
+61
-13
@@ -543,6 +543,7 @@ regenerate: "Regenerar"
|
|||||||
fontSize: "Tamaño de la letra"
|
fontSize: "Tamaño de la letra"
|
||||||
mediaListWithOneImageAppearance: "Altura de la lista de medios con una sola imagen."
|
mediaListWithOneImageAppearance: "Altura de la lista de medios con una sola imagen."
|
||||||
limitTo: "{x} hasta un máximo de"
|
limitTo: "{x} hasta un máximo de"
|
||||||
|
showMediaListByGridInWideArea: "Cuando el ancho de la pantalla sea grande, muestra la lista de multimedia uno al lado del otro."
|
||||||
noFollowRequests: "No hay solicitudes de seguimiento"
|
noFollowRequests: "No hay solicitudes de seguimiento"
|
||||||
openImageInNewTab: "Abrir imagen en nueva pestaña"
|
openImageInNewTab: "Abrir imagen en nueva pestaña"
|
||||||
dashboard: "Panel de control"
|
dashboard: "Panel de control"
|
||||||
@@ -1252,7 +1253,7 @@ detachAll: "Quitar todo"
|
|||||||
angle: "Ángulo"
|
angle: "Ángulo"
|
||||||
flip: "Echar de un capirotazo"
|
flip: "Echar de un capirotazo"
|
||||||
showAvatarDecorations: "Mostrar decoraciones de avatar"
|
showAvatarDecorations: "Mostrar decoraciones de avatar"
|
||||||
releaseToRefresh: "Soltar para recargar"
|
releaseToRefresh: "Suelta para recargar"
|
||||||
refreshing: "Recargando..."
|
refreshing: "Recargando..."
|
||||||
pullDownToRefresh: "Tira hacia abajo para recargar"
|
pullDownToRefresh: "Tira hacia abajo para recargar"
|
||||||
useGroupedNotifications: "Mostrar notificaciones agrupadas"
|
useGroupedNotifications: "Mostrar notificaciones agrupadas"
|
||||||
@@ -1406,6 +1407,7 @@ youAreAdmin: "Eres administrador."
|
|||||||
frame: "Marco"
|
frame: "Marco"
|
||||||
presets: "Predefinido"
|
presets: "Predefinido"
|
||||||
zeroPadding: "Relleno cero"
|
zeroPadding: "Relleno cero"
|
||||||
|
nothingToConfigure: "No hay nada que configurar"
|
||||||
_imageEditing:
|
_imageEditing:
|
||||||
_vars:
|
_vars:
|
||||||
caption: "Título del archivo"
|
caption: "Título del archivo"
|
||||||
@@ -1550,6 +1552,9 @@ _settings:
|
|||||||
showPageTabBarBottom: "Mostrar la barra de pestañas de la página en la parte inferior."
|
showPageTabBarBottom: "Mostrar la barra de pestañas de la página en la parte inferior."
|
||||||
emojiPaletteBanner: "Puedes registrar ajustes preestablecidos como paletas para que se muestren permanentemente en el selector de emojis, o personalizar el método de visualización del selector."
|
emojiPaletteBanner: "Puedes registrar ajustes preestablecidos como paletas para que se muestren permanentemente en el selector de emojis, o personalizar el método de visualización del selector."
|
||||||
enableAnimatedImages: "Habilitar imágenes animadas"
|
enableAnimatedImages: "Habilitar imágenes animadas"
|
||||||
|
settingsPersistence_title: "Persistencia de la configuración"
|
||||||
|
settingsPersistence_description1: "Habilitar la persistencia de la configuración evita que se pierda la información de configuración."
|
||||||
|
settingsPersistence_description2: "Es posible que no se pueda habilitar esta función dependiendo del entorno."
|
||||||
_chat:
|
_chat:
|
||||||
showSenderName: "Mostrar el nombre del remitente"
|
showSenderName: "Mostrar el nombre del remitente"
|
||||||
sendOnEnter: "Intro para enviar"
|
sendOnEnter: "Intro para enviar"
|
||||||
@@ -1670,9 +1675,9 @@ _initialTutorial:
|
|||||||
title: "El concepto de Línea de tiempo"
|
title: "El concepto de Línea de tiempo"
|
||||||
description1: "Misskey proporciona múltiples líneas de tiempo basadas en su uso (algunas pueden no estar disponibles dependiendo de las políticas de la instancia)."
|
description1: "Misskey proporciona múltiples líneas de tiempo basadas en su uso (algunas pueden no estar disponibles dependiendo de las políticas de la instancia)."
|
||||||
home: "Puedes ver los posts de las cuentas que sigues."
|
home: "Puedes ver los posts de las cuentas que sigues."
|
||||||
local: "Puedes ver los posts de todos los usuarios de este servidor."
|
local: "Puedes ver los posts de todos los usuarios de este servidor (también llamado instancia)."
|
||||||
social: "Se ven los posts de la línea de tiempo de inicio junto con los de la línea de tiempo local."
|
social: "Se ven los posts de la línea de tiempo de inicio junto con los de la línea de tiempo local."
|
||||||
global: "Puedes ver notas de todos los servidores conectados."
|
global: "Puedes ver notas de todos los servidores (instancias) conectados."
|
||||||
description2: "Puedes cambiar la línea de tiempo en la parte superior de la pantalla cuando quieras."
|
description2: "Puedes cambiar la línea de tiempo en la parte superior de la pantalla cuando quieras."
|
||||||
description3: "Además, hay listas de líneas de tiempo y listas de canales. Para más detalle, por favor visita este enlace: {link}"
|
description3: "Además, hay listas de líneas de tiempo y listas de canales. Para más detalle, por favor visita este enlace: {link}"
|
||||||
_postNote:
|
_postNote:
|
||||||
@@ -1682,14 +1687,14 @@ _initialTutorial:
|
|||||||
description: "Puedes limitar quién puede ver tu nota."
|
description: "Puedes limitar quién puede ver tu nota."
|
||||||
public: "Tu nota será visible para todos los usuarios."
|
public: "Tu nota será visible para todos los usuarios."
|
||||||
home: "Publicar solo en la línea de tiempo de Inicio. La nota se verá en tu perfil, la verán tus seguidores y también cuando sea renotada."
|
home: "Publicar solo en la línea de tiempo de Inicio. La nota se verá en tu perfil, la verán tus seguidores y también cuando sea renotada."
|
||||||
followers: "Visible solo para seguidores. Sólo tus seguidores podrán ver la nota, y no podrá ser renotada por otras personas."
|
followers: "Visible solo para seguidores. Solo tus seguidores podrán ver la nota, y no podrá ser renotada por otras personas."
|
||||||
direct: "Visible sólo para usuarios específicos, y el destinatario será notificado. Puede usarse como alternativa a la mensajería directa."
|
direct: "Visible sólo para usuarios específicos, y el destinatario será notificado. Puede usarse como alternativa a la mensajería directa."
|
||||||
doNotSendConfidencialOnDirect1: "¡Ten cuidado cuando vayas a enviar información sensible!"
|
doNotSendConfidencialOnDirect1: "¡Ten cuidado cuando vayas a enviar información sensible!"
|
||||||
doNotSendConfidencialOnDirect2: "Los administradores del servidor, también llamado instancia, pueden leer lo que escribes. Ten cuidado cuando envíes información sensible en notas directas en servidores o instancias no confiables."
|
doNotSendConfidencialOnDirect2: "Los administradores del servidor, también llamado instancia, pueden leer lo que escribes. Ten cuidado cuando envíes información sensible en notas directas en servidores o instancias no confiables."
|
||||||
localOnly: "Publicando con esta opción seleccionada, la nota no se federará hacia otros servidores. Los usuarios de otros servidores no podrán ver estas notas directamente, sin importar los ajustes seleccionados más arriba."
|
localOnly: "Publicando con esta opción seleccionada, la nota no se federará hacia otros servidores. Los usuarios de otros servidores no podrán ver estas notas directamente, sin importar los ajustes seleccionados más arriba."
|
||||||
_cw:
|
_cw:
|
||||||
title: "Alerta de contenido (CW)"
|
title: "Alerta de contenido (CW)"
|
||||||
description: "En lugar de mostrarse el contenido de la nota, se mostrará lo que escribas en el campo \"comentarios\". Pulsando en \"leer más\" desplegará el contenido de la nota."
|
description: "En lugar de mostrarse el contenido de la nota, se mostrará lo que escribas en el campo \"comentarios\". Pulsando en \"Ver más\" desplegará el contenido de la nota."
|
||||||
_exampleNote:
|
_exampleNote:
|
||||||
cw: "¡Esto te hará tener hambre!"
|
cw: "¡Esto te hará tener hambre!"
|
||||||
note: "Acabo de comerme un donut de chocolate glaseado 🍩😋"
|
note: "Acabo de comerme un donut de chocolate glaseado 🍩😋"
|
||||||
@@ -2207,7 +2212,7 @@ _registry:
|
|||||||
key: "Clave"
|
key: "Clave"
|
||||||
keys: "Clave"
|
keys: "Clave"
|
||||||
domain: "Dominio"
|
domain: "Dominio"
|
||||||
createKey: "Crear una llave"
|
createKey: "Crear una clave"
|
||||||
_aboutMisskey:
|
_aboutMisskey:
|
||||||
about: "Misskey es un software de código abierto, desarrollado por syuilo desde el 2014"
|
about: "Misskey es un software de código abierto, desarrollado por syuilo desde el 2014"
|
||||||
contributors: "Principales colaboradores"
|
contributors: "Principales colaboradores"
|
||||||
@@ -2541,6 +2546,44 @@ _widgets:
|
|||||||
clicker: "Cliqueador"
|
clicker: "Cliqueador"
|
||||||
birthdayFollowings: "Hoy cumplen años"
|
birthdayFollowings: "Hoy cumplen años"
|
||||||
chat: "Chatear"
|
chat: "Chatear"
|
||||||
|
_widgetOptions:
|
||||||
|
showHeader: "Mostrar encabezados"
|
||||||
|
transparent: "Hacer fondo transparente"
|
||||||
|
height: "Altura"
|
||||||
|
_button:
|
||||||
|
colored: "Color"
|
||||||
|
_clock:
|
||||||
|
size: "Tamaño"
|
||||||
|
thickness: "Grosor de la aguja"
|
||||||
|
thicknessThin: "Delgada"
|
||||||
|
thicknessMedium: "Normal"
|
||||||
|
thicknessThick: "Gruesa"
|
||||||
|
graduations: "Marcas del dial"
|
||||||
|
graduationDots: "Puntos"
|
||||||
|
graduationArabic: "Números decimales"
|
||||||
|
fadeGraduations: "Desvanecer la escala"
|
||||||
|
sAnimation: "Animación de la manecilla de los segundos"
|
||||||
|
sAnimationElastic: "Real"
|
||||||
|
sAnimationEaseOut: "Suave"
|
||||||
|
twentyFour: "Formato 24 horas"
|
||||||
|
labelTime: "Hora"
|
||||||
|
labelTz: "Zona horaria"
|
||||||
|
labelTimeAndTz: "Hora y zona horaria"
|
||||||
|
timezone: "Zona horaria"
|
||||||
|
showMs: "Mostrar milisegundos"
|
||||||
|
showLabel: "Mostrar etiqueta"
|
||||||
|
_jobQueue:
|
||||||
|
sound: "Reproducir sonido"
|
||||||
|
_rss:
|
||||||
|
url: "URL del canal RSS"
|
||||||
|
refreshIntervalSec: "Intervalo de actualización (En segundos)"
|
||||||
|
maxEntries: "Número máximo de elementos a mostrar"
|
||||||
|
_rssTicker:
|
||||||
|
shuffle: "Orden de visualización aleatorio"
|
||||||
|
duration: "Velocidad de desplazamiento del baner (En segundos)"
|
||||||
|
reverse: "Desplázate en la dirección opuesta."
|
||||||
|
_birthdayFollowings:
|
||||||
|
period: "Duración"
|
||||||
_cw:
|
_cw:
|
||||||
hide: "Ocultar"
|
hide: "Ocultar"
|
||||||
show: "Ver más"
|
show: "Ver más"
|
||||||
@@ -2816,6 +2859,14 @@ _deck:
|
|||||||
usedAsMinWidthWhenFlexible: "Se usará el ancho mínimo cuando la opción \"Autoajustar ancho\" esté habilitada"
|
usedAsMinWidthWhenFlexible: "Se usará el ancho mínimo cuando la opción \"Autoajustar ancho\" esté habilitada"
|
||||||
flexible: "Autoajustar ancho"
|
flexible: "Autoajustar ancho"
|
||||||
enableSyncBetweenDevicesForProfiles: "Activar la sincronización de la información de perfiles entre dispositivos."
|
enableSyncBetweenDevicesForProfiles: "Activar la sincronización de la información de perfiles entre dispositivos."
|
||||||
|
showHowToUse: "Ver la descripción de la interfaz de usuario"
|
||||||
|
_howToUse:
|
||||||
|
addColumn_title: "Añadir columna"
|
||||||
|
addColumn_description: "Puede seleccionar y añadir tipos de columnas."
|
||||||
|
settings_title: "Configuración de la interfaz de usuario"
|
||||||
|
settings_description: "Puedes configurar la interfaz de usuario en detalle."
|
||||||
|
switchProfile_title: "Cambiar de perfil"
|
||||||
|
switchProfile_description: "Puedes guardar diseños de interfaz de usuario como perfiles y cambiar entre ellos en cualquier momento."
|
||||||
_columns:
|
_columns:
|
||||||
main: "Principal"
|
main: "Principal"
|
||||||
widgets: "Widgets"
|
widgets: "Widgets"
|
||||||
@@ -3145,8 +3196,8 @@ _selfXssPrevention:
|
|||||||
description2: "Si no entiendes que estás pegando exactamente, %cdetente ahora mismo y cierra esta ventana"
|
description2: "Si no entiendes que estás pegando exactamente, %cdetente ahora mismo y cierra esta ventana"
|
||||||
description3: "Para más información visita esto {link}"
|
description3: "Para más información visita esto {link}"
|
||||||
_followRequest:
|
_followRequest:
|
||||||
recieved: "Petición de seguimiento recibida"
|
recieved: "Solicitud de seguimiento recibida"
|
||||||
sent: "Petición de seguimiento enviada"
|
sent: "Solicitud de seguimiento enviada"
|
||||||
_remoteLookupErrors:
|
_remoteLookupErrors:
|
||||||
_federationNotAllowed:
|
_federationNotAllowed:
|
||||||
title: "Incapaz de comunicarse con este servidor."
|
title: "Incapaz de comunicarse con este servidor."
|
||||||
@@ -3299,7 +3350,6 @@ _imageEffector:
|
|||||||
title: "Efecto"
|
title: "Efecto"
|
||||||
addEffect: "Añadir Efecto"
|
addEffect: "Añadir Efecto"
|
||||||
discardChangesConfirm: "¿Ignorar cambios y salir?"
|
discardChangesConfirm: "¿Ignorar cambios y salir?"
|
||||||
nothingToConfigure: "No hay opciones configurables disponibles."
|
|
||||||
failedToLoadImage: "Error al cargar la imagen"
|
failedToLoadImage: "Error al cargar la imagen"
|
||||||
_fxs:
|
_fxs:
|
||||||
chromaticAberration: "Aberración Cromática"
|
chromaticAberration: "Aberración Cromática"
|
||||||
@@ -3351,11 +3401,9 @@ _imageEffector:
|
|||||||
threshold: "Umbral"
|
threshold: "Umbral"
|
||||||
centerX: "Centrar X"
|
centerX: "Centrar X"
|
||||||
centerY: "Centrar Y"
|
centerY: "Centrar Y"
|
||||||
zoomLinesSmoothing: "Suavizado"
|
density: "Densidad"
|
||||||
zoomLinesSmoothingDescription: "El suavizado y el ancho de línea de zoom no se pueden utilizar juntos."
|
zoomLinesOutlineThickness: "Grosor del borde"
|
||||||
zoomLinesThreshold: "Ancho de línea del zoom"
|
|
||||||
zoomLinesMaskSize: "Diámetro del centro"
|
zoomLinesMaskSize: "Diámetro del centro"
|
||||||
zoomLinesBlack: "Cambiar color de las líneas de impacto a negro."
|
|
||||||
circle: "Círculo"
|
circle: "Círculo"
|
||||||
drafts: "Borrador"
|
drafts: "Borrador"
|
||||||
_drafts:
|
_drafts:
|
||||||
|
|||||||
+21
-3
@@ -5,11 +5,12 @@ introMisskey: "Bienvenue ! Misskey est un service de microblogage décentralis
|
|||||||
poweredByMisskeyDescription: "{name} est l'un des services propulsés par la plateforme ouverte <b>Misskey</b> (appelée \"instance Misskey\")."
|
poweredByMisskeyDescription: "{name} est l'un des services propulsés par la plateforme ouverte <b>Misskey</b> (appelée \"instance Misskey\")."
|
||||||
monthAndDay: "{day}/{month}"
|
monthAndDay: "{day}/{month}"
|
||||||
search: "Rechercher"
|
search: "Rechercher"
|
||||||
|
reset: "Réinitialiser"
|
||||||
notifications: "Notifications"
|
notifications: "Notifications"
|
||||||
username: "Nom d’utilisateur·rice"
|
username: "Nom d’utilisateur·rice"
|
||||||
password: "Mot de passe"
|
password: "Mot de passe"
|
||||||
initialPasswordForSetup: "Mot de passe initial pour la configuration"
|
initialPasswordForSetup: "Mot de passe initial pour la configuration"
|
||||||
initialPasswordIsIncorrect: "Mot de passe initial pour la configuration est incorrecte"
|
initialPasswordIsIncorrect: "Le mot de passe initial pour la configuration est incorrect"
|
||||||
initialPasswordForSetupDescription: "Utilisez le mot de passe que vous avez entré pour le fichier de configuration si vous avez installé Misskey vous-même.\nSi vous utilisez un service d'hébergement Misskey, utilisez le mot de passe fourni.\nSi vous n'avez pas défini de mot de passe, laissez le champ vide pour continuer."
|
initialPasswordForSetupDescription: "Utilisez le mot de passe que vous avez entré pour le fichier de configuration si vous avez installé Misskey vous-même.\nSi vous utilisez un service d'hébergement Misskey, utilisez le mot de passe fourni.\nSi vous n'avez pas défini de mot de passe, laissez le champ vide pour continuer."
|
||||||
forgotPassword: "Mot de passe oublié"
|
forgotPassword: "Mot de passe oublié"
|
||||||
fetchingAsApObject: "Récupération depuis le fédiverse …"
|
fetchingAsApObject: "Récupération depuis le fédiverse …"
|
||||||
@@ -48,6 +49,7 @@ pin: "Épingler sur le profil"
|
|||||||
unpin: "Désépingler"
|
unpin: "Désépingler"
|
||||||
copyContent: "Copier le contenu"
|
copyContent: "Copier le contenu"
|
||||||
copyLink: "Copier le lien"
|
copyLink: "Copier le lien"
|
||||||
|
copyRemoteLink: "Copier le lien de la note"
|
||||||
copyLinkRenote: "Copier le lien de la renote"
|
copyLinkRenote: "Copier le lien de la renote"
|
||||||
delete: "Supprimer"
|
delete: "Supprimer"
|
||||||
deleteAndEdit: "Supprimer et réécrire"
|
deleteAndEdit: "Supprimer et réécrire"
|
||||||
@@ -62,8 +64,8 @@ copyNoteId: "Copier l'identifiant de la note"
|
|||||||
copyFileId: "Copier l'identifiant du fichier"
|
copyFileId: "Copier l'identifiant du fichier"
|
||||||
copyFolderId: "Copier l'identifiant du dossier"
|
copyFolderId: "Copier l'identifiant du dossier"
|
||||||
copyProfileUrl: "Copier l'URL du profil"
|
copyProfileUrl: "Copier l'URL du profil"
|
||||||
searchUser: "Chercher un·e utilisateur·rice"
|
searchUser: "Chercher un utilisateur"
|
||||||
searchThisUsersNotes: "Cherchez les notes de cet·te utilisateur·rice"
|
searchThisUsersNotes: "Cherchez les notes de cet utilisateur"
|
||||||
reply: "Répondre"
|
reply: "Répondre"
|
||||||
loadMore: "Afficher plus …"
|
loadMore: "Afficher plus …"
|
||||||
showMore: "Voir plus"
|
showMore: "Voir plus"
|
||||||
@@ -81,6 +83,8 @@ files: "Fichiers"
|
|||||||
download: "Télécharger"
|
download: "Télécharger"
|
||||||
driveFileDeleteConfirm: "Êtes-vous sûr·e de vouloir supprimer le fichier « {name} » ? Les notes avec ce fichier joint seront aussi supprimées."
|
driveFileDeleteConfirm: "Êtes-vous sûr·e de vouloir supprimer le fichier « {name} » ? Les notes avec ce fichier joint seront aussi supprimées."
|
||||||
unfollowConfirm: "Désirez-vous vous désabonner de {name} ?"
|
unfollowConfirm: "Désirez-vous vous désabonner de {name} ?"
|
||||||
|
cancelFollowRequestConfirm: "Est-te vous sur de vouloir annuler la demande de suivi de {name} ?"
|
||||||
|
rejectFollowRequestConfirm: "Refuser la demande de suivi de {name} ?"
|
||||||
exportRequested: "Vous avez demandé une exportation. L’opération pourrait prendre un peu de temps. Une fois terminée, le fichier sera ajouté au Drive."
|
exportRequested: "Vous avez demandé une exportation. L’opération pourrait prendre un peu de temps. Une fois terminée, le fichier sera ajouté au Drive."
|
||||||
importRequested: "Vous avez initié un import. Cela pourrait prendre un peu de temps."
|
importRequested: "Vous avez initié un import. Cela pourrait prendre un peu de temps."
|
||||||
lists: "Listes"
|
lists: "Listes"
|
||||||
@@ -118,6 +122,8 @@ cantReRenote: "Impossible de renoter une Renote."
|
|||||||
quote: "Citer"
|
quote: "Citer"
|
||||||
inChannelRenote: "Renoter dans le canal"
|
inChannelRenote: "Renoter dans le canal"
|
||||||
inChannelQuote: "Citer dans le canal"
|
inChannelQuote: "Citer dans le canal"
|
||||||
|
renoteToChannel: "Renoter sur le canal"
|
||||||
|
renoteToOtherChannel: "Renoter sur un autre canal"
|
||||||
pinnedNote: "Note épinglée"
|
pinnedNote: "Note épinglée"
|
||||||
pinned: "Épingler sur le profil"
|
pinned: "Épingler sur le profil"
|
||||||
you: "Vous"
|
you: "Vous"
|
||||||
@@ -212,6 +218,7 @@ blockThisInstance: "Bloquer cette instance"
|
|||||||
silenceThisInstance: "Mettre cette instance en sourdine"
|
silenceThisInstance: "Mettre cette instance en sourdine"
|
||||||
operations: "Opérations"
|
operations: "Opérations"
|
||||||
software: "Logiciel"
|
software: "Logiciel"
|
||||||
|
softwareName: "Nom du logiciel"
|
||||||
version: "Version"
|
version: "Version"
|
||||||
metadata: "Métadonnées"
|
metadata: "Métadonnées"
|
||||||
withNFiles: "{n} fichier(s)"
|
withNFiles: "{n} fichier(s)"
|
||||||
@@ -231,6 +238,9 @@ blockedInstances: "Instances bloquées"
|
|||||||
blockedInstancesDescription: "Listez les instances que vous désirez bloquer, une par ligne. Ces instances ne seront plus en capacité d'interagir avec votre instance."
|
blockedInstancesDescription: "Listez les instances que vous désirez bloquer, une par ligne. Ces instances ne seront plus en capacité d'interagir avec votre instance."
|
||||||
silencedInstances: "Instances mises en sourdine"
|
silencedInstances: "Instances mises en sourdine"
|
||||||
silencedInstancesDescription: "Énumérer les noms d'hôte des instances à mettre en sourdine. Tous les comptes des instances énumérées seront traités comme mis en sourdine, ne peuvent faire que des demandes de suivi et ne peuvent pas mentionner les comptes locaux s'ils ne sont pas suivis. Cela n'affectera pas les instances bloquées."
|
silencedInstancesDescription: "Énumérer les noms d'hôte des instances à mettre en sourdine. Tous les comptes des instances énumérées seront traités comme mis en sourdine, ne peuvent faire que des demandes de suivi et ne peuvent pas mentionner les comptes locaux s'ils ne sont pas suivis. Cela n'affectera pas les instances bloquées."
|
||||||
|
mediaSilencedInstances: "Médias silencieux sur ces instances"
|
||||||
|
mediaSilencedInstancesDescription: "Liste des noms de serveurs où vous voulez que les médias soient silencieux, séparés par un retour à la ligne.\nTous les comptes des instances listées seront considérés comme sensibles, et ne peuvent pas utilisés d'émojis personnalisés. Ceci n'affectera pas les serveurs bloquées."
|
||||||
|
federationAllowedHosts: "Serveurs qui autorisent la fédération"
|
||||||
muteAndBlock: "Masqué·e·s / Bloqué·e·s"
|
muteAndBlock: "Masqué·e·s / Bloqué·e·s"
|
||||||
mutedUsers: "Utilisateur·rice·s en sourdine"
|
mutedUsers: "Utilisateur·rice·s en sourdine"
|
||||||
blockedUsers: "Utilisateur·rice·s bloqué·e·s"
|
blockedUsers: "Utilisateur·rice·s bloqué·e·s"
|
||||||
@@ -2005,6 +2015,14 @@ _widgets:
|
|||||||
_userList:
|
_userList:
|
||||||
chooseList: "Sélectionner une liste"
|
chooseList: "Sélectionner une liste"
|
||||||
birthdayFollowings: "Utilisateurs qui fêtent l'anniversaire aujourd'hui"
|
birthdayFollowings: "Utilisateurs qui fêtent l'anniversaire aujourd'hui"
|
||||||
|
_widgetOptions:
|
||||||
|
height: "Hauteur"
|
||||||
|
_button:
|
||||||
|
colored: "Coloré"
|
||||||
|
_clock:
|
||||||
|
size: "Taille"
|
||||||
|
_birthdayFollowings:
|
||||||
|
period: "Durée"
|
||||||
_cw:
|
_cw:
|
||||||
hide: "Masquer"
|
hide: "Masquer"
|
||||||
show: "Afficher le contenu"
|
show: "Afficher le contenu"
|
||||||
|
|||||||
@@ -2209,6 +2209,14 @@ _widgets:
|
|||||||
clicker: "Pengeklik"
|
clicker: "Pengeklik"
|
||||||
birthdayFollowings: "Pengguna yang merayakan hari ulang tahunnya hari ini"
|
birthdayFollowings: "Pengguna yang merayakan hari ulang tahunnya hari ini"
|
||||||
chat: "Obrolan pengguna"
|
chat: "Obrolan pengguna"
|
||||||
|
_widgetOptions:
|
||||||
|
height: "Tinggi"
|
||||||
|
_button:
|
||||||
|
colored: "Diwarnai"
|
||||||
|
_clock:
|
||||||
|
size: "Ukuran"
|
||||||
|
_birthdayFollowings:
|
||||||
|
period: "Durasi"
|
||||||
_cw:
|
_cw:
|
||||||
hide: "Sembunyikan"
|
hide: "Sembunyikan"
|
||||||
show: "Lihat konten"
|
show: "Lihat konten"
|
||||||
|
|||||||
+112
-64
@@ -127,7 +127,7 @@ renoteToOtherChannel: "Rinota a un altro canale"
|
|||||||
pinnedNote: "Nota in primo piano"
|
pinnedNote: "Nota in primo piano"
|
||||||
pinned: "Fissa sul profilo"
|
pinned: "Fissa sul profilo"
|
||||||
you: "Tu"
|
you: "Tu"
|
||||||
clickToShow: "Contenuto occultato, cliccare solo se si intende vedere"
|
clickToShow: "Media nascosto, cliccare solo se si intende vedere"
|
||||||
sensitive: "Esplicito"
|
sensitive: "Esplicito"
|
||||||
add: "Aggiungi"
|
add: "Aggiungi"
|
||||||
reaction: "Reazioni"
|
reaction: "Reazioni"
|
||||||
@@ -543,6 +543,7 @@ regenerate: "Generare di nuovo"
|
|||||||
fontSize: "Dimensione carattere"
|
fontSize: "Dimensione carattere"
|
||||||
mediaListWithOneImageAppearance: "Altezza dell'elenco media con una sola immagine "
|
mediaListWithOneImageAppearance: "Altezza dell'elenco media con una sola immagine "
|
||||||
limitTo: "Limita a {x}"
|
limitTo: "Limita a {x}"
|
||||||
|
showMediaListByGridInWideArea: "Quando la larghezza dello schermo è ampia, mostra i media affiancati"
|
||||||
noFollowRequests: "Non ci sono richieste di relazione"
|
noFollowRequests: "Non ci sono richieste di relazione"
|
||||||
openImageInNewTab: "Apri le immagini in un nuovo tab"
|
openImageInNewTab: "Apri le immagini in un nuovo tab"
|
||||||
dashboard: "Pannello di controllo"
|
dashboard: "Pannello di controllo"
|
||||||
@@ -556,7 +557,7 @@ clientSettings: "Impostazioni client"
|
|||||||
accountSettings: "Impostazioni profilo"
|
accountSettings: "Impostazioni profilo"
|
||||||
promotion: "Promossa"
|
promotion: "Promossa"
|
||||||
promote: "Pubblicizza"
|
promote: "Pubblicizza"
|
||||||
numberOfDays: "Numero di giorni"
|
numberOfDays: ""
|
||||||
hideThisNote: "Nasconda la nota"
|
hideThisNote: "Nasconda la nota"
|
||||||
showFeaturedNotesInTimeline: "Mostrare le note di tendenza nella tua timeline"
|
showFeaturedNotesInTimeline: "Mostrare le note di tendenza nella tua timeline"
|
||||||
objectStorage: "Storage S3"
|
objectStorage: "Storage S3"
|
||||||
@@ -613,7 +614,7 @@ descendingOrder: "Diminuisce"
|
|||||||
scratchpad: "ScratchPad"
|
scratchpad: "ScratchPad"
|
||||||
scratchpadDescription: "Lo Scratchpad offre un ambiente per esperimenti di AiScript. È possibile scrivere, eseguire e confermare i risultati dell'interazione del codice con Misskey."
|
scratchpadDescription: "Lo Scratchpad offre un ambiente per esperimenti di AiScript. È possibile scrivere, eseguire e confermare i risultati dell'interazione del codice con Misskey."
|
||||||
uiInspector: "UI Inspector"
|
uiInspector: "UI Inspector"
|
||||||
uiInspectorDescription: "Puoi visualizzare un elenco di elementi UI presenti in memoria. I componenti dell'interfaccia utente vengono generati dalle funzioni Ui:C:."
|
uiInspectorDescription: "Puoi visualizzare un elenco di elementi grafici presenti in memoria. I componenti dell'interfaccia grafica vengono generati dalle funzioni Ui:C:."
|
||||||
output: "Output"
|
output: "Output"
|
||||||
script: "Script"
|
script: "Script"
|
||||||
disablePagesScript: "Disabilitare AiScript nelle pagine"
|
disablePagesScript: "Disabilitare AiScript nelle pagine"
|
||||||
@@ -701,7 +702,7 @@ hardWordMuteDescription: "Ignora le Note con la parola o la regola specificata.
|
|||||||
regexpError: "errore regex"
|
regexpError: "errore regex"
|
||||||
regexpErrorDescription: "Si è verificato un errore nell'espressione regolare alla riga {line} della parola muta {tab}:"
|
regexpErrorDescription: "Si è verificato un errore nell'espressione regolare alla riga {line} della parola muta {tab}:"
|
||||||
instanceMute: "Silenziare l'istanza"
|
instanceMute: "Silenziare l'istanza"
|
||||||
userSaysSomething: "{name} ha detto qualcosa"
|
userSaysSomething: "{name} ha scritto qualcosa"
|
||||||
userSaysSomethingAbout: "{name} ha anNotato qualcosa su \"{word}\""
|
userSaysSomethingAbout: "{name} ha anNotato qualcosa su \"{word}\""
|
||||||
makeActive: "Attiva"
|
makeActive: "Attiva"
|
||||||
display: "Visualizza"
|
display: "Visualizza"
|
||||||
@@ -1406,6 +1407,7 @@ youAreAdmin: "Sei un amministratore"
|
|||||||
frame: "Cornice"
|
frame: "Cornice"
|
||||||
presets: "Preimpostato"
|
presets: "Preimpostato"
|
||||||
zeroPadding: "Al vivo"
|
zeroPadding: "Al vivo"
|
||||||
|
nothingToConfigure: "Niente da configurare"
|
||||||
_imageEditing:
|
_imageEditing:
|
||||||
_vars:
|
_vars:
|
||||||
caption: "Didascalia dell'immagine"
|
caption: "Didascalia dell'immagine"
|
||||||
@@ -1550,6 +1552,9 @@ _settings:
|
|||||||
showPageTabBarBottom: "Visualizza le schede della pagina nella parte inferiore"
|
showPageTabBarBottom: "Visualizza le schede della pagina nella parte inferiore"
|
||||||
emojiPaletteBanner: "Puoi salvare i le emoji predefinite da appuntare in alto nel raccoglitore emoji come tavolozza e personalizzare in che modo visualizzare il raccoglitore."
|
emojiPaletteBanner: "Puoi salvare i le emoji predefinite da appuntare in alto nel raccoglitore emoji come tavolozza e personalizzare in che modo visualizzare il raccoglitore."
|
||||||
enableAnimatedImages: "Attivare le immagini animate"
|
enableAnimatedImages: "Attivare le immagini animate"
|
||||||
|
settingsPersistence_title: "Configurazione persistente"
|
||||||
|
settingsPersistence_description1: "Attivando le impostazioni persistenti si può evitare di riconfigurare il client successivamente."
|
||||||
|
settingsPersistence_description2: "Potrebbe non essere possibile attivare, dipende dall'ambiente."
|
||||||
_chat:
|
_chat:
|
||||||
showSenderName: "Mostra il nome del mittente"
|
showSenderName: "Mostra il nome del mittente"
|
||||||
sendOnEnter: "Invio spedisce"
|
sendOnEnter: "Invio spedisce"
|
||||||
@@ -1737,7 +1742,7 @@ _serverSettings:
|
|||||||
thisSettingWillAutomaticallyOffWhenModeratorsInactive: "Per prevenire SPAM, questa impostazione verrà disattivata automaticamente, se non si rileva alcuna attività di moderazione durante un certo periodo di tempo."
|
thisSettingWillAutomaticallyOffWhenModeratorsInactive: "Per prevenire SPAM, questa impostazione verrà disattivata automaticamente, se non si rileva alcuna attività di moderazione durante un certo periodo di tempo."
|
||||||
deliverSuspendedSoftware: "Software fuori produzione"
|
deliverSuspendedSoftware: "Software fuori produzione"
|
||||||
deliverSuspendedSoftwareDescription: "A causa di vulnerabilità o altri motivi, puoi interrompere la distribuzione di un software da un server specificandone il nome e la versione. Le informazioni sono fornite dall'altro server e l'autenticità non è garantita. Puoi indicare un intervallo di versione semantica, ma specificando >= 2024.3.1 non verranno incluse le versioni personalizzate come ad esempio 2024.3.1-custom.0, pertanto ti consigliamo di specificare una versione come >= 2024.3.1-0."
|
deliverSuspendedSoftwareDescription: "A causa di vulnerabilità o altri motivi, puoi interrompere la distribuzione di un software da un server specificandone il nome e la versione. Le informazioni sono fornite dall'altro server e l'autenticità non è garantita. Puoi indicare un intervallo di versione semantica, ma specificando >= 2024.3.1 non verranno incluse le versioni personalizzate come ad esempio 2024.3.1-custom.0, pertanto ti consigliamo di specificare una versione come >= 2024.3.1-0."
|
||||||
singleUserMode: "Modalità utente singolo"
|
singleUserMode: "Modalità utenza singola"
|
||||||
singleUserMode_description: "Se sei l'unica persona a utilizzare questo server, l'abilitazione di questa modalità ottimizzerà le prestazioni."
|
singleUserMode_description: "Se sei l'unica persona a utilizzare questo server, l'abilitazione di questa modalità ottimizzerà le prestazioni."
|
||||||
signToActivityPubGet: "Firma delle richieste GET"
|
signToActivityPubGet: "Firma delle richieste GET"
|
||||||
signToActivityPubGet_description: "Normalmente questa opzione dovrebbe essere abilitata. Se si verificano problemi con la comunicazione federata, disabilitarla potrebbe migliorare la situazione, ma d'altro canto potrebbe rendere impossibile la comunicazione, a seconda del server."
|
signToActivityPubGet_description: "Normalmente questa opzione dovrebbe essere abilitata. Se si verificano problemi con la comunicazione federata, disabilitarla potrebbe migliorare la situazione, ma d'altro canto potrebbe rendere impossibile la comunicazione, a seconda del server."
|
||||||
@@ -2066,7 +2071,7 @@ _role:
|
|||||||
gtlAvailable: "Disponibilità della Timeline Federata"
|
gtlAvailable: "Disponibilità della Timeline Federata"
|
||||||
ltlAvailable: "Disponibilità della Timeline Locale"
|
ltlAvailable: "Disponibilità della Timeline Locale"
|
||||||
canPublicNote: "Scrivere Note con Visibilità Pubblica"
|
canPublicNote: "Scrivere Note con Visibilità Pubblica"
|
||||||
mentionMax: "Numero massimo di menzioni in una nota"
|
mentionMax: ""
|
||||||
canInvite: "Generare codici di invito all'istanza"
|
canInvite: "Generare codici di invito all'istanza"
|
||||||
inviteLimit: "Limite di codici invito"
|
inviteLimit: "Limite di codici invito"
|
||||||
inviteLimitCycle: "Intervallo di emissione del codice di invito"
|
inviteLimitCycle: "Intervallo di emissione del codice di invito"
|
||||||
@@ -2395,59 +2400,59 @@ _2fa:
|
|||||||
backupCodesExhaustedWarning: "Hai esaurito i codici usa-e-getta. Se l'App che genera il codice OTP non è più disponibile, non potrai più accedere al tuo profilo. Ripeti la configurazione per l'autenticazione a due fattori."
|
backupCodesExhaustedWarning: "Hai esaurito i codici usa-e-getta. Se l'App che genera il codice OTP non è più disponibile, non potrai più accedere al tuo profilo. Ripeti la configurazione per l'autenticazione a due fattori."
|
||||||
moreDetailedGuideHere: "Informazioni dettagliate sull'autenticazione multi fattore (2FA/MFA)"
|
moreDetailedGuideHere: "Informazioni dettagliate sull'autenticazione multi fattore (2FA/MFA)"
|
||||||
_permissions:
|
_permissions:
|
||||||
"read:account": "Visualizza le informazioni sul profilo"
|
"read:account": "Vedere le informazioni sul profilo"
|
||||||
"write:account": "Modifica le informazioni sul profilo"
|
"write:account": "Modificare le informazioni sul profilo"
|
||||||
"read:blocks": "Visualizza i profili bloccati"
|
"read:blocks": "Vedere i profili bloccati"
|
||||||
"write:blocks": "Gestisci i profili bloccati"
|
"write:blocks": "Gestire il blocco profili"
|
||||||
"read:drive": "Apri il Drive"
|
"read:drive": "Leggere file nel Drive"
|
||||||
"write:drive": "Gestisci il Drive"
|
"write:drive": "Gestire file nel Drive"
|
||||||
"read:favorites": "Visualizza i tuoi preferiti"
|
"read:favorites": "Vedere le Note Preferite"
|
||||||
"write:favorites": "Gestisci i tuoi preferiti"
|
"write:favorites": "Gestire Note Preferite"
|
||||||
"read:following": "Vedi le informazioni di follow"
|
"read:following": "Vedere i Following"
|
||||||
"write:following": "Aggiungere e togliere Following"
|
"write:following": "Gestire i Following"
|
||||||
"read:messaging": "Visualizzare la chat"
|
"read:messaging": "Vedere Messaggi Privati"
|
||||||
"write:messaging": "Gestire la chat"
|
"write:messaging": "Modificare Messaggi Privati"
|
||||||
"read:mutes": "Vedi i profili silenziati"
|
"read:mutes": "Vedere profili silenziati"
|
||||||
"write:mutes": "Gestione dei profili silenziati"
|
"write:mutes": "Gestire profili silenziati"
|
||||||
"write:notes": "Creare / Eliminare note"
|
"write:notes": "Gestire le Note"
|
||||||
"read:notifications": "Visualizzare notifiche"
|
"read:notifications": "Vedere le notifiche"
|
||||||
"write:notifications": "Gestione delle notifiche"
|
"write:notifications": "Gestire le notifiche"
|
||||||
"read:reactions": "Vedi reazioni"
|
"read:reactions": "Vedere le reazioni"
|
||||||
"write:reactions": "Gestione delle reazioni"
|
"write:reactions": "Gestire le reazioni"
|
||||||
"write:votes": "Votare"
|
"write:votes": "Votare"
|
||||||
"read:pages": "Visualizzare pagine"
|
"read:pages": "Vedere le pagine"
|
||||||
"write:pages": "Gestire pagine"
|
"write:pages": "Gestire le pagine"
|
||||||
"read:page-likes": "Visualizzare i \"Mi piace\" di pagine"
|
"read:page-likes": "Vedere le Pagine piaciute"
|
||||||
"write:page-likes": "Gestire i \"Mi piace\" di pagine"
|
"write:page-likes": "Modificare le Pagine piaciute"
|
||||||
"read:user-groups": "Vedere i gruppi di utenti"
|
"read:user-groups": "Vedere i gruppi di utenti"
|
||||||
"write:user-groups": "Gestire i gruppi di utenti"
|
"write:user-groups": "Gestire i gruppi di utenti"
|
||||||
"read:channels": "Visualizza canali"
|
"read:channels": "Vedere i canali"
|
||||||
"write:channels": "Gestione dei canali"
|
"write:channels": "Gestire i canali"
|
||||||
"read:gallery": "Visualizza la galleria."
|
"read:gallery": "Vedere le gallerie"
|
||||||
"write:gallery": "Gestione della galleria"
|
"write:gallery": "Gestire le gallerie"
|
||||||
"read:gallery-likes": "Visualizza i contenuti della galleria."
|
"read:gallery-likes": "Vedere le Gallerie piaciute"
|
||||||
"write:gallery-likes": "Manipolazione dei \"Mi piace\" della galleria."
|
"write:gallery-likes": "Gestire le Gallerie piaciute"
|
||||||
"read:flash": "Visualizza Play"
|
"read:flash": "Vedere i Play"
|
||||||
"write:flash": "Modifica Play"
|
"write:flash": "Gestire i Play"
|
||||||
"read:flash-likes": "Visualizza lista di Play piaciuti"
|
"read:flash-likes": "Vedere la lista di Play piaciuti"
|
||||||
"write:flash-likes": "Modifica lista di Play piaciuti"
|
"write:flash-likes": "Modificare la lista di Play piaciuti"
|
||||||
"read:admin:abuse-user-reports": "Mostra i report dai profili utente"
|
"read:admin:abuse-user-reports": "Vedere le segnalazioni"
|
||||||
"write:admin:delete-account": "Elimina l'account utente"
|
"write:admin:delete-account": "Eliminare profili"
|
||||||
"write:admin:delete-all-files-of-a-user": "Elimina i file dell'account utente"
|
"write:admin:delete-all-files-of-a-user": "Eliminare file dal Drive dei profili"
|
||||||
"read:admin:index-stats": "Visualizza informazioni sugli indici del database"
|
"read:admin:index-stats": "Vedere gli indici del database"
|
||||||
"read:admin:table-stats": "Visualizza informazioni sulle tabelle del database"
|
"read:admin:table-stats": "Vedere le statistiche database"
|
||||||
"read:admin:user-ips": "Visualizza indirizzi IP degli account"
|
"read:admin:user-ips": "Vedere gli indirizzi IP dei profili"
|
||||||
"read:admin:meta": "Visualizza i metadati dell'istanza"
|
"read:admin:meta": "Vedere i metadati dell'istanza"
|
||||||
"write:admin:reset-password": "Ripristina la password dell'account utente"
|
"write:admin:reset-password": "Ripristinare la password del profilo"
|
||||||
"write:admin:resolve-abuse-user-report": "Risolvere le segnalazioni dagli account utente"
|
"write:admin:resolve-abuse-user-report": "Risolvere le segnalazioni"
|
||||||
"write:admin:send-email": "Spedire email"
|
"write:admin:send-email": "Spedire email"
|
||||||
"read:admin:server-info": "Vedere le informazioni sul server"
|
"read:admin:server-info": "Vedere le informazioni sul server"
|
||||||
"read:admin:show-moderation-log": "Vedere lo storico di moderazione"
|
"read:admin:show-moderation-log": "Vedere lo storico di moderazione"
|
||||||
"read:admin:show-user": "Vedere le informazioni private degli account utente"
|
"read:admin:show-user": "Vedere le informazioni private dei profili"
|
||||||
"write:admin:suspend-user": "Sospendere i profili"
|
"write:admin:suspend-user": "Sospendere i profili"
|
||||||
"write:admin:unset-user-avatar": "Rimuovere la foto profilo dai profili"
|
"write:admin:unset-user-avatar": "Rimuovere la foto profilo dai profili"
|
||||||
"write:admin:unset-user-banner": "Rimuovere l'immagine testata dai profili"
|
"write:admin:unset-user-banner": "Rimuovere l'immagine testata dai profili"
|
||||||
"write:admin:unsuspend-user": "Togliere la sospensione ai profili"
|
"write:admin:unsuspend-user": "Rimuovere la sospensione ai profili"
|
||||||
"write:admin:meta": "Modificare i metadati dell'istanza"
|
"write:admin:meta": "Modificare i metadati dell'istanza"
|
||||||
"write:admin:user-note": "Scrivere annotazioni di moderazione"
|
"write:admin:user-note": "Scrivere annotazioni di moderazione"
|
||||||
"write:admin:roles": "Gestire i ruoli"
|
"write:admin:roles": "Gestire i ruoli"
|
||||||
@@ -2475,11 +2480,11 @@ _permissions:
|
|||||||
"read:admin:ad": "Vedere i banner pubblicitari"
|
"read:admin:ad": "Vedere i banner pubblicitari"
|
||||||
"write:invite-codes": "Creare codici di invito"
|
"write:invite-codes": "Creare codici di invito"
|
||||||
"read:invite-codes": "Vedere i codici di invito"
|
"read:invite-codes": "Vedere i codici di invito"
|
||||||
"write:clip-favorite": "Impostare Clip preferite"
|
"write:clip-favorite": "Modificare Clip preferite"
|
||||||
"read:clip-favorite": "Vedere Clip preferite"
|
"read:clip-favorite": "Vedere Clip preferite"
|
||||||
"read:federation": "Vedere la federazione"
|
"read:federation": "Vedere la federazione"
|
||||||
"write:report-abuse": "Inviare segnalazioni"
|
"write:report-abuse": "Inviare segnalazioni"
|
||||||
"write:chat": "Gestire la chat"
|
"write:chat": "Modificare Messaggi Privati"
|
||||||
"read:chat": "Visualizzare le chat"
|
"read:chat": "Visualizzare le chat"
|
||||||
_auth:
|
_auth:
|
||||||
shareAccessTitle: "Permessi dell'applicazione"
|
shareAccessTitle: "Permessi dell'applicazione"
|
||||||
@@ -2528,19 +2533,57 @@ _widgets:
|
|||||||
instanceCloud: "Nuvola di federazione"
|
instanceCloud: "Nuvola di federazione"
|
||||||
postForm: "Finestra di pubblicazione"
|
postForm: "Finestra di pubblicazione"
|
||||||
slideshow: "Diapositive"
|
slideshow: "Diapositive"
|
||||||
button: "Pulsante"
|
button: "Bottone"
|
||||||
onlineUsers: "Persone attive adesso"
|
onlineUsers: "Persone attive adesso"
|
||||||
jobQueue: "Coda di lavoro"
|
jobQueue: "Coda di lavoro"
|
||||||
serverMetric: "Statistiche server"
|
serverMetric: "Statistiche server"
|
||||||
aiscript: "Console AiScript"
|
aiscript: "Console AiScript"
|
||||||
aiscriptApp: "App AiScript"
|
aiscriptApp: "App AiScript"
|
||||||
aichan: "Mascotte Ai"
|
aichan: "Mascotte Ai"
|
||||||
userList: "Elenco utenti"
|
userList: "Lista profili"
|
||||||
_userList:
|
_userList:
|
||||||
chooseList: "Seleziona una lista"
|
chooseList: "Seleziona una lista"
|
||||||
clicker: "Cliccheria"
|
clicker: "Cliccheria"
|
||||||
birthdayFollowings: "Compleanni del giorno"
|
birthdayFollowings: "Compleanni del giorno"
|
||||||
chat: "Chatta con questa persona"
|
chat: "Messaggi diretti"
|
||||||
|
_widgetOptions:
|
||||||
|
showHeader: "Mostra la testata"
|
||||||
|
transparent: "Sfondo trasparente"
|
||||||
|
height: "Altezza"
|
||||||
|
_button:
|
||||||
|
colored: "Colorato"
|
||||||
|
_clock:
|
||||||
|
size: "Dimensioni"
|
||||||
|
thickness: "Spessore lancette"
|
||||||
|
thicknessThin: "Sottili"
|
||||||
|
thicknessMedium: "Medie"
|
||||||
|
thicknessThick: "Larghe"
|
||||||
|
graduations: "Quadrante"
|
||||||
|
graduationDots: "Punti"
|
||||||
|
graduationArabic: "Numeri"
|
||||||
|
fadeGraduations: "Sfumatura"
|
||||||
|
sAnimation: "Animazione dei secondi"
|
||||||
|
sAnimationElastic: "Realistica"
|
||||||
|
sAnimationEaseOut: "Morbida"
|
||||||
|
twentyFour: "Formato 24 ore"
|
||||||
|
labelTime: "Orario"
|
||||||
|
labelTz: "Fuso orario"
|
||||||
|
labelTimeAndTz: "Orario e fuso orario"
|
||||||
|
timezone: "Fuso orario"
|
||||||
|
showMs: "Millisecondi visibili"
|
||||||
|
showLabel: "Etichetta visibile"
|
||||||
|
_jobQueue:
|
||||||
|
sound: "Emetti un suono"
|
||||||
|
_rss:
|
||||||
|
url: "URL del Feed RSS"
|
||||||
|
refreshIntervalSec: "Intervallo di aggiornamento (in secondi)"
|
||||||
|
maxEntries: "Quantità massima visualizzabile"
|
||||||
|
_rssTicker:
|
||||||
|
shuffle: "Ordine casuale"
|
||||||
|
duration: "Velocità di scorrimento del ticker (in secondi)"
|
||||||
|
reverse: "Direzione inversa"
|
||||||
|
_birthdayFollowings:
|
||||||
|
period: "Durata"
|
||||||
_cw:
|
_cw:
|
||||||
hide: "Nascondere"
|
hide: "Nascondere"
|
||||||
show: "Continua la lettura..."
|
show: "Continua la lettura..."
|
||||||
@@ -2618,7 +2661,7 @@ _profile:
|
|||||||
metadataContent: "Contenuto"
|
metadataContent: "Contenuto"
|
||||||
changeAvatar: "Modifica immagine profilo"
|
changeAvatar: "Modifica immagine profilo"
|
||||||
changeBanner: "Cambia intestazione"
|
changeBanner: "Cambia intestazione"
|
||||||
verifiedLinkDescription: "Puoi verificare il tuo profilo mostrando una icona. Devi inserire la URL alla pagina che contiene un link al tuo profilo.\nPer verificare il profilo tramite la spunta di conferma, devi inserire la url alla pagina che contiene un link al tuo profilo Misskey. Deve avere attributo rel='me'."
|
verifiedLinkDescription: "Come avere i collegamenti verificati: inserisci la URL ad una pagina che contiene un collegamento al tuo profilo.\nVedrai una spunta di conferma se, in quella pagina, il collegamento al tuo profilo Misskey ha attributo rel='me'."
|
||||||
avatarDecorationMax: "Puoi aggiungere fino a {max} decorazioni."
|
avatarDecorationMax: "Puoi aggiungere fino a {max} decorazioni."
|
||||||
followedMessage: "Messaggio, quando qualcuno ti segue"
|
followedMessage: "Messaggio, quando qualcuno ti segue"
|
||||||
followedMessageDescription: "Puoi impostare un breve messaggio da mostrare agli altri profili quando ti seguono."
|
followedMessageDescription: "Puoi impostare un breve messaggio da mostrare agli altri profili quando ti seguono."
|
||||||
@@ -2738,7 +2781,7 @@ _notification:
|
|||||||
fileUploaded: "File caricato correttamente"
|
fileUploaded: "File caricato correttamente"
|
||||||
youGotMention: "{name} ti ha menzionato"
|
youGotMention: "{name} ti ha menzionato"
|
||||||
youGotReply: "{name} ti ha risposto"
|
youGotReply: "{name} ti ha risposto"
|
||||||
youGotQuote: "{name} ha citato la tua Nota e ha detto"
|
youGotQuote: "{name} ha scritto citando la tua Nota"
|
||||||
youRenoted: "{name} ha rinotato"
|
youRenoted: "{name} ha rinotato"
|
||||||
youWereFollowed: "Follower aggiuntivo"
|
youWereFollowed: "Follower aggiuntivo"
|
||||||
youReceivedFollowRequest: "Hai ricevuto una richiesta di follow"
|
youReceivedFollowRequest: "Hai ricevuto una richiesta di follow"
|
||||||
@@ -2764,7 +2807,7 @@ _notification:
|
|||||||
exportOfXCompleted: "Abbiamo completato l'esportazione di {x}"
|
exportOfXCompleted: "Abbiamo completato l'esportazione di {x}"
|
||||||
login: "Autenticazione avvenuta"
|
login: "Autenticazione avvenuta"
|
||||||
createToken: "È stato creato un token di accesso"
|
createToken: "È stato creato un token di accesso"
|
||||||
createTokenDescription: "In caso contrario, eliminare il token di accesso tramite ({text})."
|
createTokenDescription: "Se non ne sai nulla, elimina il token di accesso: {text}."
|
||||||
_types:
|
_types:
|
||||||
all: "Tutte"
|
all: "Tutte"
|
||||||
note: "Nuove Note"
|
note: "Nuove Note"
|
||||||
@@ -2816,6 +2859,14 @@ _deck:
|
|||||||
usedAsMinWidthWhenFlexible: "Se \"larghezza flessibile\" è abilitato, questa diventa la larghezza minima"
|
usedAsMinWidthWhenFlexible: "Se \"larghezza flessibile\" è abilitato, questa diventa la larghezza minima"
|
||||||
flexible: "Larghezza flessibile"
|
flexible: "Larghezza flessibile"
|
||||||
enableSyncBetweenDevicesForProfiles: "Abilita la sincronizzazione delle informazioni profilo tra dispositivi"
|
enableSyncBetweenDevicesForProfiles: "Abilita la sincronizzazione delle informazioni profilo tra dispositivi"
|
||||||
|
showHowToUse: "Guarda la spiegazione dell'interfaccia grafica"
|
||||||
|
_howToUse:
|
||||||
|
addColumn_title: "Aggiungere colonne"
|
||||||
|
addColumn_description: "Puoi selezionare un tipo di colonna e aggiungerlo."
|
||||||
|
settings_title: "Configurazione interfaccia grafica"
|
||||||
|
settings_description: "Puoi personalizzare i dettagli dell'interfaccia grafica."
|
||||||
|
switchProfile_title: "Selettore profilo"
|
||||||
|
switchProfile_description: "Puoi salvare la disposizione dell'interfaccia grafica nel tuo profilo, affinché cambi con comodità."
|
||||||
_columns:
|
_columns:
|
||||||
main: "Principale"
|
main: "Principale"
|
||||||
widgets: "Riquadri"
|
widgets: "Riquadri"
|
||||||
@@ -3067,7 +3118,7 @@ _contextMenu:
|
|||||||
title: "Menu contestuale"
|
title: "Menu contestuale"
|
||||||
app: "Applicazione"
|
app: "Applicazione"
|
||||||
appWithShift: "Applicazione Shift+Tasto"
|
appWithShift: "Applicazione Shift+Tasto"
|
||||||
native: "Interfaccia utente del browser"
|
native: "Interfaccia grafica del browser"
|
||||||
_gridComponent:
|
_gridComponent:
|
||||||
_error:
|
_error:
|
||||||
requiredValue: "Campo obbligatorio"
|
requiredValue: "Campo obbligatorio"
|
||||||
@@ -3299,7 +3350,6 @@ _imageEffector:
|
|||||||
title: "Effetto"
|
title: "Effetto"
|
||||||
addEffect: "Aggiungi effetto"
|
addEffect: "Aggiungi effetto"
|
||||||
discardChangesConfirm: "Scarta le modifiche ed esci?"
|
discardChangesConfirm: "Scarta le modifiche ed esci?"
|
||||||
nothingToConfigure: "Nessuna impostazione configurabile."
|
|
||||||
failedToLoadImage: "Impossibile caricare l'immagine"
|
failedToLoadImage: "Impossibile caricare l'immagine"
|
||||||
_fxs:
|
_fxs:
|
||||||
chromaticAberration: "Aberrazione cromatica"
|
chromaticAberration: "Aberrazione cromatica"
|
||||||
@@ -3351,11 +3401,9 @@ _imageEffector:
|
|||||||
threshold: "Soglia"
|
threshold: "Soglia"
|
||||||
centerX: "Centro orizzontale"
|
centerX: "Centro orizzontale"
|
||||||
centerY: "Centro verticale"
|
centerY: "Centro verticale"
|
||||||
zoomLinesSmoothing: "Levigatura"
|
density: "Densità"
|
||||||
zoomLinesSmoothingDescription: "Non si possono usare insieme la levigatura e la larghezza della linea centrale."
|
zoomLinesOutlineThickness: "Spessore del bordo"
|
||||||
zoomLinesThreshold: "Limite delle linee zoom"
|
|
||||||
zoomLinesMaskSize: "Ampiezza del diametro"
|
zoomLinesMaskSize: "Ampiezza del diametro"
|
||||||
zoomLinesBlack: "Bande nere"
|
|
||||||
circle: "Circolare"
|
circle: "Circolare"
|
||||||
drafts: "Bozze"
|
drafts: "Bozze"
|
||||||
_drafts:
|
_drafts:
|
||||||
|
|||||||
+56
-6
@@ -543,6 +543,7 @@ regenerate: "再生成"
|
|||||||
fontSize: "フォントサイズ"
|
fontSize: "フォントサイズ"
|
||||||
mediaListWithOneImageAppearance: "画像が1枚のみのメディアリストの高さ"
|
mediaListWithOneImageAppearance: "画像が1枚のみのメディアリストの高さ"
|
||||||
limitTo: "{x}を上限に"
|
limitTo: "{x}を上限に"
|
||||||
|
showMediaListByGridInWideArea: "画面幅が広いときはメディアリストを横並びで表示する"
|
||||||
noFollowRequests: "フォロー申請はありません"
|
noFollowRequests: "フォロー申請はありません"
|
||||||
openImageInNewTab: "画像を新しいタブで開く"
|
openImageInNewTab: "画像を新しいタブで開く"
|
||||||
dashboard: "ダッシュボード"
|
dashboard: "ダッシュボード"
|
||||||
@@ -1406,6 +1407,7 @@ youAreAdmin: "あなたは管理者です"
|
|||||||
frame: "フレーム"
|
frame: "フレーム"
|
||||||
presets: "プリセット"
|
presets: "プリセット"
|
||||||
zeroPadding: "ゼロ埋め"
|
zeroPadding: "ゼロ埋め"
|
||||||
|
nothingToConfigure: "設定項目はありません"
|
||||||
|
|
||||||
_imageEditing:
|
_imageEditing:
|
||||||
_vars:
|
_vars:
|
||||||
@@ -1557,6 +1559,9 @@ _settings:
|
|||||||
showPageTabBarBottom: "ページのタブバーを下部に表示"
|
showPageTabBarBottom: "ページのタブバーを下部に表示"
|
||||||
emojiPaletteBanner: "絵文字ピッカーに固定表示するプリセットをパレットとして登録したり、ピッカーの表示方法をカスタマイズしたりできます。"
|
emojiPaletteBanner: "絵文字ピッカーに固定表示するプリセットをパレットとして登録したり、ピッカーの表示方法をカスタマイズしたりできます。"
|
||||||
enableAnimatedImages: "アニメーション画像を有効にする"
|
enableAnimatedImages: "アニメーション画像を有効にする"
|
||||||
|
settingsPersistence_title: "設定の永続化"
|
||||||
|
settingsPersistence_description1: "設定の永続化を有効にすると、設定情報が失われるのを防止できます。"
|
||||||
|
settingsPersistence_description2: "環境によっては有効化できない場合があります。"
|
||||||
|
|
||||||
_chat:
|
_chat:
|
||||||
showSenderName: "送信者の名前を表示"
|
showSenderName: "送信者の名前を表示"
|
||||||
@@ -2596,9 +2601,48 @@ _widgets:
|
|||||||
_userList:
|
_userList:
|
||||||
chooseList: "リストを選択"
|
chooseList: "リストを選択"
|
||||||
clicker: "クリッカー"
|
clicker: "クリッカー"
|
||||||
birthdayFollowings: "今日誕生日のユーザー"
|
birthdayFollowings: "もうすぐ誕生日のユーザー"
|
||||||
chat: "ダイレクトメッセージ"
|
chat: "ダイレクトメッセージ"
|
||||||
|
|
||||||
|
_widgetOptions:
|
||||||
|
showHeader: "ヘッダーを表示"
|
||||||
|
transparent: "背景を透明にする"
|
||||||
|
height: "高さ"
|
||||||
|
_button:
|
||||||
|
colored: "色付き"
|
||||||
|
_clock:
|
||||||
|
size: "サイズ"
|
||||||
|
thickness: "針の太さ"
|
||||||
|
thicknessThin: "細い"
|
||||||
|
thicknessMedium: "普通"
|
||||||
|
thicknessThick: "太い"
|
||||||
|
graduations: "文字盤の目盛り"
|
||||||
|
graduationDots: "ドット"
|
||||||
|
graduationArabic: "アラビア数字"
|
||||||
|
fadeGraduations: "目盛りをフェード"
|
||||||
|
sAnimation: "秒針のアニメーション"
|
||||||
|
sAnimationElastic: "リアル"
|
||||||
|
sAnimationEaseOut: "滑らか"
|
||||||
|
twentyFour: "24時間表示"
|
||||||
|
labelTime: "時刻"
|
||||||
|
labelTz: "タイムゾーン"
|
||||||
|
labelTimeAndTz: "時刻とタイムゾーン"
|
||||||
|
timezone: "タイムゾーン"
|
||||||
|
showMs: "ミリ秒を表示"
|
||||||
|
showLabel: "ラベルを表示"
|
||||||
|
_jobQueue:
|
||||||
|
sound: "音を鳴らす"
|
||||||
|
_rss:
|
||||||
|
url: "RSSフィードのURL"
|
||||||
|
refreshIntervalSec: "更新間隔(秒)"
|
||||||
|
maxEntries: "最大表示件数"
|
||||||
|
_rssTicker:
|
||||||
|
shuffle: "表示順をシャッフル"
|
||||||
|
duration: "ティッカーのスクロール速度(秒)"
|
||||||
|
reverse: "逆方向にスクロール"
|
||||||
|
_birthdayFollowings:
|
||||||
|
period: "期間"
|
||||||
|
|
||||||
_cw:
|
_cw:
|
||||||
hide: "隠す"
|
hide: "隠す"
|
||||||
show: "もっと見る"
|
show: "もっと見る"
|
||||||
@@ -2890,6 +2934,15 @@ _deck:
|
|||||||
usedAsMinWidthWhenFlexible: "「幅を自動調整」が有効の場合、これが幅の最小値となります"
|
usedAsMinWidthWhenFlexible: "「幅を自動調整」が有効の場合、これが幅の最小値となります"
|
||||||
flexible: "幅を自動調整"
|
flexible: "幅を自動調整"
|
||||||
enableSyncBetweenDevicesForProfiles: "プロファイル情報のデバイス間同期を有効にする"
|
enableSyncBetweenDevicesForProfiles: "プロファイル情報のデバイス間同期を有効にする"
|
||||||
|
showHowToUse: "UIの説明を見る"
|
||||||
|
|
||||||
|
_howToUse:
|
||||||
|
addColumn_title: "カラム追加"
|
||||||
|
addColumn_description: "カラムの種類を選んで追加できます。"
|
||||||
|
settings_title: "UI設定"
|
||||||
|
settings_description: "デッキUIの詳細設定を行えます。"
|
||||||
|
switchProfile_title: "プロファイル切り替え"
|
||||||
|
switchProfile_description: "UIのレイアウトをプロファイルとして保存し、いつでも切り替えられるようにできます。"
|
||||||
|
|
||||||
_columns:
|
_columns:
|
||||||
main: "メイン"
|
main: "メイン"
|
||||||
@@ -3406,7 +3459,6 @@ _imageEffector:
|
|||||||
title: "エフェクト"
|
title: "エフェクト"
|
||||||
addEffect: "エフェクトを追加"
|
addEffect: "エフェクトを追加"
|
||||||
discardChangesConfirm: "変更を破棄して終了しますか?"
|
discardChangesConfirm: "変更を破棄して終了しますか?"
|
||||||
nothingToConfigure: "設定項目はありません"
|
|
||||||
failedToLoadImage: "画像の読み込みに失敗しました"
|
failedToLoadImage: "画像の読み込みに失敗しました"
|
||||||
|
|
||||||
_fxs:
|
_fxs:
|
||||||
@@ -3460,11 +3512,9 @@ _imageEffector:
|
|||||||
threshold: "しきい値"
|
threshold: "しきい値"
|
||||||
centerX: "中心X"
|
centerX: "中心X"
|
||||||
centerY: "中心Y"
|
centerY: "中心Y"
|
||||||
zoomLinesSmoothing: "スムージング"
|
density: "密度"
|
||||||
zoomLinesSmoothingDescription: "スムージングと集中線の幅の設定は併用できません。"
|
zoomLinesOutlineThickness: "線の影の太さ"
|
||||||
zoomLinesThreshold: "集中線の幅"
|
|
||||||
zoomLinesMaskSize: "中心径"
|
zoomLinesMaskSize: "中心径"
|
||||||
zoomLinesBlack: "黒色にする"
|
|
||||||
circle: "円形"
|
circle: "円形"
|
||||||
|
|
||||||
drafts: "下書き"
|
drafts: "下書き"
|
||||||
|
|||||||
@@ -2378,6 +2378,15 @@ _widgets:
|
|||||||
clicker: "クリッカー"
|
clicker: "クリッカー"
|
||||||
birthdayFollowings: "今日誕生日のツレ"
|
birthdayFollowings: "今日誕生日のツレ"
|
||||||
chat: "チャットしよか"
|
chat: "チャットしよか"
|
||||||
|
_widgetOptions:
|
||||||
|
showHeader: "ヘッダー出す"
|
||||||
|
height: "高さ"
|
||||||
|
_button:
|
||||||
|
colored: "色付き"
|
||||||
|
_clock:
|
||||||
|
size: "大きさ"
|
||||||
|
_birthdayFollowings:
|
||||||
|
period: "期間"
|
||||||
_cw:
|
_cw:
|
||||||
hide: "隠す"
|
hide: "隠す"
|
||||||
show: "続き見して!"
|
show: "続き見して!"
|
||||||
|
|||||||
+71
-23
@@ -543,6 +543,7 @@ regenerate: "재생성"
|
|||||||
fontSize: "글자 크기"
|
fontSize: "글자 크기"
|
||||||
mediaListWithOneImageAppearance: "이미지가 1개 뿐인 미디어 목록의 높이"
|
mediaListWithOneImageAppearance: "이미지가 1개 뿐인 미디어 목록의 높이"
|
||||||
limitTo: "{x}로 제한"
|
limitTo: "{x}로 제한"
|
||||||
|
showMediaListByGridInWideArea: "화면 폭이 넓을 때는 미디어 목록을 가로로 표시하기"
|
||||||
noFollowRequests: "처리되지 않은 팔로우 요청이 없습니다"
|
noFollowRequests: "처리되지 않은 팔로우 요청이 없습니다"
|
||||||
openImageInNewTab: "새 탭에서 이미지 열기"
|
openImageInNewTab: "새 탭에서 이미지 열기"
|
||||||
dashboard: "대시보드"
|
dashboard: "대시보드"
|
||||||
@@ -1334,7 +1335,7 @@ markAsSensitiveConfirm: "이 미디어를 민감한 미디어로 설정하시겠
|
|||||||
unmarkAsSensitiveConfirm: "이 미디어의 민감한 미디어 지정을 해제하시겠습니까?"
|
unmarkAsSensitiveConfirm: "이 미디어의 민감한 미디어 지정을 해제하시겠습니까?"
|
||||||
preferences: "환경설정"
|
preferences: "환경설정"
|
||||||
accessibility: "접근성"
|
accessibility: "접근성"
|
||||||
preferencesProfile: "설정 프로필"
|
preferencesProfile: "설정 프로파일"
|
||||||
copyPreferenceId: "설정한 ID를 복사"
|
copyPreferenceId: "설정한 ID를 복사"
|
||||||
resetToDefaultValue: "기본값으로 되돌리기"
|
resetToDefaultValue: "기본값으로 되돌리기"
|
||||||
overrideByAccount: "계정으로 덮어쓰기"
|
overrideByAccount: "계정으로 덮어쓰기"
|
||||||
@@ -1347,7 +1348,7 @@ preferenceSyncConflictTitle: "서버에 설정값이 존재합니다."
|
|||||||
preferenceSyncConflictText: "동기화를 활성화 한 항목의 설정 값은 서버에 저장되지만, 해당 항목은 이미 서버에 설정 값이 저장되어져 있습니다. 어느 쪽의 설정 값을 덮어씌울까요?"
|
preferenceSyncConflictText: "동기화를 활성화 한 항목의 설정 값은 서버에 저장되지만, 해당 항목은 이미 서버에 설정 값이 저장되어져 있습니다. 어느 쪽의 설정 값을 덮어씌울까요?"
|
||||||
preferenceSyncConflictChoiceMerge: "병합"
|
preferenceSyncConflictChoiceMerge: "병합"
|
||||||
preferenceSyncConflictChoiceServer: "서버 설정값"
|
preferenceSyncConflictChoiceServer: "서버 설정값"
|
||||||
preferenceSyncConflictChoiceDevice: "장치 설정값"
|
preferenceSyncConflictChoiceDevice: "장치 설정 값"
|
||||||
preferenceSyncConflictChoiceCancel: "동기화 취소"
|
preferenceSyncConflictChoiceCancel: "동기화 취소"
|
||||||
paste: "붙여넣기"
|
paste: "붙여넣기"
|
||||||
emojiPalette: "이모지 팔레트"
|
emojiPalette: "이모지 팔레트"
|
||||||
@@ -1406,6 +1407,7 @@ youAreAdmin: "당신은 관리자입니다."
|
|||||||
frame: "프레임"
|
frame: "프레임"
|
||||||
presets: "프리셋"
|
presets: "프리셋"
|
||||||
zeroPadding: "0으로 채우기"
|
zeroPadding: "0으로 채우기"
|
||||||
|
nothingToConfigure: "설정 항목이 없습니다."
|
||||||
_imageEditing:
|
_imageEditing:
|
||||||
_vars:
|
_vars:
|
||||||
caption: "파일 설명"
|
caption: "파일 설명"
|
||||||
@@ -1464,17 +1466,17 @@ _chat:
|
|||||||
newMessage: "새로운 메시지"
|
newMessage: "새로운 메시지"
|
||||||
individualChat: "개인 대화"
|
individualChat: "개인 대화"
|
||||||
individualChat_description: "특정 유저와 일대일 채팅을 할 수 있습니다."
|
individualChat_description: "특정 유저와 일대일 채팅을 할 수 있습니다."
|
||||||
roomChat: "룸 채팅"
|
roomChat: "그룹 채팅"
|
||||||
roomChat_description: "여러 명이 함께 채팅할 수 있습니다.\n또한, 개인 채팅을 허용하지 않은 유저와도 상대방이 수락하면 채팅을 할 수 있습니다."
|
roomChat_description: "여러 명이 함께 채팅할 수 있습니다.\n또한, 개인 채팅을 허용하지 않은 유저와도 상대방이 수락하면 채팅을 할 수 있습니다."
|
||||||
createRoom: "룸을 생성"
|
createRoom: "방 만들기"
|
||||||
inviteUserToChat: "유저를 초대하여 채팅을 시작하세요"
|
inviteUserToChat: "유저를 초대하여 채팅을 시작하세요"
|
||||||
yourRooms: "생성한 룸"
|
yourRooms: "만들어진 방"
|
||||||
joiningRooms: "참가 중인 룸"
|
joiningRooms: "참가 중인 방"
|
||||||
invitations: "초대"
|
invitations: "초대"
|
||||||
noInvitations: "초대장이 없습니다"
|
noInvitations: "초대장이 없습니다"
|
||||||
history: "이력"
|
history: "이력"
|
||||||
noHistory: "기록이 없습니다"
|
noHistory: "기록이 없습니다"
|
||||||
noRooms: "룸이 없습니다"
|
noRooms: "방이 없습니다"
|
||||||
inviteUser: "유저를 초대"
|
inviteUser: "유저를 초대"
|
||||||
sentInvitations: "초대를 보내기"
|
sentInvitations: "초대를 보내기"
|
||||||
join: "참여"
|
join: "참여"
|
||||||
@@ -1485,14 +1487,14 @@ _chat:
|
|||||||
home: "홈"
|
home: "홈"
|
||||||
send: "전송"
|
send: "전송"
|
||||||
newline: "줄바꿈"
|
newline: "줄바꿈"
|
||||||
muteThisRoom: "이 룸을 뮤트"
|
muteThisRoom: "이 방을 뮤트하기"
|
||||||
deleteRoom: "룸을 삭제"
|
deleteRoom: "방을 삭제하기"
|
||||||
chatNotAvailableForThisAccountOrServer: "이 서버 또는 이 계정에서 채팅이 활성화되어 있지 않습니다."
|
chatNotAvailableForThisAccountOrServer: "이 서버 또는 이 계정에서 채팅이 활성화되어 있지 않습니다."
|
||||||
chatIsReadOnlyForThisAccountOrServer: "이 서버 또는 이 계정에서 채팅은 읽기 전용입니다. 새로 쓰거나 채팅 룸을 만들거나 참가할 수 없습니다."
|
chatIsReadOnlyForThisAccountOrServer: "이 서버 또는 이 계정에서 채팅은 읽기 전용입니다. 새로 쓰거나 채팅 룸을 만들거나 참가할 수 없습니다."
|
||||||
chatNotAvailableInOtherAccount: "상대방 계정에서 채팅 기능을 사용할 수 없는 상태입니다."
|
chatNotAvailableInOtherAccount: "상대방 계정에서 채팅 기능을 사용할 수 없는 상태입니다."
|
||||||
cannotChatWithTheUser: "이 유저와 채팅을 시작할 수 없습니다"
|
cannotChatWithTheUser: "이 유저와 채팅을 시작할 수 없습니다"
|
||||||
cannotChatWithTheUser_description: "채팅을 사용할 수 없는 상태이거나 상대방이 채팅을 열지 않은 상태입니다."
|
cannotChatWithTheUser_description: "채팅을 사용할 수 없는 상태이거나 상대방이 채팅을 열지 않은 상태입니다."
|
||||||
youAreNotAMemberOfThisRoomButInvited: "당신은 이 룸의 참가자가 아닙니다만 초대 신청을 받으셨습니다. 참가하려면 초대를 수락해주십시오."
|
youAreNotAMemberOfThisRoomButInvited: "이 방의 참가자가 아니지만 초대를 받았습니다. 참가하려면 초대를 수락하세요."
|
||||||
doYouAcceptInvitation: "초대를 수락하시겠습니까?"
|
doYouAcceptInvitation: "초대를 수락하시겠습니까?"
|
||||||
chatWithThisUser: "채팅하기"
|
chatWithThisUser: "채팅하기"
|
||||||
thisUserAllowsChatOnlyFromFollowers: "이 유저는 팔로워만 채팅을 할 수 있습니다."
|
thisUserAllowsChatOnlyFromFollowers: "이 유저는 팔로워만 채팅을 할 수 있습니다."
|
||||||
@@ -1550,15 +1552,18 @@ _settings:
|
|||||||
showPageTabBarBottom: "페이지의 탭 바를 아래쪽에 표시"
|
showPageTabBarBottom: "페이지의 탭 바를 아래쪽에 표시"
|
||||||
emojiPaletteBanner: "이모티콘 선택기에 고정 표시되는 프리셋을 팔레트로 등록하거나 선택기의 표시 방법을 커스터마이징할 수 있습니다."
|
emojiPaletteBanner: "이모티콘 선택기에 고정 표시되는 프리셋을 팔레트로 등록하거나 선택기의 표시 방법을 커스터마이징할 수 있습니다."
|
||||||
enableAnimatedImages: "애니메이션 이미지 활성화"
|
enableAnimatedImages: "애니메이션 이미지 활성화"
|
||||||
|
settingsPersistence_title: "설정 영구화"
|
||||||
|
settingsPersistence_description1: "설정 영구화를 활성화하면 설정 정보를 잃어버리는 것을 방지할 수 있습니다."
|
||||||
|
settingsPersistence_description2: "환경에 따라 활성화되지 않을 수 있습니다."
|
||||||
_chat:
|
_chat:
|
||||||
showSenderName: "발신자 이름 표시"
|
showSenderName: "발신자 이름 표시"
|
||||||
sendOnEnter: "엔터로 보내기"
|
sendOnEnter: "엔터로 보내기"
|
||||||
_preferencesProfile:
|
_preferencesProfile:
|
||||||
profileName: "프로필 이름"
|
profileName: "프로파일 이름"
|
||||||
profileNameDescription: "이 디바이스를 식별할 이름을 설정해 주세요."
|
profileNameDescription: "이 디바이스를 식별할 이름을 설정해 주세요."
|
||||||
profileNameDescription2: "예: '메인PC', '스마트폰' 등"
|
profileNameDescription2: "예: '메인PC', '스마트폰' 등"
|
||||||
manageProfiles: "프로파일 관리"
|
manageProfiles: "프로파일 관리"
|
||||||
shareSameProfileBetweenDevicesIsNotRecommended: "여러 장치에서 동일한 프로필을 공유하는 것은 권장하지 않습니다."
|
shareSameProfileBetweenDevicesIsNotRecommended: "여러 장치에서 같은 프로파일을 공유하는 것은 권장하지 않습니다."
|
||||||
useSyncBetweenDevicesOptionIfYouWantToSyncSetting: "여러 장치에서 동기화하고 싶은 설정 항목이 있는 경우에는 개별로 '여러 장치에서 동기화' 옵션을 활성화해 주십시오."
|
useSyncBetweenDevicesOptionIfYouWantToSyncSetting: "여러 장치에서 동기화하고 싶은 설정 항목이 있는 경우에는 개별로 '여러 장치에서 동기화' 옵션을 활성화해 주십시오."
|
||||||
_preferencesBackup:
|
_preferencesBackup:
|
||||||
autoBackup: "자동 백업"
|
autoBackup: "자동 백업"
|
||||||
@@ -1566,7 +1571,7 @@ _preferencesBackup:
|
|||||||
noBackupsFoundTitle: "백업을 찾을 수 없습니다"
|
noBackupsFoundTitle: "백업을 찾을 수 없습니다"
|
||||||
noBackupsFoundDescription: "자동으로 생성된 백업은 찾을 수 없었지만, 수동으로 백업 파일을 저장한 경우 해당 파일을 가져와 복원할 수 있습니다."
|
noBackupsFoundDescription: "자동으로 생성된 백업은 찾을 수 없었지만, 수동으로 백업 파일을 저장한 경우 해당 파일을 가져와 복원할 수 있습니다."
|
||||||
selectBackupToRestore: "복원할 백업을 선택하세요"
|
selectBackupToRestore: "복원할 백업을 선택하세요"
|
||||||
youNeedToNameYourProfileToEnableAutoBackup: "자동 백업을 활성화하려면 프로필 이름을 설정해야 합니다."
|
youNeedToNameYourProfileToEnableAutoBackup: "자동 백업을 활성화하려면 프로파일 이름을 설정해야 합니다."
|
||||||
autoPreferencesBackupIsNotEnabledForThisDevice: "이 장치에서 설정 자동 백업이 활성화되어 있지 않습니다."
|
autoPreferencesBackupIsNotEnabledForThisDevice: "이 장치에서 설정 자동 백업이 활성화되어 있지 않습니다."
|
||||||
backupFound: "설정 백업이 발견되었습니다"
|
backupFound: "설정 백업이 발견되었습니다"
|
||||||
forceBackup: "설정 강제 백업"
|
forceBackup: "설정 강제 백업"
|
||||||
@@ -2539,8 +2544,46 @@ _widgets:
|
|||||||
_userList:
|
_userList:
|
||||||
chooseList: "리스트 선택"
|
chooseList: "리스트 선택"
|
||||||
clicker: "클리커"
|
clicker: "클리커"
|
||||||
birthdayFollowings: "오늘이 생일인 유저"
|
birthdayFollowings: "곧 생일인 사용자"
|
||||||
chat: "채팅하기"
|
chat: "채팅하기"
|
||||||
|
_widgetOptions:
|
||||||
|
showHeader: "해더를 표시"
|
||||||
|
transparent: "배경을 투명하게 설정"
|
||||||
|
height: "높이"
|
||||||
|
_button:
|
||||||
|
colored: "색 입히기"
|
||||||
|
_clock:
|
||||||
|
size: "크기"
|
||||||
|
thickness: "시곗바늘의 두께"
|
||||||
|
thicknessThin: "얇게"
|
||||||
|
thicknessMedium: "보통"
|
||||||
|
thicknessThick: "굵게"
|
||||||
|
graduations: "문자반의 눈금"
|
||||||
|
graduationDots: "도트"
|
||||||
|
graduationArabic: "아라비아 숫자"
|
||||||
|
fadeGraduations: "눈금 페이드"
|
||||||
|
sAnimation: "초침 애니메이션"
|
||||||
|
sAnimationElastic: "사실적으로"
|
||||||
|
sAnimationEaseOut: "매끄럽게"
|
||||||
|
twentyFour: "24시간 표시"
|
||||||
|
labelTime: "시각"
|
||||||
|
labelTz: "시간대"
|
||||||
|
labelTimeAndTz: "시각과 시간대"
|
||||||
|
timezone: "시간대"
|
||||||
|
showMs: "밀리초 표시"
|
||||||
|
showLabel: "레이블 표시"
|
||||||
|
_jobQueue:
|
||||||
|
sound: "소리 재생"
|
||||||
|
_rss:
|
||||||
|
url: "RSS 필드의 URL"
|
||||||
|
refreshIntervalSec: "갱신 간격(초)"
|
||||||
|
maxEntries: "최대 표시 건수"
|
||||||
|
_rssTicker:
|
||||||
|
shuffle: "표시 순서 셔플"
|
||||||
|
duration: "티커 스크롤 속도(초)"
|
||||||
|
reverse: "역방향으로 스크롤"
|
||||||
|
_birthdayFollowings:
|
||||||
|
period: "기간"
|
||||||
_cw:
|
_cw:
|
||||||
hide: "숨기기"
|
hide: "숨기기"
|
||||||
show: "더 보기"
|
show: "더 보기"
|
||||||
@@ -2749,7 +2792,7 @@ _notification:
|
|||||||
newNote: "새 게시물"
|
newNote: "새 게시물"
|
||||||
unreadAntennaNote: "안테나 {name}"
|
unreadAntennaNote: "안테나 {name}"
|
||||||
roleAssigned: "역할이 부여 되었습니다."
|
roleAssigned: "역할이 부여 되었습니다."
|
||||||
chatRoomInvitationReceived: "채팅 룸에 초대받았습니다"
|
chatRoomInvitationReceived: "채팅방에 초대되었습니다"
|
||||||
emptyPushNotificationMessage: "푸시 알림이 갱신되었습니다"
|
emptyPushNotificationMessage: "푸시 알림이 갱신되었습니다"
|
||||||
achievementEarned: "도전 과제를 달성했습니다"
|
achievementEarned: "도전 과제를 달성했습니다"
|
||||||
testNotification: "알림 테스트"
|
testNotification: "알림 테스트"
|
||||||
@@ -2780,7 +2823,7 @@ _notification:
|
|||||||
receiveFollowRequest: "팔로우 요청을 받았을 때"
|
receiveFollowRequest: "팔로우 요청을 받았을 때"
|
||||||
followRequestAccepted: "팔로우 요청이 승인되었을 때"
|
followRequestAccepted: "팔로우 요청이 승인되었을 때"
|
||||||
roleAssigned: "역할이 부여됨"
|
roleAssigned: "역할이 부여됨"
|
||||||
chatRoomInvitationReceived: "채팅 룸에 초대받음"
|
chatRoomInvitationReceived: "채팅방에 초대됨"
|
||||||
achievementEarned: "도전 과제 획득"
|
achievementEarned: "도전 과제 획득"
|
||||||
exportCompleted: "추출을 성공함"
|
exportCompleted: "추출을 성공함"
|
||||||
login: "로그인"
|
login: "로그인"
|
||||||
@@ -2815,7 +2858,15 @@ _deck:
|
|||||||
useSimpleUiForNonRootPages: "루트 이외의 페이지로 접속한 경우 UI 간략화하기"
|
useSimpleUiForNonRootPages: "루트 이외의 페이지로 접속한 경우 UI 간략화하기"
|
||||||
usedAsMinWidthWhenFlexible: "'폭 자동 조정'이 활성화된 경우 최소 폭으로 사용됩니다"
|
usedAsMinWidthWhenFlexible: "'폭 자동 조정'이 활성화된 경우 최소 폭으로 사용됩니다"
|
||||||
flexible: "폭 자동 조정"
|
flexible: "폭 자동 조정"
|
||||||
enableSyncBetweenDevicesForProfiles: "프로파일 정보의 디바이스 간 동기화를 활성화"
|
enableSyncBetweenDevicesForProfiles: "프로파일 정보의 장치 간 동기화를 활성화"
|
||||||
|
showHowToUse: "UI 설명 보기"
|
||||||
|
_howToUse:
|
||||||
|
addColumn_title: "칼럼 추가"
|
||||||
|
addColumn_description: "칼럼의 종류를 선택해 추가할 수 있습니다."
|
||||||
|
settings_title: "UI 설정"
|
||||||
|
settings_description: "덱 UI의 상세 설정을 할 수 있습니다."
|
||||||
|
switchProfile_title: "프로파일 전환"
|
||||||
|
switchProfile_description: "UI의 레이아웃을 프로파일로 저장하고 언제든지 전환할 수 있습니다."
|
||||||
_columns:
|
_columns:
|
||||||
main: "메인"
|
main: "메인"
|
||||||
widgets: "위젯"
|
widgets: "위젯"
|
||||||
@@ -2926,7 +2977,7 @@ _moderationLogTypes:
|
|||||||
deletePage: "페이지를 삭제"
|
deletePage: "페이지를 삭제"
|
||||||
deleteFlash: "Play를 삭제"
|
deleteFlash: "Play를 삭제"
|
||||||
deleteGalleryPost: "갤러리 게시물을 삭제"
|
deleteGalleryPost: "갤러리 게시물을 삭제"
|
||||||
deleteChatRoom: "채팅 룸 삭제"
|
deleteChatRoom: "채팅방 삭제하기"
|
||||||
updateProxyAccountDescription: "프록시 계정의 설명 업데이트"
|
updateProxyAccountDescription: "프록시 계정의 설명 업데이트"
|
||||||
_fileViewer:
|
_fileViewer:
|
||||||
title: "파일 상세"
|
title: "파일 상세"
|
||||||
@@ -3299,7 +3350,6 @@ _imageEffector:
|
|||||||
title: "이펙트"
|
title: "이펙트"
|
||||||
addEffect: "이펙트를 추가"
|
addEffect: "이펙트를 추가"
|
||||||
discardChangesConfirm: "변경을 취소하고 종료하시겠습니까?"
|
discardChangesConfirm: "변경을 취소하고 종료하시겠습니까?"
|
||||||
nothingToConfigure: "설정 항목이 없습니다."
|
|
||||||
failedToLoadImage: "이미지 로딩에 실패했습니다."
|
failedToLoadImage: "이미지 로딩에 실패했습니다."
|
||||||
_fxs:
|
_fxs:
|
||||||
chromaticAberration: "색수차"
|
chromaticAberration: "색수차"
|
||||||
@@ -3351,11 +3401,9 @@ _imageEffector:
|
|||||||
threshold: "한계 값"
|
threshold: "한계 값"
|
||||||
centerX: "X축 중심"
|
centerX: "X축 중심"
|
||||||
centerY: "Y축 중심"
|
centerY: "Y축 중심"
|
||||||
zoomLinesSmoothing: "다듬기"
|
density: "밀도"
|
||||||
zoomLinesSmoothingDescription: "다듬기와 집중선 폭 설정은 같이 쓸 수 없습니다."
|
zoomLinesOutlineThickness: "선 그림자의 굵기"
|
||||||
zoomLinesThreshold: "집중선 폭"
|
|
||||||
zoomLinesMaskSize: "중앙 값"
|
zoomLinesMaskSize: "중앙 값"
|
||||||
zoomLinesBlack: "검은색으로 하기"
|
|
||||||
circle: "원형"
|
circle: "원형"
|
||||||
drafts: "초안"
|
drafts: "초안"
|
||||||
_drafts:
|
_drafts:
|
||||||
|
|||||||
@@ -431,6 +431,8 @@ _widgets:
|
|||||||
jobQueue: "ຄິວວຽກ"
|
jobQueue: "ຄິວວຽກ"
|
||||||
_userList:
|
_userList:
|
||||||
chooseList: "ເລືອກບັນຊີລາຍການ"
|
chooseList: "ເລືອກບັນຊີລາຍການ"
|
||||||
|
_widgetOptions:
|
||||||
|
height: "ຄວາມສູງ"
|
||||||
_cw:
|
_cw:
|
||||||
show: "ໂຫຼດເພີ່ມເຕີມ"
|
show: "ໂຫຼດເພີ່ມເຕີມ"
|
||||||
_visibility:
|
_visibility:
|
||||||
|
|||||||
@@ -1017,6 +1017,8 @@ _widgets:
|
|||||||
jobQueue: "Job Queue"
|
jobQueue: "Job Queue"
|
||||||
_userList:
|
_userList:
|
||||||
chooseList: "Kies een lijst."
|
chooseList: "Kies een lijst."
|
||||||
|
_widgetOptions:
|
||||||
|
height: "Hoogte"
|
||||||
_cw:
|
_cw:
|
||||||
show: "Laad meer"
|
show: "Laad meer"
|
||||||
_visibility:
|
_visibility:
|
||||||
|
|||||||
@@ -639,6 +639,10 @@ _widgets:
|
|||||||
userList: "Brukerliste"
|
userList: "Brukerliste"
|
||||||
_userList:
|
_userList:
|
||||||
chooseList: "Velg liste"
|
chooseList: "Velg liste"
|
||||||
|
_widgetOptions:
|
||||||
|
height: "Høyde"
|
||||||
|
_clock:
|
||||||
|
size: "Størrelse"
|
||||||
_cw:
|
_cw:
|
||||||
hide: "Skjul"
|
hide: "Skjul"
|
||||||
show: "Vis mer"
|
show: "Vis mer"
|
||||||
|
|||||||
@@ -1361,6 +1361,14 @@ _widgets:
|
|||||||
_userList:
|
_userList:
|
||||||
chooseList: "Wybierz listę"
|
chooseList: "Wybierz listę"
|
||||||
clicker: "Clicker"
|
clicker: "Clicker"
|
||||||
|
_widgetOptions:
|
||||||
|
height: "Wysokość"
|
||||||
|
_button:
|
||||||
|
colored: "Kolorowe"
|
||||||
|
_clock:
|
||||||
|
size: "Rozmiar"
|
||||||
|
_birthdayFollowings:
|
||||||
|
period: "Czas trwania"
|
||||||
_cw:
|
_cw:
|
||||||
hide: "Ukryj"
|
hide: "Ukryj"
|
||||||
show: "Załaduj więcej"
|
show: "Załaduj więcej"
|
||||||
|
|||||||
+9
-5
@@ -2489,6 +2489,15 @@ _widgets:
|
|||||||
clicker: "Clicker"
|
clicker: "Clicker"
|
||||||
birthdayFollowings: "Usuários de aniversário hoje"
|
birthdayFollowings: "Usuários de aniversário hoje"
|
||||||
chat: "Conversar com usuário"
|
chat: "Conversar com usuário"
|
||||||
|
_widgetOptions:
|
||||||
|
showHeader: "Exibir cabeçalho"
|
||||||
|
height: "Altura"
|
||||||
|
_button:
|
||||||
|
colored: "Colorido"
|
||||||
|
_clock:
|
||||||
|
size: "Tamanho"
|
||||||
|
_birthdayFollowings:
|
||||||
|
period: "Duração"
|
||||||
_cw:
|
_cw:
|
||||||
hide: "Esconder"
|
hide: "Esconder"
|
||||||
show: "Carregar mais"
|
show: "Carregar mais"
|
||||||
@@ -3230,7 +3239,6 @@ _imageEffector:
|
|||||||
title: "Efeitos"
|
title: "Efeitos"
|
||||||
addEffect: "Adicionar efeitos"
|
addEffect: "Adicionar efeitos"
|
||||||
discardChangesConfirm: "Tem certeza que deseja sair? Há mudanças não salvas."
|
discardChangesConfirm: "Tem certeza que deseja sair? Há mudanças não salvas."
|
||||||
nothingToConfigure: "Não há nada para configurar"
|
|
||||||
_fxs:
|
_fxs:
|
||||||
chromaticAberration: "Aberração cromática"
|
chromaticAberration: "Aberração cromática"
|
||||||
glitch: "Glitch"
|
glitch: "Glitch"
|
||||||
@@ -3281,11 +3289,7 @@ _imageEffector:
|
|||||||
threshold: "Limiar"
|
threshold: "Limiar"
|
||||||
centerX: "Centralizar X"
|
centerX: "Centralizar X"
|
||||||
centerY: "Centralizar Y"
|
centerY: "Centralizar Y"
|
||||||
zoomLinesSmoothing: "Suavização"
|
|
||||||
zoomLinesSmoothingDescription: "Suavização e largura das linhas de zoom não podem ser utilizados simultaneamente."
|
|
||||||
zoomLinesThreshold: "Largura das linhas de zoom"
|
|
||||||
zoomLinesMaskSize: "Diâmetro do centro"
|
zoomLinesMaskSize: "Diâmetro do centro"
|
||||||
zoomLinesBlack: "Linhas pretas"
|
|
||||||
circle: "Circular"
|
circle: "Circular"
|
||||||
drafts: "Rascunhos"
|
drafts: "Rascunhos"
|
||||||
_drafts:
|
_drafts:
|
||||||
|
|||||||
@@ -1301,6 +1301,12 @@ _widgets:
|
|||||||
jobQueue: "coada de job-uri"
|
jobQueue: "coada de job-uri"
|
||||||
_userList:
|
_userList:
|
||||||
chooseList: "Selectează o listă"
|
chooseList: "Selectează o listă"
|
||||||
|
_widgetOptions:
|
||||||
|
height: "Înălţime"
|
||||||
|
_button:
|
||||||
|
colored: "Colorat"
|
||||||
|
_clock:
|
||||||
|
size: "Dimensiune"
|
||||||
_cw:
|
_cw:
|
||||||
show: "Incarcă mai mult"
|
show: "Incarcă mai mult"
|
||||||
_visibility:
|
_visibility:
|
||||||
|
|||||||
+115
-16
@@ -83,6 +83,8 @@ files: "Файлы"
|
|||||||
download: "Скачать"
|
download: "Скачать"
|
||||||
driveFileDeleteConfirm: "Удалить файл «{name}»? Заметки с ним также будут удалены."
|
driveFileDeleteConfirm: "Удалить файл «{name}»? Заметки с ним также будут удалены."
|
||||||
unfollowConfirm: "Отписаться от {name} ?"
|
unfollowConfirm: "Отписаться от {name} ?"
|
||||||
|
cancelFollowRequestConfirm: "Вы уверены, что хотите отменить запрос на подписку пользователю {name}?"
|
||||||
|
rejectFollowRequestConfirm: "Отклонить запрос на подписку от {name}?"
|
||||||
exportRequested: "Вы запросили экспорт. Это может занять некоторое время. Результат будет добавлен на «Диск»."
|
exportRequested: "Вы запросили экспорт. Это может занять некоторое время. Результат будет добавлен на «Диск»."
|
||||||
importRequested: "Вы запросили импорт. Это может занять некоторое время."
|
importRequested: "Вы запросили импорт. Это может занять некоторое время."
|
||||||
lists: "Списки"
|
lists: "Списки"
|
||||||
@@ -199,7 +201,7 @@ searchWith: "Найденное «{q}»"
|
|||||||
youHaveNoLists: "У вас нет ни одного списка"
|
youHaveNoLists: "У вас нет ни одного списка"
|
||||||
followConfirm: "Подписаться на {name}?"
|
followConfirm: "Подписаться на {name}?"
|
||||||
proxyAccount: "Учётная запись прокси"
|
proxyAccount: "Учётная запись прокси"
|
||||||
proxyAccountDescription: "Учетная запись прокси предназначена служить подписчиком на пользователей с других сайтов. Например, если пользователь добавит кого-то с другого сайта а список, деятельность того не отобразится, пока никто с этого же сайта не подписан на него. Чтобы это стало возможным, на него подписывается прокси."
|
proxyAccountDescription: "Учетная запись прокси предназначена служить подписчиком на пользователей с других сайтов. Например: если пользователь добавит кого-то с другого сайта в список, то деятельность того не отобразится, пока никто с этого же сайта не подписан на него. Чтобы это стало возможным, на него подписывается прокси."
|
||||||
host: "Хост"
|
host: "Хост"
|
||||||
selectSelf: "Выбрать себя"
|
selectSelf: "Выбрать себя"
|
||||||
selectUser: "Выберите пользователя"
|
selectUser: "Выберите пользователя"
|
||||||
@@ -302,6 +304,7 @@ uploadFromUrlMayTakeTime: "Загрузка может занять некото
|
|||||||
uploadNFiles: "Загрузить {n} файл"
|
uploadNFiles: "Загрузить {n} файл"
|
||||||
explore: "Обзор"
|
explore: "Обзор"
|
||||||
messageRead: "Прочитали"
|
messageRead: "Прочитали"
|
||||||
|
readAllChatMessages: "Отметить прочитанным"
|
||||||
noMoreHistory: "История закончилась"
|
noMoreHistory: "История закончилась"
|
||||||
startChat: "Начать чат"
|
startChat: "Начать чат"
|
||||||
nUsersRead: "Прочитали {n}"
|
nUsersRead: "Прочитали {n}"
|
||||||
@@ -328,11 +331,13 @@ dark: "Тёмный"
|
|||||||
lightThemes: "Светлые темы"
|
lightThemes: "Светлые темы"
|
||||||
darkThemes: "Тёмные темы"
|
darkThemes: "Тёмные темы"
|
||||||
syncDeviceDarkMode: "Синхронизировать с тёмной темой системы"
|
syncDeviceDarkMode: "Синхронизировать с тёмной темой системы"
|
||||||
|
switchDarkModeManuallyWhenSyncEnabledConfirm: "Включена функция \"{x}\". Отключить синхронизацию, чтобы переключать режим вручную?"
|
||||||
drive: "Диск"
|
drive: "Диск"
|
||||||
fileName: "Имя файла"
|
fileName: "Имя файла"
|
||||||
selectFile: "Выберите файл"
|
selectFile: "Выберите файл"
|
||||||
selectFiles: "Выберите файлы"
|
selectFiles: "Выберите файлы"
|
||||||
selectFolder: "Выберите папку"
|
selectFolder: "Выберите папку"
|
||||||
|
unselectFolder: "Снять выбор"
|
||||||
selectFolders: "Выберите папки"
|
selectFolders: "Выберите папки"
|
||||||
fileNotSelected: "Файл не выбран"
|
fileNotSelected: "Файл не выбран"
|
||||||
renameFile: "Переименовать файл"
|
renameFile: "Переименовать файл"
|
||||||
@@ -345,6 +350,7 @@ addFile: "Добавить файл"
|
|||||||
showFile: "Посмотреть файл"
|
showFile: "Посмотреть файл"
|
||||||
emptyDrive: "Диск пуст"
|
emptyDrive: "Диск пуст"
|
||||||
emptyFolder: "Папка пуста"
|
emptyFolder: "Папка пуста"
|
||||||
|
dropHereToUpload: "Переместите файл сюда"
|
||||||
unableToDelete: "Удаление невозможно"
|
unableToDelete: "Удаление невозможно"
|
||||||
inputNewFileName: "Введите имя нового файла"
|
inputNewFileName: "Введите имя нового файла"
|
||||||
inputNewDescription: "Введите новую подпись"
|
inputNewDescription: "Введите новую подпись"
|
||||||
@@ -458,7 +464,7 @@ moderator: "Модератор"
|
|||||||
moderation: "Модерация"
|
moderation: "Модерация"
|
||||||
moderationNote: "Примечания модератора"
|
moderationNote: "Примечания модератора"
|
||||||
moderationNoteDescription: "Вы можете заполнять заметки, которые будут доступны только модераторам."
|
moderationNoteDescription: "Вы можете заполнять заметки, которые будут доступны только модераторам."
|
||||||
addModerationNote: ""
|
addModerationNote: "Оставить заметку"
|
||||||
moderationLogs: "Журнал модерации"
|
moderationLogs: "Журнал модерации"
|
||||||
nUsersMentioned: "Упомянуло пользователей: {n}"
|
nUsersMentioned: "Упомянуло пользователей: {n}"
|
||||||
securityKeyAndPasskey: "Ключ безопасности и парольная фраза"
|
securityKeyAndPasskey: "Ключ безопасности и парольная фраза"
|
||||||
@@ -602,7 +608,7 @@ installedDate: "Дата установки"
|
|||||||
lastUsedDate: "Дата использования"
|
lastUsedDate: "Дата использования"
|
||||||
state: "Состояние"
|
state: "Состояние"
|
||||||
sort: "Сортировать"
|
sort: "Сортировать"
|
||||||
ascendingOrder: "по возрастанию"
|
ascendingOrder: "По возрастанию"
|
||||||
descendingOrder: "По убыванию"
|
descendingOrder: "По убыванию"
|
||||||
scratchpad: "Когтеточка"
|
scratchpad: "Когтеточка"
|
||||||
scratchpadDescription: "«Когтеточка» — это место для опытов с AiScript. Здесь можно писать программы, взаимодействующие с Misskey, запускать и смотреть что из этого получается."
|
scratchpadDescription: "«Когтеточка» — это место для опытов с AiScript. Здесь можно писать программы, взаимодействующие с Misskey, запускать и смотреть что из этого получается."
|
||||||
@@ -623,9 +629,9 @@ removeAllFollowingDescription: "Отменить все подписки с до
|
|||||||
userSuspended: "Эта учётная запись заморожена"
|
userSuspended: "Эта учётная запись заморожена"
|
||||||
userSilenced: "Этот пользователь был заглушен"
|
userSilenced: "Этот пользователь был заглушен"
|
||||||
yourAccountSuspendedTitle: "Эта учетная запись заблокирована"
|
yourAccountSuspendedTitle: "Эта учетная запись заблокирована"
|
||||||
yourAccountSuspendedDescription: "Эта учетная запись была заблокирована из-за нарушения условий предоставления услуг сервера. Свяжитесь с администратором, если вы хотите узнать более подробную причину. Пожалуйста, не создавайте новую учетную запись."
|
yourAccountSuspendedDescription: "Этот аккаунт нарушил ToS сервера, поэтому был заморожен. Свяжитесь с администратором, чтобы узнать подробности. Не пытайтесь создать новый аккаунт."
|
||||||
tokenRevoked: "Токен недействителен"
|
tokenRevoked: "Токен недействителен"
|
||||||
tokenRevokedDescription: "Срок действия вашего токена входа истек. Пожалуйста, войдите снова."
|
tokenRevokedDescription: "Токен входа устарел. Пожалуйста, войдите снова."
|
||||||
accountDeleted: "Учетная запись удалена"
|
accountDeleted: "Учетная запись удалена"
|
||||||
accountDeletedDescription: "Эта учетная запись удалена"
|
accountDeletedDescription: "Эта учетная запись удалена"
|
||||||
menu: "Меню"
|
menu: "Меню"
|
||||||
@@ -684,9 +690,9 @@ smtpPort: "Порт"
|
|||||||
smtpUser: "Имя пользователя"
|
smtpUser: "Имя пользователя"
|
||||||
smtpPass: "Пароль"
|
smtpPass: "Пароль"
|
||||||
emptyToDisableSmtpAuth: "Не заполняйте имя пользователя и пароль, чтобы отключить аутентификацию в SMTP."
|
emptyToDisableSmtpAuth: "Не заполняйте имя пользователя и пароль, чтобы отключить аутентификацию в SMTP."
|
||||||
smtpSecure: "Использовать SSL/TLS для SMTP-соединений"
|
smtpSecure: "Использовать SSL/TLS"
|
||||||
smtpSecureInfo: "Выключите при использовании STARTTLS."
|
smtpSecureInfo: "Выключите при использовании STARTTLS."
|
||||||
testEmail: "Проверка доставки электронной почты"
|
testEmail: "Отправить тестовое письмо"
|
||||||
wordMute: "Скрытие слов"
|
wordMute: "Скрытие слов"
|
||||||
wordMuteDescription: "Сведите к минимуму записи, содержащие указанное утверждение. Нажмите на свернутую запись, чтобы отобразить ее."
|
wordMuteDescription: "Сведите к минимуму записи, содержащие указанное утверждение. Нажмите на свернутую запись, чтобы отобразить ее."
|
||||||
hardWordMute: "Строгое скрытие слов"
|
hardWordMute: "Строгое скрытие слов"
|
||||||
@@ -772,6 +778,7 @@ lockedAccountInfo: "Даже если вы вручную подтверждае
|
|||||||
alwaysMarkSensitive: "Отмечать файлы как «содержимое не для всех» по умолчанию"
|
alwaysMarkSensitive: "Отмечать файлы как «содержимое не для всех» по умолчанию"
|
||||||
loadRawImages: "Сразу показывать изображения в полном размере"
|
loadRawImages: "Сразу показывать изображения в полном размере"
|
||||||
disableShowingAnimatedImages: "Не проигрывать анимацию"
|
disableShowingAnimatedImages: "Не проигрывать анимацию"
|
||||||
|
disableShowingAnimatedImages_caption: "Если анимации всё равно не работают, проверьте настройки специальных возможностей и режимы экономии заряда в браузере или системе"
|
||||||
highlightSensitiveMedia: "Выделять содержимое не для всех"
|
highlightSensitiveMedia: "Выделять содержимое не для всех"
|
||||||
verificationEmailSent: "Вам отправлено письмо для подтверждения. Пройдите, пожалуйста, по ссылке из письма, чтобы завершить проверку."
|
verificationEmailSent: "Вам отправлено письмо для подтверждения. Пройдите, пожалуйста, по ссылке из письма, чтобы завершить проверку."
|
||||||
notSet: "Не настроено"
|
notSet: "Не настроено"
|
||||||
@@ -779,7 +786,7 @@ emailVerified: "Адрес электронной почты подтвержд
|
|||||||
noteFavoritesCount: "Количество добавленного в избранное"
|
noteFavoritesCount: "Количество добавленного в избранное"
|
||||||
pageLikesCount: "Количество понравившихся страниц"
|
pageLikesCount: "Количество понравившихся страниц"
|
||||||
pageLikedCount: "Количество страниц, понравившихся другим"
|
pageLikedCount: "Количество страниц, понравившихся другим"
|
||||||
contact: "Как связаться"
|
contact: "Почта для связи"
|
||||||
useSystemFont: "Использовать шрифт, предлагаемый системой"
|
useSystemFont: "Использовать шрифт, предлагаемый системой"
|
||||||
clips: "Подборки"
|
clips: "Подборки"
|
||||||
experimentalFeatures: "Экспериментальные функции"
|
experimentalFeatures: "Экспериментальные функции"
|
||||||
@@ -838,7 +845,7 @@ showingPastTimeline: "Отображается старая лента"
|
|||||||
clear: "Очистить"
|
clear: "Очистить"
|
||||||
markAllAsRead: "Отметить всё как прочитанное"
|
markAllAsRead: "Отметить всё как прочитанное"
|
||||||
goBack: "Выход"
|
goBack: "Выход"
|
||||||
unlikeConfirm: "В самом деле отменить «нравится»?"
|
unlikeConfirm: "В самом деле убрать «нравится»?"
|
||||||
fullView: "Полный вид"
|
fullView: "Полный вид"
|
||||||
quitFullView: "Закрыть полный вид"
|
quitFullView: "Закрыть полный вид"
|
||||||
addDescription: "Добавить описание"
|
addDescription: "Добавить описание"
|
||||||
@@ -883,7 +890,7 @@ priority: "Приоритет"
|
|||||||
high: "Высокий"
|
high: "Высокий"
|
||||||
middle: "Средне"
|
middle: "Средне"
|
||||||
low: "Низкий"
|
low: "Низкий"
|
||||||
emailNotConfiguredWarning: "Не указан адрес электронной почты"
|
emailNotConfiguredWarning: "Адрес почты пустует"
|
||||||
ratio: "Соотношение"
|
ratio: "Соотношение"
|
||||||
previewNoteText: "Предварительный просмотр"
|
previewNoteText: "Предварительный просмотр"
|
||||||
customCss: "Индивидуальный CSS"
|
customCss: "Индивидуальный CSS"
|
||||||
@@ -963,13 +970,13 @@ reflectMayTakeTime: "Изменения могут занять время дл
|
|||||||
failedToFetchAccountInformation: "Не удалось получить информацию об аккаунте"
|
failedToFetchAccountInformation: "Не удалось получить информацию об аккаунте"
|
||||||
rateLimitExceeded: "Ограничение скорости превышено"
|
rateLimitExceeded: "Ограничение скорости превышено"
|
||||||
cropImage: "Кадрирование"
|
cropImage: "Кадрирование"
|
||||||
cropImageAsk: "Нужно ли кадрировать изображение?"
|
cropImageAsk: "Обрезать изображение?"
|
||||||
cropYes: "Обрезать"
|
cropYes: "Обрезать"
|
||||||
cropNo: "Не обрезать"
|
cropNo: "Не обрезать"
|
||||||
file: "Файлы"
|
file: "Файлы"
|
||||||
recentNHours: "Последние {n} ч"
|
recentNHours: "Последние {n} ч"
|
||||||
recentNDays: "Последние {n} сут"
|
recentNDays: "Последние {n} сут"
|
||||||
noEmailServerWarning: "Почтовый сервер не установлен "
|
noEmailServerWarning: "Отправка писем выключена"
|
||||||
thereIsUnresolvedAbuseReportWarning: "Остались нерешённые жалобы"
|
thereIsUnresolvedAbuseReportWarning: "Остались нерешённые жалобы"
|
||||||
recommended: "Рекомендуем"
|
recommended: "Рекомендуем"
|
||||||
check: "Проверить"
|
check: "Проверить"
|
||||||
@@ -983,7 +990,7 @@ document: "Документ"
|
|||||||
numberOfPageCache: "Количество сохранённых страниц в кэше"
|
numberOfPageCache: "Количество сохранённых страниц в кэше"
|
||||||
numberOfPageCacheDescription: "Описание количества страниц в кэше"
|
numberOfPageCacheDescription: "Описание количества страниц в кэше"
|
||||||
logoutConfirm: "Вы хотите выйти из аккаунта?"
|
logoutConfirm: "Вы хотите выйти из аккаунта?"
|
||||||
logoutWillClearClientData: "Когда вы выйдете из системы, информация о конфигурации клиента будет удалена из браузера.Чтобы иметь возможность восстановить информацию о вашей конфигурации при повторном входе в систему, пожалуйста, включите опцию автоматического резервного копирования в настройках."
|
logoutWillClearClientData: "Выход из аккаунта удалит настройки клиента из этого браузера. Включите автоматическое резервное копирование, чтобы иметь возможность восстановить настройки при повторном входе."
|
||||||
lastActiveDate: "Последняя дата использования"
|
lastActiveDate: "Последняя дата использования"
|
||||||
statusbar: "Статусбар"
|
statusbar: "Статусбар"
|
||||||
pleaseSelect: "Пожалуйста, выберите"
|
pleaseSelect: "Пожалуйста, выберите"
|
||||||
@@ -1002,6 +1009,7 @@ failedToUpload: "Сбой выгрузки"
|
|||||||
cannotUploadBecauseInappropriate: "Файл не может быть загружен, так как было установлено, что он может содержать неприемлемое содержимое."
|
cannotUploadBecauseInappropriate: "Файл не может быть загружен, так как было установлено, что он может содержать неприемлемое содержимое."
|
||||||
cannotUploadBecauseNoFreeSpace: "Файл не может быть загружен, так как не осталось места на диске"
|
cannotUploadBecauseNoFreeSpace: "Файл не может быть загружен, так как не осталось места на диске"
|
||||||
cannotUploadBecauseExceedsFileSizeLimit: "Файл не может быть загружен, так как он превышает лимит размера файла."
|
cannotUploadBecauseExceedsFileSizeLimit: "Файл не может быть загружен, так как он превышает лимит размера файла."
|
||||||
|
cannotUploadBecauseUnallowedFileType: "Формат файла не подходит"
|
||||||
beta: "Бета"
|
beta: "Бета"
|
||||||
enableAutoSensitive: "Автоматическое определение содержимого не для всех"
|
enableAutoSensitive: "Автоматическое определение содержимого не для всех"
|
||||||
enableAutoSensitiveDescription: "Позволяет определять наличие содержимого не для всех при помощи искусственного интеллекта там, где это возможно. Даже если эту опцию отключить, она всё равно может быть включена на весь инстанс."
|
enableAutoSensitiveDescription: "Позволяет определять наличие содержимого не для всех при помощи искусственного интеллекта там, где это возможно. Даже если эту опцию отключить, она всё равно может быть включена на весь инстанс."
|
||||||
@@ -1017,6 +1025,9 @@ pushNotificationAlreadySubscribed: "Push-уведомления уже вклю
|
|||||||
pushNotificationNotSupported: "Push-уведмления не поддерживаются инстансом или браузером"
|
pushNotificationNotSupported: "Push-уведмления не поддерживаются инстансом или браузером"
|
||||||
sendPushNotificationReadMessage: "Удалять push-уведомления когда сообщение или прочитано"
|
sendPushNotificationReadMessage: "Удалять push-уведомления когда сообщение или прочитано"
|
||||||
sendPushNotificationReadMessageCaption: "На мгновение появится уведомление \"{emptyPushNotificationMessage}\". Расход заряда батареи может увеличиться "
|
sendPushNotificationReadMessageCaption: "На мгновение появится уведомление \"{emptyPushNotificationMessage}\". Расход заряда батареи может увеличиться "
|
||||||
|
pleaseAllowPushNotification: "Пожалуйста, разрешите уведомление в браузере от сайта"
|
||||||
|
browserPushNotificationDisabled: "Вы не дали разрешение на уведомления сайту"
|
||||||
|
browserPushNotificationDisabledDescription: "Разрешите уведомления в настройках браузера от {serverName}, чтобы включить PUSH уведомления"
|
||||||
windowMaximize: "Развернуть"
|
windowMaximize: "Развернуть"
|
||||||
windowMinimize: "Свернуть"
|
windowMinimize: "Свернуть"
|
||||||
windowRestore: "Восстановить"
|
windowRestore: "Восстановить"
|
||||||
@@ -1038,7 +1049,7 @@ roles: "Роли"
|
|||||||
role: "Роль"
|
role: "Роль"
|
||||||
noRole: "Нет роли"
|
noRole: "Нет роли"
|
||||||
normalUser: "Обычный пользователь"
|
normalUser: "Обычный пользователь"
|
||||||
undefined: "неопределён"
|
undefined: "неопределённо"
|
||||||
assign: "Назначить"
|
assign: "Назначить"
|
||||||
unassign: "Отменить назначение"
|
unassign: "Отменить назначение"
|
||||||
color: "Цвет"
|
color: "Цвет"
|
||||||
@@ -1053,6 +1064,7 @@ permissionDeniedError: "Операция запрещена"
|
|||||||
permissionDeniedErrorDescription: "У этой учетной записи нет разрешения на выполнение этой операции."
|
permissionDeniedErrorDescription: "У этой учетной записи нет разрешения на выполнение этой операции."
|
||||||
preset: "Шаблоны"
|
preset: "Шаблоны"
|
||||||
selectFromPresets: "Выбрать из шаблонов"
|
selectFromPresets: "Выбрать из шаблонов"
|
||||||
|
custom: "Пользовательские"
|
||||||
achievements: "Достижения"
|
achievements: "Достижения"
|
||||||
gotInvalidResponseError: "Сервер ответил ошибкой"
|
gotInvalidResponseError: "Сервер ответил ошибкой"
|
||||||
gotInvalidResponseErrorDescription: "Сервер временно не доступен. Возможно проводятся технические работы, или сервер отключен."
|
gotInvalidResponseErrorDescription: "Сервер временно не доступен. Возможно проводятся технические работы, или сервер отключен."
|
||||||
@@ -1091,6 +1103,7 @@ prohibitedWordsDescription2: "Разделение пробелом создаё
|
|||||||
hiddenTags: "Скрытые хештеги"
|
hiddenTags: "Скрытые хештеги"
|
||||||
hiddenTagsDescription: "Установленные теги не будут отображаться в тренде, можно установить несколько тегов."
|
hiddenTagsDescription: "Установленные теги не будут отображаться в тренде, можно установить несколько тегов."
|
||||||
notesSearchNotAvailable: "Поиск заметок недоступен"
|
notesSearchNotAvailable: "Поиск заметок недоступен"
|
||||||
|
usersSearchNotAvailable: "Функция \"поиска пользователей\" отключена"
|
||||||
license: "Лицензия"
|
license: "Лицензия"
|
||||||
unfavoriteConfirm: "Удалить избранное?"
|
unfavoriteConfirm: "Удалить избранное?"
|
||||||
myClips: "Мои подборки"
|
myClips: "Мои подборки"
|
||||||
@@ -1129,7 +1142,7 @@ vertical: "Вертикально"
|
|||||||
horizontal: "Горизонтально"
|
horizontal: "Горизонтально"
|
||||||
position: "Позиция"
|
position: "Позиция"
|
||||||
serverRules: "Правила сервера"
|
serverRules: "Правила сервера"
|
||||||
pleaseConfirmBelowBeforeSignup: "Для регистрации на данном сервере, необходимо согласится с нижеследующими положениями."
|
pleaseConfirmBelowBeforeSignup: "Прочитайте и согласитесь с информацией ниже, чтобы продолжить"
|
||||||
pleaseAgreeAllToContinue: "Чтобы продолжить, необходимо поставить отметки во всех полях \"согласен\"."
|
pleaseAgreeAllToContinue: "Чтобы продолжить, необходимо поставить отметки во всех полях \"согласен\"."
|
||||||
continue: "Продолжить"
|
continue: "Продолжить"
|
||||||
preservedUsernames: "Зарезервированные имена пользователей"
|
preservedUsernames: "Зарезервированные имена пользователей"
|
||||||
@@ -1178,6 +1191,9 @@ expirationDate: "Дата истечения"
|
|||||||
noExpirationDate: "Бессрочно"
|
noExpirationDate: "Бессрочно"
|
||||||
inviteCodeUsedAt: "Дата и время, когда был использован пригласительный код"
|
inviteCodeUsedAt: "Дата и время, когда был использован пригласительный код"
|
||||||
registeredUserUsingInviteCode: "Пользователи, которые использовали пригласительный код"
|
registeredUserUsingInviteCode: "Пользователи, которые использовали пригласительный код"
|
||||||
|
waitingForMailAuth: "Подтвердите вашу электронную почту"
|
||||||
|
inviteCodeCreator: "Создатель приглашения"
|
||||||
|
usedAt: "Использовано"
|
||||||
unused: "Неиспользованное"
|
unused: "Неиспользованное"
|
||||||
used: "Использован"
|
used: "Использован"
|
||||||
expired: "Срок действия приглашения истёк"
|
expired: "Срок действия приглашения истёк"
|
||||||
@@ -1186,43 +1202,59 @@ beSureToReadThisAsItIsImportant: "Это важно, поэтому, пожал
|
|||||||
iHaveReadXCarefullyAndAgree: "Я прочитал(а) и согласен(сна) с условиями \"{x}"
|
iHaveReadXCarefullyAndAgree: "Я прочитал(а) и согласен(сна) с условиями \"{x}"
|
||||||
dialog: "Диалог"
|
dialog: "Диалог"
|
||||||
icon: "Аватар"
|
icon: "Аватар"
|
||||||
|
forYou: "Для вас"
|
||||||
currentAnnouncements: "Текущие новости"
|
currentAnnouncements: "Текущие новости"
|
||||||
pastAnnouncements: "Предыдущие новости"
|
pastAnnouncements: "Предыдущие новости"
|
||||||
youHaveUnreadAnnouncements: "У вас есть непрочитанные уведомления"
|
youHaveUnreadAnnouncements: "У вас есть непрочитанные уведомления"
|
||||||
|
useSecurityKey: "Используйте ключ безопасности или Passkey, следуя подсказкам браузера"
|
||||||
replies: "Ответы"
|
replies: "Ответы"
|
||||||
renotes: "Репост"
|
renotes: "Репост"
|
||||||
loadReplies: "Показать ответы"
|
loadReplies: "Показать ответы"
|
||||||
loadConversation: "Загрузить беседу"
|
loadConversation: "Загрузить беседу"
|
||||||
pinnedList: "Закреплённый список"
|
pinnedList: "Закреплённый список"
|
||||||
keepScreenOn: "Держать экран включённым"
|
keepScreenOn: "Держать экран включённым"
|
||||||
|
verifiedLink: "Эта ссылка принадлежит пользователю"
|
||||||
|
notifyNotes: "Оповещать о публикациях"
|
||||||
unnotifyNotes: "Отписаться от сообщений"
|
unnotifyNotes: "Отписаться от сообщений"
|
||||||
authentication: "Аутентификация"
|
authentication: "Аутентификация"
|
||||||
authenticationRequiredToContinue: "Пожалуйста, пройдите аутентификацию, чтобы продолжить"
|
authenticationRequiredToContinue: "Пожалуйста, пройдите аутентификацию, чтобы продолжить"
|
||||||
dateAndTime: "Дата и время"
|
dateAndTime: "Дата и время"
|
||||||
showRenotes: "Показывать репосты"
|
showRenotes: "Показывать репосты"
|
||||||
edited: "Изменено"
|
edited: "Изменено"
|
||||||
|
notificationRecieveConfig: "Настроить оповещения"
|
||||||
mutualFollow: "Взаимные подписки"
|
mutualFollow: "Взаимные подписки"
|
||||||
followingOrFollower: "Подписки или подписчики"
|
followingOrFollower: "Подписки или подписчики"
|
||||||
fileAttachedOnly: "Только заметки с файлами"
|
fileAttachedOnly: "Только заметки с файлами"
|
||||||
showRepliesToOthersInTimeline: "Показывать ответы в ленте"
|
showRepliesToOthersInTimeline: "Показывать ответы в ленте"
|
||||||
|
hideRepliesToOthersInTimeline: "Скрыть чужие ответы в ленте"
|
||||||
showRepliesToOthersInTimelineAll: "Показывать в ленте ответы пользователей, на которых вы подписаны"
|
showRepliesToOthersInTimelineAll: "Показывать в ленте ответы пользователей, на которых вы подписаны"
|
||||||
hideRepliesToOthersInTimelineAll: "Скрывать в ленте ответы пользователей, на которых вы подписаны"
|
hideRepliesToOthersInTimelineAll: "Скрывать в ленте ответы пользователей, на которых вы подписаны"
|
||||||
|
confirmShowRepliesAll: "Это нельзя будет отменить. Показать ответы от всех, на кого вы подписаны?"
|
||||||
|
confirmHideRepliesAll: "Это нельзя будет отменить. Скрыть ответы от всех, на кого вы подписаны?"
|
||||||
|
externalServices: "Интеграции"
|
||||||
sourceCode: "Исходный код"
|
sourceCode: "Исходный код"
|
||||||
sourceCodeIsNotYetProvided: "Исходный код пока не доступен. Свяжитесь с администратором, чтобы исправить эту проблему."
|
sourceCodeIsNotYetProvided: "Исходный код пока не доступен. Свяжитесь с администратором, чтобы исправить эту проблему."
|
||||||
repositoryUrl: "Ссылка на репозиторий"
|
repositoryUrl: "Ссылка на репозиторий"
|
||||||
repositoryUrlDescription: "Если вы используете Misskey как есть (без изменений в исходном коде), введите https://github.com/misskey-dev/misskey"
|
repositoryUrlDescription: "Если вы используете Misskey как есть (без изменений в исходном коде), введите https://github.com/misskey-dev/misskey"
|
||||||
|
repositoryUrlOrTarballRequired: "Если репозиторий закрыт, необходимо предоставить ссылку на tarball. Подробности см. в файле \".config/example.yml\""
|
||||||
feedback: "Обратная связь"
|
feedback: "Обратная связь"
|
||||||
|
feedbackUrl: "Ссылка для обратной связи"
|
||||||
|
impressum: "О владельце"
|
||||||
privacyPolicy: "Политика Конфиденциальности"
|
privacyPolicy: "Политика Конфиденциальности"
|
||||||
privacyPolicyUrl: "Ссылка на Политику Конфиденциальности"
|
privacyPolicyUrl: "Ссылка на Политику Конфиденциальности"
|
||||||
tosAndPrivacyPolicy: "Условия использования и политика конфиденциальности"
|
tosAndPrivacyPolicy: "Условия использования и политика конфиденциальности"
|
||||||
avatarDecorations: "Украшения для аватара"
|
avatarDecorations: "Украшения для аватара"
|
||||||
attach: "Прикрепить"
|
attach: "Прикрепить"
|
||||||
|
detach: "Открепить"
|
||||||
detachAll: "Убрать всё"
|
detachAll: "Убрать всё"
|
||||||
angle: "Угол"
|
angle: "Угол"
|
||||||
flip: "Переворот"
|
flip: "Переворот"
|
||||||
showAvatarDecorations: "Показать украшения для аватара"
|
showAvatarDecorations: "Показать украшения для аватара"
|
||||||
|
releaseToRefresh: "Отпустите, чтобы обновить"
|
||||||
|
refreshing: "Обновление..."
|
||||||
pullDownToRefresh: "Опустите что бы обновить"
|
pullDownToRefresh: "Опустите что бы обновить"
|
||||||
useGroupedNotifications: "Отображать уведомления сгруппировано"
|
useGroupedNotifications: "Отображать уведомления сгруппировано"
|
||||||
|
emailVerificationFailedError: "Не смогли подтвердить почту. Вероятно, истек срок письма"
|
||||||
cwNotationRequired: "Если включена опция «Скрыть содержимое», необходимо написать аннотацию."
|
cwNotationRequired: "Если включена опция «Скрыть содержимое», необходимо написать аннотацию."
|
||||||
doReaction: "Добавить реакцию"
|
doReaction: "Добавить реакцию"
|
||||||
code: "Код"
|
code: "Код"
|
||||||
@@ -1232,34 +1264,49 @@ overwriteContentConfirm: "Текущее содержимое будет пер
|
|||||||
seasonalScreenEffect: "Эффект времени года на экране"
|
seasonalScreenEffect: "Эффект времени года на экране"
|
||||||
decorate: "Украсить"
|
decorate: "Украсить"
|
||||||
addMfmFunction: "Добавить MFM"
|
addMfmFunction: "Добавить MFM"
|
||||||
|
enableQuickAddMfmFunction: "Показывать расширенный выбор MFM"
|
||||||
bubbleGame: "BubbleGame"
|
bubbleGame: "BubbleGame"
|
||||||
sfx: "Звуковые эффекты"
|
sfx: "Звуковые эффекты"
|
||||||
soundWillBePlayed: "Будет воспроизведен звук"
|
soundWillBePlayed: "Будет воспроизведен звук"
|
||||||
showReplay: "Показать повтор"
|
showReplay: "Показать повтор"
|
||||||
|
replay: "Ответить"
|
||||||
endReplay: "Конец повтора"
|
endReplay: "Конец повтора"
|
||||||
lastNDays: "Последние {n} сут"
|
lastNDays: "Последние {n} сут"
|
||||||
hemisphere: "Место проживания"
|
hemisphere: "Место проживания"
|
||||||
userSaysSomethingSensitive: "Сообщение, содержит конфиденциальные файлы от {name}"
|
userSaysSomethingSensitive: "Сообщение, содержит конфиденциальные файлы от {name}"
|
||||||
enableHorizontalSwipe: "Смахните в сторону, чтобы сменить вкладки"
|
enableHorizontalSwipe: "Смахните в сторону, чтобы сменить вкладки"
|
||||||
|
loading: "Загрузка"
|
||||||
surrender: "Этот пост не может быть отменен."
|
surrender: "Этот пост не может быть отменен."
|
||||||
gameRetry: "Повторить попытку"
|
gameRetry: "Повторить попытку"
|
||||||
notUsePleaseLeaveBlank: "Если не используется, оставьте пустым"
|
notUsePleaseLeaveBlank: "Если не используется, оставьте пустым"
|
||||||
|
useTotp: "Включить двухэтапную проверку"
|
||||||
|
useBackupCode: "Использовать резервные коды"
|
||||||
|
launchApp: "Запустить приложение"
|
||||||
useNativeUIForVideoAudioPlayer: "Использовать интерфейс браузера при проигрывании видео и звука"
|
useNativeUIForVideoAudioPlayer: "Использовать интерфейс браузера при проигрывании видео и звука"
|
||||||
keepOriginalFilename: "Сохранять исходное имя файла"
|
keepOriginalFilename: "Сохранять исходное имя файла"
|
||||||
keepOriginalFilenameDescription: "Если вы выключите данную настройку, имена файлов будут автоматически заменены случайной строкой при загрузке."
|
keepOriginalFilenameDescription: "Если вы выключите данную настройку, имена файлов будут автоматически заменены случайной строкой при загрузке."
|
||||||
|
noDescription: "Нет описания"
|
||||||
alwaysConfirmFollow: "Всегда подтверждать подписку"
|
alwaysConfirmFollow: "Всегда подтверждать подписку"
|
||||||
inquiry: "Связаться"
|
inquiry: "Связаться"
|
||||||
|
tryAgain: "Попробуйте еще раз позже"
|
||||||
|
confirmWhenRevealingSensitiveMedia: "Спрашивать перед открытием NSFW контента"
|
||||||
|
sensitiveMediaRevealConfirm: "Возможно, это NSFW контент. Показать?"
|
||||||
|
createdLists: "Созданные списки"
|
||||||
|
createdAntennas: "Созданные антенны"
|
||||||
fromX: "Из {x}"
|
fromX: "Из {x}"
|
||||||
genEmbedCode: "Сгенерировать код для "
|
genEmbedCode: "Сгенерировать код для "
|
||||||
noteOfThisUser: "Список заметок этого пользователя"
|
noteOfThisUser: "Список заметок этого пользователя"
|
||||||
clipNoteLimitExceeded: "К этому клипу больше нельзя добавить заметки"
|
clipNoteLimitExceeded: "К этому клипу больше нельзя добавить заметки"
|
||||||
performance: "Производительность"
|
performance: "Производительность"
|
||||||
modified: "Изменено"
|
modified: "Изменено"
|
||||||
|
discard: "Отменить"
|
||||||
|
thereAreNChanges: "Изменено: {n}"
|
||||||
signinWithPasskey: "Войдите в систему, используя свой пароль"
|
signinWithPasskey: "Войдите в систему, используя свой пароль"
|
||||||
unknownWebAuthnKey: "Неизвестный ключ"
|
unknownWebAuthnKey: "Неизвестный ключ"
|
||||||
passkeyVerificationFailed: "Ошибка проверка ключа доступа "
|
passkeyVerificationFailed: "Ошибка проверка ключа доступа "
|
||||||
|
passkeyVerificationSucceededButPasswordlessLoginDisabled: "Проверка Passkey выполнена, но вход без пароля отключен"
|
||||||
messageToFollower: "Сообщение подписчикам"
|
messageToFollower: "Сообщение подписчикам"
|
||||||
testCaptchaWarning: "Эта функция предназначена для тестирования CAPTCHA. <strong>Не использовать это в рабочей среде</strong>"
|
testCaptchaWarning: "Эта тестовая CAPTCHA. <strong>Не используйте её!</strong>"
|
||||||
prohibitedWordsForNameOfUser: "Запрещенные слова (имя пользователя)"
|
prohibitedWordsForNameOfUser: "Запрещенные слова (имя пользователя)"
|
||||||
prohibitedWordsForNameOfUserDescription: "Если имя пользователя содержит строку из этого списка, изменение имени пользователя будет запрещено. На пользователей с правами модератора это ограничение не распространяется. Имена пользователей также проверяются путём замены всех букв в нижнем регистре"
|
prohibitedWordsForNameOfUserDescription: "Если имя пользователя содержит строку из этого списка, изменение имени пользователя будет запрещено. На пользователей с правами модератора это ограничение не распространяется. Имена пользователей также проверяются путём замены всех букв в нижнем регистре"
|
||||||
yourNameContainsProhibitedWords: "Имя, которое вы пытаетесь изменить, содержит запрещенную строку символов"
|
yourNameContainsProhibitedWords: "Имя, которое вы пытаетесь изменить, содержит запрещенную строку символов"
|
||||||
@@ -1268,24 +1315,65 @@ thisContentsAreMarkedAsSigninRequiredByAuthor: "Автор сообщения у
|
|||||||
lockdown: "Доступ ограничен"
|
lockdown: "Доступ ограничен"
|
||||||
pleaseSelectAccount: "Выберите свой аккаунт"
|
pleaseSelectAccount: "Выберите свой аккаунт"
|
||||||
availableRoles: "Доступные роли"
|
availableRoles: "Доступные роли"
|
||||||
|
federationSpecified: "Сервер работает через белый список федерации. Связь с другими серверами ограничена"
|
||||||
federationDisabled: "Федерация отключена для этого сервера. Вы не можете взаимодействовать с пользователями на других серверах."
|
federationDisabled: "Федерация отключена для этого сервера. Вы не можете взаимодействовать с пользователями на других серверах."
|
||||||
draft: "Черновик"
|
draft: "Черновик"
|
||||||
|
draftsAndScheduledNotes: "Черновики и отложенные публикации"
|
||||||
|
confirmOnReact: "Подтверждать добавление реакции"
|
||||||
|
reactAreYouSure: "Добавить {emoji}?"
|
||||||
markAsSensitiveConfirm: "Отметить контент как чувствительный?"
|
markAsSensitiveConfirm: "Отметить контент как чувствительный?"
|
||||||
|
unmarkAsSensitiveConfirm: "Снять пометку о NSFW контенте?"
|
||||||
preferences: "Основное"
|
preferences: "Основное"
|
||||||
|
accessibility: "Специальные возможности"
|
||||||
|
preferencesProfile: "Настройки профиля"
|
||||||
|
copyPreferenceId: "Копировать ID настройки"
|
||||||
resetToDefaultValue: "Сбросить настройки до стандартных"
|
resetToDefaultValue: "Сбросить настройки до стандартных"
|
||||||
|
overrideByAccount: "Переопределить этим аккаунтом"
|
||||||
|
untitled: "Без названия"
|
||||||
|
noName: "Имя не указано"
|
||||||
|
skip: "Пропустить"
|
||||||
syncBetweenDevices: "Синхронизировать между устройствами"
|
syncBetweenDevices: "Синхронизировать между устройствами"
|
||||||
postForm: "Форма отправки"
|
postForm: "Форма отправки"
|
||||||
textCount: "Количество символов"
|
textCount: "Количество символов"
|
||||||
information: "Описание"
|
information: "Описание"
|
||||||
inMinutes: "мин"
|
inMinutes: "мин"
|
||||||
inDays: "сут"
|
inDays: "сут"
|
||||||
|
schedule: "Отложить"
|
||||||
|
scheduled: "Отложено"
|
||||||
widgets: "Виджеты"
|
widgets: "Виджеты"
|
||||||
|
deviceInfo: "Об устройстве"
|
||||||
|
deviceInfoDescription: "Эта информация может быть полезна при обращении в поддержку"
|
||||||
|
youAreAdmin: "Вы администратор"
|
||||||
|
frame: "Рамки"
|
||||||
presets: "Шаблоны"
|
presets: "Шаблоны"
|
||||||
|
zeroPadding: "Без отступов"
|
||||||
|
nothingToConfigure: "Нечего менять"
|
||||||
_imageEditing:
|
_imageEditing:
|
||||||
_vars:
|
_vars:
|
||||||
|
caption: "Описание файла"
|
||||||
filename: "Имя файла"
|
filename: "Имя файла"
|
||||||
|
filename_without_ext: "Имя файла без расширения"
|
||||||
|
year: "Год создания"
|
||||||
|
month: "Месяц создания"
|
||||||
|
day: "День создания"
|
||||||
|
hour: "Час создания"
|
||||||
|
minute: "Минуты создания"
|
||||||
|
second: "Секунды создания"
|
||||||
|
camera_model: "Модель камеры"
|
||||||
|
camera_lens_model: "Модель линзы"
|
||||||
|
camera_mm: "Фокусное расстояние"
|
||||||
|
camera_mm_35: "Фокусное расстояние (экв. 35 мм)"
|
||||||
|
camera_f: "Диафрагма"
|
||||||
|
camera_s: "Выдержка"
|
||||||
|
camera_iso: "ISO"
|
||||||
|
gps_lat: "Широта"
|
||||||
|
gps_long: "Долгота"
|
||||||
_imageFrameEditor:
|
_imageFrameEditor:
|
||||||
|
title: "Редактировать рамку"
|
||||||
header: "Заголовок"
|
header: "Заголовок"
|
||||||
|
footer: "Нижняя часть"
|
||||||
|
borderThickness: "Толщина рамки"
|
||||||
|
labelThickness: "Толщина границ"
|
||||||
font: "Шрифт"
|
font: "Шрифт"
|
||||||
fontSerif: "Антиква (с засечками)"
|
fontSerif: "Антиква (с засечками)"
|
||||||
fontSansSerif: "Гротеск (без засечек)"
|
fontSansSerif: "Гротеск (без засечек)"
|
||||||
@@ -1661,6 +1749,7 @@ _emailUnavailable:
|
|||||||
disposable: "Временный адрес электронной почты не принимается"
|
disposable: "Временный адрес электронной почты не принимается"
|
||||||
mx: "Неверный почтовый сервер"
|
mx: "Неверный почтовый сервер"
|
||||||
smtp: "Почтовый сервер не отвечает"
|
smtp: "Почтовый сервер не отвечает"
|
||||||
|
banned: "Этот адрес почты недоступен"
|
||||||
_ffVisibility:
|
_ffVisibility:
|
||||||
public: "Общедоступны"
|
public: "Общедоступны"
|
||||||
followers: "Показываются только подписчикам"
|
followers: "Показываются только подписчикам"
|
||||||
@@ -1921,6 +2010,7 @@ _permissions:
|
|||||||
"read:gallery-likes": "Просмотр списка понравившегося в галерее"
|
"read:gallery-likes": "Просмотр списка понравившегося в галерее"
|
||||||
"write:gallery-likes": "Изменение списка понравившегося в галерее"
|
"write:gallery-likes": "Изменение списка понравившегося в галерее"
|
||||||
"write:admin:reset-password": "Сбросить пароль пользователю"
|
"write:admin:reset-password": "Сбросить пароль пользователю"
|
||||||
|
"write:admin:send-email": "Отправить письмо"
|
||||||
"write:chat": "Писать и удалять сообщения"
|
"write:chat": "Писать и удалять сообщения"
|
||||||
_auth:
|
_auth:
|
||||||
shareAccessTitle: "Разрешения для приложений"
|
shareAccessTitle: "Разрешения для приложений"
|
||||||
@@ -1976,6 +2066,14 @@ _widgets:
|
|||||||
chooseList: "Выберите список"
|
chooseList: "Выберите список"
|
||||||
clicker: "Счётчик щелчков"
|
clicker: "Счётчик щелчков"
|
||||||
birthdayFollowings: "Пользователи, у которых сегодня день рождения"
|
birthdayFollowings: "Пользователи, у которых сегодня день рождения"
|
||||||
|
_widgetOptions:
|
||||||
|
height: "Высота"
|
||||||
|
_button:
|
||||||
|
colored: "Выделена цветом"
|
||||||
|
_clock:
|
||||||
|
size: "Размер"
|
||||||
|
_birthdayFollowings:
|
||||||
|
period: "Длительность"
|
||||||
_cw:
|
_cw:
|
||||||
hide: "Спрятать"
|
hide: "Спрятать"
|
||||||
show: "Показать"
|
show: "Показать"
|
||||||
@@ -2245,6 +2343,7 @@ _abuseReport:
|
|||||||
mail: "Электронная почта"
|
mail: "Электронная почта"
|
||||||
webhook: "Вебхук"
|
webhook: "Вебхук"
|
||||||
_captions:
|
_captions:
|
||||||
|
mail: "Уведомлять модераторов по почте (только при поступлении жалоб)"
|
||||||
webhook: "Отправить уведомление Системному Вебхуку при получении или разрешении жалоб."
|
webhook: "Отправить уведомление Системному Вебхуку при получении или разрешении жалоб."
|
||||||
notifiedWebhook: "Используемый Вебхук"
|
notifiedWebhook: "Используемый Вебхук"
|
||||||
_moderationLogTypes:
|
_moderationLogTypes:
|
||||||
|
|||||||
@@ -1232,6 +1232,14 @@ _widgets:
|
|||||||
aichan: "Ai"
|
aichan: "Ai"
|
||||||
_userList:
|
_userList:
|
||||||
chooseList: "Vyberte zoznam"
|
chooseList: "Vyberte zoznam"
|
||||||
|
_widgetOptions:
|
||||||
|
height: "Výška"
|
||||||
|
_button:
|
||||||
|
colored: "Farebné"
|
||||||
|
_clock:
|
||||||
|
size: "Veľkosť"
|
||||||
|
_birthdayFollowings:
|
||||||
|
period: "Trvanie"
|
||||||
_cw:
|
_cw:
|
||||||
hide: "Skryť"
|
hide: "Skryť"
|
||||||
show: "Zobraziť viac"
|
show: "Zobraziť viac"
|
||||||
|
|||||||
@@ -639,6 +639,9 @@ _widgets:
|
|||||||
jobQueue: "Jobbkö"
|
jobQueue: "Jobbkö"
|
||||||
_userList:
|
_userList:
|
||||||
chooseList: "Välj lista"
|
chooseList: "Välj lista"
|
||||||
|
_widgetOptions:
|
||||||
|
_clock:
|
||||||
|
size: "Storlek"
|
||||||
_cw:
|
_cw:
|
||||||
hide: "Dölj"
|
hide: "Dölj"
|
||||||
show: "Ladda mer"
|
show: "Ladda mer"
|
||||||
|
|||||||
+142
-26
@@ -83,6 +83,8 @@ files: "ไฟล์"
|
|||||||
download: "ดาวน์โหลด"
|
download: "ดาวน์โหลด"
|
||||||
driveFileDeleteConfirm: "ต้องการลบไฟล์ “{name}” ใช่ไหม? โน้ตที่แนบมากับไฟล์นี้ก็จะถูกลบไปด้วย"
|
driveFileDeleteConfirm: "ต้องการลบไฟล์ “{name}” ใช่ไหม? โน้ตที่แนบมากับไฟล์นี้ก็จะถูกลบไปด้วย"
|
||||||
unfollowConfirm: "ต้องการเลิกติดตาม {name} ใช่ไหม?"
|
unfollowConfirm: "ต้องการเลิกติดตาม {name} ใช่ไหม?"
|
||||||
|
cancelFollowRequestConfirm: "ยกเลิกคำขอติดตาม {name} ใช่ไหม?"
|
||||||
|
rejectFollowRequestConfirm: "ปฏิเสธคำขอติดตามจาก {name} ใช่ไหม?"
|
||||||
exportRequested: "คุณได้ร้องขอการส่งออก อาจใช้เวลาสักครู่ และจะถูกเพิ่มในไดรฟ์ของคุณเมื่อเสร็จสิ้นแล้ว"
|
exportRequested: "คุณได้ร้องขอการส่งออก อาจใช้เวลาสักครู่ และจะถูกเพิ่มในไดรฟ์ของคุณเมื่อเสร็จสิ้นแล้ว"
|
||||||
importRequested: "คุณได้ร้องขอการนำเข้า การดำเนินการนี้อาจใช้เวลาสักครู่"
|
importRequested: "คุณได้ร้องขอการนำเข้า การดำเนินการนี้อาจใช้เวลาสักครู่"
|
||||||
lists: "รายชื่อ"
|
lists: "รายชื่อ"
|
||||||
@@ -204,7 +206,7 @@ host: "โฮสต์"
|
|||||||
selectSelf: "เลือกตัวเอง"
|
selectSelf: "เลือกตัวเอง"
|
||||||
selectUser: "เลือกผู้ใช้งาน"
|
selectUser: "เลือกผู้ใช้งาน"
|
||||||
recipient: "ผู้รับ"
|
recipient: "ผู้รับ"
|
||||||
annotation: "หมายเหตุประกอบ"
|
annotation: "ข้อความเกริ่น"
|
||||||
federation: "สหพันธ์"
|
federation: "สหพันธ์"
|
||||||
instances: "เซิร์ฟเวอร์"
|
instances: "เซิร์ฟเวอร์"
|
||||||
registeredAt: "วันที่ลงทะเบียน"
|
registeredAt: "วันที่ลงทะเบียน"
|
||||||
@@ -222,7 +224,7 @@ operations: "ดำเนินการ"
|
|||||||
software: "ซอฟต์แวร์"
|
software: "ซอฟต์แวร์"
|
||||||
softwareName: "ชื่อซอฟต์แวร์"
|
softwareName: "ชื่อซอฟต์แวร์"
|
||||||
version: "เวอร์ชั่น"
|
version: "เวอร์ชั่น"
|
||||||
metadata: "Metadata"
|
metadata: "เมทาเดต้า"
|
||||||
withNFiles: "{n} ไฟล์"
|
withNFiles: "{n} ไฟล์"
|
||||||
monitor: "มอนิเตอร์"
|
monitor: "มอนิเตอร์"
|
||||||
jobQueue: "คิวงาน"
|
jobQueue: "คิวงาน"
|
||||||
@@ -302,6 +304,7 @@ uploadFromUrlMayTakeTime: "การอัปโหลดอาจใช้เ
|
|||||||
uploadNFiles: "อัปโหลด {n} ไฟล์"
|
uploadNFiles: "อัปโหลด {n} ไฟล์"
|
||||||
explore: "สำรวจ"
|
explore: "สำรวจ"
|
||||||
messageRead: "อ่านแล้ว"
|
messageRead: "อ่านแล้ว"
|
||||||
|
readAllChatMessages: "ทำเครื่องหมายใส่ข้อความทั้งหมดว่าอ่านแล้ว"
|
||||||
noMoreHistory: "ไม่มีประวัติเพิ่มเติม"
|
noMoreHistory: "ไม่มีประวัติเพิ่มเติม"
|
||||||
startChat: "เริ่มแชต"
|
startChat: "เริ่มแชต"
|
||||||
nUsersRead: "อ่านโดย {n}"
|
nUsersRead: "อ่านโดย {n}"
|
||||||
@@ -334,6 +337,7 @@ fileName: "ชื่อไฟล์"
|
|||||||
selectFile: "เลือกไฟล์"
|
selectFile: "เลือกไฟล์"
|
||||||
selectFiles: "เลือกไฟล์"
|
selectFiles: "เลือกไฟล์"
|
||||||
selectFolder: "เลือกโฟลเดอร์"
|
selectFolder: "เลือกโฟลเดอร์"
|
||||||
|
unselectFolder: "ยกเลิกการเลือกโฟลเดอร์"
|
||||||
selectFolders: "เลือกโฟลเดอร์"
|
selectFolders: "เลือกโฟลเดอร์"
|
||||||
fileNotSelected: "ยังไม่ได้เลือกไฟล์"
|
fileNotSelected: "ยังไม่ได้เลือกไฟล์"
|
||||||
renameFile: "เปลี่ยนชื่อไฟล์"
|
renameFile: "เปลี่ยนชื่อไฟล์"
|
||||||
@@ -346,6 +350,7 @@ addFile: "เพิ่มไฟล์"
|
|||||||
showFile: "แสดงไฟล์"
|
showFile: "แสดงไฟล์"
|
||||||
emptyDrive: "ไดรฟ์ของคุณว่างเปล่านะ"
|
emptyDrive: "ไดรฟ์ของคุณว่างเปล่านะ"
|
||||||
emptyFolder: "โฟลเดอร์นี้ว่างเปล่า"
|
emptyFolder: "โฟลเดอร์นี้ว่างเปล่า"
|
||||||
|
dropHereToUpload: "ดรอปไฟล์ลงที่นี่เพื่ออัปโหลด"
|
||||||
unableToDelete: "ไม่สามารถลบออกได้"
|
unableToDelete: "ไม่สามารถลบออกได้"
|
||||||
inputNewFileName: "ป้อนชื่อไฟล์ใหม่"
|
inputNewFileName: "ป้อนชื่อไฟล์ใหม่"
|
||||||
inputNewDescription: "กรุณาใส่แคปชั่นใหม่"
|
inputNewDescription: "กรุณาใส่แคปชั่นใหม่"
|
||||||
@@ -428,7 +433,7 @@ antennaKeywordsDescription: "คั่นด้วยเว้นวรรคส
|
|||||||
notifyAntenna: "แจ้งเตือนเกี่ยวกับโน้ตใหม่"
|
notifyAntenna: "แจ้งเตือนเกี่ยวกับโน้ตใหม่"
|
||||||
withFileAntenna: "เฉพาะโน้ตที่มีไฟล์"
|
withFileAntenna: "เฉพาะโน้ตที่มีไฟล์"
|
||||||
excludeNotesInSensitiveChannel: "ไม่รวมโน้ตจากช่องเนื้อหาละเอียดอ่อน"
|
excludeNotesInSensitiveChannel: "ไม่รวมโน้ตจากช่องเนื้อหาละเอียดอ่อน"
|
||||||
enableServiceworker: "เปิดใช้งานการแจ้งเตือนแบบพุชไปยังเบราว์เซอร์ของคุณ"
|
enableServiceworker: "เปิดใช้งานการแจ้งเตือนแบบพุชไปยังเบราว์เซอร์"
|
||||||
antennaUsersDescription: "ระบุหนึ่งชื่อผู้ใช้ต่อบรรทัด"
|
antennaUsersDescription: "ระบุหนึ่งชื่อผู้ใช้ต่อบรรทัด"
|
||||||
caseSensitive: "อักษรพิมพ์ใหญ่-พิมพ์เล็กความหมายต่างกัน"
|
caseSensitive: "อักษรพิมพ์ใหญ่-พิมพ์เล็กความหมายต่างกัน"
|
||||||
withReplies: "รวมตอบกลับ"
|
withReplies: "รวมตอบกลับ"
|
||||||
@@ -538,6 +543,7 @@ regenerate: "สร้างอีกครั้ง"
|
|||||||
fontSize: "ขนาดตัวอักษร"
|
fontSize: "ขนาดตัวอักษร"
|
||||||
mediaListWithOneImageAppearance: "ความสูงของรายการสื่อที่มีเพียงรูปเดียว"
|
mediaListWithOneImageAppearance: "ความสูงของรายการสื่อที่มีเพียงรูปเดียว"
|
||||||
limitTo: "จำกัดไว้ที่ {x}"
|
limitTo: "จำกัดไว้ที่ {x}"
|
||||||
|
showMediaListByGridInWideArea: "เมื่อหน้าจอกว้างยาวขึ้น ให้เรียงรายการสื่อเป็นแนวนอน"
|
||||||
noFollowRequests: "คุณไม่มีคำขอติดตามที่รอดำเนินการ"
|
noFollowRequests: "คุณไม่มีคำขอติดตามที่รอดำเนินการ"
|
||||||
openImageInNewTab: "เปิดรูปภาพในแท็บใหม่"
|
openImageInNewTab: "เปิดรูปภาพในแท็บใหม่"
|
||||||
dashboard: "หน้ากระดานหลัก"
|
dashboard: "หน้ากระดานหลัก"
|
||||||
@@ -612,7 +618,7 @@ uiInspectorDescription: "คุณสามารถตรวจสอบรา
|
|||||||
output: "เอาท์พุต"
|
output: "เอาท์พุต"
|
||||||
script: "สคริปต์"
|
script: "สคริปต์"
|
||||||
disablePagesScript: "ปิดการใช้งาน AiScript บนเพจ"
|
disablePagesScript: "ปิดการใช้งาน AiScript บนเพจ"
|
||||||
updateRemoteUser: "อัปเดตข้อมูลผู้ใช้งานระยะไกล"
|
updateRemoteUser: "อัปเดตข้อมูลผู้ใช้ระยะไกล"
|
||||||
unsetUserAvatar: "เลิกตั้งไอคอน"
|
unsetUserAvatar: "เลิกตั้งไอคอน"
|
||||||
unsetUserAvatarConfirm: "ต้องการเลิกตั้งไอคอนประจำตัวหรือไม่?"
|
unsetUserAvatarConfirm: "ต้องการเลิกตั้งไอคอนประจำตัวหรือไม่?"
|
||||||
unsetUserBanner: "เลิกตั้งแบนเนอร์"
|
unsetUserBanner: "เลิกตั้งแบนเนอร์"
|
||||||
@@ -773,6 +779,7 @@ lockedAccountInfo: "แม้ว่าการอนุมัติการต
|
|||||||
alwaysMarkSensitive: "ทำเครื่องหมายว่ามีเนื้อหาละเอียดอ่อนเป็นค่าเริ่มต้น"
|
alwaysMarkSensitive: "ทำเครื่องหมายว่ามีเนื้อหาละเอียดอ่อนเป็นค่าเริ่มต้น"
|
||||||
loadRawImages: "โหลดภาพต้นฉบับแทนการแสดงภาพขนาดย่อ"
|
loadRawImages: "โหลดภาพต้นฉบับแทนการแสดงภาพขนาดย่อ"
|
||||||
disableShowingAnimatedImages: "ไม่ต้องเล่นภาพเคลื่อนไหว"
|
disableShowingAnimatedImages: "ไม่ต้องเล่นภาพเคลื่อนไหว"
|
||||||
|
disableShowingAnimatedImages_caption: "หากภาพเคลื่อนไหวไม่เล่นแม่จะปิดตั้งค่านี้ไปแล้ว อาจเป็นกรณีที่การตั้งค่าการช่วยการเข้าถึงหรือการประหยัดพลังงาน ของเบราว์เซอร์/OS เข้าแทรกแซง"
|
||||||
highlightSensitiveMedia: "ไฮไลท์สื่อที่มีเนื้อหาละเอียดอ่อน"
|
highlightSensitiveMedia: "ไฮไลท์สื่อที่มีเนื้อหาละเอียดอ่อน"
|
||||||
verificationEmailSent: "ได้ส่งอีเมลยืนยันแล้ว กรุณาเข้าลิงก์ที่ระบุในอีเมลเพื่อทำการตั้งค่าให้เสร็จสิ้น"
|
verificationEmailSent: "ได้ส่งอีเมลยืนยันแล้ว กรุณาเข้าลิงก์ที่ระบุในอีเมลเพื่อทำการตั้งค่าให้เสร็จสิ้น"
|
||||||
notSet: "ไม่ได้ตั้งค่า"
|
notSet: "ไม่ได้ตั้งค่า"
|
||||||
@@ -887,7 +894,7 @@ low: "ต่ำ"
|
|||||||
emailNotConfiguredWarning: "ยังไม่ได้ตั้งค่าที่อยู่อีเมล"
|
emailNotConfiguredWarning: "ยังไม่ได้ตั้งค่าที่อยู่อีเมล"
|
||||||
ratio: "อัตราส่วน"
|
ratio: "อัตราส่วน"
|
||||||
previewNoteText: "แสดงตัวอย่าง"
|
previewNoteText: "แสดงตัวอย่าง"
|
||||||
customCss: "CSS ที่กำหนดเอง"
|
customCss: "CSS แบบกำหนดเอง"
|
||||||
customCssWarn: "ควรใช้การตั้งค่านี้เฉพาะต่อเมื่อคุณรู้มันใช้ทำอะไร การตั้งค่าที่ไม่เหมาะสมอาจทำให้ไคลเอ็นต์ไม่สามารถใช้งานได้อย่างถูกต้อง"
|
customCssWarn: "ควรใช้การตั้งค่านี้เฉพาะต่อเมื่อคุณรู้มันใช้ทำอะไร การตั้งค่าที่ไม่เหมาะสมอาจทำให้ไคลเอ็นต์ไม่สามารถใช้งานได้อย่างถูกต้อง"
|
||||||
global: "ทั่วโลก"
|
global: "ทั่วโลก"
|
||||||
squareAvatars: "แสดงไอคอนประจำตัวเป็นสี่เหลี่ยม"
|
squareAvatars: "แสดงไอคอนประจำตัวเป็นสี่เหลี่ยม"
|
||||||
@@ -930,7 +937,7 @@ unmuteThread: "เลิกปิดเสียงเธรด"
|
|||||||
followingVisibility: "การมองเห็นที่เรากำลังติดตาม"
|
followingVisibility: "การมองเห็นที่เรากำลังติดตาม"
|
||||||
followersVisibility: "การมองเห็นผู้ที่กำลังติดตามเรา"
|
followersVisibility: "การมองเห็นผู้ที่กำลังติดตามเรา"
|
||||||
continueThread: "ดูความต่อเนื่องเธรด"
|
continueThread: "ดูความต่อเนื่องเธรด"
|
||||||
deleteAccountConfirm: "การดำเนินการนี้จะลบบัญชีของคุณอย่างถาวรเลยนะ แน่ใจหรอดำเนินการ?"
|
deleteAccountConfirm: "บัญชีจะถูกลบ ดำเนินการต่อใช่ไหม?"
|
||||||
incorrectPassword: "รหัสผ่านไม่ถูกต้อง"
|
incorrectPassword: "รหัสผ่านไม่ถูกต้อง"
|
||||||
incorrectTotp: "รหัสยืนยันตัวตนแบบใช้ครั้งเดียวที่ท่านได้ระบุมานั้น ไม่ถูกต้องหรือหมดอายุลงแล้วค่ะ"
|
incorrectTotp: "รหัสยืนยันตัวตนแบบใช้ครั้งเดียวที่ท่านได้ระบุมานั้น ไม่ถูกต้องหรือหมดอายุลงแล้วค่ะ"
|
||||||
voteConfirm: "ต้องการโหวต “{choice}” ใช่ไหม?"
|
voteConfirm: "ต้องการโหวต “{choice}” ใช่ไหม?"
|
||||||
@@ -991,7 +998,7 @@ pleaseSelect: "ตัวเลือก"
|
|||||||
reverse: "พลิก"
|
reverse: "พลิก"
|
||||||
colored: "สี"
|
colored: "สี"
|
||||||
refreshInterval: "ความถี่ในการอัปเดต"
|
refreshInterval: "ความถี่ในการอัปเดต"
|
||||||
label: "ป้ายชื่อ"
|
label: "ป้าย"
|
||||||
type: "รูปแบบ"
|
type: "รูปแบบ"
|
||||||
speed: "ความเร็ว"
|
speed: "ความเร็ว"
|
||||||
slow: "ช้า"
|
slow: "ช้า"
|
||||||
@@ -1019,6 +1026,9 @@ pushNotificationAlreadySubscribed: "การแจ้งเตือนแบ
|
|||||||
pushNotificationNotSupported: "เบราว์เซอร์หรือเซิร์ฟเวอร์ไม่รองรับการแจ้งเตือนแบบพุช"
|
pushNotificationNotSupported: "เบราว์เซอร์หรือเซิร์ฟเวอร์ไม่รองรับการแจ้งเตือนแบบพุช"
|
||||||
sendPushNotificationReadMessage: "ลบการแจ้งเตือนแบบพุชเมื่ออ่านการแจ้งเตือนหรือข้อความที่เกี่ยวข้องแล้ว"
|
sendPushNotificationReadMessage: "ลบการแจ้งเตือนแบบพุชเมื่ออ่านการแจ้งเตือนหรือข้อความที่เกี่ยวข้องแล้ว"
|
||||||
sendPushNotificationReadMessageCaption: "อาจทำให้อุปกรณ์ของคุณใช้พลังงานมากขึ้น"
|
sendPushNotificationReadMessageCaption: "อาจทำให้อุปกรณ์ของคุณใช้พลังงานมากขึ้น"
|
||||||
|
pleaseAllowPushNotification: "โปรดอนุญาตการตั้งค่าการแจ้งเตือนของเบราว์เซอร์"
|
||||||
|
browserPushNotificationDisabled: "ขอสิทธิ์ส่งการแจ้งเตือนล้มเหลว"
|
||||||
|
browserPushNotificationDisabledDescription: "ไม่มีสิทธิ์ในการส่งการแจ้งเตือนจาก {serverName} โปรดอนุญาตการแจ้งเตือนในตั้งค่าของเบราว์เซอร์ แล้วลองอีกครั้ง"
|
||||||
windowMaximize: "ขยายใหญ่สุด"
|
windowMaximize: "ขยายใหญ่สุด"
|
||||||
windowMinimize: "ย่อเล็กที่สุด"
|
windowMinimize: "ย่อเล็กที่สุด"
|
||||||
windowRestore: "เลิกทำ"
|
windowRestore: "เลิกทำ"
|
||||||
@@ -1099,8 +1109,8 @@ license: "ใบอนุญาต"
|
|||||||
unfavoriteConfirm: "ลบออกจากรายการโปรดแน่ใจหรอ?"
|
unfavoriteConfirm: "ลบออกจากรายการโปรดแน่ใจหรอ?"
|
||||||
myClips: "คลิปของฉัน"
|
myClips: "คลิปของฉัน"
|
||||||
drivecleaner: "ทำความสะอาดไดรฟ์"
|
drivecleaner: "ทำความสะอาดไดรฟ์"
|
||||||
retryAllQueuesNow: "ลองเรียกใช้คิวทั้งหมดอีกครั้ง"
|
retryAllQueuesNow: "ลองใหม่ทุกคิวทันที"
|
||||||
retryAllQueuesConfirmTitle: "ลองใหม่ทั้งหมดจริงๆหรอแน่ใจนะ?"
|
retryAllQueuesConfirmTitle: "ลองใหม่ทันทีเลยไหม?"
|
||||||
retryAllQueuesConfirmText: "สิ่งนี้จะเพิ่มการโหลดเซิร์ฟเวอร์ชั่วคราวนะ"
|
retryAllQueuesConfirmText: "สิ่งนี้จะเพิ่มการโหลดเซิร์ฟเวอร์ชั่วคราวนะ"
|
||||||
enableChartsForRemoteUser: "สร้างแผนภูมิข้อมูลผู้ใช้ระยะไกล"
|
enableChartsForRemoteUser: "สร้างแผนภูมิข้อมูลผู้ใช้ระยะไกล"
|
||||||
enableChartsForFederatedInstances: "สร้างแผนภูมิของเซิร์ฟเวอร์ระยะไกล"
|
enableChartsForFederatedInstances: "สร้างแผนภูมิของเซิร์ฟเวอร์ระยะไกล"
|
||||||
@@ -1150,7 +1160,7 @@ initialAccountSetting: "ตั้งค่าโปรไฟล์"
|
|||||||
youFollowing: "ติดตามแล้ว"
|
youFollowing: "ติดตามแล้ว"
|
||||||
preventAiLearning: "ปฏิเสธการเรียนรู้ด้วย generative AI"
|
preventAiLearning: "ปฏิเสธการเรียนรู้ด้วย generative AI"
|
||||||
preventAiLearningDescription: "ส่งคำร้องขอไม่ให้ใช้ ข้อความในโน้ตที่โพสต์, หรือเนื้อหารูปภาพ ฯลฯ ในการเรียนรู้ของเครื่อง(machine learning) / Predictive AI / Generative AI โดยการเพิ่มแฟล็ก “noai” ลง HTML-Response ให้กับเนื้อหาที่เกี่ยวข้อง แต่ทั้งนี้ ไม่ได้ป้องกัน AI จากการเรียนรู้ได้อย่างสมบูรณ์ เนื่องจากมี AI บางตัวเท่านั้นที่จะเคารพคำขอดังกล่าว"
|
preventAiLearningDescription: "ส่งคำร้องขอไม่ให้ใช้ ข้อความในโน้ตที่โพสต์, หรือเนื้อหารูปภาพ ฯลฯ ในการเรียนรู้ของเครื่อง(machine learning) / Predictive AI / Generative AI โดยการเพิ่มแฟล็ก “noai” ลง HTML-Response ให้กับเนื้อหาที่เกี่ยวข้อง แต่ทั้งนี้ ไม่ได้ป้องกัน AI จากการเรียนรู้ได้อย่างสมบูรณ์ เนื่องจากมี AI บางตัวเท่านั้นที่จะเคารพคำขอดังกล่าว"
|
||||||
options: "ตัวเลือกบทบาท"
|
options: "ตัวเลือก"
|
||||||
specifyUser: "ผู้ใช้เฉพาะ"
|
specifyUser: "ผู้ใช้เฉพาะ"
|
||||||
lookupConfirm: "ต้องการเรียกดูข้อมูลใช่ไหม?"
|
lookupConfirm: "ต้องการเรียกดูข้อมูลใช่ไหม?"
|
||||||
openTagPageConfirm: "ต้องการเปิดหน้าแฮชแท็กใช่ไหม?"
|
openTagPageConfirm: "ต้องการเปิดหน้าแฮชแท็กใช่ไหม?"
|
||||||
@@ -1169,6 +1179,7 @@ installed: "ติดตั้งแล้ว"
|
|||||||
branding: "แบรนดิ้ง"
|
branding: "แบรนดิ้ง"
|
||||||
enableServerMachineStats: "เผยแพร่สถานะฮาร์ดแวร์ของเซิร์ฟเวอร์"
|
enableServerMachineStats: "เผยแพร่สถานะฮาร์ดแวร์ของเซิร์ฟเวอร์"
|
||||||
enableIdenticonGeneration: "เปิดใช้งานผู้ใช้สร้างตัวระบุ"
|
enableIdenticonGeneration: "เปิดใช้งานผู้ใช้สร้างตัวระบุ"
|
||||||
|
showRoleBadgesOfRemoteUsers: "แสดงตราบทบาทที่มอบให้กับผู้ใช้ระยะไกล"
|
||||||
turnOffToImprovePerformance: "การปิดส่วนนี้สามารถเพิ่มประสิทธิภาพได้"
|
turnOffToImprovePerformance: "การปิดส่วนนี้สามารถเพิ่มประสิทธิภาพได้"
|
||||||
createInviteCode: "สร้างรหัสเชิญ"
|
createInviteCode: "สร้างรหัสเชิญ"
|
||||||
createWithOptions: "สร้างด้วยตัวเลือก"
|
createWithOptions: "สร้างด้วยตัวเลือก"
|
||||||
@@ -1247,7 +1258,7 @@ refreshing: "กำลังรีเฟรช..."
|
|||||||
pullDownToRefresh: "ดึงลงเพื่อรีเฟรช"
|
pullDownToRefresh: "ดึงลงเพื่อรีเฟรช"
|
||||||
useGroupedNotifications: "แสดงผลการแจ้งเตือนแบบกลุ่มแล้ว"
|
useGroupedNotifications: "แสดงผลการแจ้งเตือนแบบกลุ่มแล้ว"
|
||||||
emailVerificationFailedError: "เกิดปัญหาในขณะตรวจสอบอีเมล อาจเป็นไปได้ว่าลิงก์หมดอายุแล้ว"
|
emailVerificationFailedError: "เกิดปัญหาในขณะตรวจสอบอีเมล อาจเป็นไปได้ว่าลิงก์หมดอายุแล้ว"
|
||||||
cwNotationRequired: "หากเปิดใช้งาน “ซ่อนเนื้อหา” จะต้องระบุคำอธิบาย"
|
cwNotationRequired: "หากเปิดใช้งาน “ซ่อนเนื้อหา” จะต้องระบุข้อความเกริ่น"
|
||||||
doReaction: "เพิ่มรีแอคชั่น"
|
doReaction: "เพิ่มรีแอคชั่น"
|
||||||
code: "โค้ด"
|
code: "โค้ด"
|
||||||
reloadRequiredToApplySettings: "จำเป็นต้องมีการโหลดซ้ำเพื่อให้การตั้งค่ามีผล"
|
reloadRequiredToApplySettings: "จำเป็นต้องมีการโหลดซ้ำเพื่อให้การตั้งค่ามีผล"
|
||||||
@@ -1351,7 +1362,7 @@ migrateOldSettings: "ย้ายข้อมูลการตั้งค่
|
|||||||
migrateOldSettings_description: "โดยปกติจะทำโดยอัตโนมัติ แต่หากด้วยเหตุผลบางประการที่ไม่สามารถย้ายได้สำเร็จ สามารถสั่งย้ายด้วยตนเองได้ การตั้งค่าปัจจุบันจะถูกเขียนทับ"
|
migrateOldSettings_description: "โดยปกติจะทำโดยอัตโนมัติ แต่หากด้วยเหตุผลบางประการที่ไม่สามารถย้ายได้สำเร็จ สามารถสั่งย้ายด้วยตนเองได้ การตั้งค่าปัจจุบันจะถูกเขียนทับ"
|
||||||
compress: "บีบอัด"
|
compress: "บีบอัด"
|
||||||
right: "ขวา"
|
right: "ขวา"
|
||||||
bottom: "ภายใต้"
|
bottom: "ล่าง"
|
||||||
top: "บน"
|
top: "บน"
|
||||||
embed: "ฝัง"
|
embed: "ฝัง"
|
||||||
settingsMigrating: "กำลังย้ายการตั้งค่า กรุณารอสักครู่... (สามารถย้ายด้วยตนเองภายหลังได้ที่ การตั้งค่า → อื่นๆ → ย้ายข้อมูลการตั้งค่าเก่า)"
|
settingsMigrating: "กำลังย้ายการตั้งค่า กรุณารอสักครู่... (สามารถย้ายด้วยตนเองภายหลังได้ที่ การตั้งค่า → อื่นๆ → ย้ายข้อมูลการตั้งค่าเก่า)"
|
||||||
@@ -1390,17 +1401,53 @@ scheduledToPostOnX: "มีการกำหนดเวลาให้โพ
|
|||||||
schedule: "กำหนดเวลา"
|
schedule: "กำหนดเวลา"
|
||||||
scheduled: "กำหนดเวลา"
|
scheduled: "กำหนดเวลา"
|
||||||
widgets: "วิดเจ็ต"
|
widgets: "วิดเจ็ต"
|
||||||
|
deviceInfo: "รายละเอียดอุปกรณ์"
|
||||||
|
deviceInfoDescription: "เมื่อต้องการรับความช่วยเหลือทางเทคนิค กรุณาระบุข้อมูลต่อไปนี้ซึ่งอาจช่วยแก้ไขปัญหาได้"
|
||||||
|
youAreAdmin: "คุณคือผู้ดูแลระบบ"
|
||||||
|
frame: "เฟรม"
|
||||||
presets: "พรีเซ็ต"
|
presets: "พรีเซ็ต"
|
||||||
|
zeroPadding: "ห่างเป็น 0"
|
||||||
|
nothingToConfigure: "ไม่มีอะไรให้ต้ังค่า"
|
||||||
_imageEditing:
|
_imageEditing:
|
||||||
_vars:
|
_vars:
|
||||||
|
caption: "แคปชั่นของไฟล์"
|
||||||
filename: "ชื่อไฟล์"
|
filename: "ชื่อไฟล์"
|
||||||
|
filename_without_ext: "ชื่อไฟล์ที่ไม่มีนามสกุล"
|
||||||
|
year: "ปีที่ถ่าย"
|
||||||
|
month: "เดือนที่ถ่าย"
|
||||||
|
day: "วันที่ถ่าย"
|
||||||
|
hour: "เวลาที่ถ่าย (ชั่วโมง)"
|
||||||
|
minute: "เวลาที่ถ่าย (นาที)"
|
||||||
|
second: "เวลาที่ถ่าย (วินาที)"
|
||||||
|
camera_model: "ชื่อกล้อง"
|
||||||
|
camera_lens_model: "ชื่อเลนส์"
|
||||||
|
camera_mm: "ความยาวโฟกัส"
|
||||||
|
camera_mm_35: "ทางยาวโฟกัส (เทียบเท่า 35 มม.)"
|
||||||
|
camera_f: "รูรับแสง"
|
||||||
|
camera_s: "ความเร็วชัตเตอร์"
|
||||||
|
camera_iso: "ความไวแสง ISO"
|
||||||
|
gps_lat: "ละติจูด"
|
||||||
|
gps_long: "ลองจิจูด"
|
||||||
_imageFrameEditor:
|
_imageFrameEditor:
|
||||||
|
title: "แก้ไขเฟรม"
|
||||||
|
tip: "สามารถตกแต่งภาพโดยการเพิ่มป้ายที่มีเฟรมหรือเมทาเดต้าได้"
|
||||||
header: "ส่วนหัว"
|
header: "ส่วนหัว"
|
||||||
|
footer: "ท้ายกระดาษ"
|
||||||
|
borderThickness: "ความกว้างขอบ"
|
||||||
|
labelThickness: "ความกว้างป้าย"
|
||||||
|
labelScale: "สเกลของป้าย"
|
||||||
|
centered: "จัดกึ่งกลาง"
|
||||||
|
captionMain: "แคปชั่น (ใหญ่)"
|
||||||
|
captionSub: "แคปชั่น (เล็ก)"
|
||||||
|
availableVariables: "ตัวแปรที่สามารถใช้ได้"
|
||||||
withQrCode: "QR โค้ด"
|
withQrCode: "QR โค้ด"
|
||||||
|
backgroundColor: "สีพื้นหลัง"
|
||||||
|
textColor: "สีตัวอักษร"
|
||||||
font: "แบบอักษร"
|
font: "แบบอักษร"
|
||||||
fontSerif: "Serif"
|
fontSerif: "Serif"
|
||||||
fontSansSerif: "Sans Serif"
|
fontSansSerif: "Sans Serif"
|
||||||
quitWithoutSaveConfirm: "ต้องการออกโดยไม่บันทึกหรือไม่?"
|
quitWithoutSaveConfirm: "ต้องการออกโดยไม่บันทึกหรือไม่?"
|
||||||
|
failedToLoadImage: "โหลดภาพล้มเหลว"
|
||||||
_compression:
|
_compression:
|
||||||
_quality:
|
_quality:
|
||||||
high: "คุณภาพสูง"
|
high: "คุณภาพสูง"
|
||||||
@@ -1503,6 +1550,11 @@ _settings:
|
|||||||
showUrlPreview: "แสดงตัวอย่าง URL"
|
showUrlPreview: "แสดงตัวอย่าง URL"
|
||||||
showAvailableReactionsFirstInNote: "แสดงรีแอคชั่นที่ใช้ได้ไว้หน้าสุด"
|
showAvailableReactionsFirstInNote: "แสดงรีแอคชั่นที่ใช้ได้ไว้หน้าสุด"
|
||||||
showPageTabBarBottom: "แสดงแท็บบาร์ของเพจที่ด้านล่าง"
|
showPageTabBarBottom: "แสดงแท็บบาร์ของเพจที่ด้านล่าง"
|
||||||
|
emojiPaletteBanner: "สามารถบันทึกพรีเซ็ตเป็นจานสีเพื่อตรึงไว้ในตัวจิ้มเอโมจิ หรือปรับแต่งวิธีการแสดงผลของตัวจิ้มเอโมจิได้"
|
||||||
|
enableAnimatedImages: "เปิดใช้งานภาพเคลื่อนไหว"
|
||||||
|
settingsPersistence_title: "คงสภาพการตั้งค่า"
|
||||||
|
settingsPersistence_description1: "เมื่อเปิดใช้งานการคงสภาพการตั้งค่า จะช่วยป้องกันไม่ให้ข้อมูลการตั้งค่าสูญหายได้"
|
||||||
|
settingsPersistence_description2: "แต่ในบางสภาพแวดล้อม อาจไม่สามารถเปิดใช้งานได้"
|
||||||
_chat:
|
_chat:
|
||||||
showSenderName: "แสดงชื่อผู้ส่ง"
|
showSenderName: "แสดงชื่อผู้ส่ง"
|
||||||
sendOnEnter: "กด Enter เพื่อส่ง"
|
sendOnEnter: "กด Enter เพื่อส่ง"
|
||||||
@@ -1511,6 +1563,8 @@ _preferencesProfile:
|
|||||||
profileNameDescription: "กรุณาตั้งชื่อเพื่อระบุอุปกรณ์นี้"
|
profileNameDescription: "กรุณาตั้งชื่อเพื่อระบุอุปกรณ์นี้"
|
||||||
profileNameDescription2: "เช่น: “คอมเครื่องหลัก”, “มือถือ” ฯลฯ"
|
profileNameDescription2: "เช่น: “คอมเครื่องหลัก”, “มือถือ” ฯลฯ"
|
||||||
manageProfiles: "จัดการโปรไฟล์"
|
manageProfiles: "จัดการโปรไฟล์"
|
||||||
|
shareSameProfileBetweenDevicesIsNotRecommended: "ไม่แนะนำให้ใช้โปรไฟล์เดียวกันร่วมกันบนหลายอุปกรณ์"
|
||||||
|
useSyncBetweenDevicesOptionIfYouWantToSyncSetting: "หากมีรายการตั้งค่าที่ต้องการซิงก์ระหว่างหลายอุปกรณ์ โปรดเปิดใช้งานตัวเลือก “ซิงก์ระหว่างหลายอุปกรณ์” ในอุปกรณ์นั้นๆ ด้วย"
|
||||||
_preferencesBackup:
|
_preferencesBackup:
|
||||||
autoBackup: "สำรองโดยอัตโนมัติ"
|
autoBackup: "สำรองโดยอัตโนมัติ"
|
||||||
restoreFromBackup: "คืนค่าจากข้อมูลสำรอง"
|
restoreFromBackup: "คืนค่าจากข้อมูลสำรอง"
|
||||||
@@ -1518,8 +1572,9 @@ _preferencesBackup:
|
|||||||
noBackupsFoundDescription: "ไม่พบข้อมูลสำรองที่สร้างโดยอัตโนมัติ แต่หากมีข้อมูลสำรองที่บันทึกด้วยตนเอง สามารถนำเข้ามาเพื่อกู้คืนได้"
|
noBackupsFoundDescription: "ไม่พบข้อมูลสำรองที่สร้างโดยอัตโนมัติ แต่หากมีข้อมูลสำรองที่บันทึกด้วยตนเอง สามารถนำเข้ามาเพื่อกู้คืนได้"
|
||||||
selectBackupToRestore: "กรุณาเลือกข้อมูลสำรองที่ต้องการกู้คืน"
|
selectBackupToRestore: "กรุณาเลือกข้อมูลสำรองที่ต้องการกู้คืน"
|
||||||
youNeedToNameYourProfileToEnableAutoBackup: "จำเป็นต้องตั้งชื่อโปรไฟล์ก่อนจึงจะเปิดใช้งานการสำรองข้อมูลอัตโนมัติได้"
|
youNeedToNameYourProfileToEnableAutoBackup: "จำเป็นต้องตั้งชื่อโปรไฟล์ก่อนจึงจะเปิดใช้งานการสำรองข้อมูลอัตโนมัติได้"
|
||||||
autoPreferencesBackupIsNotEnabledForThisDevice: "ยังไม่ได้เปิดใช้งานการสำรองข้อมูลอัตโนมัติบนอุปกรณ์นี้"
|
autoPreferencesBackupIsNotEnabledForThisDevice: "ยังไม่ได้เปิดใช้งานการสำรองการตั้งค่าแบบอัตโนมัติบนอุปกรณ์นี้"
|
||||||
backupFound: "พบข้อมูลสำรองของการตั้งค่าแล้ว"
|
backupFound: "พบข้อมูลสำรองของการตั้งค่าแล้ว"
|
||||||
|
forceBackup: "บังคับสำรองการตั้งค่า"
|
||||||
_accountSettings:
|
_accountSettings:
|
||||||
requireSigninToViewContents: "ต้องเข้าสู่ระบบเพื่อดูเนื้อหา"
|
requireSigninToViewContents: "ต้องเข้าสู่ระบบเพื่อดูเนื้อหา"
|
||||||
requireSigninToViewContentsDescription1: "กำหนดให้ต้องเข้าสู่ระบบก่อนจึงจะสามารถดูโน้ตหรือเนื้อหาทั้งหมดที่สร้างไว้ได้ ซึ่งช่วยป้องกันไม่ให้ข้อมูลถูกเก็บโดยบอตหรือ Crawler (โปรแกรมรวบรวมข้อมูล)"
|
requireSigninToViewContentsDescription1: "กำหนดให้ต้องเข้าสู่ระบบก่อนจึงจะสามารถดูโน้ตหรือเนื้อหาทั้งหมดที่สร้างไว้ได้ ซึ่งช่วยป้องกันไม่ให้ข้อมูลถูกเก็บโดยบอตหรือ Crawler (โปรแกรมรวบรวมข้อมูล)"
|
||||||
@@ -1587,7 +1642,7 @@ _initialAccountSetting:
|
|||||||
theseSettingsCanEditLater: "คุณสามารถเปลี่ยนการตั้งค่าเหล่านี้ได้ในภายหลังได้ตลอดเวลานะ"
|
theseSettingsCanEditLater: "คุณสามารถเปลี่ยนการตั้งค่าเหล่านี้ได้ในภายหลังได้ตลอดเวลานะ"
|
||||||
youCanEditMoreSettingsInSettingsPageLater: "สามารถตั้งค่าเพิ่มเติมได้ที่หน้า “การตั้งค่า” อย่าลืมไปเยี่ยมชมภายหลังด้วย"
|
youCanEditMoreSettingsInSettingsPageLater: "สามารถตั้งค่าเพิ่มเติมได้ที่หน้า “การตั้งค่า” อย่าลืมไปเยี่ยมชมภายหลังด้วย"
|
||||||
followUsers: "ลองติดตามผู้ใช้ที่สนใจเพื่อสร้างไทม์ไลน์ดูสิ"
|
followUsers: "ลองติดตามผู้ใช้ที่สนใจเพื่อสร้างไทม์ไลน์ดูสิ"
|
||||||
pushNotificationDescription: "กำลังเปิดใช้งานการแจ้งเตือนแบบพุชจะช่วยให้คุณได้รับการแจ้งเตือนจาก {name} โดยตรงบนอุปกรณ์ของคุณนะ"
|
pushNotificationDescription: "เมื่อเปิดใช้งานการแจ้งเตือนแบบพุช จะสามารถรับการแจ้งเตือนจาก {name} บนอุปกรณ์ที่ใช้งานอยู่ได้"
|
||||||
initialAccountSettingCompleted: "ตั้งค่าโปรไฟล์เสร็จสมบูรณ์แล้ว!"
|
initialAccountSettingCompleted: "ตั้งค่าโปรไฟล์เสร็จสมบูรณ์แล้ว!"
|
||||||
haveFun: "ขอให้สนุกกับ {name}!"
|
haveFun: "ขอให้สนุกกับ {name}!"
|
||||||
youCanContinueTutorial: "คุณสามารถดำเนินการต่อด้วยบทช่วยสอนเกี่ยวกับวิธีใช้ {name} (Misskey) หรือออกจากบทช่วยสอนแล้วเริ่มใช้งานได้ทันที"
|
youCanContinueTutorial: "คุณสามารถดำเนินการต่อด้วยบทช่วยสอนเกี่ยวกับวิธีใช้ {name} (Misskey) หรือออกจากบทช่วยสอนแล้วเริ่มใช้งานได้ทันที"
|
||||||
@@ -1639,7 +1694,7 @@ _initialTutorial:
|
|||||||
localOnly: "การโพสต์ด้วย flag นี้จะไม่รวมโน้ตไปยังเซิร์ฟเวอร์อื่น ผู้ใช้บนเซิร์ฟเวอร์อื่นจะไม่สามารถดูโน้ตเหล่านี้ได้โดยตรง โดยไม่คำนึงถึงการตั้งค่าการแสดงผลข้างต้น"
|
localOnly: "การโพสต์ด้วย flag นี้จะไม่รวมโน้ตไปยังเซิร์ฟเวอร์อื่น ผู้ใช้บนเซิร์ฟเวอร์อื่นจะไม่สามารถดูโน้ตเหล่านี้ได้โดยตรง โดยไม่คำนึงถึงการตั้งค่าการแสดงผลข้างต้น"
|
||||||
_cw:
|
_cw:
|
||||||
title: "คำเตือนเกี่ยวกับเนื้อหา"
|
title: "คำเตือนเกี่ยวกับเนื้อหา"
|
||||||
description: "เนื้อหาที่เขียนใน “คำอธิบายประกอบ” จะแสดงแทนเนื้อหาหลัก ต้องคลิก “ดูเพิ่มเติม” เพื่อให้เนื้อหาหลักแสดง"
|
description: "เนื้อหาที่เขียนใน “ข้อความเกริ่น” จะแสดงแทนเนื้อหาหลัก ต้องกด “ดูเพิ่มเติม” เพื่อให้เนื้อหาหลักแสดง"
|
||||||
_exampleNote:
|
_exampleNote:
|
||||||
cw: " ห้ามดู ระวังหิว"
|
cw: " ห้ามดู ระวังหิว"
|
||||||
note: "เพิ่งไปกินโดนัทเคลือบช็อคโกแลตมา 🍩😋"
|
note: "เพิ่งไปกินโดนัทเคลือบช็อคโกแลตมา 🍩😋"
|
||||||
@@ -1991,7 +2046,7 @@ _role:
|
|||||||
isConditionalRole: "นี่คือบทบาทที่มีเงื่อนไข"
|
isConditionalRole: "นี่คือบทบาทที่มีเงื่อนไข"
|
||||||
isPublic: "ทำให้บทบาทเปิดเผยต่อสาธารณะ"
|
isPublic: "ทำให้บทบาทเปิดเผยต่อสาธารณะ"
|
||||||
descriptionOfIsPublic: "บทบาทจะปรากฏบนโปรไฟล์ของผู้ใช้และเปิดเผยต่อสาธารณะ (ทุกคนสามารถเห็นได้ว่าผู้ใช้รายนี้มีบทบาทนี้)"
|
descriptionOfIsPublic: "บทบาทจะปรากฏบนโปรไฟล์ของผู้ใช้และเปิดเผยต่อสาธารณะ (ทุกคนสามารถเห็นได้ว่าผู้ใช้รายนี้มีบทบาทนี้)"
|
||||||
options: "ตัวเลือกบทบาท"
|
options: "ตัวเลือก"
|
||||||
policies: "นโยบาย"
|
policies: "นโยบาย"
|
||||||
baseRole: "แม่แบบบทบาท"
|
baseRole: "แม่แบบบทบาท"
|
||||||
useBaseValue: "ใช้ตามแม่แบบบทบาท"
|
useBaseValue: "ใช้ตามแม่แบบบทบาท"
|
||||||
@@ -2025,6 +2080,7 @@ _role:
|
|||||||
canManageAvatarDecorations: "จัดการตกแต่งอวตาร"
|
canManageAvatarDecorations: "จัดการตกแต่งอวตาร"
|
||||||
driveCapacity: "ความจุของไดรฟ์"
|
driveCapacity: "ความจุของไดรฟ์"
|
||||||
maxFileSize: "ขนาดไฟล์สูงสุดที่สามารถอัปโหลดได้"
|
maxFileSize: "ขนาดไฟล์สูงสุดที่สามารถอัปโหลดได้"
|
||||||
|
maxFileSize_caption: "รีเวิร์สพร็อกซี, CDN และคอมโพเนนต์หน้าบ้านอื่นๆ อาจมีค่าการตั้งค่าของตนเอง"
|
||||||
alwaysMarkNsfw: "ทำเครื่องหมายไฟล์ว่าเป็น NSFW เสมอ"
|
alwaysMarkNsfw: "ทำเครื่องหมายไฟล์ว่าเป็น NSFW เสมอ"
|
||||||
canUpdateBioMedia: "อนุญาตให้เปลี่ยนไอคอนประจำตัวและแบนเนอร์"
|
canUpdateBioMedia: "อนุญาตให้เปลี่ยนไอคอนประจำตัวและแบนเนอร์"
|
||||||
pinMax: "จํานวนสูงสุดของโน้ตที่ปักหมุดไว้"
|
pinMax: "จํานวนสูงสุดของโน้ตที่ปักหมุดไว้"
|
||||||
@@ -2386,7 +2442,7 @@ _permissions:
|
|||||||
"read:admin:index-stats": "ดูข้อมูลเกี่ยวกับดัชนีฐานข้อมูล"
|
"read:admin:index-stats": "ดูข้อมูลเกี่ยวกับดัชนีฐานข้อมูล"
|
||||||
"read:admin:table-stats": "ดูข้อมูลเกี่ยวกับตารางในฐานข้อมูล"
|
"read:admin:table-stats": "ดูข้อมูลเกี่ยวกับตารางในฐานข้อมูล"
|
||||||
"read:admin:user-ips": "ดูที่อยู่ IP ของผู้ใช้"
|
"read:admin:user-ips": "ดูที่อยู่ IP ของผู้ใช้"
|
||||||
"read:admin:meta": "ดูข้อมูลอภิพันธุ์ของอินสแตนซ์"
|
"read:admin:meta": "ดูเมทาเดต้าของอินสแตนซ์"
|
||||||
"write:admin:reset-password": "รีเซ็ตรหัสผ่านของผู้ใช้"
|
"write:admin:reset-password": "รีเซ็ตรหัสผ่านของผู้ใช้"
|
||||||
"write:admin:resolve-abuse-user-report": "แก้ไขรายงานจากผู้ใช้"
|
"write:admin:resolve-abuse-user-report": "แก้ไขรายงานจากผู้ใช้"
|
||||||
"write:admin:send-email": "ส่งอีเมล"
|
"write:admin:send-email": "ส่งอีเมล"
|
||||||
@@ -2397,7 +2453,7 @@ _permissions:
|
|||||||
"write:admin:unset-user-avatar": "ลบอวตารผู้ใช้"
|
"write:admin:unset-user-avatar": "ลบอวตารผู้ใช้"
|
||||||
"write:admin:unset-user-banner": "ลบแบนเนอร์ผู้ใช้"
|
"write:admin:unset-user-banner": "ลบแบนเนอร์ผู้ใช้"
|
||||||
"write:admin:unsuspend-user": "ยกเลิกการระงับผู้ใช้"
|
"write:admin:unsuspend-user": "ยกเลิกการระงับผู้ใช้"
|
||||||
"write:admin:meta": "จัดการข้อมูลอภิพันธุ์ของอินสแตนซ์"
|
"write:admin:meta": "จัดการเมทาเดต้าของอินสแตนซ์"
|
||||||
"write:admin:user-note": "จัดการโน้ตการกลั่นกรอง"
|
"write:admin:user-note": "จัดการโน้ตการกลั่นกรอง"
|
||||||
"write:admin:roles": "จัดการบทบาท"
|
"write:admin:roles": "จัดการบทบาท"
|
||||||
"read:admin:roles": "ดูบทบาท"
|
"read:admin:roles": "ดูบทบาท"
|
||||||
@@ -2443,6 +2499,7 @@ _auth:
|
|||||||
scopeUser: "กำลังดำเนินการในฐานะผู้ใช้ต่อไปนี้"
|
scopeUser: "กำลังดำเนินการในฐานะผู้ใช้ต่อไปนี้"
|
||||||
pleaseLogin: "กรุณาเข้าสู่ระบบเพื่ออนุมัติแอปพลิเคชัน"
|
pleaseLogin: "กรุณาเข้าสู่ระบบเพื่ออนุมัติแอปพลิเคชัน"
|
||||||
byClickingYouWillBeRedirectedToThisUrl: "หากอนุญาตการเข้าถึง ระบบจะเปลี่ยนเส้นทางไปยัง URL ด้านล่างโดยอัตโนมัติ"
|
byClickingYouWillBeRedirectedToThisUrl: "หากอนุญาตการเข้าถึง ระบบจะเปลี่ยนเส้นทางไปยัง URL ด้านล่างโดยอัตโนมัติ"
|
||||||
|
alreadyAuthorized: "แอปพลิเคชันนี้ได้รับอนุญาตให้เข้าถึงแล้ว"
|
||||||
_antennaSources:
|
_antennaSources:
|
||||||
all: "โน้ตทั้งหมด"
|
all: "โน้ตทั้งหมด"
|
||||||
homeTimeline: "โน้ตจากผู้ใช้ที่ติดตาม"
|
homeTimeline: "โน้ตจากผู้ใช้ที่ติดตาม"
|
||||||
@@ -2489,6 +2546,44 @@ _widgets:
|
|||||||
clicker: "คลิกเกอร์"
|
clicker: "คลิกเกอร์"
|
||||||
birthdayFollowings: "วันเกิดผู้ใช้ในวันนี้"
|
birthdayFollowings: "วันเกิดผู้ใช้ในวันนี้"
|
||||||
chat: "แชตเลย"
|
chat: "แชตเลย"
|
||||||
|
_widgetOptions:
|
||||||
|
showHeader: "แสดงส่วนหัว"
|
||||||
|
transparent: "ทำพื้นหลังโปรงใส"
|
||||||
|
height: "ความสูง"
|
||||||
|
_button:
|
||||||
|
colored: "สี"
|
||||||
|
_clock:
|
||||||
|
size: "ขนาด"
|
||||||
|
thickness: "ความหนาเข็ม"
|
||||||
|
thicknessThin: "บาง"
|
||||||
|
thicknessMedium: "ปานกลาง"
|
||||||
|
thicknessThick: "หนา"
|
||||||
|
graduations: "ขีดบอกค่าบนหน้าปัด"
|
||||||
|
graduationDots: "จุด"
|
||||||
|
graduationArabic: "เลขอารบิก"
|
||||||
|
fadeGraduations: "เฟดหน้าปัด"
|
||||||
|
sAnimation: "การเคลื่อนไหวของเข็มวินาที"
|
||||||
|
sAnimationElastic: "สมจริง"
|
||||||
|
sAnimationEaseOut: "ลื่นๆ"
|
||||||
|
twentyFour: "ระบบ 24 ชั่วโมง"
|
||||||
|
labelTime: "เวลา"
|
||||||
|
labelTz: "เขตเวลา"
|
||||||
|
labelTimeAndTz: "เวลาและเขตเวลา"
|
||||||
|
timezone: "เขตเวลา"
|
||||||
|
showMs: "แสดงมิลลิวินาที"
|
||||||
|
showLabel: "แสดงป้าย"
|
||||||
|
_jobQueue:
|
||||||
|
sound: "เล่นเสียง"
|
||||||
|
_rss:
|
||||||
|
url: "URL ของฟีด RSS"
|
||||||
|
refreshIntervalSec: "ห้วงอัปเดต (วินาที)"
|
||||||
|
maxEntries: "จำนวนที่แสดงได้สูงสุด"
|
||||||
|
_rssTicker:
|
||||||
|
shuffle: "สุ่มลำดับ"
|
||||||
|
duration: "ความเร็วทิกเกอร์ (วินาที)"
|
||||||
|
reverse: "วิ่งไปอีกทาง"
|
||||||
|
_birthdayFollowings:
|
||||||
|
period: "ระยะเวลา"
|
||||||
_cw:
|
_cw:
|
||||||
hide: "ซ่อน"
|
hide: "ซ่อน"
|
||||||
show: "โหลดเพิ่มเติม"
|
show: "โหลดเพิ่มเติม"
|
||||||
@@ -2533,9 +2628,20 @@ _postForm:
|
|||||||
replyPlaceholder: "ตอบกลับโน้ตนี้..."
|
replyPlaceholder: "ตอบกลับโน้ตนี้..."
|
||||||
quotePlaceholder: "อ้างโน้ตนี้..."
|
quotePlaceholder: "อ้างโน้ตนี้..."
|
||||||
channelPlaceholder: "โพสต์ลงช่อง..."
|
channelPlaceholder: "โพสต์ลงช่อง..."
|
||||||
|
showHowToUse: "แสดงวิธีใช้ฟอร์ม"
|
||||||
_howToUse:
|
_howToUse:
|
||||||
|
content_title: "เนื้อความ"
|
||||||
|
content_description: "ป้อนเนื้อหาที่จะโพสต์"
|
||||||
|
toolbar_title: "แถบเครื่องมือ"
|
||||||
|
toolbar_description: "สามารถแนบไฟล์หรือแบบสอบถาม ตั้งข้อความเกริ่นหรือแฮชแท็ก แทรกเอโมจิหรือการกล่าวถึง เป็นต้น"
|
||||||
|
account_title: "เมนูบัญชี"
|
||||||
|
account_description: "สามารถสลับบัญชีที่ใช้โพสต์ หรือดูรายการฉบับร่างและโพสต์กำหนดเวลาไว้ซึ่งบันทึกไว้ในบัญชีได้"
|
||||||
visibility_title: "การมองเห็น"
|
visibility_title: "การมองเห็น"
|
||||||
|
visibility_description: "สามารถตั้งค่าขอบเขตการเผยแพร่โน้ตได้"
|
||||||
menu_title: "เมนู"
|
menu_title: "เมนู"
|
||||||
|
menu_description: "สามารถบันทึกเป็นฉบับร่าง ตั้งเวลาการโพสต์ ตั้งค่ารีแอคชั่น และดำเนินการอื่นๆ ได้"
|
||||||
|
submit_title: "ปุ่มโพสต์"
|
||||||
|
submit_description: "กดปุ่มนั้นเพื่อโพสต์โน้ต หรือกด Ctrl + Enter / Cmd + Return เพื่อโพสต์ก็ได้เช่นกัน"
|
||||||
_placeholders:
|
_placeholders:
|
||||||
a: "ตอนนี้เป็นยังไงบ้าง?"
|
a: "ตอนนี้เป็นยังไงบ้าง?"
|
||||||
b: "มีอะไรเกิดขึ้นหรือเปล่า?"
|
b: "มีอะไรเกิดขึ้นหรือเปล่า?"
|
||||||
@@ -2551,7 +2657,7 @@ _profile:
|
|||||||
metadata: "ข้อมูลเพิ่มเติม"
|
metadata: "ข้อมูลเพิ่มเติม"
|
||||||
metadataEdit: "แก้ไขข้อมูลเพิ่มเติม"
|
metadataEdit: "แก้ไขข้อมูลเพิ่มเติม"
|
||||||
metadataDescription: "ใช้สิ่งเหล่านี้ คุณสามารถแสดงฟิลด์ข้อมูลเพิ่มเติมในโปรไฟล์ของคุณ"
|
metadataDescription: "ใช้สิ่งเหล่านี้ คุณสามารถแสดงฟิลด์ข้อมูลเพิ่มเติมในโปรไฟล์ของคุณ"
|
||||||
metadataLabel: "ป้ายชื่อ"
|
metadataLabel: "ป้าย"
|
||||||
metadataContent: "เนื้อหา"
|
metadataContent: "เนื้อหา"
|
||||||
changeAvatar: "เปลี่ยนไอคอนประจำตัว"
|
changeAvatar: "เปลี่ยนไอคอนประจำตัว"
|
||||||
changeBanner: "เปลี่ยนแบนเนอร์"
|
changeBanner: "เปลี่ยนแบนเนอร์"
|
||||||
@@ -2712,6 +2818,8 @@ _notification:
|
|||||||
quote: "อ้างอิง"
|
quote: "อ้างอิง"
|
||||||
reaction: "รีแอคชั่น"
|
reaction: "รีแอคชั่น"
|
||||||
pollEnded: "โพลสิ้นสุดแล้ว"
|
pollEnded: "โพลสิ้นสุดแล้ว"
|
||||||
|
scheduledNotePosted: "โพสต์กำหนดเวลาสำเร็จ"
|
||||||
|
scheduledNotePostFailed: "โพสต์กำหนดเวลาล้มเหลว"
|
||||||
receiveFollowRequest: "ได้รับคำร้องขอติดตาม"
|
receiveFollowRequest: "ได้รับคำร้องขอติดตาม"
|
||||||
followRequestAccepted: "อนุมัติให้ติดตามแล้ว"
|
followRequestAccepted: "อนุมัติให้ติดตามแล้ว"
|
||||||
roleAssigned: "ให้บทบาท"
|
roleAssigned: "ให้บทบาท"
|
||||||
@@ -2751,6 +2859,14 @@ _deck:
|
|||||||
usedAsMinWidthWhenFlexible: "ความกว้างขั้นต่ำนั้นจะถูกใช้งานสำหรับสิ่งนี้เมื่อเปิดใช้งานตัวเลือก \"ปรับความกว้างอัตโนมัติ\" หากเลือกเปิดใช้งานแล้ว"
|
usedAsMinWidthWhenFlexible: "ความกว้างขั้นต่ำนั้นจะถูกใช้งานสำหรับสิ่งนี้เมื่อเปิดใช้งานตัวเลือก \"ปรับความกว้างอัตโนมัติ\" หากเลือกเปิดใช้งานแล้ว"
|
||||||
flexible: "ปรับความกว้างอัตโนมัติ"
|
flexible: "ปรับความกว้างอัตโนมัติ"
|
||||||
enableSyncBetweenDevicesForProfiles: "เปิดใช้งานการซิงค์ข้อมูลโปรไฟล์ระหว่างอุปกรณ์"
|
enableSyncBetweenDevicesForProfiles: "เปิดใช้งานการซิงค์ข้อมูลโปรไฟล์ระหว่างอุปกรณ์"
|
||||||
|
showHowToUse: "แสดงวิธีใช้ UI"
|
||||||
|
_howToUse:
|
||||||
|
addColumn_title: "เพิ่มคอลัมน์"
|
||||||
|
addColumn_description: "สามารถเลือกประเภทของคอลัมน์แล้วเพิ่มได้"
|
||||||
|
settings_title: "ตั้งค่า UI"
|
||||||
|
settings_description: "สามารถตั้งค่ารายละเอียดของ UI แบบเด็คได้"
|
||||||
|
switchProfile_title: "สลับโปรไฟล์"
|
||||||
|
switchProfile_description: "สามารถบันทึกเลย์เอาต์ของ UI เป็นโปรไฟล์ และสลับใช้งานได้ทุกเมื่อ"
|
||||||
_columns:
|
_columns:
|
||||||
main: "หลัก"
|
main: "หลัก"
|
||||||
widgets: "วิดเจ็ต"
|
widgets: "วิดเจ็ต"
|
||||||
@@ -2811,6 +2927,8 @@ _abuseReport:
|
|||||||
notifiedWebhook: "Webhook ที่ใช้"
|
notifiedWebhook: "Webhook ที่ใช้"
|
||||||
deleteConfirm: "ต้องการลบปลายทางการแจ้งเตือนใช่ไหม?"
|
deleteConfirm: "ต้องการลบปลายทางการแจ้งเตือนใช่ไหม?"
|
||||||
_moderationLogTypes:
|
_moderationLogTypes:
|
||||||
|
clearQueue: "ล้างคิว"
|
||||||
|
promoteQueue: "ดันงานในคิวอีกครั้ง"
|
||||||
createRole: "สร้างบทบาทแล้ว"
|
createRole: "สร้างบทบาทแล้ว"
|
||||||
deleteRole: "ลบบทบาทแล้ว"
|
deleteRole: "ลบบทบาทแล้ว"
|
||||||
updateRole: "อัปเดตบทบาทแล้ว"
|
updateRole: "อัปเดตบทบาทแล้ว"
|
||||||
@@ -2869,7 +2987,7 @@ _fileViewer:
|
|||||||
uploadedAt: "วันที่เข้าร่วม"
|
uploadedAt: "วันที่เข้าร่วม"
|
||||||
attachedNotes: "โน้ตที่แนบมาด้วย"
|
attachedNotes: "โน้ตที่แนบมาด้วย"
|
||||||
usage: "ใช้แล้ว"
|
usage: "ใช้แล้ว"
|
||||||
thisPageCanBeSeenFromTheAuthor: "หน้าเพจนี้จะสามารถปรากฏได้โดยผู้ใช้ที่อัปโหลดไฟล์นี้เท่านั้น"
|
thisPageCanBeSeenFromTheAuthor: "เฉพาะผู้ใช้ที่อัปโหลดไฟล์นี้เท่านั้นที่สามารถดูหน้าเพจนี้ได้"
|
||||||
_externalResourceInstaller:
|
_externalResourceInstaller:
|
||||||
title: "ติดตั้งจากไซต์ภายนอก"
|
title: "ติดตั้งจากไซต์ภายนอก"
|
||||||
checkVendorBeforeInstall: "โปรดตรวจสอบให้แน่ใจว่าแหล่งแจกหน่ายมีความน่าเชื่อถือก่อนทำการติดตั้ง"
|
checkVendorBeforeInstall: "โปรดตรวจสอบให้แน่ใจว่าแหล่งแจกหน่ายมีความน่าเชื่อถือก่อนทำการติดตั้ง"
|
||||||
@@ -3054,7 +3172,7 @@ _customEmojisManager:
|
|||||||
uploadSettingDescription: "สามารถกำหนดพฤติกรรมขณะอัปโหลดเอโมจิจากหน้าจอนี้ได้"
|
uploadSettingDescription: "สามารถกำหนดพฤติกรรมขณะอัปโหลดเอโมจิจากหน้าจอนี้ได้"
|
||||||
directoryToCategoryLabel: "ป้อนชื่อไดเรกทอรีเป็น \"category\""
|
directoryToCategoryLabel: "ป้อนชื่อไดเรกทอรีเป็น \"category\""
|
||||||
directoryToCategoryCaption: "เมื่อทำการลากและวางไดเรกทอรี ชื่อจะถูกป้อนเป็น \"category\""
|
directoryToCategoryCaption: "เมื่อทำการลากและวางไดเรกทอรี ชื่อจะถูกป้อนเป็น \"category\""
|
||||||
confirmRegisterEmojisDescription: "จะลงทะเบียนเอโมจิที่แสดงในรายการเป็นเอโมจิแบบกำหนดเองใหม่\nดำเนินการต่อหรือไม่? (เพื่อหลีกเลี่ยงภาระโหลดหนัก ระบบจะสามารถลงทะเบียนอีโมจิได้สูงสุด {count} รายการต่อครั้ง)"
|
confirmRegisterEmojisDescription: "จะลงทะเบียนเอโมจิที่แสดงในรายการเป็นเอโมจิแบบกำหนดเองใหม่\nดำเนินการต่อหรือไม่? (เพื่อหลีกเลี่ยงภาระโหลดหนัก ระบบจะสามารถลงทะเบียนเอโมจิได้สูงสุด {count} รายการต่อครั้ง)"
|
||||||
confirmClearEmojisDescription: "ต้องการยกเลิกการแก้ไขและล้างรายการเอโมจิที่แสดงอยู่หรือไม่?"
|
confirmClearEmojisDescription: "ต้องการยกเลิกการแก้ไขและล้างรายการเอโมจิที่แสดงอยู่หรือไม่?"
|
||||||
confirmUploadEmojisDescription: "จะอัปโหลดไฟล์ {count} รายการที่ลากและวางไปยังไดรฟ์ ดำเนินการหรือไม่?"
|
confirmUploadEmojisDescription: "จะอัปโหลดไฟล์ {count} รายการที่ลากและวางไปยังไดรฟ์ ดำเนินการหรือไม่?"
|
||||||
_embedCodeGen:
|
_embedCodeGen:
|
||||||
@@ -3205,6 +3323,7 @@ _watermarkEditor:
|
|||||||
title: "แก้ไขลายน้ำ"
|
title: "แก้ไขลายน้ำ"
|
||||||
cover: "ซ้อนทับทั่วทั้งพื้นที่"
|
cover: "ซ้อนทับทั่วทั้งพื้นที่"
|
||||||
repeat: "ปูให้เต็มพื้นที่"
|
repeat: "ปูให้เต็มพื้นที่"
|
||||||
|
preserveBoundingRect: "ปรับไม่ให้ล้นขอบเมื่อหมุน"
|
||||||
opacity: "ความทึบแสง"
|
opacity: "ความทึบแสง"
|
||||||
scale: "ขนาด"
|
scale: "ขนาด"
|
||||||
text: "ข้อความ"
|
text: "ข้อความ"
|
||||||
@@ -3226,11 +3345,12 @@ _watermarkEditor:
|
|||||||
polkadotSubDotRadius: "ขนาดของจุดรอง"
|
polkadotSubDotRadius: "ขนาดของจุดรอง"
|
||||||
polkadotSubDotDivisions: "จำนวนจุดรอง"
|
polkadotSubDotDivisions: "จำนวนจุดรอง"
|
||||||
leaveBlankToAccountUrl: "เว้นว่างไว้หากต้องการใช้ URL ของบัญชีแทน"
|
leaveBlankToAccountUrl: "เว้นว่างไว้หากต้องการใช้ URL ของบัญชีแทน"
|
||||||
|
failedToLoadImage: "โหลดภาพล้มเหลว"
|
||||||
_imageEffector:
|
_imageEffector:
|
||||||
title: "เอฟเฟกต์"
|
title: "เอฟเฟกต์"
|
||||||
addEffect: "เพิ่มเอฟเฟกต์"
|
addEffect: "เพิ่มเอฟเฟกต์"
|
||||||
discardChangesConfirm: "ต้องการทิ้งการเปลี่ยนแปลงแล้วออกหรือไม่?"
|
discardChangesConfirm: "ต้องการทิ้งการเปลี่ยนแปลงแล้วออกหรือไม่?"
|
||||||
nothingToConfigure: "ไม่มีอะไรให้ตั้งค่า"
|
failedToLoadImage: "โหลดภาพล้มเหลว"
|
||||||
_fxs:
|
_fxs:
|
||||||
chromaticAberration: "ความคลาดสี"
|
chromaticAberration: "ความคลาดสี"
|
||||||
glitch: "กลิตช์"
|
glitch: "กลิตช์"
|
||||||
@@ -3281,11 +3401,7 @@ _imageEffector:
|
|||||||
threshold: "เทรชโฮลด์"
|
threshold: "เทรชโฮลด์"
|
||||||
centerX: "กลาง X"
|
centerX: "กลาง X"
|
||||||
centerY: "กลาง Y"
|
centerY: "กลาง Y"
|
||||||
zoomLinesSmoothing: "ทำให้สมูธ"
|
|
||||||
zoomLinesSmoothingDescription: "ตั้งให้สมูธไม่สามารถใช้ร่วมกับตั้งความกว้างเส้นรวมศูนย์ได้"
|
|
||||||
zoomLinesThreshold: "ความกว้างเส้นรวมศูนย์"
|
|
||||||
zoomLinesMaskSize: "ขนาดพื้นที่ตรงกลาง"
|
zoomLinesMaskSize: "ขนาดพื้นที่ตรงกลาง"
|
||||||
zoomLinesBlack: "ทำให้ดำ"
|
|
||||||
circle: "ทรงกลม"
|
circle: "ทรงกลม"
|
||||||
drafts: "ร่าง"
|
drafts: "ร่าง"
|
||||||
_drafts:
|
_drafts:
|
||||||
|
|||||||
+173
-5
@@ -83,6 +83,8 @@ files: "Dosyalar"
|
|||||||
download: "İndir"
|
download: "İndir"
|
||||||
driveFileDeleteConfirm: "“{name}” dosyasını silmek istediğinden emin misin? Bu dosyaya ekli tüm notlar da silinecek."
|
driveFileDeleteConfirm: "“{name}” dosyasını silmek istediğinden emin misin? Bu dosyaya ekli tüm notlar da silinecek."
|
||||||
unfollowConfirm: "{name} kullanıcısını cidden takipden çıkmak istiyor musun?"
|
unfollowConfirm: "{name} kullanıcısını cidden takipden çıkmak istiyor musun?"
|
||||||
|
cancelFollowRequestConfirm: "{name} adlı kişiye gönderdiğiniz takip isteğini iptal etmek ister misiniz?"
|
||||||
|
rejectFollowRequestConfirm: "{name} adlı kullanıcının takip isteğini reddetmek istiyor musunuz?"
|
||||||
exportRequested: "Dışa aktarma işlemi talep ettin. Bu işlem biraz zaman alabilir. İşlem tamamlandığında Drive'ına eklenecek."
|
exportRequested: "Dışa aktarma işlemi talep ettin. Bu işlem biraz zaman alabilir. İşlem tamamlandığında Drive'ına eklenecek."
|
||||||
importRequested: "İçe aktarma talebinde bulundun. Bu işlem biraz zaman alabilir."
|
importRequested: "İçe aktarma talebinde bulundun. Bu işlem biraz zaman alabilir."
|
||||||
lists: "Listeler"
|
lists: "Listeler"
|
||||||
@@ -253,6 +255,7 @@ noteDeleteConfirm: "Bu notu silmek istediğinden emin misin?"
|
|||||||
pinLimitExceeded: "Artık daha fazla not sabitleyemezsin"
|
pinLimitExceeded: "Artık daha fazla not sabitleyemezsin"
|
||||||
done: "Tamam"
|
done: "Tamam"
|
||||||
processing: "İşleniyor..."
|
processing: "İşleniyor..."
|
||||||
|
preprocessing: "Hazırlık aşamasında"
|
||||||
preview: "Önizleme"
|
preview: "Önizleme"
|
||||||
default: "Varsayılan"
|
default: "Varsayılan"
|
||||||
defaultValueIs: "Varsayılan: {value}"
|
defaultValueIs: "Varsayılan: {value}"
|
||||||
@@ -301,6 +304,7 @@ uploadFromUrlMayTakeTime: "Yükleme işleminin tamamlanması biraz zaman alabili
|
|||||||
uploadNFiles: "{n} dosya yükle"
|
uploadNFiles: "{n} dosya yükle"
|
||||||
explore: "Keşfet"
|
explore: "Keşfet"
|
||||||
messageRead: "Oku"
|
messageRead: "Oku"
|
||||||
|
readAllChatMessages: "Tüm mesajları okundu olarak işaretle"
|
||||||
noMoreHistory: "Daha fazla geçmiş bilgisi yok."
|
noMoreHistory: "Daha fazla geçmiş bilgisi yok."
|
||||||
startChat: "Sohbete başla"
|
startChat: "Sohbete başla"
|
||||||
nUsersRead: "{n} tarafından okundu"
|
nUsersRead: "{n} tarafından okundu"
|
||||||
@@ -333,6 +337,7 @@ fileName: "Dosya adı"
|
|||||||
selectFile: "Dosya seçin"
|
selectFile: "Dosya seçin"
|
||||||
selectFiles: "Dosyaları seçin"
|
selectFiles: "Dosyaları seçin"
|
||||||
selectFolder: "Klasör seçin"
|
selectFolder: "Klasör seçin"
|
||||||
|
unselectFolder: "Klasör seçimini kaldır"
|
||||||
selectFolders: "Klasörleri seçin"
|
selectFolders: "Klasörleri seçin"
|
||||||
fileNotSelected: "Hiç dosya seçilmedi"
|
fileNotSelected: "Hiç dosya seçilmedi"
|
||||||
renameFile: "Dosyayı yeniden adlandır"
|
renameFile: "Dosyayı yeniden adlandır"
|
||||||
@@ -345,6 +350,7 @@ addFile: "Bir dosya ekle"
|
|||||||
showFile: "Dosyaları göster"
|
showFile: "Dosyaları göster"
|
||||||
emptyDrive: "Drive boş"
|
emptyDrive: "Drive boş"
|
||||||
emptyFolder: "Bu klasör boş"
|
emptyFolder: "Bu klasör boş"
|
||||||
|
dropHereToUpload: "Yüklemek için dosyalarınızı buraya sürükleyin."
|
||||||
unableToDelete: "Silinemiyor"
|
unableToDelete: "Silinemiyor"
|
||||||
inputNewFileName: "Yeni bir dosya adı girin"
|
inputNewFileName: "Yeni bir dosya adı girin"
|
||||||
inputNewDescription: "Yeni alternatif metin girin"
|
inputNewDescription: "Yeni alternatif metin girin"
|
||||||
@@ -537,6 +543,7 @@ regenerate: "Yeniden oluştur"
|
|||||||
fontSize: "Yazı tipi boyutu"
|
fontSize: "Yazı tipi boyutu"
|
||||||
mediaListWithOneImageAppearance: "Tek bir resim içeren medya listelerinin yüksekliği"
|
mediaListWithOneImageAppearance: "Tek bir resim içeren medya listelerinin yüksekliği"
|
||||||
limitTo: "{x} ile sınırlandır"
|
limitTo: "{x} ile sınırlandır"
|
||||||
|
showMediaListByGridInWideArea: "Ekran genişliği geniş olduğunda, medya listesi yatay olarak görüntülenecektir."
|
||||||
noFollowRequests: "Bekleyen takip istekleri yok."
|
noFollowRequests: "Bekleyen takip istekleri yok."
|
||||||
openImageInNewTab: "Görüntüleri yeni sekmede aç"
|
openImageInNewTab: "Görüntüleri yeni sekmede aç"
|
||||||
dashboard: "Gösterge paneli"
|
dashboard: "Gösterge paneli"
|
||||||
@@ -772,6 +779,7 @@ lockedAccountInfo: "Notunuzun görünürlüğünü “Yalnızca takipçiler” o
|
|||||||
alwaysMarkSensitive: "Varsayılan olarak hassas olarak işaretle"
|
alwaysMarkSensitive: "Varsayılan olarak hassas olarak işaretle"
|
||||||
loadRawImages: "Küçük resimleri göstermek yerine orijinal resimleri yükle"
|
loadRawImages: "Küçük resimleri göstermek yerine orijinal resimleri yükle"
|
||||||
disableShowingAnimatedImages: "Animasyonlu görüntüleri oynatmayın"
|
disableShowingAnimatedImages: "Animasyonlu görüntüleri oynatmayın"
|
||||||
|
disableShowingAnimatedImages_caption: "Bu ayara rağmen animasyonlu görüntüler oynatılmıyorsa, bunun nedeni tarayıcınızın veya işletim sisteminizin erişilebilirlik ayarları veya güç tasarrufu ayarlarından kaynaklanan parazit olabilir."
|
||||||
highlightSensitiveMedia: "Hassas medyayı vurgulayın"
|
highlightSensitiveMedia: "Hassas medyayı vurgulayın"
|
||||||
verificationEmailSent: "Doğrulama e-postası gönderildi. Doğrulamayı tamamlamak için e-postadaki bağlantıyı takip edin."
|
verificationEmailSent: "Doğrulama e-postası gönderildi. Doğrulamayı tamamlamak için e-postadaki bağlantıyı takip edin."
|
||||||
notSet: "Ayarlı değil"
|
notSet: "Ayarlı değil"
|
||||||
@@ -1018,6 +1026,9 @@ pushNotificationAlreadySubscribed: "Push bildirimleri zaten açık"
|
|||||||
pushNotificationNotSupported: "Push bildirimleri sunucu veya tarayıcı tarafından desteklenmiyor"
|
pushNotificationNotSupported: "Push bildirimleri sunucu veya tarayıcı tarafından desteklenmiyor"
|
||||||
sendPushNotificationReadMessage: "Okunduktan sonra push bildirimlerini silin"
|
sendPushNotificationReadMessage: "Okunduktan sonra push bildirimlerini silin"
|
||||||
sendPushNotificationReadMessageCaption: "Bu, cihazınızın güç tüketimini artırabilir."
|
sendPushNotificationReadMessageCaption: "Bu, cihazınızın güç tüketimini artırabilir."
|
||||||
|
pleaseAllowPushNotification: "Lütfen tarayıcı ayarlarınızdan bildirimlere izin verin."
|
||||||
|
browserPushNotificationDisabled: "Bildirim gönderme izni alınamadı."
|
||||||
|
browserPushNotificationDisabledDescription: "{serverName} sunucusundan bildirim gönderme izniniz yok. Lütfen tarayıcı ayarlarınızdan bildirimlere izin verin ve tekrar deneyin."
|
||||||
windowMaximize: "Maksimize et"
|
windowMaximize: "Maksimize et"
|
||||||
windowMinimize: "Minimize et"
|
windowMinimize: "Minimize et"
|
||||||
windowRestore: "Geri yükle"
|
windowRestore: "Geri yükle"
|
||||||
@@ -1168,6 +1179,7 @@ installed: "Yüklendi"
|
|||||||
branding: "Markalaşma"
|
branding: "Markalaşma"
|
||||||
enableServerMachineStats: "Sunucu donanım istatistiklerini yayınla"
|
enableServerMachineStats: "Sunucu donanım istatistiklerini yayınla"
|
||||||
enableIdenticonGeneration: "Kullanıcı identicon oluşturmayı etkinleştir"
|
enableIdenticonGeneration: "Kullanıcı identicon oluşturmayı etkinleştir"
|
||||||
|
showRoleBadgesOfRemoteUsers: "Uzaktan kullanıcılara verilen rol rozetlerini görüntüle"
|
||||||
turnOffToImprovePerformance: "Devre dışı bırakma, daha yüksek performansa yol açabilir."
|
turnOffToImprovePerformance: "Devre dışı bırakma, daha yüksek performansa yol açabilir."
|
||||||
createInviteCode: "Davet Kodu oluştur"
|
createInviteCode: "Davet Kodu oluştur"
|
||||||
createWithOptions: "Seçeneklerle oluştur"
|
createWithOptions: "Seçeneklerle oluştur"
|
||||||
@@ -1316,6 +1328,7 @@ acknowledgeNotesAndEnable: "Önlemleri anladıktan sonra açın."
|
|||||||
federationSpecified: "Bu sunucu, beyaz liste federasyonunda çalıştırılmaktadır. Yönetici tarafından belirlenen sunucular dışında diğer sunucularla etkileşim kurmak yasaktır."
|
federationSpecified: "Bu sunucu, beyaz liste federasyonunda çalıştırılmaktadır. Yönetici tarafından belirlenen sunucular dışında diğer sunucularla etkileşim kurmak yasaktır."
|
||||||
federationDisabled: "Bu sunucuda federasyon devre dışıdır. Diğer sunuculardaki kullanıcılarla etkileşim kuramazsınız."
|
federationDisabled: "Bu sunucuda federasyon devre dışıdır. Diğer sunuculardaki kullanıcılarla etkileşim kuramazsınız."
|
||||||
draft: "Taslaklar"
|
draft: "Taslaklar"
|
||||||
|
draftsAndScheduledNotes: "Taslaklar ve planlanmış gönderiler"
|
||||||
confirmOnReact: "Tepki verirken onaylayın"
|
confirmOnReact: "Tepki verirken onaylayın"
|
||||||
reactAreYouSure: "“{emoji}” tepkisini eklemek ister misin?"
|
reactAreYouSure: "“{emoji}” tepkisini eklemek ister misin?"
|
||||||
markAsSensitiveConfirm: "Bu medyayı hassas olarak ayarlamak ister misin?"
|
markAsSensitiveConfirm: "Bu medyayı hassas olarak ayarlamak ister misin?"
|
||||||
@@ -1344,6 +1357,7 @@ textCount: "Karakter sayısı"
|
|||||||
information: "Hakkında"
|
information: "Hakkında"
|
||||||
chat: "Sohbet"
|
chat: "Sohbet"
|
||||||
directMessage: "Kullanıcıyla sohbet et"
|
directMessage: "Kullanıcıyla sohbet et"
|
||||||
|
directMessage_short: "Mesaj"
|
||||||
migrateOldSettings: "Eski istemci ayarlarını taşıma"
|
migrateOldSettings: "Eski istemci ayarlarını taşıma"
|
||||||
migrateOldSettings_description: "Bu işlem otomatik olarak yapılmalıdır, ancak herhangi bir nedenle geçiş başarısız olursa, geçiş işlemini manuel olarak kendin başlatabilirsin. Mevcut yapılandırma bilgileri üzerine yazılacaktır."
|
migrateOldSettings_description: "Bu işlem otomatik olarak yapılmalıdır, ancak herhangi bir nedenle geçiş başarısız olursa, geçiş işlemini manuel olarak kendin başlatabilirsin. Mevcut yapılandırma bilgileri üzerine yazılacaktır."
|
||||||
compress: "Sıkıştır"
|
compress: "Sıkıştır"
|
||||||
@@ -1371,6 +1385,8 @@ redisplayAllTips: "Tüm “İpucu & Püf Nokta” tekrar göster"
|
|||||||
hideAllTips: "Tüm “İpucu & Püf Nokta” gizle"
|
hideAllTips: "Tüm “İpucu & Püf Nokta” gizle"
|
||||||
defaultImageCompressionLevel: "Varsayılan görüntü sıkıştırma düzeyi"
|
defaultImageCompressionLevel: "Varsayılan görüntü sıkıştırma düzeyi"
|
||||||
defaultImageCompressionLevel_description: "Düşük seviye görüntü kalitesini korur ancak dosya boyutunu artırır.<br>Yüksek seviye dosya boyutunu azaltır ancak görüntü kalitesini düşürür."
|
defaultImageCompressionLevel_description: "Düşük seviye görüntü kalitesini korur ancak dosya boyutunu artırır.<br>Yüksek seviye dosya boyutunu azaltır ancak görüntü kalitesini düşürür."
|
||||||
|
defaultCompressionLevel: "Varsayılan sıkıştırma seviyesi"
|
||||||
|
defaultCompressionLevel_description: "Ayarı düşürmek kaliteyi koruyacak ancak dosya boyutunu artıracaktır. <br> Ayarı yükseltmek dosya boyutunu küçültecek ancak kaliteyi düşürecektir."
|
||||||
inMinutes: "Dakika(lar)"
|
inMinutes: "Dakika(lar)"
|
||||||
inDays: "Gün(ler)"
|
inDays: "Gün(ler)"
|
||||||
safeModeEnabled: "Güvenli mod etkinleştirildi"
|
safeModeEnabled: "Güvenli mod etkinleştirildi"
|
||||||
@@ -1378,21 +1394,74 @@ pluginsAreDisabledBecauseSafeMode: "Güvenli mod etkinleştirildiği için tüm
|
|||||||
customCssIsDisabledBecauseSafeMode: "Güvenli mod etkin olduğu için özel CSS uygulanmıyor."
|
customCssIsDisabledBecauseSafeMode: "Güvenli mod etkin olduğu için özel CSS uygulanmıyor."
|
||||||
themeIsDefaultBecauseSafeMode: "Güvenli mod etkinken, varsayılan tema kullanılır. Güvenli modu devre dışı bırakmak bu değişiklikleri geri alır."
|
themeIsDefaultBecauseSafeMode: "Güvenli mod etkinken, varsayılan tema kullanılır. Güvenli modu devre dışı bırakmak bu değişiklikleri geri alır."
|
||||||
thankYouForTestingBeta: "Beta sürümünü test ettiğin için teşekkür ederiz!"
|
thankYouForTestingBeta: "Beta sürümünü test ettiğin için teşekkür ederiz!"
|
||||||
|
createUserSpecifiedNote: "Kullanıcı tarafından belirtilen notlar oluşturun"
|
||||||
|
schedulePost: "Bir gönderi planla"
|
||||||
|
scheduleToPostOnX: "{x} için bir gönderi planla"
|
||||||
|
scheduledToPostOnX: "{x} için bir gönderi planlandı."
|
||||||
|
schedule: "rezervasyon"
|
||||||
|
scheduled: "rezervasyon"
|
||||||
widgets: "Widget'lar"
|
widgets: "Widget'lar"
|
||||||
|
deviceInfo: "Cihaz Bilgileri"
|
||||||
|
deviceInfoDescription: "Teknik bir sorunuz olduğunda, aşağıdaki bilgileri eklemeniz sorunun çözülmesine yardımcı olabilir."
|
||||||
|
youAreAdmin: "Siz yöneticisiniz."
|
||||||
|
frame: "Çerçeve"
|
||||||
presets: "Ön ayar"
|
presets: "Ön ayar"
|
||||||
|
zeroPadding: "Sıfır doldurma"
|
||||||
|
nothingToConfigure: "Ayarlar seçeneği bulunmamaktadır."
|
||||||
_imageEditing:
|
_imageEditing:
|
||||||
_vars:
|
_vars:
|
||||||
|
caption: "Dosya başlığı"
|
||||||
filename: "Dosya adı"
|
filename: "Dosya adı"
|
||||||
|
filename_without_ext: "Uzantısız dosya adları"
|
||||||
|
year: "Çekim yılı"
|
||||||
|
month: "Çekim ayı"
|
||||||
|
day: "Çekim tarihi"
|
||||||
|
hour: "Fotoğrafın çekildiği zaman (saat)"
|
||||||
|
minute: "Çekim süresi (dakika)"
|
||||||
|
second: "Çekim süresi (saniye)"
|
||||||
|
camera_model: "Kamera Adı"
|
||||||
|
camera_lens_model: "Lens adı"
|
||||||
|
camera_mm: "Odak uzaklığı"
|
||||||
|
camera_mm_35: "Genişlik (35mm)"
|
||||||
|
camera_f: "açıklık"
|
||||||
|
camera_s: "Enstantane hızı"
|
||||||
|
camera_iso: "ISO hassasiyeti"
|
||||||
|
gps_lat: "Enlem"
|
||||||
|
gps_long: "Boylam"
|
||||||
_imageFrameEditor:
|
_imageFrameEditor:
|
||||||
|
title: "Düzenleme kareleri"
|
||||||
|
tip: "Görselleri, meta verileri içeren çerçeveler ve etiketler ekleyerek süsleyebilirsiniz."
|
||||||
header: "Başlık"
|
header: "Başlık"
|
||||||
|
footer: "Alt bilgi"
|
||||||
|
borderThickness: "jantın genişliği"
|
||||||
|
labelThickness: "Etiket genişliği"
|
||||||
|
labelScale: "Etiket ölçeği"
|
||||||
|
centered: "Merkezlenmiş"
|
||||||
|
captionMain: "Altyazı (büyük)"
|
||||||
|
captionSub: "Altyazı (küçük)"
|
||||||
|
availableVariables: "Mevcut değişkenler"
|
||||||
|
withQrCode: "2 boyutlu kod"
|
||||||
|
backgroundColor: "Arka Plan Rengi "
|
||||||
|
textColor: "Metin Rengi "
|
||||||
font: "Yazı tipi"
|
font: "Yazı tipi"
|
||||||
fontSerif: "Serif"
|
fontSerif: "Serif"
|
||||||
fontSansSerif: "Sans Serif"
|
fontSansSerif: "Sans Serif"
|
||||||
quitWithoutSaveConfirm: "Kaydedilmemiş değişiklikleri silmek ister misin?"
|
quitWithoutSaveConfirm: "Kaydedilmemiş değişiklikleri silmek ister misin?"
|
||||||
|
failedToLoadImage: "Görüntü yükleme başarısız oldu "
|
||||||
|
_compression:
|
||||||
|
_quality:
|
||||||
|
high: "Yüksek Kalite "
|
||||||
|
medium: "Orta Kalite"
|
||||||
|
low: "Düşük Kalite "
|
||||||
|
_size:
|
||||||
|
large: "Büyük Boyut"
|
||||||
|
medium: "Orta Boyut"
|
||||||
|
small: "Küçük Boyut"
|
||||||
_order:
|
_order:
|
||||||
newest: "Önce yeni"
|
newest: "Önce yeni"
|
||||||
oldest: "Önce eski"
|
oldest: "Önce eski"
|
||||||
_chat:
|
_chat:
|
||||||
|
messages: "Mesaj"
|
||||||
noMessagesYet: "Henüz mesaj yok"
|
noMessagesYet: "Henüz mesaj yok"
|
||||||
newMessage: "Yeni mesaj"
|
newMessage: "Yeni mesaj"
|
||||||
individualChat: "Özel Sohbet"
|
individualChat: "Özel Sohbet"
|
||||||
@@ -1481,6 +1550,11 @@ _settings:
|
|||||||
showUrlPreview: "URL önizlemesi"
|
showUrlPreview: "URL önizlemesi"
|
||||||
showAvailableReactionsFirstInNote: "Mevcut tepkileri en üstte göster."
|
showAvailableReactionsFirstInNote: "Mevcut tepkileri en üstte göster."
|
||||||
showPageTabBarBottom: "Sayfa sekme çubuğunu aşağıda göster"
|
showPageTabBarBottom: "Sayfa sekme çubuğunu aşağıda göster"
|
||||||
|
emojiPaletteBanner: "Emoji seçiciye kalıcı olarak bir palet olarak görüntülenecek ön ayarları kaydedebilir veya seçicinin nasıl görüntüleneceğini özelleştirebilirsiniz."
|
||||||
|
enableAnimatedImages: "Hareketli görüntüleri etkinleştirin"
|
||||||
|
settingsPersistence_title: "Ayarların kalıcılığı"
|
||||||
|
settingsPersistence_description1: "Ayarların kalıcı olarak saklanmasını etkinleştirmek, yapılandırma bilgilerinin kaybolmasını önler."
|
||||||
|
settingsPersistence_description2: "Ortamınıza bağlı olarak bu özelliği etkinleştirmek mümkün olmayabilir."
|
||||||
_chat:
|
_chat:
|
||||||
showSenderName: "Gönderenin adını göster"
|
showSenderName: "Gönderenin adını göster"
|
||||||
sendOnEnter: "Enter tuşuna basarak gönderin"
|
sendOnEnter: "Enter tuşuna basarak gönderin"
|
||||||
@@ -1489,6 +1563,8 @@ _preferencesProfile:
|
|||||||
profileNameDescription: "Bu cihazı tanımlayan bir ad belirle."
|
profileNameDescription: "Bu cihazı tanımlayan bir ad belirle."
|
||||||
profileNameDescription2: "Örnek: “Ana bilgisayar”, “Akıllı telefon”"
|
profileNameDescription2: "Örnek: “Ana bilgisayar”, “Akıllı telefon”"
|
||||||
manageProfiles: "Profilleri Yönet"
|
manageProfiles: "Profilleri Yönet"
|
||||||
|
shareSameProfileBetweenDevicesIsNotRecommended: "Aynı profili birden fazla cihazda kullanmak önerilmez."
|
||||||
|
useSyncBetweenDevicesOptionIfYouWantToSyncSetting: "Birden fazla cihazda senkronize etmek istediğiniz ayarlarınız varsa, lütfen her bir ayar için \"Birden fazla cihazda senkronize et\" seçeneğini etkinleştirin."
|
||||||
_preferencesBackup:
|
_preferencesBackup:
|
||||||
autoBackup: "Otomatik yedekleme"
|
autoBackup: "Otomatik yedekleme"
|
||||||
restoreFromBackup: "Yedeklemeden geri yükle"
|
restoreFromBackup: "Yedeklemeden geri yükle"
|
||||||
@@ -1498,6 +1574,7 @@ _preferencesBackup:
|
|||||||
youNeedToNameYourProfileToEnableAutoBackup: "Otomatik yedeklemeyi etkinleştirmek için bir profil adı ayarlanmalıdır."
|
youNeedToNameYourProfileToEnableAutoBackup: "Otomatik yedeklemeyi etkinleştirmek için bir profil adı ayarlanmalıdır."
|
||||||
autoPreferencesBackupIsNotEnabledForThisDevice: "Bu cihazda ayarların otomatik yedeklemesi etkinleştirilmemiş."
|
autoPreferencesBackupIsNotEnabledForThisDevice: "Bu cihazda ayarların otomatik yedeklemesi etkinleştirilmemiş."
|
||||||
backupFound: "Ayarların yedeği bulundu"
|
backupFound: "Ayarların yedeği bulundu"
|
||||||
|
forceBackup: "Ayarların zorunlu yedeklenmesi"
|
||||||
_accountSettings:
|
_accountSettings:
|
||||||
requireSigninToViewContents: "İçeriği görüntülemek için oturum açmanız gerekir."
|
requireSigninToViewContents: "İçeriği görüntülemek için oturum açmanız gerekir."
|
||||||
requireSigninToViewContentsDescription1: "Oluşturduğun tüm notları ve diğer içeriği görüntülemek için oturum açman gerekir. Bu, tarayıcıların bilgilerini toplamasına engel olacaktır."
|
requireSigninToViewContentsDescription1: "Oluşturduğun tüm notları ve diğer içeriği görüntülemek için oturum açman gerekir. Bu, tarayıcıların bilgilerini toplamasına engel olacaktır."
|
||||||
@@ -2003,6 +2080,7 @@ _role:
|
|||||||
canManageAvatarDecorations: "Avatar süslerini yönet"
|
canManageAvatarDecorations: "Avatar süslerini yönet"
|
||||||
driveCapacity: "Drive kapasitesi"
|
driveCapacity: "Drive kapasitesi"
|
||||||
maxFileSize: "Yükleyebileceğin maksimum dosya boyutu"
|
maxFileSize: "Yükleyebileceğin maksimum dosya boyutu"
|
||||||
|
maxFileSize_caption: "Önceki aşamada ters proxy veya CDN gibi başka yapılandırma ayarları da olabilir."
|
||||||
alwaysMarkNsfw: "Dosyaları her zaman NSFW olarak işaretle"
|
alwaysMarkNsfw: "Dosyaları her zaman NSFW olarak işaretle"
|
||||||
canUpdateBioMedia: "Bir simge veya banner görüntüsünü düzenleyebilir"
|
canUpdateBioMedia: "Bir simge veya banner görüntüsünü düzenleyebilir"
|
||||||
pinMax: "Sabitlenmiş notların maksimum sayısı"
|
pinMax: "Sabitlenmiş notların maksimum sayısı"
|
||||||
@@ -2030,6 +2108,7 @@ _role:
|
|||||||
uploadableFileTypes_caption: "İzin verilen MIME/dosya türlerini belirtir. Birden fazla MIME türü, yeni bir satırla ayırarak belirtilebilir ve joker karakterler yıldız işareti (*) ile belirtilebilir. (örneğin, image/*)"
|
uploadableFileTypes_caption: "İzin verilen MIME/dosya türlerini belirtir. Birden fazla MIME türü, yeni bir satırla ayırarak belirtilebilir ve joker karakterler yıldız işareti (*) ile belirtilebilir. (örneğin, image/*)"
|
||||||
uploadableFileTypes_caption2: "Bazı dosya türleri algılanamayabilir. Bu tür dosyalara izin vermek için, spesifikasyona {x} ekle."
|
uploadableFileTypes_caption2: "Bazı dosya türleri algılanamayabilir. Bu tür dosyalara izin vermek için, spesifikasyona {x} ekle."
|
||||||
noteDraftLimit: "Sunucu notlarının olası taslak sayısı"
|
noteDraftLimit: "Sunucu notlarının olası taslak sayısı"
|
||||||
|
scheduledNoteLimit: "Aynı anda oluşturulabilecek planlanmış gönderi sayısı"
|
||||||
watermarkAvailable: "Filigran işlevinin kullanılabilirliği"
|
watermarkAvailable: "Filigran işlevinin kullanılabilirliği"
|
||||||
_condition:
|
_condition:
|
||||||
roleAssignedTo: "Manuel rollere atanmış"
|
roleAssignedTo: "Manuel rollere atanmış"
|
||||||
@@ -2420,6 +2499,7 @@ _auth:
|
|||||||
scopeUser: "Aşağıdaki kullanıcı olarak çalıştırın"
|
scopeUser: "Aşağıdaki kullanıcı olarak çalıştırın"
|
||||||
pleaseLogin: "Uygulamaları yetkilendirmek için lütfen giriş yapın."
|
pleaseLogin: "Uygulamaları yetkilendirmek için lütfen giriş yapın."
|
||||||
byClickingYouWillBeRedirectedToThisUrl: "Erişim izni verildiğinde, otomatik olarak aşağıdaki URL'ye yönlendirileceksin."
|
byClickingYouWillBeRedirectedToThisUrl: "Erişim izni verildiğinde, otomatik olarak aşağıdaki URL'ye yönlendirileceksin."
|
||||||
|
alreadyAuthorized: "Bu uygulamaya zaten erişim izinleri verilmiş durumda."
|
||||||
_antennaSources:
|
_antennaSources:
|
||||||
all: "Tüm notlar"
|
all: "Tüm notlar"
|
||||||
homeTimeline: "Takip edilen kullanıcıların notları"
|
homeTimeline: "Takip edilen kullanıcıların notları"
|
||||||
@@ -2466,6 +2546,44 @@ _widgets:
|
|||||||
clicker: "Tıklayıcı"
|
clicker: "Tıklayıcı"
|
||||||
birthdayFollowings: "Bugünün Doğum Günleri"
|
birthdayFollowings: "Bugünün Doğum Günleri"
|
||||||
chat: "Sohbet"
|
chat: "Sohbet"
|
||||||
|
_widgetOptions:
|
||||||
|
showHeader: "Başlığı göster"
|
||||||
|
transparent: "Arka planı şeffaf yapın"
|
||||||
|
height: "Yükseklik"
|
||||||
|
_button:
|
||||||
|
colored: "Renkli"
|
||||||
|
_clock:
|
||||||
|
size: "Boyut"
|
||||||
|
thickness: "İğne kalınlığı"
|
||||||
|
thicknessThin: "İnce"
|
||||||
|
thicknessMedium: "Normal"
|
||||||
|
thicknessThick: "Kalın"
|
||||||
|
graduations: "Kadran ölçeği"
|
||||||
|
graduationDots: "Nokta"
|
||||||
|
graduationArabic: "Arap rakamları"
|
||||||
|
fadeGraduations: "ölçeği soluklaştır"
|
||||||
|
sAnimation: "İkinci el animasyon"
|
||||||
|
sAnimationElastic: "Gerçek"
|
||||||
|
sAnimationEaseOut: "Düz"
|
||||||
|
twentyFour: "24 saat ekran"
|
||||||
|
labelTime: "Zaman"
|
||||||
|
labelTz: "Zaman Dilimi"
|
||||||
|
labelTimeAndTz: "Zaman ve Saat Dilimi"
|
||||||
|
timezone: "Zaman Dilimi "
|
||||||
|
showMs: "Milisaniye cinsinden göster"
|
||||||
|
showLabel: "Etiketi Göster"
|
||||||
|
_jobQueue:
|
||||||
|
sound: "Sesleri Çal"
|
||||||
|
_rss:
|
||||||
|
url: "RSS beslemesi URL'si"
|
||||||
|
refreshIntervalSec: "Güncelleme aralığı (saniye)"
|
||||||
|
maxEntries: "Görüntülenecek maksimum öğe sayısı"
|
||||||
|
_rssTicker:
|
||||||
|
shuffle: "Görüntüleme sırasını karıştır"
|
||||||
|
duration: "Kaydırma yazısı hızı (saniye)"
|
||||||
|
reverse: "Geriye doğru kaydır"
|
||||||
|
_birthdayFollowings:
|
||||||
|
period: "Süre"
|
||||||
_cw:
|
_cw:
|
||||||
hide: "Gizle"
|
hide: "Gizle"
|
||||||
show: "İçeriği göster"
|
show: "İçeriği göster"
|
||||||
@@ -2510,9 +2628,20 @@ _postForm:
|
|||||||
replyPlaceholder: "Bu notu yanıtla..."
|
replyPlaceholder: "Bu notu yanıtla..."
|
||||||
quotePlaceholder: "Bu notu alıntı yap..."
|
quotePlaceholder: "Bu notu alıntı yap..."
|
||||||
channelPlaceholder: "Bir kanala gönder..."
|
channelPlaceholder: "Bir kanala gönder..."
|
||||||
|
showHowToUse: "Form açıklamasını göster"
|
||||||
_howToUse:
|
_howToUse:
|
||||||
|
content_title: "Metin"
|
||||||
|
content_description: "Yayınlamak istediğiniz içeriği girin."
|
||||||
|
toolbar_title: "Araç Çubuğu"
|
||||||
|
toolbar_description: "Dosya ve anket ekleyebilir, açıklamalar ve etiketler ekleyebilir, emoji ve bahsetme mesajları ekleyebilirsiniz."
|
||||||
|
account_title: "Hesap Menüsü"
|
||||||
|
account_description: "Paylaşım yaptığınız hesabı değiştirebilir ve hesabınıza kaydedilmiş taslak ve planlanmış paylaşımların listesini görüntüleyebilirsiniz."
|
||||||
visibility_title: "Görünürlük"
|
visibility_title: "Görünürlük"
|
||||||
|
visibility_description: "Notlarınıza kimlerin erişebileceğinin kapsamını belirleyebilirsiniz."
|
||||||
menu_title: "Menü"
|
menu_title: "Menü"
|
||||||
|
menu_description: "Taslak olarak kaydetme, gönderi planlama ve tepki ayarlama gibi diğer işlemleri de gerçekleştirebilirsiniz."
|
||||||
|
submit_title: "Gönder düğmesi"
|
||||||
|
submit_description: "Bir not paylaşacağım. Ctrl + Enter / Cmd + Enter tuşlarını kullanarak da paylaşım yapabilirsiniz."
|
||||||
_placeholders:
|
_placeholders:
|
||||||
a: "Ne yapıyorsun?"
|
a: "Ne yapıyorsun?"
|
||||||
b: "Çevrende neler oluyor?"
|
b: "Çevrende neler oluyor?"
|
||||||
@@ -2658,6 +2787,8 @@ _notification:
|
|||||||
youReceivedFollowRequest: "Bir takip isteği aldınız."
|
youReceivedFollowRequest: "Bir takip isteği aldınız."
|
||||||
yourFollowRequestAccepted: "Takip isteğin kabul edildi."
|
yourFollowRequestAccepted: "Takip isteğin kabul edildi."
|
||||||
pollEnded: "Anket sonuçları açıklandı."
|
pollEnded: "Anket sonuçları açıklandı."
|
||||||
|
scheduledNotePosted: "Rezervasyon defteri yayınlandı."
|
||||||
|
scheduledNotePostFailed: "Rezervasyon defterine gönderilemedi"
|
||||||
newNote: "Yeni not"
|
newNote: "Yeni not"
|
||||||
unreadAntennaNote: "{name} anteni"
|
unreadAntennaNote: "{name} anteni"
|
||||||
roleAssigned: "Verilen rol"
|
roleAssigned: "Verilen rol"
|
||||||
@@ -2687,6 +2818,8 @@ _notification:
|
|||||||
quote: "Alıntılar"
|
quote: "Alıntılar"
|
||||||
reaction: "Tepki"
|
reaction: "Tepki"
|
||||||
pollEnded: "Anketler sona eriyor"
|
pollEnded: "Anketler sona eriyor"
|
||||||
|
scheduledNotePosted: "Planlanan gönderi başarılı"
|
||||||
|
scheduledNotePostFailed: "Planlanan gönderi başarısız oldu"
|
||||||
receiveFollowRequest: "Takip istekleri alındı"
|
receiveFollowRequest: "Takip istekleri alındı"
|
||||||
followRequestAccepted: "Kabul edilen takip istekleri"
|
followRequestAccepted: "Kabul edilen takip istekleri"
|
||||||
roleAssigned: "Verilen rol"
|
roleAssigned: "Verilen rol"
|
||||||
@@ -2726,6 +2859,14 @@ _deck:
|
|||||||
usedAsMinWidthWhenFlexible: "“Otomatik genişlik ayarı” seçeneği etkinleştirildiğinde, bunun için minimum genişlik kullanılacak."
|
usedAsMinWidthWhenFlexible: "“Otomatik genişlik ayarı” seçeneği etkinleştirildiğinde, bunun için minimum genişlik kullanılacak."
|
||||||
flexible: "Otomatik genişlik ayarı"
|
flexible: "Otomatik genişlik ayarı"
|
||||||
enableSyncBetweenDevicesForProfiles: "Cihazlar arasında profil bilgilerinin senkronizasyonunu etkinleştir"
|
enableSyncBetweenDevicesForProfiles: "Cihazlar arasında profil bilgilerinin senkronizasyonunu etkinleştir"
|
||||||
|
showHowToUse: "Kullanıcı arayüzü açıklamasını görüntüle"
|
||||||
|
_howToUse:
|
||||||
|
addColumn_title: "Sütun ekle"
|
||||||
|
addColumn_description: "Sütun türlerini seçip ekleyebilirsiniz."
|
||||||
|
settings_title: "Arayüz Yapılandırması"
|
||||||
|
settings_description: "Sekme kullanıcı arayüzünü ayrıntılı olarak yapılandırabilirsiniz."
|
||||||
|
switchProfile_title: "Profili Değiştir"
|
||||||
|
switchProfile_description: "Kullanıcı arayüzü düzenlerini profil olarak kaydedebilir ve istediğiniz zaman bunlar arasında geçiş yapabilirsiniz."
|
||||||
_columns:
|
_columns:
|
||||||
main: "Ana"
|
main: "Ana"
|
||||||
widgets: "Widget'lar"
|
widgets: "Widget'lar"
|
||||||
@@ -2786,6 +2927,8 @@ _abuseReport:
|
|||||||
notifiedWebhook: "Kullanılacak webhook"
|
notifiedWebhook: "Kullanılacak webhook"
|
||||||
deleteConfirm: "Bildirim alıcısını silmek istediğinden emin misin?"
|
deleteConfirm: "Bildirim alıcısını silmek istediğinden emin misin?"
|
||||||
_moderationLogTypes:
|
_moderationLogTypes:
|
||||||
|
clearQueue: "Kuyruğu temizle"
|
||||||
|
promoteQueue: "Sıraya alınmış işi yeniden deneyin."
|
||||||
createRole: "Rol oluşturuldu"
|
createRole: "Rol oluşturuldu"
|
||||||
deleteRole: "Rol silindi"
|
deleteRole: "Rol silindi"
|
||||||
updateRole: "Rol güncellendi"
|
updateRole: "Rol güncellendi"
|
||||||
@@ -3180,10 +3323,13 @@ _watermarkEditor:
|
|||||||
title: "Filigranı Düzenle"
|
title: "Filigranı Düzenle"
|
||||||
cover: "Her şeyi örtün"
|
cover: "Her şeyi örtün"
|
||||||
repeat: "her yere yayılmış"
|
repeat: "her yere yayılmış"
|
||||||
|
preserveBoundingRect: "Döndürme sırasında dışarı çıkmayacak şekilde ayarlayın."
|
||||||
opacity: "Opaklık"
|
opacity: "Opaklık"
|
||||||
scale: "Boyut"
|
scale: "Boyut"
|
||||||
text: "Metin"
|
text: "Metin"
|
||||||
|
qr: "2 boyutlu kod"
|
||||||
position: "Pozisyon"
|
position: "Pozisyon"
|
||||||
|
margin: "Kenar"
|
||||||
type: "Tür"
|
type: "Tür"
|
||||||
image: "Görseller"
|
image: "Görseller"
|
||||||
advanced: "Gelişmiş"
|
advanced: "Gelişmiş"
|
||||||
@@ -3198,17 +3344,21 @@ _watermarkEditor:
|
|||||||
polkadotSubDotOpacity: "İkincil noktanın opaklığı"
|
polkadotSubDotOpacity: "İkincil noktanın opaklığı"
|
||||||
polkadotSubDotRadius: "İkincil noktanın boyutu"
|
polkadotSubDotRadius: "İkincil noktanın boyutu"
|
||||||
polkadotSubDotDivisions: "Alt nokta sayısı."
|
polkadotSubDotDivisions: "Alt nokta sayısı."
|
||||||
|
leaveBlankToAccountUrl: "Boş bırakılması durumunda hesap URL'si görüntülenecektir."
|
||||||
|
failedToLoadImage: "Görüntü yükleme başarısız oldu "
|
||||||
_imageEffector:
|
_imageEffector:
|
||||||
title: "Effektler"
|
title: "Effektler"
|
||||||
addEffect: "Efektler Ekle"
|
addEffect: "Efektler Ekle"
|
||||||
discardChangesConfirm: "Cidden çıkmak istiyor musun? Kaydedilmemiş değişikliklerin var."
|
discardChangesConfirm: "Cidden çıkmak istiyor musun? Kaydedilmemiş değişikliklerin var."
|
||||||
nothingToConfigure: "Yapılandırılabilir seçenekler mevcut değildir."
|
failedToLoadImage: "Görüntü yükleme başarısız oldu "
|
||||||
_fxs:
|
_fxs:
|
||||||
chromaticAberration: "Renk Sapması"
|
chromaticAberration: "Renk Sapması"
|
||||||
glitch: "Bozulma"
|
glitch: "Bozulma"
|
||||||
mirror: "Ayna"
|
mirror: "Ayna"
|
||||||
invert: "Renkleri Ters Çevir"
|
invert: "Renkleri Ters Çevir"
|
||||||
grayscale: "Gri tonlama"
|
grayscale: "Gri tonlama"
|
||||||
|
blur: "Bulanıklık"
|
||||||
|
pixelate: "Mozaik"
|
||||||
colorAdjust: "Renk Düzeltme"
|
colorAdjust: "Renk Düzeltme"
|
||||||
colorClamp: "Renk Sıkıştırma"
|
colorClamp: "Renk Sıkıştırma"
|
||||||
colorClampAdvanced: "Renk Sıkıştırma (Gelişmiş)"
|
colorClampAdvanced: "Renk Sıkıştırma (Gelişmiş)"
|
||||||
@@ -3220,10 +3370,13 @@ _imageEffector:
|
|||||||
checker: "Denetleyici"
|
checker: "Denetleyici"
|
||||||
blockNoise: "Gürültüyü Engelle"
|
blockNoise: "Gürültüyü Engelle"
|
||||||
tearing: "Yırtılma"
|
tearing: "Yırtılma"
|
||||||
|
fill: "Doldur"
|
||||||
_fxProps:
|
_fxProps:
|
||||||
angle: "Açı"
|
angle: "Açı"
|
||||||
scale: "Boyut"
|
scale: "Boyut"
|
||||||
size: "Boyut"
|
size: "Boyut"
|
||||||
|
radius: "Yarıçap"
|
||||||
|
samples: "Örnek sayısı"
|
||||||
offset: "Pozisyon"
|
offset: "Pozisyon"
|
||||||
color: "Renk"
|
color: "Renk"
|
||||||
opacity: "Opaklık"
|
opacity: "Opaklık"
|
||||||
@@ -3248,11 +3401,10 @@ _imageEffector:
|
|||||||
threshold: "Eşik"
|
threshold: "Eşik"
|
||||||
centerX: "Merkez X"
|
centerX: "Merkez X"
|
||||||
centerY: "Merkez Y"
|
centerY: "Merkez Y"
|
||||||
zoomLinesSmoothing: "Düzeltme"
|
density: "Yoğunluk"
|
||||||
zoomLinesSmoothingDescription: "Düzeltme ve yakınlaştırma çizgi genişliği birlikte kullanılamaz."
|
zoomLinesOutlineThickness: "çizgi gölge kalınlığı"
|
||||||
zoomLinesThreshold: "Zoom çizgi genişliği"
|
|
||||||
zoomLinesMaskSize: "Merkez çapı"
|
zoomLinesMaskSize: "Merkez çapı"
|
||||||
zoomLinesBlack: "Siyah yap"
|
circle: "Dairesel"
|
||||||
drafts: "Taslaklar"
|
drafts: "Taslaklar"
|
||||||
_drafts:
|
_drafts:
|
||||||
select: "Taslak Seç"
|
select: "Taslak Seç"
|
||||||
@@ -3268,6 +3420,22 @@ _drafts:
|
|||||||
restoreFromDraft: "Taslaktan geri yükle"
|
restoreFromDraft: "Taslaktan geri yükle"
|
||||||
restore: "Geri yükle"
|
restore: "Geri yükle"
|
||||||
listDrafts: "Taslaklar Listesi"
|
listDrafts: "Taslaklar Listesi"
|
||||||
|
schedule: "Planlanmış Gönderi"
|
||||||
|
listScheduledNotes: "Planlanmış gönderilerin listesi"
|
||||||
|
cancelSchedule: "Rezervasyonu iptal et"
|
||||||
|
qr: "2 boyutlu kod"
|
||||||
_qr:
|
_qr:
|
||||||
showTabTitle: "Ekran"
|
showTabTitle: "Ekran"
|
||||||
|
readTabTitle: "Okumak"
|
||||||
|
shareTitle: "{name}{acct}"
|
||||||
|
shareText: "Beni Fediverse'te takip edin!"
|
||||||
|
chooseCamera: "Kamera Seç"
|
||||||
|
cannotToggleFlash: "Işık seçeneği mevcut değil."
|
||||||
|
turnOnFlash: "Işığı açın"
|
||||||
|
turnOffFlash: "Işığı kapatın"
|
||||||
|
startQr: "Özgeçmiş Kodu Okuyucu"
|
||||||
|
stopQr: "Kod okuyucuyu durdurun"
|
||||||
|
noQrCodeFound: "QR kodu bulunamadı"
|
||||||
|
scanFile: "Cihazdaki görüntüyü tarayın"
|
||||||
raw: "Metin"
|
raw: "Metin"
|
||||||
|
mfm: "MFM"
|
||||||
|
|||||||
@@ -1430,6 +1430,14 @@ _widgets:
|
|||||||
userList: "Список користувачів"
|
userList: "Список користувачів"
|
||||||
_userList:
|
_userList:
|
||||||
chooseList: "Виберіть список"
|
chooseList: "Виберіть список"
|
||||||
|
_widgetOptions:
|
||||||
|
height: "Висота"
|
||||||
|
_button:
|
||||||
|
colored: "Кольоровий"
|
||||||
|
_clock:
|
||||||
|
size: "Розмір"
|
||||||
|
_birthdayFollowings:
|
||||||
|
period: "Тривалість"
|
||||||
_cw:
|
_cw:
|
||||||
hide: "Сховати"
|
hide: "Сховати"
|
||||||
show: "Показати більше"
|
show: "Показати більше"
|
||||||
|
|||||||
@@ -945,6 +945,12 @@ _widgets:
|
|||||||
jobQueue: "Vazifalar navbati"
|
jobQueue: "Vazifalar navbati"
|
||||||
_userList:
|
_userList:
|
||||||
chooseList: "Ro'yxat tanlash"
|
chooseList: "Ro'yxat tanlash"
|
||||||
|
_widgetOptions:
|
||||||
|
height: "balandligi"
|
||||||
|
_button:
|
||||||
|
colored: "rangli"
|
||||||
|
_birthdayFollowings:
|
||||||
|
period: "Davomiylik"
|
||||||
_cw:
|
_cw:
|
||||||
show: "Ko‘proq ko‘rish"
|
show: "Ko‘proq ko‘rish"
|
||||||
chars: "{count} ta belgi(lar)"
|
chars: "{count} ta belgi(lar)"
|
||||||
|
|||||||
+12
-2
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
_lang_: "Tiếng Việt "
|
_lang_: "Tiếng Việt"
|
||||||
headlineMisskey: "Mạng xã hội liên hợp"
|
headlineMisskey: "Mạng xã hội liên hợp"
|
||||||
introMisskey: "Xin chào! Misskey là một nền tảng tiểu blog phi tập trung mã nguồn mở.\nViết \"tút\" để chia sẻ những suy nghĩ của bạn 📡\nBằng \"biểu cảm\", bạn có thể bày tỏ nhanh chóng cảm xúc của bạn với các tút 👍\nHãy khám phá một thế giới mới! 🚀"
|
introMisskey: "Xin chào! Misskey là một nền tảng tiểu blog phi tập trung mã nguồn mở.\nViết \"tút\" để chia sẻ những suy nghĩ của bạn 📡\nBằng \"biểu cảm\", bạn có thể bày tỏ nhanh chóng cảm xúc của bạn với các tút 👍\nHãy khám phá một thế giới mới! 🚀"
|
||||||
poweredByMisskeyDescription: "{name} là một trong những chủ máy của <b>Misskey</b> là nền tảng mã nguồn mở"
|
poweredByMisskeyDescription: "{name} là một trong những chủ máy của <b>Misskey</b> là nền tảng mã nguồn mở"
|
||||||
@@ -576,6 +576,7 @@ showFixedPostForm: "Hiện khung soạn tút ở phía trên bảng tin"
|
|||||||
showFixedPostFormInChannel: "Hiển thị mẫu bài đăng ở phía trên bản tin"
|
showFixedPostFormInChannel: "Hiển thị mẫu bài đăng ở phía trên bản tin"
|
||||||
withRepliesByDefaultForNewlyFollowed: "Mặc định hiển thị trả lời từ những người dùng mới theo dõi trong dòng thời gian"
|
withRepliesByDefaultForNewlyFollowed: "Mặc định hiển thị trả lời từ những người dùng mới theo dõi trong dòng thời gian"
|
||||||
newNoteRecived: "Đã nhận tút mới"
|
newNoteRecived: "Đã nhận tút mới"
|
||||||
|
newNote: "Ghi chú mới"
|
||||||
sounds: "Âm thanh"
|
sounds: "Âm thanh"
|
||||||
sound: "Âm thanh"
|
sound: "Âm thanh"
|
||||||
notificationSoundSettings: "Cài đặt âm thanh thông báo"
|
notificationSoundSettings: "Cài đặt âm thanh thông báo"
|
||||||
@@ -848,7 +849,7 @@ hideOnlineStatus: "Ẩn trạng thái online"
|
|||||||
hideOnlineStatusDescription: "Ẩn trạng thái online của bạn làm giảm sự tiện lợi của một số tính năng như tìm kiếm."
|
hideOnlineStatusDescription: "Ẩn trạng thái online của bạn làm giảm sự tiện lợi của một số tính năng như tìm kiếm."
|
||||||
online: "Online"
|
online: "Online"
|
||||||
active: "Hoạt động"
|
active: "Hoạt động"
|
||||||
offline: "Offline"
|
offline: "Ngoại tuyến"
|
||||||
notRecommended: "Không đề xuất"
|
notRecommended: "Không đề xuất"
|
||||||
botProtection: "Bảo vệ Bot"
|
botProtection: "Bảo vệ Bot"
|
||||||
instanceBlocking: "Máy chủ đã chặn"
|
instanceBlocking: "Máy chủ đã chặn"
|
||||||
@@ -1220,6 +1221,7 @@ information: "Giới thiệu"
|
|||||||
chat: "Trò chuyện"
|
chat: "Trò chuyện"
|
||||||
migrateOldSettings: "Di chuyển cài đặt cũ"
|
migrateOldSettings: "Di chuyển cài đặt cũ"
|
||||||
migrateOldSettings_description: "Thông thường, quá trình này diễn ra tự động, nhưng nếu vì lý do nào đó mà quá trình di chuyển không thành công, bạn có thể kích hoạt thủ công quy trình di chuyển, quá trình này sẽ ghi đè lên thông tin cấu hình hiện tại của bạn."
|
migrateOldSettings_description: "Thông thường, quá trình này diễn ra tự động, nhưng nếu vì lý do nào đó mà quá trình di chuyển không thành công, bạn có thể kích hoạt thủ công quy trình di chuyển, quá trình này sẽ ghi đè lên thông tin cấu hình hiện tại của bạn."
|
||||||
|
driveAboutTip: "Trong Drive, danh sách các tệp bạn đã tải lên trước đây sẽ được hiển thị.<br>\nBạn có thể sử dụng lại chúng khi đính kèm vào ghi chú, hoặc tải lên trước các tệp để đăng sau.<br>\n<b>Lưu ý rằng nếu bạn xóa một tệp, tệp đó cũng sẽ biến mất khỏi tất cả những nơi đã sử dụng tệp đó (ghi chú, trang, ảnh đại diện, biểu ngữ, v.v.).</b><br>\nBạn cũng có thể tạo các thư mục để sắp xếp chúng."
|
||||||
inMinutes: "phút"
|
inMinutes: "phút"
|
||||||
inDays: "ngày"
|
inDays: "ngày"
|
||||||
widgets: "Tiện ích"
|
widgets: "Tiện ích"
|
||||||
@@ -1826,6 +1828,14 @@ _widgets:
|
|||||||
_userList:
|
_userList:
|
||||||
chooseList: "Chọn danh sách"
|
chooseList: "Chọn danh sách"
|
||||||
clicker: "clicker"
|
clicker: "clicker"
|
||||||
|
_widgetOptions:
|
||||||
|
height: "Chiều cao"
|
||||||
|
_button:
|
||||||
|
colored: "Với màu"
|
||||||
|
_clock:
|
||||||
|
size: "Kích thước"
|
||||||
|
_birthdayFollowings:
|
||||||
|
period: "Thời hạn"
|
||||||
_cw:
|
_cw:
|
||||||
hide: "Ẩn"
|
hide: "Ẩn"
|
||||||
show: "Tải thêm"
|
show: "Tải thêm"
|
||||||
|
|||||||
+116
-68
@@ -10,7 +10,7 @@ notifications: "通知"
|
|||||||
username: "用户名"
|
username: "用户名"
|
||||||
password: "密码"
|
password: "密码"
|
||||||
initialPasswordForSetup: "初始化密码"
|
initialPasswordForSetup: "初始化密码"
|
||||||
initialPasswordIsIncorrect: "初始化密码不正确"
|
initialPasswordIsIncorrect: "初始化密码不正确。"
|
||||||
initialPasswordForSetupDescription: "如果是自己安装的 Misskey,请输入配置文件里设好的密码。\n如果使用的是 Misskey 的托管服务等,请输入服务商提供的密码。\n如果没有设置密码,请留空并继续。"
|
initialPasswordForSetupDescription: "如果是自己安装的 Misskey,请输入配置文件里设好的密码。\n如果使用的是 Misskey 的托管服务等,请输入服务商提供的密码。\n如果没有设置密码,请留空并继续。"
|
||||||
forgotPassword: "忘记密码"
|
forgotPassword: "忘记密码"
|
||||||
fetchingAsApObject: "在联邦宇宙查询中..."
|
fetchingAsApObject: "在联邦宇宙查询中..."
|
||||||
@@ -53,7 +53,7 @@ copyRemoteLink: "复制远程链接"
|
|||||||
copyLinkRenote: "复制转帖链接"
|
copyLinkRenote: "复制转帖链接"
|
||||||
delete: "删除"
|
delete: "删除"
|
||||||
deleteAndEdit: "删除并编辑"
|
deleteAndEdit: "删除并编辑"
|
||||||
deleteAndEditConfirm: "要删除此帖并再次编辑吗?对此帖的所有回应、转发和回复也将被删除。"
|
deleteAndEditConfirm: "要删除此帖并再次编辑吗?此帖下所有的回应、转发和回复也将被删除。"
|
||||||
addToList: "添加至列表"
|
addToList: "添加至列表"
|
||||||
addToAntenna: "添加到天线"
|
addToAntenna: "添加到天线"
|
||||||
sendMessage: "发送消息"
|
sendMessage: "发送消息"
|
||||||
@@ -136,7 +136,7 @@ emojiPicker: "表情符号选择器"
|
|||||||
pinnedEmojisForReactionSettingDescription: "可以设置发表回应时置顶显示的表情符号"
|
pinnedEmojisForReactionSettingDescription: "可以设置发表回应时置顶显示的表情符号"
|
||||||
pinnedEmojisSettingDescription: "可以设置输入表情符号时置顶显示的表情符号"
|
pinnedEmojisSettingDescription: "可以设置输入表情符号时置顶显示的表情符号"
|
||||||
emojiPickerDisplay: "选择器显示设置"
|
emojiPickerDisplay: "选择器显示设置"
|
||||||
overwriteFromPinnedEmojisForReaction: "从「置顶(回应)」设置覆盖"
|
overwriteFromPinnedEmojisForReaction: "使用「置顶(回应)」设置覆盖"
|
||||||
overwriteFromPinnedEmojis: "从全局设置覆盖"
|
overwriteFromPinnedEmojis: "从全局设置覆盖"
|
||||||
reactionSettingDescription2: "拖动重新排序,单击删除,点击 + 添加。"
|
reactionSettingDescription2: "拖动重新排序,单击删除,点击 + 添加。"
|
||||||
rememberNoteVisibility: "保存上次设置的可见性"
|
rememberNoteVisibility: "保存上次设置的可见性"
|
||||||
@@ -146,15 +146,15 @@ markAsSensitive: "标记为敏感内容"
|
|||||||
unmarkAsSensitive: "取消标记为敏感内容"
|
unmarkAsSensitive: "取消标记为敏感内容"
|
||||||
enterFileName: "输入文件名"
|
enterFileName: "输入文件名"
|
||||||
mute: "屏蔽"
|
mute: "屏蔽"
|
||||||
unmute: "取消屏蔽"
|
unmute: "取消隐藏"
|
||||||
renoteMute: "屏蔽转帖"
|
renoteMute: "隐藏转帖"
|
||||||
renoteUnmute: "取消屏蔽转帖"
|
renoteUnmute: "取消隐藏转帖"
|
||||||
block: "拉黑"
|
block: "屏蔽"
|
||||||
unblock: "取消拉黑"
|
unblock: "取消屏蔽"
|
||||||
suspend: "冻结"
|
suspend: "冻结"
|
||||||
unsuspend: "解除冻结"
|
unsuspend: "解除冻结"
|
||||||
blockConfirm: "确定要拉黑吗?"
|
blockConfirm: "确定要屏蔽吗?"
|
||||||
unblockConfirm: "确定要取消拉黑吗?"
|
unblockConfirm: "确定要取消屏蔽吗?"
|
||||||
suspendConfirm: "要冻结吗?"
|
suspendConfirm: "要冻结吗?"
|
||||||
unsuspendConfirm: "要解除冻结吗?"
|
unsuspendConfirm: "要解除冻结吗?"
|
||||||
selectList: "选择列表"
|
selectList: "选择列表"
|
||||||
@@ -164,7 +164,7 @@ selectAntenna: "选择天线"
|
|||||||
editAntenna: "编辑天线"
|
editAntenna: "编辑天线"
|
||||||
createAntenna: "创建天线"
|
createAntenna: "创建天线"
|
||||||
selectWidget: "选择小工具"
|
selectWidget: "选择小工具"
|
||||||
editWidgets: "编辑部件"
|
editWidgets: "编辑小工具"
|
||||||
editWidgetsExit: "完成编辑"
|
editWidgetsExit: "完成编辑"
|
||||||
customEmojis: "自定义表情符号"
|
customEmojis: "自定义表情符号"
|
||||||
emoji: "表情符号"
|
emoji: "表情符号"
|
||||||
@@ -174,7 +174,7 @@ emojiUrl: "emoji 地址"
|
|||||||
addEmoji: "添加表情符号"
|
addEmoji: "添加表情符号"
|
||||||
settingGuide: "推荐配置"
|
settingGuide: "推荐配置"
|
||||||
cacheRemoteFiles: "缓存远程文件"
|
cacheRemoteFiles: "缓存远程文件"
|
||||||
cacheRemoteFilesDescription: "启用此设定时,将在此服务器上缓存远程文件。虽然可以加快图片显示的速度,但是相对的会消耗大量的服务器存储空间。用户角色内的网盘容量决定了这个远程用户能在服务器上保留多少缓存。当超出了这个限制时,旧的文件将从缓存中被删除,成为链接。当禁用此设定时,则是从一开始就将远程文件保留为链接。此时推荐将 default.yml 的 proxyRemoteFiles 设置为 true 以优化缩略图生成及保护用户隐私。"
|
cacheRemoteFilesDescription: "启用此设定时,将在此服务器上缓存远程文件。虽然可以加快图片显示的速度,但是相对的会消耗大量的服务器存储空间。用户角色内的网盘容量决定了这个远程用户能在服务器上保留多少缓存。当超出了这个限制时,旧的文件将从缓存中被删除,成为链接。当禁用此设定时,则是从一开始就将远程文件保留为链接。此时推荐将 的 proxyRemoteFiles 设置为 true 以优化缩略图生成及保护用户隐私。"
|
||||||
youCanCleanRemoteFilesCache: "可以使用文件管理的🗑️按钮来删除所有的缓存。"
|
youCanCleanRemoteFilesCache: "可以使用文件管理的🗑️按钮来删除所有的缓存。"
|
||||||
cacheRemoteSensitiveFiles: "缓存远程敏感媒体文件"
|
cacheRemoteSensitiveFiles: "缓存远程敏感媒体文件"
|
||||||
cacheRemoteSensitiveFilesDescription: "如果禁用这项设定,远程服务器的敏感媒体将不会被缓存,而是直接链接。"
|
cacheRemoteSensitiveFilesDescription: "如果禁用这项设定,远程服务器的敏感媒体将不会被缓存,而是直接链接。"
|
||||||
@@ -184,7 +184,7 @@ flagAsCat: "喵!!!!!!!!!!!!"
|
|||||||
flagAsCatDescription: "喵喵喵??"
|
flagAsCatDescription: "喵喵喵??"
|
||||||
flagShowTimelineReplies: "在时间线上显示帖子的回复"
|
flagShowTimelineReplies: "在时间线上显示帖子的回复"
|
||||||
flagShowTimelineRepliesDescription: "启用时,时间线除了显示用户的帖子外,还会显示其他用户对帖子的回复。"
|
flagShowTimelineRepliesDescription: "启用时,时间线除了显示用户的帖子外,还会显示其他用户对帖子的回复。"
|
||||||
autoAcceptFollowed: "自动允许来自我关注的用户对我的关注请求"
|
autoAcceptFollowed: "自动允许回关请求"
|
||||||
addAccount: "添加账户"
|
addAccount: "添加账户"
|
||||||
reloadAccountsList: "更新账户列表"
|
reloadAccountsList: "更新账户列表"
|
||||||
loginFailed: "登录失败"
|
loginFailed: "登录失败"
|
||||||
@@ -241,14 +241,14 @@ clearCachedFilesConfirm: "确定要清除所有缓存的远程文件吗?"
|
|||||||
blockedInstances: "被屏蔽的服务器"
|
blockedInstances: "被屏蔽的服务器"
|
||||||
blockedInstancesDescription: "设定要屏蔽的服务器,以换行分隔。被屏蔽的服务器将无法与本服务器进行交换通讯。子域名也同样会被屏蔽。"
|
blockedInstancesDescription: "设定要屏蔽的服务器,以换行分隔。被屏蔽的服务器将无法与本服务器进行交换通讯。子域名也同样会被屏蔽。"
|
||||||
silencedInstances: "被静音的服务器"
|
silencedInstances: "被静音的服务器"
|
||||||
silencedInstancesDescription: "设置要静音的服务器,以换行分隔。被静音的服务器内所有的账户都被视为「静音」状态,且关注操作均需要被批准。被阻止的实例不受影响。"
|
silencedInstancesDescription: "设置要静音的服务器,以换行分隔。被静音的服务器内所有的账户都被视为「静音」状态,且关注操作均需要被批准。已被屏蔽的实例不受影响。"
|
||||||
mediaSilencedInstances: "已隐藏媒体文件的服务器"
|
mediaSilencedInstances: "已隐藏媒体文件的服务器"
|
||||||
mediaSilencedInstancesDescription: "设置要隐藏媒体文件的服务器,以换行分隔。被设置的服务器内所有账号的文件均按照「敏感内容」处理,且将无法使用自定义表情符号。被阻止的实例不受影响。"
|
mediaSilencedInstancesDescription: "设置要隐藏媒体文件的服务器,以换行分隔。被设置的服务器内所有账号的文件均按照「敏感内容」处理,且将无法使用自定义表情符号。已被屏蔽的实例不受影响。"
|
||||||
federationAllowedHosts: "允许联合的服务器"
|
federationAllowedHosts: "允许联合的服务器"
|
||||||
federationAllowedHostsDescription: "设定允许联合的服务器,以换行分隔。"
|
federationAllowedHostsDescription: "设定允许联合的服务器,以换行分隔。"
|
||||||
muteAndBlock: "屏蔽/拉黑"
|
muteAndBlock: "隐藏/屏蔽"
|
||||||
mutedUsers: "已屏蔽用户"
|
mutedUsers: "已隐藏的用户"
|
||||||
blockedUsers: "已拉黑的用户"
|
blockedUsers: "已屏蔽的用户"
|
||||||
noUsers: "无用户"
|
noUsers: "无用户"
|
||||||
editProfile: "编辑资料"
|
editProfile: "编辑资料"
|
||||||
noteDeleteConfirm: "确定要删除该帖子吗?"
|
noteDeleteConfirm: "确定要删除该帖子吗?"
|
||||||
@@ -262,7 +262,7 @@ defaultValueIs: "默认值: {value}"
|
|||||||
noCustomEmojis: "没有自定义表情符号"
|
noCustomEmojis: "没有自定义表情符号"
|
||||||
noJobs: "没有任务"
|
noJobs: "没有任务"
|
||||||
federating: "联合中"
|
federating: "联合中"
|
||||||
blocked: "已拉黑"
|
blocked: "已屏蔽"
|
||||||
suspended: "停止投递"
|
suspended: "停止投递"
|
||||||
all: "全部"
|
all: "全部"
|
||||||
subscribing: "已订阅"
|
subscribing: "已订阅"
|
||||||
@@ -543,6 +543,7 @@ regenerate: "重新生成"
|
|||||||
fontSize: "字体大小"
|
fontSize: "字体大小"
|
||||||
mediaListWithOneImageAppearance: "仅一张图片的媒体列表高度"
|
mediaListWithOneImageAppearance: "仅一张图片的媒体列表高度"
|
||||||
limitTo: "上限为 {x}"
|
limitTo: "上限为 {x}"
|
||||||
|
showMediaListByGridInWideArea: "在大屏幕上并排显示媒体列表"
|
||||||
noFollowRequests: "没有关注请求"
|
noFollowRequests: "没有关注请求"
|
||||||
openImageInNewTab: "在新标签页中打开图片"
|
openImageInNewTab: "在新标签页中打开图片"
|
||||||
dashboard: "管理面板"
|
dashboard: "管理面板"
|
||||||
@@ -645,7 +646,7 @@ addedRelays: "已添加的中继"
|
|||||||
serviceworkerInfo: "您需要启用推送通知"
|
serviceworkerInfo: "您需要启用推送通知"
|
||||||
deletedNote: "已删除的帖子"
|
deletedNote: "已删除的帖子"
|
||||||
invisibleNote: "隐藏的帖子"
|
invisibleNote: "隐藏的帖子"
|
||||||
enableInfiniteScroll: "启用自动滚动页面模式"
|
enableInfiniteScroll: "自动加载更多内容"
|
||||||
visibility: "可见性"
|
visibility: "可见性"
|
||||||
poll: "投票"
|
poll: "投票"
|
||||||
useCw: "隐藏内容"
|
useCw: "隐藏内容"
|
||||||
@@ -693,13 +694,13 @@ emptyToDisableSmtpAuth: "用户名和密码留空可以禁用 SMTP 验证"
|
|||||||
smtpSecure: "在 SMTP 连接中使用隐式 SSL / TLS"
|
smtpSecure: "在 SMTP 连接中使用隐式 SSL / TLS"
|
||||||
smtpSecureInfo: "使用 STARTTLS 时关闭。"
|
smtpSecureInfo: "使用 STARTTLS 时关闭。"
|
||||||
testEmail: "邮件发送测试"
|
testEmail: "邮件发送测试"
|
||||||
wordMute: "屏蔽关键词"
|
wordMute: "折叠关键词"
|
||||||
wordMuteDescription: "折叠包含指定关键词的帖子。被折叠的帖子可单击展开。"
|
wordMuteDescription: "折叠包含指定关键词的帖子。被折叠的帖子可单击展开。"
|
||||||
hardWordMute: "强屏蔽关键词"
|
hardWordMute: "屏蔽关键词"
|
||||||
showMutedWord: "显示屏蔽关键词"
|
showMutedWord: "显示已折叠的关键词"
|
||||||
hardWordMuteDescription: "隐藏包含指定关键词的帖子。与隐藏关键词不同,帖子将完全不会显示。"
|
hardWordMuteDescription: "屏蔽包含指定关键词的帖子。与折叠关键词不同,帖子将完全不会显示。"
|
||||||
regexpError: "正则表达式错误"
|
regexpError: "正则表达式错误"
|
||||||
regexpErrorDescription: "{tab} 隐藏文字的第 {line} 行的正则表达式有错误:"
|
regexpErrorDescription: "{tab} 折叠关键词的第 {line} 行的正则表达式有错误:"
|
||||||
instanceMute: "已隐藏的服务器"
|
instanceMute: "已隐藏的服务器"
|
||||||
userSaysSomething: "{name} 说了什么,但是被屏蔽词过滤了"
|
userSaysSomething: "{name} 说了什么,但是被屏蔽词过滤了"
|
||||||
userSaysSomethingAbout: "{name} 说了关于「{word}」的什么"
|
userSaysSomethingAbout: "{name} 说了关于「{word}」的什么"
|
||||||
@@ -831,7 +832,7 @@ youAreRunningUpToDateClient: "您所使用的客户端已经是最新的。"
|
|||||||
newVersionOfClientAvailable: "新版本的客户端可用。"
|
newVersionOfClientAvailable: "新版本的客户端可用。"
|
||||||
usageAmount: "使用量"
|
usageAmount: "使用量"
|
||||||
capacity: "容量"
|
capacity: "容量"
|
||||||
inUse: "使用中"
|
inUse: "已使用"
|
||||||
editCode: "编辑代码"
|
editCode: "编辑代码"
|
||||||
apply: "应用"
|
apply: "应用"
|
||||||
receiveAnnouncementFromInstance: "从服务器接收通知"
|
receiveAnnouncementFromInstance: "从服务器接收通知"
|
||||||
@@ -912,7 +913,7 @@ accountDeletionInProgress: "正在删除账户"
|
|||||||
usernameInfo: "在服务器上唯一标识您的帐户的名称。您可以使用字母 (a ~ z, A ~ Z)、数字 (0 ~ 9) 和下划线 (_)。用户名以后不能更改。"
|
usernameInfo: "在服务器上唯一标识您的帐户的名称。您可以使用字母 (a ~ z, A ~ Z)、数字 (0 ~ 9) 和下划线 (_)。用户名以后不能更改。"
|
||||||
aiChanMode: "小蓝模式"
|
aiChanMode: "小蓝模式"
|
||||||
devMode: "开发者模式"
|
devMode: "开发者模式"
|
||||||
keepCw: "回复时维持隐藏内容"
|
keepCw: "始终开启内容警告"
|
||||||
pubSub: "Pub/Sub 账户"
|
pubSub: "Pub/Sub 账户"
|
||||||
lastCommunication: "最近通信"
|
lastCommunication: "最近通信"
|
||||||
resolved: "已解决"
|
resolved: "已解决"
|
||||||
@@ -931,8 +932,8 @@ manageAccounts: "管理账户"
|
|||||||
makeReactionsPublic: "将回应设置为公开"
|
makeReactionsPublic: "将回应设置为公开"
|
||||||
makeReactionsPublicDescription: "将您发表过的回应设置成公开可见。"
|
makeReactionsPublicDescription: "将您发表过的回应设置成公开可见。"
|
||||||
classic: "经典"
|
classic: "经典"
|
||||||
muteThread: "屏蔽帖文串"
|
muteThread: "静音帖文串"
|
||||||
unmuteThread: "取消屏蔽帖文串"
|
unmuteThread: "取消帖文串静音"
|
||||||
followingVisibility: "关注的人的公开范围"
|
followingVisibility: "关注的人的公开范围"
|
||||||
followersVisibility: "关注者的公开范围"
|
followersVisibility: "关注者的公开范围"
|
||||||
continueThread: "查看更多帖子"
|
continueThread: "查看更多帖子"
|
||||||
@@ -955,7 +956,7 @@ searchByGoogle: "Google"
|
|||||||
instanceDefaultLightTheme: "服务器默认浅色主题"
|
instanceDefaultLightTheme: "服务器默认浅色主题"
|
||||||
instanceDefaultDarkTheme: "服务器默认深色主题"
|
instanceDefaultDarkTheme: "服务器默认深色主题"
|
||||||
instanceDefaultThemeDescription: "以对象格式输入主题代码"
|
instanceDefaultThemeDescription: "以对象格式输入主题代码"
|
||||||
mutePeriod: "屏蔽期限"
|
mutePeriod: "隐藏时长"
|
||||||
period: "截止时间"
|
period: "截止时间"
|
||||||
indefinitely: "永久"
|
indefinitely: "永久"
|
||||||
tenMinutes: "10分钟"
|
tenMinutes: "10分钟"
|
||||||
@@ -1293,7 +1294,7 @@ useNativeUIForVideoAudioPlayer: "使用浏览器的 UI 播放动画及音频"
|
|||||||
keepOriginalFilename: "保持原文件名"
|
keepOriginalFilename: "保持原文件名"
|
||||||
keepOriginalFilenameDescription: "若关闭此设置,上传文件时文件名将被替换为随机字符。"
|
keepOriginalFilenameDescription: "若关闭此设置,上传文件时文件名将被替换为随机字符。"
|
||||||
noDescription: "没有描述"
|
noDescription: "没有描述"
|
||||||
alwaysConfirmFollow: "总是确认关注"
|
alwaysConfirmFollow: "在关注时始终确认"
|
||||||
inquiry: "联系我们"
|
inquiry: "联系我们"
|
||||||
tryAgain: "请再试一次"
|
tryAgain: "请再试一次"
|
||||||
confirmWhenRevealingSensitiveMedia: "显示敏感内容前需要确认"
|
confirmWhenRevealingSensitiveMedia: "显示敏感内容前需要确认"
|
||||||
@@ -1334,7 +1335,7 @@ markAsSensitiveConfirm: "要将此媒体标记为敏感吗?"
|
|||||||
unmarkAsSensitiveConfirm: "要将此媒体解除敏感标记吗?"
|
unmarkAsSensitiveConfirm: "要将此媒体解除敏感标记吗?"
|
||||||
preferences: "偏好设置"
|
preferences: "偏好设置"
|
||||||
accessibility: "辅助功能"
|
accessibility: "辅助功能"
|
||||||
preferencesProfile: "设置的配置"
|
preferencesProfile: "设置的配置文件"
|
||||||
copyPreferenceId: "复制设置 ID"
|
copyPreferenceId: "复制设置 ID"
|
||||||
resetToDefaultValue: "重置为默认值"
|
resetToDefaultValue: "重置为默认值"
|
||||||
overrideByAccount: "覆盖账号"
|
overrideByAccount: "覆盖账号"
|
||||||
@@ -1344,14 +1345,14 @@ skip: "跳过"
|
|||||||
restore: "恢复"
|
restore: "恢复"
|
||||||
syncBetweenDevices: "设备间同步"
|
syncBetweenDevices: "设备间同步"
|
||||||
preferenceSyncConflictTitle: "服务器上已存在设定值"
|
preferenceSyncConflictTitle: "服务器上已存在设定值"
|
||||||
preferenceSyncConflictText: "服务器上已有此设置的设定值。要覆盖哪个设定值?"
|
preferenceSyncConflictText: "即将保存设定值到服务器,但检测到服务器上已有此设置的设定值。要使用哪个设定值?"
|
||||||
preferenceSyncConflictChoiceMerge: "合并"
|
preferenceSyncConflictChoiceMerge: "合并"
|
||||||
preferenceSyncConflictChoiceServer: "服务器上的设定值"
|
preferenceSyncConflictChoiceServer: "服务器上的设定值"
|
||||||
preferenceSyncConflictChoiceDevice: "设备上的设定值"
|
preferenceSyncConflictChoiceDevice: "设备上的设定值"
|
||||||
preferenceSyncConflictChoiceCancel: "取消同步"
|
preferenceSyncConflictChoiceCancel: "取消同步"
|
||||||
paste: "粘贴"
|
paste: "粘贴"
|
||||||
emojiPalette: "表情符号调色板"
|
emojiPalette: "表情符号调色板"
|
||||||
postForm: "投稿窗口"
|
postForm: "发帖窗口"
|
||||||
textCount: "字数"
|
textCount: "字数"
|
||||||
information: "关于"
|
information: "关于"
|
||||||
chat: "聊天"
|
chat: "聊天"
|
||||||
@@ -1374,10 +1375,10 @@ advice: "建议"
|
|||||||
realtimeMode: "实时模式"
|
realtimeMode: "实时模式"
|
||||||
turnItOn: "开启"
|
turnItOn: "开启"
|
||||||
turnItOff: "关闭"
|
turnItOff: "关闭"
|
||||||
emojiMute: "屏蔽表情符号"
|
emojiMute: "打码表情符号"
|
||||||
emojiUnmute: "取消屏蔽表情符号"
|
emojiUnmute: "取消表情符号打码"
|
||||||
muteX: "屏蔽{x}"
|
muteX: "隐藏{x}"
|
||||||
unmuteX: "取消屏蔽{x}"
|
unmuteX: "取消对{x}的隐藏"
|
||||||
abort: "中止"
|
abort: "中止"
|
||||||
tip: "提示和技巧"
|
tip: "提示和技巧"
|
||||||
redisplayAllTips: "重新显示所有的提示和技巧"
|
redisplayAllTips: "重新显示所有的提示和技巧"
|
||||||
@@ -1406,6 +1407,7 @@ youAreAdmin: "你是管理员"
|
|||||||
frame: "边框"
|
frame: "边框"
|
||||||
presets: "预设值"
|
presets: "预设值"
|
||||||
zeroPadding: "填充 0"
|
zeroPadding: "填充 0"
|
||||||
|
nothingToConfigure: "没有项目"
|
||||||
_imageEditing:
|
_imageEditing:
|
||||||
_vars:
|
_vars:
|
||||||
caption: "文件标题"
|
caption: "文件标题"
|
||||||
@@ -1485,7 +1487,7 @@ _chat:
|
|||||||
home: "首页"
|
home: "首页"
|
||||||
send: "发送"
|
send: "发送"
|
||||||
newline: "换行"
|
newline: "换行"
|
||||||
muteThisRoom: "屏蔽该群聊"
|
muteThisRoom: "消息免打扰"
|
||||||
deleteRoom: "删除群聊"
|
deleteRoom: "删除群聊"
|
||||||
chatNotAvailableForThisAccountOrServer: "此服务器或者账户还未开启聊天功能。"
|
chatNotAvailableForThisAccountOrServer: "此服务器或者账户还未开启聊天功能。"
|
||||||
chatIsReadOnlyForThisAccountOrServer: "此服务器或者账户内的聊天为只读。无法发布新信息或创建及加入群聊。"
|
chatIsReadOnlyForThisAccountOrServer: "此服务器或者账户内的聊天为只读。无法发布新信息或创建及加入群聊。"
|
||||||
@@ -1548,13 +1550,16 @@ _settings:
|
|||||||
showUrlPreview: "显示 URL 预览"
|
showUrlPreview: "显示 URL 预览"
|
||||||
showAvailableReactionsFirstInNote: "在顶部显示可用的回应"
|
showAvailableReactionsFirstInNote: "在顶部显示可用的回应"
|
||||||
showPageTabBarBottom: "在下方显示页面标签栏"
|
showPageTabBarBottom: "在下方显示页面标签栏"
|
||||||
emojiPaletteBanner: "可以将固定显示表情符号选择器的预设注册至调色板,也可以自定义表情符号选择器的显示方式。"
|
emojiPaletteBanner: "可以将固定显示在表情符号选择器中的预设注册为调色板,也可以自定义表情符号选择器的显示方式。"
|
||||||
enableAnimatedImages: "启用动画图像"
|
enableAnimatedImages: "启用动画图像"
|
||||||
|
settingsPersistence_title: "设置持久化"
|
||||||
|
settingsPersistence_description1: "启用设置持久化可防止设置信息丢失。"
|
||||||
|
settingsPersistence_description2: "根据环境不同,有可能无法开启。"
|
||||||
_chat:
|
_chat:
|
||||||
showSenderName: "显示发送者的名字"
|
showSenderName: "显示发送者的名字"
|
||||||
sendOnEnter: "回车键发送"
|
sendOnEnter: "回车键发送"
|
||||||
_preferencesProfile:
|
_preferencesProfile:
|
||||||
profileName: "配置名"
|
profileName: "配置文件名"
|
||||||
profileNameDescription: "请指定用于识别此设备的名称"
|
profileNameDescription: "请指定用于识别此设备的名称"
|
||||||
profileNameDescription2: "如「PC」、「手机」等"
|
profileNameDescription2: "如「PC」、「手机」等"
|
||||||
manageProfiles: "管理配置文件"
|
manageProfiles: "管理配置文件"
|
||||||
@@ -2080,7 +2085,7 @@ _role:
|
|||||||
canUpdateBioMedia: "可以更新头像和横幅"
|
canUpdateBioMedia: "可以更新头像和横幅"
|
||||||
pinMax: "帖子置顶数量限制"
|
pinMax: "帖子置顶数量限制"
|
||||||
antennaMax: "可创建的最大天线数量"
|
antennaMax: "可创建的最大天线数量"
|
||||||
wordMuteMax: "屏蔽词的字数限制"
|
wordMuteMax: "折叠词的字数限制"
|
||||||
webhookMax: "Webhook 创建数量限制"
|
webhookMax: "Webhook 创建数量限制"
|
||||||
clipMax: "便签创建数量限制"
|
clipMax: "便签创建数量限制"
|
||||||
noteEachClipsMax: "便签内贴文的最大数量"
|
noteEachClipsMax: "便签内贴文的最大数量"
|
||||||
@@ -2251,14 +2256,14 @@ _menuDisplay:
|
|||||||
top: "顶部"
|
top: "顶部"
|
||||||
hide: "隐藏"
|
hide: "隐藏"
|
||||||
_wordMute:
|
_wordMute:
|
||||||
muteWords: "要隐藏的词"
|
muteWords: "要折叠的词"
|
||||||
muteWordsDescription: "AND 条件用空格分隔,OR 条件用换行符分隔。"
|
muteWordsDescription: "AND 条件用空格分隔,OR 条件用换行符分隔。"
|
||||||
muteWordsDescription2: "正则表达式用斜线包裹"
|
muteWordsDescription2: "正则表达式用斜线包裹"
|
||||||
_instanceMute:
|
_instanceMute:
|
||||||
instanceMuteDescription: "屏蔽服务器中所有的帖子和转帖,包括该服务器内用户的回复。"
|
instanceMuteDescription: "隐藏来自这些服务器的所有帖子和转贴,包括这些服务器上用户的回复。"
|
||||||
instanceMuteDescription2: "通过换行符分隔进行设置"
|
instanceMuteDescription2: "通过换行符分隔进行设置"
|
||||||
title: "下面实例中的帖子将被隐藏。"
|
title: "下面实例中的帖子将被隐藏。"
|
||||||
heading: "已屏蔽的服务器"
|
heading: "已隐藏的服务器"
|
||||||
_theme:
|
_theme:
|
||||||
explore: "寻找主题"
|
explore: "寻找主题"
|
||||||
install: "安装主题"
|
install: "安装主题"
|
||||||
@@ -2397,8 +2402,8 @@ _2fa:
|
|||||||
_permissions:
|
_permissions:
|
||||||
"read:account": "查看账户信息"
|
"read:account": "查看账户信息"
|
||||||
"write:account": "更改帐户信息"
|
"write:account": "更改帐户信息"
|
||||||
"read:blocks": "查看黑名单"
|
"read:blocks": "查看屏蔽列表"
|
||||||
"write:blocks": "编辑黑名单"
|
"write:blocks": "编辑屏蔽列表"
|
||||||
"read:drive": "查看网盘"
|
"read:drive": "查看网盘"
|
||||||
"write:drive": "管理网盘文件"
|
"write:drive": "管理网盘文件"
|
||||||
"read:favorites": "查看收藏夹"
|
"read:favorites": "查看收藏夹"
|
||||||
@@ -2407,8 +2412,8 @@ _permissions:
|
|||||||
"write:following": "关注/取消关注"
|
"write:following": "关注/取消关注"
|
||||||
"read:messaging": "查看私信"
|
"read:messaging": "查看私信"
|
||||||
"write:messaging": "撰写或删除消息"
|
"write:messaging": "撰写或删除消息"
|
||||||
"read:mutes": "查看屏蔽列表"
|
"read:mutes": "查看已隐藏用户列表"
|
||||||
"write:mutes": "编辑屏蔽列表"
|
"write:mutes": "编辑已隐藏用户列表"
|
||||||
"write:notes": "撰写或删除帖子"
|
"write:notes": "撰写或删除帖子"
|
||||||
"read:notifications": "查看通知"
|
"read:notifications": "查看通知"
|
||||||
"write:notifications": "管理通知"
|
"write:notifications": "管理通知"
|
||||||
@@ -2512,7 +2517,7 @@ _weekday:
|
|||||||
_widgets:
|
_widgets:
|
||||||
profile: "个人资料"
|
profile: "个人资料"
|
||||||
instanceInfo: "服务器信息"
|
instanceInfo: "服务器信息"
|
||||||
memo: "便签"
|
memo: "便利贴"
|
||||||
notifications: "通知"
|
notifications: "通知"
|
||||||
timeline: "时间线"
|
timeline: "时间线"
|
||||||
calendar: "日历"
|
calendar: "日历"
|
||||||
@@ -2525,11 +2530,11 @@ _widgets:
|
|||||||
digitalClock: "数字时钟"
|
digitalClock: "数字时钟"
|
||||||
unixClock: "UNIX 时钟"
|
unixClock: "UNIX 时钟"
|
||||||
federation: "联合"
|
federation: "联合"
|
||||||
instanceCloud: "服务器云"
|
instanceCloud: "服务器球状列表"
|
||||||
postForm: "投稿窗口"
|
postForm: "发帖窗口"
|
||||||
slideshow: "幻灯片展示"
|
slideshow: "幻灯片展示"
|
||||||
button: "按钮"
|
button: "按钮"
|
||||||
onlineUsers: "在线用户"
|
onlineUsers: "在线用户数"
|
||||||
jobQueue: "作业队列"
|
jobQueue: "作业队列"
|
||||||
serverMetric: "服务器指标"
|
serverMetric: "服务器指标"
|
||||||
aiscript: "AiScript 控制台"
|
aiscript: "AiScript 控制台"
|
||||||
@@ -2541,6 +2546,44 @@ _widgets:
|
|||||||
clicker: "点击器"
|
clicker: "点击器"
|
||||||
birthdayFollowings: "今天是他们的生日"
|
birthdayFollowings: "今天是他们的生日"
|
||||||
chat: "私信"
|
chat: "私信"
|
||||||
|
_widgetOptions:
|
||||||
|
showHeader: "显示标题"
|
||||||
|
transparent: "使背景透明"
|
||||||
|
height: "高度"
|
||||||
|
_button:
|
||||||
|
colored: "彩色"
|
||||||
|
_clock:
|
||||||
|
size: "大小"
|
||||||
|
thickness: "指针宽度"
|
||||||
|
thicknessThin: "细"
|
||||||
|
thicknessMedium: "普通"
|
||||||
|
thicknessThick: "粗"
|
||||||
|
graduations: "表盘刻度"
|
||||||
|
graduationDots: "点"
|
||||||
|
graduationArabic: "阿拉伯数字"
|
||||||
|
fadeGraduations: "淡化表盘"
|
||||||
|
sAnimation: "秒针动画"
|
||||||
|
sAnimationElastic: "跳动"
|
||||||
|
sAnimationEaseOut: "平滑"
|
||||||
|
twentyFour: "24 小时制"
|
||||||
|
labelTime: "时间"
|
||||||
|
labelTz: "时区"
|
||||||
|
labelTimeAndTz: "时间和时区"
|
||||||
|
timezone: "时区"
|
||||||
|
showMs: "显示毫秒"
|
||||||
|
showLabel: "显示标签"
|
||||||
|
_jobQueue:
|
||||||
|
sound: "播放音效"
|
||||||
|
_rss:
|
||||||
|
url: "RSS feed 的 URL"
|
||||||
|
refreshIntervalSec: "更新间隔(秒)"
|
||||||
|
maxEntries: "最大显示个数"
|
||||||
|
_rssTicker:
|
||||||
|
shuffle: "随机顺序"
|
||||||
|
duration: "滚动速度(秒)"
|
||||||
|
reverse: "反方向滚动"
|
||||||
|
_birthdayFollowings:
|
||||||
|
period: "期限"
|
||||||
_cw:
|
_cw:
|
||||||
hide: "隐藏"
|
hide: "隐藏"
|
||||||
show: "查看更多"
|
show: "查看更多"
|
||||||
@@ -2628,10 +2671,10 @@ _exportOrImport:
|
|||||||
favoritedNotes: "收藏的帖子"
|
favoritedNotes: "收藏的帖子"
|
||||||
clips: "便签"
|
clips: "便签"
|
||||||
followingList: "关注中"
|
followingList: "关注中"
|
||||||
muteList: "屏蔽"
|
muteList: "隐藏"
|
||||||
blockingList: "拉黑"
|
blockingList: "屏蔽"
|
||||||
userLists: "列表"
|
userLists: "列表"
|
||||||
excludeMutingUsers: "排除屏蔽用户"
|
excludeMutingUsers: "排除已隐藏用户"
|
||||||
excludeInactiveUsers: "排除不活跃用户"
|
excludeInactiveUsers: "排除不活跃用户"
|
||||||
withReplies: "在时间线中包含导入用户的回复"
|
withReplies: "在时间线中包含导入用户的回复"
|
||||||
_charts:
|
_charts:
|
||||||
@@ -2812,10 +2855,18 @@ _deck:
|
|||||||
introduction: "将各列进行组合以创建您自己的界面!"
|
introduction: "将各列进行组合以创建您自己的界面!"
|
||||||
introduction2: "可以随时通过屏幕右侧的 + 来添加列"
|
introduction2: "可以随时通过屏幕右侧的 + 来添加列"
|
||||||
widgetsIntroduction: "从列菜单中,选择“小工具编辑”来添加小工具"
|
widgetsIntroduction: "从列菜单中,选择“小工具编辑”来添加小工具"
|
||||||
useSimpleUiForNonRootPages: "用简易UI表示非根页面"
|
useSimpleUiForNonRootPages: "使用简易UI显示导航页面"
|
||||||
usedAsMinWidthWhenFlexible: "「自适应宽度」被启用的时候,这就是最小的宽度"
|
usedAsMinWidthWhenFlexible: "「自适应宽度」被启用的时候,这就是最小的宽度"
|
||||||
flexible: "自适应宽度"
|
flexible: "自适应宽度"
|
||||||
enableSyncBetweenDevicesForProfiles: "启用个人资料信息跨设备同步"
|
enableSyncBetweenDevicesForProfiles: "启用配置文件跨设备同步"
|
||||||
|
showHowToUse: "查看用户界面说明"
|
||||||
|
_howToUse:
|
||||||
|
addColumn_title: "添加列"
|
||||||
|
addColumn_description: "可以选择要添加的列的类型。"
|
||||||
|
settings_title: "用户界面设置"
|
||||||
|
settings_description: "可以配置 Deck UI 的详细设置,"
|
||||||
|
switchProfile_title: "切换配置文件"
|
||||||
|
switchProfile_description: "将用户界面布局保存为配置文件,以便随时切换。"
|
||||||
_columns:
|
_columns:
|
||||||
main: "主列"
|
main: "主列"
|
||||||
widgets: "小工具"
|
widgets: "小工具"
|
||||||
@@ -3064,10 +3115,10 @@ _mediaControls:
|
|||||||
playbackRate: "播放速度"
|
playbackRate: "播放速度"
|
||||||
loop: "循环播放"
|
loop: "循环播放"
|
||||||
_contextMenu:
|
_contextMenu:
|
||||||
title: "上下文菜单"
|
title: "右键菜单"
|
||||||
app: "应用"
|
app: "使用"
|
||||||
appWithShift: "Shift 键应用"
|
appWithShift: "按住 Shift 键使用"
|
||||||
native: "浏览器的用户界面"
|
native: "浏览器的原生界面"
|
||||||
_gridComponent:
|
_gridComponent:
|
||||||
_error:
|
_error:
|
||||||
requiredValue: "此值为必填项"
|
requiredValue: "此值为必填项"
|
||||||
@@ -3270,7 +3321,7 @@ _watermarkEditor:
|
|||||||
driveFileTypeWarn: "不支持此文件"
|
driveFileTypeWarn: "不支持此文件"
|
||||||
driveFileTypeWarnDescription: "请选择图像文件"
|
driveFileTypeWarnDescription: "请选择图像文件"
|
||||||
title: "编辑水印"
|
title: "编辑水印"
|
||||||
cover: "覆盖全体"
|
cover: "覆盖所有"
|
||||||
repeat: "平铺"
|
repeat: "平铺"
|
||||||
preserveBoundingRect: "调整为旋转时不超出范围"
|
preserveBoundingRect: "调整为旋转时不超出范围"
|
||||||
opacity: "不透明度"
|
opacity: "不透明度"
|
||||||
@@ -3299,7 +3350,6 @@ _imageEffector:
|
|||||||
title: "效果"
|
title: "效果"
|
||||||
addEffect: "添加效果"
|
addEffect: "添加效果"
|
||||||
discardChangesConfirm: "丢弃当前设置并退出?"
|
discardChangesConfirm: "丢弃当前设置并退出?"
|
||||||
nothingToConfigure: "还没有设置"
|
|
||||||
failedToLoadImage: "图片加载失败"
|
failedToLoadImage: "图片加载失败"
|
||||||
_fxs:
|
_fxs:
|
||||||
chromaticAberration: "色差"
|
chromaticAberration: "色差"
|
||||||
@@ -3351,11 +3401,9 @@ _imageEffector:
|
|||||||
threshold: "阈值"
|
threshold: "阈值"
|
||||||
centerX: "中心 X "
|
centerX: "中心 X "
|
||||||
centerY: "中心 Y"
|
centerY: "中心 Y"
|
||||||
zoomLinesSmoothing: "平滑"
|
density: "密度"
|
||||||
zoomLinesSmoothingDescription: "平滑和集中线宽度设置不能同时使用。"
|
zoomLinesOutlineThickness: "线条阴影粗细"
|
||||||
zoomLinesThreshold: "集中线宽度"
|
|
||||||
zoomLinesMaskSize: "中心直径"
|
zoomLinesMaskSize: "中心直径"
|
||||||
zoomLinesBlack: "变成黑色"
|
|
||||||
circle: "圆形"
|
circle: "圆形"
|
||||||
drafts: "草稿"
|
drafts: "草稿"
|
||||||
_drafts:
|
_drafts:
|
||||||
|
|||||||
+61
-13
@@ -297,7 +297,7 @@ keepOriginalUploading: "保留原圖"
|
|||||||
keepOriginalUploadingDescription: "上傳圖片時保留原始圖片。關閉時,瀏覽器會在上傳時生成適用於網路傳送的版本。"
|
keepOriginalUploadingDescription: "上傳圖片時保留原始圖片。關閉時,瀏覽器會在上傳時生成適用於網路傳送的版本。"
|
||||||
fromDrive: "從雲端空間中選擇"
|
fromDrive: "從雲端空間中選擇"
|
||||||
fromUrl: "從 URL 上傳"
|
fromUrl: "從 URL 上傳"
|
||||||
uploadFromUrl: "從網址上傳"
|
uploadFromUrl: "從 URL 上傳"
|
||||||
uploadFromUrlDescription: "您要上傳的檔案網址"
|
uploadFromUrlDescription: "您要上傳的檔案網址"
|
||||||
uploadFromUrlRequested: "已請求上傳"
|
uploadFromUrlRequested: "已請求上傳"
|
||||||
uploadFromUrlMayTakeTime: "還需要一些時間才能完成上傳。"
|
uploadFromUrlMayTakeTime: "還需要一些時間才能完成上傳。"
|
||||||
@@ -543,6 +543,7 @@ regenerate: "再次生成"
|
|||||||
fontSize: "字體大小"
|
fontSize: "字體大小"
|
||||||
mediaListWithOneImageAppearance: "只有一張圖片時的檔案列表高度"
|
mediaListWithOneImageAppearance: "只有一張圖片時的檔案列表高度"
|
||||||
limitTo: "上限為 {x}"
|
limitTo: "上限為 {x}"
|
||||||
|
showMediaListByGridInWideArea: "當畫面寬度較寬時,將媒體清單以橫向排列顯示"
|
||||||
noFollowRequests: "沒有追隨您的請求"
|
noFollowRequests: "沒有追隨您的請求"
|
||||||
openImageInNewTab: "於新分頁中開啟圖片"
|
openImageInNewTab: "於新分頁中開啟圖片"
|
||||||
dashboard: "儀表板"
|
dashboard: "儀表板"
|
||||||
@@ -824,7 +825,7 @@ saveConfirm: "您要儲存變更嗎?"
|
|||||||
deleteConfirm: "你確定要刪除嗎?"
|
deleteConfirm: "你確定要刪除嗎?"
|
||||||
invalidValue: "輸入值無效。"
|
invalidValue: "輸入值無效。"
|
||||||
registry: "登錄表"
|
registry: "登錄表"
|
||||||
closeAccount: "停用帳戶"
|
closeAccount: "刪除帳戶"
|
||||||
currentVersion: "目前版本"
|
currentVersion: "目前版本"
|
||||||
latestVersion: "最新版本"
|
latestVersion: "最新版本"
|
||||||
youAreRunningUpToDateClient: "您所使用的客戶端已經是最新的。"
|
youAreRunningUpToDateClient: "您所使用的客戶端已經是最新的。"
|
||||||
@@ -1089,9 +1090,9 @@ postToTheChannel: "發佈到頻道"
|
|||||||
cannotBeChangedLater: "之後不能變更。"
|
cannotBeChangedLater: "之後不能變更。"
|
||||||
reactionAcceptance: "接受表情反應"
|
reactionAcceptance: "接受表情反應"
|
||||||
likeOnly: "僅限讚"
|
likeOnly: "僅限讚"
|
||||||
likeOnlyForRemote: "遠端僅限讚"
|
likeOnlyForRemote: "全部(遠端僅限讚)"
|
||||||
nonSensitiveOnly: "僅限非敏感"
|
nonSensitiveOnly: "僅限非敏感"
|
||||||
nonSensitiveOnlyForLocalLikeOnlyForRemote: "僅限非敏感(遠端僅限按讚)"
|
nonSensitiveOnlyForLocalLikeOnlyForRemote: "僅限非敏感(遠端僅限讚)"
|
||||||
rolesAssignedToMe: "指派給自己的角色"
|
rolesAssignedToMe: "指派給自己的角色"
|
||||||
resetPasswordConfirm: "重設密碼?"
|
resetPasswordConfirm: "重設密碼?"
|
||||||
sensitiveWords: "敏感詞"
|
sensitiveWords: "敏感詞"
|
||||||
@@ -1366,7 +1367,7 @@ top: "上"
|
|||||||
embed: "嵌入"
|
embed: "嵌入"
|
||||||
settingsMigrating: "正在移轉設定。請稍候……(之後也可以到「設定 → 其他 → 舊設定資訊移轉」中手動進行移轉)"
|
settingsMigrating: "正在移轉設定。請稍候……(之後也可以到「設定 → 其他 → 舊設定資訊移轉」中手動進行移轉)"
|
||||||
readonly: "唯讀"
|
readonly: "唯讀"
|
||||||
goToDeck: "回去甲板"
|
goToDeck: "回到多欄模式"
|
||||||
federationJobs: "聯邦通訊作業"
|
federationJobs: "聯邦通訊作業"
|
||||||
driveAboutTip: "在「雲端硬碟」中,會顯示過去上傳的檔案列表。<br>\n可以在附加到貼文時重新利用,或者事先上傳之後再用於發布。<br>\n<b>請注意,刪除檔案後,之前使用過該檔案的所有地方(貼文、頁面、大頭貼、橫幅等)也會一併無法顯示。</b><br>\n也可以建立資料夾來整理檔案。"
|
driveAboutTip: "在「雲端硬碟」中,會顯示過去上傳的檔案列表。<br>\n可以在附加到貼文時重新利用,或者事先上傳之後再用於發布。<br>\n<b>請注意,刪除檔案後,之前使用過該檔案的所有地方(貼文、頁面、大頭貼、橫幅等)也會一併無法顯示。</b><br>\n也可以建立資料夾來整理檔案。"
|
||||||
scrollToClose: "用滾輪關閉"
|
scrollToClose: "用滾輪關閉"
|
||||||
@@ -1393,7 +1394,7 @@ pluginsAreDisabledBecauseSafeMode: "由於啟用安全模式,所有的外掛
|
|||||||
customCssIsDisabledBecauseSafeMode: "由於啟用安全模式,所有的客製 CSS 都被停用。"
|
customCssIsDisabledBecauseSafeMode: "由於啟用安全模式,所有的客製 CSS 都被停用。"
|
||||||
themeIsDefaultBecauseSafeMode: "在安全模式啟用期間將使用預設主題。關閉安全模式後會恢復原本的設定。"
|
themeIsDefaultBecauseSafeMode: "在安全模式啟用期間將使用預設主題。關閉安全模式後會恢復原本的設定。"
|
||||||
thankYouForTestingBeta: "感謝您協助驗證 beta 版!"
|
thankYouForTestingBeta: "感謝您協助驗證 beta 版!"
|
||||||
createUserSpecifiedNote: "建立使用者指定的筆記"
|
createUserSpecifiedNote: "建立指定使用者的貼文"
|
||||||
schedulePost: "排定發布"
|
schedulePost: "排定發布"
|
||||||
scheduleToPostOnX: "排定在 {x} 發布"
|
scheduleToPostOnX: "排定在 {x} 發布"
|
||||||
scheduledToPostOnX: "已排定在 {x} 發布貼文"
|
scheduledToPostOnX: "已排定在 {x} 發布貼文"
|
||||||
@@ -1406,6 +1407,7 @@ youAreAdmin: "您是管理員"
|
|||||||
frame: "邊框"
|
frame: "邊框"
|
||||||
presets: "預設值"
|
presets: "預設值"
|
||||||
zeroPadding: "補零"
|
zeroPadding: "補零"
|
||||||
|
nothingToConfigure: "無可設定的項目"
|
||||||
_imageEditing:
|
_imageEditing:
|
||||||
_vars:
|
_vars:
|
||||||
caption: "檔案標題"
|
caption: "檔案標題"
|
||||||
@@ -1550,6 +1552,9 @@ _settings:
|
|||||||
showPageTabBarBottom: "在底部顯示頁面的標籤列"
|
showPageTabBarBottom: "在底部顯示頁面的標籤列"
|
||||||
emojiPaletteBanner: "可以將固定顯示在表情符號選擇器的預設項目註冊為調色盤,或者自訂選擇器的顯示方式。"
|
emojiPaletteBanner: "可以將固定顯示在表情符號選擇器的預設項目註冊為調色盤,或者自訂選擇器的顯示方式。"
|
||||||
enableAnimatedImages: "啟用動畫圖片"
|
enableAnimatedImages: "啟用動畫圖片"
|
||||||
|
settingsPersistence_title: "設定的持久化"
|
||||||
|
settingsPersistence_description1: "啟用「設定的持久化」後,可以防止設定資訊遺失。"
|
||||||
|
settingsPersistence_description2: "依環境不同,可能無法啟用。"
|
||||||
_chat:
|
_chat:
|
||||||
showSenderName: "顯示發送者的名稱"
|
showSenderName: "顯示發送者的名稱"
|
||||||
sendOnEnter: "按下 Enter 發送訊息"
|
sendOnEnter: "按下 Enter 發送訊息"
|
||||||
@@ -2152,7 +2157,7 @@ _accountDelete:
|
|||||||
accountDelete: "刪除帳戶"
|
accountDelete: "刪除帳戶"
|
||||||
mayTakeTime: "刪除帳戶的處理負荷較大,如果帳戶發佈的內容以及上傳的檔案數量較多,則需要一段時間才能完成。"
|
mayTakeTime: "刪除帳戶的處理負荷較大,如果帳戶發佈的內容以及上傳的檔案數量較多,則需要一段時間才能完成。"
|
||||||
sendEmail: "帳戶刪除完成後,將向其電子郵件地址發送通知。"
|
sendEmail: "帳戶刪除完成後,將向其電子郵件地址發送通知。"
|
||||||
requestAccountDelete: "刪除帳戶請求"
|
requestAccountDelete: "請求刪除帳戶"
|
||||||
started: "已開始刪除作業。"
|
started: "已開始刪除作業。"
|
||||||
inProgress: "正在刪除"
|
inProgress: "正在刪除"
|
||||||
_ad:
|
_ad:
|
||||||
@@ -2356,7 +2361,7 @@ _timeIn:
|
|||||||
minutes: "{n}分鐘後"
|
minutes: "{n}分鐘後"
|
||||||
hours: "{n}小時後"
|
hours: "{n}小時後"
|
||||||
days: "{n}天後"
|
days: "{n}天後"
|
||||||
weeks: "{n}周後"
|
weeks: "{n}週後"
|
||||||
months: "{n}個月後"
|
months: "{n}個月後"
|
||||||
years: "{n}年後"
|
years: "{n}年後"
|
||||||
_time:
|
_time:
|
||||||
@@ -2541,6 +2546,44 @@ _widgets:
|
|||||||
clicker: "點擊器"
|
clicker: "點擊器"
|
||||||
birthdayFollowings: "今天生日的使用者"
|
birthdayFollowings: "今天生日的使用者"
|
||||||
chat: "聊天"
|
chat: "聊天"
|
||||||
|
_widgetOptions:
|
||||||
|
showHeader: "檢視標頭 "
|
||||||
|
transparent: "使背景透明"
|
||||||
|
height: "高度"
|
||||||
|
_button:
|
||||||
|
colored: "彩色"
|
||||||
|
_clock:
|
||||||
|
size: "尺寸"
|
||||||
|
thickness: "指針粗細"
|
||||||
|
thicknessThin: "細"
|
||||||
|
thicknessMedium: "普通"
|
||||||
|
thicknessThick: "粗"
|
||||||
|
graduations: "刻度盤"
|
||||||
|
graduationDots: "圓點"
|
||||||
|
graduationArabic: "阿拉伯數字"
|
||||||
|
fadeGraduations: "刻度淡出"
|
||||||
|
sAnimation: "秒針的動畫效果"
|
||||||
|
sAnimationElastic: "真實的"
|
||||||
|
sAnimationEaseOut: "滑順"
|
||||||
|
twentyFour: "24 小時制"
|
||||||
|
labelTime: "時間"
|
||||||
|
labelTz: "時區"
|
||||||
|
labelTimeAndTz: "時間與時區"
|
||||||
|
timezone: "時區"
|
||||||
|
showMs: "顯示毫秒"
|
||||||
|
showLabel: "顯示標記"
|
||||||
|
_jobQueue:
|
||||||
|
sound: "播放音效"
|
||||||
|
_rss:
|
||||||
|
url: "RSS 訂閱網址"
|
||||||
|
refreshIntervalSec: "更新間隔(秒)"
|
||||||
|
maxEntries: "最大顯示數量"
|
||||||
|
_rssTicker:
|
||||||
|
shuffle: "顯示順序隨機排列"
|
||||||
|
duration: "RSS 跑馬燈的捲動速度(秒)"
|
||||||
|
reverse: "反方向滾動"
|
||||||
|
_birthdayFollowings:
|
||||||
|
period: "時長"
|
||||||
_cw:
|
_cw:
|
||||||
hide: "隱藏"
|
hide: "隱藏"
|
||||||
show: "顯示內容"
|
show: "顯示內容"
|
||||||
@@ -2816,6 +2859,14 @@ _deck:
|
|||||||
usedAsMinWidthWhenFlexible: "如果啟用「自動調整寬度」,此為最小寬度"
|
usedAsMinWidthWhenFlexible: "如果啟用「自動調整寬度」,此為最小寬度"
|
||||||
flexible: "自動調整寬度"
|
flexible: "自動調整寬度"
|
||||||
enableSyncBetweenDevicesForProfiles: "啟用裝置與裝置之間的設定檔資料同步化"
|
enableSyncBetweenDevicesForProfiles: "啟用裝置與裝置之間的設定檔資料同步化"
|
||||||
|
showHowToUse: "檢視使用者介面說明"
|
||||||
|
_howToUse:
|
||||||
|
addColumn_title: "新增欄位"
|
||||||
|
addColumn_description: "您可以選擇要新增的欄位類型。"
|
||||||
|
settings_title: "使用者介面設定"
|
||||||
|
settings_description: "您可以對多欄模式使用者介面做詳細設定。"
|
||||||
|
switchProfile_title: "切換設定檔"
|
||||||
|
switchProfile_description: "將使用者介面佈局儲存為設定檔,就可以隨時切換使用。"
|
||||||
_columns:
|
_columns:
|
||||||
main: "主列"
|
main: "主列"
|
||||||
widgets: "小工具"
|
widgets: "小工具"
|
||||||
@@ -3299,7 +3350,6 @@ _imageEffector:
|
|||||||
title: "特效"
|
title: "特效"
|
||||||
addEffect: "新增特效"
|
addEffect: "新增特效"
|
||||||
discardChangesConfirm: "捨棄更改並退出嗎?"
|
discardChangesConfirm: "捨棄更改並退出嗎?"
|
||||||
nothingToConfigure: "無可設定的項目"
|
|
||||||
failedToLoadImage: "圖片載入失敗"
|
failedToLoadImage: "圖片載入失敗"
|
||||||
_fxs:
|
_fxs:
|
||||||
chromaticAberration: "色差"
|
chromaticAberration: "色差"
|
||||||
@@ -3351,11 +3401,9 @@ _imageEffector:
|
|||||||
threshold: "閾值"
|
threshold: "閾值"
|
||||||
centerX: "X中心座標"
|
centerX: "X中心座標"
|
||||||
centerY: "Y中心座標"
|
centerY: "Y中心座標"
|
||||||
zoomLinesSmoothing: "平滑化"
|
density: "密度"
|
||||||
zoomLinesSmoothingDescription: "平滑化與集中線寬度設定不能同時使用。"
|
zoomLinesOutlineThickness: "線條陰影的粗細"
|
||||||
zoomLinesThreshold: "集中線的寬度"
|
|
||||||
zoomLinesMaskSize: "中心直徑"
|
zoomLinesMaskSize: "中心直徑"
|
||||||
zoomLinesBlack: "變成黑色"
|
|
||||||
circle: "圓形"
|
circle: "圓形"
|
||||||
drafts: "草稿\n"
|
drafts: "草稿\n"
|
||||||
_drafts:
|
_drafts:
|
||||||
|
|||||||
+28
-31
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "misskey",
|
"name": "misskey",
|
||||||
"version": "2025.12.0",
|
"version": "2026.3.2",
|
||||||
"codename": "nasubi",
|
"codename": "nasubi",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/misskey-dev/misskey.git"
|
"url": "https://github.com/misskey-dev/misskey.git"
|
||||||
},
|
},
|
||||||
"packageManager": "pnpm@10.24.0",
|
"packageManager": "pnpm@10.32.1",
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
"packages/misskey-js",
|
"packages/misskey-js",
|
||||||
"packages/i18n",
|
"packages/i18n",
|
||||||
@@ -23,12 +23,12 @@
|
|||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"compile-config": "cd packages/backend && pnpm compile-config",
|
"compile-config": "cd packages/backend && pnpm compile-config",
|
||||||
"build-pre": "node ./scripts/build-pre.js",
|
"build-pre": "node scripts/build-pre.mjs",
|
||||||
"build-assets": "node ./scripts/build-assets.mjs",
|
"build-assets": "node ./scripts/build-assets.mjs",
|
||||||
"build": "pnpm build-pre && pnpm -r build && pnpm build-assets",
|
"build": "pnpm build-pre && pnpm -r build && pnpm build-assets",
|
||||||
"build-storybook": "pnpm --filter frontend build-storybook",
|
"build-storybook": "pnpm --filter frontend build-storybook",
|
||||||
"build-misskey-js-with-types": "pnpm build-pre && pnpm --filter backend... --filter=!misskey-js build && pnpm --filter backend generate-api-json --no-build && ncp packages/backend/built/api.json packages/misskey-js/generator/api.json && pnpm --filter misskey-js update-autogen-code && pnpm --filter misskey-js build && pnpm --filter misskey-js api",
|
"build-misskey-js-with-types": "pnpm build-pre && pnpm --filter backend... --filter=!misskey-js build && pnpm --filter backend generate-api-json --no-build && ncp packages/backend/built/api.json packages/misskey-js/generator/api.json && pnpm --filter misskey-js update-autogen-code && pnpm --filter misskey-js build && pnpm --filter misskey-js api",
|
||||||
"start": "pnpm check:connect && cd packages/backend && pnpm compile-config && node ./built/boot/entry.js",
|
"start": "cd packages/backend && pnpm compile-config && node ./built/boot/entry.js",
|
||||||
"start:inspect": "cd packages/backend && pnpm compile-config && node --inspect ./built/boot/entry.js",
|
"start:inspect": "cd packages/backend && pnpm compile-config && node --inspect ./built/boot/entry.js",
|
||||||
"start:test": "ncp ./.github/misskey/test.yml ./.config/test.yml && cd packages/backend && cross-env NODE_ENV=test pnpm compile-config && cross-env NODE_ENV=test node ./built/boot/entry.js",
|
"start:test": "ncp ./.github/misskey/test.yml ./.config/test.yml && cd packages/backend && cross-env NODE_ENV=test pnpm compile-config && cross-env NODE_ENV=test node ./built/boot/entry.js",
|
||||||
"cli": "cd packages/backend && pnpm cli",
|
"cli": "cd packages/backend && pnpm cli",
|
||||||
@@ -39,7 +39,7 @@
|
|||||||
"migrateandstart": "pnpm migrate && pnpm start",
|
"migrateandstart": "pnpm migrate && pnpm start",
|
||||||
"watch": "pnpm dev",
|
"watch": "pnpm dev",
|
||||||
"dev": "node scripts/dev.mjs",
|
"dev": "node scripts/dev.mjs",
|
||||||
"lint": "pnpm -r lint",
|
"lint": "pnpm --no-bail -r lint",
|
||||||
"cy:open": "pnpm cypress open --config-file=cypress.config.ts",
|
"cy:open": "pnpm cypress open --config-file=cypress.config.ts",
|
||||||
"cy:run": "pnpm cypress run",
|
"cy:run": "pnpm cypress run",
|
||||||
"e2e": "pnpm start-server-and-test start:test http://localhost:61812 cy:run",
|
"e2e": "pnpm start-server-and-test start:test http://localhost:61812 cy:run",
|
||||||
@@ -48,48 +48,45 @@
|
|||||||
"jest-and-coverage": "cd packages/backend && pnpm jest-and-coverage",
|
"jest-and-coverage": "cd packages/backend && pnpm jest-and-coverage",
|
||||||
"test": "pnpm -r test",
|
"test": "pnpm -r test",
|
||||||
"test-and-coverage": "pnpm -r test-and-coverage",
|
"test-and-coverage": "pnpm -r test-and-coverage",
|
||||||
"clean": "node ./scripts/clean.js",
|
"clean": "node scripts/clean.mjs",
|
||||||
"clean-all": "node ./scripts/clean-all.js",
|
"clean-all": "node scripts/clean-all.mjs",
|
||||||
"cleanall": "pnpm clean-all"
|
"cleanall": "pnpm clean-all"
|
||||||
},
|
},
|
||||||
"resolutions": {
|
|
||||||
"chokidar": "4.0.3",
|
|
||||||
"lodash": "4.17.21"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"cssnano": "7.1.2",
|
"cssnano": "7.1.3",
|
||||||
"esbuild": "0.27.0",
|
"esbuild": "0.27.4",
|
||||||
"execa": "9.6.0",
|
"execa": "9.6.1",
|
||||||
"fast-glob": "3.3.3",
|
|
||||||
"glob": "13.0.0",
|
|
||||||
"ignore-walk": "8.0.0",
|
"ignore-walk": "8.0.0",
|
||||||
"js-yaml": "4.1.1",
|
"js-yaml": "4.1.1",
|
||||||
"postcss": "8.5.6",
|
"postcss": "8.5.8",
|
||||||
"tar": "7.5.2",
|
"tar": "7.5.11",
|
||||||
"terser": "5.44.1",
|
"terser": "5.46.0"
|
||||||
"typescript": "5.9.3"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@eslint/js": "9.39.1",
|
"@eslint/js": "9.39.4",
|
||||||
"@misskey-dev/eslint-plugin": "2.2.0",
|
"@misskey-dev/eslint-plugin": "2.1.0",
|
||||||
"@types/js-yaml": "4.0.9",
|
"@types/js-yaml": "4.0.9",
|
||||||
"@types/node": "24.10.1",
|
"@types/node": "24.12.0",
|
||||||
"@typescript-eslint/eslint-plugin": "8.47.0",
|
"@typescript-eslint/eslint-plugin": "8.57.0",
|
||||||
"@typescript-eslint/parser": "8.47.0",
|
"@typescript-eslint/parser": "8.57.0",
|
||||||
|
"@typescript/native-preview": "7.0.0-dev.20260116.1",
|
||||||
"cross-env": "10.1.0",
|
"cross-env": "10.1.0",
|
||||||
"cypress": "15.7.0",
|
"cypress": "15.11.0",
|
||||||
"eslint": "9.39.1",
|
"eslint": "9.39.4",
|
||||||
"globals": "16.5.0",
|
"globals": "17.4.0",
|
||||||
"ncp": "2.0.0",
|
"ncp": "2.0.0",
|
||||||
"pnpm": "10.24.0",
|
"pnpm": "10.32.1",
|
||||||
"start-server-and-test": "2.1.3"
|
"start-server-and-test": "2.1.5",
|
||||||
|
"typescript": "5.9.3"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"@tensorflow/tfjs-core": "4.22.0"
|
"@tensorflow/tfjs-core": "4.22.0"
|
||||||
},
|
},
|
||||||
"pnpm": {
|
"pnpm": {
|
||||||
"overrides": {
|
"overrides": {
|
||||||
"@aiscript-dev/aiscript-languageserver": "-"
|
"@aiscript-dev/aiscript-languageserver": "-",
|
||||||
|
"chokidar": "5.0.0",
|
||||||
|
"lodash": "4.17.23"
|
||||||
},
|
},
|
||||||
"ignoredBuiltDependencies": [
|
"ignoredBuiltDependencies": [
|
||||||
"@sentry-internal/node-cpu-profiler",
|
"@sentry-internal/node-cpu-profiler",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ window.onload = async () => {
|
|||||||
const account = JSON.parse(localStorage.getItem('account'));
|
const account = JSON.parse(localStorage.getItem('account'));
|
||||||
const i = account.token;
|
const i = account.token;
|
||||||
|
|
||||||
const api = (endpoint, data = {}) => {
|
const _api = (endpoint, data = {}) => {
|
||||||
const promise = new Promise((resolve, reject) => {
|
const promise = new Promise((resolve, reject) => {
|
||||||
// Append a credential
|
// Append a credential
|
||||||
if (i) data.i = i;
|
if (i) data.i = i;
|
||||||
|
|||||||
@@ -0,0 +1,121 @@
|
|||||||
|
import fs from 'node:fs';
|
||||||
|
import { fileURLToPath } from 'node:url';
|
||||||
|
import { dirname, join } from 'node:path';
|
||||||
|
import { build } from 'esbuild';
|
||||||
|
import { swcPlugin } from 'esbuild-plugin-swc';
|
||||||
|
|
||||||
|
const _filename = fileURLToPath(import.meta.url);
|
||||||
|
const _dirname = dirname(_filename);
|
||||||
|
const _package = JSON.parse(fs.readFileSync(_dirname + '/package.json', 'utf-8'));
|
||||||
|
|
||||||
|
const resolveTsPathsPlugin = {
|
||||||
|
name: 'resolve-ts-paths',
|
||||||
|
setup(build) {
|
||||||
|
build.onResolve({ filter: /^\.{1,2}\/.*\.js$/ }, (args) => {
|
||||||
|
if (args.importer) {
|
||||||
|
const absPath = join(args.resolveDir, args.path);
|
||||||
|
const tsPath = absPath.slice(0, -3) + '.ts';
|
||||||
|
if (fs.existsSync(tsPath)) return { path: tsPath };
|
||||||
|
const tsxPath = absPath.slice(0, -3) + '.tsx';
|
||||||
|
if (fs.existsSync(tsxPath)) return { path: tsxPath };
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const externalIpaddrPlugin = {
|
||||||
|
name: 'external-ipaddr',
|
||||||
|
setup(build) {
|
||||||
|
build.onResolve({ filter: /^ipaddr\.js$/ }, (args) => {
|
||||||
|
return { path: args.path, external: true };
|
||||||
|
});
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
/** @type {import('esbuild').BuildOptions} */
|
||||||
|
const options = {
|
||||||
|
entryPoints: ['./src/boot/entry.ts'],
|
||||||
|
minify: true,
|
||||||
|
keepNames: true,
|
||||||
|
bundle: true,
|
||||||
|
outdir: './built/boot',
|
||||||
|
target: 'node22',
|
||||||
|
platform: 'node',
|
||||||
|
format: 'esm',
|
||||||
|
sourcemap: 'linked',
|
||||||
|
packages: 'external',
|
||||||
|
banner: {
|
||||||
|
js: 'import { createRequire as topLevelCreateRequire } from "module";' +
|
||||||
|
'import ___url___ from "url";' +
|
||||||
|
'const require = topLevelCreateRequire(import.meta.url);' +
|
||||||
|
'const __filename = ___url___.fileURLToPath(import.meta.url);' +
|
||||||
|
'const __dirname = ___url___.fileURLToPath(new URL(".", import.meta.url));',
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
externalIpaddrPlugin,
|
||||||
|
resolveTsPathsPlugin,
|
||||||
|
swcPlugin({
|
||||||
|
jsc: {
|
||||||
|
parser: {
|
||||||
|
syntax: 'typescript',
|
||||||
|
decorators: true,
|
||||||
|
dynamicImport: true,
|
||||||
|
},
|
||||||
|
transform: {
|
||||||
|
legacyDecorator: true,
|
||||||
|
decoratorMetadata: true,
|
||||||
|
},
|
||||||
|
experimental: {
|
||||||
|
keepImportAssertions: true,
|
||||||
|
},
|
||||||
|
baseUrl: join(_dirname, 'src'),
|
||||||
|
paths: {
|
||||||
|
'@/*': ['*'],
|
||||||
|
},
|
||||||
|
target: 'esnext',
|
||||||
|
keepClassNames: true,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
externalIpaddrPlugin,
|
||||||
|
],
|
||||||
|
// external: [
|
||||||
|
// 'slacc-*',
|
||||||
|
// 'class-transformer',
|
||||||
|
// 'class-validator',
|
||||||
|
// '@sentry/*',
|
||||||
|
// '@nestjs/websockets/socket-module',
|
||||||
|
// '@nestjs/microservices/microservices-module',
|
||||||
|
// '@nestjs/microservices',
|
||||||
|
// '@napi-rs/canvas-win32-x64-msvc',
|
||||||
|
// 'mock-aws-s3',
|
||||||
|
// 'aws-sdk',
|
||||||
|
// 'nock',
|
||||||
|
// 'sharp',
|
||||||
|
// 'jsdom',
|
||||||
|
// 're2',
|
||||||
|
// '@napi-rs/canvas',
|
||||||
|
// ],
|
||||||
|
};
|
||||||
|
|
||||||
|
const args = process.argv.slice(2).map(arg => arg.toLowerCase());
|
||||||
|
|
||||||
|
if (!args.includes('--no-clean')) {
|
||||||
|
fs.rmSync('./built', { recursive: true, force: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
await buildSrc();
|
||||||
|
|
||||||
|
async function buildSrc() {
|
||||||
|
console.log(`[${_package.name}] start building...`);
|
||||||
|
|
||||||
|
await build(options)
|
||||||
|
.then(() => {
|
||||||
|
console.log(`[${_package.name}] build succeeded.`);
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
process.stderr.write(err.stderr || err.message || err);
|
||||||
|
process.exit(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(`[${_package.name}] finish building.`);
|
||||||
|
}
|
||||||
@@ -25,7 +25,6 @@ export default [
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
rules: {
|
rules: {
|
||||||
'@typescript-eslint/no-unused-vars': 'off',
|
|
||||||
'import/order': ['warn', {
|
'import/order': ['warn', {
|
||||||
groups: [
|
groups: [
|
||||||
'builtin',
|
'builtin',
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: syuilo and misskey-project
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
*/
|
||||||
|
|
||||||
|
export class BirthdayIndex1767169026317 {
|
||||||
|
name = 'BirthdayIndex1767169026317'
|
||||||
|
|
||||||
|
async up(queryRunner) {
|
||||||
|
await queryRunner.query(`DROP INDEX "public"."IDX_de22cd2b445eee31ae51cdbe99"`);
|
||||||
|
await queryRunner.query(`CREATE OR REPLACE FUNCTION get_birthday_date(birthday TEXT) RETURNS SMALLINT AS $$ BEGIN RETURN CAST((SUBSTR(birthday, 6, 2) || SUBSTR(birthday, 9, 2)) AS SMALLINT); END; $$ LANGUAGE plpgsql IMMUTABLE;`);
|
||||||
|
await queryRunner.query(`CREATE INDEX "IDX_USERPROFILE_BIRTHDAY_DATE" ON "user_profile" (get_birthday_date("birthday"))`);
|
||||||
|
}
|
||||||
|
|
||||||
|
async down(queryRunner) {
|
||||||
|
await queryRunner.query(`CREATE INDEX "IDX_de22cd2b445eee31ae51cdbe99" ON "user_profile" (substr("birthday", 6, 5))`);
|
||||||
|
await queryRunner.query(`DROP INDEX "public"."IDX_USERPROFILE_BIRTHDAY_DATE"`);
|
||||||
|
await queryRunner.query(`DROP FUNCTION IF EXISTS get_birthday_date(birthday TEXT)`);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import { DataSource } from 'typeorm';
|
import { DataSource } from 'typeorm';
|
||||||
import { loadConfig } from './built/config.js';
|
import { loadConfig } from './src-js/config.js';
|
||||||
import { entities } from './built/postgres.js';
|
import { entities } from './src-js/postgres.js';
|
||||||
|
|
||||||
const isConcurrentIndexMigrationEnabled = process.env.MISSKEY_MIGRATION_CREATE_INDEX_CONCURRENTLY === '1';
|
const isConcurrentIndexMigrationEnabled = process.env.MISSKEY_MIGRATION_CREATE_INDEX_CONCURRENTLY === '1';
|
||||||
|
|
||||||
|
|||||||
@@ -12,17 +12,17 @@
|
|||||||
"start:test": "cross-env NODE_ENV=test pnpm compile-config && cross-env NODE_ENV=test node ./built/boot/entry.js",
|
"start:test": "cross-env NODE_ENV=test pnpm compile-config && cross-env NODE_ENV=test node ./built/boot/entry.js",
|
||||||
"migrate": "pnpm compile-config && pnpm typeorm migration:run -d ormconfig.js",
|
"migrate": "pnpm compile-config && pnpm typeorm migration:run -d ormconfig.js",
|
||||||
"revert": "pnpm compile-config && pnpm typeorm migration:revert -d ormconfig.js",
|
"revert": "pnpm compile-config && pnpm typeorm migration:revert -d ormconfig.js",
|
||||||
"cli": "pnpm compile-config && node ./built/boot/cli.js",
|
"cli": "pnpm compile-config && node ./src-js/boot/cli.js",
|
||||||
"check:connect": "pnpm compile-config && node ./scripts/check_connect.js",
|
"check:connect": "pnpm compile-config && node ./scripts/check_connect.js",
|
||||||
"compile-config": "node ./scripts/compile_config.js",
|
"compile-config": "node ./scripts/compile_config.js",
|
||||||
"build": "swc src -d built -D --strip-leading-paths",
|
"build": "swc src -d src-js -D --strip-leading-paths && node ./build.js",
|
||||||
"build:test": "swc test-server -d built-test -D --config-file test-server/.swcrc --strip-leading-paths",
|
"build:test": "swc test-server -d built-test -D --config-file test-server/.swcrc --strip-leading-paths",
|
||||||
"watch:swc": "swc src -d built -D -w --strip-leading-paths",
|
"watch:swc": "swc src -d built -D -w --strip-leading-paths",
|
||||||
"build:tsc": "tsc -p tsconfig.json && tsc-alias -p tsconfig.json",
|
"build:tsc": "tsgo -p tsconfig.json && tsc-alias -p tsconfig.json",
|
||||||
"watch": "pnpm compile-config && node ./scripts/watch.mjs",
|
"watch": "pnpm compile-config && node ./scripts/watch.mjs",
|
||||||
"restart": "pnpm build && pnpm start",
|
"restart": "pnpm build && pnpm start",
|
||||||
"dev": "pnpm compile-config && node ./scripts/dev.mjs",
|
"dev": "pnpm compile-config && node ./scripts/dev.mjs",
|
||||||
"typecheck": "tsc --noEmit && tsc -p test --noEmit && tsc -p test-federation --noEmit",
|
"typecheck": "tsgo --noEmit && tsgo -p test --noEmit && tsgo -p test-federation --noEmit",
|
||||||
"eslint": "eslint --quiet \"{src,test-federation}/**/*.ts\"",
|
"eslint": "eslint --quiet \"{src,test-federation}/**/*.ts\"",
|
||||||
"lint": "pnpm typecheck && pnpm eslint",
|
"lint": "pnpm typecheck && pnpm eslint",
|
||||||
"jest": "cross-env NODE_ENV=test pnpm compile-config && cross-env NODE_ENV=test node ./jest.js --forceExit --config jest.config.unit.cjs",
|
"jest": "cross-env NODE_ENV=test pnpm compile-config && cross-env NODE_ENV=test node ./jest.js --forceExit --config jest.config.unit.cjs",
|
||||||
@@ -41,20 +41,20 @@
|
|||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"@swc/core-android-arm64": "1.3.11",
|
"@swc/core-android-arm64": "1.3.11",
|
||||||
"@swc/core-darwin-arm64": "1.15.3",
|
"@swc/core-darwin-arm64": "1.15.18",
|
||||||
"@swc/core-darwin-x64": "1.15.3",
|
"@swc/core-darwin-x64": "1.15.18",
|
||||||
"@swc/core-freebsd-x64": "1.3.11",
|
"@swc/core-freebsd-x64": "1.3.11",
|
||||||
"@swc/core-linux-arm-gnueabihf": "1.15.3",
|
"@swc/core-linux-arm-gnueabihf": "1.15.18",
|
||||||
"@swc/core-linux-arm64-gnu": "1.15.3",
|
"@swc/core-linux-arm64-gnu": "1.15.18",
|
||||||
"@swc/core-linux-arm64-musl": "1.15.3",
|
"@swc/core-linux-arm64-musl": "1.15.18",
|
||||||
"@swc/core-linux-x64-gnu": "1.15.3",
|
"@swc/core-linux-x64-gnu": "1.15.18",
|
||||||
"@swc/core-linux-x64-musl": "1.15.3",
|
"@swc/core-linux-x64-musl": "1.15.18",
|
||||||
"@swc/core-win32-arm64-msvc": "1.15.3",
|
"@swc/core-win32-arm64-msvc": "1.15.18",
|
||||||
"@swc/core-win32-ia32-msvc": "1.15.3",
|
"@swc/core-win32-ia32-msvc": "1.15.18",
|
||||||
"@swc/core-win32-x64-msvc": "1.15.3",
|
"@swc/core-win32-x64-msvc": "1.15.18",
|
||||||
"@tensorflow/tfjs": "4.22.0",
|
"@tensorflow/tfjs": "4.22.0",
|
||||||
"@tensorflow/tfjs-node": "4.22.0",
|
"@tensorflow/tfjs-node": "4.22.0",
|
||||||
"bufferutil": "4.0.9",
|
"bufferutil": "4.1.0",
|
||||||
"slacc-android-arm-eabi": "0.0.10",
|
"slacc-android-arm-eabi": "0.0.10",
|
||||||
"slacc-android-arm64": "0.0.10",
|
"slacc-android-arm64": "0.0.10",
|
||||||
"slacc-darwin-arm64": "0.0.10",
|
"slacc-darwin-arm64": "0.0.10",
|
||||||
@@ -68,72 +68,68 @@
|
|||||||
"slacc-linux-x64-musl": "0.0.10",
|
"slacc-linux-x64-musl": "0.0.10",
|
||||||
"slacc-win32-arm64-msvc": "0.0.10",
|
"slacc-win32-arm64-msvc": "0.0.10",
|
||||||
"slacc-win32-x64-msvc": "0.0.10",
|
"slacc-win32-x64-msvc": "0.0.10",
|
||||||
"utf-8-validate": "6.0.5"
|
"utf-8-validate": "6.0.6"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@aws-sdk/client-s3": "3.940.0",
|
"@aws-sdk/client-s3": "3.1008.0",
|
||||||
"@aws-sdk/lib-storage": "3.940.0",
|
"@aws-sdk/lib-storage": "3.1008.0",
|
||||||
"@discordapp/twemoji": "16.0.1",
|
"@discordapp/twemoji": "16.0.1",
|
||||||
"@fastify/accepts": "5.0.3",
|
"@fastify/accepts": "5.0.4",
|
||||||
"@fastify/cookie": "11.0.2",
|
"@fastify/cors": "11.2.0",
|
||||||
"@fastify/cors": "11.1.0",
|
"@fastify/express": "4.0.4",
|
||||||
"@fastify/express": "4.0.2",
|
"@fastify/http-proxy": "11.4.1",
|
||||||
"@fastify/http-proxy": "11.3.0",
|
"@fastify/multipart": "9.4.0",
|
||||||
"@fastify/multipart": "9.3.0",
|
"@fastify/static": "9.0.0",
|
||||||
"@fastify/static": "8.3.0",
|
"@kitajs/html": "4.2.13",
|
||||||
"@kitajs/html": "4.2.11",
|
|
||||||
"@misskey-dev/sharp-read-bmp": "1.2.0",
|
"@misskey-dev/sharp-read-bmp": "1.2.0",
|
||||||
"@misskey-dev/summaly": "5.2.5",
|
"@misskey-dev/summaly": "5.2.5",
|
||||||
"@napi-rs/canvas": "0.1.83",
|
"@napi-rs/canvas": "0.1.96",
|
||||||
"@nestjs/common": "11.1.9",
|
"@nestjs/common": "11.1.16",
|
||||||
"@nestjs/core": "11.1.9",
|
"@nestjs/core": "11.1.16",
|
||||||
"@nestjs/testing": "11.1.9",
|
"@nestjs/testing": "11.1.16",
|
||||||
"@peertube/http-signature": "1.7.0",
|
"@peertube/http-signature": "1.7.0",
|
||||||
"@sentry/node": "10.27.0",
|
"@sentry/node": "10.43.0",
|
||||||
"@sentry/profiling-node": "10.27.0",
|
"@sentry/profiling-node": "10.43.0",
|
||||||
"@simplewebauthn/server": "13.2.2",
|
"@simplewebauthn/server": "13.3.0",
|
||||||
"@sinonjs/fake-timers": "15.0.0",
|
"@sinonjs/fake-timers": "15.1.1",
|
||||||
"@smithy/node-http-handler": "4.4.5",
|
"@smithy/node-http-handler": "4.4.16",
|
||||||
"@swc/cli": "0.7.9",
|
"@swc/cli": "0.8.0",
|
||||||
"@swc/core": "1.15.3",
|
"@swc/core": "1.15.18",
|
||||||
"@twemoji/parser": "16.0.0",
|
"@twemoji/parser": "16.0.0",
|
||||||
"@types/redis-info": "3.0.3",
|
|
||||||
"accepts": "1.3.8",
|
"accepts": "1.3.8",
|
||||||
"ajv": "8.17.1",
|
"ajv": "8.18.0",
|
||||||
"archiver": "7.0.1",
|
"archiver": "7.0.1",
|
||||||
"async-mutex": "0.5.0",
|
"async-mutex": "0.5.0",
|
||||||
"bcryptjs": "3.0.3",
|
"bcryptjs": "3.0.3",
|
||||||
"blurhash": "2.0.5",
|
"blurhash": "2.0.5",
|
||||||
"body-parser": "2.2.1",
|
"body-parser": "2.2.2",
|
||||||
"bullmq": "5.65.0",
|
"bullmq": "5.71.0",
|
||||||
"cacheable-lookup": "7.0.0",
|
"cacheable-lookup": "7.0.0",
|
||||||
"cbor": "10.0.11",
|
|
||||||
"chalk": "5.6.2",
|
"chalk": "5.6.2",
|
||||||
"chalk-template": "1.1.2",
|
"chalk-template": "1.1.2",
|
||||||
"chokidar": "4.0.3",
|
"chokidar": "5.0.0",
|
||||||
"color-convert": "3.1.3",
|
"color-convert": "3.1.3",
|
||||||
"content-disposition": "1.0.1",
|
"content-disposition": "1.0.1",
|
||||||
"date-fns": "4.1.0",
|
"date-fns": "4.1.0",
|
||||||
"deep-email-validator": "0.1.21",
|
"deep-email-validator": "0.1.21",
|
||||||
"fastify": "5.6.2",
|
"fastify": "5.8.2",
|
||||||
"fastify-raw-body": "5.0.0",
|
"fastify-raw-body": "5.0.0",
|
||||||
"feed": "5.1.0",
|
"feed": "5.2.0",
|
||||||
"file-type": "21.1.1",
|
"file-type": "21.3.2",
|
||||||
"fluent-ffmpeg": "2.1.3",
|
"fluent-ffmpeg": "2.1.3",
|
||||||
"form-data": "4.0.5",
|
"form-data": "4.0.5",
|
||||||
"got": "14.6.5",
|
"got": "14.6.6",
|
||||||
"hpagent": "1.2.0",
|
"hpagent": "1.2.0",
|
||||||
"http-link-header": "1.1.3",
|
"http-link-header": "1.1.3",
|
||||||
"i18n": "workspace:*",
|
"i18n": "workspace:*",
|
||||||
"ioredis": "5.8.2",
|
"ioredis": "5.10.0",
|
||||||
"ip-cidr": "4.0.2",
|
"ip-cidr": "4.0.2",
|
||||||
"ipaddr.js": "2.3.0",
|
"ipaddr.js": "2.3.0",
|
||||||
"is-svg": "6.1.0",
|
"is-svg": "6.1.0",
|
||||||
"json5": "2.2.3",
|
"json5": "2.2.3",
|
||||||
"jsonld": "9.0.0",
|
"jsonld": "9.0.0",
|
||||||
"jsrsasign": "11.1.0",
|
"juice": "11.1.1",
|
||||||
"juice": "11.0.3",
|
"meilisearch": "0.55.0",
|
||||||
"meilisearch": "0.54.0",
|
|
||||||
"mfm-js": "0.25.0",
|
"mfm-js": "0.25.0",
|
||||||
"mime-types": "3.0.2",
|
"mime-types": "3.0.2",
|
||||||
"misskey-js": "workspace:*",
|
"misskey-js": "workspace:*",
|
||||||
@@ -142,52 +138,48 @@
|
|||||||
"nanoid": "5.1.6",
|
"nanoid": "5.1.6",
|
||||||
"nested-property": "4.0.0",
|
"nested-property": "4.0.0",
|
||||||
"node-fetch": "3.3.2",
|
"node-fetch": "3.3.2",
|
||||||
"node-html-parser": "7.0.1",
|
"node-html-parser": "7.1.0",
|
||||||
"nodemailer": "7.0.11",
|
"nodemailer": "8.0.2",
|
||||||
"nsfwjs": "4.2.0",
|
"nsfwjs": "4.2.0",
|
||||||
"oauth": "0.10.2",
|
|
||||||
"oauth2orize": "1.12.0",
|
"oauth2orize": "1.12.0",
|
||||||
"oauth2orize-pkce": "0.1.2",
|
"oauth2orize-pkce": "0.1.2",
|
||||||
"os-utils": "0.0.14",
|
"os-utils": "0.0.14",
|
||||||
"otpauth": "9.4.1",
|
"otpauth": "9.5.0",
|
||||||
"pg": "8.16.3",
|
"pg": "8.20.0",
|
||||||
"pkce-challenge": "5.0.1",
|
"pkce-challenge": "6.0.0",
|
||||||
"probe-image-size": "7.2.3",
|
"probe-image-size": "7.2.3",
|
||||||
"promise-limit": "2.7.0",
|
"promise-limit": "2.7.0",
|
||||||
"qrcode": "1.5.4",
|
"qrcode": "1.5.4",
|
||||||
"random-seed": "0.3.0",
|
"random-seed": "0.3.0",
|
||||||
"ratelimiter": "3.4.1",
|
"ratelimiter": "3.4.1",
|
||||||
"re2": "1.22.3",
|
"re2": "1.23.3",
|
||||||
"redis-info": "3.1.0",
|
|
||||||
"reflect-metadata": "0.2.2",
|
"reflect-metadata": "0.2.2",
|
||||||
"rename": "1.0.4",
|
"rename": "1.0.4",
|
||||||
"rss-parser": "3.13.0",
|
"rss-parser": "3.13.0",
|
||||||
"rxjs": "7.8.2",
|
"rxjs": "7.8.2",
|
||||||
"sanitize-html": "2.17.0",
|
"sanitize-html": "2.17.1",
|
||||||
"secure-json-parse": "4.1.0",
|
"secure-json-parse": "4.1.0",
|
||||||
"semver": "7.7.3",
|
"semver": "7.7.4",
|
||||||
"sharp": "0.33.5",
|
"sharp": "0.33.5",
|
||||||
"slacc": "0.0.10",
|
"slacc": "0.0.10",
|
||||||
"strict-event-emitter-types": "2.0.0",
|
"strict-event-emitter-types": "2.0.0",
|
||||||
"stringz": "2.1.0",
|
"stringz": "2.1.0",
|
||||||
"systeminformation": "5.27.11",
|
"systeminformation": "5.31.4",
|
||||||
"tinycolor2": "1.6.0",
|
"tinycolor2": "1.6.0",
|
||||||
"tmp": "0.2.5",
|
"tmp": "0.2.5",
|
||||||
"tsc-alias": "1.8.16",
|
"tsc-alias": "1.8.16",
|
||||||
"tsconfig-paths": "4.2.0",
|
"typeorm": "0.3.28",
|
||||||
"typeorm": "0.3.27",
|
"ulid": "3.0.2",
|
||||||
"typescript": "5.9.3",
|
|
||||||
"ulid": "3.0.1",
|
|
||||||
"vary": "1.1.2",
|
"vary": "1.1.2",
|
||||||
"web-push": "3.6.7",
|
"web-push": "3.6.7",
|
||||||
"ws": "8.18.3",
|
"ws": "8.19.0",
|
||||||
"xev": "3.0.2"
|
"xev": "3.0.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@jest/globals": "29.7.0",
|
"@jest/globals": "29.7.0",
|
||||||
"@kitajs/ts-html-plugin": "4.1.3",
|
"@kitajs/ts-html-plugin": "4.1.4",
|
||||||
"@nestjs/platform-express": "11.1.9",
|
"@nestjs/platform-express": "11.1.16",
|
||||||
"@sentry/vue": "10.27.0",
|
"@sentry/vue": "10.43.0",
|
||||||
"@simplewebauthn/types": "12.0.0",
|
"@simplewebauthn/types": "12.0.0",
|
||||||
"@swc/jest": "0.2.39",
|
"@swc/jest": "0.2.39",
|
||||||
"@types/accepts": "1.3.7",
|
"@types/accepts": "1.3.7",
|
||||||
@@ -199,22 +191,20 @@
|
|||||||
"@types/http-link-header": "1.0.7",
|
"@types/http-link-header": "1.0.7",
|
||||||
"@types/jest": "29.5.14",
|
"@types/jest": "29.5.14",
|
||||||
"@types/jsonld": "1.5.15",
|
"@types/jsonld": "1.5.15",
|
||||||
"@types/jsrsasign": "10.5.15",
|
|
||||||
"@types/mime-types": "3.0.1",
|
"@types/mime-types": "3.0.1",
|
||||||
"@types/ms": "2.1.0",
|
"@types/ms": "2.1.0",
|
||||||
"@types/node": "24.10.1",
|
"@types/node": "24.12.0",
|
||||||
"@types/nodemailer": "7.0.4",
|
"@types/nodemailer": "7.0.11",
|
||||||
"@types/oauth": "0.9.6",
|
|
||||||
"@types/oauth2orize": "1.11.5",
|
"@types/oauth2orize": "1.11.5",
|
||||||
"@types/oauth2orize-pkce": "0.1.2",
|
"@types/oauth2orize-pkce": "0.1.2",
|
||||||
"@types/pg": "8.15.6",
|
"@types/pg": "8.18.0",
|
||||||
"@types/qrcode": "1.5.6",
|
"@types/qrcode": "1.5.6",
|
||||||
"@types/random-seed": "0.3.5",
|
"@types/random-seed": "0.3.5",
|
||||||
"@types/ratelimiter": "3.4.6",
|
"@types/ratelimiter": "3.4.6",
|
||||||
"@types/rename": "1.0.7",
|
"@types/rename": "1.0.7",
|
||||||
"@types/sanitize-html": "2.16.0",
|
"@types/sanitize-html": "2.16.1",
|
||||||
"@types/semver": "7.7.1",
|
"@types/semver": "7.7.1",
|
||||||
"@types/simple-oauth2": "5.0.7",
|
"@types/simple-oauth2": "5.0.8",
|
||||||
"@types/sinonjs__fake-timers": "15.0.1",
|
"@types/sinonjs__fake-timers": "15.0.1",
|
||||||
"@types/supertest": "6.0.3",
|
"@types/supertest": "6.0.3",
|
||||||
"@types/tinycolor2": "1.4.6",
|
"@types/tinycolor2": "1.4.6",
|
||||||
@@ -222,21 +212,22 @@
|
|||||||
"@types/vary": "1.1.3",
|
"@types/vary": "1.1.3",
|
||||||
"@types/web-push": "3.6.4",
|
"@types/web-push": "3.6.4",
|
||||||
"@types/ws": "8.18.1",
|
"@types/ws": "8.18.1",
|
||||||
"@typescript-eslint/eslint-plugin": "8.48.0",
|
"@typescript-eslint/eslint-plugin": "8.57.0",
|
||||||
"@typescript-eslint/parser": "8.48.0",
|
"@typescript-eslint/parser": "8.57.0",
|
||||||
"aws-sdk-client-mock": "4.1.0",
|
"aws-sdk-client-mock": "4.1.0",
|
||||||
|
"cbor": "10.0.12",
|
||||||
"cross-env": "10.1.0",
|
"cross-env": "10.1.0",
|
||||||
|
"esbuild-plugin-swc": "1.0.1",
|
||||||
"eslint-plugin-import": "2.32.0",
|
"eslint-plugin-import": "2.32.0",
|
||||||
"execa": "9.6.0",
|
"execa": "9.6.1",
|
||||||
"fkill": "10.0.1",
|
"fkill": "10.0.3",
|
||||||
"jest": "29.7.0",
|
"jest": "29.7.0",
|
||||||
"jest-mock": "29.7.0",
|
"jest-mock": "29.7.0",
|
||||||
"jest-util": "29.7.0",
|
|
||||||
"js-yaml": "4.1.1",
|
"js-yaml": "4.1.1",
|
||||||
"nodemon": "3.1.11",
|
"nodemon": "3.1.14",
|
||||||
"pid-port": "2.0.0",
|
"pid-port": "2.0.1",
|
||||||
"simple-oauth2": "5.1.0",
|
"simple-oauth2": "5.1.0",
|
||||||
"supertest": "7.1.4",
|
"supertest": "7.2.2",
|
||||||
"vite": "7.2.4"
|
"vite": "7.3.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,8 +4,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import Redis from 'ioredis';
|
import Redis from 'ioredis';
|
||||||
import { loadConfig } from '../built/config.js';
|
import { loadConfig } from '../src-js/config.js';
|
||||||
import { createPostgresDataSource } from '../built/postgres.js';
|
import { createPostgresDataSource } from '../src-js/postgres.js';
|
||||||
|
|
||||||
const config = loadConfig();
|
const config = loadConfig();
|
||||||
|
|
||||||
@@ -16,26 +16,22 @@ async function connectToPostgres() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function connectToRedis(redisOptions) {
|
async function connectToRedis(redisOptions) {
|
||||||
return await new Promise(async (resolve, reject) => {
|
let redis;
|
||||||
const redis = new Redis({
|
try {
|
||||||
|
redis = new Redis({
|
||||||
...redisOptions,
|
...redisOptions,
|
||||||
lazyConnect: true,
|
lazyConnect: true,
|
||||||
reconnectOnError: false,
|
reconnectOnError: false,
|
||||||
showFriendlyErrorStack: true,
|
showFriendlyErrorStack: true,
|
||||||
});
|
});
|
||||||
redis.on('error', e => reject(e));
|
|
||||||
|
|
||||||
try {
|
|
||||||
await redis.connect();
|
|
||||||
resolve();
|
|
||||||
|
|
||||||
} catch (e) {
|
|
||||||
reject(e);
|
|
||||||
|
|
||||||
|
await Promise.race([
|
||||||
|
new Promise((_, reject) => redis.on('error', e => reject(e))),
|
||||||
|
redis.connect(),
|
||||||
|
]);
|
||||||
} finally {
|
} finally {
|
||||||
redis.disconnect(false);
|
redis.disconnect(false);
|
||||||
}
|
}
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// If not all of these are defined, the default one gets reused.
|
// If not all of these are defined, the default one gets reused.
|
||||||
@@ -50,7 +46,7 @@ const promises = Array
|
|||||||
]))
|
]))
|
||||||
.map(connectToRedis)
|
.map(connectToRedis)
|
||||||
.concat([
|
.concat([
|
||||||
connectToPostgres()
|
connectToPostgres(),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
await Promise.all(promises);
|
await Promise.all(promises);
|
||||||
|
|||||||
@@ -3,8 +3,8 @@
|
|||||||
* SPDX-License-Identifier: AGPL-3.0-only
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { writeFileSync, existsSync } from 'node:fs';
|
||||||
import { execa } from 'execa';
|
import { execa } from 'execa';
|
||||||
import { writeFileSync, existsSync } from "node:fs";
|
|
||||||
|
|
||||||
async function main() {
|
async function main() {
|
||||||
if (!process.argv.includes('--no-build')) {
|
if (!process.argv.includes('--no-build')) {
|
||||||
@@ -19,10 +19,10 @@ async function main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** @type {import('../src/config.js')} */
|
/** @type {import('../src/config.js')} */
|
||||||
const { loadConfig } = await import('../built/config.js');
|
const { loadConfig } = await import('../src-js/config.js');
|
||||||
|
|
||||||
/** @type {import('../src/server/api/openapi/gen-spec.js')} */
|
/** @type {import('../src/server/api/openapi/gen-spec.js')} */
|
||||||
const { genOpenapiSpec } = await import('../built/server/api/openapi/gen-spec.js');
|
const { genOpenapiSpec } = await import('../src-js/server/api/openapi/gen-spec.js');
|
||||||
|
|
||||||
const config = loadConfig();
|
const config = loadConfig();
|
||||||
const spec = genOpenapiSpec(config, true);
|
const spec = genOpenapiSpec(config, true);
|
||||||
|
|||||||
@@ -14,24 +14,56 @@ import { fork } from 'node:child_process';
|
|||||||
import { setTimeout } from 'node:timers/promises';
|
import { setTimeout } from 'node:timers/promises';
|
||||||
import { fileURLToPath } from 'node:url';
|
import { fileURLToPath } from 'node:url';
|
||||||
import { dirname, join } from 'node:path';
|
import { dirname, join } from 'node:path';
|
||||||
|
import * as http from 'node:http';
|
||||||
|
import * as fs from 'node:fs/promises';
|
||||||
|
|
||||||
const __filename = fileURLToPath(import.meta.url);
|
const __filename = fileURLToPath(import.meta.url);
|
||||||
const __dirname = dirname(__filename);
|
const __dirname = dirname(__filename);
|
||||||
|
|
||||||
|
const SAMPLE_COUNT = 3; // Number of samples to measure
|
||||||
const STARTUP_TIMEOUT = 120000; // 120 seconds timeout for server startup
|
const STARTUP_TIMEOUT = 120000; // 120 seconds timeout for server startup
|
||||||
const MEMORY_SETTLE_TIME = 10000; // Wait 10 seconds after startup for memory to settle
|
const MEMORY_SETTLE_TIME = 10000; // Wait 10 seconds after startup for memory to settle
|
||||||
|
|
||||||
async function measureMemory() {
|
const keys = {
|
||||||
const startTime = Date.now();
|
VmPeak: 0,
|
||||||
|
VmSize: 0,
|
||||||
|
VmHWM: 0,
|
||||||
|
VmRSS: 0,
|
||||||
|
VmData: 0,
|
||||||
|
VmStk: 0,
|
||||||
|
VmExe: 0,
|
||||||
|
VmLib: 0,
|
||||||
|
VmPTE: 0,
|
||||||
|
VmSwap: 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
async function getMemoryUsage(pid) {
|
||||||
|
const status = await fs.readFile(`/proc/${pid}/status`, 'utf-8');
|
||||||
|
|
||||||
|
const result = {};
|
||||||
|
for (const key of Object.keys(keys)) {
|
||||||
|
const match = status.match(new RegExp(`${key}:\\s+(\\d+)\\s+kB`));
|
||||||
|
if (match) {
|
||||||
|
result[key] = parseInt(match[1], 10);
|
||||||
|
} else {
|
||||||
|
throw new Error(`Failed to parse ${key} from /proc/${pid}/status`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function measureMemory() {
|
||||||
// Start the Misskey backend server using fork to enable IPC
|
// Start the Misskey backend server using fork to enable IPC
|
||||||
const serverProcess = fork(join(__dirname, '../built/boot/entry.js'), [], {
|
const serverProcess = fork(join(__dirname, '../built/boot/entry.js'), ['expose-gc'], {
|
||||||
cwd: join(__dirname, '..'),
|
cwd: join(__dirname, '..'),
|
||||||
env: {
|
env: {
|
||||||
...process.env,
|
...process.env,
|
||||||
NODE_ENV: 'test',
|
NODE_ENV: 'production',
|
||||||
|
MK_DISABLE_CLUSTERING: '1',
|
||||||
},
|
},
|
||||||
stdio: ['pipe', 'pipe', 'pipe', 'ipc'],
|
stdio: ['pipe', 'pipe', 'pipe', 'ipc'],
|
||||||
|
execArgv: [...process.execArgv, '--expose-gc'],
|
||||||
});
|
});
|
||||||
|
|
||||||
let serverReady = false;
|
let serverReady = false;
|
||||||
@@ -57,6 +89,40 @@ async function measureMemory() {
|
|||||||
process.stderr.write(`[server error] ${err}\n`);
|
process.stderr.write(`[server error] ${err}\n`);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
async function triggerGc() {
|
||||||
|
const ok = new Promise((resolve) => {
|
||||||
|
serverProcess.once('message', (message) => {
|
||||||
|
if (message === 'gc ok') resolve();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
serverProcess.send('gc');
|
||||||
|
|
||||||
|
await ok;
|
||||||
|
|
||||||
|
await setTimeout(1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
function createRequest() {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
const req = http.request({
|
||||||
|
host: 'localhost',
|
||||||
|
port: 61812,
|
||||||
|
path: '/api/meta',
|
||||||
|
method: 'POST',
|
||||||
|
}, (res) => {
|
||||||
|
res.on('data', () => { });
|
||||||
|
res.on('end', () => {
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
req.on('error', (err) => {
|
||||||
|
reject(err);
|
||||||
|
});
|
||||||
|
req.end();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Wait for server to be ready or timeout
|
// Wait for server to be ready or timeout
|
||||||
const startupStartTime = Date.now();
|
const startupStartTime = Date.now();
|
||||||
while (!serverReady) {
|
while (!serverReady) {
|
||||||
@@ -73,46 +139,23 @@ async function measureMemory() {
|
|||||||
// Wait for memory to settle
|
// Wait for memory to settle
|
||||||
await setTimeout(MEMORY_SETTLE_TIME);
|
await setTimeout(MEMORY_SETTLE_TIME);
|
||||||
|
|
||||||
// Get memory usage from the server process via /proc
|
|
||||||
const pid = serverProcess.pid;
|
const pid = serverProcess.pid;
|
||||||
let memoryInfo;
|
|
||||||
|
|
||||||
try {
|
const beforeGc = await getMemoryUsage(pid);
|
||||||
const fs = await import('node:fs/promises');
|
|
||||||
|
|
||||||
// Read /proc/[pid]/status for detailed memory info
|
await triggerGc();
|
||||||
const status = await fs.readFile(`/proc/${pid}/status`, 'utf-8');
|
|
||||||
const vmRssMatch = status.match(/VmRSS:\s+(\d+)\s+kB/);
|
|
||||||
const vmDataMatch = status.match(/VmData:\s+(\d+)\s+kB/);
|
|
||||||
const vmSizeMatch = status.match(/VmSize:\s+(\d+)\s+kB/);
|
|
||||||
|
|
||||||
memoryInfo = {
|
const afterGc = await getMemoryUsage(pid);
|
||||||
rss: vmRssMatch ? parseInt(vmRssMatch[1], 10) * 1024 : null,
|
|
||||||
heapUsed: vmDataMatch ? parseInt(vmDataMatch[1], 10) * 1024 : null,
|
|
||||||
vmSize: vmSizeMatch ? parseInt(vmSizeMatch[1], 10) * 1024 : null,
|
|
||||||
};
|
|
||||||
} catch (err) {
|
|
||||||
// Fallback: use ps command
|
|
||||||
process.stderr.write(`Warning: Could not read /proc/${pid}/status: ${err}\n`);
|
|
||||||
|
|
||||||
const { execSync } = await import('node:child_process');
|
// create some http requests to simulate load
|
||||||
try {
|
const REQUEST_COUNT = 10;
|
||||||
const ps = execSync(`ps -o rss= -p ${pid}`, { encoding: 'utf-8' });
|
await Promise.all(
|
||||||
const rssKb = parseInt(ps.trim(), 10);
|
Array.from({ length: REQUEST_COUNT }).map(() => createRequest()),
|
||||||
memoryInfo = {
|
);
|
||||||
rss: rssKb * 1024,
|
|
||||||
heapUsed: null,
|
await triggerGc();
|
||||||
vmSize: null,
|
|
||||||
};
|
const afterRequest = await getMemoryUsage(pid);
|
||||||
} catch {
|
|
||||||
memoryInfo = {
|
|
||||||
rss: null,
|
|
||||||
heapUsed: null,
|
|
||||||
vmSize: null,
|
|
||||||
error: 'Could not measure memory',
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Stop the server
|
// Stop the server
|
||||||
serverProcess.kill('SIGTERM');
|
serverProcess.kill('SIGTERM');
|
||||||
@@ -135,15 +178,51 @@ async function measureMemory() {
|
|||||||
|
|
||||||
const result = {
|
const result = {
|
||||||
timestamp: new Date().toISOString(),
|
timestamp: new Date().toISOString(),
|
||||||
startupTimeMs: startupTime,
|
beforeGc,
|
||||||
memory: memoryInfo,
|
afterGc,
|
||||||
|
afterRequest,
|
||||||
|
};
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function main() {
|
||||||
|
// 直列の方が時間的に分散されて正確そうだから直列でやる
|
||||||
|
const results = [];
|
||||||
|
for (let i = 0; i < SAMPLE_COUNT; i++) {
|
||||||
|
const res = await measureMemory();
|
||||||
|
results.push(res);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calculate averages
|
||||||
|
const beforeGc = structuredClone(keys);
|
||||||
|
const afterGc = structuredClone(keys);
|
||||||
|
const afterRequest = structuredClone(keys);
|
||||||
|
for (const res of results) {
|
||||||
|
for (const key of Object.keys(keys)) {
|
||||||
|
beforeGc[key] += res.beforeGc[key];
|
||||||
|
afterGc[key] += res.afterGc[key];
|
||||||
|
afterRequest[key] += res.afterRequest[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (const key of Object.keys(keys)) {
|
||||||
|
beforeGc[key] = Math.round(beforeGc[key] / SAMPLE_COUNT);
|
||||||
|
afterGc[key] = Math.round(afterGc[key] / SAMPLE_COUNT);
|
||||||
|
afterRequest[key] = Math.round(afterRequest[key] / SAMPLE_COUNT);
|
||||||
|
}
|
||||||
|
|
||||||
|
const result = {
|
||||||
|
timestamp: new Date().toISOString(),
|
||||||
|
beforeGc,
|
||||||
|
afterGc,
|
||||||
|
afterRequest,
|
||||||
};
|
};
|
||||||
|
|
||||||
// Output as JSON to stdout
|
// Output as JSON to stdout
|
||||||
console.log(JSON.stringify(result, null, 2));
|
console.log(JSON.stringify(result, null, 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
measureMemory().catch((err) => {
|
main().catch((err) => {
|
||||||
console.error(JSON.stringify({
|
console.error(JSON.stringify({
|
||||||
error: err.message,
|
error: err.message,
|
||||||
timestamp: new Date().toISOString(),
|
timestamp: new Date().toISOString(),
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ import { execa } from 'execa';
|
|||||||
});
|
});
|
||||||
}, 3000);
|
}, 3000);
|
||||||
|
|
||||||
execa('tsc', ['-w', '-p', 'tsconfig.json'], {
|
execa('tsgo', ['-w', '-p', 'tsconfig.json'], {
|
||||||
stdout: process.stdout,
|
stdout: process.stdout,
|
||||||
stderr: process.stderr,
|
stderr: process.stderr,
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -86,6 +86,18 @@ if (!envOption.disableClustering) {
|
|||||||
ev.mount();
|
ev.mount();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
process.on('message', msg => {
|
||||||
|
if (msg === 'gc') {
|
||||||
|
if (global.gc != null) {
|
||||||
|
logger.info('Manual GC triggered');
|
||||||
|
global.gc();
|
||||||
|
if (process.send != null) process.send('gc ok');
|
||||||
|
} else {
|
||||||
|
logger.warn('Manual GC requested but gc is not available. Start the process with --expose-gc to enable this feature.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
readyRef.value = true;
|
readyRef.value = true;
|
||||||
|
|
||||||
// ユニットテスト時にMisskeyが子プロセスで起動された時のため
|
// ユニットテスト時にMisskeyが子プロセスで起動された時のため
|
||||||
|
|||||||
@@ -4,8 +4,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import * as fs from 'node:fs';
|
import * as fs from 'node:fs';
|
||||||
import { fileURLToPath } from 'node:url';
|
|
||||||
import { dirname } from 'node:path';
|
|
||||||
import * as os from 'node:os';
|
import * as os from 'node:os';
|
||||||
import cluster from 'node:cluster';
|
import cluster from 'node:cluster';
|
||||||
import chalk from 'chalk';
|
import chalk from 'chalk';
|
||||||
@@ -17,20 +15,15 @@ import { showMachineInfo } from '@/misc/show-machine-info.js';
|
|||||||
import { envOption } from '@/env.js';
|
import { envOption } from '@/env.js';
|
||||||
import { jobQueue, server } from './common.js';
|
import { jobQueue, server } from './common.js';
|
||||||
|
|
||||||
const _filename = fileURLToPath(import.meta.url);
|
|
||||||
const _dirname = dirname(_filename);
|
|
||||||
|
|
||||||
const meta = JSON.parse(fs.readFileSync(`${_dirname}/../../../../built/meta.json`, 'utf-8'));
|
|
||||||
|
|
||||||
const logger = new Logger('core', 'cyan');
|
const logger = new Logger('core', 'cyan');
|
||||||
const bootLogger = logger.createSubLogger('boot', 'magenta');
|
const bootLogger = logger.createSubLogger('boot', 'magenta');
|
||||||
|
|
||||||
const themeColor = chalk.hex('#86b300');
|
const themeColor = chalk.hex('#86b300');
|
||||||
|
|
||||||
function greet() {
|
function greet(props: { version: string }) {
|
||||||
if (!envOption.quiet) {
|
if (!envOption.quiet) {
|
||||||
//#region Misskey logo
|
//#region Misskey logo
|
||||||
const v = `v${meta.version}`;
|
const v = `v${props.version}`;
|
||||||
console.log(themeColor(' _____ _ _ '));
|
console.log(themeColor(' _____ _ _ '));
|
||||||
console.log(themeColor(' | |_|___ ___| |_ ___ _ _ '));
|
console.log(themeColor(' | |_|___ ___| |_ ___ _ _ '));
|
||||||
console.log(themeColor(' | | | | |_ -|_ -| \'_| -_| | |'));
|
console.log(themeColor(' | | | | |_ -|_ -| \'_| -_| | |'));
|
||||||
@@ -46,7 +39,7 @@ function greet() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bootLogger.info('Welcome to Misskey!');
|
bootLogger.info('Welcome to Misskey!');
|
||||||
bootLogger.info(`Misskey v${meta.version}`, null, true);
|
bootLogger.info(`Misskey v${props.version}`, null, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -57,15 +50,15 @@ export async function masterMain() {
|
|||||||
|
|
||||||
// initialize app
|
// initialize app
|
||||||
try {
|
try {
|
||||||
greet();
|
config = loadConfigBoot();
|
||||||
|
greet({ version: config.version });
|
||||||
showEnvironment();
|
showEnvironment();
|
||||||
await showMachineInfo(bootLogger);
|
await showMachineInfo(bootLogger);
|
||||||
showNodejsVersion();
|
showNodejsVersion();
|
||||||
config = loadConfigBoot();
|
|
||||||
//await connectDb();
|
//await connectDb();
|
||||||
if (config.pidFile) fs.writeFileSync(config.pidFile, process.pid.toString());
|
if (config.pidFile) fs.writeFileSync(config.pidFile, process.pid.toString());
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
bootLogger.error('Fatal error occurred during initialization', null, true);
|
bootLogger.error('Fatal error occurred during initialization: ' + e, null, true);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ import { type FastifyServerOptions } from 'fastify';
|
|||||||
import type * as Sentry from '@sentry/node';
|
import type * as Sentry from '@sentry/node';
|
||||||
import type * as SentryVue from '@sentry/vue';
|
import type * as SentryVue from '@sentry/vue';
|
||||||
import type { RedisOptions } from 'ioredis';
|
import type { RedisOptions } from 'ioredis';
|
||||||
import type { ManifestChunk } from 'vite';
|
|
||||||
|
|
||||||
type RedisOptionsSource = Partial<RedisOptions> & {
|
type RedisOptionsSource = Partial<RedisOptions> & {
|
||||||
host: string;
|
host: string;
|
||||||
@@ -30,6 +29,7 @@ type Source = {
|
|||||||
socket?: string;
|
socket?: string;
|
||||||
trustProxy?: FastifyServerOptions['trustProxy'];
|
trustProxy?: FastifyServerOptions['trustProxy'];
|
||||||
chmodSocket?: string;
|
chmodSocket?: string;
|
||||||
|
enableIpRateLimit?: boolean;
|
||||||
disableHsts?: boolean;
|
disableHsts?: boolean;
|
||||||
db: {
|
db: {
|
||||||
host: string;
|
host: string;
|
||||||
@@ -120,8 +120,9 @@ export type Config = {
|
|||||||
url: string;
|
url: string;
|
||||||
port: number;
|
port: number;
|
||||||
socket: string | undefined;
|
socket: string | undefined;
|
||||||
trustProxy: FastifyServerOptions['trustProxy'];
|
trustProxy: NonNullable<FastifyServerOptions['trustProxy']>;
|
||||||
chmodSocket: string | undefined;
|
chmodSocket: string | undefined;
|
||||||
|
enableIpRateLimit: boolean;
|
||||||
disableHsts: boolean | undefined;
|
disableHsts: boolean | undefined;
|
||||||
db: {
|
db: {
|
||||||
host: string;
|
host: string;
|
||||||
@@ -187,9 +188,7 @@ export type Config = {
|
|||||||
authUrl: string;
|
authUrl: string;
|
||||||
driveUrl: string;
|
driveUrl: string;
|
||||||
userAgent: string;
|
userAgent: string;
|
||||||
frontendEntry: ManifestChunk;
|
|
||||||
frontendManifestExists: boolean;
|
frontendManifestExists: boolean;
|
||||||
frontendEmbedEntry: ManifestChunk;
|
|
||||||
frontendEmbedManifestExists: boolean;
|
frontendEmbedManifestExists: boolean;
|
||||||
mediaProxy: string;
|
mediaProxy: string;
|
||||||
externalMediaProxyEnabled: boolean;
|
externalMediaProxyEnabled: boolean;
|
||||||
@@ -217,25 +216,37 @@ export type FulltextSearchProvider = 'sqlLike' | 'sqlPgroonga' | 'meilisearch';
|
|||||||
const _filename = fileURLToPath(import.meta.url);
|
const _filename = fileURLToPath(import.meta.url);
|
||||||
const _dirname = dirname(_filename);
|
const _dirname = dirname(_filename);
|
||||||
|
|
||||||
const compiledConfigFilePathForTest = resolve(_dirname, '../../../built/._config_.json');
|
/** Path of repository root directory */
|
||||||
|
let rootDir = _dirname;
|
||||||
|
// 見つかるまで上に遡る
|
||||||
|
while (!fs.existsSync(resolve(rootDir, 'packages'))) {
|
||||||
|
const parentDir = dirname(rootDir);
|
||||||
|
if (parentDir === rootDir) {
|
||||||
|
throw new Error('Cannot find root directory');
|
||||||
|
}
|
||||||
|
rootDir = parentDir;
|
||||||
|
}
|
||||||
|
|
||||||
export const compiledConfigFilePath = fs.existsSync(compiledConfigFilePathForTest) ? compiledConfigFilePathForTest : resolve(_dirname, '../../../built/.config.json');
|
/** Path of configuration directory */
|
||||||
|
const configDir = resolve(rootDir, '.config');
|
||||||
|
/** Path of built directory */
|
||||||
|
const projectBuiltDir = resolve(rootDir, 'built');
|
||||||
|
|
||||||
|
const compiledConfigFilePathForTest = resolve(projectBuiltDir, '._config_.json');
|
||||||
|
|
||||||
|
export const compiledConfigFilePath = fs.existsSync(compiledConfigFilePathForTest)
|
||||||
|
? compiledConfigFilePathForTest
|
||||||
|
: resolve(projectBuiltDir, '.config.json');
|
||||||
|
|
||||||
export function loadConfig(): Config {
|
export function loadConfig(): Config {
|
||||||
if (!fs.existsSync(compiledConfigFilePath)) {
|
if (!fs.existsSync(compiledConfigFilePath)) {
|
||||||
throw new Error('Compiled configuration file not found. Try running \'pnpm compile-config\'.');
|
throw new Error('Compiled configuration file not found. Try running \'pnpm compile-config\'.');
|
||||||
}
|
}
|
||||||
|
|
||||||
const meta = JSON.parse(fs.readFileSync(`${_dirname}/../../../built/meta.json`, 'utf-8'));
|
const meta = JSON.parse(fs.readFileSync(resolve(projectBuiltDir, 'meta.json'), 'utf-8'));
|
||||||
|
|
||||||
const frontendManifestExists = fs.existsSync(_dirname + '/../../../built/_frontend_vite_/manifest.json');
|
const frontendManifestExists = fs.existsSync(resolve(projectBuiltDir, '_frontend_vite_/manifest.json'));
|
||||||
const frontendEmbedManifestExists = fs.existsSync(_dirname + '/../../../built/_frontend_embed_vite_/manifest.json');
|
const frontendEmbedManifestExists = fs.existsSync(resolve(projectBuiltDir, '_frontend_embed_vite_/manifest.json'));
|
||||||
const frontendManifest = frontendManifestExists ?
|
|
||||||
JSON.parse(fs.readFileSync(`${_dirname}/../../../built/_frontend_vite_/manifest.json`, 'utf-8'))
|
|
||||||
: { 'src/_boot_.ts': { file: null } };
|
|
||||||
const frontendEmbedManifest = frontendEmbedManifestExists ?
|
|
||||||
JSON.parse(fs.readFileSync(`${_dirname}/../../../built/_frontend_embed_vite_/manifest.json`, 'utf-8'))
|
|
||||||
: { 'src/boot.ts': { file: null } };
|
|
||||||
|
|
||||||
const config = JSON.parse(fs.readFileSync(compiledConfigFilePath, 'utf-8')) as Source;
|
const config = JSON.parse(fs.readFileSync(compiledConfigFilePath, 'utf-8')) as Source;
|
||||||
|
|
||||||
@@ -263,9 +274,17 @@ export function loadConfig(): Config {
|
|||||||
url: url.origin,
|
url: url.origin,
|
||||||
port: config.port ?? parseInt(process.env.PORT ?? '', 10),
|
port: config.port ?? parseInt(process.env.PORT ?? '', 10),
|
||||||
socket: config.socket,
|
socket: config.socket,
|
||||||
trustProxy: config.trustProxy,
|
trustProxy: config.trustProxy ?? [
|
||||||
|
'10.0.0.0/8',
|
||||||
|
'172.16.0.0/12',
|
||||||
|
'192.168.0.0/16',
|
||||||
|
'127.0.0.1/32',
|
||||||
|
'::1/128',
|
||||||
|
'fc00::/7',
|
||||||
|
],
|
||||||
chmodSocket: config.chmodSocket,
|
chmodSocket: config.chmodSocket,
|
||||||
disableHsts: config.disableHsts,
|
disableHsts: config.disableHsts,
|
||||||
|
enableIpRateLimit: config.enableIpRateLimit ?? true,
|
||||||
host,
|
host,
|
||||||
hostname,
|
hostname,
|
||||||
scheme,
|
scheme,
|
||||||
@@ -309,9 +328,7 @@ export function loadConfig(): Config {
|
|||||||
config.videoThumbnailGenerator.endsWith('/') ? config.videoThumbnailGenerator.substring(0, config.videoThumbnailGenerator.length - 1) : config.videoThumbnailGenerator
|
config.videoThumbnailGenerator.endsWith('/') ? config.videoThumbnailGenerator.substring(0, config.videoThumbnailGenerator.length - 1) : config.videoThumbnailGenerator
|
||||||
: null,
|
: null,
|
||||||
userAgent: `Misskey/${version} (${config.url})`,
|
userAgent: `Misskey/${version} (${config.url})`,
|
||||||
frontendEntry: frontendManifest['src/_boot_.ts'],
|
|
||||||
frontendManifestExists: frontendManifestExists,
|
frontendManifestExists: frontendManifestExists,
|
||||||
frontendEmbedEntry: frontendEmbedManifest['src/boot.ts'],
|
|
||||||
frontendEmbedManifestExists: frontendEmbedManifestExists,
|
frontendEmbedManifestExists: frontendEmbedManifestExists,
|
||||||
perChannelMaxNoteCacheCount: config.perChannelMaxNoteCacheCount ?? 1000,
|
perChannelMaxNoteCacheCount: config.perChannelMaxNoteCacheCount ?? 1000,
|
||||||
perUserNotificationsMaxCount: config.perUserNotificationsMaxCount ?? 500,
|
perUserNotificationsMaxCount: config.perUserNotificationsMaxCount ?? 500,
|
||||||
@@ -324,7 +341,7 @@ export function loadConfig(): Config {
|
|||||||
function tryCreateUrl(url: string) {
|
function tryCreateUrl(url: string) {
|
||||||
try {
|
try {
|
||||||
return new URL(url);
|
return new URL(url);
|
||||||
} catch (e) {
|
} catch (_) {
|
||||||
throw new Error(`url="${url}" is not a valid URL.`);
|
throw new Error(`url="${url}" is not a valid URL.`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ export class AccountMoveService {
|
|||||||
*/
|
*/
|
||||||
@bindThis
|
@bindThis
|
||||||
public async moveFromLocal(src: MiLocalUser, dst: MiLocalUser | MiRemoteUser): Promise<unknown> {
|
public async moveFromLocal(src: MiLocalUser, dst: MiLocalUser | MiRemoteUser): Promise<unknown> {
|
||||||
const srcUri = this.userEntityService.getUserUri(src);
|
const _srcUri = this.userEntityService.getUserUri(src);
|
||||||
const dstUri = this.userEntityService.getUserUri(dst);
|
const dstUri = this.userEntityService.getUserUri(dst);
|
||||||
|
|
||||||
// add movedToUri to indicate that the user has moved
|
// add movedToUri to indicate that the user has moved
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import * as fs from 'node:fs';
|
|||||||
import { fileURLToPath } from 'node:url';
|
import { fileURLToPath } from 'node:url';
|
||||||
import { dirname } from 'node:path';
|
import { dirname } from 'node:path';
|
||||||
import { Injectable } from '@nestjs/common';
|
import { Injectable } from '@nestjs/common';
|
||||||
import si from 'systeminformation';
|
|
||||||
import { Mutex } from 'async-mutex';
|
import { Mutex } from 'async-mutex';
|
||||||
import fetch from 'node-fetch';
|
import fetch from 'node-fetch';
|
||||||
import { bindThis } from '@/decorators.js';
|
import { bindThis } from '@/decorators.js';
|
||||||
@@ -84,6 +83,7 @@ export class AiService {
|
|||||||
|
|
||||||
@bindThis
|
@bindThis
|
||||||
private async getCpuFlags(): Promise<string[]> {
|
private async getCpuFlags(): Promise<string[]> {
|
||||||
|
const si = await import('systeminformation');
|
||||||
const str = await si.cpuFlags();
|
const str = await si.cpuFlags();
|
||||||
return str.split(/\s+/);
|
return str.split(/\s+/);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -205,7 +205,7 @@ export class AnnouncementService {
|
|||||||
announcementId: announcementId,
|
announcementId: announcementId,
|
||||||
userId: user.id,
|
userId: user.id,
|
||||||
});
|
});
|
||||||
} catch (e) {
|
} catch (_) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ export class AvatarDecorationService implements OnApplicationShutdown {
|
|||||||
const obj = JSON.parse(data);
|
const obj = JSON.parse(data);
|
||||||
|
|
||||||
if (obj.channel === 'internal') {
|
if (obj.channel === 'internal') {
|
||||||
const { type, body } = obj.message as GlobalEvents['internal']['payload'];
|
const { type, body: _ } = obj.message as GlobalEvents['internal']['payload'];
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case 'avatarDecorationCreated':
|
case 'avatarDecorationCreated':
|
||||||
case 'avatarDecorationUpdated':
|
case 'avatarDecorationUpdated':
|
||||||
|
|||||||
@@ -141,7 +141,7 @@ import { ApLoggerService } from './activitypub/ApLoggerService.js';
|
|||||||
import { ApMfmService } from './activitypub/ApMfmService.js';
|
import { ApMfmService } from './activitypub/ApMfmService.js';
|
||||||
import { ApRendererService } from './activitypub/ApRendererService.js';
|
import { ApRendererService } from './activitypub/ApRendererService.js';
|
||||||
import { ApRequestService } from './activitypub/ApRequestService.js';
|
import { ApRequestService } from './activitypub/ApRequestService.js';
|
||||||
import { ApResolverService } from './activitypub/ApResolverService.js';
|
import { ApResolverService, Resolver } from './activitypub/ApResolverService.js';
|
||||||
import { JsonLdService } from './activitypub/JsonLdService.js';
|
import { JsonLdService } from './activitypub/JsonLdService.js';
|
||||||
import { RemoteLoggerService } from './RemoteLoggerService.js';
|
import { RemoteLoggerService } from './RemoteLoggerService.js';
|
||||||
import { RemoteUserResolveService } from './RemoteUserResolveService.js';
|
import { RemoteUserResolveService } from './RemoteUserResolveService.js';
|
||||||
@@ -447,6 +447,7 @@ const $ApQuestionService: Provider = { provide: 'ApQuestionService', useExisting
|
|||||||
ApRendererService,
|
ApRendererService,
|
||||||
ApRequestService,
|
ApRequestService,
|
||||||
ApResolverService,
|
ApResolverService,
|
||||||
|
Resolver,
|
||||||
JsonLdService,
|
JsonLdService,
|
||||||
RemoteLoggerService,
|
RemoteLoggerService,
|
||||||
RemoteUserResolveService,
|
RemoteUserResolveService,
|
||||||
@@ -745,6 +746,7 @@ const $ApQuestionService: Provider = { provide: 'ApQuestionService', useExisting
|
|||||||
ApRendererService,
|
ApRendererService,
|
||||||
ApRequestService,
|
ApRequestService,
|
||||||
ApResolverService,
|
ApResolverService,
|
||||||
|
Resolver,
|
||||||
JsonLdService,
|
JsonLdService,
|
||||||
RemoteLoggerService,
|
RemoteLoggerService,
|
||||||
RemoteUserResolveService,
|
RemoteUserResolveService,
|
||||||
|
|||||||
@@ -366,7 +366,7 @@ export class EmailService {
|
|||||||
valid: true,
|
valid: true,
|
||||||
reason: null,
|
reason: null,
|
||||||
};
|
};
|
||||||
} catch (error) {
|
} catch (_) {
|
||||||
return {
|
return {
|
||||||
valid: false,
|
valid: false,
|
||||||
reason: 'network',
|
reason: 'network',
|
||||||
|
|||||||
@@ -484,25 +484,13 @@ export class FileInfoService {
|
|||||||
* Calculate blurhash string of image
|
* Calculate blurhash string of image
|
||||||
*/
|
*/
|
||||||
@bindThis
|
@bindThis
|
||||||
private getBlurhash(path: string, type: string): Promise<string> {
|
private async getBlurhash(path: string, type: string): Promise<string> {
|
||||||
return new Promise(async (resolve, reject) => {
|
const sharp = await sharpBmp(path, type);
|
||||||
(await sharpBmp(path, type))
|
const { data: buffer, info } = await sharp
|
||||||
.raw()
|
.raw()
|
||||||
.ensureAlpha()
|
.ensureAlpha()
|
||||||
.resize(64, 64, { fit: 'inside' })
|
.resize(64, 64, { fit: 'inside' })
|
||||||
.toBuffer((err, buffer, info) => {
|
.toBuffer({ resolveWithObject: true });
|
||||||
if (err) return reject(err);
|
return blurhash.encode(new Uint8ClampedArray(buffer), info.width, info.height, 5, 5);
|
||||||
|
|
||||||
let hash;
|
|
||||||
|
|
||||||
try {
|
|
||||||
hash = blurhash.encode(new Uint8ClampedArray(buffer), info.width, info.height, 5, 5);
|
|
||||||
} catch (e) {
|
|
||||||
return reject(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
resolve(hash);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,11 +38,7 @@ export interface BroadcastTypes {
|
|||||||
emojis: Packed<'EmojiDetailed'>[];
|
emojis: Packed<'EmojiDetailed'>[];
|
||||||
};
|
};
|
||||||
emojiDeleted: {
|
emojiDeleted: {
|
||||||
emojis: {
|
emojis: Packed<'EmojiDetailed'>[];
|
||||||
id?: string;
|
|
||||||
name: string;
|
|
||||||
[other: string]: any;
|
|
||||||
}[];
|
|
||||||
};
|
};
|
||||||
announcementCreated: {
|
announcementCreated: {
|
||||||
announcement: Packed<'Announcement'>;
|
announcement: Packed<'Announcement'>;
|
||||||
@@ -133,6 +129,9 @@ export interface NoteEventTypes {
|
|||||||
type NoteStreamEventTypes = {
|
type NoteStreamEventTypes = {
|
||||||
[key in keyof NoteEventTypes]: {
|
[key in keyof NoteEventTypes]: {
|
||||||
id: MiNote['id'];
|
id: MiNote['id'];
|
||||||
|
userId: MiNote['userId'];
|
||||||
|
visibility: MiNote['visibility'];
|
||||||
|
visibleUserIds: MiNote['visibleUserIds'];
|
||||||
body: NoteEventTypes[key];
|
body: NoteEventTypes[key];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -382,9 +381,12 @@ export class GlobalEventService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@bindThis
|
@bindThis
|
||||||
public publishNoteStream<K extends keyof NoteEventTypes>(noteId: MiNote['id'], type: K, value?: NoteEventTypes[K]): void {
|
public publishNoteStream<K extends keyof NoteEventTypes>(note: MiNote, type: K, value?: NoteEventTypes[K]): void {
|
||||||
this.publish(`noteStream:${noteId}`, type, {
|
this.publish(`noteStream:${note.id}`, type, {
|
||||||
id: noteId,
|
id: note.id,
|
||||||
|
userId: note.userId,
|
||||||
|
visibility: note.visibility,
|
||||||
|
visibleUserIds: note.visibleUserIds,
|
||||||
body: value,
|
body: value,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -308,7 +308,7 @@ export class MfmService {
|
|||||||
try {
|
try {
|
||||||
const date = new Date(parseInt(text, 10) * 1000);
|
const date = new Date(parseInt(text, 10) * 1000);
|
||||||
return `<time datetime="${escapeHtml(date.toISOString())}">${escapeHtml(date.toISOString())}</time>`;
|
return `<time datetime="${escapeHtml(date.toISOString())}">${escapeHtml(date.toISOString())}</time>`;
|
||||||
} catch (err) {
|
} catch (_) {
|
||||||
return fnDefault(node);
|
return fnDefault(node);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -376,7 +376,7 @@ export class MfmService {
|
|||||||
try {
|
try {
|
||||||
const url = new URL(node.props.url);
|
const url = new URL(node.props.url);
|
||||||
return `<a href="${escapeHtml(url.href)}">${toHtml(node.children)}</a>`;
|
return `<a href="${escapeHtml(url.href)}">${toHtml(node.children)}</a>`;
|
||||||
} catch (err) {
|
} catch (_) {
|
||||||
return `[${toHtml(node.children)}](${escapeHtml(node.props.url)})`;
|
return `[${toHtml(node.children)}](${escapeHtml(node.props.url)})`;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -390,7 +390,7 @@ export class MfmService {
|
|||||||
try {
|
try {
|
||||||
const url = new URL(href);
|
const url = new URL(href);
|
||||||
return `<a href="${escapeHtml(url.href)}" class="u-url mention">${escapeHtml(acct)}</a>`;
|
return `<a href="${escapeHtml(url.href)}" class="u-url mention">${escapeHtml(acct)}</a>`;
|
||||||
} catch (err) {
|
} catch (_) {
|
||||||
return escapeHtml(acct);
|
return escapeHtml(acct);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -419,7 +419,7 @@ export class MfmService {
|
|||||||
try {
|
try {
|
||||||
const url = new URL(node.props.url);
|
const url = new URL(node.props.url);
|
||||||
return `<a href="${escapeHtml(url.href)}">${escapeHtml(node.props.url)}</a>`;
|
return `<a href="${escapeHtml(url.href)}">${escapeHtml(node.props.url)}</a>`;
|
||||||
} catch (err) {
|
} catch (_) {
|
||||||
return escapeHtml(node.props.url);
|
return escapeHtml(node.props.url);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ export class NoteDeleteService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!quiet) {
|
if (!quiet) {
|
||||||
this.globalEventService.publishNoteStream(note.id, 'deleted', {
|
this.globalEventService.publishNoteStream(note, 'deleted', {
|
||||||
deletedAt: deletedAt,
|
deletedAt: deletedAt,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -187,9 +187,9 @@ export class NoteDraftService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//#region visibleUsers
|
//#region visibleUsers
|
||||||
let visibleUsers: MiUser[] = [];
|
let _visibleUsers: MiUser[] = [];
|
||||||
if (data.visibleUserIds != null && data.visibleUserIds.length > 0) {
|
if (data.visibleUserIds != null && data.visibleUserIds.length > 0) {
|
||||||
visibleUsers = await this.usersRepository.findBy({
|
_visibleUsers = await this.usersRepository.findBy({
|
||||||
id: In(data.visibleUserIds),
|
id: In(data.visibleUserIds),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ export class PollService {
|
|||||||
const index = choice + 1; // In SQL, array index is 1 based
|
const index = choice + 1; // In SQL, array index is 1 based
|
||||||
await this.pollsRepository.query(`UPDATE poll SET votes[${index}] = votes[${index}] + 1 WHERE "noteId" = '${poll.noteId}'`);
|
await this.pollsRepository.query(`UPDATE poll SET votes[${index}] = votes[${index}] + 1 WHERE "noteId" = '${poll.noteId}'`);
|
||||||
|
|
||||||
this.globalEventService.publishNoteStream(note.id, 'pollVoted', {
|
this.globalEventService.publishNoteStream(note, 'pollVoted', {
|
||||||
choice: choice,
|
choice: choice,
|
||||||
userId: user.id,
|
userId: user.id,
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -259,7 +259,7 @@ export class QueryService {
|
|||||||
|
|
||||||
@bindThis
|
@bindThis
|
||||||
public generateVisibilityQuery(q: SelectQueryBuilder<any>, me?: { id: MiUser['id'] } | null): void {
|
public generateVisibilityQuery(q: SelectQueryBuilder<any>, me?: { id: MiUser['id'] } | null): void {
|
||||||
// This code must always be synchronized with the checks in Notes.isVisibleForMe.
|
// This code must always be synchronized with the checks in NoteEntityService.isVisibleForMe and Stream abstract class Channel.isNoteVisibleForMe.
|
||||||
if (me == null) {
|
if (me == null) {
|
||||||
q.andWhere(new Brackets(qb => {
|
q.andWhere(new Brackets(qb => {
|
||||||
qb
|
qb
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
import { randomUUID } from 'node:crypto';
|
import { randomUUID } from 'node:crypto';
|
||||||
import { Inject, Injectable } from '@nestjs/common';
|
import { Inject, Injectable } from '@nestjs/common';
|
||||||
import { MetricsTime, type JobType } from 'bullmq';
|
import { MetricsTime, type JobType } from 'bullmq';
|
||||||
import { parse as parseRedisInfo } from 'redis-info';
|
|
||||||
import type { IActivity } from '@/core/activitypub/type.js';
|
import type { IActivity } from '@/core/activitypub/type.js';
|
||||||
import type { MiDriveFile } from '@/models/DriveFile.js';
|
import type { MiDriveFile } from '@/models/DriveFile.js';
|
||||||
import type { MiWebhook, WebhookEventTypes } from '@/models/Webhook.js';
|
import type { MiWebhook, WebhookEventTypes } from '@/models/Webhook.js';
|
||||||
@@ -86,6 +85,19 @@ const REPEATABLE_SYSTEM_JOB_DEF = [{
|
|||||||
pattern: '0 4 * * *',
|
pattern: '0 4 * * *',
|
||||||
}];
|
}];
|
||||||
|
|
||||||
|
function parseRedisInfo(infoText: string): Record<string, string> {
|
||||||
|
const fields = infoText
|
||||||
|
.split('\n')
|
||||||
|
.filter(line => line.length > 0 && !line.startsWith('#'))
|
||||||
|
.map(line => line.trim().split(':'));
|
||||||
|
|
||||||
|
const result: Record<string, string> = {};
|
||||||
|
for (const [key, value] of fields) {
|
||||||
|
result[key] = value;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class QueueService {
|
export class QueueService {
|
||||||
constructor(
|
constructor(
|
||||||
@@ -890,7 +902,7 @@ export class QueueService {
|
|||||||
},
|
},
|
||||||
db: {
|
db: {
|
||||||
version: db.redis_version,
|
version: db.redis_version,
|
||||||
mode: db.redis_mode,
|
mode: db.redis_mode as 'cluster' | 'standalone' | 'sentinel',
|
||||||
runId: db.run_id,
|
runId: db.run_id,
|
||||||
processId: db.process_id,
|
processId: db.process_id,
|
||||||
port: parseInt(db.tcp_port),
|
port: parseInt(db.tcp_port),
|
||||||
|
|||||||
@@ -244,7 +244,7 @@ export class ReactionService {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
this.globalEventService.publishNoteStream(note.id, 'reacted', {
|
this.globalEventService.publishNoteStream(note, 'reacted', {
|
||||||
reaction: decodedReaction.reaction,
|
reaction: decodedReaction.reaction,
|
||||||
emoji: customEmoji != null ? {
|
emoji: customEmoji != null ? {
|
||||||
name: customEmoji.host ? `${customEmoji.name}@${customEmoji.host}` : `${customEmoji.name}@.`,
|
name: customEmoji.host ? `${customEmoji.name}@${customEmoji.host}` : `${customEmoji.name}@.`,
|
||||||
@@ -318,7 +318,7 @@ export class ReactionService {
|
|||||||
.execute();
|
.execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
this.globalEventService.publishNoteStream(note.id, 'unreacted', {
|
this.globalEventService.publishNoteStream(note, 'unreacted', {
|
||||||
reaction: this.decodeReaction(exist.reaction).reaction,
|
reaction: this.decodeReaction(exist.reaction).reaction,
|
||||||
userId: user.id,
|
userId: user.id,
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -314,7 +314,7 @@ export class RoleService implements OnApplicationShutdown, OnModuleInit {
|
|||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (_) {
|
||||||
// TODO: log error
|
// TODO: log error
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -190,8 +190,7 @@ export class SearchService {
|
|||||||
return this.searchNoteByMeiliSearch(q, me, opts, pagination);
|
return this.searchNoteByMeiliSearch(q, me, opts, pagination);
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
const _: never = this.provider;
|
||||||
const typeCheck: never = this.provider;
|
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,8 +49,8 @@ export class UserSuspendService {
|
|||||||
});
|
});
|
||||||
|
|
||||||
(async () => {
|
(async () => {
|
||||||
await this.postSuspend(user).catch(e => {});
|
await this.postSuspend(user).catch(_ => {});
|
||||||
await this.unFollowAll(user).catch(e => {});
|
await this.unFollowAll(user).catch(_ => {});
|
||||||
})();
|
})();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,7 +67,7 @@ export class UserSuspendService {
|
|||||||
});
|
});
|
||||||
|
|
||||||
(async () => {
|
(async () => {
|
||||||
await this.postUnsuspend(user).catch(e => {});
|
await this.postUnsuspend(user).catch(_ => {});
|
||||||
})();
|
})();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user