mirror of
https://github.com/misskey-dev/misskey.git
synced 2026-05-06 12:55:53 +02:00
Compare commits
1 Commits
minify-nod
...
mfm-glitch
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b126735393 |
@@ -165,11 +165,6 @@ id: 'aidx'
|
||||
# dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0'
|
||||
|
||||
#sentryForFrontend:
|
||||
# vueIntegration:
|
||||
# tracingOptions:
|
||||
# trackComponents: true
|
||||
# browserTracingIntegration:
|
||||
# replayIntegration:
|
||||
# options:
|
||||
# dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0'
|
||||
|
||||
@@ -215,6 +210,12 @@ proxyBypassHosts:
|
||||
# Media Proxy
|
||||
#mediaProxy: https://example.com/proxy
|
||||
|
||||
# Proxy remote files (default: true)
|
||||
proxyRemoteFiles: true
|
||||
|
||||
# Sign to ActivityPub GET request (default: true)
|
||||
signToActivityPubGet: true
|
||||
|
||||
allowedPrivateNetworks: [
|
||||
'127.0.0.1/32'
|
||||
]
|
||||
|
||||
@@ -177,11 +177,6 @@ id: 'aidx'
|
||||
# dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0'
|
||||
|
||||
#sentryForFrontend:
|
||||
# vueIntegration:
|
||||
# tracingOptions:
|
||||
# trackComponents: true
|
||||
# browserTracingIntegration:
|
||||
# replayIntegration:
|
||||
# options:
|
||||
# dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0'
|
||||
|
||||
@@ -227,6 +222,12 @@ proxyBypassHosts:
|
||||
# Media Proxy
|
||||
#mediaProxy: https://example.com/proxy
|
||||
|
||||
# Proxy remote files (default: true)
|
||||
proxyRemoteFiles: true
|
||||
|
||||
# Sign to ActivityPub GET request (default: true)
|
||||
signToActivityPubGet: true
|
||||
|
||||
# For security reasons, uploading attachments from the intranet is prohibited,
|
||||
# but exceptions can be made from the following settings. Default value is "undefined".
|
||||
# Read changelog to learn more (Improvements of 12.90.0 (2021/09/04)).
|
||||
|
||||
@@ -105,54 +105,6 @@ port: 3000
|
||||
# socket: /path/to/misskey.sock
|
||||
# chmodSocket: '777'
|
||||
|
||||
# Proxy trust settings
|
||||
#
|
||||
# Specifies the IP addresses that Misskey will use as trusted
|
||||
# reverse proxies (e.g., nginx, Cloudflare). This affects how
|
||||
# Misskey determines the source IP for each request and is used
|
||||
# for important rate limiting and security features. If the value
|
||||
# is not set correctly, Misskey may use the IP address of the
|
||||
# reverse proxy instead of the actual source IP, which may lead to
|
||||
# unintended rate limiting or security vulnerabilities.
|
||||
# By default, the loopback network and private network address
|
||||
# ranges shown below are trusted.
|
||||
# If you are using a single reverse proxy and it is on the same
|
||||
# machine or the same private network as Misskey, it is unlikely you
|
||||
# need to change this setting, and the default setting is fine.
|
||||
# Also, if you are using multiple reverse proxy servers and they are
|
||||
# all on the same private network as Misskey, the default setting
|
||||
# is fine.
|
||||
# However, if you are using a reverse proxy server that accesses
|
||||
# Misskey web servers and streaming servers via public IP addresses
|
||||
# (for example, Cloudflare), you must set this variable.
|
||||
# When changing this setting, you can use one of the following values:
|
||||
#
|
||||
# - true: Trust all proxies
|
||||
# - false: Do not trust any proxies
|
||||
# - IP address, IP address range, or array of them: Trust hops that
|
||||
# match the specified criteria.
|
||||
# - Integer: Trust the nth hop from the front-facing proxy server as
|
||||
# the client.
|
||||
# For more information on how to configure this setting, please refer
|
||||
# to the Fastify documentation:
|
||||
# https://fastify.dev/docs/latest/Reference/Server/#trustproxy
|
||||
#
|
||||
# Note that if this variable is set, it overrides the default range,
|
||||
# so if you have both an external reverse proxy and a proxy on the
|
||||
# local host, you must include both IPs (or IP ranges).
|
||||
#
|
||||
#trustProxy:
|
||||
# - '10.0.0.0/8'
|
||||
# - '172.16.0.0/12'
|
||||
# - '192.168.0.0/16'
|
||||
# - '127.0.0.1/32'
|
||||
# - '::1/128'
|
||||
# - 'fc00::/7'
|
||||
# # Example: If you are using some external reverse proxies like CDNs,
|
||||
# # you may need to add the CDN IP ranges here.
|
||||
# # If you're using Cloudflare, you can find IP Ranges at:
|
||||
# # https://www.cloudflare.com/ips/
|
||||
|
||||
# ┌──────────────────────────┐
|
||||
#───┘ PostgreSQL configuration └────────────────────────────────
|
||||
|
||||
@@ -307,11 +259,6 @@ id: 'aidx'
|
||||
# dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0'
|
||||
|
||||
#sentryForFrontend:
|
||||
# vueIntegration:
|
||||
# tracingOptions:
|
||||
# trackComponents: true
|
||||
# browserTracingIntegration:
|
||||
# replayIntegration:
|
||||
# options:
|
||||
# dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0'
|
||||
|
||||
@@ -321,10 +268,6 @@ id: 'aidx'
|
||||
# Whether disable HSTS
|
||||
#disableHsts: true
|
||||
|
||||
# Enable internal IP-based rate limiting (default: true)
|
||||
# To configure them in reverse proxy instead, set this to false.
|
||||
#enableIpRateLimit: true
|
||||
|
||||
# Number of worker processes
|
||||
#clusterLimit: 1
|
||||
|
||||
@@ -371,12 +314,19 @@ proxyBypassHosts:
|
||||
# * Perform image compression (on a different server resource than the main process)
|
||||
#mediaProxy: https://example.com/proxy
|
||||
|
||||
# Proxy remote files (default: true)
|
||||
# Proxy remote files by this instance or mediaProxy to prevent remote files from running in remote domains.
|
||||
proxyRemoteFiles: true
|
||||
|
||||
# Movie Thumbnail Generation URL
|
||||
# There is no reference implementation.
|
||||
# For example, Misskey will point to the following URL:
|
||||
# https://example.com/thumbnail.webp?thumbnail=1&url=https%3A%2F%2Fstorage.example.com%2Fpath%2Fto%2Fvideo.mp4
|
||||
#videoThumbnailGenerator: https://example.com
|
||||
|
||||
# Sign to ActivityPub GET request (default: true)
|
||||
signToActivityPubGet: true
|
||||
|
||||
# For security reasons, uploading attachments from the intranet is prohibited,
|
||||
# but exceptions can be made from the following settings. Default value is "undefined".
|
||||
# Read changelog to learn more (Improvements of 12.90.0 (2021/09/04)).
|
||||
|
||||
@@ -1 +1 @@
|
||||
FROM mcr.microsoft.com/devcontainers/javascript-node:4.0.3-24-trixie
|
||||
FROM mcr.microsoft.com/devcontainers/javascript-node:0-18
|
||||
|
||||
@@ -28,7 +28,7 @@ services:
|
||||
|
||||
db:
|
||||
restart: unless-stopped
|
||||
image: postgres:18-alpine
|
||||
image: postgres:15-alpine
|
||||
networks:
|
||||
- internal_network
|
||||
environment:
|
||||
|
||||
@@ -5,11 +5,9 @@
|
||||
"workspaceFolder": "/workspace",
|
||||
"features": {
|
||||
"ghcr.io/devcontainers/features/node:1": {
|
||||
"version": "22.15.0"
|
||||
"version": "22.11.0"
|
||||
},
|
||||
"ghcr.io/devcontainers-extra/features/pnpm:2": {
|
||||
"version": "10.10.0"
|
||||
}
|
||||
"ghcr.io/devcontainers-contrib/features/corepack:1": {}
|
||||
},
|
||||
"forwardPorts": [3000],
|
||||
"postCreateCommand": "/bin/bash .devcontainer/init.sh",
|
||||
|
||||
@@ -152,11 +152,6 @@ id: 'aidx'
|
||||
# dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0'
|
||||
|
||||
#sentryForFrontend:
|
||||
# vueIntegration:
|
||||
# tracingOptions:
|
||||
# trackComponents: true
|
||||
# browserTracingIntegration:
|
||||
# replayIntegration:
|
||||
# options:
|
||||
# dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0'
|
||||
|
||||
@@ -202,6 +197,12 @@ proxyBypassHosts:
|
||||
# Media Proxy
|
||||
#mediaProxy: https://example.com/proxy
|
||||
|
||||
# Proxy remote files (default: true)
|
||||
proxyRemoteFiles: true
|
||||
|
||||
# Sign to ActivityPub GET request (default: true)
|
||||
signToActivityPubGet: true
|
||||
|
||||
allowedPrivateNetworks: [
|
||||
'127.0.0.1/32'
|
||||
]
|
||||
|
||||
@@ -7,6 +7,8 @@ sudo apt-get update
|
||||
sudo apt-get -y install libgtk2.0-0 libgtk-3-0 libgbm-dev libnotify-dev libnss3 libxss1 libasound2 libxtst6 xauth xvfb
|
||||
git config --global --add safe.directory /workspace
|
||||
git submodule update --init
|
||||
corepack install
|
||||
corepack enable
|
||||
pnpm config set store-dir /home/node/.local/share/pnpm/store
|
||||
pnpm install --frozen-lockfile
|
||||
cp .devcontainer/devcontainer.yml .config/default.yml
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
Dockerfile
|
||||
build/
|
||||
built/
|
||||
src-js/
|
||||
db/
|
||||
.devcontainer/compose.yml
|
||||
node_modules/
|
||||
|
||||
@@ -13,7 +13,3 @@ trim_trailing_whitespace = false
|
||||
|
||||
[*.{yml,yaml}]
|
||||
indent_style = space
|
||||
|
||||
[packages/backend/migration/*.js]
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
|
||||
6
.github/ISSUE_TEMPLATE/01_bug-report.yml
vendored
6
.github/ISSUE_TEMPLATE/01_bug-report.yml
vendored
@@ -54,7 +54,7 @@ body:
|
||||
* Model and OS of the device(s): MacBook Pro (14inch, 2021), macOS Ventura 13.4
|
||||
* Browser: Chrome 113.0.5672.126
|
||||
* Server URL: misskey.example.com
|
||||
* Misskey: 2026.x.x
|
||||
* Misskey: 2025.x.x
|
||||
value: |
|
||||
* Model and OS of the device(s):
|
||||
* Browser:
|
||||
@@ -74,9 +74,9 @@ body:
|
||||
|
||||
Examples:
|
||||
* Installation Method or Hosting Service: docker compose, k8s/docker, systemd, "Misskey install shell script", development environment
|
||||
* Misskey: 2026.x.x
|
||||
* Misskey: 2025.x.x
|
||||
* Node: 20.x.x
|
||||
* PostgreSQL: 18.x.x
|
||||
* PostgreSQL: 15.x.x
|
||||
* Redis: 7.x.x
|
||||
* OS and Architecture: Ubuntu 24.04.2 LTS aarch64
|
||||
value: |
|
||||
|
||||
7
.github/dependabot.yml
vendored
7
.github/dependabot.yml
vendored
@@ -9,7 +9,7 @@ updates:
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: daily
|
||||
open-pull-requests-limit: 0
|
||||
open-pull-requests-limit: 100
|
||||
|
||||
# Add only the root, not each workspace item
|
||||
# https://github.com/dependabot/dependabot-core/issues/4993#issuecomment-1289133027
|
||||
@@ -17,13 +17,16 @@ updates:
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: daily
|
||||
open-pull-requests-limit: 0
|
||||
open-pull-requests-limit: 10
|
||||
# List dependencies required to be updated together, sharing the same version numbers.
|
||||
# Those who simply have the common owner (e.g. @fastify) don't need to be listed.
|
||||
groups:
|
||||
aws-sdk:
|
||||
patterns:
|
||||
- "@aws-sdk/*"
|
||||
bull-board:
|
||||
patterns:
|
||||
- "@bull-board/*"
|
||||
nestjs:
|
||||
patterns:
|
||||
- "@nestjs/*"
|
||||
|
||||
1
.github/min.node-version
vendored
1
.github/min.node-version
vendored
@@ -1 +0,0 @@
|
||||
22.15.0
|
||||
2
.github/misskey/test.yml
vendored
2
.github/misskey/test.yml
vendored
@@ -15,5 +15,3 @@ redis:
|
||||
host: 127.0.0.1
|
||||
port: 56312
|
||||
id: aidx
|
||||
|
||||
proxyRemoteFiles: true
|
||||
|
||||
7
.github/workflows/api-misskey-js.yml
vendored
7
.github/workflows/api-misskey-js.yml
vendored
@@ -16,13 +16,12 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6.0.1
|
||||
uses: actions/checkout@v4.1.1
|
||||
|
||||
- name: Setup pnpm
|
||||
uses: pnpm/action-setup@v4.2.0
|
||||
- run: corepack enable
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v6.1.0
|
||||
uses: actions/setup-node@v4.0.4
|
||||
with:
|
||||
node-version-file: '.node-version'
|
||||
cache: 'pnpm'
|
||||
|
||||
4
.github/workflows/changelog-check.yml
vendored
4
.github/workflows/changelog-check.yml
vendored
@@ -12,9 +12,9 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout head
|
||||
uses: actions/checkout@v6.0.1
|
||||
uses: actions/checkout@v4.1.1
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v6.1.0
|
||||
uses: actions/setup-node@v4.0.4
|
||||
with:
|
||||
node-version-file: '.node-version'
|
||||
|
||||
|
||||
22
.github/workflows/check-misskey-js-autogen.yml
vendored
22
.github/workflows/check-misskey-js-autogen.yml
vendored
@@ -18,7 +18,7 @@ jobs:
|
||||
if: ${{ github.event.pull_request.mergeable == null || github.event.pull_request.mergeable == true }}
|
||||
steps:
|
||||
- name: checkout
|
||||
uses: actions/checkout@v6.0.1
|
||||
uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
submodules: true
|
||||
persist-credentials: false
|
||||
@@ -29,7 +29,7 @@ jobs:
|
||||
|
||||
- name: setup node
|
||||
id: setup-node
|
||||
uses: actions/setup-node@v6.1.0
|
||||
uses: actions/setup-node@v4.0.4
|
||||
with:
|
||||
node-version-file: '.node-version'
|
||||
cache: pnpm
|
||||
@@ -53,7 +53,7 @@ jobs:
|
||||
|
||||
# packages/misskey-js/generator/built/autogen
|
||||
- name: Upload Generated
|
||||
uses: actions/upload-artifact@v6
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: generated-misskey-js
|
||||
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 }}
|
||||
steps:
|
||||
- name: checkout
|
||||
uses: actions/checkout@v6.0.1
|
||||
uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
submodules: true
|
||||
persist-credentials: false
|
||||
ref: refs/pull/${{ github.event.pull_request.number }}/merge
|
||||
|
||||
- name: Upload From Merged
|
||||
uses: actions/upload-artifact@v6
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: actual-misskey-js
|
||||
path: packages/misskey-js/src/autogen
|
||||
@@ -86,13 +86,13 @@ jobs:
|
||||
pull-requests: write
|
||||
steps:
|
||||
- name: download generated-misskey-js
|
||||
uses: actions/download-artifact@v7
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: generated-misskey-js
|
||||
path: misskey-js-generated
|
||||
|
||||
- name: download actual-misskey-js
|
||||
uses: actions/download-artifact@v7
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: actual-misskey-js
|
||||
path: misskey-js-actual
|
||||
@@ -113,9 +113,9 @@ jobs:
|
||||
|
||||
- name: send message
|
||||
if: steps.check-changes.outputs.changes == 'true'
|
||||
uses: thollander/actions-comment-pull-request@v3
|
||||
uses: thollander/actions-comment-pull-request@v2
|
||||
with:
|
||||
comment-tag: check-misskey-js-autogen
|
||||
comment_tag: check-misskey-js-autogen
|
||||
message: |-
|
||||
Thank you for sending us a great Pull Request! 👍
|
||||
Please regenerate misskey-js type definitions! 🙏
|
||||
@@ -127,9 +127,9 @@ jobs:
|
||||
|
||||
- name: send message
|
||||
if: steps.check-changes.outputs.changes == 'false'
|
||||
uses: thollander/actions-comment-pull-request@v3
|
||||
uses: thollander/actions-comment-pull-request@v2
|
||||
with:
|
||||
comment-tag: check-misskey-js-autogen
|
||||
comment_tag: check-misskey-js-autogen
|
||||
mode: delete
|
||||
message: "Thank you!"
|
||||
create_if_not_exists: false
|
||||
|
||||
@@ -20,7 +20,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6.0.1
|
||||
uses: actions/checkout@v4.1.1
|
||||
- name: Check version
|
||||
run: |
|
||||
if [ "$(jq -r '.version' package.json)" != "$(jq -r '.version' packages/misskey-js/package.json)" ]; then
|
||||
|
||||
4
.github/workflows/check-spdx-license-id.yml
vendored
4
.github/workflows/check-spdx-license-id.yml
vendored
@@ -12,7 +12,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6.0.1
|
||||
uses: actions/checkout@v4.1.1
|
||||
- name: Check
|
||||
run: |
|
||||
counter=0
|
||||
@@ -50,7 +50,6 @@ jobs:
|
||||
"packages/backend/test"
|
||||
"packages/frontend-shared/@types"
|
||||
"packages/frontend-shared/js"
|
||||
"packages/frontend-builder"
|
||||
"packages/frontend/.storybook"
|
||||
"packages/frontend/@types"
|
||||
"packages/frontend/lib"
|
||||
@@ -59,7 +58,6 @@ jobs:
|
||||
"packages/frontend/test"
|
||||
"packages/frontend-embed/@types"
|
||||
"packages/frontend-embed/src"
|
||||
"packages/icons-subsetter/src"
|
||||
"packages/misskey-bubble-game/src"
|
||||
"packages/misskey-reversi/src"
|
||||
"packages/sw/src"
|
||||
|
||||
2
.github/workflows/check_copyright_year.yml
vendored
2
.github/workflows/check_copyright_year.yml
vendored
@@ -10,7 +10,7 @@ jobs:
|
||||
check_copyright_year:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v6.0.1
|
||||
- uses: actions/checkout@v4.1.1
|
||||
- run: |
|
||||
if [ "$(grep Copyright COPYING | sed -e 's/.*2014-\([0-9]*\) .*/\1/g')" -ne "$(date +%Y)" ]; then
|
||||
echo "Please change copyright year!"
|
||||
|
||||
@@ -28,7 +28,7 @@ jobs:
|
||||
wait_time: ${{ steps.get-wait-time.outputs.wait_time }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6.0.1
|
||||
uses: actions/checkout@v4.1.1
|
||||
|
||||
- name: Check allowed users
|
||||
id: check-allowed-users
|
||||
|
||||
6
.github/workflows/docker-develop.yml
vendored
6
.github/workflows/docker-develop.yml
vendored
@@ -27,7 +27,7 @@ jobs:
|
||||
platform=${{ matrix.platform }}
|
||||
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
|
||||
- name: Check out the repo
|
||||
uses: actions/checkout@v6.0.1
|
||||
uses: actions/checkout@v4.1.1
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
- name: Log in to Docker Hub
|
||||
@@ -53,7 +53,7 @@ jobs:
|
||||
digest="${{ steps.build.outputs.digest }}"
|
||||
touch "/tmp/digests/${digest#sha256:}"
|
||||
- name: Upload digest
|
||||
uses: actions/upload-artifact@v6
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: digests-${{ env.PLATFORM_PAIR }}
|
||||
path: /tmp/digests/*
|
||||
@@ -66,7 +66,7 @@ jobs:
|
||||
- build
|
||||
steps:
|
||||
- name: Download digests
|
||||
uses: actions/download-artifact@v7
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
path: /tmp/digests
|
||||
pattern: digests-*
|
||||
|
||||
6
.github/workflows/docker.yml
vendored
6
.github/workflows/docker.yml
vendored
@@ -32,7 +32,7 @@ jobs:
|
||||
platform=${{ matrix.platform }}
|
||||
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
|
||||
- name: Check out the repo
|
||||
uses: actions/checkout@v6.0.1
|
||||
uses: actions/checkout@v4.1.1
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
- name: Docker meta
|
||||
@@ -64,7 +64,7 @@ jobs:
|
||||
digest="${{ steps.build.outputs.digest }}"
|
||||
touch "/tmp/digests/${digest#sha256:}"
|
||||
- name: Upload digest
|
||||
uses: actions/upload-artifact@v6
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: digests-${{ env.PLATFORM_PAIR }}
|
||||
path: /tmp/digests/*
|
||||
@@ -77,7 +77,7 @@ jobs:
|
||||
- build
|
||||
steps:
|
||||
- name: Download digests
|
||||
uses: actions/download-artifact@v7
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
path: /tmp/digests
|
||||
pattern: digests-*
|
||||
|
||||
45
.github/workflows/dockle.yml
vendored
45
.github/workflows/dockle.yml
vendored
@@ -11,43 +11,22 @@ on:
|
||||
jobs:
|
||||
dockle:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
env:
|
||||
DOCKER_CONTENT_TRUST: 1
|
||||
DOCKLE_VERSION: 0.4.15
|
||||
|
||||
DOCKLE_VERSION: 0.4.14
|
||||
steps:
|
||||
- uses: actions/checkout@v6.0.1
|
||||
|
||||
- uses: actions/checkout@v4.1.1
|
||||
- name: Download and install dockle v${{ env.DOCKLE_VERSION }}
|
||||
run: |
|
||||
set -eux
|
||||
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
|
||||
|
||||
- name: Build web image (docker build)
|
||||
run: |
|
||||
set -eux
|
||||
docker build -t "misskey-web:ci" .
|
||||
docker image ls
|
||||
|
||||
- name: Mount tmpfs for Dockle tar
|
||||
env:
|
||||
TMPFS_SIZE: 8G
|
||||
run: |
|
||||
set -eux
|
||||
sudo mkdir -p /mnt/dockle-tmp
|
||||
sudo mount -t tmpfs -o size=${{ env.TMPFS_SIZE }} tmpfs /mnt/dockle-tmp
|
||||
free -h
|
||||
df -h
|
||||
|
||||
- name: Save image tar into tmpfs
|
||||
run: |
|
||||
set -eux
|
||||
docker save misskey-web:ci -o /mnt/dockle-tmp/misskey-web.tar
|
||||
ls -lh /mnt/dockle-tmp/misskey-web.tar
|
||||
|
||||
- name: Run Dockle Scan (tar input)
|
||||
run: |
|
||||
set -eux
|
||||
dockle --exit-code 1 --input /mnt/dockle-tmp/misskey-web.tar
|
||||
- run: |
|
||||
cp .config/docker_example.env .config/docker.env
|
||||
cp ./compose_example.yml ./compose.yml
|
||||
- run: |
|
||||
docker compose up -d web
|
||||
docker tag "$(docker compose images web | awk 'OFS=":" {print $4}' | tail -n +2)" misskey-web:latest
|
||||
- run: |
|
||||
cmd="dockle --exit-code 1 misskey-web:latest ${image_name}"
|
||||
echo "> ${cmd}"
|
||||
eval "${cmd}"
|
||||
|
||||
18
.github/workflows/get-api-diff.yml
vendored
18
.github/workflows/get-api-diff.yml
vendored
@@ -17,6 +17,7 @@ jobs:
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [22.11.0]
|
||||
api-json-name: [api-base.json, api-head.json]
|
||||
include:
|
||||
- api-json-name: api-base.json
|
||||
@@ -25,17 +26,18 @@ jobs:
|
||||
ref: refs/pull/${{ github.event.number }}/merge
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v6.0.1
|
||||
- uses: actions/checkout@v4.1.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
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4.0.4
|
||||
with:
|
||||
node-version-file: '.node-version'
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: 'pnpm'
|
||||
- run: corepack enable
|
||||
- run: pnpm i --frozen-lockfile
|
||||
- name: Check pnpm-lock.yaml
|
||||
run: git diff --exit-code pnpm-lock.yaml
|
||||
@@ -48,7 +50,7 @@ jobs:
|
||||
- name: Copy API.json
|
||||
run: cp packages/backend/built/api.json ${{ matrix.api-json-name }}
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v6
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: api-artifact-${{ matrix.api-json-name }}
|
||||
path: ${{ matrix.api-json-name }}
|
||||
@@ -61,7 +63,7 @@ jobs:
|
||||
PR_NUMBER: ${{ github.event.number }}
|
||||
run: |
|
||||
echo "$PR_NUMBER" > ./pr_number
|
||||
- uses: actions/upload-artifact@v6
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: api-artifact-pr-number
|
||||
path: pr_number
|
||||
|
||||
87
.github/workflows/get-backend-memory.yml
vendored
87
.github/workflows/get-backend-memory.yml
vendored
@@ -1,87 +0,0 @@
|
||||
# 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
|
||||
2
.github/workflows/labeler.yml
vendored
2
.github/workflows/labeler.yml
vendored
@@ -11,6 +11,6 @@ jobs:
|
||||
pull-requests: write
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/labeler@v6
|
||||
- uses: actions/labeler@v5
|
||||
with:
|
||||
repo-token: "${{ secrets.GITHUB_TOKEN }}"
|
||||
|
||||
38
.github/workflows/lint.yml
vendored
38
.github/workflows/lint.yml
vendored
@@ -9,9 +9,7 @@ on:
|
||||
- packages/backend/**
|
||||
- packages/frontend/**
|
||||
- packages/frontend-shared/**
|
||||
- packages/frontend-builder/**
|
||||
- packages/frontend-embed/**
|
||||
- packages/icons-subsetter/**
|
||||
- packages/sw/**
|
||||
- packages/misskey-js/**
|
||||
- packages/misskey-bubble-game/**
|
||||
@@ -23,9 +21,7 @@ on:
|
||||
- packages/backend/**
|
||||
- packages/frontend/**
|
||||
- packages/frontend-shared/**
|
||||
- packages/frontend-builder/**
|
||||
- packages/frontend-embed/**
|
||||
- packages/icons-subsetter/**
|
||||
- packages/sw/**
|
||||
- packages/misskey-js/**
|
||||
- packages/misskey-bubble-game/**
|
||||
@@ -36,16 +32,16 @@ jobs:
|
||||
pnpm_install:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v6.0.1
|
||||
- uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
fetch-depth: 0
|
||||
submodules: true
|
||||
- name: Setup pnpm
|
||||
uses: pnpm/action-setup@v4.2.0
|
||||
- uses: actions/setup-node@v6.1.0
|
||||
- uses: pnpm/action-setup@v4
|
||||
- uses: actions/setup-node@v4.0.4
|
||||
with:
|
||||
node-version-file: '.node-version'
|
||||
cache: 'pnpm'
|
||||
- run: corepack enable
|
||||
- run: pnpm i --frozen-lockfile
|
||||
|
||||
lint:
|
||||
@@ -58,9 +54,7 @@ jobs:
|
||||
- backend
|
||||
- frontend
|
||||
- frontend-shared
|
||||
- frontend-builder
|
||||
- frontend-embed
|
||||
- icons-subsetter
|
||||
- sw
|
||||
- misskey-js
|
||||
- misskey-bubble-game
|
||||
@@ -69,19 +63,19 @@ jobs:
|
||||
eslint-cache-version: v1
|
||||
eslint-cache-path: ${{ github.workspace }}/node_modules/.cache/eslint-${{ matrix.workspace }}
|
||||
steps:
|
||||
- uses: actions/checkout@v6.0.1
|
||||
- uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
fetch-depth: 0
|
||||
submodules: true
|
||||
- name: Setup pnpm
|
||||
uses: pnpm/action-setup@v4.2.0
|
||||
- uses: actions/setup-node@v6.1.0
|
||||
- uses: pnpm/action-setup@v4
|
||||
- uses: actions/setup-node@v4.0.4
|
||||
with:
|
||||
node-version-file: '.node-version'
|
||||
cache: 'pnpm'
|
||||
- run: corepack enable
|
||||
- run: pnpm i --frozen-lockfile
|
||||
- name: Restore eslint cache
|
||||
uses: actions/cache@v4.3.0
|
||||
uses: actions/cache@v4.1.0
|
||||
with:
|
||||
path: ${{ env.eslint-cache-path }}
|
||||
key: eslint-${{ env.eslint-cache-version }}-${{ matrix.workspace }}-${{ hashFiles('**/pnpm-lock.yaml') }}-${{ github.ref_name }}-${{ github.sha }}
|
||||
@@ -96,20 +90,22 @@ jobs:
|
||||
matrix:
|
||||
workspace:
|
||||
- backend
|
||||
- frontend
|
||||
- sw
|
||||
- misskey-js
|
||||
steps:
|
||||
- uses: actions/checkout@v6.0.1
|
||||
- uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
fetch-depth: 0
|
||||
submodules: true
|
||||
- name: Setup pnpm
|
||||
uses: pnpm/action-setup@v4.2.0
|
||||
- uses: actions/setup-node@v6.1.0
|
||||
- uses: pnpm/action-setup@v4
|
||||
- uses: actions/setup-node@v4.0.4
|
||||
with:
|
||||
node-version-file: '.node-version'
|
||||
cache: 'pnpm'
|
||||
- run: corepack enable
|
||||
- run: pnpm i --frozen-lockfile
|
||||
- run: pnpm --filter "${{ matrix.workspace }}^..." run build
|
||||
- run: pnpm --filter misskey-js 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
|
||||
|
||||
29
.github/workflows/locale.yml
vendored
29
.github/workflows/locale.yml
vendored
@@ -3,12 +3,10 @@ name: Lint
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- packages/i18n/**
|
||||
- locales/**
|
||||
- .github/workflows/locale.yml
|
||||
pull_request:
|
||||
paths:
|
||||
- packages/i18n/**
|
||||
- locales/**
|
||||
- .github/workflows/locale.yml
|
||||
jobs:
|
||||
@@ -16,18 +14,15 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
continue-on-error: true
|
||||
steps:
|
||||
- uses: actions/checkout@v6.0.1
|
||||
with:
|
||||
fetch-depth: 0
|
||||
submodules: true
|
||||
- name: Setup pnpm
|
||||
uses: pnpm/action-setup@v4.2.0
|
||||
- uses: actions/setup-node@v6.1.0
|
||||
with:
|
||||
node-version-file: ".node-version"
|
||||
cache: "pnpm"
|
||||
- run: pnpm i --frozen-lockfile
|
||||
- run: pnpm --filter i18n build
|
||||
- name: Verify Locales
|
||||
working-directory: ./packages/i18n
|
||||
run: pnpm run verify
|
||||
- uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
fetch-depth: 0
|
||||
submodules: true
|
||||
- uses: pnpm/action-setup@v4
|
||||
- uses: actions/setup-node@v4.0.4
|
||||
with:
|
||||
node-version-file: '.node-version'
|
||||
cache: 'pnpm'
|
||||
- run: corepack enable
|
||||
- run: pnpm i --frozen-lockfile
|
||||
- run: cd locales && node verify.js
|
||||
|
||||
36
.github/workflows/ok-to-test.yml
vendored
Normal file
36
.github/workflows/ok-to-test.yml
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
# If someone with write access comments "/ok-to-test" on a pull request, emit a repository_dispatch event
|
||||
name: Ok To Test
|
||||
|
||||
on:
|
||||
issue_comment:
|
||||
types: [created]
|
||||
|
||||
jobs:
|
||||
ok-to-test:
|
||||
runs-on: ubuntu-latest
|
||||
# Only run for PRs, not issue comments
|
||||
if: ${{ github.event.issue.pull_request }}
|
||||
steps:
|
||||
# Generate a GitHub App installation access token from an App ID and private key
|
||||
# To create a new GitHub App:
|
||||
# https://developer.github.com/apps/building-github-apps/creating-a-github-app/
|
||||
# See app.yml for an example app manifest
|
||||
- name: Generate token
|
||||
id: generate_token
|
||||
uses: tibdex/github-app-token@v2
|
||||
with:
|
||||
app_id: ${{ secrets.DEPLOYBOT_APP_ID }}
|
||||
private_key: ${{ secrets.DEPLOYBOT_PRIVATE_KEY }}
|
||||
|
||||
- name: Slash Command Dispatch
|
||||
uses: peter-evans/slash-command-dispatch@v4
|
||||
env:
|
||||
TOKEN: ${{ steps.generate_token.outputs.token }}
|
||||
with:
|
||||
token: ${{ env.TOKEN }} # GitHub App installation access token
|
||||
# token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} # PAT or OAuth token will also work
|
||||
reaction-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
issue-type: pull-request
|
||||
commands: deploy
|
||||
named-args: true
|
||||
permission: write
|
||||
18
.github/workflows/on-release-created.yml
vendored
18
.github/workflows/on-release-created.yml
vendored
@@ -15,21 +15,25 @@ jobs:
|
||||
contents: read
|
||||
id-token: write
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [22.11.0]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v6.0.1
|
||||
- uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
submodules: true
|
||||
- name: Setup pnpm
|
||||
uses: pnpm/action-setup@v4.2.0
|
||||
- name: Use Node.js
|
||||
uses: actions/setup-node@v6.1.0
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4.0.4
|
||||
with:
|
||||
node-version-file: '.node-version'
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: 'pnpm'
|
||||
# see https://docs.github.com/actions/use-cases-and-examples/publishing-packages/publishing-nodejs-packages#publishing-packages-to-the-npm-registry
|
||||
registry-url: 'https://registry.npmjs.org'
|
||||
- name: Publish package
|
||||
run: |
|
||||
corepack enable
|
||||
pnpm i --frozen-lockfile
|
||||
pnpm build
|
||||
pnpm --filter misskey-js publish --access public --no-git-checks --provenance
|
||||
|
||||
92
.github/workflows/pr-preview-deploy.yml
vendored
Normal file
92
.github/workflows/pr-preview-deploy.yml
vendored
Normal file
@@ -0,0 +1,92 @@
|
||||
# Run secret-dependent integration tests only after /deploy approval
|
||||
on:
|
||||
repository_dispatch:
|
||||
types: [deploy-command]
|
||||
|
||||
name: Deploy preview environment
|
||||
|
||||
jobs:
|
||||
# Repo owner has commented /deploy on a (fork-based) pull request
|
||||
deploy-preview-environment:
|
||||
runs-on: ubuntu-latest
|
||||
if:
|
||||
github.event.client_payload.slash_command.sha != '' &&
|
||||
contains(github.event.client_payload.pull_request.head.sha, github.event.client_payload.slash_command.sha)
|
||||
steps:
|
||||
- uses: actions/github-script@v7.0.1
|
||||
id: check-id
|
||||
env:
|
||||
number: ${{ github.event.client_payload.pull_request.number }}
|
||||
job: ${{ github.job }}
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
result-encoding: string
|
||||
script: |
|
||||
const { data: pull } = await github.rest.pulls.get({
|
||||
...context.repo,
|
||||
pull_number: process.env.number
|
||||
});
|
||||
const ref = pull.head.sha;
|
||||
|
||||
const { data: checks } = await github.rest.checks.listForRef({
|
||||
...context.repo,
|
||||
ref
|
||||
});
|
||||
|
||||
const check = checks.check_runs.filter(c => c.name === process.env.job);
|
||||
|
||||
return check[0].id;
|
||||
|
||||
- uses: actions/github-script@v7.0.1
|
||||
env:
|
||||
check_id: ${{ steps.check-id.outputs.result }}
|
||||
details_url: ${{ github.server_url }}/${{ github.repository }}/runs/${{ github.run_id }}
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
script: |
|
||||
await github.rest.checks.update({
|
||||
...context.repo,
|
||||
check_run_id: process.env.check_id,
|
||||
status: 'in_progress',
|
||||
details_url: process.env.details_url
|
||||
});
|
||||
|
||||
# Check out merge commit
|
||||
- name: Fork based /deploy checkout
|
||||
uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
ref: 'refs/pull/${{ github.event.client_payload.pull_request.number }}/merge'
|
||||
|
||||
# <insert integration tests needing secrets>
|
||||
- name: Context
|
||||
uses: okteto/context@latest
|
||||
with:
|
||||
token: ${{ secrets.OKTETO_TOKEN }}
|
||||
|
||||
- name: Deploy preview environment
|
||||
uses: ikuradon/deploy-preview@latest
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
name: pr-${{ github.event.client_payload.pull_request.number }}-syuilo
|
||||
timeout: 15m
|
||||
|
||||
# Update check run called "integration-fork"
|
||||
- uses: actions/github-script@v7.0.1
|
||||
id: update-check-run
|
||||
if: ${{ always() }}
|
||||
env:
|
||||
# Conveniently, job.status maps to https://developer.github.com/v3/checks/runs/#update-a-check-run
|
||||
conclusion: ${{ job.status }}
|
||||
check_id: ${{ steps.check-id.outputs.result }}
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
script: |
|
||||
const { data: result } = await github.rest.checks.update({
|
||||
...context.repo,
|
||||
check_run_id: process.env.check_id,
|
||||
status: 'completed',
|
||||
conclusion: process.env.conclusion
|
||||
});
|
||||
|
||||
return result;
|
||||
54
.github/workflows/pr-preview-destroy.yml
vendored
Normal file
54
.github/workflows/pr-preview-destroy.yml
vendored
Normal file
@@ -0,0 +1,54 @@
|
||||
# file: .github/workflows/preview-closed.yaml
|
||||
on:
|
||||
pull_request:
|
||||
types:
|
||||
- closed
|
||||
|
||||
name: Destroy preview environment
|
||||
|
||||
jobs:
|
||||
destroy-preview-environment:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/github-script@v7.0.1
|
||||
id: check-conclusion
|
||||
env:
|
||||
number: ${{ github.event.number }}
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
result-encoding: string
|
||||
script: |
|
||||
const { data: pull } = await github.rest.pulls.get({
|
||||
...context.repo,
|
||||
pull_number: process.env.number
|
||||
});
|
||||
const ref = pull.head.sha;
|
||||
|
||||
const { data: checks } = await github.rest.checks.listForRef({
|
||||
...context.repo,
|
||||
ref
|
||||
});
|
||||
|
||||
const check = checks.check_runs.filter(c => c.name === 'deploy-preview-environment');
|
||||
|
||||
if (check.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
const { data: result } = await github.rest.checks.get({
|
||||
...context.repo,
|
||||
check_run_id: check[0].id,
|
||||
});
|
||||
|
||||
return result.conclusion;
|
||||
- name: Context
|
||||
if: steps.check-conclusion.outputs.result == 'success'
|
||||
uses: okteto/context@latest
|
||||
with:
|
||||
token: ${{ secrets.OKTETO_TOKEN }}
|
||||
|
||||
- name: Destroy preview environment
|
||||
if: steps.check-conclusion.outputs.result == 'success'
|
||||
uses: okteto/destroy-preview@latest
|
||||
with:
|
||||
name: pr-${{ github.event.number }}-syuilo
|
||||
2
.github/workflows/release-edit-with-push.yml
vendored
2
.github/workflows/release-edit-with-push.yml
vendored
@@ -19,7 +19,7 @@ jobs:
|
||||
edit:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- uses: actions/checkout@v4
|
||||
# headが$GITHUB_REF_NAME, baseが$STABLE_BRANCHかつopenのPRを1つ取得
|
||||
- name: Get PR
|
||||
run: |
|
||||
|
||||
2
.github/workflows/release-with-dispatch.yml
vendored
2
.github/workflows/release-with-dispatch.yml
vendored
@@ -36,7 +36,7 @@ jobs:
|
||||
outputs:
|
||||
pr_number: ${{ steps.get_pr.outputs.pr_number }}
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- uses: actions/checkout@v4
|
||||
# headが$GITHUB_REF_NAME, baseが$STABLE_BRANCHかつopenのPRを1つ取得
|
||||
- name: Get PRs
|
||||
run: |
|
||||
|
||||
24
.github/workflows/report-api-diff.yml
vendored
24
.github/workflows/report-api-diff.yml
vendored
@@ -16,7 +16,7 @@ jobs:
|
||||
# api-artifact
|
||||
steps:
|
||||
- name: Download artifact
|
||||
uses: actions/github-script@v8.0.0
|
||||
uses: actions/github-script@v7.0.1
|
||||
with:
|
||||
script: |
|
||||
const fs = require('fs');
|
||||
@@ -60,7 +60,7 @@ jobs:
|
||||
- name: Echo full diff
|
||||
run: cat ./api-full.json.diff
|
||||
- name: Upload full diff to Artifact
|
||||
uses: actions/upload-artifact@v6
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: api-artifact
|
||||
path: |
|
||||
@@ -73,9 +73,9 @@ jobs:
|
||||
HEADER="このPRによるapi.jsonの差分"
|
||||
FOOTER="[Get diff files from Workflow Page](https://github.com/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID})"
|
||||
DIFF_BYTES="$(stat ./api.json.diff -c '%s' | tr -d '\n')"
|
||||
|
||||
|
||||
echo "$HEADER" > ./output.md
|
||||
|
||||
|
||||
if (( "$DIFF_BYTES" <= 1 )); then
|
||||
echo '差分はありません。' >> ./output.md
|
||||
else
|
||||
@@ -87,18 +87,18 @@ jobs:
|
||||
echo '```' >> ./output.md
|
||||
echo '</details>' >> .output.md
|
||||
fi
|
||||
|
||||
|
||||
echo "$FOOTER" >> ./output.md
|
||||
- uses: thollander/actions-comment-pull-request@v3
|
||||
- uses: thollander/actions-comment-pull-request@v2
|
||||
with:
|
||||
pr-number: ${{ steps.load-pr-num.outputs.pr-number }}
|
||||
comment-tag: show_diff
|
||||
file-path: ./output.md
|
||||
pr_number: ${{ steps.load-pr-num.outputs.pr-number }}
|
||||
comment_tag: show_diff
|
||||
filePath: ./output.md
|
||||
- name: Tell error to PR
|
||||
uses: thollander/actions-comment-pull-request@v3
|
||||
uses: thollander/actions-comment-pull-request@v2
|
||||
if: failure() && steps.load-pr-num.outputs.pr-number
|
||||
with:
|
||||
pr-number: ${{ steps.load-pr-num.outputs.pr-number }}
|
||||
comment-tag: show_diff_error
|
||||
pr_number: ${{ steps.load-pr-num.outputs.pr-number }}
|
||||
comment_tag: show_diff_error
|
||||
message: |
|
||||
api.jsonの差分作成中にエラーが発生しました。詳細は[Workflowのログ](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})を確認してください。
|
||||
|
||||
122
.github/workflows/report-backend-memory.yml
vendored
122
.github/workflows/report-backend-memory.yml
vendored
@@ -1,122 +0,0 @@
|
||||
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.
|
||||
51
.github/workflows/request-release-review.yml
vendored
51
.github/workflows/request-release-review.yml
vendored
@@ -1,51 +0,0 @@
|
||||
name: Request release review
|
||||
|
||||
on:
|
||||
issue_comment:
|
||||
types: [created]
|
||||
|
||||
jobs:
|
||||
reply:
|
||||
if: github.event.comment.body == '/request-release-review'
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
issues: write
|
||||
pull-requests: write
|
||||
steps:
|
||||
- name: Reply
|
||||
uses: actions/github-script@v8
|
||||
with:
|
||||
script: |
|
||||
const body = `To dev team (@misskey-dev/dev):
|
||||
|
||||
リリースが提案されています :rocket:
|
||||
|
||||
GOの場合はapprove、NO GOの場合はその旨コメントをお願いいたします。
|
||||
|
||||
判断にあたって考慮すべき観点は、
|
||||
|
||||
- やり残したことはないか?
|
||||
- CHANGELOGは過不足ないか?
|
||||
- バージョンに問題はないか?(月跨いでいるのに更新忘れているなど)
|
||||
- 再考すべき仕様・実装はないか?
|
||||
- ベータ版を検証したサーバーから不具合の報告等は上がってないか?
|
||||
- (セキュリティの修正や重要なバグ修正などのため)リリースを急いだ方が良いか?そうではないか?
|
||||
- Actionsが落ちていないか?
|
||||
|
||||
などが挙げられます。
|
||||
|
||||
ご協力ありがとうございます :sparkles:
|
||||
`
|
||||
|
||||
const issue_number = context.payload.issue ? context.payload.issue.number : (context.payload.pull_request && context.payload.pull_request.number)
|
||||
if (!issue_number) {
|
||||
console.log('No issue or PR number found in payload; skipping')
|
||||
} else {
|
||||
await github.rest.issues.createComment({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
issue_number,
|
||||
body,
|
||||
})
|
||||
}
|
||||
42
.github/workflows/storybook.yml
vendored
42
.github/workflows/storybook.yml
vendored
@@ -5,6 +5,7 @@ on:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
- dev/storybook8 # for testing
|
||||
pull_request_target:
|
||||
branches-ignore:
|
||||
# Since pull requests targets master mostly is the "develop" branch.
|
||||
@@ -14,7 +15,7 @@ on:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
# Chromatic is not likely to be available for fork repositories, so we disable for fork repositories.
|
||||
# chromatic is not likely to be available for fork repositories, so we disable for fork repositories.
|
||||
if: github.repository == 'misskey-dev/misskey'
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
@@ -22,12 +23,12 @@ jobs:
|
||||
NODE_OPTIONS: "--max_old_space_size=7168"
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v6.0.1
|
||||
- uses: actions/checkout@v4.1.1
|
||||
if: github.event_name != 'pull_request_target'
|
||||
with:
|
||||
fetch-depth: 0
|
||||
submodules: true
|
||||
- uses: actions/checkout@v6.0.1
|
||||
- uses: actions/checkout@v4.1.1
|
||||
if: github.event_name == 'pull_request_target'
|
||||
with:
|
||||
fetch-depth: 0
|
||||
@@ -35,19 +36,23 @@ jobs:
|
||||
ref: "refs/pull/${{ github.event.number }}/merge"
|
||||
- name: Checkout actual HEAD
|
||||
if: github.event_name == 'pull_request_target'
|
||||
run: git checkout "$(git rev-list --parents -n1 HEAD | cut -d" " -f3)"
|
||||
- name: Setup pnpm
|
||||
uses: pnpm/action-setup@v4.2.0
|
||||
- name: Use Node.js
|
||||
uses: actions/setup-node@v6.1.0
|
||||
id: rev
|
||||
run: |
|
||||
echo "base=$(git rev-list --parents -n1 HEAD | cut -d" " -f2)" >> $GITHUB_OUTPUT
|
||||
git checkout $(git rev-list --parents -n1 HEAD | cut -d" " -f3)
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
- name: Use Node.js 20.x
|
||||
uses: actions/setup-node@v4.0.4
|
||||
with:
|
||||
node-version-file: '.node-version'
|
||||
cache: 'pnpm'
|
||||
- run: corepack enable
|
||||
- run: pnpm i --frozen-lockfile
|
||||
- name: Check pnpm-lock.yaml
|
||||
run: git diff --exit-code pnpm-lock.yaml
|
||||
- name: Build dependent packages
|
||||
run: pnpm -F misskey-js -F misskey-bubble-game -F misskey-reversi build
|
||||
- name: Build misskey-js
|
||||
run: pnpm --filter misskey-js build
|
||||
- name: Build storybook
|
||||
run: pnpm --filter frontend build-storybook
|
||||
- name: Publish to Chromatic
|
||||
@@ -78,19 +83,24 @@ jobs:
|
||||
if: github.event_name == 'pull_request_target'
|
||||
id: chromatic_pull_request
|
||||
run: |
|
||||
CHROMATIC_PARAMETER="$(node packages/frontend/.storybook/changes.js $(git diff --name-only origin/${GITHUB_BASE_REF}...origin/${GITHUB_HEAD_REF} | xargs))"
|
||||
DIFF="${{ steps.rev.outputs.base }} HEAD"
|
||||
if [ "$DIFF" = "0000000000000000000000000000000000000000 HEAD" ]; then
|
||||
DIFF="HEAD"
|
||||
fi
|
||||
CHROMATIC_PARAMETER="$(node packages/frontend/.storybook/changes.js $(git diff-tree --no-commit-id --name-only -r $(echo "$DIFF") | xargs))"
|
||||
if [ "$CHROMATIC_PARAMETER" = " --skip" ]; then
|
||||
echo "skip=true" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
BRANCH="${{ github.event.pull_request.head.user.login }}:$GITHUB_HEAD_REF"
|
||||
if [ "$BRANCH" = "misskey-dev:$GITHUB_HEAD_REF" ]; then
|
||||
BRANCH="$GITHUB_HEAD_REF"
|
||||
BRANCH="${{ github.event.pull_request.head.user.login }}:$HEAD_REF"
|
||||
if [ "$BRANCH" = "misskey-dev:$HEAD_REF" ]; then
|
||||
BRANCH="$HEAD_REF"
|
||||
fi
|
||||
pnpm --filter frontend chromatic --exit-once-uploaded -d storybook-static --branch-name "$BRANCH" $(echo "$CHROMATIC_PARAMETER")
|
||||
env:
|
||||
HEAD_REF: ${{ github.event.pull_request.head.ref }}
|
||||
CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
|
||||
- name: Notify that Chromatic detects changes
|
||||
uses: actions/github-script@v8.0.0
|
||||
uses: actions/github-script@v7.0.1
|
||||
if: github.event_name != 'pull_request_target' && steps.chromatic_push.outputs.success == 'false'
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -102,7 +112,7 @@ jobs:
|
||||
body: 'Chromatic detects changes. Please [review the changes on Chromatic](https://www.chromatic.com/builds?appId=6428f7d7b962f0b79f97d6e4).'
|
||||
})
|
||||
- name: Upload Artifacts
|
||||
uses: actions/upload-artifact@v6
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: storybook
|
||||
path: packages/frontend/storybook-static
|
||||
|
||||
115
.github/workflows/test-backend.yml
vendored
115
.github/workflows/test-backend.yml
vendored
@@ -18,27 +18,18 @@ on:
|
||||
- packages/misskey-js/**
|
||||
- .github/workflows/test-backend.yml
|
||||
- .github/misskey/test.yml
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
force_ffmpeg_cache_update:
|
||||
description: 'Force update ffmpeg cache'
|
||||
required: false
|
||||
default: false
|
||||
type: boolean
|
||||
|
||||
jobs:
|
||||
unit:
|
||||
name: Unit tests (backend)
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version-file:
|
||||
- .node-version
|
||||
- .github/min.node-version
|
||||
node-version: [22.11.0]
|
||||
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:18
|
||||
image: postgres:15
|
||||
ports:
|
||||
- 54312:5432
|
||||
env:
|
||||
@@ -48,36 +39,14 @@ jobs:
|
||||
image: redis:7
|
||||
ports:
|
||||
- 56312:6379
|
||||
meilisearch:
|
||||
image: getmeili/meilisearch:v1.3.4
|
||||
ports:
|
||||
- 57712:7700
|
||||
env:
|
||||
MEILI_NO_ANALYTICS: true
|
||||
MEILI_ENV: development
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v6.0.1
|
||||
- uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
submodules: true
|
||||
- name: Setup pnpm
|
||||
uses: pnpm/action-setup@v4.2.0
|
||||
- name: Get current date
|
||||
id: current-date
|
||||
run: echo "today=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT
|
||||
- name: Setup and Restore ffmpeg/ffprobe Cache
|
||||
id: cache-ffmpeg
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
/usr/local/bin/ffmpeg
|
||||
/usr/local/bin/ffprobe
|
||||
# daily cache
|
||||
key: ${{ runner.os }}-ffmpeg-${{ steps.current-date.outputs.today }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-ffmpeg-${{ steps.current-date.outputs.today }}
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
- name: Install FFmpeg
|
||||
if: steps.cache-ffmpeg.outputs.cache-hit != 'true' || github.event.inputs.force_ffmpeg_cache_update == true
|
||||
run: |
|
||||
for i in {1..3}; do
|
||||
echo "Attempt $i: Installing FFmpeg..."
|
||||
@@ -92,11 +61,12 @@ jobs:
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
- name: Use Node.js
|
||||
uses: actions/setup-node@v6.1.0
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4.0.4
|
||||
with:
|
||||
node-version-file: ${{ matrix.node-version-file }}
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: 'pnpm'
|
||||
- run: corepack enable
|
||||
- run: pnpm i --frozen-lockfile
|
||||
- name: Check pnpm-lock.yaml
|
||||
run: git diff --exit-code pnpm-lock.yaml
|
||||
@@ -115,16 +85,14 @@ jobs:
|
||||
e2e:
|
||||
name: E2E tests (backend)
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
node-version-file:
|
||||
- .node-version
|
||||
- .github/min.node-version
|
||||
node-version: [22.11.0]
|
||||
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:18
|
||||
image: postgres:15
|
||||
ports:
|
||||
- 54312:5432
|
||||
env:
|
||||
@@ -136,16 +104,17 @@ jobs:
|
||||
- 56312:6379
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v6.0.1
|
||||
- uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
submodules: true
|
||||
- name: Setup pnpm
|
||||
uses: pnpm/action-setup@v4.2.0
|
||||
- name: Use Node.js
|
||||
uses: actions/setup-node@v6.1.0
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4.0.4
|
||||
with:
|
||||
node-version-file: ${{ matrix.node-version-file }}
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: 'pnpm'
|
||||
- run: corepack enable
|
||||
- run: pnpm i --frozen-lockfile
|
||||
- name: Check pnpm-lock.yaml
|
||||
run: git diff --exit-code pnpm-lock.yaml
|
||||
@@ -160,47 +129,3 @@ jobs:
|
||||
with:
|
||||
token: ${{ secrets.CODECOV_TOKEN }}
|
||||
files: ./packages/backend/coverage/coverage-final.json
|
||||
|
||||
migration:
|
||||
name: Migration tests (backend)
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
node-version-file:
|
||||
- .node-version
|
||||
#- .github/min.node-version
|
||||
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:18
|
||||
ports:
|
||||
- 54312:5432
|
||||
env:
|
||||
POSTGRES_DB: test-misskey
|
||||
POSTGRES_HOST_AUTH_METHOD: trust
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v6.0.1
|
||||
with:
|
||||
submodules: true
|
||||
- name: Setup pnpm
|
||||
uses: pnpm/action-setup@v4.2.0
|
||||
- name: Get current date
|
||||
id: current-date
|
||||
run: echo "today=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT
|
||||
- name: Use Node.js
|
||||
uses: actions/setup-node@v6.1.0
|
||||
with:
|
||||
node-version-file: ${{ matrix.node-version-file }}
|
||||
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
|
||||
- name: Build
|
||||
run: pnpm build
|
||||
- name: Run migrations
|
||||
run: MISSKEY_CONFIG_YML=test.yml pnpm --filter backend migrate
|
||||
- name: Check no migrations are remaining
|
||||
run: MISSKEY_CONFIG_YML=test.yml pnpm --filter backend check-migrations
|
||||
|
||||
54
.github/workflows/test-federation.yml
vendored
54
.github/workflows/test-federation.yml
vendored
@@ -14,13 +14,6 @@ on:
|
||||
- packages/backend/**
|
||||
- packages/misskey-js/**
|
||||
- .github/workflows/test-federation.yml
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
force_ffmpeg_cache_update:
|
||||
description: 'Force update ffmpeg cache'
|
||||
required: false
|
||||
default: false
|
||||
type: boolean
|
||||
|
||||
jobs:
|
||||
test:
|
||||
@@ -28,31 +21,14 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
node-version-file:
|
||||
- .node-version
|
||||
- .github/min.node-version
|
||||
node-version: [22.11.0]
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: true
|
||||
- name: Setup pnpm
|
||||
uses: pnpm/action-setup@v4.2.0
|
||||
- name: Get current date
|
||||
id: current-date
|
||||
run: echo "today=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT
|
||||
- name: Setup and Restore ffmpeg/ffprobe Cache
|
||||
id: cache-ffmpeg
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
/usr/local/bin/ffmpeg
|
||||
/usr/local/bin/ffprobe
|
||||
# daily cache
|
||||
key: ${{ runner.os }}-ffmpeg-${{ steps.current-date.outputs.today }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-ffmpeg-${{ steps.current-date.outputs.today }}
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
- name: Install FFmpeg
|
||||
if: steps.cache-ffmpeg.outputs.cache-hit != 'true' || github.event.inputs.force_ffmpeg_cache_update == true
|
||||
run: |
|
||||
for i in {1..3}; do
|
||||
echo "Attempt $i: Installing FFmpeg..."
|
||||
@@ -67,45 +43,31 @@ jobs:
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
- name: Use Node.js
|
||||
uses: actions/setup-node@v6.1.0
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4.0.3
|
||||
with:
|
||||
node-version-file: ${{ matrix.node-version-file }}
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: 'pnpm'
|
||||
- name: Build Misskey
|
||||
run: |
|
||||
corepack enable && corepack prepare
|
||||
pnpm i --frozen-lockfile
|
||||
pnpm build
|
||||
- name: Setup
|
||||
run: |
|
||||
echo "NODE_VERSION=$(cat ${{ matrix.node-version-file }})" >> $GITHUB_ENV
|
||||
cd packages/backend/test-federation
|
||||
bash ./setup.sh
|
||||
sudo chmod 644 ./certificates/*.test.key
|
||||
- name: Start servers
|
||||
id: start_servers
|
||||
continue-on-error: true
|
||||
# https://github.com/docker/compose/issues/1294#issuecomment-374847206
|
||||
run: |
|
||||
cd packages/backend/test-federation
|
||||
docker compose up -d --scale tester=0
|
||||
- name: Print start_servers error
|
||||
if: ${{ steps.start_servers.outcome == 'failure' }}
|
||||
run: |
|
||||
cd packages/backend/test-federation
|
||||
docker compose logs | tail -n 300
|
||||
exit 1
|
||||
- name: Test
|
||||
run: |
|
||||
cd packages/backend/test-federation
|
||||
docker compose run --no-deps tester
|
||||
- name: Log
|
||||
if: always()
|
||||
run: |
|
||||
cd packages/backend/test-federation
|
||||
docker compose logs
|
||||
- name: Stop servers
|
||||
if: always()
|
||||
run: |
|
||||
cd packages/backend/test-federation
|
||||
docker compose down
|
||||
|
||||
37
.github/workflows/test-frontend.yml
vendored
37
.github/workflows/test-frontend.yml
vendored
@@ -27,17 +27,22 @@ jobs:
|
||||
name: Unit tests (frontend)
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [22.11.0]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v6.0.1
|
||||
- uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
submodules: true
|
||||
- name: Setup pnpm
|
||||
uses: pnpm/action-setup@v4.2.0
|
||||
- name: Use Node.js
|
||||
uses: actions/setup-node@v6.1.0
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4.0.4
|
||||
with:
|
||||
node-version-file: '.node-version'
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: 'pnpm'
|
||||
- run: corepack enable
|
||||
- run: pnpm i --frozen-lockfile
|
||||
- name: Check pnpm-lock.yaml
|
||||
run: git diff --exit-code pnpm-lock.yaml
|
||||
@@ -60,11 +65,12 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
node-version: [22.11.0]
|
||||
browser: [chrome]
|
||||
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:18
|
||||
image: postgres:15
|
||||
ports:
|
||||
- 54312:5432
|
||||
env:
|
||||
@@ -76,7 +82,7 @@ jobs:
|
||||
- 56312:6379
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v6.0.1
|
||||
- uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
submodules: true
|
||||
# https://github.com/cypress-io/cypress-docker-images/issues/150
|
||||
@@ -85,13 +91,14 @@ jobs:
|
||||
# if: ${{ matrix.browser == 'firefox' }}
|
||||
#- uses: browser-actions/setup-firefox@latest
|
||||
# if: ${{ matrix.browser == 'firefox' }}
|
||||
- name: Setup pnpm
|
||||
uses: pnpm/action-setup@v4.2.0
|
||||
- name: Use Node.js
|
||||
uses: actions/setup-node@v6.1.0
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4.0.4
|
||||
with:
|
||||
node-version-file: '.node-version'
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: 'pnpm'
|
||||
- run: corepack enable
|
||||
- run: pnpm i --frozen-lockfile
|
||||
- name: Copy Configure
|
||||
run: cp .github/misskey/test.yml .config
|
||||
@@ -113,12 +120,12 @@ jobs:
|
||||
wait-on: 'http://localhost:61812'
|
||||
headed: true
|
||||
browser: ${{ matrix.browser }}
|
||||
- uses: actions/upload-artifact@v6
|
||||
- uses: actions/upload-artifact@v4
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ matrix.browser }}-cypress-screenshots
|
||||
path: cypress/screenshots
|
||||
- uses: actions/upload-artifact@v6
|
||||
- uses: actions/upload-artifact@v4
|
||||
if: always()
|
||||
with:
|
||||
name: ${{ matrix.browser }}-cypress-videos
|
||||
|
||||
16
.github/workflows/test-misskey-js.yml
vendored
16
.github/workflows/test-misskey-js.yml
vendored
@@ -20,17 +20,21 @@ jobs:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [22.11.0]
|
||||
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6.0.1
|
||||
uses: actions/checkout@v4.1.1
|
||||
|
||||
- name: Setup pnpm
|
||||
uses: pnpm/action-setup@v4.2.0
|
||||
- run: corepack enable
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v6.1.0
|
||||
- name: Setup Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4.0.4
|
||||
with:
|
||||
node-version-file: '.node-version'
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: 'pnpm'
|
||||
|
||||
- name: Install dependencies
|
||||
|
||||
17
.github/workflows/test-production.yml
vendored
17
.github/workflows/test-production.yml
vendored
@@ -15,17 +15,22 @@ jobs:
|
||||
name: Production build
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [22.11.0]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v6.0.1
|
||||
- uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
submodules: true
|
||||
- name: Setup pnpm
|
||||
uses: pnpm/action-setup@v4.2.0
|
||||
- name: Use Node.js
|
||||
uses: actions/setup-node@v6.1.0
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4.0.4
|
||||
with:
|
||||
node-version-file: '.node-version'
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: 'pnpm'
|
||||
- run: corepack enable
|
||||
- run: pnpm i --frozen-lockfile
|
||||
- name: Check pnpm-lock.yaml
|
||||
run: git diff --exit-code pnpm-lock.yaml
|
||||
|
||||
17
.github/workflows/validate-api-json.yml
vendored
17
.github/workflows/validate-api-json.yml
vendored
@@ -16,19 +16,24 @@ jobs:
|
||||
validate-api-json:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [22.11.0]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v6.0.1
|
||||
- uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
submodules: true
|
||||
- name: Setup pnpm
|
||||
uses: pnpm/action-setup@v4.2.0
|
||||
- name: Use Node.js
|
||||
uses: actions/setup-node@v6.1.0
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4.0.4
|
||||
with:
|
||||
node-version-file: '.node-version'
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: 'pnpm'
|
||||
- name: Install Redocly CLI
|
||||
run: npm i -g @redocly/cli
|
||||
- run: corepack enable
|
||||
- run: pnpm i --frozen-lockfile
|
||||
- name: Check pnpm-lock.yaml
|
||||
run: git diff --exit-code pnpm-lock.yaml
|
||||
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -46,7 +46,6 @@ docker-compose.yml
|
||||
built
|
||||
built-test
|
||||
js-built
|
||||
src-js
|
||||
/data
|
||||
/.cache-loader
|
||||
/db
|
||||
|
||||
@@ -1 +1 @@
|
||||
22.15.0
|
||||
22.11.0
|
||||
|
||||
7
.vscode/settings.json
vendored
7
.vscode/settings.json
vendored
@@ -3,16 +3,11 @@
|
||||
"**/node_modules": true
|
||||
},
|
||||
"typescript.tsdk": "node_modules/typescript/lib",
|
||||
"typescript.enablePromptUseWorkspaceTsdk": true,
|
||||
"files.associations": {
|
||||
"*.test.ts": "typescript"
|
||||
},
|
||||
"jest.jestCommandLine": "pnpm run jest",
|
||||
"jest.runMode": "on-demand",
|
||||
"jest.virtualFolders": [
|
||||
{ "name": "backend unit", "jestCommandLine": "pnpm -F backend run test" },
|
||||
{ "name": "backend e2e", "jestCommandLine": "pnpm -F backend run test:e2e"},
|
||||
{ "name": "misskey-js", "jestCommandLine": "pnpm -F misskey-js run jest" }
|
||||
],
|
||||
"editor.codeActionsOnSave": {
|
||||
"source.fixAll": "explicit"
|
||||
},
|
||||
|
||||
728
CHANGELOG.md
728
CHANGELOG.md
@@ -1,718 +1,3 @@
|
||||
## 2026.1.0
|
||||
|
||||
### Note
|
||||
- `users/following` の `birthday` プロパティは非推奨になりました。代わりに `users/get-following-birthday-users` をご利用ください。
|
||||
|
||||
### General
|
||||
- Enhance: 「もうすぐ誕生日のユーザー」ウィジェットで、誕生日が至近のユーザーも表示できるように
|
||||
(Cherry-picked from https://github.com/MisskeyIO/misskey)
|
||||
- 「今日誕生日のユーザー」は「もうすぐ誕生日のユーザー」に名称変更されました
|
||||
- 依存関係の更新
|
||||
|
||||
### Client
|
||||
- Enhance: ドライブのファイル一覧で自動でもっと見るを利用可能に
|
||||
- Enhance: ウィジェットの表示設定をプレビューを見ながら行えるように
|
||||
- Enhance: ウィジェットの設定項目のラベルの多言語対応
|
||||
- Fix: ドライブクリーナーでファイルを削除しても画面に反映されない問題を修正 #16061
|
||||
- Fix: 非ログイン時にログインを求めるダイアログが表示された後にダイアログのぼかしが解除されず操作不能になることがある問題を修正
|
||||
- Fix: ドライブのソートが「登録日(昇順)」の場合に正しく動作しない問題を修正
|
||||
- Fix: 管理画面でアーカイブ済のお知らせを表示した際にアクティブなお知らせが多い旨の警告が出る問題を修正
|
||||
- Fix: ファイルタブのセンシティブメディアを開く際に確認ダイアログを出す設定が適用されない問題を修正
|
||||
|
||||
### Server
|
||||
- Enhance: OAuthのクライアント情報取得(Client Information Discovery)において、IndieWeb Living Standard 11 July 2024で定義されているJSONドキュメント形式に対応しました
|
||||
- JSONによるClient Information Discoveryを行うには、レスポンスの`Content-Type`ヘッダーが`application/json`である必要があります
|
||||
- 従来の実装(12 February 2022版・HTML Microformat形式)も引き続きサポートされます
|
||||
- Enhance: メモリ使用量を削減
|
||||
|
||||
## 2025.12.2
|
||||
|
||||
### Note
|
||||
v2025.12.0で行われた「configの`trustProxy`のデフォルト値を`false`に変更」について、正しく環境に応じた設定を行わないとサインインが困難になるといった状態を緩和するために、以下の対応を行いました。
|
||||
|
||||
**正しく設定しないと、上記のような不具合の原因となったり、セキュリティリスクが高まったりする可能性があります。必ず現在のconfigをご確認の上、必要に応じて値を変更してください。**
|
||||
|
||||
- `trustProxy`について、デフォルト(configに値が設定されていない状態)ではループバックアドレスとローカルIPアドレス空間を信頼するようにしました。
|
||||
- `trustProxy`の設定方法について、より詳細に記述しました。
|
||||
- リバースプロキシやCDNなどのより上流のレイヤでレートリミットを設定したい場合や、緊急時の一時的な緩和策として、Misskey内部でのIPアドレスペースでのレートリミットを無効化できるようにしました。
|
||||
|
||||
### General
|
||||
- 依存関係の更新
|
||||
|
||||
### Client
|
||||
- Enhance: デッキのUI説明を追加
|
||||
- Enhance: 設定がブラウザによって消去されないようにするオプションを追加
|
||||
- Fix: バージョン表記のないPlayが正しく動作しない問題を修正
|
||||
バージョン表記のないものは v0.x 系として実行されます。v1.x 系で動作させたい場合は必ずバージョン表記を含めてください。
|
||||
- Fix: デッキUIでメニュー位置を下にしているとプロファイル削除ボタンが表示されないのを修正
|
||||
- Fix: 一部のUnicode絵文字のリアクションがボタンにならない問題を修正
|
||||
|
||||
### Server
|
||||
- Enhance: Misskey内部でのIPアドレスペースでのレートリミットを無効化できるように
|
||||
- リバースプロキシやCDNなど別のレイヤで別途レートリミットを設定する場合や、ローカルでのテスト用途等として利用することを想定しています。
|
||||
- デフォルトは `enableIpRateLimit: true`(Misskey内部でのIPアドレスペースでのレートリミットは有効)です。
|
||||
- Fix: コントロールパネルのジョブキューページで使用される一部APIの応答速度を改善
|
||||
|
||||
## 2025.12.1
|
||||
|
||||
### Client
|
||||
- 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
|
||||
|
||||
### General
|
||||
- Enhance: リモートユーザーに付与したロールバッジを表示できるように(オプトイン)
|
||||
パフォーマンス上の問題からデフォルトで無効化されています。「コントロールパネル > パフォーマンス」から有効化できます。
|
||||
- 依存関係の更新
|
||||
|
||||
### Client
|
||||
- Enhance: デッキのメインカラムのヘッダをクリックしてページ上部/下部にスクロールできるように
|
||||
- Enhance: 下書き/予約投稿一覧は投稿フォームのアカウントメニュー内に移動し、下書き保存は「...」メニュー内に移動されました
|
||||
- Fix: カスタム絵文字画面(beta)のaliasesで使用される区切り文字が一致していないのを修正 #15614
|
||||
- Fix: バナー画像の幅が表示領域と一致していない問題を修正
|
||||
- Fix: 一部のブラウザでバナー画像が上下中央に表示されない問題を修正
|
||||
- Fix: ナビゲーションバーの設定で削除した項目をその場で再追加できない問題を修正
|
||||
- Fix: ロールポリシーによりダイレクトメッセージが無効化されている際のデッキのダイレクトメッセージカラムの挙動を改善
|
||||
- Fix: 画像のマスクでタッチ操作が不安定な問題を修正
|
||||
- Fix: ウォーターマークの各種挙動修正
|
||||
- ウォーターマークを回転させると歪む問題を修正
|
||||
- ウォーターマークを敷き詰めると上下左右反転した画像/文字が表示される問題を修正
|
||||
- ウォーターマークを回転させた際に画面からはみ出た部分を考慮できるように
|
||||
- Fix: 投票が終了した後に投票結果が正しく表示されない問題を修正
|
||||
- Fix: ダークモードの同期が機能しない場合がある問題を修正
|
||||
- Fix: iOSで動画の圧縮を行うと音声トラックが失われる問題を修正
|
||||
|
||||
### Server
|
||||
- Enhance: 管理者/モデレーターはファイルのアップロード制限をバイパスするように
|
||||
- Enhance: セキュリティの向上
|
||||
|
||||
## 2025.10.0
|
||||
|
||||
### NOTE
|
||||
- pnpm 10.16.0 が必要です
|
||||
- ロールのインポート機能の利用可否ポリシーのデフォルト値が「いいえ」に変わったため、デフォルトから変更していないサーバーでは適宜設定を変更してください。
|
||||
- ロールのアップロード可能なファイル種別ポリシーのデフォルト値に「text/*」が追加されたため、デフォルトから変更していないサーバーでは適宜設定を変更してください。
|
||||
|
||||
### General
|
||||
- Feat: 予約投稿ができるようになりました
|
||||
- デフォルトで作成可能数は1になっています。適宜ロールのポリシーで設定を行ってください。
|
||||
- Enhance: 広告ごとにセンシティブフラグを設定できるようになりました
|
||||
- Enhance: 依存関係の更新
|
||||
- Enhance: 翻訳の更新
|
||||
|
||||
### Client
|
||||
- Feat: アカウントのQRコードを表示・読み取りできるようになりました
|
||||
- Feat: 動画を圧縮してアップロードできるようになりました
|
||||
- Feat: (実験的) ブラウザ上でノートの翻訳を行えるように
|
||||
- Enhance: チャットの日本語名称がダイレクトメッセージに戻るとともに、ベータ版機能ではなくなりました
|
||||
- Enhance: 画像編集にマスクエフェクト(塗りつぶし、ぼかし、モザイク)を追加
|
||||
- Enhance: 画像編集の集中線エフェクトを強化
|
||||
- Enhance: ウォーターマークにアカウントのQRコードを追加できるように
|
||||
- Enhance: テーマをドラッグ&ドロップできるように
|
||||
- Enhance: 絵文字ピッカーのサイズをより大きくできるように
|
||||
- Enhance: カスタム絵文字が多い場合にサーバーの絵文字一覧ページがフリーズしないように
|
||||
- Enhance: 時刻計算のための基準値を一か所で管理するようにし、パフォーマンスを向上
|
||||
- Enhance: 「お問い合わせ」ページから、バグの調査等に役立つ情報(OSやブラウザのバージョン等)を取得・コピーできるように
|
||||
- Fix: iOSで、デバイスがダークモードだと初回読み込み時にエラーになる問題を修正
|
||||
- Fix: アクティビティウィジェットのグラフモードが動作しない問題を修正
|
||||
- Fix: ユニコード絵文字の追加辞書をインストールするとユニコード絵文字が絵文字ピッカーで検索できなくなる絵文字があるバグを修正
|
||||
|
||||
### Server
|
||||
- Enhance: ユーザーIPを確実に取得できるために設定ファイルにFastifyOptions.trustProxyを追加しました
|
||||
|
||||
## 2025.9.0
|
||||
|
||||
### Client
|
||||
- Enhance: AiScriptAppウィジェットで構文エラーを検知してもダイアログではなくウィジェット内にエラーを表示するように
|
||||
- Enhance: /flushページでサイトキャッシュをクリアできるようになりました
|
||||
- Enhance: クリップ/リスト/アンテナ/ロール追加系メニュー項目において、表示件数を拡張
|
||||
- Enhance: 「キャッシュを削除」ボタンでブラウザの内部キャッシュの削除も行えるように
|
||||
- Enhance: Ctrlキー(Commandキー)を押下しながらリンクをクリックすると新しいタブで開くように
|
||||
- Fix: プッシュ通知を有効にできない問題を修正
|
||||
- Fix: RSSティッカーウィジェットが正しく動作しない問題を修正
|
||||
- Fix: プロファイルを復元後アカウントの切り替えができない問題を修正
|
||||
- Fix: エラー画像が横に引き伸ばされてしまう問題に対応
|
||||
|
||||
### Server
|
||||
- Fix: webpなどの画像に対してセンシティブなメディアの検出が適用されていなかった問題を修正
|
||||
|
||||
## 2025.8.0
|
||||
|
||||
### Note
|
||||
- サポートされるNode.jsの最小バージョンが**22.15.0**になりました
|
||||
|
||||
### General
|
||||
- ノートを削除した際、関連するノートが同時に削除されないようになりました
|
||||
- APIで、「replyIdが存在しているのにreplyがnull」や「renoteIdが存在しているのにrenoteがnull」であるという、今までにはなかったパターンが表れることになります
|
||||
- 定期的に古いリモートの投稿を削除する機能が実装されました
|
||||
- コントロールパネル→パフォーマンス→Remote Notes Cleaning で有効化できます
|
||||
- データベースの肥大化を防止することが可能です
|
||||
- 既存のサーバーで当機能を有効化した場合は、処理量が多くなるため、一時的にストレージ使用量が増加する可能性があります。
|
||||
- 増加量を抑えるには、最大処理継続時間をデフォルトより短くしてください。
|
||||
- データベースサイズへの効果が見られない場合はautovacuumが有効になっているか確認してください
|
||||
- サーバーの初期設定が完了するまでは連合がオンにならないようになりました
|
||||
- 日本語における公開範囲名称の「ダイレクト」が「指名」に改称されました
|
||||
- 実際の動作に即した名称になり、馴染みのない人でも理解しやすくなりました
|
||||
- 他サービスにおける「ダイレクトメッセージ」に相当するMisskeyの機能は「チャット」ですが(過去のバージョンのMisskeyでも、当該機能は「チャット」ではなく「ダイレクトメッセージ」でした)、「ダイレクト投稿」という名称の機能が存在するとそちらがダイレクトメッセージ機能であるような誤解を生んでいました
|
||||
- 今後、「チャット」の名称を「ダイレクトメッセージ」に戻す可能性があります
|
||||
- mfm.jsをアップデートしました
|
||||
- Enhance: Unicode 15.1 および 16.0 に収録されている絵文字に対応
|
||||
- Enhance: acctに `.` が入っているユーザーのメンションに対応
|
||||
- Fix: Unicode絵文字に隣接する異体字セレクタ(`U+FE0F`)が絵文字として認識される問題を修正
|
||||
- Enhance: ユーザー検索をロールポリシーで制限できるように
|
||||
|
||||
### Client
|
||||
- Feat: AiScriptが1.1.0に更新されました
|
||||
- プラグインは1.xに対応したものが必要です
|
||||
- Playはそのまま動作しますが、新規に作られるプリセットは1.xになります
|
||||
- 以前のバージョンから無効化されていた note_view_interruptor が有効になりました
|
||||
- ハンドラは同期的である必要があります
|
||||
- Feat: セーフモード
|
||||
- プラグイン・テーマ・カスタムCSSの使用でクライアントの起動に問題が発生した際に、これらを無効にして起動できます
|
||||
- 以下の方法でセーフモードを起動できます
|
||||
- `g` キーを連打する
|
||||
- URLに`?safemode=true`を付ける
|
||||
- PWAのショートカットで Safemode を選択して起動する
|
||||
- Feat: 非ログイン時に表示されるトップページのスタイルを選択できるように
|
||||
- コントロールパネル→ブランディング→エントランスページのスタイル
|
||||
- Feat: ページのタブバーを下部に表示できるように
|
||||
- Feat: (実験的)iOSでの触覚フィードバックを有効にできるように
|
||||
- Feat: コントロールパネルを検索できるように
|
||||
- Enhance: 「自動でもっと見る」オプションが有効になり、安定性が向上しました
|
||||
- Enhance: トルコ語 (tr-TR) に対応
|
||||
- Enhance: 不必要な翻訳データを読み込まなくなり、パフォーマンスが向上しました
|
||||
- Enhance: 画像エフェクトのパラメータ名の多言語対応
|
||||
- Enhance: ノートを非表示にする相対期間を1ヶ月単位で自由に指定できるように
|
||||
- Enhance: メールアドレス確認画面のUIを改善
|
||||
- Enhance: アイコンのスクロール追従を無効化する際の適用範囲を強化
|
||||
- Enhance: レンダリングパフォーマンスの向上
|
||||
- Enhance: 依存ソフトウェアの更新
|
||||
- Fix: 投稿フォームでファイルのアップロードが中止または失敗した際のハンドリングを修正
|
||||
- Fix: 一部の設定検索結果が存在しないパスになる問題を修正
|
||||
(Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1171)
|
||||
- Fix: テーマエディタが動作しない問題を修正
|
||||
- Fix: チャンネルのハイライトページにノートが表示されない問題を修正
|
||||
- Fix: カラムの名前が正しくリスト/チャンネルの名前にならない問題を修正
|
||||
- Fix: 複数のメンションを1行に記述した場合に、サジェストが正しく表示されない問題を修正
|
||||
- Fix: メンションとしての条件を満たしていても、特定の条件(`-`が含まれる場合など)で正しくサジェストされない問題を一部修正
|
||||
- Fix: ユーザーの前後ノートを閲覧する機能が動作しない問題を修正
|
||||
- Fix: 照会ダイアログでap/showでローカルユーザーを解決した際@username@nullに飛ばされる問題を修正
|
||||
- Fix: アイコンのデコレーションを付ける際にデコレーションが表示されなくなる問題を修正
|
||||
- Fix: タッチ操作時にマウスホバー時のユーザープレビューが開くことがある問題を修正
|
||||
- Fix: 管理中アカウント一覧で正しい表示が行われない問題を修正
|
||||
- Fix: lookupページでリモートURLを指定した際に正しく動作しない問題を修正
|
||||
|
||||
### Server
|
||||
- Feat: サーバー管理コマンド
|
||||
- `pnpm cli foo` の形式で実行可能です
|
||||
- 現在以下のコマンドが利用可能です
|
||||
- `reset-captcha` - CAPTCHA設定をリセットします
|
||||
- Enhance: ノートの削除処理の効率化
|
||||
- Enhance: 全体的なパフォーマンスの向上
|
||||
- Enhance: 依存ソフトウェアの更新
|
||||
- Enhance: `clips/list` APIがページネーションに対応しました
|
||||
- Fix: `notes/mentions` で場合によっては並び順が正しく返されない問題を修正
|
||||
- Fix: SystemWebhook設定でsecretを空に出来ない問題を修正
|
||||
- Fix: 削除されたユーザーがチャットメッセージにリアクションしている場合`chat/history`などでエラーになる問題を修正
|
||||
- Fix: Pageのアイキャッチ画像をドライブから消してもPageごと消えないように
|
||||
- Fix: タイムラインAPIの withRenotes: false 時のレスポンスを修正
|
||||
|
||||
|
||||
## 2025.7.0
|
||||
|
||||
### Note
|
||||
- Node.jsの最小バージョンを20.10.0から20.18.1に引き上げました
|
||||
- なお、特に必要がない限りNode.jsは推奨バージョンであるv22を使用するようにしてください
|
||||
|
||||
### General
|
||||
- Feat: ノートの下書き機能
|
||||
- Feat: クリップ内でノートを検索できるように
|
||||
- Feat: Playを検索できるように
|
||||
- Feat: モデレーションにおいて、特定のドライブファイルを添付しているチャットメッセージを一覧できるように
|
||||
- Enhance: ウォーターマーク機能をロールで制御可能に
|
||||
|
||||
### Client
|
||||
- Note: 「自動でもっと見る」オプションは無効になっています
|
||||
- Feat: モデログを検索できるように
|
||||
- Enhance: 設定の自動バックアップをオンにした直後に自動バックアップするように
|
||||
- Enhance: ファイルアップロード前にキャプション設定を行えるように
|
||||
- Enhance: ファイルアップロード時にセンシティブ設定されているか表示するように
|
||||
- Enhance: 投稿フォームにファイルをペースト/ドロップした際のUXを改善
|
||||
- Enhance: ページネーション(一覧表示)の並び順を逆にできるように
|
||||
- Enhance: ページネーション(一覧表示)の基準日時を指定できるように
|
||||
- Enhance: レンダリングパフォーマンスの向上
|
||||
- Fix: ファイルがドライブの既定アップロード先に指定したフォルダにアップロードされない問題を修正
|
||||
- Fix: プラグインをアンインストールしてもセーブデータが残る問題を修正
|
||||
- Fix: 数時間後Misskeyのタブに戻った際に、タブがスロットリングされている間の更新アニメーションを延々見せ続けられる問題を修正
|
||||
- Fix: 非ログイン時のハイライトノートの画像がCWの有無を考慮せず表示される問題を修正
|
||||
- Fix: レンジ選択・ドロップダウンにて、操作を無効にすべきところで無効にならない問題を修正
|
||||
- Fix: Pull to refreshが有効なときに横スクロールができない問題を修正
|
||||
|
||||
### Server
|
||||
- Enhance: sinceId/untilIdが指定可能なエンドポイントにおいて、sinceDate/untilDateも指定可能に
|
||||
- Enhance: メールの送信者としてサーバー名を表示するように (サーバー名が設定されている場合)
|
||||
- Fix: ジョブキューのProgressの値を正しく計算する
|
||||
|
||||
|
||||
## 2025.6.3
|
||||
|
||||
### Client
|
||||
- Fix: キャッシュを削除しないとクライアントが使用できないことがある問題を修正
|
||||
|
||||
## 2025.6.2
|
||||
|
||||
### Client
|
||||
- Fix: キャッシュを削除しないとクライアントが使用できないことがある問題を修正
|
||||
- 翻訳の更新
|
||||
|
||||
## 2025.6.1
|
||||
|
||||
### Note
|
||||
- AiScript Misskey拡張API(Misskey Webプラグイン)の[note_view_interruptor](https://misskey-hub.net/ja/docs/for-developers/plugin/plugin-api-reference/#pluginregister_note_view_interruptorfn)は不具合の影響により現在一時的に無効化されています。
|
||||
- Misskey Web投稿フォームのプレビュー切り替えは「...」メニュー内に配置されました
|
||||
|
||||
### Client
|
||||
- Feat: 画像にウォーターマークを付与できるようになりました
|
||||
- Feat: 画像の加工ができるようになりました(実験的)
|
||||
- Enhance: ノートのリアクション一覧で、押せるリアクションを優先して表示できるようにするオプションを追加
|
||||
- Enhance: 全てのチャットメッセージを既読にできるように(設定→その他)
|
||||
- Enhance: ミュートした絵文字をデバイス間で同期できるように
|
||||
- Fix: ドライブファイルの選択が不安定な問題を修正
|
||||
- Fix: コントロールパネルのファイル欄などのデザインが崩れている問題を修正
|
||||
- Fix: ユーザーの検索結果を追加で読み込むことができない問題を修正
|
||||
- Fix: タッチ操作時にチャートのツールチップが消えなくなる場合がある問題を修正
|
||||
- Fix: ウェルカムタイムラインでリアクションが表示されない問題を修正
|
||||
- Fix: デッキのタイムラインカラムで新着ノート時のサウンドが再生されない問題を修正
|
||||
|
||||
### Server
|
||||
- Feat: 全てのチャットメッセージを既読にするAPIを追加(chat/read-all)
|
||||
- Fix: アカウント削除が正常に行われないことがあった問題を修正
|
||||
- Fix: outboxのページネーションが正しく行われない問題を修正
|
||||
|
||||
### Misskey.js
|
||||
- Fix: misskey-jsの drive/file/create でファイルアップロードができない問題を修正
|
||||
|
||||
## 2025.6.0
|
||||
|
||||
### Client
|
||||
- Enhance: 非同期的なコンポーネントの読み込み時のハンドリングを強化
|
||||
- Fix: リアクションの一部の絵文字が重複して表示されることがある問題を修正
|
||||
- Fix: 非利用者に対するユーザー作成コンテンツの公開範囲が全て非公開になっている場合にログインできない問題を修正
|
||||
|
||||
### Server
|
||||
- Fix: 非利用者に対するユーザー作成コンテンツの公開範囲が全て非公開になっている場合でもusers/showを許可するように
|
||||
|
||||
## 2025.5.1
|
||||
|
||||
### Note
|
||||
- 設定ファイルの以下の項目がコントロールパネルから設定するようになりました
|
||||
- signToActivityPubGet
|
||||
- proxyRemoteFiles
|
||||
- disallowExternalApRedirect
|
||||
- 許可しないかどうかではなく、許可するかどうかの設定(allowExternalApRedirect)になりました
|
||||
|
||||
### General
|
||||
- Feat: 非ログインでサーバーを閲覧された際に、サーバー内のコンテンツを非公開にすることができるようになりました
|
||||
- モデレーションが行き届きにくい不適切なリモートコンテンツなどが、自サーバー経由で図らずもインターネットに公開されてしまうことによるトラブル防止などに役立ちます
|
||||
- 「全て公開(今までの挙動)」「ローカルのコンテンツだけ公開(=サーバー内で受信されたリモートのコンテンツは公開しない)」「何も公開しない」から選択できます
|
||||
- デフォルト値は「ローカルのコンテンツだけ公開」になっています
|
||||
- Feat: ロールでアップロード可能なファイル種別を設定可能になりました
|
||||
- デフォルトは**テキスト、JSON、画像、動画、音声ファイル**になっています。zipなど、その他の種別のファイルは含まれていないため、必要に応じて設定を変更してください。
|
||||
- 場合によってはファイル種別を正しく検出できないことがあります(特にテキストフォーマット)。その場合、ファイル種別は application/octet-stream と見做されます。
|
||||
- したがって、それらの種別不明ファイルを許可したい場合は application/octet-stream を指定に追加してください。
|
||||
- Feat: プレビュー先がリダイレクトを伴う場合、リダイレクト先のコンテンツを取得しに行くか否かを設定できるように(#16043)
|
||||
- Enhance: UIのアイコンデータの読み込みを軽量化
|
||||
|
||||
### Client
|
||||
- Feat: ドライブのUIが強化されました
|
||||
- 複数のファイルをまとめて移動できるようになりました
|
||||
- Feat: ファイルのアップロードUIが一新されました
|
||||
- アップロード前にファイル情報を確認できるようになりました
|
||||
- 圧縮の品質を選択できるようになりました
|
||||
- アップロードに失敗したときに再試行できるようになりました
|
||||
- アップロード前に画像のクロッピングを行えるようになりました
|
||||
- ファイルサイズのチェックは圧縮後の実際にアップロードされるサイズで行われるようになりました
|
||||
- ファイルのアップロードを中断できるようになりました
|
||||
- Feat: サーバー初期設定ウィザードが実装されました
|
||||
- 簡単なウィザードに従うだけで、サーバーに最適な設定が適用されます
|
||||
- Feat: Websocket接続を行わずにMisskeyを利用するNo Websocketモードが実装されました(beta)
|
||||
- サーバーのパフォーマンス向上に寄与することが期待されます
|
||||
- 何らの理由によりWebsocket接続が行えない環境でも快適に利用可能です
|
||||
- 従来のWebsocket接続を行うモードはリアルタイムモードとして再定義されました
|
||||
- チャットなど、一部の機能は引き続き設定に関わらずWebsocket接続が行われます
|
||||
- Feat: 絵文字をミュート可能にする機能
|
||||
- 絵文字(ユニコードの絵文字・カスタム絵文字)毎にミュートし、不可視化することができるようになりました
|
||||
- Feat: モバイルデバイスで折りたたまれたUIの展開表示に全画面ページを使用できるように(実験的)
|
||||
- Enhance: 設定の同期をオンにするときに競合したときに値をマージできるように
|
||||
- Enhance: メモリ使用量を軽減しました
|
||||
- Enhance: 画像の高品質なプレースホルダを無効化してパフォーマンスを向上させるオプションを追加
|
||||
- Enhance: 招待されているが参加していないルームを開いたときに、招待を承認するかどうか尋ねるように
|
||||
- Enhance: リプライ元にアンケートがあることが表示されるように
|
||||
- Enhance: ノートのサーバー情報のデザインを改善・パフォーマンス向上
|
||||
(Based on https://github.com/taiyme/misskey/pull/198, https://github.com/taiyme/misskey/pull/211, https://github.com/taiyme/misskey/pull/283)
|
||||
- Enhance: ユーザー設定でURLプレビューを無効化できるように
|
||||
- Enhance: ヒントとコツを追加
|
||||
- Enhance: ヒントとコツを再表示できるように
|
||||
- Enhance: AiScriptからtoastを表示する関数 `Mk:toast` を追加
|
||||
- Enhance: シンタックスハイライトのエンジンをJavaScriptベースのものに変更
|
||||
- フロントエンドの読み込みサイズを軽量化しました
|
||||
- ほとんどの言語のハイライトは問題なく行えますが、互換性の問題により一部の言語が正常にハイライトできなくなる可能性があります。詳しくは https://shiki.style/references/engine-js-compat をご覧ください。
|
||||
- Fix: チャットに動画ファイルを送付すると、動画の表示が崩れてしまい視聴出来ない問題を修正
|
||||
- Fix: アカウント依存かつ初期状態である設定値をサーバー同期しようとした際に正しくコンフリクト検出されない問題を修正
|
||||
- Fix: "時計"ウィジェット(Clock)において、Transparent設定が有効でも、その背景が透過されない問題を修正
|
||||
- Fix: 一定時間操作がなかったら動画プレイヤーのコントロールを隠すように
|
||||
- Fix: Twitchのクリップがプレイヤーで再生できない問題を修正
|
||||
|
||||
### Server
|
||||
- Enhance: リストやフォローをエクスポートする際にリプライを含むかどうかの情報を含むように
|
||||
- Enhance: チャットルームの最大メンバー数を30人から50人に調整
|
||||
- Enhance: ノートのレスポンスにアンケートが添付されているかどうかを示すフラグ`hasPoll`を追加
|
||||
- Enhance: チャットルームのレスポンスに招待されているかどうかを示すフラグ`invitationExists`を追加
|
||||
- Enhance: レートリミットの計算方法を調整 (#13997)
|
||||
- Enhance: 外部サイトのOGPのキャッシュ期間を調整
|
||||
- Fix: チャットルームが削除された場合・チャットルームから抜けた場合に、未読状態が残り続けることがあるのを修正
|
||||
- Fix: ユーザ除外アンテナをインポートできない問題を修正
|
||||
- Fix: アンテナのセンシティブなチャンネルのノートを含むかどうかの情報がエクスポートされない問題を修正
|
||||
- Fix: ミュート対象ユーザーが引用されているノートがRNされたときにミュートを貫通してしまう問題を修正 #16009
|
||||
- Fix: 連合モードが「なし」の場合に、生成されるHTML内のactivity jsonへのリンクタグを省略するように
|
||||
- Fix: コントロールパネルから招待コードを作成すると作成者の情報が記録されない問題を修正
|
||||
- Fix: コントロールパネルのジョブキューページからPausedなジョブ一覧を閲覧できない問題を修正
|
||||
|
||||
## 2025.5.0
|
||||
|
||||
### Note
|
||||
- DockerのNode.jsが22.15.0に更新されました
|
||||
|
||||
### Client
|
||||
- Feat: マウスで中ボタンドラッグによりタイムラインを引っ張って更新できるように
|
||||
- アクセシビリティ設定からオフにすることもできます
|
||||
- Enhance: タイムラインのパフォーマンスを向上
|
||||
- Enhance: バックアップされた設定のプロファイルを削除できるように
|
||||
- Fix: 一部のブラウザでアコーディオンメニューのアニメーションが動作しない問題を修正
|
||||
- Fix: ダイアログのお知らせが画面からはみ出ることがある問題を修正
|
||||
- Fix: ユーザーポップアップでエラーが生じてもインジケーターが表示され続けてしまう問題を修正
|
||||
|
||||
### Server
|
||||
- Enhance: 凍結されたユーザのノートが各種タイムラインで表示されないように `#15775`
|
||||
- Enhance: 連合先のソフトウェア及びバージョン名により配信停止を行えるように `#15727`
|
||||
- Enhance: 2025.4.1 で追加されたインデックスの再生成をノートの追加しながら行えるようになりました。 `#15915`
|
||||
- `MISSKEY_MIGRATION_CREATE_INDEX_CONCURRENTLY` 環境変数を `1` にセットしていると、巨大なテーブルの既存のカラムに関するインデックス再生成が`CREATE INDEX CONCURRENTLY`を使用するようになりました。
|
||||
- 複数のサーバープロセスをクラスタリングしているサーバーにおいて、一部のプロセスが起動している状態でこのオプションを有効にしてマイグレーションすることにより、ダウンタイムを削減することができます。
|
||||
- ただし、このオプションを有効にする場合、インデックスの作成にかかる時間が倍~3倍以上になることがあります。
|
||||
- また、大きなインスタンスである場合にはインデックスの作成に失敗し、複数回再試行する必要がある可能性があります。
|
||||
- Fix: チャンネルのフォロー一覧の結果が一部正しくないのを修正 (#12175)
|
||||
- Fix: ファイルをアップロードした際にファイル名が常に untitled になる問題を修正
|
||||
- Fix: ファイルのアップロードに失敗することがある問題を修正
|
||||
- 投稿フォーム上で画像のクロップを行うと、`Invalid Param.`エラーでノートが投稿出来なくなる問題も解決されます。
|
||||
- この事象によって既にノートが投稿出来ない状態になっている場合は、投稿フォーム右上のメニューから、下書きデータの「リセット」を行ってください。
|
||||
|
||||
## 2025.4.1
|
||||
|
||||
### General
|
||||
- Feat: bull-boardに代わるジョブキューの管理ツールが実装されました
|
||||
- Feat: アップロード可能な最大ファイルサイズをロールごとに設定可能に
|
||||
- デフォルトで10MBになっています
|
||||
- Enhance: チャットの新規メッセージをプッシュ通知するように
|
||||
- Enhance: サーバーブロックの対象になっているサーバーについて、当該サーバーのユーザーや既知投稿を見えないように
|
||||
- Enhance: 依存関係の更新
|
||||
- Enhance: 翻訳の更新
|
||||
- Fix: セキュリティに関する修正
|
||||
|
||||
### Client
|
||||
- Feat: チャットウィジェットを追加
|
||||
- Feat: デッキにチャットカラムを追加
|
||||
- Feat: タイトルバーを表示できるように
|
||||
- Enhance: Unicode絵文字をslugから入力する際に`:ok:`のように最後の`:`を入力したあとにUnicode絵文字に変換できるように
|
||||
- Enhance: コントロールパネルでジョブキューをクリアできるように
|
||||
- Enhance: テーマでページヘッダーの色を変更できるように
|
||||
- Enhance: スワイプでのタブ切り替えを強化
|
||||
- Enhance: デザインのブラッシュアップ
|
||||
- Fix: ログアウトした際に処理が終了しない問題を修正
|
||||
- Fix: 自動バックアップが設定されている環境でログアウト直前に設定をバックアップするように
|
||||
- Fix: フォルダを開いた状態でメニューからアップロードしてもルートフォルダにアップロードされる問題を修正 #15836
|
||||
- Fix: タイムラインのスクロール位置を記憶するように修正
|
||||
- Fix: ノートの直後のノートを表示する機能で表示が逆順になっていた問題を修正 #15841
|
||||
- Fix: アカウントの移行時にアンテナのフィルターのユーザが更新されない問題を修正 #15843
|
||||
- Fix: タイムラインでノートが重複して表示されることがあるのを修正
|
||||
|
||||
### Server
|
||||
- Enhance: ジョブキューの成功/失敗したジョブも一定数・一定期間保存するようにし、後から問題を調査することを容易に
|
||||
- Enhance: フォローしているユーザーならフォロワー限定投稿のノートでもアンテナで検知できるように
|
||||
(Cherry-picked from https://github.com/yojo-art/cherrypick/pull/568 and https://github.com/team-shahu/misskey/pull/38)
|
||||
- Enhance: ユーザーごとにノートの表示が高速化するように
|
||||
- Fix: システムアカウントの名前がサーバー名と同期されない問題を修正
|
||||
- Fix: 大文字を含むユーザの URL で照会された場合に 404 エラーを返す問題 #15813
|
||||
- Fix: リードレプリカ設定時にレコードの追加・更新・削除を伴うクエリを発行した際はmasterノードで実行されるように調整( #10897 )
|
||||
- Fix: ファイルアップロード時の挙動を一部調整(#15895)
|
||||
|
||||
## 2025.4.0
|
||||
|
||||
### General
|
||||
- Feat: チャット(ダイレクトメッセージ)がリニューアルして復活しました
|
||||
- 既存のDM機能よりも便利で効率的な実装になっています
|
||||
- チャットを受け付ける相手を制限可能です
|
||||
- 誰でも / フォローユーザーのみ / フォロワーのみ / 相互のみ / 受け付けない から選択できます
|
||||
- 自分からメッセージを送った相手とは上記の設定に関わらずチャット可能です
|
||||
- チャット機能を開放するかどうかをロールで制御可能です
|
||||
- ルームを作成して、複数人でのチャットも可能です
|
||||
- 過去自分が送ったメッセージ・自分に送られたメッセージの検索が可能です
|
||||
- 参加中のルームをミュートして通知が来ないように設定可能です
|
||||
- メッセージにはリアクションも可能です
|
||||
- 現在、リモートユーザーがチャットを受け付ける設定になっているかどうかを取得する術がないため、ローカルユーザー間でのみ利用可能です
|
||||
- Feat: アカウントの移行時に古いアカウントからあたらしいアカウントにロールをコピーできるようになりました。
|
||||
- 管理者がロールの設定でマイグレーション時にコピーするかを指定できるようになります。
|
||||
- Enhance: セキュリティを強化するため、ジョブキューのダッシュボード(bull-board)統合が削除されました。
|
||||
- Misskeyネイティブでダッシュボードを実装予定です
|
||||
- Enhance: フロントエンドのエラートラッキングができるように
|
||||
- `.config/default.yml`中の項目`sentryForFrontend`を適宜設定してください。
|
||||
- 外部サービスであるSentryへエラー情報が送信されます。ご利用の地域の法令に従い、適切なプライバシーポリシーを策定の上で運用してください。
|
||||
- Enhance: ミュートしているユーザーをユーザー検索の結果から除外するように
|
||||
- Enhance: アンテナでセンシティブなチャンネルのノートを除外できるように `#14177`
|
||||
- Fix: 通知のページネーションで2つ以上読み込めなくなることがある問題を修正
|
||||
|
||||
### Client
|
||||
- Feat: 設定の管理が強化されました
|
||||
- 内部処理が一新され、安定性とパフォーマンスが向上しました
|
||||
- 全てのクライアント設定がエクスポート(バックアップ)/インポート対象に含まれるようになりました
|
||||
- プラグイン、テーマ、クライアントに追加されたすべてのアカウント情報も含まれるようになりました
|
||||
- 自動で設定データをサーバーにバックアップできるように
|
||||
- 設定→設定のプロファイル→自動バックアップ で有効にできます
|
||||
- ログインしたとき、ブラウザから設定データが消えてしまったときに自動で復元されます(復元をスキップすることも可能)
|
||||
- 任意の設定項目をデバイス間で同期できるように
|
||||
- 設定項目の「...」メニュー→「デバイス間で同期」
|
||||
- 同期をオンにした際にサーバーに保存された値とローカルの値が競合する場合はどちらを優先するか選択できます
|
||||
- 任意の設定項目を初期値にリセットできるように
|
||||
- 設定項目の「...」メニュー→「初期値にリセット」
|
||||
- アカウントごとに設定値が分離される設定とそうでないクライアント設定が混在していた(かつ分離するかどうかを設定不可だった)のを、基本的に一律でクライアント全体に適用されるようにし、個別でアカウントごとに異なる設定を行えるように
|
||||
- 設定項目の「...」メニュー→「アカウントで上書き」をオンにすることで、設定値をそのアカウントでだけ適用するようにできます
|
||||
- ログアウトすると設定データもブラウザから消去されるようになりプライバシーが向上しました
|
||||
- バックアップを有効にしている場合、ログインした後にバックアップから設定データを復元可能です
|
||||
- エクスポートした設定データを他のサーバーでインポートして適用すること(設定の持ち運び)が可能になりました
|
||||
- 設定情報の移行は自動で行われますが、何らかの理由で失敗した場合、設定→その他→旧設定情報を移行 で再試行可能です
|
||||
- 過去に作成されたバックアップデータとは現在互換性がありませんのでご注意ください
|
||||
- Feat: 画面を重ねて表示するオプションを実装(実験的)
|
||||
- 設定 → その他 → 実験的機能 → Enable stacking router view
|
||||
- Enhance: プラグインの管理が強化されました
|
||||
- インストール/アンインストール/設定の変更時にリロード不要になりました
|
||||
- Enhance: ログアウト時、ブラウザに保存されたWebクライアントのデータを全て消去するように
|
||||
- Enhance: デッキUIでカラム間のマージンを設定できるように
|
||||
- Enhance: デッキUIでデッキメニューの位置を設定できるように
|
||||
- Enhance: デッキUIでナビゲーションバーの位置を設定できるように
|
||||
- Enhance: アイコンのスクロール追従を無効化してパフォーマンス向上できるように
|
||||
- Enhance: CWの注釈テキストが入力されていない場合, Postボタンを非アクティブに
|
||||
- Enhance: CWを無効にした場合, 注釈テキストが最大入力文字数を超えていても投稿できるように
|
||||
- Enhance: テーマ設定画面のデザインを改善
|
||||
- Enhance: 投稿フォームの設定メニューを改良
|
||||
- 投稿フォームをリセットできるように
|
||||
- 文字数カウントを復活
|
||||
- Enhance: 2段階認証時のリカバリーコードのファイル名にサーバーURLを含めるように
|
||||
- Enhance: 全体的なブラッシュアップ
|
||||
- Enhance 全体的なパフォーマンス向上
|
||||
- Enhance: ファイルのアップロードでデフォルトで圧縮するかどうかのオプションが廃止され、アップロード時に圧縮するかどうかを選択するようになりました
|
||||
- 画像データの貼り付け、ドロップ時は圧縮されるようになりました
|
||||
- Fix: 読み込み直後にスクロールしようとすると途中で止まる場合があるのを修正
|
||||
- Fix: テーマ切り替え時に一部の色が変わらない問題を修正
|
||||
- Fix: iPadOSでdeck uiをマウスカーソルによってスクロールできない問題を修正
|
||||
- NOTE: 構造上クラシックUIを新しいデザインシステムに移行することが困難なため、クラシックUIが削除されました
|
||||
- デッキUIでカラムを中央寄せにし、メインカラムの左右にウィジェットカラムを配置し、ナビゲーションバーを上部に表示することである程度クラシックUIを再現できます
|
||||
|
||||
### Server
|
||||
- Enhance 全体的なパフォーマンス向上
|
||||
- Fix: プロフィール追加情報で無効なURLに入力された場合に照会エラーを出るのを修正
|
||||
- Fix: ActivityPubリクエストURLチェック実装は仕様に従っていないのを修正
|
||||
- Fix: 連合無しモードでも外部から照会可能だった問題を修正
|
||||
- Fix: テスト用WebHookのペイロードの`emojis`パラメータが実際のものと異なる問題を修正
|
||||
- Fix: 非ログインでタイムラインのストリームに接続した際、表示にログイン必須のノートが流れる場合がある問題を修正
|
||||
|
||||
## 2025.3.1
|
||||
|
||||
### General
|
||||
- pnpmをv10に更新
|
||||
- Corepackを削除
|
||||
|
||||
### Client
|
||||
- Feat: 設定の検索を追加(実験的)
|
||||
- Enhance: 設定項目の再配置
|
||||
|
||||
### Server
|
||||
- Fix: DBマイグレーション際にシステムアカウントのユーザーID判定が正しくない問題を修正
|
||||
- Fix: user.featured列が状況によってJSON文字列になっていたのを修正
|
||||
|
||||
|
||||
## 2025.3.0
|
||||
|
||||
### General
|
||||
- Enhance: プロキシアカウントをシステムアカウントとして作成するように
|
||||
- Enhance: OAuthで外部アプリからロゴが提供されている場合、それを表示できるように
|
||||
書式は https://indieauth.spec.indieweb.org/20220212/#example-2 に準じます。
|
||||
- Fix: システムアカウントが削除できる問題を修正
|
||||
|
||||
### Client
|
||||
- Enhance: モデレーターがセンシティブ設定を変更する際に確認ダイアログを出すように
|
||||
- Enhance: 「UIのアニメーションを減らす」で画面上のエフェクトも減らせるように
|
||||
- Enhance: 投稿フォームにおける、メディアの添付可能個数のカウントを反転しました
|
||||
- これまでの表示は`添付可能残り個数/上限数`でしたが、`添付個数/上限数`としました
|
||||
- Fix: フォローされたときのメッセージがちらつくことがある問題を修正
|
||||
- Fix: 投稿ダイアログがサイズ限界を超えた際にスクロールできない問題を修正
|
||||
|
||||
### Server
|
||||
- Fix: 特定のケースでActivityPubの処理がデッドロックになることがあるのを修正
|
||||
- Fix: S3互換オブジェクトストレージでファイルのアップロードに失敗することがある問題を修正
|
||||
(Cherry-picked from https://github.com/MisskeyIO/misskey/pull/895)
|
||||
|
||||
|
||||
## 2025.2.1
|
||||
|
||||
### General
|
||||
- Feat: アクセストークン発行時に通知するように
|
||||
- Feat: 実験的なGoogleAnalyticsサポートを追加
|
||||
- 依存関係の更新
|
||||
|
||||
### Client
|
||||
- Feat: 投稿フォームで画像をプレビュー可能に
|
||||
- Enhance: 投稿フォームの「迷惑になる可能性があります」のダイアログを表示する条件においてCWを考慮するように
|
||||
- Enhance: アンテナ、リスト等の名前をカラム名のデフォルト値にするように `#13992`
|
||||
- Enhance: クライアントエラー画面の多言語対応
|
||||
- Enhance: 開発者モードでメニューからファイルIDをコピー出来るように `#15441'
|
||||
- Enhance: ノートに埋め込まれたメディアのコンテキストメニューから管理者用のファイル管理画面を開けるように ( #15440 )
|
||||
- Enhance: リアクションする際に確認ダイアログを表示できるように
|
||||
- Enhance: コントロールパネルのユーザ検索で入力された情報をページ遷移で損なわないように `#15437`
|
||||
- Enhance: CWの注釈で入力済みの文字数を表示
|
||||
- Enhance: ノート検索ページのデザイン調整
|
||||
(Cherry-picked from https://github.com/taiyme/misskey/pull/273)
|
||||
- Fix: ノートページで、クリップ一覧が表示されないことがある問題を修正
|
||||
- Fix: コンディショナルロールを手動で割り当てできる導線を削除 `#13529`
|
||||
- Fix: 埋め込みプレイヤーから外部ページに移動できない問題を修正
|
||||
- Fix: Play の再読込時に UI が以前の状態を引き継いでしまう問題を修正 `#14378`
|
||||
- Fix: カスタム絵文字管理画面(beta)にてisSensitive/localOnlyの絞り込みが上手くいかない問題の修正 ( #15445 )
|
||||
- Fix: ユーザのサジェスト中に@を入力してもサジェスト結果が消えないように `#14385`
|
||||
- Fix: CWの注釈が100文字を超えている場合、ノート投稿ボタンを非アクティブに
|
||||
- Fix: テーマ選択で現在のテーマが初期表示されていない問題を修正
|
||||
- 翻訳の更新
|
||||
|
||||
### Server
|
||||
- Enhance: 成り済まし対策として、ActivityPub照会された時にリモートのリダイレクトを拒否できるように (config.disallowExternalApRedirect)
|
||||
- Fix: `following/invalidate`でフォロワーを解除しようとしているユーザーの情報を返すように
|
||||
- Fix: オブジェクトストレージの設定でPrefixを設定していなかった場合nullまたは空文字になる問題を修正
|
||||
- Fix: HTTPプロキシとその除外設定を行った状態でカスタム絵文字の一括インポートをしたとき、除外設定が効かないのを修正( #8766 )
|
||||
- Fix: pgroongaでの検索時にはじめのキーワードのみが検索に使用される問題を修正
|
||||
(Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/886)
|
||||
- Fix: メールアドレスの形式が正しくなければ以降の処理を行わないように
|
||||
- Fix: `update-meta`でobjectStoragePrefixにS3_SAFEかつURL-safeでない文字列を使えないように
|
||||
- Fix: クリップの説明欄を更新する際に空にできない問題を修正
|
||||
- Fix: フォロワーではないユーザーにリノートもしくは返信された場合にノートのDeleteアクティビティが送られていない問題を修正
|
||||
|
||||
## 2025.2.0
|
||||
|
||||
### General
|
||||
- Fix: Docker のビルドに失敗する問題を修正
|
||||
(Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/883)
|
||||
|
||||
### Client
|
||||
- Fix: パスキーでパスワードレスログインが出来ない問題を修正
|
||||
- Fix: 一部環境でセンシティブなファイルを含むノートの非表示が効かない問題
|
||||
- Fix: データセーバー有効時にもユーザーページの「ファイル」タブで画像が読み込まれてしまう問題を修正
|
||||
- Fix: MFMの `sparkle` エフェクトが正しく表示されない問題を修正
|
||||
- Fix: ページのURLにスラッシュが含まれている場合にページが正しく表示されない問題を修正
|
||||
- Fix: デッキのプロファイルが新規作成できない問題を修正
|
||||
- Fix: セキュリティに関する修正
|
||||
- ローカライゼーションの更新
|
||||
- Playが実装されたため、ページ機能の「ソースを見る」は削除されました
|
||||
|
||||
### Server
|
||||
- Enhance: ページのURLに使用可能な文字を限定するように
|
||||
- Fix: 個別お知らせページのmetaタグ出力の条件が間違っていたのを修正
|
||||
|
||||
## 2025.1.0
|
||||
|
||||
### Note
|
||||
@@ -720,11 +5,9 @@ v2025.12.0で行われた「configの`trustProxy`のデフォルト値を`false`
|
||||
- 新しい設定項目"fulltextSearch.provider"が追加されました. sqlLike, sqlPgroonga, meilisearchのいずれかを設定出来ます.
|
||||
- すでにMeilisearchをお使いの場合、 **"fulltextSearch.provider"を"meilisearch"に設定する必要** があります.
|
||||
- 詳細は #14730 および `.config/example.yml` または `.config/docker_example.yml`の'Fulltext search configuration'をご参照願います.
|
||||
- 【開発者向け】従来の開発モードでHMRが機能しない問題が修正されたため、バックエンド・フロントエンド分離型の開発モードが削除されました。開発環境においてconfigの変更が必要となる可能性があります。
|
||||
|
||||
### General
|
||||
- Feat: カスタム絵文字管理画面をリニューアル #10996
|
||||
* β版として公開のため、旧画面も引き続き利用可能です
|
||||
-
|
||||
|
||||
### Client
|
||||
- Enhance: PC画面でチャンネルが複数列で表示されるように
|
||||
@@ -737,8 +20,6 @@ v2025.12.0で行われた「configの`trustProxy`のデフォルト値を`false`
|
||||
- Enhance: ノートの添付ファイルを一覧で遡れる「ファイル」タブを追加
|
||||
(Based on https://github.com/Otaku-Social/maniakey/pull/14)
|
||||
- Enhance: AiScriptの拡張API関数において引数の型チェックをより厳格に
|
||||
- Enhance: クエリパラメータでuiを一時的に変更できるように #15240
|
||||
- Enhance: リモート絵文字のインポート時に詳細を確認できるように #15336
|
||||
- Fix: 画面サイズが変わった際にナビゲーションバーが自動で折りたたまれない問題を修正
|
||||
- Fix: サーバー情報メニューに区切り線が不足していたのを修正
|
||||
- Fix: ノートがログインしているユーザーしか見れない場合にログインダイアログを閉じるとその後の動線がなくなる問題を修正
|
||||
@@ -753,7 +34,6 @@ v2025.12.0で行われた「configの`trustProxy`のデフォルト値を`false`
|
||||
(Cherry-picked from https://github.com/TeamNijimiss/misskey/commit/800359623e41a662551d774de15b0437b6849bb4)
|
||||
- Fix: ノート作成画面でファイルの添付可能個数を超えてもノートボタンが押せていた問題を修正
|
||||
- Fix: 「アカウントを管理」画面で、ユーザー情報の取得に失敗したアカウント(削除されたアカウントなど)が表示されない問題を修正
|
||||
- Fix: MacOSでChrome系ブラウザを使用している場合に、Misskeyを閉じた際に他のタブのオーディオ機能と干渉する問題を修正
|
||||
- Fix: 言語データのキャッシュ状況によっては、埋め込みウィジェットが正しく起動しない問題を修正
|
||||
- Fix: 「削除して編集」でノートの引用を解除出来なかった問題を修正( #14476 )
|
||||
- Fix: RSSウィジェットが正しく表示されない問題を修正
|
||||
@@ -761,11 +41,6 @@ v2025.12.0で行われた「configの`trustProxy`のデフォルト値を`false`
|
||||
- Fix: ワードミュートの保存失敗時にAPIエラーが握りつぶされる事があるのを修正
|
||||
- Fix: アンケートでリモートの絵文字が正しく描画できない問題の修正
|
||||
(Cherry-picked from https://github.com/yojo-art/cherrypick/pull/153)
|
||||
- Fix: 非ログイン時のサーバー概要画面のメニューボタンが押せないことがあるのを修正
|
||||
(Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/656)
|
||||
- Fix: URLにはじめから`#pswp`が含まれている場合に画像ビューワーがブラウザの戻るボタンで閉じられない問題を修正
|
||||
- Fix: ロール作成画面で設定できるアイコンデコレーションの最大取付個数を16に制限
|
||||
- Fix: Firefox Nightlyなどでアイコンが読み込めない問題を修正
|
||||
|
||||
### Server
|
||||
- Enhance: pg_bigmが利用できるよう、ノートの検索をILIKE演算子でなくLIKE演算子でLOWER()をかけたテキストに対して行うように
|
||||
@@ -776,7 +51,6 @@ v2025.12.0で行われた「configの`trustProxy`のデフォルト値を`false`
|
||||
- Fix: ユーザーのプロフィール画面をアドレス入力などで直接表示した際に概要タブの描画に失敗する問題の修正( #15032 )
|
||||
- Fix: 起動前の疎通チェックが機能しなくなっていた問題を修正
|
||||
(Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/737)
|
||||
- Fix: ノートの閲覧にログイン必須にしてもFeedでノートが表示されてしまう問題を修正
|
||||
- Fix: 絵文字の連合でライセンス欄を相互にやり取りするように ( #10859, #14109 )
|
||||
- Fix: ロックダウンされた期間指定のノートがStreaming経由でLTLに出現するのを修正 ( #15200 )
|
||||
- Fix: disableClustering設定時の初期化ロジックを調整( #15223 )
|
||||
|
||||
@@ -197,10 +197,25 @@ pnpm dev
|
||||
command.
|
||||
|
||||
- Server-side source files and automatically builds them if they are modified. Automatically start the server process(es).
|
||||
- Service Worker is watched by esbuild.
|
||||
- Vite HMR (just the `vite` command) is available. The behavior may be different from production.
|
||||
- Vite runs behind the backend (the backend will proxy Vite at /vite and /embed_vite except for websocket used for HMR).
|
||||
- Service Worker is watched by esbuild.
|
||||
- The front end can be viewed by accessing `http://localhost:5173`.
|
||||
- The backend listens on the port configured with `port` in .config/default.yml.
|
||||
If you have not changed it from the default, it will be "http://localhost:3000".
|
||||
If "port" in .config/default.yml is set to something other than 3000, you need to change the proxy settings in packages/frontend/vite.config.local-dev.ts.
|
||||
|
||||
### `MK_DEV_PREFER=backend pnpm dev`
|
||||
pnpm dev has another mode with `MK_DEV_PREFER=backend`.
|
||||
|
||||
```
|
||||
MK_DEV_PREFER=backend pnpm dev
|
||||
```
|
||||
|
||||
- This mode is closer to the production environment than the default mode.
|
||||
- Vite runs behind the backend (the backend will proxy Vite at /vite).
|
||||
- You can see Misskey by accessing `http://localhost:3000` (Replace `3000` with the port configured with `port` in .config/default.yml).
|
||||
- To change the port of Vite, specify with `VITE_PORT` environment variable.
|
||||
- HMR may not work in some environments such as Windows.
|
||||
|
||||
## Testing
|
||||
You can run non-backend tests by executing following commands:
|
||||
@@ -258,12 +273,6 @@ Misskey uses Vue(v3) as its front-end framework.
|
||||
- **When creating a new component, please use the Composition API (with [setup sugar](https://v3.vuejs.org/api/sfc-script-setup.html) and [ref sugar](https://github.com/vuejs/rfcs/discussions/369)) instead of the Options API.**
|
||||
- Some of the existing components are implemented in the Options API, but it is an old implementation. Refactors that migrate those components to the Composition API are also welcome.
|
||||
|
||||
## Tabler Icons
|
||||
アイコンは、Production Build時に使用されていないものが削除されるようになっています。
|
||||
|
||||
**アイコンを動的に設定する際には、 `ti-${someVal}` のような、アイコン名のみを動的に変化させる実装を行わないでください。**
|
||||
必ず `ti-xxx` のような完全なクラス名を含めるようにしてください。
|
||||
|
||||
## nirax
|
||||
niraxは、Misskeyで使用しているオリジナルのフロントエンドルーティングシステムです。
|
||||
**vue-routerから影響を多大に受けているので、まずはvue-routerについて学ぶことをお勧めします。**
|
||||
@@ -279,6 +288,7 @@ niraxは、Misskeyで使用しているオリジナルのフロントエンド
|
||||
query?: Record<string, string>;
|
||||
loginRequired?: boolean;
|
||||
hash?: string;
|
||||
globalCacheKey?: string;
|
||||
children?: RouteDef[];
|
||||
}
|
||||
```
|
||||
@@ -481,11 +491,6 @@ describe('test', () => {
|
||||
コード上でMisskeyのドメイン固有の概念には`Mi`をprefixすることで、他のドメインの同様の概念と区別できるほか、名前の衝突を防ぐ。
|
||||
ただし、文脈上Misskeyのものを指すことが明らかであり、名前の衝突の恐れがない場合は、一時的なローカル変数に限って`Mi`を省略してもよい。
|
||||
|
||||
### Misskey.jsの型生成
|
||||
```bash
|
||||
pnpm build-misskey-js-with-types
|
||||
```
|
||||
|
||||
### How to resolve conflictions occurred at pnpm-lock.yaml?
|
||||
|
||||
Just execute `pnpm` to fix it.
|
||||
@@ -581,6 +586,27 @@ pnpm dlx typeorm migration:generate -d ormconfig.js -o <migration name>
|
||||
- 生成後、ファイルをmigration下に移してください
|
||||
- 作成されたスクリプトは不必要な変更を含むため除去してください
|
||||
|
||||
### JSON SchemaのobjectでanyOfを使うとき
|
||||
JSON Schemaで、objectに対してanyOfを使う場合、anyOfの中でpropertiesを定義しないこと。
|
||||
バリデーションが効かないため。(SchemaTypeもそのように作られており、objectのanyOf内のpropertiesは捨てられます)
|
||||
https://github.com/misskey-dev/misskey/pull/10082
|
||||
|
||||
テキストhogeおよびfugaについて、片方を必須としつつ両方の指定もありうる場合:
|
||||
|
||||
```ts
|
||||
export const paramDef = {
|
||||
type: 'object',
|
||||
properties: {
|
||||
hoge: { type: 'string', minLength: 1 },
|
||||
fuga: { type: 'string', minLength: 1 },
|
||||
},
|
||||
anyOf: [
|
||||
{ required: ['hoge'] },
|
||||
{ required: ['fuga'] },
|
||||
],
|
||||
} as const;
|
||||
```
|
||||
|
||||
### コネクションには`markRaw`せよ
|
||||
**Vueのコンポーネントのdataオプションとして**misskey.jsのコネクションを設定するとき、必ず`markRaw`でラップしてください。インスタンスが不必要にリアクティブ化されることで、misskey.js内の処理で不具合が発生するとともに、パフォーマンス上の問題にも繋がる。なお、Composition APIを使う場合はこの限りではない(リアクティブ化はマニュアルなため)。
|
||||
|
||||
@@ -618,23 +644,3 @@ color: hsl(from var(--MI_THEME-accent) h s calc(l - 10));
|
||||
color: color(from var(--MI_THEME-accent) srgb r g b / 0.5);
|
||||
```
|
||||
|
||||
## 考え方
|
||||
### DRYに囚われるな
|
||||
必要なのは一般化ではなく抽象化と考えます。
|
||||
盲信せず、誤った・不必要な共通化は避け、それが自然だと感じる場合は重複させる勇気を持ちましょう。
|
||||
|
||||
### Misskeyを複雑にしない実装
|
||||
それがいくら複雑であっても、Misskey固有のコンテキストと関心が分離されている(もしくは事実上分離されていると見做すことができる)実装であれば、それはMisskeyのコードベースに対する複雑性に影響を与えないと考えます。
|
||||
|
||||
例えるなら、VueやAiScriptといったMisskeyが使用しているライブラリの内部実装がいくら複雑だったとしても、「それを使用しているからMisskeyの実装は複雑である」ということにはならないのと同じです。
|
||||
|
||||
Misskeyのドメイン知識から関心が分離されているということは、Misskeyの実装について考える時にそれらの内部実装を考慮する必要が無く、認知負荷を増やさないからです。
|
||||
|
||||
また重要な点は、その実装が、Misskeyリポジトリの外部にあるか・内部にあるかということや、Misskeyがメンテナンスするものか・第三者がメンテナンスするものかといったことは複雑性を考える上ではほとんど無視できるという点です。
|
||||
|
||||
もちろんその実装がMisskeyリポジトリにあり、Misskeyがメンテナンスしなければならないものは、保守のコストはかかります。
|
||||
しかし、Misskeyの本質的な設計・実装という観点で見たときは、その実装は実質的に外部ライブラリのように振る舞います。
|
||||
換言すれば「たまたまMisskeyの開発者と同じ人たちがメンテナンスしているし、たまたまMisskeyのリポジトリ内に置いてあるだけの外部ライブラリ」です。
|
||||
|
||||
そのため、実装をなるべくMisskeyのドメイン知識から独立したものにすれば、Misskeyのコードベースの複雑性を上げることなく機能実装を行うことができ、お得であると言えます。
|
||||
もちろんそれにこだわって、些細な実装でもそのように分離してしまうとかえって認知負荷が増えたり、実装量が増えてメリットをデメリットが上回る場合もあるので、ケースバイケースではあります。
|
||||
|
||||
2
COPYING
2
COPYING
@@ -1,5 +1,5 @@
|
||||
Unless otherwise stated this repository is
|
||||
Copyright © 2014-2026 syuilo and contributors
|
||||
Copyright © 2014-2025 syuilo and contributors
|
||||
|
||||
And is distributed under The GNU Affero General Public License Version 3, you should have received a copy of the license file as LICENSE.
|
||||
|
||||
|
||||
26
Dockerfile
26
Dockerfile
@@ -1,6 +1,6 @@
|
||||
# syntax = docker/dockerfile:1.4
|
||||
|
||||
ARG NODE_VERSION=22.15.0-bookworm
|
||||
ARG NODE_VERSION=22.11.0-bookworm
|
||||
|
||||
# build assets & compile TypeScript
|
||||
|
||||
@@ -14,18 +14,16 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
||||
&& apt-get install -yqq --no-install-recommends \
|
||||
build-essential
|
||||
|
||||
RUN corepack enable
|
||||
|
||||
WORKDIR /misskey
|
||||
|
||||
COPY --link ["pnpm-lock.yaml", "pnpm-workspace.yaml", "package.json", "./"]
|
||||
COPY --link ["scripts", "./scripts"]
|
||||
COPY --link ["patches", "./patches"]
|
||||
COPY --link ["packages/backend/package.json", "./packages/backend/"]
|
||||
COPY --link ["packages/frontend-shared/package.json", "./packages/frontend-shared/"]
|
||||
COPY --link ["packages/frontend/package.json", "./packages/frontend/"]
|
||||
COPY --link ["packages/frontend-embed/package.json", "./packages/frontend-embed/"]
|
||||
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/sw/package.json", "./packages/sw/"]
|
||||
COPY --link ["packages/misskey-js/package.json", "./packages/misskey-js/"]
|
||||
COPY --link ["packages/misskey-reversi/package.json", "./packages/misskey-reversi/"]
|
||||
@@ -33,8 +31,6 @@ COPY --link ["packages/misskey-bubble-game/package.json", "./packages/misskey-bu
|
||||
|
||||
ARG NODE_ENV=production
|
||||
|
||||
RUN node -e "console.log(JSON.parse(require('node:fs').readFileSync('./package.json')).packageManager)" | xargs npm install -g
|
||||
|
||||
RUN --mount=type=cache,target=/root/.local/share/pnpm/store,sharing=locked \
|
||||
pnpm i --frozen-lockfile --aggregate-output
|
||||
|
||||
@@ -52,11 +48,12 @@ RUN apt-get update \
|
||||
&& apt-get install -yqq --no-install-recommends \
|
||||
build-essential
|
||||
|
||||
RUN corepack enable
|
||||
|
||||
WORKDIR /misskey
|
||||
|
||||
COPY --link ["pnpm-lock.yaml", "pnpm-workspace.yaml", "package.json", "./"]
|
||||
COPY --link ["scripts", "./scripts"]
|
||||
COPY --link ["patches", "./patches"]
|
||||
COPY --link ["packages/backend/package.json", "./packages/backend/"]
|
||||
COPY --link ["packages/misskey-js/package.json", "./packages/misskey-js/"]
|
||||
COPY --link ["packages/misskey-reversi/package.json", "./packages/misskey-reversi/"]
|
||||
@@ -64,8 +61,6 @@ COPY --link ["packages/misskey-bubble-game/package.json", "./packages/misskey-bu
|
||||
|
||||
ARG NODE_ENV=production
|
||||
|
||||
RUN node -e "console.log(JSON.parse(require('node:fs').readFileSync('./package.json')).packageManager)" | xargs npm install -g
|
||||
|
||||
RUN --mount=type=cache,target=/root/.local/share/pnpm/store,sharing=locked \
|
||||
pnpm i --frozen-lockfile --aggregate-output
|
||||
|
||||
@@ -78,6 +73,7 @@ RUN apt-get update \
|
||||
&& apt-get install -y --no-install-recommends \
|
||||
ffmpeg tini curl libjemalloc-dev libjemalloc2 \
|
||||
&& ln -s /usr/lib/$(uname -m)-linux-gnu/libjemalloc.so.2 /usr/local/lib/libjemalloc.so \
|
||||
&& corepack enable \
|
||||
&& groupadd -g "${GID}" misskey \
|
||||
&& useradd -l -u "${UID}" -g "${GID}" -m -d /misskey misskey \
|
||||
&& find / -type d -path /sys -prune -o -type d -path /proc -prune -o -type f -perm /u+s -ignore_readdir_race -exec chmod u-s {} \; \
|
||||
@@ -85,13 +81,13 @@ RUN apt-get update \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists
|
||||
|
||||
# add package.json to add pnpm
|
||||
COPY ./package.json ./package.json
|
||||
RUN node -e "console.log(JSON.parse(require('node:fs').readFileSync('./package.json')).packageManager)" | xargs npm install -g
|
||||
|
||||
USER misskey
|
||||
WORKDIR /misskey
|
||||
|
||||
# add package.json to add pnpm
|
||||
COPY --chown=misskey:misskey ./package.json ./package.json
|
||||
RUN corepack install
|
||||
|
||||
COPY --chown=misskey:misskey --from=target-builder /misskey/node_modules ./node_modules
|
||||
COPY --chown=misskey:misskey --from=target-builder /misskey/packages/backend/node_modules ./packages/backend/node_modules
|
||||
COPY --chown=misskey:misskey --from=target-builder /misskey/packages/misskey-js/node_modules ./packages/misskey-js/node_modules
|
||||
@@ -102,8 +98,6 @@ 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-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/src-js ./packages/backend/src-js
|
||||
COPY --chown=misskey:misskey --from=native-builder /misskey/packages/i18n/built ./packages/i18n/built
|
||||
COPY --chown=misskey:misskey --from=native-builder /misskey/fluent-emojis /misskey/fluent-emojis
|
||||
COPY --chown=misskey:misskey . ./
|
||||
|
||||
|
||||
@@ -24,10 +24,6 @@
|
||||
<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>
|
||||
|
||||
[](https://deepwiki.com/misskey-dev/misskey)
|
||||
|
||||
<a href="https://flatt.tech/oss/gmo/trampoline" target="_blank"><img src="https://flatt.tech/assets/images/badges/gmo-oss.svg" height="24px"/></a>
|
||||
|
||||
</div>
|
||||
|
||||
## Thanks
|
||||
|
||||
@@ -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.
|
||||
|
||||
- ~~Make the number of type errors zero (backend)~~ → Done ✔️
|
||||
- ~~Make the number of type errors zero (frontend)~~ → Done ✔️
|
||||
- Make the number of type errors zero (frontend)
|
||||
- Improve CI
|
||||
- ~~Fix tests~~ → Done ✔️
|
||||
- Fix random test failures - https://github.com/misskey-dev/misskey/issues/7985 and https://github.com/misskey-dev/misskey/issues/7986
|
||||
|
||||
@@ -7,11 +7,6 @@ bug report to the GitHub repository.
|
||||
|
||||
Thanks for helping make Misskey safe for everyone.
|
||||
|
||||
> [!note]
|
||||
> CNA [requires](https://www.cve.org/ResourcesSupport/AllResources/CNARules#section_5-2_Description) that CVEs include a description in English for inclusion in the CVE Catalog.
|
||||
>
|
||||
> When creating a security advisory, all content must be written in English (it is acceptable to include a non-English description along with the English one).
|
||||
|
||||
## When create a patch
|
||||
|
||||
If you can also create a patch to fix the vulnerability, please create a PR on the private fork.
|
||||
|
||||
BIN
assets/about/drive.png
Normal file
BIN
assets/about/drive.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 94 KiB |
BIN
assets/about/post.png
Normal file
BIN
assets/about/post.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 317 KiB |
BIN
assets/about/reaction.png
Normal file
BIN
assets/about/reaction.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 24 KiB |
BIN
assets/about/ui.png
Normal file
BIN
assets/about/ui.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 95 KiB |
BIN
assets/ss/explore.jpg
Normal file
BIN
assets/ss/explore.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 238 KiB |
BIN
assets/ss/user.jpg
Normal file
BIN
assets/ss/user.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 148 KiB |
Binary file not shown.
@@ -173,11 +173,6 @@ id: "aidx"
|
||||
# dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0'
|
||||
|
||||
#sentryForFrontend:
|
||||
# vueIntegration:
|
||||
# tracingOptions:
|
||||
# trackComponents: true
|
||||
# browserTracingIntegration:
|
||||
# replayIntegration:
|
||||
# options:
|
||||
# dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0'
|
||||
|
||||
@@ -221,6 +216,9 @@ id: "aidx"
|
||||
# Media Proxy
|
||||
#mediaProxy: https://example.com/proxy
|
||||
|
||||
# Sign to ActivityPub GET request (default: true)
|
||||
signToActivityPubGet: true
|
||||
|
||||
#allowedPrivateNetworks: [
|
||||
# '127.0.0.1/32'
|
||||
#]
|
||||
|
||||
@@ -27,7 +27,7 @@ spec:
|
||||
ports:
|
||||
- containerPort: 3000
|
||||
- name: postgres
|
||||
image: postgres:18-alpine
|
||||
image: postgres:15-alpine
|
||||
env:
|
||||
- name: POSTGRES_USER
|
||||
value: "example-misskey-user"
|
||||
|
||||
@@ -15,13 +15,13 @@ services:
|
||||
|
||||
db:
|
||||
restart: always
|
||||
image: postgres:18-alpine
|
||||
image: postgres:15-alpine
|
||||
ports:
|
||||
- "5432:5432"
|
||||
env_file:
|
||||
- .config/docker.env
|
||||
volumes:
|
||||
- ./db:/var/lib/postgresql
|
||||
- ./db:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"
|
||||
interval: 5s
|
||||
|
||||
@@ -37,13 +37,13 @@ services:
|
||||
|
||||
db:
|
||||
restart: always
|
||||
image: postgres:18-alpine
|
||||
image: postgres:15-alpine
|
||||
networks:
|
||||
- internal_network
|
||||
env_file:
|
||||
- .config/docker.env
|
||||
volumes:
|
||||
- ./db:/var/lib/postgresql
|
||||
- ./db:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"
|
||||
interval: 5s
|
||||
|
||||
@@ -2,6 +2,11 @@ import { defineConfig } from 'cypress'
|
||||
|
||||
export default defineConfig({
|
||||
e2e: {
|
||||
// We've imported your old cypress plugins here.
|
||||
// You may want to clean this up later by importing these.
|
||||
setupNodeEvents(on, config) {
|
||||
return require('./cypress/plugins/index.js')(on, config)
|
||||
},
|
||||
baseUrl: 'http://localhost:61812',
|
||||
},
|
||||
})
|
||||
|
||||
@@ -31,14 +31,6 @@ describe('Before setup instance', () => {
|
||||
// なぜか動かない
|
||||
//cy.wait('@signup').should('have.property', 'response.statusCode');
|
||||
cy.wait('@signup');
|
||||
|
||||
cy.intercept('POST', '/api/admin/update-meta').as('update-meta');
|
||||
|
||||
cy.get('[data-cy-next]').click();
|
||||
cy.get('[data-cy-server-name] input').type('Testskey');
|
||||
cy.get('[data-cy-server-setup-wizard-apply]').click();
|
||||
|
||||
cy.wait('@update-meta');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -78,8 +70,6 @@ describe('After setup instance', () => {
|
||||
cy.get('[data-cy-signup-password] input').type('alice1234');
|
||||
cy.get('[data-cy-signup-submit]').should('be.disabled');
|
||||
cy.get('[data-cy-signup-password-retype] input').type('alice1234');
|
||||
cy.get('[data-cy-signup-submit]').should('be.disabled');
|
||||
cy.get('[data-cy-signup-invitation-code] input').type('test-invitation-code');
|
||||
cy.get('[data-cy-signup-submit]').should('not.be.disabled');
|
||||
cy.get('[data-cy-signup-submit]').click();
|
||||
|
||||
@@ -243,7 +233,7 @@ describe('After user setup', () => {
|
||||
cy.get('[data-cy-post-form-text]').type('Hello, Misskey!');
|
||||
cy.get('[data-cy-open-post-form-submit]').click();
|
||||
|
||||
cy.contains('Hello, Misskey!', { timeout: 15000 });
|
||||
cy.contains('Hello, Misskey!');
|
||||
});
|
||||
|
||||
it('open note form with hotkey', () => {
|
||||
|
||||
22
cypress/plugins/index.js
Normal file
22
cypress/plugins/index.js
Normal file
@@ -0,0 +1,22 @@
|
||||
/// <reference types="cypress" />
|
||||
// ***********************************************************
|
||||
// This example plugins/index.js can be used to load plugins
|
||||
//
|
||||
// You can change the location of this file or turn off loading
|
||||
// the plugins file with the 'pluginsFile' configuration option.
|
||||
//
|
||||
// You can read more here:
|
||||
// https://on.cypress.io/plugins-guide
|
||||
// ***********************************************************
|
||||
|
||||
// This function is called when a project is opened or re-opened (e.g. due to
|
||||
// the project's config changing)
|
||||
|
||||
/**
|
||||
* @type {Cypress.PluginConfig}
|
||||
*/
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
module.exports = (on, config) => {
|
||||
// `on` is used to hook into various events Cypress emits
|
||||
// `config` is the resolved Cypress config
|
||||
}
|
||||
@@ -4,8 +4,8 @@
|
||||
*/
|
||||
|
||||
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
||||
import { action } from 'storybook/actions';
|
||||
import type { StoryObj } from '@storybook/vue3';
|
||||
import { action } from '@storybook/addon-actions';
|
||||
import { StoryObj } from '@storybook/vue3';
|
||||
import { HttpResponse, http } from 'msw';
|
||||
import { abuseUserReport } from '../packages/frontend/.storybook/fakes.js';
|
||||
import { commonHandlers } from '../packages/frontend/.storybook/mocks.js';
|
||||
|
||||
@@ -1,232 +0,0 @@
|
||||
<!--
|
||||
SPDX-FileCopyrightText: syuilo and misskey-project
|
||||
SPDX-License-Identifier: AGPL-3.0-only
|
||||
-->
|
||||
|
||||
<template>
|
||||
<canvas ref="canvasEl" style="display: block; width: 100%; height: 100%; pointer-events: none;"></canvas>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { onMounted, onUnmounted, useTemplateRef } from 'vue';
|
||||
import isChromatic from 'chromatic/isChromatic';
|
||||
import { initShaderProgram } from '@/utility/webgl.js';
|
||||
|
||||
const VERTEX_SHADER = `#version 300 es
|
||||
in vec2 position;
|
||||
out vec2 in_uv;
|
||||
|
||||
void main() {
|
||||
in_uv = (position + 1.0) / 2.0;
|
||||
gl_Position = vec4(position, 0.0, 1.0);
|
||||
}
|
||||
`;
|
||||
|
||||
const FRAGMENT_SHADER = `#version 300 es
|
||||
precision mediump float;
|
||||
|
||||
const float PI = 3.141592653589793;
|
||||
const float TWO_PI = 6.283185307179586;
|
||||
const float HALF_PI = 1.5707963267948966;
|
||||
|
||||
in vec2 in_uv;
|
||||
uniform vec2 in_resolution;
|
||||
uniform float u_scale;
|
||||
uniform float u_time;
|
||||
uniform float u_seed;
|
||||
uniform float u_angle;
|
||||
uniform float u_radius;
|
||||
uniform vec3 u_color;
|
||||
uniform vec2 u_ripplePositions[16];
|
||||
uniform float u_rippleRadiuses[16];
|
||||
out vec4 out_color;
|
||||
|
||||
float getRipple(vec2 uv) {
|
||||
float strength = 0.0;
|
||||
float thickness = 0.05;
|
||||
for (int i = 0; i < 16; i++) {
|
||||
if (u_rippleRadiuses[i] <= 0.0) continue;
|
||||
|
||||
float d = distance(uv, u_ripplePositions[i]);
|
||||
|
||||
// フチ
|
||||
if (d < u_rippleRadiuses[i] + thickness && d > u_rippleRadiuses[i] - thickness) {
|
||||
float gradate = abs(d - u_rippleRadiuses[i] + thickness) / thickness;
|
||||
strength += (1.0 - u_rippleRadiuses[i]) * gradate;
|
||||
}
|
||||
|
||||
// 内側
|
||||
if (d < u_rippleRadiuses[i] + thickness) {
|
||||
strength += 0.25 * (1.0 - u_rippleRadiuses[i]);
|
||||
}
|
||||
}
|
||||
return strength;
|
||||
}
|
||||
|
||||
void main() {
|
||||
float x_ratio = min(in_resolution.x / in_resolution.y, 1.0);
|
||||
float y_ratio = min(in_resolution.y / in_resolution.x, 1.0);
|
||||
|
||||
float angle = -(u_angle * PI);
|
||||
vec2 centeredUv = (in_uv - vec2(0.5, 0.5)) * vec2(x_ratio, y_ratio);
|
||||
vec2 rotatedUV = vec2(
|
||||
centeredUv.x * cos(angle) - centeredUv.y * sin(angle),
|
||||
centeredUv.x * sin(angle) + centeredUv.y * cos(angle)
|
||||
);
|
||||
vec2 uv = rotatedUV;
|
||||
|
||||
float time = u_time * 0.00025;
|
||||
|
||||
float size = 1.0 / u_scale;
|
||||
float size_half = size / 2.0;
|
||||
float modX = mod(uv.x, size);
|
||||
float modY = mod(uv.y, size);
|
||||
|
||||
vec2 pixelated_uv = vec2(
|
||||
(size * (floor((uv.x - 0.5 - size) / size) + 0.5)),
|
||||
(size * (floor((uv.y - 0.5 - size) / size) + 0.5))
|
||||
) + vec2(0.5 + size, 0.5 + size);
|
||||
|
||||
float strength = getRipple(pixelated_uv);
|
||||
|
||||
float opacity = min(max(strength, 0.0), 1.0);
|
||||
|
||||
float threshold = ((u_radius / 2.0) / u_scale);
|
||||
if (length(vec2(modX - size_half, modY - size_half)) < threshold) {
|
||||
out_color = vec4(u_color.r, u_color.g, u_color.b, opacity);
|
||||
//out_color = vec4(1.0);
|
||||
return;
|
||||
}
|
||||
|
||||
// debug
|
||||
//float a = min(max(getRipple(uv), 0.0), 1.0);
|
||||
//out_color = vec4(u_color.r, u_color.g, u_color.b, (opacity + a) / 2.0);
|
||||
|
||||
out_color = vec4(0.0, 0.0, 0.0, 0.0);
|
||||
}
|
||||
`;
|
||||
|
||||
const canvasEl = useTemplateRef('canvasEl');
|
||||
|
||||
const props = withDefaults(defineProps<{
|
||||
scale?: number;
|
||||
}>(), {
|
||||
scale: 48,
|
||||
});
|
||||
|
||||
let handle: ReturnType<typeof window['requestAnimationFrame']> | null = null;
|
||||
|
||||
onMounted(() => {
|
||||
const canvas = canvasEl.value!;
|
||||
let width = canvas.offsetWidth;
|
||||
let height = canvas.offsetHeight;
|
||||
canvas.width = width;
|
||||
canvas.height = height;
|
||||
|
||||
const maybeGl = canvas.getContext('webgl2', { preserveDrawingBuffer: false, alpha: true, premultipliedAlpha: false, antialias: true });
|
||||
if (maybeGl == null) return;
|
||||
|
||||
const gl = maybeGl;
|
||||
|
||||
const VERTICES = new Float32Array([-1, -1, -1, 1, 1, 1, -1, -1, 1, 1, 1, -1]);
|
||||
const vertexBuffer = gl.createBuffer();
|
||||
gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
|
||||
gl.bufferData(gl.ARRAY_BUFFER, VERTICES, gl.STATIC_DRAW);
|
||||
|
||||
//gl.clearColor(0.0, 0.0, 0.0, 0.0);
|
||||
//gl.clear(gl.COLOR_BUFFER_BIT);
|
||||
|
||||
const shaderProgram = initShaderProgram(gl, VERTEX_SHADER, FRAGMENT_SHADER);
|
||||
|
||||
gl.useProgram(shaderProgram);
|
||||
|
||||
const positionLocation = gl.getAttribLocation(shaderProgram, 'position');
|
||||
gl.vertexAttribPointer(positionLocation, 2, gl.FLOAT, false, 0, 0);
|
||||
gl.enableVertexAttribArray(positionLocation);
|
||||
|
||||
const in_resolution = gl.getUniformLocation(shaderProgram, 'in_resolution');
|
||||
gl.uniform2fv(in_resolution, [canvas.width, canvas.height]);
|
||||
|
||||
const u_time = gl.getUniformLocation(shaderProgram, 'u_time');
|
||||
const u_seed = gl.getUniformLocation(shaderProgram, 'u_seed');
|
||||
const u_scale = gl.getUniformLocation(shaderProgram, 'u_scale');
|
||||
const u_angle = gl.getUniformLocation(shaderProgram, 'u_angle');
|
||||
const u_radius = gl.getUniformLocation(shaderProgram, 'u_radius');
|
||||
const u_color = gl.getUniformLocation(shaderProgram, 'u_color');
|
||||
gl.uniform1f(u_seed, Math.random() * 1000);
|
||||
gl.uniform1f(u_scale, props.scale);
|
||||
gl.uniform1f(u_angle, 0.0);
|
||||
gl.uniform1f(u_radius, 0.15);
|
||||
gl.uniform3fv(u_color, [0.5, 1.0, 0]);
|
||||
|
||||
if (isChromatic()) {
|
||||
gl.uniform1f(u_time, 0);
|
||||
gl.drawArrays(gl.TRIANGLES, 0, 6);
|
||||
} else {
|
||||
let ripples = [] as { position: [number, number]; startTime: number; }[];
|
||||
const LIFE_TIME = 1000 * 4;
|
||||
|
||||
function render(timeStamp: number) {
|
||||
let sizeChanged = false;
|
||||
if (Math.abs(height - canvas.offsetHeight) > 2) {
|
||||
height = canvas.offsetHeight;
|
||||
canvas.height = height;
|
||||
sizeChanged = true;
|
||||
}
|
||||
if (Math.abs(width - canvas.offsetWidth) > 2) {
|
||||
width = canvas.offsetWidth;
|
||||
canvas.width = width;
|
||||
sizeChanged = true;
|
||||
}
|
||||
if (sizeChanged && gl) {
|
||||
gl.uniform2fv(in_resolution, [width, height]);
|
||||
gl.viewport(0, 0, width, height);
|
||||
}
|
||||
|
||||
gl.uniform1f(u_time, timeStamp);
|
||||
|
||||
if (Math.random() < 0.01 && ripples.length < 16) {
|
||||
ripples.push({ position: [(Math.random() * 2) - 1, (Math.random() * 2) - 1], startTime: timeStamp });
|
||||
}
|
||||
|
||||
for (let i = 0; i < 16; i++) {
|
||||
const o = gl.getUniformLocation(shaderProgram, `u_ripplePositions[${i.toString()}]`);
|
||||
const r = gl.getUniformLocation(shaderProgram, `u_rippleRadiuses[${i.toString()}]`);
|
||||
const ripple = ripples[i];
|
||||
if (ripple == null) {
|
||||
gl.uniform2f(o, 0, 0);
|
||||
gl.uniform1f(r, 0.0);
|
||||
continue;
|
||||
}
|
||||
|
||||
const delta = timeStamp - ripple.startTime;
|
||||
|
||||
gl.uniform2f(o, ripple.position[0], ripple.position[1]);
|
||||
gl.uniform1f(r, delta / LIFE_TIME);
|
||||
}
|
||||
|
||||
ripples = ripples.filter(r => (timeStamp - r.startTime) < LIFE_TIME);
|
||||
if (ripples.length === 0) {
|
||||
ripples.push({ position: [(Math.random() * 2) - 1, (Math.random() * 2) - 1], startTime: timeStamp });
|
||||
}
|
||||
|
||||
gl.drawArrays(gl.TRIANGLES, 0, 6);
|
||||
|
||||
handle = window.requestAnimationFrame(render);
|
||||
}
|
||||
|
||||
handle = window.requestAnimationFrame(render);
|
||||
}
|
||||
});
|
||||
|
||||
onUnmounted(() => {
|
||||
if (handle) {
|
||||
window.cancelAnimationFrame(handle);
|
||||
}
|
||||
|
||||
// TODO: WebGLリソースの解放
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" module>
|
||||
</style>
|
||||
@@ -1,190 +0,0 @@
|
||||
<!--
|
||||
SPDX-FileCopyrightText: syuilo and misskey-project
|
||||
SPDX-License-Identifier: AGPL-3.0-only
|
||||
-->
|
||||
|
||||
<template>
|
||||
<canvas ref="canvasEl" style="display: block; width: 100%; height: 100%; pointer-events: none;"></canvas>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { onMounted, onUnmounted, useTemplateRef } from 'vue';
|
||||
import isChromatic from 'chromatic/isChromatic';
|
||||
import { GLSL_LIB_SNOISE, initShaderProgram } from '@/utility/webgl.js';
|
||||
|
||||
const VERTEX_SHADER = `#version 300 es
|
||||
in vec2 position;
|
||||
out vec2 in_uv;
|
||||
|
||||
void main() {
|
||||
in_uv = (position + 1.0) / 2.0;
|
||||
gl_Position = vec4(position, 0.0, 1.0);
|
||||
}
|
||||
`;
|
||||
|
||||
const FRAGMENT_SHADER = `#version 300 es
|
||||
precision mediump float;
|
||||
|
||||
const float PI = 3.141592653589793;
|
||||
const float TWO_PI = 6.283185307179586;
|
||||
const float HALF_PI = 1.5707963267948966;
|
||||
|
||||
${GLSL_LIB_SNOISE}
|
||||
|
||||
in vec2 in_uv;
|
||||
uniform vec2 in_resolution;
|
||||
uniform float u_scale;
|
||||
uniform float u_time;
|
||||
uniform float u_seed;
|
||||
uniform float u_angle;
|
||||
uniform float u_radius;
|
||||
uniform vec3 u_color;
|
||||
out vec4 out_color;
|
||||
|
||||
void main() {
|
||||
float x_ratio = min(in_resolution.x / in_resolution.y, 1.0);
|
||||
float y_ratio = min(in_resolution.y / in_resolution.x, 1.0);
|
||||
|
||||
float size = 1.0 / u_scale;
|
||||
float size_half = size / 2.0;
|
||||
|
||||
float angle = -(u_angle * PI);
|
||||
vec2 centeredUv = (in_uv - vec2(0.5, 0.5)) * vec2(x_ratio, y_ratio);
|
||||
vec2 rotatedUV = vec2(
|
||||
centeredUv.x * cos(angle) - centeredUv.y * sin(angle),
|
||||
centeredUv.x * sin(angle) + centeredUv.y * cos(angle)
|
||||
);
|
||||
vec2 uv = rotatedUV;
|
||||
|
||||
float modX = mod(uv.x, size);
|
||||
float modY = mod(uv.y, size);
|
||||
|
||||
vec2 pixelated_uv = vec2(
|
||||
(size * (floor((uv.x - 0.5 - size) / size) + 0.5)),
|
||||
(size * (floor((uv.y - 0.5 - size) / size) + 0.5))
|
||||
) + vec2(0.5 + size, 0.5 + size);
|
||||
|
||||
float time = u_time * 0.00025;
|
||||
|
||||
float noiseAScale = 1.0;
|
||||
float noiseAX = (pixelated_uv.x + u_seed) * (u_scale / noiseAScale);
|
||||
float noiseAY = (pixelated_uv.y + u_seed) * (u_scale / noiseAScale);
|
||||
float noiseA = snoise(vec3(noiseAX, noiseAY, time * 2.0));
|
||||
|
||||
float noiseBScale = 32.0;
|
||||
float noiseBX = (pixelated_uv.x + u_seed) * (u_scale / noiseBScale);
|
||||
float noiseBY = (pixelated_uv.y + u_seed) * (u_scale / noiseBScale);
|
||||
float noiseB = snoise(vec3(noiseBX, noiseBY, time));
|
||||
|
||||
float strength = 0.0;
|
||||
strength += noiseA * 0.2;
|
||||
strength += noiseB * 0.8;
|
||||
|
||||
float opacity = min(max(strength, 0.0), 1.0);
|
||||
|
||||
float threshold = ((u_radius / 2.0) / u_scale);
|
||||
if (length(vec2(modX - size_half, modY - size_half)) < threshold) {
|
||||
out_color = vec4(u_color.r, u_color.g, u_color.b, opacity);
|
||||
return;
|
||||
}
|
||||
|
||||
out_color = vec4(0.0, 0.0, 0.0, 0.0);
|
||||
}
|
||||
`;
|
||||
|
||||
const canvasEl = useTemplateRef('canvasEl');
|
||||
|
||||
const props = withDefaults(defineProps<{
|
||||
scale?: number;
|
||||
}>(), {
|
||||
scale: 48,
|
||||
});
|
||||
|
||||
let handle: ReturnType<typeof window['requestAnimationFrame']> | null = null;
|
||||
|
||||
onMounted(() => {
|
||||
const canvas = canvasEl.value!;
|
||||
let width = canvas.offsetWidth;
|
||||
let height = canvas.offsetHeight;
|
||||
canvas.width = width;
|
||||
canvas.height = height;
|
||||
|
||||
const maybeGl = canvas.getContext('webgl2', { preserveDrawingBuffer: false, alpha: true, premultipliedAlpha: false, antialias: true });
|
||||
if (maybeGl == null) return;
|
||||
|
||||
const gl = maybeGl;
|
||||
|
||||
const VERTICES = new Float32Array([-1, -1, -1, 1, 1, 1, -1, -1, 1, 1, 1, -1]);
|
||||
const vertexBuffer = gl.createBuffer();
|
||||
gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
|
||||
gl.bufferData(gl.ARRAY_BUFFER, VERTICES, gl.STATIC_DRAW);
|
||||
|
||||
//gl.clearColor(0.0, 0.0, 0.0, 0.0);
|
||||
//gl.clear(gl.COLOR_BUFFER_BIT);
|
||||
|
||||
const shaderProgram = initShaderProgram(gl, VERTEX_SHADER, FRAGMENT_SHADER);
|
||||
|
||||
gl.useProgram(shaderProgram);
|
||||
|
||||
const positionLocation = gl.getAttribLocation(shaderProgram, 'position');
|
||||
gl.vertexAttribPointer(positionLocation, 2, gl.FLOAT, false, 0, 0);
|
||||
gl.enableVertexAttribArray(positionLocation);
|
||||
|
||||
const in_resolution = gl.getUniformLocation(shaderProgram, 'in_resolution');
|
||||
gl.uniform2fv(in_resolution, [canvas.width, canvas.height]);
|
||||
|
||||
const u_time = gl.getUniformLocation(shaderProgram, 'u_time');
|
||||
const u_seed = gl.getUniformLocation(shaderProgram, 'u_seed');
|
||||
const u_scale = gl.getUniformLocation(shaderProgram, 'u_scale');
|
||||
const u_angle = gl.getUniformLocation(shaderProgram, 'u_angle');
|
||||
const u_radius = gl.getUniformLocation(shaderProgram, 'u_radius');
|
||||
const u_color = gl.getUniformLocation(shaderProgram, 'u_color');
|
||||
gl.uniform1f(u_seed, Math.random() * 1000);
|
||||
gl.uniform1f(u_scale, props.scale);
|
||||
gl.uniform1f(u_angle, 0.0);
|
||||
gl.uniform1f(u_radius, 0.15);
|
||||
gl.uniform3fv(u_color, [0.5, 1.0, 0]);
|
||||
|
||||
if (isChromatic()) {
|
||||
gl.uniform1f(u_time, 0);
|
||||
gl.drawArrays(gl.TRIANGLES, 0, 6);
|
||||
} else {
|
||||
function render(timeStamp: number) {
|
||||
let sizeChanged = false;
|
||||
if (Math.abs(height - canvas.offsetHeight) > 2) {
|
||||
height = canvas.offsetHeight;
|
||||
canvas.height = height;
|
||||
sizeChanged = true;
|
||||
}
|
||||
if (Math.abs(width - canvas.offsetWidth) > 2) {
|
||||
width = canvas.offsetWidth;
|
||||
canvas.width = width;
|
||||
sizeChanged = true;
|
||||
}
|
||||
if (sizeChanged && gl) {
|
||||
gl.uniform2fv(in_resolution, [width, height]);
|
||||
gl.viewport(0, 0, width, height);
|
||||
}
|
||||
|
||||
gl.uniform1f(u_time, timeStamp);
|
||||
|
||||
gl.drawArrays(gl.TRIANGLES, 0, 6);
|
||||
|
||||
handle = window.requestAnimationFrame(render);
|
||||
}
|
||||
|
||||
handle = window.requestAnimationFrame(render);
|
||||
}
|
||||
});
|
||||
|
||||
onUnmounted(() => {
|
||||
if (handle) {
|
||||
window.cancelAnimationFrame(handle);
|
||||
}
|
||||
|
||||
// TODO: WebGLリソースの解放
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" module>
|
||||
</style>
|
||||
@@ -24,8 +24,7 @@ defineProps<{
|
||||
}
|
||||
|
||||
.disabled {
|
||||
opacity: 0.3;
|
||||
filter: saturate(0.5);
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
.cover {
|
||||
@@ -35,7 +34,7 @@ defineProps<{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
cursor: not-allowed;
|
||||
--color: light-dark(rgba(0, 0, 0, 0.05), rgba(255, 255, 255, 0.05));
|
||||
--color: color(from var(--MI_THEME-error) srgb r g b / 0.25);
|
||||
background-size: auto auto;
|
||||
background-image: repeating-linear-gradient(135deg, transparent, transparent 10px, var(--color) 4px, var(--color) 14px);
|
||||
}
|
||||
@@ -68,7 +68,7 @@ receiveFollowRequest: "تلقيت طلب متابعة"
|
||||
followRequestAccepted: "قُبل طلب المتابعة"
|
||||
mention: "أشر الى"
|
||||
mentions: "الإشارات"
|
||||
directNotes: "رسالة خاصة"
|
||||
directNotes: "الملاحظات المباشرة"
|
||||
importAndExport: "إستورد / صدر"
|
||||
import: "استيراد"
|
||||
export: "تصدير"
|
||||
@@ -215,6 +215,7 @@ noUsers: "ليس هناك مستخدمون"
|
||||
editProfile: "تعديل الملف التعريفي"
|
||||
noteDeleteConfirm: "هل تريد حذف هذه الملاحظة؟"
|
||||
pinLimitExceeded: "لا يمكنك تثبيت الملاحظات بعد الآن."
|
||||
intro: "لقد انتهت عملية تنصيب Misskey. الرجاء إنشاء حساب إداري."
|
||||
done: "تمّ"
|
||||
processing: "المعالجة جارية"
|
||||
preview: "معاينة"
|
||||
@@ -250,6 +251,7 @@ removeAreYouSure: "متأكد من أنك تريد حذف {x}؟"
|
||||
deleteAreYouSure: "متأكد من أنك تريد حذف {x}؟"
|
||||
resetAreYouSure: "هل تريد إعادة التعيين؟"
|
||||
saved: "حُفظ"
|
||||
messaging: "المحادثة"
|
||||
upload: "ارفع"
|
||||
keepOriginalUploading: "ابق الصورة الأصلية"
|
||||
keepOriginalUploadingDescription: "يحفظ الصور المرفوعة على حالتها الأصلية، وان عطّل ستولد نسخة مخصصة من الصورة."
|
||||
@@ -262,6 +264,7 @@ uploadFromUrlMayTakeTime: "سيستغرق بعض الوقت لاتمام الر
|
||||
explore: "استكشاف"
|
||||
messageRead: "مقروءة"
|
||||
noMoreHistory: "لا يوجد المزيد من التاريخ"
|
||||
startMessaging: "ابدأ محادثة"
|
||||
nUsersRead: "قرأه {n}"
|
||||
agreeTo: "اوافق على {0}"
|
||||
agree: "أقبل"
|
||||
@@ -433,6 +436,8 @@ retype: "أعد الكتابة"
|
||||
noteOf: "ملاحظات {user}"
|
||||
quoteAttached: "اِقتُبسَ"
|
||||
quoteQuestion: "أتريد تضمينها كاقتباس"
|
||||
noMessagesYet: "ليس هناك رسائل بعد"
|
||||
newMessageExists: "لقد تلقيت رسالة جديدة"
|
||||
onlyOneFileCanBeAttached: "يمكنك إرفاق ملف واحد بالرسالة"
|
||||
signinRequired: "رجاءً لِج"
|
||||
invitations: "دعوة"
|
||||
@@ -675,6 +680,7 @@ experimental: "اختباري"
|
||||
developer: "المطور"
|
||||
makeExplorable: "أظهر الحساب في صفحة \"استكشاف\""
|
||||
makeExplorableDescription: "بتعطيل هذا الخيار لن يظهر حسابك في صفحة \"استكشاف\""
|
||||
showGapBetweenNotesInTimeline: "أظهر فجوات بين المشاركات في الخيط الزمني"
|
||||
left: "يسار"
|
||||
center: "وسط"
|
||||
wide: "عريض"
|
||||
@@ -1006,25 +1012,6 @@ sourceCode: "الشفرة المصدرية"
|
||||
flip: "اقلب"
|
||||
lastNDays: "آخر {n} أيام"
|
||||
surrender: "ألغِ"
|
||||
postForm: "أنشئ ملاحظة"
|
||||
information: "عن"
|
||||
inMinutes: "د"
|
||||
inDays: "ي"
|
||||
widgets: "التطبيقات المُصغّرة"
|
||||
presets: "إعدادات مسبقة"
|
||||
_imageEditing:
|
||||
_vars:
|
||||
filename: "اسم الملف"
|
||||
_imageFrameEditor:
|
||||
font: "الخط"
|
||||
fontSerif: "Serif"
|
||||
fontSansSerif: "Sans Serif"
|
||||
_chat:
|
||||
invitations: "دعوة"
|
||||
noHistory: "السجل فارغ"
|
||||
members: "الأعضاء"
|
||||
home: "الرئيسي"
|
||||
send: "أرسل"
|
||||
_delivery:
|
||||
stop: "مُعلّق"
|
||||
_initialAccountSetting:
|
||||
@@ -1249,6 +1236,7 @@ _theme:
|
||||
shadow: "الظل"
|
||||
navBg: "خلفية الشريط الجانبي"
|
||||
navFg: "نص الشريط الجانبي"
|
||||
navHoverFg: "نص الشريط الجانبي (عند التمرير فوقه)"
|
||||
link: "رابط"
|
||||
hashtag: "وسم"
|
||||
mention: "أشر الى"
|
||||
@@ -1263,6 +1251,7 @@ _theme:
|
||||
buttonBg: "خلفية الأزرار"
|
||||
buttonHoverBg: "خلفية الأزرار (عند التمرير فوقها)"
|
||||
inputBorder: "حواف حقل الإدخال"
|
||||
driveFolderBg: "خلفية مجلد قرص التخزين"
|
||||
messageBg: "خلفية المحادثة"
|
||||
_sfx:
|
||||
note: "الملاحظات"
|
||||
@@ -1322,7 +1311,6 @@ _permissions:
|
||||
"read:gallery": "اعرض المعرض"
|
||||
"write:gallery": "عدّل المعرض"
|
||||
"read:gallery-likes": "يعرض ما أعجبك من مشاركات المعرض"
|
||||
"write:chat": "اكتب أو احذف رسائل محادثة"
|
||||
_auth:
|
||||
shareAccess: "أتريد التفويض لـ \"{name}\" بالوصول لحسابك؟"
|
||||
shareAccessAsk: "هل تخول لهذا التطبيق الوصول لحسابك؟"
|
||||
@@ -1405,9 +1393,6 @@ _postForm:
|
||||
replyPlaceholder: "رد على هذه الملاحظة…"
|
||||
quotePlaceholder: "اقتبس هذه الملاحظة…"
|
||||
channelPlaceholder: "انشر في قناة..."
|
||||
_howToUse:
|
||||
visibility_title: "الظهور"
|
||||
menu_title: "القائمة"
|
||||
_placeholders:
|
||||
a: "ما الذي تنوي فعله؟"
|
||||
b: "ماذا يحدث حولك ؟"
|
||||
@@ -1475,6 +1460,9 @@ _pages:
|
||||
newPage: "أنشئ صفحة جديدة"
|
||||
editPage: "عدّل الصفحة"
|
||||
readPage: "نُشّط عرض المصدر"
|
||||
created: "نجح إنشاء الصفحة"
|
||||
updated: "نجح تعديل الصفحة"
|
||||
deleted: "نجح حذف الصفحة"
|
||||
pageSetting: "إعدادات الصفحة"
|
||||
nameAlreadyExists: "رابط الصفحة موجود مسبقًا"
|
||||
invalidNameTitle: "رابط الصفحة ليس صالحًا"
|
||||
@@ -1599,25 +1587,3 @@ _offlineScreen:
|
||||
_remoteLookupErrors:
|
||||
_noSuchObject:
|
||||
title: "غير موجود"
|
||||
_search:
|
||||
searchScopeAll: "الكل"
|
||||
searchScopeLocal: "المحلي"
|
||||
searchScopeUser: "مستخدم محدد"
|
||||
_watermarkEditor:
|
||||
opacity: "الشفافية"
|
||||
scale: "الحجم"
|
||||
text: "نص"
|
||||
position: "الموضع"
|
||||
type: "نوع"
|
||||
image: "صور"
|
||||
advanced: "متقدم"
|
||||
_imageEffector:
|
||||
_fxProps:
|
||||
scale: "الحجم"
|
||||
size: "الحجم"
|
||||
offset: "الموضع"
|
||||
color: "اللون"
|
||||
opacity: "الشفافية"
|
||||
_qr:
|
||||
showTabTitle: "المظهر"
|
||||
raw: "نص"
|
||||
|
||||
@@ -215,6 +215,7 @@ noUsers: "কোন ব্যাবহারকারী নেই"
|
||||
editProfile: "প্রোফাইল সম্পাদনা করুন"
|
||||
noteDeleteConfirm: "আপনি কি নোট ডিলিট করার ব্যাপারে নিশ্চিত?"
|
||||
pinLimitExceeded: "আপনি আর কোন নোট পিন করতে পারবেন না"
|
||||
intro: "Misskey এর ইন্সটলেশন সম্পন্ন হয়েছে!দয়া করে অ্যাডমিন ইউজার তৈরি করুন।"
|
||||
done: "সম্পন্ন"
|
||||
processing: "প্রক্রিয়াধীন..."
|
||||
preview: "পূর্বরূপ দেখুন"
|
||||
@@ -251,6 +252,7 @@ removeAreYouSure: "আপনি কি \"{x}\" সরানোর ব্যা
|
||||
deleteAreYouSure: "আপনি কি \"{x}\" সরানোর ব্যাপারে নিশ্চিত?"
|
||||
resetAreYouSure: "রিসেট করার ব্যাপারে নিশ্চিত?"
|
||||
saved: "সংরক্ষিত হয়েছে"
|
||||
messaging: "চ্যাট"
|
||||
upload: "আপলোড"
|
||||
keepOriginalUploading: "আসল ছবি রাখুন"
|
||||
keepOriginalUploadingDescription: "ছবিটি আপলোড করার সময় আসল সংস্করণটি রাখুন। অপশনটি বন্ধ থাকলে, আপলোডের সময় ওয়েব প্রকাশনার জন্য ছবি ব্রাউজারে তৈরি করা হবে।"
|
||||
@@ -263,6 +265,7 @@ uploadFromUrlMayTakeTime: "URL হতে আপলোড হতে কিছু
|
||||
explore: "ঘুরে দেখুন"
|
||||
messageRead: "পড়া"
|
||||
noMoreHistory: "আর কোন ইতিহাস নেই"
|
||||
startMessaging: "চ্যাট শুরু করুন"
|
||||
nUsersRead: "{n} জন পড়েছেন"
|
||||
agreeTo: "{0} এর প্রতি আমি সম্মত"
|
||||
start: "শুরু করুন"
|
||||
@@ -424,6 +427,8 @@ retype: "পুনঃ প্রবেশ"
|
||||
noteOf: "{user} এর নোট"
|
||||
quoteAttached: "উদ্ধৃত"
|
||||
quoteQuestion: "উদ্ধৃতি হিসাবে সংযুক্ত করবেন?"
|
||||
noMessagesYet: "কোন মেসেজ নেই"
|
||||
newMessageExists: "নতুন মেসেজ পেয়েছেন"
|
||||
onlyOneFileCanBeAttached: "আপনি মেসেজের সাথে সর্বোচ্চ একটি ফাইল যুক্ত করতে পারবেন"
|
||||
signinRequired: "দয়া করে লগ ইন করুন"
|
||||
invitations: "আমন্ত্রণ"
|
||||
@@ -672,6 +677,7 @@ experimentalFeatures: "পরীক্ষামূলক বৈশিষ্ট
|
||||
developer: "ডেভেলপার"
|
||||
makeExplorable: "অ্যাকাউন্ট \"ঘুরে দেখুন\" পৃষ্ঠায় দেখান"
|
||||
makeExplorableDescription: "আপনি এটি বন্ধ করলে, আপনার অ্যাকাউন্ট \"ঘুরে দেখুন\" পৃষ্ঠায় প্রদর্শিত হবে না।"
|
||||
showGapBetweenNotesInTimeline: "টাইমলাইন এবং নোটের মাঝে ফাকা জায়গা রাখুন"
|
||||
duplicate: "প্রতিরূপ"
|
||||
left: "বাম"
|
||||
center: "মাঝখান"
|
||||
@@ -846,25 +852,6 @@ replies: "জবাব"
|
||||
renotes: "রিনোট"
|
||||
sourceCode: "সোর্স কোড"
|
||||
flip: "উল্টান"
|
||||
postForm: "নোট লিখুন"
|
||||
information: "আপনার সম্পর্কে"
|
||||
inMinutes: "মিনিট"
|
||||
inDays: "দিন"
|
||||
widgets: "উইজেটগুলি"
|
||||
_imageEditing:
|
||||
_vars:
|
||||
filename: "ফাইলের নাম"
|
||||
_imageFrameEditor:
|
||||
header: "হেডার"
|
||||
font: "ফন্ট"
|
||||
fontSerif: "সেরিফ"
|
||||
fontSansSerif: "স্যান্স সেরিফ"
|
||||
_chat:
|
||||
invitations: "আমন্ত্রণ"
|
||||
noHistory: "কোনো ইতিহাস নেই"
|
||||
members: "সদস্যবৃন্দ"
|
||||
home: "মূল পাতা"
|
||||
send: "পাঠান"
|
||||
_delivery:
|
||||
stop: "স্থগিত করা হয়েছে"
|
||||
_type:
|
||||
@@ -1007,6 +994,7 @@ _theme:
|
||||
header: "হেডার"
|
||||
navBg: "সাইডবারের পটভূমি"
|
||||
navFg: "সাইডবারের পাঠ্য"
|
||||
navHoverFg: "সাইডবারের পাঠ্য (হভার)"
|
||||
navActive: "সাইডবারের পাঠ্য (অ্যাকটিভ)"
|
||||
navIndicator: "সাইডবারের ইনডিকেটর"
|
||||
link: "লিংক"
|
||||
@@ -1028,8 +1016,12 @@ _theme:
|
||||
buttonBg: "বাটনের পটভূমি"
|
||||
buttonHoverBg: "বাটনের পটভূমি (হভার)"
|
||||
inputBorder: "ইনপুট ফিল্ডের বর্ডার"
|
||||
driveFolderBg: "ড্রাইভ ফোল্ডারের পটভূমি"
|
||||
wallpaperOverlay: "ওয়ালপেপার ওভারলে"
|
||||
badge: "ব্যাজ"
|
||||
messageBg: "চ্যাটের পটভূমি"
|
||||
accentDarken: "অ্যাকসেন্ট (গাঢ়)"
|
||||
accentLighten: "অ্যাকসেন্ট (হাল্কা)"
|
||||
fgHighlighted: "হাইলাইট করা পাঠ্য"
|
||||
_sfx:
|
||||
note: "নোটগুলি"
|
||||
@@ -1092,7 +1084,6 @@ _permissions:
|
||||
"write:gallery": "গ্যালারী সম্পাদনা করুন"
|
||||
"read:gallery-likes": "গ্যালারীর পছন্দগুলি দেখুন"
|
||||
"write:gallery-likes": "গ্যালারীর পছন্দগুলি সম্পাদনা করুন"
|
||||
"write:chat": "চ্যাটগুলি সম্পাদনা করুন"
|
||||
_auth:
|
||||
shareAccess: "\"{name}\" কে অ্যাকাউন্টের অ্যাক্সেস দিবেন?"
|
||||
shareAccessAsk: "অ্যাপ্লিকেশনটিকে অ্যাকাউন্টের অ্যাক্সেস দিবেন?"
|
||||
@@ -1177,9 +1168,6 @@ _postForm:
|
||||
replyPlaceholder: "নোটটির জবাব দিন..."
|
||||
quotePlaceholder: "নোটটিকে উদ্ধৃত করুন..."
|
||||
channelPlaceholder: "চ্যানেলে পোস্ট করুন..."
|
||||
_howToUse:
|
||||
visibility_title: "দৃশ্যমানতা"
|
||||
menu_title: "মেনু"
|
||||
_placeholders:
|
||||
a: "আপনি এখন কি করছেন?"
|
||||
b: "আপনার আশে পাশে কি হচ্ছে?"
|
||||
@@ -1249,6 +1237,9 @@ _pages:
|
||||
newPage: "নতুন পৃষ্ঠা বানান"
|
||||
editPage: "পৃষ্ঠাটি সম্পাদনা করুন"
|
||||
readPage: "উৎস দেখছেন"
|
||||
created: "পৃষ্ঠা তৈরি করা হয়েছে"
|
||||
updated: "পৃষ্ঠা সম্পাদনা করা হয়েছে"
|
||||
deleted: "পৃষ্ঠা মুছে ফেলা হয়েছে"
|
||||
pageSetting: "পৃষ্ঠার সেটিংস"
|
||||
nameAlreadyExists: "পৃষ্ঠার URLটি ইতিমধ্যেই ব্যাবহার করা হয়েছে"
|
||||
invalidNameTitle: "পৃষ্ঠার URL অবৈধ"
|
||||
@@ -1360,22 +1351,3 @@ _reversi:
|
||||
_remoteLookupErrors:
|
||||
_noSuchObject:
|
||||
title: "পাওয়া যায়নি"
|
||||
_search:
|
||||
searchScopeAll: "সবগুলো"
|
||||
searchScopeLocal: "স্থানীয়"
|
||||
_watermarkEditor:
|
||||
opacity: "অস্বচ্ছতা"
|
||||
scale: "আকার"
|
||||
text: "লেখা"
|
||||
image: "ছবি"
|
||||
advanced: "উন্নত"
|
||||
_imageEffector:
|
||||
_fxProps:
|
||||
scale: "আকার"
|
||||
size: "আকার"
|
||||
color: "রং"
|
||||
opacity: "অস্বচ্ছতা"
|
||||
lightness: "উজ্জ্বল করুন"
|
||||
_qr:
|
||||
showTabTitle: "প্রদর্শন"
|
||||
raw: "লেখা"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,17 +1,13 @@
|
||||
---
|
||||
_lang_: "Čeština"
|
||||
headlineMisskey: "Síť propojená poznámkami"
|
||||
introMisskey: "Vítejte! Misskey je otevřená a decentralizovaná microblogovací služba.\n\"Poznámkami\" můžete sdílet co se zrovna děje se všemi ve Vašem okolí. 📡\nPomocí \"reakcí\" můžete sdílet své názory a pocity na ostatní poznámky. 👍\nPojďte objevovat nový svět! 🚀"
|
||||
introMisskey: "Vítejte! Misskey je otevřený a decentralizovaný microblogový servis.\n\"Poznámkami\" můžete sdílet co se zrovna děje se všemi ve Vašem okolí. 📡\nPomocí \"reakcí\" můžete sdílet své názory a pocity na ostatní poznámky. 👍\nPojďte objevovat nový svět! 🚀"
|
||||
poweredByMisskeyDescription: "{name} je jeden ze serverů využívající open source platformu <b>Misskey<b> (nazývaná \"Misskey instance\")."
|
||||
monthAndDay: "{day}. {month}."
|
||||
search: "Vyhledávání"
|
||||
reset: "Obnovit"
|
||||
notifications: "Oznámení"
|
||||
username: "Uživatelské jméno"
|
||||
password: "Heslo"
|
||||
initialPasswordForSetup: "Počáteční heslo pro nastavení"
|
||||
initialPasswordIsIncorrect: "Počáteční heslo pro nastavení je nesprávné"
|
||||
initialPasswordForSetupDescription: "Použijte heslo, které jste nastavili v konfiguračním souboru, pokud jste Misskey instalovali ručně.\nPokud užíváte Misskey hostovací službu, použijte poskytnuté heslo.\nPokud jste heslo nenastavovali, zanechte prázdné."
|
||||
forgotPassword: "Zapomenuté heslo"
|
||||
fetchingAsApObject: "Načítám data z Fediversu..."
|
||||
ok: "Potvrdit"
|
||||
@@ -19,7 +15,7 @@ gotIt: "Rozumím!"
|
||||
cancel: "Zrušit"
|
||||
noThankYou: "Ne děkuji"
|
||||
enterUsername: "Zadej uživatelské jméno"
|
||||
renotedBy: "{user} přeposlal*a"
|
||||
renotedBy: "{user} přeposla/a"
|
||||
noNotes: "Žádné poznámky"
|
||||
noNotifications: "Žádná oznámení"
|
||||
instance: "Instance"
|
||||
@@ -49,8 +45,6 @@ pin: "Připnout"
|
||||
unpin: "Odepnout"
|
||||
copyContent: "Zkopírovat obsah"
|
||||
copyLink: "Kopírovat odkaz"
|
||||
copyRemoteLink: "Zkoprírovat vzdálený odkaz"
|
||||
copyLinkRenote: "Zkopírovat odkaz renotu"
|
||||
delete: "Smazat"
|
||||
deleteAndEdit: "Smazat a upravit"
|
||||
deleteAndEditConfirm: "Jste si jistí že chcete smazat tuto poznámku a editovat ji? Ztratíte tím všechny reakce, sdílení a odpovědi na ni."
|
||||
@@ -65,7 +59,6 @@ copyFileId: "Kopírovat ID souboru"
|
||||
copyFolderId: "Kopírovat ID složky"
|
||||
copyProfileUrl: "Kopírovat URL profilu"
|
||||
searchUser: "Vyhledat uživatele"
|
||||
searchThisUsersNotes: "Prohledat poznámky uživatele"
|
||||
reply: "Odpovědět"
|
||||
loadMore: "Zobrazit více"
|
||||
showMore: "Zobrazit více"
|
||||
@@ -175,9 +168,6 @@ addAccount: "Přidat účet"
|
||||
reloadAccountsList: "Obnovit list účtů"
|
||||
loginFailed: "Přihlášení se nezdařilo."
|
||||
showOnRemote: "Více na původním profilu"
|
||||
continueOnRemote: "Pokračujte na původní profil"
|
||||
chooseServerOnMisskeyHub: "Vyberete si server z Misskey Hubu"
|
||||
inputHostName: "Zadejte doménu"
|
||||
general: "Obecně"
|
||||
wallpaper: "Obrázek na pozadí"
|
||||
setWallpaper: "Nastavení obrázku na pozadí"
|
||||
@@ -202,7 +192,6 @@ perHour: "za hodinu"
|
||||
perDay: "za den"
|
||||
stopActivityDelivery: "Přestat zasílat aktivitu"
|
||||
blockThisInstance: "Blokovat tuto instanci"
|
||||
silenceThisInstance: "Utišit tuto instanci"
|
||||
operations: "Operace"
|
||||
software: "Software"
|
||||
version: "Verze"
|
||||
@@ -229,6 +218,7 @@ noUsers: "Žádní uživatelé"
|
||||
editProfile: "Upravit můj profil"
|
||||
noteDeleteConfirm: "Jste si jistí že chcete smazat tuhle poznámku?"
|
||||
pinLimitExceeded: "Nemůžete připnout další poznámky."
|
||||
intro: "Instalace Misskey byla dokončena! Prosím vytvořte admina."
|
||||
done: "Hotovo"
|
||||
processing: "Zpracovávám"
|
||||
preview: "Náhled"
|
||||
@@ -266,6 +256,7 @@ removeAreYouSure: "Jste si jistí že chcete smazat \"{x}\"?"
|
||||
deleteAreYouSure: "Jste si jistí že chcete smazat \"{x}\"?"
|
||||
resetAreYouSure: "Opravdu resetovat?"
|
||||
saved: "Uloženo"
|
||||
messaging: "Zprávy"
|
||||
upload: "Nahrát soubory"
|
||||
keepOriginalUploading: "Ponechat originální obrázek"
|
||||
keepOriginalUploadingDescription: "Uloží původní nahraný obrázek jak je. Pokud je to vypnuté, vygeneruje se zobrazení verze na webu při nahrátí."
|
||||
@@ -278,6 +269,7 @@ uploadFromUrlMayTakeTime: "Může trvat nějakou dobu, dokud nebude dokončeno n
|
||||
explore: "Objevovat"
|
||||
messageRead: "Přečtené"
|
||||
noMoreHistory: "To je vše"
|
||||
startMessaging: "Zahájit chat"
|
||||
nUsersRead: "přečteno {n} uživateli"
|
||||
agreeTo: "Souhlasím s {0}"
|
||||
agree: "Souhlasím"
|
||||
@@ -373,11 +365,8 @@ hcaptcha: "hCaptcha"
|
||||
enableHcaptcha: "Aktivovat hCaptchu"
|
||||
hcaptchaSiteKey: "Klíč stránky"
|
||||
hcaptchaSecretKey: "Tajný Klíč (Secret Key)"
|
||||
mcaptcha: "mCaptcha"
|
||||
enableMcaptcha: "Aktivovat mCaptchu"
|
||||
mcaptchaSiteKey: "Klíč stránky"
|
||||
mcaptchaSecretKey: "Tajný Klíč (Secret Key)"
|
||||
mcaptchaInstanceUrl: "URL mCaptcha serveru"
|
||||
recaptcha: "reCAPTCHA"
|
||||
enableRecaptcha: "Zapnout ReCAPTCHu"
|
||||
recaptchaSiteKey: "Klíč stránky"
|
||||
@@ -456,6 +445,8 @@ retype: "Zadejte znovu"
|
||||
noteOf: "{user} poznámky"
|
||||
quoteAttached: "Citace"
|
||||
quoteQuestion: "Přiložit jako citaci?"
|
||||
noMessagesYet: "Zatím tu nejsou žádné zprávy"
|
||||
newMessageExists: "Máte novou zprávu"
|
||||
onlyOneFileCanBeAttached: "Ke zprávě můžete přiložit jenom jeden soubor"
|
||||
signinRequired: "Přihlašte se, prosím"
|
||||
invitations: "Pozvat"
|
||||
@@ -479,8 +470,6 @@ uiLanguage: "Jazyk uživatelského rozhraní"
|
||||
aboutX: "O {x}"
|
||||
emojiStyle: "Styl emoji"
|
||||
native: "Výchozí"
|
||||
style: "Vzhled"
|
||||
popup: "Vyskakovací okno"
|
||||
showNoteActionsOnlyHover: "Zobrazit akce poznámky jenom při naběhnutí myši"
|
||||
noHistory: "Žádná historie"
|
||||
signinHistory: "Historie přihlášení"
|
||||
@@ -543,7 +532,6 @@ showInPage: "Zobrazit na stránce"
|
||||
popout: "Pop-out"
|
||||
volume: "Hlasitost"
|
||||
masterVolume: "Celková hlasitost"
|
||||
notUseSound: "Zakázat zvuk"
|
||||
details: "Detaily"
|
||||
chooseEmoji: "Vybrat emotikon"
|
||||
unableToProcess: "Operace nebyla dokončena."
|
||||
@@ -726,6 +714,7 @@ thisIsExperimentalFeature: "Tohle je experimentální funkce. Její funkce se m
|
||||
developer: "Vývojář"
|
||||
makeExplorable: "Udělat účet viditelný v \"Objevit\""
|
||||
makeExplorableDescription: "Pokud tohle vypnete, tak se účet přestane zobrazovat v sekci \"Objevit\"."
|
||||
showGapBetweenNotesInTimeline: "Zobrazit mezeru mezi příspěvkama na časové ose"
|
||||
duplicate: "Duplikovat"
|
||||
left: "Vlevo"
|
||||
center: "Uprostřed"
|
||||
@@ -1105,26 +1094,6 @@ sourceCode: "Zdrojový kód"
|
||||
flip: "Otočit"
|
||||
lastNDays: "Posledních {n} dnů"
|
||||
surrender: "Zrušit"
|
||||
postForm: "Formulář pro odeslání"
|
||||
information: "Informace"
|
||||
inMinutes: "Minut"
|
||||
inDays: "Dnů"
|
||||
widgets: "Widgety"
|
||||
presets: "Předvolba"
|
||||
_imageEditing:
|
||||
_vars:
|
||||
filename: "Název souboru"
|
||||
_imageFrameEditor:
|
||||
header: "Nadpis"
|
||||
font: "Písmo"
|
||||
fontSerif: "Serif"
|
||||
fontSansSerif: "Sans Serif"
|
||||
_chat:
|
||||
invitations: "Pozvat"
|
||||
noHistory: "Žádná historie"
|
||||
members: "Členové"
|
||||
home: "Domů"
|
||||
send: "Odeslat"
|
||||
_delivery:
|
||||
stop: "Suspendováno"
|
||||
_type:
|
||||
@@ -1637,6 +1606,7 @@ _theme:
|
||||
header: "Nadpis"
|
||||
navBg: "Pozadí postranního panelu"
|
||||
navFg: "Text na postranním panelu"
|
||||
navHoverFg: "Text na postranním panelu (Hover)"
|
||||
navActive: "Text na postranním panelu (Aktivní)"
|
||||
navIndicator: "Indikátor na postranním panelu"
|
||||
link: "Odkaz"
|
||||
@@ -1658,8 +1628,12 @@ _theme:
|
||||
buttonBg: "Pozadí tlačítka"
|
||||
buttonHoverBg: "Pozadí tlačítka (Hover)"
|
||||
inputBorder: "Ohraničení vstupního pole"
|
||||
driveFolderBg: "Pozadí složky disku"
|
||||
wallpaperOverlay: "Překrytí tapety"
|
||||
badge: "Odznak"
|
||||
messageBg: "Pozadí chatu"
|
||||
accentDarken: "Akcent (Ztmavený)"
|
||||
accentLighten: "Akcent (Zesvětlený)"
|
||||
fgHighlighted: "Zvýrazněný text"
|
||||
_sfx:
|
||||
note: "Poznámky"
|
||||
@@ -1735,7 +1709,6 @@ _permissions:
|
||||
"write:gallery": "Upravit galerii"
|
||||
"read:gallery-likes": "Zobrazit seznam to se mi líbí příspěvků v galerii"
|
||||
"write:gallery-likes": "Upravit seznam to se mi líbí příspěvků v galerii"
|
||||
"write:chat": "Sestavit nebo mazat zprávy chatu"
|
||||
_auth:
|
||||
shareAccessTitle: "Udělovat oprávnění k aplikacím"
|
||||
shareAccess: "Chcete autorizovat \"{name}\" pro přístup k tomuto účtu?"
|
||||
@@ -1831,9 +1804,6 @@ _postForm:
|
||||
replyPlaceholder: "Odpovědět na tuto poznámku..."
|
||||
quotePlaceholder: "Citovat tuto poznámku..."
|
||||
channelPlaceholder: "Zveřejnit příspěvek do kanálu..."
|
||||
_howToUse:
|
||||
visibility_title: "Viditelnost"
|
||||
menu_title: "Menu"
|
||||
_placeholders:
|
||||
a: "Co máte v plánu?"
|
||||
b: "Co se děje kolem vás?"
|
||||
@@ -1913,6 +1883,9 @@ _pages:
|
||||
newPage: "Vytvořit novou stránku"
|
||||
editPage: "Upravit stránku"
|
||||
readPage: "Prohlížení zdroje této stránky"
|
||||
created: "Stránka byla úspěšně vytvořena"
|
||||
updated: "Stránka byla úspěšně aktualizována"
|
||||
deleted: "Stránka byla úspěšně smazána"
|
||||
pageSetting: "Nastavení stránky"
|
||||
nameAlreadyExists: "Zadaná adresa URL stránky již existuje"
|
||||
invalidNameTitle: "Zadaná adresa URL stránky je neplatná"
|
||||
@@ -2017,7 +1990,7 @@ _deck:
|
||||
list: "Seznamy"
|
||||
channel: "Kanály"
|
||||
mentions: "Zmínění"
|
||||
direct: "Přímé poznámky"
|
||||
direct: "Přímý"
|
||||
roleTimeline: "Časová osa role"
|
||||
_dialog:
|
||||
charactersExceeded: "Překročili jste maximální počet znaků! V současné době je na hodnotě {current} z {max}."
|
||||
@@ -2054,26 +2027,3 @@ _reversi:
|
||||
_remoteLookupErrors:
|
||||
_noSuchObject:
|
||||
title: "Nenalezeno"
|
||||
_search:
|
||||
searchScopeAll: "Vše"
|
||||
searchScopeLocal: "Místní"
|
||||
searchScopeUser: "Upřesnit uživatele"
|
||||
_watermarkEditor:
|
||||
opacity: "Průhlednost"
|
||||
scale: "Velikost"
|
||||
text: "Text"
|
||||
position: "Pozice"
|
||||
type: "Typ"
|
||||
image: "Obrázky"
|
||||
advanced: "Pokročilé"
|
||||
_imageEffector:
|
||||
_fxProps:
|
||||
scale: "Velikost"
|
||||
size: "Velikost"
|
||||
offset: "Pozice"
|
||||
color: "Barva"
|
||||
opacity: "Průhlednost"
|
||||
lightness: "Zesvětlit"
|
||||
_qr:
|
||||
showTabTitle: "Zobrazit"
|
||||
raw: "Text"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -162,12 +162,14 @@ imageUrl: "URL εικόνας"
|
||||
remove: "Διαγραφή"
|
||||
removed: "Η διαγραφή ολοκληρώθηκε επιτυχώς"
|
||||
saved: "Αποθηκεύτηκε"
|
||||
messaging: "Συνομιλία"
|
||||
upload: "Ανεβάστε"
|
||||
fromDrive: "Από τον Αποθηκευτικό Χώρο"
|
||||
fromUrl: "Από URL"
|
||||
uploadFromUrl: "Ανεβάστε από URL"
|
||||
explore: "Εξερευνήστε"
|
||||
messageRead: "Διαβάστηκε"
|
||||
startMessaging: "Ξεκινήστε μία συνομιλία"
|
||||
nUsersRead: "διαβάστηκε από {n}"
|
||||
start: "Ας αρχίσουμε"
|
||||
home: "Κεντρικό"
|
||||
@@ -286,15 +288,6 @@ cannotUploadBecauseNoFreeSpace: "Το ανέβασμα απέτυχε λόγω
|
||||
icon: "Εικονίδιο"
|
||||
replies: "Απάντηση"
|
||||
renotes: "Κοινοποίηση σημειώματος"
|
||||
postForm: "Φόρμα δημοσίευσης"
|
||||
information: "Πληροφορίες"
|
||||
widgets: "Μαραφέτια"
|
||||
_imageEditing:
|
||||
_vars:
|
||||
filename: "Όνομα αρχείου"
|
||||
_chat:
|
||||
members: "Μέλη"
|
||||
home: "Κεντρικό"
|
||||
_email:
|
||||
_follow:
|
||||
title: "Έχετε ένα νέο ακόλουθο"
|
||||
@@ -328,7 +321,6 @@ _permissions:
|
||||
"write:notifications": "Διαχειριστείτε τις ειδοποιήσεις σας"
|
||||
"read:pages": "Δείτε τις Σελίδες σας"
|
||||
"write:pages": "Επεξεργαστείτε ή διαγράψτε τις σελίδες σας"
|
||||
"write:chat": "Γράψτε ή διαγράψτε μηνύματα συνομιλίας"
|
||||
_antennaSources:
|
||||
all: "Όλα τα σημειώματα"
|
||||
homeTimeline: "Σημειώματα από μέλη που ακολουθείτε"
|
||||
@@ -357,7 +349,6 @@ _visibility:
|
||||
home: "Κεντρικό"
|
||||
homeDescription: "Δημοσίευση στο κεντρικό χρονολόγιο μόνο"
|
||||
followers: "Ακολουθούν"
|
||||
specified: "Απευθείας σημειώματα"
|
||||
_profile:
|
||||
name: "Όνομα"
|
||||
username: "Όνομα μέλους"
|
||||
@@ -400,14 +391,9 @@ _deck:
|
||||
antenna: "Αντένες"
|
||||
list: "Λίστα"
|
||||
mentions: "Επισημάνσεις"
|
||||
direct: "Απευθείας σημειώματα"
|
||||
_webhookSettings:
|
||||
name: "Όνομα"
|
||||
_moderationLogTypes:
|
||||
suspend: "Αποβολή"
|
||||
_reversi:
|
||||
total: "Σύνολο"
|
||||
_search:
|
||||
searchScopeLocal: "Τοπικό"
|
||||
_watermarkEditor:
|
||||
image: "Εικόνες"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
1100
locales/es-ES.yml
1100
locales/es-ES.yml
File diff suppressed because it is too large
Load Diff
@@ -238,6 +238,7 @@ noUsers: "Il n’y a pas d’utilisateur·rice·s"
|
||||
editProfile: "Modifier votre profil"
|
||||
noteDeleteConfirm: "Êtes-vous sûr·e de vouloir supprimer cette note ?"
|
||||
pinLimitExceeded: "Vous ne pouvez plus épingler d’autres notes."
|
||||
intro: "L’installation de Misskey est terminée ! Veuillez créer un compte administrateur."
|
||||
done: "Terminé"
|
||||
processing: "Traitement en cours"
|
||||
preview: "Aperçu"
|
||||
@@ -276,6 +277,7 @@ deleteAreYouSure: "Êtes-vous sûr·e de vouloir supprimer « {x} » ?"
|
||||
resetAreYouSure: "Voulez-vous réinitialiser ?"
|
||||
areYouSure: "Êtes-vous sûr·e ?"
|
||||
saved: "Enregistré"
|
||||
messaging: "Discuter"
|
||||
upload: "Téléverser"
|
||||
keepOriginalUploading: "Garder l’image d’origine"
|
||||
keepOriginalUploadingDescription: "Conserve la version originale lors du téléchargement d'images. S'il est désactivé, le navigateur génère l'image pour la publication web lors du téléchargement."
|
||||
@@ -288,6 +290,7 @@ uploadFromUrlMayTakeTime: "Le téléversement de votre fichier peut prendre un c
|
||||
explore: "Découvrir"
|
||||
messageRead: "Lu"
|
||||
noMoreHistory: "Il n’y a plus d’historique"
|
||||
startMessaging: "Commencer à discuter"
|
||||
nUsersRead: "Lu par {n} personnes"
|
||||
agreeTo: "J’accepte {0}"
|
||||
agree: "Accepter"
|
||||
@@ -474,6 +477,8 @@ retype: "Confirmation"
|
||||
noteOf: "Notes de {user}"
|
||||
quoteAttached: "Avec citation"
|
||||
quoteQuestion: "Souhaitez-vous ajouter une citation ?"
|
||||
noMessagesYet: "Pas encore de discussion"
|
||||
newMessageExists: "Vous avez un nouveau message"
|
||||
onlyOneFileCanBeAttached: "Vous ne pouvez joindre qu’un seul fichier au message"
|
||||
signinRequired: "Veuillez vous connecter"
|
||||
invitations: "Invitations"
|
||||
@@ -759,6 +764,7 @@ thisIsExperimentalFeature: "Ceci est une fonctionnalité expérimentale. Il y a
|
||||
developer: "Développeur"
|
||||
makeExplorable: "Rendre le compte visible sur la page \"Découvrir\"."
|
||||
makeExplorableDescription: "Si vous désactivez cette option, votre compte n'apparaîtra pas sur la page \"Découvrir\"."
|
||||
showGapBetweenNotesInTimeline: "Afficher un écart entre les notes sur la Timeline"
|
||||
duplicate: "Duliquer"
|
||||
left: "Gauche"
|
||||
center: "Centrer"
|
||||
@@ -1207,7 +1213,9 @@ showAvatarDecorations: "Afficher les décorations d'avatar"
|
||||
releaseToRefresh: "Relâcher pour rafraîchir"
|
||||
refreshing: "Rafraîchissement..."
|
||||
pullDownToRefresh: "Tirer vers le bas pour rafraîchir"
|
||||
disableStreamingTimeline: "Désactiver les mises à jour en temps réel de la ligne du temps"
|
||||
useGroupedNotifications: "Grouper les notifications"
|
||||
signupPendingError: "Un problème est survenu lors de la vérification de votre adresse e-mail. Le lien a peut-être expiré."
|
||||
cwNotationRequired: "Si « Masquer le contenu » est activé, une description doit être fournie."
|
||||
doReaction: "Réagir"
|
||||
code: "Code"
|
||||
@@ -1269,26 +1277,6 @@ prohibitedWordsForNameOfUser: "Mots interdits pour les noms d'utilisateur·rices
|
||||
lockdown: "Verrouiller"
|
||||
pleaseSelectAccount: "Sélectionner un compte"
|
||||
availableRoles: "Rôles disponibles"
|
||||
postForm: "Formulaire de publication"
|
||||
information: "Informations"
|
||||
inMinutes: "min"
|
||||
inDays: "j"
|
||||
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:
|
||||
invitations: "Inviter"
|
||||
noHistory: "Pas d'historique"
|
||||
members: "Membres"
|
||||
home: "Principal"
|
||||
send: "Envoyer"
|
||||
_abuseUserReport:
|
||||
forward: "Transférer"
|
||||
forwardDescription: "Transférer le signalement vers une instance distante en tant qu'anonyme."
|
||||
@@ -1824,6 +1812,7 @@ _theme:
|
||||
header: "Entête"
|
||||
navBg: "Fond de la barre latérale"
|
||||
navFg: "Texte de la barre latérale"
|
||||
navHoverFg: "Texte de la barre latérale (survolé)"
|
||||
navActive: "Texte de la barre latérale (actif)"
|
||||
navIndicator: "Indicateur de barre latérale"
|
||||
link: "Lien"
|
||||
@@ -1845,8 +1834,12 @@ _theme:
|
||||
buttonBg: "Arrière-plan du bouton"
|
||||
buttonHoverBg: "Arrière-plan du bouton (survolé)"
|
||||
inputBorder: "Cadre de la zone de texte"
|
||||
driveFolderBg: "Arrière-plan du dossier de disque"
|
||||
wallpaperOverlay: "Superposition de fond d'écran"
|
||||
badge: "Badge"
|
||||
messageBg: "Arrière plan de la discussion"
|
||||
accentDarken: "Plus sombre"
|
||||
accentLighten: "Plus clair"
|
||||
fgHighlighted: "Texte mis en évidence"
|
||||
_sfx:
|
||||
note: "Nouvelle note"
|
||||
@@ -1956,7 +1949,6 @@ _permissions:
|
||||
"write:admin:unsuspend-user": "Lever la suspension d'un utilisateur"
|
||||
"write:admin:meta": "Gérer les métadonnées de l'instance"
|
||||
"write:admin:roles": "Gérer les rôles"
|
||||
"write:chat": "Gérer les discussions"
|
||||
_auth:
|
||||
shareAccess: "Autoriser \"{name}\" à accéder à votre compte ?"
|
||||
shareAccessAsk: "Voulez-vous vraiment autoriser cette application à accéder à votre compte?"
|
||||
@@ -2046,9 +2038,6 @@ _postForm:
|
||||
replyPlaceholder: "Répondre à cette note ..."
|
||||
quotePlaceholder: "Citez cette note ..."
|
||||
channelPlaceholder: "Publier au canal…"
|
||||
_howToUse:
|
||||
visibility_title: "Visibilité"
|
||||
menu_title: "Menu"
|
||||
_placeholders:
|
||||
a: "Quoi de neuf ?"
|
||||
b: "Il s'est passé quelque chose ?"
|
||||
@@ -2129,6 +2118,9 @@ _pages:
|
||||
newPage: "Créer une page"
|
||||
editPage: "Modifier une page"
|
||||
readPage: "Affichage de la source en cours"
|
||||
created: "La page a été créée !"
|
||||
updated: "La page a été mise à jour !"
|
||||
deleted: "La page a été supprimée"
|
||||
pageSetting: "Paramètres de la Page"
|
||||
nameAlreadyExists: "L'URL de page spécifiée existe déjà"
|
||||
invalidNameTitle: "L'URL de page spécifiée n’est pas valide"
|
||||
@@ -2305,8 +2297,10 @@ _externalResourceInstaller:
|
||||
checkVendorBeforeInstall: "Veuillez confirmer que le distributeur est fiable avant l'installation."
|
||||
_plugin:
|
||||
title: "Voulez-vous installer cette extension ?"
|
||||
metaTitle: "Informations sur l'extension"
|
||||
_theme:
|
||||
title: "Voulez-vous installer ce thème ?"
|
||||
metaTitle: "Informations sur le thème"
|
||||
_meta:
|
||||
base: "Palette de couleurs de base"
|
||||
_vendorInfo:
|
||||
@@ -2346,6 +2340,9 @@ _dataSaver:
|
||||
_avatar:
|
||||
title: "Animation d'avatars"
|
||||
description: "Arrête l'animation d'avatars. Comme les images animées peuvent être plus volumineuses que les images normales, cela permet de réduire davantage le trafic de données."
|
||||
_urlPreview:
|
||||
title: "Vignettes d'aperçu des URL"
|
||||
description: "Les vignettes d'aperçu des URL ne seront plus chargées."
|
||||
_code:
|
||||
title: "Mise en évidence du code"
|
||||
description: "Si la notation de mise en évidence du code est utilisée, par exemple dans la MFM, elle ne sera pas chargée tant qu'elle n'aura pas été tapée. La mise en évidence du code nécessite le chargement du fichier de définition de chaque langue à mettre en évidence, mais comme ces fichiers ne sont plus chargés automatiquement, on peut s'attendre à une réduction du trafic de données."
|
||||
@@ -2370,29 +2367,3 @@ _embedCodeGen:
|
||||
_remoteLookupErrors:
|
||||
_noSuchObject:
|
||||
title: "Non trouvé"
|
||||
_search:
|
||||
searchScopeAll: "Tous"
|
||||
searchScopeLocal: "Local"
|
||||
searchScopeUser: "Spécifier l'utilisateur·rice"
|
||||
_watermarkEditor:
|
||||
driveFileTypeWarn: "Ce fichier n'est pas pris en charge"
|
||||
opacity: "Transparence"
|
||||
scale: "Taille"
|
||||
text: "Texte"
|
||||
position: "Position"
|
||||
type: "Type"
|
||||
image: "Images"
|
||||
advanced: "Avancé"
|
||||
angle: "Angle"
|
||||
_imageEffector:
|
||||
_fxProps:
|
||||
angle: "Angle"
|
||||
scale: "Taille"
|
||||
size: "Taille"
|
||||
offset: "Position"
|
||||
color: "Couleur"
|
||||
opacity: "Transparence"
|
||||
lightness: "Clair"
|
||||
_qr:
|
||||
showTabTitle: "Affichage"
|
||||
raw: "Texte"
|
||||
|
||||
230
locales/generateDTS.js
Normal file
230
locales/generateDTS.js
Normal file
@@ -0,0 +1,230 @@
|
||||
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.createInterfaceDeclaration(
|
||||
[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),
|
||||
),
|
||||
],
|
||||
undefined,
|
||||
[
|
||||
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');
|
||||
}
|
||||
@@ -5,13 +5,9 @@ introMisskey: "Selamat datang! Misskey adalah perangkat mikroblog tercatu bersif
|
||||
poweredByMisskeyDescription: "{name} adalah sebuah layanan (instance) yang menggunakan platform sumber terbuka <b>Misskey</b>."
|
||||
monthAndDay: "{day} {month}"
|
||||
search: "Penelusuran"
|
||||
reset: "Reset"
|
||||
notifications: "Notifikasi"
|
||||
username: "Nama Pengguna"
|
||||
password: "Kata sandi"
|
||||
initialPasswordForSetup: "Kata sandi untuk memulai konfigurasi awal"
|
||||
initialPasswordIsIncorrect: "Kata sandi untuk memulai konfigurasi awal salah."
|
||||
initialPasswordForSetupDescription: "Jika Anda menginstal Misskey sendiri, gunakan kata sandi yang Anda masukkan di berkas konfigurasi.\nJika Anda menggunakan layanan hosting Misskey, gunakan kata sandi yang diberikan.\nJika Anda belum mengatur kata sandi, biarkan kosong dan lanjutkan."
|
||||
forgotPassword: "Lupa Kata Sandi"
|
||||
fetchingAsApObject: "Mengambil data dari Fediverse..."
|
||||
ok: "OK"
|
||||
@@ -49,7 +45,6 @@ pin: "Sematkan ke profil"
|
||||
unpin: "Lepas sematan dari profil"
|
||||
copyContent: "Salin konten"
|
||||
copyLink: "Salin tautan"
|
||||
copyRemoteLink: "Salin tautan jarak jauh"
|
||||
copyLinkRenote: "Salin tautan renote"
|
||||
delete: "Hapus"
|
||||
deleteAndEdit: "Hapus dan sunting"
|
||||
@@ -217,10 +212,8 @@ perDay: "per Hari"
|
||||
stopActivityDelivery: "Berhenti mengirim aktivitas"
|
||||
blockThisInstance: "Blokir instansi ini"
|
||||
silenceThisInstance: "Senyapkan instansi ini"
|
||||
mediaSilenceThisInstance: "Server media senyap"
|
||||
operations: "Tindakan"
|
||||
software: "Perangkat lunak"
|
||||
softwareName: "Nama Perangkat Lunak"
|
||||
version: "Versi"
|
||||
metadata: "Metadata"
|
||||
withNFiles: "{n} berkas"
|
||||
@@ -240,8 +233,6 @@ blockedInstances: "Instansi terblokir"
|
||||
blockedInstancesDescription: "Daftar nama host dari instansi yang diperlukan untuk diblokir. Instansi yang didaftarkan tidak akan dapat berkomunikasi dengan instansi ini."
|
||||
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."
|
||||
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"
|
||||
muteAndBlock: "Bisukan / Blokir"
|
||||
mutedUsers: "Pengguna yang dibisukan"
|
||||
@@ -250,6 +241,7 @@ noUsers: "Tidak ada pengguna"
|
||||
editProfile: "Sunting profil"
|
||||
noteDeleteConfirm: "Apakah kamu yakin ingin menghapus catatan ini?"
|
||||
pinLimitExceeded: "Kamu tidak dapat menyematkan catatan lagi"
|
||||
intro: "Instalasi Misskey telah selesai! Mohon untuk membuat pengguna admin."
|
||||
done: "Selesai"
|
||||
processing: "Memproses"
|
||||
preview: "Pratinjau"
|
||||
@@ -288,6 +280,7 @@ deleteAreYouSure: "Apakah kamu yakin ingin menghapus \"{x}\"?"
|
||||
resetAreYouSure: "Yakin mau atur ulang?"
|
||||
areYouSure: "Apakah kamu yakin?"
|
||||
saved: "Telah disimpan"
|
||||
messaging: "Pesan"
|
||||
upload: "Unggah"
|
||||
keepOriginalUploading: "Simpan gambar asli"
|
||||
keepOriginalUploadingDescription: "Simpan gambar yang diunggah sebagaimana gambar aslinya. Bila dimatikan, versi tampilan web akan dihasilkan pada saat diunggah."
|
||||
@@ -300,7 +293,7 @@ uploadFromUrlMayTakeTime: "Membutuhkan beberapa waktu hingga pengunggahan selesa
|
||||
explore: "Jelajahi"
|
||||
messageRead: "Telah dibaca"
|
||||
noMoreHistory: "Tidak ada sejarah lagi"
|
||||
startChat: "Kirim pesan"
|
||||
startMessaging: "Mulai mengirim pesan"
|
||||
nUsersRead: "Dibaca oleh {n}"
|
||||
agreeTo: "Saya setuju kepada {0}"
|
||||
agree: "Setuju"
|
||||
@@ -400,7 +393,7 @@ enableHcaptcha: "Nyalakan hCaptcha"
|
||||
hcaptchaSiteKey: "Site Key"
|
||||
hcaptchaSecretKey: "Secret Key"
|
||||
mcaptcha: "mCaptcha"
|
||||
enableMcaptcha: ""
|
||||
enableMcaptcha: "Nyalakan mCaptcha"
|
||||
mcaptchaSiteKey: "Site key"
|
||||
mcaptchaSecretKey: "Secret Key"
|
||||
mcaptchaInstanceUrl: "URL instansi mCaptcha"
|
||||
@@ -488,6 +481,8 @@ noteOf: "Catatan milik {user}"
|
||||
quoteAttached: "Dikutip"
|
||||
quoteQuestion: "Apakah kamu ingin menambahkan kutipan?"
|
||||
attachAsFileQuestion: "Teks dalam papan klip terlalu panjang. Apakah kamu ingin melampirkannya sebagai berkas teks?"
|
||||
noMessagesYet: "Tidak ada pesan"
|
||||
newMessageExists: "Kamu mendapatkan pesan baru"
|
||||
onlyOneFileCanBeAttached: "Kamu hanya dapat melampirkan satu berkas ke dalam pesan"
|
||||
signinRequired: "Silahkan login"
|
||||
invitations: "Undangan"
|
||||
@@ -513,7 +508,6 @@ emojiStyle: "Gaya emoji"
|
||||
native: "Native"
|
||||
menuStyle: "Gaya menu"
|
||||
style: "Gaya"
|
||||
popup: "Pemunculan"
|
||||
showNoteActionsOnlyHover: "Hanya tampilkan aksi catatan saat ditunjuk"
|
||||
showReactionsCount: "Lihat jumlah reaksi dalam catatan"
|
||||
noHistory: "Tidak ada riwayat"
|
||||
@@ -570,7 +564,6 @@ showFixedPostForm: "Tampilkan form posting di atas lini masa"
|
||||
showFixedPostFormInChannel: "Tampilkan form posting di atas lini masa (Kanal)"
|
||||
withRepliesByDefaultForNewlyFollowed: "Termasuk balasan dari pengguna baru yang diikuti pada lini masa secara bawaan"
|
||||
newNoteRecived: "Kamu mendapat catatan baru"
|
||||
newNote: "Catatan baru"
|
||||
sounds: "Bunyi"
|
||||
sound: "Bunyi"
|
||||
listen: "Dengarkan"
|
||||
@@ -772,6 +765,7 @@ thisIsExperimentalFeature: "Fitur ini eksperimental. Fungsionalitas dari fitur i
|
||||
developer: "Pengembang"
|
||||
makeExplorable: "Buat akun tampil di \"Jelajahi\""
|
||||
makeExplorableDescription: "Jika kamu mematikan ini, akun kamu tidak akan muncul di menu \"Jelajahi\""
|
||||
showGapBetweenNotesInTimeline: "Tampilkan jarak diantara catatan pada lini masa"
|
||||
duplicate: "Duplikat"
|
||||
left: "Kiri"
|
||||
center: "Tengah"
|
||||
@@ -1033,7 +1027,6 @@ permissionDeniedError: "Operasi ditolak"
|
||||
permissionDeniedErrorDescription: "Akun ini tidak memiliki izin untuk melakukan aksi ini."
|
||||
preset: "Prasetel"
|
||||
selectFromPresets: "Pilih dari prasetel"
|
||||
custom: "Penyesuaian"
|
||||
achievements: "Pencapaian"
|
||||
gotInvalidResponseError: "Respon peladen tidak valid"
|
||||
gotInvalidResponseErrorDescription: "Peladen tidak dapat dijangkau atau sedang dalam perawatan. Mohon coba lagi nanti."
|
||||
@@ -1053,7 +1046,7 @@ disableFederationConfirmWarn: "Mematikan federasi tidak membuat kiriman menjadi
|
||||
disableFederationOk: "Matikan federasi"
|
||||
invitationRequiredToRegister: "Instansi ini dalam mode undangan-saja. Kamu harus memasukkan kode undangan yang valid untuk mendaftar."
|
||||
emailNotSupported: "Instansi ini tidak mendukung mengirim surel"
|
||||
postToTheChannel: "Buat Catatan ke Kanal"
|
||||
postToTheChannel: "Catat ke kanal"
|
||||
cannotBeChangedLater: "Hal ini nantinya tidak dapat diubah lagi."
|
||||
reactionAcceptance: "Penerimaan reaksi"
|
||||
likeOnly: "Hanya suka"
|
||||
@@ -1116,7 +1109,6 @@ preservedUsernamesDescription: "Daftar nama pengguna yang dicadangkan dipisah de
|
||||
createNoteFromTheFile: "Buat catatan dari berkas ini"
|
||||
archive: "Arsipkan"
|
||||
archived: "Diarsipkan"
|
||||
unarchive: "Batalkan pengarsipan"
|
||||
channelArchiveConfirmTitle: "Yakin untuk mengarsipkan {name}?"
|
||||
channelArchiveConfirmDescription: "Kanal yang diarsipkan tidak akan muncul pada daftar kanal atau hasil pencarian. Postingan baru juga tidak dapat ditambahkan lagi."
|
||||
thisChannelArchived: "Kanal ini telah diarsipkan."
|
||||
@@ -1218,7 +1210,9 @@ showAvatarDecorations: "Tampilkan dekorasi avatar"
|
||||
releaseToRefresh: "Lepaskan untuk memuat ulang"
|
||||
refreshing: "Sedang memuat ulang..."
|
||||
pullDownToRefresh: "Tarik ke bawah untuk memuat ulang"
|
||||
disableStreamingTimeline: "Nonaktifkan pembaharuan lini masa real-time"
|
||||
useGroupedNotifications: "Tampilkan notifikasi secara dikelompokkan"
|
||||
signupPendingError: "Terdapat masalah ketika memverifikasi alamat surel. Tautan kemungkinan telah kedaluwarsa."
|
||||
cwNotationRequired: "Jika \"Sembunyikan konten\" diaktifkan, deskripsi harus disediakan."
|
||||
doReaction: "Tambahkan reaksi"
|
||||
code: "Kode"
|
||||
@@ -1258,7 +1252,6 @@ noDescription: "Tidak ada deskripsi"
|
||||
alwaysConfirmFollow: "Selalu konfirmasi ketika mengikuti"
|
||||
inquiry: "Hubungi kami"
|
||||
tryAgain: "Silahkan coba lagi."
|
||||
sensitiveMediaRevealConfirm: "Media sensitif. Apakah ingin melihat?"
|
||||
createdLists: "Senarai yang dibuat"
|
||||
createdAntennas: "Antena yang dibuat"
|
||||
fromX: "Dari {x}"
|
||||
@@ -1266,52 +1259,8 @@ noteOfThisUser: "Catatan oleh pengguna ini"
|
||||
clipNoteLimitExceeded: "Klip ini tak bisa ditambahi lagi catatan."
|
||||
performance: "Kinerja"
|
||||
modified: "Diubah"
|
||||
discard: "Buang"
|
||||
thereAreNChanges: "Ada {n} perubahan"
|
||||
signinWithPasskey: "Masuk dengan kunci sandi"
|
||||
unknownWebAuthnKey: "Kunci sandi tidak terdaftar."
|
||||
passkeyVerificationFailed: "Verifikasi kunci sandi gagal."
|
||||
passkeyVerificationSucceededButPasswordlessLoginDisabled: "Verifikasi kunci sandi berhasil, namun pemasukan tanpa sandi dinonaktifkan."
|
||||
messageToFollower: "Pesan kepada pengikut"
|
||||
prohibitedWordsForNameOfUser: "Kata yang dilarang untuk nama pengguna"
|
||||
lockdown: "Kuncitara"
|
||||
noName: "Tidak ada nama"
|
||||
skip: "Lewati"
|
||||
paste: "Tempel"
|
||||
emojiPalette: "Palet emoji"
|
||||
postForm: "Buat catatan"
|
||||
information: "Informasi"
|
||||
chat: "Obrolan"
|
||||
directMessage: "Obrolan pengguna"
|
||||
right: "Kanan"
|
||||
bottom: "Bawah"
|
||||
top: "Atas"
|
||||
advice: "Saran"
|
||||
inMinutes: "menit"
|
||||
inDays: "hari"
|
||||
widgets: "Widget"
|
||||
presets: "Prasetel"
|
||||
_imageEditing:
|
||||
_vars:
|
||||
filename: "Nama berkas"
|
||||
_imageFrameEditor:
|
||||
header: "Header"
|
||||
font: "Font"
|
||||
fontSerif: "Serif"
|
||||
fontSansSerif: "Sans-serif"
|
||||
_chat:
|
||||
invitations: "Undang"
|
||||
history: "Riwayat obrolan"
|
||||
noHistory: "Tidak ada riwayat"
|
||||
members: "Anggota"
|
||||
home: "Beranda"
|
||||
send: "Kirim"
|
||||
chatWithThisUser: "Obrolan pengguna"
|
||||
_settings:
|
||||
webhook: "Webhook"
|
||||
contentsUpdateFrequency: "Frekuensi pembaruan konten"
|
||||
_preferencesProfile:
|
||||
profileName: "Nama profil"
|
||||
_abuseUserReport:
|
||||
accept: "Setuju"
|
||||
reject: "Tolak"
|
||||
@@ -1976,6 +1925,7 @@ _theme:
|
||||
header: "Header"
|
||||
navBg: "Latar belakang bilah samping"
|
||||
navFg: "Teks bilah samping"
|
||||
navHoverFg: "Teks bilah samping (Mengambang)"
|
||||
navActive: "Teks bilah samping (Aktif)"
|
||||
navIndicator: "Indikator bilah samping"
|
||||
link: "Tautan"
|
||||
@@ -1997,15 +1947,18 @@ _theme:
|
||||
buttonBg: "Latar belakang tombol"
|
||||
buttonHoverBg: "Latar belakang tombol (Mengambang)"
|
||||
inputBorder: "Batas bidang masukan"
|
||||
driveFolderBg: "Latar belakang folder drive"
|
||||
wallpaperOverlay: "Lapisan wallpaper"
|
||||
badge: "Lencana"
|
||||
messageBg: "Latar belakang obrolan"
|
||||
accentDarken: "Aksen (Gelap)"
|
||||
accentLighten: "Aksen (Terang)"
|
||||
fgHighlighted: "Teks yang disorot"
|
||||
_sfx:
|
||||
note: "Catatan"
|
||||
noteMy: "Catatan (Saya)"
|
||||
notification: "Notifikasi"
|
||||
reaction: "Ketika memilih reaksi"
|
||||
chatMessage: "Obrolan pengguna"
|
||||
_soundSettings:
|
||||
driveFile: "Menggunakan berkas audio dalam Drive"
|
||||
driveFileWarn: "Pilih berkas audio dari Drive"
|
||||
@@ -2152,7 +2105,6 @@ _permissions:
|
||||
"read:clip-favorite": "Lihat klip yang difavoritkan"
|
||||
"read:federation": "Mendapatkan data federasi"
|
||||
"write:report-abuse": "Melaporkan pelanggaran"
|
||||
"write:chat": "Buat atau hapus obrolan"
|
||||
_auth:
|
||||
shareAccessTitle: "Mendapatkan ijin akses aplikasi"
|
||||
shareAccess: "Apakah kamu ingin mengijinkan \"{name}\" untuk mengakses akun ini?"
|
||||
@@ -2208,7 +2160,6 @@ _widgets:
|
||||
chooseList: "Pilih daftar"
|
||||
clicker: "Pengeklik"
|
||||
birthdayFollowings: "Pengguna yang merayakan hari ulang tahunnya hari ini"
|
||||
chat: "Obrolan pengguna"
|
||||
_cw:
|
||||
hide: "Sembunyikan"
|
||||
show: "Lihat konten"
|
||||
@@ -2251,9 +2202,6 @@ _postForm:
|
||||
replyPlaceholder: "Balas ke catatan ini..."
|
||||
quotePlaceholder: "Kutip catatan ini..."
|
||||
channelPlaceholder: "Posting ke kanal"
|
||||
_howToUse:
|
||||
visibility_title: "Visibilitas"
|
||||
menu_title: "Menu"
|
||||
_placeholders:
|
||||
a: "Sedang apa kamu saat ini?"
|
||||
b: "Apa yang terjadi di sekitarmu?"
|
||||
@@ -2337,6 +2285,9 @@ _pages:
|
||||
newPage: "Buat halaman baru"
|
||||
editPage: "Sunting halaman"
|
||||
readPage: "Lihat sumber kode aktif"
|
||||
created: "Halaman berhasil dibuat"
|
||||
updated: "Halaman berhasil diperbaharui!"
|
||||
deleted: "Halaman telah dihapus"
|
||||
pageSetting: "Pengaturan Halaman"
|
||||
nameAlreadyExists: "URL Halaman yang ditentukan sudah ada"
|
||||
invalidNameTitle: "URL Halaman yang ditentukan tidak valid"
|
||||
@@ -2453,14 +2404,13 @@ _deck:
|
||||
main: "Utama"
|
||||
widgets: "Widget"
|
||||
notifications: "Notifikasi"
|
||||
tl: "Beranda"
|
||||
tl: "Lini masa"
|
||||
antenna: "Antena"
|
||||
list: "Daftar"
|
||||
channel: "Kanal"
|
||||
mentions: "Sebutan"
|
||||
direct: "Langsung"
|
||||
roleTimeline: "Lini masa peran"
|
||||
chat: "Obrolan pengguna"
|
||||
_dialog:
|
||||
charactersExceeded: "Kamu telah melebihi batas karakter maksimum! Saat ini pada {current} dari {max}."
|
||||
charactersBelow: "Kamu berada di bawah batas minimum karakter! Saat ini pada {current} dari {min}."
|
||||
@@ -2542,8 +2492,10 @@ _externalResourceInstaller:
|
||||
checkVendorBeforeInstall: "Pastikan sumber dari sumber daya ini terpercaya sebelum melakukan pemasangan."
|
||||
_plugin:
|
||||
title: "Apakah kamu ingin memasang plugin ini?"
|
||||
metaTitle: "Informasi plugin"
|
||||
_theme:
|
||||
title: "Apakah kamu ingin memasang tema ini?"
|
||||
metaTitle: "Informasi tema"
|
||||
_meta:
|
||||
base: "Skema warna dasar"
|
||||
_vendorInfo:
|
||||
@@ -2583,6 +2535,9 @@ _dataSaver:
|
||||
_avatar:
|
||||
title: "Gambar avatar"
|
||||
description: "Hentikan animasi gambar avatar. Gambar animasi dapat berukuran lebih besar dari gambar biasa, berpotensi pada pengurangan lalu lintas data lebih jauh."
|
||||
_urlPreview:
|
||||
title: "Gambar kecil URL pratinjau"
|
||||
description: "Gambar kecil URL pratinjau tidak akan dimuat lagi."
|
||||
_code:
|
||||
title: "Penyorotan kode"
|
||||
description: "Jika notasi penyorotan kode digunakan di MFM, dll. Fungsi tersebut tidak akan dimuat apabila tidak diketuk. Penyorotan sintaks membutuhkan pengunduhan berkas definisi penyorotan untuk setiap bahasa pemrograman. Oleh sebab itu, menonaktifkan pemuatan otomatis dari berkas ini dilakukan untuk mengurangi jumlah komunikasi data."
|
||||
@@ -2658,29 +2613,3 @@ _mediaControls:
|
||||
_remoteLookupErrors:
|
||||
_noSuchObject:
|
||||
title: "Tidak dapat ditemukan"
|
||||
_search:
|
||||
searchScopeAll: "Semua"
|
||||
searchScopeLocal: "Lokal"
|
||||
searchScopeUser: "Pengguna spesifik"
|
||||
_watermarkEditor:
|
||||
driveFileTypeWarn: "Berkas ini tidak didukung"
|
||||
opacity: "Opasitas"
|
||||
scale: "Ukuran"
|
||||
text: "Teks"
|
||||
position: "Posisi"
|
||||
type: "Tipe"
|
||||
image: "Gambar"
|
||||
advanced: "Tingkat lanjut"
|
||||
angle: "Sudut"
|
||||
_imageEffector:
|
||||
_fxProps:
|
||||
angle: "Sudut"
|
||||
scale: "Ukuran"
|
||||
size: "Ukuran"
|
||||
offset: "Posisi"
|
||||
color: "Warna"
|
||||
opacity: "Opasitas"
|
||||
lightness: "Menerangkan"
|
||||
_qr:
|
||||
showTabTitle: "Tampilkan"
|
||||
raw: "Teks"
|
||||
|
||||
2754
packages/i18n/src/autogen/locale.ts → locales/index.d.ts
vendored
2754
packages/i18n/src/autogen/locale.ts → locales/index.d.ts
vendored
File diff suppressed because it is too large
Load Diff
92
locales/index.js
Normal file
92
locales/index.js
Normal file
@@ -0,0 +1,92 @@
|
||||
/**
|
||||
* 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',
|
||||
'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();
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -5,7 +5,6 @@ introMisskey: "ようお越し!Misskeyは、オープンソースの分散型
|
||||
poweredByMisskeyDescription: "{name}は、オープンソースのプラットフォーム<b>Misskey</b>のサーバーのひとつなんやで。"
|
||||
monthAndDay: "{month}月 {day}日"
|
||||
search: "探す"
|
||||
reset: "リセット"
|
||||
notifications: "通知"
|
||||
username: "ユーザー名"
|
||||
password: "パスワード"
|
||||
@@ -49,7 +48,6 @@ pin: "ピン留めしとく"
|
||||
unpin: "ピン留めやめる"
|
||||
copyContent: "内容をコピー"
|
||||
copyLink: "リンクをコピー"
|
||||
copyRemoteLink: "リモートのリンクをコピーするで?"
|
||||
copyLinkRenote: "リノートのリンクをコピーするで?"
|
||||
delete: "ほかす"
|
||||
deleteAndEdit: "ほかして直す"
|
||||
@@ -220,7 +218,6 @@ silenceThisInstance: "サーバーサイレンスすんで?"
|
||||
mediaSilenceThisInstance: "サーバーをメディアサイレンス"
|
||||
operations: "操作"
|
||||
software: "ソフトウェア"
|
||||
softwareName: "ソフトウェア名"
|
||||
version: "バージョン"
|
||||
metadata: "メタデータ"
|
||||
withNFiles: "{n}個のファイル"
|
||||
@@ -235,7 +232,7 @@ clearQueue: "キューをほかす"
|
||||
clearQueueConfirmTitle: "キューをほかしとこか?"
|
||||
clearQueueConfirmText: "未配達の投稿は配送されんなるで。ふつうこの操作を行う必要は無いんやけどな。"
|
||||
clearCachedFiles: "キャッシュをほかす"
|
||||
clearCachedFilesConfirm: "キャッシュされとるリモートファイルを全部ほかしてええか?"
|
||||
clearCachedFilesConfirm: "キャッシュされとるリモートファイルをみんなほかしてええか?"
|
||||
blockedInstances: "ブロックしたサーバー"
|
||||
blockedInstancesDescription: "ブロックしたいサーバーのホストを改行で区切って設定してな。ブロックされてもうたサーバーとはもう金輪際やり取りできひんくなるで。"
|
||||
silencedInstances: "サーバーサイレンスされてんねん"
|
||||
@@ -251,9 +248,9 @@ noUsers: "ユーザーはおらん"
|
||||
editProfile: "プロフィールをいじる"
|
||||
noteDeleteConfirm: "このノートをほかしてええか?"
|
||||
pinLimitExceeded: "これ以上ピン留めできひん"
|
||||
intro: "Misskeyのインストールが完了したで!管理者アカウントを作ってや。"
|
||||
done: "でけた"
|
||||
processing: "処理しとる"
|
||||
preprocessing: "準備中"
|
||||
preview: "プレビュー"
|
||||
default: "デフォルト"
|
||||
defaultValueIs: "デフォルト: {value}"
|
||||
@@ -290,6 +287,7 @@ deleteAreYouSure: "「{x}」はほかしてええか?"
|
||||
resetAreYouSure: "リセットしてええん?"
|
||||
areYouSure: "いいん?"
|
||||
saved: "保存したで!"
|
||||
messaging: "チャット"
|
||||
upload: "アップロード"
|
||||
keepOriginalUploading: "オリジナル画像のまんま"
|
||||
keepOriginalUploadingDescription: "画像を上げるときにオリジナル版のまんまにするで。オフにしたら、上げたときにブラウザでWeb公開用の画像を生成するで。 "
|
||||
@@ -301,14 +299,13 @@ uploadFromUrlRequested: "アップロードしたい言うといたで"
|
||||
uploadFromUrlMayTakeTime: "アップロード終わるんにちょい時間かかるかもしれへんわ。"
|
||||
explore: "みつける"
|
||||
messageRead: "もう読んだ"
|
||||
readAllChatMessages: "メッセージを全部読んだことにしとく"
|
||||
noMoreHistory: "これより昔のんはあらへんで"
|
||||
startChat: "チャットを始めよか"
|
||||
startMessaging: "チャットやるで"
|
||||
nUsersRead: "{n}人が読んでもうた"
|
||||
agreeTo: "{0}に同意したで"
|
||||
agree: "せやな"
|
||||
agreeBelow: "下記に同意するわ"
|
||||
basicNotesBeforeCreateAccount: "よう読んどいてや"
|
||||
agreeBelow: "下記に同意したる"
|
||||
basicNotesBeforeCreateAccount: "よう読んでやってや"
|
||||
termsOfService: "使うための決め事"
|
||||
start: "始める"
|
||||
home: "ホーム"
|
||||
@@ -328,13 +325,11 @@ dark: "ダーク"
|
||||
lightThemes: "デイゲーム"
|
||||
darkThemes: "ナイトゲーム"
|
||||
syncDeviceDarkMode: "デバイスのダークモードと一緒にする"
|
||||
switchDarkModeManuallyWhenSyncEnabledConfirm: "「{x}」がオンになってるで。同期切って手動でモード切り替える?"
|
||||
drive: "ドライブ"
|
||||
fileName: "ファイル名"
|
||||
selectFile: "ファイル選んでや"
|
||||
selectFiles: "ファイル選んでや"
|
||||
selectFolder: "フォルダ選んでや"
|
||||
unselectFolder: "フォルダーの選択を解除"
|
||||
selectFolders: "フォルダ選んでや"
|
||||
fileNotSelected: "ファイルが選択されてへんで"
|
||||
renameFile: "ファイル名をいらう"
|
||||
@@ -425,13 +420,13 @@ antennaSource: "受信ソース(このソースは食われへん)"
|
||||
antennaKeywords: "受信キーワード"
|
||||
antennaExcludeKeywords: "除外キーワード"
|
||||
antennaExcludeBots: "Botアカウントを除外"
|
||||
antennaKeywordsDescription: "スペースで区切ったらAND指定で、改行で区切ったらOR指定や"
|
||||
antennaKeywordsDescription: "スペースで区切ったるとAND指定で、改行で区切ったるとOR指定や"
|
||||
notifyAntenna: "新しいノートを通知すんで"
|
||||
withFileAntenna: "なんか添付されたノートだけ"
|
||||
excludeNotesInSensitiveChannel: "センシティブなチャンネルのノートは入れんとくわ"
|
||||
enableServiceworker: "ブラウザにプッシュ通知が行くようにする"
|
||||
antennaUsersDescription: "ユーザー名を改行で区切ったってな"
|
||||
caseSensitive: "大文字と小文字は別もんや"
|
||||
withReplies: "返信も入れたって"
|
||||
connectedTo: "次のアカウントに繋がっとるで"
|
||||
notesAndReplies: "投稿と返信"
|
||||
withFiles: "ファイル付いとる"
|
||||
@@ -474,9 +469,9 @@ newPasswordIs: "今度のパスワードは「{password}」や"
|
||||
reduceUiAnimation: "UIの動きやアニメーションを少なする"
|
||||
share: "わけわけ"
|
||||
notFound: "見つからへんね"
|
||||
notFoundDescription: "言われたURLのページはなかったで。"
|
||||
notFoundDescription: "言われたURLにはまるページはなかったで。"
|
||||
uploadFolder: "とりあえずアップロードしたやつ置いとく所"
|
||||
markAsReadAllNotifications: "通知はもう全部読んだわ"
|
||||
markAsReadAllNotifications: "通知はもう全て読んだわっ"
|
||||
markAsReadAllUnreadNotes: "投稿は全て読んだわっ"
|
||||
markAsReadAllTalkMessages: "チャットはもうぜんぶ読んだわっ"
|
||||
help: "ヘルプ"
|
||||
@@ -494,6 +489,8 @@ noteOf: "{user}はんのノート"
|
||||
quoteAttached: "引用付いとるで"
|
||||
quoteQuestion: "引用として添付してもええか?"
|
||||
attachAsFileQuestion: "クリップボードのテキストが長すぎるからテキストファイルとして添付してもええか?"
|
||||
noMessagesYet: "まだチャットはあらへんで"
|
||||
newMessageExists: "新しいメッセージがきたで"
|
||||
onlyOneFileCanBeAttached: "ごめんな、メッセージに添付できるファイルはひとつだけなんよ。"
|
||||
signinRequired: "ログインしてくれへん?"
|
||||
signinOrContinueOnRemote: "続行するには、お使いのサーバーに移動するか、このサーバーに登録・ログインする必要があるで"
|
||||
@@ -557,7 +554,7 @@ showFeaturedNotesInTimeline: "タイムラインにおすすめのノートを
|
||||
objectStorage: "オブジェクトストレージ"
|
||||
useObjectStorage: "オブジェクトストレージを使う"
|
||||
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"
|
||||
objectStorageBucketDesc: "使ってるサービスのbucket名を選んでな"
|
||||
objectStoragePrefix: "Prefix"
|
||||
@@ -574,19 +571,17 @@ objectStorageSetPublicRead: "アップロードした時に'public-read'を設
|
||||
s3ForcePathStyleDesc: "s3ForcePathStyleを使たらバケット名をURLのホスト名やなくてパスの一部として必ず指定させるようになるで。セルフホストされたMinioとかを使うてるんやったら有効にせなあかん場合があるで。"
|
||||
serverLogs: "サーバーログ"
|
||||
deleteAll: "全部ほかす"
|
||||
showFixedPostForm: "タイムラインの上の方で投稿できるようにするわ"
|
||||
showFixedPostForm: "タイムラインの上の方で投稿できるようにやってくれへん?"
|
||||
showFixedPostFormInChannel: "タイムラインの上の方で投稿できるようにするわ(チャンネル)"
|
||||
withRepliesByDefaultForNewlyFollowed: "フォローする時、デフォルトで返信をタイムラインに含むようにしよか"
|
||||
newNoteRecived: "新しいノートがあるで"
|
||||
newNote: "新しいノートがあるで"
|
||||
sounds: "音"
|
||||
sound: "音"
|
||||
notificationSoundSettings: "通知音の設定"
|
||||
listen: "聴く"
|
||||
none: "なし"
|
||||
showInPage: "ページで表示"
|
||||
popout: "ポップアウト"
|
||||
volume: "音のでかさ"
|
||||
volume: "やかましさ"
|
||||
masterVolume: "全体のやかましさ"
|
||||
notUseSound: "音出さへん"
|
||||
useSoundOnlyWhenActive: "Misskeyがアクティブなときだけ音出す"
|
||||
@@ -602,7 +597,7 @@ nothing: "あらへん"
|
||||
installedDate: "インストールした日時"
|
||||
lastUsedDate: "最後に使った日時"
|
||||
state: "状態"
|
||||
sort: "並び替え"
|
||||
sort: "仕分ける"
|
||||
ascendingOrder: "小さい順"
|
||||
descendingOrder: "大きい順"
|
||||
scratchpad: "スクラッチパッド"
|
||||
@@ -662,9 +657,9 @@ useBlurEffectForModal: "モーダルにぼかし効果を使用"
|
||||
useFullReactionPicker: "フルフルのツッコミピッカーを使う"
|
||||
width: "幅"
|
||||
height: "高さ"
|
||||
large: "でかい"
|
||||
medium: "ふつう"
|
||||
small: "ちいさい"
|
||||
large: "大"
|
||||
medium: "中"
|
||||
small: "小"
|
||||
generateAccessToken: "アクセストークンの発行"
|
||||
permission: "権限"
|
||||
adminPermission: "管理者権限"
|
||||
@@ -689,19 +684,14 @@ smtpSecure: "SMTP 接続に暗黙的なSSL/TLSを使用する"
|
||||
smtpSecureInfo: "STARTTLS使っとる時はオフにしてや。"
|
||||
testEmail: "配信テスト"
|
||||
wordMute: "ワードミュート"
|
||||
wordMuteDescription: "指定した語句が入ってるノートをちっさくするで。ちっさくなったノートをクリックしたら中身を見れるで。"
|
||||
hardWordMute: "ハードワードミュート"
|
||||
showMutedWord: "ミュートされたワードを表示するで"
|
||||
hardWordMuteDescription: "指定した語句が入ってるノートを隠すで。ワードミュートとちゃうて、ノートは完全に表示されんようになるで。"
|
||||
regexpError: "正規表現エラー"
|
||||
regexpErrorDescription: "{tab}ワードミュートの{line}行目の正規表現にエラーが出てきたで:"
|
||||
instanceMute: "サーバーミュート"
|
||||
userSaysSomething: "{name}が何か言うとるわ"
|
||||
userSaysSomethingAbout: "{name}が「{word}」についてなんか言うてたで"
|
||||
makeActive: "使うで"
|
||||
display: "表示"
|
||||
copy: "コピー"
|
||||
copiedToClipboard: "クリップボードにコピーされたで"
|
||||
metrics: "メトリクス"
|
||||
overview: "概要"
|
||||
logs: "ログ"
|
||||
@@ -723,7 +713,7 @@ behavior: "動作"
|
||||
sample: "サンプル"
|
||||
abuseReports: "通報"
|
||||
reportAbuse: "通報"
|
||||
reportAbuseRenote: "リノートの苦情出す"
|
||||
reportAbuseRenote: "リノート苦情だすで?"
|
||||
reportAbuseOf: "{name}を通報する"
|
||||
fillAbuseReportDescription: "細かい通報理由を書いてなー。対象ノートがある時はそのURLも書いといてなー。"
|
||||
abuseReported: "無事内容が送信されたみたいやで。おおきに〜。"
|
||||
@@ -773,7 +763,6 @@ lockedAccountInfo: "フォローを承認制にしとっても、ノートの公
|
||||
alwaysMarkSensitive: "デフォルトでメディアを閲覧注意にするで"
|
||||
loadRawImages: "添付画像のサムネイルをオリジナル画質にするで"
|
||||
disableShowingAnimatedImages: "アニメーション画像を再生せんとくで"
|
||||
disableShowingAnimatedImages_caption: "この設定を変えてもアニメーション画像が再生されへん時は、ブラウザとかOSのアクセシビリティ設定とか省電力設定の方が悪さしてるかもしれへんで。"
|
||||
highlightSensitiveMedia: "きわどいことをめっっちゃわかりやすくする"
|
||||
verificationEmailSent: "無事確認のメールを送れたで。メールに書いてあるリンクにアクセスして、設定を完了してなー。"
|
||||
notSet: "未設定"
|
||||
@@ -790,6 +779,7 @@ thisIsExperimentalFeature: "これは実験的な機能やから、仕様が変
|
||||
developer: "開発者やで"
|
||||
makeExplorable: "アカウントを見つけやすくするで"
|
||||
makeExplorableDescription: "オフにすると、「みつける」にアカウントが載らんくなるで。"
|
||||
showGapBetweenNotesInTimeline: "タイムラインのノートを離して表示するで"
|
||||
duplicate: "複製"
|
||||
left: "左"
|
||||
center: "真ん中"
|
||||
@@ -797,7 +787,6 @@ wide: "広い"
|
||||
narrow: "狭い"
|
||||
reloadToApplySetting: "設定はページリロード後に反映されるで。今リロードしとくか?"
|
||||
needReloadToApply: "反映には再起動せなあかんで"
|
||||
needToRestartServerToApply: "反映にはサーバーを再起動せなあかんのよ。"
|
||||
showTitlebar: "タイトルバーを見せる"
|
||||
clearCache: "キャッシュをほかす"
|
||||
onlineUsersCount: "{n}人が起きとるで"
|
||||
@@ -883,7 +872,7 @@ startingperiod: "始めた期間"
|
||||
memo: "メモ"
|
||||
priority: "優先度"
|
||||
high: "高い"
|
||||
middle: "ふつう"
|
||||
middle: "中"
|
||||
low: "低い"
|
||||
emailNotConfiguredWarning: "メアドの設定がされてへんで。"
|
||||
ratio: "比率"
|
||||
@@ -985,7 +974,6 @@ document: "ドキュメント"
|
||||
numberOfPageCache: "ページ、どんだけキャッシュすんの?"
|
||||
numberOfPageCacheDescription: "増やすと使いやすくなるけど、負荷とメモリ使用量が増えてくで。一長一短やな。"
|
||||
logoutConfirm: "ログアウトしまっか?"
|
||||
logoutWillClearClientData: "ログアウトするとクライアントの設定情報がブラウザから消されてまうで。再ログイン時に設定情報を復元できるようにするためには、設定の自動バックアップを有効にするとええで。"
|
||||
lastActiveDate: "最後に使った日時"
|
||||
statusbar: "ステータスバー"
|
||||
pleaseSelect: "選んだってやー"
|
||||
@@ -1004,7 +992,6 @@ failedToUpload: "アップロードに失敗してもうたわ…"
|
||||
cannotUploadBecauseInappropriate: "きわどい内容を含むかもしれへんって言われたからアップロードできへんわ。"
|
||||
cannotUploadBecauseNoFreeSpace: "ドライブがもうパンパンやからアップロードできへんわ。"
|
||||
cannotUploadBecauseExceedsFileSizeLimit: "ファイルが思うたよりも大きいさかいアップロードできへんでこれ。"
|
||||
cannotUploadBecauseUnallowedFileType: "許可されてへんファイル種別やからアップロードできへんっぽい。"
|
||||
beta: "ベータ"
|
||||
enableAutoSensitive: "自動できわどいか判断する"
|
||||
enableAutoSensitiveDescription: "使える時は、機械学習を使って自動でメディアにNSFWフラグを設定するで。この機能をオフにしても、サーバーによっては自動で設定されることがあるで。"
|
||||
@@ -1020,9 +1007,6 @@ pushNotificationAlreadySubscribed: "プッシュ通知はオンになってる
|
||||
pushNotificationNotSupported: "ブラウザかサーバーがプッシュ通知に対応してないみたいやで。"
|
||||
sendPushNotificationReadMessage: "通知やメッセージが既読になったらプッシュ通知を消すで"
|
||||
sendPushNotificationReadMessageCaption: "あんたの端末の電池使う量が増えるかもしれん。"
|
||||
pleaseAllowPushNotification: "ブラウザの通知設定を許可してな"
|
||||
browserPushNotificationDisabled: "通知の送信権限が取れんかったわ"
|
||||
browserPushNotificationDisabledDescription: "今 {serverName} から通知を送るための権限が無いから、ブラウザの設定で通知を許可してもっかい試してな。"
|
||||
windowMaximize: "最大化"
|
||||
windowMinimize: "最小化"
|
||||
windowRestore: "元に戻す"
|
||||
@@ -1059,7 +1043,6 @@ permissionDeniedError: "操作が拒否されてもうた。"
|
||||
permissionDeniedErrorDescription: "このアカウントはこれやったらアカンって。"
|
||||
preset: "プリセット"
|
||||
selectFromPresets: "プリセットから選ぶ"
|
||||
custom: "カスタム"
|
||||
achievements: "実績"
|
||||
gotInvalidResponseError: "サーバー黙っとるわ、知らんけど"
|
||||
gotInvalidResponseErrorDescription: "サーバーいま日曜日。またきて月曜日。"
|
||||
@@ -1098,7 +1081,6 @@ prohibitedWordsDescription2: "スペースで区切るとAND指定、キーワ
|
||||
hiddenTags: "見えてへんハッシュタグ"
|
||||
hiddenTagsDescription: "設定したタグを最近流行りのとこに見えんようにすんで。複数設定するときは改行で区切ってな。"
|
||||
notesSearchNotAvailable: "なんかノート探せへん。"
|
||||
usersSearchNotAvailable: "ユーザーを探すことはできへんみたいや。"
|
||||
license: "ライセンス"
|
||||
unfavoriteConfirm: "ほんまに気に入らんの?"
|
||||
myClips: "自分のクリップ"
|
||||
@@ -1249,8 +1231,9 @@ showAvatarDecorations: "アイコンのデコレーション映す"
|
||||
releaseToRefresh: "離したらリロード"
|
||||
refreshing: "リロードしとる"
|
||||
pullDownToRefresh: "引っ張ってリロードするで"
|
||||
disableStreamingTimeline: "タイムラインのリアルタイム更新をやめるで"
|
||||
useGroupedNotifications: "通知をグループ分けして出すで"
|
||||
emailVerificationFailedError: "メアド確認してたらなんか変なことなったわ。リンクの期限切れてるかもしれん。"
|
||||
signupPendingError: "メアド確認してたらなんか変なことなったわ。リンクの期限切れてるかもしれん。"
|
||||
cwNotationRequired: "「内容を隠す」んやったら注釈書かなアカンで。"
|
||||
doReaction: "ツッコむで"
|
||||
code: "コード"
|
||||
@@ -1318,124 +1301,6 @@ lockdown: "ロックダウン"
|
||||
pleaseSelectAccount: "アカウント選んでや"
|
||||
availableRoles: "使えるロール"
|
||||
acknowledgeNotesAndEnable: "注意事項をわかった上でオンにする。"
|
||||
federationSpecified: "このサーバーはホワイトリスト連合で運用されてるで。管理者が指定したサーバー以外とはやり取りできひんで。"
|
||||
federationDisabled: "このサーバーは連合が無効化されてるで。他のサーバーのユーザーとやり取りすることはできひんで。"
|
||||
confirmOnReact: "ツッコむときに確認とる"
|
||||
reactAreYouSure: "\" {emoji} \" でツッコむ?"
|
||||
markAsSensitiveConfirm: "このメディアをきわどい扱いしときますか?"
|
||||
unmarkAsSensitiveConfirm: "このメディアはやっぱきわどくなかったってことでええんか?"
|
||||
noName: "名前はあらへんで"
|
||||
preferenceSyncConflictTitle: "サーバーに設定値があるみたいやわ"
|
||||
preferenceSyncConflictText: "同期が有効にされた設定項目は設定値をサーバーに保存するねんけど、この設定項目はサーバーに保存されたやつがあるみたいやわ。どないするん?"
|
||||
preferenceSyncConflictChoiceMerge: "ガッチャンコしよか"
|
||||
preferenceSyncConflictChoiceCancel: "同期の有効化はやめとくわ"
|
||||
postForm: "投稿フォーム"
|
||||
information: "情報"
|
||||
directMessage: "チャットしよか"
|
||||
migrateOldSettings: "旧設定情報をお引っ越し"
|
||||
migrateOldSettings_description: "通常これは自動で行われるはずなんやけど、なんかの理由で上手く移行できへんかったときは手動で移行処理をポチっとできるで。今の設定情報は上書きされるで。"
|
||||
settingsMigrating: "設定を移行しとるで。ちょっと待っとってな... (後で、設定→その他→旧設定情報を移行 で手動で移行することもできるで)"
|
||||
driveAboutTip: "ドライブでは、今までアップロードしたファイルがずらーっと表示されるで。<br>\nノートにファイルをもっかいのっけたり、あとで投稿するファイルをその辺に置いとくこともできるねん。<br>\n<b>ファイルをほかすと、前にそのファイルをのっけた全部の場所(ノート、ページ、アバター、バナー等)からも見えんくなるから気いつけてな。</b><br>\nフォルダを作って整理することもできるで。"
|
||||
turnItOn: "オンにしとこ"
|
||||
turnItOff: "オフでええわ"
|
||||
emojiUnmute: "絵文字ミュートやめたる"
|
||||
unmuteX: "{x}のミュートやめたる"
|
||||
redisplayAllTips: "全部の「ヒントとコツ」をもっかい見して"
|
||||
hideAllTips: "「ヒントとコツ」は全部表示せんでええ"
|
||||
defaultImageCompressionLevel_description: "低くすると画質は保てるんやけど、ファイルサイズが増えるで。<br>高くするとファイルサイズは減らせるんやけど、画質が落ちるで。"
|
||||
defaultCompressionLevel_description: "低くすると品質は保てるんやけど、ファイルサイズが増えるで。<br>高くするとファイルサイズは減らせるんやけど、品質が落ちるで。"
|
||||
inMinutes: "分"
|
||||
inDays: "日"
|
||||
safeModeEnabled: "セーフモードがオンになってるで"
|
||||
pluginsAreDisabledBecauseSafeMode: "セーフモードがオンやから、プラグインは全部無効化されてるで。"
|
||||
customCssIsDisabledBecauseSafeMode: "セーフモードがオンやから、カスタムCSSは適用されてへんで。"
|
||||
themeIsDefaultBecauseSafeMode: "セーフモードがオンの間はデフォルトのテーマを使うで。セーフモードをオフにれば元に戻るで。"
|
||||
thankYouForTestingBeta: "ベータ版使うてくれておおきに!"
|
||||
widgets: "ウィジェット"
|
||||
deviceInfoDescription: "なんか技術的なことで分からんこと聞くときは、下の情報も一緒に書いてもらえると、こっちも分かりやすいし、はよ直ると思います。"
|
||||
youAreAdmin: "あんた、管理者やで"
|
||||
presets: "プリセット"
|
||||
_imageEditing:
|
||||
_vars:
|
||||
filename: "ファイル名"
|
||||
_imageFrameEditor:
|
||||
tip: "画像にフレームとかメタデータを入れたラベルとかを付け足していい感じにできるで。"
|
||||
header: "ヘッダー"
|
||||
font: "フォント"
|
||||
fontSerif: "セリフ"
|
||||
fontSansSerif: "サンセリフ"
|
||||
quitWithoutSaveConfirm: "保存せずに終わってもええんか?"
|
||||
failedToLoadImage: "あかん、画像読み込まれへんわ"
|
||||
_chat:
|
||||
noMessagesYet: "まだメッセージはあらへんで"
|
||||
individualChat_description: "特定のユーザーとサシでチャットできるで。"
|
||||
roomChat_description: "複数人でチャットできるで。\nあと、個人チャットを許可してへんユーザーとでも、相手がええって言うならチャットできるで。"
|
||||
inviteUserToChat: "ユーザーを招待してチャットを始めてみ"
|
||||
invitations: "来てや"
|
||||
noInvitations: "招待はあらへんで"
|
||||
noHistory: "履歴はないわ。"
|
||||
noRooms: "ルームはあらへんで"
|
||||
join: "入る"
|
||||
ignore: "ほっとく"
|
||||
leave: "グループから抜ける"
|
||||
members: "メンバーはん"
|
||||
home: "ホーム"
|
||||
send: "送信"
|
||||
deleteRoom: "ルームをほかす"
|
||||
chatNotAvailableForThisAccountOrServer: "このサーバー、もしくはこのアカウントでチャットが有効にされてへんで。"
|
||||
chatIsReadOnlyForThisAccountOrServer: "このサーバー、もしくはこのアカウントでチャットが読み取り専用になっとるわ。新しく書き込んだり、チャットルームを作ったり参加したりはできへんで。"
|
||||
chatNotAvailableInOtherAccount: "相手のアカウントでチャット機能が使えんくなっとるみたいやわ。"
|
||||
cannotChatWithTheUser: "このユーザーとのチャットを開始できへんみたいやわ"
|
||||
cannotChatWithTheUser_description: "チャットが使えん状態になっとるか、相手がチャットを開放してへんみたいやわ。"
|
||||
youAreNotAMemberOfThisRoomButInvited: "あんたはこのルームの参加者ちゃうけど、招待が届いとるで。参加するんやったら、招待を承認してな。"
|
||||
doYouAcceptInvitation: "招待を承認してもええんか?"
|
||||
chatWithThisUser: "チャットしよか"
|
||||
thisUserAllowsChatOnlyFromFollowers: "このユーザーはフォロワーからのチャットしか受け付けとらんみたいやわ。"
|
||||
thisUserAllowsChatOnlyFromFollowing: "このユーザーは、このユーザーがフォローしとるユーザーからのチャットしか受け付けとらんみたいやわ。"
|
||||
thisUserAllowsChatOnlyFromMutualFollowing: "このユーザーは相互フォローのユーザーからのチャットしか受け付けとらんみたいやわ。"
|
||||
thisUserNotAllowedChatAnyone: "このユーザーは誰からのチャットも受け付けとらんみたいやわ。"
|
||||
chatAllowedUsers: "チャットしてもええ相手"
|
||||
chatAllowedUsers_note: "自分からチャットメッセージを送った相手やったらこの設定に関わらずチャットできるで。"
|
||||
_chatAllowedUsers:
|
||||
followers: "自分のフォロワーだけ"
|
||||
following: "自分がフォローしとるユーザーだけ"
|
||||
mutual: "相互フォローのユーザーだけ"
|
||||
none: "誰もかもあかん"
|
||||
_emojiPalette:
|
||||
enableSyncBetweenDevicesForPalettes: "パレットのデバイス間同期をつけとく"
|
||||
paletteForMain: "メインで使うパレット"
|
||||
paletteForReaction: "リアクションで使うパレット"
|
||||
_settings:
|
||||
driveBanner: "ドライブの管理と設定、使用量の確認、ファイルをアップロードするときの設定ができるで。"
|
||||
pluginBanner: "プラグインを使うとクライアントの機能を拡張できるねん。プラグインのインストール、個別の設定と管理ができるで。"
|
||||
notificationsBanner: "サーバーから受け取る通知の種類とか範囲、プッシュ通知の設定ができるで。"
|
||||
webhook: "Webhook"
|
||||
serviceConnectionBanner: "外部のアプリ・サービスと連携するのに使うとるアクセストークンとかWebhookの管理と設定ができるで。"
|
||||
accountDataBanner: "アカウントデータのアーカイブをエクスポート/インポートして管理できるで。"
|
||||
muteAndBlockBanner: "見せんでええコンテンツの設定とか、特定のユーザーからのアクションを制限する設定と管理ができるで。"
|
||||
accessibilityBanner: "クライアントの視覚や動作に関わるパーソナライズをして、よりええ感じに使えるように設定できるで。"
|
||||
privacyBanner: "コンテンツの公開範囲、見つけやすさ、フォローの承認制とかアカウントのプライバシーに関わる設定ができるで。"
|
||||
securityBanner: "パスワード、ログイン方法、認証アプリ、パスキーとかアカウントのセキュリティに関わる設定ができるで。"
|
||||
preferencesBanner: "好みに応じた、クライアントの全体的な動作の設定ができるで。"
|
||||
appearanceBanner: "好みに応じた、クライアントの見た目・表示方法に関わる設定ができるで。"
|
||||
soundsBanner: "クライアントで流すサウンドの設定ができるで。"
|
||||
makeEveryTextElementsSelectable: "全部のテキスト要素を選択できるようにする"
|
||||
makeEveryTextElementsSelectable_description: "これをつけると、場面によったら使いにくくなるかもしれん。"
|
||||
useStickyIcons: "アイコンがスクロールにひっつくようにする"
|
||||
enablePullToRefresh_description: "マウスやったら、ホイールを押し込みながらドラッグしてな。"
|
||||
realtimeMode_description: "サーバーと接続を確立して、リアルタイムでコンテンツを更新するで。通信量とバッテリーの消費が多くなるかもしれへん。"
|
||||
contentsUpdateFrequency_description: "高いほどリアルタイムにコンテンツが更新されるんやけど、そのぶんパフォーマンスが落ちるし、通信量とバッテリーの消費も増えるねん。"
|
||||
contentsUpdateFrequency_description2: "リアルタイムモードをつけてるんやったら、この設定がどうであれリアルタイムでコンテンツが更新されるで。"
|
||||
emojiPaletteBanner: "絵文字ピッカーに置いとくプリセットをパレットっていうので登録したり、ピッカーの見た目を変えたりできるで。"
|
||||
_preferencesProfile:
|
||||
profileNameDescription: "このデバイスはなんて呼んだらええんや?"
|
||||
_preferencesBackup:
|
||||
noBackupsFoundTitle: "バックアップが見つからへんね"
|
||||
noBackupsFoundDescription: "自動で作られたバックアップは見つからんかったけど、バックアップファイルを手動で保存してるんやったら、それをインポートして復元できるで。"
|
||||
selectBackupToRestore: "復元するバックアップを選んでや"
|
||||
youNeedToNameYourProfileToEnableAutoBackup: "自動バックアップを有効するんやったらプロファイル名の設定が必要やな。"
|
||||
autoPreferencesBackupIsNotEnabledForThisDevice: "このデバイスで設定の自動バックアップは有効になってへんで。"
|
||||
backupFound: "設定のバックアップがあるみたいやわ"
|
||||
_accountSettings:
|
||||
requireSigninToViewContents: "ログインしてもらってからコンテンツ見てもらう"
|
||||
requireSigninToViewContentsDescription1: "あなたが作成した全部のノートとかのコンテンツを見れるようにするのにログインがいるようにするで。クローラーにいろいろ収集されるんを防げるかもしれん。"
|
||||
@@ -1444,9 +1309,8 @@ _accountSettings:
|
||||
makeNotesFollowersOnlyBefore: "昔のノートをフォロワーだけに見てもらう"
|
||||
makeNotesFollowersOnlyBeforeDescription: "この機能が有効になってる間は、設定された日時より前、それか設定された時間が経ったノートがフォロワーのみ見れるようになるで。無効に戻すと、ノートの公開状態も戻るで。"
|
||||
makeNotesHiddenBefore: "昔のノートを見れんようにする"
|
||||
makeNotesHiddenBeforeDescription: "この機能が有効になってる間は、設定された日時より前、それか設定された時間が経ったノートがあんただけ見れるようになるで。無効に戻すと、ノートの公開状態も戻るで。"
|
||||
makeNotesHiddenBeforeDescription: "この機能が有効になってる間は、設定された日時より前、それか設定された時間が経ったノートがフォロワーのみ見れるようになるで。無効に戻すと、ノートの公開状態も戻るで。"
|
||||
mayNotEffectForFederatedNotes: "リモートサーバーに連合されたノートには効果が及ばんかもしれん。"
|
||||
mayNotEffectSomeSituations: "これらの制限は簡易的なものやで。リモートサーバーでの閲覧とかモデレーション時とか、一部のシチュエーションでは適用されへんかもしれん。"
|
||||
notesHavePassedSpecifiedPeriod: "決めた時間が経ったノート"
|
||||
notesOlderThanSpecifiedDateAndTime: "決めた日時より前のノート"
|
||||
_abuseUserReport:
|
||||
@@ -1465,7 +1329,6 @@ _delivery:
|
||||
manuallySuspended: "手動停止中"
|
||||
goneSuspended: "サーバー削除のため停止中"
|
||||
autoSuspendedForNotResponding: "サーバー応答せえへんから停止中"
|
||||
softwareSuspended: "配信停止中のソフトウェアやから停止中"
|
||||
_bubbleGame:
|
||||
howToPlay: "遊び方"
|
||||
hold: "ホールド"
|
||||
@@ -1520,7 +1383,7 @@ _initialTutorial:
|
||||
description: "ここでは、Misskeyのカンタンな使い方とか機能を確かめれんで。"
|
||||
_note:
|
||||
title: "ノートってなんや?"
|
||||
description: "Misskeyでの投稿は「ノート」って呼ばれてんで。ノートは順々にタイムラインに載ってて、リアルタイムで新しくなってくで。"
|
||||
description: "Misskeyでの投稿は「ノート」って呼ばれてんで。ノートは順々にタイムラインに載ってて、リアルタイムで新しくなってってんで。"
|
||||
reply: "返信もできるで。返信の返信もできるから、スレッドっぽく会話をそのまま続けれもするで。"
|
||||
renote: "そのノートを自分のタイムラインに流して共有できるで。テキスト入れて引用してもええな。"
|
||||
reaction: "ツッコミをつけることもできるで。細かいことは次のページや。"
|
||||
@@ -1540,7 +1403,7 @@ _initialTutorial:
|
||||
social: "ホームタイムラインの投稿もローカルタイムラインのも一緒に見れるで。"
|
||||
global: "繋がってる他の全サーバーからの投稿が見れるで。"
|
||||
description2: "それぞれのタイムラインは、いつでも画面上で切り替えられんねん。覚えとき。"
|
||||
description3: "その他にも、リストタイムラインとかチャンネルタイムラインとかがあんねん。詳しいのは{link}を見ときや。"
|
||||
description3: "その他にも、リストタイムラインとかチャンネルタイムラインとかがあんねん。詳しいのは{link}を見とき。"
|
||||
_postNote:
|
||||
title: "ノートの投稿設定"
|
||||
description1: "Misskeyにノートを投稿するとき、いろんなオプションが付けれるで。投稿画面はこんな感じや。"
|
||||
@@ -1576,7 +1439,7 @@ _timelineDescription:
|
||||
home: "ホームタイムラインは、あんたがフォローしとるアカウントの投稿だけ見れるで。"
|
||||
local: "ローカルタイムラインは、このサーバーにおる全員の投稿を見れるで。"
|
||||
social: "ソーシャルタイムラインは、ホームタイムラインの投稿もローカルタイムラインのも一緒に見れるで。"
|
||||
global: "グローバルタイムラインは、繋がっとる他のサーバーの投稿、全部ひっくるめて見れるで。"
|
||||
global: "グローバルタイムラインは、繋がっとる他のサーバーの投稿、全部ひっくるめて見れんで。"
|
||||
_serverRules:
|
||||
description: "新規登録前に見せる、サーバーのカンタンなルールを決めるで。内容は使うための決め事の要約がええと思うわ。"
|
||||
_serverSettings:
|
||||
@@ -1592,21 +1455,11 @@ _serverSettings:
|
||||
fanoutTimelineDbFallback: "データベースにフォールバックする"
|
||||
fanoutTimelineDbFallbackDescription: "有効にしたら、タイムラインがキャッシュん中に入ってないときにDBにもっかい問い合わせるフォールバック処理ってのをやっとくで。切ったらフォールバック処理をやらんからサーバーはもっと軽くなんねんけど、タイムラインの取得範囲がちょっと減るで。"
|
||||
reactionsBufferingDescription: "有効にしたら、リアクション作るときのパフォーマンスがすっごい上がって、データベースへの負荷が減るで。代わりに、Redisのメモリ使用は増えるで。"
|
||||
remoteNotesCleaning_description: "つけると、参照されてへん古いリモートの投稿を定期的にクリーンアップしてデータベースの肥大化を抑えてくれるで。"
|
||||
inquiryUrl: "問い合わせ先URL"
|
||||
inquiryUrlDescription: "サーバー運営者へのお問い合わせフォームのURLや、運営者の連絡先等が記載されたWebページのURLを指定するで。"
|
||||
openRegistration: "アカウントの作成をオープンにする"
|
||||
openRegistrationWarning: "登録を解放するのはリスクあるで。サーバーをいっつも監視して、なんか起きたらすぐに対応できるんやったら、オンにしてもええと思うけどな。"
|
||||
openRegistrationWarning: "登録を解放するのはリスクが伴うで。サーバーをいっつも監視して、なんか起きたらすぐに対応できるんやったら、オンにしてもええと思う。"
|
||||
thisSettingWillAutomaticallyOffWhenModeratorsInactive: "一定期間モデレーターがおらんかったら、スパムを防ぐためにこの設定は勝手に切られるで。"
|
||||
deliverSuspendedSoftwareDescription: "脆弱性とかの理由で、サーバーのソフトウェアの名前とバージョンの範囲を決めて配信を止められるで。このバージョン情報はサーバーが提供したものやから、信頼性は保証されへん。バージョン指定には semver の範囲指定が使えるねんけど、>= 2024.3.1と指定すると 2024.3.1-custom.0 みたいなカスタムバージョンが含まれへんから、>= 2024.3.1-0 みたいに prerelease を指定するとええかもしれへんな。"
|
||||
singleUserMode_description: "このサーバーを使うとるんが自分だけなんやったら、このモードを有効にすると動作がええ感じになるで。"
|
||||
signToActivityPubGet_description: "通常はつけといてな。連合の通信に関わる問題があるんやったら、無効にすると改善するかもしれへんけど、逆にサーバーによっては通信ができんくなることがあるで。"
|
||||
proxyRemoteFiles_description: "つけると、リモートのファイルをプロキシして提供するで。画像のサムネイル生成とかユーザーのプライバシー保護にええな。"
|
||||
allowExternalApRedirect_description: "つけると、他のサーバーがうちのサーバーを通して第三者のコンテンツを照会できるようになるんやけど、コンテンツのなりすましが発生するかもしれへん。"
|
||||
userGeneratedContentsVisibilityForVisitor_description: "モデレーションが行き届きにくい不適切なリモートコンテンツとかが、うちのサーバー経由で図らずもインターネットに公開されてまうことによるトラブルを防止できたりするで。"
|
||||
userGeneratedContentsVisibilityForVisitor_description2: "サーバーで受け取ったリモートのコンテンツを含め、サーバー内の全部のコンテンツを何でもかんでもインターネットに公開するのはリスクを伴うねん。特に、分散型の特性を知らん閲覧者にとっては、リモートのコンテンツやったとしてもサーバー内で作られたコンテンツやと誤認してまうかもしれへんから、注意が必要やな。"
|
||||
restartServerSetupWizardConfirm_title: "サーバーの初期設定ウィザードをやり直すん?"
|
||||
restartServerSetupWizardConfirm_text: "現在の一部の設定はリセットされるで。"
|
||||
_accountMigration:
|
||||
moveFrom: "別のアカウントからこのアカウントに引っ越す"
|
||||
moveFromSub: "別のアカウントへエイリアスを作る"
|
||||
@@ -1903,7 +1756,6 @@ _role:
|
||||
descriptionOfIsExplorable: "オンにしたらロールの面子一覧が「みつける」で公開されるし、ロールのタイムラインが使えるようになるで。"
|
||||
displayOrder: "表示順"
|
||||
descriptionOfDisplayOrder: "数がでかいほど、UI上で先に表示されるで。"
|
||||
preserveAssignmentOnMoveAccount_description: "つけると、このロールがのっかったアカウントが引っ越したときに、引っ越し先アカウントにもこのロールがのっかるようになるで。"
|
||||
canEditMembersByModerator: "モデレーターがメンバーいじるのを許す"
|
||||
descriptionOfCanEditMembersByModerator: "オンにすると、管理者だけやなくてモデレーターもこのロールにユーザーを入れたり抜いたりできるで。オフにすると管理者だけしかやれへんくなるで。"
|
||||
priority: "優先度"
|
||||
@@ -1944,8 +1796,6 @@ _role:
|
||||
canImportFollowing: "フォローのインポートを許す"
|
||||
canImportMuting: "ミュートのインポートを許す"
|
||||
canImportUserLists: "リストのインポートを許す"
|
||||
uploadableFileTypes_caption: "MIMEタイプを指定してや。改行で区切って複数指定もできるし、アスタリスク(*)でワイルドカード指定もできるで。(例: image/*)"
|
||||
uploadableFileTypes_caption2: "ファイルによっては種別がわからんこともあるで。そないなファイルを許可するんやったら {x} を指定に追加してな。"
|
||||
_condition:
|
||||
roleAssignedTo: "マニュアルロールにアサイン済み"
|
||||
isLocal: "ローカルユーザー"
|
||||
@@ -1991,7 +1841,7 @@ _signup:
|
||||
emailSent: "さっき入れたメアド({email})宛に確認メールを送ったで。メールに書かれたリンク押してアカウント作るの終わらしてな。\nメールの認証リンクの期限は30分や。"
|
||||
_accountDelete:
|
||||
accountDelete: "アカウントの削除"
|
||||
mayTakeTime: "アカウント消すんはサーバーに負荷かかるんやって。やから、作ったコンテンツとか上げたファイルの数が多いと消し終わるまでに時間がかかるかもしれんわ。"
|
||||
mayTakeTime: "アカウント消すんはサーバーが重いんやって。やから作ったコンテンツとか上げたファイルの数が多いと消し終わるまでに時間がかかるかもしれへん。"
|
||||
sendEmail: "アカウントの消し終わるときは、登録してたメアドに通知するで。"
|
||||
requestAccountDelete: "アカウント削除頼む"
|
||||
started: "削除処理が始まったで。"
|
||||
@@ -2141,11 +1991,12 @@ _theme:
|
||||
header: "ヘッダー"
|
||||
navBg: "サイドバーの背景"
|
||||
navFg: "サイドバーの文字"
|
||||
navHoverFg: "サイドバー文字(ホバー)"
|
||||
navActive: "サイドバー文字(アクティブ)"
|
||||
navIndicator: "サイドバーのインジケーター"
|
||||
link: "リンク"
|
||||
hashtag: "ハッシュタグ"
|
||||
mention: "あんた宛て"
|
||||
mention: "メンション"
|
||||
mentionMe: "うち宛てのメンション"
|
||||
renote: "Renote"
|
||||
modalBg: "モーダルの背景"
|
||||
@@ -2162,15 +2013,18 @@ _theme:
|
||||
buttonBg: "ボタンの背景"
|
||||
buttonHoverBg: "ボタンの背景 (ホバー)"
|
||||
inputBorder: "入力ボックスの縁取り"
|
||||
driveFolderBg: "ドライブフォルダーの背景"
|
||||
wallpaperOverlay: "壁紙のオーバーレイ"
|
||||
badge: "バッジ"
|
||||
messageBg: "チャットの背景"
|
||||
accentDarken: "アクセント (暗め)"
|
||||
accentLighten: "アクセント (明るめ)"
|
||||
fgHighlighted: "強調されとる文字"
|
||||
_sfx:
|
||||
note: "ノート"
|
||||
noteMy: "ノート(自分)"
|
||||
notification: "通知"
|
||||
reaction: "ツッコミ選んどるとき"
|
||||
chatMessage: "チャットしよか"
|
||||
_soundSettings:
|
||||
driveFile: "ドライブん中の音使う"
|
||||
driveFileWarn: "ドライブん中のファイル選びや"
|
||||
@@ -2317,7 +2171,6 @@ _permissions:
|
||||
"read:clip-favorite": "クリップのいいね見る"
|
||||
"read:federation": "連合の情報取得"
|
||||
"write:report-abuse": "違反報告"
|
||||
"write:chat": "チャットを操作するで"
|
||||
_auth:
|
||||
shareAccessTitle: "アプリへのアクセス許してやったらどうや"
|
||||
shareAccess: "「{name}」がアカウントにアクセスすることを許可してええか?"
|
||||
@@ -2331,7 +2184,6 @@ _auth:
|
||||
scopeUser: "以下のユーザーとしていじってるで"
|
||||
pleaseLogin: "アプリにアクセスさせるんやったら、ログインしてや。"
|
||||
byClickingYouWillBeRedirectedToThisUrl: "アクセスを許したら、自動で下のURLに遷移するで"
|
||||
alreadyAuthorized: "このアプリはもうアクセスを許可してるみたいやで。"
|
||||
_antennaSources:
|
||||
all: "みんなのノート"
|
||||
homeTimeline: "フォローしとるユーザーのノート"
|
||||
@@ -2377,7 +2229,6 @@ _widgets:
|
||||
chooseList: "リストを選ぶ"
|
||||
clicker: "クリッカー"
|
||||
birthdayFollowings: "今日誕生日のツレ"
|
||||
chat: "チャットしよか"
|
||||
_cw:
|
||||
hide: "隠す"
|
||||
show: "続き見して!"
|
||||
@@ -2417,19 +2268,9 @@ _visibility:
|
||||
disableFederation: "連合なし"
|
||||
disableFederationDescription: "他サーバーへは送らんとくわ"
|
||||
_postForm:
|
||||
quitInspiteOfThereAreUnuploadedFilesConfirm: "アップロードされてへんファイルがあるんやけど、ほかしてフォームを閉じてもええんか?"
|
||||
uploaderTip: "ファイルはまだアップロードされてへんで。ファイルのメニューから、リネームとか画像のクロップ、ウォーターマークをのっける、圧縮するかどうかなんかを設定できるで。ファイルはノートを投稿するときに自動でアップロードされるで。"
|
||||
replyPlaceholder: "このノートに返信..."
|
||||
quotePlaceholder: "このノートを引用..."
|
||||
channelPlaceholder: "チャンネルに投稿..."
|
||||
_howToUse:
|
||||
toolbar_description: "ファイルとかアンケートを付けたり、注釈とかハッシュタグを書いたり、絵文字とかメンションとかを付け足したりできるで。"
|
||||
account_description: "投稿するアカウントを変えたり、アカウントに保存した下書きとか予約投稿とかを見れるで。"
|
||||
visibility_title: "公開範囲"
|
||||
visibility_description: "ノートを誰に見せたいかはここで切り替えてな。"
|
||||
menu_title: "メニュー"
|
||||
menu_description: "下書きに保存したり、投稿の予約したり、リアクションの受け入れ設定とか…なんか色々できるで。"
|
||||
submit_description: "ノートを投稿するときはここ押してな。Ctrl + Enter / Cmd + Enter でも投稿できるで。"
|
||||
_placeholders:
|
||||
a: "いまどないしとるん?"
|
||||
b: "何かあったん?"
|
||||
@@ -2516,6 +2357,9 @@ _pages:
|
||||
newPage: "ページを作る"
|
||||
editPage: "ページの編集"
|
||||
readPage: "ソースを表示中"
|
||||
created: "ページを作成したで"
|
||||
updated: "ページを更新したで"
|
||||
deleted: "ページを削除したで"
|
||||
pageSetting: "ページ設定"
|
||||
nameAlreadyExists: "指定されたページURLはもうあるみたいや"
|
||||
invalidNameTitle: "正しくないページURLみたいやで"
|
||||
@@ -2575,12 +2419,9 @@ _notification:
|
||||
youReceivedFollowRequest: "フォロー許可してほしいみたいやな"
|
||||
yourFollowRequestAccepted: "フォローさせてもろたで"
|
||||
pollEnded: "アンケートの結果が出たみたいや"
|
||||
scheduledNotePosted: "予約ノートが投稿されたで"
|
||||
scheduledNotePostFailed: "予約ノート投稿できんかったで"
|
||||
newNote: "さらの投稿"
|
||||
unreadAntennaNote: "アンテナ {name}"
|
||||
roleAssigned: "ロールが付与されたで"
|
||||
chatRoomInvitationReceived: "チャットルームへ招待されたで"
|
||||
emptyPushNotificationMessage: "プッシュ通知の更新をしといたで"
|
||||
achievementEarned: "実績を獲得しとるで"
|
||||
testNotification: "通知テスト"
|
||||
@@ -2594,13 +2435,11 @@ _notification:
|
||||
flushNotification: "通知の履歴をリセットする"
|
||||
exportOfXCompleted: "{x}のエクスポートが終わったわ"
|
||||
login: "ログインしとったで"
|
||||
createToken: "アクセストークンが作成されたで"
|
||||
createTokenDescription: "心当たりないんやったら「{text}」でアクセストークンを削除してやって。"
|
||||
_types:
|
||||
all: "すべて"
|
||||
note: "あんたらの新規投稿"
|
||||
follow: "フォロー"
|
||||
mention: "あんた宛て"
|
||||
mention: "メンション"
|
||||
reply: "リプライ"
|
||||
renote: "リノート"
|
||||
quote: "引用"
|
||||
@@ -2650,7 +2489,6 @@ _deck:
|
||||
mentions: "あんた宛て"
|
||||
direct: "ダイレクト"
|
||||
roleTimeline: "ロールタイムライン"
|
||||
chat: "チャットしよか"
|
||||
_dialog:
|
||||
charactersExceeded: "最大の文字数を上回っとるで!今は {current} / 最大でも {max}"
|
||||
charactersBelow: "最小の文字数を下回っとるで!今は {current} / 最低でも {min}"
|
||||
@@ -2760,8 +2598,10 @@ _externalResourceInstaller:
|
||||
checkVendorBeforeInstall: "配ってるとこが信頼できるか確認した上でインストールしてな。"
|
||||
_plugin:
|
||||
title: "このプラグイン、インストールする?"
|
||||
metaTitle: "プラグイン情報"
|
||||
_theme:
|
||||
title: "このテーマインストールする?"
|
||||
metaTitle: "テーマ情報"
|
||||
_meta:
|
||||
base: ""
|
||||
_vendorInfo:
|
||||
@@ -2771,7 +2611,7 @@ _externalResourceInstaller:
|
||||
_errors:
|
||||
_invalidParams:
|
||||
title: ""
|
||||
description: "外部サイトからデータを持ってくるのに欲しい情報が足らへんみたいやわ。URLは合っとる?"
|
||||
description: ""
|
||||
_resourceTypeNotSupported:
|
||||
title: ""
|
||||
description: ""
|
||||
@@ -2801,12 +2641,11 @@ _dataSaver:
|
||||
_avatar:
|
||||
title: "アイコンの絵"
|
||||
description: "アイコン画像のアニメが止まるで。普通の画像よりもデータ量がでかいから、もっと通信量を節約できるねん。"
|
||||
_urlPreviewThumbnail:
|
||||
description: "URLプレビューのサムネイル画像が読み込まれへんくなるで。"
|
||||
_disableUrlPreview:
|
||||
description: "URLプレビュー機能を切るで。サムネイル画像だけと違って、リンク先の情報の読み込み自体を削減できるで。"
|
||||
_urlPreview:
|
||||
title: "URLプレビューのサムネイル画像"
|
||||
description: "URLプレビューのサムネイル画像が読み込まへんなるで。"
|
||||
_code:
|
||||
title: "コードハイライトは表示せんでええ"
|
||||
title: "コードハイライト"
|
||||
description: "MFMとかでコードハイライト記法が使われてるとき、タップするまで読み込まれへんくなるで。コードハイライトではハイライトする言語ごとにその決めてるファイルを読む必要はあんねんな。けどな、それは自動で読み込まれなくなるから、通信量を少なくできることができるねん。"
|
||||
_hemisphere:
|
||||
N: "北半球"
|
||||
@@ -2862,7 +2701,6 @@ _offlineScreen:
|
||||
_urlPreviewSetting:
|
||||
title: "URLプレビューの設定"
|
||||
enable: "URLプレビューを有効にする"
|
||||
allowRedirectDescription: "入力されたURLがリダイレクトされるとき、そのリダイレクト先をたどってプレビューを表示するかどうかを設定できるで。無効にするとサーバーリソースを節約できるんやけど、リダイレクト先の内容は表示されへんくなるで。"
|
||||
timeout: "プレビュー取得時のタイムアウト(ms)"
|
||||
timeoutDescription: "プレビュー取得の所要時間がこの値を超えた場合、プレビューは生成されへんで。"
|
||||
maximumContentLength: "Content-Lengthの最大値(byte)"
|
||||
@@ -2883,62 +2721,6 @@ _contextMenu:
|
||||
app: "アプリ"
|
||||
appWithShift: "Shiftキーでアプリ"
|
||||
native: "ブラウザのUI"
|
||||
_gridComponent:
|
||||
_error:
|
||||
requiredValue: "この値は必須項目やで"
|
||||
columnTypeNotSupport: "正規表現によるバリデーションはtype:textのカラムだけサポートしてるで"
|
||||
patternNotMatch: "この値は{pattern}のパターンに一致しいひんで"
|
||||
notUnique: "この値は一意でなあかんで"
|
||||
_roleSelectDialog:
|
||||
notSelected: "選択されとらんで"
|
||||
_customEmojisManager:
|
||||
_gridCommon:
|
||||
copySelectionRows: "選択行をコピーするで"
|
||||
copySelectionRanges: "選択範囲をコピーするで"
|
||||
deleteSelectionRows: "選択行を削除するで"
|
||||
deleteSelectionRanges: "選択範囲の値をクリアするで"
|
||||
searchSettings: "検索設定"
|
||||
searchSettingCaption: "検索条件を詳しく設定するで。"
|
||||
searchLimit: "表示件数"
|
||||
sortOrder: "並び順"
|
||||
registrationLogs: "登録ログ"
|
||||
registrationLogsCaption: "絵文字更新・削除時のログが表示されるで。更新・削除操作をしたり、ページを遷移・リロードしたら消えるから気ぃつけてな。"
|
||||
alertEmojisRegisterFailedDescription: "絵文字の更新・削除に失敗したで。詳細は登録ログを確認してな。"
|
||||
_logs:
|
||||
showSuccessLogSwitch: "成功ログを表示するで"
|
||||
failureLogNothing: "失敗ログはあらへん。"
|
||||
logNothing: "失敗ログはあらへん。"
|
||||
_remote:
|
||||
selectionRowDetail: "選択行の詳細やで"
|
||||
importSelectionRows: "選択行をインポートするで"
|
||||
importSelectionRangesRows: "選択範囲の行をインポートするで"
|
||||
importEmojisButton: "チェックされた絵文字をインポートするで"
|
||||
confirmImportEmojisTitle: "絵文字のインポートするで"
|
||||
confirmImportEmojisDescription: "リモートから受信した{count}個の絵文字をインポートするで。絵文字のライセンスには十分気ぃつけてな。実行してもええか?"
|
||||
_local:
|
||||
tabTitleList: "登録済み絵文字一覧"
|
||||
tabTitleRegister: "絵文字の登録"
|
||||
_list:
|
||||
emojisNothing: "登録された絵文字はないで。"
|
||||
markAsDeleteTargetRows: "選択行を削除対象にするで"
|
||||
markAsDeleteTargetRanges: "選択範囲の行を削除対象にするで"
|
||||
alertUpdateEmojisNothingDescription: "変更された絵文字はないで。"
|
||||
alertDeleteEmojisNothingDescription: "削除対象の絵文字はないで。"
|
||||
confirmMovePage: "ページを移動してもええんか?"
|
||||
confirmChangeView: "表示を変更してもええんか?"
|
||||
confirmUpdateEmojisDescription: "{count}個の絵文字を更新するで。実行してもええか?"
|
||||
confirmDeleteEmojisDescription: "チェックがつけられた{count}個の絵文字を削除するで。ほんまにええか?"
|
||||
confirmResetDescription: "今までやった変更が全部リセットされるで。"
|
||||
confirmMovePageDesciption: "このページの絵文字に変更が加えられてるで。\n保存せずページを移動してまうと、このページで加えた変更が全てパーになるで。"
|
||||
dialogSelectRoleTitle: "絵文字に設定されたロールで検索"
|
||||
_register:
|
||||
uploadSettingTitle: "アップロード設定"
|
||||
uploadSettingDescription: "この画面で絵文字アップロードするときの動きを設定できるで。"
|
||||
directoryToCategoryLabel: "ディレクトリ名を\"category\"に入力する"
|
||||
directoryToCategoryCaption: "ディレクトリをドラッグ・ドロップした時に、ディレクトリ名を\"category\"に入力します。"
|
||||
confirmRegisterEmojisDescription: "リストに表示されてる絵文字を新たなカスタム絵文字として登録するで。ほんまにええか? (サーバーがしんどくなるから、一回で登録できる絵文字は{count}件までやで)"
|
||||
confirmClearEmojisDescription: "編集内容をほかして、リストに表示されている絵文字をクリアするで。ほんまにええか?"
|
||||
confirmUploadEmojisDescription: "ドラッグ&ドロップされた{count}個のファイルをドライブにアップロードするで。ほんまにええか?"
|
||||
_embedCodeGen:
|
||||
title: "埋め込みコードをカスタム"
|
||||
header: "ヘッダー出す"
|
||||
@@ -2975,117 +2757,8 @@ _remoteLookupErrors:
|
||||
_responseInvalid:
|
||||
title: "レスポンスがおかしいで"
|
||||
description: "このサーバーと通信することはできたけど、もらったデータがおかしかったで。"
|
||||
_responseInvalidIdHostNotMatch:
|
||||
description: "入力されたURIのドメインと最終的に得られたURIのドメインとが違うで。第三者のサーバーを介してリモートのコンテンツを照会してるんやったら、発信元のサーバーで取得できるURIを使って照会し直して。"
|
||||
_noSuchObject:
|
||||
title: "見つからへんね"
|
||||
description: "求められたリソースが見つからんかったで。URIをもっかい確かめてや。"
|
||||
_captcha:
|
||||
verify: "CAPTCHAしばいたって"
|
||||
testSiteKeyMessage: "サイトキーとシークレットキーにテスト用の値を入力することでプレビューを確認できるで。\n詳細は下記ページを確認してな。"
|
||||
_error:
|
||||
_requestFailed:
|
||||
title: "CAPTCHAのリクエストに失敗してもうた"
|
||||
text: "しばらく後で実行するか、設定をもっかい確認してや。"
|
||||
_verificationFailed:
|
||||
title: "CAPTCHAのリクエストに失敗してもうた"
|
||||
text: "設定がほんまに合ってるかもっかい確認してや。"
|
||||
_unknown:
|
||||
title: "CAPTCHAエラー"
|
||||
text: "思いもせんかったエラーが起きたわ。"
|
||||
_bootErrors:
|
||||
title: "読み込みに失敗したで"
|
||||
serverError: "少し待ってからリロードしてもまだ問題が解決されんのやったら、以下のError IDを添えてサーバー管理者に連絡して。"
|
||||
solution: "以下のことやったら解決するかもやで。"
|
||||
solution1: "ブラウザとかOSを最新バージョンに更新する"
|
||||
solution2: "アドブロッカーを無効にする"
|
||||
solution3: "ブラウザのキャッシュをクリアする"
|
||||
solution4: "(Tor Browser) dom.webaudio.enabledをtrueに設定する"
|
||||
otherOption: "ほかのオプション"
|
||||
otherOption1: "クライアント設定とキャッシュをほかす"
|
||||
otherOption2: "簡易クライアントを起動"
|
||||
otherOption3: "修復ツールを起動"
|
||||
_search:
|
||||
searchScopeAll: "みんな"
|
||||
searchScopeLocal: "ローカル"
|
||||
searchScopeUser: "ユーザー指定"
|
||||
pleaseEnterServerHost: "サーバーのホストはどないするん?"
|
||||
pleaseSelectUser: "ユーザーを選んでや"
|
||||
_serverSetupWizard:
|
||||
installCompleted: "Misskeyのインストールが終わったで!"
|
||||
firstCreateAccount: "最初は、管理者アカウントを作成しよか。"
|
||||
accountCreated: "管理者アカウントができたで!"
|
||||
youCanEasilyConfigureOptimalServerSettingsWithThisWizard: "このウィザードで簡単にええ感じのサーバーの設定ができるで。"
|
||||
settingsYouMakeHereCanBeChangedLater: "ここでの設定は、あとからでも変えられるで。"
|
||||
howWillYouUseMisskey: "Misskeyをどんな感じに使うん?"
|
||||
_use:
|
||||
single_youCanCreateMultipleAccounts: "お一人様サーバーとして運用するとしても、アカウントは必要に応じて複数作れるで。"
|
||||
openServerAdvice: "不特定多数の利用者を受け入れるには相応のリスクがあるで。トラブルに対処できるよう、ちゃんとしたモデレーション体制で運営しいや。"
|
||||
openServerAntiSpamAdvice: "うちのサーバーがスパムの踏み台にならへんように、reCAPTCHAとかのアンチボット機能を使う、みたいなセキュリティ対策もしっかり考えてな。"
|
||||
howManyUsersDoYouExpect: "どれくらいの人数を考えとるん?"
|
||||
largeScaleServerAdvice: "大規模なサーバーやったら、ロードバランシングとかデータベースのレプリケーションみたいな、高度なインフラストラクチャーの知識が必要になるかもしれへんわ。"
|
||||
doYouConnectToFediverse: "Fediverseと接続するんやっけ?"
|
||||
doYouConnectToFediverse_description1: "分散型サーバーでできたネットワーク(Fediverse)に繋げると、他のサーバーと相互にコンテンツのやり取りができるようになるで。"
|
||||
doYouConnectToFediverse_description2: "Fediverseと接続することは「連合」とも呼ばれるな。"
|
||||
youCanConfigureMoreFederationSettingsLater: "連合してもええサーバーの指定とか、高度な設定も後でできるで。"
|
||||
remoteContentsCleaning_description: "連合すると、ぎょうさんコンテンツを受け取り続けることになるねん。自動クリーニングをつけると、参照されてない古いコンテンツを自動でサーバーからほかして、ストレージを節約できるで。"
|
||||
adminInfo_description: "問い合わせを受け付けるのに使う管理者情報を設定しよか。"
|
||||
adminInfo_mustBeFilled: "オープンサーバー、もしくは連合を入れとるんやったら必ず入力せなあかんで。"
|
||||
followingSettingsAreRecommended: "こういう設定がええかもな"
|
||||
settingsCompleted: "設定が終わったで!"
|
||||
settingsCompleted_description: "お疲れさん。準備ができたから、さっそくサーバーを使い始められるで。"
|
||||
settingsCompleted_description2: "細かいサーバー設定は、「コントロールパネル」を見てみてな。"
|
||||
_donationRequest:
|
||||
text1: "Misskeyは有志で開発されとる無料のソフトウェアやで。"
|
||||
text2: "今後も開発を続けられるように、よかったらぜひカンパをお願いするわ。"
|
||||
text3: "支援者向け特典もあるで!"
|
||||
_uploader:
|
||||
abortConfirm: "アップロードされてへんファイルがあるんやけど、やめてもええんか?"
|
||||
doneConfirm: "アップロードされてへんファイルがあるんやけど、完了してもええんか?"
|
||||
maxFileSizeIsX: "アップロードできるファイルサイズは{x}までやで。"
|
||||
tip: "ファイルはまだアップロードされてへんで。このダイアログで、アップロードする前に確認・リネーム・圧縮・クロッピングとかをできるで。準備が出来たら、「アップロード」ボタンを押してアップロードしてな。"
|
||||
_clientPerformanceIssueTip:
|
||||
title: "バッテリーようさん食うなぁと思ったら"
|
||||
makeSureDisabledAdBlocker: "アドブロッカーを切ってみてや"
|
||||
makeSureDisabledAdBlocker_description: "アドブロッカーはパフォーマンスに影響があるかもしれへん。OSの機能とかブラウザの機能・アドオンとかでアドブロッカーが有効になってないか確認してや。"
|
||||
makeSureDisabledCustomCss: "カスタムCSSを無効にしてみてや"
|
||||
makeSureDisabledCustomCss_description: "スタイルを上書きするとパフォーマンスに影響があるかもしれへん。カスタムCSSとか、スタイルを上書きする拡張機能が有効になってないか確認してや。"
|
||||
makeSureDisabledAddons: "拡張機能を無効にしてみてや"
|
||||
makeSureDisabledAddons_description: "なんかの拡張機能がクライアントの動作にちょっかいをかけてパフォーマンスに影響を与えてるかもしれへん。ブラウザの拡張機能を無効にして良くなるか確認してや。"
|
||||
_clip:
|
||||
tip: "クリップは、ノートをまとめられる機能やで。"
|
||||
_userLists:
|
||||
tip: "好きなユーザーを含むリストを作れるねん。作ったリストはタイムラインとして表示できるで。"
|
||||
_watermarkEditor:
|
||||
tip: "画像にクレジット情報とかのウォーターマークをのっけられるで。"
|
||||
quitWithoutSaveConfirm: "保存せずに終わってもええんか?"
|
||||
driveFileTypeWarn: "このファイルは対応しとらへん"
|
||||
driveFileTypeWarnDescription: "画像ファイルを選んでや"
|
||||
opacity: "不透明度"
|
||||
scale: "大きさ"
|
||||
text: "テキスト"
|
||||
position: "位置"
|
||||
type: "タイプ"
|
||||
image: "画像"
|
||||
advanced: "高度"
|
||||
angle: "角度"
|
||||
failedToLoadImage: "あかん、画像読み込まれへんわ"
|
||||
_imageEffector:
|
||||
discardChangesConfirm: "変更をせんで終わるか?"
|
||||
failedToLoadImage: "あかん、画像読み込まれへんわ"
|
||||
_fxProps:
|
||||
angle: "角度"
|
||||
scale: "大きさ"
|
||||
size: "大きさ"
|
||||
offset: "位置"
|
||||
color: "色"
|
||||
opacity: "不透明度"
|
||||
lightness: "明るさ"
|
||||
_drafts:
|
||||
cannotCreateDraftAnymore: "下書きはこれ以上は作れへんな。"
|
||||
cannotCreateDraft: "この内容で下書きは作れへんな。"
|
||||
delete: "下書きをほかす"
|
||||
deleteAreYouSure: "下書きをほかしてもええか?"
|
||||
noDrafts: "下書きはあらへん"
|
||||
_qr:
|
||||
showTabTitle: "表示"
|
||||
shareText: "Fediverseでフォローしてな!"
|
||||
raw: "テキスト"
|
||||
|
||||
@@ -57,10 +57,6 @@ searchByGoogle: "Nadi"
|
||||
file: "Ifuyla"
|
||||
account: "Imiḍan"
|
||||
replies: "Err"
|
||||
_imageFrameEditor:
|
||||
font: "Tasefsit"
|
||||
fontSerif: "Serif"
|
||||
fontSansSerif: "Sans Serif"
|
||||
_email:
|
||||
_follow:
|
||||
title: "Yeṭṭafaṛ-ik·em-id"
|
||||
|
||||
@@ -44,7 +44,6 @@ showMore: "ಇನ್ನಷ್ಟು ನೋಡು"
|
||||
youGotNewFollower: "ಹಿಂಬಾಲಿಸಿದರು"
|
||||
receiveFollowRequest: "ಹಿಂಬಾಲನೆ ವಿನಂತಿ ಬಂದಿದೆ"
|
||||
followRequestAccepted: "ಹಿಂಬಾಲನೆ ವಿನಂತಿ ಸ್ವೀಕರಿಸಲಾಯಿತು"
|
||||
mention: "ಹೆಸರಿಸಿದ"
|
||||
mentions: "ಹೆಸರಿಸಿದ"
|
||||
directNotes: "ನೇರ ಟಿಪ್ಪಣಿಗಳು"
|
||||
importAndExport: "ಆಮದು/ರಫ್ತು"
|
||||
@@ -66,9 +65,6 @@ replies: "ಉತ್ತರಿಸು"
|
||||
_email:
|
||||
_follow:
|
||||
title: "ಹಿಂಬಾಲಿಸಿದರು"
|
||||
_theme:
|
||||
keys:
|
||||
mention: "ಹೆಸರಿಸಿದ"
|
||||
_sfx:
|
||||
notification: "ಅಧಿಸೂಚನೆಗಳು"
|
||||
_widgets:
|
||||
@@ -77,14 +73,11 @@ _widgets:
|
||||
timeline: "ಸಮಯಸಾಲು"
|
||||
_cw:
|
||||
show: "ಇನ್ನಷ್ಟು ನೋಡು"
|
||||
_visibility:
|
||||
specified: "ನೇರ ಟಿಪ್ಪಣಿಗಳು"
|
||||
_profile:
|
||||
username: "ಬಳಕೆಹೆಸರು"
|
||||
_notification:
|
||||
youWereFollowed: "ಹಿಂಬಾಲಿಸಿದರು"
|
||||
_types:
|
||||
mention: "ಹೆಸರಿಸಿದ"
|
||||
login: "ಪ್ರವೇಶ"
|
||||
_actions:
|
||||
reply: "ಉತ್ತರಿಸು"
|
||||
@@ -93,4 +86,3 @@ _deck:
|
||||
notifications: "ಅಧಿಸೂಚನೆಗಳು"
|
||||
tl: "ಸಮಯಸಾಲು"
|
||||
mentions: "ಹೆಸರಿಸಿದ"
|
||||
direct: "ನೇರ ಟಿಪ್ಪಣಿಗಳು"
|
||||
|
||||
@@ -224,6 +224,7 @@ noUsers: "사용자가 어ᇝ십니다"
|
||||
editProfile: "프로필 적기"
|
||||
noteDeleteConfirm: "요 노트럴 뭉캡니꺼?"
|
||||
pinLimitExceeded: "더 몬 붙입니다"
|
||||
intro: "Misskey럴 다 깔앗십니다! 간리자 게정얼 맨걸어 보입시다."
|
||||
done: "햇어예"
|
||||
processing: "처리하고 잇어예"
|
||||
preview: "미리보기"
|
||||
@@ -262,6 +263,7 @@ deleteAreYouSure: "‘{x}’(얼)럴 뭉캡니꺼?"
|
||||
resetAreYouSure: "아시로 데돌립니꺼?"
|
||||
areYouSure: "갠찮십니꺼?"
|
||||
saved: "저장햇십니다"
|
||||
messaging: "대화"
|
||||
upload: "올리기"
|
||||
keepOriginalUploading: "온본 두기"
|
||||
keepOriginalUploadingDescription: "이미지럴 올릴 때 온본얼 고대로 둡니다. 꺼모 올릴 때 브라우저서 웹 공개 이미지럴 맨겁니다."
|
||||
@@ -274,6 +276,7 @@ uploadFromUrlMayTakeTime: "올리기가 껕날라먼 시간이 쪼매 걸릴 깁
|
||||
explore: "살펴보기"
|
||||
messageRead: "이럿어예"
|
||||
noMoreHistory: "요카마 옛날 기록이 어ᇝ십니다"
|
||||
startMessaging: "대화하기"
|
||||
nUsersRead: "{n}멩이 이럿십니다"
|
||||
agreeTo: "{0}에 동이하기"
|
||||
agree: "동이합니다"
|
||||
@@ -454,6 +457,8 @@ retype: "다시 서기"
|
||||
noteOf: "{user}님으 노트"
|
||||
quoteAttached: "따옴"
|
||||
quoteQuestion: "따와가 작성하겠십니까?"
|
||||
noMessagesYet: "아직 대화가 없십니다"
|
||||
newMessageExists: "새 메시지가 있십니다"
|
||||
onlyOneFileCanBeAttached: "메시지엔 파일 하나까제밖에 몬 넣십니다"
|
||||
invitations: "초대하기"
|
||||
invitationCode: "초대장"
|
||||
@@ -650,15 +655,6 @@ replies: "답하기"
|
||||
renotes: "리노트"
|
||||
attach: "옇기"
|
||||
surrender: "아이예"
|
||||
information: "정보"
|
||||
_imageEditing:
|
||||
_vars:
|
||||
filename: "파일 이럼"
|
||||
_chat:
|
||||
invitations: "초대하기"
|
||||
noHistory: "기록이 없십니다"
|
||||
members: "구성원"
|
||||
home: "덜머리"
|
||||
_delivery:
|
||||
stop: "고만 보내예"
|
||||
_type:
|
||||
@@ -748,8 +744,7 @@ _menuDisplay:
|
||||
_theme:
|
||||
description: "설멩"
|
||||
keys:
|
||||
mention: "받언 멘션"
|
||||
renote: "리노트"
|
||||
mention: "멘션"
|
||||
_sfx:
|
||||
note: "새 노트"
|
||||
notification: "알림"
|
||||
@@ -778,7 +773,6 @@ _cw:
|
||||
_visibility:
|
||||
home: "덜머리"
|
||||
followers: "팔로워"
|
||||
specified: "쪽지 서기"
|
||||
_postForm:
|
||||
_placeholders:
|
||||
e: "옇다 서 주이소"
|
||||
@@ -813,7 +807,7 @@ _notification:
|
||||
newNote: "새 걸"
|
||||
_types:
|
||||
follow: "팔로잉"
|
||||
mention: "받언 멘션"
|
||||
mention: "멘션"
|
||||
renote: "리노트"
|
||||
quote: "따오기"
|
||||
reaction: "반엉"
|
||||
@@ -828,7 +822,6 @@ _deck:
|
||||
antenna: "안테나"
|
||||
list: "리스트"
|
||||
mentions: "받언 멘션"
|
||||
direct: "쪽지 서기"
|
||||
_webhookSettings:
|
||||
name: "이럼"
|
||||
_abuseReport:
|
||||
@@ -850,10 +843,3 @@ _reversi:
|
||||
_remoteLookupErrors:
|
||||
_noSuchObject:
|
||||
title: "몬 찾앗십니다"
|
||||
_search:
|
||||
searchScopeAll: "말캉"
|
||||
searchScopeUser: "사용자 지정"
|
||||
_watermarkEditor:
|
||||
image: "이미지"
|
||||
_qr:
|
||||
showTabTitle: "보기"
|
||||
|
||||
1019
locales/ko-KR.yml
1019
locales/ko-KR.yml
File diff suppressed because it is too large
Load Diff
@@ -223,6 +223,7 @@ remove: "ລຶບ"
|
||||
removed: "ລຶບແລ້ວ"
|
||||
resetAreYouSure: "ຣີເຊັດບໍ?"
|
||||
saved: "ບັນທຶກແລ້ວ"
|
||||
messaging: "ແຊັຕ"
|
||||
upload: "ອັບໂຫຼດ"
|
||||
keepOriginalUploading: "ຮັກສາຮູບພາບຕົ້ນສະບັບ"
|
||||
fromDrive: "ຈາກ Drive"
|
||||
@@ -232,6 +233,7 @@ uploadFromUrlDescription: "URL ຂອງໄຟລ໌ທີ່ທ່ານຕ້
|
||||
uploadFromUrlRequested: "ຮ້ອງຂໍການອັບໂຫລດແລ້ວ"
|
||||
explore: "ສຳຫຼວດ"
|
||||
messageRead: "ອ່ານແລ້ວ"
|
||||
startMessaging: "ເລີ່ມການສົນທະນາໃໝ່"
|
||||
nUsersRead: "ອ່ານໂດຍ {n}"
|
||||
agree: "ຍອມຮັບ"
|
||||
termsOfService: "ເງື່ອນໄຂການບໍລິການ"
|
||||
@@ -392,15 +394,6 @@ searchByGoogle: "ຄົ້ນຫາ"
|
||||
file: "ໄຟລ໌"
|
||||
replies: "ຕອບກັບ"
|
||||
renotes: "Renote"
|
||||
information: "ກ່ຽວກັບ"
|
||||
_imageEditing:
|
||||
_vars:
|
||||
filename: "ຊື່ໄຟລ໌"
|
||||
_chat:
|
||||
invitations: "ເຊີນ"
|
||||
noHistory: "ບໍ່ມີປະຫວັດ"
|
||||
members: "ສະມາຊິກ"
|
||||
home: "ໜ້າຫຼັກ"
|
||||
_delivery:
|
||||
stop: "ໂຈະ"
|
||||
_type:
|
||||
@@ -436,10 +429,6 @@ _cw:
|
||||
_visibility:
|
||||
home: "ໜ້າຫຼັກ"
|
||||
followers: "ຜູ້ຕິດຕາມ"
|
||||
specified: "ໂພສ Direct note"
|
||||
_postForm:
|
||||
_howToUse:
|
||||
menu_title: "ເມນູ"
|
||||
_profile:
|
||||
name: "ຊື່"
|
||||
username: "ຊື່ຜູ້ໃຊ້"
|
||||
@@ -477,7 +466,6 @@ _deck:
|
||||
list: "ລາຍການ"
|
||||
channel: "ຊ່ອງ"
|
||||
mentions: "ກ່າວເຖິງເຈົ້າ"
|
||||
direct: "ໂພສ Direct note"
|
||||
_webhookSettings:
|
||||
name: "ຊື່"
|
||||
_abuseReport:
|
||||
@@ -489,7 +477,3 @@ _moderationLogTypes:
|
||||
_remoteLookupErrors:
|
||||
_noSuchObject:
|
||||
title: "ບໍ່ພົບ"
|
||||
_search:
|
||||
searchScopeAll: "ທັງໝົດ"
|
||||
_watermarkEditor:
|
||||
image: "ຮູບພາບ"
|
||||
|
||||
@@ -5,7 +5,6 @@ introMisskey: "Welkom! Misskey is een open source, gedecentraliseerde microblogd
|
||||
poweredByMisskeyDescription: "{name} is één van de services die door het open source platform <b>Misskey</b> wordt geleverd (het wordt ook wel een \"Misskey server genmoemd\")."
|
||||
monthAndDay: "{day} {month}"
|
||||
search: "Zoeken"
|
||||
reset: "Herstellen"
|
||||
notifications: "Meldingen"
|
||||
username: "Gebruikersnaam"
|
||||
password: "Wachtwoord"
|
||||
@@ -49,7 +48,6 @@ pin: "Vastmaken aan profielpagina"
|
||||
unpin: "Losmaken van profielpagina"
|
||||
copyContent: "Kopiëren inhoud"
|
||||
copyLink: "Kopiëren link"
|
||||
copyRemoteLink: "Remote-link kopiëren"
|
||||
copyLinkRenote: ""
|
||||
delete: "Verwijderen"
|
||||
deleteAndEdit: "Verwijderen en bewerken"
|
||||
@@ -65,7 +63,6 @@ copyFileId: "Kopieer veld ID"
|
||||
copyFolderId: "Kopieer folder ID"
|
||||
copyProfileUrl: "Kopieer profiel URL"
|
||||
searchUser: "Zoeken een gebruiker"
|
||||
searchThisUsersNotes: "Notities van deze gebruiker doorzoeken"
|
||||
reply: "Antwoord"
|
||||
loadMore: "Laad meer"
|
||||
showMore: "Toon meer"
|
||||
@@ -118,8 +115,6 @@ renotedToX: "Renoted naar {name}"
|
||||
cantRenote: "Dit bericht kan niet worden herdeeld"
|
||||
cantReRenote: "Een herdeling kan niet worden herdeeld"
|
||||
quote: "Quote"
|
||||
inChannelRenote: "Alleen-kanaal Renote"
|
||||
inChannelQuote: "Alleen-kanaal Citaat"
|
||||
renoteToChannel: "Renote naar kanaal"
|
||||
renoteToOtherChannel: "Renote naar ander kanaal"
|
||||
pinnedNote: "Vastgemaakte notitie"
|
||||
@@ -134,19 +129,14 @@ emojiPicker: "Emoji kiezer"
|
||||
pinnedEmojisForReactionSettingDescription: "Kies de emojis die als eerste getoond worden tijdens het reageren"
|
||||
pinnedEmojisSettingDescription: "Kies de emojis die als eerste getoond worden tijdens het reageren"
|
||||
emojiPickerDisplay: "Emoji kiezer weergave"
|
||||
overwriteFromPinnedEmojisForReaction: "Overschrijven met reactieinstellingen"
|
||||
overwriteFromPinnedEmojis: "Overschrijven met algemene instellingen"
|
||||
reactionSettingDescription2: "Sleep om opnieuw te ordenen, Klik om te verwijderen, Druk op \"+\" om toe te voegen"
|
||||
rememberNoteVisibility: "Vergeet niet de notitie zichtbaarheidsinstellingen"
|
||||
attachCancel: "Verwijder bijlage"
|
||||
deleteFile: "Bestand verwijderen"
|
||||
markAsSensitive: "Markeren als NSFW"
|
||||
unmarkAsSensitive: "Geen NSFW"
|
||||
enterFileName: "Invoeren bestandsnaam"
|
||||
mute: "Dempen"
|
||||
unmute: "Stop dempen"
|
||||
renoteMute: "Renotes dempen"
|
||||
renoteUnmute: "Dempen Renotes opheffen"
|
||||
block: "Blokkeren"
|
||||
unblock: "Deblokkeren"
|
||||
suspend: "Opschorten"
|
||||
@@ -156,11 +146,7 @@ unblockConfirm: "Ben je zeker dat je deze account wil blokkeren?"
|
||||
suspendConfirm: "Ben je zeker dat je deze account wil suspenderen?"
|
||||
unsuspendConfirm: "Ben je zeker dat je deze account wil opnieuw aanstellen?"
|
||||
selectList: "Kies een lijst."
|
||||
editList: "Lijst bewerken"
|
||||
selectChannel: "Kanaal selecteren"
|
||||
selectAntenna: "Kies een antenne"
|
||||
editAntenna: "Antenne bewerken"
|
||||
createAntenna: "Antenne aanmaken"
|
||||
selectWidget: "Kies een widget"
|
||||
editWidgets: "Bewerk widgets"
|
||||
editWidgetsExit: "Klaar"
|
||||
@@ -172,10 +158,6 @@ emojiUrl: "URL emoji"
|
||||
addEmoji: "Toevoegen emoji"
|
||||
settingGuide: "Aanbevolen instellingen"
|
||||
cacheRemoteFiles: "Externe bestanden cachen"
|
||||
cacheRemoteFilesDescription: "Als deze instelling uitgeschakeld is worden bestanden altijd direct van remote servers geladen. Hiermee wordt opslagruimte bespaard, maar doordat er geen thumbnails worden gegenereerd, zal netwerkverkeer toenemen."
|
||||
youCanCleanRemoteFilesCache: "Klik op de 🗑️ knop in de bestandsbeheerweergave om de cache te wissen."
|
||||
cacheRemoteSensitiveFiles: "Gevoelige bestanden van externe instances in de cache bewaren"
|
||||
cacheRemoteSensitiveFilesDescription: "Als deze instelling is uitgeschakeld, worden gevoelige bestanden op afstand direct vanuit de instantie op afstand geladen zonder caching."
|
||||
flagAsBot: "Markeer dit account als een robot."
|
||||
flagAsBotDescription: "Als dit account van een programma wordt beheerd, zet deze vlag aan. Het aanzetten helpt andere ontwikkelaars om bijvoorbeeld onbedoelde feedback loops te doorbreken of om Misskey meer geschikt te maken."
|
||||
flagAsCat: "Markeer dit account als een kat."
|
||||
@@ -184,13 +166,8 @@ flagShowTimelineReplies: "Toon antwoorden op de tijdlijn."
|
||||
flagShowTimelineRepliesDescription: "Als je dit vlag aanzet, toont de tijdlijn ook antwoorden op andere en niet alleen jouw eigen notities."
|
||||
autoAcceptFollowed: "Accepteer verzoeken om jezelf te volgen vanzelf als je de verzoeker al volgt."
|
||||
addAccount: "Account toevoegen"
|
||||
reloadAccountsList: "Accountlijst opnieuw laden"
|
||||
loginFailed: "Aanmelding mislukt."
|
||||
showOnRemote: "Toon op de externe instantie."
|
||||
continueOnRemote: "Verder op remote server"
|
||||
chooseServerOnMisskeyHub: "Kies een server van de Misskey Hub"
|
||||
specifyServerHost: "Serverhost uitkiezen"
|
||||
inputHostName: "Domein invullen"
|
||||
general: "Algemeen"
|
||||
wallpaper: "Achtergrond"
|
||||
setWallpaper: "Achtergrond instellen"
|
||||
@@ -201,7 +178,6 @@ followConfirm: "Weet je zeker dat je {name} wilt volgen?"
|
||||
proxyAccount: "Proxy account"
|
||||
proxyAccountDescription: "Een proxy-account is een account dat onder bepaalde voorwaarden fungeert als externe volger voor gebruikers. Als een gebruiker bijvoorbeeld een externe gebruiker aan de lijst toevoegt, wordt de activiteit van de externe gebruiker niet aan de server geleverd als geen lokale gebruiker die gebruiker volgt, dus het proxy-account volgt in plaats daarvan."
|
||||
host: "Server"
|
||||
selectSelf: "Mezelf kiezen"
|
||||
selectUser: "Kies een gebruiker"
|
||||
recipient: "Ontvanger"
|
||||
annotation: "Reacties"
|
||||
@@ -216,8 +192,6 @@ perHour: "Per uur"
|
||||
perDay: "Per dag"
|
||||
stopActivityDelivery: "Stop met versturen activiteiten"
|
||||
blockThisInstance: "Blokkeer deze server"
|
||||
silenceThisInstance: "Instantie dempen"
|
||||
mediaSilenceThisInstance: "Media van deze server dempen"
|
||||
operations: "Verwerkingen"
|
||||
software: "Software"
|
||||
version: "Versie"
|
||||
@@ -237,12 +211,6 @@ clearCachedFiles: "Cache opschonen"
|
||||
clearCachedFilesConfirm: "Weet je zeker dat je alle externe bestanden in de cache wilt verwijderen?"
|
||||
blockedInstances: "Geblokkeerde servers"
|
||||
blockedInstancesDescription: "Maak een lijst van de servers die moeten worden geblokkeerd, gescheiden door regeleinden. Geblokkeerde servers kunnen niet meer communiceren met deze server."
|
||||
silencedInstances: "Gedempte instanties"
|
||||
silencedInstancesDescription: "Geef de hostnamen van de servers die je wil dempen op, elk op hun eigen regel. Alle accounts die bij de opgegeven servers horen worden als gedempt behandeld, kunnen alleen maar volgverzoeken maken, en kunnen lokale accounts niet vermelden als ze niet gevolgd worden. Geblokkeerde servers worden hier niet door beïnvloed."
|
||||
mediaSilencedInstances: "Media-gedempte servers"
|
||||
mediaSilencedInstancesDescription: "Geef de hostnamen van de servers die je wil media-dempen op, elk op hun eigen regel. Alle accounts die bij de opgegeven servers horen worden als gedempt behandeld, en kunnen geen eigen emojis gebruiken. Geblokkeerde servers worden hier niet door beïnvloed."
|
||||
federationAllowedHosts: "Servers die mogen federeren "
|
||||
federationAllowedHostsDescription: "Geef de hostnamen van de servers die mogen federeren op, elk op hun eigen regel."
|
||||
muteAndBlock: "Gedempt en geblokkeerd"
|
||||
mutedUsers: "Gedempte gebruikers"
|
||||
blockedUsers: "Geblokkeerde gebruikers"
|
||||
@@ -250,6 +218,7 @@ noUsers: "Er zijn geen gebruikers."
|
||||
editProfile: "Bewerk Profiel"
|
||||
noteDeleteConfirm: "Ben je zeker dat je dit bericht wil verwijderen?"
|
||||
pinLimitExceeded: "Je kunt geen berichten meer vastprikken"
|
||||
intro: "Installatie van Misskey geëindigd! Maak nu een beheerder aan."
|
||||
done: "Klaar"
|
||||
processing: "Bezig met verwerken"
|
||||
preview: "Voorbeeld"
|
||||
@@ -286,8 +255,8 @@ removed: "Succesvol verwijderd"
|
||||
removeAreYouSure: "Weet je zeker dat je \"{x}\" wil verwijderen?"
|
||||
deleteAreYouSure: "Weet je zeker dat je \"{x}\" wil verwijderen?"
|
||||
resetAreYouSure: "Resetten?"
|
||||
areYouSure: "Weet je het zeker?"
|
||||
saved: "Opgeslagen"
|
||||
messaging: "Chat"
|
||||
upload: "Uploaden"
|
||||
keepOriginalUploading: "Origineel beeld behouden."
|
||||
keepOriginalUploadingDescription: "Bewaar de originele versie bij het uploaden van afbeeldingen. Indien uitgeschakeld, wordt bij het uploaden een alternatieve versie voor webpublicatie genereert."
|
||||
@@ -300,13 +269,9 @@ uploadFromUrlMayTakeTime: "Het kan even duren voordat het uploaden voltooid is."
|
||||
explore: "Verkennen"
|
||||
messageRead: "Lezen"
|
||||
noMoreHistory: "Er is geen verdere geschiedenis"
|
||||
startChat: "Chat starten"
|
||||
startMessaging: "Start een gesprek"
|
||||
nUsersRead: "gelezen door {n}"
|
||||
agreeTo: "Ik stem in met {0}"
|
||||
agree: "Akkoord"
|
||||
agreeBelow: "Ik ga akkoord met de volgende"
|
||||
basicNotesBeforeCreateAccount: "Belangrijke informatie"
|
||||
termsOfService: "Gebruiksvoorwaarden"
|
||||
start: "Aan de slag"
|
||||
home: "Startpagina"
|
||||
remoteUserCaution: "Aangezien deze gebruiker van een externe server afkomstig is, kan de weergegeven informatie onvolledig zijn."
|
||||
@@ -331,15 +296,12 @@ selectFile: "Kies een bestand"
|
||||
selectFiles: "Selecteer bestanden"
|
||||
selectFolder: "Kies een map"
|
||||
selectFolders: "Kies mappen"
|
||||
fileNotSelected: "Geen bestand geselecteerd"
|
||||
renameFile: "Wijzig bestandsnaam"
|
||||
folderName: "Mapnaam"
|
||||
createFolder: "Map aanmaken"
|
||||
renameFolder: "Map hernoemen"
|
||||
deleteFolder: "Map verwijderen"
|
||||
folder: "Map"
|
||||
addFile: "Bestand toevoegen"
|
||||
showFile: "Bestanden weergeven"
|
||||
emptyDrive: "Jouw Drive is leeg."
|
||||
emptyFolder: "Deze map is leeg"
|
||||
unableToDelete: "Kan niet worden verwijderd"
|
||||
@@ -352,7 +314,6 @@ copyUrl: "URL kopiëren"
|
||||
rename: "Hernoemen"
|
||||
avatar: "Avatar"
|
||||
banner: "Banner"
|
||||
displayOfSensitiveMedia: "Weergave van gevoelige media"
|
||||
whenServerDisconnected: "Wanneer de verbinding met de server wordt onderbroken"
|
||||
disconnectedFromServer: "Verbinding met de server onderbroken."
|
||||
reload: "Verversen"
|
||||
@@ -390,20 +351,14 @@ bannerUrl: "Banner URL"
|
||||
backgroundImageUrl: "URL afbeelding"
|
||||
basicInfo: "Basisinformatie"
|
||||
pinnedUsers: "Vastgeprikte gebruikers"
|
||||
pinnedUsersDescription: "Een lijst met gebruikersnamen, gescheiden door regeleinden, die moet worden vastgemaakt in het tabblad “Verkennen”"
|
||||
pinnedPages: "Vastgeprikte pagina's"
|
||||
pinnedPagesDescription: "Voer de paden in van de Pagina's die je aan de bovenste pagina van deze instantie wilt vastmaken, gescheiden door regeleinden."
|
||||
pinnedClipId: "ID van de clip die moet worden vastgepind"
|
||||
pinnedNotes: "Vastgemaakte notitie"
|
||||
hcaptcha: "hCaptcha"
|
||||
enableHcaptcha: "Inschakelen hCaptcha"
|
||||
hcaptchaSiteKey: "Site sleutel"
|
||||
hcaptchaSecretKey: "Geheime sleutel"
|
||||
mcaptcha: "mCaptcha"
|
||||
enableMcaptcha: "mCaptcha activeren"
|
||||
mcaptchaSiteKey: "Site sleutel"
|
||||
mcaptchaSecretKey: "Geheime sleutel"
|
||||
mcaptchaInstanceUrl: "mCaptcha server-URL"
|
||||
recaptcha: "reCAPTCHA"
|
||||
enableRecaptcha: "Inschakelen reCAPTCHA"
|
||||
recaptchaSiteKey: "Site sleutel"
|
||||
@@ -412,21 +367,12 @@ turnstile: "Tourniquet"
|
||||
enableTurnstile: "Inschakelen tourniquet"
|
||||
turnstileSiteKey: "Site sleutel"
|
||||
turnstileSecretKey: "Geheime sleutel"
|
||||
avoidMultiCaptchaConfirm: "Het gebruik van meerdere Captcha-systemen kan interferentie tussen deze systemen veroorzaken. Wil je de andere Captcha-systemen die momenteel actief zijn uitschakelen? Als je wilt dat ze ingeschakeld blijven, druk dan op annuleren."
|
||||
antennas: "Antennes"
|
||||
manageAntennas: "Antennes beheren"
|
||||
name: "Naam"
|
||||
antennaSource: "Bron antenne"
|
||||
antennaKeywords: "Sleutelwoorden"
|
||||
antennaExcludeKeywords: "Blokkeerwoorden"
|
||||
antennaExcludeBots: "Bot-accounts uitsluiten"
|
||||
antennaKeywordsDescription: "Scheid met spaties voor een EN-voorwaarde of met regeleinden voor een OF-voorwaarde."
|
||||
notifyAntenna: "Houd een notificatie bij nieuwe notities"
|
||||
withFileAntenna: "Alleen notities met bestanden"
|
||||
excludeNotesInSensitiveChannel: "Sluit notities uit van gevoelige kanalen"
|
||||
enableServiceworker: "Activeer pushmeldingen in de browser"
|
||||
antennaUsersDescription: "Lijst één gebruikersnaam per regel"
|
||||
caseSensitive: "Hoofdlettergevoelig"
|
||||
withReplies: "Antwoorden toevoegen"
|
||||
connectedTo: "De volgende accounts zijn verbonden"
|
||||
notesAndReplies: "Berichten en reacties"
|
||||
@@ -447,30 +393,18 @@ about: "Over"
|
||||
aboutMisskey: "Over Misskey"
|
||||
administrator: "Beheerder"
|
||||
token: "Token"
|
||||
2fa: "Twee factor authenticatie"
|
||||
setupOf2fa: "Tweefactorauthenticatie instellen"
|
||||
totp: "Verificatie-App"
|
||||
totpDescription: "Log in via de verificatie-app met het eenmalige wachtwoord"
|
||||
moderator: "Moderator"
|
||||
moderation: "Moderatie"
|
||||
moderationNote: "Moderatienotitie"
|
||||
moderationNoteDescription: "Voer hier notities in. Deze zijn alleen zichtbaar voor de moderators."
|
||||
addModerationNote: "Moderatienotitie toevoegen"
|
||||
moderationLogs: "Moderatieprotocollen"
|
||||
nUsersMentioned: "Vermeld door {n} gebruikers"
|
||||
securityKeyAndPasskey: "Beveiligings- en pasjessleutels"
|
||||
securityKey: "Beveiligingssleutel"
|
||||
lastUsed: "Laatst gebruikt"
|
||||
lastUsedAt: "Laatst gebruikt: {t}"
|
||||
unregister: "Uitschrijven"
|
||||
passwordLessLogin: "Inloggen zonder wachtwoord"
|
||||
passwordLessLoginDescription: "Maakt aanmelden zonder wachtwoord mogelijk met een beveiligingstoken of -wachtsleutel"
|
||||
resetPassword: "Wachtwoord terugzetten"
|
||||
newPasswordIs: "Het nieuwe wachtwoord is „{password}”."
|
||||
reduceUiAnimation: "Verminder beweging in de UI"
|
||||
share: "Delen"
|
||||
notFound: "Niet gevonden"
|
||||
notFoundDescription: "Er is geen pagina gevonden onder deze URL."
|
||||
uploadFolder: "Standaardmap voor uploaden"
|
||||
markAsReadAllNotifications: "Markeer alle meldingen als gelezen"
|
||||
markAsReadAllUnreadNotes: "Markeer alle berichten als gelezen"
|
||||
@@ -489,53 +423,7 @@ retype: "Opnieuw invoeren"
|
||||
noteOf: "Notitie van {user}"
|
||||
quoteAttached: "Citaat"
|
||||
quoteQuestion: "Toevoegen als citaat?"
|
||||
attachAsFileQuestion: "De tekst op het klembord is te lang. Wilt u het als een tekstbestand bijvoegen?"
|
||||
onlyOneFileCanBeAttached: "Per bericht kan slechts één bestand worden bijgevoegd"
|
||||
signinRequired: "Gelieve te registreren of in te loggen om verder te gaan"
|
||||
signinOrContinueOnRemote: "Ga naar je eigen instantie of registreer je/log in op deze server om door te gaan."
|
||||
invitations: "Uitnodigen"
|
||||
invitationCode: "Uitnodigingscode"
|
||||
checking: "Wordt gecheckt ..."
|
||||
available: "Beschikbaar"
|
||||
unavailable: "Onbeschikbaar"
|
||||
usernameInvalidFormat: "Je kunt kleine letters, hoofdletters, cijfers en onderstrepingstekens gebruiken."
|
||||
tooShort: "Te kort"
|
||||
tooLong: "Te lang"
|
||||
weakPassword: "Zwak wachtwoord"
|
||||
normalPassword: "Redelijke wachtwoord"
|
||||
strongPassword: "Sterk wachtwoord"
|
||||
passwordMatched: "Lucifers"
|
||||
passwordNotMatched: "Komt niet overeen"
|
||||
signinWith: "Aanmelden met {x}"
|
||||
signinFailed: "Inloggen mislukt. Controleer gebruikersnaam en wachtwoord."
|
||||
or: "Of"
|
||||
language: "Taal"
|
||||
uiLanguage: "Taal van gebruikersinterface"
|
||||
aboutX: "Over {x}"
|
||||
emojiStyle: "Emoji-stijl"
|
||||
native: "Inheems"
|
||||
menuStyle: "Menustijl"
|
||||
style: "Stijl"
|
||||
drawer: "Lade"
|
||||
popup: "Pop-up"
|
||||
showNoteActionsOnlyHover: "Toon notitiemenu alleen bij muisaanwijzer"
|
||||
showReactionsCount: "Zie het aantal reacties op notities"
|
||||
noHistory: "Geen geschiedenis gevonden"
|
||||
signinHistory: "Inloggeschiedenis"
|
||||
enableAdvancedMfm: "Uitgebreide MFM activeren"
|
||||
enableAnimatedMfm: "Geanimeerde MFM activeren"
|
||||
doing: "In uitvoering..."
|
||||
category: "Categorie"
|
||||
tags: "Aliassen"
|
||||
docSource: "Broncode van dit document"
|
||||
createAccount: "Gebruikersaccount maken"
|
||||
existingAccount: "Bestaand gebruikersaccount"
|
||||
regenerate: "Regenereer"
|
||||
fontSize: "Lettergrootte"
|
||||
mediaListWithOneImageAppearance: "Hoogte van medialijsten met slechts één afbeelding"
|
||||
limitTo: "Beperken tot {x}"
|
||||
noFollowRequests: "Je hebt geen lopende volgverzoeken"
|
||||
openImageInNewTab: "Afbeeldingen in nieuw tabblad openen"
|
||||
dashboard: "Overzicht"
|
||||
local: "Lokaal"
|
||||
remote: "Remote"
|
||||
@@ -550,395 +438,20 @@ promote: "Promoot"
|
||||
numberOfDays: "Aantal dagen"
|
||||
hideThisNote: "Verberg deze notitie"
|
||||
showFeaturedNotesInTimeline: "Laat featured notities in tijdlijn zien"
|
||||
objectStorage: "Object Storage"
|
||||
useObjectStorage: "Object Storage gebruiken"
|
||||
objectStorageBaseUrl: "Basis-URL"
|
||||
objectStorageBaseUrlDesc: "De URL die wordt gebruikt als referentie. Als je een CDN of proxy gebruikt, voer dan de URL daarvan in. Gebruik voor S3 ‘https://<bucket>.s3.amazonaws.com’. Gebruik voor GCS of vergelijkbaar ‘https://storage.googleapis.com/<bucket>’."
|
||||
objectStorageBucket: "Bucket"
|
||||
objectStorageBucketDesc: "Geef de bucketnaam op die bij je provider wordt gebruikt."
|
||||
objectStoragePrefix: "Prefix"
|
||||
objectStoragePrefixDesc: "Bestanden worden opgeslagen in de mappen onder deze prefix."
|
||||
objectStorageEndpoint: "Endpoint"
|
||||
objectStorageEndpointDesc: "Laat dit leeg als je AWS S3 gebruikt, anders geef je het eindpunt op als ‘<host>’ of ‘<host>:<port>’, afhankelijk van de service die je gebruikt."
|
||||
objectStorageRegion: "Region"
|
||||
objectStorageRegionDesc: "Voer een regio in zoals “xx-east-1”. Als je provider geen onderscheid maakt tussen regio's, voer dan “us-east-1” in. Laat leeg als je AWS-configuratiebestanden of omgevingsvariabelen gebruikt."
|
||||
objectStorageUseSSL: "SSL gebruiken"
|
||||
objectStorageUseSSLDesc: "Deactiveer dit als u geen HTTPS gebruikt voor API-verbindingen"
|
||||
objectStorageUseProxy: "Verbinden via proxy"
|
||||
objectStorageUseProxyDesc: "Deactiveer dit als u geen proxy wilt gebruiken voor verbindingen met de API"
|
||||
objectStorageSetPublicRead: "Instellen op “public-read” op upload"
|
||||
s3ForcePathStyleDesc: "Als s3ForcePathStyle is geactiveerd, moet de bucketnaam niet worden opgegeven in de hostnaam van de URL, maar in het pad van de URL. Deze optie moet mogelijk worden geactiveerd als services zoals een zelfbediende Minio-instantie worden gebruikt."
|
||||
serverLogs: "Serverprotocollen"
|
||||
deleteAll: "Alles verwijderen"
|
||||
showFixedPostForm: "Het postingformulier bovenaan de tijdbalk weergeven"
|
||||
showFixedPostFormInChannel: "Het postingformulier bovenaan de tijdbalk weergeven (Kanalen)"
|
||||
withRepliesByDefaultForNewlyFollowed: "Toon replies van nieuw gevolgde gebruikers standaard in de tijdlijn"
|
||||
newNoteRecived: "Er zijn nieuwe notities"
|
||||
sounds: "Geluiden"
|
||||
sound: "Geluid"
|
||||
listen: "Luisteren"
|
||||
none: "Niets"
|
||||
showInPage: "Weergeven in een pagina"
|
||||
popout: "Pop-Up"
|
||||
volume: "Volume"
|
||||
masterVolume: "Hoofdvolume"
|
||||
notUseSound: "Geluid uitschakelen"
|
||||
useSoundOnlyWhenActive: "Geluid alleen inschakelen wanneer Misskey actief is"
|
||||
details: "Details"
|
||||
renoteDetails: "Renote Details"
|
||||
chooseEmoji: "Emoji selecteren"
|
||||
unableToProcess: "De operatie kan niet worden voltooid."
|
||||
recentUsed: "Recent gebruikt"
|
||||
install: "Installeren"
|
||||
uninstall: "Deinstalleren"
|
||||
installedApps: "Geautoriseerde toepassingen"
|
||||
nothing: "Niets te zien hier"
|
||||
installedDate: "Geautoriseerd at"
|
||||
lastUsedDate: "Laatst gebruikt at"
|
||||
state: "Status"
|
||||
sort: "Sorteren"
|
||||
ascendingOrder: "Oplopende volgorde"
|
||||
descendingOrder: "Aflopende volgorde"
|
||||
scratchpad: "Testomgeving"
|
||||
scratchpadDescription: "De testomgeving biedt een gebied voor AiScript experimenten. Daar kunt u AiScript schrijven en uitvoeren en de effecten ervan op Misskey controleren."
|
||||
uiInspector: "UI-inspecteur"
|
||||
uiInspectorDescription: "De lijst met servers van UI-componenten kan worden bekeken in de cache. De UI-component wordt gegenereerd door de functie Ui:C:"
|
||||
output: "Uitvoer"
|
||||
script: "Script"
|
||||
disablePagesScript: "AiScript uitschakelen op pagina's"
|
||||
updateRemoteUser: "Gebruikersinformatie bijwerken"
|
||||
unsetUserAvatar: "Avatar verwijderen"
|
||||
unsetUserAvatarConfirm: "Weet je zeker dat je je avatar wil verwijderen?"
|
||||
unsetUserBanner: "Banner verwijderen"
|
||||
unsetUserBannerConfirm: "Weet je zeker dat je je banner wil verwijderen?"
|
||||
deleteAllFiles: "Alle bestanden verwijderen"
|
||||
deleteAllFilesConfirm: "Wil je echt alle bestanden verwijderen?"
|
||||
removeAllFollowing: "Ontvolg alle gevolgde gebruikers"
|
||||
removeAllFollowingDescription: "Door dit uit te voeren worden alle accounts van {host} ontvolgd. Voer dit uit als de instantie bijvoorbeeld niet meer bestaat."
|
||||
userSuspended: "Deze gebruiker is geschorst."
|
||||
userSilenced: "Deze gebruiker is instantiebreed gedempt."
|
||||
yourAccountSuspendedTitle: "Deze account is geschorst"
|
||||
yourAccountSuspendedDescription: "Dit gebruikersaccount is geschorst omdat het de gebruiksvoorwaarden van deze server heeft geschonden. Neem contact op met de operator voor meer informatie. Maak geen nieuwe gebruikersaccount aan."
|
||||
tokenRevoked: "Ongeldig token"
|
||||
tokenRevokedDescription: "Het token is verlopen. Log opnieuw in."
|
||||
accountDeleted: "Het gebruikersaccount is verwijderd"
|
||||
accountDeletedDescription: "Deze account is verwijderd."
|
||||
menu: "Menu"
|
||||
divider: "Scheider"
|
||||
addItem: "Element toevoegen"
|
||||
rearrange: "Sorteren"
|
||||
relays: "Relays"
|
||||
addRelay: "Relay toevoegen"
|
||||
inboxUrl: "Inbox-URL"
|
||||
addedRelays: "Toegevoegd Relays"
|
||||
serviceworkerInfo: "Moet worden geactiveerd voor pushmeldingen."
|
||||
deletedNote: "Verwijderde notitie"
|
||||
invisibleNote: "Privé notitie"
|
||||
enableInfiniteScroll: "Automatisch meer laden"
|
||||
visibility: "Zichtbaarheid"
|
||||
poll: "Peiling"
|
||||
useCw: "Inhoudswaarschuwing gebruiken"
|
||||
enablePlayer: "Videospeler openen"
|
||||
disablePlayer: "Videospeler sluiten"
|
||||
expandTweet: "Notitie uitklappen"
|
||||
themeEditor: "Thema-editor"
|
||||
description: "Beschrijving"
|
||||
describeFile: "Beschrijving toevoegen"
|
||||
enterFileDescription: "Beschrijving invoeren"
|
||||
author: "Auteur"
|
||||
leaveConfirm: "Er zijn niet-opgeslagen wijzigingen. Wil je ze verwijderen?"
|
||||
manage: "Beheer"
|
||||
plugins: "Plugins"
|
||||
preferencesBackups: "Instellingen Back-ups"
|
||||
deck: "Dek"
|
||||
undeck: "Dek verlaten"
|
||||
useBlurEffectForModal: "Vervagingseffect gebruiken voor modals"
|
||||
useFullReactionPicker: "Volledige reaktieselectier gebruiken"
|
||||
width: "Breedte"
|
||||
height: "Hoogte"
|
||||
large: "Groot"
|
||||
medium: "Medium"
|
||||
small: "Klein"
|
||||
generateAccessToken: "Toegangstoken genereren"
|
||||
permission: "Machtigingen"
|
||||
adminPermission: "Administratorrechten"
|
||||
enableAll: "Alle activeren"
|
||||
disableAll: "Alle deactiveren"
|
||||
tokenRequested: "Toegang verlenen tot het gebruikersaccount"
|
||||
pluginTokenRequestedDescription: "Deze plugin kan de hier geconfigureerde autorisaties gebruiken."
|
||||
notificationType: "Type melding"
|
||||
edit: "Bewerken"
|
||||
emailServer: "Email-Server"
|
||||
enableEmail: "Email distributie inschakelen"
|
||||
emailConfigInfo: "Wordt gebruikt om je email te bevestigen tijdens het aanmelden of als je je wachtwoord bent vergeten"
|
||||
email: "Email"
|
||||
emailAddress: "Email adres"
|
||||
smtpConfig: "SMTP-server configuratie"
|
||||
smtpHost: "Server"
|
||||
smtpPort: "Poort"
|
||||
smtpUser: "Gebruikersnaam"
|
||||
smtpPass: "Wachtwoord"
|
||||
emptyToDisableSmtpAuth: "Laat gebruikersnaam en wachtwoord leeg om SMTP-authenticatie uit te schakelen."
|
||||
smtpSecure: "Impliciet SSL/TLS gebruiken voor SMTP-verbindingen"
|
||||
smtpSecureInfo: "Schakel dit uit bij gebruik van STARTTLS"
|
||||
testEmail: "Emailversand testen"
|
||||
wordMute: "Woord dempen"
|
||||
wordMuteDescription: "Minimaliseert notities die het gespecificeerde woord of zin bevatten. Geminimaliseerde notities kunnen worden weergegeven door er op te klikken."
|
||||
hardWordMute: "Harde woorddemping"
|
||||
showMutedWord: "Gedempte woorden weergeven"
|
||||
hardWordMuteDescription: "Verbert notities die het gespecificeerde woord of zin bevatten. In tegenstelling tot woorddemping wordt de notitie volledig verborgen."
|
||||
regexpError: "Fout in reguliere expressie"
|
||||
regexpErrorDescription: "Er is een fout opgetreden in de reguliere expressie op regel {line} van uw {tab} woord dempen:"
|
||||
instanceMute: "Instantie dempers"
|
||||
userSaysSomething: "{name} zei iets"
|
||||
userSaysSomethingAbout: "{name} zei iets over '{word}'"
|
||||
makeActive: "Activeren"
|
||||
display: "Weergave"
|
||||
copy: "Kopiëren"
|
||||
copiedToClipboard: "Naar het klembord gekopieerd"
|
||||
metrics: "Metrieken"
|
||||
overview: "Overzicht"
|
||||
logs: "Protocollen"
|
||||
delayed: "Vertraagd"
|
||||
database: "Database"
|
||||
channel: "Kanalen"
|
||||
create: "Creëer"
|
||||
notificationSetting: "Instellingen meldingen"
|
||||
notificationSettingDesc: "Selecteer het type meldingen dat moet worden weergegeven."
|
||||
useGlobalSetting: "Globale instelling gebruiken"
|
||||
useGlobalSettingDesc: "Als deze optie is ingeschakeld, worden de meldingsinstellingen van je account gebruikt. Als deze optie uitgeschakeld is, kunnen individuele configuraties worden gemaakt."
|
||||
other: "Ander"
|
||||
regenerateLoginToken: "Login token opnieuw genereren"
|
||||
regenerateLoginTokenDescription: "Regenereren van het token dat intern wordt gebruikt om in te loggen. Dit is normaal gezien niet nodig. Alle apparaten worden afgemeld tijdens het regenereren."
|
||||
theKeywordWhenSearchingForCustomEmoji: "Dit is het keyword dat gebruikt wordt bij het zoeken naar eigen emojis."
|
||||
setMultipleBySeparatingWithSpace: "Scheid elementen met een spatie om meerdere instellingen te configureren."
|
||||
fileIdOrUrl: "Bestands-ID of URL"
|
||||
behavior: "Gedrag"
|
||||
sample: "Voorbeeld"
|
||||
abuseReports: "Meldt"
|
||||
reportAbuse: "Meld"
|
||||
reportAbuseRenote: "Meld renote"
|
||||
reportAbuseOf: "Meld {name}"
|
||||
fillAbuseReportDescription: "Vul s.v.p. de details in over deze melding. Geef, als het over een specifieke notitie gaat, ook de URL op."
|
||||
abuseReported: "Uw rapport is verzonden. Hartelijk dank."
|
||||
reporter: "Verslaggever"
|
||||
reporteeOrigin: "Oorsprong van de gemelde persoon"
|
||||
reporterOrigin: "Verslaggever Oorsprong"
|
||||
send: "Stuur"
|
||||
openInNewTab: "In nieuw tabblad openen"
|
||||
openInSideView: "In zijaanzicht openen"
|
||||
defaultNavigationBehaviour: "Standaard navigatie gedrag"
|
||||
editTheseSettingsMayBreakAccount: "Het wijzigen van deze instellingen kan je account beschadigen."
|
||||
instanceTicker: "Instantie-informatie van notities"
|
||||
waitingFor: "Wachten op {x}"
|
||||
random: "Willekeurig"
|
||||
system: "Systeem"
|
||||
switchUi: "UI omschakelen"
|
||||
desktop: "Desktop"
|
||||
clip: "Clip aanmaken"
|
||||
createNew: "Nieuwe aanmaken"
|
||||
optional: "Optioneel"
|
||||
createNewClip: "Nieuwe clip aanmaken"
|
||||
unclip: "Van clip verwijderen"
|
||||
confirmToUnclipAlreadyClippedNote: "Deze notitie is al toegevoegd aan de clip “{name}”. Wil je deze uit deze clip verwijderen?"
|
||||
public: "Openbare"
|
||||
private: "Privé"
|
||||
i18nInfo: "Misskey wordt in veel verschillende talen vertaald door vrijwilligers. Je kunt helpen op {link}"
|
||||
manageAccessTokens: "Toegangstokens beheren"
|
||||
accountInfo: "Informatie over gebruikersaccount"
|
||||
notesCount: "Aantal notities"
|
||||
repliesCount: "Aantal verzonden replies"
|
||||
renotesCount: "Aantal verzonden renotes"
|
||||
repliedCount: "Aantal ontvangen replies"
|
||||
renotedCount: "Aantal ontvangen renotes"
|
||||
followingCount: "Aantal gevolgde accounts"
|
||||
followersCount: "Aantal volgers"
|
||||
sentReactionsCount: "Aantal verzonden reacties"
|
||||
receivedReactionsCount: "Aantal ontvangen reacties"
|
||||
pollVotesCount: "Aantal verzonden peiling stemmen"
|
||||
pollVotedCount: "Aantal ontvangen peiling stemmen"
|
||||
yes: "Ja"
|
||||
no: "Nee"
|
||||
driveFilesCount: "Aantal bestanden in station"
|
||||
driveUsage: "Schijfruimtegebruik"
|
||||
noCrawle: "Crawler-indexering verwerpen"
|
||||
noCrawleDescription: "Vraag zoekmachines om je eigen profielpagina, notities, pagina's, enz. niet te indexeren."
|
||||
lockedAccountInfo: "Tenzij je de zichtbaarheid van je notities instelt op “Alleen volgers”, zijn je notities zichtbaar voor iedereen, zelfs als je vereist dat volgers handmatig worden goedgekeurd."
|
||||
alwaysMarkSensitive: "Markeer media standaard als gevoelig"
|
||||
loadRawImages: "Toon altijd originele afbeeldingen in plaats van miniaturen"
|
||||
disableShowingAnimatedImages: "Speel geen geanimeerde afbeeldingen af"
|
||||
highlightSensitiveMedia: "Markeer gevoelige media"
|
||||
verificationEmailSent: "Er is een bevestigingsmail naar uw e-mailadres verzonden. Ga naar de link in de e-mail om het verificatieproces te voltooien."
|
||||
notSet: "Niet geconfigureerd"
|
||||
emailVerified: "Emailadres bevestigd"
|
||||
noteFavoritesCount: "Aantal notities gemarkeerd als favoriet"
|
||||
pageLikesCount: "Aantal gelikete pagina's"
|
||||
pageLikedCount: "Aantal ontvangen pagina-likes"
|
||||
contact: "Contact"
|
||||
useSystemFont: "Het standaardlettertype van het systeem gebruiken"
|
||||
clips: "Clips"
|
||||
experimentalFeatures: "Experimentele functionaliteiten"
|
||||
experimental: "Experimentele"
|
||||
thisIsExperimentalFeature: "Dit is een experimentele functie. De functionaliteit kan worden gewijzigd en werkt mogelijk niet zoals bedoeld."
|
||||
developer: "Ontwikkelaar"
|
||||
makeExplorable: "Gebruikersaccount zichtbaar maken in “Verkennen”"
|
||||
makeExplorableDescription: "Als deze optie is uitgeschakeld, is uw gebruikersaccount niet zichtbaar in het gedeelte “Verkennen”."
|
||||
duplicate: "Dupliceren"
|
||||
left: "Links"
|
||||
center: "Center"
|
||||
wide: "Breed"
|
||||
narrow: "Smal"
|
||||
reloadToApplySetting: "Deze instelling gaat pas in nadat de pagina herladen is. Nu herladen?"
|
||||
needReloadToApply: "Deze instelling wordt van kracht nadat de pagina is vernieuwd."
|
||||
showTitlebar: "Titelbalk weergeven"
|
||||
clearCache: "Cache opschonen"
|
||||
onlineUsersCount: "{n} Gebruikers zijn online"
|
||||
nUsers: "{n} Gebruikers"
|
||||
nNotes: "{n} Notities"
|
||||
sendErrorReports: "Foutrapporten sturen"
|
||||
sendErrorReportsDescription: "Als u deze optie inschakelt, wordt gedetailleerde foutinformatie met Misskey gedeeld wanneer zich een probleem voordoet. Dit helpt de kwaliteit van Misskey te verbeteren.\nDit omvat informatie zoals de versie van uw OS, welke browser u gebruikt, uw activiteit in Misskey, enz."
|
||||
myTheme: "Mijn thema"
|
||||
backgroundColor: "Achtergrondkleur"
|
||||
accentColor: "Accentkleur"
|
||||
textColor: "Tekstkleur"
|
||||
saveAs: "Opslaan als…"
|
||||
advanced: "Geavanceerd"
|
||||
advancedSettings: "Geavanceerde instellingen"
|
||||
value: "Waarde"
|
||||
createdAt: "Aangemaakt at"
|
||||
updatedAt: "Laatst gewijzigd at"
|
||||
saveConfirm: "Wijzigingen opslaan?"
|
||||
deleteConfirm: "Echt verwijderen?"
|
||||
invalidValue: "Ongeldige waarde."
|
||||
registry: "Registry"
|
||||
closeAccount: "Gebruikersaccount sluiten"
|
||||
currentVersion: "Huidige versie"
|
||||
latestVersion: "Nieuwste versie"
|
||||
youAreRunningUpToDateClient: "Je gebruikt de nieuwste versie van je client."
|
||||
newVersionOfClientAvailable: "Er is een nieuwere versie van je client beschikbaar."
|
||||
usageAmount: "Gebruik"
|
||||
capacity: "Capaciteit"
|
||||
inUse: "Gebruikt"
|
||||
editCode: "Code bewerken"
|
||||
apply: "Toepassen"
|
||||
receiveAnnouncementFromInstance: "Meldingen ontvangen van deze instantie"
|
||||
emailNotification: "E-mailmeldingen"
|
||||
publish: "Publiceren"
|
||||
inChannelSearch: "In kanaal zoeken"
|
||||
useReactionPickerForContextMenu: "Open reactieselectie door rechts te klikken"
|
||||
typingUsers: "{users} is/zijn aan het schrijven..."
|
||||
jumpToSpecifiedDate: "Naar een specifieke datum springen"
|
||||
showingPastTimeline: "Momenteel wordt een oude tijdlijn weergeven"
|
||||
clear: "Terugkeren"
|
||||
markAllAsRead: "Alles als gelezen markeren"
|
||||
goBack: "Terug"
|
||||
unlikeConfirm: "Wil je echt je like verwijderen?"
|
||||
fullView: "Volledig zicht"
|
||||
quitFullView: "Volledig zicht verlaten"
|
||||
addDescription: "Beschrijving toevoegen"
|
||||
userPagePinTip: "Je kunt hier notities tonen door “Vastmaken aan profiel” te selecteren in het menu van de individuele notities."
|
||||
notSpecifiedMentionWarning: "Deze notitie bevat verwijzingen naar gebruikers die niet zijn geselecteerd als ontvangers"
|
||||
info: "Over"
|
||||
userInfo: "Gebruikersinformatie"
|
||||
unknown: "Onbekend"
|
||||
onlineStatus: "Online status"
|
||||
hideOnlineStatus: "Online status verbergen"
|
||||
hideOnlineStatusDescription: "Het verbergen van je online status vermindert het nut van functies zoals zoeken."
|
||||
online: "Online"
|
||||
active: "Actief"
|
||||
offline: "Offline"
|
||||
notRecommended: "Niet aanbevolen"
|
||||
botProtection: "Beveiliging tegen bots"
|
||||
instanceBlocking: "Geblokkeerde/gedempte Instanties"
|
||||
selectAccount: "Gebruikersaccount selecteren"
|
||||
switchAccount: "Account wisselen"
|
||||
enabled: "Ingeschakeld"
|
||||
disabled: "Uitgeschakeld"
|
||||
quickAction: "Snelle acties"
|
||||
user: "Gebruikers"
|
||||
administration: "Beheer"
|
||||
accounts: "Gebruikersaccounts"
|
||||
switch: "Wissel"
|
||||
noMaintainerInformationWarning: "Operatorinformatie is niet geconfigureerd."
|
||||
noInquiryUrlWarning: "Contact-URL niet opgegeven"
|
||||
noBotProtectionWarning: "Bescherming tegen bots is niet geconfigureerd."
|
||||
configure: "Configureer"
|
||||
postToGallery: "Nieuw galerijbericht maken"
|
||||
postToHashtag: "Post naar deze hashtag"
|
||||
gallery: "Galerij"
|
||||
recentPosts: "Recente berichten"
|
||||
popularPosts: "Populair berichten"
|
||||
shareWithNote: "Delen met notitie"
|
||||
ads: "Advertenties"
|
||||
expiration: "Deadline"
|
||||
startingperiod: "Start"
|
||||
memo: "Memo"
|
||||
priority: "Prioriteit"
|
||||
high: "Hoge"
|
||||
middle: "Medium"
|
||||
low: "Lage"
|
||||
emailNotConfiguredWarning: "E-mailadres niet ingesteld."
|
||||
ratio: "Verhouding"
|
||||
previewNoteText: "Show voorproefje"
|
||||
customCss: "Aangepaste CSS"
|
||||
customCssWarn: "Gebruik deze instelling alleen als je weet wat het doet. Ongeldige invoer kan ertoe leiden dat de client niet meer normaal functioneert."
|
||||
global: "Globaal"
|
||||
squareAvatars: "Toon profielfoto's as vierkant"
|
||||
sent: "Verzonden"
|
||||
received: "Ontvangen"
|
||||
searchResult: "Zoekresultaten"
|
||||
hashtags: "Hashtags"
|
||||
troubleshooting: "Probleemoplossing"
|
||||
useBlurEffect: "Vervagingseffecten in de UI gebruike"
|
||||
learnMore: "Meer leren"
|
||||
misskeyUpdated: "Misskey is bijgewerkt!"
|
||||
whatIsNew: "Wijzigingen tonen"
|
||||
translate: "Vertalen"
|
||||
translatedFrom: "Vertaald uit {x}"
|
||||
accountDeletionInProgress: "De verwijdering van je gebruikersaccount wordt momenteel verwerkt."
|
||||
usernameInfo: "Een naam die kan worden gebruikt om je gebruikersaccount op deze server te identificeren. Je kunt het alfabet (a~z, A~Z), cijfers (0~9) of underscores (_) gebruiken. Gebruikersnamen kunnen later niet worden gewijzigd."
|
||||
aiChanMode: "Ai Mode"
|
||||
devMode: "Ontwikkelaar modus"
|
||||
keepCw: "Inhoudswaarschuwingen behouden"
|
||||
pubSub: "Pub/Sub Gebruikersaccounts"
|
||||
lastCommunication: "Laatste communicatie"
|
||||
resolved: "Opgelost"
|
||||
unresolved: "Onopgelost"
|
||||
breakFollow: "Volger verwijderen"
|
||||
breakFollowConfirm: "Deze volger echt weghalen?"
|
||||
itsOn: "Ingeschakeld"
|
||||
itsOff: "Uitgeschakeld"
|
||||
on: "Op"
|
||||
off: "Uit"
|
||||
emailRequiredForSignup: "Vereist e-mailadres voor aanmelding"
|
||||
unread: "Ongelezen"
|
||||
filter: "Filter"
|
||||
controlPanel: "Controlepaneel"
|
||||
manageAccounts: "Gebruikersaccounts beheren"
|
||||
makeReactionsPublic: "Reactiegeschiedenis publiceren"
|
||||
makeReactionsPublicDescription: "Hierdoor wordt de lijst met al je eerdere reacties openbaar."
|
||||
classic: "Classic"
|
||||
muteThread: "Discussies dempen "
|
||||
unmuteThread: "Dempen van discussie ongedaan maken"
|
||||
followingVisibility: "Zichtbaarheid van gevolgden"
|
||||
followersVisibility: "Zichtbaarheid van volgers"
|
||||
continueThread: "Bekijk draad voortzetting"
|
||||
deleteAccountConfirm: "Je gebruikersaccount wordt onherroepelijk verwijderd. Wil je nog steeds doorgaan?"
|
||||
incorrectPassword: "Onjuist wachtwoord."
|
||||
incorrectTotp: "Het eenmalige wachtwoord is incorrect of verlopen"
|
||||
voteConfirm: "Bevestig je je stem op “{choice}”?"
|
||||
hide: "Verbergen"
|
||||
useDrawerReactionPickerForMobile: "Toon reactiekiezer als lade op mobiel"
|
||||
welcomeBackWithName: "Welkom terug, {name}"
|
||||
clickToFinishEmailVerification: "Druk op [{ok}] om de e-mailbevestiging af te ronden."
|
||||
searchByGoogle: "Zoeken"
|
||||
threeMonths: "3 maanden"
|
||||
oneYear: "1 jaar"
|
||||
threeDays: "3 dagen"
|
||||
cropImage: "Afbeelding bijsnijden"
|
||||
cropImageAsk: "Bijsnijdengevraagd"
|
||||
file: "Bestanden"
|
||||
account: "Gebruikersaccounts"
|
||||
pushNotification: "Pushberichten"
|
||||
subscribePushNotification: "Push meldingen inschakelen"
|
||||
unsubscribePushNotification: "Pushberichten uitschakelen"
|
||||
@@ -946,62 +459,20 @@ pushNotificationAlreadySubscribed: "Pushberichtrn al ingeschakeld"
|
||||
windowMaximize: "Maximaliseren"
|
||||
windowRestore: "Herstellen"
|
||||
loggedInAsBot: "Momenteel als bot ingelogd"
|
||||
show: "Weergave"
|
||||
correspondingSourceIsAvailable: "De bijbehorende broncode is beschikbaar bij {anchor}"
|
||||
invalidParamErrorDescription: "De aanvraagparameters zijn ongeldig. Dit komt meestal door een bug, maar kan ook omdat de invoer te lang is of iets dergelijks."
|
||||
collapseRenotes: "Renotes die je al gezien hebt, inklappen"
|
||||
collapseRenotesDescription: "Klapt notities in waar je al op gereageerd hebt of die je al gerenotet hebt."
|
||||
prohibitedWords: "Verboden woorden"
|
||||
prohibitedWordsDescription: "Activeert een foutmelding als er geprobeerd wordt een notitie met de ingestelde woorden te plaatsen. Meerdere woorden kunnen worden ingesteld, elk op hun eigen regel."
|
||||
hiddenTags: "Verborgen hashtags"
|
||||
hiddenTagsDescription: "Selecteer tags die niet worden weergegeven in de trends. Meerdere tags kunnen worden geregistreerd, elk op hun eigen regel."
|
||||
enableStatsForFederatedInstances: "Statistieken van remote servers ontvangen"
|
||||
limitWidthOfReaction: "Limiteert de maximale breedte van reacties en geef ze verkleind weer"
|
||||
audio: "Audio"
|
||||
audioFiles: "Audio"
|
||||
archived: "Gearchiveerd"
|
||||
unarchive: "Dearchiveren"
|
||||
lookupConfirm: "Weet je zeker dat je dit wil opzoeken?"
|
||||
openTagPageConfirm: "Wil je deze hashtagpagina openen?"
|
||||
specifyHost: "Specificeer host"
|
||||
icon: "Avatar"
|
||||
replies: "Antwoorden"
|
||||
replies: "Antwoord"
|
||||
renotes: "Herdelen"
|
||||
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?"
|
||||
information: "Over"
|
||||
_imageEditing:
|
||||
_vars:
|
||||
filename: "Bestandsnaam"
|
||||
_chat:
|
||||
invitations: "Uitnodigen"
|
||||
noHistory: "Geen geschiedenis gevonden"
|
||||
members: "Leden"
|
||||
home: "Startpagina"
|
||||
send: "Stuur"
|
||||
_delivery:
|
||||
stop: "Opgeschort"
|
||||
_type:
|
||||
none: "Publiceren"
|
||||
_role:
|
||||
priority: "Prioriteit"
|
||||
_priority:
|
||||
low: "Lage"
|
||||
middle: "Medium"
|
||||
high: "Hoge"
|
||||
_ffVisibility:
|
||||
public: "Publiceren"
|
||||
_ad:
|
||||
back: "Terug"
|
||||
_email:
|
||||
_follow:
|
||||
title: "volgde jou"
|
||||
_theme:
|
||||
description: "Beschrijving"
|
||||
keys:
|
||||
mention: "Vermelding"
|
||||
renote: "Herdelen"
|
||||
divider: "Scheider"
|
||||
_sfx:
|
||||
note: "Notities"
|
||||
notification: "Meldingen"
|
||||
@@ -1022,16 +493,10 @@ _cw:
|
||||
_visibility:
|
||||
home: "Startpagina"
|
||||
followers: "Volgers"
|
||||
specified: "Directe notities"
|
||||
_postForm:
|
||||
_howToUse:
|
||||
visibility_title: "Zichtbaarheid"
|
||||
menu_title: "Menu"
|
||||
_profile:
|
||||
name: "Naam"
|
||||
username: "Gebruikersnaam"
|
||||
_exportOrImport:
|
||||
clips: "Clip aanmaken"
|
||||
followingList: "Volgend"
|
||||
muteList: "Dempen"
|
||||
blockingList: "Blokkeren"
|
||||
@@ -1042,9 +507,6 @@ _charts:
|
||||
federation: "Federatie"
|
||||
_timelines:
|
||||
home: "Startpagina"
|
||||
_play:
|
||||
script: "Script"
|
||||
summary: "Beschrijving"
|
||||
_pages:
|
||||
blocks:
|
||||
image: "Afbeeldingen"
|
||||
@@ -1067,16 +529,9 @@ _deck:
|
||||
tl: "Tijdlijn"
|
||||
antenna: "Antennes"
|
||||
list: "Lijsten"
|
||||
channel: "Kanalen"
|
||||
mentions: "Vermeldingen"
|
||||
direct: "Directe notities"
|
||||
_webhookSettings:
|
||||
name: "Naam"
|
||||
active: "Ingeschakeld"
|
||||
_abuseReport:
|
||||
_notificationRecipient:
|
||||
_recipientType:
|
||||
mail: "Email"
|
||||
_moderationLogTypes:
|
||||
suspend: "Opschorten"
|
||||
resetPassword: "Wachtwoord terugzetten"
|
||||
@@ -1085,10 +540,3 @@ _reversi:
|
||||
_remoteLookupErrors:
|
||||
_noSuchObject:
|
||||
title: "Niet gevonden"
|
||||
_search:
|
||||
searchScopeAll: "Alle"
|
||||
_watermarkEditor:
|
||||
image: "Afbeeldingen"
|
||||
advanced: "Geavanceerd"
|
||||
_qr:
|
||||
showTabTitle: "Weergave"
|
||||
|
||||
@@ -171,6 +171,7 @@ noUsers: "Det er ingen brukere"
|
||||
editProfile: "Rediger profil"
|
||||
noteDeleteConfirm: "Er du sikker på at du vil slette denne Noten?"
|
||||
pinLimitExceeded: "Du kan ikke feste flere."
|
||||
intro: "Installasjonen av Misskey er ferdig! Vennligst opprett en administratorkonto."
|
||||
done: "Ferdig"
|
||||
default: "Standard"
|
||||
defaultValueIs: "Standard: {value}"
|
||||
@@ -298,6 +299,8 @@ text: "Tekst"
|
||||
next: "Neste"
|
||||
retype: "Gjenta"
|
||||
quoteAttached: "Sitat"
|
||||
noMessagesYet: "Ingen meldinger ennå"
|
||||
newMessageExists: "Det er nye meldinger"
|
||||
onlyOneFileCanBeAttached: "Du kan bare legge ved én fil i en melding"
|
||||
invitations: "Inviter"
|
||||
available: "Tilgjengelig"
|
||||
@@ -460,20 +463,6 @@ icon: "Avatar"
|
||||
replies: "Svar"
|
||||
renotes: "Renote"
|
||||
surrender: "Avbryt"
|
||||
information: "Informasjon"
|
||||
inMinutes: "Minutter"
|
||||
inDays: "Dager"
|
||||
_imageEditing:
|
||||
_vars:
|
||||
filename: "Filnavn"
|
||||
_imageFrameEditor:
|
||||
fontSerif: "Serif"
|
||||
fontSansSerif: "Sans Serif"
|
||||
_chat:
|
||||
invitations: "Inviter"
|
||||
members: "Medlemmer"
|
||||
home: "Hjem"
|
||||
send: "Send"
|
||||
_delivery:
|
||||
stop: "Suspendert"
|
||||
_initialAccountSetting:
|
||||
@@ -656,8 +645,6 @@ _visibility:
|
||||
home: "Hjem"
|
||||
followers: "Følgere"
|
||||
_postForm:
|
||||
_howToUse:
|
||||
menu_title: "Meny"
|
||||
_placeholders:
|
||||
a: "Hva skjer?"
|
||||
_profile:
|
||||
@@ -743,17 +730,3 @@ _moderationLogTypes:
|
||||
_remoteLookupErrors:
|
||||
_noSuchObject:
|
||||
title: "Ikke funnet"
|
||||
_search:
|
||||
searchScopeAll: "Alle"
|
||||
_watermarkEditor:
|
||||
scale: "Størrelse"
|
||||
text: "Tekst"
|
||||
type: "Type"
|
||||
image: "Bilder"
|
||||
_imageEffector:
|
||||
_fxProps:
|
||||
scale: "Størrelse"
|
||||
size: "Størrelse"
|
||||
color: "Farge"
|
||||
_qr:
|
||||
raw: "Tekst"
|
||||
|
||||
3
locales/package.json
Normal file
3
locales/package.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"type": "module"
|
||||
}
|
||||
@@ -230,6 +230,7 @@ noUsers: "Brak użytkowników"
|
||||
editProfile: "Edytuj profil"
|
||||
noteDeleteConfirm: "Czy na pewno chcesz usunąć ten wpis?"
|
||||
pinLimitExceeded: "Nie możesz przypiąć więcej wpisów."
|
||||
intro: "Zakończono instalację Misskey! Utwórz konto administratora."
|
||||
done: "Gotowe"
|
||||
processing: "Przetwarzanie"
|
||||
preview: "Podgląd"
|
||||
@@ -268,6 +269,7 @@ deleteAreYouSure: "Czy na pewno chcesz usunąć „{x}”?"
|
||||
resetAreYouSure: "Czy na pewno chcesz zresetować?"
|
||||
areYouSure: "Na pewno?"
|
||||
saved: "Zapisano"
|
||||
messaging: "Wiadomości"
|
||||
upload: "Wyślij"
|
||||
keepOriginalUploading: "Zachowaj oryginalny obraz"
|
||||
keepOriginalUploadingDescription: "Zapisuje oryginalnie przesłany obraz w niezmienionej postaci. Jeśli ta opcja jest wyłączona, po przesłaniu zostanie wygenerowana wersja do wyświetlenia w Internecie."
|
||||
@@ -280,6 +282,7 @@ uploadFromUrlMayTakeTime: "Wysyłanie może chwilę potrwać."
|
||||
explore: "Eksploruj"
|
||||
messageRead: "Przeczytano"
|
||||
noMoreHistory: "Nie ma dalszej historii"
|
||||
startMessaging: "Rozpocznij czat"
|
||||
nUsersRead: "przeczytano przez {n}"
|
||||
agreeTo: "Wyrażam zgodę na {0}"
|
||||
agree: "Zatwierdź"
|
||||
@@ -463,6 +466,8 @@ retype: "Wprowadź ponownie"
|
||||
noteOf: "Wpisy {user}"
|
||||
quoteAttached: "Zacytowano"
|
||||
quoteQuestion: "Czy na pewno chcesz umieścić cytat?"
|
||||
noMessagesYet: "Nie napisano jeszcze wiadomości"
|
||||
newMessageExists: "Masz nową wiadomość"
|
||||
onlyOneFileCanBeAttached: "Możesz załączyć tylko jeden plik do wiadomości"
|
||||
signinRequired: "Proszę się zalogować"
|
||||
invitations: "Zaproś"
|
||||
@@ -748,6 +753,7 @@ thisIsExperimentalFeature: "Ta funkcja jest eksperymentalna. Jej funkcjonalnoś
|
||||
developer: "Programista"
|
||||
makeExplorable: "Pokazuj konto na stronie „Eksploruj”"
|
||||
makeExplorableDescription: "Jeżeli wyłączysz tę opcję, Twoje konto nie będzie wyświetlać się w sekcji „Eksploruj”."
|
||||
showGapBetweenNotesInTimeline: "Pokazuj odstęp między wpisami na osi czasu."
|
||||
duplicate: "Duplikuj"
|
||||
left: "Lewo"
|
||||
center: "Wyśsrodkuj"
|
||||
@@ -1038,26 +1044,6 @@ flip: "Odwróć"
|
||||
lastNDays: "W ciągu ostatnich {n} dni"
|
||||
surrender: "Odrzuć"
|
||||
gameRetry: "Spróbuj ponownie"
|
||||
postForm: "Formularz tworzenia wpisu"
|
||||
information: "Informacje"
|
||||
inMinutes: "minuta"
|
||||
inDays: "dzień"
|
||||
widgets: "Widżety"
|
||||
presets: "Konfiguracja"
|
||||
_imageEditing:
|
||||
_vars:
|
||||
filename: "Nazwa pliku"
|
||||
_imageFrameEditor:
|
||||
header: "Nagłówek"
|
||||
font: "Czcionka"
|
||||
fontSerif: "Szeryfowa"
|
||||
fontSansSerif: "Bezszeryfowa"
|
||||
_chat:
|
||||
invitations: "Zaproś"
|
||||
noHistory: "Brak historii"
|
||||
members: "Członkowie"
|
||||
home: "Strona główna"
|
||||
send: "Wyślij"
|
||||
_delivery:
|
||||
stop: "Zawieszono"
|
||||
_type:
|
||||
@@ -1222,6 +1208,7 @@ _theme:
|
||||
header: "Nagłówek"
|
||||
navBg: "Tło paska bocznego"
|
||||
navFg: "Tekst paska bocznego"
|
||||
navHoverFg: "Tekst paska bocznego (zbliżenie)"
|
||||
navActive: "Tekst paska bocznego (aktywny)"
|
||||
navIndicator: "Wskaźnik paska bocznego"
|
||||
link: "Odnośnik"
|
||||
@@ -1243,8 +1230,12 @@ _theme:
|
||||
buttonBg: "Tło przycisku"
|
||||
buttonHoverBg: "Tło przycisku (po najechaniu)"
|
||||
inputBorder: "Obramowanie pola wejścia"
|
||||
driveFolderBg: "Tło folderu na dysku"
|
||||
wallpaperOverlay: "Nakładka tapety"
|
||||
badge: "Odznaka"
|
||||
messageBg: "Tło czatu"
|
||||
accentDarken: "Akcent (ciemniejszy)"
|
||||
accentLighten: "Akcent (jaśniejszy)"
|
||||
fgHighlighted: "Wyróżniony tekst"
|
||||
_sfx:
|
||||
note: "Wpisy"
|
||||
@@ -1309,7 +1300,6 @@ _permissions:
|
||||
"write:gallery": "Edytuj swoją galerię"
|
||||
"read:gallery-likes": "Wyświetlanie listy polubionych postów w galerii"
|
||||
"write:gallery-likes": "Edytowanie listy polubionych postów w galerii"
|
||||
"write:chat": "Tworzenie lub usuwanie wiadomości czatu"
|
||||
_auth:
|
||||
shareAccessTitle: "Przyznawanie uprawnień aplikacji"
|
||||
shareAccess: "Czy chcesz autoryzować „{name}” do dostępu do tego konta?"
|
||||
@@ -1402,9 +1392,6 @@ _postForm:
|
||||
replyPlaceholder: "Odpowiedz na ten wpis..."
|
||||
quotePlaceholder: "Zacytuj ten wpis…"
|
||||
channelPlaceholder: "Publikuj na kanale..."
|
||||
_howToUse:
|
||||
visibility_title: "Widoczność"
|
||||
menu_title: "Menu"
|
||||
_placeholders:
|
||||
a: "Co się dzieje?"
|
||||
b: "Co się wydarzyło?"
|
||||
@@ -1472,6 +1459,9 @@ _pages:
|
||||
newPage: "Utwórz stronę"
|
||||
editPage: "Edytuj tę stronę"
|
||||
readPage: "Aktywowano widok źródła"
|
||||
created: "Pomyślnie utworzono stronę!"
|
||||
updated: "Pomyślnie zaktualizowano stronę!"
|
||||
deleted: "Strona została usunięta"
|
||||
pageSetting: "Ustawienia strony"
|
||||
nameAlreadyExists: "Określony adres URL strony już istnieje"
|
||||
invalidNameTitle: "Podany adres URL strony jest nieprawidłowy"
|
||||
@@ -1596,23 +1586,3 @@ _reversi:
|
||||
_remoteLookupErrors:
|
||||
_noSuchObject:
|
||||
title: "Nie znaleziono"
|
||||
_search:
|
||||
searchScopeAll: "Wszystkie"
|
||||
searchScopeLocal: "Lokalne"
|
||||
_watermarkEditor:
|
||||
opacity: "Przezroczystość"
|
||||
scale: "Rozmiar"
|
||||
text: "Tekst"
|
||||
type: "Typ"
|
||||
image: "Zdjęcia"
|
||||
advanced: "Zaawansowane"
|
||||
_imageEffector:
|
||||
_fxProps:
|
||||
scale: "Rozmiar"
|
||||
size: "Rozmiar"
|
||||
color: "Kolor"
|
||||
opacity: "Przezroczystość"
|
||||
lightness: "Rozjaśnij"
|
||||
_qr:
|
||||
showTabTitle: "Wyświetlanie"
|
||||
raw: "Tekst"
|
||||
|
||||
@@ -5,7 +5,6 @@ introMisskey: "Bem-vindo! O Misskey é um serviço de microblog descentralizado
|
||||
poweredByMisskeyDescription: "{name} é uma instância da plataforma de código aberto <b>Misskey</b>."
|
||||
monthAndDay: "{day}/{month}"
|
||||
search: "Pesquisar"
|
||||
reset: "Redefinir"
|
||||
notifications: "Notificações"
|
||||
username: "Nome de usuário"
|
||||
password: "Senha"
|
||||
@@ -49,7 +48,6 @@ pin: "Fixar no perfil"
|
||||
unpin: "Desafixar do perfil"
|
||||
copyContent: "Copiar conteúdos"
|
||||
copyLink: "Copiar link"
|
||||
copyRemoteLink: "Copiar endereço remoto"
|
||||
copyLinkRenote: "Copiar o link da repostagem"
|
||||
delete: "Excluir"
|
||||
deleteAndEdit: "Excluir e editar"
|
||||
@@ -143,9 +141,9 @@ deleteFile: "Excluir arquivo"
|
||||
markAsSensitive: "Marcar como sensível"
|
||||
unmarkAsSensitive: "Desmarcar como sensível"
|
||||
enterFileName: "Digite o nome do arquivo"
|
||||
mute: "Silenciar"
|
||||
mute: "Mutar"
|
||||
unmute: "Desmutar"
|
||||
renoteMute: "Silenciar repostagens"
|
||||
renoteMute: "Mutar repostagens"
|
||||
renoteUnmute: "Reativar repostagens"
|
||||
block: "Bloquear"
|
||||
unblock: "Desbloquear"
|
||||
@@ -220,7 +218,6 @@ silenceThisInstance: "Silenciar essa instância"
|
||||
mediaSilenceThisInstance: "Silenciar a mídia dessa instância"
|
||||
operations: "Operações"
|
||||
software: "Software"
|
||||
softwareName: "Software"
|
||||
version: "Versão"
|
||||
metadata: "Metadados"
|
||||
withNFiles: "{n} arquivo(s)"
|
||||
@@ -251,9 +248,9 @@ noUsers: "Sem usuários"
|
||||
editProfile: "Editar Perfil"
|
||||
noteDeleteConfirm: "Deseja excluir esta nota?"
|
||||
pinLimitExceeded: "Não é possível fixar novas notas"
|
||||
intro: "A instalação do Misskey está completa! Crie uma conta de administrador."
|
||||
done: "Concluído"
|
||||
processing: "Em Progresso"
|
||||
preprocessing: "Preparando..."
|
||||
preview: "Pré-visualizar"
|
||||
default: "Predefinição"
|
||||
defaultValueIs: "Predefinição: {value}"
|
||||
@@ -290,6 +287,7 @@ deleteAreYouSure: "Deseja excluir \"{x}\"?"
|
||||
resetAreYouSure: "Deseja reiniciar?"
|
||||
areYouSure: "Tem certeza?"
|
||||
saved: "Salvo"
|
||||
messaging: "Chat"
|
||||
upload: "Fazer upload"
|
||||
keepOriginalUploading: "Manter a imagem original"
|
||||
keepOriginalUploadingDescription: "Ao fazer o upload de uma imagem, ela será mantida em sua versão original. Caso desative esta opção, o navegador irá gerar uma versão da imagem otimizada para publicação na web durante o upload."
|
||||
@@ -299,11 +297,10 @@ uploadFromUrl: "Enviar por URL"
|
||||
uploadFromUrlDescription: "URL do arquivo que você deseja enviar"
|
||||
uploadFromUrlRequested: "Upload solicitado"
|
||||
uploadFromUrlMayTakeTime: "Pode levar algum tempo para que o upload seja concluído."
|
||||
uploadNFiles: "Enviar {n} arquivos"
|
||||
explore: "Explorar"
|
||||
messageRead: "Lida"
|
||||
noMoreHistory: "Não existe histórico anterior"
|
||||
startChat: "Iniciar conversa"
|
||||
startMessaging: "Iniciar conversação"
|
||||
nUsersRead: "{n} pessoas leram"
|
||||
agreeTo: "Eu concordo com {0}"
|
||||
agree: "Concordar"
|
||||
@@ -328,7 +325,6 @@ dark: "Escuro"
|
||||
lightThemes: "Tema claro"
|
||||
darkThemes: "Tema escuro"
|
||||
syncDeviceDarkMode: "Sincronize com o modo escuro do dispositivo"
|
||||
switchDarkModeManuallyWhenSyncEnabledConfirm: "\"{x}\" está ativado. Você gostaria de desligar a sincronização e alterar manualmente?"
|
||||
drive: "Drive"
|
||||
fileName: "Nome do Ficheiro"
|
||||
selectFile: "Selecione os arquivos"
|
||||
@@ -427,7 +423,6 @@ antennaExcludeBots: "Ignorar contas de bot"
|
||||
antennaKeywordsDescription: "Se você separá-lo com um espaço, será uma especificação AND, e se você separá-lo com uma quebra de linha, será uma especificação OR."
|
||||
notifyAntenna: "Notificar novas notas"
|
||||
withFileAntenna: "Apenas notas com arquivos anexados"
|
||||
excludeNotesInSensitiveChannel: "Excluir notas de canais sensíveis"
|
||||
enableServiceworker: "Ative as notificações push para o seu navegador"
|
||||
antennaUsersDescription: "Especificar nomes de utilizador separados por quebras de linha"
|
||||
caseSensitive: "Maiúsculas e minúsculas"
|
||||
@@ -447,7 +442,7 @@ exploreUsersCount: "Há um utilizador de {count}"
|
||||
exploreFediverse: "Explorar Fediverse"
|
||||
popularTags: "Tags populares"
|
||||
userList: "Listas"
|
||||
about: "Sobre"
|
||||
about: "Informações"
|
||||
aboutMisskey: "Sobre Misskey"
|
||||
administrator: "Administrador"
|
||||
token: "Símbolo"
|
||||
@@ -494,6 +489,8 @@ noteOf: "Publicação de {user}"
|
||||
quoteAttached: "Com citação"
|
||||
quoteQuestion: "Anexar como citação?"
|
||||
attachAsFileQuestion: "O texto na área de transferência é muito longo. Você gostaria de anexá-lo como um arquivo de texto?"
|
||||
noMessagesYet: "Sem conversas até o momento"
|
||||
newMessageExists: "Há uma nova mensagem"
|
||||
onlyOneFileCanBeAttached: "Apenas um arquivo pode ser anexado a uma mensagem"
|
||||
signinRequired: "É necessário se inscrever ou fazer login antes de continuar"
|
||||
signinOrContinueOnRemote: "Para continuar, você precisa mover o seu servidor ou entrar/cadastrar-se nesse servidor."
|
||||
@@ -578,10 +575,8 @@ showFixedPostForm: "Exibir o formulário de postagem na parte superior da linha
|
||||
showFixedPostFormInChannel: "Exibir o campo de postagem na parte superior da linha do tempo (canais)"
|
||||
withRepliesByDefaultForNewlyFollowed: "Incluir respostas por usuários recém-seguidos na linha do tempo por padrão"
|
||||
newNoteRecived: "Nova nota recebida"
|
||||
newNote: "Nova Nota"
|
||||
sounds: "Sons"
|
||||
sound: "Sons"
|
||||
notificationSoundSettings: "Configurações de som de notificações"
|
||||
listen: "Ouvir"
|
||||
none: "Nenhum"
|
||||
showInPage: "Ver na página"
|
||||
@@ -689,19 +684,14 @@ smtpSecure: "Use SSL/TLS implícito para conexões SMTP"
|
||||
smtpSecureInfo: "Desative esta opção ao utilizar STARTTLS."
|
||||
testEmail: "Testar envio de e-mail"
|
||||
wordMute: "Silenciar palavras"
|
||||
wordMuteDescription: "Minimizar notas que contêm a palavra ou frase especificada. Notas minimizadas são exibidas ao clicá-las."
|
||||
hardWordMute: "Silenciar palavras (esconder posts)"
|
||||
showMutedWord: "Exibir palavras silenciadas"
|
||||
hardWordMuteDescription: "Esconder notas que contêm a palavra ou frase especificada. Diferente do silenciamento de palavras, a nota será completamente escondida."
|
||||
regexpError: "Erro na expressão regular"
|
||||
regexpErrorDescription: "Ocorreu um erro na expressão regular na linha {line} da palavra mutada {tab}:"
|
||||
instanceMute: "Instâncias silenciadas"
|
||||
userSaysSomething: "{name} disse algo"
|
||||
userSaysSomethingAbout: "{name} disse algo sobre \"{word}\""
|
||||
makeActive: "Ativar"
|
||||
display: "Visualizar"
|
||||
copy: "Copiar"
|
||||
copiedToClipboard: "Copiado à área de transferência"
|
||||
metrics: "Métricas"
|
||||
overview: "Visão geral"
|
||||
logs: "Logs"
|
||||
@@ -789,6 +779,7 @@ thisIsExperimentalFeature: "Este é um recurso experimental. As funções podem
|
||||
developer: "Programador"
|
||||
makeExplorable: "Deixe a sua conta encontrável em \"Explorar\"."
|
||||
makeExplorableDescription: "Se você desativá-lo, outros usuários não poderão encontrar a sua conta na aba Descoberta."
|
||||
showGapBetweenNotesInTimeline: "Mostrar um espaço entre as notas na linha de tempo"
|
||||
duplicate: "Duplicar"
|
||||
left: "Esquerda"
|
||||
center: "Centralizar"
|
||||
@@ -796,7 +787,6 @@ wide: "Largo"
|
||||
narrow: "Estreito"
|
||||
reloadToApplySetting: "As configurações serão refletidas após recarregar a página. Deseja recarregar agora?"
|
||||
needReloadToApply: "É necessário recarregar a página para refletir as alterações."
|
||||
needToRestartServerToApply: "É necessário reiniciar o servidor para aplicar as mudanças."
|
||||
showTitlebar: "Exibir barra de título"
|
||||
clearCache: "Limpar o cache"
|
||||
onlineUsersCount: "{n} Pessoas Online"
|
||||
@@ -984,7 +974,6 @@ document: "Documentação"
|
||||
numberOfPageCache: "Número de cache de página"
|
||||
numberOfPageCacheDescription: "Aumentar isso melhora a conveniência, mas também resulta em maior carga e uso de memória."
|
||||
logoutConfirm: "Gostaria de encerrar a sessão?"
|
||||
logoutWillClearClientData: "Sair irá remover as configurações do cliente do navegador. Para redefinir as configurações ao entrar, você deve habilitar o backup automático de configurações."
|
||||
lastActiveDate: "Última data de uso"
|
||||
statusbar: "Barra de status"
|
||||
pleaseSelect: "Por favor, selecione."
|
||||
@@ -1003,7 +992,6 @@ failedToUpload: "Falha ao enviar"
|
||||
cannotUploadBecauseInappropriate: "Esse arquivo não pôde ser enviado porque partes dele foram detectadas como potencialmente inapropriadas."
|
||||
cannotUploadBecauseNoFreeSpace: "Envio falhou devido à falta de capacidade no Drive."
|
||||
cannotUploadBecauseExceedsFileSizeLimit: "Não é possível realizar o upload deste arquivo porque ele excede o tamanho máximo permitido."
|
||||
cannotUploadBecauseUnallowedFileType: "Não foi possível fazer o envio, pois o formato do arquivo não foi autorizado."
|
||||
beta: "Beta"
|
||||
enableAutoSensitive: "Marcar automaticamente como conteúdo sensível"
|
||||
enableAutoSensitiveDescription: "Quando disponível, a marcação de mídia sensível será automaticamente atribuído ao conteúdo de mídia usando aprendizado de máquina. Mesmo que você desative essa função, em alguns servidores, isso pode ser configurado automaticamente."
|
||||
@@ -1055,7 +1043,6 @@ permissionDeniedError: "Operação recusada"
|
||||
permissionDeniedErrorDescription: "Esta conta não tem permissão para executar esta ação."
|
||||
preset: "Predefinições"
|
||||
selectFromPresets: "Escolher de predefinições"
|
||||
custom: "Personalizado"
|
||||
achievements: "Conquistas"
|
||||
gotInvalidResponseError: "Resposta do servidor inválida"
|
||||
gotInvalidResponseErrorDescription: "Servidor fora do ar ou em manutenção. Favor tentar mais tarde."
|
||||
@@ -1094,7 +1081,6 @@ prohibitedWordsDescription2: "Utilizar espaços irá criar expressões aditivas
|
||||
hiddenTags: "Hashtags escondidas"
|
||||
hiddenTagsDescription: "Selecione tags que não serão exibidas na lista de destaques. Várias tags podem ser escolhidas, separadas por linha."
|
||||
notesSearchNotAvailable: "A pesquisa de notas está indisponível."
|
||||
usersSearchNotAvailable: "Pesquisa de usuário está indisponível."
|
||||
license: "Licença"
|
||||
unfavoriteConfirm: "Deseja realmente remover dos favoritos?"
|
||||
myClips: "Meus clipes"
|
||||
@@ -1245,8 +1231,9 @@ showAvatarDecorations: "Exibir decorações de avatar"
|
||||
releaseToRefresh: "Solte para atualizar"
|
||||
refreshing: "Atualizando..."
|
||||
pullDownToRefresh: "Puxe para baixo para atualizar"
|
||||
disableStreamingTimeline: "Desabilitar atualizações em tempo real da linha do tempo"
|
||||
useGroupedNotifications: "Agrupar notificações"
|
||||
emailVerificationFailedError: "Houve um problema ao verificar seu endereço de email. O link pode ter expirado."
|
||||
signupPendingError: "Houve um problema ao verificar o endereço de email. O link pode ter expirado."
|
||||
cwNotationRequired: "Se \"Esconder conteúdo\" está habilitado, uma descrição deve ser adicionada."
|
||||
doReaction: "Adicionar reação"
|
||||
code: "Código"
|
||||
@@ -1314,212 +1301,6 @@ lockdown: "Lockdown"
|
||||
pleaseSelectAccount: "Selecione uma conta"
|
||||
availableRoles: "Cargos disponíveis"
|
||||
acknowledgeNotesAndEnable: "Ative após compreender as precauções."
|
||||
federationSpecified: "Esse servidor opera com uma lista branca de federação. Interagir com servidores diferentes daqueles designados pela administração não é permitido."
|
||||
federationDisabled: "Federação está desabilitada nesse servidor. Você não pode interagir com usuários de outros servidores."
|
||||
draft: "Rascunhos"
|
||||
draftsAndScheduledNotes: "Rascunhos e notas agendadas."
|
||||
confirmOnReact: "Confirmar ao reagir"
|
||||
reactAreYouSure: "Você deseja adicionar uma reação \"{emoji}\"?"
|
||||
markAsSensitiveConfirm: "Você deseja definir essa mídia como sensível?"
|
||||
unmarkAsSensitiveConfirm: "Você deseja remover a definição dessa mídia como sensível?"
|
||||
preferences: "Preferências"
|
||||
accessibility: "Acessibilidade"
|
||||
preferencesProfile: "Perfil de preferências"
|
||||
copyPreferenceId: "Copiar ID de preferências"
|
||||
resetToDefaultValue: "Reverter ao padrão"
|
||||
overrideByAccount: "Sobrescrever pela conta"
|
||||
untitled: "Sem título"
|
||||
noName: "Sem nome"
|
||||
skip: "Pular"
|
||||
restore: "Redefinir"
|
||||
syncBetweenDevices: "Sincronizar entre dispositivos"
|
||||
preferenceSyncConflictTitle: "O valor configurado já existe no servidor."
|
||||
preferenceSyncConflictText: "As preferências com a sincronização ativada irão salvar os seus valores no servidor. Porém, já existem valores no servidor. Qual conjunto de valores você deseja sobrescrever?"
|
||||
preferenceSyncConflictChoiceMerge: "Combinar"
|
||||
preferenceSyncConflictChoiceServer: "Valor configurado no servidor"
|
||||
preferenceSyncConflictChoiceDevice: "Valor configurado no dispositivo"
|
||||
preferenceSyncConflictChoiceCancel: "Cancelar a habilitação de sincronização"
|
||||
paste: "Colar"
|
||||
emojiPalette: "Paleta de emojis"
|
||||
postForm: "Campo de postagem"
|
||||
textCount: "Contagem de caracteres"
|
||||
information: "Sobre"
|
||||
chat: "Conversas"
|
||||
directMessage: "Conversar com usuário"
|
||||
directMessage_short: "Mensagem"
|
||||
migrateOldSettings: "Migrar configurações antigas de cliente"
|
||||
migrateOldSettings_description: "Isso deve ser feito automaticamente. Caso o processo de migração tenha falhado, você pode acioná-lo manualmente. As informações atuais de migração serão substituídas."
|
||||
compress: "Comprimir"
|
||||
right: "Direita"
|
||||
bottom: "Inferior"
|
||||
top: "Superior"
|
||||
embed: "Embed"
|
||||
settingsMigrating: "Configurações estão sendo migradas, aguarde... (Você pode migrar manualmente em Configurações→Outros→Migrar configurações antigas de cliente)"
|
||||
readonly: "Ler apenas"
|
||||
goToDeck: "Voltar ao Deck"
|
||||
federationJobs: "Tarefas de Federação"
|
||||
driveAboutTip: "No Drive, uma lista de arquivos enviados no passado será exibida. <br>\nVocê pode reutilizar esses arquivos anexando-os às notas, ou você pode enviar arquivos para publicar posteriormente. <br>\n<b>Cuidado ao excluir um arquivo, pois ele será removido de quaisquer outros lugares onde está sendo utilizado (notas, páginas, avatares, banners, etc.)</b><br>\nVocê também pode criar pastas para organizar seus arquivos."
|
||||
scrollToClose: "Role a página para fechar"
|
||||
advice: "Dica"
|
||||
realtimeMode: "Modo tempo-real"
|
||||
turnItOn: "Ativar"
|
||||
turnItOff: "Desativar"
|
||||
emojiMute: "Silenciar emoji"
|
||||
emojiUnmute: "Reativar emoji"
|
||||
muteX: "Silenciar {x}"
|
||||
unmuteX: "Reativar {x}"
|
||||
abort: "Abortar"
|
||||
tip: "Dicas e Truques"
|
||||
redisplayAllTips: "Mostrar todas as \"Dicas e Truques\" novamente"
|
||||
hideAllTips: "Ocultas todas as \"Dicas e Truques\""
|
||||
defaultImageCompressionLevel: "Nível de compressão de imagem padrão"
|
||||
defaultImageCompressionLevel_description: "Alto, reduz o tamanho do arquivo mas, também, a qualidade da imagem.<br>Alto, reduz o tamanho do arquivo mas, também, a qualidade da imagem."
|
||||
defaultCompressionLevel: "Nível padrão de compressão"
|
||||
defaultCompressionLevel_description: "Menor compressão preserva a qualidade mas aumenta o tamanho do arquivo.<br>Maior compressão reduz o tamanho do arquivo mas diminui a qualidade."
|
||||
inMinutes: "Minuto(s)"
|
||||
inDays: "Dia(s)"
|
||||
safeModeEnabled: "Modo seguro está habilitado"
|
||||
pluginsAreDisabledBecauseSafeMode: "Todos os plugins estão desabilitados porque o modo seguro está habilitado."
|
||||
customCssIsDisabledBecauseSafeMode: "CSS personalizado não está aplicado porque o modo seguro está habilitado."
|
||||
themeIsDefaultBecauseSafeMode: "Enquanto o modo seguro estiver ativo, o tema padrão é utilizado. Desabilitar o modo seguro reverterá essas mudanças."
|
||||
thankYouForTestingBeta: "Obrigado por nos ajudar a testar a versão beta!"
|
||||
createUserSpecifiedNote: "Criar uma nota direta"
|
||||
schedulePost: "Agendar publicação"
|
||||
scheduleToPostOnX: "Agendar nota para {x}"
|
||||
scheduledToPostOnX: "A nota está agendada para {x}"
|
||||
schedule: "Agendar"
|
||||
scheduled: "Agendado"
|
||||
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:
|
||||
_quality:
|
||||
high: "Qualidade alta"
|
||||
medium: "Qualidade média"
|
||||
low: "Qualidade baixa"
|
||||
_size:
|
||||
large: "Tamanho grande"
|
||||
medium: "Tamanho médio"
|
||||
small: "Tamanho pequeno"
|
||||
_order:
|
||||
newest: "Priorizar Mais Novos"
|
||||
oldest: "Priorizar Mais Antigos"
|
||||
_chat:
|
||||
messages: "Mensagem"
|
||||
noMessagesYet: "Ainda não há mensagens"
|
||||
newMessage: "Nova mensagem"
|
||||
individualChat: "Conversa Particular"
|
||||
individualChat_description: "Ter uma conversa particular com outra pessoa."
|
||||
roomChat: "Conversa de Grupo"
|
||||
roomChat_description: "Uma sala de conversas com várias pessoas. Você pode adicionar pessoas que não permitem conversas privadas se elas aceitarem o convite."
|
||||
createRoom: "Criar Sala"
|
||||
inviteUserToChat: "Convide usuários para começar a conversar"
|
||||
yourRooms: "Salas criadas"
|
||||
joiningRooms: "Salas ingressadas"
|
||||
invitations: "Convidar"
|
||||
noInvitations: "Sem convites"
|
||||
history: "Histórico"
|
||||
noHistory: "Ainda não há histórico"
|
||||
noRooms: "Nenhuma sala encontrada"
|
||||
inviteUser: "Convidar Usuários"
|
||||
sentInvitations: "Convites Enviados"
|
||||
join: "Entrar"
|
||||
ignore: "Ignorar"
|
||||
leave: "Deixar sala"
|
||||
members: "Membros"
|
||||
searchMessages: "Pesquisar mensagens"
|
||||
home: "Início"
|
||||
send: "Enviar"
|
||||
newline: "Nova linha"
|
||||
muteThisRoom: "Silenciar sala"
|
||||
deleteRoom: "Excluir sala"
|
||||
chatNotAvailableForThisAccountOrServer: "Conversas não estão habilitadas nesse servidor ou para essa conta."
|
||||
chatIsReadOnlyForThisAccountOrServer: "Conversas são apenas para leitura nesse servidor ou para essa conta. Não é possível escrever novas mensagens ou criar/ingressar novas conversas."
|
||||
chatNotAvailableInOtherAccount: "A função de conversas está desabilitadas para o outro usuário."
|
||||
cannotChatWithTheUser: "Não é possível conversar com esse usuário."
|
||||
cannotChatWithTheUser_description: "Conversas estão indisponíveis ou o outro usuário não as habilitou."
|
||||
youAreNotAMemberOfThisRoomButInvited: "Você não é um participante da sala, mas recebeu um convite. Por favor, aceite o convite para entrar."
|
||||
doYouAcceptInvitation: "Aceita o convite?"
|
||||
chatWithThisUser: "Conversar com usuário"
|
||||
thisUserAllowsChatOnlyFromFollowers: "Esse usuário aceita conversar apenas com seguidores."
|
||||
thisUserAllowsChatOnlyFromFollowing: "Esse usuário aceita conversar apenas com quem segue."
|
||||
thisUserAllowsChatOnlyFromMutualFollowing: "Esse usuário aceita conversar apenas com seguidores mútuos."
|
||||
thisUserNotAllowedChatAnyone: "Esse usuário não aceita conversar com ninguém."
|
||||
chatAllowedUsers: "Com quem permitir conversas"
|
||||
chatAllowedUsers_note: "Você pode conversar com qualquer um com quem tenha iniciado uma conversa independente dessa configuração."
|
||||
_chatAllowedUsers:
|
||||
everyone: "Todos"
|
||||
followers: "Seus seguidores"
|
||||
following: "Quem você segue"
|
||||
mutual: "Seguidores mútuos"
|
||||
none: "Ninguém"
|
||||
_emojiPalette:
|
||||
palettes: "Paleta"
|
||||
enableSyncBetweenDevicesForPalettes: "Sincronizar paleta entre dispositivos"
|
||||
paletteForMain: "Paleta principal"
|
||||
paletteForReaction: "Paleta de reações"
|
||||
_settings:
|
||||
driveBanner: "Você consegue administrar e configurar o drive, conferir o seu uso e configurar as opções de envio de arquivos."
|
||||
pluginBanner: "Você pode ampliar as funções do cliente com plugins. Você pode instalar plugins, configurar e administrar individualmente."
|
||||
notificationsBanner: "Você pode configurar os tipos e intervalo das notificações do servidor, além de notificações push."
|
||||
api: "API"
|
||||
webhook: "Webhook"
|
||||
serviceConnection: "Integração de serviço"
|
||||
serviceConnectionBanner: "Administre e configure tokens de acesso e webhooks para interagir com aplicações e serviços externos."
|
||||
accountData: "Dados da conta"
|
||||
accountDataBanner: "Exportar e importar dados da conta."
|
||||
muteAndBlockBanner: "Você pode configurar meios para esconder conteúdo e restringir ações de certos usuários."
|
||||
accessibilityBanner: "Você pode personalizar o visual e comportamento do cliente, além de configurar modos de otimizar o uso."
|
||||
privacyBanner: "Você pode configurar a privacidade da conta por meio da visibilidade do conteúdo, capacidade de descoberta e aprovação manual de seguidores."
|
||||
securityBanner: "Você pode configurar a segurança da conta em ajustes como senha, meios de entrada, aplicativos de autenticação e chaves de acesso."
|
||||
preferencesBanner: "Você pode configurar o comportamento geral do cliente segundo as suas preferências."
|
||||
appearanceBanner: "Você pode configurar a aparência do cliente e ajustes de tela segundo as suas preferências."
|
||||
soundsBanner: "Você pode configurar a reprodução de sons no cliente."
|
||||
timelineAndNote: "Notas e linha do tempo"
|
||||
makeEveryTextElementsSelectable: "Tornar todos os elementos de texto selecionáveis"
|
||||
makeEveryTextElementsSelectable_description: "Habilitar isso pode reduzir a usabilidade em algumas situações"
|
||||
useStickyIcons: "Fazer ícones acompanharem a rolagem da tela"
|
||||
enableHighQualityImagePlaceholders: "Exibir prévias para imagens de alta qualidade"
|
||||
uiAnimations: "Animações de UI"
|
||||
showNavbarSubButtons: "Mostrar sub-botões na barra de navegação"
|
||||
ifOn: "Quando ligado"
|
||||
ifOff: "Quando desligado"
|
||||
enableSyncThemesBetweenDevices: "Sincronizar temas instalados entre dispositivos"
|
||||
enablePullToRefresh: "Puxe para atualizar"
|
||||
enablePullToRefresh_description: "Quando estiver utilizando um mouse, arraste enquanto aperta a roda de rolagem."
|
||||
realtimeMode_description: "Estabelece uma conexão com o servidor e atualiza o conteúdo em tempo real. Isso pode aumentar o tráfego e uso de memória."
|
||||
contentsUpdateFrequency: "Frequência da obtenção de conteúdo"
|
||||
contentsUpdateFrequency_description: "Quanto maior o valor, mais o conteúdo atualiza. Porém, há uma diminuição do desempenho e aumento do tráfego e consumo de memória."
|
||||
contentsUpdateFrequency_description2: "Quando o modo tempo-real está ativado, o conteúdo é atualizado em tempo real, ignorando essa opção."
|
||||
showUrlPreview: "Exibir prévia de URL"
|
||||
showAvailableReactionsFirstInNote: "Exibir reações disponíveis no topo."
|
||||
showPageTabBarBottom: "Mostrar barra de aba da página inferiormente"
|
||||
_chat:
|
||||
showSenderName: "Exibir nome de usuário do remetente"
|
||||
sendOnEnter: "Pressionar Enter para enviar"
|
||||
_preferencesProfile:
|
||||
profileName: "Nome do perfil"
|
||||
profileNameDescription: "Defina o nome que identifica esse dispositivo."
|
||||
profileNameDescription2: "Exemplo: \"Computador Principal\", \"Celular\""
|
||||
manageProfiles: "Gerenciar Perfis"
|
||||
_preferencesBackup:
|
||||
autoBackup: "Backup automático"
|
||||
restoreFromBackup: "Restaurar backup"
|
||||
noBackupsFoundTitle: "Nenhum backup encontrado"
|
||||
noBackupsFoundDescription: "Nenhum backup automático foi encontrado. Se você salvou um arquivo de backup manualmente, você pode importá-lo e restaurá-lo."
|
||||
selectBackupToRestore: "Selecionar um backup para restaurar"
|
||||
youNeedToNameYourProfileToEnableAutoBackup: "Um nome de perfil deve ser definido para habilitar o backup automático."
|
||||
autoPreferencesBackupIsNotEnabledForThisDevice: "Backup automático de configurações não está habilitado no dispositivo."
|
||||
backupFound: "Backup de configurações encontrado"
|
||||
_accountSettings:
|
||||
requireSigninToViewContents: "Exigir cadastro para ver o conteúdo"
|
||||
requireSigninToViewContentsDescription1: "Exigir cadastro para ver todas as notas e outro conteúdo que você criou. Isso previne 'crawlers' de coletar os seus dados."
|
||||
@@ -1530,7 +1311,6 @@ _accountSettings:
|
||||
makeNotesHiddenBefore: "Tornar notas passadas privadas"
|
||||
makeNotesHiddenBeforeDescription: "Com essa função ativada, apenas você poderá ver as notas anteriores à data e hora marcadas. Se isso for desativado, o status de publicação da nota será reestabelecido."
|
||||
mayNotEffectForFederatedNotes: "Notas federadas a servidores remotos podem não ser afetadas."
|
||||
mayNotEffectSomeSituations: "Essas restrições são simplificadas. Elas podem não ser aplicadas em algumas situações, como ao visualizar num servidor remoto ou durante a moderação."
|
||||
notesHavePassedSpecifiedPeriod: "Notas que duraram um tempo específico."
|
||||
notesOlderThanSpecifiedDateAndTime: "Notas antes do tempo específico."
|
||||
_abuseUserReport:
|
||||
@@ -1549,7 +1329,6 @@ _delivery:
|
||||
manuallySuspended: "Suspenso manualmente"
|
||||
goneSuspended: "Servidor foi suspenso devido ao seu apagamento"
|
||||
autoSuspendedForNotResponding: "Servidor foi suspenso por não responder"
|
||||
softwareSuspended: "Suspenso, pois esse software não está recebendo conteúdo"
|
||||
_bubbleGame:
|
||||
howToPlay: "Como jogar"
|
||||
hold: "Próximos"
|
||||
@@ -1676,37 +1455,11 @@ _serverSettings:
|
||||
fanoutTimelineDbFallback: "\"Fallback\" ao banco de dados"
|
||||
fanoutTimelineDbFallbackDescription: "Quando habilitado, a linha do tempo irá recuar ao banco de dados caso consultas adicionais sejam feitas e ela não estiver em cache. Quando desabilitado, o impacto no servidor será reduzido ao eliminar o recuo, mas limita a quantidade de linhas do tempo que podem ser recebidas."
|
||||
reactionsBufferingDescription: "Quando ativado, o desempenho durante a criação de uma reação será melhorado substancialmente, reduzindo a carga do banco de dados. Porém, a o uso de memória do Redis irá aumentar."
|
||||
remoteNotesCleaning: "Limpeza automática de notas remotas"
|
||||
remoteNotesCleaning_description: "Quando habilitado, notas remotas obsoletas e não utilizadas serão periodicamente limpadas para previnir sobrecarga no banco de dados."
|
||||
remoteNotesCleaningMaxProcessingDuration: "Maximizar tempo de processamento da limpeza"
|
||||
remoteNotesCleaningExpiryDaysForEachNotes: "Mínimo de dias para retenção de notas"
|
||||
inquiryUrl: "URL de inquérito"
|
||||
inquiryUrlDescription: "Especifique um URL para um formulário de inquérito para a administração ou uma página web com informações de contato."
|
||||
openRegistration: "Abrir a criação de contas"
|
||||
openRegistrationWarning: "Abrir cadastros contém riscos. É recomendado apenas habilitá-los se houver um sistema de monitoramento contínuo e resolução imediata de problemas."
|
||||
thisSettingWillAutomaticallyOffWhenModeratorsInactive: "Se nenhuma atividade da moderação for detectada por um tempo, essa configuração será desativada para prevenir spam."
|
||||
deliverSuspendedSoftware: "Software Suspenso"
|
||||
deliverSuspendedSoftwareDescription: "Você pode especificar uma faixa de nomes e versões do software de servidores para cancelar o envio de conteúdo por motivos como vulnerabilidades. Essa informação da versão é providenciada pelo servidor e pode não ser confiável. Uma faixa semver pode ser utilizada para especificar a versão, mas colocar '>= 2024.3.1' não incluirá versões personalizadas como '2024.3.1-custom.0'. Logo, é recomendado inserir uma especificação como '>= 2024.3.1-0'"
|
||||
singleUserMode: "Modo de usuário único"
|
||||
singleUserMode_description: "Se você é o único usuário desse servidor, habilitar esse modo irá otimizar a performance."
|
||||
signToActivityPubGet: "Assinar solicitações GET do ActivityPub"
|
||||
signToActivityPubGet_description: "Normalmente, isso deve ser habilitado. Desabilitar pode melhorar o desempenho na federação, mas também pode cortar a federação com alguns servidores."
|
||||
proxyRemoteFiles: "Passar arquivos remotos por proxy"
|
||||
proxyRemoteFiles_description: "Se habilitado, o servidor irá servir arquivos remotos através de um proxy. Isso é útil para gerar prévias de imagens e proteger a privacidade do usuário."
|
||||
allowExternalApRedirect: "Permitir redirecionamento de conteúdo pelo ActivityPub"
|
||||
allowExternalApRedirect_description: "Se habilitado, outros servidores podem solicitar conteúdo de terceiros através desse servidor, o que pode resultar em falsificação de conteúdo (spoofing)."
|
||||
userGeneratedContentsVisibilityForVisitor: "Visibilidade de conteúdo dos usuários para visitantes"
|
||||
userGeneratedContentsVisibilityForVisitor_description: "Isso é útil para prevenir problemas causados por conteúdo inapropriado de usuários remotos de servidores com pouca ou nenhuma moderação, que pode ser hospedado na internet a partir desse servidor."
|
||||
userGeneratedContentsVisibilityForVisitor_description2: "Publicar todo o conteúdo do servidor para a internet pode ser arriscado. Isso é especialmente importante para visitantes que desconhecem a natureza distribuída do conteúdo na internet, pois eles podem acreditar que o conteúdo remoto é criado por usuários desse servidor."
|
||||
restartServerSetupWizardConfirm_title: "Reiniciar o assistente de configuração?"
|
||||
restartServerSetupWizardConfirm_text: "Algumas configurações atuais serão reiniciadas."
|
||||
entrancePageStyle: "Estilo da página de entrada"
|
||||
showTimelineForVisitor: "Mostrar linha do tempo"
|
||||
showActivitiesForVisitor: "Mostrar atividades"
|
||||
_userGeneratedContentsVisibilityForVisitor:
|
||||
all: "Tudo é público"
|
||||
localOnly: "Conteúdo local é publicado, conteúdo remoto é privado"
|
||||
none: "Tudo é privado"
|
||||
_accountMigration:
|
||||
moveFrom: "Migrar outra conta para essa"
|
||||
moveFromSub: "Criar um 'alias' a outra conta"
|
||||
@@ -2003,8 +1756,6 @@ _role:
|
||||
descriptionOfIsExplorable: "Ao ativar, a lista de membros será pública na seção 'Explorar' e a linha do tempo do cargo ficará disponível."
|
||||
displayOrder: "Ordenação"
|
||||
descriptionOfDisplayOrder: "Quanto maior o número, maior a posição de destaque na interface do usuário."
|
||||
preserveAssignmentOnMoveAccount: "Preservar a associação de cargos durante a migração"
|
||||
preserveAssignmentOnMoveAccount_description: "Quando ligado, esse cargo será encaminhado para a conta final quando houver migração de um usuário."
|
||||
canEditMembersByModerator: "Permitir a edição de membros deste cargo por moderadores"
|
||||
descriptionOfCanEditMembersByModerator: "Quando ativado, os moderadores também poderão atribuir/remover usuários deste papel, além dos administradores. Quando desativado, apenas os administradores poderão fazê-lo."
|
||||
priority: "Prioridade"
|
||||
@@ -2024,7 +1775,6 @@ _role:
|
||||
canManageCustomEmojis: "Permitir gerenciar emojis personalizados"
|
||||
canManageAvatarDecorations: "Gerenciar decorações de avatar"
|
||||
driveCapacity: "Capacidade do drive"
|
||||
maxFileSize: "Tamanho máximo de envio de arquivos"
|
||||
alwaysMarkNsfw: "Sempre marcar arquivos como NSFW"
|
||||
canUpdateBioMedia: "Permitir a edição de ícone ou imagem do banner."
|
||||
pinMax: "Número máximo de notas fixadas"
|
||||
@@ -2039,7 +1789,6 @@ _role:
|
||||
descriptionOfRateLimitFactor: "Valores menores são menos restritivos, valores maiores são mais restritivos."
|
||||
canHideAds: "Permitir ocultar anúncios"
|
||||
canSearchNotes: "Permitir a busca de notas"
|
||||
canSearchUsers: "Busca de usuário"
|
||||
canUseTranslator: "Uso do tradutor"
|
||||
avatarDecorationLimit: "Número máximo de decorações de avatar que podem ser aplicadas"
|
||||
canImportAntennas: "Permitir importação de antenas"
|
||||
@@ -2047,13 +1796,6 @@ _role:
|
||||
canImportFollowing: "Permitir importação de usuários seguidos"
|
||||
canImportMuting: "Permitir importação de silenciamentos"
|
||||
canImportUserLists: "Permitir importação de listas"
|
||||
chatAvailability: "Permitir Conversas"
|
||||
uploadableFileTypes: "Tipos de arquivo enviáveis"
|
||||
uploadableFileTypes_caption: "Especifica tipos MIME permitidos. Múltiplos tipos MIME podem ser especificados separando-os por linha. Curingas podem ser especificados com um asterisco (*). (exemplo, image/*)"
|
||||
uploadableFileTypes_caption2: "Alguns tipos de arquivos podem não ser detectados. Para permiti-los, adicione {x} à especificação."
|
||||
noteDraftLimit: "Limite de rascunhos possíveis"
|
||||
scheduledNoteLimit: "Número máximo de notas agendadas simultâneas"
|
||||
watermarkAvailable: "Disponibilidade da função de marca d'água"
|
||||
_condition:
|
||||
roleAssignedTo: "Atribuído a cargos manuais"
|
||||
isLocal: "Usuário local"
|
||||
@@ -2213,12 +1955,10 @@ _theme:
|
||||
install: "Instalar um tema"
|
||||
manage: "Gerenciar temas"
|
||||
code: "Código do tema"
|
||||
copyThemeCode: "Copiar código do tema"
|
||||
description: "Descrição"
|
||||
installed: "{name} foi instalado"
|
||||
installedThemes: "Temas instalados"
|
||||
builtinThemes: "Temas nativos"
|
||||
instanceTheme: "Tema do servidor"
|
||||
alreadyInstalled: "Esse tema já foi instalado"
|
||||
invalid: "O formato desse tema é invalido"
|
||||
make: "Fazer um tema"
|
||||
@@ -2251,6 +1991,7 @@ _theme:
|
||||
header: "Cabeçalho"
|
||||
navBg: "Plano de fundo da barra lateral"
|
||||
navFg: "Texto da barra lateral"
|
||||
navHoverFg: "Texto da coluna lateral (Selecionado)"
|
||||
navActive: "Texto da coluna lateral (Ativa)"
|
||||
navIndicator: "Indicador da coluna lateral"
|
||||
link: "Link"
|
||||
@@ -2272,15 +2013,18 @@ _theme:
|
||||
buttonBg: "Plano de fundo de botão"
|
||||
buttonHoverBg: "Plano de fundo de botão (Selecionado)"
|
||||
inputBorder: "Borda de campo digitável"
|
||||
driveFolderBg: "Plano de fundo da pasta no Drive"
|
||||
wallpaperOverlay: "Sobreposição do papel de parede."
|
||||
badge: "Emblema"
|
||||
messageBg: "Plano de fundo do chat"
|
||||
accentDarken: "Cor de destaque (Escurecida)"
|
||||
accentLighten: "Cor de destaque (Esclarecida)"
|
||||
fgHighlighted: "Texto Destacado"
|
||||
_sfx:
|
||||
note: "Posts"
|
||||
noteMy: "Própria nota"
|
||||
notification: "Notificações"
|
||||
reaction: "Ao selecionar uma reação"
|
||||
chatMessage: "Mensagens em Conversas"
|
||||
_soundSettings:
|
||||
driveFile: "Usar um arquivo de áudio do Drive."
|
||||
driveFileWarn: "Selecione um arquivo de áudio do Drive."
|
||||
@@ -2313,7 +2057,6 @@ _time:
|
||||
minute: "Minuto(s)"
|
||||
hour: "Hora(s)"
|
||||
day: "Dia(s)"
|
||||
month: "Mês(es)"
|
||||
_2fa:
|
||||
alreadyRegistered: "Você já cadastrou um dispositivo de autenticação de dois fatores."
|
||||
registerTOTP: "Cadastrar aplicativo autenticador"
|
||||
@@ -2428,8 +2171,6 @@ _permissions:
|
||||
"read:clip-favorite": "Ver Clipes favoritados"
|
||||
"read:federation": "Ver dados de federação"
|
||||
"write:report-abuse": "Reportar violação"
|
||||
"write:chat": "Compor ou editar mensagens de chat"
|
||||
"read:chat": "Navegar Conversas"
|
||||
_auth:
|
||||
shareAccessTitle: "Conceder permissões do aplicativo"
|
||||
shareAccess: "Você gostaria de autorizar \"{name}\" para acessar essa conta?"
|
||||
@@ -2488,7 +2229,6 @@ _widgets:
|
||||
chooseList: "Selecione uma lista"
|
||||
clicker: "Clicker"
|
||||
birthdayFollowings: "Usuários de aniversário hoje"
|
||||
chat: "Conversar com usuário"
|
||||
_cw:
|
||||
hide: "Esconder"
|
||||
show: "Carregar mais"
|
||||
@@ -2528,14 +2268,9 @@ _visibility:
|
||||
disableFederation: "Defederar"
|
||||
disableFederationDescription: "Não transmitir às outras instâncias"
|
||||
_postForm:
|
||||
quitInspiteOfThereAreUnuploadedFilesConfirm: "Há arquivos que não foram enviados, gostaria de descartá-los e fechar o editor?"
|
||||
uploaderTip: "O arquivo ainda não foi enviado. No menu do arquivo, você pode renomear, cortar, adicionar uma marca d'água, comprimir ou descomprimir um arquivo. Arquivos serão enviados automaticamente ao publicar a nota."
|
||||
replyPlaceholder: "Responder a essa nota..."
|
||||
quotePlaceholder: "Citar essa nota..."
|
||||
channelPlaceholder: "Postar em canal..."
|
||||
_howToUse:
|
||||
visibility_title: "Visibilidade"
|
||||
menu_title: "Menu\n"
|
||||
_placeholders:
|
||||
a: "Como vão as coisas?"
|
||||
b: "O que está rolando por aí?"
|
||||
@@ -2622,6 +2357,9 @@ _pages:
|
||||
newPage: "Criar uma Página"
|
||||
editPage: "Editar essa Página"
|
||||
readPage: "Ver a fonte dessa Página"
|
||||
created: "Página criada com sucesso"
|
||||
updated: "Página atualizada com sucesso"
|
||||
deleted: "Página excluída com sucesso"
|
||||
pageSetting: "Configurações da página"
|
||||
nameAlreadyExists: "O URL de Página especificado já existe"
|
||||
invalidNameTitle: "O URL de Página especificado é inválido"
|
||||
@@ -2681,12 +2419,9 @@ _notification:
|
||||
youReceivedFollowRequest: "Você recebeu um pedido de seguidor"
|
||||
yourFollowRequestAccepted: "Seu pedido de seguidor foi aceito"
|
||||
pollEnded: "Os resultados da enquete agora estão disponíveis"
|
||||
scheduledNotePosted: "Nota agendada foi publicada"
|
||||
scheduledNotePostFailed: "Não foi possível publicar nota agendada"
|
||||
newNote: "Nova nota"
|
||||
unreadAntennaNote: "Antena {name}"
|
||||
roleAssigned: "Cargo dado"
|
||||
chatRoomInvitationReceived: "Você foi convidado para uma conversa"
|
||||
emptyPushNotificationMessage: "As notificações de alerta foram atualizadas"
|
||||
achievementEarned: "Conquista desbloqueada"
|
||||
testNotification: "Notificação teste"
|
||||
@@ -2700,8 +2435,6 @@ _notification:
|
||||
flushNotification: "Limpar notificações"
|
||||
exportOfXCompleted: "Exportação de {x} foi concluída"
|
||||
login: "Alguém entrou na conta"
|
||||
createToken: "Uma token de acesso foi criada"
|
||||
createTokenDescription: "Se você não faz ideia, exclua o token de acesso através de \"{text}\"."
|
||||
_types:
|
||||
all: "Todas"
|
||||
note: "Novas notas"
|
||||
@@ -2715,11 +2448,9 @@ _notification:
|
||||
receiveFollowRequest: "Recebeu pedidos de seguidor"
|
||||
followRequestAccepted: "Aceitou pedidos de seguidor"
|
||||
roleAssigned: "Cargo dado"
|
||||
chatRoomInvitationReceived: "Convite de conversa recebido"
|
||||
achievementEarned: "Conquista desbloqueada"
|
||||
exportCompleted: "A exportação foi concluída"
|
||||
login: "Iniciar sessão"
|
||||
createToken: "Criar token de acesso"
|
||||
test: "Notificação teste"
|
||||
app: "Notificações de aplicativos conectados"
|
||||
_actions:
|
||||
@@ -2729,9 +2460,6 @@ _notification:
|
||||
_deck:
|
||||
alwaysShowMainColumn: "Sempre mostrar a coluna principal"
|
||||
columnAlign: "Alinhar colunas"
|
||||
columnGap: "Margem entre colunas"
|
||||
deckMenuPosition: "Posição do menu do deck"
|
||||
navbarPosition: "Posição da barra de navegação"
|
||||
addColumn: "Adicionar coluna"
|
||||
newNoteNotificationSettings: "Opções de notificação para novas notas"
|
||||
configureColumn: "Configurar coluna"
|
||||
@@ -2750,7 +2478,6 @@ _deck:
|
||||
useSimpleUiForNonRootPages: "Usar UI simples para páginas navegadas"
|
||||
usedAsMinWidthWhenFlexible: "A largura mínima será usada para isso quando o \"Ajuste automático da largura\" estiver ativado"
|
||||
flexible: "Ajuste automático da largura"
|
||||
enableSyncBetweenDevicesForProfiles: "Habilitar sincronização das informações do perfil entre dispositivos"
|
||||
_columns:
|
||||
main: "Principal"
|
||||
widgets: "Widgets"
|
||||
@@ -2762,7 +2489,6 @@ _deck:
|
||||
mentions: "Menções"
|
||||
direct: "Notas diretas"
|
||||
roleTimeline: "Linha do tempo do cargo"
|
||||
chat: "Conversar com usuário"
|
||||
_dialog:
|
||||
charactersExceeded: "Você excedeu o limite de caracteres! Atualmente em {current} de {max}."
|
||||
charactersBelow: "Você está abaixo do limite mínimo de caracteres! Atualmente em {current} of {min}."
|
||||
@@ -2859,8 +2585,6 @@ _moderationLogTypes:
|
||||
deletePage: "Remover página"
|
||||
deleteFlash: "Remover Play"
|
||||
deleteGalleryPost: "Remover a publicação da galeria"
|
||||
deleteChatRoom: "Sala de Conversas Excluída"
|
||||
updateProxyAccountDescription: "Atualizar descrição da conta de proxy"
|
||||
_fileViewer:
|
||||
title: "Detalhes do arquivo"
|
||||
type: "Tipo de arquivo"
|
||||
@@ -2868,15 +2592,16 @@ _fileViewer:
|
||||
url: "URL"
|
||||
uploadedAt: "Adicionado em"
|
||||
attachedNotes: "Notas anexadas"
|
||||
usage: "Usado"
|
||||
thisPageCanBeSeenFromTheAuthor: "Essa página só pode ser vista pelo usuário que enviou esse arquivo."
|
||||
_externalResourceInstaller:
|
||||
title: "Instalar de site externo"
|
||||
checkVendorBeforeInstall: "Tenha certeza de que o distribuidor desse recurso é confiável antes da instalação."
|
||||
_plugin:
|
||||
title: "Deseja instalar esse plugin?"
|
||||
metaTitle: "Informações do plugin"
|
||||
_theme:
|
||||
title: "Deseja instalar esse tema?"
|
||||
metaTitle: "Informações do tema"
|
||||
_meta:
|
||||
base: "Paleta de cores base"
|
||||
_vendorInfo:
|
||||
@@ -2916,12 +2641,9 @@ _dataSaver:
|
||||
_avatar:
|
||||
title: "Imagem do avatar"
|
||||
description: "Parar animação de avatares. Imagens animadas podem ter um arquivo mais pesado do que imagens normais, potencialmente levando a reduções no tráfego de dados."
|
||||
_urlPreviewThumbnail:
|
||||
title: "Esconder miniaturas em prévias de URL"
|
||||
description: "Miniaturas em prévias de URL não serão carregadas."
|
||||
_disableUrlPreview:
|
||||
title: "Desabilitar prévias de URL"
|
||||
description: "Desabilita a função de prévias de URL. Diferente das miniaturas, essa função impede o carregamento de toda informação do link."
|
||||
_urlPreview:
|
||||
title: "Miniaturas na prévia de URLs"
|
||||
description: "Miniaturas na prévia de URLs não serão mais carregadas."
|
||||
_code:
|
||||
title: "Destaque de código"
|
||||
description: "Se as notações de formatação de código forem utilizadas em MFM, elas não irão carregar até serem selecionadas. Destaque de código exige baixar arquivos de alta definição para cada linguagem de programação. Logo, desabilitar o carregamento automático desses arquivos diminui a quantidade de informação comunicada."
|
||||
@@ -2979,8 +2701,6 @@ _offlineScreen:
|
||||
_urlPreviewSetting:
|
||||
title: "Configurações da prévia de URL"
|
||||
enable: "Habilitar prévia de URL"
|
||||
allowRedirect: "Permitir redirecionamentos de URL em prévias."
|
||||
allowRedirectDescription: "Se um URL tem um redirecionamento, você pode habilitar essa função para segui-lo e exibir a prévia do conteúdo redirecionado. Desabilitar isso irá economizar recursos, mas o conteúdo não será exibido."
|
||||
timeout: "Tempo máximo para obter a prévia (ms)"
|
||||
timeoutDescription: "Se demorar mais que esse valor para obter uma prévia, ela não será gerada."
|
||||
maximumContentLength: "Content-Length máximo (em bytes)"
|
||||
@@ -3001,62 +2721,6 @@ _contextMenu:
|
||||
app: "Aplicativo"
|
||||
appWithShift: "Aplicativo com a tecla shift"
|
||||
native: "Nativo"
|
||||
_gridComponent:
|
||||
_error:
|
||||
requiredValue: "Esse valor é necessário"
|
||||
columnTypeNotSupport: "Validação de expressões regulares (RegEx) só é permitida em colunas type:text."
|
||||
patternNotMatch: "Esse valor não se encaixa no padrão de {pattern}"
|
||||
notUnique: "Valor deve ser único"
|
||||
_roleSelectDialog:
|
||||
notSelected: "Não selecionado"
|
||||
_customEmojisManager:
|
||||
_gridCommon:
|
||||
copySelectionRows: "Copiar linhas selecionadas"
|
||||
copySelectionRanges: "Copiar seleção"
|
||||
deleteSelectionRows: "Excluir linhas selecionadas"
|
||||
deleteSelectionRanges: "Excluir valores selecionados"
|
||||
searchSettings: "Opções de busca"
|
||||
searchSettingCaption: "Definir critérios detalhados de busca."
|
||||
searchLimit: "Limite de busca"
|
||||
sortOrder: "Ordem de classificação"
|
||||
registrationLogs: "Histórico de registros"
|
||||
registrationLogsCaption: "Atualizações e remoções de emoji serão gravadas no histórico. Atualizar, remover, mover a uma nova página ou recarregar limpará o histórico"
|
||||
alertEmojisRegisterFailedDescription: "Não foi possível atualizar ou remover emojis. Por favor, confira o histórico de registro para mais detalhes."
|
||||
_logs:
|
||||
showSuccessLogSwitch: "Exibir sucessos no histórico"
|
||||
failureLogNothing: "Não há registro de falhas."
|
||||
logNothing: "Não há registros."
|
||||
_remote:
|
||||
selectionRowDetail: "Detalhes da linha selecionada"
|
||||
importSelectionRows: "Importar linhas selecionadas"
|
||||
importSelectionRangesRows: "Importar linhas no intervalo"
|
||||
importEmojisButton: "Importar Emojis selecionados"
|
||||
confirmImportEmojisTitle: "Importar Emojis"
|
||||
confirmImportEmojisDescription: "Importar {count} Emoji(s) recebidos de um servidor remoto. Por favor, preste atenção na licença do Emoji. Tem certeza que deseja continuar?"
|
||||
_local:
|
||||
tabTitleList: "Emojis registrados"
|
||||
tabTitleRegister: "Registro de Emoji"
|
||||
_list:
|
||||
emojisNothing: "Não há Emojis registrados."
|
||||
markAsDeleteTargetRows: "Marcar linhas selecionadas para remoção"
|
||||
markAsDeleteTargetRanges: "Marcar linhas no intervalo para remoção"
|
||||
alertUpdateEmojisNothingDescription: "Não há Emojis atualizados."
|
||||
alertDeleteEmojisNothingDescription: "Não há Emojis marcados para remoção."
|
||||
confirmMovePage: "Deseja mudar de página?"
|
||||
confirmChangeView: "Deseja mudar de seção?"
|
||||
confirmUpdateEmojisDescription: "Atualizando {count} Emoji(s). Deseja continuar?"
|
||||
confirmDeleteEmojisDescription: "Removendo {count} Emoji(s) marcado(s). Deseja continuar?"
|
||||
confirmResetDescription: "Todas as mudanças serão redefinidas."
|
||||
confirmMovePageDesciption: "Mudanças foram feitas nos Emojis dessa página. Se você sair sem salvar, todas serão descartadas."
|
||||
dialogSelectRoleTitle: "Buscar por cargo que pode usar esse Emoji"
|
||||
_register:
|
||||
uploadSettingTitle: "Configurações de envio"
|
||||
uploadSettingDescription: "Nessa tela, você pode configurar o comportamento ao enviar Emojis."
|
||||
directoryToCategoryLabel: "Transformar as pastas em categorias"
|
||||
directoryToCategoryCaption: "Quando você arrastar um diretório, converter o caminho das pastas no campo \"categoria\"."
|
||||
confirmRegisterEmojisDescription: "Registrando os Emojis da lista como novos Emojis personalizados. Deseja continuar? (Para evitar sobrecarga, apenas {count} Emoji(s) podem ser registrados em uma única operação)"
|
||||
confirmClearEmojisDescription: "Descartando edições e limpando Emojis da lista. Deseja continuar?"
|
||||
confirmUploadEmojisDescription: "Enviando {count} arquivo(s) arrastados ao drive. Deseja continuar?"
|
||||
_embedCodeGen:
|
||||
title: "Personalizar código do embed"
|
||||
header: "Exibir cabeçalho"
|
||||
@@ -3093,231 +2757,8 @@ _remoteLookupErrors:
|
||||
_responseInvalid:
|
||||
title: "Resposta inválida"
|
||||
description: "Foi possível comunicar com o servidor, porém os dados obtidos foram incorretos."
|
||||
_responseInvalidIdHostNotMatch:
|
||||
description: "O domínio do endereço inserido difere do domínio do endereço final. Se você estiver pesquisando por um servidor de terceiros, tente buscar novamente com um endereço que pode ser obtido através do servidor original."
|
||||
_noSuchObject:
|
||||
title: "Não encontrado"
|
||||
description: "O recurso solicitado não foi encontrado, confira o endereço."
|
||||
_captcha:
|
||||
verify: "Por favor, verifique o CAPTCHA"
|
||||
testSiteKeyMessage: "Você pode conferir a prévia inserindo valores de teste para o site e chaves secretas.\nVeja a página seguinte para mais detalhes."
|
||||
_error:
|
||||
_requestFailed:
|
||||
title: "O pedido do CAPTCHA falhou"
|
||||
text: "Por favor, tente novamente ou verifique as configurações."
|
||||
_verificationFailed:
|
||||
title: "A validação do CAPTCHA falhou"
|
||||
text: "Por favor, verifique se as configurações estão corretas."
|
||||
_unknown:
|
||||
title: "Erro CAPTCHA"
|
||||
text: "Houve um erro inexperado."
|
||||
_bootErrors:
|
||||
title: "Falha ao carregar"
|
||||
serverError: "Se o problema persistir após esperar um momento e recarregar, contate a administração da instância com o seguinte ID de erro."
|
||||
solution: "O seguinte pode resolver o problema."
|
||||
solution1: "Atualize seu navegador e sistema operacional para a última versão."
|
||||
solution2: "Desative o bloqueador de anúncios"
|
||||
solution3: "Limpe o cache do navegador"
|
||||
solution4: "Defina dom.webaudio.enabled como verdadeiro no Navegador Tor"
|
||||
otherOption: "Outras opções"
|
||||
otherOption1: "Excluir ajustes de cliente e cache"
|
||||
otherOption2: "Iniciar o cliente simples"
|
||||
otherOption3: "Iniciar ferramenta de reparo"
|
||||
otherOption4: "Abrir Misskey no modo seguro"
|
||||
_search:
|
||||
searchScopeAll: "Todos"
|
||||
searchScopeLocal: "Local"
|
||||
searchScopeServer: "Servidor específico"
|
||||
searchScopeUser: "Usuário específico"
|
||||
pleaseEnterServerHost: "Insira o endereço do servidor"
|
||||
pleaseSelectUser: "Selecione um usuário"
|
||||
serverHostPlaceholder: "Exemplo: misskey.example.com"
|
||||
_serverSetupWizard:
|
||||
installCompleted: "Instalação do Misskey concluída!"
|
||||
firstCreateAccount: "Para iniciar, crie uma conta de administrador."
|
||||
accountCreated: "Conta de administrador foi criada!"
|
||||
serverSetting: "Configurações de Servidor"
|
||||
youCanEasilyConfigureOptimalServerSettingsWithThisWizard: "O assistente facilita a configuração do servidor."
|
||||
settingsYouMakeHereCanBeChangedLater: "Configurações alteradas pelo assistente podem ser ajustadas posteriormente."
|
||||
howWillYouUseMisskey: "Como você usará o Misskey?"
|
||||
_use:
|
||||
single: "Servidor de Usuário Único"
|
||||
single_description: "Utilizar servidor sozinho."
|
||||
single_youCanCreateMultipleAccounts: "Múltiplas contas podem ser criadas se necessário, mesmo operando como servidor de usuário único."
|
||||
group: "Servidor de Grupo"
|
||||
group_description: "Convide outros usuários confiáveis para utilizar com mais de um usuário"
|
||||
open: "Servidor Público"
|
||||
open_description: "Permitir registro de todos."
|
||||
openServerAdvice: "Aceitar um número alto de pessoas desconhecidas pode envolve um risco. Recomendamos que você opere com um sistema de moderação confiável para resolver quaisquer problemas."
|
||||
openServerAntiSpamAdvice: "Para prevenir que o seu servidor se torne alvo de spam, é essencial cuidar da segurança habilitando recursos antibot como o reCAPTCHA."
|
||||
howManyUsersDoYouExpect: "Quantos usuários você espera?"
|
||||
_scale:
|
||||
small: "Menos que 100 (pequeno porte)"
|
||||
medium: "Entre 100 e 1000 usuários (médio porte)"
|
||||
large: "Mais que 1000 usuários (larga escala)"
|
||||
largeScaleServerAdvice: "Servidores de larga escala podem precisar de conhecimento avançado de infraestrutura, como balanceamento de carga e replicação de banco de dados."
|
||||
doYouConnectToFediverse: "Você deseja conectar-se com o Fediverso?"
|
||||
doYouConnectToFediverse_description1: "Quando conectado com uma rede distribuída de servidores (Fediverso), o conteúdo pode ser trocado com outros servidores."
|
||||
doYouConnectToFediverse_description2: "Conectar com o Fediverso também é chamado de \"federação\""
|
||||
youCanConfigureMoreFederationSettingsLater: "Configurações adicionais como especificar servidores para conectar-se com podem ser feitas posteriormente"
|
||||
remoteContentsCleaning: "Limpeza automática de conteúdos recebidos"
|
||||
remoteContentsCleaning_description: "A federação pode resultar em uma entrada contínua de conteúdo. Habilitar a limpeza automática removerá conteúdo obsoleto e não referenciado do servidor para economizar armazenamento."
|
||||
adminInfo: "Informações da administração"
|
||||
adminInfo_description: "Define as informações do administrador usadas para receber consultas."
|
||||
adminInfo_mustBeFilled: "Deve ser preenchido se o servidor é público ou se a federação está ativa."
|
||||
followingSettingsAreRecommended: "As configurações a seguir são recomendadas"
|
||||
applyTheseSettings: "Aplicar essas configurações"
|
||||
skipSettings: "Pular configuração"
|
||||
settingsCompleted: "Instalação concluída!"
|
||||
settingsCompleted_description: "Obrigado pelo seu tempo. Agora que tudo está pronto, você pode começar a utilizar o servidor."
|
||||
settingsCompleted_description2: "As configurações do servidor podem ser alteradas no \"Painel de Controle\""
|
||||
donationRequest: "Solicitação de Doação"
|
||||
_donationRequest:
|
||||
text1: "Misskey é software aberto desenvolvido por voluntários."
|
||||
text2: "Nós apreciaríamos o seu apoio para podermos continuar o desenvolvimento desse software no futuro."
|
||||
text3: "Também há benefícios especiais para apoiadores!"
|
||||
_uploader:
|
||||
editImage: "Editar Imagem"
|
||||
compressedToX: "Comprimido para {x}"
|
||||
savedXPercent: "Salvando {x}%"
|
||||
abortConfirm: "Alguns arquivos não foram enviados, deseja abortar?"
|
||||
doneConfirm: "Alguns arquivos não foram enviados, deseja continuar mesmo assim?"
|
||||
maxFileSizeIsX: "O tamanho máximo de arquivos enviados é {x}"
|
||||
allowedTypes: "Tipos de arquivo enviáveis"
|
||||
tip: "O arquivo não foi enviado. Então, esse diálogo permite que você confirme, renomeie, comprima e recorte o arquivo antes de enviar. Quando estiver pronto, você pode enviar apertando o botão \"Enviar\"."
|
||||
_clientPerformanceIssueTip:
|
||||
title: "Dicas de desempenho"
|
||||
makeSureDisabledAdBlocker: "Desative o seu bloqueador de anúncios"
|
||||
makeSureDisabledAdBlocker_description: "Bloqueadores de anúncios podem afetar o desempenho. Certifique-se que eles não estão habilitados no seu sistema ou nos recursos/extensões do navegador. "
|
||||
makeSureDisabledCustomCss: "Desabilite CSS personalizado"
|
||||
makeSureDisabledCustomCss_description: "Substituir o estilo da página pode afetar o desempenho. Certifique-se que o CSS personalizado ou extensões que modifiquem o estilo da página estejam desabilitados."
|
||||
makeSureDisabledAddons: "Desabilite extensões"
|
||||
makeSureDisabledAddons_description: "Algumas extensões podem afetar comportamentos do cliente e afetar o desempenho. Por favor, desative as extensões do seu navegador e veja se isso melhora a situação."
|
||||
_clip:
|
||||
tip: "Clip é uma função que permite organização das suas notas."
|
||||
_userLists:
|
||||
tip: "Listas podem conter qualquer usuário que você especificar em sua criação. A lista criada aparece como uma linha do tempo exibindo usuários selecionados."
|
||||
watermark: "Marca d'água"
|
||||
defaultPreset: "Predefinição Padrão"
|
||||
_watermarkEditor:
|
||||
tip: "Uma marca d'água, como informação de autoria, pode ser adicionada à imagem."
|
||||
quitWithoutSaveConfirm: "Descartar mudanças?"
|
||||
driveFileTypeWarn: "Esse arquivo não é compatível"
|
||||
driveFileTypeWarnDescription: "Escolha um arquivo de imagem"
|
||||
title: "Editar marca d'água"
|
||||
cover: "Cobrir tudo"
|
||||
repeat: "Espalhar pelo conteúdo"
|
||||
opacity: "Opacidade"
|
||||
scale: "Tamanho"
|
||||
text: "Texto"
|
||||
qr: "Código QR"
|
||||
position: "Posição"
|
||||
margin: "Margem"
|
||||
type: "Tipo"
|
||||
image: "imagem"
|
||||
advanced: "Avançado"
|
||||
angle: "Ângulo"
|
||||
stripe: "Listras"
|
||||
stripeWidth: "Largura da linha"
|
||||
stripeFrequency: "Número de linhas"
|
||||
polkadot: "Bolinhas"
|
||||
checker: "Xadrez"
|
||||
polkadotMainDotOpacity: "Opacidade da bolinha principal"
|
||||
polkadotMainDotRadius: "Raio da bolinha principal"
|
||||
polkadotSubDotOpacity: "Opacidade da bolinha secundária"
|
||||
polkadotSubDotRadius: "Raio das bolinhas adicionais"
|
||||
polkadotSubDotDivisions: "Número de bolinhas adicionais"
|
||||
leaveBlankToAccountUrl: "Deixe em branco para utilizar URL da conta"
|
||||
_imageEffector:
|
||||
title: "Efeitos"
|
||||
addEffect: "Adicionar efeitos"
|
||||
discardChangesConfirm: "Tem certeza que deseja sair? Há mudanças não salvas."
|
||||
nothingToConfigure: "Não há nada para configurar"
|
||||
_fxs:
|
||||
chromaticAberration: "Aberração cromática"
|
||||
glitch: "Glitch"
|
||||
mirror: "Espelho"
|
||||
invert: "Inverter Cores"
|
||||
grayscale: "Tons de Cinza"
|
||||
blur: "Desfoque"
|
||||
pixelate: "Pixelizar"
|
||||
colorAdjust: "Correção de Cores"
|
||||
colorClamp: "Compressão de Cores"
|
||||
colorClampAdvanced: "Compressão Avançada de Cores"
|
||||
distort: "Distorção"
|
||||
threshold: "Limiarização Binária"
|
||||
zoomLines: "Linhas de Ação"
|
||||
stripe: "Listras"
|
||||
polkadot: "Bolinhas"
|
||||
checker: "Xadrez"
|
||||
blockNoise: "Bloquear Ruído"
|
||||
tearing: "Descontinuidade"
|
||||
fill: "Preencher"
|
||||
_fxProps:
|
||||
angle: "Ângulo"
|
||||
scale: "Tamanho"
|
||||
size: "Tamanho"
|
||||
radius: "Raio"
|
||||
samples: "Número de amostras"
|
||||
offset: "Posição"
|
||||
color: "Cor"
|
||||
opacity: "Opacidade"
|
||||
normalize: "Normalizar"
|
||||
amount: "Quantidade"
|
||||
lightness: "Esclarecer"
|
||||
contrast: "Contraste"
|
||||
hue: "Matiz"
|
||||
brightness: "Brilho"
|
||||
saturation: "Saturação"
|
||||
max: "Máximo"
|
||||
min: "Mínimo"
|
||||
direction: "Direção"
|
||||
phase: "Fase"
|
||||
frequency: "Frequência"
|
||||
strength: "Força"
|
||||
glitchChannelShift: "Mudança de canal"
|
||||
seed: "Valor da semente"
|
||||
redComponent: "Componente vermelho"
|
||||
greenComponent: "Componente verde"
|
||||
blueComponent: "Componente azul"
|
||||
threshold: "Limiar"
|
||||
centerX: "Centralizar X"
|
||||
centerY: "Centralizar Y"
|
||||
zoomLinesSmoothing: "Suavização"
|
||||
zoomLinesSmoothingDescription: "Suavização e largura das linhas de zoom não podem ser utilizados simultaneamente."
|
||||
zoomLinesThreshold: "Largura das linhas de zoom"
|
||||
zoomLinesMaskSize: "Diâmetro do centro"
|
||||
zoomLinesBlack: "Linhas pretas"
|
||||
circle: "Circular"
|
||||
drafts: "Rascunhos"
|
||||
_drafts:
|
||||
select: "Selecionar Rascunho"
|
||||
cannotCreateDraftAnymore: "O número máximo de rascunhos foi excedido."
|
||||
cannotCreateDraft: "Você não pode criar um rascunho com esse conteúdo."
|
||||
delete: "Excluir Rascunho"
|
||||
deleteAreYouSure: "Excluir rascunho?"
|
||||
noDrafts: "Sem rascunhos"
|
||||
replyTo: "Resposta a {user}"
|
||||
quoteOf: "Citação à nota de {user}"
|
||||
postTo: "Publicando em {channel}"
|
||||
saveToDraft: "Salvar como Rascunho"
|
||||
restoreFromDraft: "Restaurar de Rascunho"
|
||||
restore: "Redefinir"
|
||||
listDrafts: "Lista de Rascunhos"
|
||||
schedule: "Agendar nota"
|
||||
listScheduledNotes: "Lista de notas agendadas"
|
||||
cancelSchedule: "Cancelar agendamento"
|
||||
qr: "Código QR"
|
||||
_qr:
|
||||
showTabTitle: "Visualizar"
|
||||
readTabTitle: "Escanear"
|
||||
shareTitle: "{name} {acct}"
|
||||
shareText: "Siga-me no Fediverso!"
|
||||
chooseCamera: "Escolher câmera"
|
||||
cannotToggleFlash: "Não foi possível ligar a lanterna"
|
||||
turnOnFlash: "Ligar a lanterna"
|
||||
turnOffFlash: "Desligar a lanterna"
|
||||
startQr: "Retornar ao leitor de códigos QR"
|
||||
stopQr: "Deixar o leitor de códigos QR"
|
||||
noQrCodeFound: "Nenhum código QR encontrado"
|
||||
scanFile: "Escanear imagem de dispositivo"
|
||||
raw: "Texto"
|
||||
mfm: "MFM"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user