mirror of
https://github.com/misskey-dev/misskey.git
synced 2026-07-31 20:35:52 +00:00
Compare commits
236 Commits
2025.10.1
...
frame-image
| Author | SHA1 | Date | |
|---|---|---|---|
| c9b5e66cdb | |||
| 0d52145b2b | |||
| 467404d5bb | |||
| 99e25784ad | |||
| 9e1e40d35a | |||
| 8eb6e29d2c | |||
| 2d198a711b | |||
| e0b872dc09 | |||
| 711b86ab7d | |||
| e8b4dae553 | |||
| 36d404818d | |||
| cb03f3f013 | |||
| c109bec013 | |||
| 6fa4eb8c4f | |||
| 5fb4caa14b | |||
| bc1f83664f | |||
| 78435dc8d4 | |||
| d74aded35f | |||
| d605680524 | |||
| 1096ce8e4a | |||
| 8e6fffee68 | |||
| 2cffd9f0fb | |||
| 988f5ab69f | |||
| 3afe7c5348 | |||
| 73cc30f50f | |||
| da3b3af984 | |||
| 3273ca7512 | |||
| b67bfe0763 | |||
| 63d2870755 | |||
| 61f9c148f0 | |||
| 8927a9e98a | |||
| dc77d59f87 | |||
| 2d0dae236f | |||
| a1f0ca4b8f | |||
| 2a996287e3 | |||
| 65dd917bfb | |||
| b0bffd3842 | |||
| 4ee6f90ab2 | |||
| 50379e52db | |||
| 6bb29ab5c3 | |||
| fc1e2229e5 | |||
| daf2a57b3c | |||
| 6716950d7f | |||
| 29a0750eef | |||
| 24bd150967 | |||
| a3c3052d0f | |||
| a6f57d99f9 | |||
| 55ef4c5faa | |||
| 6293a57de8 | |||
| 5512898463 | |||
| 0b77dc8c48 | |||
| 9900b3492a | |||
| d9c9b95fc0 | |||
| 613900598a | |||
| 1facca1ac5 | |||
| 8d66cc006a | |||
| 72cdaff810 | |||
| 7b9e83a6b8 | |||
| 483483bc44 | |||
| f222d7e24d | |||
| e1b6e9d4b6 | |||
| 128fe6d644 | |||
| aa905a74cf | |||
| 5e2a6021ae | |||
| dfd479bec5 | |||
| 0933aa4d92 | |||
| fbd11c1eec | |||
| 768e1dd016 | |||
| d55f51a69b | |||
| fe01a5a28f | |||
| 32b5583432 | |||
| 5fbe801d35 | |||
| 3c11797c6d | |||
| 10242d5f14 | |||
| 0455187a68 | |||
| 1ae8e7900d | |||
| 81635d9f1c | |||
| 4bdbe794a6 | |||
| cad93071da | |||
| 2effd9da6e | |||
| 2732034447 | |||
| 17a4d4fad9 | |||
| f01ceb0b7c | |||
| 0b3efa47a2 | |||
| e44f14115e | |||
| bcd9e106e3 | |||
| 82b577a2f4 | |||
| 8d8504103c | |||
| 7a8c4817a8 | |||
| 825dcf7e3e | |||
| 53e2be747d | |||
| f10496645c | |||
| 666e046399 | |||
| f13a34bda4 | |||
| 643fd0f22a | |||
| d3aba01db2 | |||
| 8fec44d0e9 | |||
| 105cc4b50a | |||
| 1590a73d3d | |||
| 18caa20969 | |||
| 1bb8447c73 | |||
| df54bd92d0 | |||
| 8cb37792c9 | |||
| 3f539916d9 | |||
| 415339b30b | |||
| de7cbb376e | |||
| 6cb6f794e5 | |||
| 236c235115 | |||
| 71808d3cc0 | |||
| 989c1b351a | |||
| 0c5f61721a | |||
| e0e17a78f1 | |||
| 2ad393ea45 | |||
| cdf059cc11 | |||
| 0fdd88f38e | |||
| 4679b2b34d | |||
| 052b1a6c76 | |||
| fd15a7fc23 | |||
| b895088546 | |||
| 1e5592a5bd | |||
| c3ad46ad6f | |||
| 8c7e1bd287 | |||
| 043b9b3d26 | |||
| 91dafc26a7 | |||
| 4edd6a68e6 | |||
| f801d1cf0b | |||
| 42706970f2 | |||
| 14730e429a | |||
| 2ee04860fb | |||
| 25afb5d279 | |||
| c4f53aba3f | |||
| 86e4f15e95 | |||
| 6c190e7a5d | |||
| 1b46813e7a | |||
| 0ea0e05e61 | |||
| 015e680133 | |||
| ea40a0756f | |||
| 70fa621e22 | |||
| c741aa5d7d | |||
| 7afe0d44d1 | |||
| e588615ea9 | |||
| 7e56fed164 | |||
| 9f810d701d | |||
| 2f3421645a | |||
| 4c0f215fc5 | |||
| 449b00c934 | |||
| cdcff3ede8 | |||
| 9d1c3f053c | |||
| 8c5d571975 | |||
| c5e9f7add4 | |||
| e15fdd05b7 | |||
| 41e945b0ef | |||
| f89faae0ab | |||
| 67ca3d7e71 | |||
| 2ac2e9e849 | |||
| 746269c4b1 | |||
| c059256bd6 | |||
| 2e17979abc | |||
| c2d95ebdcb | |||
| cb5de83bad | |||
| 30d87d5532 | |||
| 5c212c996a | |||
| 39e01b1dfe | |||
| fd2fe34270 | |||
| 73bcd330f7 | |||
| 23d2d191a0 | |||
| ca1bf21dcf | |||
| 1ffc53f596 | |||
| 4e38f218ec | |||
| a0d34940ff | |||
| bdddd623b6 | |||
| 29bfc9a91a | |||
| 2e596607f8 | |||
| cf89280fc5 | |||
| c0f4c47c53 | |||
| 58995e6b97 | |||
| d00ca499a3 | |||
| ec1120bdaa | |||
| 3a65728fb4 | |||
| e4c03b9f4e | |||
| b82533c4b8 | |||
| ef1cdca6f9 | |||
| 46d30f454b | |||
| b300b5b94a | |||
| 39d6aecc57 | |||
| edbe30a3df | |||
| ad4751918b | |||
| bd9041bd8f | |||
| 4dcff123df | |||
| 990be44d98 | |||
| 78d65ef3dd | |||
| 0a67d6f1a0 | |||
| e312283ea0 | |||
| e8c78e12d5 | |||
| 37fe7a9634 | |||
| 729abbef62 | |||
| e74ab35de3 | |||
| 4ba18690d7 | |||
| 26c8914a26 | |||
| 119423e3ae | |||
| 3de1ce63cd | |||
| 18fbc9bb05 | |||
| 37a21cf54e | |||
| 290fd8c7cc | |||
| 0edb0133fc | |||
| 0abe021640 | |||
| 344f50d538 | |||
| 1cebad0ddb | |||
| 3e34e87a59 | |||
| b9713259a7 | |||
| e15b8b7fa3 | |||
| ca89c86426 | |||
| 6bce19655b | |||
| 78ed024b0b | |||
| 6f76b598a1 | |||
| a888f2863b | |||
| a892bbcce5 | |||
| 6571c87e14 | |||
| 9e0f18a705 | |||
| 3dfca2d61f | |||
| f1578c282e | |||
| 231a6877be | |||
| d0a5ccc1ec | |||
| 4e16e23acd | |||
| 17da44078b | |||
| 1f29fb4e40 | |||
| 0343b4e689 | |||
| a76a1a6305 | |||
| 1f934ada5d | |||
| cd77404006 | |||
| 351386c8ff | |||
| 298f8802d4 | |||
| 6e614ff061 | |||
| ca76ba1871 | |||
| 9f768b8022 | |||
| 4ff826eb3d |
+2
-2
@@ -110,10 +110,10 @@ port: 3000
|
|||||||
# Changes how the server interpret the origin IP of the request.
|
# Changes how the server interpret the origin IP of the request.
|
||||||
#
|
#
|
||||||
# Any format supported by Fastify is accepted.
|
# Any format supported by Fastify is accepted.
|
||||||
# Default: trust all proxies (i.e. trustProxy: true)
|
# Default: do not trust any proxies (i.e. trustProxy: false)
|
||||||
# See: https://fastify.dev/docs/latest/reference/server/#trustproxy
|
# See: https://fastify.dev/docs/latest/reference/server/#trustproxy
|
||||||
#
|
#
|
||||||
# trustProxy: 1
|
# trustProxy: false
|
||||||
|
|
||||||
# ┌──────────────────────────┐
|
# ┌──────────────────────────┐
|
||||||
#───┘ PostgreSQL configuration └────────────────────────────────
|
#───┘ PostgreSQL configuration └────────────────────────────────
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
FROM mcr.microsoft.com/devcontainers/javascript-node:0-18
|
FROM mcr.microsoft.com/devcontainers/javascript-node:4.0.3-24-trixie
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ services:
|
|||||||
|
|
||||||
db:
|
db:
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
image: postgres:15-alpine
|
image: postgres:18-alpine
|
||||||
networks:
|
networks:
|
||||||
- internal_network
|
- internal_network
|
||||||
environment:
|
environment:
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ body:
|
|||||||
* 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: 2025.x.x
|
||||||
* Node: 20.x.x
|
* Node: 20.x.x
|
||||||
* PostgreSQL: 15.x.x
|
* PostgreSQL: 18.x.x
|
||||||
* Redis: 7.x.x
|
* Redis: 7.x.x
|
||||||
* OS and Architecture: Ubuntu 24.04.2 LTS aarch64
|
* OS and Architecture: Ubuntu 24.04.2 LTS aarch64
|
||||||
value: |
|
value: |
|
||||||
|
|||||||
@@ -16,13 +16,13 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4.3.0
|
uses: actions/checkout@v6.0.1
|
||||||
|
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@v4.2.0
|
uses: pnpm/action-setup@v4.2.0
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
uses: actions/setup-node@v4.4.0
|
uses: actions/setup-node@v6.1.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.1
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
uses: actions/setup-node@v4.4.0
|
uses: actions/setup-node@v6.1.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.1
|
||||||
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.1.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.1
|
||||||
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.1
|
||||||
- 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.1
|
||||||
- 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.1
|
||||||
- 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.1
|
||||||
|
|
||||||
- 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.1
|
||||||
- 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.1
|
||||||
- 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-*
|
||||||
|
|||||||
@@ -13,20 +13,36 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
env:
|
env:
|
||||||
DOCKER_CONTENT_TRUST: 1
|
DOCKER_CONTENT_TRUST: 1
|
||||||
DOCKLE_VERSION: 0.4.14
|
DOCKLE_VERSION: 0.4.15
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.3.0
|
- uses: actions/checkout@v6.0.1
|
||||||
|
|
||||||
- name: Download and install dockle v${{ env.DOCKLE_VERSION }}
|
- name: Download and install dockle v${{ env.DOCKLE_VERSION }}
|
||||||
run: |
|
run: |
|
||||||
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: |
|
- run: |
|
||||||
cp .config/docker_example.env .config/docker.env
|
cp .config/docker_example.env .config/docker.env
|
||||||
cp ./compose_example.yml ./compose.yml
|
cp ./compose_example.yml ./compose.yml
|
||||||
|
|
||||||
- run: |
|
- run: |
|
||||||
docker compose up -d web
|
docker compose up -d web
|
||||||
docker tag "$(docker compose images --format json web | jq -r '.[] | .ID')" misskey-web:latest
|
IMAGE_ID=$(docker compose images --format json web | jq -r '.[0].ID')
|
||||||
- run: |
|
docker tag "${IMAGE_ID}" misskey-web:latest
|
||||||
cmd="dockle --exit-code 1 misskey-web:latest ${image_name}"
|
|
||||||
echo "> ${cmd}"
|
- name: Prune docker junk (optional but recommended)
|
||||||
eval "${cmd}"
|
run: |
|
||||||
|
docker system prune -af
|
||||||
|
docker volume prune -f
|
||||||
|
|
||||||
|
- name: Save image for Dockle
|
||||||
|
run: |
|
||||||
|
docker save misskey-web:latest -o ./misskey-web.tar
|
||||||
|
ls -lh ./misskey-web.tar
|
||||||
|
|
||||||
|
- name: Run Dockle with tar input
|
||||||
|
run: |
|
||||||
|
dockle --exit-code 1 --input ./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.1
|
||||||
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.2.0
|
||||||
- name: Use Node.js
|
- name: Use Node.js
|
||||||
uses: actions/setup-node@v4.4.0
|
uses: actions/setup-node@v6.1.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
|
||||||
|
|||||||
@@ -0,0 +1,87 @@
|
|||||||
|
# this name is used in report-backend-memory.yml so be careful when change name
|
||||||
|
name: Get backend memory usage
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
- develop
|
||||||
|
paths:
|
||||||
|
- packages/backend/**
|
||||||
|
- packages/misskey-js/**
|
||||||
|
- .github/workflows/get-backend-memory.yml
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
get-memory-usage:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
memory-json-name: [memory-base.json, memory-head.json]
|
||||||
|
include:
|
||||||
|
- memory-json-name: memory-base.json
|
||||||
|
ref: ${{ github.base_ref }}
|
||||||
|
- memory-json-name: memory-head.json
|
||||||
|
ref: refs/pull/${{ github.event.number }}/merge
|
||||||
|
|
||||||
|
services:
|
||||||
|
postgres:
|
||||||
|
image: postgres:18
|
||||||
|
ports:
|
||||||
|
- 54312:5432
|
||||||
|
env:
|
||||||
|
POSTGRES_DB: test-misskey
|
||||||
|
POSTGRES_HOST_AUTH_METHOD: trust
|
||||||
|
redis:
|
||||||
|
image: redis:7
|
||||||
|
ports:
|
||||||
|
- 56312:6379
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6.0.1
|
||||||
|
with:
|
||||||
|
ref: ${{ matrix.ref }}
|
||||||
|
submodules: true
|
||||||
|
- name: Setup pnpm
|
||||||
|
uses: pnpm/action-setup@v4.2.0
|
||||||
|
- name: Use Node.js
|
||||||
|
uses: actions/setup-node@v6.1.0
|
||||||
|
with:
|
||||||
|
node-version-file: '.node-version'
|
||||||
|
cache: 'pnpm'
|
||||||
|
- run: pnpm i --frozen-lockfile
|
||||||
|
- name: Check pnpm-lock.yaml
|
||||||
|
run: git diff --exit-code pnpm-lock.yaml
|
||||||
|
- name: Copy Configure
|
||||||
|
run: cp .github/misskey/test.yml .config/default.yml
|
||||||
|
- name: Compile Configure
|
||||||
|
run: pnpm compile-config
|
||||||
|
- name: Build
|
||||||
|
run: pnpm build
|
||||||
|
- name: Run migrations
|
||||||
|
run: pnpm --filter backend migrate
|
||||||
|
- name: Measure memory usage
|
||||||
|
run: |
|
||||||
|
# Start the server and measure memory usage
|
||||||
|
node packages/backend/scripts/measure-memory.mjs > ${{ matrix.memory-json-name }}
|
||||||
|
- name: Upload Artifact
|
||||||
|
uses: actions/upload-artifact@v6
|
||||||
|
with:
|
||||||
|
name: memory-artifact-${{ matrix.memory-json-name }}
|
||||||
|
path: ${{ matrix.memory-json-name }}
|
||||||
|
|
||||||
|
save-pr-number:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions: {}
|
||||||
|
steps:
|
||||||
|
- name: Save PR number
|
||||||
|
env:
|
||||||
|
PR_NUMBER: ${{ github.event.number }}
|
||||||
|
run: |
|
||||||
|
echo "$PR_NUMBER" > ./pr_number
|
||||||
|
- uses: actions/upload-artifact@v6
|
||||||
|
with:
|
||||||
|
name: memory-artifact-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.1
|
||||||
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.2.0
|
||||||
- uses: actions/setup-node@v4.4.0
|
- uses: actions/setup-node@v6.1.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.1
|
||||||
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.2.0
|
||||||
- uses: actions/setup-node@v4.4.0
|
- uses: actions/setup-node@v6.1.0
|
||||||
with:
|
with:
|
||||||
node-version-file: '.node-version'
|
node-version-file: '.node-version'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
@@ -96,22 +96,20 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
workspace:
|
workspace:
|
||||||
- backend
|
- backend
|
||||||
|
- frontend
|
||||||
- sw
|
- sw
|
||||||
- misskey-js
|
- misskey-js
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.3.0
|
- uses: actions/checkout@v6.0.1
|
||||||
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.2.0
|
||||||
- uses: actions/setup-node@v4.4.0
|
- uses: actions/setup-node@v6.1.0
|
||||||
with:
|
with:
|
||||||
node-version-file: '.node-version'
|
node-version-file: '.node-version'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
- run: pnpm i --frozen-lockfile
|
- run: pnpm i --frozen-lockfile
|
||||||
- run: pnpm --filter misskey-js run build
|
- run: pnpm --filter "${{ matrix.workspace }}^..." run build
|
||||||
if: ${{ matrix.workspace == 'backend' || matrix.workspace == 'sw' }}
|
|
||||||
- run: pnpm --filter misskey-reversi run build
|
|
||||||
if: ${{ matrix.workspace == 'backend' }}
|
|
||||||
- run: pnpm --filter ${{ matrix.workspace }} run typecheck
|
- run: pnpm --filter ${{ matrix.workspace }} run typecheck
|
||||||
|
|||||||
@@ -3,10 +3,12 @@ name: Lint
|
|||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
paths:
|
paths:
|
||||||
|
- packages/i18n/**
|
||||||
- locales/**
|
- locales/**
|
||||||
- .github/workflows/locale.yml
|
- .github/workflows/locale.yml
|
||||||
pull_request:
|
pull_request:
|
||||||
paths:
|
paths:
|
||||||
|
- packages/i18n/**
|
||||||
- locales/**
|
- locales/**
|
||||||
- .github/workflows/locale.yml
|
- .github/workflows/locale.yml
|
||||||
jobs:
|
jobs:
|
||||||
@@ -14,15 +16,18 @@ 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.1
|
||||||
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.2.0
|
||||||
- uses: actions/setup-node@v4.4.0
|
- uses: actions/setup-node@v6.1.0
|
||||||
with:
|
with:
|
||||||
node-version-file: '.node-version'
|
node-version-file: ".node-version"
|
||||||
cache: 'pnpm'
|
cache: "pnpm"
|
||||||
- run: pnpm i --frozen-lockfile
|
- run: pnpm i --frozen-lockfile
|
||||||
- run: cd locales && node verify.js
|
- run: pnpm --filter i18n build
|
||||||
|
- name: Verify Locales
|
||||||
|
working-directory: ./packages/i18n
|
||||||
|
run: pnpm run verify
|
||||||
|
|||||||
@@ -16,13 +16,13 @@ jobs:
|
|||||||
id-token: write
|
id-token: write
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.3.0
|
- uses: actions/checkout@v6.0.1
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@v4.2.0
|
uses: pnpm/action-setup@v4.2.0
|
||||||
- name: Use Node.js
|
- name: Use Node.js
|
||||||
uses: actions/setup-node@v4.4.0
|
uses: actions/setup-node@v6.1.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 }})を確認してください。
|
||||||
|
|||||||
@@ -0,0 +1,122 @@
|
|||||||
|
name: Report backend memory
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_run:
|
||||||
|
types: [completed]
|
||||||
|
workflows:
|
||||||
|
- Get backend memory usage # get-backend-memory.yml
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
compare-memory:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
||||||
|
permissions:
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Download artifact
|
||||||
|
uses: actions/github-script@v8.0.0
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
const fs = require('fs');
|
||||||
|
let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
run_id: context.payload.workflow_run.id,
|
||||||
|
});
|
||||||
|
let matchArtifacts = allArtifacts.data.artifacts.filter((artifact) => {
|
||||||
|
return artifact.name.startsWith("memory-artifact-") || artifact.name == "memory-artifact"
|
||||||
|
});
|
||||||
|
await Promise.all(matchArtifacts.map(async (artifact) => {
|
||||||
|
let download = await github.rest.actions.downloadArtifact({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
artifact_id: artifact.id,
|
||||||
|
archive_format: 'zip',
|
||||||
|
});
|
||||||
|
await fs.promises.writeFile(`${process.env.GITHUB_WORKSPACE}/${artifact.name}.zip`, Buffer.from(download.data));
|
||||||
|
}));
|
||||||
|
- name: Extract all artifacts
|
||||||
|
run: |
|
||||||
|
find . -mindepth 1 -maxdepth 1 -type f -name '*.zip' -exec unzip {} -d artifacts ';'
|
||||||
|
ls -la artifacts/
|
||||||
|
- name: Load PR Number
|
||||||
|
id: load-pr-num
|
||||||
|
run: echo "pr-number=$(cat artifacts/pr_number)" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
- name: Output base
|
||||||
|
run: cat ./artifacts/memory-base.json
|
||||||
|
- name: Output head
|
||||||
|
run: cat ./artifacts/memory-head.json
|
||||||
|
- name: Compare memory usage
|
||||||
|
id: compare
|
||||||
|
run: |
|
||||||
|
BASE_MEMORY=$(cat ./artifacts/memory-base.json)
|
||||||
|
HEAD_MEMORY=$(cat ./artifacts/memory-head.json)
|
||||||
|
|
||||||
|
BASE_RSS=$(echo "$BASE_MEMORY" | jq -r '.memory.rss // 0')
|
||||||
|
HEAD_RSS=$(echo "$HEAD_MEMORY" | jq -r '.memory.rss // 0')
|
||||||
|
|
||||||
|
# Calculate difference
|
||||||
|
if [ "$BASE_RSS" -gt 0 ] && [ "$HEAD_RSS" -gt 0 ]; then
|
||||||
|
DIFF=$((HEAD_RSS - BASE_RSS))
|
||||||
|
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
|
||||||
|
echo "significant_increase=false" >> "$GITHUB_OUTPUT"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "has_data=false" >> "$GITHUB_OUTPUT"
|
||||||
|
fi
|
||||||
|
- id: build-comment
|
||||||
|
name: Build memory comment
|
||||||
|
run: |
|
||||||
|
HEADER="## Backend Memory Usage Comparison"
|
||||||
|
FOOTER="[See workflow logs for details](https://github.com/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID})"
|
||||||
|
|
||||||
|
echo "$HEADER" > ./output.md
|
||||||
|
echo >> ./output.md
|
||||||
|
|
||||||
|
if [ "${{ steps.compare.outputs.has_data }}" == "true" ]; then
|
||||||
|
echo "| Metric | base | head | Diff |" >> ./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
|
||||||
|
echo >> ./output.md
|
||||||
|
|
||||||
|
if [ "${{ steps.compare.outputs.significant_increase }}" == "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
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "Could not retrieve memory usage data." >> ./output.md
|
||||||
|
echo >> ./output.md
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$FOOTER" >> ./output.md
|
||||||
|
- uses: thollander/actions-comment-pull-request@v3
|
||||||
|
with:
|
||||||
|
pr-number: ${{ steps.load-pr-num.outputs.pr-number }}
|
||||||
|
comment-tag: show_memory_diff
|
||||||
|
file-path: ./output.md
|
||||||
|
- name: Tell error to PR
|
||||||
|
uses: thollander/actions-comment-pull-request@v3
|
||||||
|
if: failure() && steps.load-pr-num.outputs.pr-number
|
||||||
|
with:
|
||||||
|
pr-number: ${{ steps.load-pr-num.outputs.pr-number }}
|
||||||
|
comment-tag: show_memory_diff_error
|
||||||
|
message: |
|
||||||
|
An error occurred while comparing backend memory usage. See [workflow logs](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}) for details.
|
||||||
@@ -11,9 +11,10 @@ jobs:
|
|||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
issues: write
|
issues: 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.1
|
||||||
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.1
|
||||||
if: github.event_name == 'pull_request_target'
|
if: github.event_name == 'pull_request_target'
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
@@ -39,7 +39,7 @@ jobs:
|
|||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@v4.2.0
|
uses: pnpm/action-setup@v4.2.0
|
||||||
- name: Use Node.js
|
- name: Use Node.js
|
||||||
uses: actions/setup-node@v4.4.0
|
uses: actions/setup-node@v6.1.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
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ jobs:
|
|||||||
|
|
||||||
services:
|
services:
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:15
|
image: postgres:18
|
||||||
ports:
|
ports:
|
||||||
- 54312:5432
|
- 54312:5432
|
||||||
env:
|
env:
|
||||||
@@ -50,7 +50,7 @@ jobs:
|
|||||||
- 56312:6379
|
- 56312:6379
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.3.0
|
- uses: actions/checkout@v6.0.1
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
@@ -86,7 +86,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.1.0
|
||||||
with:
|
with:
|
||||||
node-version-file: ${{ matrix.node-version-file }}
|
node-version-file: ${{ matrix.node-version-file }}
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
@@ -117,7 +117,7 @@ jobs:
|
|||||||
|
|
||||||
services:
|
services:
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:15
|
image: postgres:18
|
||||||
ports:
|
ports:
|
||||||
- 54312:5432
|
- 54312:5432
|
||||||
env:
|
env:
|
||||||
@@ -129,13 +129,13 @@ jobs:
|
|||||||
- 56312:6379
|
- 56312:6379
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.3.0
|
- uses: actions/checkout@v6.0.1
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@v4.2.0
|
uses: pnpm/action-setup@v4.2.0
|
||||||
- name: Use Node.js
|
- name: Use Node.js
|
||||||
uses: actions/setup-node@v4.4.0
|
uses: actions/setup-node@v6.1.0
|
||||||
with:
|
with:
|
||||||
node-version-file: ${{ matrix.node-version-file }}
|
node-version-file: ${{ matrix.node-version-file }}
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
@@ -165,7 +165,7 @@ jobs:
|
|||||||
|
|
||||||
services:
|
services:
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:15
|
image: postgres:18
|
||||||
ports:
|
ports:
|
||||||
- 54312:5432
|
- 54312:5432
|
||||||
env:
|
env:
|
||||||
@@ -173,7 +173,7 @@ jobs:
|
|||||||
POSTGRES_HOST_AUTH_METHOD: trust
|
POSTGRES_HOST_AUTH_METHOD: trust
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.3.0
|
- uses: actions/checkout@v6.0.1
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
@@ -182,7 +182,7 @@ jobs:
|
|||||||
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.1.0
|
||||||
with:
|
with:
|
||||||
node-version-file: ${{ matrix.node-version-file }}
|
node-version-file: ${{ matrix.node-version-file }}
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ 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
|
||||||
@@ -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.1.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.1
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@v4.2.0
|
uses: pnpm/action-setup@v4.2.0
|
||||||
- name: Use Node.js
|
- name: Use Node.js
|
||||||
uses: actions/setup-node@v4.4.0
|
uses: actions/setup-node@v6.1.0
|
||||||
with:
|
with:
|
||||||
node-version-file: '.node-version'
|
node-version-file: '.node-version'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
@@ -64,7 +64,7 @@ jobs:
|
|||||||
|
|
||||||
services:
|
services:
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:15
|
image: postgres:18
|
||||||
ports:
|
ports:
|
||||||
- 54312:5432
|
- 54312:5432
|
||||||
env:
|
env:
|
||||||
@@ -76,7 +76,7 @@ jobs:
|
|||||||
- 56312:6379
|
- 56312:6379
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.3.0
|
- uses: actions/checkout@v6.0.1
|
||||||
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
|
||||||
@@ -88,7 +88,7 @@ jobs:
|
|||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@v4.2.0
|
uses: pnpm/action-setup@v4.2.0
|
||||||
- name: Use Node.js
|
- name: Use Node.js
|
||||||
uses: actions/setup-node@v4.4.0
|
uses: actions/setup-node@v6.1.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.1
|
||||||
|
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@v4.2.0
|
uses: pnpm/action-setup@v4.2.0
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
uses: actions/setup-node@v4.4.0
|
uses: actions/setup-node@v6.1.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.1
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@v4.2.0
|
uses: pnpm/action-setup@v4.2.0
|
||||||
- name: Use Node.js
|
- name: Use Node.js
|
||||||
uses: actions/setup-node@v4.4.0
|
uses: actions/setup-node@v6.1.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.1
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@v4.2.0
|
uses: pnpm/action-setup@v4.2.0
|
||||||
- name: Use Node.js
|
- name: Use Node.js
|
||||||
uses: actions/setup-node@v4.4.0
|
uses: actions/setup-node@v6.1.0
|
||||||
with:
|
with:
|
||||||
node-version-file: '.node-version'
|
node-version-file: '.node-version'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
|||||||
Vendored
+1
@@ -3,6 +3,7 @@
|
|||||||
"**/node_modules": true
|
"**/node_modules": true
|
||||||
},
|
},
|
||||||
"typescript.tsdk": "node_modules/typescript/lib",
|
"typescript.tsdk": "node_modules/typescript/lib",
|
||||||
|
"typescript.enablePromptUseWorkspaceTsdk": true,
|
||||||
"files.associations": {
|
"files.associations": {
|
||||||
"*.test.ts": "typescript"
|
"*.test.ts": "typescript"
|
||||||
},
|
},
|
||||||
|
|||||||
+107
@@ -1,3 +1,110 @@
|
|||||||
|
## Unreleased
|
||||||
|
|
||||||
|
### General
|
||||||
|
-
|
||||||
|
|
||||||
|
### Client
|
||||||
|
-
|
||||||
|
|
||||||
|
### Server
|
||||||
|
-
|
||||||
|
|
||||||
|
|
||||||
|
## 2025.12.1
|
||||||
|
|
||||||
|
### Client
|
||||||
|
- Fix: 特定の条件下でMisskeyが起動せず空白のページが表示されることがある問題を軽減
|
||||||
|
- Fix: 初回読み込み時などに、言語設定で不整合が発生することがある問題を修正
|
||||||
|
- Fix: 削除されたノートのリノートが正しく動作されない問題を修正
|
||||||
|
- Fix: チャンネルオーナーが削除済みの時にチャンネルのヘッダーメニューが表示されない不具合を修正
|
||||||
|
- Fix: ドライブで登録日以外でソートする場合は月でグループ化して表示しないように
|
||||||
|
- Fix: `null` を返す note_view_intrruptor プラグインが動作しない問題を修正
|
||||||
|
|
||||||
|
### Server
|
||||||
|
- Fix: ジョブキューでSentryが有効にならない問題を修正
|
||||||
|
|
||||||
|
|
||||||
|
## 2025.12.0
|
||||||
|
|
||||||
|
### Note
|
||||||
|
- configの`trustProxy`のデフォルト値を`false`に変更しました。アップデート前に現在のconfigをご確認の上、必要に応じて値を変更してください。
|
||||||
|
|
||||||
|
### Client
|
||||||
|
- Fix: stacking router viewで連続して戻る操作を行うと何も表示されなくなる問題を修正
|
||||||
|
|
||||||
|
### Server
|
||||||
|
- Enhance: メモリ使用量を削減しました
|
||||||
|
- Enhance: ActivityPubアクティビティを送信する際のパフォーマンス向上
|
||||||
|
- Enhance: 依存関係の更新
|
||||||
|
- Fix: セキュリティに関する修正
|
||||||
|
|
||||||
|
## 2025.11.1
|
||||||
|
|
||||||
|
### Client
|
||||||
|
|
||||||
|
- Enhance: リアクションの受け入れ設定にキャプションを追加 #15921
|
||||||
|
- Fix: ページの内容がはみ出ることがある問題を修正
|
||||||
|
- Fix: ナビゲーションバーを下に表示しているときに、項目数が多いと表示が崩れる問題を修正
|
||||||
|
- Fix: ヘッダーメニューのチャンネルの新規作成の項目でチャンネル作成ページに飛べない問題を修正 #16816
|
||||||
|
- Fix: ラジオボタンに空白の選択肢が表示される問題を修正
|
||||||
|
(Cherry-picked from https://github.com/MisskeyIO/misskey/pull/1105)
|
||||||
|
- Fix: 一部のシチュエーションで投稿フォームのツアーが正しく表示されない問題を修正
|
||||||
|
- Fix: 投稿フォームのリセットボタンで注釈がリセットされない問題を修正
|
||||||
|
- Fix: PlayのAiScriptバージョン判定(v0.x系・v1.x系の判定)が正しく動作しない問題を修正
|
||||||
|
(Cherry-picked from https://github.com/MisskeyIO/misskey/pull/1129)
|
||||||
|
- Fix: フォロー申請をキャンセルする際の確認ダイアログの文言が不正確な問題を修正
|
||||||
|
- Fix: 初回読み込み時にエラーになることがある問題を修正
|
||||||
|
- Fix: お気に入りクリップの一覧表示が正しく動作しない問題を修正
|
||||||
|
- Fix: AiScript Misskey 拡張APIにおいて、各種関数の引数で明示的に `null` が指定されている場合のハンドリングを修正
|
||||||
|
|
||||||
|
### Server
|
||||||
|
- Enhance: メモリ使用量を削減しました
|
||||||
|
- Enhance: 依存関係の更新
|
||||||
|
- Fix: ワードミュートの文字数計算を修正
|
||||||
|
- Fix: チャンネルのリアルタイム更新時に、ロックダウン設定にて非ログイン時にノートを表示しない設定にしている場合でもノートが表示されてしまう問題を修正
|
||||||
|
- Fix: DeepL APIのAPIキー指定方式変更に対応
|
||||||
|
(Cherry-picked from https://github.com/MisskeyIO/misskey/pull/1096)
|
||||||
|
- 内部実装の変更にて対応可能な更新です。Misskey側の設定方法に変更はありません。
|
||||||
|
- Fix: DBレプリケーションを利用する環境でクエリーが失敗する問題を修正
|
||||||
|
(Cherry-picked from https://github.com/MisskeyIO/misskey/pull/1123)
|
||||||
|
|
||||||
|
## 2025.11.0
|
||||||
|
|
||||||
|
### General
|
||||||
|
- Feat: チャンネルミュート機能の実装 #10649
|
||||||
|
- チャンネルの概要画面の右上からミュートできます(リンクコピー、共有、設定と同列)
|
||||||
|
- Enhance: Node.js 24.10.0をサポートするようになりました
|
||||||
|
- Enhance: DockerのNode.jsが24.10.0に更新されました
|
||||||
|
- 依存関係の更新
|
||||||
|
|
||||||
|
### Client
|
||||||
|
- Feat: 画像にメタデータを含むフレームをつけられる機能
|
||||||
|
- Enhance: プリセットを作成しなくても画像にウォーターマークを付与できるように
|
||||||
|
- Enhance: 管理しているチャンネルの見分けがつきやすくなるように
|
||||||
|
- Enhance: プロフィールへのリンクをユーザーポップアップのアバターに追加
|
||||||
|
- Enhance: ユーザーのノート、フォロー、フォロワーページへのリンクをユーザーポップアップに追加
|
||||||
|
- Enhance: プッシュ通知を行うための権限確認をより確実に行うように
|
||||||
|
- Enhance: 投稿フォームのチュートリアルを追加
|
||||||
|
- Enhance: 「自動でもっと見る」をほとんどの箇所で利用可能に
|
||||||
|
- Enhance: アンテナ・リスト設定画面とタイムラインの動線を改善
|
||||||
|
- アンテナ・リスト一覧画面の項目を選択すると、設定画面ではなくタイムラインに移動するようになりました
|
||||||
|
- アンテナ・リストの設定画面の右上にタイムラインに移動するボタンを追加しました
|
||||||
|
- Fix: 紙吹雪エフェクトがアニメーション設定を考慮せず常に表示される問題を修正
|
||||||
|
- Fix: ナビゲーションバーのリアルタイムモード切替ボタンの状態をよりわかりやすく表示するように
|
||||||
|
- Fix: ページのタイトルが長いとき、はみ出る問題を修正
|
||||||
|
- Fix: 投稿フォームのアバターが正しく表示されない問題を修正 #16789
|
||||||
|
- FIx: カスタム絵文字(β)画面で変更行が正しくハイライトされない問題を修正 #16626
|
||||||
|
|
||||||
|
### Server
|
||||||
|
- Enhance: Remote Notes Cleaningが複雑度が高いノートの処理を中断せずに次のノートから再開するように
|
||||||
|
- Fix: チャンネルの説明欄の最小文字数制約を除去
|
||||||
|
|
||||||
|
## 2025.10.2
|
||||||
|
|
||||||
|
### Client
|
||||||
|
- Fix: アプリ内からキャッシュをクリアするとテーマ再適用するまでレンダリングが正しく行われない問題を修正
|
||||||
|
- Fix: 期限が無期限のアンケートに投票できない問題を修正
|
||||||
|
|
||||||
## 2025.10.1
|
## 2025.10.1
|
||||||
|
|
||||||
### General
|
### General
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ COPY --link ["packages/frontend-shared/package.json", "./packages/frontend-share
|
|||||||
COPY --link ["packages/frontend/package.json", "./packages/frontend/"]
|
COPY --link ["packages/frontend/package.json", "./packages/frontend/"]
|
||||||
COPY --link ["packages/frontend-embed/package.json", "./packages/frontend-embed/"]
|
COPY --link ["packages/frontend-embed/package.json", "./packages/frontend-embed/"]
|
||||||
COPY --link ["packages/frontend-builder/package.json", "./packages/frontend-builder/"]
|
COPY --link ["packages/frontend-builder/package.json", "./packages/frontend-builder/"]
|
||||||
|
COPY --link ["packages/i18n/package.json", "./packages/i18n/"]
|
||||||
COPY --link ["packages/icons-subsetter/package.json", "./packages/icons-subsetter/"]
|
COPY --link ["packages/icons-subsetter/package.json", "./packages/icons-subsetter/"]
|
||||||
COPY --link ["packages/sw/package.json", "./packages/sw/"]
|
COPY --link ["packages/sw/package.json", "./packages/sw/"]
|
||||||
COPY --link ["packages/misskey-js/package.json", "./packages/misskey-js/"]
|
COPY --link ["packages/misskey-js/package.json", "./packages/misskey-js/"]
|
||||||
@@ -101,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/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 . ./
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,8 @@
|
|||||||
<a href="https://www.patreon.com/syuilo">
|
<a href="https://www.patreon.com/syuilo">
|
||||||
<img src="https://custom-icon-badges.herokuapp.com/badge/become_a-patron-F96854?logoColor=F96854&style=for-the-badge&logo=patreon&labelColor=363B40" alt="become a patron"/></a>
|
<img src="https://custom-icon-badges.herokuapp.com/badge/become_a-patron-F96854?logoColor=F96854&style=for-the-badge&logo=patreon&labelColor=363B40" alt="become a patron"/></a>
|
||||||
|
|
||||||
|
[](https://deepwiki.com/misskey-dev/misskey)
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
## Thanks
|
## Thanks
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@ Also, the later tasks are more indefinite and are subject to change as developme
|
|||||||
This is the phase we are at now. We need to make a high-maintenance environment that can withstand future development.
|
This is the phase we are at now. We need to make a high-maintenance environment that can withstand future development.
|
||||||
|
|
||||||
- ~~Make the number of type errors zero (backend)~~ → Done ✔️
|
- ~~Make the number of type errors zero (backend)~~ → Done ✔️
|
||||||
- Make the number of type errors zero (frontend)
|
- ~~Make the number of type errors zero (frontend)~~ → Done ✔️
|
||||||
- Improve CI
|
- Improve CI
|
||||||
- ~~Fix tests~~ → Done ✔️
|
- ~~Fix tests~~ → Done ✔️
|
||||||
- Fix random test failures - https://github.com/misskey-dev/misskey/issues/7985 and https://github.com/misskey-dev/misskey/issues/7986
|
- Fix random test failures - https://github.com/misskey-dev/misskey/issues/7985 and https://github.com/misskey-dev/misskey/issues/7986
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ spec:
|
|||||||
ports:
|
ports:
|
||||||
- containerPort: 3000
|
- containerPort: 3000
|
||||||
- name: postgres
|
- name: postgres
|
||||||
image: postgres:15-alpine
|
image: postgres:18-alpine
|
||||||
env:
|
env:
|
||||||
- name: POSTGRES_USER
|
- name: POSTGRES_USER
|
||||||
value: "example-misskey-user"
|
value: "example-misskey-user"
|
||||||
|
|||||||
@@ -15,13 +15,13 @@ services:
|
|||||||
|
|
||||||
db:
|
db:
|
||||||
restart: always
|
restart: always
|
||||||
image: postgres:15-alpine
|
image: postgres:18-alpine
|
||||||
ports:
|
ports:
|
||||||
- "5432:5432"
|
- "5432:5432"
|
||||||
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
|
||||||
|
|||||||
+2
-2
@@ -37,13 +37,13 @@ services:
|
|||||||
|
|
||||||
db:
|
db:
|
||||||
restart: always
|
restart: always
|
||||||
image: postgres:15-alpine
|
image: postgres:18-alpine
|
||||||
networks:
|
networks:
|
||||||
- internal_network
|
- internal_network
|
||||||
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
|
||||||
|
|||||||
@@ -1011,6 +1011,14 @@ information: "عن"
|
|||||||
inMinutes: "د"
|
inMinutes: "د"
|
||||||
inDays: "ي"
|
inDays: "ي"
|
||||||
widgets: "التطبيقات المُصغّرة"
|
widgets: "التطبيقات المُصغّرة"
|
||||||
|
presets: "إعدادات مسبقة"
|
||||||
|
_imageEditing:
|
||||||
|
_vars:
|
||||||
|
filename: "اسم الملف"
|
||||||
|
_imageFrameEditor:
|
||||||
|
font: "الخط"
|
||||||
|
fontSerif: "Serif"
|
||||||
|
fontSansSerif: "Sans Serif"
|
||||||
_chat:
|
_chat:
|
||||||
invitations: "دعوة"
|
invitations: "دعوة"
|
||||||
noHistory: "السجل فارغ"
|
noHistory: "السجل فارغ"
|
||||||
@@ -1397,6 +1405,9 @@ _postForm:
|
|||||||
replyPlaceholder: "رد على هذه الملاحظة…"
|
replyPlaceholder: "رد على هذه الملاحظة…"
|
||||||
quotePlaceholder: "اقتبس هذه الملاحظة…"
|
quotePlaceholder: "اقتبس هذه الملاحظة…"
|
||||||
channelPlaceholder: "انشر في قناة..."
|
channelPlaceholder: "انشر في قناة..."
|
||||||
|
_howToUse:
|
||||||
|
visibility_title: "الظهور"
|
||||||
|
menu_title: "القائمة"
|
||||||
_placeholders:
|
_placeholders:
|
||||||
a: "ما الذي تنوي فعله؟"
|
a: "ما الذي تنوي فعله؟"
|
||||||
b: "ماذا يحدث حولك ؟"
|
b: "ماذا يحدث حولك ؟"
|
||||||
|
|||||||
@@ -851,6 +851,14 @@ information: "আপনার সম্পর্কে"
|
|||||||
inMinutes: "মিনিট"
|
inMinutes: "মিনিট"
|
||||||
inDays: "দিন"
|
inDays: "দিন"
|
||||||
widgets: "উইজেটগুলি"
|
widgets: "উইজেটগুলি"
|
||||||
|
_imageEditing:
|
||||||
|
_vars:
|
||||||
|
filename: "ফাইলের নাম"
|
||||||
|
_imageFrameEditor:
|
||||||
|
header: "হেডার"
|
||||||
|
font: "ফন্ট"
|
||||||
|
fontSerif: "সেরিফ"
|
||||||
|
fontSansSerif: "স্যান্স সেরিফ"
|
||||||
_chat:
|
_chat:
|
||||||
invitations: "আমন্ত্রণ"
|
invitations: "আমন্ত্রণ"
|
||||||
noHistory: "কোনো ইতিহাস নেই"
|
noHistory: "কোনো ইতিহাস নেই"
|
||||||
@@ -1169,6 +1177,9 @@ _postForm:
|
|||||||
replyPlaceholder: "নোটটির জবাব দিন..."
|
replyPlaceholder: "নোটটির জবাব দিন..."
|
||||||
quotePlaceholder: "নোটটিকে উদ্ধৃত করুন..."
|
quotePlaceholder: "নোটটিকে উদ্ধৃত করুন..."
|
||||||
channelPlaceholder: "চ্যানেলে পোস্ট করুন..."
|
channelPlaceholder: "চ্যানেলে পোস্ট করুন..."
|
||||||
|
_howToUse:
|
||||||
|
visibility_title: "দৃশ্যমানতা"
|
||||||
|
menu_title: "মেনু"
|
||||||
_placeholders:
|
_placeholders:
|
||||||
a: "আপনি এখন কি করছেন?"
|
a: "আপনি এখন কি করছেন?"
|
||||||
b: "আপনার আশে পাশে কি হচ্ছে?"
|
b: "আপনার আশে পাশে কি হচ্ছে?"
|
||||||
|
|||||||
@@ -83,6 +83,8 @@ files: "Fitxers"
|
|||||||
download: "Descarregar"
|
download: "Descarregar"
|
||||||
driveFileDeleteConfirm: "Estàs segur que vols suprimir el fitxer \"{name}\"? Les notes associades a aquest fitxer també seran esborrades."
|
driveFileDeleteConfirm: "Estàs segur que vols suprimir el fitxer \"{name}\"? Les notes associades a aquest fitxer també seran esborrades."
|
||||||
unfollowConfirm: "Segur que vols deixar de seguir a {name}?"
|
unfollowConfirm: "Segur que vols deixar de seguir a {name}?"
|
||||||
|
cancelFollowRequestConfirm: "Vols cancel·lar la teva sol·licitud de seguiment a {name}?"
|
||||||
|
rejectFollowRequestConfirm: "Vols rebutjar la sol·licitud de seguiment de {name}?"
|
||||||
exportRequested: "Has sol·licitat una exportació de dades. Això pot trigar una estona. S'afegirà a la teva unitat de disc un cop estigui completada."
|
exportRequested: "Has sol·licitat una exportació de dades. Això pot trigar una estona. S'afegirà a la teva unitat de disc un cop estigui completada."
|
||||||
importRequested: "Has sol·licitat una importació de dades. Això pot trigar una estona."
|
importRequested: "Has sol·licitat una importació de dades. Això pot trigar una estona."
|
||||||
lists: "Llistes"
|
lists: "Llistes"
|
||||||
@@ -302,6 +304,7 @@ uploadFromUrlMayTakeTime: "La càrrega des de l'enllaç pot trigar un temps"
|
|||||||
uploadNFiles: "Pujar {n} arxius"
|
uploadNFiles: "Pujar {n} arxius"
|
||||||
explore: "Explora"
|
explore: "Explora"
|
||||||
messageRead: "Vist"
|
messageRead: "Vist"
|
||||||
|
readAllChatMessages: "Marcar tots els missatges com a llegits"
|
||||||
noMoreHistory: "No hi ha res més per veure"
|
noMoreHistory: "No hi ha res més per veure"
|
||||||
startChat: "Comença a xatejar "
|
startChat: "Comença a xatejar "
|
||||||
nUsersRead: "Vist per {n}"
|
nUsersRead: "Vist per {n}"
|
||||||
@@ -1022,6 +1025,9 @@ pushNotificationAlreadySubscribed: "L'enviament de notificacions ja és activat"
|
|||||||
pushNotificationNotSupported: "El teu navegador o la teva instància no suporta l'enviament de notificacions "
|
pushNotificationNotSupported: "El teu navegador o la teva instància no suporta l'enviament de notificacions "
|
||||||
sendPushNotificationReadMessage: "Esborrar les notificacions enviades quan s'hagin llegit"
|
sendPushNotificationReadMessage: "Esborrar les notificacions enviades quan s'hagin llegit"
|
||||||
sendPushNotificationReadMessageCaption: "Això pot fer que el teu dispositiu consumeixi més bateria"
|
sendPushNotificationReadMessageCaption: "Això pot fer que el teu dispositiu consumeixi més bateria"
|
||||||
|
pleaseAllowPushNotification: "Si us plau, permet les notificacions del navegador"
|
||||||
|
browserPushNotificationDisabled: "No s'ha pogut obtenir permisos per les notificacions"
|
||||||
|
browserPushNotificationDisabledDescription: "No tens permisos per enviar notificacions des de {serverName}. Activa les notificacions a la configuració del teu navegador i tornar-ho a intentar."
|
||||||
windowMaximize: "Maximitzar "
|
windowMaximize: "Maximitzar "
|
||||||
windowMinimize: "Minimitzar"
|
windowMinimize: "Minimitzar"
|
||||||
windowRestore: "Restaurar"
|
windowRestore: "Restaurar"
|
||||||
@@ -1396,6 +1402,50 @@ scheduled: "Programat"
|
|||||||
widgets: "Ginys"
|
widgets: "Ginys"
|
||||||
deviceInfo: "Informació del dispositiu"
|
deviceInfo: "Informació del dispositiu"
|
||||||
deviceInfoDescription: "En fer consultes tècniques influir la següent informació pot ajudar a resoldre'l més ràpidament."
|
deviceInfoDescription: "En fer consultes tècniques influir la següent informació pot ajudar a resoldre'l més ràpidament."
|
||||||
|
youAreAdmin: "Ets l'administrador "
|
||||||
|
frame: "Marc"
|
||||||
|
presets: "Predefinit"
|
||||||
|
zeroPadding: "Sense omplir"
|
||||||
|
_imageEditing:
|
||||||
|
_vars:
|
||||||
|
caption: "Títol de l'arxiu"
|
||||||
|
filename: "Nom del Fitxer"
|
||||||
|
filename_without_ext: "Nom de l'arxiu sense extensió "
|
||||||
|
year: "Any"
|
||||||
|
month: "Mes"
|
||||||
|
day: "Dia"
|
||||||
|
hour: "Hora"
|
||||||
|
minute: "Minut"
|
||||||
|
second: "Segon"
|
||||||
|
camera_model: "Nom de la càmera "
|
||||||
|
camera_lens_model: "Nom de la lent"
|
||||||
|
camera_mm: "Distància focal"
|
||||||
|
camera_mm_35: "Distància focal (equivalent a 35 mm)"
|
||||||
|
camera_f: "Obertura"
|
||||||
|
camera_s: "Velocitat d'obturació"
|
||||||
|
camera_iso: "Sensibilitat ISO"
|
||||||
|
gps_lat: "Latitud "
|
||||||
|
gps_long: "Longitud "
|
||||||
|
_imageFrameEditor:
|
||||||
|
title: "Edició de fotogrames "
|
||||||
|
tip: "Pots decorar les imatges afegint etiquetes que continguin marcs i metadades."
|
||||||
|
header: "Capçalera"
|
||||||
|
footer: "Peu de pàgina "
|
||||||
|
borderThickness: "Amplada de la vora"
|
||||||
|
labelThickness: "Amplada de l'etiqueta "
|
||||||
|
labelScale: "Mida de l'etiqueta "
|
||||||
|
centered: "Alinea al centre"
|
||||||
|
captionMain: "Peu de foto (gran)"
|
||||||
|
captionSub: "Peu de foto (petit)"
|
||||||
|
availableVariables: "Variables disponibles"
|
||||||
|
withQrCode: "Codi QR"
|
||||||
|
backgroundColor: "Color del fons"
|
||||||
|
textColor: "Color del text"
|
||||||
|
font: "Lletra tipogràfica"
|
||||||
|
fontSerif: "Serif"
|
||||||
|
fontSansSerif: "Sans Serif"
|
||||||
|
quitWithoutSaveConfirm: "Sortir sense desar?"
|
||||||
|
failedToLoadImage: "Error en carregar la imatge"
|
||||||
_compression:
|
_compression:
|
||||||
_quality:
|
_quality:
|
||||||
high: "Qualitat alta"
|
high: "Qualitat alta"
|
||||||
@@ -1498,6 +1548,8 @@ _settings:
|
|||||||
showUrlPreview: "Mostrar vista prèvia d'URL"
|
showUrlPreview: "Mostrar vista prèvia d'URL"
|
||||||
showAvailableReactionsFirstInNote: "Mostra les reacciones que pots fer servir al damunt"
|
showAvailableReactionsFirstInNote: "Mostra les reacciones que pots fer servir al damunt"
|
||||||
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."
|
||||||
|
enableAnimatedImages: "Activar imatges animades"
|
||||||
_chat:
|
_chat:
|
||||||
showSenderName: "Mostrar el nom del remitent"
|
showSenderName: "Mostrar el nom del remitent"
|
||||||
sendOnEnter: "Introdueix per enviar"
|
sendOnEnter: "Introdueix per enviar"
|
||||||
@@ -1506,6 +1558,8 @@ _preferencesProfile:
|
|||||||
profileNameDescription: "Estableix un nom que identifiqui aquest dispositiu."
|
profileNameDescription: "Estableix un nom que identifiqui aquest dispositiu."
|
||||||
profileNameDescription2: "Per exemple: \"PC Principal\", \"Smartphone\", etc"
|
profileNameDescription2: "Per exemple: \"PC Principal\", \"Smartphone\", etc"
|
||||||
manageProfiles: "Gestionar perfils"
|
manageProfiles: "Gestionar perfils"
|
||||||
|
shareSameProfileBetweenDevicesIsNotRecommended: "No recomanem compartir el mateix perfil en diferents dispositius."
|
||||||
|
useSyncBetweenDevicesOptionIfYouWantToSyncSetting: "Si hi ha ajustos que vols sincronitzar entre diferents dispositius activa l'opció \"Sincronitza entre diferents dispositius\" individualment per cada una de les diferents opcions."
|
||||||
_preferencesBackup:
|
_preferencesBackup:
|
||||||
autoBackup: "Còpia de seguretat automàtica "
|
autoBackup: "Còpia de seguretat automàtica "
|
||||||
restoreFromBackup: "Restaurar des d'una còpia de seguretat"
|
restoreFromBackup: "Restaurar des d'una còpia de seguretat"
|
||||||
@@ -1515,6 +1569,7 @@ _preferencesBackup:
|
|||||||
youNeedToNameYourProfileToEnableAutoBackup: "Has de posar-li un nom al teu perfil per poder activar les còpies de seguretat automàtiques."
|
youNeedToNameYourProfileToEnableAutoBackup: "Has de posar-li un nom al teu perfil per poder activar les còpies de seguretat automàtiques."
|
||||||
autoPreferencesBackupIsNotEnabledForThisDevice: "La còpia de seguretat automàtica no es troba activada en aquest dispositiu."
|
autoPreferencesBackupIsNotEnabledForThisDevice: "La còpia de seguretat automàtica no es troba activada en aquest dispositiu."
|
||||||
backupFound: "Còpia de seguretat de la configuració trobada"
|
backupFound: "Còpia de seguretat de la configuració trobada"
|
||||||
|
forceBackup: "Còpia de seguretat forçada de la configuració "
|
||||||
_accountSettings:
|
_accountSettings:
|
||||||
requireSigninToViewContents: "És obligatori l'inici de sessió per poder veure el contingut"
|
requireSigninToViewContents: "És obligatori l'inici de sessió per poder veure el contingut"
|
||||||
requireSigninToViewContentsDescription1: "Es requereix l'inici de sessió per poder veure totes les notes i el contingut que has creat. Amb això esperem evitar que els rastrejadors recopilin informació."
|
requireSigninToViewContentsDescription1: "Es requereix l'inici de sessió per poder veure totes les notes i el contingut que has creat. Amb això esperem evitar que els rastrejadors recopilin informació."
|
||||||
@@ -2530,6 +2585,20 @@ _postForm:
|
|||||||
replyPlaceholder: "Contestar..."
|
replyPlaceholder: "Contestar..."
|
||||||
quotePlaceholder: "Citar..."
|
quotePlaceholder: "Citar..."
|
||||||
channelPlaceholder: "Publicar a un canal..."
|
channelPlaceholder: "Publicar a un canal..."
|
||||||
|
showHowToUse: "Mostrar les instruccions"
|
||||||
|
_howToUse:
|
||||||
|
content_title: "Cos principal"
|
||||||
|
content_description: "Introdueix el contingut que vols publicar."
|
||||||
|
toolbar_title: "Barra d'eines "
|
||||||
|
toolbar_description: "Pots adjuntar arxius o enquestes, afegir anotacions o etiquetes i inserir emojis o mencions."
|
||||||
|
account_title: "Menú del compte"
|
||||||
|
account_description: "Pots anar canviant de comptes per publicar o veure una llista d'esborranys i les publicacions programades del teu compte."
|
||||||
|
visibility_title: "Visibilitat"
|
||||||
|
visibility_description: "Pots configurar la visibilitat de les teves notes."
|
||||||
|
menu_title: "Menú"
|
||||||
|
menu_description: "Pots fer altres accions com desar esborranys, programar publicacions i configurar reaccions."
|
||||||
|
submit_title: "Botó per publicar"
|
||||||
|
submit_description: "Publica les teves notes. També pots fer servir Ctrl + Enter / Cmd + Enter"
|
||||||
_placeholders:
|
_placeholders:
|
||||||
a: "Que vols dir?..."
|
a: "Que vols dir?..."
|
||||||
b: "Alguna cosa interessant al teu voltant?..."
|
b: "Alguna cosa interessant al teu voltant?..."
|
||||||
@@ -2807,6 +2876,8 @@ _abuseReport:
|
|||||||
notifiedWebhook: "Webhook que s'ha de fer servir"
|
notifiedWebhook: "Webhook que s'ha de fer servir"
|
||||||
deleteConfirm: "Segur que vols esborrar el destinatari de l'informe de moderació?"
|
deleteConfirm: "Segur que vols esborrar el destinatari de l'informe de moderació?"
|
||||||
_moderationLogTypes:
|
_moderationLogTypes:
|
||||||
|
clearQueue: "Esborra la cua de feina"
|
||||||
|
promoteQueue: "Tornar a intentar la feina de la cua"
|
||||||
createRole: "Rol creat"
|
createRole: "Rol creat"
|
||||||
deleteRole: "Rol esborrat"
|
deleteRole: "Rol esborrat"
|
||||||
updateRole: "Rol actualitzat"
|
updateRole: "Rol actualitzat"
|
||||||
@@ -3223,11 +3294,13 @@ _watermarkEditor:
|
|||||||
polkadotSubDotRadius: "Mida del lunar secundari"
|
polkadotSubDotRadius: "Mida del lunar secundari"
|
||||||
polkadotSubDotDivisions: "Nombre de punts secundaris"
|
polkadotSubDotDivisions: "Nombre de punts secundaris"
|
||||||
leaveBlankToAccountUrl: "Si deixes aquest camp buit, es farà servir l'URL del teu compte"
|
leaveBlankToAccountUrl: "Si deixes aquest camp buit, es farà servir l'URL del teu compte"
|
||||||
|
failedToLoadImage: "Error en carregar la imatge"
|
||||||
_imageEffector:
|
_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"
|
nothingToConfigure: "No hi ha opcions de configuració disponibles"
|
||||||
|
failedToLoadImage: "Error en carregar la imatge"
|
||||||
_fxs:
|
_fxs:
|
||||||
chromaticAberration: "Aberració cromàtica"
|
chromaticAberration: "Aberració cromàtica"
|
||||||
glitch: "Glitch"
|
glitch: "Glitch"
|
||||||
|
|||||||
@@ -1110,6 +1110,15 @@ information: "Informace"
|
|||||||
inMinutes: "Minut"
|
inMinutes: "Minut"
|
||||||
inDays: "Dnů"
|
inDays: "Dnů"
|
||||||
widgets: "Widgety"
|
widgets: "Widgety"
|
||||||
|
presets: "Předvolba"
|
||||||
|
_imageEditing:
|
||||||
|
_vars:
|
||||||
|
filename: "Název souboru"
|
||||||
|
_imageFrameEditor:
|
||||||
|
header: "Nadpis"
|
||||||
|
font: "Písmo"
|
||||||
|
fontSerif: "Serif"
|
||||||
|
fontSansSerif: "Sans Serif"
|
||||||
_chat:
|
_chat:
|
||||||
invitations: "Pozvat"
|
invitations: "Pozvat"
|
||||||
noHistory: "Žádná historie"
|
noHistory: "Žádná historie"
|
||||||
@@ -1822,6 +1831,9 @@ _postForm:
|
|||||||
replyPlaceholder: "Odpovědět na tuto poznámku..."
|
replyPlaceholder: "Odpovědět na tuto poznámku..."
|
||||||
quotePlaceholder: "Citovat tuto poznámku..."
|
quotePlaceholder: "Citovat tuto poznámku..."
|
||||||
channelPlaceholder: "Zveřejnit příspěvek do kanálu..."
|
channelPlaceholder: "Zveřejnit příspěvek do kanálu..."
|
||||||
|
_howToUse:
|
||||||
|
visibility_title: "Viditelnost"
|
||||||
|
menu_title: "Menu"
|
||||||
_placeholders:
|
_placeholders:
|
||||||
a: "Co máte v plánu?"
|
a: "Co máte v plánu?"
|
||||||
b: "Co se děje kolem vás?"
|
b: "Co se děje kolem vás?"
|
||||||
|
|||||||
@@ -83,6 +83,7 @@ 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?"
|
||||||
|
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"
|
||||||
@@ -1018,6 +1019,7 @@ 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."
|
||||||
windowMaximize: "Maximieren"
|
windowMaximize: "Maximieren"
|
||||||
windowMinimize: "Minimieren"
|
windowMinimize: "Minimieren"
|
||||||
windowRestore: "Wiederherstellen"
|
windowRestore: "Wiederherstellen"
|
||||||
@@ -1054,6 +1056,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."
|
||||||
@@ -1243,6 +1246,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"
|
||||||
@@ -1370,7 +1374,22 @@ 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."
|
||||||
inMinutes: "Minute(n)"
|
inMinutes: "Minute(n)"
|
||||||
inDays: "Tag(en)"
|
inDays: "Tag(en)"
|
||||||
|
safeModeEnabled: "Der abgesicherte Modus ist aktiviert."
|
||||||
|
schedule: "Planen"
|
||||||
|
scheduled: "Geplant"
|
||||||
widgets: "Widgets"
|
widgets: "Widgets"
|
||||||
|
deviceInfo: "Geräteinformation"
|
||||||
|
youAreAdmin: "Sie sind ein Administrator"
|
||||||
|
presets: "Vorlage"
|
||||||
|
_imageEditing:
|
||||||
|
_vars:
|
||||||
|
filename: "Dateiname"
|
||||||
|
_imageFrameEditor:
|
||||||
|
header: "Kopfzeile"
|
||||||
|
font: "Schriftart"
|
||||||
|
fontSerif: "Serif"
|
||||||
|
fontSansSerif: "Sans Serif"
|
||||||
|
quitWithoutSaveConfirm: "Nicht gespeicherte Änderungen verwerfen?"
|
||||||
_order:
|
_order:
|
||||||
newest: "Neueste zuerst"
|
newest: "Neueste zuerst"
|
||||||
oldest: "Älteste zuerst"
|
oldest: "Älteste zuerst"
|
||||||
@@ -2480,6 +2499,9 @@ _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"
|
||||||
|
_howToUse:
|
||||||
|
visibility_title: "Sichtbarkeit"
|
||||||
|
menu_title: "Menü"
|
||||||
_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?"
|
||||||
|
|||||||
@@ -289,6 +289,9 @@ renotes: "Κοινοποίηση σημειώματος"
|
|||||||
postForm: "Φόρμα δημοσίευσης"
|
postForm: "Φόρμα δημοσίευσης"
|
||||||
information: "Πληροφορίες"
|
information: "Πληροφορίες"
|
||||||
widgets: "Μαραφέτια"
|
widgets: "Μαραφέτια"
|
||||||
|
_imageEditing:
|
||||||
|
_vars:
|
||||||
|
filename: "Όνομα αρχείου"
|
||||||
_chat:
|
_chat:
|
||||||
members: "Μέλη"
|
members: "Μέλη"
|
||||||
home: "Κεντρικό"
|
home: "Κεντρικό"
|
||||||
|
|||||||
@@ -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"
|
||||||
@@ -302,6 +304,7 @@ uploadFromUrlMayTakeTime: "It may take some time until the upload is complete."
|
|||||||
uploadNFiles: "Upload {n} files"
|
uploadNFiles: "Upload {n} files"
|
||||||
explore: "Explore"
|
explore: "Explore"
|
||||||
messageRead: "Read"
|
messageRead: "Read"
|
||||||
|
readAllChatMessages: "Mark all messages as read"
|
||||||
noMoreHistory: "There is no further history"
|
noMoreHistory: "There is no further history"
|
||||||
startChat: "Start chat"
|
startChat: "Start chat"
|
||||||
nUsersRead: "read by {n}"
|
nUsersRead: "read by {n}"
|
||||||
@@ -1022,6 +1025,9 @@ pushNotificationAlreadySubscribed: "Push notifications are already enabled"
|
|||||||
pushNotificationNotSupported: "Your browser or instance does not support push notifications"
|
pushNotificationNotSupported: "Your browser or instance does not support push notifications"
|
||||||
sendPushNotificationReadMessage: "Delete push notifications once they have been read"
|
sendPushNotificationReadMessage: "Delete push notifications once they have been read"
|
||||||
sendPushNotificationReadMessageCaption: "This may increase the power consumption of your device."
|
sendPushNotificationReadMessageCaption: "This may increase the power consumption of your device."
|
||||||
|
pleaseAllowPushNotification: "Please enable push notifications in your browser"
|
||||||
|
browserPushNotificationDisabled: "Failed to acquire permission to send notifications"
|
||||||
|
browserPushNotificationDisabledDescription: "You do not have permission to send notifications from {serverName}. Please allow notifications in your browser settings and try again."
|
||||||
windowMaximize: "Maximize"
|
windowMaximize: "Maximize"
|
||||||
windowMinimize: "Minimize"
|
windowMinimize: "Minimize"
|
||||||
windowRestore: "Restore"
|
windowRestore: "Restore"
|
||||||
@@ -1396,6 +1402,50 @@ scheduled: "Scheduled"
|
|||||||
widgets: "Widgets"
|
widgets: "Widgets"
|
||||||
deviceInfo: "Device information"
|
deviceInfo: "Device information"
|
||||||
deviceInfoDescription: "When making technical inquiries, including the following information may help resolve the issue."
|
deviceInfoDescription: "When making technical inquiries, including the following information may help resolve the issue."
|
||||||
|
youAreAdmin: "You are admin"
|
||||||
|
frame: "Frame"
|
||||||
|
presets: "Preset"
|
||||||
|
zeroPadding: "Zero padding"
|
||||||
|
_imageEditing:
|
||||||
|
_vars:
|
||||||
|
caption: "File caption"
|
||||||
|
filename: "Filename"
|
||||||
|
filename_without_ext: "Filename without extension"
|
||||||
|
year: "Year of photography"
|
||||||
|
month: "Month of photogrphy"
|
||||||
|
day: "Date of photography"
|
||||||
|
hour: "Time the photo was taken (hour)"
|
||||||
|
minute: "Time the photo was taken (minute)"
|
||||||
|
second: "Time the photo was taken (second)"
|
||||||
|
camera_model: "Camera Name"
|
||||||
|
camera_lens_model: "Lens model"
|
||||||
|
camera_mm: "Focal length"
|
||||||
|
camera_mm_35: "Focal length (in 35 mm format)"
|
||||||
|
camera_f: "Aperture (f-number)"
|
||||||
|
camera_s: "Shutter speed"
|
||||||
|
camera_iso: "ISO"
|
||||||
|
gps_lat: "Latitude"
|
||||||
|
gps_long: "Longitude"
|
||||||
|
_imageFrameEditor:
|
||||||
|
title: "Edit frame"
|
||||||
|
tip: "You can decorate images by adding labels that include frames and metadata."
|
||||||
|
header: "Header"
|
||||||
|
footer: "Footer"
|
||||||
|
borderThickness: "Frame width"
|
||||||
|
labelThickness: "Label width"
|
||||||
|
labelScale: "Label scale"
|
||||||
|
centered: "Centered"
|
||||||
|
captionMain: "Caption (Big)"
|
||||||
|
captionSub: "Caption (Small)"
|
||||||
|
availableVariables: "Supported variables"
|
||||||
|
withQrCode: "QR Code"
|
||||||
|
backgroundColor: "Background color"
|
||||||
|
textColor: "Text color"
|
||||||
|
font: "Font"
|
||||||
|
fontSerif: "Serif"
|
||||||
|
fontSansSerif: "Sans Serif"
|
||||||
|
quitWithoutSaveConfirm: "Discard unsaved changes?"
|
||||||
|
failedToLoadImage: "Failed to load image"
|
||||||
_compression:
|
_compression:
|
||||||
_quality:
|
_quality:
|
||||||
high: "High quality"
|
high: "High quality"
|
||||||
@@ -1498,6 +1548,8 @@ _settings:
|
|||||||
showUrlPreview: "Show URL preview"
|
showUrlPreview: "Show URL preview"
|
||||||
showAvailableReactionsFirstInNote: "Show available reactions at the top."
|
showAvailableReactionsFirstInNote: "Show available reactions at the top."
|
||||||
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."
|
||||||
|
enableAnimatedImages: "Enable animated images"
|
||||||
_chat:
|
_chat:
|
||||||
showSenderName: "Show sender's name"
|
showSenderName: "Show sender's name"
|
||||||
sendOnEnter: "Press Enter to send"
|
sendOnEnter: "Press Enter to send"
|
||||||
@@ -1506,6 +1558,8 @@ _preferencesProfile:
|
|||||||
profileNameDescription: "Set a name that identifies this device."
|
profileNameDescription: "Set a name that identifies this device."
|
||||||
profileNameDescription2: "Example: \"Main PC\", \"Smartphone\""
|
profileNameDescription2: "Example: \"Main PC\", \"Smartphone\""
|
||||||
manageProfiles: "Manage Profiles"
|
manageProfiles: "Manage Profiles"
|
||||||
|
shareSameProfileBetweenDevicesIsNotRecommended: "We do not recommend sharing the same profile across multiple devices."
|
||||||
|
useSyncBetweenDevicesOptionIfYouWantToSyncSetting: "If there are settings you wish to synchronize across multiple devices, enable the “Synchronize across multiple devices” option individually for each device."
|
||||||
_preferencesBackup:
|
_preferencesBackup:
|
||||||
autoBackup: "Auto backup"
|
autoBackup: "Auto backup"
|
||||||
restoreFromBackup: "Restore from backup"
|
restoreFromBackup: "Restore from backup"
|
||||||
@@ -1515,6 +1569,7 @@ _preferencesBackup:
|
|||||||
youNeedToNameYourProfileToEnableAutoBackup: "A profile name must be set to enable auto backup."
|
youNeedToNameYourProfileToEnableAutoBackup: "A profile name must be set to enable auto backup."
|
||||||
autoPreferencesBackupIsNotEnabledForThisDevice: "Settings auto backup is not enabled on this device."
|
autoPreferencesBackupIsNotEnabledForThisDevice: "Settings auto backup is not enabled on this device."
|
||||||
backupFound: "Settings backup is found"
|
backupFound: "Settings backup is found"
|
||||||
|
forceBackup: "Force a backup of settings"
|
||||||
_accountSettings:
|
_accountSettings:
|
||||||
requireSigninToViewContents: "Require sign-in to view contents"
|
requireSigninToViewContents: "Require sign-in to view contents"
|
||||||
requireSigninToViewContentsDescription1: "Require login to view all notes and other content you have created. This will have the effect of preventing crawlers from collecting your information."
|
requireSigninToViewContentsDescription1: "Require login to view all notes and other content you have created. This will have the effect of preventing crawlers from collecting your information."
|
||||||
@@ -2530,6 +2585,20 @@ _postForm:
|
|||||||
replyPlaceholder: "Reply to this note..."
|
replyPlaceholder: "Reply to this note..."
|
||||||
quotePlaceholder: "Quote this note..."
|
quotePlaceholder: "Quote this note..."
|
||||||
channelPlaceholder: "Post to a channel..."
|
channelPlaceholder: "Post to a channel..."
|
||||||
|
showHowToUse: "Show how to use this form"
|
||||||
|
_howToUse:
|
||||||
|
content_title: "Body"
|
||||||
|
content_description: "Enter the content you wish to post here."
|
||||||
|
toolbar_title: "Toolbars"
|
||||||
|
toolbar_description: "You can attach files or poll, add annotations or hashtags, and insert emojis or mentions."
|
||||||
|
account_title: "Account menu"
|
||||||
|
account_description: "You can switch between accounts for posting, or view a list of drafts and scheduled posts saved to your account."
|
||||||
|
visibility_title: "Visibility"
|
||||||
|
visibility_description: "You can configure the visibility of your notes."
|
||||||
|
menu_title: "Menu"
|
||||||
|
menu_description: "You can save current content to drafts, schedule posts, set reactions, and perform other actions."
|
||||||
|
submit_title: "Post button"
|
||||||
|
submit_description: "Post your notes by pressing this button. You can also post using Ctrl + Enter / Cmd + Enter."
|
||||||
_placeholders:
|
_placeholders:
|
||||||
a: "What are you up to?"
|
a: "What are you up to?"
|
||||||
b: "What's happening around you?"
|
b: "What's happening around you?"
|
||||||
@@ -2807,6 +2876,8 @@ _abuseReport:
|
|||||||
notifiedWebhook: "Webhook to use"
|
notifiedWebhook: "Webhook to use"
|
||||||
deleteConfirm: "Are you sure that you want to delete the notification recipient?"
|
deleteConfirm: "Are you sure that you want to delete the notification recipient?"
|
||||||
_moderationLogTypes:
|
_moderationLogTypes:
|
||||||
|
clearQueue: "Clear queue"
|
||||||
|
promoteQueue: "Promote queue"
|
||||||
createRole: "Role created"
|
createRole: "Role created"
|
||||||
deleteRole: "Role deleted"
|
deleteRole: "Role deleted"
|
||||||
updateRole: "Role updated"
|
updateRole: "Role updated"
|
||||||
@@ -3223,11 +3294,13 @@ _watermarkEditor:
|
|||||||
polkadotSubDotRadius: "Size of the secondary dot"
|
polkadotSubDotRadius: "Size of the secondary dot"
|
||||||
polkadotSubDotDivisions: "Number of sub-dots."
|
polkadotSubDotDivisions: "Number of sub-dots."
|
||||||
leaveBlankToAccountUrl: "Leave blank to use account URL"
|
leaveBlankToAccountUrl: "Leave blank to use account URL"
|
||||||
|
failedToLoadImage: "Failed to load image"
|
||||||
_imageEffector:
|
_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"
|
nothingToConfigure: "No configurable options available"
|
||||||
|
failedToLoadImage: "Failed to load image"
|
||||||
_fxs:
|
_fxs:
|
||||||
chromaticAberration: "Chromatic Aberration"
|
chromaticAberration: "Chromatic Aberration"
|
||||||
glitch: "Glitch"
|
glitch: "Glitch"
|
||||||
|
|||||||
+117
-44
@@ -5,7 +5,7 @@ introMisskey: "¡Bienvenido/a! Misskey es un servicio de microblogging descentra
|
|||||||
poweredByMisskeyDescription: "{name} es uno de los servicios (también llamado instancia) que usa la plataforma de código abierto <b>Misskey</b>"
|
poweredByMisskeyDescription: "{name} es uno de los servicios (también llamado instancia) que usa la plataforma de código abierto <b>Misskey</b>"
|
||||||
monthAndDay: "{day}/{month}"
|
monthAndDay: "{day}/{month}"
|
||||||
search: "Buscar"
|
search: "Buscar"
|
||||||
reset: "Reiniciar"
|
reset: "Restablecer"
|
||||||
notifications: "Notificaciones"
|
notifications: "Notificaciones"
|
||||||
username: "Nombre de usuario"
|
username: "Nombre de usuario"
|
||||||
password: "Contraseña"
|
password: "Contraseña"
|
||||||
@@ -43,7 +43,7 @@ favorite: "Añadir a favoritos"
|
|||||||
favorites: "Favoritos"
|
favorites: "Favoritos"
|
||||||
unfavorite: "Quitar de favoritos"
|
unfavorite: "Quitar de favoritos"
|
||||||
favorited: "Añadido a favoritos."
|
favorited: "Añadido a favoritos."
|
||||||
alreadyFavorited: "Ya había sido añadido a favoritos"
|
alreadyFavorited: "Ya añadido a favoritos."
|
||||||
cantFavorite: "No se puede añadir a favoritos."
|
cantFavorite: "No se puede añadir a favoritos."
|
||||||
pin: "Fijar al perfil"
|
pin: "Fijar al perfil"
|
||||||
unpin: "Desfijar"
|
unpin: "Desfijar"
|
||||||
@@ -83,11 +83,13 @@ files: "Archivos"
|
|||||||
download: "Descargar"
|
download: "Descargar"
|
||||||
driveFileDeleteConfirm: "¿Desea borrar el archivo \"{name}\"? Las notas que tengan este archivo como adjunto serán eliminadas"
|
driveFileDeleteConfirm: "¿Desea borrar el archivo \"{name}\"? Las notas que tengan este archivo como adjunto serán eliminadas"
|
||||||
unfollowConfirm: "¿Desea dejar de seguir a {name}?"
|
unfollowConfirm: "¿Desea dejar de seguir a {name}?"
|
||||||
|
cancelFollowRequestConfirm: "¿Desea cancelar su solicitud de seguimiento a {name}?"
|
||||||
|
rejectFollowRequestConfirm: "¿Desea rechazar la solicitud de seguimiento de {name}?"
|
||||||
exportRequested: "Has solicitado la exportación. Puede llevar un tiempo. Cuando termine la exportación, se añadirá al drive"
|
exportRequested: "Has solicitado la exportación. Puede llevar un tiempo. Cuando termine la exportación, se añadirá al drive"
|
||||||
importRequested: "Has solicitado la importación. Puede llevar un tiempo."
|
importRequested: "Has solicitado la importación. Puede llevar un tiempo."
|
||||||
lists: "Listas"
|
lists: "Listas"
|
||||||
noLists: "No tienes ninguna lista"
|
noLists: "No tienes ninguna lista"
|
||||||
note: "Notas"
|
note: "Nota"
|
||||||
notes: "Notas"
|
notes: "Notas"
|
||||||
following: "Siguiendo"
|
following: "Siguiendo"
|
||||||
followers: "Seguidores"
|
followers: "Seguidores"
|
||||||
@@ -126,10 +128,10 @@ pinnedNote: "Nota fijada"
|
|||||||
pinned: "Fijar al perfil"
|
pinned: "Fijar al perfil"
|
||||||
you: "Tú"
|
you: "Tú"
|
||||||
clickToShow: "Haz clic para verlo"
|
clickToShow: "Haz clic para verlo"
|
||||||
sensitive: "Marcado como sensible"
|
sensitive: "Marcado como sensible (NSFW)"
|
||||||
add: "Agregar"
|
add: "Agregar"
|
||||||
reaction: "Reacción"
|
reaction: "Reacción"
|
||||||
reactions: "Reacción"
|
reactions: "Reacciones"
|
||||||
emojiPicker: "Selector de emojis"
|
emojiPicker: "Selector de emojis"
|
||||||
pinnedEmojisForReactionSettingDescription: "Puedes seleccionar reacciones para fijarlos en el selector"
|
pinnedEmojisForReactionSettingDescription: "Puedes seleccionar reacciones para fijarlos en el selector"
|
||||||
pinnedEmojisSettingDescription: "Puedes seleccionar emojis para fijarlos en el selector"
|
pinnedEmojisSettingDescription: "Puedes seleccionar emojis para fijarlos en el selector"
|
||||||
@@ -141,7 +143,7 @@ rememberNoteVisibility: "Recordar visibilidad"
|
|||||||
attachCancel: "Quitar adjunto"
|
attachCancel: "Quitar adjunto"
|
||||||
deleteFile: "Eliminar archivo"
|
deleteFile: "Eliminar archivo"
|
||||||
markAsSensitive: "Marcar como sensible"
|
markAsSensitive: "Marcar como sensible"
|
||||||
unmarkAsSensitive: "Desmarcar como sensible"
|
unmarkAsSensitive: "No marcar como sensible"
|
||||||
enterFileName: "Introduce el nombre del archivo"
|
enterFileName: "Introduce el nombre del archivo"
|
||||||
mute: "Silenciar"
|
mute: "Silenciar"
|
||||||
unmute: "Dejar de silenciar"
|
unmute: "Dejar de silenciar"
|
||||||
@@ -251,7 +253,7 @@ noUsers: "No hay usuarios"
|
|||||||
editProfile: "Editar perfil"
|
editProfile: "Editar perfil"
|
||||||
noteDeleteConfirm: "¿Quieres borrar esta nota?"
|
noteDeleteConfirm: "¿Quieres borrar esta nota?"
|
||||||
pinLimitExceeded: "Ya no se pueden fijar más notas"
|
pinLimitExceeded: "Ya no se pueden fijar más notas"
|
||||||
done: "Terminado"
|
done: "Hecho"
|
||||||
processing: "Procesando..."
|
processing: "Procesando..."
|
||||||
preprocessing: "Preparando"
|
preprocessing: "Preparando"
|
||||||
preview: "Vista previa"
|
preview: "Vista previa"
|
||||||
@@ -302,6 +304,7 @@ uploadFromUrlMayTakeTime: "Subir el fichero puede tardar un tiempo."
|
|||||||
uploadNFiles: "Subir {n} archivos"
|
uploadNFiles: "Subir {n} archivos"
|
||||||
explore: "Explorar"
|
explore: "Explorar"
|
||||||
messageRead: "Ya leído"
|
messageRead: "Ya leído"
|
||||||
|
readAllChatMessages: "Marcar todos los mensajes como leídos"
|
||||||
noMoreHistory: "El historial se ha acabado"
|
noMoreHistory: "El historial se ha acabado"
|
||||||
startChat: "Nuevo Chat"
|
startChat: "Nuevo Chat"
|
||||||
nUsersRead: "Leído por {n} personas"
|
nUsersRead: "Leído por {n} personas"
|
||||||
@@ -316,10 +319,10 @@ remoteUserCaution: "Para el usuario remoto, la información está incompleta"
|
|||||||
activity: "Actividad"
|
activity: "Actividad"
|
||||||
images: "Imágenes"
|
images: "Imágenes"
|
||||||
image: "Imágenes"
|
image: "Imágenes"
|
||||||
birthday: "Fecha de nacimiento"
|
birthday: "Cumpleaños"
|
||||||
yearsOld: "{age} años"
|
yearsOld: "{age} años"
|
||||||
registeredDate: "Fecha de registro"
|
registeredDate: "Fecha de registro"
|
||||||
location: "Lugar"
|
location: "Ubicación"
|
||||||
theme: "Tema"
|
theme: "Tema"
|
||||||
themeForLightMode: "Tema para usar en Modo Linterna"
|
themeForLightMode: "Tema para usar en Modo Linterna"
|
||||||
themeForDarkMode: "Tema para usar en Modo Oscuro"
|
themeForDarkMode: "Tema para usar en Modo Oscuro"
|
||||||
@@ -350,7 +353,7 @@ emptyFolder: "La carpeta está vacía"
|
|||||||
dropHereToUpload: "Arrastra los archivos aquí para subirlos."
|
dropHereToUpload: "Arrastra los archivos aquí para subirlos."
|
||||||
unableToDelete: "No se puede borrar"
|
unableToDelete: "No se puede borrar"
|
||||||
inputNewFileName: "Ingrese un nuevo nombre de archivo"
|
inputNewFileName: "Ingrese un nuevo nombre de archivo"
|
||||||
inputNewDescription: "Ingrese nueva descripción"
|
inputNewDescription: "Introducir un nuevo texto alternativo"
|
||||||
inputNewFolderName: "Ingrese un nuevo nombre de la carpeta"
|
inputNewFolderName: "Ingrese un nuevo nombre de la carpeta"
|
||||||
circularReferenceFolder: "La carpeta de destino es una sub-carpeta de la carpeta que quieres mover."
|
circularReferenceFolder: "La carpeta de destino es una sub-carpeta de la carpeta que quieres mover."
|
||||||
hasChildFilesOrFolders: "No se puede borrar esta carpeta. No está vacía."
|
hasChildFilesOrFolders: "No se puede borrar esta carpeta. No está vacía."
|
||||||
@@ -576,7 +579,7 @@ objectStorageSetPublicRead: "Seleccionar \"public-read\" al subir "
|
|||||||
s3ForcePathStyleDesc: "Si s3ForcePathStyle esta habilitado el nombre del bucket debe ser especificado como parte de la URL en lugar del nombre de host en la URL. Puede ser necesario activar esta opción cuando se utilice, por ejemplo, Minio en un servidor propio."
|
s3ForcePathStyleDesc: "Si s3ForcePathStyle esta habilitado el nombre del bucket debe ser especificado como parte de la URL en lugar del nombre de host en la URL. Puede ser necesario activar esta opción cuando se utilice, por ejemplo, Minio en un servidor propio."
|
||||||
serverLogs: "Registros del servidor"
|
serverLogs: "Registros del servidor"
|
||||||
deleteAll: "Eliminar todos"
|
deleteAll: "Eliminar todos"
|
||||||
showFixedPostForm: "Mostrar el formulario de las entradas encima de la línea de tiempo"
|
showFixedPostForm: "Visualizar la ventana de publicación en la parte superior de la línea de tiempo."
|
||||||
showFixedPostFormInChannel: "Mostrar el formulario de publicación por encima de la cronología (Canales)"
|
showFixedPostFormInChannel: "Mostrar el formulario de publicación por encima de la cronología (Canales)"
|
||||||
withRepliesByDefaultForNewlyFollowed: "Incluir por defecto respuestas de usuarios recién seguidos en la línea de tiempo"
|
withRepliesByDefaultForNewlyFollowed: "Incluir por defecto respuestas de usuarios recién seguidos en la línea de tiempo"
|
||||||
newNoteRecived: "Tienes una nota nueva"
|
newNoteRecived: "Tienes una nota nueva"
|
||||||
@@ -703,7 +706,7 @@ userSaysSomethingAbout: "{name} dijo algo sobre {word}"
|
|||||||
makeActive: "Activar"
|
makeActive: "Activar"
|
||||||
display: "Apariencia"
|
display: "Apariencia"
|
||||||
copy: "Copiar"
|
copy: "Copiar"
|
||||||
copiedToClipboard: "Texto copiado al portapapeles"
|
copiedToClipboard: "Copiado al portapapeles"
|
||||||
metrics: "Métricas"
|
metrics: "Métricas"
|
||||||
overview: "Resumen"
|
overview: "Resumen"
|
||||||
logs: "Registros"
|
logs: "Registros"
|
||||||
@@ -712,7 +715,7 @@ database: "Base de datos"
|
|||||||
channel: "Canal"
|
channel: "Canal"
|
||||||
create: "Crear"
|
create: "Crear"
|
||||||
notificationSetting: "Ajustes de Notificaciones"
|
notificationSetting: "Ajustes de Notificaciones"
|
||||||
notificationSettingDesc: "Por favor elija el tipo de notificación a mostrar"
|
notificationSettingDesc: "Por favor elige el tipo de notificación a mostrar"
|
||||||
useGlobalSetting: "Usar ajustes globales"
|
useGlobalSetting: "Usar ajustes globales"
|
||||||
useGlobalSettingDesc: "Al activarse, se usará la configuración de notificaciones de la cuenta, al desactivarse se pueden hacer configuraciones particulares."
|
useGlobalSettingDesc: "Al activarse, se usará la configuración de notificaciones de la cuenta, al desactivarse se pueden hacer configuraciones particulares."
|
||||||
other: "Otro"
|
other: "Otro"
|
||||||
@@ -744,7 +747,7 @@ system: "Sistema"
|
|||||||
switchUi: "Cambiar interfaz de usuario"
|
switchUi: "Cambiar interfaz de usuario"
|
||||||
desktop: "Escritorio"
|
desktop: "Escritorio"
|
||||||
clip: "Clip"
|
clip: "Clip"
|
||||||
createNew: "Crear"
|
createNew: "Crear Nuevo"
|
||||||
optional: "Opcional"
|
optional: "Opcional"
|
||||||
createNewClip: "Crear clip nuevo"
|
createNewClip: "Crear clip nuevo"
|
||||||
unclip: "Quitar clip"
|
unclip: "Quitar clip"
|
||||||
@@ -841,7 +844,7 @@ jumpToSpecifiedDate: "Saltar a una fecha específica"
|
|||||||
showingPastTimeline: "Mostrar líneas de tiempo antiguas"
|
showingPastTimeline: "Mostrar líneas de tiempo antiguas"
|
||||||
clear: "Limpiar"
|
clear: "Limpiar"
|
||||||
markAllAsRead: "Marcar todo como leído"
|
markAllAsRead: "Marcar todo como leído"
|
||||||
goBack: "Deseleccionar"
|
goBack: "Anterior"
|
||||||
unlikeConfirm: "¿Quitar como favorito?"
|
unlikeConfirm: "¿Quitar como favorito?"
|
||||||
fullView: "Vista completa"
|
fullView: "Vista completa"
|
||||||
quitFullView: "quitar vista completa"
|
quitFullView: "quitar vista completa"
|
||||||
@@ -915,7 +918,7 @@ lastCommunication: "Última comunicación"
|
|||||||
resolved: "Resuelto"
|
resolved: "Resuelto"
|
||||||
unresolved: "Sin resolver"
|
unresolved: "Sin resolver"
|
||||||
breakFollow: "Eliminar seguidor"
|
breakFollow: "Eliminar seguidor"
|
||||||
breakFollowConfirm: "¿Quieres dejar de seguir?"
|
breakFollowConfirm: "¿De verdad quieres eliminar a este seguidor?"
|
||||||
itsOn: "¡Está encendido!"
|
itsOn: "¡Está encendido!"
|
||||||
itsOff: "¡Está apagado!"
|
itsOff: "¡Está apagado!"
|
||||||
on: "Activado"
|
on: "Activado"
|
||||||
@@ -985,7 +988,7 @@ typeToConfirm: "Ingrese {x} para confirmar"
|
|||||||
deleteAccount: "Borrar cuenta"
|
deleteAccount: "Borrar cuenta"
|
||||||
document: "Documento"
|
document: "Documento"
|
||||||
numberOfPageCache: "Cantidad de páginas cacheadas"
|
numberOfPageCache: "Cantidad de páginas cacheadas"
|
||||||
numberOfPageCacheDescription: "Al aumentar el número mejora la conveniencia pero tambien puede aumentar la carga y la memoria a usarse"
|
numberOfPageCacheDescription: "Al aumentar el número mejora la conveniencia pero también puede aumentar la carga y la memoria a usarse"
|
||||||
logoutConfirm: "¿Cerrar sesión?"
|
logoutConfirm: "¿Cerrar sesión?"
|
||||||
logoutWillClearClientData: "Al cerrar la sesión, la información de configuración del cliente se borra del navegador. Para garantizar que la información de configuración se pueda restaurar al volver a iniciar sesión, active la copia de seguridad automática de la configuración."
|
logoutWillClearClientData: "Al cerrar la sesión, la información de configuración del cliente se borra del navegador. Para garantizar que la información de configuración se pueda restaurar al volver a iniciar sesión, active la copia de seguridad automática de la configuración."
|
||||||
lastActiveDate: "Utilizado por última vez el"
|
lastActiveDate: "Utilizado por última vez el"
|
||||||
@@ -1022,6 +1025,9 @@ pushNotificationAlreadySubscribed: "Notificaciones emergentes ya activadas"
|
|||||||
pushNotificationNotSupported: "El navegador o la instancia no admiten notificaciones push"
|
pushNotificationNotSupported: "El navegador o la instancia no admiten notificaciones push"
|
||||||
sendPushNotificationReadMessage: "Eliminar las notificaciones push después de leer las notificaciones y los mensajes"
|
sendPushNotificationReadMessage: "Eliminar las notificaciones push después de leer las notificaciones y los mensajes"
|
||||||
sendPushNotificationReadMessageCaption: "La notificación \"{emptyPushNotificationMessage}\" aparecerá momentáneamente. Esto puede aumentar el consumo de batería del dispositivo."
|
sendPushNotificationReadMessageCaption: "La notificación \"{emptyPushNotificationMessage}\" aparecerá momentáneamente. Esto puede aumentar el consumo de batería del dispositivo."
|
||||||
|
pleaseAllowPushNotification: "Por favor, permita las notificaciones y la configuración del navegador."
|
||||||
|
browserPushNotificationDisabled: "No se ha podido obtener permiso para enviar notificaciones."
|
||||||
|
browserPushNotificationDisabledDescription: "No tienes permiso para enviar notificaciones desde {serverName}. Permite las notificaciones en la configuración de tu navegador y vuelve a intentarlo."
|
||||||
windowMaximize: "Maximizar"
|
windowMaximize: "Maximizar"
|
||||||
windowMinimize: "Minimizar"
|
windowMinimize: "Minimizar"
|
||||||
windowRestore: "Regresar"
|
windowRestore: "Regresar"
|
||||||
@@ -1153,7 +1159,7 @@ initialAccountSetting: "Configración inicial de su cuenta"
|
|||||||
youFollowing: "Siguiendo"
|
youFollowing: "Siguiendo"
|
||||||
preventAiLearning: "Rechazar el uso en el Aprendizaje de Máquinas. (IA Generativa)"
|
preventAiLearning: "Rechazar el uso en el Aprendizaje de Máquinas. (IA Generativa)"
|
||||||
preventAiLearningDescription: "Pedirle a las arañas (crawlers) no usar los textos publicados o imágenes en el aprendizaje automático (IA Predictiva / Generativa). Ésto se logra añadiendo una marca respuesta HTML con la cadena \"noai\" al cantenido. Una prevención total no podría lograrse sólo usando ésta marca, ya que puede ser simplemente ignorada."
|
preventAiLearningDescription: "Pedirle a las arañas (crawlers) no usar los textos publicados o imágenes en el aprendizaje automático (IA Predictiva / Generativa). Ésto se logra añadiendo una marca respuesta HTML con la cadena \"noai\" al cantenido. Una prevención total no podría lograrse sólo usando ésta marca, ya que puede ser simplemente ignorada."
|
||||||
options: "Opción"
|
options: "Opciones"
|
||||||
specifyUser: "Especificar usuario"
|
specifyUser: "Especificar usuario"
|
||||||
lookupConfirm: "¿Quiere informarse?"
|
lookupConfirm: "¿Quiere informarse?"
|
||||||
openTagPageConfirm: "¿Quieres abrir la página de etiquetas?"
|
openTagPageConfirm: "¿Quieres abrir la página de etiquetas?"
|
||||||
@@ -1197,8 +1203,8 @@ iHaveReadXCarefullyAndAgree: "He leído el texto {x} y estoy de acuerdo"
|
|||||||
dialog: "Diálogo"
|
dialog: "Diálogo"
|
||||||
icon: "Avatar"
|
icon: "Avatar"
|
||||||
forYou: "Para ti"
|
forYou: "Para ti"
|
||||||
currentAnnouncements: "Anuncios actuales"
|
currentAnnouncements: "Avisos actuales"
|
||||||
pastAnnouncements: "Anuncios anteriores"
|
pastAnnouncements: "Avisos anteriores"
|
||||||
youHaveUnreadAnnouncements: "Hay anuncios sin leer"
|
youHaveUnreadAnnouncements: "Hay anuncios sin leer"
|
||||||
useSecurityKey: "Por favor, sigue las instrucciones de tu dispositivo o navegador para usar tu clave de seguridad o tu clave de paso."
|
useSecurityKey: "Por favor, sigue las instrucciones de tu dispositivo o navegador para usar tu clave de seguridad o tu clave de paso."
|
||||||
replies: "Responder"
|
replies: "Responder"
|
||||||
@@ -1246,7 +1252,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"
|
||||||
@@ -1263,7 +1269,7 @@ addMfmFunction: "Añadir función MFM"
|
|||||||
enableQuickAddMfmFunction: "Activar acceso rápido para añadir funciones MFM"
|
enableQuickAddMfmFunction: "Activar acceso rápido para añadir funciones MFM"
|
||||||
bubbleGame: "Bubble Game"
|
bubbleGame: "Bubble Game"
|
||||||
sfx: "Efectos de sonido"
|
sfx: "Efectos de sonido"
|
||||||
soundWillBePlayed: "Se reproducirán efectos sonoros"
|
soundWillBePlayed: "Con música y efectos sonoros"
|
||||||
showReplay: "Ver reproducción"
|
showReplay: "Ver reproducción"
|
||||||
replay: "Reproducir"
|
replay: "Reproducir"
|
||||||
replaying: "Reproduciendo"
|
replaying: "Reproduciendo"
|
||||||
@@ -1350,7 +1356,7 @@ textCount: "caracteres"
|
|||||||
information: "Información"
|
information: "Información"
|
||||||
chat: "Chat"
|
chat: "Chat"
|
||||||
directMessage: "Chatear"
|
directMessage: "Chatear"
|
||||||
directMessage_short: "Mensaje"
|
directMessage_short: "Mensajes"
|
||||||
migrateOldSettings: "Migrar la configuración anterior"
|
migrateOldSettings: "Migrar la configuración anterior"
|
||||||
migrateOldSettings_description: "Esto debería hacerse automáticamente, pero si por alguna razón la migración no ha tenido éxito, puede activar usted mismo el proceso de migración manualmente. Se sobrescribirá la información de configuración actual."
|
migrateOldSettings_description: "Esto debería hacerse automáticamente, pero si por alguna razón la migración no ha tenido éxito, puede activar usted mismo el proceso de migración manualmente. Se sobrescribirá la información de configuración actual."
|
||||||
compress: "Compresión de la imagen"
|
compress: "Compresión de la imagen"
|
||||||
@@ -1390,12 +1396,56 @@ thankYouForTestingBeta: "¡Gracias por tu colaboración en la prueba de la versi
|
|||||||
createUserSpecifiedNote: "Mencionar al usuario (Nota Directa)"
|
createUserSpecifiedNote: "Mencionar al usuario (Nota Directa)"
|
||||||
schedulePost: "Programar una nota"
|
schedulePost: "Programar una nota"
|
||||||
scheduleToPostOnX: "Programar una nota para {x}"
|
scheduleToPostOnX: "Programar una nota para {x}"
|
||||||
scheduledToPostOnX: "La nota está programada para {x}."
|
scheduledToPostOnX: "La nota está programada para el {x}."
|
||||||
schedule: "Programado"
|
schedule: "Programar"
|
||||||
scheduled: "Programado"
|
scheduled: "Programado"
|
||||||
widgets: "Widgets"
|
widgets: "Widgets"
|
||||||
deviceInfo: "Información del dispositivo"
|
deviceInfo: "Información del dispositivo"
|
||||||
deviceInfoDescription: "Al realizar consultas técnicas, incluir la siguiente información puede ayudar a resolver el problema."
|
deviceInfoDescription: "Al realizar consultas técnicas, incluir la siguiente información puede ayudar a resolver el problema."
|
||||||
|
youAreAdmin: "Eres administrador."
|
||||||
|
frame: "Marco"
|
||||||
|
presets: "Predefinido"
|
||||||
|
zeroPadding: "Relleno cero"
|
||||||
|
_imageEditing:
|
||||||
|
_vars:
|
||||||
|
caption: "Título del archivo"
|
||||||
|
filename: "Nombre de archivo"
|
||||||
|
filename_without_ext: "Nombre del archivo sin la extensión"
|
||||||
|
year: "Año de rodaje"
|
||||||
|
month: "Mes de la fotografía"
|
||||||
|
day: "Día de la fotografía"
|
||||||
|
hour: "Hora"
|
||||||
|
minute: "Minuto"
|
||||||
|
second: "Segundo"
|
||||||
|
camera_model: "Nombre de la cámara"
|
||||||
|
camera_lens_model: "Modelo de lente"
|
||||||
|
camera_mm: "Distancia focal"
|
||||||
|
camera_mm_35: "Distancia Focal (Equivalente a formato de 35mm)"
|
||||||
|
camera_f: "Apertura de diafragma"
|
||||||
|
camera_s: "Velocidad de Obturación"
|
||||||
|
camera_iso: "Sensibilidad ISO"
|
||||||
|
gps_lat: "Latitud"
|
||||||
|
gps_long: "Longitud"
|
||||||
|
_imageFrameEditor:
|
||||||
|
title: "Edición de Fotos"
|
||||||
|
tip: "Decora tus imágenes con marcos y etiquetas que contengan metadatos."
|
||||||
|
header: "Título"
|
||||||
|
footer: "Pie de página"
|
||||||
|
borderThickness: "Ancho del borde"
|
||||||
|
labelThickness: "Ancho de la etiqueta"
|
||||||
|
labelScale: "Escala de la Etiqueta"
|
||||||
|
centered: "Alinear al centro"
|
||||||
|
captionMain: "Pie de foto (Grande)"
|
||||||
|
captionSub: "Pie de foto (Pequeño)"
|
||||||
|
availableVariables: "Variables disponibles"
|
||||||
|
withQrCode: "Código QR"
|
||||||
|
backgroundColor: "Color de fondo"
|
||||||
|
textColor: "Color del texto"
|
||||||
|
font: "Fuente"
|
||||||
|
fontSerif: "Serif"
|
||||||
|
fontSansSerif: "Sans Serif"
|
||||||
|
quitWithoutSaveConfirm: "¿Descartar cambios no guardados?"
|
||||||
|
failedToLoadImage: "Error al cargar la imagen"
|
||||||
_compression:
|
_compression:
|
||||||
_quality:
|
_quality:
|
||||||
high: "Calidad alta"
|
high: "Calidad alta"
|
||||||
@@ -1406,10 +1456,10 @@ _compression:
|
|||||||
medium: "Tamaño mediano"
|
medium: "Tamaño mediano"
|
||||||
small: "Tamaño pequeño"
|
small: "Tamaño pequeño"
|
||||||
_order:
|
_order:
|
||||||
newest: "Los más recientes primero"
|
newest: "Más reciente primero"
|
||||||
oldest: "Los más antiguos primero"
|
oldest: "Más antiguos primero"
|
||||||
_chat:
|
_chat:
|
||||||
messages: "Mensaje"
|
messages: "Mensajes"
|
||||||
noMessagesYet: "Aún no hay mensajes"
|
noMessagesYet: "Aún no hay mensajes"
|
||||||
newMessage: "Mensajes nuevos"
|
newMessage: "Mensajes nuevos"
|
||||||
individualChat: "Chat individual"
|
individualChat: "Chat individual"
|
||||||
@@ -1461,7 +1511,7 @@ _emojiPalette:
|
|||||||
palettes: "Paleta\n"
|
palettes: "Paleta\n"
|
||||||
enableSyncBetweenDevicesForPalettes: "Activar la sincronización de paletas entre dispositivos"
|
enableSyncBetweenDevicesForPalettes: "Activar la sincronización de paletas entre dispositivos"
|
||||||
paletteForMain: "Paleta principal"
|
paletteForMain: "Paleta principal"
|
||||||
paletteForReaction: "Paleta de reacción"
|
paletteForReaction: "Paleta utilizada para las reacciones"
|
||||||
_settings:
|
_settings:
|
||||||
driveBanner: "Puedes gestionar y configurar la unidad, comprobar su uso y configurar los ajustes de carga de archivos."
|
driveBanner: "Puedes gestionar y configurar la unidad, comprobar su uso y configurar los ajustes de carga de archivos."
|
||||||
pluginBanner: "Puedes ampliar las funciones del cliente con plugins. Puedes instalar plugins, configurarlos y gestionarlos individualmente."
|
pluginBanner: "Puedes ampliar las funciones del cliente con plugins. Puedes instalar plugins, configurarlos y gestionarlos individualmente."
|
||||||
@@ -1473,7 +1523,7 @@ _settings:
|
|||||||
accountData: "Datos de la cuenta"
|
accountData: "Datos de la cuenta"
|
||||||
accountDataBanner: "Exportación e importación para gestionar los datos de la cuenta."
|
accountDataBanner: "Exportación e importación para gestionar los datos de la cuenta."
|
||||||
muteAndBlockBanner: "Puedes configurar y gestionar ajustes para ocultar contenidos y restringir acciones a usuarios específicos."
|
muteAndBlockBanner: "Puedes configurar y gestionar ajustes para ocultar contenidos y restringir acciones a usuarios específicos."
|
||||||
accessibilityBanner: "Puedes personalizar los visuales y el comportamiento del cliente, y configurar los ajustes para optimizar el uso."
|
accessibilityBanner: "Puedes personalizar el aspecto y el comportamiento del cliente y configurar los ajustes para optimizar su uso."
|
||||||
privacyBanner: "Puedes configurar opciones relacionadas con la privacidad de la cuenta, como la visibilidad del contenido, la posibilidad de descubrir la cuenta y la aprobación de seguimiento."
|
privacyBanner: "Puedes configurar opciones relacionadas con la privacidad de la cuenta, como la visibilidad del contenido, la posibilidad de descubrir la cuenta y la aprobación de seguimiento."
|
||||||
securityBanner: "Puedes configurar opciones relacionadas con la seguridad de la cuenta, como la contraseña, los métodos de inicio de sesión, las aplicaciones de autenticación y Passkeys."
|
securityBanner: "Puedes configurar opciones relacionadas con la seguridad de la cuenta, como la contraseña, los métodos de inicio de sesión, las aplicaciones de autenticación y Passkeys."
|
||||||
preferencesBanner: "Puedes configurar el comportamiento general del cliente según tus preferencias."
|
preferencesBanner: "Puedes configurar el comportamiento general del cliente según tus preferencias."
|
||||||
@@ -1490,7 +1540,7 @@ _settings:
|
|||||||
ifOff: "Si está desactivado"
|
ifOff: "Si está desactivado"
|
||||||
enableSyncThemesBetweenDevices: "Sincronizar los temas instalados entre dispositivos."
|
enableSyncThemesBetweenDevices: "Sincronizar los temas instalados entre dispositivos."
|
||||||
enablePullToRefresh: "Tirar para actualizar"
|
enablePullToRefresh: "Tirar para actualizar"
|
||||||
enablePullToRefresh_description: "Si utiliza un ratón, arrastre mientras pulsa la rueda de desplazamiento."
|
enablePullToRefresh_description: "Si utilizas un ratón, arrastra mientras pulsas la rueda de desplazamiento."
|
||||||
realtimeMode_description: "Establece una conexión con el servidor y actualiza el contenido en tiempo real. Esto puede aumentar el tráfico y el consumo de memoria."
|
realtimeMode_description: "Establece una conexión con el servidor y actualiza el contenido en tiempo real. Esto puede aumentar el tráfico y el consumo de memoria."
|
||||||
contentsUpdateFrequency: "Frecuencia de adquisición del contenido."
|
contentsUpdateFrequency: "Frecuencia de adquisición del contenido."
|
||||||
contentsUpdateFrequency_description: "Cuanto mayor sea el valor, más se actualiza el contenido, pero disminuye el rendimiento y aumenta el tráfico y el consumo de memoria."
|
contentsUpdateFrequency_description: "Cuanto mayor sea el valor, más se actualiza el contenido, pero disminuye el rendimiento y aumenta el tráfico y el consumo de memoria."
|
||||||
@@ -1498,6 +1548,8 @@ _settings:
|
|||||||
showUrlPreview: "Mostrar la vista previa de la URL"
|
showUrlPreview: "Mostrar la vista previa de la URL"
|
||||||
showAvailableReactionsFirstInNote: "Mostrar las reacciones disponibles en la parte superior."
|
showAvailableReactionsFirstInNote: "Mostrar las reacciones disponibles en la parte superior."
|
||||||
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."
|
||||||
|
enableAnimatedImages: "Habilitar imágenes animadas"
|
||||||
_chat:
|
_chat:
|
||||||
showSenderName: "Mostrar el nombre del remitente"
|
showSenderName: "Mostrar el nombre del remitente"
|
||||||
sendOnEnter: "Intro para enviar"
|
sendOnEnter: "Intro para enviar"
|
||||||
@@ -1506,6 +1558,8 @@ _preferencesProfile:
|
|||||||
profileNameDescription: "Establece un nombre que identifique al dispositivo"
|
profileNameDescription: "Establece un nombre que identifique al dispositivo"
|
||||||
profileNameDescription2: "Por ejemplo: \"PC Principal\",\"Teléfono\""
|
profileNameDescription2: "Por ejemplo: \"PC Principal\",\"Teléfono\""
|
||||||
manageProfiles: "Administrar perfiles"
|
manageProfiles: "Administrar perfiles"
|
||||||
|
shareSameProfileBetweenDevicesIsNotRecommended: "No recomendamos compartir el mismo perfil en varios dispositivos."
|
||||||
|
useSyncBetweenDevicesOptionIfYouWantToSyncSetting: "Si hay ajustes que deseas sincronizar en varios dispositivos, activa la opción «Sincronizar en varios dispositivos» individualmente para cada uno de ellos."
|
||||||
_preferencesBackup:
|
_preferencesBackup:
|
||||||
autoBackup: "Respaldo automático"
|
autoBackup: "Respaldo automático"
|
||||||
restoreFromBackup: "Restaurar desde copia de seguridad"
|
restoreFromBackup: "Restaurar desde copia de seguridad"
|
||||||
@@ -1515,6 +1569,7 @@ _preferencesBackup:
|
|||||||
youNeedToNameYourProfileToEnableAutoBackup: "Se debe establecer un nombre de perfil para activar la copia de seguridad automática."
|
youNeedToNameYourProfileToEnableAutoBackup: "Se debe establecer un nombre de perfil para activar la copia de seguridad automática."
|
||||||
autoPreferencesBackupIsNotEnabledForThisDevice: "La copia de seguridad automática de los ajustes no está activada en este dispositivo."
|
autoPreferencesBackupIsNotEnabledForThisDevice: "La copia de seguridad automática de los ajustes no está activada en este dispositivo."
|
||||||
backupFound: "Copia de seguridad de los ajustes encontrada "
|
backupFound: "Copia de seguridad de los ajustes encontrada "
|
||||||
|
forceBackup: "Forzar una copia de seguridad de la configuración"
|
||||||
_accountSettings:
|
_accountSettings:
|
||||||
requireSigninToViewContents: "Se requiere iniciar sesión para ver el contenido"
|
requireSigninToViewContents: "Se requiere iniciar sesión para ver el contenido"
|
||||||
requireSigninToViewContentsDescription1: "Requiere iniciar sesión para ver todas las notas y otros contenidos que hayas creado. Se espera que esto evite que los rastreadores recopilen información."
|
requireSigninToViewContentsDescription1: "Requiere iniciar sesión para ver todas las notas y otros contenidos que hayas creado. Se espera que esto evite que los rastreadores recopilen información."
|
||||||
@@ -1552,7 +1607,7 @@ _bubbleGame:
|
|||||||
score: "Puntos"
|
score: "Puntos"
|
||||||
scoreYen: "Cantidad de dinero ganada"
|
scoreYen: "Cantidad de dinero ganada"
|
||||||
highScore: "Puntuación más alta"
|
highScore: "Puntuación más alta"
|
||||||
maxChain: "Número máximo de cadenas"
|
maxChain: "Número máximo de combos"
|
||||||
yen: "{yen} Yenes"
|
yen: "{yen} Yenes"
|
||||||
estimatedQty: "{qty} Piezas"
|
estimatedQty: "{qty} Piezas"
|
||||||
scoreSweets: "{onigiriQtyWithUnit} Onigiris"
|
scoreSweets: "{onigiriQtyWithUnit} Onigiris"
|
||||||
@@ -1630,7 +1685,7 @@ _initialTutorial:
|
|||||||
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. Sólo 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 pueden leer lo que escribes. Ten cuidado cuando envíes información sensible en notas directas en servidores 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)"
|
||||||
@@ -1986,7 +2041,7 @@ _role:
|
|||||||
isConditionalRole: "Esto es un rol condicional"
|
isConditionalRole: "Esto es un rol condicional"
|
||||||
isPublic: "Publicar rol"
|
isPublic: "Publicar rol"
|
||||||
descriptionOfIsPublic: "Cualquiera puede ver los usuarios asignados a este rol. También, el perfil del usuario mostrará este rol."
|
descriptionOfIsPublic: "Cualquiera puede ver los usuarios asignados a este rol. También, el perfil del usuario mostrará este rol."
|
||||||
options: "Opción"
|
options: "Opciones"
|
||||||
policies: "Política"
|
policies: "Política"
|
||||||
baseRole: "Rol base"
|
baseRole: "Rol base"
|
||||||
useBaseValue: "Usar los valores del rol base"
|
useBaseValue: "Usar los valores del rol base"
|
||||||
@@ -2097,11 +2152,11 @@ _accountDelete:
|
|||||||
accountDelete: "Eliminar Cuenta"
|
accountDelete: "Eliminar Cuenta"
|
||||||
mayTakeTime: "La eliminación de la cuenta es un proceso que precisa de carga. Puede pasar un tiempo hasta que se complete si es mucho el contenido creado y los archivos subidos."
|
mayTakeTime: "La eliminación de la cuenta es un proceso que precisa de carga. Puede pasar un tiempo hasta que se complete si es mucho el contenido creado y los archivos subidos."
|
||||||
sendEmail: "Cuando se termine de borrar la cuenta, se enviará un correo a la dirección usada para el registro."
|
sendEmail: "Cuando se termine de borrar la cuenta, se enviará un correo a la dirección usada para el registro."
|
||||||
requestAccountDelete: "Pedir la eliminación de la cuenta."
|
requestAccountDelete: "Solicitar la eliminación de la cuenta."
|
||||||
started: "El proceso de eliminación ha comenzado."
|
started: "El proceso de eliminación ha comenzado."
|
||||||
inProgress: "La eliminación está en proceso."
|
inProgress: "La eliminación está en proceso."
|
||||||
_ad:
|
_ad:
|
||||||
back: "Deseleccionar"
|
back: "Anterior"
|
||||||
reduceFrequencyOfThisAd: "Mostrar menos este anuncio."
|
reduceFrequencyOfThisAd: "Mostrar menos este anuncio."
|
||||||
hide: "No mostrar"
|
hide: "No mostrar"
|
||||||
timezoneinfo: "El día de la semana está determidado por la zona horaria del servidor."
|
timezoneinfo: "El día de la semana está determidado por la zona horaria del servidor."
|
||||||
@@ -2244,7 +2299,7 @@ _theme:
|
|||||||
indicator: "Indicador"
|
indicator: "Indicador"
|
||||||
panel: "Panel"
|
panel: "Panel"
|
||||||
shadow: "Sombra"
|
shadow: "Sombra"
|
||||||
header: "Cabezal"
|
header: "Título"
|
||||||
navBg: "Fondo de la barra lateral"
|
navBg: "Fondo de la barra lateral"
|
||||||
navFg: "Texto de la barra lateral"
|
navFg: "Texto de la barra lateral"
|
||||||
navActive: "Texto de la barra lateral (activo)"
|
navActive: "Texto de la barra lateral (activo)"
|
||||||
@@ -2470,7 +2525,7 @@ _widgets:
|
|||||||
digitalClock: "Reloj digital"
|
digitalClock: "Reloj digital"
|
||||||
unixClock: "Reloj UNIX"
|
unixClock: "Reloj UNIX"
|
||||||
federation: "Federación"
|
federation: "Federación"
|
||||||
instanceCloud: "Nube de palabras de la instancia"
|
instanceCloud: "Nube de Instancias Federadas"
|
||||||
postForm: "Formulario"
|
postForm: "Formulario"
|
||||||
slideshow: "Diapositivas"
|
slideshow: "Diapositivas"
|
||||||
button: "Botón"
|
button: "Botón"
|
||||||
@@ -2495,7 +2550,7 @@ _poll:
|
|||||||
noOnlyOneChoice: "Se necesitan al menos 2 opciones"
|
noOnlyOneChoice: "Se necesitan al menos 2 opciones"
|
||||||
choiceN: "Opción {n}"
|
choiceN: "Opción {n}"
|
||||||
noMore: "No se pueden agregar más"
|
noMore: "No se pueden agregar más"
|
||||||
canMultipleVote: "Permitir más de una respuesta"
|
canMultipleVote: "Permitir seleccionar varias opciones"
|
||||||
expiration: "Termina el"
|
expiration: "Termina el"
|
||||||
infinite: "Sin límite de tiempo"
|
infinite: "Sin límite de tiempo"
|
||||||
at: "Elegir fecha y hora"
|
at: "Elegir fecha y hora"
|
||||||
@@ -2530,6 +2585,20 @@ _postForm:
|
|||||||
replyPlaceholder: "Responder a esta nota"
|
replyPlaceholder: "Responder a esta nota"
|
||||||
quotePlaceholder: "Citar esta nota"
|
quotePlaceholder: "Citar esta nota"
|
||||||
channelPlaceholder: "Publicar en el canal"
|
channelPlaceholder: "Publicar en el canal"
|
||||||
|
showHowToUse: "Mostrar el tutorial de este formulario"
|
||||||
|
_howToUse:
|
||||||
|
content_title: "Cuerpo"
|
||||||
|
content_description: "Introduce aquí el contenido que deseas publicar."
|
||||||
|
toolbar_title: "Barras de herramientas"
|
||||||
|
toolbar_description: "Puedes adjuntar archivos o realizar encuestas, añadir anotaciones o hashtags e insertar emojis o menciones."
|
||||||
|
account_title: "Menú de la cuenta"
|
||||||
|
account_description: "Puedes cambiar entre cuentas para publicar o ver una lista de borradores y publicaciones programadas guardadas en tu cuenta."
|
||||||
|
visibility_title: "Visibilidad"
|
||||||
|
visibility_description: "Puedes configurar la visibilidad de tus notas."
|
||||||
|
menu_title: "Menú"
|
||||||
|
menu_description: "Puedes realizar otras acciones, como guardar borradores, programar publicaciones y configurar reacciones."
|
||||||
|
submit_title: "Botón de publicar"
|
||||||
|
submit_description: "Publica tus notas pulsando este botón. También puedes publicar utilizando Ctrl + Intro / Cmd + Intro."
|
||||||
_placeholders:
|
_placeholders:
|
||||||
a: "¿Qué haces?"
|
a: "¿Qué haces?"
|
||||||
b: "¿Te pasó algo?"
|
b: "¿Te pasó algo?"
|
||||||
@@ -2541,10 +2610,10 @@ _profile:
|
|||||||
name: "Nombre"
|
name: "Nombre"
|
||||||
username: "Nombre de usuario"
|
username: "Nombre de usuario"
|
||||||
description: "Descripción"
|
description: "Descripción"
|
||||||
youCanIncludeHashtags: "Puedes añadir hashtags"
|
youCanIncludeHashtags: "También puedes incluir hashtags en tu biografía"
|
||||||
metadata: "información adicional"
|
metadata: "información adicional"
|
||||||
metadataEdit: "Editar información adicional"
|
metadataEdit: "Editar información adicional"
|
||||||
metadataDescription: "Muestra la información adicional en el perfil"
|
metadataDescription: "Usando esto puedes mostrar campos de información adicionales en tu perfil."
|
||||||
metadataLabel: "Etiqueta"
|
metadataLabel: "Etiqueta"
|
||||||
metadataContent: "Contenido"
|
metadataContent: "Contenido"
|
||||||
changeAvatar: "Cambiar avatar"
|
changeAvatar: "Cambiar avatar"
|
||||||
@@ -2564,7 +2633,7 @@ _exportOrImport:
|
|||||||
userLists: "Listas"
|
userLists: "Listas"
|
||||||
excludeMutingUsers: "Excluir usuarios silenciados"
|
excludeMutingUsers: "Excluir usuarios silenciados"
|
||||||
excludeInactiveUsers: "Excluir usuarios inactivos"
|
excludeInactiveUsers: "Excluir usuarios inactivos"
|
||||||
withReplies: "Incluir respuestas de los usuarios importados en la línea de tiempo"
|
withReplies: "Si el archivo no incluye información sobre si las respuestas deben incluirse en la línea de tiempo, las respuestas realizadas por el importador deben incluirse en la línea de tiempo."
|
||||||
_charts:
|
_charts:
|
||||||
federation: "Federación"
|
federation: "Federación"
|
||||||
apRequest: "Pedidos"
|
apRequest: "Pedidos"
|
||||||
@@ -2702,7 +2771,7 @@ _notification:
|
|||||||
follow: "Siguiendo"
|
follow: "Siguiendo"
|
||||||
mention: "Menciones"
|
mention: "Menciones"
|
||||||
reply: "Respuestas"
|
reply: "Respuestas"
|
||||||
renote: "Renotar"
|
renote: "Renotas"
|
||||||
quote: "Citar"
|
quote: "Citar"
|
||||||
reaction: "Reacción"
|
reaction: "Reacción"
|
||||||
pollEnded: "La encuesta terminó"
|
pollEnded: "La encuesta terminó"
|
||||||
@@ -2807,6 +2876,8 @@ _abuseReport:
|
|||||||
notifiedWebhook: "Webhook a utilizar"
|
notifiedWebhook: "Webhook a utilizar"
|
||||||
deleteConfirm: "¿Estás seguro de que deseas borrar el destinatario del informe de moderación?"
|
deleteConfirm: "¿Estás seguro de que deseas borrar el destinatario del informe de moderación?"
|
||||||
_moderationLogTypes:
|
_moderationLogTypes:
|
||||||
|
clearQueue: "Borrar la cola de trabajos"
|
||||||
|
promoteQueue: "Reintentar el trabajo en la cola"
|
||||||
createRole: "Rol creado"
|
createRole: "Rol creado"
|
||||||
deleteRole: "Rol eliminado"
|
deleteRole: "Rol eliminado"
|
||||||
updateRole: "Rol actualizado"
|
updateRole: "Rol actualizado"
|
||||||
@@ -2959,7 +3030,7 @@ _reversi:
|
|||||||
loopedMap: "Mapa en bucle"
|
loopedMap: "Mapa en bucle"
|
||||||
canPutEverywhere: "Las fichas se pueden poner a cualquier lugar\n"
|
canPutEverywhere: "Las fichas se pueden poner a cualquier lugar\n"
|
||||||
timeLimitForEachTurn: "Tiempo límite por jugada."
|
timeLimitForEachTurn: "Tiempo límite por jugada."
|
||||||
freeMatch: "Partida libre."
|
freeMatch: "Partida libre"
|
||||||
lookingForPlayer: "Buscando oponente"
|
lookingForPlayer: "Buscando oponente"
|
||||||
gameCanceled: "La partida ha sido cancelada."
|
gameCanceled: "La partida ha sido cancelada."
|
||||||
shareToTlTheGameWhenStart: "Compartir la partida en la línea de tiempo cuando comience "
|
shareToTlTheGameWhenStart: "Compartir la partida en la línea de tiempo cuando comience "
|
||||||
@@ -3223,11 +3294,13 @@ _watermarkEditor:
|
|||||||
polkadotSubDotRadius: "Tamaño del círculo secundario."
|
polkadotSubDotRadius: "Tamaño del círculo secundario."
|
||||||
polkadotSubDotDivisions: "Número de subpuntos."
|
polkadotSubDotDivisions: "Número de subpuntos."
|
||||||
leaveBlankToAccountUrl: "Si dejas este campo en blanco, se utilizará la URL de tu cuenta."
|
leaveBlankToAccountUrl: "Si dejas este campo en blanco, se utilizará la URL de tu cuenta."
|
||||||
|
failedToLoadImage: "Error al cargar la imagen"
|
||||||
_imageEffector:
|
_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."
|
nothingToConfigure: "No hay opciones configurables disponibles."
|
||||||
|
failedToLoadImage: "Error al cargar la imagen"
|
||||||
_fxs:
|
_fxs:
|
||||||
chromaticAberration: "Aberración Cromática"
|
chromaticAberration: "Aberración Cromática"
|
||||||
glitch: "Glitch"
|
glitch: "Glitch"
|
||||||
|
|||||||
@@ -1274,6 +1274,15 @@ information: "Informations"
|
|||||||
inMinutes: "min"
|
inMinutes: "min"
|
||||||
inDays: "j"
|
inDays: "j"
|
||||||
widgets: "Widgets"
|
widgets: "Widgets"
|
||||||
|
presets: "Préréglage"
|
||||||
|
_imageEditing:
|
||||||
|
_vars:
|
||||||
|
filename: "Nom du fichier"
|
||||||
|
_imageFrameEditor:
|
||||||
|
header: "Entête"
|
||||||
|
font: "Police de caractères"
|
||||||
|
fontSerif: "Serif"
|
||||||
|
fontSansSerif: "Sans Serif"
|
||||||
_chat:
|
_chat:
|
||||||
invitations: "Inviter"
|
invitations: "Inviter"
|
||||||
noHistory: "Pas d'historique"
|
noHistory: "Pas d'historique"
|
||||||
@@ -2037,6 +2046,9 @@ _postForm:
|
|||||||
replyPlaceholder: "Répondre à cette note ..."
|
replyPlaceholder: "Répondre à cette note ..."
|
||||||
quotePlaceholder: "Citez cette note ..."
|
quotePlaceholder: "Citez cette note ..."
|
||||||
channelPlaceholder: "Publier au canal…"
|
channelPlaceholder: "Publier au canal…"
|
||||||
|
_howToUse:
|
||||||
|
visibility_title: "Visibilité"
|
||||||
|
menu_title: "Menu"
|
||||||
_placeholders:
|
_placeholders:
|
||||||
a: "Quoi de neuf ?"
|
a: "Quoi de neuf ?"
|
||||||
b: "Il s'est passé quelque chose ?"
|
b: "Il s'est passé quelque chose ?"
|
||||||
|
|||||||
@@ -1,232 +0,0 @@
|
|||||||
import * as fs from 'node:fs';
|
|
||||||
import { fileURLToPath } from 'node:url';
|
|
||||||
import { dirname } from 'node:path';
|
|
||||||
import * as yaml from 'js-yaml';
|
|
||||||
import ts from 'typescript';
|
|
||||||
|
|
||||||
const __filename = fileURLToPath(import.meta.url);
|
|
||||||
const __dirname = dirname(__filename);
|
|
||||||
const parameterRegExp = /\{(\w+)\}/g;
|
|
||||||
|
|
||||||
function createMemberType(item) {
|
|
||||||
if (typeof item !== 'string') {
|
|
||||||
return ts.factory.createTypeLiteralNode(createMembers(item));
|
|
||||||
}
|
|
||||||
const parameters = Array.from(
|
|
||||||
item.matchAll(parameterRegExp),
|
|
||||||
([, parameter]) => parameter,
|
|
||||||
);
|
|
||||||
return parameters.length
|
|
||||||
? ts.factory.createTypeReferenceNode(
|
|
||||||
ts.factory.createIdentifier('ParameterizedString'),
|
|
||||||
[
|
|
||||||
ts.factory.createUnionTypeNode(
|
|
||||||
parameters.map((parameter) =>
|
|
||||||
ts.factory.createStringLiteral(parameter),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
: ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword);
|
|
||||||
}
|
|
||||||
|
|
||||||
function createMembers(record) {
|
|
||||||
return Object.entries(record).map(([k, v]) => {
|
|
||||||
const node = ts.factory.createPropertySignature(
|
|
||||||
undefined,
|
|
||||||
ts.factory.createStringLiteral(k),
|
|
||||||
undefined,
|
|
||||||
createMemberType(v),
|
|
||||||
);
|
|
||||||
if (typeof v === 'string') {
|
|
||||||
ts.addSyntheticLeadingComment(
|
|
||||||
node,
|
|
||||||
ts.SyntaxKind.MultiLineCommentTrivia,
|
|
||||||
`*
|
|
||||||
* ${v.replace(/\n/g, '\n * ')}
|
|
||||||
`,
|
|
||||||
true,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return node;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
export default function generateDTS() {
|
|
||||||
const locale = yaml.load(fs.readFileSync(`${__dirname}/ja-JP.yml`, 'utf-8'));
|
|
||||||
const members = createMembers(locale);
|
|
||||||
const elements = [
|
|
||||||
ts.factory.createVariableStatement(
|
|
||||||
[ts.factory.createToken(ts.SyntaxKind.DeclareKeyword)],
|
|
||||||
ts.factory.createVariableDeclarationList(
|
|
||||||
[
|
|
||||||
ts.factory.createVariableDeclaration(
|
|
||||||
ts.factory.createIdentifier('kParameters'),
|
|
||||||
undefined,
|
|
||||||
ts.factory.createTypeOperatorNode(
|
|
||||||
ts.SyntaxKind.UniqueKeyword,
|
|
||||||
ts.factory.createKeywordTypeNode(ts.SyntaxKind.SymbolKeyword),
|
|
||||||
),
|
|
||||||
undefined,
|
|
||||||
),
|
|
||||||
],
|
|
||||||
ts.NodeFlags.Const,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
ts.factory.createTypeAliasDeclaration(
|
|
||||||
[ts.factory.createToken(ts.SyntaxKind.ExportKeyword)],
|
|
||||||
ts.factory.createIdentifier('ParameterizedString'),
|
|
||||||
[
|
|
||||||
ts.factory.createTypeParameterDeclaration(
|
|
||||||
undefined,
|
|
||||||
ts.factory.createIdentifier('T'),
|
|
||||||
ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),
|
|
||||||
ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
ts.factory.createIntersectionTypeNode([
|
|
||||||
ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),
|
|
||||||
ts.factory.createTypeLiteralNode([
|
|
||||||
ts.factory.createPropertySignature(
|
|
||||||
undefined,
|
|
||||||
ts.factory.createComputedPropertyName(
|
|
||||||
ts.factory.createIdentifier('kParameters'),
|
|
||||||
),
|
|
||||||
undefined,
|
|
||||||
ts.factory.createTypeReferenceNode(
|
|
||||||
ts.factory.createIdentifier('T'),
|
|
||||||
undefined,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
])
|
|
||||||
]),
|
|
||||||
),
|
|
||||||
ts.factory.createInterfaceDeclaration(
|
|
||||||
[ts.factory.createToken(ts.SyntaxKind.ExportKeyword)],
|
|
||||||
ts.factory.createIdentifier('ILocale'),
|
|
||||||
undefined,
|
|
||||||
undefined,
|
|
||||||
[
|
|
||||||
ts.factory.createIndexSignature(
|
|
||||||
undefined,
|
|
||||||
[
|
|
||||||
ts.factory.createParameterDeclaration(
|
|
||||||
undefined,
|
|
||||||
undefined,
|
|
||||||
ts.factory.createIdentifier('_'),
|
|
||||||
undefined,
|
|
||||||
ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),
|
|
||||||
undefined,
|
|
||||||
),
|
|
||||||
],
|
|
||||||
ts.factory.createUnionTypeNode([
|
|
||||||
ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),
|
|
||||||
ts.factory.createTypeReferenceNode(
|
|
||||||
ts.factory.createIdentifier('ParameterizedString'),
|
|
||||||
),
|
|
||||||
ts.factory.createTypeReferenceNode(
|
|
||||||
ts.factory.createIdentifier('ILocale'),
|
|
||||||
undefined,
|
|
||||||
),
|
|
||||||
]),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
ts.factory.createInterfaceDeclaration(
|
|
||||||
[ts.factory.createToken(ts.SyntaxKind.ExportKeyword)],
|
|
||||||
ts.factory.createIdentifier('Locale'),
|
|
||||||
undefined,
|
|
||||||
[
|
|
||||||
ts.factory.createHeritageClause(ts.SyntaxKind.ExtendsKeyword, [
|
|
||||||
ts.factory.createExpressionWithTypeArguments(
|
|
||||||
ts.factory.createIdentifier('ILocale'),
|
|
||||||
undefined,
|
|
||||||
),
|
|
||||||
]),
|
|
||||||
],
|
|
||||||
members,
|
|
||||||
),
|
|
||||||
ts.factory.createVariableStatement(
|
|
||||||
[ts.factory.createToken(ts.SyntaxKind.DeclareKeyword)],
|
|
||||||
ts.factory.createVariableDeclarationList(
|
|
||||||
[
|
|
||||||
ts.factory.createVariableDeclaration(
|
|
||||||
ts.factory.createIdentifier('locales'),
|
|
||||||
undefined,
|
|
||||||
ts.factory.createTypeLiteralNode([
|
|
||||||
ts.factory.createIndexSignature(
|
|
||||||
undefined,
|
|
||||||
[
|
|
||||||
ts.factory.createParameterDeclaration(
|
|
||||||
undefined,
|
|
||||||
undefined,
|
|
||||||
ts.factory.createIdentifier('lang'),
|
|
||||||
undefined,
|
|
||||||
ts.factory.createKeywordTypeNode(
|
|
||||||
ts.SyntaxKind.StringKeyword,
|
|
||||||
),
|
|
||||||
undefined,
|
|
||||||
),
|
|
||||||
],
|
|
||||||
ts.factory.createTypeReferenceNode(
|
|
||||||
ts.factory.createIdentifier('Locale'),
|
|
||||||
undefined,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
]),
|
|
||||||
undefined,
|
|
||||||
),
|
|
||||||
],
|
|
||||||
ts.NodeFlags.Const,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
ts.factory.createFunctionDeclaration(
|
|
||||||
[ts.factory.createModifier(ts.SyntaxKind.ExportKeyword)],
|
|
||||||
undefined,
|
|
||||||
ts.factory.createIdentifier('build'),
|
|
||||||
undefined,
|
|
||||||
[],
|
|
||||||
ts.factory.createTypeReferenceNode(
|
|
||||||
ts.factory.createIdentifier('Locale'),
|
|
||||||
undefined,
|
|
||||||
),
|
|
||||||
undefined,
|
|
||||||
),
|
|
||||||
ts.factory.createExportDefault(ts.factory.createIdentifier('locales')),
|
|
||||||
];
|
|
||||||
ts.addSyntheticLeadingComment(
|
|
||||||
elements[0],
|
|
||||||
ts.SyntaxKind.MultiLineCommentTrivia,
|
|
||||||
' eslint-disable ',
|
|
||||||
true,
|
|
||||||
);
|
|
||||||
ts.addSyntheticLeadingComment(
|
|
||||||
elements[0],
|
|
||||||
ts.SyntaxKind.SingleLineCommentTrivia,
|
|
||||||
' This file is generated by locales/generateDTS.js',
|
|
||||||
true,
|
|
||||||
);
|
|
||||||
ts.addSyntheticLeadingComment(
|
|
||||||
elements[0],
|
|
||||||
ts.SyntaxKind.SingleLineCommentTrivia,
|
|
||||||
' Do not edit this file directly.',
|
|
||||||
true,
|
|
||||||
);
|
|
||||||
const printed = ts
|
|
||||||
.createPrinter({
|
|
||||||
newLine: ts.NewLineKind.LineFeed,
|
|
||||||
})
|
|
||||||
.printList(
|
|
||||||
ts.ListFormat.MultiLine,
|
|
||||||
ts.factory.createNodeArray(elements),
|
|
||||||
ts.createSourceFile(
|
|
||||||
'index.d.ts',
|
|
||||||
'',
|
|
||||||
ts.ScriptTarget.ESNext,
|
|
||||||
true,
|
|
||||||
ts.ScriptKind.TS,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
fs.writeFileSync(`${__dirname}/index.d.ts`, printed, 'utf-8');
|
|
||||||
}
|
|
||||||
+15
-1
@@ -240,6 +240,8 @@ blockedInstances: "Instansi terblokir"
|
|||||||
blockedInstancesDescription: "Daftar nama host dari instansi yang diperlukan untuk diblokir. Instansi yang didaftarkan tidak akan dapat berkomunikasi dengan instansi ini."
|
blockedInstancesDescription: "Daftar nama host dari instansi yang diperlukan untuk diblokir. Instansi yang didaftarkan tidak akan dapat berkomunikasi dengan instansi ini."
|
||||||
silencedInstances: "Instansi yang disenyapkan"
|
silencedInstances: "Instansi yang disenyapkan"
|
||||||
silencedInstancesDescription: "Daftar nama host dari instansi yang ingin kamu senyapkan. Semua akun dari instansi yang terdaftar akan diperlakukan sebagai disenyapkan. Hal ini membuat akun hanya dapat membuat permintaan mengikuti, dan tidak dapat menyebutkan akun lokal apabila tidak mengikuti. Hal ini tidak akan mempengaruhi instansi yang diblokir."
|
silencedInstancesDescription: "Daftar nama host dari instansi yang ingin kamu senyapkan. Semua akun dari instansi yang terdaftar akan diperlakukan sebagai disenyapkan. Hal ini membuat akun hanya dapat membuat permintaan mengikuti, dan tidak dapat menyebutkan akun lokal apabila tidak mengikuti. Hal ini tidak akan mempengaruhi instansi yang diblokir."
|
||||||
|
mediaSilencedInstances: "Server dengan media dibisukan"
|
||||||
|
mediaSilencedInstancesDescription: "Masukkan host server yang medianya ingin Anda bisukan, pisahkan dengan baris baru. Semua berkas dari akun di server ini akan dianggap sebagai sensitif dan emoji kustom tidak akan tersedia. Ini tidak akan membengaruhi server yang diblokir."
|
||||||
federationAllowedHosts: "Server yang membolehkan federasi"
|
federationAllowedHosts: "Server yang membolehkan federasi"
|
||||||
muteAndBlock: "Bisukan / Blokir"
|
muteAndBlock: "Bisukan / Blokir"
|
||||||
mutedUsers: "Pengguna yang dibisukan"
|
mutedUsers: "Pengguna yang dibisukan"
|
||||||
@@ -398,7 +400,7 @@ enableHcaptcha: "Nyalakan hCaptcha"
|
|||||||
hcaptchaSiteKey: "Site Key"
|
hcaptchaSiteKey: "Site Key"
|
||||||
hcaptchaSecretKey: "Secret Key"
|
hcaptchaSecretKey: "Secret Key"
|
||||||
mcaptcha: "mCaptcha"
|
mcaptcha: "mCaptcha"
|
||||||
enableMcaptcha: "Nyalakan mCaptcha"
|
enableMcaptcha: ""
|
||||||
mcaptchaSiteKey: "Site key"
|
mcaptchaSiteKey: "Site key"
|
||||||
mcaptchaSecretKey: "Secret Key"
|
mcaptchaSecretKey: "Secret Key"
|
||||||
mcaptchaInstanceUrl: "URL instansi mCaptcha"
|
mcaptchaInstanceUrl: "URL instansi mCaptcha"
|
||||||
@@ -1288,6 +1290,15 @@ advice: "Saran"
|
|||||||
inMinutes: "menit"
|
inMinutes: "menit"
|
||||||
inDays: "hari"
|
inDays: "hari"
|
||||||
widgets: "Widget"
|
widgets: "Widget"
|
||||||
|
presets: "Prasetel"
|
||||||
|
_imageEditing:
|
||||||
|
_vars:
|
||||||
|
filename: "Nama berkas"
|
||||||
|
_imageFrameEditor:
|
||||||
|
header: "Header"
|
||||||
|
font: "Font"
|
||||||
|
fontSerif: "Serif"
|
||||||
|
fontSansSerif: "Sans-serif"
|
||||||
_chat:
|
_chat:
|
||||||
invitations: "Undang"
|
invitations: "Undang"
|
||||||
history: "Riwayat obrolan"
|
history: "Riwayat obrolan"
|
||||||
@@ -2240,6 +2251,9 @@ _postForm:
|
|||||||
replyPlaceholder: "Balas ke catatan ini..."
|
replyPlaceholder: "Balas ke catatan ini..."
|
||||||
quotePlaceholder: "Kutip catatan ini..."
|
quotePlaceholder: "Kutip catatan ini..."
|
||||||
channelPlaceholder: "Posting ke kanal"
|
channelPlaceholder: "Posting ke kanal"
|
||||||
|
_howToUse:
|
||||||
|
visibility_title: "Visibilitas"
|
||||||
|
menu_title: "Menu"
|
||||||
_placeholders:
|
_placeholders:
|
||||||
a: "Sedang apa kamu saat ini?"
|
a: "Sedang apa kamu saat ini?"
|
||||||
b: "Apa yang terjadi di sekitarmu?"
|
b: "Apa yang terjadi di sekitarmu?"
|
||||||
|
|||||||
@@ -1,93 +0,0 @@
|
|||||||
/**
|
|
||||||
* Languages Loader
|
|
||||||
*/
|
|
||||||
|
|
||||||
import * as fs from 'node:fs';
|
|
||||||
import * as yaml from 'js-yaml';
|
|
||||||
|
|
||||||
const merge = (...args) => args.reduce((a, c) => ({
|
|
||||||
...a,
|
|
||||||
...c,
|
|
||||||
...Object.entries(a)
|
|
||||||
.filter(([k]) => c && typeof c[k] === 'object')
|
|
||||||
.reduce((a, [k, v]) => (a[k] = merge(v, c[k]), a), {})
|
|
||||||
}), {});
|
|
||||||
|
|
||||||
const languages = [
|
|
||||||
'ar-SA',
|
|
||||||
'ca-ES',
|
|
||||||
'cs-CZ',
|
|
||||||
'da-DK',
|
|
||||||
'de-DE',
|
|
||||||
'en-US',
|
|
||||||
'es-ES',
|
|
||||||
'fr-FR',
|
|
||||||
'id-ID',
|
|
||||||
'it-IT',
|
|
||||||
'ja-JP',
|
|
||||||
'ja-KS',
|
|
||||||
'kab-KAB',
|
|
||||||
'kn-IN',
|
|
||||||
'ko-KR',
|
|
||||||
'nl-NL',
|
|
||||||
'no-NO',
|
|
||||||
'pl-PL',
|
|
||||||
'pt-PT',
|
|
||||||
'ru-RU',
|
|
||||||
'sk-SK',
|
|
||||||
'th-TH',
|
|
||||||
'tr-TR',
|
|
||||||
'ug-CN',
|
|
||||||
'uk-UA',
|
|
||||||
'vi-VN',
|
|
||||||
'zh-CN',
|
|
||||||
'zh-TW',
|
|
||||||
];
|
|
||||||
|
|
||||||
const primaries = {
|
|
||||||
'en': 'US',
|
|
||||||
'ja': 'JP',
|
|
||||||
'zh': 'CN',
|
|
||||||
};
|
|
||||||
|
|
||||||
// 何故か文字列にバックスペース文字が混入することがあり、YAMLが壊れるので取り除く
|
|
||||||
const clean = (text) => text.replace(new RegExp(String.fromCodePoint(0x08), 'g'), '');
|
|
||||||
|
|
||||||
export function build() {
|
|
||||||
// vitestの挙動を調整するため、一度ローカル変数化する必要がある
|
|
||||||
// https://github.com/vitest-dev/vitest/issues/3988#issuecomment-1686599577
|
|
||||||
// https://github.com/misskey-dev/misskey/pull/14057#issuecomment-2192833785
|
|
||||||
const metaUrl = import.meta.url;
|
|
||||||
const locales = languages.reduce((a, c) => (a[c] = yaml.load(clean(fs.readFileSync(new URL(`${c}.yml`, metaUrl), 'utf-8'))) || {}, a), {});
|
|
||||||
|
|
||||||
// 空文字列が入ることがあり、フォールバックが動作しなくなるのでプロパティごと消す
|
|
||||||
const removeEmpty = (obj) => {
|
|
||||||
for (const [k, v] of Object.entries(obj)) {
|
|
||||||
if (v === '') {
|
|
||||||
delete obj[k];
|
|
||||||
} else if (typeof v === 'object') {
|
|
||||||
removeEmpty(v);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return obj;
|
|
||||||
};
|
|
||||||
removeEmpty(locales);
|
|
||||||
|
|
||||||
return Object.entries(locales)
|
|
||||||
.reduce((a, [k, v]) => (a[k] = (() => {
|
|
||||||
const [lang] = k.split('-');
|
|
||||||
switch (k) {
|
|
||||||
case 'ja-JP': return v;
|
|
||||||
case 'ja-KS':
|
|
||||||
case 'en-US': return merge(locales['ja-JP'], v);
|
|
||||||
default: return merge(
|
|
||||||
locales['ja-JP'],
|
|
||||||
locales['en-US'],
|
|
||||||
locales[`${lang}-${primaries[lang]}`] ?? {},
|
|
||||||
v
|
|
||||||
);
|
|
||||||
}
|
|
||||||
})(), a), {});
|
|
||||||
}
|
|
||||||
|
|
||||||
export default build();
|
|
||||||
+111
-37
@@ -83,6 +83,8 @@ files: "Allegati"
|
|||||||
download: "Scarica"
|
download: "Scarica"
|
||||||
driveFileDeleteConfirm: "Vuoi davvero eliminare il file \"{name}\", e le Note a cui è stato allegato?"
|
driveFileDeleteConfirm: "Vuoi davvero eliminare il file \"{name}\", e le Note a cui è stato allegato?"
|
||||||
unfollowConfirm: "Vuoi davvero togliere il Following a {name}?"
|
unfollowConfirm: "Vuoi davvero togliere il Following a {name}?"
|
||||||
|
cancelFollowRequestConfirm: "Vuoi annullare la tua richiesta di follow inviata a {name}?"
|
||||||
|
rejectFollowRequestConfirm: "Vuoi rifiutare la richiesta di follow ricevuta da {name}?"
|
||||||
exportRequested: "Hai richiesto un'esportazione, e potrebbe volerci tempo. Quando sarà compiuta, il file verrà aggiunto direttamente al Drive."
|
exportRequested: "Hai richiesto un'esportazione, e potrebbe volerci tempo. Quando sarà compiuta, il file verrà aggiunto direttamente al Drive."
|
||||||
importRequested: "Hai richiesto un'importazione. Potrebbe richiedere un po' di tempo."
|
importRequested: "Hai richiesto un'importazione. Potrebbe richiedere un po' di tempo."
|
||||||
lists: "Liste"
|
lists: "Liste"
|
||||||
@@ -144,7 +146,7 @@ markAsSensitive: "Segna come esplicito"
|
|||||||
unmarkAsSensitive: "Non segnare come esplicito "
|
unmarkAsSensitive: "Non segnare come esplicito "
|
||||||
enterFileName: "Nome del file"
|
enterFileName: "Nome del file"
|
||||||
mute: "Silenziare"
|
mute: "Silenziare"
|
||||||
unmute: "Riattiva l'audio"
|
unmute: "Dai voce"
|
||||||
renoteMute: "Silenziare le Rinota"
|
renoteMute: "Silenziare le Rinota"
|
||||||
renoteUnmute: "Non silenziare le Rinota"
|
renoteUnmute: "Non silenziare le Rinota"
|
||||||
block: "Bloccare"
|
block: "Bloccare"
|
||||||
@@ -302,6 +304,7 @@ uploadFromUrlMayTakeTime: "Il caricamento del file può richiedere tempo."
|
|||||||
uploadNFiles: "Caricare {n} file singolarmente"
|
uploadNFiles: "Caricare {n} file singolarmente"
|
||||||
explore: "Esplora"
|
explore: "Esplora"
|
||||||
messageRead: "Visualizzato"
|
messageRead: "Visualizzato"
|
||||||
|
readAllChatMessages: "Segna tutti i messaggi come già letti"
|
||||||
noMoreHistory: "Non c'è più cronologia da visualizzare"
|
noMoreHistory: "Non c'è più cronologia da visualizzare"
|
||||||
startChat: "Inizia a chattare"
|
startChat: "Inizia a chattare"
|
||||||
nUsersRead: "Letto da {n} persone"
|
nUsersRead: "Letto da {n} persone"
|
||||||
@@ -525,7 +528,7 @@ style: "Stile"
|
|||||||
drawer: "Drawer"
|
drawer: "Drawer"
|
||||||
popup: "Popup"
|
popup: "Popup"
|
||||||
showNoteActionsOnlyHover: "Mostra le azioni delle Note solo al passaggio del mouse"
|
showNoteActionsOnlyHover: "Mostra le azioni delle Note solo al passaggio del mouse"
|
||||||
showReactionsCount: "Visualizza il numero di reazioni su una nota"
|
showReactionsCount: "Visualizza la quantità di reazioni su una nota"
|
||||||
noHistory: "Nessuna cronologia"
|
noHistory: "Nessuna cronologia"
|
||||||
signinHistory: "Storico degli accessi al profilo"
|
signinHistory: "Storico degli accessi al profilo"
|
||||||
enableAdvancedMfm: "Attivare i Misskey Flavoured Markdown (MFM) avanzati"
|
enableAdvancedMfm: "Attivare i Misskey Flavoured Markdown (MFM) avanzati"
|
||||||
@@ -690,16 +693,16 @@ emptyToDisableSmtpAuth: "Lasciare i campi vuoti se non c'è autenticazione SMTP"
|
|||||||
smtpSecure: "Usare SSL/TLS implicito per le connessioni SMTP"
|
smtpSecure: "Usare SSL/TLS implicito per le connessioni SMTP"
|
||||||
smtpSecureInfo: "Disabilitare quando è attivo STARTTLS."
|
smtpSecureInfo: "Disabilitare quando è attivo STARTTLS."
|
||||||
testEmail: "Verifica il funzionamento"
|
testEmail: "Verifica il funzionamento"
|
||||||
wordMute: "Filtri parole"
|
wordMute: "Parole silenziate"
|
||||||
wordMuteDescription: "Contrae le Note con la parola o la frase specificata. Permette di espandere le Note, cliccandole."
|
wordMuteDescription: "Comprimi le Note che hanno la parola o la regola specificata. Cliccale per espanderle e leggerne comunque il contenuto."
|
||||||
hardWordMute: "Filtro parole forte"
|
hardWordMute: "Filtro per parole"
|
||||||
showMutedWord: "Elenca le parole silenziate"
|
showMutedWord: "Elenca le parole silenziate"
|
||||||
hardWordMuteDescription: "Nasconde le Note con la parola o la frase specificata. A differenza delle parole silenziate, la Nota non verrà federata."
|
hardWordMuteDescription: "Ignora le Note con la parola o la regola specificata. A differenza delle \"Parole Silenziate\", queste Note non ti verranno proprio recapitate."
|
||||||
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 detto qualcosa"
|
||||||
userSaysSomethingAbout: "{name} ha Notato a riguardo di \"{word}\""
|
userSaysSomethingAbout: "{name} ha anNotato qualcosa su \"{word}\""
|
||||||
makeActive: "Attiva"
|
makeActive: "Attiva"
|
||||||
display: "Visualizza"
|
display: "Visualizza"
|
||||||
copy: "Copia"
|
copy: "Copia"
|
||||||
@@ -755,19 +758,19 @@ i18nInfo: "Misskey è tradotto in diverse lingue da volontari. Anche tu puoi con
|
|||||||
manageAccessTokens: "Gestisci token di accesso"
|
manageAccessTokens: "Gestisci token di accesso"
|
||||||
accountInfo: "Informazioni profilo"
|
accountInfo: "Informazioni profilo"
|
||||||
notesCount: "Conteggio note"
|
notesCount: "Conteggio note"
|
||||||
repliesCount: "Numero di risposte inviate"
|
repliesCount: "Quantità di risposte"
|
||||||
renotesCount: "Numero di note che hai ricondiviso"
|
renotesCount: "Quantità di Note ricondivise"
|
||||||
repliedCount: "Numero di risposte ricevute"
|
repliedCount: "Quantità di risposte"
|
||||||
renotedCount: "Numero delle tue note ricondivise"
|
renotedCount: "Quantità di tue Note ricondivise"
|
||||||
followingCount: "Numero di Following"
|
followingCount: "Quantità di Following"
|
||||||
followersCount: "Numero di profili che ti seguono"
|
followersCount: "Quantità di Follower"
|
||||||
sentReactionsCount: "Numero di reazioni inviate"
|
sentReactionsCount: "Quantità di reazioni"
|
||||||
receivedReactionsCount: "Numero di reazioni ricevute"
|
receivedReactionsCount: "Quantità di reazioni ricevute"
|
||||||
pollVotesCount: "Numero di voti inviati"
|
pollVotesCount: "Quantità di voti"
|
||||||
pollVotedCount: "Numero di voti ricevuti"
|
pollVotedCount: "Quantità di voti ricevuti"
|
||||||
yes: "Sì"
|
yes: "Sì"
|
||||||
no: "No"
|
no: "No"
|
||||||
driveFilesCount: "Numero di file nel Drive"
|
driveFilesCount: "Quantità di file nel Drive"
|
||||||
driveUsage: "Utilizzazione del Drive"
|
driveUsage: "Utilizzazione del Drive"
|
||||||
noCrawle: "Rifiuta l'indicizzazione dai robot."
|
noCrawle: "Rifiuta l'indicizzazione dai robot."
|
||||||
noCrawleDescription: "Richiedi che i motori di ricerca non indicizzino la tua pagina di profilo, le tue note, pagine, ecc."
|
noCrawleDescription: "Richiedi che i motori di ricerca non indicizzino la tua pagina di profilo, le tue note, pagine, ecc."
|
||||||
@@ -781,7 +784,7 @@ verificationEmailSent: "Una mail di verifica è stata inviata. Si prega di acced
|
|||||||
notSet: "Non impostato"
|
notSet: "Non impostato"
|
||||||
emailVerified: "Il tuo indirizzo email è stato verificato"
|
emailVerified: "Il tuo indirizzo email è stato verificato"
|
||||||
noteFavoritesCount: "Conteggio note tra i preferiti"
|
noteFavoritesCount: "Conteggio note tra i preferiti"
|
||||||
pageLikesCount: "Numero di pagine che ti piacciono"
|
pageLikesCount: "Quantità di pagine che ti piacciono"
|
||||||
pageLikedCount: "Numero delle tue pagine che hanno ricevuto \"Mi piace\""
|
pageLikedCount: "Numero delle tue pagine che hanno ricevuto \"Mi piace\""
|
||||||
contact: "Contatti"
|
contact: "Contatti"
|
||||||
useSystemFont: "Usa il carattere predefinito del sistema"
|
useSystemFont: "Usa il carattere predefinito del sistema"
|
||||||
@@ -826,9 +829,9 @@ currentVersion: "Versione attuale"
|
|||||||
latestVersion: "Ultima versione"
|
latestVersion: "Ultima versione"
|
||||||
youAreRunningUpToDateClient: "Stai usando la versione più recente del client."
|
youAreRunningUpToDateClient: "Stai usando la versione più recente del client."
|
||||||
newVersionOfClientAvailable: "Una nuova versione del tuo client è disponibile."
|
newVersionOfClientAvailable: "Una nuova versione del tuo client è disponibile."
|
||||||
usageAmount: "In uso"
|
usageAmount: "Quantità utilizzata"
|
||||||
capacity: "Capacità"
|
capacity: "Capacità"
|
||||||
inUse: "In uso"
|
inUse: "Usata da"
|
||||||
editCode: "Modifica codice"
|
editCode: "Modifica codice"
|
||||||
apply: "Applica"
|
apply: "Applica"
|
||||||
receiveAnnouncementFromInstance: "Ricevi i messaggi informativi dall'istanza"
|
receiveAnnouncementFromInstance: "Ricevi i messaggi informativi dall'istanza"
|
||||||
@@ -947,7 +950,7 @@ tablet: "Tablet"
|
|||||||
auto: "Automatico"
|
auto: "Automatico"
|
||||||
themeColor: "Colore del tema"
|
themeColor: "Colore del tema"
|
||||||
size: "Dimensioni"
|
size: "Dimensioni"
|
||||||
numberOfColumn: "Numero di colonne"
|
numberOfColumn: "Quantità di colonne"
|
||||||
searchByGoogle: "Cerca"
|
searchByGoogle: "Cerca"
|
||||||
instanceDefaultLightTheme: "Istanza, tema luminoso predefinito."
|
instanceDefaultLightTheme: "Istanza, tema luminoso predefinito."
|
||||||
instanceDefaultDarkTheme: "Istanza, tema scuro predefinito."
|
instanceDefaultDarkTheme: "Istanza, tema scuro predefinito."
|
||||||
@@ -984,7 +987,7 @@ isSystemAccount: "Si tratta di un profilo creato e gestito automaticamente dal s
|
|||||||
typeToConfirm: "Digita {x} per continuare"
|
typeToConfirm: "Digita {x} per continuare"
|
||||||
deleteAccount: "Eliminazione profilo"
|
deleteAccount: "Eliminazione profilo"
|
||||||
document: "Documentazione"
|
document: "Documentazione"
|
||||||
numberOfPageCache: "Numero di pagine cache"
|
numberOfPageCache: "Quantità di pagine in cache"
|
||||||
numberOfPageCacheDescription: "Aumenta l'usabilità, ma aumenta anche il carico e l'utilizzo della memoria."
|
numberOfPageCacheDescription: "Aumenta l'usabilità, ma aumenta anche il carico e l'utilizzo della memoria."
|
||||||
logoutConfirm: "Vuoi davvero uscire da Misskey? "
|
logoutConfirm: "Vuoi davvero uscire da Misskey? "
|
||||||
logoutWillClearClientData: "All'uscita, la configurazione del client viene rimossa dal browser. Per ripristinarla quando si effettua nuovamente l'accesso, abilitare il backup automatico."
|
logoutWillClearClientData: "All'uscita, la configurazione del client viene rimossa dal browser. Per ripristinarla quando si effettua nuovamente l'accesso, abilitare il backup automatico."
|
||||||
@@ -1022,6 +1025,9 @@ pushNotificationAlreadySubscribed: "Le notifiche push sono già attivate"
|
|||||||
pushNotificationNotSupported: "Il client o il server non supporta le notifiche push"
|
pushNotificationNotSupported: "Il client o il server non supporta le notifiche push"
|
||||||
sendPushNotificationReadMessage: "Eliminare le notifiche push dopo la relativa lettura"
|
sendPushNotificationReadMessage: "Eliminare le notifiche push dopo la relativa lettura"
|
||||||
sendPushNotificationReadMessageCaption: "Se possibile, verrà mostrata brevemente una notifica con il testo \"{emptyPushNotificationMessage}\". Potrebbe influire negativamente sulla durata della batteria."
|
sendPushNotificationReadMessageCaption: "Se possibile, verrà mostrata brevemente una notifica con il testo \"{emptyPushNotificationMessage}\". Potrebbe influire negativamente sulla durata della batteria."
|
||||||
|
pleaseAllowPushNotification: "Per favore, acconsenti alla ricezione di notifiche nel browser"
|
||||||
|
browserPushNotificationDisabled: "Non è stato possibile ottenere il consenso alla ricezione di notifche"
|
||||||
|
browserPushNotificationDisabledDescription: "Non hai concesso a {serverName} di spedire notifiche. Per favore, acconsenti alla ricezione nelle impostazioni del browser e riprova."
|
||||||
windowMaximize: "Ingrandisci"
|
windowMaximize: "Ingrandisci"
|
||||||
windowMinimize: "Contrai finestra"
|
windowMinimize: "Contrai finestra"
|
||||||
windowRestore: "Ripristina"
|
windowRestore: "Ripristina"
|
||||||
@@ -1032,7 +1038,7 @@ cannotLoad: "Caricamento impossibile"
|
|||||||
numberOfProfileView: "Visualizzazioni profilo"
|
numberOfProfileView: "Visualizzazioni profilo"
|
||||||
like: "Mi piace!"
|
like: "Mi piace!"
|
||||||
unlike: "Non mi piace"
|
unlike: "Non mi piace"
|
||||||
numberOfLikes: "Numero di Like"
|
numberOfLikes: "Quantità di Like"
|
||||||
show: "Visualizza"
|
show: "Visualizza"
|
||||||
neverShow: "Non mostrare più"
|
neverShow: "Non mostrare più"
|
||||||
remindMeLater: "Rimanda"
|
remindMeLater: "Rimanda"
|
||||||
@@ -1178,7 +1184,7 @@ createInviteCode: "Genera codice di invito"
|
|||||||
createWithOptions: "Genera con opzioni"
|
createWithOptions: "Genera con opzioni"
|
||||||
createCount: "Conteggio inviti"
|
createCount: "Conteggio inviti"
|
||||||
inviteCodeCreated: "Inviti generati"
|
inviteCodeCreated: "Inviti generati"
|
||||||
inviteLimitExceeded: "Hai raggiunto il numero massimo di codici invito generabili."
|
inviteLimitExceeded: "Hai raggiunto la quantità massima di codici invito generabili."
|
||||||
createLimitRemaining: "Inviti generabili: {limit} rimanenti"
|
createLimitRemaining: "Inviti generabili: {limit} rimanenti"
|
||||||
inviteLimitResetCycle: "Alle {time}, il limite verrà ripristinato a {limit}"
|
inviteLimitResetCycle: "Alle {time}, il limite verrà ripristinato a {limit}"
|
||||||
expirationDate: "Scadenza"
|
expirationDate: "Scadenza"
|
||||||
@@ -1346,7 +1352,7 @@ preferenceSyncConflictChoiceCancel: "Annulla la sincronizzazione"
|
|||||||
paste: "Incolla"
|
paste: "Incolla"
|
||||||
emojiPalette: "Tavolozza emoji"
|
emojiPalette: "Tavolozza emoji"
|
||||||
postForm: "Finestra di pubblicazione"
|
postForm: "Finestra di pubblicazione"
|
||||||
textCount: "Il numero di caratteri"
|
textCount: "Quantità di caratteri"
|
||||||
information: "Informazioni"
|
information: "Informazioni"
|
||||||
chat: "Chat"
|
chat: "Chat"
|
||||||
directMessage: "Chattare insieme"
|
directMessage: "Chattare insieme"
|
||||||
@@ -1396,6 +1402,50 @@ scheduled: "Pianificata"
|
|||||||
widgets: "Riquadri"
|
widgets: "Riquadri"
|
||||||
deviceInfo: "Informazioni sul dispositivo"
|
deviceInfo: "Informazioni sul dispositivo"
|
||||||
deviceInfoDescription: "Se ci contatti per ricevere supporto tecnico, ti preghiamo di includere le seguenti informazioni per aiutarci a risolvere il tuo problema."
|
deviceInfoDescription: "Se ci contatti per ricevere supporto tecnico, ti preghiamo di includere le seguenti informazioni per aiutarci a risolvere il tuo problema."
|
||||||
|
youAreAdmin: "Sei un amministratore"
|
||||||
|
frame: "Cornice"
|
||||||
|
presets: "Preimpostato"
|
||||||
|
zeroPadding: "Al vivo"
|
||||||
|
_imageEditing:
|
||||||
|
_vars:
|
||||||
|
caption: "Didascalia dell'immagine"
|
||||||
|
filename: "Nome dell'allegato"
|
||||||
|
filename_without_ext: "Nome file senza estensione"
|
||||||
|
year: "Anno di scatto"
|
||||||
|
month: "Mese dello scatto"
|
||||||
|
day: "Giorno dello scatto"
|
||||||
|
hour: "Ora dello scatto"
|
||||||
|
minute: "Minuto dello scatto"
|
||||||
|
second: "Secondi dello scatto"
|
||||||
|
camera_model: "Modello di fotocamera"
|
||||||
|
camera_lens_model: "Modello della lente"
|
||||||
|
camera_mm: "Lunghezza focale"
|
||||||
|
camera_mm_35: "Lunghezza focale (equivalente a 35 mm)"
|
||||||
|
camera_f: "Diaframma"
|
||||||
|
camera_s: "Velocità otturatore"
|
||||||
|
camera_iso: "Sensibilità ISO"
|
||||||
|
gps_lat: "Latitudine"
|
||||||
|
gps_long: "Longitudine"
|
||||||
|
_imageFrameEditor:
|
||||||
|
title: "Modifica fotogramma"
|
||||||
|
tip: "Puoi decorare le immagini aggiungendo etichette con cornici e metadati."
|
||||||
|
header: "Intestazione"
|
||||||
|
footer: "Piè di pagina"
|
||||||
|
borderThickness: "Larghezza del bordo"
|
||||||
|
labelThickness: "Spessore etichetta"
|
||||||
|
labelScale: "Dimensione etichetta"
|
||||||
|
centered: "Allinea al centro"
|
||||||
|
captionMain: "Didascalia (grande)"
|
||||||
|
captionSub: "Didascalia (piccola)"
|
||||||
|
availableVariables: "Variabili disponibili"
|
||||||
|
withQrCode: "QR Code"
|
||||||
|
backgroundColor: "Colore dello sfondo"
|
||||||
|
textColor: "Colore del testo"
|
||||||
|
font: "Tipo di carattere"
|
||||||
|
fontSerif: "Serif"
|
||||||
|
fontSansSerif: "Sans serif"
|
||||||
|
quitWithoutSaveConfirm: "Uscire senza salvare?"
|
||||||
|
failedToLoadImage: "Impossibile caricare l'immagine"
|
||||||
_compression:
|
_compression:
|
||||||
_quality:
|
_quality:
|
||||||
high: "Alta qualità"
|
high: "Alta qualità"
|
||||||
@@ -1406,8 +1456,8 @@ _compression:
|
|||||||
medium: "Taglia media"
|
medium: "Taglia media"
|
||||||
small: "Taglia piccola"
|
small: "Taglia piccola"
|
||||||
_order:
|
_order:
|
||||||
newest: "Prima i più recenti"
|
newest: "Più recenti"
|
||||||
oldest: "Meno recenti prima"
|
oldest: "Meno recenti"
|
||||||
_chat:
|
_chat:
|
||||||
messages: "Messaggi"
|
messages: "Messaggi"
|
||||||
noMessagesYet: "Ancora nessun messaggio"
|
noMessagesYet: "Ancora nessun messaggio"
|
||||||
@@ -1498,6 +1548,8 @@ _settings:
|
|||||||
showUrlPreview: "Mostra anteprima dell'URL"
|
showUrlPreview: "Mostra anteprima dell'URL"
|
||||||
showAvailableReactionsFirstInNote: "Mostra le reazioni disponibili in alto"
|
showAvailableReactionsFirstInNote: "Mostra le reazioni disponibili in alto"
|
||||||
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."
|
||||||
|
enableAnimatedImages: "Attivare le immagini animate"
|
||||||
_chat:
|
_chat:
|
||||||
showSenderName: "Mostra il nome del mittente"
|
showSenderName: "Mostra il nome del mittente"
|
||||||
sendOnEnter: "Invio spedisce"
|
sendOnEnter: "Invio spedisce"
|
||||||
@@ -1506,6 +1558,8 @@ _preferencesProfile:
|
|||||||
profileNameDescription: "Impostare il nome che indentifica questo dispositivo."
|
profileNameDescription: "Impostare il nome che indentifica questo dispositivo."
|
||||||
profileNameDescription2: "Es: \"PC principale\" o \"Cellulare\""
|
profileNameDescription2: "Es: \"PC principale\" o \"Cellulare\""
|
||||||
manageProfiles: "Gestione profili"
|
manageProfiles: "Gestione profili"
|
||||||
|
shareSameProfileBetweenDevicesIsNotRecommended: "Si sconsiglia di condividere lo stesso profilo su più dispositivi."
|
||||||
|
useSyncBetweenDevicesOptionIfYouWantToSyncSetting: "Se intendi sincronizzare solo alcuni parametri di configurazione su più dispositivi, devi attivare l'opzione \"Sincronizzazione tra dispositivi\" per ogni parametro interessato."
|
||||||
_preferencesBackup:
|
_preferencesBackup:
|
||||||
autoBackup: "Backup automatico"
|
autoBackup: "Backup automatico"
|
||||||
restoreFromBackup: "Ripristinare da backup"
|
restoreFromBackup: "Ripristinare da backup"
|
||||||
@@ -1515,6 +1569,7 @@ _preferencesBackup:
|
|||||||
youNeedToNameYourProfileToEnableAutoBackup: "Per abilitare i backup automatici, è necessario indicare il nome del profilo."
|
youNeedToNameYourProfileToEnableAutoBackup: "Per abilitare i backup automatici, è necessario indicare il nome del profilo."
|
||||||
autoPreferencesBackupIsNotEnabledForThisDevice: "Su questo dispositivo non è stato attivato il backup automatico delle preferenze."
|
autoPreferencesBackupIsNotEnabledForThisDevice: "Su questo dispositivo non è stato attivato il backup automatico delle preferenze."
|
||||||
backupFound: "Esiste il Backup delle preferenze"
|
backupFound: "Esiste il Backup delle preferenze"
|
||||||
|
forceBackup: "Backup forzato delle impostazioni"
|
||||||
_accountSettings:
|
_accountSettings:
|
||||||
requireSigninToViewContents: "Per vedere il contenuto, è necessaria l'iscrizione"
|
requireSigninToViewContents: "Per vedere il contenuto, è necessaria l'iscrizione"
|
||||||
requireSigninToViewContentsDescription1: "Richiedere l'iscrizione per visualizzare tutte le Note e gli altri contenuti che hai creato. Probabilmente l'effetto è impedire la raccolta di informazioni da parte dei bot crawler."
|
requireSigninToViewContentsDescription1: "Richiedere l'iscrizione per visualizzare tutte le Note e gli altri contenuti che hai creato. Probabilmente l'effetto è impedire la raccolta di informazioni da parte dei bot crawler."
|
||||||
@@ -2297,13 +2352,13 @@ _ago:
|
|||||||
yearsAgo: "{n} anni fa"
|
yearsAgo: "{n} anni fa"
|
||||||
invalid: "Niente da visualizzare"
|
invalid: "Niente da visualizzare"
|
||||||
_timeIn:
|
_timeIn:
|
||||||
seconds: "Dopo {n} secondi"
|
seconds: "Tra {n} secondi"
|
||||||
minutes: "Dopo {n} minuti"
|
minutes: "Tra {n} minuti"
|
||||||
hours: "Dopo {n} ore"
|
hours: "Tra {n} ore"
|
||||||
days: "Dopo {n} giorni"
|
days: "Tra {n} giorni"
|
||||||
weeks: "Dopo {n} settimane"
|
weeks: "Tra {n} settimane"
|
||||||
months: "Dopo {n} mesi"
|
months: "Tra {n} mesi"
|
||||||
years: "Dopo {n} anni"
|
years: "Tra {n} anni"
|
||||||
_time:
|
_time:
|
||||||
second: "s"
|
second: "s"
|
||||||
minute: "min"
|
minute: "min"
|
||||||
@@ -2522,7 +2577,7 @@ _visibility:
|
|||||||
followersDescription: "Visibile solo ai tuoi follower"
|
followersDescription: "Visibile solo ai tuoi follower"
|
||||||
specified: "Nota diretta"
|
specified: "Nota diretta"
|
||||||
specifiedDescription: "Visibile solo ai profili menzionati"
|
specifiedDescription: "Visibile solo ai profili menzionati"
|
||||||
disableFederation: "Senza federazione"
|
disableFederation: "Gestisci la federazione"
|
||||||
disableFederationDescription: "Non spedire attività alle altre istanze remote"
|
disableFederationDescription: "Non spedire attività alle altre istanze remote"
|
||||||
_postForm:
|
_postForm:
|
||||||
quitInspiteOfThereAreUnuploadedFilesConfirm: "Alcuni file non sono stati caricati. Vuoi annullare l'operazione?"
|
quitInspiteOfThereAreUnuploadedFilesConfirm: "Alcuni file non sono stati caricati. Vuoi annullare l'operazione?"
|
||||||
@@ -2530,6 +2585,20 @@ _postForm:
|
|||||||
replyPlaceholder: "Rispondi a questa nota..."
|
replyPlaceholder: "Rispondi a questa nota..."
|
||||||
quotePlaceholder: "Cita questa nota..."
|
quotePlaceholder: "Cita questa nota..."
|
||||||
channelPlaceholder: "Pubblica sul canale..."
|
channelPlaceholder: "Pubblica sul canale..."
|
||||||
|
showHowToUse: "Mostra il tutorial"
|
||||||
|
_howToUse:
|
||||||
|
content_title: "Testo"
|
||||||
|
content_description: "Inserisci il contenuto che desideri pubblicare."
|
||||||
|
toolbar_title: "Barra degli Strumenti"
|
||||||
|
toolbar_description: "Puoi allegare file e sondaggi, aggiungere Note, hashtag, inserire emoji e menzioni."
|
||||||
|
account_title: "Menu profilo"
|
||||||
|
account_description: "Puoi cambiare il profilo col quale vuoi pubblicare, elencare bozze e pianificare le Note."
|
||||||
|
visibility_title: "Visibilità"
|
||||||
|
visibility_description: "Puoi impostare il grado di visibilità delle Note."
|
||||||
|
menu_title: "Menù"
|
||||||
|
menu_description: "Puoi svolgere varie azioni, come salvare in bozza, pianificare le annotazioni, regolare le reazioni ricevute e altro."
|
||||||
|
submit_title: "Bottone invia"
|
||||||
|
submit_description: "Pubblica la Nota. Funziona anche con \"Ctrl + Invio\", oppure \"Cmd + Invio\"."
|
||||||
_placeholders:
|
_placeholders:
|
||||||
a: "Come va?"
|
a: "Come va?"
|
||||||
b: "Hai qualcosa da raccontare? Inizia pure..."
|
b: "Hai qualcosa da raccontare? Inizia pure..."
|
||||||
@@ -2807,6 +2876,8 @@ _abuseReport:
|
|||||||
notifiedWebhook: "Webhook da usare"
|
notifiedWebhook: "Webhook da usare"
|
||||||
deleteConfirm: "Vuoi davvero rimuovere il destinatario della notifica?"
|
deleteConfirm: "Vuoi davvero rimuovere il destinatario della notifica?"
|
||||||
_moderationLogTypes:
|
_moderationLogTypes:
|
||||||
|
clearQueue: "Ha cancellato la coda di Attività"
|
||||||
|
promoteQueue: "Ripeti le attività in coda"
|
||||||
createRole: "Crea un Ruolo"
|
createRole: "Crea un Ruolo"
|
||||||
deleteRole: "Elimina un Ruolo"
|
deleteRole: "Elimina un Ruolo"
|
||||||
updateRole: "Modifica un ruolo"
|
updateRole: "Modifica un ruolo"
|
||||||
@@ -3121,7 +3192,7 @@ _bootErrors:
|
|||||||
_search:
|
_search:
|
||||||
searchScopeAll: "Tutte"
|
searchScopeAll: "Tutte"
|
||||||
searchScopeLocal: "Locale"
|
searchScopeLocal: "Locale"
|
||||||
searchScopeServer: "Specifiche del server"
|
searchScopeServer: "Server specifico"
|
||||||
searchScopeUser: "Profilo specifico"
|
searchScopeUser: "Profilo specifico"
|
||||||
pleaseEnterServerHost: "Inserire il nome host"
|
pleaseEnterServerHost: "Inserire il nome host"
|
||||||
pleaseSelectUser: "Per favore, seleziona un profilo"
|
pleaseSelectUser: "Per favore, seleziona un profilo"
|
||||||
@@ -3201,6 +3272,7 @@ _watermarkEditor:
|
|||||||
title: "Modifica la filigrana"
|
title: "Modifica la filigrana"
|
||||||
cover: "Coprire tutto"
|
cover: "Coprire tutto"
|
||||||
repeat: "Disposizione"
|
repeat: "Disposizione"
|
||||||
|
preserveBoundingRect: "Fai in modo da non eccedere durante la rotazione"
|
||||||
opacity: "Opacità"
|
opacity: "Opacità"
|
||||||
scale: "Dimensioni"
|
scale: "Dimensioni"
|
||||||
text: "Testo"
|
text: "Testo"
|
||||||
@@ -3222,11 +3294,13 @@ _watermarkEditor:
|
|||||||
polkadotSubDotRadius: "Dimensione del punto secondario"
|
polkadotSubDotRadius: "Dimensione del punto secondario"
|
||||||
polkadotSubDotDivisions: "Quantità di punti secondari"
|
polkadotSubDotDivisions: "Quantità di punti secondari"
|
||||||
leaveBlankToAccountUrl: "Il valore vuoto indica la URL dell'account"
|
leaveBlankToAccountUrl: "Il valore vuoto indica la URL dell'account"
|
||||||
|
failedToLoadImage: "Impossibile caricare l'immagine"
|
||||||
_imageEffector:
|
_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."
|
nothingToConfigure: "Nessuna impostazione configurabile."
|
||||||
|
failedToLoadImage: "Impossibile caricare l'immagine"
|
||||||
_fxs:
|
_fxs:
|
||||||
chromaticAberration: "Aberrazione cromatica"
|
chromaticAberration: "Aberrazione cromatica"
|
||||||
glitch: "Glitch"
|
glitch: "Glitch"
|
||||||
|
|||||||
+77
-2
@@ -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: "リスト"
|
||||||
@@ -182,7 +184,7 @@ flagAsCat: "にゃああああああああああああああ!!!!!!
|
|||||||
flagAsCatDescription: "にゃにゃにゃ??"
|
flagAsCatDescription: "にゃにゃにゃ??"
|
||||||
flagShowTimelineReplies: "タイムラインにノートへの返信を表示する"
|
flagShowTimelineReplies: "タイムラインにノートへの返信を表示する"
|
||||||
flagShowTimelineRepliesDescription: "オンにすると、タイムラインにユーザーのノート以外にもそのユーザーの他のノートへの返信を表示します。"
|
flagShowTimelineRepliesDescription: "オンにすると、タイムラインにユーザーのノート以外にもそのユーザーの他のノートへの返信を表示します。"
|
||||||
autoAcceptFollowed: "フォロー中ユーザーからのフォロリクを自動承認"
|
autoAcceptFollowed: "フォロー中ユーザーからのフォロー申請を自動承認"
|
||||||
addAccount: "アカウントを追加"
|
addAccount: "アカウントを追加"
|
||||||
reloadAccountsList: "アカウントリストの情報を更新"
|
reloadAccountsList: "アカウントリストの情報を更新"
|
||||||
loginFailed: "ログインに失敗しました"
|
loginFailed: "ログインに失敗しました"
|
||||||
@@ -302,6 +304,7 @@ uploadFromUrlMayTakeTime: "アップロードが完了するまで時間がか
|
|||||||
uploadNFiles: "{n}個のファイルをアップロード"
|
uploadNFiles: "{n}個のファイルをアップロード"
|
||||||
explore: "みつける"
|
explore: "みつける"
|
||||||
messageRead: "既読"
|
messageRead: "既読"
|
||||||
|
readAllChatMessages: "すべてのメッセージを既読にする"
|
||||||
noMoreHistory: "これより過去の履歴はありません"
|
noMoreHistory: "これより過去の履歴はありません"
|
||||||
startChat: "メッセージを送る"
|
startChat: "メッセージを送る"
|
||||||
nUsersRead: "{n}人が読みました"
|
nUsersRead: "{n}人が読みました"
|
||||||
@@ -1022,6 +1025,9 @@ pushNotificationAlreadySubscribed: "プッシュ通知は有効です"
|
|||||||
pushNotificationNotSupported: "ブラウザかサーバーがプッシュ通知に非対応"
|
pushNotificationNotSupported: "ブラウザかサーバーがプッシュ通知に非対応"
|
||||||
sendPushNotificationReadMessage: "通知が既読になったらプッシュ通知を削除する"
|
sendPushNotificationReadMessage: "通知が既読になったらプッシュ通知を削除する"
|
||||||
sendPushNotificationReadMessageCaption: "端末の電池消費量が増加する可能性があります。"
|
sendPushNotificationReadMessageCaption: "端末の電池消費量が増加する可能性があります。"
|
||||||
|
pleaseAllowPushNotification: "ブラウザの通知設定を許可してください"
|
||||||
|
browserPushNotificationDisabled: "通知の送信権限の取得に失敗しました"
|
||||||
|
browserPushNotificationDisabledDescription: "{serverName}から通知を送信する権限がありません。ブラウザの設定から通知を許可して再度お試しください。"
|
||||||
windowMaximize: "最大化"
|
windowMaximize: "最大化"
|
||||||
windowMinimize: "最小化"
|
windowMinimize: "最小化"
|
||||||
windowRestore: "元に戻す"
|
windowRestore: "元に戻す"
|
||||||
@@ -1396,6 +1402,52 @@ scheduled: "予約"
|
|||||||
widgets: "ウィジェット"
|
widgets: "ウィジェット"
|
||||||
deviceInfo: "デバイス情報"
|
deviceInfo: "デバイス情報"
|
||||||
deviceInfoDescription: "技術的なお問い合わせの際に、以下の情報を併記すると問題の解決に役立つことがあります。"
|
deviceInfoDescription: "技術的なお問い合わせの際に、以下の情報を併記すると問題の解決に役立つことがあります。"
|
||||||
|
youAreAdmin: "あなたは管理者です"
|
||||||
|
frame: "フレーム"
|
||||||
|
presets: "プリセット"
|
||||||
|
zeroPadding: "ゼロ埋め"
|
||||||
|
|
||||||
|
_imageEditing:
|
||||||
|
_vars:
|
||||||
|
caption: "ファイルのキャプション"
|
||||||
|
filename: "ファイル名"
|
||||||
|
filename_without_ext: "拡張子無しファイル名"
|
||||||
|
year: "撮影年"
|
||||||
|
month: "撮影月"
|
||||||
|
day: "撮影日"
|
||||||
|
hour: "撮影した時刻(時)"
|
||||||
|
minute: "撮影した時刻(分)"
|
||||||
|
second: "撮影した時刻(秒)"
|
||||||
|
camera_model: "カメラ名"
|
||||||
|
camera_lens_model: "レンズ名"
|
||||||
|
camera_mm: "焦点距離"
|
||||||
|
camera_mm_35: "焦点距離(35mm判換算)"
|
||||||
|
camera_f: "絞り"
|
||||||
|
camera_s: "シャッタースピード"
|
||||||
|
camera_iso: "ISO感度"
|
||||||
|
gps_lat: "緯度"
|
||||||
|
gps_long: "経度"
|
||||||
|
|
||||||
|
_imageFrameEditor:
|
||||||
|
title: "フレームの編集"
|
||||||
|
tip: "画像にフレームやメタデータを含んだラベルを追加して装飾できます。"
|
||||||
|
header: "ヘッダー"
|
||||||
|
footer: "フッター"
|
||||||
|
borderThickness: "フチの幅"
|
||||||
|
labelThickness: "ラベルの幅"
|
||||||
|
labelScale: "ラベルのスケール"
|
||||||
|
centered: "中央揃え"
|
||||||
|
captionMain: "キャプション(大)"
|
||||||
|
captionSub: "キャプション(小)"
|
||||||
|
availableVariables: "利用可能な変数"
|
||||||
|
withQrCode: "二次元コード"
|
||||||
|
backgroundColor: "背景色"
|
||||||
|
textColor: "文字色"
|
||||||
|
font: "フォント"
|
||||||
|
fontSerif: "セリフ"
|
||||||
|
fontSansSerif: "サンセリフ"
|
||||||
|
quitWithoutSaveConfirm: "保存せずに終了しますか?"
|
||||||
|
failedToLoadImage: "画像の読み込みに失敗しました"
|
||||||
|
|
||||||
_compression:
|
_compression:
|
||||||
_quality:
|
_quality:
|
||||||
@@ -1503,6 +1555,8 @@ _settings:
|
|||||||
showUrlPreview: "URLプレビューを表示する"
|
showUrlPreview: "URLプレビューを表示する"
|
||||||
showAvailableReactionsFirstInNote: "利用できるリアクションを先頭に表示"
|
showAvailableReactionsFirstInNote: "利用できるリアクションを先頭に表示"
|
||||||
showPageTabBarBottom: "ページのタブバーを下部に表示"
|
showPageTabBarBottom: "ページのタブバーを下部に表示"
|
||||||
|
emojiPaletteBanner: "絵文字ピッカーに固定表示するプリセットをパレットとして登録したり、ピッカーの表示方法をカスタマイズしたりできます。"
|
||||||
|
enableAnimatedImages: "アニメーション画像を有効にする"
|
||||||
|
|
||||||
_chat:
|
_chat:
|
||||||
showSenderName: "送信者の名前を表示"
|
showSenderName: "送信者の名前を表示"
|
||||||
@@ -1513,6 +1567,8 @@ _preferencesProfile:
|
|||||||
profileNameDescription: "このデバイスを識別する名前を設定してください。"
|
profileNameDescription: "このデバイスを識別する名前を設定してください。"
|
||||||
profileNameDescription2: "例: 「メインPC」、「スマホ」など"
|
profileNameDescription2: "例: 「メインPC」、「スマホ」など"
|
||||||
manageProfiles: "プロファイルの管理"
|
manageProfiles: "プロファイルの管理"
|
||||||
|
shareSameProfileBetweenDevicesIsNotRecommended: "複数のデバイスで同一のプロファイルを共有することは推奨しません。"
|
||||||
|
useSyncBetweenDevicesOptionIfYouWantToSyncSetting: "複数のデバイスで同期したい設定項目が存在する場合は、個別に「複数のデバイスで同期」オプションを有効にしてください。"
|
||||||
|
|
||||||
_preferencesBackup:
|
_preferencesBackup:
|
||||||
autoBackup: "自動バックアップ"
|
autoBackup: "自動バックアップ"
|
||||||
@@ -1523,6 +1579,7 @@ _preferencesBackup:
|
|||||||
youNeedToNameYourProfileToEnableAutoBackup: "自動バックアップを有効にするにはプロファイル名の設定が必要です。"
|
youNeedToNameYourProfileToEnableAutoBackup: "自動バックアップを有効にするにはプロファイル名の設定が必要です。"
|
||||||
autoPreferencesBackupIsNotEnabledForThisDevice: "このデバイスで設定の自動バックアップは有効になっていません。"
|
autoPreferencesBackupIsNotEnabledForThisDevice: "このデバイスで設定の自動バックアップは有効になっていません。"
|
||||||
backupFound: "設定のバックアップが見つかりました"
|
backupFound: "設定のバックアップが見つかりました"
|
||||||
|
forceBackup: "設定の強制バックアップ"
|
||||||
|
|
||||||
_accountSettings:
|
_accountSettings:
|
||||||
requireSigninToViewContents: "コンテンツの表示にログインを必須にする"
|
requireSigninToViewContents: "コンテンツの表示にログインを必須にする"
|
||||||
@@ -2589,6 +2646,20 @@ _postForm:
|
|||||||
replyPlaceholder: "このノートに返信..."
|
replyPlaceholder: "このノートに返信..."
|
||||||
quotePlaceholder: "このノートを引用..."
|
quotePlaceholder: "このノートを引用..."
|
||||||
channelPlaceholder: "チャンネルに投稿..."
|
channelPlaceholder: "チャンネルに投稿..."
|
||||||
|
showHowToUse: "フォームの説明を表示"
|
||||||
|
_howToUse:
|
||||||
|
content_title: "本文"
|
||||||
|
content_description: "投稿する内容を入力します。"
|
||||||
|
toolbar_title: "ツールバー"
|
||||||
|
toolbar_description: "ファイルやアンケートの添付、注釈やハッシュタグの設定、絵文字やメンションの挿入などが行えます。"
|
||||||
|
account_title: "アカウントメニュー"
|
||||||
|
account_description: "投稿するアカウントを切り替えたり、アカウントに保存した下書き・予約投稿を一覧できます。"
|
||||||
|
visibility_title: "公開範囲"
|
||||||
|
visibility_description: "ノートを公開する範囲の設定が行えます。"
|
||||||
|
menu_title: "メニュー"
|
||||||
|
menu_description: "下書きへの保存、投稿の予約、リアクションの設定など、その他のアクションが行えます。"
|
||||||
|
submit_title: "投稿ボタン"
|
||||||
|
submit_description: "ノートを投稿します。Ctrl + Enter / Cmd + Enter でも投稿できます。"
|
||||||
_placeholders:
|
_placeholders:
|
||||||
a: "いまどうしてる?"
|
a: "いまどうしてる?"
|
||||||
b: "何かありましたか?"
|
b: "何かありましたか?"
|
||||||
@@ -2886,6 +2957,8 @@ _abuseReport:
|
|||||||
deleteConfirm: "通知先を削除しますか?"
|
deleteConfirm: "通知先を削除しますか?"
|
||||||
|
|
||||||
_moderationLogTypes:
|
_moderationLogTypes:
|
||||||
|
clearQueue: "ジョブキューをクリア"
|
||||||
|
promoteQueue: "キューのジョブを再試行"
|
||||||
createRole: "ロールを作成"
|
createRole: "ロールを作成"
|
||||||
deleteRole: "ロールを削除"
|
deleteRole: "ロールを削除"
|
||||||
updateRole: "ロールを更新"
|
updateRole: "ロールを更新"
|
||||||
@@ -3298,7 +3371,7 @@ _userLists:
|
|||||||
watermark: "ウォーターマーク"
|
watermark: "ウォーターマーク"
|
||||||
defaultPreset: "デフォルトのプリセット"
|
defaultPreset: "デフォルトのプリセット"
|
||||||
_watermarkEditor:
|
_watermarkEditor:
|
||||||
tip: "画像にクレジット情報などのウォーターマークを追加することができます。"
|
tip: "画像にクレジット情報などのウォーターマークを追加できます。"
|
||||||
quitWithoutSaveConfirm: "保存せずに終了しますか?"
|
quitWithoutSaveConfirm: "保存せずに終了しますか?"
|
||||||
driveFileTypeWarn: "このファイルは対応していません"
|
driveFileTypeWarn: "このファイルは対応していません"
|
||||||
driveFileTypeWarnDescription: "画像ファイルを選択してください"
|
driveFileTypeWarnDescription: "画像ファイルを選択してください"
|
||||||
@@ -3327,12 +3400,14 @@ _watermarkEditor:
|
|||||||
polkadotSubDotRadius: "サブドットの大きさ"
|
polkadotSubDotRadius: "サブドットの大きさ"
|
||||||
polkadotSubDotDivisions: "サブドットの数"
|
polkadotSubDotDivisions: "サブドットの数"
|
||||||
leaveBlankToAccountUrl: "空欄にするとアカウントのURLになります"
|
leaveBlankToAccountUrl: "空欄にするとアカウントのURLになります"
|
||||||
|
failedToLoadImage: "画像の読み込みに失敗しました"
|
||||||
|
|
||||||
_imageEffector:
|
_imageEffector:
|
||||||
title: "エフェクト"
|
title: "エフェクト"
|
||||||
addEffect: "エフェクトを追加"
|
addEffect: "エフェクトを追加"
|
||||||
discardChangesConfirm: "変更を破棄して終了しますか?"
|
discardChangesConfirm: "変更を破棄して終了しますか?"
|
||||||
nothingToConfigure: "設定項目はありません"
|
nothingToConfigure: "設定項目はありません"
|
||||||
|
failedToLoadImage: "画像の読み込みに失敗しました"
|
||||||
|
|
||||||
_fxs:
|
_fxs:
|
||||||
chromaticAberration: "色収差"
|
chromaticAberration: "色収差"
|
||||||
|
|||||||
+73
-25
@@ -220,6 +220,7 @@ silenceThisInstance: "サーバーサイレンスすんで?"
|
|||||||
mediaSilenceThisInstance: "サーバーをメディアサイレンス"
|
mediaSilenceThisInstance: "サーバーをメディアサイレンス"
|
||||||
operations: "操作"
|
operations: "操作"
|
||||||
software: "ソフトウェア"
|
software: "ソフトウェア"
|
||||||
|
softwareName: "ソフトウェア名"
|
||||||
version: "バージョン"
|
version: "バージョン"
|
||||||
metadata: "メタデータ"
|
metadata: "メタデータ"
|
||||||
withNFiles: "{n}個のファイル"
|
withNFiles: "{n}個のファイル"
|
||||||
@@ -252,6 +253,7 @@ noteDeleteConfirm: "このノートをほかしてええか?"
|
|||||||
pinLimitExceeded: "これ以上ピン留めできひん"
|
pinLimitExceeded: "これ以上ピン留めできひん"
|
||||||
done: "でけた"
|
done: "でけた"
|
||||||
processing: "処理しとる"
|
processing: "処理しとる"
|
||||||
|
preprocessing: "準備中"
|
||||||
preview: "プレビュー"
|
preview: "プレビュー"
|
||||||
default: "デフォルト"
|
default: "デフォルト"
|
||||||
defaultValueIs: "デフォルト: {value}"
|
defaultValueIs: "デフォルト: {value}"
|
||||||
@@ -299,13 +301,14 @@ uploadFromUrlRequested: "アップロードしたい言うといたで"
|
|||||||
uploadFromUrlMayTakeTime: "アップロード終わるんにちょい時間かかるかもしれへんわ。"
|
uploadFromUrlMayTakeTime: "アップロード終わるんにちょい時間かかるかもしれへんわ。"
|
||||||
explore: "みつける"
|
explore: "みつける"
|
||||||
messageRead: "もう読んだ"
|
messageRead: "もう読んだ"
|
||||||
|
readAllChatMessages: "メッセージを全部読んだことにしとく"
|
||||||
noMoreHistory: "これより昔のんはあらへんで"
|
noMoreHistory: "これより昔のんはあらへんで"
|
||||||
startChat: "チャットを始めよか"
|
startChat: "チャットを始めよか"
|
||||||
nUsersRead: "{n}人が読んでもうた"
|
nUsersRead: "{n}人が読んでもうた"
|
||||||
agreeTo: "{0}に同意したで"
|
agreeTo: "{0}に同意したで"
|
||||||
agree: "せやな"
|
agree: "せやな"
|
||||||
agreeBelow: "下記に同意したる"
|
agreeBelow: "下記に同意するわ"
|
||||||
basicNotesBeforeCreateAccount: "よう読んでやってや"
|
basicNotesBeforeCreateAccount: "よう読んどいてや"
|
||||||
termsOfService: "使うための決め事"
|
termsOfService: "使うための決め事"
|
||||||
start: "始める"
|
start: "始める"
|
||||||
home: "ホーム"
|
home: "ホーム"
|
||||||
@@ -325,12 +328,13 @@ dark: "ダーク"
|
|||||||
lightThemes: "デイゲーム"
|
lightThemes: "デイゲーム"
|
||||||
darkThemes: "ナイトゲーム"
|
darkThemes: "ナイトゲーム"
|
||||||
syncDeviceDarkMode: "デバイスのダークモードと一緒にする"
|
syncDeviceDarkMode: "デバイスのダークモードと一緒にする"
|
||||||
switchDarkModeManuallyWhenSyncEnabledConfirm: "「{x}」がオンになってるで。同期をオフにして手動でモードを切り替えることにします?"
|
switchDarkModeManuallyWhenSyncEnabledConfirm: "「{x}」がオンになってるで。同期切って手動でモード切り替える?"
|
||||||
drive: "ドライブ"
|
drive: "ドライブ"
|
||||||
fileName: "ファイル名"
|
fileName: "ファイル名"
|
||||||
selectFile: "ファイル選んでや"
|
selectFile: "ファイル選んでや"
|
||||||
selectFiles: "ファイル選んでや"
|
selectFiles: "ファイル選んでや"
|
||||||
selectFolder: "フォルダ選んでや"
|
selectFolder: "フォルダ選んでや"
|
||||||
|
unselectFolder: "フォルダーの選択を解除"
|
||||||
selectFolders: "フォルダ選んでや"
|
selectFolders: "フォルダ選んでや"
|
||||||
fileNotSelected: "ファイルが選択されてへんで"
|
fileNotSelected: "ファイルが選択されてへんで"
|
||||||
renameFile: "ファイル名をいらう"
|
renameFile: "ファイル名をいらう"
|
||||||
@@ -421,14 +425,13 @@ antennaSource: "受信ソース(このソースは食われへん)"
|
|||||||
antennaKeywords: "受信キーワード"
|
antennaKeywords: "受信キーワード"
|
||||||
antennaExcludeKeywords: "除外キーワード"
|
antennaExcludeKeywords: "除外キーワード"
|
||||||
antennaExcludeBots: "Botアカウントを除外"
|
antennaExcludeBots: "Botアカウントを除外"
|
||||||
antennaKeywordsDescription: "スペースで区切ったるとAND指定で、改行で区切ったるとOR指定や"
|
antennaKeywordsDescription: "スペースで区切ったらAND指定で、改行で区切ったらOR指定や"
|
||||||
notifyAntenna: "新しいノートを通知すんで"
|
notifyAntenna: "新しいノートを通知すんで"
|
||||||
withFileAntenna: "なんか添付されたノートだけ"
|
withFileAntenna: "なんか添付されたノートだけ"
|
||||||
excludeNotesInSensitiveChannel: "センシティブなチャンネルのノートは入れんとくわ"
|
excludeNotesInSensitiveChannel: "センシティブなチャンネルのノートは入れんとくわ"
|
||||||
enableServiceworker: "ブラウザにプッシュ通知が行くようにする"
|
enableServiceworker: "ブラウザにプッシュ通知が行くようにする"
|
||||||
antennaUsersDescription: "ユーザー名を改行で区切ったってな"
|
antennaUsersDescription: "ユーザー名を改行で区切ったってな"
|
||||||
caseSensitive: "大文字と小文字は別もんや"
|
caseSensitive: "大文字と小文字は別もんや"
|
||||||
withReplies: "返信も入れたって"
|
|
||||||
connectedTo: "次のアカウントに繋がっとるで"
|
connectedTo: "次のアカウントに繋がっとるで"
|
||||||
notesAndReplies: "投稿と返信"
|
notesAndReplies: "投稿と返信"
|
||||||
withFiles: "ファイル付いとる"
|
withFiles: "ファイル付いとる"
|
||||||
@@ -471,9 +474,9 @@ newPasswordIs: "今度のパスワードは「{password}」や"
|
|||||||
reduceUiAnimation: "UIの動きやアニメーションを少なする"
|
reduceUiAnimation: "UIの動きやアニメーションを少なする"
|
||||||
share: "わけわけ"
|
share: "わけわけ"
|
||||||
notFound: "見つからへんね"
|
notFound: "見つからへんね"
|
||||||
notFoundDescription: "言われたURLにはまるページはなかったで。"
|
notFoundDescription: "言われたURLのページはなかったで。"
|
||||||
uploadFolder: "とりあえずアップロードしたやつ置いとく所"
|
uploadFolder: "とりあえずアップロードしたやつ置いとく所"
|
||||||
markAsReadAllNotifications: "通知はもう全て読んだわっ"
|
markAsReadAllNotifications: "通知はもう全部読んだわ"
|
||||||
markAsReadAllUnreadNotes: "投稿は全て読んだわっ"
|
markAsReadAllUnreadNotes: "投稿は全て読んだわっ"
|
||||||
markAsReadAllTalkMessages: "チャットはもうぜんぶ読んだわっ"
|
markAsReadAllTalkMessages: "チャットはもうぜんぶ読んだわっ"
|
||||||
help: "ヘルプ"
|
help: "ヘルプ"
|
||||||
@@ -554,7 +557,7 @@ showFeaturedNotesInTimeline: "タイムラインにおすすめのノートを
|
|||||||
objectStorage: "オブジェクトストレージ"
|
objectStorage: "オブジェクトストレージ"
|
||||||
useObjectStorage: "オブジェクトストレージを使う"
|
useObjectStorage: "オブジェクトストレージを使う"
|
||||||
objectStorageBaseUrl: "Base URL"
|
objectStorageBaseUrl: "Base URL"
|
||||||
objectStorageBaseUrlDesc: "参照に使うにURLやで。CDNやProxyを使用してるんならそのURL、S3: 'https://<bucket>.s3.amazonaws.com'、GCSとかなら: 'https://storage.googleapis.com/<bucket>'。"
|
objectStorageBaseUrlDesc: "参照に使うURLやで。CDNやProxyを使用してるんならそのURL、S3: 'https://<bucket>.s3.amazonaws.com'、GCSとかなら: 'https://storage.googleapis.com/<bucket>'。"
|
||||||
objectStorageBucket: "Bucket"
|
objectStorageBucket: "Bucket"
|
||||||
objectStorageBucketDesc: "使ってるサービスのbucket名を選んでな"
|
objectStorageBucketDesc: "使ってるサービスのbucket名を選んでな"
|
||||||
objectStoragePrefix: "Prefix"
|
objectStoragePrefix: "Prefix"
|
||||||
@@ -571,17 +574,19 @@ objectStorageSetPublicRead: "アップロードした時に'public-read'を設
|
|||||||
s3ForcePathStyleDesc: "s3ForcePathStyleを使たらバケット名をURLのホスト名やなくてパスの一部として必ず指定させるようになるで。セルフホストされたMinioとかを使うてるんやったら有効にせなあかん場合があるで。"
|
s3ForcePathStyleDesc: "s3ForcePathStyleを使たらバケット名をURLのホスト名やなくてパスの一部として必ず指定させるようになるで。セルフホストされたMinioとかを使うてるんやったら有効にせなあかん場合があるで。"
|
||||||
serverLogs: "サーバーログ"
|
serverLogs: "サーバーログ"
|
||||||
deleteAll: "全部ほかす"
|
deleteAll: "全部ほかす"
|
||||||
showFixedPostForm: "タイムラインの上の方で投稿できるようにやってくれへん?"
|
showFixedPostForm: "タイムラインの上の方で投稿できるようにするわ"
|
||||||
showFixedPostFormInChannel: "タイムラインの上の方で投稿できるようにするわ(チャンネル)"
|
showFixedPostFormInChannel: "タイムラインの上の方で投稿できるようにするわ(チャンネル)"
|
||||||
withRepliesByDefaultForNewlyFollowed: "フォローする時、デフォルトで返信をタイムラインに含むようにしよか"
|
withRepliesByDefaultForNewlyFollowed: "フォローする時、デフォルトで返信をタイムラインに含むようにしよか"
|
||||||
newNoteRecived: "新しいノートがあるで"
|
newNoteRecived: "新しいノートがあるで"
|
||||||
|
newNote: "新しいノートがあるで"
|
||||||
sounds: "音"
|
sounds: "音"
|
||||||
sound: "音"
|
sound: "音"
|
||||||
|
notificationSoundSettings: "通知音の設定"
|
||||||
listen: "聴く"
|
listen: "聴く"
|
||||||
none: "なし"
|
none: "なし"
|
||||||
showInPage: "ページで表示"
|
showInPage: "ページで表示"
|
||||||
popout: "ポップアウト"
|
popout: "ポップアウト"
|
||||||
volume: "やかましさ"
|
volume: "音のでかさ"
|
||||||
masterVolume: "全体のやかましさ"
|
masterVolume: "全体のやかましさ"
|
||||||
notUseSound: "音出さへん"
|
notUseSound: "音出さへん"
|
||||||
useSoundOnlyWhenActive: "Misskeyがアクティブなときだけ音出す"
|
useSoundOnlyWhenActive: "Misskeyがアクティブなときだけ音出す"
|
||||||
@@ -597,7 +602,7 @@ nothing: "あらへん"
|
|||||||
installedDate: "インストールした日時"
|
installedDate: "インストールした日時"
|
||||||
lastUsedDate: "最後に使った日時"
|
lastUsedDate: "最後に使った日時"
|
||||||
state: "状態"
|
state: "状態"
|
||||||
sort: "仕分ける"
|
sort: "並び替え"
|
||||||
ascendingOrder: "小さい順"
|
ascendingOrder: "小さい順"
|
||||||
descendingOrder: "大きい順"
|
descendingOrder: "大きい順"
|
||||||
scratchpad: "スクラッチパッド"
|
scratchpad: "スクラッチパッド"
|
||||||
@@ -657,9 +662,9 @@ useBlurEffectForModal: "モーダルにぼかし効果を使用"
|
|||||||
useFullReactionPicker: "フルフルのツッコミピッカーを使う"
|
useFullReactionPicker: "フルフルのツッコミピッカーを使う"
|
||||||
width: "幅"
|
width: "幅"
|
||||||
height: "高さ"
|
height: "高さ"
|
||||||
large: "大"
|
large: "でかい"
|
||||||
medium: "中"
|
medium: "ふつう"
|
||||||
small: "小"
|
small: "ちいさい"
|
||||||
generateAccessToken: "アクセストークンの発行"
|
generateAccessToken: "アクセストークンの発行"
|
||||||
permission: "権限"
|
permission: "権限"
|
||||||
adminPermission: "管理者権限"
|
adminPermission: "管理者権限"
|
||||||
@@ -684,7 +689,7 @@ smtpSecure: "SMTP 接続に暗黙的なSSL/TLSを使用する"
|
|||||||
smtpSecureInfo: "STARTTLS使っとる時はオフにしてや。"
|
smtpSecureInfo: "STARTTLS使っとる時はオフにしてや。"
|
||||||
testEmail: "配信テスト"
|
testEmail: "配信テスト"
|
||||||
wordMute: "ワードミュート"
|
wordMute: "ワードミュート"
|
||||||
wordMuteDescription: "指定した語句が入ってるノートを最小化するで。最小化されたノートをクリックしたら、表示できるようになるで。"
|
wordMuteDescription: "指定した語句が入ってるノートをちっさくするで。ちっさくなったノートをクリックしたら中身を見れるで。"
|
||||||
hardWordMute: "ハードワードミュート"
|
hardWordMute: "ハードワードミュート"
|
||||||
showMutedWord: "ミュートされたワードを表示するで"
|
showMutedWord: "ミュートされたワードを表示するで"
|
||||||
hardWordMuteDescription: "指定した語句が入ってるノートを隠すで。ワードミュートとちゃうて、ノートは完全に表示されんようになるで。"
|
hardWordMuteDescription: "指定した語句が入ってるノートを隠すで。ワードミュートとちゃうて、ノートは完全に表示されんようになるで。"
|
||||||
@@ -718,7 +723,7 @@ behavior: "動作"
|
|||||||
sample: "サンプル"
|
sample: "サンプル"
|
||||||
abuseReports: "通報"
|
abuseReports: "通報"
|
||||||
reportAbuse: "通報"
|
reportAbuse: "通報"
|
||||||
reportAbuseRenote: "リノート苦情だすで?"
|
reportAbuseRenote: "リノートの苦情出す"
|
||||||
reportAbuseOf: "{name}を通報する"
|
reportAbuseOf: "{name}を通報する"
|
||||||
fillAbuseReportDescription: "細かい通報理由を書いてなー。対象ノートがある時はそのURLも書いといてなー。"
|
fillAbuseReportDescription: "細かい通報理由を書いてなー。対象ノートがある時はそのURLも書いといてなー。"
|
||||||
abuseReported: "無事内容が送信されたみたいやで。おおきに〜。"
|
abuseReported: "無事内容が送信されたみたいやで。おおきに〜。"
|
||||||
@@ -768,6 +773,7 @@ lockedAccountInfo: "フォローを承認制にしとっても、ノートの公
|
|||||||
alwaysMarkSensitive: "デフォルトでメディアを閲覧注意にするで"
|
alwaysMarkSensitive: "デフォルトでメディアを閲覧注意にするで"
|
||||||
loadRawImages: "添付画像のサムネイルをオリジナル画質にするで"
|
loadRawImages: "添付画像のサムネイルをオリジナル画質にするで"
|
||||||
disableShowingAnimatedImages: "アニメーション画像を再生せんとくで"
|
disableShowingAnimatedImages: "アニメーション画像を再生せんとくで"
|
||||||
|
disableShowingAnimatedImages_caption: "この設定を変えてもアニメーション画像が再生されへん時は、ブラウザとかOSのアクセシビリティ設定とか省電力設定の方が悪さしてるかもしれへんで。"
|
||||||
highlightSensitiveMedia: "きわどいことをめっっちゃわかりやすくする"
|
highlightSensitiveMedia: "きわどいことをめっっちゃわかりやすくする"
|
||||||
verificationEmailSent: "無事確認のメールを送れたで。メールに書いてあるリンクにアクセスして、設定を完了してなー。"
|
verificationEmailSent: "無事確認のメールを送れたで。メールに書いてあるリンクにアクセスして、設定を完了してなー。"
|
||||||
notSet: "未設定"
|
notSet: "未設定"
|
||||||
@@ -877,7 +883,7 @@ startingperiod: "始めた期間"
|
|||||||
memo: "メモ"
|
memo: "メモ"
|
||||||
priority: "優先度"
|
priority: "優先度"
|
||||||
high: "高い"
|
high: "高い"
|
||||||
middle: "中"
|
middle: "ふつう"
|
||||||
low: "低い"
|
low: "低い"
|
||||||
emailNotConfiguredWarning: "メアドの設定がされてへんで。"
|
emailNotConfiguredWarning: "メアドの設定がされてへんで。"
|
||||||
ratio: "比率"
|
ratio: "比率"
|
||||||
@@ -1014,6 +1020,9 @@ pushNotificationAlreadySubscribed: "プッシュ通知はオンになってる
|
|||||||
pushNotificationNotSupported: "ブラウザかサーバーがプッシュ通知に対応してないみたいやで。"
|
pushNotificationNotSupported: "ブラウザかサーバーがプッシュ通知に対応してないみたいやで。"
|
||||||
sendPushNotificationReadMessage: "通知やメッセージが既読になったらプッシュ通知を消すで"
|
sendPushNotificationReadMessage: "通知やメッセージが既読になったらプッシュ通知を消すで"
|
||||||
sendPushNotificationReadMessageCaption: "あんたの端末の電池使う量が増えるかもしれん。"
|
sendPushNotificationReadMessageCaption: "あんたの端末の電池使う量が増えるかもしれん。"
|
||||||
|
pleaseAllowPushNotification: "ブラウザの通知設定を許可してな"
|
||||||
|
browserPushNotificationDisabled: "通知の送信権限が取れんかったわ"
|
||||||
|
browserPushNotificationDisabledDescription: "今 {serverName} から通知を送るための権限が無いから、ブラウザの設定で通知を許可してもっかい試してな。"
|
||||||
windowMaximize: "最大化"
|
windowMaximize: "最大化"
|
||||||
windowMinimize: "最小化"
|
windowMinimize: "最小化"
|
||||||
windowRestore: "元に戻す"
|
windowRestore: "元に戻す"
|
||||||
@@ -1050,6 +1059,7 @@ permissionDeniedError: "操作が拒否されてもうた。"
|
|||||||
permissionDeniedErrorDescription: "このアカウントはこれやったらアカンって。"
|
permissionDeniedErrorDescription: "このアカウントはこれやったらアカンって。"
|
||||||
preset: "プリセット"
|
preset: "プリセット"
|
||||||
selectFromPresets: "プリセットから選ぶ"
|
selectFromPresets: "プリセットから選ぶ"
|
||||||
|
custom: "カスタム"
|
||||||
achievements: "実績"
|
achievements: "実績"
|
||||||
gotInvalidResponseError: "サーバー黙っとるわ、知らんけど"
|
gotInvalidResponseError: "サーバー黙っとるわ、知らんけど"
|
||||||
gotInvalidResponseErrorDescription: "サーバーいま日曜日。またきて月曜日。"
|
gotInvalidResponseErrorDescription: "サーバーいま日曜日。またきて月曜日。"
|
||||||
@@ -1088,6 +1098,7 @@ prohibitedWordsDescription2: "スペースで区切るとAND指定、キーワ
|
|||||||
hiddenTags: "見えてへんハッシュタグ"
|
hiddenTags: "見えてへんハッシュタグ"
|
||||||
hiddenTagsDescription: "設定したタグを最近流行りのとこに見えんようにすんで。複数設定するときは改行で区切ってな。"
|
hiddenTagsDescription: "設定したタグを最近流行りのとこに見えんようにすんで。複数設定するときは改行で区切ってな。"
|
||||||
notesSearchNotAvailable: "なんかノート探せへん。"
|
notesSearchNotAvailable: "なんかノート探せへん。"
|
||||||
|
usersSearchNotAvailable: "ユーザーを探すことはできへんみたいや。"
|
||||||
license: "ライセンス"
|
license: "ライセンス"
|
||||||
unfavoriteConfirm: "ほんまに気に入らんの?"
|
unfavoriteConfirm: "ほんまに気に入らんの?"
|
||||||
myClips: "自分のクリップ"
|
myClips: "自分のクリップ"
|
||||||
@@ -1239,6 +1250,7 @@ releaseToRefresh: "離したらリロード"
|
|||||||
refreshing: "リロードしとる"
|
refreshing: "リロードしとる"
|
||||||
pullDownToRefresh: "引っ張ってリロードするで"
|
pullDownToRefresh: "引っ張ってリロードするで"
|
||||||
useGroupedNotifications: "通知をグループ分けして出すで"
|
useGroupedNotifications: "通知をグループ分けして出すで"
|
||||||
|
emailVerificationFailedError: "メアド確認してたらなんか変なことなったわ。リンクの期限切れてるかもしれん。"
|
||||||
cwNotationRequired: "「内容を隠す」んやったら注釈書かなアカンで。"
|
cwNotationRequired: "「内容を隠す」んやったら注釈書かなアカンで。"
|
||||||
doReaction: "ツッコむで"
|
doReaction: "ツッコむで"
|
||||||
code: "コード"
|
code: "コード"
|
||||||
@@ -1331,22 +1343,41 @@ unmuteX: "{x}のミュートやめたる"
|
|||||||
redisplayAllTips: "全部の「ヒントとコツ」をもっかい見して"
|
redisplayAllTips: "全部の「ヒントとコツ」をもっかい見して"
|
||||||
hideAllTips: "「ヒントとコツ」は全部表示せんでええ"
|
hideAllTips: "「ヒントとコツ」は全部表示せんでええ"
|
||||||
defaultImageCompressionLevel_description: "低くすると画質は保てるんやけど、ファイルサイズが増えるで。<br>高くするとファイルサイズは減らせるんやけど、画質が落ちるで。"
|
defaultImageCompressionLevel_description: "低くすると画質は保てるんやけど、ファイルサイズが増えるで。<br>高くするとファイルサイズは減らせるんやけど、画質が落ちるで。"
|
||||||
|
defaultCompressionLevel_description: "低くすると品質は保てるんやけど、ファイルサイズが増えるで。<br>高くするとファイルサイズは減らせるんやけど、品質が落ちるで。"
|
||||||
inMinutes: "分"
|
inMinutes: "分"
|
||||||
inDays: "日"
|
inDays: "日"
|
||||||
safeModeEnabled: "セーフモードがオンになってるで"
|
safeModeEnabled: "セーフモードがオンになってるで"
|
||||||
pluginsAreDisabledBecauseSafeMode: "セーフモードがオンやから、プラグインは全部無効化されてるで。"
|
pluginsAreDisabledBecauseSafeMode: "セーフモードがオンやから、プラグインは全部無効化されてるで。"
|
||||||
customCssIsDisabledBecauseSafeMode: "セーフモードがオンやから、カスタムCSSは適用されてへんで。"
|
customCssIsDisabledBecauseSafeMode: "セーフモードがオンやから、カスタムCSSは適用されてへんで。"
|
||||||
themeIsDefaultBecauseSafeMode: "セーフモードがオンの間はデフォルトのテーマを使うで。セーフモードをオフにれば元に戻るで。"
|
themeIsDefaultBecauseSafeMode: "セーフモードがオンの間はデフォルトのテーマを使うで。セーフモードをオフにれば元に戻るで。"
|
||||||
|
thankYouForTestingBeta: "ベータ版使うてくれておおきに!"
|
||||||
widgets: "ウィジェット"
|
widgets: "ウィジェット"
|
||||||
|
deviceInfoDescription: "なんか技術的なことで分からんこと聞くときは、下の情報も一緒に書いてもらえると、こっちも分かりやすいし、はよ直ると思います。"
|
||||||
|
youAreAdmin: "あんた、管理者やで"
|
||||||
|
presets: "プリセット"
|
||||||
|
_imageEditing:
|
||||||
|
_vars:
|
||||||
|
filename: "ファイル名"
|
||||||
|
_imageFrameEditor:
|
||||||
|
tip: "画像にフレームとかメタデータを入れたラベルとかを付け足していい感じにできるで。"
|
||||||
|
header: "ヘッダー"
|
||||||
|
font: "フォント"
|
||||||
|
fontSerif: "セリフ"
|
||||||
|
fontSansSerif: "サンセリフ"
|
||||||
|
quitWithoutSaveConfirm: "保存せずに終わってもええんか?"
|
||||||
|
failedToLoadImage: "あかん、画像読み込まれへんわ"
|
||||||
_chat:
|
_chat:
|
||||||
noMessagesYet: "まだメッセージはあらへんで"
|
noMessagesYet: "まだメッセージはあらへんで"
|
||||||
individualChat_description: "特定のユーザーと一対一でチャットができるで。"
|
individualChat_description: "特定のユーザーとサシでチャットできるで。"
|
||||||
roomChat_description: "複数人でチャットできるで。\nあと、個人チャットを許可してへんユーザーとでも、相手がええって言うならチャットできるで。"
|
roomChat_description: "複数人でチャットできるで。\nあと、個人チャットを許可してへんユーザーとでも、相手がええって言うならチャットできるで。"
|
||||||
inviteUserToChat: "ユーザーを招待してチャットを始めてみ"
|
inviteUserToChat: "ユーザーを招待してチャットを始めてみ"
|
||||||
invitations: "来てや"
|
invitations: "来てや"
|
||||||
noInvitations: "招待はあらへんで"
|
noInvitations: "招待はあらへんで"
|
||||||
noHistory: "履歴はないわ。"
|
noHistory: "履歴はないわ。"
|
||||||
noRooms: "ルームはあらへんで"
|
noRooms: "ルームはあらへんで"
|
||||||
|
join: "入る"
|
||||||
|
ignore: "ほっとく"
|
||||||
|
leave: "グループから抜ける"
|
||||||
members: "メンバーはん"
|
members: "メンバーはん"
|
||||||
home: "ホーム"
|
home: "ホーム"
|
||||||
send: "送信"
|
send: "送信"
|
||||||
@@ -1389,11 +1420,13 @@ _settings:
|
|||||||
appearanceBanner: "好みに応じた、クライアントの見た目・表示方法に関わる設定ができるで。"
|
appearanceBanner: "好みに応じた、クライアントの見た目・表示方法に関わる設定ができるで。"
|
||||||
soundsBanner: "クライアントで流すサウンドの設定ができるで。"
|
soundsBanner: "クライアントで流すサウンドの設定ができるで。"
|
||||||
makeEveryTextElementsSelectable: "全部のテキスト要素を選択できるようにする"
|
makeEveryTextElementsSelectable: "全部のテキスト要素を選択できるようにする"
|
||||||
makeEveryTextElementsSelectable_description: "これをつけると、一部のシチュエーションでユーザビリティが低下するかもしれん。"
|
makeEveryTextElementsSelectable_description: "これをつけると、場面によったら使いにくくなるかもしれん。"
|
||||||
|
useStickyIcons: "アイコンがスクロールにひっつくようにする"
|
||||||
enablePullToRefresh_description: "マウスやったら、ホイールを押し込みながらドラッグしてな。"
|
enablePullToRefresh_description: "マウスやったら、ホイールを押し込みながらドラッグしてな。"
|
||||||
realtimeMode_description: "サーバーと接続を確立して、リアルタイムでコンテンツを更新するで。通信量とバッテリーの消費が多くなるかもしれへん。"
|
realtimeMode_description: "サーバーと接続を確立して、リアルタイムでコンテンツを更新するで。通信量とバッテリーの消費が多くなるかもしれへん。"
|
||||||
contentsUpdateFrequency_description: "高いほどリアルタイムにコンテンツが更新されるんやけど、そのぶんパフォーマンスが低くなるし、通信量とバッテリーの消費も増えるねん。"
|
contentsUpdateFrequency_description: "高いほどリアルタイムにコンテンツが更新されるんやけど、そのぶんパフォーマンスが落ちるし、通信量とバッテリーの消費も増えるねん。"
|
||||||
contentsUpdateFrequency_description2: "リアルタイムモードをつけてるんやったら、この設定がどうであれリアルタイムでコンテンツが更新されるで。"
|
contentsUpdateFrequency_description2: "リアルタイムモードをつけてるんやったら、この設定がどうであれリアルタイムでコンテンツが更新されるで。"
|
||||||
|
emojiPaletteBanner: "絵文字ピッカーに置いとくプリセットをパレットっていうので登録したり、ピッカーの見た目を変えたりできるで。"
|
||||||
_preferencesProfile:
|
_preferencesProfile:
|
||||||
profileNameDescription: "このデバイスはなんて呼んだらええんや?"
|
profileNameDescription: "このデバイスはなんて呼んだらええんや?"
|
||||||
_preferencesBackup:
|
_preferencesBackup:
|
||||||
@@ -1487,7 +1520,7 @@ _initialTutorial:
|
|||||||
description: "ここでは、Misskeyのカンタンな使い方とか機能を確かめれんで。"
|
description: "ここでは、Misskeyのカンタンな使い方とか機能を確かめれんで。"
|
||||||
_note:
|
_note:
|
||||||
title: "ノートってなんや?"
|
title: "ノートってなんや?"
|
||||||
description: "Misskeyでの投稿は「ノート」って呼ばれてんで。ノートは順々にタイムラインに載ってて、リアルタイムで新しくなってってんで。"
|
description: "Misskeyでの投稿は「ノート」って呼ばれてんで。ノートは順々にタイムラインに載ってて、リアルタイムで新しくなってくで。"
|
||||||
reply: "返信もできるで。返信の返信もできるから、スレッドっぽく会話をそのまま続けれもするで。"
|
reply: "返信もできるで。返信の返信もできるから、スレッドっぽく会話をそのまま続けれもするで。"
|
||||||
renote: "そのノートを自分のタイムラインに流して共有できるで。テキスト入れて引用してもええな。"
|
renote: "そのノートを自分のタイムラインに流して共有できるで。テキスト入れて引用してもええな。"
|
||||||
reaction: "ツッコミをつけることもできるで。細かいことは次のページや。"
|
reaction: "ツッコミをつけることもできるで。細かいことは次のページや。"
|
||||||
@@ -1507,7 +1540,7 @@ _initialTutorial:
|
|||||||
social: "ホームタイムラインの投稿もローカルタイムラインのも一緒に見れるで。"
|
social: "ホームタイムラインの投稿もローカルタイムラインのも一緒に見れるで。"
|
||||||
global: "繋がってる他の全サーバーからの投稿が見れるで。"
|
global: "繋がってる他の全サーバーからの投稿が見れるで。"
|
||||||
description2: "それぞれのタイムラインは、いつでも画面上で切り替えられんねん。覚えとき。"
|
description2: "それぞれのタイムラインは、いつでも画面上で切り替えられんねん。覚えとき。"
|
||||||
description3: "その他にも、リストタイムラインとかチャンネルタイムラインとかがあんねん。詳しいのは{link}を見とき。"
|
description3: "その他にも、リストタイムラインとかチャンネルタイムラインとかがあんねん。詳しいのは{link}を見ときや。"
|
||||||
_postNote:
|
_postNote:
|
||||||
title: "ノートの投稿設定"
|
title: "ノートの投稿設定"
|
||||||
description1: "Misskeyにノートを投稿するとき、いろんなオプションが付けれるで。投稿画面はこんな感じや。"
|
description1: "Misskeyにノートを投稿するとき、いろんなオプションが付けれるで。投稿画面はこんな感じや。"
|
||||||
@@ -1543,7 +1576,7 @@ _timelineDescription:
|
|||||||
home: "ホームタイムラインは、あんたがフォローしとるアカウントの投稿だけ見れるで。"
|
home: "ホームタイムラインは、あんたがフォローしとるアカウントの投稿だけ見れるで。"
|
||||||
local: "ローカルタイムラインは、このサーバーにおる全員の投稿を見れるで。"
|
local: "ローカルタイムラインは、このサーバーにおる全員の投稿を見れるで。"
|
||||||
social: "ソーシャルタイムラインは、ホームタイムラインの投稿もローカルタイムラインのも一緒に見れるで。"
|
social: "ソーシャルタイムラインは、ホームタイムラインの投稿もローカルタイムラインのも一緒に見れるで。"
|
||||||
global: "グローバルタイムラインは、繋がっとる他のサーバーの投稿、全部ひっくるめて見れんで。"
|
global: "グローバルタイムラインは、繋がっとる他のサーバーの投稿、全部ひっくるめて見れるで。"
|
||||||
_serverRules:
|
_serverRules:
|
||||||
description: "新規登録前に見せる、サーバーのカンタンなルールを決めるで。内容は使うための決め事の要約がええと思うわ。"
|
description: "新規登録前に見せる、サーバーのカンタンなルールを決めるで。内容は使うための決め事の要約がええと思うわ。"
|
||||||
_serverSettings:
|
_serverSettings:
|
||||||
@@ -1563,7 +1596,7 @@ _serverSettings:
|
|||||||
inquiryUrl: "問い合わせ先URL"
|
inquiryUrl: "問い合わせ先URL"
|
||||||
inquiryUrlDescription: "サーバー運営者へのお問い合わせフォームのURLや、運営者の連絡先等が記載されたWebページのURLを指定するで。"
|
inquiryUrlDescription: "サーバー運営者へのお問い合わせフォームのURLや、運営者の連絡先等が記載されたWebページのURLを指定するで。"
|
||||||
openRegistration: "アカウントの作成をオープンにする"
|
openRegistration: "アカウントの作成をオープンにする"
|
||||||
openRegistrationWarning: "登録を解放するのはリスクが伴うで。サーバーをいっつも監視して、なんか起きたらすぐに対応できるんやったら、オンにしてもええと思う。"
|
openRegistrationWarning: "登録を解放するのはリスクあるで。サーバーをいっつも監視して、なんか起きたらすぐに対応できるんやったら、オンにしてもええと思うけどな。"
|
||||||
thisSettingWillAutomaticallyOffWhenModeratorsInactive: "一定期間モデレーターがおらんかったら、スパムを防ぐためにこの設定は勝手に切られるで。"
|
thisSettingWillAutomaticallyOffWhenModeratorsInactive: "一定期間モデレーターがおらんかったら、スパムを防ぐためにこの設定は勝手に切られるで。"
|
||||||
deliverSuspendedSoftwareDescription: "脆弱性とかの理由で、サーバーのソフトウェアの名前とバージョンの範囲を決めて配信を止められるで。このバージョン情報はサーバーが提供したものやから、信頼性は保証されへん。バージョン指定には semver の範囲指定が使えるねんけど、>= 2024.3.1と指定すると 2024.3.1-custom.0 みたいなカスタムバージョンが含まれへんから、>= 2024.3.1-0 みたいに prerelease を指定するとええかもしれへんな。"
|
deliverSuspendedSoftwareDescription: "脆弱性とかの理由で、サーバーのソフトウェアの名前とバージョンの範囲を決めて配信を止められるで。このバージョン情報はサーバーが提供したものやから、信頼性は保証されへん。バージョン指定には semver の範囲指定が使えるねんけど、>= 2024.3.1と指定すると 2024.3.1-custom.0 みたいなカスタムバージョンが含まれへんから、>= 2024.3.1-0 みたいに prerelease を指定するとええかもしれへんな。"
|
||||||
singleUserMode_description: "このサーバーを使うとるんが自分だけなんやったら、このモードを有効にすると動作がええ感じになるで。"
|
singleUserMode_description: "このサーバーを使うとるんが自分だけなんやったら、このモードを有効にすると動作がええ感じになるで。"
|
||||||
@@ -1958,7 +1991,7 @@ _signup:
|
|||||||
emailSent: "さっき入れたメアド({email})宛に確認メールを送ったで。メールに書かれたリンク押してアカウント作るの終わらしてな。\nメールの認証リンクの期限は30分や。"
|
emailSent: "さっき入れたメアド({email})宛に確認メールを送ったで。メールに書かれたリンク押してアカウント作るの終わらしてな。\nメールの認証リンクの期限は30分や。"
|
||||||
_accountDelete:
|
_accountDelete:
|
||||||
accountDelete: "アカウントの削除"
|
accountDelete: "アカウントの削除"
|
||||||
mayTakeTime: "アカウント消すんはサーバーが重いんやって。やから作ったコンテンツとか上げたファイルの数が多いと消し終わるまでに時間がかかるかもしれへん。"
|
mayTakeTime: "アカウント消すんはサーバーに負荷かかるんやって。やから、作ったコンテンツとか上げたファイルの数が多いと消し終わるまでに時間がかかるかもしれんわ。"
|
||||||
sendEmail: "アカウントの消し終わるときは、登録してたメアドに通知するで。"
|
sendEmail: "アカウントの消し終わるときは、登録してたメアドに通知するで。"
|
||||||
requestAccountDelete: "アカウント削除頼む"
|
requestAccountDelete: "アカウント削除頼む"
|
||||||
started: "削除処理が始まったで。"
|
started: "削除処理が始まったで。"
|
||||||
@@ -2298,6 +2331,7 @@ _auth:
|
|||||||
scopeUser: "以下のユーザーとしていじってるで"
|
scopeUser: "以下のユーザーとしていじってるで"
|
||||||
pleaseLogin: "アプリにアクセスさせるんやったら、ログインしてや。"
|
pleaseLogin: "アプリにアクセスさせるんやったら、ログインしてや。"
|
||||||
byClickingYouWillBeRedirectedToThisUrl: "アクセスを許したら、自動で下のURLに遷移するで"
|
byClickingYouWillBeRedirectedToThisUrl: "アクセスを許したら、自動で下のURLに遷移するで"
|
||||||
|
alreadyAuthorized: "このアプリはもうアクセスを許可してるみたいやで。"
|
||||||
_antennaSources:
|
_antennaSources:
|
||||||
all: "みんなのノート"
|
all: "みんなのノート"
|
||||||
homeTimeline: "フォローしとるユーザーのノート"
|
homeTimeline: "フォローしとるユーザーのノート"
|
||||||
@@ -2388,6 +2422,14 @@ _postForm:
|
|||||||
replyPlaceholder: "このノートに返信..."
|
replyPlaceholder: "このノートに返信..."
|
||||||
quotePlaceholder: "このノートを引用..."
|
quotePlaceholder: "このノートを引用..."
|
||||||
channelPlaceholder: "チャンネルに投稿..."
|
channelPlaceholder: "チャンネルに投稿..."
|
||||||
|
_howToUse:
|
||||||
|
toolbar_description: "ファイルとかアンケートを付けたり、注釈とかハッシュタグを書いたり、絵文字とかメンションとかを付け足したりできるで。"
|
||||||
|
account_description: "投稿するアカウントを変えたり、アカウントに保存した下書きとか予約投稿とかを見れるで。"
|
||||||
|
visibility_title: "公開範囲"
|
||||||
|
visibility_description: "ノートを誰に見せたいかはここで切り替えてな。"
|
||||||
|
menu_title: "メニュー"
|
||||||
|
menu_description: "下書きに保存したり、投稿の予約したり、リアクションの受け入れ設定とか…なんか色々できるで。"
|
||||||
|
submit_description: "ノートを投稿するときはここ押してな。Ctrl + Enter / Cmd + Enter でも投稿できるで。"
|
||||||
_placeholders:
|
_placeholders:
|
||||||
a: "いまどないしとるん?"
|
a: "いまどないしとるん?"
|
||||||
b: "何かあったん?"
|
b: "何かあったん?"
|
||||||
@@ -2533,6 +2575,8 @@ _notification:
|
|||||||
youReceivedFollowRequest: "フォロー許可してほしいみたいやな"
|
youReceivedFollowRequest: "フォロー許可してほしいみたいやな"
|
||||||
yourFollowRequestAccepted: "フォローさせてもろたで"
|
yourFollowRequestAccepted: "フォローさせてもろたで"
|
||||||
pollEnded: "アンケートの結果が出たみたいや"
|
pollEnded: "アンケートの結果が出たみたいや"
|
||||||
|
scheduledNotePosted: "予約ノートが投稿されたで"
|
||||||
|
scheduledNotePostFailed: "予約ノート投稿できんかったで"
|
||||||
newNote: "さらの投稿"
|
newNote: "さらの投稿"
|
||||||
unreadAntennaNote: "アンテナ {name}"
|
unreadAntennaNote: "アンテナ {name}"
|
||||||
roleAssigned: "ロールが付与されたで"
|
roleAssigned: "ロールが付与されたで"
|
||||||
@@ -2999,6 +3043,7 @@ _uploader:
|
|||||||
maxFileSizeIsX: "アップロードできるファイルサイズは{x}までやで。"
|
maxFileSizeIsX: "アップロードできるファイルサイズは{x}までやで。"
|
||||||
tip: "ファイルはまだアップロードされてへんで。このダイアログで、アップロードする前に確認・リネーム・圧縮・クロッピングとかをできるで。準備が出来たら、「アップロード」ボタンを押してアップロードしてな。"
|
tip: "ファイルはまだアップロードされてへんで。このダイアログで、アップロードする前に確認・リネーム・圧縮・クロッピングとかをできるで。準備が出来たら、「アップロード」ボタンを押してアップロードしてな。"
|
||||||
_clientPerformanceIssueTip:
|
_clientPerformanceIssueTip:
|
||||||
|
title: "バッテリーようさん食うなぁと思ったら"
|
||||||
makeSureDisabledAdBlocker: "アドブロッカーを切ってみてや"
|
makeSureDisabledAdBlocker: "アドブロッカーを切ってみてや"
|
||||||
makeSureDisabledAdBlocker_description: "アドブロッカーはパフォーマンスに影響があるかもしれへん。OSの機能とかブラウザの機能・アドオンとかでアドブロッカーが有効になってないか確認してや。"
|
makeSureDisabledAdBlocker_description: "アドブロッカーはパフォーマンスに影響があるかもしれへん。OSの機能とかブラウザの機能・アドオンとかでアドブロッカーが有効になってないか確認してや。"
|
||||||
makeSureDisabledCustomCss: "カスタムCSSを無効にしてみてや"
|
makeSureDisabledCustomCss: "カスタムCSSを無効にしてみてや"
|
||||||
@@ -3022,8 +3067,10 @@ _watermarkEditor:
|
|||||||
image: "画像"
|
image: "画像"
|
||||||
advanced: "高度"
|
advanced: "高度"
|
||||||
angle: "角度"
|
angle: "角度"
|
||||||
|
failedToLoadImage: "あかん、画像読み込まれへんわ"
|
||||||
_imageEffector:
|
_imageEffector:
|
||||||
discardChangesConfirm: "変更をせんで終わるか?"
|
discardChangesConfirm: "変更をせんで終わるか?"
|
||||||
|
failedToLoadImage: "あかん、画像読み込まれへんわ"
|
||||||
_fxProps:
|
_fxProps:
|
||||||
angle: "角度"
|
angle: "角度"
|
||||||
scale: "大きさ"
|
scale: "大きさ"
|
||||||
@@ -3040,4 +3087,5 @@ _drafts:
|
|||||||
noDrafts: "下書きはあらへん"
|
noDrafts: "下書きはあらへん"
|
||||||
_qr:
|
_qr:
|
||||||
showTabTitle: "表示"
|
showTabTitle: "表示"
|
||||||
|
shareText: "Fediverseでフォローしてな!"
|
||||||
raw: "テキスト"
|
raw: "テキスト"
|
||||||
|
|||||||
@@ -57,6 +57,10 @@ searchByGoogle: "Nadi"
|
|||||||
file: "Ifuyla"
|
file: "Ifuyla"
|
||||||
account: "Imiḍan"
|
account: "Imiḍan"
|
||||||
replies: "Err"
|
replies: "Err"
|
||||||
|
_imageFrameEditor:
|
||||||
|
font: "Tasefsit"
|
||||||
|
fontSerif: "Serif"
|
||||||
|
fontSansSerif: "Sans Serif"
|
||||||
_email:
|
_email:
|
||||||
_follow:
|
_follow:
|
||||||
title: "Yeṭṭafaṛ-ik·em-id"
|
title: "Yeṭṭafaṛ-ik·em-id"
|
||||||
|
|||||||
@@ -651,6 +651,9 @@ renotes: "리노트"
|
|||||||
attach: "옇기"
|
attach: "옇기"
|
||||||
surrender: "아이예"
|
surrender: "아이예"
|
||||||
information: "정보"
|
information: "정보"
|
||||||
|
_imageEditing:
|
||||||
|
_vars:
|
||||||
|
filename: "파일 이럼"
|
||||||
_chat:
|
_chat:
|
||||||
invitations: "초대하기"
|
invitations: "초대하기"
|
||||||
noHistory: "기록이 없십니다"
|
noHistory: "기록이 없십니다"
|
||||||
|
|||||||
@@ -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: "리스트"
|
||||||
@@ -302,6 +304,7 @@ uploadFromUrlMayTakeTime: "업로드가 완료될 때까지 시간이 소요될
|
|||||||
uploadNFiles: "{n}개의 파일을 업로"
|
uploadNFiles: "{n}개의 파일을 업로"
|
||||||
explore: "둘러보기"
|
explore: "둘러보기"
|
||||||
messageRead: "읽음"
|
messageRead: "읽음"
|
||||||
|
readAllChatMessages: "모든 메시지를 읽은 상태로 표시"
|
||||||
noMoreHistory: "이것보다 과거의 기록이 없습니다"
|
noMoreHistory: "이것보다 과거의 기록이 없습니다"
|
||||||
startChat: "채팅을 시작하기"
|
startChat: "채팅을 시작하기"
|
||||||
nUsersRead: "{n}명이 읽음"
|
nUsersRead: "{n}명이 읽음"
|
||||||
@@ -1022,6 +1025,9 @@ pushNotificationAlreadySubscribed: "푸시 알림이 이미 켜져 있습니다"
|
|||||||
pushNotificationNotSupported: "브라우저나 서버에서 푸시 알림이 지원되지 않습니다"
|
pushNotificationNotSupported: "브라우저나 서버에서 푸시 알림이 지원되지 않습니다"
|
||||||
sendPushNotificationReadMessage: "푸시 알림이나 메시지를 읽은 뒤 푸시 알림을 삭제"
|
sendPushNotificationReadMessage: "푸시 알림이나 메시지를 읽은 뒤 푸시 알림을 삭제"
|
||||||
sendPushNotificationReadMessageCaption: "「{emptyPushNotificationMessage}」이라는 알림이 잠깐 표시됩니다. 기기의 전력 소비량이 증가할 수 있습니다."
|
sendPushNotificationReadMessageCaption: "「{emptyPushNotificationMessage}」이라는 알림이 잠깐 표시됩니다. 기기의 전력 소비량이 증가할 수 있습니다."
|
||||||
|
pleaseAllowPushNotification: "브라우저의 알림 설정을 허가해 주십시오."
|
||||||
|
browserPushNotificationDisabled: "알림 송신 권한 얻기에 실패했습니다."
|
||||||
|
browserPushNotificationDisabledDescription: "{serverName}에서의 알림 송신 권한이 없습니다. 브라우저의 설정에서 알림을 허가해 다시 시도해 주십시오."
|
||||||
windowMaximize: "최대화"
|
windowMaximize: "최대화"
|
||||||
windowMinimize: "최소화"
|
windowMinimize: "최소화"
|
||||||
windowRestore: "복구"
|
windowRestore: "복구"
|
||||||
@@ -1396,6 +1402,50 @@ scheduled: "예약"
|
|||||||
widgets: "위젯"
|
widgets: "위젯"
|
||||||
deviceInfo: "장치 정보"
|
deviceInfo: "장치 정보"
|
||||||
deviceInfoDescription: "기술적 문의의 경우 아래의 정보를 병기하면 문제의 해결에 도움이 됩니다."
|
deviceInfoDescription: "기술적 문의의 경우 아래의 정보를 병기하면 문제의 해결에 도움이 됩니다."
|
||||||
|
youAreAdmin: "당신은 관리자입니다."
|
||||||
|
frame: "프레임"
|
||||||
|
presets: "프리셋"
|
||||||
|
zeroPadding: "0으로 채우기"
|
||||||
|
_imageEditing:
|
||||||
|
_vars:
|
||||||
|
caption: "파일 설명"
|
||||||
|
filename: "파일명"
|
||||||
|
filename_without_ext: "확장자가 없는 파일명"
|
||||||
|
year: "촬영한 해"
|
||||||
|
month: "촬영한 달"
|
||||||
|
day: "촬영한 날"
|
||||||
|
hour: "촬영한 시각(시)"
|
||||||
|
minute: "촬영한 시각(분)"
|
||||||
|
second: "촬영한 시각(초)"
|
||||||
|
camera_model: "카메라 이름"
|
||||||
|
camera_lens_model: "렌즈 이름"
|
||||||
|
camera_mm: "초점 거리"
|
||||||
|
camera_mm_35: "초점 거리(35m판 환산)"
|
||||||
|
camera_f: "조리개 조절"
|
||||||
|
camera_s: "셔터 속도"
|
||||||
|
camera_iso: "ISO 감도"
|
||||||
|
gps_lat: "위도"
|
||||||
|
gps_long: "경도"
|
||||||
|
_imageFrameEditor:
|
||||||
|
title: "프레임 편집"
|
||||||
|
tip: "이미지에 프레임이나 메타 데이터를 포함한 라벨을 추가해 장식할 수 있습니다."
|
||||||
|
header: "헤더"
|
||||||
|
footer: "꼬리말"
|
||||||
|
borderThickness: "테두리의 폭"
|
||||||
|
labelThickness: "라벨의 폭"
|
||||||
|
labelScale: "라벨의 스케일"
|
||||||
|
centered: "중앙 정렬"
|
||||||
|
captionMain: "캡션(대)"
|
||||||
|
captionSub: "캡션(소)"
|
||||||
|
availableVariables: "이용 가능한 변수"
|
||||||
|
withQrCode: "QR 코드"
|
||||||
|
backgroundColor: "배경색"
|
||||||
|
textColor: "글꼴 색상"
|
||||||
|
font: "폰트"
|
||||||
|
fontSerif: "명조체"
|
||||||
|
fontSansSerif: "고딕체"
|
||||||
|
quitWithoutSaveConfirm: "보존하지 않고 종료하시겠습니까?"
|
||||||
|
failedToLoadImage: "이미지 로드에 실패했습니다."
|
||||||
_compression:
|
_compression:
|
||||||
_quality:
|
_quality:
|
||||||
high: "고품질"
|
high: "고품질"
|
||||||
@@ -1498,6 +1548,8 @@ _settings:
|
|||||||
showUrlPreview: "URL 미리보기 표시"
|
showUrlPreview: "URL 미리보기 표시"
|
||||||
showAvailableReactionsFirstInNote: "이용 가능한 리액션을 선두로 표시"
|
showAvailableReactionsFirstInNote: "이용 가능한 리액션을 선두로 표시"
|
||||||
showPageTabBarBottom: "페이지의 탭 바를 아래쪽에 표시"
|
showPageTabBarBottom: "페이지의 탭 바를 아래쪽에 표시"
|
||||||
|
emojiPaletteBanner: "이모티콘 선택기에 고정 표시되는 프리셋을 팔레트로 등록하거나 선택기의 표시 방법을 커스터마이징할 수 있습니다."
|
||||||
|
enableAnimatedImages: "애니메이션 이미지 활성화"
|
||||||
_chat:
|
_chat:
|
||||||
showSenderName: "발신자 이름 표시"
|
showSenderName: "발신자 이름 표시"
|
||||||
sendOnEnter: "엔터로 보내기"
|
sendOnEnter: "엔터로 보내기"
|
||||||
@@ -1506,6 +1558,8 @@ _preferencesProfile:
|
|||||||
profileNameDescription: "이 디바이스를 식별할 이름을 설정해 주세요."
|
profileNameDescription: "이 디바이스를 식별할 이름을 설정해 주세요."
|
||||||
profileNameDescription2: "예: '메인PC', '스마트폰' 등"
|
profileNameDescription2: "예: '메인PC', '스마트폰' 등"
|
||||||
manageProfiles: "프로파일 관리"
|
manageProfiles: "프로파일 관리"
|
||||||
|
shareSameProfileBetweenDevicesIsNotRecommended: "여러 장치에서 동일한 프로필을 공유하는 것은 권장하지 않습니다."
|
||||||
|
useSyncBetweenDevicesOptionIfYouWantToSyncSetting: "여러 장치에서 동기화하고 싶은 설정 항목이 있는 경우에는 개별로 '여러 장치에서 동기화' 옵션을 활성화해 주십시오."
|
||||||
_preferencesBackup:
|
_preferencesBackup:
|
||||||
autoBackup: "자동 백업"
|
autoBackup: "자동 백업"
|
||||||
restoreFromBackup: "백업으로 복구"
|
restoreFromBackup: "백업으로 복구"
|
||||||
@@ -1515,6 +1569,7 @@ _preferencesBackup:
|
|||||||
youNeedToNameYourProfileToEnableAutoBackup: "자동 백업을 활성화하려면 프로필 이름을 설정해야 합니다."
|
youNeedToNameYourProfileToEnableAutoBackup: "자동 백업을 활성화하려면 프로필 이름을 설정해야 합니다."
|
||||||
autoPreferencesBackupIsNotEnabledForThisDevice: "이 장치에서 설정 자동 백업이 활성화되어 있지 않습니다."
|
autoPreferencesBackupIsNotEnabledForThisDevice: "이 장치에서 설정 자동 백업이 활성화되어 있지 않습니다."
|
||||||
backupFound: "설정 백업이 발견되었습니다"
|
backupFound: "설정 백업이 발견되었습니다"
|
||||||
|
forceBackup: "설정 강제 백업"
|
||||||
_accountSettings:
|
_accountSettings:
|
||||||
requireSigninToViewContents: "콘텐츠 열람을 위해 로그인을 필수로 설정하기"
|
requireSigninToViewContents: "콘텐츠 열람을 위해 로그인을 필수로 설정하기"
|
||||||
requireSigninToViewContentsDescription1: "자신이 작성한 모든 노트 등의 콘텐츠를 보기 위해 로그인을 필수로 설정합니다. 크롤러가 정보 수집하는 것을 방지하는 효과를 기대할 수 있습니다."
|
requireSigninToViewContentsDescription1: "자신이 작성한 모든 노트 등의 콘텐츠를 보기 위해 로그인을 필수로 설정합니다. 크롤러가 정보 수집하는 것을 방지하는 효과를 기대할 수 있습니다."
|
||||||
@@ -2530,6 +2585,20 @@ _postForm:
|
|||||||
replyPlaceholder: "이 노트에 답글..."
|
replyPlaceholder: "이 노트에 답글..."
|
||||||
quotePlaceholder: "이 노트를 인용..."
|
quotePlaceholder: "이 노트를 인용..."
|
||||||
channelPlaceholder: "채널에 게시하기..."
|
channelPlaceholder: "채널에 게시하기..."
|
||||||
|
showHowToUse: "입력란의 설명 표시"
|
||||||
|
_howToUse:
|
||||||
|
content_title: "본문"
|
||||||
|
content_description: "게시할 내용을 입력합니다."
|
||||||
|
toolbar_title: "도구 모음"
|
||||||
|
toolbar_description: "파일이나 설문의 첨부, 주석이나 해시태그 설정, 이모티콘이나 멘션의 삽입 등을 할 수 있습니다."
|
||||||
|
account_title: "계정 메뉴"
|
||||||
|
account_description: "게시할 계정을 교체하거나, 계정에 보존한 초안 및 예약 게시물을 목록으로 볼 수 있습니다."
|
||||||
|
visibility_title: "공개 범위"
|
||||||
|
visibility_description: "노트 공개 범위의 설정을 할 수 있습니다."
|
||||||
|
menu_title: "메뉴"
|
||||||
|
menu_description: "초안의 보존, 게시 예약, 리액션의 설정 등 그 외의 액션을 할 수 있습니다."
|
||||||
|
submit_title: "게시 버튼"
|
||||||
|
submit_description: "노트를 게시합니다. Ctrl + Enter / Cmd + Enter로도 게시할 수 있습니다."
|
||||||
_placeholders:
|
_placeholders:
|
||||||
a: "지금 무엇을 하고 있나요?"
|
a: "지금 무엇을 하고 있나요?"
|
||||||
b: "무슨 일이 일어나고 있나요?"
|
b: "무슨 일이 일어나고 있나요?"
|
||||||
@@ -2807,6 +2876,8 @@ _abuseReport:
|
|||||||
notifiedWebhook: "사용할 Webhook"
|
notifiedWebhook: "사용할 Webhook"
|
||||||
deleteConfirm: "수신자를 삭제하시겠습니까?"
|
deleteConfirm: "수신자를 삭제하시겠습니까?"
|
||||||
_moderationLogTypes:
|
_moderationLogTypes:
|
||||||
|
clearQueue: "작업 대기열 비우기"
|
||||||
|
promoteQueue: "큐의 작업을 재시도"
|
||||||
createRole: "역할 생성"
|
createRole: "역할 생성"
|
||||||
deleteRole: "역할 삭제"
|
deleteRole: "역할 삭제"
|
||||||
updateRole: "역할 수정"
|
updateRole: "역할 수정"
|
||||||
@@ -3223,11 +3294,13 @@ _watermarkEditor:
|
|||||||
polkadotSubDotRadius: "서브 물방울의 크기"
|
polkadotSubDotRadius: "서브 물방울의 크기"
|
||||||
polkadotSubDotDivisions: "서브 물방울의 수"
|
polkadotSubDotDivisions: "서브 물방울의 수"
|
||||||
leaveBlankToAccountUrl: "빈칸일 경우 계정의 URL로 됩니다."
|
leaveBlankToAccountUrl: "빈칸일 경우 계정의 URL로 됩니다."
|
||||||
|
failedToLoadImage: "이미지 로딩에 실패했습니다."
|
||||||
_imageEffector:
|
_imageEffector:
|
||||||
title: "이펙트"
|
title: "이펙트"
|
||||||
addEffect: "이펙트를 추가"
|
addEffect: "이펙트를 추가"
|
||||||
discardChangesConfirm: "변경을 취소하고 종료하시겠습니까?"
|
discardChangesConfirm: "변경을 취소하고 종료하시겠습니까?"
|
||||||
nothingToConfigure: "설정 항목이 없습니다."
|
nothingToConfigure: "설정 항목이 없습니다."
|
||||||
|
failedToLoadImage: "이미지 로딩에 실패했습니다."
|
||||||
_fxs:
|
_fxs:
|
||||||
chromaticAberration: "색수차"
|
chromaticAberration: "색수차"
|
||||||
glitch: "글리치"
|
glitch: "글리치"
|
||||||
|
|||||||
@@ -393,6 +393,9 @@ file: "ໄຟລ໌"
|
|||||||
replies: "ຕອບກັບ"
|
replies: "ຕອບກັບ"
|
||||||
renotes: "Renote"
|
renotes: "Renote"
|
||||||
information: "ກ່ຽວກັບ"
|
information: "ກ່ຽວກັບ"
|
||||||
|
_imageEditing:
|
||||||
|
_vars:
|
||||||
|
filename: "ຊື່ໄຟລ໌"
|
||||||
_chat:
|
_chat:
|
||||||
invitations: "ເຊີນ"
|
invitations: "ເຊີນ"
|
||||||
noHistory: "ບໍ່ມີປະຫວັດ"
|
noHistory: "ບໍ່ມີປະຫວັດ"
|
||||||
@@ -434,6 +437,9 @@ _visibility:
|
|||||||
home: "ໜ້າຫຼັກ"
|
home: "ໜ້າຫຼັກ"
|
||||||
followers: "ຜູ້ຕິດຕາມ"
|
followers: "ຜູ້ຕິດຕາມ"
|
||||||
specified: "ໂພສ Direct note"
|
specified: "ໂພສ Direct note"
|
||||||
|
_postForm:
|
||||||
|
_howToUse:
|
||||||
|
menu_title: "ເມນູ"
|
||||||
_profile:
|
_profile:
|
||||||
name: "ຊື່"
|
name: "ຊື່"
|
||||||
username: "ຊື່ຜູ້ໃຊ້"
|
username: "ຊື່ຜູ້ໃຊ້"
|
||||||
|
|||||||
@@ -970,6 +970,9 @@ renotes: "Herdelen"
|
|||||||
followingOrFollower: "Gevolgd of volger"
|
followingOrFollower: "Gevolgd of volger"
|
||||||
confirmShowRepliesAll: "Dit is een onomkeerbare operatie. Weet je zeker dat reacties op anderen van iedereen die je volgt, wil weergeven in je tijdlijn?"
|
confirmShowRepliesAll: "Dit is een onomkeerbare operatie. Weet je zeker dat reacties op anderen van iedereen die je volgt, wil weergeven in je tijdlijn?"
|
||||||
information: "Over"
|
information: "Over"
|
||||||
|
_imageEditing:
|
||||||
|
_vars:
|
||||||
|
filename: "Bestandsnaam"
|
||||||
_chat:
|
_chat:
|
||||||
invitations: "Uitnodigen"
|
invitations: "Uitnodigen"
|
||||||
noHistory: "Geen geschiedenis gevonden"
|
noHistory: "Geen geschiedenis gevonden"
|
||||||
@@ -1020,6 +1023,10 @@ _visibility:
|
|||||||
home: "Startpagina"
|
home: "Startpagina"
|
||||||
followers: "Volgers"
|
followers: "Volgers"
|
||||||
specified: "Directe notities"
|
specified: "Directe notities"
|
||||||
|
_postForm:
|
||||||
|
_howToUse:
|
||||||
|
visibility_title: "Zichtbaarheid"
|
||||||
|
menu_title: "Menu"
|
||||||
_profile:
|
_profile:
|
||||||
name: "Naam"
|
name: "Naam"
|
||||||
username: "Gebruikersnaam"
|
username: "Gebruikersnaam"
|
||||||
|
|||||||
@@ -463,6 +463,12 @@ surrender: "Avbryt"
|
|||||||
information: "Informasjon"
|
information: "Informasjon"
|
||||||
inMinutes: "Minutter"
|
inMinutes: "Minutter"
|
||||||
inDays: "Dager"
|
inDays: "Dager"
|
||||||
|
_imageEditing:
|
||||||
|
_vars:
|
||||||
|
filename: "Filnavn"
|
||||||
|
_imageFrameEditor:
|
||||||
|
fontSerif: "Serif"
|
||||||
|
fontSansSerif: "Sans Serif"
|
||||||
_chat:
|
_chat:
|
||||||
invitations: "Inviter"
|
invitations: "Inviter"
|
||||||
members: "Medlemmer"
|
members: "Medlemmer"
|
||||||
@@ -650,6 +656,8 @@ _visibility:
|
|||||||
home: "Hjem"
|
home: "Hjem"
|
||||||
followers: "Følgere"
|
followers: "Følgere"
|
||||||
_postForm:
|
_postForm:
|
||||||
|
_howToUse:
|
||||||
|
menu_title: "Meny"
|
||||||
_placeholders:
|
_placeholders:
|
||||||
a: "Hva skjer?"
|
a: "Hva skjer?"
|
||||||
_profile:
|
_profile:
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "module"
|
|
||||||
}
|
|
||||||
@@ -1043,6 +1043,15 @@ information: "Informacje"
|
|||||||
inMinutes: "minuta"
|
inMinutes: "minuta"
|
||||||
inDays: "dzień"
|
inDays: "dzień"
|
||||||
widgets: "Widżety"
|
widgets: "Widżety"
|
||||||
|
presets: "Konfiguracja"
|
||||||
|
_imageEditing:
|
||||||
|
_vars:
|
||||||
|
filename: "Nazwa pliku"
|
||||||
|
_imageFrameEditor:
|
||||||
|
header: "Nagłówek"
|
||||||
|
font: "Czcionka"
|
||||||
|
fontSerif: "Szeryfowa"
|
||||||
|
fontSansSerif: "Bezszeryfowa"
|
||||||
_chat:
|
_chat:
|
||||||
invitations: "Zaproś"
|
invitations: "Zaproś"
|
||||||
noHistory: "Brak historii"
|
noHistory: "Brak historii"
|
||||||
@@ -1393,6 +1402,9 @@ _postForm:
|
|||||||
replyPlaceholder: "Odpowiedz na ten wpis..."
|
replyPlaceholder: "Odpowiedz na ten wpis..."
|
||||||
quotePlaceholder: "Zacytuj ten wpis…"
|
quotePlaceholder: "Zacytuj ten wpis…"
|
||||||
channelPlaceholder: "Publikuj na kanale..."
|
channelPlaceholder: "Publikuj na kanale..."
|
||||||
|
_howToUse:
|
||||||
|
visibility_title: "Widoczność"
|
||||||
|
menu_title: "Menu"
|
||||||
_placeholders:
|
_placeholders:
|
||||||
a: "Co się dzieje?"
|
a: "Co się dzieje?"
|
||||||
b: "Co się wydarzyło?"
|
b: "Co się wydarzyło?"
|
||||||
|
|||||||
@@ -1390,6 +1390,17 @@ scheduledToPostOnX: "A nota está agendada para {x}"
|
|||||||
schedule: "Agendar"
|
schedule: "Agendar"
|
||||||
scheduled: "Agendado"
|
scheduled: "Agendado"
|
||||||
widgets: "Widgets"
|
widgets: "Widgets"
|
||||||
|
presets: "Predefinições"
|
||||||
|
_imageEditing:
|
||||||
|
_vars:
|
||||||
|
filename: "Nome do Ficheiro"
|
||||||
|
_imageFrameEditor:
|
||||||
|
header: "Cabeçalho"
|
||||||
|
withQrCode: "Código QR"
|
||||||
|
font: "Fonte"
|
||||||
|
fontSerif: "Serif"
|
||||||
|
fontSansSerif: "Sans Serif"
|
||||||
|
quitWithoutSaveConfirm: "Descartar mudanças?"
|
||||||
_compression:
|
_compression:
|
||||||
_quality:
|
_quality:
|
||||||
high: "Qualidade alta"
|
high: "Qualidade alta"
|
||||||
@@ -2522,6 +2533,9 @@ _postForm:
|
|||||||
replyPlaceholder: "Responder a essa nota..."
|
replyPlaceholder: "Responder a essa nota..."
|
||||||
quotePlaceholder: "Citar essa nota..."
|
quotePlaceholder: "Citar essa nota..."
|
||||||
channelPlaceholder: "Postar em canal..."
|
channelPlaceholder: "Postar em canal..."
|
||||||
|
_howToUse:
|
||||||
|
visibility_title: "Visibilidade"
|
||||||
|
menu_title: "Menu\n"
|
||||||
_placeholders:
|
_placeholders:
|
||||||
a: "Como vão as coisas?"
|
a: "Como vão as coisas?"
|
||||||
b: "O que está rolando por aí?"
|
b: "O que está rolando por aí?"
|
||||||
|
|||||||
@@ -1215,6 +1215,10 @@ lastNDays: "Ultimele {n} zile"
|
|||||||
surrender: "Anulează"
|
surrender: "Anulează"
|
||||||
copyPreferenceId: "Copiază ID-ul preferințelor"
|
copyPreferenceId: "Copiază ID-ul preferințelor"
|
||||||
information: "Despre"
|
information: "Despre"
|
||||||
|
presets: "Presetate"
|
||||||
|
_imageEditing:
|
||||||
|
_vars:
|
||||||
|
filename: "Nume fișier"
|
||||||
_chat:
|
_chat:
|
||||||
invitations: "Invită"
|
invitations: "Invită"
|
||||||
noHistory: "Nu există istoric"
|
noHistory: "Nu există istoric"
|
||||||
@@ -1307,6 +1311,9 @@ _postForm:
|
|||||||
replyPlaceholder: "Răspunde la această notă..."
|
replyPlaceholder: "Răspunde la această notă..."
|
||||||
quotePlaceholder: "Citează aceasta nota..."
|
quotePlaceholder: "Citează aceasta nota..."
|
||||||
channelPlaceholder: "Postează pe un canal..."
|
channelPlaceholder: "Postează pe un canal..."
|
||||||
|
_howToUse:
|
||||||
|
visibility_title: "Vizibilitate"
|
||||||
|
menu_title: "Meniu"
|
||||||
_placeholders:
|
_placeholders:
|
||||||
a: "Ce mai faci?"
|
a: "Ce mai faci?"
|
||||||
b: "Ce se mai petrece in jurul tău?"
|
b: "Ce se mai petrece in jurul tău?"
|
||||||
|
|||||||
+17
-3
@@ -87,7 +87,7 @@ exportRequested: "Вы запросили экспорт. Это может за
|
|||||||
importRequested: "Вы запросили импорт. Это может занять некоторое время."
|
importRequested: "Вы запросили импорт. Это может занять некоторое время."
|
||||||
lists: "Списки"
|
lists: "Списки"
|
||||||
noLists: "Нет ни одного списка"
|
noLists: "Нет ни одного списка"
|
||||||
note: "Заметка"
|
note: "Пост"
|
||||||
notes: "Заметки"
|
notes: "Заметки"
|
||||||
following: "Подписки"
|
following: "Подписки"
|
||||||
followers: "Подписчики"
|
followers: "Подписчики"
|
||||||
@@ -122,7 +122,7 @@ inChannelRenote: "В канале"
|
|||||||
inChannelQuote: "Заметки в канале"
|
inChannelQuote: "Заметки в канале"
|
||||||
renoteToChannel: "Репостнуть в канал"
|
renoteToChannel: "Репостнуть в канал"
|
||||||
renoteToOtherChannel: "Репостнуть в другой канал"
|
renoteToOtherChannel: "Репостнуть в другой канал"
|
||||||
pinnedNote: "Закреплённая заметка"
|
pinnedNote: "Закреплённый пост"
|
||||||
pinned: "Закрепить в профиле"
|
pinned: "Закрепить в профиле"
|
||||||
you: "Вы"
|
you: "Вы"
|
||||||
clickToShow: "Нажмите для просмотра"
|
clickToShow: "Нажмите для просмотра"
|
||||||
@@ -253,6 +253,7 @@ noteDeleteConfirm: "Вы хотите удалить эту заметку?"
|
|||||||
pinLimitExceeded: "Нельзя закрепить ещё больше заметок"
|
pinLimitExceeded: "Нельзя закрепить ещё больше заметок"
|
||||||
done: "Готово"
|
done: "Готово"
|
||||||
processing: "Обработка"
|
processing: "Обработка"
|
||||||
|
preprocessing: "Подготовка..."
|
||||||
preview: "Предпросмотр"
|
preview: "Предпросмотр"
|
||||||
default: "По умолчанию"
|
default: "По умолчанию"
|
||||||
defaultValueIs: "По умолчанию: {value}"
|
defaultValueIs: "По умолчанию: {value}"
|
||||||
@@ -396,7 +397,7 @@ pinnedUsersDescription: "Перечислите по одному имени п
|
|||||||
pinnedPages: "Закрепленные страницы"
|
pinnedPages: "Закрепленные страницы"
|
||||||
pinnedPagesDescription: "Если хотите закрепить страницы на главной сайта, сюда можно добавить пути к ним, каждый в отдельной строке."
|
pinnedPagesDescription: "Если хотите закрепить страницы на главной сайта, сюда можно добавить пути к ним, каждый в отдельной строке."
|
||||||
pinnedClipId: "Идентификатор закреплённой подборки"
|
pinnedClipId: "Идентификатор закреплённой подборки"
|
||||||
pinnedNotes: "Закреплённая заметка"
|
pinnedNotes: "Закреплённый пост"
|
||||||
hcaptcha: "hCaptcha"
|
hcaptcha: "hCaptcha"
|
||||||
enableHcaptcha: "Включить hCaptcha"
|
enableHcaptcha: "Включить hCaptcha"
|
||||||
hcaptchaSiteKey: "Ключ сайта"
|
hcaptchaSiteKey: "Ключ сайта"
|
||||||
@@ -1164,6 +1165,7 @@ installed: "Установлено"
|
|||||||
branding: "Бренд"
|
branding: "Бренд"
|
||||||
enableServerMachineStats: "Опубликовать характеристики сервера"
|
enableServerMachineStats: "Опубликовать характеристики сервера"
|
||||||
enableIdenticonGeneration: "Включить генерацию иконки пользователя"
|
enableIdenticonGeneration: "Включить генерацию иконки пользователя"
|
||||||
|
showRoleBadgesOfRemoteUsers: "Display the role badges assigned to remote users"
|
||||||
turnOffToImprovePerformance: "Отключение этого параметра может повысить производительность."
|
turnOffToImprovePerformance: "Отключение этого параметра может повысить производительность."
|
||||||
createInviteCode: "Создать код приглашения"
|
createInviteCode: "Создать код приглашения"
|
||||||
createWithOptions: "Используйте параметры для создания"
|
createWithOptions: "Используйте параметры для создания"
|
||||||
@@ -1278,6 +1280,15 @@ information: "Описание"
|
|||||||
inMinutes: "мин"
|
inMinutes: "мин"
|
||||||
inDays: "сут"
|
inDays: "сут"
|
||||||
widgets: "Виджеты"
|
widgets: "Виджеты"
|
||||||
|
presets: "Шаблоны"
|
||||||
|
_imageEditing:
|
||||||
|
_vars:
|
||||||
|
filename: "Имя файла"
|
||||||
|
_imageFrameEditor:
|
||||||
|
header: "Заголовок"
|
||||||
|
font: "Шрифт"
|
||||||
|
fontSerif: "Антиква (с засечками)"
|
||||||
|
fontSansSerif: "Гротеск (без засечек)"
|
||||||
_chat:
|
_chat:
|
||||||
invitations: "Пригласить"
|
invitations: "Пригласить"
|
||||||
noHistory: "История пока пуста"
|
noHistory: "История пока пуста"
|
||||||
@@ -2007,6 +2018,9 @@ _postForm:
|
|||||||
replyPlaceholder: "Ответ на заметку..."
|
replyPlaceholder: "Ответ на заметку..."
|
||||||
quotePlaceholder: "Пояснение к цитате..."
|
quotePlaceholder: "Пояснение к цитате..."
|
||||||
channelPlaceholder: "Отправить в канал"
|
channelPlaceholder: "Отправить в канал"
|
||||||
|
_howToUse:
|
||||||
|
visibility_title: "Видимость"
|
||||||
|
menu_title: "Меню"
|
||||||
_placeholders:
|
_placeholders:
|
||||||
a: "Как дела?"
|
a: "Как дела?"
|
||||||
b: "Что интересного вокруг?"
|
b: "Что интересного вокруг?"
|
||||||
|
|||||||
@@ -916,6 +916,14 @@ information: "Informácie"
|
|||||||
inMinutes: "min"
|
inMinutes: "min"
|
||||||
inDays: "dní"
|
inDays: "dní"
|
||||||
widgets: "Widgety"
|
widgets: "Widgety"
|
||||||
|
_imageEditing:
|
||||||
|
_vars:
|
||||||
|
filename: "Názov súboru"
|
||||||
|
_imageFrameEditor:
|
||||||
|
header: "Hlavička"
|
||||||
|
font: "Písmo"
|
||||||
|
fontSerif: "Pätkové"
|
||||||
|
fontSansSerif: "Bezpätkové"
|
||||||
_chat:
|
_chat:
|
||||||
invitations: "Pozvať"
|
invitations: "Pozvať"
|
||||||
noHistory: "Žiadna história"
|
noHistory: "Žiadna história"
|
||||||
@@ -1264,6 +1272,9 @@ _postForm:
|
|||||||
replyPlaceholder: "Odpoveď na túto poznámku..."
|
replyPlaceholder: "Odpoveď na túto poznámku..."
|
||||||
quotePlaceholder: "Citovanie tejto poznámky..."
|
quotePlaceholder: "Citovanie tejto poznámky..."
|
||||||
channelPlaceholder: "Poslať do kanála..."
|
channelPlaceholder: "Poslať do kanála..."
|
||||||
|
_howToUse:
|
||||||
|
visibility_title: "Viditeľnosť"
|
||||||
|
menu_title: "Menu"
|
||||||
_placeholders:
|
_placeholders:
|
||||||
a: "Čo máte v pláne?"
|
a: "Čo máte v pláne?"
|
||||||
b: "Čo sa deje?"
|
b: "Čo sa deje?"
|
||||||
|
|||||||
@@ -559,6 +559,9 @@ tryAgain: "Försök igen senare"
|
|||||||
signinWithPasskey: "Logga in med nyckel"
|
signinWithPasskey: "Logga in med nyckel"
|
||||||
unknownWebAuthnKey: "Okänd nyckel"
|
unknownWebAuthnKey: "Okänd nyckel"
|
||||||
information: "Om"
|
information: "Om"
|
||||||
|
_imageEditing:
|
||||||
|
_vars:
|
||||||
|
filename: "Filnamn"
|
||||||
_chat:
|
_chat:
|
||||||
invitations: "Inbjudan"
|
invitations: "Inbjudan"
|
||||||
members: "Medlemmar"
|
members: "Medlemmar"
|
||||||
@@ -647,6 +650,9 @@ _visibility:
|
|||||||
home: "Hem"
|
home: "Hem"
|
||||||
followers: "Följare"
|
followers: "Följare"
|
||||||
specified: "Direktnoter"
|
specified: "Direktnoter"
|
||||||
|
_postForm:
|
||||||
|
_howToUse:
|
||||||
|
menu_title: "Meny"
|
||||||
_profile:
|
_profile:
|
||||||
name: "Namn"
|
name: "Namn"
|
||||||
username: "Användarnamn"
|
username: "Användarnamn"
|
||||||
|
|||||||
@@ -1390,6 +1390,17 @@ scheduledToPostOnX: "มีการกำหนดเวลาให้โพ
|
|||||||
schedule: "กำหนดเวลา"
|
schedule: "กำหนดเวลา"
|
||||||
scheduled: "กำหนดเวลา"
|
scheduled: "กำหนดเวลา"
|
||||||
widgets: "วิดเจ็ต"
|
widgets: "วิดเจ็ต"
|
||||||
|
presets: "พรีเซ็ต"
|
||||||
|
_imageEditing:
|
||||||
|
_vars:
|
||||||
|
filename: "ชื่อไฟล์"
|
||||||
|
_imageFrameEditor:
|
||||||
|
header: "ส่วนหัว"
|
||||||
|
withQrCode: "QR โค้ด"
|
||||||
|
font: "แบบอักษร"
|
||||||
|
fontSerif: "Serif"
|
||||||
|
fontSansSerif: "Sans Serif"
|
||||||
|
quitWithoutSaveConfirm: "ต้องการออกโดยไม่บันทึกหรือไม่?"
|
||||||
_compression:
|
_compression:
|
||||||
_quality:
|
_quality:
|
||||||
high: "คุณภาพสูง"
|
high: "คุณภาพสูง"
|
||||||
@@ -2522,6 +2533,9 @@ _postForm:
|
|||||||
replyPlaceholder: "ตอบกลับโน้ตนี้..."
|
replyPlaceholder: "ตอบกลับโน้ตนี้..."
|
||||||
quotePlaceholder: "อ้างโน้ตนี้..."
|
quotePlaceholder: "อ้างโน้ตนี้..."
|
||||||
channelPlaceholder: "โพสต์ลงช่อง..."
|
channelPlaceholder: "โพสต์ลงช่อง..."
|
||||||
|
_howToUse:
|
||||||
|
visibility_title: "การมองเห็น"
|
||||||
|
menu_title: "เมนู"
|
||||||
_placeholders:
|
_placeholders:
|
||||||
a: "ตอนนี้เป็นยังไงบ้าง?"
|
a: "ตอนนี้เป็นยังไงบ้าง?"
|
||||||
b: "มีอะไรเกิดขึ้นหรือเปล่า?"
|
b: "มีอะไรเกิดขึ้นหรือเปล่า?"
|
||||||
|
|||||||
@@ -1379,6 +1379,16 @@ customCssIsDisabledBecauseSafeMode: "Güvenli mod etkin olduğu için özel CSS
|
|||||||
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!"
|
||||||
widgets: "Widget'lar"
|
widgets: "Widget'lar"
|
||||||
|
presets: "Ön ayar"
|
||||||
|
_imageEditing:
|
||||||
|
_vars:
|
||||||
|
filename: "Dosya adı"
|
||||||
|
_imageFrameEditor:
|
||||||
|
header: "Başlık"
|
||||||
|
font: "Yazı tipi"
|
||||||
|
fontSerif: "Serif"
|
||||||
|
fontSansSerif: "Sans Serif"
|
||||||
|
quitWithoutSaveConfirm: "Kaydedilmemiş değişiklikleri silmek ister misin?"
|
||||||
_order:
|
_order:
|
||||||
newest: "Önce yeni"
|
newest: "Önce yeni"
|
||||||
oldest: "Önce eski"
|
oldest: "Önce eski"
|
||||||
@@ -2500,6 +2510,9 @@ _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..."
|
||||||
|
_howToUse:
|
||||||
|
visibility_title: "Görünürlük"
|
||||||
|
menu_title: "Menü"
|
||||||
_placeholders:
|
_placeholders:
|
||||||
a: "Ne yapıyorsun?"
|
a: "Ne yapıyorsun?"
|
||||||
b: "Çevrende neler oluyor?"
|
b: "Çevrende neler oluyor?"
|
||||||
|
|||||||
@@ -922,6 +922,14 @@ information: "Інформація"
|
|||||||
inMinutes: "х"
|
inMinutes: "х"
|
||||||
inDays: "д"
|
inDays: "д"
|
||||||
widgets: "Віджети"
|
widgets: "Віджети"
|
||||||
|
_imageEditing:
|
||||||
|
_vars:
|
||||||
|
filename: "Ім'я файлу"
|
||||||
|
_imageFrameEditor:
|
||||||
|
header: "Заголовок"
|
||||||
|
font: "Шрифт"
|
||||||
|
fontSerif: "Serif"
|
||||||
|
fontSansSerif: "Sans serif"
|
||||||
_chat:
|
_chat:
|
||||||
invitations: "Запросити"
|
invitations: "Запросити"
|
||||||
noHistory: "Історія порожня"
|
noHistory: "Історія порожня"
|
||||||
@@ -1462,6 +1470,9 @@ _postForm:
|
|||||||
replyPlaceholder: "Відповідь на цю нотатку..."
|
replyPlaceholder: "Відповідь на цю нотатку..."
|
||||||
quotePlaceholder: "Прокоментуйте цю нотатку..."
|
quotePlaceholder: "Прокоментуйте цю нотатку..."
|
||||||
channelPlaceholder: "Опублікувати в каналі"
|
channelPlaceholder: "Опублікувати в каналі"
|
||||||
|
_howToUse:
|
||||||
|
visibility_title: "Видимість"
|
||||||
|
menu_title: "Меню"
|
||||||
_placeholders:
|
_placeholders:
|
||||||
a: "Чим займаєтесь?"
|
a: "Чим займаєтесь?"
|
||||||
b: "Що відбувається навколо вас?"
|
b: "Що відбувається навколо вас?"
|
||||||
|
|||||||
@@ -837,6 +837,14 @@ replies: "Javob berish"
|
|||||||
renotes: "Qayta qayd etish"
|
renotes: "Qayta qayd etish"
|
||||||
flip: "Teskari"
|
flip: "Teskari"
|
||||||
information: "Haqida"
|
information: "Haqida"
|
||||||
|
_imageEditing:
|
||||||
|
_vars:
|
||||||
|
filename: "Fayl nomi"
|
||||||
|
_imageFrameEditor:
|
||||||
|
header: "Sarlavha"
|
||||||
|
font: "Shrift"
|
||||||
|
fontSerif: "Serif"
|
||||||
|
fontSansSerif: "Sans Serif"
|
||||||
_chat:
|
_chat:
|
||||||
invitations: "Taklif qilish"
|
invitations: "Taklif qilish"
|
||||||
noHistory: "Tarix yo'q"
|
noHistory: "Tarix yo'q"
|
||||||
@@ -964,6 +972,10 @@ _visibility:
|
|||||||
home: "Bosh sahifa"
|
home: "Bosh sahifa"
|
||||||
followers: "Obunachilar"
|
followers: "Obunachilar"
|
||||||
specified: "Bevosita"
|
specified: "Bevosita"
|
||||||
|
_postForm:
|
||||||
|
_howToUse:
|
||||||
|
visibility_title: "Ko'rinishi"
|
||||||
|
menu_title: "Menyu"
|
||||||
_profile:
|
_profile:
|
||||||
name: "Ism"
|
name: "Ism"
|
||||||
username: "Foydalanuvchi nomi"
|
username: "Foydalanuvchi nomi"
|
||||||
|
|||||||
@@ -1,53 +0,0 @@
|
|||||||
import locales from './index.js';
|
|
||||||
|
|
||||||
let valid = true;
|
|
||||||
|
|
||||||
function writeError(type, lang, tree, data) {
|
|
||||||
process.stderr.write(JSON.stringify({ type, lang, tree, data }));
|
|
||||||
process.stderr.write('\n');
|
|
||||||
valid = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function verify(expected, actual, lang, trace) {
|
|
||||||
for (let key in expected) {
|
|
||||||
if (!Object.prototype.hasOwnProperty.call(actual, key)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (typeof expected[key] === 'object') {
|
|
||||||
if (typeof actual[key] !== 'object') {
|
|
||||||
writeError('mismatched_type', lang, trace ? `${trace}.${key}` : key, { expected: 'object', actual: typeof actual[key] });
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
verify(expected[key], actual[key], lang, trace ? `${trace}.${key}` : key);
|
|
||||||
} else if (typeof expected[key] === 'string') {
|
|
||||||
switch (typeof actual[key]) {
|
|
||||||
case 'object':
|
|
||||||
writeError('mismatched_type', lang, trace ? `${trace}.${key}` : key, { expected: 'string', actual: 'object' });
|
|
||||||
break;
|
|
||||||
case 'undefined':
|
|
||||||
continue;
|
|
||||||
case 'string':
|
|
||||||
const expectedParameters = new Set(expected[key].match(/\{[^}]+\}/g)?.map((s) => s.slice(1, -1)));
|
|
||||||
const actualParameters = new Set(actual[key].match(/\{[^}]+\}/g)?.map((s) => s.slice(1, -1)));
|
|
||||||
for (let parameter of expectedParameters) {
|
|
||||||
if (!actualParameters.has(parameter)) {
|
|
||||||
writeError('missing_parameter', lang, trace ? `${trace}.${key}` : key, { parameter });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const { ['ja-JP']: original, ...verifiees } = locales;
|
|
||||||
|
|
||||||
for (let lang in verifiees) {
|
|
||||||
if (!Object.prototype.hasOwnProperty.call(locales, lang)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
verify(original, verifiees[lang], lang);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!valid) {
|
|
||||||
process.exit(1);
|
|
||||||
}
|
|
||||||
@@ -1223,6 +1223,15 @@ migrateOldSettings_description: "Thông thường, quá trình này diễn ra t
|
|||||||
inMinutes: "phút"
|
inMinutes: "phút"
|
||||||
inDays: "ngày"
|
inDays: "ngày"
|
||||||
widgets: "Tiện ích"
|
widgets: "Tiện ích"
|
||||||
|
presets: "Mẫu thiết lập"
|
||||||
|
_imageEditing:
|
||||||
|
_vars:
|
||||||
|
filename: "Tên tập tin"
|
||||||
|
_imageFrameEditor:
|
||||||
|
header: "Ảnh bìa"
|
||||||
|
font: "Phông chữ"
|
||||||
|
fontSerif: "Serif"
|
||||||
|
fontSansSerif: "Sans Serif"
|
||||||
_chat:
|
_chat:
|
||||||
invitations: "Mời"
|
invitations: "Mời"
|
||||||
noHistory: "Không có dữ liệu"
|
noHistory: "Không có dữ liệu"
|
||||||
@@ -1859,6 +1868,9 @@ _postForm:
|
|||||||
replyPlaceholder: "Trả lời tút này"
|
replyPlaceholder: "Trả lời tút này"
|
||||||
quotePlaceholder: "Trích dẫn tút này"
|
quotePlaceholder: "Trích dẫn tút này"
|
||||||
channelPlaceholder: "Đăng lên một kênh"
|
channelPlaceholder: "Đăng lên một kênh"
|
||||||
|
_howToUse:
|
||||||
|
visibility_title: "Hiển thị"
|
||||||
|
menu_title: "Menu"
|
||||||
_placeholders:
|
_placeholders:
|
||||||
a: "Bạn đang định làm gì?"
|
a: "Bạn đang định làm gì?"
|
||||||
b: "Hôm nay bạn có gì vui?"
|
b: "Hôm nay bạn có gì vui?"
|
||||||
|
|||||||
+116
-43
@@ -53,7 +53,7 @@ copyRemoteLink: "复制远程链接"
|
|||||||
copyLinkRenote: "复制转帖链接"
|
copyLinkRenote: "复制转帖链接"
|
||||||
delete: "删除"
|
delete: "删除"
|
||||||
deleteAndEdit: "删除并编辑"
|
deleteAndEdit: "删除并编辑"
|
||||||
deleteAndEditConfirm: "要删除此帖并再次编辑吗?对此帖的所有回应、转发和回复也将被删除。"
|
deleteAndEditConfirm: "要删除此帖并再次编辑吗?此帖下所有的回应、转发和回复也将被删除。"
|
||||||
addToList: "添加至列表"
|
addToList: "添加至列表"
|
||||||
addToAntenna: "添加到天线"
|
addToAntenna: "添加到天线"
|
||||||
sendMessage: "发送消息"
|
sendMessage: "发送消息"
|
||||||
@@ -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: "列表"
|
||||||
@@ -134,7 +136,7 @@ emojiPicker: "表情符号选择器"
|
|||||||
pinnedEmojisForReactionSettingDescription: "可以设置发表回应时置顶显示的表情符号"
|
pinnedEmojisForReactionSettingDescription: "可以设置发表回应时置顶显示的表情符号"
|
||||||
pinnedEmojisSettingDescription: "可以设置输入表情符号时置顶显示的表情符号"
|
pinnedEmojisSettingDescription: "可以设置输入表情符号时置顶显示的表情符号"
|
||||||
emojiPickerDisplay: "选择器显示设置"
|
emojiPickerDisplay: "选择器显示设置"
|
||||||
overwriteFromPinnedEmojisForReaction: "从「置顶(回应)」设置覆盖"
|
overwriteFromPinnedEmojisForReaction: "使用「置顶(回应)」设置覆盖"
|
||||||
overwriteFromPinnedEmojis: "从全局设置覆盖"
|
overwriteFromPinnedEmojis: "从全局设置覆盖"
|
||||||
reactionSettingDescription2: "拖动重新排序,单击删除,点击 + 添加。"
|
reactionSettingDescription2: "拖动重新排序,单击删除,点击 + 添加。"
|
||||||
rememberNoteVisibility: "保存上次设置的可见性"
|
rememberNoteVisibility: "保存上次设置的可见性"
|
||||||
@@ -151,8 +153,8 @@ block: "拉黑"
|
|||||||
unblock: "取消拉黑"
|
unblock: "取消拉黑"
|
||||||
suspend: "冻结"
|
suspend: "冻结"
|
||||||
unsuspend: "解除冻结"
|
unsuspend: "解除冻结"
|
||||||
blockConfirm: "确定要拉黑吗?"
|
blockConfirm: "确定要屏蔽吗?"
|
||||||
unblockConfirm: "确定要取消拉黑吗?"
|
unblockConfirm: "确定要取消屏蔽吗?"
|
||||||
suspendConfirm: "要冻结吗?"
|
suspendConfirm: "要冻结吗?"
|
||||||
unsuspendConfirm: "要解除冻结吗?"
|
unsuspendConfirm: "要解除冻结吗?"
|
||||||
selectList: "选择列表"
|
selectList: "选择列表"
|
||||||
@@ -172,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: "如果禁用这项设定,远程服务器的敏感媒体将不会被缓存,而是直接链接。"
|
||||||
@@ -182,7 +184,7 @@ flagAsCat: "喵!!!!!!!!!!!!"
|
|||||||
flagAsCatDescription: "喵喵喵??"
|
flagAsCatDescription: "喵喵喵??"
|
||||||
flagShowTimelineReplies: "在时间线上显示帖子的回复"
|
flagShowTimelineReplies: "在时间线上显示帖子的回复"
|
||||||
flagShowTimelineRepliesDescription: "启用时,时间线除了显示用户的帖子外,还会显示其他用户对帖子的回复。"
|
flagShowTimelineRepliesDescription: "启用时,时间线除了显示用户的帖子外,还会显示其他用户对帖子的回复。"
|
||||||
autoAcceptFollowed: "自动允许来自我关注的用户对我的关注请求"
|
autoAcceptFollowed: "自动允许回关请求"
|
||||||
addAccount: "添加账户"
|
addAccount: "添加账户"
|
||||||
reloadAccountsList: "更新账户列表"
|
reloadAccountsList: "更新账户列表"
|
||||||
loginFailed: "登录失败"
|
loginFailed: "登录失败"
|
||||||
@@ -245,8 +247,8 @@ mediaSilencedInstancesDescription: "设置要隐藏媒体文件的服务器,
|
|||||||
federationAllowedHosts: "允许联合的服务器"
|
federationAllowedHosts: "允许联合的服务器"
|
||||||
federationAllowedHostsDescription: "设定允许联合的服务器,以换行分隔。"
|
federationAllowedHostsDescription: "设定允许联合的服务器,以换行分隔。"
|
||||||
muteAndBlock: "屏蔽/拉黑"
|
muteAndBlock: "屏蔽/拉黑"
|
||||||
mutedUsers: "已屏蔽用户"
|
mutedUsers: "已静音的用户"
|
||||||
blockedUsers: "已拉黑的用户"
|
blockedUsers: "已屏蔽的用户"
|
||||||
noUsers: "无用户"
|
noUsers: "无用户"
|
||||||
editProfile: "编辑资料"
|
editProfile: "编辑资料"
|
||||||
noteDeleteConfirm: "确定要删除该帖子吗?"
|
noteDeleteConfirm: "确定要删除该帖子吗?"
|
||||||
@@ -302,6 +304,7 @@ uploadFromUrlMayTakeTime: "上传可能需要一些时间完成。"
|
|||||||
uploadNFiles: "上传 {n} 个文件"
|
uploadNFiles: "上传 {n} 个文件"
|
||||||
explore: "发现"
|
explore: "发现"
|
||||||
messageRead: "已读"
|
messageRead: "已读"
|
||||||
|
readAllChatMessages: "将所有消息标记为已读"
|
||||||
noMoreHistory: "没有更多的历史记录"
|
noMoreHistory: "没有更多的历史记录"
|
||||||
startChat: "开始聊天"
|
startChat: "开始聊天"
|
||||||
nUsersRead: "{n}人已读"
|
nUsersRead: "{n}人已读"
|
||||||
@@ -473,7 +476,7 @@ passwordLessLogin: "无密码登录"
|
|||||||
passwordLessLoginDescription: "不使用密码,仅使用安全密钥或 Passkey 登录"
|
passwordLessLoginDescription: "不使用密码,仅使用安全密钥或 Passkey 登录"
|
||||||
resetPassword: "重置密码"
|
resetPassword: "重置密码"
|
||||||
newPasswordIs: "新的密码是「{password}」"
|
newPasswordIs: "新的密码是「{password}」"
|
||||||
reduceUiAnimation: "减少UI动画"
|
reduceUiAnimation: "减少 UI 动画"
|
||||||
share: "分享"
|
share: "分享"
|
||||||
notFound: "未找到"
|
notFound: "未找到"
|
||||||
notFoundDescription: "没有与指定 URL 对应的页面。"
|
notFoundDescription: "没有与指定 URL 对应的页面。"
|
||||||
@@ -794,7 +797,7 @@ makeExplorable: "使账号可见。"
|
|||||||
makeExplorableDescription: "关闭时,账号不会显示在\"发现\"中。"
|
makeExplorableDescription: "关闭时,账号不会显示在\"发现\"中。"
|
||||||
duplicate: "复制"
|
duplicate: "复制"
|
||||||
left: "左"
|
left: "左"
|
||||||
center: "中央"
|
center: "居中"
|
||||||
wide: "宽"
|
wide: "宽"
|
||||||
narrow: "窄"
|
narrow: "窄"
|
||||||
reloadToApplySetting: "页面刷新后设置才会生效。是否现在刷新页面?"
|
reloadToApplySetting: "页面刷新后设置才会生效。是否现在刷新页面?"
|
||||||
@@ -816,7 +819,7 @@ advanced: "高级"
|
|||||||
advancedSettings: "高级设置"
|
advancedSettings: "高级设置"
|
||||||
value: "值"
|
value: "值"
|
||||||
createdAt: "创建日期"
|
createdAt: "创建日期"
|
||||||
updatedAt: "更新时间"
|
updatedAt: "更新日期"
|
||||||
saveConfirm: "确定保存?"
|
saveConfirm: "确定保存?"
|
||||||
deleteConfirm: "确定删除?"
|
deleteConfirm: "确定删除?"
|
||||||
invalidValue: "无效值。"
|
invalidValue: "无效值。"
|
||||||
@@ -874,7 +877,7 @@ noInquiryUrlWarning: "尚未设置联络地址。"
|
|||||||
noBotProtectionWarning: "尚未设置 Bot 防御。"
|
noBotProtectionWarning: "尚未设置 Bot 防御。"
|
||||||
configure: "设置"
|
configure: "设置"
|
||||||
postToGallery: "创建新图集"
|
postToGallery: "创建新图集"
|
||||||
postToHashtag: "投稿到这个标签"
|
postToHashtag: "发布至该话题"
|
||||||
gallery: "图集"
|
gallery: "图集"
|
||||||
recentPosts: "最新发布"
|
recentPosts: "最新发布"
|
||||||
popularPosts: "热门投稿"
|
popularPosts: "热门投稿"
|
||||||
@@ -1022,6 +1025,9 @@ pushNotificationAlreadySubscribed: "推送通知消息已启用"
|
|||||||
pushNotificationNotSupported: "浏览器或服务器不支持推送通知消息"
|
pushNotificationNotSupported: "浏览器或服务器不支持推送通知消息"
|
||||||
sendPushNotificationReadMessage: "删除已读推送通知消息"
|
sendPushNotificationReadMessage: "删除已读推送通知消息"
|
||||||
sendPushNotificationReadMessageCaption: "您终端设备的电池消耗可能会增加。"
|
sendPushNotificationReadMessageCaption: "您终端设备的电池消耗可能会增加。"
|
||||||
|
pleaseAllowPushNotification: "请在浏览器中启用推送通知"
|
||||||
|
browserPushNotificationDisabled: "未能获取发送通知的权限"
|
||||||
|
browserPushNotificationDisabledDescription: "{serverName}无权限发送通知。请在浏览器设置中允许通知后重新尝试。"
|
||||||
windowMaximize: "最大化"
|
windowMaximize: "最大化"
|
||||||
windowMinimize: "最小化"
|
windowMinimize: "最小化"
|
||||||
windowRestore: "还原"
|
windowRestore: "还原"
|
||||||
@@ -1206,7 +1212,7 @@ renotes: "转发"
|
|||||||
loadReplies: "查看回复"
|
loadReplies: "查看回复"
|
||||||
loadConversation: "查看对话"
|
loadConversation: "查看对话"
|
||||||
pinnedList: "已置顶的列表"
|
pinnedList: "已置顶的列表"
|
||||||
keepScreenOn: "保持设备屏幕开启"
|
keepScreenOn: "保持屏幕常亮"
|
||||||
verifiedLink: "已验证的链接"
|
verifiedLink: "已验证的链接"
|
||||||
notifyNotes: "打开发帖通知"
|
notifyNotes: "打开发帖通知"
|
||||||
unnotifyNotes: "关闭发帖通知"
|
unnotifyNotes: "关闭发帖通知"
|
||||||
@@ -1331,14 +1337,14 @@ accessibility: "辅助功能"
|
|||||||
preferencesProfile: "设置的配置"
|
preferencesProfile: "设置的配置"
|
||||||
copyPreferenceId: "复制设置 ID"
|
copyPreferenceId: "复制设置 ID"
|
||||||
resetToDefaultValue: "重置为默认值"
|
resetToDefaultValue: "重置为默认值"
|
||||||
overrideByAccount: "用账户覆盖"
|
overrideByAccount: "覆盖账号"
|
||||||
untitled: "未命名"
|
untitled: "未命名"
|
||||||
noName: "没有名字"
|
noName: "没有名字"
|
||||||
skip: "跳过"
|
skip: "跳过"
|
||||||
restore: "恢复"
|
restore: "恢复"
|
||||||
syncBetweenDevices: "设备间同步"
|
syncBetweenDevices: "设备间同步"
|
||||||
preferenceSyncConflictTitle: "服务器上已存在设定值"
|
preferenceSyncConflictTitle: "服务器上已存在设定值"
|
||||||
preferenceSyncConflictText: "服务器上已有此设置的设定值。要覆盖哪个设定值?"
|
preferenceSyncConflictText: "即将保存设定值到服务器,但检测到服务器上已有此设置的设定值。要使用哪个设定值?"
|
||||||
preferenceSyncConflictChoiceMerge: "合并"
|
preferenceSyncConflictChoiceMerge: "合并"
|
||||||
preferenceSyncConflictChoiceServer: "服务器上的设定值"
|
preferenceSyncConflictChoiceServer: "服务器上的设定值"
|
||||||
preferenceSyncConflictChoiceDevice: "设备上的设定值"
|
preferenceSyncConflictChoiceDevice: "设备上的设定值"
|
||||||
@@ -1396,6 +1402,50 @@ scheduled: "定时"
|
|||||||
widgets: "小工具"
|
widgets: "小工具"
|
||||||
deviceInfo: "设备信息"
|
deviceInfo: "设备信息"
|
||||||
deviceInfoDescription: "咨询技术问题时,将以下信息一并发送有助于解决问题。"
|
deviceInfoDescription: "咨询技术问题时,将以下信息一并发送有助于解决问题。"
|
||||||
|
youAreAdmin: "你是管理员"
|
||||||
|
frame: "边框"
|
||||||
|
presets: "预设值"
|
||||||
|
zeroPadding: "填充 0"
|
||||||
|
_imageEditing:
|
||||||
|
_vars:
|
||||||
|
caption: "文件标题"
|
||||||
|
filename: "文件名称"
|
||||||
|
filename_without_ext: "不带扩展名的文件名"
|
||||||
|
year: "拍摄年"
|
||||||
|
month: "拍摄月"
|
||||||
|
day: "拍摄日"
|
||||||
|
hour: "拍摄时间(时)"
|
||||||
|
minute: "拍摄时间(分)"
|
||||||
|
second: "拍摄时间(秒)"
|
||||||
|
camera_model: "相机名称"
|
||||||
|
camera_lens_model: "镜头型号"
|
||||||
|
camera_mm: "焦距"
|
||||||
|
camera_mm_35: "焦距(35mm等效)"
|
||||||
|
camera_f: "光圈"
|
||||||
|
camera_s: "快门速度"
|
||||||
|
camera_iso: "ISO"
|
||||||
|
gps_lat: "纬度"
|
||||||
|
gps_long: "经度"
|
||||||
|
_imageFrameEditor:
|
||||||
|
title: "编辑边框"
|
||||||
|
tip: "您可以通过添加包含边框和元数据的标签来装饰图片。"
|
||||||
|
header: "顶栏"
|
||||||
|
footer: "页脚"
|
||||||
|
borderThickness: "边框宽度"
|
||||||
|
labelThickness: "标签宽度"
|
||||||
|
labelScale: "标签比例"
|
||||||
|
centered: "居中"
|
||||||
|
captionMain: "标题(大)"
|
||||||
|
captionSub: "标题(小)"
|
||||||
|
availableVariables: "可修改的变量"
|
||||||
|
withQrCode: "二维码"
|
||||||
|
backgroundColor: "背景颜色"
|
||||||
|
textColor: "文本颜色"
|
||||||
|
font: "字体"
|
||||||
|
fontSerif: "衬线字体"
|
||||||
|
fontSansSerif: "无衬线字体"
|
||||||
|
quitWithoutSaveConfirm: "放弃未保存的更改?"
|
||||||
|
failedToLoadImage: "图片加载失败"
|
||||||
_compression:
|
_compression:
|
||||||
_quality:
|
_quality:
|
||||||
high: "高质量"
|
high: "高质量"
|
||||||
@@ -1413,36 +1463,36 @@ _chat:
|
|||||||
noMessagesYet: "还没有消息"
|
noMessagesYet: "还没有消息"
|
||||||
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: "加入"
|
||||||
ignore: "忽略"
|
ignore: "忽略"
|
||||||
leave: "退出房间"
|
leave: "退出群聊"
|
||||||
members: "成员"
|
members: "成员"
|
||||||
searchMessages: "搜索消息"
|
searchMessages: "搜索消息"
|
||||||
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: "此用户仅接受关注者发起的聊天。"
|
||||||
@@ -1498,6 +1548,8 @@ _settings:
|
|||||||
showUrlPreview: "显示 URL 预览"
|
showUrlPreview: "显示 URL 预览"
|
||||||
showAvailableReactionsFirstInNote: "在顶部显示可用的回应"
|
showAvailableReactionsFirstInNote: "在顶部显示可用的回应"
|
||||||
showPageTabBarBottom: "在下方显示页面标签栏"
|
showPageTabBarBottom: "在下方显示页面标签栏"
|
||||||
|
emojiPaletteBanner: "可以将固定显示表情符号选择器的预设注册至调色板,也可以自定义表情符号选择器的显示方式。"
|
||||||
|
enableAnimatedImages: "启用动画图像"
|
||||||
_chat:
|
_chat:
|
||||||
showSenderName: "显示发送者的名字"
|
showSenderName: "显示发送者的名字"
|
||||||
sendOnEnter: "回车键发送"
|
sendOnEnter: "回车键发送"
|
||||||
@@ -1506,6 +1558,8 @@ _preferencesProfile:
|
|||||||
profileNameDescription: "请指定用于识别此设备的名称"
|
profileNameDescription: "请指定用于识别此设备的名称"
|
||||||
profileNameDescription2: "如「PC」、「手机」等"
|
profileNameDescription2: "如「PC」、「手机」等"
|
||||||
manageProfiles: "管理配置文件"
|
manageProfiles: "管理配置文件"
|
||||||
|
shareSameProfileBetweenDevicesIsNotRecommended: "不建议在多个设备间共用同一个配置文件。"
|
||||||
|
useSyncBetweenDevicesOptionIfYouWantToSyncSetting: "若想在多个设备间同步某些设置,请为每个设置打开「多设备间同步」选项。"
|
||||||
_preferencesBackup:
|
_preferencesBackup:
|
||||||
autoBackup: "自动备份"
|
autoBackup: "自动备份"
|
||||||
restoreFromBackup: "从备份恢复"
|
restoreFromBackup: "从备份恢复"
|
||||||
@@ -1515,6 +1569,7 @@ _preferencesBackup:
|
|||||||
youNeedToNameYourProfileToEnableAutoBackup: "需指定配置名以开启自动备份。"
|
youNeedToNameYourProfileToEnableAutoBackup: "需指定配置名以开启自动备份。"
|
||||||
autoPreferencesBackupIsNotEnabledForThisDevice: "此设备未开启自动备份"
|
autoPreferencesBackupIsNotEnabledForThisDevice: "此设备未开启自动备份"
|
||||||
backupFound: "已找到备份"
|
backupFound: "已找到备份"
|
||||||
|
forceBackup: "强制备份设置"
|
||||||
_accountSettings:
|
_accountSettings:
|
||||||
requireSigninToViewContents: "需要登录才能显示内容"
|
requireSigninToViewContents: "需要登录才能显示内容"
|
||||||
requireSigninToViewContentsDescription1: "您发布的所有帖子将变成需要登入后才会显示。有望防止爬虫收集各种信息。"
|
requireSigninToViewContentsDescription1: "您发布的所有帖子将变成需要登入后才会显示。有望防止爬虫收集各种信息。"
|
||||||
@@ -2176,7 +2231,7 @@ _instanceTicker:
|
|||||||
_serverDisconnectedBehavior:
|
_serverDisconnectedBehavior:
|
||||||
reload: "自动重载"
|
reload: "自动重载"
|
||||||
dialog: "对话框警告"
|
dialog: "对话框警告"
|
||||||
quiet: "安静警告"
|
quiet: "静默警告"
|
||||||
_channel:
|
_channel:
|
||||||
create: "创建频道"
|
create: "创建频道"
|
||||||
edit: "编辑频道"
|
edit: "编辑频道"
|
||||||
@@ -2495,7 +2550,7 @@ _poll:
|
|||||||
noOnlyOneChoice: "需要至少两个选项"
|
noOnlyOneChoice: "需要至少两个选项"
|
||||||
choiceN: "选项{n}"
|
choiceN: "选项{n}"
|
||||||
noMore: "无法再添加更多了"
|
noMore: "无法再添加更多了"
|
||||||
canMultipleVote: "允许选择多个选项"
|
canMultipleVote: "允许多选"
|
||||||
expiration: "截止时间"
|
expiration: "截止时间"
|
||||||
infinite: "永久"
|
infinite: "永久"
|
||||||
at: "指定日期"
|
at: "指定日期"
|
||||||
@@ -2504,13 +2559,13 @@ _poll:
|
|||||||
deadlineTime: "时间"
|
deadlineTime: "时间"
|
||||||
duration: "期限"
|
duration: "期限"
|
||||||
votesCount: "{n}票"
|
votesCount: "{n}票"
|
||||||
totalVotes: "总票数 {n}"
|
totalVotes: "总计{n}票"
|
||||||
vote: "投票"
|
vote: "投票"
|
||||||
showResult: "显示结果"
|
showResult: "查看结果"
|
||||||
voted: "已投票"
|
voted: "已投票"
|
||||||
closed: "已截止"
|
closed: "已截止"
|
||||||
remainingDays: "{d}天{h}小时后截止"
|
remainingDays: "{d}天{h}小时后截止"
|
||||||
remainingHours: "{h} 小时 {m} 分后截止"
|
remainingHours: "{h}小时{m}分后截止"
|
||||||
remainingMinutes: "{m}分{s}秒后截止"
|
remainingMinutes: "{m}分{s}秒后截止"
|
||||||
remainingSeconds: "{s}秒后截止"
|
remainingSeconds: "{s}秒后截止"
|
||||||
_visibility:
|
_visibility:
|
||||||
@@ -2530,6 +2585,20 @@ _postForm:
|
|||||||
replyPlaceholder: "回复这个帖子..."
|
replyPlaceholder: "回复这个帖子..."
|
||||||
quotePlaceholder: "引用这个帖子..."
|
quotePlaceholder: "引用这个帖子..."
|
||||||
channelPlaceholder: "发布到频道…"
|
channelPlaceholder: "发布到频道…"
|
||||||
|
showHowToUse: "显示窗口说明"
|
||||||
|
_howToUse:
|
||||||
|
content_title: "正文"
|
||||||
|
content_description: "在此输入要发布的内容。"
|
||||||
|
toolbar_title: "工具栏"
|
||||||
|
toolbar_description: "可在此添加文件和投票、设置注释和话题标签、插入表情符号和提及等。"
|
||||||
|
account_title: "账号菜单"
|
||||||
|
account_description: "可在此切换发帖用的账号、查看账户下保存的草稿及定时发送帖。"
|
||||||
|
visibility_title: "可见性"
|
||||||
|
visibility_description: "可在此设置帖子的公开范围。"
|
||||||
|
menu_title: "菜单"
|
||||||
|
menu_description: "可在此进行保存草稿、设置定时发帖、设置回应等其它操作。"
|
||||||
|
submit_title: "发帖按钮"
|
||||||
|
submit_description: "发布帖子。也可用 Ctrl + Enter / Cmd + Enter 来发帖。"
|
||||||
_placeholders:
|
_placeholders:
|
||||||
a: "现在怎么样?"
|
a: "现在怎么样?"
|
||||||
b: "想好发些什么了吗?"
|
b: "想好发些什么了吗?"
|
||||||
@@ -2680,7 +2749,7 @@ _notification:
|
|||||||
newNote: "新的帖子"
|
newNote: "新的帖子"
|
||||||
unreadAntennaNote: "天线 {name}"
|
unreadAntennaNote: "天线 {name}"
|
||||||
roleAssigned: "授予的角色"
|
roleAssigned: "授予的角色"
|
||||||
chatRoomInvitationReceived: "受邀加入聊天室"
|
chatRoomInvitationReceived: "您已被邀请加入群聊"
|
||||||
emptyPushNotificationMessage: "推送通知已更新"
|
emptyPushNotificationMessage: "推送通知已更新"
|
||||||
achievementEarned: "获得成就"
|
achievementEarned: "获得成就"
|
||||||
testNotification: "测试通知"
|
testNotification: "测试通知"
|
||||||
@@ -2711,7 +2780,7 @@ _notification:
|
|||||||
receiveFollowRequest: "收到关注请求"
|
receiveFollowRequest: "收到关注请求"
|
||||||
followRequestAccepted: "关注请求已通过"
|
followRequestAccepted: "关注请求已通过"
|
||||||
roleAssigned: "授予的角色"
|
roleAssigned: "授予的角色"
|
||||||
chatRoomInvitationReceived: "受邀加入聊天室"
|
chatRoomInvitationReceived: "您已被邀请加入群聊"
|
||||||
achievementEarned: "取得的成就"
|
achievementEarned: "取得的成就"
|
||||||
exportCompleted: "已完成导出"
|
exportCompleted: "已完成导出"
|
||||||
login: "登录"
|
login: "登录"
|
||||||
@@ -2807,6 +2876,8 @@ _abuseReport:
|
|||||||
notifiedWebhook: "使用的 webhook"
|
notifiedWebhook: "使用的 webhook"
|
||||||
deleteConfirm: "要删除通知吗?"
|
deleteConfirm: "要删除通知吗?"
|
||||||
_moderationLogTypes:
|
_moderationLogTypes:
|
||||||
|
clearQueue: "清除队列"
|
||||||
|
promoteQueue: "重新执行队列中的任务"
|
||||||
createRole: "创建角色"
|
createRole: "创建角色"
|
||||||
deleteRole: "删除角色"
|
deleteRole: "删除角色"
|
||||||
updateRole: "更新角色"
|
updateRole: "更新角色"
|
||||||
@@ -2851,11 +2922,11 @@ _moderationLogTypes:
|
|||||||
createAbuseReportNotificationRecipient: "新建了举报通知"
|
createAbuseReportNotificationRecipient: "新建了举报通知"
|
||||||
updateAbuseReportNotificationRecipient: "更新了举报通知"
|
updateAbuseReportNotificationRecipient: "更新了举报通知"
|
||||||
deleteAbuseReportNotificationRecipient: "删除了举报通知"
|
deleteAbuseReportNotificationRecipient: "删除了举报通知"
|
||||||
deleteAccount: "删除了账户"
|
deleteAccount: "删除帐户"
|
||||||
deletePage: "删除了页面"
|
deletePage: "删除页面"
|
||||||
deleteFlash: "删除了 Play"
|
deleteFlash: "删除 Play"
|
||||||
deleteGalleryPost: "删除图集内容"
|
deleteGalleryPost: "删除图集内容"
|
||||||
deleteChatRoom: "删除聊天室"
|
deleteChatRoom: "删除群聊"
|
||||||
updateProxyAccountDescription: "更新代理账户的简介"
|
updateProxyAccountDescription: "更新代理账户的简介"
|
||||||
_fileViewer:
|
_fileViewer:
|
||||||
title: "文件信息"
|
title: "文件信息"
|
||||||
@@ -3075,7 +3146,7 @@ _selfXssPrevention:
|
|||||||
description3: "详情请看这里。{link}"
|
description3: "详情请看这里。{link}"
|
||||||
_followRequest:
|
_followRequest:
|
||||||
recieved: "收到的请求"
|
recieved: "收到的请求"
|
||||||
sent: "已发送的请求"
|
sent: "发送的请求"
|
||||||
_remoteLookupErrors:
|
_remoteLookupErrors:
|
||||||
_federationNotAllowed:
|
_federationNotAllowed:
|
||||||
title: "无法与此服务器通信"
|
title: "无法与此服务器通信"
|
||||||
@@ -3128,7 +3199,7 @@ _search:
|
|||||||
serverHostPlaceholder: "如:misskey.example.com"
|
serverHostPlaceholder: "如:misskey.example.com"
|
||||||
_serverSetupWizard:
|
_serverSetupWizard:
|
||||||
installCompleted: "Misskey 安装完成!"
|
installCompleted: "Misskey 安装完成!"
|
||||||
firstCreateAccount: "首先来创建管理员账号吧。"
|
firstCreateAccount: "首先,创建一个管理员帐户。"
|
||||||
accountCreated: "管理员账号已创建!"
|
accountCreated: "管理员账号已创建!"
|
||||||
serverSetting: "服务器设置"
|
serverSetting: "服务器设置"
|
||||||
youCanEasilyConfigureOptimalServerSettingsWithThisWizard: "用此向导来轻松地以最佳方式配置服务器。"
|
youCanEasilyConfigureOptimalServerSettingsWithThisWizard: "用此向导来轻松地以最佳方式配置服务器。"
|
||||||
@@ -3138,7 +3209,7 @@ _serverSetupWizard:
|
|||||||
single: "单用户服务器"
|
single: "单用户服务器"
|
||||||
single_description: "仅供自己使用的单人服务器"
|
single_description: "仅供自己使用的单人服务器"
|
||||||
single_youCanCreateMultipleAccounts: "使用单用户服务器模式使用时,也可以根据需要创建多个账号。"
|
single_youCanCreateMultipleAccounts: "使用单用户服务器模式使用时,也可以根据需要创建多个账号。"
|
||||||
group: "小圈子服务器"
|
group: "群组服务器"
|
||||||
group_description: "邀请其他可信用户一起使用的多人服务器"
|
group_description: "邀请其他可信用户一起使用的多人服务器"
|
||||||
open: "开放服务器"
|
open: "开放服务器"
|
||||||
open_description: "以容纳不限定数量的用户的模式运行"
|
open_description: "以容纳不限定数量的用户的模式运行"
|
||||||
@@ -3175,7 +3246,7 @@ _uploader:
|
|||||||
compressedToX: "压缩 {x}"
|
compressedToX: "压缩 {x}"
|
||||||
savedXPercent: "节省了 {x}% 的空间"
|
savedXPercent: "节省了 {x}% 的空间"
|
||||||
abortConfirm: "还有未上传的文件,要中止吗?"
|
abortConfirm: "还有未上传的文件,要中止吗?"
|
||||||
doneConfirm: "还有未上传的文件,要完成吗?"
|
doneConfirm: "部分文件尚未上传,是否继续?"
|
||||||
maxFileSizeIsX: "可上传最大 {x} 的文件。"
|
maxFileSizeIsX: "可上传最大 {x} 的文件。"
|
||||||
allowedTypes: "可上传的文件类型"
|
allowedTypes: "可上传的文件类型"
|
||||||
tip: "文件还没有被上传。可在此对话框中进行上传前确认、重命名、压缩、裁剪等操作。准备完成后,点击「上传」即可开始上传。"
|
tip: "文件还没有被上传。可在此对话框中进行上传前确认、重命名、压缩、裁剪等操作。准备完成后,点击「上传」即可开始上传。"
|
||||||
@@ -3195,11 +3266,11 @@ watermark: "水印"
|
|||||||
defaultPreset: "默认预设"
|
defaultPreset: "默认预设"
|
||||||
_watermarkEditor:
|
_watermarkEditor:
|
||||||
tip: "可在图像内增加包含作者等信息的水印。"
|
tip: "可在图像内增加包含作者等信息的水印。"
|
||||||
quitWithoutSaveConfirm: "不保存就退出吗?"
|
quitWithoutSaveConfirm: "放弃未保存的更改?"
|
||||||
driveFileTypeWarn: "不支持此文件"
|
driveFileTypeWarn: "不支持此文件"
|
||||||
driveFileTypeWarnDescription: "请选择图像文件"
|
driveFileTypeWarnDescription: "请选择图像文件"
|
||||||
title: "编辑水印"
|
title: "编辑水印"
|
||||||
cover: "覆盖全体"
|
cover: "覆盖所有"
|
||||||
repeat: "平铺"
|
repeat: "平铺"
|
||||||
preserveBoundingRect: "调整为旋转时不超出范围"
|
preserveBoundingRect: "调整为旋转时不超出范围"
|
||||||
opacity: "不透明度"
|
opacity: "不透明度"
|
||||||
@@ -3223,11 +3294,13 @@ _watermarkEditor:
|
|||||||
polkadotSubDotRadius: "副波点的大小"
|
polkadotSubDotRadius: "副波点的大小"
|
||||||
polkadotSubDotDivisions: "副波点的数量"
|
polkadotSubDotDivisions: "副波点的数量"
|
||||||
leaveBlankToAccountUrl: "留空则为账户 URL"
|
leaveBlankToAccountUrl: "留空则为账户 URL"
|
||||||
|
failedToLoadImage: "图片加载失败"
|
||||||
_imageEffector:
|
_imageEffector:
|
||||||
title: "效果"
|
title: "效果"
|
||||||
addEffect: "添加效果"
|
addEffect: "添加效果"
|
||||||
discardChangesConfirm: "丢弃当前设置并退出?"
|
discardChangesConfirm: "丢弃当前设置并退出?"
|
||||||
nothingToConfigure: "还没有设置"
|
nothingToConfigure: "还没有设置"
|
||||||
|
failedToLoadImage: "图片加载失败"
|
||||||
_fxs:
|
_fxs:
|
||||||
chromaticAberration: "色差"
|
chromaticAberration: "色差"
|
||||||
glitch: "故障"
|
glitch: "故障"
|
||||||
|
|||||||
+76
-2
@@ -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: "清單"
|
||||||
@@ -172,7 +174,7 @@ emojiUrl: "表情符號 URL"
|
|||||||
addEmoji: "新增表情符號"
|
addEmoji: "新增表情符號"
|
||||||
settingGuide: "推薦設定"
|
settingGuide: "推薦設定"
|
||||||
cacheRemoteFiles: "快取遠端檔案"
|
cacheRemoteFiles: "快取遠端檔案"
|
||||||
cacheRemoteFilesDescription: "啟用此設定後,遠端檔案會被快取在本伺服器的儲存空間中。雖然顯示圖片會變快,但會消耗較多伺服器的儲存空間。至於要快取遠端使用者到什麼程度,是依照角色的雲端硬碟容量而定。當超過這個限制時,從較舊的檔案開始自快取中刪除並改為連結。關閉這個設定時,遠端檔案從一開始就維持連結的方式,但建議將 default.yml 的 proxyRemoteFiles 設為 true,以便產生圖片的縮圖並保護使用者的隱私。"
|
cacheRemoteFilesDescription: "啟用這個設定後,遠端檔案會被快取到這台伺服器的儲存空間中。這樣能加快圖片的顯示速度,但會多占用伺服器的儲存容量。遠端使用者能保留多少快取,取決於其角色所設定的硬碟容量上限。若超過這個上限,系統會從最舊的檔案開始刪除快取並改成連結。若停用這個設定,遠端檔案一開始就只會以連結的形式保留。"
|
||||||
youCanCleanRemoteFilesCache: "按檔案管理的🗑️按鈕,可將快取全部刪除。"
|
youCanCleanRemoteFilesCache: "按檔案管理的🗑️按鈕,可將快取全部刪除。"
|
||||||
cacheRemoteSensitiveFiles: "快取遠端的敏感檔案"
|
cacheRemoteSensitiveFiles: "快取遠端的敏感檔案"
|
||||||
cacheRemoteSensitiveFilesDescription: "若停用這個設定,則不會快取遠端的敏感檔案,而是直接連結。"
|
cacheRemoteSensitiveFilesDescription: "若停用這個設定,則不會快取遠端的敏感檔案,而是直接連結。"
|
||||||
@@ -302,6 +304,7 @@ uploadFromUrlMayTakeTime: "還需要一些時間才能完成上傳。"
|
|||||||
uploadNFiles: "上傳了 {n} 個檔案"
|
uploadNFiles: "上傳了 {n} 個檔案"
|
||||||
explore: "探索"
|
explore: "探索"
|
||||||
messageRead: "已讀"
|
messageRead: "已讀"
|
||||||
|
readAllChatMessages: "將所有訊息標記為已讀"
|
||||||
noMoreHistory: "沒有更多歷史紀錄"
|
noMoreHistory: "沒有更多歷史紀錄"
|
||||||
startChat: "開始聊天"
|
startChat: "開始聊天"
|
||||||
nUsersRead: "{n} 人已讀"
|
nUsersRead: "{n} 人已讀"
|
||||||
@@ -1022,6 +1025,9 @@ pushNotificationAlreadySubscribed: "推播通知啟用中"
|
|||||||
pushNotificationNotSupported: "瀏覽器或伺服器不支援推播通知"
|
pushNotificationNotSupported: "瀏覽器或伺服器不支援推播通知"
|
||||||
sendPushNotificationReadMessage: "如果已閱讀通知與訊息,就刪除推播通知"
|
sendPushNotificationReadMessage: "如果已閱讀通知與訊息,就刪除推播通知"
|
||||||
sendPushNotificationReadMessageCaption: "可能會導致裝置的電池消耗量增加。"
|
sendPushNotificationReadMessageCaption: "可能會導致裝置的電池消耗量增加。"
|
||||||
|
pleaseAllowPushNotification: "請允許瀏覽器的通知設定"
|
||||||
|
browserPushNotificationDisabled: "取得通知發送權限失敗"
|
||||||
|
browserPushNotificationDisabledDescription: "您沒有權限從 {serverName} 發送通知。請在瀏覽器設定中允許通知,然後再試一次。"
|
||||||
windowMaximize: "最大化"
|
windowMaximize: "最大化"
|
||||||
windowMinimize: "最小化"
|
windowMinimize: "最小化"
|
||||||
windowRestore: "復原"
|
windowRestore: "復原"
|
||||||
@@ -1172,6 +1178,7 @@ installed: "已安裝"
|
|||||||
branding: "品牌宣傳"
|
branding: "品牌宣傳"
|
||||||
enableServerMachineStats: "公佈伺服器的機器資訊"
|
enableServerMachineStats: "公佈伺服器的機器資訊"
|
||||||
enableIdenticonGeneration: "啟用生成使用者的 Identicon "
|
enableIdenticonGeneration: "啟用生成使用者的 Identicon "
|
||||||
|
showRoleBadgesOfRemoteUsers: "顯示授予遠端使用者的角色徽章"
|
||||||
turnOffToImprovePerformance: "關閉時會提高性能。"
|
turnOffToImprovePerformance: "關閉時會提高性能。"
|
||||||
createInviteCode: "建立邀請碼"
|
createInviteCode: "建立邀請碼"
|
||||||
createWithOptions: "使用選項建立"
|
createWithOptions: "使用選項建立"
|
||||||
@@ -1395,6 +1402,50 @@ scheduled: "排定"
|
|||||||
widgets: "小工具"
|
widgets: "小工具"
|
||||||
deviceInfo: "硬體資訊"
|
deviceInfo: "硬體資訊"
|
||||||
deviceInfoDescription: "在提出技術性諮詢時,若能同時提供以下資訊,將有助於解決問題。"
|
deviceInfoDescription: "在提出技術性諮詢時,若能同時提供以下資訊,將有助於解決問題。"
|
||||||
|
youAreAdmin: "您是管理員"
|
||||||
|
frame: "邊框"
|
||||||
|
presets: "預設值"
|
||||||
|
zeroPadding: "補零"
|
||||||
|
_imageEditing:
|
||||||
|
_vars:
|
||||||
|
caption: "檔案標題"
|
||||||
|
filename: "檔案名稱"
|
||||||
|
filename_without_ext: "無副檔名的檔案名稱"
|
||||||
|
year: "拍攝年份"
|
||||||
|
month: "拍攝月份"
|
||||||
|
day: "拍攝日期"
|
||||||
|
hour: "拍攝時間(小時)"
|
||||||
|
minute: "拍攝時間(分鐘)"
|
||||||
|
second: "拍攝時間(秒)"
|
||||||
|
camera_model: "相機名稱"
|
||||||
|
camera_lens_model: "鏡頭型號"
|
||||||
|
camera_mm: "焦距"
|
||||||
|
camera_mm_35: "焦距(換算為 35mm 底片等效焦距)"
|
||||||
|
camera_f: "光圈"
|
||||||
|
camera_s: "快門速度"
|
||||||
|
camera_iso: "ISO 感光度"
|
||||||
|
gps_lat: "緯度"
|
||||||
|
gps_long: "經度"
|
||||||
|
_imageFrameEditor:
|
||||||
|
title: "編輯邊框"
|
||||||
|
tip: "可以在圖片上添加包含邊框或 EXIF 的標籤來裝飾圖片。"
|
||||||
|
header: "標題"
|
||||||
|
footer: "頁尾"
|
||||||
|
borderThickness: "邊框寬度"
|
||||||
|
labelThickness: "標籤寬度"
|
||||||
|
labelScale: "標籤縮放比例"
|
||||||
|
centered: "置中對齊"
|
||||||
|
captionMain: "標題文字(大)"
|
||||||
|
captionSub: "標題文字(小)"
|
||||||
|
availableVariables: "可使用的變數"
|
||||||
|
withQrCode: "二維條碼"
|
||||||
|
backgroundColor: "背景顏色"
|
||||||
|
textColor: "文字顏色"
|
||||||
|
font: "字型"
|
||||||
|
fontSerif: "襯線體"
|
||||||
|
fontSansSerif: "無襯線體"
|
||||||
|
quitWithoutSaveConfirm: "不儲存就退出嗎?"
|
||||||
|
failedToLoadImage: "圖片載入失敗"
|
||||||
_compression:
|
_compression:
|
||||||
_quality:
|
_quality:
|
||||||
high: "高品質"
|
high: "高品質"
|
||||||
@@ -1497,6 +1548,8 @@ _settings:
|
|||||||
showUrlPreview: "顯示網址預覽"
|
showUrlPreview: "顯示網址預覽"
|
||||||
showAvailableReactionsFirstInNote: "將可用的反應顯示在頂部"
|
showAvailableReactionsFirstInNote: "將可用的反應顯示在頂部"
|
||||||
showPageTabBarBottom: "在底部顯示頁面的標籤列"
|
showPageTabBarBottom: "在底部顯示頁面的標籤列"
|
||||||
|
emojiPaletteBanner: "可以將固定顯示在表情符號選擇器的預設項目註冊為調色盤,或者自訂選擇器的顯示方式。"
|
||||||
|
enableAnimatedImages: "啟用動畫圖片"
|
||||||
_chat:
|
_chat:
|
||||||
showSenderName: "顯示發送者的名稱"
|
showSenderName: "顯示發送者的名稱"
|
||||||
sendOnEnter: "按下 Enter 發送訊息"
|
sendOnEnter: "按下 Enter 發送訊息"
|
||||||
@@ -1505,6 +1558,8 @@ _preferencesProfile:
|
|||||||
profileNameDescription: "設定一個名稱來識別此裝置。"
|
profileNameDescription: "設定一個名稱來識別此裝置。"
|
||||||
profileNameDescription2: "例如:「主要個人電腦」、「智慧型手機」等"
|
profileNameDescription2: "例如:「主要個人電腦」、「智慧型手機」等"
|
||||||
manageProfiles: "管理個人檔案"
|
manageProfiles: "管理個人檔案"
|
||||||
|
shareSameProfileBetweenDevicesIsNotRecommended: "不建議在多個裝置上共用同一個設定檔。"
|
||||||
|
useSyncBetweenDevicesOptionIfYouWantToSyncSetting: "如果您希望在多個裝置之間同步某些設定項目,請分別啟用「跨裝置同步」選項。"
|
||||||
_preferencesBackup:
|
_preferencesBackup:
|
||||||
autoBackup: "自動備份"
|
autoBackup: "自動備份"
|
||||||
restoreFromBackup: "從備份還原"
|
restoreFromBackup: "從備份還原"
|
||||||
@@ -1514,6 +1569,7 @@ _preferencesBackup:
|
|||||||
youNeedToNameYourProfileToEnableAutoBackup: "要啟用自動備份,必須設定檔案名稱。"
|
youNeedToNameYourProfileToEnableAutoBackup: "要啟用自動備份,必須設定檔案名稱。"
|
||||||
autoPreferencesBackupIsNotEnabledForThisDevice: "此裝置未啟用自動備份設定。"
|
autoPreferencesBackupIsNotEnabledForThisDevice: "此裝置未啟用自動備份設定。"
|
||||||
backupFound: "找到設定的備份"
|
backupFound: "找到設定的備份"
|
||||||
|
forceBackup: "強制備份設定"
|
||||||
_accountSettings:
|
_accountSettings:
|
||||||
requireSigninToViewContents: "須登入以顯示內容"
|
requireSigninToViewContents: "須登入以顯示內容"
|
||||||
requireSigninToViewContentsDescription1: "必須登入才會顯示您建立的貼文等內容。可望有效防止資訊被爬蟲蒐集。"
|
requireSigninToViewContentsDescription1: "必須登入才會顯示您建立的貼文等內容。可望有效防止資訊被爬蟲蒐集。"
|
||||||
@@ -2529,6 +2585,20 @@ _postForm:
|
|||||||
replyPlaceholder: "回覆此貼文..."
|
replyPlaceholder: "回覆此貼文..."
|
||||||
quotePlaceholder: "引用此貼文..."
|
quotePlaceholder: "引用此貼文..."
|
||||||
channelPlaceholder: "發佈到頻道"
|
channelPlaceholder: "發佈到頻道"
|
||||||
|
showHowToUse: "顯示表單說明"
|
||||||
|
_howToUse:
|
||||||
|
content_title: "內文"
|
||||||
|
content_description: "請輸入要發布的內容。"
|
||||||
|
toolbar_title: "工具列"
|
||||||
|
toolbar_description: "可以附加檔案或票選活動、設定註解與標籤、插入表情符號或提及等。"
|
||||||
|
account_title: "帳號選單"
|
||||||
|
account_description: "可以切換要發布的帳號,並查看該帳號所儲存的草稿與預約發布列表。"
|
||||||
|
visibility_title: "可見性"
|
||||||
|
visibility_description: "可以設定貼文的公開範圍。"
|
||||||
|
menu_title: "選單"
|
||||||
|
menu_description: "可以進行其他操作,例如儲存為草稿、預約發佈貼文、或設定反應等。\n"
|
||||||
|
submit_title: "貼文按鈕"
|
||||||
|
submit_description: "發布貼文。也可以使用 Ctrl + Enter 或 Cmd + Enter 來發布。"
|
||||||
_placeholders:
|
_placeholders:
|
||||||
a: "今天過得如何?"
|
a: "今天過得如何?"
|
||||||
b: "有什麼新鮮事嗎?"
|
b: "有什麼新鮮事嗎?"
|
||||||
@@ -2638,7 +2708,7 @@ _pages:
|
|||||||
hideTitleWhenPinned: "被置頂於個人資料時隱藏頁面標題"
|
hideTitleWhenPinned: "被置頂於個人資料時隱藏頁面標題"
|
||||||
font: "字型"
|
font: "字型"
|
||||||
fontSerif: "襯線體"
|
fontSerif: "襯線體"
|
||||||
fontSansSerif: "黑體"
|
fontSansSerif: "無襯線體"
|
||||||
eyeCatchingImageSet: "設定封面影像"
|
eyeCatchingImageSet: "設定封面影像"
|
||||||
eyeCatchingImageRemove: "刪除封面影像"
|
eyeCatchingImageRemove: "刪除封面影像"
|
||||||
chooseBlock: "新增方塊"
|
chooseBlock: "新增方塊"
|
||||||
@@ -2806,6 +2876,8 @@ _abuseReport:
|
|||||||
notifiedWebhook: "使用的 Webhook"
|
notifiedWebhook: "使用的 Webhook"
|
||||||
deleteConfirm: "確定要刪除通知對象嗎?"
|
deleteConfirm: "確定要刪除通知對象嗎?"
|
||||||
_moderationLogTypes:
|
_moderationLogTypes:
|
||||||
|
clearQueue: "清除佇列"
|
||||||
|
promoteQueue: "重新嘗試排程中的工作"
|
||||||
createRole: "新增角色"
|
createRole: "新增角色"
|
||||||
deleteRole: "刪除角色 "
|
deleteRole: "刪除角色 "
|
||||||
updateRole: "更新角色設定"
|
updateRole: "更新角色設定"
|
||||||
@@ -3222,11 +3294,13 @@ _watermarkEditor:
|
|||||||
polkadotSubDotRadius: "子圓點的尺寸"
|
polkadotSubDotRadius: "子圓點的尺寸"
|
||||||
polkadotSubDotDivisions: "子圓點的數量"
|
polkadotSubDotDivisions: "子圓點的數量"
|
||||||
leaveBlankToAccountUrl: "若留空則使用帳戶的 URL"
|
leaveBlankToAccountUrl: "若留空則使用帳戶的 URL"
|
||||||
|
failedToLoadImage: "圖片載入失敗"
|
||||||
_imageEffector:
|
_imageEffector:
|
||||||
title: "特效"
|
title: "特效"
|
||||||
addEffect: "新增特效"
|
addEffect: "新增特效"
|
||||||
discardChangesConfirm: "捨棄更改並退出嗎?"
|
discardChangesConfirm: "捨棄更改並退出嗎?"
|
||||||
nothingToConfigure: "無可設定的項目"
|
nothingToConfigure: "無可設定的項目"
|
||||||
|
failedToLoadImage: "圖片載入失敗"
|
||||||
_fxs:
|
_fxs:
|
||||||
chromaticAberration: "色差"
|
chromaticAberration: "色差"
|
||||||
glitch: "異常雜訊效果"
|
glitch: "異常雜訊效果"
|
||||||
|
|||||||
+37
-30
@@ -1,32 +1,36 @@
|
|||||||
{
|
{
|
||||||
"name": "misskey",
|
"name": "misskey",
|
||||||
"version": "2025.10.1",
|
"version": "2025.12.1",
|
||||||
"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.18.2",
|
"packageManager": "pnpm@10.25.0",
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
"packages/frontend-shared",
|
|
||||||
"packages/frontend",
|
|
||||||
"packages/frontend-embed",
|
|
||||||
"packages/icons-subsetter",
|
|
||||||
"packages/backend",
|
|
||||||
"packages/sw",
|
|
||||||
"packages/misskey-js",
|
"packages/misskey-js",
|
||||||
|
"packages/i18n",
|
||||||
"packages/misskey-reversi",
|
"packages/misskey-reversi",
|
||||||
"packages/misskey-bubble-game"
|
"packages/misskey-bubble-game",
|
||||||
|
"packages/icons-subsetter",
|
||||||
|
"packages/frontend-shared",
|
||||||
|
"packages/frontend-builder",
|
||||||
|
"packages/sw",
|
||||||
|
"packages/backend",
|
||||||
|
"packages/frontend",
|
||||||
|
"packages/frontend-embed"
|
||||||
],
|
],
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
"compile-config": "cd packages/backend && pnpm compile-config",
|
||||||
"build-pre": "node ./scripts/build-pre.js",
|
"build-pre": "node ./scripts/build-pre.js",
|
||||||
"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 && node ./built/boot/entry.js",
|
"start": "pnpm check:connect && cd packages/backend && pnpm compile-config && node ./built/boot/entry.js",
|
||||||
"start:test": "ncp ./.github/misskey/test.yml ./.config/test.yml && cd packages/backend && cross-env NODE_ENV=test node ./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",
|
||||||
"cli": "cd packages/backend && pnpm cli",
|
"cli": "cd packages/backend && pnpm cli",
|
||||||
"init": "pnpm migrate",
|
"init": "pnpm migrate",
|
||||||
"migrate": "cd packages/backend && pnpm migrate",
|
"migrate": "cd packages/backend && pnpm migrate",
|
||||||
@@ -49,35 +53,34 @@
|
|||||||
"cleanall": "pnpm clean-all"
|
"cleanall": "pnpm clean-all"
|
||||||
},
|
},
|
||||||
"resolutions": {
|
"resolutions": {
|
||||||
"chokidar": "4.0.3",
|
"chokidar": "5.0.0",
|
||||||
"lodash": "4.17.21"
|
"lodash": "4.17.21"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"cssnano": "7.1.1",
|
"cssnano": "7.1.2",
|
||||||
"esbuild": "0.25.10",
|
"esbuild": "0.27.1",
|
||||||
"execa": "9.6.0",
|
"execa": "9.6.1",
|
||||||
"fast-glob": "3.3.3",
|
|
||||||
"glob": "11.0.3",
|
|
||||||
"ignore-walk": "8.0.0",
|
"ignore-walk": "8.0.0",
|
||||||
"js-yaml": "4.1.0",
|
"js-yaml": "4.1.1",
|
||||||
"postcss": "8.5.6",
|
"postcss": "8.5.6",
|
||||||
"tar": "7.5.1",
|
"tar": "7.5.2",
|
||||||
"terser": "5.44.0",
|
"terser": "5.44.1",
|
||||||
"typescript": "5.9.3"
|
"typescript": "5.9.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@misskey-dev/eslint-plugin": "2.1.0",
|
"@eslint/js": "9.39.1",
|
||||||
|
"@misskey-dev/eslint-plugin": "2.2.0",
|
||||||
"@types/js-yaml": "4.0.9",
|
"@types/js-yaml": "4.0.9",
|
||||||
"@types/node": "22.18.10",
|
"@types/node": "24.10.2",
|
||||||
"@typescript-eslint/eslint-plugin": "8.46.1",
|
"@typescript-eslint/eslint-plugin": "8.49.0",
|
||||||
"@typescript-eslint/parser": "8.46.1",
|
"@typescript-eslint/parser": "8.49.0",
|
||||||
"cross-env": "10.1.0",
|
"cross-env": "10.1.0",
|
||||||
"cypress": "15.4.0",
|
"cypress": "15.7.1",
|
||||||
"eslint": "9.37.0",
|
"eslint": "9.39.1",
|
||||||
"globals": "16.4.0",
|
"globals": "16.5.0",
|
||||||
"ncp": "2.0.0",
|
"ncp": "2.0.0",
|
||||||
"pnpm": "10.18.2",
|
"pnpm": "10.25.0",
|
||||||
"start-server-and-test": "2.1.2"
|
"start-server-and-test": "2.1.3"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"@tensorflow/tfjs-core": "4.22.0"
|
"@tensorflow/tfjs-core": "4.22.0"
|
||||||
@@ -85,6 +88,10 @@
|
|||||||
"pnpm": {
|
"pnpm": {
|
||||||
"overrides": {
|
"overrides": {
|
||||||
"@aiscript-dev/aiscript-languageserver": "-"
|
"@aiscript-dev/aiscript-languageserver": "-"
|
||||||
}
|
},
|
||||||
|
"ignoredBuiltDependencies": [
|
||||||
|
"@sentry-internal/node-cpu-profiler",
|
||||||
|
"exifreader"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,12 +3,17 @@
|
|||||||
"jsc": {
|
"jsc": {
|
||||||
"parser": {
|
"parser": {
|
||||||
"syntax": "typescript",
|
"syntax": "typescript",
|
||||||
|
"jsx": true,
|
||||||
"dynamicImport": true,
|
"dynamicImport": true,
|
||||||
"decorators": true
|
"decorators": true
|
||||||
},
|
},
|
||||||
"transform": {
|
"transform": {
|
||||||
"legacyDecorator": true,
|
"legacyDecorator": true,
|
||||||
"decoratorMetadata": true
|
"decoratorMetadata": true,
|
||||||
|
"react": {
|
||||||
|
"runtime": "automatic",
|
||||||
|
"importSource": "@kitajs/html"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"experimental": {
|
"experimental": {
|
||||||
"keepImportAssertions": true
|
"keepImportAssertions": true
|
||||||
|
|||||||
@@ -0,0 +1,46 @@
|
|||||||
|
(async () => {
|
||||||
|
const msg = document.getElementById('msg');
|
||||||
|
const successText = `\nSuccess Flush! <a href="/">Back to Misskey</a>\n成功しました。<a href="/">Misskeyを開き直してください。</a>`;
|
||||||
|
|
||||||
|
if (!document.cookie) {
|
||||||
|
message('Your site data is fully cleared by your browser.');
|
||||||
|
message(successText);
|
||||||
|
} else {
|
||||||
|
message('Your browser does not support Clear-Site-Data header. Start opportunistic flushing.');
|
||||||
|
try {
|
||||||
|
localStorage.clear();
|
||||||
|
message('localStorage cleared.');
|
||||||
|
|
||||||
|
const idbPromises = ['MisskeyClient', 'keyval-store'].map((name, i, arr) => new Promise((res, rej) => {
|
||||||
|
const delidb = indexedDB.deleteDatabase(name);
|
||||||
|
delidb.onsuccess = () => res(message(`indexedDB "${name}" cleared. (${i + 1}/${arr.length})`));
|
||||||
|
delidb.onerror = e => rej(e)
|
||||||
|
}));
|
||||||
|
|
||||||
|
await Promise.all(idbPromises);
|
||||||
|
|
||||||
|
if (navigator.serviceWorker.controller) {
|
||||||
|
navigator.serviceWorker.controller.postMessage('clear');
|
||||||
|
await navigator.serviceWorker.getRegistrations()
|
||||||
|
.then(registrations => {
|
||||||
|
return Promise.all(registrations.map(registration => registration.unregister()));
|
||||||
|
})
|
||||||
|
.catch(e => { throw new Error(e) });
|
||||||
|
}
|
||||||
|
|
||||||
|
message(successText);
|
||||||
|
} catch (e) {
|
||||||
|
message(`\n${e}\n\nFlush Failed. <a href="/flush">Please retry.</a>\n失敗しました。<a href="/flush">もう一度試してみてください。</a>`);
|
||||||
|
message(`\nIf you retry more than 3 times, try manually clearing the browser cache or contact to instance admin.\n3回以上試しても失敗する場合、ブラウザのキャッシュを手動で消去し、それでもだめならインスタンス管理者に連絡してみてください。\n`)
|
||||||
|
|
||||||
|
console.error(e);
|
||||||
|
setTimeout(() => {
|
||||||
|
location = '/';
|
||||||
|
}, 10000)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function message(text) {
|
||||||
|
msg.insertAdjacentHTML('beforeend', `<p>[${(new Date()).toString()}] ${text.replace(/\n/g,'<br>')}</p>`)
|
||||||
|
}
|
||||||
|
})();
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
html,
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
min-height: 100vh;
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
#a {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
#banner {
|
||||||
|
background-size: cover;
|
||||||
|
background-position: center center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#title {
|
||||||
|
display: inline-block;
|
||||||
|
margin: 24px;
|
||||||
|
padding: 0.5em 0.8em;
|
||||||
|
color: #fff;
|
||||||
|
background: rgba(0, 0, 0, 0.5);
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 1.3em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content {
|
||||||
|
overflow: auto;
|
||||||
|
color: #353c3e;
|
||||||
|
}
|
||||||
|
|
||||||
|
#description {
|
||||||
|
margin: 24px;
|
||||||
|
}
|
||||||
@@ -205,7 +205,7 @@ module.exports = {
|
|||||||
// Whether to use watchman for file crawling
|
// Whether to use watchman for file crawling
|
||||||
// watchman: true,
|
// watchman: true,
|
||||||
|
|
||||||
extensionsToTreatAsEsm: ['.ts'],
|
extensionsToTreatAsEsm: ['.ts', '.tsx'],
|
||||||
|
|
||||||
testTimeout: 60000,
|
testTimeout: 60000,
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ const base = require('./jest.config.cjs')
|
|||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
...base,
|
...base,
|
||||||
|
globalSetup: "<rootDir>/test/jest.setup.unit.cjs",
|
||||||
testMatch: [
|
testMatch: [
|
||||||
"<rootDir>/test/unit/**/*.ts",
|
"<rootDir>/test/unit/**/*.ts",
|
||||||
"<rootDir>/src/**/*.test.ts",
|
"<rootDir>/src/**/*.test.ts",
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ const __dirname = path.dirname(__filename);
|
|||||||
|
|
||||||
const args = [];
|
const args = [];
|
||||||
args.push(...[
|
args.push(...[
|
||||||
...semver.satisfies(process.version, '^20.17.0 || ^22.0.0') ? ['--no-experimental-require-module'] : [],
|
...semver.satisfies(process.version, '^20.17.0 || ^22.0.0 || ^24.10.0') ? ['--no-experimental-require-module'] : [],
|
||||||
'--experimental-vm-modules',
|
'--experimental-vm-modules',
|
||||||
'--experimental-import-meta-resolve',
|
'--experimental-import-meta-resolve',
|
||||||
path.join(__dirname, 'node_modules/jest/bin/jest.js'),
|
path.join(__dirname, 'node_modules/jest/bin/jest.js'),
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"compilerOptions": {
|
|
||||||
"target": "es6",
|
|
||||||
"module": "commonjs",
|
|
||||||
"allowSyntheticDefaultImports": true
|
|
||||||
},
|
|
||||||
"exclude": [
|
|
||||||
"node_modules",
|
|
||||||
"jspm_packages",
|
|
||||||
"tmp",
|
|
||||||
"temp"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -3,14 +3,14 @@
|
|||||||
* SPDX-License-Identifier: AGPL-3.0-only
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { isConcurrentIndexMigrationEnabled } from "./js/migration-config.js";
|
const isConcurrentIndexMigrationEnabled = process.env.MISSKEY_MIGRATION_CREATE_INDEX_CONCURRENTLY === '1';
|
||||||
|
|
||||||
export class CompositeNoteIndex1745378064470 {
|
export class CompositeNoteIndex1745378064470 {
|
||||||
name = 'CompositeNoteIndex1745378064470';
|
name = 'CompositeNoteIndex1745378064470';
|
||||||
transaction = isConcurrentIndexMigrationEnabled() ? false : undefined;
|
transaction = isConcurrentIndexMigrationEnabled ? false : undefined;
|
||||||
|
|
||||||
async up(queryRunner) {
|
async up(queryRunner) {
|
||||||
const concurrently = isConcurrentIndexMigrationEnabled();
|
const concurrently = isConcurrentIndexMigrationEnabled;
|
||||||
|
|
||||||
if (concurrently) {
|
if (concurrently) {
|
||||||
const hasValidIndex = await queryRunner.query(`SELECT indisvalid FROM pg_index INNER JOIN pg_class ON pg_index.indexrelid = pg_class.oid WHERE pg_class.relname = 'IDX_724b311e6f883751f261ebe378'`);
|
const hasValidIndex = await queryRunner.query(`SELECT indisvalid FROM pg_index INNER JOIN pg_class ON pg_index.indexrelid = pg_class.oid WHERE pg_class.relname = 'IDX_724b311e6f883751f261ebe378'`);
|
||||||
@@ -29,7 +29,7 @@ export class CompositeNoteIndex1745378064470 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async down(queryRunner) {
|
async down(queryRunner) {
|
||||||
const mayConcurrently = isConcurrentIndexMigrationEnabled() ? 'CONCURRENTLY' : '';
|
const mayConcurrently = isConcurrentIndexMigrationEnabled ? 'CONCURRENTLY' : '';
|
||||||
await queryRunner.query(`DROP INDEX IF EXISTS "IDX_724b311e6f883751f261ebe378"`);
|
await queryRunner.query(`DROP INDEX IF EXISTS "IDX_724b311e6f883751f261ebe378"`);
|
||||||
await queryRunner.query(`CREATE INDEX ${mayConcurrently} "IDX_5b87d9d19127bd5d92026017a7" ON "note" ("userId")`);
|
await queryRunner.query(`CREATE INDEX ${mayConcurrently} "IDX_5b87d9d19127bd5d92026017a7" ON "note" ("userId")`);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,17 +3,15 @@
|
|||||||
* SPDX-License-Identifier: AGPL-3.0-only
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {loadConfig} from "./js/migration-config.js";
|
|
||||||
|
|
||||||
export class MigrateSomeConfigFileSettingsToMeta1746949539915 {
|
export class MigrateSomeConfigFileSettingsToMeta1746949539915 {
|
||||||
name = 'MigrateSomeConfigFileSettingsToMeta1746949539915'
|
name = 'MigrateSomeConfigFileSettingsToMeta1746949539915'
|
||||||
|
|
||||||
async up(queryRunner) {
|
async up(queryRunner) {
|
||||||
const config = loadConfig();
|
|
||||||
// $1 cannot be used in ALTER TABLE queries
|
// $1 cannot be used in ALTER TABLE queries
|
||||||
await queryRunner.query(`ALTER TABLE "meta" ADD "proxyRemoteFiles" boolean NOT NULL DEFAULT ${config.proxyRemoteFiles}`);
|
await queryRunner.query(`ALTER TABLE "meta" ADD "proxyRemoteFiles" boolean NOT NULL DEFAULT TRUE`);
|
||||||
await queryRunner.query(`ALTER TABLE "meta" ADD "signToActivityPubGet" boolean NOT NULL DEFAULT ${config.signToActivityPubGet}`);
|
await queryRunner.query(`ALTER TABLE "meta" ADD "signToActivityPubGet" boolean NOT NULL DEFAULT TRUE`);
|
||||||
await queryRunner.query(`ALTER TABLE "meta" ADD "allowExternalApRedirect" boolean NOT NULL DEFAULT ${!config.disallowExternalApRedirect}`);
|
await queryRunner.query(`ALTER TABLE "meta" ADD "allowExternalApRedirect" boolean NOT NULL DEFAULT TRUE`);
|
||||||
}
|
}
|
||||||
|
|
||||||
async down(queryRunner) {
|
async down(queryRunner) {
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: syuilo and misskey-project
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
*/
|
||||||
|
|
||||||
|
export class AddChannelMuting1761569941833 {
|
||||||
|
name = 'AddChannelMuting1761569941833'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {QueryRunner} queryRunner
|
||||||
|
*/
|
||||||
|
async up(queryRunner) {
|
||||||
|
await queryRunner.query(`CREATE TABLE "channel_muting" ("id" character varying(32) NOT NULL, "userId" character varying(32) NOT NULL, "channelId" character varying(32) NOT NULL, "expiresAt" TIMESTAMP WITH TIME ZONE, CONSTRAINT "PK_aec842e98f332ebd8e12f85bad6" PRIMARY KEY ("id"))`);
|
||||||
|
await queryRunner.query(`CREATE INDEX "IDX_34415e3062ae7a94617496e81c" ON "channel_muting" ("userId") `);
|
||||||
|
await queryRunner.query(`CREATE INDEX "IDX_4d534d7177fc59879d942e96d0" ON "channel_muting" ("channelId") `);
|
||||||
|
await queryRunner.query(`CREATE INDEX "IDX_6dd314e96806b7df65ddadff72" ON "channel_muting" ("expiresAt") `);
|
||||||
|
await queryRunner.query(`CREATE INDEX "IDX_b96870ed326ccc7fa243970965" ON "channel_muting" ("userId", "channelId") `);
|
||||||
|
await queryRunner.query(`ALTER TABLE "note" ADD "renoteChannelId" character varying(32)`);
|
||||||
|
await queryRunner.query(`COMMENT ON COLUMN "note"."renoteChannelId" IS '[Denormalized]'`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "channel_muting" ADD CONSTRAINT "FK_34415e3062ae7a94617496e81c5" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "channel_muting" ADD CONSTRAINT "FK_4d534d7177fc59879d942e96d03" FOREIGN KEY ("channelId") REFERENCES "channel"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {QueryRunner} queryRunner
|
||||||
|
*/
|
||||||
|
async down(queryRunner) {
|
||||||
|
await queryRunner.query(`ALTER TABLE "channel_muting" DROP CONSTRAINT "FK_4d534d7177fc59879d942e96d03"`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "channel_muting" DROP CONSTRAINT "FK_34415e3062ae7a94617496e81c5"`);
|
||||||
|
await queryRunner.query(`COMMENT ON COLUMN "note"."renoteChannelId" IS '[Denormalized]'`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "note" DROP COLUMN "renoteChannelId"`);
|
||||||
|
await queryRunner.query(`DROP INDEX "public"."IDX_b96870ed326ccc7fa243970965"`);
|
||||||
|
await queryRunner.query(`DROP INDEX "public"."IDX_6dd314e96806b7df65ddadff72"`);
|
||||||
|
await queryRunner.query(`DROP INDEX "public"."IDX_4d534d7177fc59879d942e96d0"`);
|
||||||
|
await queryRunner.query(`DROP INDEX "public"."IDX_34415e3062ae7a94617496e81c"`);
|
||||||
|
await queryRunner.query(`DROP TABLE "channel_muting"`);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: syuilo and misskey-project
|
|
||||||
* SPDX-License-Identifier: AGPL-3.0-only
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { path as configYamlPath } from '../../built/config.js';
|
|
||||||
import * as yaml from 'js-yaml';
|
|
||||||
import fs from "node:fs";
|
|
||||||
|
|
||||||
export function isConcurrentIndexMigrationEnabled() {
|
|
||||||
return process.env.MISSKEY_MIGRATION_CREATE_INDEX_CONCURRENTLY === '1';
|
|
||||||
}
|
|
||||||
|
|
||||||
let loadedConfigCache = undefined;
|
|
||||||
|
|
||||||
function loadConfigInternal() {
|
|
||||||
const config = yaml.load(fs.readFileSync(configYamlPath, 'utf-8'));
|
|
||||||
|
|
||||||
return {
|
|
||||||
disallowExternalApRedirect: Boolean(config.disallowExternalApRedirect ?? false),
|
|
||||||
proxyRemoteFiles: Boolean(config.proxyRemoteFiles ?? false),
|
|
||||||
signToActivityPubGet: Boolean(config.signToActivityPubGet ?? true),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export function loadConfig() {
|
|
||||||
if (loadedConfigCache === undefined) {
|
|
||||||
loadedConfigCache = loadConfigInternal();
|
|
||||||
}
|
|
||||||
return loadedConfigCache;
|
|
||||||
}
|
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
import { DataSource } from 'typeorm';
|
import { DataSource } from 'typeorm';
|
||||||
import { loadConfig } from './built/config.js';
|
import { loadConfig } from './built/config.js';
|
||||||
import { entities } from './built/postgres.js';
|
import { entities } from './built/postgres.js';
|
||||||
import { isConcurrentIndexMigrationEnabled } from "./migration/js/migration-config.js";
|
|
||||||
|
const isConcurrentIndexMigrationEnabled = process.env.MISSKEY_MIGRATION_CREATE_INDEX_CONCURRENTLY === '1';
|
||||||
|
|
||||||
const config = loadConfig();
|
const config = loadConfig();
|
||||||
|
|
||||||
@@ -15,5 +16,5 @@ export default new DataSource({
|
|||||||
extra: config.db.extra,
|
extra: config.db.extra,
|
||||||
entities: entities,
|
entities: entities,
|
||||||
migrations: ['migration/*.js'],
|
migrations: ['migration/*.js'],
|
||||||
migrationsTransactionMode: isConcurrentIndexMigrationEnabled() ? 'each' : 'all',
|
migrationsTransactionMode: isConcurrentIndexMigrationEnabled ? 'each' : 'all',
|
||||||
});
|
});
|
||||||
|
|||||||
+99
-112
@@ -4,52 +4,54 @@
|
|||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^22.15.0"
|
"node": "^22.15.0 || ^24.10.0"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "node ./built/boot/entry.js",
|
"start": "pnpm compile-config && node ./built/boot/entry.js",
|
||||||
"start:test": "cross-env NODE_ENV=test node ./built/boot/entry.js",
|
"start:inspect": "pnpm compile-config && node --inspect ./built/boot/entry.js",
|
||||||
"migrate": "pnpm typeorm migration:run -d ormconfig.js",
|
"start:test": "cross-env NODE_ENV=test pnpm compile-config && cross-env NODE_ENV=test node ./built/boot/entry.js",
|
||||||
"revert": "pnpm typeorm migration:revert -d ormconfig.js",
|
"migrate": "pnpm compile-config && pnpm typeorm migration:run -d ormconfig.js",
|
||||||
"cli": "node ./built/boot/cli.js",
|
"revert": "pnpm compile-config && pnpm typeorm migration:revert -d ormconfig.js",
|
||||||
"check:connect": "node ./scripts/check_connect.js",
|
"cli": "pnpm compile-config && node ./built/boot/cli.js",
|
||||||
|
"check:connect": "pnpm compile-config && node ./scripts/check_connect.js",
|
||||||
|
"compile-config": "node ./scripts/compile_config.js",
|
||||||
"build": "swc src -d built -D --strip-leading-paths",
|
"build": "swc src -d built -D --strip-leading-paths",
|
||||||
"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": "tsc -p tsconfig.json && tsc-alias -p tsconfig.json",
|
||||||
"watch": "node ./scripts/watch.mjs",
|
"watch": "pnpm compile-config && node ./scripts/watch.mjs",
|
||||||
"restart": "pnpm build && pnpm start",
|
"restart": "pnpm build && pnpm start",
|
||||||
"dev": "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": "tsc --noEmit && tsc -p test --noEmit && tsc -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 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",
|
||||||
"jest:e2e": "cross-env NODE_ENV=test node ./jest.js --forceExit --config jest.config.e2e.cjs",
|
"jest:e2e": "cross-env NODE_ENV=test pnpm compile-config && cross-env NODE_ENV=test node ./jest.js --forceExit --config jest.config.e2e.cjs",
|
||||||
"jest:fed": "node ./jest.js --forceExit --config jest.config.fed.cjs",
|
"jest:fed": "pnpm compile-config && node ./jest.js --forceExit --config jest.config.fed.cjs",
|
||||||
"jest-and-coverage": "cross-env NODE_ENV=test node ./jest.js --coverage --forceExit --config jest.config.unit.cjs",
|
"jest-and-coverage": "cross-env NODE_ENV=test pnpm compile-config && cross-env NODE_ENV=test node ./jest.js --coverage --forceExit --config jest.config.unit.cjs",
|
||||||
"jest-and-coverage:e2e": "cross-env NODE_ENV=test node ./jest.js --coverage --forceExit --config jest.config.e2e.cjs",
|
"jest-and-coverage:e2e": "cross-env NODE_ENV=test pnpm compile-config && cross-env NODE_ENV=test node ./jest.js --coverage --forceExit --config jest.config.e2e.cjs",
|
||||||
"jest-clear": "cross-env NODE_ENV=test node ./jest.js --clearCache",
|
"jest-clear": "cross-env NODE_ENV=test pnpm compile-config && cross-env NODE_ENV=test node ./jest.js --clearCache",
|
||||||
"test": "pnpm jest",
|
"test": "pnpm jest",
|
||||||
"test:e2e": "pnpm build && pnpm build:test && pnpm jest:e2e",
|
"test:e2e": "pnpm build && pnpm build:test && pnpm jest:e2e",
|
||||||
"test:fed": "pnpm jest:fed",
|
"test:fed": "pnpm jest:fed",
|
||||||
"test-and-coverage": "pnpm jest-and-coverage",
|
"test-and-coverage": "pnpm jest-and-coverage",
|
||||||
"test-and-coverage:e2e": "pnpm build && pnpm build:test && pnpm jest-and-coverage:e2e",
|
"test-and-coverage:e2e": "pnpm build && pnpm build:test && pnpm jest-and-coverage:e2e",
|
||||||
"check-migrations": "node scripts/check_migrations_clean.js",
|
"check-migrations": "node scripts/check_migrations_clean.js",
|
||||||
"generate-api-json": "node ./scripts/generate_api_json.js"
|
"generate-api-json": "pnpm compile-config && node ./scripts/generate_api_json.js"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"@swc/core-android-arm64": "1.3.11",
|
"@swc/core-android-arm64": "1.3.11",
|
||||||
"@swc/core-darwin-arm64": "1.13.20",
|
"@swc/core-darwin-arm64": "1.15.3",
|
||||||
"@swc/core-darwin-x64": "1.13.20",
|
"@swc/core-darwin-x64": "1.15.3",
|
||||||
"@swc/core-freebsd-x64": "1.3.11",
|
"@swc/core-freebsd-x64": "1.3.11",
|
||||||
"@swc/core-linux-arm-gnueabihf": "1.13.20",
|
"@swc/core-linux-arm-gnueabihf": "1.15.3",
|
||||||
"@swc/core-linux-arm64-gnu": "1.13.20",
|
"@swc/core-linux-arm64-gnu": "1.15.3",
|
||||||
"@swc/core-linux-arm64-musl": "1.13.20",
|
"@swc/core-linux-arm64-musl": "1.15.3",
|
||||||
"@swc/core-linux-x64-gnu": "1.13.20",
|
"@swc/core-linux-x64-gnu": "1.15.3",
|
||||||
"@swc/core-linux-x64-musl": "1.13.20",
|
"@swc/core-linux-x64-musl": "1.15.3",
|
||||||
"@swc/core-win32-arm64-msvc": "1.13.20",
|
"@swc/core-win32-arm64-msvc": "1.15.3",
|
||||||
"@swc/core-win32-ia32-msvc": "1.13.20",
|
"@swc/core-win32-ia32-msvc": "1.15.3",
|
||||||
"@swc/core-win32-x64-msvc": "1.13.20",
|
"@swc/core-win32-x64-msvc": "1.15.3",
|
||||||
"@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.0.9",
|
||||||
@@ -69,120 +71,108 @@
|
|||||||
"utf-8-validate": "6.0.5"
|
"utf-8-validate": "6.0.5"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@aws-sdk/client-s3": "3.908.0",
|
"@aws-sdk/client-s3": "3.947.0",
|
||||||
"@aws-sdk/lib-storage": "3.908.0",
|
"@aws-sdk/lib-storage": "3.947.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.1.0",
|
||||||
"@fastify/cors": "10.1.0",
|
|
||||||
"@fastify/express": "4.0.2",
|
"@fastify/express": "4.0.2",
|
||||||
"@fastify/http-proxy": "10.0.2",
|
"@fastify/http-proxy": "11.4.1",
|
||||||
"@fastify/multipart": "9.2.1",
|
"@fastify/multipart": "9.3.0",
|
||||||
"@fastify/static": "8.2.0",
|
"@fastify/static": "8.3.0",
|
||||||
"@fastify/view": "10.0.2",
|
"@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.4",
|
"@misskey-dev/summaly": "5.2.5",
|
||||||
"@napi-rs/canvas": "0.1.80",
|
"@napi-rs/canvas": "0.1.84",
|
||||||
"@nestjs/common": "11.1.6",
|
"@nestjs/common": "11.1.9",
|
||||||
"@nestjs/core": "11.1.6",
|
"@nestjs/core": "11.1.9",
|
||||||
"@nestjs/testing": "11.1.6",
|
"@nestjs/testing": "11.1.9",
|
||||||
"@peertube/http-signature": "1.7.0",
|
"@peertube/http-signature": "1.7.0",
|
||||||
"@sentry/node": "8.55.0",
|
"@sentry/node": "10.29.0",
|
||||||
"@sentry/profiling-node": "8.55.0",
|
"@sentry/profiling-node": "10.29.0",
|
||||||
"@simplewebauthn/server": "12.0.0",
|
"@simplewebauthn/server": "13.2.2",
|
||||||
"@sinonjs/fake-timers": "11.3.1",
|
"@sinonjs/fake-timers": "15.0.0",
|
||||||
"@smithy/node-http-handler": "2.5.0",
|
"@smithy/node-http-handler": "4.4.5",
|
||||||
"@swc/cli": "0.7.8",
|
"@swc/cli": "0.7.9",
|
||||||
"@swc/core": "1.13.5",
|
"@swc/core": "1.15.3",
|
||||||
"@twemoji/parser": "16.0.0",
|
"@twemoji/parser": "16.0.0",
|
||||||
"@types/redis-info": "3.0.3",
|
"@types/redis-info": "3.0.3",
|
||||||
"accepts": "1.3.8",
|
"accepts": "1.3.8",
|
||||||
"ajv": "8.17.1",
|
"ajv": "8.17.1",
|
||||||
"archiver": "7.0.1",
|
"archiver": "7.0.1",
|
||||||
"async-mutex": "0.5.0",
|
"async-mutex": "0.5.0",
|
||||||
"bcryptjs": "2.4.3",
|
"bcryptjs": "3.0.3",
|
||||||
"blurhash": "2.0.5",
|
"blurhash": "2.0.5",
|
||||||
"body-parser": "1.20.3",
|
"body-parser": "2.2.1",
|
||||||
"bullmq": "5.61.0",
|
"bullmq": "5.65.1",
|
||||||
"cacheable-lookup": "7.0.0",
|
"cacheable-lookup": "7.0.0",
|
||||||
"cbor": "9.0.2",
|
|
||||||
"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",
|
||||||
"cli-highlight": "2.1.11",
|
"color-convert": "3.1.3",
|
||||||
"color-convert": "2.0.1",
|
"content-disposition": "1.0.1",
|
||||||
"content-disposition": "0.5.4",
|
"date-fns": "4.1.0",
|
||||||
"date-fns": "2.30.0",
|
|
||||||
"deep-email-validator": "0.1.21",
|
"deep-email-validator": "0.1.21",
|
||||||
"fastify": "5.6.1",
|
"fastify": "5.6.2",
|
||||||
"fastify-raw-body": "5.0.0",
|
"fastify-raw-body": "5.0.0",
|
||||||
"feed": "4.2.2",
|
"feed": "5.1.0",
|
||||||
"file-type": "19.6.0",
|
"file-type": "21.1.1",
|
||||||
"fluent-ffmpeg": "2.1.3",
|
"fluent-ffmpeg": "2.1.3",
|
||||||
"form-data": "4.0.4",
|
"form-data": "4.0.5",
|
||||||
"got": "14.5.0",
|
"got": "14.6.5",
|
||||||
"happy-dom": "20.0.7",
|
|
||||||
"hpagent": "1.2.0",
|
"hpagent": "1.2.0",
|
||||||
"htmlescape": "1.1.1",
|
|
||||||
"http-link-header": "1.1.3",
|
"http-link-header": "1.1.3",
|
||||||
"ioredis": "5.8.1",
|
"i18n": "workspace:*",
|
||||||
|
"ioredis": "5.8.2",
|
||||||
"ip-cidr": "4.0.2",
|
"ip-cidr": "4.0.2",
|
||||||
"ipaddr.js": "2.2.0",
|
"ipaddr.js": "2.3.0",
|
||||||
"is-svg": "5.1.0",
|
"is-svg": "6.1.0",
|
||||||
"js-yaml": "4.1.0",
|
|
||||||
"jsdom": "26.1.0",
|
|
||||||
"json5": "2.2.3",
|
"json5": "2.2.3",
|
||||||
"jsonld": "8.3.3",
|
"jsonld": "9.0.0",
|
||||||
"jsrsasign": "11.1.0",
|
|
||||||
"juice": "11.0.3",
|
"juice": "11.0.3",
|
||||||
"meilisearch": "0.53.0",
|
"meilisearch": "0.54.0",
|
||||||
"mfm-js": "0.25.0",
|
"mfm-js": "0.25.0",
|
||||||
"microformats-parser": "2.0.4",
|
"mime-types": "3.0.2",
|
||||||
"mime-types": "2.1.35",
|
|
||||||
"misskey-js": "workspace:*",
|
"misskey-js": "workspace:*",
|
||||||
"misskey-reversi": "workspace:*",
|
"misskey-reversi": "workspace:*",
|
||||||
"ms": "3.0.0-canary.202508261828",
|
"ms": "3.0.0-canary.202508261828",
|
||||||
"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",
|
||||||
"nodemailer": "7.0.9",
|
"node-html-parser": "7.0.1",
|
||||||
|
"nodemailer": "7.0.11",
|
||||||
"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.4.1",
|
||||||
"parse5": "7.3.0",
|
|
||||||
"pg": "8.16.3",
|
"pg": "8.16.3",
|
||||||
"pkce-challenge": "4.1.0",
|
"pkce-challenge": "5.0.1",
|
||||||
"probe-image-size": "7.2.3",
|
"probe-image-size": "7.2.3",
|
||||||
"promise-limit": "2.7.0",
|
"promise-limit": "2.7.0",
|
||||||
"pug": "3.0.3",
|
|
||||||
"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.1",
|
"re2": "1.22.3",
|
||||||
"redis-info": "3.1.0",
|
"redis-info": "3.1.0",
|
||||||
"redis-lock": "0.1.4",
|
|
||||||
"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.0",
|
||||||
"secure-json-parse": "3.0.2",
|
"secure-json-parse": "4.1.0",
|
||||||
"sharp": "0.33.5",
|
|
||||||
"semver": "7.7.3",
|
"semver": "7.7.3",
|
||||||
|
"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.27.12",
|
||||||
"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",
|
|
||||||
"typescript": "5.9.3",
|
"typescript": "5.9.3",
|
||||||
"ulid": "2.4.0",
|
"ulid": "3.0.2",
|
||||||
"vary": "1.1.2",
|
"vary": "1.1.2",
|
||||||
"web-push": "3.6.7",
|
"web-push": "3.6.7",
|
||||||
"ws": "8.18.3",
|
"ws": "8.18.3",
|
||||||
@@ -190,59 +180,56 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@jest/globals": "29.7.0",
|
"@jest/globals": "29.7.0",
|
||||||
"@nestjs/platform-express": "10.4.20",
|
"@kitajs/ts-html-plugin": "4.1.3",
|
||||||
"@sentry/vue": "9.46.0",
|
"@nestjs/platform-express": "11.1.9",
|
||||||
|
"@sentry/vue": "10.29.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",
|
||||||
"@types/archiver": "6.0.3",
|
"@types/archiver": "7.0.0",
|
||||||
"@types/bcryptjs": "2.4.6",
|
|
||||||
"@types/body-parser": "1.19.6",
|
"@types/body-parser": "1.19.6",
|
||||||
"@types/color-convert": "2.0.4",
|
"@types/color-convert": "2.0.4",
|
||||||
"@types/content-disposition": "0.5.9",
|
"@types/content-disposition": "0.5.9",
|
||||||
"@types/fluent-ffmpeg": "2.1.27",
|
"@types/fluent-ffmpeg": "2.1.28",
|
||||||
"@types/htmlescape": "1.1.3",
|
|
||||||
"@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/js-yaml": "4.0.9",
|
|
||||||
"@types/jsdom": "21.1.7",
|
|
||||||
"@types/jsonld": "1.5.15",
|
"@types/jsonld": "1.5.15",
|
||||||
"@types/jsrsasign": "10.5.15",
|
"@types/mime-types": "3.0.1",
|
||||||
"@types/mime-types": "2.1.4",
|
"@types/ms": "2.1.0",
|
||||||
"@types/ms": "0.7.34",
|
"@types/node": "24.10.2",
|
||||||
"@types/node": "22.18.10",
|
"@types/nodemailer": "7.0.4",
|
||||||
"@types/nodemailer": "6.4.20",
|
|
||||||
"@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.5",
|
"@types/pg": "8.15.6",
|
||||||
"@types/pug": "2.0.10",
|
"@types/qrcode": "1.5.6",
|
||||||
"@types/qrcode": "1.5.5",
|
|
||||||
"@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.0",
|
||||||
"@types/semver": "7.7.1",
|
"@types/semver": "7.7.1",
|
||||||
"@types/simple-oauth2": "5.0.7",
|
"@types/simple-oauth2": "5.0.7",
|
||||||
"@types/sinonjs__fake-timers": "8.1.5",
|
"@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",
|
||||||
"@types/tmp": "0.2.6",
|
"@types/tmp": "0.2.6",
|
||||||
"@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.46.1",
|
"@typescript-eslint/eslint-plugin": "8.49.0",
|
||||||
"@typescript-eslint/parser": "8.46.1",
|
"@typescript-eslint/parser": "8.49.0",
|
||||||
"aws-sdk-client-mock": "4.1.0",
|
"aws-sdk-client-mock": "4.1.0",
|
||||||
"cross-env": "7.0.3",
|
"cbor": "10.0.11",
|
||||||
|
"cross-env": "10.1.0",
|
||||||
"eslint-plugin-import": "2.32.0",
|
"eslint-plugin-import": "2.32.0",
|
||||||
"execa": "8.0.1",
|
"execa": "9.6.1",
|
||||||
"fkill": "9.0.0",
|
"fkill": "10.0.1",
|
||||||
"jest": "29.7.0",
|
"jest": "29.7.0",
|
||||||
"jest-mock": "29.7.0",
|
"jest-mock": "29.7.0",
|
||||||
"nodemon": "3.1.10",
|
"js-yaml": "4.1.1",
|
||||||
"pid-port": "1.0.2",
|
"nodemon": "3.1.11",
|
||||||
|
"pid-port": "2.0.0",
|
||||||
"simple-oauth2": "5.1.0",
|
"simple-oauth2": "5.1.0",
|
||||||
"supertest": "7.1.4"
|
"supertest": "7.1.4",
|
||||||
|
"vite": "7.2.7"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: syuilo and misskey-project
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* YAMLファイルをJSONファイルに変換するスクリプト
|
||||||
|
* ビルド前に実行し、ランタイムにjs-yamlを含まないようにする
|
||||||
|
*/
|
||||||
|
|
||||||
|
import fs from 'node:fs';
|
||||||
|
import { resolve, dirname } from 'node:path';
|
||||||
|
import { fileURLToPath } from 'node:url';
|
||||||
|
import yaml from 'js-yaml';
|
||||||
|
|
||||||
|
const _filename = fileURLToPath(import.meta.url);
|
||||||
|
const _dirname = dirname(_filename);
|
||||||
|
|
||||||
|
const configDir = resolve(_dirname, '../../../.config');
|
||||||
|
const OUTPUT_PATH = resolve(_dirname, '../../../built/.config.json');
|
||||||
|
|
||||||
|
// TODO: yamlのパースに失敗したときのエラーハンドリング
|
||||||
|
|
||||||
|
/**
|
||||||
|
* YAMLファイルをJSONファイルに変換
|
||||||
|
* @param {string} ymlPath - YAMLファイルのパス
|
||||||
|
*/
|
||||||
|
function yamlToJson(ymlPath) {
|
||||||
|
if (!fs.existsSync(ymlPath)) {
|
||||||
|
console.warn(`YAML file not found: ${ymlPath}`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(`${ymlPath} → ${OUTPUT_PATH}`);
|
||||||
|
|
||||||
|
const yamlContent = fs.readFileSync(ymlPath, 'utf-8');
|
||||||
|
const jsonContent = yaml.load(yamlContent);
|
||||||
|
if (!fs.existsSync(dirname(OUTPUT_PATH))) {
|
||||||
|
fs.mkdirSync(dirname(OUTPUT_PATH), { recursive: true });
|
||||||
|
}
|
||||||
|
fs.writeFileSync(OUTPUT_PATH, JSON.stringify({
|
||||||
|
'_NOTE_': 'This file is auto-generated from YAML file. DO NOT EDIT.',
|
||||||
|
...jsonContent,
|
||||||
|
}), 'utf-8');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (process.env.MISSKEY_CONFIG_YML) {
|
||||||
|
const customYmlPath = resolve(configDir, process.env.MISSKEY_CONFIG_YML);
|
||||||
|
yamlToJson(customYmlPath);
|
||||||
|
} else {
|
||||||
|
yamlToJson(resolve(configDir, process.env.NODE_ENV === 'test' ? 'test.yml' : 'default.yml'));
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('Configuration compiled ✓');
|
||||||
@@ -42,7 +42,7 @@ async function killProc() {
|
|||||||
'./node_modules/nodemon/bin/nodemon.js',
|
'./node_modules/nodemon/bin/nodemon.js',
|
||||||
[
|
[
|
||||||
'-w', 'src',
|
'-w', 'src',
|
||||||
'-e', 'ts,js,mjs,cjs,json,pug',
|
'-e', 'ts,js,mjs,cjs,tsx,json,pug',
|
||||||
'--exec', 'pnpm', 'run', 'build',
|
'--exec', 'pnpm', 'run', 'build',
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,152 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: syuilo and misskey-project
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This script starts the Misskey backend server, waits for it to be ready,
|
||||||
|
* measures memory usage, and outputs the result as JSON.
|
||||||
|
*
|
||||||
|
* Usage: node scripts/measure-memory.mjs
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { fork } from 'node:child_process';
|
||||||
|
import { setTimeout } from 'node:timers/promises';
|
||||||
|
import { fileURLToPath } from 'node:url';
|
||||||
|
import { dirname, join } from 'node:path';
|
||||||
|
|
||||||
|
const __filename = fileURLToPath(import.meta.url);
|
||||||
|
const __dirname = dirname(__filename);
|
||||||
|
|
||||||
|
const STARTUP_TIMEOUT = 120000; // 120 seconds timeout for server startup
|
||||||
|
const MEMORY_SETTLE_TIME = 10000; // Wait 10 seconds after startup for memory to settle
|
||||||
|
|
||||||
|
async function measureMemory() {
|
||||||
|
const startTime = Date.now();
|
||||||
|
|
||||||
|
// Start the Misskey backend server using fork to enable IPC
|
||||||
|
const serverProcess = fork(join(__dirname, '../built/boot/entry.js'), [], {
|
||||||
|
cwd: join(__dirname, '..'),
|
||||||
|
env: {
|
||||||
|
...process.env,
|
||||||
|
NODE_ENV: 'test',
|
||||||
|
},
|
||||||
|
stdio: ['pipe', 'pipe', 'pipe', 'ipc'],
|
||||||
|
});
|
||||||
|
|
||||||
|
let serverReady = false;
|
||||||
|
|
||||||
|
// Listen for the 'ok' message from the server indicating it's ready
|
||||||
|
serverProcess.on('message', (message) => {
|
||||||
|
if (message === 'ok') {
|
||||||
|
serverReady = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Handle server output
|
||||||
|
serverProcess.stdout?.on('data', (data) => {
|
||||||
|
process.stderr.write(`[server stdout] ${data}`);
|
||||||
|
});
|
||||||
|
|
||||||
|
serverProcess.stderr?.on('data', (data) => {
|
||||||
|
process.stderr.write(`[server stderr] ${data}`);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Handle server error
|
||||||
|
serverProcess.on('error', (err) => {
|
||||||
|
process.stderr.write(`[server error] ${err}\n`);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Wait for server to be ready or timeout
|
||||||
|
const startupStartTime = Date.now();
|
||||||
|
while (!serverReady) {
|
||||||
|
if (Date.now() - startupStartTime > STARTUP_TIMEOUT) {
|
||||||
|
serverProcess.kill('SIGTERM');
|
||||||
|
throw new Error('Server startup timeout');
|
||||||
|
}
|
||||||
|
await setTimeout(100);
|
||||||
|
}
|
||||||
|
|
||||||
|
const startupTime = Date.now() - startupStartTime;
|
||||||
|
process.stderr.write(`Server started in ${startupTime}ms\n`);
|
||||||
|
|
||||||
|
// Wait for memory to settle
|
||||||
|
await setTimeout(MEMORY_SETTLE_TIME);
|
||||||
|
|
||||||
|
// Get memory usage from the server process via /proc
|
||||||
|
const pid = serverProcess.pid;
|
||||||
|
let memoryInfo;
|
||||||
|
|
||||||
|
try {
|
||||||
|
const fs = await import('node:fs/promises');
|
||||||
|
|
||||||
|
// Read /proc/[pid]/status for detailed memory info
|
||||||
|
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 = {
|
||||||
|
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');
|
||||||
|
try {
|
||||||
|
const ps = execSync(`ps -o rss= -p ${pid}`, { encoding: 'utf-8' });
|
||||||
|
const rssKb = parseInt(ps.trim(), 10);
|
||||||
|
memoryInfo = {
|
||||||
|
rss: rssKb * 1024,
|
||||||
|
heapUsed: null,
|
||||||
|
vmSize: null,
|
||||||
|
};
|
||||||
|
} catch {
|
||||||
|
memoryInfo = {
|
||||||
|
rss: null,
|
||||||
|
heapUsed: null,
|
||||||
|
vmSize: null,
|
||||||
|
error: 'Could not measure memory',
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Stop the server
|
||||||
|
serverProcess.kill('SIGTERM');
|
||||||
|
|
||||||
|
// Wait for process to exit
|
||||||
|
let exited = false;
|
||||||
|
await new Promise((resolve) => {
|
||||||
|
serverProcess.on('exit', () => {
|
||||||
|
exited = true;
|
||||||
|
resolve(undefined);
|
||||||
|
});
|
||||||
|
// Force kill after 10 seconds if not exited
|
||||||
|
setTimeout(10000).then(() => {
|
||||||
|
if (!exited) {
|
||||||
|
serverProcess.kill('SIGKILL');
|
||||||
|
}
|
||||||
|
resolve(undefined);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
const result = {
|
||||||
|
timestamp: new Date().toISOString(),
|
||||||
|
startupTimeMs: startupTime,
|
||||||
|
memory: memoryInfo,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Output as JSON to stdout
|
||||||
|
console.log(JSON.stringify(result, null, 2));
|
||||||
|
}
|
||||||
|
|
||||||
|
measureMemory().catch((err) => {
|
||||||
|
console.error(JSON.stringify({
|
||||||
|
error: err.message,
|
||||||
|
timestamp: new Date().toISOString(),
|
||||||
|
}));
|
||||||
|
process.exit(1);
|
||||||
|
});
|
||||||
-13
@@ -1,13 +0,0 @@
|
|||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: syuilo and misskey-project
|
|
||||||
* SPDX-License-Identifier: AGPL-3.0-only
|
|
||||||
*/
|
|
||||||
|
|
||||||
declare module 'redis-lock' {
|
|
||||||
import type Redis from 'ioredis';
|
|
||||||
|
|
||||||
type Lock = (lockName: string, timeout?: number, taskToPerform?: () => Promise<void>) => void;
|
|
||||||
function redisLock(client: Redis.Redis, retryDelay: number): Lock;
|
|
||||||
|
|
||||||
export = redisLock;
|
|
||||||
}
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user