Compare commits
2 Commits
bubble-gam
...
12.119.2
Author | SHA1 | Date | |
---|---|---|---|
![]() |
a5a74f4434 | ||
![]() |
993110d114 |
@@ -2,4 +2,3 @@
|
||||
POSTGRES_PASSWORD=example-misskey-pass
|
||||
POSTGRES_USER=example-misskey-user
|
||||
POSTGRES_DB=misskey
|
||||
DATABASE_URL="postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}"
|
||||
|
@@ -1,195 +0,0 @@
|
||||
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
# Misskey configuration
|
||||
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
# ┌─────┐
|
||||
#───┘ URL └─────────────────────────────────────────────────────
|
||||
|
||||
# Final accessible URL seen by a user.
|
||||
url: https://example.tld/
|
||||
|
||||
# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE
|
||||
# URL SETTINGS AFTER THAT!
|
||||
|
||||
# ┌───────────────────────┐
|
||||
#───┘ Port and TLS settings └───────────────────────────────────
|
||||
|
||||
#
|
||||
# Misskey requires a reverse proxy to support HTTPS connections.
|
||||
#
|
||||
# +----- https://example.tld/ ------------+
|
||||
# +------+ |+-------------+ +----------------+|
|
||||
# | User | ---> || Proxy (443) | ---> | Misskey (3000) ||
|
||||
# +------+ |+-------------+ +----------------+|
|
||||
# +---------------------------------------+
|
||||
#
|
||||
# You need to set up a reverse proxy. (e.g. nginx)
|
||||
# An encrypted connection with HTTPS is highly recommended
|
||||
# because tokens may be transferred in GET requests.
|
||||
|
||||
# The port that your Misskey server should listen on.
|
||||
port: 3000
|
||||
|
||||
# ┌──────────────────────────┐
|
||||
#───┘ PostgreSQL configuration └────────────────────────────────
|
||||
|
||||
db:
|
||||
host: db
|
||||
port: 5432
|
||||
|
||||
# Database name
|
||||
db: misskey
|
||||
|
||||
# Auth
|
||||
user: example-misskey-user
|
||||
pass: example-misskey-pass
|
||||
|
||||
# Whether disable Caching queries
|
||||
#disableCache: true
|
||||
|
||||
# Extra Connection options
|
||||
#extra:
|
||||
# ssl: true
|
||||
|
||||
dbReplications: false
|
||||
|
||||
# You can configure any number of replicas here
|
||||
#dbSlaves:
|
||||
# -
|
||||
# host:
|
||||
# port:
|
||||
# db:
|
||||
# user:
|
||||
# pass:
|
||||
# -
|
||||
# host:
|
||||
# port:
|
||||
# db:
|
||||
# user:
|
||||
# pass:
|
||||
|
||||
# ┌─────────────────────┐
|
||||
#───┘ Redis configuration └─────────────────────────────────────
|
||||
|
||||
redis:
|
||||
host: redis
|
||||
port: 6379
|
||||
#family: 0 # 0=Both, 4=IPv4, 6=IPv6
|
||||
#pass: example-pass
|
||||
#prefix: example-prefix
|
||||
#db: 1
|
||||
|
||||
#redisForPubsub:
|
||||
# host: redis
|
||||
# port: 6379
|
||||
# #family: 0 # 0=Both, 4=IPv4, 6=IPv6
|
||||
# #pass: example-pass
|
||||
# #prefix: example-prefix
|
||||
# #db: 1
|
||||
|
||||
#redisForJobQueue:
|
||||
# host: redis
|
||||
# port: 6379
|
||||
# #family: 0 # 0=Both, 4=IPv4, 6=IPv6
|
||||
# #pass: example-pass
|
||||
# #prefix: example-prefix
|
||||
# #db: 1
|
||||
|
||||
#redisForTimelines:
|
||||
# host: redis
|
||||
# port: 6379
|
||||
# #family: 0 # 0=Both, 4=IPv4, 6=IPv6
|
||||
# #pass: example-pass
|
||||
# #prefix: example-prefix
|
||||
# #db: 1
|
||||
|
||||
# ┌───────────────────────────┐
|
||||
#───┘ MeiliSearch configuration └─────────────────────────────
|
||||
|
||||
# You can set scope to local (default value) or global
|
||||
# (include notes from remote).
|
||||
|
||||
#meilisearch:
|
||||
# host: meilisearch
|
||||
# port: 7700
|
||||
# apiKey: ''
|
||||
# ssl: true
|
||||
# index: ''
|
||||
# scope: local
|
||||
|
||||
# ┌───────────────┐
|
||||
#───┘ ID generation └───────────────────────────────────────────
|
||||
|
||||
# You can select the ID generation method.
|
||||
# You don't usually need to change this setting, but you can
|
||||
# change it according to your preferences.
|
||||
|
||||
# Available methods:
|
||||
# aid ... Short, Millisecond accuracy
|
||||
# aidx ... Millisecond accuracy
|
||||
# meid ... Similar to ObjectID, Millisecond accuracy
|
||||
# ulid ... Millisecond accuracy
|
||||
# objectid ... This is left for backward compatibility
|
||||
|
||||
# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE
|
||||
# ID SETTINGS AFTER THAT!
|
||||
|
||||
id: 'aidx'
|
||||
|
||||
# ┌─────────────────────┐
|
||||
#───┘ Other configuration └─────────────────────────────────────
|
||||
|
||||
# Whether disable HSTS
|
||||
#disableHsts: true
|
||||
|
||||
# Number of worker processes
|
||||
#clusterLimit: 1
|
||||
|
||||
# Job concurrency per worker
|
||||
# deliverJobConcurrency: 128
|
||||
# inboxJobConcurrency: 16
|
||||
|
||||
# Job rate limiter
|
||||
# deliverJobPerSec: 128
|
||||
# inboxJobPerSec: 32
|
||||
|
||||
# Job attempts
|
||||
# deliverJobMaxAttempts: 12
|
||||
# inboxJobMaxAttempts: 8
|
||||
|
||||
# IP address family used for outgoing request (ipv4, ipv6 or dual)
|
||||
#outgoingAddressFamily: ipv4
|
||||
|
||||
# Proxy for HTTP/HTTPS
|
||||
#proxy: http://127.0.0.1:3128
|
||||
|
||||
proxyBypassHosts:
|
||||
- api.deepl.com
|
||||
- api-free.deepl.com
|
||||
- www.recaptcha.net
|
||||
- hcaptcha.com
|
||||
- challenges.cloudflare.com
|
||||
|
||||
# Proxy for SMTP/SMTPS
|
||||
#proxySmtp: http://127.0.0.1:3128 # use HTTP/1.1 CONNECT
|
||||
#proxySmtp: socks4://127.0.0.1:1080 # use SOCKS4
|
||||
#proxySmtp: socks5://127.0.0.1:1080 # use SOCKS5
|
||||
|
||||
# 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)).
|
||||
#allowedPrivateNetworks: [
|
||||
# '127.0.0.1/32'
|
||||
#]
|
||||
|
||||
# Upload or download file size limits (bytes)
|
||||
#maxFileSize: 262144000
|
@@ -30,10 +30,6 @@ url: https://example.tld/
|
||||
# The port that your Misskey server should listen on.
|
||||
port: 3000
|
||||
|
||||
# You can also use UNIX domain socket.
|
||||
# socket: /path/to/misskey.sock
|
||||
# chmodSocket: '777'
|
||||
|
||||
# ┌──────────────────────────┐
|
||||
#───┘ PostgreSQL configuration └────────────────────────────────
|
||||
|
||||
@@ -55,23 +51,6 @@ db:
|
||||
#extra:
|
||||
# ssl: true
|
||||
|
||||
dbReplications: false
|
||||
|
||||
# You can configure any number of replicas here
|
||||
#dbSlaves:
|
||||
# -
|
||||
# host:
|
||||
# port:
|
||||
# db:
|
||||
# user:
|
||||
# pass:
|
||||
# -
|
||||
# host:
|
||||
# port:
|
||||
# db:
|
||||
# user:
|
||||
# pass:
|
||||
|
||||
# ┌─────────────────────┐
|
||||
#───┘ Redis configuration └─────────────────────────────────────
|
||||
|
||||
@@ -82,52 +61,16 @@ redis:
|
||||
#pass: example-pass
|
||||
#prefix: example-prefix
|
||||
#db: 1
|
||||
# You can specify more ioredis options...
|
||||
#username: example-username
|
||||
|
||||
#redisForPubsub:
|
||||
# ┌─────────────────────────────┐
|
||||
#───┘ Elasticsearch configuration └─────────────────────────────
|
||||
|
||||
#elasticsearch:
|
||||
# host: localhost
|
||||
# port: 6379
|
||||
# #family: 0 # 0=Both, 4=IPv4, 6=IPv6
|
||||
# #pass: example-pass
|
||||
# #prefix: example-prefix
|
||||
# #db: 1
|
||||
# # You can specify more ioredis options...
|
||||
# #username: example-username
|
||||
|
||||
#redisForJobQueue:
|
||||
# host: localhost
|
||||
# port: 6379
|
||||
# #family: 0 # 0=Both, 4=IPv4, 6=IPv6
|
||||
# #pass: example-pass
|
||||
# #prefix: example-prefix
|
||||
# #db: 1
|
||||
# # You can specify more ioredis options...
|
||||
# #username: example-username
|
||||
|
||||
#redisForTimelines:
|
||||
# host: localhost
|
||||
# port: 6379
|
||||
# #family: 0 # 0=Both, 4=IPv4, 6=IPv6
|
||||
# #pass: example-pass
|
||||
# #prefix: example-prefix
|
||||
# #db: 1
|
||||
# # You can specify more ioredis options...
|
||||
# #username: example-username
|
||||
|
||||
# ┌───────────────────────────┐
|
||||
#───┘ MeiliSearch configuration └─────────────────────────────
|
||||
|
||||
# You can set scope to local (default value) or global
|
||||
# (include notes from remote).
|
||||
|
||||
#meilisearch:
|
||||
# host: localhost
|
||||
# port: 7700
|
||||
# apiKey: ''
|
||||
# ssl: true
|
||||
# index: ''
|
||||
# scope: local
|
||||
# port: 9200
|
||||
# ssl: false
|
||||
# user:
|
||||
# pass:
|
||||
|
||||
# ┌───────────────┐
|
||||
#───┘ ID generation └───────────────────────────────────────────
|
||||
@@ -138,7 +81,6 @@ redis:
|
||||
|
||||
# Available methods:
|
||||
# aid ... Short, Millisecond accuracy
|
||||
# aidx ... Millisecond accuracy
|
||||
# meid ... Similar to ObjectID, Millisecond accuracy
|
||||
# ulid ... Millisecond accuracy
|
||||
# objectid ... This is left for backward compatibility
|
||||
@@ -146,7 +88,7 @@ redis:
|
||||
# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE
|
||||
# ID SETTINGS AFTER THAT!
|
||||
|
||||
id: 'aidx'
|
||||
id: 'aid'
|
||||
|
||||
# ┌─────────────────────┐
|
||||
#───┘ Other configuration └─────────────────────────────────────
|
||||
@@ -158,36 +100,32 @@ id: 'aidx'
|
||||
#clusterLimit: 1
|
||||
|
||||
# Job concurrency per worker
|
||||
#deliverJobConcurrency: 128
|
||||
#inboxJobConcurrency: 16
|
||||
#relashionshipJobConcurrency: 16
|
||||
# What's relashionshipJob?:
|
||||
# Follow, unfollow, block and unblock(ings) while following-imports, etc. or account migrations.
|
||||
# deliverJobConcurrency: 128
|
||||
# inboxJobConcurrency: 16
|
||||
|
||||
# Job rate limiter
|
||||
#deliverJobPerSec: 128
|
||||
#inboxJobPerSec: 32
|
||||
#relashionshipJobPerSec: 64
|
||||
# deliverJobPerSec: 128
|
||||
# inboxJobPerSec: 16
|
||||
|
||||
# Job attempts
|
||||
#deliverJobMaxAttempts: 12
|
||||
#inboxJobMaxAttempts: 8
|
||||
|
||||
# Local address used for outgoing requests
|
||||
#outgoingAddress: 127.0.0.1
|
||||
# deliverJobMaxAttempts: 12
|
||||
# inboxJobMaxAttempts: 8
|
||||
|
||||
# IP address family used for outgoing request (ipv4, ipv6 or dual)
|
||||
#outgoingAddressFamily: ipv4
|
||||
|
||||
# Syslog option
|
||||
#syslog:
|
||||
# host: localhost
|
||||
# port: 514
|
||||
|
||||
# Proxy for HTTP/HTTPS
|
||||
#proxy: http://127.0.0.1:3128
|
||||
|
||||
proxyBypassHosts:
|
||||
- api.deepl.com
|
||||
- api-free.deepl.com
|
||||
- www.recaptcha.net
|
||||
- hcaptcha.com
|
||||
- challenges.cloudflare.com
|
||||
#proxyBypassHosts: [
|
||||
# 'example.com',
|
||||
# '192.0.2.8'
|
||||
#]
|
||||
|
||||
# Proxy for SMTP/SMTPS
|
||||
#proxySmtp: http://127.0.0.1:3128 # use HTTP/1.1 CONNECT
|
||||
@@ -195,33 +133,17 @@ proxyBypassHosts:
|
||||
#proxySmtp: socks5://127.0.0.1:1080 # use SOCKS5
|
||||
|
||||
# Media Proxy
|
||||
# Reference Implementation: https://github.com/misskey-dev/media-proxy
|
||||
# * Deliver a common cache between instances
|
||||
# * 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
|
||||
# Proxy remote files (default: false)
|
||||
#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: false)
|
||||
#signToActivityPubGet: 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)).
|
||||
#allowedPrivateNetworks: [
|
||||
# '127.0.0.1/32'
|
||||
#]
|
||||
|
||||
# Upload or download file size limits (bytes)
|
||||
#maxFileSize: 262144000
|
||||
|
||||
# PID File of master process
|
||||
#pidFile: /tmp/misskey.pid
|
||||
|
@@ -1 +0,0 @@
|
||||
FROM mcr.microsoft.com/devcontainers/javascript-node:0-18
|
@@ -1,29 +0,0 @@
|
||||
{
|
||||
"name": "Misskey",
|
||||
"dockerComposeFile": "docker-compose.yml",
|
||||
"service": "app",
|
||||
"workspaceFolder": "/workspace",
|
||||
"features": {
|
||||
"ghcr.io/devcontainers-contrib/features/pnpm:2": {
|
||||
"version": "8.9.2"
|
||||
},
|
||||
"ghcr.io/devcontainers/features/node:1": {
|
||||
"version": "20.10.0"
|
||||
}
|
||||
},
|
||||
"forwardPorts": [3000],
|
||||
"postCreateCommand": "sudo chmod 755 .devcontainer/init.sh && .devcontainer/init.sh",
|
||||
"customizations": {
|
||||
"vscode": {
|
||||
"extensions": [
|
||||
"editorconfig.editorconfig",
|
||||
"dbaeumer.vscode-eslint",
|
||||
"Vue.volar",
|
||||
"Vue.vscode-typescript-vue-plugin",
|
||||
"Orta.vscode-jest",
|
||||
"dbaeumer.vscode-eslint",
|
||||
"mrmlnc.vscode-json5"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,188 +0,0 @@
|
||||
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
# Misskey configuration
|
||||
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
# ┌─────┐
|
||||
#───┘ URL └─────────────────────────────────────────────────────
|
||||
|
||||
# Final accessible URL seen by a user.
|
||||
url: http://127.0.0.1:3000/
|
||||
|
||||
# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE
|
||||
# URL SETTINGS AFTER THAT!
|
||||
|
||||
# ┌───────────────────────┐
|
||||
#───┘ Port and TLS settings └───────────────────────────────────
|
||||
|
||||
#
|
||||
# Misskey requires a reverse proxy to support HTTPS connections.
|
||||
#
|
||||
# +----- https://example.tld/ ------------+
|
||||
# +------+ |+-------------+ +----------------+|
|
||||
# | User | ---> || Proxy (443) | ---> | Misskey (3000) ||
|
||||
# +------+ |+-------------+ +----------------+|
|
||||
# +---------------------------------------+
|
||||
#
|
||||
# You need to set up a reverse proxy. (e.g. nginx)
|
||||
# An encrypted connection with HTTPS is highly recommended
|
||||
# because tokens may be transferred in GET requests.
|
||||
|
||||
# The port that your Misskey server should listen on.
|
||||
port: 3000
|
||||
|
||||
# ┌──────────────────────────┐
|
||||
#───┘ PostgreSQL configuration └────────────────────────────────
|
||||
|
||||
db:
|
||||
host: db
|
||||
port: 5432
|
||||
|
||||
# Database name
|
||||
db: misskey
|
||||
|
||||
# Auth
|
||||
user: postgres
|
||||
pass: postgres
|
||||
|
||||
# Whether disable Caching queries
|
||||
#disableCache: true
|
||||
|
||||
# Extra Connection options
|
||||
#extra:
|
||||
# ssl: true
|
||||
|
||||
dbReplications: false
|
||||
|
||||
# You can configure any number of replicas here
|
||||
#dbSlaves:
|
||||
# -
|
||||
# host:
|
||||
# port:
|
||||
# db:
|
||||
# user:
|
||||
# pass:
|
||||
# -
|
||||
# host:
|
||||
# port:
|
||||
# db:
|
||||
# user:
|
||||
# pass:
|
||||
|
||||
# ┌─────────────────────┐
|
||||
#───┘ Redis configuration └─────────────────────────────────────
|
||||
|
||||
redis:
|
||||
host: redis
|
||||
port: 6379
|
||||
#family: 0 # 0=Both, 4=IPv4, 6=IPv6
|
||||
#pass: example-pass
|
||||
#prefix: example-prefix
|
||||
#db: 1
|
||||
|
||||
#redisForPubsub:
|
||||
# host: redis
|
||||
# port: 6379
|
||||
# #family: 0 # 0=Both, 4=IPv4, 6=IPv6
|
||||
# #pass: example-pass
|
||||
# #prefix: example-prefix
|
||||
# #db: 1
|
||||
|
||||
#redisForJobQueue:
|
||||
# host: redis
|
||||
# port: 6379
|
||||
# #family: 0 # 0=Both, 4=IPv4, 6=IPv6
|
||||
# #pass: example-pass
|
||||
# #prefix: example-prefix
|
||||
# #db: 1
|
||||
|
||||
#redisForTimelines:
|
||||
# host: redis
|
||||
# port: 6379
|
||||
# #family: 0 # 0=Both, 4=IPv4, 6=IPv6
|
||||
# #pass: example-pass
|
||||
# #prefix: example-prefix
|
||||
# #db: 1
|
||||
|
||||
# ┌───────────────────────────┐
|
||||
#───┘ MeiliSearch configuration └─────────────────────────────
|
||||
|
||||
#meilisearch:
|
||||
# host: meilisearch
|
||||
# port: 7700
|
||||
# apiKey: ''
|
||||
# ssl: true
|
||||
# index: ''
|
||||
|
||||
# ┌───────────────┐
|
||||
#───┘ ID generation └───────────────────────────────────────────
|
||||
|
||||
# You can select the ID generation method.
|
||||
# You don't usually need to change this setting, but you can
|
||||
# change it according to your preferences.
|
||||
|
||||
# Available methods:
|
||||
# aid ... Short, Millisecond accuracy
|
||||
# aidx ... Millisecond accuracy
|
||||
# meid ... Similar to ObjectID, Millisecond accuracy
|
||||
# ulid ... Millisecond accuracy
|
||||
# objectid ... This is left for backward compatibility
|
||||
|
||||
# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE
|
||||
# ID SETTINGS AFTER THAT!
|
||||
|
||||
id: 'aidx'
|
||||
|
||||
# ┌─────────────────────┐
|
||||
#───┘ Other configuration └─────────────────────────────────────
|
||||
|
||||
# Whether disable HSTS
|
||||
#disableHsts: true
|
||||
|
||||
# Number of worker processes
|
||||
#clusterLimit: 1
|
||||
|
||||
# Job concurrency per worker
|
||||
# deliverJobConcurrency: 128
|
||||
# inboxJobConcurrency: 16
|
||||
|
||||
# Job rate limiter
|
||||
# deliverJobPerSec: 128
|
||||
# inboxJobPerSec: 32
|
||||
|
||||
# Job attempts
|
||||
# deliverJobMaxAttempts: 12
|
||||
# inboxJobMaxAttempts: 8
|
||||
|
||||
# IP address family used for outgoing request (ipv4, ipv6 or dual)
|
||||
#outgoingAddressFamily: ipv4
|
||||
|
||||
# Proxy for HTTP/HTTPS
|
||||
#proxy: http://127.0.0.1:3128
|
||||
|
||||
proxyBypassHosts:
|
||||
- api.deepl.com
|
||||
- api-free.deepl.com
|
||||
- www.recaptcha.net
|
||||
- hcaptcha.com
|
||||
- challenges.cloudflare.com
|
||||
|
||||
# Proxy for SMTP/SMTPS
|
||||
#proxySmtp: http://127.0.0.1:3128 # use HTTP/1.1 CONNECT
|
||||
#proxySmtp: socks4://127.0.0.1:1080 # use SOCKS4
|
||||
#proxySmtp: socks5://127.0.0.1:1080 # use SOCKS5
|
||||
|
||||
# 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'
|
||||
]
|
||||
|
||||
# Upload or download file size limits (bytes)
|
||||
#maxFileSize: 262144000
|
@@ -1,53 +0,0 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
app:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
|
||||
volumes:
|
||||
- ../:/workspace:cached
|
||||
|
||||
command: sleep infinity
|
||||
|
||||
networks:
|
||||
- internal_network
|
||||
- external_network
|
||||
|
||||
redis:
|
||||
restart: unless-stopped
|
||||
image: redis:7-alpine
|
||||
networks:
|
||||
- internal_network
|
||||
volumes:
|
||||
- redis-data:/data
|
||||
healthcheck:
|
||||
test: "redis-cli ping"
|
||||
interval: 5s
|
||||
retries: 20
|
||||
|
||||
db:
|
||||
restart: unless-stopped
|
||||
image: postgres:15-alpine
|
||||
networks:
|
||||
- internal_network
|
||||
environment:
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: postgres
|
||||
POSTGRES_DB: misskey
|
||||
volumes:
|
||||
- postgres-data:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"
|
||||
interval: 5s
|
||||
retries: 20
|
||||
|
||||
volumes:
|
||||
postgres-data:
|
||||
redis-data:
|
||||
|
||||
networks:
|
||||
internal_network:
|
||||
internal: true
|
||||
external_network:
|
@@ -1,11 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -xe
|
||||
|
||||
sudo chown -R node /workspace
|
||||
git submodule update --init
|
||||
pnpm config set store-dir /home/node/.local/share/pnpm/store
|
||||
pnpm install --frozen-lockfile
|
||||
cp .devcontainer/devcontainer.yml .config/default.yml
|
||||
pnpm build
|
||||
pnpm migrate
|
@@ -8,24 +8,8 @@ build/
|
||||
built/
|
||||
db/
|
||||
docker-compose.yml
|
||||
elasticsearch/
|
||||
node_modules/
|
||||
packages/*/node_modules
|
||||
redis/
|
||||
files/
|
||||
misskey-assets/
|
||||
fluent-emojis/
|
||||
.pnp.*
|
||||
|
||||
# .yarn関連
|
||||
.yarn/*
|
||||
!.yarn/patches
|
||||
!.yarn/plugins
|
||||
!.yarn/releases
|
||||
!.yarn/sdks
|
||||
!.yarn/versions
|
||||
|
||||
.pnpm-store
|
||||
|
||||
.idea/
|
||||
packages/*/.vscode/
|
||||
packages/backend/test/docker-compose.yml
|
||||
|
@@ -1,3 +0,0 @@
|
||||
DKL-DI-0005
|
||||
DKL-DI-0006
|
||||
DKL-LI-0003
|
@@ -5,11 +5,6 @@ indent_style = tab
|
||||
indent_size = 2
|
||||
charset = utf-8
|
||||
insert_final_newline = true
|
||||
end_of_line = lf
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
[*.{yml,yaml}]
|
||||
[*.yml]
|
||||
indent_style = space
|
||||
|
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -5,4 +5,3 @@
|
||||
*.glb -diff -text
|
||||
*.blend -diff -text
|
||||
*.afdesign -diff -text
|
||||
* text=auto eol=lf
|
||||
|
42
.github/ISSUE_TEMPLATE/01_bug-report.md
vendored
Normal file
42
.github/ISSUE_TEMPLATE/01_bug-report.md
vendored
Normal file
@@ -0,0 +1,42 @@
|
||||
---
|
||||
name: 🐛 Bug Report
|
||||
about: Create a report to help us improve
|
||||
title: ''
|
||||
labels: ⚠️bug?
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
<!--
|
||||
Thanks for reporting!
|
||||
First, in order to avoid duplicate Issues, please search to see if the problem you found has already been reported.
|
||||
-->
|
||||
|
||||
## 💡 Summary
|
||||
|
||||
<!-- Tell us what the bug is -->
|
||||
|
||||
## 🥰 Expected Behavior
|
||||
|
||||
<!--- Tell us what should happen -->
|
||||
|
||||
## 🤬 Actual Behavior
|
||||
|
||||
<!--
|
||||
Tell us what happens instead of the expected behavior.
|
||||
Please include errors from the developer console and/or server log files if you have access to them.
|
||||
-->
|
||||
|
||||
## 📝 Steps to Reproduce
|
||||
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
|
||||
## 📌 Environment
|
||||
|
||||
<!-- Tell us where on the platform it happens -->
|
||||
|
||||
Misskey version:
|
||||
Your OS:
|
||||
Your browser:
|
97
.github/ISSUE_TEMPLATE/01_bug-report.yml
vendored
97
.github/ISSUE_TEMPLATE/01_bug-report.yml
vendored
@@ -1,97 +0,0 @@
|
||||
name: 🐛 Bug Report
|
||||
description: Create a report to help us improve
|
||||
labels: ["⚠️bug?"]
|
||||
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thanks for reporting!
|
||||
First, in order to avoid duplicate Issues, please search to see if the problem you found has already been reported.
|
||||
Also, If you are NOT owner/admin of server, PLEASE DONT REPORT SERVER SPECIFIC ISSUES TO HERE! (e.g. feature XXX is not working in misskey.example) Please try with another misskey servers, and if your issue is only reproducible with specific server, contact your server's owner/admin first.
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: 💡 Summary
|
||||
description: Tell us what the bug is
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: 🥰 Expected Behavior
|
||||
description: Tell us what should happen
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: 🤬 Actual Behavior
|
||||
description: |
|
||||
Tell us what happens instead of the expected behavior.
|
||||
Please include errors from the developer console and/or server log files if you have access to them.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: 📝 Steps to Reproduce
|
||||
placeholder: |
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
validations:
|
||||
required: false
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: 💻 Frontend Environment
|
||||
description: |
|
||||
Tell us where on the platform it happens
|
||||
DO NOT WRITE "latest". Please provide the specific version.
|
||||
|
||||
Examples:
|
||||
* Model and OS of the device(s): MacBook Pro (14inch, 2021), macOS Ventura 13.4
|
||||
* Browser: Chrome 113.0.5672.126
|
||||
* Server URL: misskey.io
|
||||
* Misskey: 13.x.x
|
||||
value: |
|
||||
* Model and OS of the device(s):
|
||||
* Browser:
|
||||
* Server URL:
|
||||
* Misskey:
|
||||
render: markdown
|
||||
validations:
|
||||
required: false
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: 🛰 Backend Environment (for server admin)
|
||||
description: |
|
||||
Tell us where on the platform it happens
|
||||
DO NOT WRITE "latest". Please provide the specific version.
|
||||
If you are using a managed service, put that after the version.
|
||||
|
||||
Examples:
|
||||
* Installation Method or Hosting Service: docker compose, k8s/docker, systemd, "Misskey install shell script", development environment
|
||||
* Misskey: 13.x.x
|
||||
* Node: 20.x.x
|
||||
* PostgreSQL: 15.x.x
|
||||
* Redis: 7.x.x
|
||||
* OS and Architecture: Ubuntu 22.04.2 LTS aarch64
|
||||
value: |
|
||||
* Installation Method or Hosting Service:
|
||||
* Misskey:
|
||||
* Node:
|
||||
* PostgreSQL:
|
||||
* Redis:
|
||||
* OS and Architecture:
|
||||
render: markdown
|
||||
validations:
|
||||
required: false
|
||||
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: Do you want to address this bug yourself?
|
||||
options:
|
||||
- label: Yes, I will patch the bug myself and send a pull request
|
12
.github/ISSUE_TEMPLATE/02_feature-request.md
vendored
Normal file
12
.github/ISSUE_TEMPLATE/02_feature-request.md
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
---
|
||||
name: ✨ Feature Request
|
||||
about: Suggest an idea for this project
|
||||
title: ''
|
||||
labels: ✨Feature
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
## Summary
|
||||
|
||||
<!-- Tell us what the suggestion is -->
|
22
.github/ISSUE_TEMPLATE/02_feature-request.yml
vendored
22
.github/ISSUE_TEMPLATE/02_feature-request.yml
vendored
@@ -1,22 +0,0 @@
|
||||
name: ✨ Feature Request
|
||||
description: Suggest an idea for this project
|
||||
labels: ["✨Feature"]
|
||||
|
||||
body:
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Summary
|
||||
description: Tell us what the suggestion is
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Purpose
|
||||
description: Describe the specific problem or need you think this feature will solve, and who it will help.
|
||||
validations:
|
||||
required: true
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: Do you want to implement this feature yourself?
|
||||
options:
|
||||
- label: Yes, I will implement this by myself and send a pull request
|
3
.github/ISSUE_TEMPLATE/config.yml
vendored
3
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -1,4 +1,7 @@
|
||||
contact_links:
|
||||
- name: 👪 Misskey Forum
|
||||
url: https://forum.misskey.io/
|
||||
about: Ask questions and share knowledge
|
||||
- name: 💬 Misskey official Discord
|
||||
url: https://discord.gg/Wp8gVStHW3
|
||||
about: Chat freely about Misskey
|
||||
|
17
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
17
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
<!-- ℹ お読みください / README
|
||||
PRありがとうございます! PRを作成する前に、コントリビューションガイドをご確認ください:
|
||||
Thank you for your PR! Before creating a PR, please check the contribution guide:
|
||||
https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md
|
||||
-->
|
||||
|
||||
# What
|
||||
<!-- このPRで何をしたのか? どう変わるのか? -->
|
||||
<!-- What did you do with this PR? How will it change things? -->
|
||||
|
||||
# Why
|
||||
<!-- なぜそうするのか? どういう意図なのか? 何が困っているのか? -->
|
||||
<!-- Why do you do it? What are your intentions? What is the problem? -->
|
||||
|
||||
# Additional info (optional)
|
||||
<!-- テスト観点など -->
|
||||
<!-- Test perspective, etc -->
|
23
.github/PULL_REQUEST_TEMPLATE/01_bug.md
vendored
23
.github/PULL_REQUEST_TEMPLATE/01_bug.md
vendored
@@ -1,23 +0,0 @@
|
||||
<!-- ℹ お読みください / README
|
||||
PRありがとうございます! PRを作成する前に、コントリビューションガイドをご確認ください:
|
||||
Thank you for your PR! Before creating a PR, please check the contribution guide:
|
||||
https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md
|
||||
-->
|
||||
|
||||
## What
|
||||
<!-- このPRで何をしたのか? どう変わるのか? -->
|
||||
<!-- What did you do with this PR? How will it change things? -->
|
||||
|
||||
## Why
|
||||
<!-- なぜそうするのか? どういう意図なのか? 何が困っているのか? -->
|
||||
<!-- Why do you do it? What are your intentions? What is the problem? -->
|
||||
|
||||
## Additional info (optional)
|
||||
<!-- テスト観点など -->
|
||||
<!-- Test perspective, etc -->
|
||||
|
||||
## Checklist
|
||||
- [ ] Read the [contribution guide](https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md)
|
||||
- [ ] Test working in a local environment
|
||||
- [ ] (If needed) Update CHANGELOG.md
|
||||
- [ ] (If possible) Add tests
|
23
.github/PULL_REQUEST_TEMPLATE/02_enhance.md
vendored
23
.github/PULL_REQUEST_TEMPLATE/02_enhance.md
vendored
@@ -1,23 +0,0 @@
|
||||
<!-- ℹ お読みください / README
|
||||
PRありがとうございます! PRを作成する前に、コントリビューションガイドをご確認ください:
|
||||
Thank you for your PR! Before creating a PR, please check the contribution guide:
|
||||
https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md
|
||||
-->
|
||||
|
||||
## What
|
||||
<!-- このPRで何をしたのか? どう変わるのか? -->
|
||||
<!-- What did you do with this PR? How will it change things? -->
|
||||
|
||||
## Why
|
||||
<!-- なぜそうするのか? どういう意図なのか? 何が困っているのか? -->
|
||||
<!-- Why do you do it? What are your intentions? What is the problem? -->
|
||||
|
||||
## Additional info (optional)
|
||||
<!-- テスト観点など -->
|
||||
<!-- Test perspective, etc -->
|
||||
|
||||
## Checklist
|
||||
- [ ] Read the [contribution guide](https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md)
|
||||
- [ ] Test working in a local environment
|
||||
- [ ] (If needed) Update CHANGELOG.md
|
||||
- [ ] (If possible) Add tests
|
20
.github/PULL_REQUEST_TEMPLATE/03_release.md
vendored
20
.github/PULL_REQUEST_TEMPLATE/03_release.md
vendored
@@ -1,20 +0,0 @@
|
||||
## Summary
|
||||
This is a release PR.
|
||||
|
||||
For more information on the release instructions, please see:
|
||||
https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md#release
|
||||
|
||||
## For reviewers
|
||||
- CHANGELOGに抜け漏れは無いか
|
||||
- バージョンの上げ方は適切か
|
||||
- 他にこのリリースに含めなければならない変更は無いか
|
||||
- 全体的な変更内容を俯瞰し問題は無いか
|
||||
- レビューされていないコミットがある場合は、それが問題ないか
|
||||
- 最終的な動作確認を行い問題は無いか
|
||||
|
||||
などを確認し、リリースする準備が整っていると思われる場合は approve してください。
|
||||
|
||||
## Checklist
|
||||
- [ ] package.jsonのバージョンが正しく更新されている
|
||||
- [ ] CHANGELOGが過不足無く更新されている
|
||||
- [ ] CIが全て通っている
|
48
.github/dependabot.yml
vendored
48
.github/dependabot.yml
vendored
@@ -5,44 +5,18 @@
|
||||
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: github-actions
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: daily
|
||||
open-pull-requests-limit: 100
|
||||
|
||||
# Add only the root, not each workspace item
|
||||
# https://github.com/dependabot/dependabot-core/issues/4993#issuecomment-1289133027
|
||||
- package-ecosystem: npm
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: daily
|
||||
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/*"
|
||||
slacc:
|
||||
patterns:
|
||||
- "slacc-*"
|
||||
storybook:
|
||||
patterns:
|
||||
- "storybook*"
|
||||
- "@storybook/*"
|
||||
swc-core:
|
||||
patterns:
|
||||
- "@swc/core*"
|
||||
typescript-eslint:
|
||||
patterns:
|
||||
- "@typescript-eslint/*"
|
||||
tensorflow:
|
||||
patterns:
|
||||
- "@tensorflow/*"
|
||||
open-pull-requests-limit: 0
|
||||
- package-ecosystem: npm
|
||||
directory: "/packages/backend"
|
||||
schedule:
|
||||
interval: daily
|
||||
open-pull-requests-limit: 0
|
||||
- package-ecosystem: npm
|
||||
directory: "/packages/client"
|
||||
schedule:
|
||||
interval: daily
|
||||
open-pull-requests-limit: 0
|
||||
|
40
.github/labeler.yml
vendored
40
.github/labeler.yml
vendored
@@ -1,34 +1,12 @@
|
||||
'packages/backend':
|
||||
- any:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file: ['packages/backend/**/*']
|
||||
'⚙️Server':
|
||||
- packages/backend/**/*
|
||||
|
||||
'packages/backend:test':
|
||||
- any:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file: ['packages/backend/test/**/*']
|
||||
'🖥️Client':
|
||||
- packages/client/**/*
|
||||
|
||||
'packages/frontend':
|
||||
- any:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file: ['packages/frontend/**/*']
|
||||
'🧪Test':
|
||||
- cypress/**/*
|
||||
- packages/backend/test/**/*
|
||||
|
||||
'packages/frontend:test':
|
||||
- any:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file: ['cypress/**/*']
|
||||
|
||||
'packages/sw':
|
||||
- any:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file: ['packages/sw/**/*']
|
||||
|
||||
'packages/misskey-js':
|
||||
- any:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file: ['packages/misskey-js/**/*']
|
||||
|
||||
'packages/misskey-js:test':
|
||||
- any:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file: ['packages/misskey-js/test/**/*', 'packages/misskey-js/test-d/**/*']
|
||||
'‼️ wrong locales':
|
||||
- any: ['locales/*.yml', '!locales/ja-JP.yml']
|
||||
|
6
.github/misskey/test.yml
vendored
6
.github/misskey/test.yml
vendored
@@ -4,12 +4,12 @@ url: 'http://misskey.local'
|
||||
port: 61812
|
||||
|
||||
db:
|
||||
host: 127.0.0.1
|
||||
host: localhost
|
||||
port: 54312
|
||||
db: test-misskey
|
||||
user: postgres
|
||||
pass: ''
|
||||
redis:
|
||||
host: 127.0.0.1
|
||||
host: localhost
|
||||
port: 56312
|
||||
id: aidx
|
||||
id: aid
|
||||
|
24
.github/pull_request_template.md
vendored
24
.github/pull_request_template.md
vendored
@@ -1,24 +0,0 @@
|
||||
<!-- ℹ お読みください / README
|
||||
PRありがとうございます! PRを作成する前に、コントリビューションガイドをご確認ください:
|
||||
Thank you for your PR! Before creating a PR, please check the contribution guide:
|
||||
https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md
|
||||
-->
|
||||
|
||||
## What
|
||||
<!-- このPRで何をしたのか? どう変わるのか? -->
|
||||
<!-- What did you do with this PR? How will it change things? -->
|
||||
|
||||
## Why
|
||||
<!-- なぜそうするのか? どういう意図なのか? 何が困っているのか? -->
|
||||
<!-- Why do you do it? What are your intentions? What is the problem? -->
|
||||
|
||||
## Additional info (optional)
|
||||
<!-- テスト観点など -->
|
||||
<!-- Test perspective, etc -->
|
||||
|
||||
## Checklist
|
||||
- [ ] Read the [contribution guide](https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md)
|
||||
- [ ] Test working in a local environment
|
||||
- [ ] (If needed) Add story of storybook
|
||||
- [ ] (If needed) Update CHANGELOG.md
|
||||
- [ ] (If possible) Add tests
|
42
.github/workflows/api-misskey-js.yml
vendored
42
.github/workflows/api-misskey-js.yml
vendored
@@ -1,42 +0,0 @@
|
||||
name: API report (misskey.js)
|
||||
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- packages/misskey-js/**
|
||||
pull_request:
|
||||
paths:
|
||||
- packages/misskey-js/**
|
||||
|
||||
jobs:
|
||||
report:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4.1.1
|
||||
|
||||
- run: corepack enable
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4.0.1
|
||||
with:
|
||||
node-version-file: '.node-version'
|
||||
cache: 'pnpm'
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm i --frozen-lockfile
|
||||
|
||||
- name: Build
|
||||
run: pnpm --filter misskey-js build
|
||||
|
||||
- name: Check files
|
||||
run: ls packages/misskey-js/built
|
||||
|
||||
- name: API report
|
||||
run: pnpm --filter misskey-js api-prod
|
||||
|
||||
- name: Show report
|
||||
if: always()
|
||||
run: cat packages/misskey-js/temp/misskey-js.api.md
|
18
.github/workflows/check_copyright_year.yml
vendored
18
.github/workflows/check_copyright_year.yml
vendored
@@ -1,18 +0,0 @@
|
||||
name: Check copyright year
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
|
||||
jobs:
|
||||
check_copyright_year:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- 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!"
|
||||
exit 1
|
||||
fi
|
20
.github/workflows/docker-develop.yml
vendored
20
.github/workflows/docker-develop.yml
vendored
@@ -10,34 +10,24 @@ jobs:
|
||||
push_to_registry:
|
||||
name: Push Docker image to Docker Hub
|
||||
runs-on: ubuntu-latest
|
||||
if: github.repository == 'misskey-dev/misskey'
|
||||
|
||||
steps:
|
||||
- name: Check out the repo
|
||||
uses: actions/checkout@v4.1.1
|
||||
- name: Set up Docker Buildx
|
||||
id: buildx
|
||||
uses: docker/setup-buildx-action@v3.0.0
|
||||
with:
|
||||
platforms: linux/amd64,linux/arm64
|
||||
uses: actions/checkout@v2
|
||||
- name: Docker meta
|
||||
id: meta
|
||||
uses: docker/metadata-action@v5
|
||||
uses: docker/metadata-action@v3
|
||||
with:
|
||||
images: misskey/misskey
|
||||
- name: Log in to Docker Hub
|
||||
uses: docker/login-action@v3
|
||||
uses: docker/login-action@v1
|
||||
with:
|
||||
username: ${{ secrets.DOCKER_USERNAME }}
|
||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||
- name: Build and Push to Docker Hub
|
||||
uses: docker/build-push-action@v5
|
||||
uses: docker/build-push-action@v2
|
||||
with:
|
||||
builder: ${{ steps.buildx.outputs.name }}
|
||||
context: .
|
||||
push: true
|
||||
platforms: ${{ steps.buildx.outputs.platforms }}
|
||||
provenance: false
|
||||
tags: misskey/misskey:develop
|
||||
labels: develop
|
||||
cache-from: type=gha
|
||||
cache-to: type=gha,mode=max
|
||||
|
25
.github/workflows/docker.yml
vendored
25
.github/workflows/docker.yml
vendored
@@ -12,38 +12,21 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Check out the repo
|
||||
uses: actions/checkout@v4.1.1
|
||||
- name: Set up Docker Buildx
|
||||
id: buildx
|
||||
uses: docker/setup-buildx-action@v3.0.0
|
||||
with:
|
||||
platforms: linux/amd64,linux/arm64
|
||||
uses: actions/checkout@v2
|
||||
- name: Docker meta
|
||||
id: meta
|
||||
uses: docker/metadata-action@v5
|
||||
uses: docker/metadata-action@v3
|
||||
with:
|
||||
images: misskey/misskey
|
||||
tags: |
|
||||
type=edge
|
||||
type=ref,event=pr
|
||||
type=ref,event=branch
|
||||
type=semver,pattern={{version}}
|
||||
type=semver,pattern={{major}}.{{minor}}
|
||||
type=semver,pattern={{major}}
|
||||
- name: Log in to Docker Hub
|
||||
uses: docker/login-action@v3
|
||||
uses: docker/login-action@v1
|
||||
with:
|
||||
username: ${{ secrets.DOCKER_USERNAME }}
|
||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||
- name: Build and Push to Docker Hub
|
||||
uses: docker/build-push-action@v5
|
||||
uses: docker/build-push-action@v2
|
||||
with:
|
||||
builder: ${{ steps.buildx.outputs.name }}
|
||||
context: .
|
||||
push: true
|
||||
platforms: ${{ steps.buildx.outputs.platforms }}
|
||||
provenance: false
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
cache-from: type=gha
|
||||
cache-to: type=gha,mode=max
|
||||
|
30
.github/workflows/dockle.yml
vendored
30
.github/workflows/dockle.yml
vendored
@@ -1,30 +0,0 @@
|
||||
---
|
||||
name: Dockle
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
dockle:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
DOCKER_CONTENT_TRUST: 1
|
||||
steps:
|
||||
- uses: actions/checkout@v4.1.1
|
||||
- run: |
|
||||
curl -L -o dockle.deb "https://github.com/goodwithtech/dockle/releases/download/v0.4.10/dockle_0.4.10_Linux-64bit.deb"
|
||||
sudo dpkg -i dockle.deb
|
||||
- run: |
|
||||
cp .config/docker_example.env .config/docker.env
|
||||
cp ./docker-compose_example.yml ./docker-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}"
|
73
.github/workflows/get-api-diff.yml
vendored
73
.github/workflows/get-api-diff.yml
vendored
@@ -1,73 +0,0 @@
|
||||
# this name is used in report-api-diff.yml so be careful when change name
|
||||
name: Get api.json from Misskey
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
paths:
|
||||
- packages/backend/**
|
||||
- .github/workflows/get-api-diff.yml
|
||||
|
||||
jobs:
|
||||
get-from-misskey:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [20.10.0]
|
||||
api-json-name: [api-base.json, api-head.json]
|
||||
include:
|
||||
- api-json-name: api-base.json
|
||||
ref: ${{ github.base_ref }}
|
||||
- api-json-name: api-head.json
|
||||
ref: refs/pull/${{ github.event.number }}/merge
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
ref: ${{ matrix.ref }}
|
||||
submodules: true
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v2
|
||||
with:
|
||||
version: 8
|
||||
run_install: false
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4.0.1
|
||||
with:
|
||||
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
|
||||
- name: Copy Configure
|
||||
run: cp .config/example.yml .config/default.yml
|
||||
- name: Build
|
||||
run: pnpm build
|
||||
- name: Generate API JSON
|
||||
run: pnpm --filter backend generate-api-json
|
||||
- name: Copy API.json
|
||||
run: cp packages/backend/built/api.json ${{ matrix.api-json-name }}
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: api-artifact-${{ matrix.api-json-name }}
|
||||
path: ${{ matrix.api-json-name }}
|
||||
|
||||
save-pr-number:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Save PR number
|
||||
env:
|
||||
PR_NUMBER: ${{ github.event.number }}
|
||||
run: |
|
||||
echo "$PR_NUMBER" > ./pr_number
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: api-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@v5
|
||||
- uses: actions/labeler@v4
|
||||
with:
|
||||
repo-token: "${{ secrets.GITHUB_TOKEN }}"
|
||||
|
134
.github/workflows/lint.yml
vendored
134
.github/workflows/lint.yml
vendored
@@ -1,95 +1,39 @@
|
||||
name: Lint
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
paths:
|
||||
- packages/backend/**
|
||||
- packages/frontend/**
|
||||
- packages/sw/**
|
||||
- packages/misskey-js/**
|
||||
- packages/shared/.eslintrc.js
|
||||
pull_request:
|
||||
paths:
|
||||
- packages/backend/**
|
||||
- packages/frontend/**
|
||||
- packages/sw/**
|
||||
- packages/misskey-js/**
|
||||
- packages/shared/.eslintrc.js
|
||||
|
||||
jobs:
|
||||
pnpm_install:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
fetch-depth: 0
|
||||
submodules: true
|
||||
- uses: pnpm/action-setup@v2
|
||||
with:
|
||||
version: 8
|
||||
run_install: false
|
||||
- uses: actions/setup-node@v4.0.1
|
||||
with:
|
||||
node-version-file: '.node-version'
|
||||
cache: 'pnpm'
|
||||
- run: corepack enable
|
||||
- run: pnpm i --frozen-lockfile
|
||||
|
||||
lint:
|
||||
needs: [pnpm_install]
|
||||
runs-on: ubuntu-latest
|
||||
continue-on-error: true
|
||||
strategy:
|
||||
matrix:
|
||||
workspace:
|
||||
- backend
|
||||
- frontend
|
||||
- sw
|
||||
- misskey-js
|
||||
steps:
|
||||
- uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
fetch-depth: 0
|
||||
submodules: true
|
||||
- uses: pnpm/action-setup@v2
|
||||
with:
|
||||
version: 7
|
||||
run_install: false
|
||||
- uses: actions/setup-node@v4.0.1
|
||||
with:
|
||||
node-version-file: '.node-version'
|
||||
cache: 'pnpm'
|
||||
- run: corepack enable
|
||||
- run: pnpm i --frozen-lockfile
|
||||
- run: pnpm --filter ${{ matrix.workspace }} run eslint
|
||||
|
||||
typecheck:
|
||||
needs: [pnpm_install]
|
||||
runs-on: ubuntu-latest
|
||||
continue-on-error: true
|
||||
strategy:
|
||||
matrix:
|
||||
workspace:
|
||||
- backend
|
||||
- misskey-js
|
||||
steps:
|
||||
- uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
fetch-depth: 0
|
||||
submodules: true
|
||||
- uses: pnpm/action-setup@v2
|
||||
with:
|
||||
version: 7
|
||||
run_install: false
|
||||
- uses: actions/setup-node@v4.0.1
|
||||
with:
|
||||
node-version-file: '.node-version'
|
||||
cache: 'pnpm'
|
||||
- run: corepack enable
|
||||
- run: pnpm i --frozen-lockfile
|
||||
- run: pnpm --filter misskey-js run build
|
||||
if: ${{ matrix.workspace == 'backend' }}
|
||||
- run: pnpm --filter ${{ matrix.workspace }} run typecheck
|
||||
name: Lint
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
backend:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: true
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 18.x
|
||||
cache: 'yarn'
|
||||
cache-dependency-path: |
|
||||
packages/backend/yarn.lock
|
||||
- run: yarn install
|
||||
- run: yarn --cwd ./packages/backend lint
|
||||
|
||||
client:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: true
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 18.x
|
||||
cache: 'yarn'
|
||||
cache-dependency-path: |
|
||||
packages/client/yarn.lock
|
||||
- run: yarn install
|
||||
- run: yarn --cwd ./packages/client lint
|
||||
|
4
.github/workflows/ok-to-test.yml
vendored
4
.github/workflows/ok-to-test.yml
vendored
@@ -17,13 +17,13 @@ jobs:
|
||||
# See app.yml for an example app manifest
|
||||
- name: Generate token
|
||||
id: generate_token
|
||||
uses: tibdex/github-app-token@v2
|
||||
uses: tibdex/github-app-token@v1
|
||||
with:
|
||||
app_id: ${{ secrets.DEPLOYBOT_APP_ID }}
|
||||
private_key: ${{ secrets.DEPLOYBOT_PRIVATE_KEY }}
|
||||
|
||||
- name: Slash Command Dispatch
|
||||
uses: peter-evans/slash-command-dispatch@v3
|
||||
uses: peter-evans/slash-command-dispatch@v1
|
||||
env:
|
||||
TOKEN: ${{ steps.generate_token.outputs.token }}
|
||||
with:
|
||||
|
11
.github/workflows/pr-preview-deploy.yml
vendored
11
.github/workflows/pr-preview-deploy.yml
vendored
@@ -1,5 +1,7 @@
|
||||
# Run secret-dependent integration tests only after /deploy approval
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened, reopened, synchronize]
|
||||
repository_dispatch:
|
||||
types: [deploy-command]
|
||||
|
||||
@@ -10,10 +12,11 @@ jobs:
|
||||
deploy-preview-environment:
|
||||
runs-on: ubuntu-latest
|
||||
if:
|
||||
github.event_name == 'repository_dispatch' &&
|
||||
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
|
||||
- uses: actions/github-script@v5
|
||||
id: check-id
|
||||
env:
|
||||
number: ${{ github.event.client_payload.pull_request.number }}
|
||||
@@ -37,7 +40,7 @@ jobs:
|
||||
|
||||
return check[0].id;
|
||||
|
||||
- uses: actions/github-script@v7
|
||||
- uses: actions/github-script@v5
|
||||
env:
|
||||
check_id: ${{ steps.check-id.outputs.result }}
|
||||
details_url: ${{ github.server_url }}/${{ github.repository }}/runs/${{ github.run_id }}
|
||||
@@ -53,7 +56,7 @@ jobs:
|
||||
|
||||
# Check out merge commit
|
||||
- name: Fork based /deploy checkout
|
||||
uses: actions/checkout@v4.1.1
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
ref: 'refs/pull/${{ github.event.client_payload.pull_request.number }}/merge'
|
||||
|
||||
@@ -72,7 +75,7 @@ jobs:
|
||||
timeout: 15m
|
||||
|
||||
# Update check run called "integration-fork"
|
||||
- uses: actions/github-script@v7
|
||||
- uses: actions/github-script@v5
|
||||
id: update-check-run
|
||||
if: ${{ always() }}
|
||||
env:
|
||||
|
33
.github/workflows/pr-preview-destroy.yml
vendored
33
.github/workflows/pr-preview-destroy.yml
vendored
@@ -10,45 +10,12 @@ jobs:
|
||||
destroy-preview-environment:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/github-script@v7
|
||||
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
|
||||
|
97
.github/workflows/report-api-diff.yml
vendored
97
.github/workflows/report-api-diff.yml
vendored
@@ -1,97 +0,0 @@
|
||||
name: Report API Diff
|
||||
|
||||
on:
|
||||
workflow_run:
|
||||
types: [completed]
|
||||
workflows:
|
||||
- Get api.json from Misskey # get-api-diff.yml
|
||||
|
||||
jobs:
|
||||
compare-diff:
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
||||
permissions:
|
||||
pull-requests: write
|
||||
|
||||
# api-artifact
|
||||
steps:
|
||||
- name: Download artifact
|
||||
uses: actions/github-script@v7
|
||||
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("api-artifact-") || artifact.name == "api-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
|
||||
- name: Load PR Number
|
||||
id: load-pr-num
|
||||
run: echo "pr-number=$(cat artifacts/pr_number)" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Output base
|
||||
run: cat ./artifacts/api-base.json
|
||||
- name: Output head
|
||||
run: cat ./artifacts/api-head.json
|
||||
- name: Arrange json files
|
||||
run: |
|
||||
jq '.' ./artifacts/api-base.json > ./api-base.json
|
||||
jq '.' ./artifacts/api-head.json > ./api-head.json
|
||||
- name: Get diff of 2 files
|
||||
run: diff -u --label=base --label=head ./api-base.json ./api-head.json | cat > api.json.diff
|
||||
- name: Get full diff
|
||||
run: diff --label=base --label=head --new-line-format='+%L' --old-line-format='-%L' --unchanged-line-format=' %L' ./api-base.json ./api-head.json | cat > api-full.json.diff
|
||||
- name: Echo full diff
|
||||
run: cat ./api-full.json.diff
|
||||
- name: Upload full diff to Artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: api-artifact
|
||||
path: |
|
||||
api-full.json.diff
|
||||
api-base.json
|
||||
api-head.json
|
||||
- id: out-diff
|
||||
name: Build diff Comment
|
||||
run: |
|
||||
cat <<- EOF > ./output.md
|
||||
このPRによるapi.jsonの差分
|
||||
<details>
|
||||
<summary>差分はこちら</summary>
|
||||
|
||||
\`\`\`diff
|
||||
$(cat ./api.json.diff)
|
||||
\`\`\`
|
||||
</details>
|
||||
|
||||
[Get diff files from Workflow Page](https://github.com/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID})
|
||||
EOF
|
||||
- uses: thollander/actions-comment-pull-request@v2
|
||||
with:
|
||||
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@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
|
||||
message: |
|
||||
api.jsonの差分作成中にエラーが発生しました。詳細は[Workflowのログ](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})を確認してください。
|
117
.github/workflows/test-backend.yml
vendored
117
.github/workflows/test-backend.yml
vendored
@@ -1,117 +0,0 @@
|
||||
name: Test (backend)
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
paths:
|
||||
- packages/backend/**
|
||||
# for permissions
|
||||
- packages/misskey-js/**
|
||||
pull_request:
|
||||
paths:
|
||||
- packages/backend/**
|
||||
# for permissions
|
||||
- packages/misskey-js/**
|
||||
|
||||
jobs:
|
||||
unit:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [20.10.0]
|
||||
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:15
|
||||
ports:
|
||||
- 54312:5432
|
||||
env:
|
||||
POSTGRES_DB: test-misskey
|
||||
POSTGRES_HOST_AUTH_METHOD: trust
|
||||
redis:
|
||||
image: redis:7
|
||||
ports:
|
||||
- 56312:6379
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
submodules: true
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v2
|
||||
with:
|
||||
version: 8
|
||||
run_install: false
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4.0.1
|
||||
with:
|
||||
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
|
||||
- name: Copy Configure
|
||||
run: cp .github/misskey/test.yml .config
|
||||
- name: Build
|
||||
run: pnpm build
|
||||
- name: Test
|
||||
run: pnpm --filter backend test-and-coverage
|
||||
- name: Upload to Codecov
|
||||
uses: codecov/codecov-action@v3
|
||||
with:
|
||||
token: ${{ secrets.CODECOV_TOKEN }}
|
||||
files: ./packages/backend/coverage/coverage-final.json
|
||||
|
||||
e2e:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [20.10.0]
|
||||
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:15
|
||||
ports:
|
||||
- 54312:5432
|
||||
env:
|
||||
POSTGRES_DB: test-misskey
|
||||
POSTGRES_HOST_AUTH_METHOD: trust
|
||||
redis:
|
||||
image: redis:7
|
||||
ports:
|
||||
- 56312:6379
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
submodules: true
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v2
|
||||
with:
|
||||
version: 8
|
||||
run_install: false
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4.0.1
|
||||
with:
|
||||
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
|
||||
- name: Copy Configure
|
||||
run: cp .github/misskey/test.yml .config
|
||||
- name: Build
|
||||
run: pnpm build
|
||||
- name: Test
|
||||
run: pnpm --filter backend test-and-coverage:e2e
|
||||
- name: Upload to Codecov
|
||||
uses: codecov/codecov-action@v3
|
||||
with:
|
||||
token: ${{ secrets.CODECOV_TOKEN }}
|
||||
files: ./packages/backend/coverage/coverage-final.json
|
133
.github/workflows/test-frontend.yml
vendored
133
.github/workflows/test-frontend.yml
vendored
@@ -1,133 +0,0 @@
|
||||
name: Test (frontend)
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
paths:
|
||||
- packages/frontend/**
|
||||
# for permissions
|
||||
- packages/misskey-js/**
|
||||
# for e2e
|
||||
- packages/backend/**
|
||||
|
||||
pull_request:
|
||||
paths:
|
||||
- packages/frontend/**
|
||||
# for permissions
|
||||
- packages/misskey-js/**
|
||||
# for e2e
|
||||
- packages/backend/**
|
||||
|
||||
jobs:
|
||||
vitest:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [20.10.0]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
submodules: true
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v2
|
||||
with:
|
||||
version: 8
|
||||
run_install: false
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4.0.1
|
||||
with:
|
||||
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
|
||||
- name: Copy Configure
|
||||
run: cp .github/misskey/test.yml .config
|
||||
- name: Build
|
||||
run: pnpm build
|
||||
- name: Test
|
||||
run: pnpm --filter frontend test-and-coverage
|
||||
- name: Upload Coverage
|
||||
uses: codecov/codecov-action@v3
|
||||
with:
|
||||
token: ${{ secrets.CODECOV_TOKEN }}
|
||||
files: ./packages/frontend/coverage/coverage-final.json
|
||||
|
||||
e2e:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
node-version: [20.10.0]
|
||||
browser: [chrome]
|
||||
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:15
|
||||
ports:
|
||||
- 54312:5432
|
||||
env:
|
||||
POSTGRES_DB: test-misskey
|
||||
POSTGRES_HOST_AUTH_METHOD: trust
|
||||
redis:
|
||||
image: redis:7
|
||||
ports:
|
||||
- 56312:6379
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
submodules: true
|
||||
# https://github.com/cypress-io/cypress-docker-images/issues/150
|
||||
#- name: Install mplayer for FireFox
|
||||
# run: sudo apt install mplayer -y
|
||||
# if: ${{ matrix.browser == 'firefox' }}
|
||||
#- uses: browser-actions/setup-firefox@latest
|
||||
# if: ${{ matrix.browser == 'firefox' }}
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v2
|
||||
with:
|
||||
version: 7
|
||||
run_install: false
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4.0.1
|
||||
with:
|
||||
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
|
||||
- name: Build
|
||||
run: pnpm build
|
||||
# https://github.com/cypress-io/cypress/issues/4351#issuecomment-559489091
|
||||
- name: ALSA Env
|
||||
run: echo -e 'pcm.!default {\n type hw\n card 0\n}\n\nctl.!default {\n type hw\n card 0\n}' > ~/.asoundrc
|
||||
# XXX: This tries reinstalling Cypress if the binary is not cached
|
||||
# Remove this when the cache issue is fixed
|
||||
- name: Cypress install
|
||||
run: pnpm exec cypress install
|
||||
- name: Cypress run
|
||||
uses: cypress-io/github-action@v6
|
||||
with:
|
||||
install: false
|
||||
start: pnpm start:test
|
||||
wait-on: 'http://localhost:61812'
|
||||
headed: true
|
||||
browser: ${{ matrix.browser }}
|
||||
- uses: actions/upload-artifact@v4
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ matrix.browser }}-cypress-screenshots
|
||||
path: cypress/screenshots
|
||||
- uses: actions/upload-artifact@v4
|
||||
if: always()
|
||||
with:
|
||||
name: ${{ matrix.browser }}-cypress-videos
|
||||
path: cypress/videos
|
56
.github/workflows/test-misskey-js.yml
vendored
56
.github/workflows/test-misskey-js.yml
vendored
@@ -1,56 +0,0 @@
|
||||
# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
|
||||
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
|
||||
|
||||
name: Test (misskey.js)
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ develop ]
|
||||
paths:
|
||||
- packages/misskey-js/**
|
||||
pull_request:
|
||||
branches: [ develop ]
|
||||
paths:
|
||||
- packages/misskey-js/**
|
||||
|
||||
jobs:
|
||||
test:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [20.10.0]
|
||||
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4.1.1
|
||||
|
||||
- run: corepack enable
|
||||
|
||||
- name: Setup Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4.0.1
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: 'pnpm'
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm i --frozen-lockfile
|
||||
|
||||
- name: Check pnpm-lock.yaml
|
||||
run: git diff --exit-code pnpm-lock.yaml
|
||||
|
||||
- name: Build
|
||||
run: pnpm --filter misskey-js build
|
||||
|
||||
- name: Test
|
||||
run: pnpm --filter misskey-js test
|
||||
env:
|
||||
CI: true
|
||||
|
||||
- name: Upload Coverage
|
||||
uses: codecov/codecov-action@v3
|
||||
with:
|
||||
token: ${{ secrets.CODECOV_TOKEN }}
|
||||
files: ./packages/misskey-js/coverage/coverage-final.json
|
42
.github/workflows/test-production.yml
vendored
42
.github/workflows/test-production.yml
vendored
@@ -1,42 +0,0 @@
|
||||
name: Test (production install and build)
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
pull_request:
|
||||
|
||||
env:
|
||||
NODE_ENV: production
|
||||
|
||||
jobs:
|
||||
production:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [20.10.0]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
submodules: true
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v2
|
||||
with:
|
||||
version: 8
|
||||
run_install: false
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4.0.1
|
||||
with:
|
||||
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
|
||||
- name: Copy Configure
|
||||
run: cp .github/misskey/test.yml .config/default.yml
|
||||
- name: Build
|
||||
run: pnpm build
|
122
.github/workflows/test.yml
vendored
Normal file
122
.github/workflows/test.yml
vendored
Normal file
@@ -0,0 +1,122 @@
|
||||
name: Test
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
mocha:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [18.x]
|
||||
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:13
|
||||
ports:
|
||||
- 54312:5432
|
||||
env:
|
||||
POSTGRES_DB: test-misskey
|
||||
POSTGRES_HOST_AUTH_METHOD: trust
|
||||
redis:
|
||||
image: redis:6
|
||||
ports:
|
||||
- 56312:6379
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: true
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: 'yarn'
|
||||
cache-dependency-path: |
|
||||
packages/backend/yarn.lock
|
||||
packages/client/yarn.lock
|
||||
- name: Install dependencies
|
||||
run: yarn install
|
||||
- name: Check yarn.lock
|
||||
run: git diff --exit-code yarn.lock
|
||||
- name: Copy Configure
|
||||
run: cp .github/misskey/test.yml .config
|
||||
- name: Build
|
||||
run: yarn build
|
||||
- name: Test
|
||||
run: yarn mocha
|
||||
|
||||
e2e:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
node-version: [18.x]
|
||||
browser: [chrome]
|
||||
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:13
|
||||
ports:
|
||||
- 54312:5432
|
||||
env:
|
||||
POSTGRES_DB: test-misskey
|
||||
POSTGRES_HOST_AUTH_METHOD: trust
|
||||
redis:
|
||||
image: redis:6
|
||||
ports:
|
||||
- 56312:6379
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: true
|
||||
# https://github.com/cypress-io/cypress-docker-images/issues/150
|
||||
#- name: Install mplayer for FireFox
|
||||
# run: sudo apt install mplayer -y
|
||||
# if: ${{ matrix.browser == 'firefox' }}
|
||||
#- uses: browser-actions/setup-firefox@latest
|
||||
# if: ${{ matrix.browser == 'firefox' }}
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: 'yarn'
|
||||
cache-dependency-path: |
|
||||
packages/backend/yarn.lock
|
||||
packages/client/yarn.lock
|
||||
- name: Install dependencies
|
||||
run: yarn install
|
||||
- name: Check yarn.lock
|
||||
run: git diff --exit-code yarn.lock
|
||||
- name: Copy Configure
|
||||
run: cp .github/misskey/test.yml .config
|
||||
- name: Build
|
||||
run: yarn build
|
||||
# https://github.com/cypress-io/cypress/issues/4351#issuecomment-559489091
|
||||
- name: ALSA Env
|
||||
run: echo -e 'pcm.!default {\n type hw\n card 0\n}\n\nctl.!default {\n type hw\n card 0\n}' > ~/.asoundrc
|
||||
- name: Cypress run
|
||||
uses: cypress-io/github-action@v4
|
||||
with:
|
||||
install: false
|
||||
start: npm run start:test
|
||||
wait-on: 'http://localhost:61812'
|
||||
headless: false
|
||||
browser: ${{ matrix.browser }}
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ matrix.browser }}-cypress-screenshots
|
||||
path: cypress/screenshots
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: always()
|
||||
with:
|
||||
name: ${{ matrix.browser }}-cypress-videos
|
||||
path: cypress/videos
|
47
.github/workflows/validate-api-json.yml
vendored
47
.github/workflows/validate-api-json.yml
vendored
@@ -1,47 +0,0 @@
|
||||
name: Test (backend)
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
paths:
|
||||
- packages/backend/**
|
||||
pull_request:
|
||||
paths:
|
||||
- packages/backend/**
|
||||
|
||||
jobs:
|
||||
validate-api-json:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [20.10.0]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
submodules: true
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v2
|
||||
with:
|
||||
version: 8
|
||||
run_install: false
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4.0.1
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: 'pnpm'
|
||||
- name: Install swagger-cli
|
||||
run: npm i -g swagger-cli
|
||||
- run: corepack enable
|
||||
- run: pnpm i --frozen-lockfile
|
||||
- name: Check pnpm-lock.yaml
|
||||
run: git diff --exit-code pnpm-lock.yaml
|
||||
- name: Copy Configure
|
||||
run: cp .config/example.yml .config/default.yml
|
||||
- name: Build and generate
|
||||
run: pnpm build && pnpm --filter backend generate-api-json
|
||||
- name: Validation
|
||||
run: swagger-cli validate ./packages/backend/built/api.json
|
25
.gitignore
vendored
25
.gitignore
vendored
@@ -9,20 +9,6 @@
|
||||
node_modules
|
||||
report.*.json
|
||||
|
||||
# Yarn
|
||||
.yarn/*
|
||||
!.yarn/patches
|
||||
!.yarn/plugins
|
||||
!.yarn/releases
|
||||
!.yarn/sdks
|
||||
!.yarn/versions
|
||||
packages/frontend/.yarn/cache
|
||||
packages/backend/.yarn/cache
|
||||
packages/sw/.yarn/cache
|
||||
|
||||
# pnpm
|
||||
.pnpm-store
|
||||
|
||||
# Cypress
|
||||
cypress/screenshots
|
||||
cypress/videos
|
||||
@@ -33,19 +19,15 @@ coverage
|
||||
# config
|
||||
/.config/*
|
||||
!/.config/example.yml
|
||||
!/.config/docker_example.yml
|
||||
!/.config/docker_example.env
|
||||
docker-compose.yml
|
||||
!/.devcontainer/docker-compose.yml
|
||||
|
||||
# misskey
|
||||
/build
|
||||
built
|
||||
built-test
|
||||
/data
|
||||
/.cache-loader
|
||||
/db
|
||||
/meili_data
|
||||
/elasticsearch
|
||||
npm-debug.log
|
||||
*.pem
|
||||
run.bat
|
||||
@@ -56,8 +38,6 @@ api-docs.json
|
||||
.DS_Store
|
||||
/files
|
||||
ormconfig.json
|
||||
temp
|
||||
/packages/frontend/src/**/*.stories.ts
|
||||
|
||||
# blender backups
|
||||
*.blend1
|
||||
@@ -65,6 +45,3 @@ temp
|
||||
*.blend3
|
||||
*.blend4
|
||||
*.blend5
|
||||
|
||||
# VSCode addon
|
||||
.favorites.json
|
||||
|
3
.gitmodules
vendored
3
.gitmodules
vendored
@@ -1,6 +1,3 @@
|
||||
[submodule "misskey-assets"]
|
||||
path = misskey-assets
|
||||
url = https://github.com/misskey-dev/assets.git
|
||||
[submodule "fluent-emojis"]
|
||||
path = fluent-emojis
|
||||
url = https://github.com/misskey-dev/emojis.git
|
||||
|
@@ -1 +1 @@
|
||||
20.10.0
|
||||
v16.15.0
|
||||
|
6
.vscode/extensions.json
vendored
6
.vscode/extensions.json
vendored
@@ -1,11 +1,9 @@
|
||||
{
|
||||
"recommendations": [
|
||||
"editorconfig.editorconfig",
|
||||
"eg2.vscode-npm-script",
|
||||
"dbaeumer.vscode-eslint",
|
||||
"Vue.volar",
|
||||
"Vue.vscode-typescript-vue-plugin",
|
||||
"Orta.vscode-jest",
|
||||
"dbaeumer.vscode-eslint",
|
||||
"mrmlnc.vscode-json5"
|
||||
"Vue.vscode-typescript-vue-plugin"
|
||||
]
|
||||
}
|
||||
|
15
.vscode/settings.json
vendored
15
.vscode/settings.json
vendored
@@ -1,15 +0,0 @@
|
||||
{
|
||||
"search.exclude": {
|
||||
"**/node_modules": true
|
||||
},
|
||||
"typescript.tsdk": "node_modules/typescript/lib",
|
||||
"files.associations": {
|
||||
"*.test.ts": "typescript"
|
||||
},
|
||||
"jest.jestCommandLine": "pnpm run jest",
|
||||
"jest.autoRun": "off",
|
||||
"editor.codeActionsOnSave": {
|
||||
"source.fixAll": "explicit"
|
||||
},
|
||||
"editor.formatOnSave": false
|
||||
}
|
1471
CHANGELOG.md
1471
CHANGELOG.md
File diff suppressed because it is too large
Load Diff
@@ -2,131 +2,45 @@
|
||||
|
||||
## Our Pledge
|
||||
|
||||
We as members, contributors, and leaders pledge to make participation in our
|
||||
community a harassment-free experience for everyone, regardless of age, body
|
||||
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||
identity and expression, level of experience, education, socio-economic status,
|
||||
nationality, personal appearance, race, caste, color, religion, or sexual
|
||||
identity and orientation.
|
||||
|
||||
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||
diverse, inclusive, and healthy community.
|
||||
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to a positive environment for our
|
||||
community include:
|
||||
Examples of behavior that contributes to creating a positive environment include:
|
||||
|
||||
* Demonstrating empathy and kindness toward other people
|
||||
* Being respectful of differing opinions, viewpoints, and experiences
|
||||
* Giving and gracefully accepting constructive feedback
|
||||
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||
and learning from the experience
|
||||
* Focusing on what is best not just for us as individuals, but for the overall
|
||||
community
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
|
||||
Examples of unacceptable behavior include:
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
* The use of sexualized language or imagery, and sexual attention or advances of
|
||||
any kind
|
||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
* The use of sexualized language or imagery and unwelcome sexual attention or advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or email address,
|
||||
without their explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
* Publishing others' private information, such as a physical or electronic address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a professional setting
|
||||
|
||||
## Enforcement Responsibilities
|
||||
## Our Responsibilities
|
||||
|
||||
Community leaders are responsible for clarifying and enforcing our standards of
|
||||
acceptable behavior and will take appropriate and fair corrective action in
|
||||
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||
or harmful.
|
||||
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
|
||||
|
||||
Community leaders have the right and responsibility to remove, edit, or reject
|
||||
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||
decisions when appropriate.
|
||||
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies within all community spaces, and also applies when
|
||||
an individual is officially representing the community in public spaces.
|
||||
Examples of representing our community include using an official e-mail address,
|
||||
posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event.
|
||||
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported to the community leaders responsible for enforcement at
|
||||
<syuilotan@yahoo.co.jp>.
|
||||
All complaints will be reviewed and investigated promptly and fairly.
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at syuilotan@yahoo.co.jp. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
|
||||
|
||||
All community leaders are obligated to respect the privacy and security of the
|
||||
reporter of any incident.
|
||||
|
||||
## Enforcement Guidelines
|
||||
|
||||
Community leaders will follow these Community Impact Guidelines in determining
|
||||
the consequences for any action they deem in violation of this Code of Conduct:
|
||||
|
||||
### 1. Correction
|
||||
|
||||
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||
unprofessional or unwelcome in the community.
|
||||
|
||||
**Consequence**: A private, written warning from community leaders, providing
|
||||
clarity around the nature of the violation and an explanation of why the
|
||||
behavior was inappropriate. A public apology may be requested.
|
||||
|
||||
### 2. Warning
|
||||
|
||||
**Community Impact**: A violation through a single incident or series of
|
||||
actions.
|
||||
|
||||
**Consequence**: A warning with consequences for continued behavior. No
|
||||
interaction with the people involved, including unsolicited interaction with
|
||||
those enforcing the Code of Conduct, for a specified period of time. This
|
||||
includes avoiding interactions in community spaces as well as external channels
|
||||
like social media. Violating these terms may lead to a temporary or permanent
|
||||
ban.
|
||||
|
||||
### 3. Temporary Ban
|
||||
|
||||
**Community Impact**: A serious violation of community standards, including
|
||||
sustained inappropriate behavior.
|
||||
|
||||
**Consequence**: A temporary ban from any sort of interaction or public
|
||||
communication with the community for a specified period of time. No public or
|
||||
private interaction with the people involved, including unsolicited interaction
|
||||
with those enforcing the Code of Conduct, is allowed during this period.
|
||||
Violating these terms may lead to a permanent ban.
|
||||
|
||||
### 4. Permanent Ban
|
||||
|
||||
**Community Impact**: Demonstrating a pattern of violation of community
|
||||
standards, including sustained inappropriate behavior, harassment of an
|
||||
individual, or aggression toward or disparagement of classes of individuals.
|
||||
|
||||
**Consequence**: A permanent ban from any sort of public interaction within the
|
||||
community.
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||
version 2.1, available at
|
||||
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
|
||||
|
||||
Community Impact Guidelines were inspired by
|
||||
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
|
||||
|
||||
For answers to common questions about this code of conduct, see the FAQ at
|
||||
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
|
||||
[https://www.contributor-covenant.org/translations][translations].
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
|
||||
[Mozilla CoC]: https://github.com/mozilla/diversity
|
||||
[FAQ]: https://www.contributor-covenant.org/faq
|
||||
[translations]: https://www.contributor-covenant.org/translations
|
||||
[homepage]: http://contributor-covenant.org
|
||||
[version]: http://contributor-covenant.org/version/1/4/
|
||||
|
203
CONTRIBUTING.md
203
CONTRIBUTING.md
@@ -15,7 +15,7 @@ Before creating an issue, please check the following:
|
||||
- To avoid duplication, please search for similar issues before creating a new issue.
|
||||
- Do not use Issues to ask questions or troubleshooting.
|
||||
- Issues should only be used to feature requests, suggestions, and bug tracking.
|
||||
- Please ask questions or troubleshooting in [GitHub Discussions](https://github.com/misskey-dev/misskey/discussions) or [Discord](https://discord.gg/Wp8gVStHW3).
|
||||
- Please ask questions or troubleshooting in the [Misskey Forum](https://forum.misskey.io/) or [Discord](https://discord.gg/Wp8gVStHW3).
|
||||
|
||||
> **Warning**
|
||||
> Do not close issues that are about to be resolved. It should remain open until a commit that actually resolves it is merged.
|
||||
@@ -44,7 +44,7 @@ Thank you for your PR! Before creating a PR, please check the following:
|
||||
- Check if there are any documents that need to be created or updated due to this change.
|
||||
- If you have added a feature or fixed a bug, please add a test case if possible.
|
||||
- Please make sure that tests and Lint are passed in advance.
|
||||
- You can run it with `pnpm test` and `pnpm lint`. [See more info](#testing)
|
||||
- You can run it with `npm run test` and `npm run lint`. [See more info](#testing)
|
||||
- If this PR includes UI changes, please attach a screenshot in the text.
|
||||
|
||||
Thanks for your cooperation 🤗
|
||||
@@ -83,18 +83,11 @@ An actual domain will be assigned so you can test the federation.
|
||||
- The title must be in the format `Release: x.y.z`.
|
||||
- `x.y.z` is the new version you are trying to release.
|
||||
3. Deploy and perform a simple QA check. Also verify that the tests passed.
|
||||
4. Merge it. (Do not squash commit)
|
||||
4. Merge it.
|
||||
5. Create a [release of GitHub](https://github.com/misskey-dev/misskey/releases)
|
||||
- The target branch must be `master`
|
||||
- The tag name must be the version
|
||||
|
||||
> **Note**
|
||||
> Why this instruction is necessary:
|
||||
> - To perform final QA checks
|
||||
> - To distribute responsibility
|
||||
> - To check direct commits to develop
|
||||
> - To celebrate the release together 🎉
|
||||
|
||||
## Localization (l10n)
|
||||
Misskey uses [Crowdin](https://crowdin.com/project/misskey) for localization management.
|
||||
You can improve our translations with your Crowdin account.
|
||||
@@ -106,74 +99,37 @@ If your language is not listed in Crowdin, please open an issue.
|
||||

|
||||
|
||||
## Development
|
||||
During development, it is useful to use the
|
||||
|
||||
```
|
||||
pnpm dev
|
||||
```
|
||||
|
||||
command.
|
||||
|
||||
- Server-side source files and automatically builds them if they are modified. Automatically start the server process(es).
|
||||
- Vite HMR (just the `vite` command) is available. The behavior may be different from production.
|
||||
- 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.
|
||||
|
||||
### Dev Container
|
||||
Instead of running `pnpm` locally, you can use Dev Container to set up your development environment.
|
||||
To use Dev Container, open the project directory on VSCode with Dev Containers installed.
|
||||
**Note:** If you are using Windows, please clone the repository with WSL. Using Git for Windows will result in broken files due to the difference in how newlines are handled.
|
||||
|
||||
It will run the following command automatically inside the container.
|
||||
``` bash
|
||||
git submodule update --init
|
||||
pnpm install --frozen-lockfile
|
||||
cp .devcontainer/devcontainer.yml .config/default.yml
|
||||
pnpm build
|
||||
pnpm migrate
|
||||
```
|
||||
|
||||
After finishing the migration, run the `pnpm dev` command to start the development server.
|
||||
|
||||
``` bash
|
||||
pnpm dev
|
||||
```
|
||||
During development, it is useful to use the `npm run dev` command.
|
||||
This command monitors the server-side and client-side source files and automatically builds them if they are modified.
|
||||
In addition, it will also automatically start the Misskey server process.
|
||||
|
||||
## Testing
|
||||
- Test codes are located in [`/packages/backend/test`](/packages/backend/test).
|
||||
- Test codes are located in [`/test`](/test).
|
||||
|
||||
### Run test
|
||||
Create a config file.
|
||||
```
|
||||
cp .github/misskey/test.yml .config/
|
||||
cp test/test.yml .config/
|
||||
```
|
||||
Prepare DB/Redis for testing.
|
||||
```
|
||||
docker compose -f packages/backend/test/docker-compose.yml up
|
||||
docker-compose -f test/docker-compose.yml up
|
||||
```
|
||||
Alternatively, prepare an empty (data can be erased) DB and edit `.config/test.yml`.
|
||||
Alternatively, prepare an empty (data can be erased) DB and edit `.config/test.yml`.
|
||||
|
||||
Run all test.
|
||||
```
|
||||
pnpm test
|
||||
npm run test
|
||||
```
|
||||
|
||||
#### Run specify test
|
||||
```
|
||||
pnpm jest -- foo.ts
|
||||
npx cross-env TS_NODE_FILES=true TS_NODE_TRANSPILE_ONLY=true TS_NODE_PROJECT="./test/tsconfig.json" npx mocha test/foo.ts --require ts-node/register
|
||||
```
|
||||
|
||||
### e2e tests
|
||||
TODO
|
||||
|
||||
## Environment Variable
|
||||
|
||||
- `MISSKEY_CONFIG_YML`: Specify the file path of config.yml instead of default.yml (e.g. `2nd.yml`).
|
||||
- `MISSKEY_WEBFINGER_USE_HTTP`: If it's set true, WebFinger requests will be http instead of https, useful for testing federation between servers in localhost. NEVER USE IN PRODUCTION.
|
||||
|
||||
## Continuous integration
|
||||
Misskey uses GitHub Actions for executing automated tests.
|
||||
Configuration files are located in [`/.github/workflows`](/.github/workflows).
|
||||
@@ -212,108 +168,10 @@ niraxは、Misskeyで使用しているオリジナルのフロントエンド
|
||||
vue-routerとの最大の違いは、niraxは複数のルーターが存在することを許可している点です。
|
||||
これにより、アプリ内ウィンドウでブラウザとは個別にルーティングすることなどが可能になります。
|
||||
|
||||
## Storybook
|
||||
|
||||
Misskey uses [Storybook](https://storybook.js.org/) for UI development.
|
||||
|
||||
### Setup & Run
|
||||
|
||||
#### Setup
|
||||
|
||||
```bash
|
||||
pnpm --filter misskey-js build
|
||||
```
|
||||
|
||||
#### Run
|
||||
|
||||
```bash
|
||||
pnpm --filter frontend storybook-dev
|
||||
```
|
||||
|
||||
### Usage
|
||||
|
||||
When you create a new component (in this example, `MyComponent.vue`), the story file (`MyComponent.stories.ts`) will be automatically generated by the `.storybook/generate.js` script.
|
||||
You can override the default story by creating a impl story file (`MyComponent.stories.impl.ts`).
|
||||
|
||||
```ts
|
||||
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
||||
import { StoryObj } from '@storybook/vue3';
|
||||
import MyComponent from './MyComponent.vue';
|
||||
export const Default = {
|
||||
render(args) {
|
||||
return {
|
||||
components: {
|
||||
MyComponent,
|
||||
},
|
||||
setup() {
|
||||
return {
|
||||
args,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
props() {
|
||||
return {
|
||||
...this.args,
|
||||
};
|
||||
},
|
||||
},
|
||||
template: '<MyComponent v-bind="props" />',
|
||||
};
|
||||
},
|
||||
args: {
|
||||
foo: 'bar',
|
||||
},
|
||||
parameters: {
|
||||
layout: 'centered',
|
||||
},
|
||||
} satisfies StoryObj<typeof MkAvatar>;
|
||||
```
|
||||
|
||||
If you want to opt-out from the automatic generation, create a `MyComponent.stories.impl.ts` file and add the following line to the file.
|
||||
|
||||
```ts
|
||||
import MyComponent from './MyComponent.vue';
|
||||
void MyComponent;
|
||||
```
|
||||
|
||||
You can override the component meta by creating a meta story file (`MyComponent.stories.meta.ts`).
|
||||
|
||||
```ts
|
||||
export const argTypes = {
|
||||
scale: {
|
||||
control: {
|
||||
type: 'range',
|
||||
min: 1,
|
||||
max: 4,
|
||||
},
|
||||
};
|
||||
```
|
||||
|
||||
Also, you can use msw to mock API requests in the storybook. Creating a `MyComponent.stories.msw.ts` file to define the mock handlers.
|
||||
|
||||
```ts
|
||||
import { rest } from 'msw';
|
||||
export const handlers = [
|
||||
rest.post('/api/notes/timeline', (req, res, ctx) => {
|
||||
return res(
|
||||
ctx.json([]),
|
||||
);
|
||||
}),
|
||||
];
|
||||
```
|
||||
|
||||
Don't forget to re-run the `.storybook/generate.js` script after adding, editing, or removing the above files.
|
||||
|
||||
## Notes
|
||||
### How to resolve conflictions occurred at yarn.lock?
|
||||
|
||||
### Misskeyのドメイン固有の概念は`Mi`をprefixする
|
||||
例えばGoogleが自社サービスをMap、Earth、DriveではなくGoogle Map、Google Earth、Google Driveのように命名するのと同じ
|
||||
コード上でMisskeyのドメイン固有の概念には`Mi`をprefixすることで、他のドメインの同様の概念と区別できるほか、名前の衝突を防ぐ。
|
||||
ただし、文脈上Misskeyのものを指すことが明らかであり、名前の衝突の恐れがない場合は、一時的なローカル変数に限って`Mi`を省略してもよい。
|
||||
|
||||
### How to resolve conflictions occurred at pnpm-lock.yaml?
|
||||
|
||||
Just execute `pnpm` to fix it.
|
||||
Just execute `yarn` to fix it.
|
||||
|
||||
### INSERTするときにはsaveではなくinsertを使用する
|
||||
#6441
|
||||
@@ -392,41 +250,19 @@ SQLでは配列のインデックスは**1始まり**。
|
||||
### null IN
|
||||
nullが含まれる可能性のあるカラムにINするときは、そのままだとおかしくなるのでORなどでnullのハンドリングをしよう。
|
||||
|
||||
### enumの削除は気をつける
|
||||
enumの列挙の内容の削除は、その値をもつレコードを全て削除しないといけない
|
||||
|
||||
削除が重たかったり不可能だったりする場合は、削除しないでおく
|
||||
### `undefined`にご用心
|
||||
MongoDBの時とは違い、findOneでレコードを取得する時に対象レコードが存在しない場合 **`undefined`** が返ってくるので注意。
|
||||
MongoDBは`null`で返してきてたので、その感覚で`if (x === null)`とか書くとバグる。代わりに`if (x == null)`と書いてください
|
||||
|
||||
### Migration作成方法
|
||||
packages/backendで:
|
||||
```sh
|
||||
pnpm dlx typeorm migration:generate -d ormconfig.js -o <migration name>
|
||||
npx 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について、片方を必須としつつ両方の指定もありうる場合:
|
||||
|
||||
```
|
||||
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を使う場合はこの限りではない(リアクティブ化はマニュアルなため)。
|
||||
|
||||
@@ -440,6 +276,3 @@ marginはそのコンポーネントを使う側が設定する
|
||||
## その他
|
||||
### HTMLのクラス名で follow という単語は使わない
|
||||
広告ブロッカーで誤ってブロックされる
|
||||
|
||||
### indexというファイル名を使うな
|
||||
ESMではディレクトリインポートは廃止されているのと、ディレクトリインポートせずともファイル名が index だと何故か一部のライブラリ?でディレクトリインポートだと見做されてエラーになる
|
||||
|
2
COPYING
2
COPYING
@@ -1,5 +1,5 @@
|
||||
Unless otherwise stated this repository is
|
||||
Copyright © 2014-2024 syuilo and contributors
|
||||
Copyright © 2014-2022 syuilo and contributers
|
||||
|
||||
And is distributed under The GNU Affero General Public License Version 3, you should have received a copy of the license file as LICENSE.
|
||||
|
||||
|
100
Dockerfile
100
Dockerfile
@@ -1,92 +1,32 @@
|
||||
# syntax = docker/dockerfile:1.4
|
||||
|
||||
ARG NODE_VERSION=20.10.0-bullseye
|
||||
|
||||
# build assets & compile TypeScript
|
||||
|
||||
FROM --platform=$BUILDPLATFORM node:${NODE_VERSION} AS native-builder
|
||||
|
||||
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
||||
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
||||
rm -f /etc/apt/apt.conf.d/docker-clean \
|
||||
; echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache \
|
||||
&& 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 ["packages/backend/package.json", "./packages/backend/"]
|
||||
COPY --link ["packages/frontend/package.json", "./packages/frontend/"]
|
||||
COPY --link ["packages/sw/package.json", "./packages/sw/"]
|
||||
COPY --link ["packages/misskey-js/package.json", "./packages/misskey-js/"]
|
||||
|
||||
RUN --mount=type=cache,target=/root/.local/share/pnpm/store,sharing=locked \
|
||||
pnpm i --frozen-lockfile --aggregate-output
|
||||
|
||||
COPY --link . ./
|
||||
FROM node:16.15.1-bullseye AS builder
|
||||
|
||||
ARG NODE_ENV=production
|
||||
|
||||
WORKDIR /misskey
|
||||
|
||||
COPY . ./
|
||||
|
||||
RUN apt-get update
|
||||
RUN apt-get install -y build-essential
|
||||
RUN git submodule update --init
|
||||
RUN pnpm build
|
||||
RUN rm -rf .git/
|
||||
RUN yarn install
|
||||
RUN yarn build
|
||||
RUN rm -rf .git
|
||||
|
||||
# build native dependencies for target platform
|
||||
|
||||
FROM --platform=$TARGETPLATFORM node:${NODE_VERSION} AS target-builder
|
||||
|
||||
RUN apt-get update \
|
||||
&& apt-get install -yqq --no-install-recommends \
|
||||
build-essential
|
||||
|
||||
RUN corepack enable
|
||||
FROM node:16.15.1-bullseye-slim AS runner
|
||||
|
||||
WORKDIR /misskey
|
||||
|
||||
COPY --link ["pnpm-lock.yaml", "pnpm-workspace.yaml", "package.json", "./"]
|
||||
COPY --link ["scripts", "./scripts"]
|
||||
COPY --link ["packages/backend/package.json", "./packages/backend/"]
|
||||
COPY --link ["packages/misskey-js/package.json", "./packages/misskey-js/"]
|
||||
RUN apt-get update
|
||||
RUN apt-get install -y ffmpeg tini
|
||||
|
||||
RUN --mount=type=cache,target=/root/.local/share/pnpm/store,sharing=locked \
|
||||
pnpm i --frozen-lockfile --aggregate-output
|
||||
COPY --from=builder /misskey/node_modules ./node_modules
|
||||
COPY --from=builder /misskey/built ./built
|
||||
COPY --from=builder /misskey/packages/backend/node_modules ./packages/backend/node_modules
|
||||
COPY --from=builder /misskey/packages/backend/built ./packages/backend/built
|
||||
COPY --from=builder /misskey/packages/client/node_modules ./packages/client/node_modules
|
||||
COPY . ./
|
||||
|
||||
FROM --platform=$TARGETPLATFORM node:${NODE_VERSION}-slim AS runner
|
||||
|
||||
ARG UID="991"
|
||||
ARG GID="991"
|
||||
|
||||
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 {} \; \
|
||||
&& find / -type d -path /sys -prune -o -type d -path /proc -prune -o -type f -perm /g+s -ignore_readdir_race -exec chmod g-s {} \; \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists
|
||||
|
||||
USER misskey
|
||||
WORKDIR /misskey
|
||||
|
||||
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
|
||||
COPY --chown=misskey:misskey --from=native-builder /misskey/built ./built
|
||||
COPY --chown=misskey:misskey --from=native-builder /misskey/packages/misskey-js/built ./packages/misskey-js/built
|
||||
COPY --chown=misskey:misskey --from=native-builder /misskey/packages/backend/built ./packages/backend/built
|
||||
COPY --chown=misskey:misskey --from=native-builder /misskey/fluent-emojis /misskey/fluent-emojis
|
||||
COPY --chown=misskey:misskey . ./
|
||||
|
||||
ENV LD_PRELOAD=/usr/local/lib/libjemalloc.so
|
||||
ENV NODE_ENV=production
|
||||
HEALTHCHECK --interval=5s --retries=20 CMD ["/bin/bash", "/misskey/healthcheck.sh"]
|
||||
ENTRYPOINT ["/usr/bin/tini", "--"]
|
||||
CMD ["pnpm", "run", "migrateandstart"]
|
||||
CMD ["npm", "run", "migrateandstart"]
|
||||
|
33
README.md
33
README.md
@@ -2,15 +2,15 @@
|
||||
<a href="https://misskey-hub.net">
|
||||
<img src="./assets/title_float.svg" alt="Misskey logo" style="border-radius:50%" width="400"/>
|
||||
</a>
|
||||
|
||||
|
||||
**🌎 **[Misskey](https://misskey-hub.net/)** is an open source, decentralized social media platform that's free forever! 🚀**
|
||||
|
||||
|
||||
---
|
||||
|
||||
<a href="https://misskey-hub.net/servers/">
|
||||
<a href="https://misskey-hub.net/instances.html">
|
||||
<img src="https://custom-icon-badges.herokuapp.com/badge/find_an-instance-acea31?logoColor=acea31&style=for-the-badge&logo=misskey&labelColor=363B40" alt="find an instance"/></a>
|
||||
|
||||
<a href="https://misskey-hub.net/docs/for-admin/install/guides/">
|
||||
<a href="https://misskey-hub.net/docs/install.html">
|
||||
<img src="https://custom-icon-badges.herokuapp.com/badge/create_an-instance-FBD53C?logoColor=FBD53C&style=for-the-badge&logo=server&labelColor=363B40" alt="create an instance"/></a>
|
||||
|
||||
<a href="./CONTRIBUTING.md">
|
||||
@@ -21,11 +21,9 @@
|
||||
|
||||
<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://codecov.io/gh/misskey-dev/misskey)
|
||||
|
||||
</div>
|
||||
|
||||
<div>
|
||||
@@ -51,28 +49,9 @@ With Misskey's built in drive, you get cloud storage right in your social media,
|
||||
|
||||
## Documentation
|
||||
|
||||
Misskey Documentation can be found at [Misskey Hub](https://misskey-hub.net/docs/), some of the links and graphics above also lead to specific portions of it.
|
||||
Misskey Documentation can be found at [Misskey Hub](https://misskey-hub.net/), some of the links and graphics above also lead to specific portions of it.
|
||||
|
||||
## Sponsors
|
||||
|
||||
<div align="center">
|
||||
<a class="rss3" title="RSS3" href="https://rss3.io/" target="_blank"><img src="https://rss3.mypinata.cloud/ipfs/QmUG6H3Z7D5P511shn7sB4CPmpjH5uZWu4m5mWX7U3Gqbu" alt="RSS3" height="60"></a>
|
||||
</div>
|
||||
|
||||
## Thanks
|
||||
|
||||
<a href="https://www.chromatic.com/"><img src="https://user-images.githubusercontent.com/321738/84662277-e3db4f80-af1b-11ea-88f5-91d67a5e59f6.png" height="30" alt="Chromatic" /></a>
|
||||
|
||||
Thanks to [Chromatic](https://www.chromatic.com/) for providing the visual testing platform that helps us review UI changes and catch visual regressions.
|
||||
|
||||
<a href="https://about.codecov.io/for/open-source/"><img src="https://about.codecov.io/wp-content/themes/codecov/assets/brand/sentry-cobranding/logos/codecov-by-sentry-logo.svg" height="30" alt="Codecov" /></a>
|
||||
|
||||
Thanks to [Codecov](https://about.codecov.io/for/open-source/) for providing the code coverage platform that helps us improve our test coverage.
|
||||
|
||||
<a href="https://crowdin.com/"><img src="https://user-images.githubusercontent.com/20679825/230709597-1299a011-171a-4294-a91e-355a9b37c672.svg" height="30" alt="Crowdin" /></a>
|
||||
|
||||
Thanks to [Crowdin](https://crowdin.com/) for providing the localization platform that helps us translate Misskey into many languages.
|
||||
|
||||
<a href="https://hub.docker.com/"><img src="https://user-images.githubusercontent.com/20679825/230148221-f8e73a32-a49b-47c3-9029-9a15c3824f92.png" height="30" alt="Docker" /></a>
|
||||
|
||||
Thanks to [Docker](https://hub.docker.com/) for providing the container platform that helps us run Misskey in production.
|
||||
|
16
ROADMAP.md
16
ROADMAP.md
@@ -5,25 +5,25 @@ Also, the later tasks are more indefinite and are subject to change as developme
|
||||
## (1) Improve maintainability \<current phase\>
|
||||
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)
|
||||
- Make the number of type errors zero (backend)
|
||||
- Probably need to switch some libraries to others that make it difficult to reduce type errors
|
||||
- e.g. koa to fastify https://github.com/misskey-dev/misskey/issues/7537
|
||||
- Improve CI
|
||||
- ~~Fix tests~~ → Done ✔️
|
||||
- Fix tests
|
||||
- mocha, jest, etc. do not support the combination of `TypeScript + ESM + Path alias`, and the tests currently do not work.
|
||||
- Fix random test failures - https://github.com/misskey-dev/misskey/issues/7985 and https://github.com/misskey-dev/misskey/issues/7986
|
||||
- Add more tests
|
||||
- ~~May need to implement a mechanism that allows for DI~~ → Done ✔️
|
||||
- May need to implement a mechanism that allows for DI
|
||||
- https://github.com/misskey-dev/misskey/pull/9085
|
||||
- ~~Measure coverage~~ → Done ✔️
|
||||
- Measure coverage
|
||||
- https://github.com/misskey-dev/misskey/pull/9081
|
||||
- Improve documentation
|
||||
- Refactoring
|
||||
- Extract the logic of each endpoint definition into a service and just call it
|
||||
|
||||
## (2) Improve functionality
|
||||
Once Phase 1 is complete and an environment conducive to the development of a stable system is in place, the implementation of new functions can begin gradually.
|
||||
|
||||
- Improve features for moderation
|
||||
- ~~OAuth2 support https://github.com/misskey-dev/misskey/issues/8262~~ → Done ✔️
|
||||
- OAuth2 support https://github.com/misskey-dev/misskey/issues/8262
|
||||
- GraphQL support?
|
||||
|
||||
## (3) Improve scalability
|
||||
|
@@ -1,6 +1,7 @@
|
||||
# Reporting Security Issues
|
||||
|
||||
If you discover a security issue in Misskey, please report it by **[this form](https://github.com/misskey-dev/misskey/security/advisories/new)**.
|
||||
If you discover a security issue in Misskey, please report it by sending an
|
||||
email to [syuilotan@yahoo.co.jp](mailto:syuilotan@yahoo.co.jp).
|
||||
|
||||
This will allow us to assess the risk, and make a fix available before we add a
|
||||
bug report to the GitHub repository.
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 41 KiB |
@@ -23,13 +23,13 @@
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<style>
|
||||
#g8 {
|
||||
#g8 {
|
||||
animation-name: floating;
|
||||
animation-duration: 3s;
|
||||
animation-iteration-count: infinite;
|
||||
animation-timing-function: ease-in-out;
|
||||
}
|
||||
|
||||
|
||||
@keyframes floating {
|
||||
0% { transform: translate(0, 0px); }
|
||||
50% { transform: translate(0, -5px); }
|
||||
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 6.1 KiB |
@@ -1,4 +1,3 @@
|
||||
apiVersion: v2
|
||||
name: misskey
|
||||
version: 0.0.0
|
||||
description: This chart is created for the purpose of previewing Pull Requests. Do not use this for production use.
|
||||
|
@@ -72,67 +72,25 @@ db:
|
||||
#extra:
|
||||
# ssl: true
|
||||
|
||||
dbReplications: false
|
||||
|
||||
# You can configure any number of replicas here
|
||||
#dbSlaves:
|
||||
# -
|
||||
# host:
|
||||
# port:
|
||||
# db:
|
||||
# user:
|
||||
# pass:
|
||||
# -
|
||||
# host:
|
||||
# port:
|
||||
# db:
|
||||
# user:
|
||||
# pass:
|
||||
|
||||
# ┌─────────────────────┐
|
||||
#───┘ Redis configuration └─────────────────────────────────────
|
||||
|
||||
redis:
|
||||
host: localhost
|
||||
port: 6379
|
||||
#family: 0 # 0=Both, 4=IPv4, 6=IPv6
|
||||
#pass: example-pass
|
||||
#prefix: example-prefix
|
||||
#db: 1
|
||||
|
||||
#redisForPubsub:
|
||||
# ┌─────────────────────────────┐
|
||||
#───┘ Elasticsearch configuration └─────────────────────────────
|
||||
|
||||
#elasticsearch:
|
||||
# host: localhost
|
||||
# port: 6379
|
||||
# #family: 0 # 0=Both, 4=IPv4, 6=IPv6
|
||||
# #pass: example-pass
|
||||
# #prefix: example-prefix
|
||||
# #db: 1
|
||||
|
||||
#redisForJobQueue:
|
||||
# host: localhost
|
||||
# port: 6379
|
||||
# #family: 0 # 0=Both, 4=IPv4, 6=IPv6
|
||||
# #pass: example-pass
|
||||
# #prefix: example-prefix
|
||||
# #db: 1
|
||||
|
||||
#redisForTimelines:
|
||||
# host: redis
|
||||
# port: 6379
|
||||
# #family: 0 # 0=Both, 4=IPv4, 6=IPv6
|
||||
# #pass: example-pass
|
||||
# #prefix: example-prefix
|
||||
# #db: 1
|
||||
|
||||
# ┌───────────────────────────┐
|
||||
#───┘ MeiliSearch configuration └─────────────────────────────
|
||||
|
||||
#meilisearch:
|
||||
# host: localhost
|
||||
# port: 7700
|
||||
# apiKey: ''
|
||||
# ssl: true
|
||||
# index: ''
|
||||
# port: 9200
|
||||
# ssl: false
|
||||
# user:
|
||||
# pass:
|
||||
|
||||
# ┌───────────────┐
|
||||
#───┘ ID generation └───────────────────────────────────────────
|
||||
@@ -143,7 +101,6 @@ redis:
|
||||
|
||||
# Available methods:
|
||||
# aid ... Short, Millisecond accuracy
|
||||
# aidx ... Millisecond accuracy
|
||||
# meid ... Similar to ObjectID, Millisecond accuracy
|
||||
# ulid ... Millisecond accuracy
|
||||
# objectid ... This is left for backward compatibility
|
||||
@@ -151,7 +108,7 @@ redis:
|
||||
# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE
|
||||
# ID SETTINGS AFTER THAT!
|
||||
|
||||
id: "aidx"
|
||||
id: "aid"
|
||||
# ┌─────────────────────┐
|
||||
#───┘ Other configuration └─────────────────────────────────────
|
||||
|
||||
@@ -167,7 +124,7 @@ id: "aidx"
|
||||
|
||||
# Job rate limiter
|
||||
# deliverJobPerSec: 128
|
||||
# inboxJobPerSec: 32
|
||||
# inboxJobPerSec: 16
|
||||
|
||||
# Job attempts
|
||||
# deliverJobMaxAttempts: 12
|
||||
@@ -176,6 +133,11 @@ id: "aidx"
|
||||
# IP address family used for outgoing request (ipv4, ipv6 or dual)
|
||||
#outgoingAddressFamily: ipv4
|
||||
|
||||
# Syslog option
|
||||
#syslog:
|
||||
# host: localhost
|
||||
# port: 514
|
||||
|
||||
# Proxy for HTTP/HTTPS
|
||||
#proxy: http://127.0.0.1:3128
|
||||
|
||||
@@ -192,8 +154,8 @@ id: "aidx"
|
||||
# Media Proxy
|
||||
#mediaProxy: https://example.com/proxy
|
||||
|
||||
# Sign to ActivityPub GET request (default: true)
|
||||
signToActivityPubGet: true
|
||||
# Sign to ActivityPub GET request (default: false)
|
||||
#signToActivityPubGet: true
|
||||
|
||||
#allowedPrivateNetworks: [
|
||||
# '127.0.0.1/32'
|
||||
|
@@ -3,16 +3,16 @@ kind: Deployment
|
||||
metadata:
|
||||
name: {{ include "misskey.fullname" . }}
|
||||
labels:
|
||||
{{- include "misskey.labels" . | nindent 4 }}
|
||||
{{- include "misskey.labels" . | nindent 4 }}
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
{{- include "misskey.selectorLabels" . | nindent 6 }}
|
||||
{{- include "misskey.selectorLabels" . | nindent 6 }}
|
||||
replicas: 1
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
{{- include "misskey.selectorLabels" . | nindent 8 }}
|
||||
{{- include "misskey.selectorLabels" . | nindent 8 }}
|
||||
spec:
|
||||
containers:
|
||||
- name: misskey
|
||||
@@ -27,7 +27,7 @@ spec:
|
||||
ports:
|
||||
- containerPort: 3000
|
||||
- name: postgres
|
||||
image: postgres:15-alpine
|
||||
image: postgres:14-alpine
|
||||
env:
|
||||
- name: POSTGRES_USER
|
||||
value: "example-misskey-user"
|
||||
@@ -38,7 +38,7 @@ spec:
|
||||
ports:
|
||||
- containerPort: 5432
|
||||
- name: redis
|
||||
image: redis:7-alpine
|
||||
image: redis:alpine
|
||||
ports:
|
||||
- containerPort: 6379
|
||||
volumes:
|
||||
|
@@ -11,4 +11,4 @@ spec:
|
||||
protocol: TCP
|
||||
name: http
|
||||
selector:
|
||||
{{- include "misskey.selectorLabels" . | nindent 4 }}
|
||||
{{- include "misskey.selectorLabels" . | nindent 4 }}
|
||||
|
@@ -1,4 +0,0 @@
|
||||
coverage:
|
||||
status:
|
||||
project: false
|
||||
patch: false
|
@@ -10,14 +10,14 @@ describe('Before setup instance', () => {
|
||||
});
|
||||
|
||||
it('successfully loads', () => {
|
||||
cy.visitHome();
|
||||
cy.visit('/');
|
||||
});
|
||||
|
||||
it('setup instance', () => {
|
||||
cy.visitHome();
|
||||
cy.visit('/');
|
||||
|
||||
cy.intercept('POST', '/api/admin/accounts/create').as('signup');
|
||||
|
||||
|
||||
cy.get('[data-cy-admin-username] input').type('admin');
|
||||
cy.get('[data-cy-admin-password] input').type('admin1234');
|
||||
cy.get('[data-cy-admin-ok]').click();
|
||||
@@ -43,51 +43,22 @@ describe('After setup instance', () => {
|
||||
});
|
||||
|
||||
it('successfully loads', () => {
|
||||
cy.visitHome();
|
||||
cy.visit('/');
|
||||
});
|
||||
|
||||
it('signup', () => {
|
||||
cy.visitHome();
|
||||
cy.visit('/');
|
||||
|
||||
cy.intercept('POST', '/api/signup').as('signup');
|
||||
|
||||
cy.get('[data-cy-signup]').click();
|
||||
cy.get('[data-cy-signup-rules-continue]').should('be.disabled');
|
||||
cy.get('[data-cy-signup-rules-notes-agree] [data-cy-switch-toggle]').click();
|
||||
cy.get('[data-cy-modal-dialog-ok]').click();
|
||||
cy.get('[data-cy-signup-rules-continue]').should('not.be.disabled');
|
||||
cy.get('[data-cy-signup-rules-continue]').click();
|
||||
|
||||
cy.get('[data-cy-signup-submit]').should('be.disabled');
|
||||
cy.get('[data-cy-signup-username] input').type('alice');
|
||||
cy.get('[data-cy-signup-submit]').should('be.disabled');
|
||||
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('not.be.disabled');
|
||||
cy.get('[data-cy-signup-submit]').click();
|
||||
|
||||
cy.wait('@signup');
|
||||
});
|
||||
|
||||
it('signup with duplicated username', () => {
|
||||
cy.registerUser('alice', 'alice1234');
|
||||
|
||||
cy.visitHome();
|
||||
|
||||
// ユーザー名が重複している場合の挙動確認
|
||||
cy.get('[data-cy-signup]').click();
|
||||
cy.get('[data-cy-signup-rules-continue]').should('be.disabled');
|
||||
cy.get('[data-cy-signup-rules-notes-agree] [data-cy-switch-toggle]').click();
|
||||
cy.get('[data-cy-modal-dialog-ok]').click();
|
||||
cy.get('[data-cy-signup-rules-continue]').should('not.be.disabled');
|
||||
cy.get('[data-cy-signup-rules-continue]').click();
|
||||
|
||||
cy.get('[data-cy-signup-username] input').type('alice');
|
||||
cy.get('[data-cy-signup-password] input').type('alice1234');
|
||||
cy.get('[data-cy-signup-password-retype] input').type('alice1234');
|
||||
cy.get('[data-cy-signup-submit]').should('be.disabled');
|
||||
});
|
||||
});
|
||||
|
||||
describe('After user signup', () => {
|
||||
@@ -108,11 +79,11 @@ describe('After user signup', () => {
|
||||
});
|
||||
|
||||
it('successfully loads', () => {
|
||||
cy.visitHome();
|
||||
cy.visit('/');
|
||||
});
|
||||
|
||||
it('signin', () => {
|
||||
cy.visitHome();
|
||||
cy.visit('/');
|
||||
|
||||
cy.intercept('POST', '/api/signin').as('signin');
|
||||
|
||||
@@ -130,7 +101,7 @@ describe('After user signup', () => {
|
||||
userId: this.alice.id,
|
||||
});
|
||||
|
||||
cy.visitHome();
|
||||
cy.visit('/');
|
||||
|
||||
cy.get('[data-cy-signin]').click();
|
||||
cy.get('[data-cy-signin-username] input').type('alice');
|
||||
@@ -141,7 +112,7 @@ describe('After user signup', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('After user signed in', () => {
|
||||
describe('After user singed in', () => {
|
||||
beforeEach(() => {
|
||||
cy.resetState();
|
||||
|
||||
@@ -161,77 +132,15 @@ describe('After user signed in', () => {
|
||||
});
|
||||
|
||||
it('successfully loads', () => {
|
||||
cy.get('[data-cy-user-setup-continue]').should('be.visible');
|
||||
cy.get('[data-cy-open-post-form]').should('be.visible');
|
||||
});
|
||||
|
||||
it('account setup wizard', () => {
|
||||
cy.get('[data-cy-user-setup-continue]').click();
|
||||
|
||||
cy.get('[data-cy-user-setup-user-name] input').type('ありす');
|
||||
cy.get('[data-cy-user-setup-user-description] textarea').type('ほげ');
|
||||
// TODO: アイコン設定テスト
|
||||
|
||||
cy.get('[data-cy-user-setup-continue]').click();
|
||||
|
||||
// プライバシー設定
|
||||
|
||||
cy.get('[data-cy-user-setup-continue]').click();
|
||||
|
||||
// フォローはスキップ
|
||||
|
||||
cy.get('[data-cy-user-setup-continue]').click();
|
||||
|
||||
// プッシュ通知設定はスキップ
|
||||
|
||||
cy.get('[data-cy-user-setup-continue]').click();
|
||||
|
||||
cy.get('[data-cy-user-setup-continue]').click();
|
||||
});
|
||||
});
|
||||
|
||||
describe('After user setup', () => {
|
||||
beforeEach(() => {
|
||||
cy.resetState();
|
||||
|
||||
// インスタンス初期セットアップ
|
||||
cy.registerUser('admin', 'pass', true);
|
||||
|
||||
// ユーザー作成
|
||||
cy.registerUser('alice', 'alice1234');
|
||||
|
||||
cy.login('alice', 'alice1234');
|
||||
|
||||
// アカウント初期設定ウィザード
|
||||
cy.get('[data-cy-user-setup] [data-cy-modal-window-close]').click();
|
||||
cy.get('[data-cy-modal-dialog-ok]').click();
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
// テスト終了直前にページ遷移するようなテストケース(例えばアカウント作成)だと、たぶんCypressのバグでブラウザの内容が次のテストケースに引き継がれてしまう(例えばアカウントが作成し終わった段階からテストが始まる)。
|
||||
// waitを入れることでそれを防止できる
|
||||
cy.wait(1000);
|
||||
});
|
||||
|
||||
it('note', () => {
|
||||
cy.get('[data-cy-open-post-form]').should('be.visible');
|
||||
cy.get('[data-cy-open-post-form]').click();
|
||||
cy.get('[data-cy-post-form-text]').type('Hello, Misskey!');
|
||||
cy.get('[data-cy-open-post-form-submit]').click();
|
||||
|
||||
cy.contains('Hello, Misskey!');
|
||||
});
|
||||
|
||||
it('open note form with hotkey', () => {
|
||||
// Wait until the page loads
|
||||
cy.get('[data-cy-open-post-form]').should('be.visible');
|
||||
// Use trigger() to give different `code` to test if hotkeys also work on non-QWERTY keyboards.
|
||||
cy.document().trigger("keydown", { eventConstructor: 'KeyboardEvent', key: "n", code: "KeyL" });
|
||||
// See if the form is opened
|
||||
cy.get('[data-cy-post-form-text]').should('be.visible');
|
||||
// Close it
|
||||
cy.focused().trigger("keydown", { eventConstructor: 'KeyboardEvent', key: "Escape", code: "Escape" });
|
||||
// See if the form is closed
|
||||
cy.get('[data-cy-post-form-text]').should('not.be.visible');
|
||||
});
|
||||
});
|
||||
|
||||
|
@@ -1,4 +1,3 @@
|
||||
/* flaky
|
||||
describe('After user signed in', () => {
|
||||
beforeEach(() => {
|
||||
cy.resetState();
|
||||
@@ -11,10 +10,6 @@ describe('After user signed in', () => {
|
||||
cy.registerUser('alice', 'alice1234');
|
||||
|
||||
cy.login('alice', 'alice1234');
|
||||
|
||||
// アカウント初期設定ウィザード
|
||||
cy.get('[data-cy-user-setup] [data-cy-modal-window-close]').click();
|
||||
cy.get('[data-cy-modal-dialog-ok]').click();
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
@@ -24,27 +19,27 @@ describe('After user signed in', () => {
|
||||
});
|
||||
|
||||
it('widget edit toggle is visible', () => {
|
||||
cy.get('[data-cy-widget-edit]').should('be.visible');
|
||||
cy.get('.mk-widget-edit').should('be.visible');
|
||||
});
|
||||
|
||||
it('widget select should be visible in edit mode', () => {
|
||||
cy.get('[data-cy-widget-edit]').click();
|
||||
cy.get('[data-cy-widget-select]').should('be.visible');
|
||||
cy.get('.mk-widget-edit').click();
|
||||
cy.get('.mk-widget-select').should('be.visible');
|
||||
});
|
||||
|
||||
it('first widget should be removed', () => {
|
||||
cy.get('[data-cy-widget-edit]').click();
|
||||
cy.get('[data-cy-customize-container]:first-child [data-cy-customize-container-remove]._button').click();
|
||||
cy.get('[data-cy-customize-container]').should('have.length', 2);
|
||||
cy.get('.mk-widget-edit').click();
|
||||
cy.get('.customize-container:first-child .remove._button').click();
|
||||
cy.get('.customize-container').should('have.length', 2);
|
||||
});
|
||||
|
||||
function buildWidgetTest(widgetName) {
|
||||
it(`${widgetName} widget should get added`, () => {
|
||||
cy.get('[data-cy-widget-edit]').click();
|
||||
cy.get('[data-cy-widget-select] select').select(widgetName, { force: true });
|
||||
cy.get('[data-cy-bg]._modalBg[data-cy-transparent]').click({ multiple: true, force: true });
|
||||
cy.get('[data-cy-widget-add]').click({ force: true });
|
||||
cy.get(`[data-cy-mkw-${widgetName}]`).should('exist');
|
||||
cy.get('.mk-widget-edit').click();
|
||||
cy.get('.mk-widget-select select').select(widgetName, { force: true });
|
||||
cy.get('.bg._modalBg.transparent').click({ multiple: true, force: true });
|
||||
cy.get('.mk-widget-add').click({ force: true });
|
||||
cy.get(`.mkw-${widgetName}`).should('exist');
|
||||
});
|
||||
}
|
||||
|
||||
@@ -68,4 +63,3 @@ describe('After user signed in', () => {
|
||||
buildWidgetTest('aiscript');
|
||||
buildWidgetTest('aichan');
|
||||
});
|
||||
*/
|
||||
|
@@ -24,16 +24,11 @@
|
||||
// -- This will overwrite an existing command --
|
||||
// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... })
|
||||
|
||||
Cypress.Commands.add('visitHome', () => {
|
||||
cy.visit('/');
|
||||
cy.get('button', { timeout: 30000 }).should('be.visible');
|
||||
})
|
||||
|
||||
Cypress.Commands.add('resetState', () => {
|
||||
cy.window(win => {
|
||||
win.indexedDB.deleteDatabase('keyval-store');
|
||||
});
|
||||
cy.request('POST', '/api/reset-db', {}).as('reset');
|
||||
cy.request('POST', '/api/reset-db').as('reset');
|
||||
cy.get('@reset').its('status').should('equal', 204);
|
||||
cy.reload(true);
|
||||
});
|
||||
@@ -48,7 +43,7 @@ Cypress.Commands.add('registerUser', (username, password, isAdmin = false) => {
|
||||
});
|
||||
|
||||
Cypress.Commands.add('login', (username, password) => {
|
||||
cy.visitHome();
|
||||
cy.visit('/');
|
||||
|
||||
cy.intercept('POST', '/api/signin').as('signin');
|
||||
|
||||
|
@@ -21,8 +21,6 @@ import './commands'
|
||||
|
||||
Cypress.on('uncaught:exception', (err, runnable) => {
|
||||
if ([
|
||||
'The source image cannot be decoded',
|
||||
|
||||
// Chrome
|
||||
'ResizeObserver loop limit exceeded',
|
||||
|
||||
|
@@ -1,42 +0,0 @@
|
||||
version: "3"
|
||||
|
||||
# このconfigは、 dockerでMisskey本体を起動せず、 redisとpostgresql などだけを起動します
|
||||
|
||||
services:
|
||||
redis:
|
||||
restart: always
|
||||
image: redis:7-alpine
|
||||
ports:
|
||||
- "6379:6379"
|
||||
volumes:
|
||||
- ./redis:/data
|
||||
healthcheck:
|
||||
test: "redis-cli ping"
|
||||
interval: 5s
|
||||
retries: 20
|
||||
|
||||
db:
|
||||
restart: always
|
||||
image: postgres:15-alpine
|
||||
ports:
|
||||
- "5432:5432"
|
||||
env_file:
|
||||
- .config/docker.env
|
||||
volumes:
|
||||
- ./db:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"
|
||||
interval: 5s
|
||||
retries: 20
|
||||
|
||||
# meilisearch:
|
||||
# restart: always
|
||||
# image: getmeili/meilisearch:v1.3.4
|
||||
# environment:
|
||||
# - MEILI_NO_ANALYTICS=true
|
||||
# - MEILI_ENV=production
|
||||
# env_file:
|
||||
# - .config/meilisearch.env
|
||||
# volumes:
|
||||
# - ./meili_data:/meili_data
|
||||
|
52
docker-compose.yml
Normal file
52
docker-compose.yml
Normal file
@@ -0,0 +1,52 @@
|
||||
version: "3"
|
||||
|
||||
services:
|
||||
web:
|
||||
build: .
|
||||
restart: always
|
||||
links:
|
||||
- db
|
||||
- redis
|
||||
# - es
|
||||
ports:
|
||||
- "3000:3000"
|
||||
networks:
|
||||
- internal_network
|
||||
- external_network
|
||||
volumes:
|
||||
- ./files:/misskey/files
|
||||
- ./.config:/misskey/.config:ro
|
||||
|
||||
redis:
|
||||
restart: always
|
||||
image: redis:4.0-alpine
|
||||
networks:
|
||||
- internal_network
|
||||
volumes:
|
||||
- ./redis:/data
|
||||
|
||||
db:
|
||||
restart: always
|
||||
image: postgres:12.2-alpine
|
||||
networks:
|
||||
- internal_network
|
||||
env_file:
|
||||
- .config/docker.env
|
||||
volumes:
|
||||
- ./db:/var/lib/postgresql/data
|
||||
|
||||
# es:
|
||||
# restart: always
|
||||
# image: docker.elastic.co/elasticsearch/elasticsearch-oss:6.4.2
|
||||
# environment:
|
||||
# - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
|
||||
# - "TAKE_FILE_OWNERSHIP=111"
|
||||
# networks:
|
||||
# - internal_network
|
||||
# volumes:
|
||||
# - ./elasticsearch:/usr/share/elasticsearch/data
|
||||
|
||||
networks:
|
||||
internal_network:
|
||||
internal: true
|
||||
external_network:
|
@@ -1,98 +0,0 @@
|
||||
version: "3"
|
||||
|
||||
services:
|
||||
web:
|
||||
build: .
|
||||
restart: always
|
||||
links:
|
||||
- db
|
||||
- redis
|
||||
# - mcaptcha
|
||||
# - meilisearch
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_healthy
|
||||
ports:
|
||||
- "3000:3000"
|
||||
networks:
|
||||
- internal_network
|
||||
- external_network
|
||||
volumes:
|
||||
- ./files:/misskey/files
|
||||
- ./.config:/misskey/.config:ro
|
||||
|
||||
redis:
|
||||
restart: always
|
||||
image: redis:7-alpine
|
||||
networks:
|
||||
- internal_network
|
||||
volumes:
|
||||
- ./redis:/data
|
||||
healthcheck:
|
||||
test: "redis-cli ping"
|
||||
interval: 5s
|
||||
retries: 20
|
||||
|
||||
db:
|
||||
restart: always
|
||||
image: postgres:15-alpine
|
||||
networks:
|
||||
- internal_network
|
||||
env_file:
|
||||
- .config/docker.env
|
||||
volumes:
|
||||
- ./db:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"
|
||||
interval: 5s
|
||||
retries: 20
|
||||
|
||||
# mcaptcha:
|
||||
# restart: always
|
||||
# image: mcaptcha/mcaptcha:latest
|
||||
# networks:
|
||||
# internal_network:
|
||||
# external_network:
|
||||
# aliases:
|
||||
# - localhost
|
||||
# ports:
|
||||
# - 7493:7493
|
||||
# env_file:
|
||||
# - .config/docker.env
|
||||
# environment:
|
||||
# PORT: 7493
|
||||
# MCAPTCHA_redis_URL: "redis://mcaptcha_redis/"
|
||||
# depends_on:
|
||||
# db:
|
||||
# condition: service_healthy
|
||||
# mcaptcha_redis:
|
||||
# condition: service_healthy
|
||||
#
|
||||
# mcaptcha_redis:
|
||||
# image: mcaptcha/cache:latest
|
||||
# networks:
|
||||
# - internal_network
|
||||
# healthcheck:
|
||||
# test: "redis-cli ping"
|
||||
# interval: 5s
|
||||
# retries: 20
|
||||
|
||||
# meilisearch:
|
||||
# restart: always
|
||||
# image: getmeili/meilisearch:v1.3.4
|
||||
# environment:
|
||||
# - MEILI_NO_ANALYTICS=true
|
||||
# - MEILI_ENV=production
|
||||
# env_file:
|
||||
# - .config/meilisearch.env
|
||||
# networks:
|
||||
# - internal_network
|
||||
# volumes:
|
||||
# - ./meili_data:/meili_data
|
||||
|
||||
networks:
|
||||
internal_network:
|
||||
internal: true
|
||||
external_network:
|
25
docs/DONATORS.md
Normal file
25
docs/DONATORS.md
Normal file
@@ -0,0 +1,25 @@
|
||||
DONATORS
|
||||
========
|
||||
The list of people who have sent donation for Misskey.
|
||||
|
||||
(In random order, honorific titles are omitted.)
|
||||
|
||||
* らふぁ
|
||||
* 俺様
|
||||
* なぎうり
|
||||
* スルメ https://surume.tk/
|
||||
* 藍
|
||||
* 音船 https://otofune.me/
|
||||
* aqz https://misskey.xyz/aqz
|
||||
* kotodu "虚無創作中"
|
||||
* Maya Minatsuki
|
||||
* Knzk https://knzk.me/@Knzk
|
||||
* ねじりわさび https://knzk.me/@y
|
||||
* NCLS https://knzk.me/@imncls]
|
||||
* こじま @skoji@sandbox.skoji.jp
|
||||
|
||||
:heart: Thanks for donating, guys!
|
||||
|
||||
---
|
||||
|
||||
If your name is missing, please contact us!
|
Submodule fluent-emojis deleted from cae981eb4c
65
gulpfile.js
Normal file
65
gulpfile.js
Normal file
@@ -0,0 +1,65 @@
|
||||
/**
|
||||
* Gulp tasks
|
||||
*/
|
||||
|
||||
const fs = require('fs');
|
||||
const gulp = require('gulp');
|
||||
const replace = require('gulp-replace');
|
||||
const terser = require('gulp-terser');
|
||||
const cssnano = require('gulp-cssnano');
|
||||
|
||||
const locales = require('./locales');
|
||||
const meta = require('./package.json');
|
||||
|
||||
gulp.task('copy:backend:views', () =>
|
||||
gulp.src('./packages/backend/src/server/web/views/**/*').pipe(gulp.dest('./packages/backend/built/server/web/views'))
|
||||
);
|
||||
|
||||
gulp.task('copy:client:fonts', () =>
|
||||
gulp.src('./packages/client/node_modules/three/examples/fonts/**/*').pipe(gulp.dest('./built/_client_dist_/fonts/'))
|
||||
);
|
||||
|
||||
gulp.task('copy:client:fontawesome', () =>
|
||||
gulp.src('./packages/client/node_modules/@fortawesome/fontawesome-free/**/*').pipe(gulp.dest('./built/_client_dist_/fontawesome/'))
|
||||
);
|
||||
|
||||
gulp.task('copy:client:locales', cb => {
|
||||
fs.mkdirSync('./built/_client_dist_/locales', { recursive: true });
|
||||
|
||||
const v = { '_version_': meta.version };
|
||||
|
||||
for (const [lang, locale] of Object.entries(locales)) {
|
||||
fs.writeFileSync(`./built/_client_dist_/locales/${lang}.${meta.version}.json`, JSON.stringify({ ...locale, ...v }), 'utf-8');
|
||||
}
|
||||
|
||||
cb();
|
||||
});
|
||||
|
||||
gulp.task('build:backend:script', () => {
|
||||
return gulp.src(['./packages/backend/src/server/web/boot.js', './packages/backend/src/server/web/bios.js', './packages/backend/src/server/web/cli.js'])
|
||||
.pipe(replace('LANGS', JSON.stringify(Object.keys(locales))))
|
||||
.pipe(terser({
|
||||
toplevel: true
|
||||
}))
|
||||
.pipe(gulp.dest('./packages/backend/built/server/web/'));
|
||||
});
|
||||
|
||||
gulp.task('build:backend:style', () => {
|
||||
return gulp.src(['./packages/backend/src/server/web/style.css', './packages/backend/src/server/web/bios.css', './packages/backend/src/server/web/cli.css'])
|
||||
.pipe(cssnano({
|
||||
zindex: false
|
||||
}))
|
||||
.pipe(gulp.dest('./packages/backend/built/server/web/'));
|
||||
});
|
||||
|
||||
gulp.task('build', gulp.parallel(
|
||||
'copy:client:locales', 'copy:backend:views', 'build:backend:script', 'build:backend:style', 'copy:client:fonts', 'copy:client:fontawesome'
|
||||
));
|
||||
|
||||
gulp.task('default', gulp.task('build'));
|
||||
|
||||
gulp.task('watch', () => {
|
||||
gulp.watch([
|
||||
'./packages/*/src/**/*',
|
||||
], { ignoreInitial: false }, gulp.task('build'));
|
||||
});
|
@@ -1,7 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# SPDX-FileCopyrightText: syuilo and other misskey contributors
|
||||
# SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
PORT=$(grep '^port:' /misskey/.config/default.yml | awk 'NR==1{print $2; exit}')
|
||||
curl -s -S -o /dev/null "http://localhost:${PORT}"
|
File diff suppressed because it is too large
Load Diff
@@ -2,7 +2,6 @@
|
||||
_lang_: "বাংলা"
|
||||
headlineMisskey: "নোট ব্যাবহার করে সংযুক্ত নেটওয়ার্ক"
|
||||
introMisskey: "স্বাগতম! মিসকি একটি ওপেন সোর্স, ডিসেন্ট্রালাইজড মাইক্রোব্লগিং পরিষেবা। \n\"নোট\" তৈরির মাধ্যমে যা ঘটছে তা সবার সাথে শেয়ার করুন 📡\n\"রিঅ্যাকশন\" গুলির মাধ্যমে যেকোনো নোট সম্পর্কে আপনার অনুভূতি ব্যাক্ত করতে পারেন 👍\nএকটি নতুন দুনিয়া ঘুরে দেখুন 🚀\n"
|
||||
poweredByMisskeyDescription: "{name} হল ওপেন সোর্স প্ল্যাটফর্ম <b>Misskey</b>-এর সার্ভারগুলির একটি৷"
|
||||
monthAndDay: "{day}/{month}"
|
||||
search: "খুঁজুন"
|
||||
notifications: "বিজ্ঞপ্তি"
|
||||
@@ -13,14 +12,12 @@ fetchingAsApObject: "ফেডিভার্স থেকে খবর আন
|
||||
ok: "ঠিক"
|
||||
gotIt: "বুঝেছি"
|
||||
cancel: "বাতিল"
|
||||
noThankYou: "না, ধন্যবাদ"
|
||||
enterUsername: "ইউজারনেম লিখুন"
|
||||
renotedBy: "{user} রিনোট করেছেন"
|
||||
noNotes: "কোন নোট নেই"
|
||||
noNotifications: "কোনো বিজ্ঞপ্তি নেই"
|
||||
instance: "ইন্সট্যান্স"
|
||||
settings: "সেটিংস"
|
||||
notificationSettings: "বিজ্ঞপ্তির সেটিংস"
|
||||
basicSettings: "সাধারণ সেটিংস"
|
||||
otherSettings: "অন্যান্য সেটিংস"
|
||||
openInWindow: "নতুন উইন্ডোতে খুলা"
|
||||
@@ -45,20 +42,12 @@ pin: "পিন করা"
|
||||
unpin: "পিন সরান"
|
||||
copyContent: "বিষয়বস্তু কপি করুন"
|
||||
copyLink: "লিঙ্ক কপি করুন"
|
||||
copyLinkRenote: "রিনোট লিঙ্ক কপি করুন"
|
||||
delete: "মুছুন"
|
||||
deleteAndEdit: "মুছুন এবং সম্পাদনা করুন"
|
||||
deleteAndEditConfirm: "আপনি কি এই নোটটি মুছে এটি সম্পাদনা করার বিষয়ে নিশ্চিত? আপনি এটির সমস্ত রিঅ্যাকশন, রিনোট এবং জবাব হারাবেন।"
|
||||
addToList: "লিস্ট এ যোগ করুন"
|
||||
addToAntenna: "অ্যান্টেনা এ যোগ করুন"
|
||||
sendMessage: "একটি বার্তা পাঠান"
|
||||
copyRSS: "RSS কপি করুন"
|
||||
copyUsername: "ব্যবহারকারীর নাম কপি করুন"
|
||||
copyUserId: "ব্যবহারকারীর ID কপি করুন"
|
||||
copyNoteId: "নোটের ID কপি করুন"
|
||||
copyFileId: "ফাইল ID কপি করুন"
|
||||
copyFolderId: "ফোল্ডার ID কপি করুন"
|
||||
copyProfileUrl: "প্রোফাইল URL কপি করুন"
|
||||
searchUser: "ব্যবহারকারী খুঁজুন..."
|
||||
reply: "জবাব"
|
||||
loadMore: "আরও দেখুন"
|
||||
@@ -111,8 +100,6 @@ renoted: "রিনোট করা হয়েছে"
|
||||
cantRenote: "এই নোটটি রিনোট করা যাবে না।"
|
||||
cantReRenote: "রিনোটকে রিনোট করা যাবে না।"
|
||||
quote: "উদ্ধৃতি"
|
||||
inChannelRenote: "চ্যানেলে রিনোট"
|
||||
inChannelQuote: "চ্যানেলে উদ্ধৃতি"
|
||||
pinnedNote: "পিন করা নোট"
|
||||
pinned: "পিন করা"
|
||||
you: "আপনি"
|
||||
@@ -120,11 +107,7 @@ clickToShow: "দেখার জন্য ক্লিক করুন"
|
||||
sensitive: "সংবেদনশীল বিষয়বস্তু"
|
||||
add: "যুক্ত করুন"
|
||||
reaction: "প্রতিক্রিয়া"
|
||||
reactions: "প্রতিক্রিয়া"
|
||||
emojiPicker: "ইমোজি পিকার"
|
||||
pinnedEmojisForReactionSettingDescription: "রিঅ্যাকশন দেয়ার সময় আপনি ইমোজিটিকে পিন করা এবং প্রদর্শিত হওয়ার জন্য সেট করতে পারেন।"
|
||||
pinnedEmojisSettingDescription: "ইমোজি ইনপুট দেয়ার সময় আপনি ইমোজিটিকে পিন করা এবং প্রদর্শিত হওয়ার জন্য সেট করতে পারেন।"
|
||||
emojiPickerDisplay: "পিকার ডিসপ্লে"
|
||||
reactionSetting: "রিঅ্যাকশন পিকারে যেসকল প্রতিক্রিয়া দেখানো হবে"
|
||||
reactionSettingDescription2: "পুনরায় সাজাতে টেনে আনুন, মুছতে ক্লিক করুন, যোগ করতে + টিপুন।"
|
||||
rememberNoteVisibility: "নোটের দৃশ্যমান্যতার সেটিংস মনে রাখুন"
|
||||
attachCancel: "অ্যাটাচমেন্ট সরান "
|
||||
@@ -181,6 +164,7 @@ annotation: "মন্তব্য"
|
||||
federation: "ফেডিভার্স"
|
||||
instances: "ইন্সট্যান্স"
|
||||
registeredAt: "যোগ দিয়েছেন"
|
||||
latestRequestSentAt: "শেষ রিকুয়েস্ট পাঠানো হয়েছে"
|
||||
latestRequestReceivedAt: "শেষ রিকুয়েস্ট গৃহীত হয়েছে"
|
||||
latestStatus: "সর্বশেষ অবস্থা"
|
||||
storageUsage: "স্টোরেজের ব্যাবহার"
|
||||
@@ -268,12 +252,12 @@ noMoreHistory: "আর কোন ইতিহাস নেই"
|
||||
startMessaging: "চ্যাট শুরু করুন"
|
||||
nUsersRead: "{n} জন পড়েছেন"
|
||||
agreeTo: "{0} এর প্রতি আমি সম্মত"
|
||||
tos: "পরিষেবার শর্তাদি"
|
||||
start: "শুরু করুন"
|
||||
home: "মূল পাতা"
|
||||
remoteUserCaution: "এই ব্যাবহারকারী রিমোট ইন্সট্যান্সের, নিম্নক্ত তথ্য অসম্পূর্ণ হতে পারে।"
|
||||
activity: "কার্যকলাপ"
|
||||
images: "ছবি"
|
||||
image: "ছবি"
|
||||
birthday: "জন্মদিন"
|
||||
yearsOld: "{age} বছর"
|
||||
registeredDate: "যোগদানের তারিখ"
|
||||
@@ -310,6 +294,7 @@ copyUrl: "URL কপি করুন"
|
||||
rename: "পুনঃনামকরণ"
|
||||
avatar: "প্রোফাইল ছবি"
|
||||
banner: "ব্যানার"
|
||||
nsfw: "সংবেদনশীল বিষয়বস্তু"
|
||||
whenServerDisconnected: "সার্ভারের সাথে সংযোগ বিচ্ছিন্ন হয়ে গেলে"
|
||||
disconnectedFromServer: "সার্ভার থেকে সংযোগ বিচ্ছিন্ন হয়েছে"
|
||||
reload: "আবার লোড করুন"
|
||||
@@ -344,6 +329,7 @@ invite: "আমন্ত্রণ"
|
||||
driveCapacityPerLocalAccount: "প্রত্যেক স্থানীয় ব্যাবহারকারীর জন্য ড্রাইভের জায়গা"
|
||||
driveCapacityPerRemoteAccount: "প্রত্যেক রিমোট ব্যাবহারকারীর জন্য ড্রাইভের জায়গা"
|
||||
inMb: "মেগাবাইটে লিখুন"
|
||||
iconUrl: "আইকনের URL (ফ্যাভিকন, ইত্যাদি)"
|
||||
bannerUrl: "ব্যানার ছবির URL"
|
||||
backgroundImageUrl: "পটভূমির চিত্রের URL"
|
||||
basicInfo: "আপনার ব্যক্তিগত তথ্য"
|
||||
@@ -361,8 +347,6 @@ recaptcha: "reCAPTCHA"
|
||||
enableRecaptcha: "reCAPTCHA চালু করুন"
|
||||
recaptchaSiteKey: "সাইট কী"
|
||||
recaptchaSecretKey: "সিক্রেট কী"
|
||||
turnstileSiteKey: "সাইট কী"
|
||||
turnstileSecretKey: "সিক্রেট কী"
|
||||
avoidMultiCaptchaConfirm: "একাধিক Captcha ব্যবহার করলে তারা পরস্পরের কাজে বাধা দিতে পারে। আপনি কি অন্যান্য Captcha নিষ্ক্রিয় করতে চান? আপনি 'বাতিল' ক্লিক করার মাধ্যমে একাধিক Captcha চালু রাখতে পারেন।"
|
||||
antennas: "অ্যান্টেনা"
|
||||
manageAntennas: "অ্যান্টেনা ব্যবস্থাপনা"
|
||||
@@ -396,9 +380,12 @@ about: "আপনার সম্পর্কে"
|
||||
aboutMisskey: "Misskey সম্পর্কে"
|
||||
administrator: "প্রশাসক"
|
||||
token: "টোকেন"
|
||||
twoStepAuthentication: "২-ধাপ প্রমাণীকরণ"
|
||||
moderator: "মডারেটর"
|
||||
nUsersMentioned: "{n} জনকে উল্লেখ করা হয়েছে"
|
||||
securityKey: "সিকিউরিটি কী"
|
||||
securityKeyName: "কী'র নাম"
|
||||
registerSecurityKey: "সিকিউরিটি কী নিবন্ধন করুন"
|
||||
lastUsed: "শেষ ব্যাবহার করা হয়েছে"
|
||||
unregister: "নিবন্ধনমুক্ত হন"
|
||||
passwordLessLogin: "পাসওয়ার্ড-বিহীন লগইন সেট আপ করুন"
|
||||
@@ -409,21 +396,31 @@ share: "শেয়ার"
|
||||
notFound: "পাওয়া যায়নি"
|
||||
notFoundDescription: "এই URL-এর সাথে সম্পর্কিত কোনো পৃষ্ঠা নেই।"
|
||||
uploadFolder: "আপলোডের জন্য ডিফল্ট ফোল্ডার"
|
||||
cacheClear: "ক্যাশ পরিষ্কার করুন"
|
||||
markAsReadAllNotifications: "সমস্ত বিজ্ঞপ্তিগুলি পঠিত হিসাবে চিহ্নিত করুন"
|
||||
markAsReadAllUnreadNotes: "সমস্ত নোটগুলি পঠিত হিসাবে চিহ্নিত করুন"
|
||||
markAsReadAllTalkMessages: "সমস্ত মেসেজ পঠিত হিসাবে চিহ্নিত করুন"
|
||||
help: "সহায়তা"
|
||||
inputMessageHere: "এখানে মেসেজ লিখুন"
|
||||
close: "বন্ধ"
|
||||
group: "গ্রুপ"
|
||||
groups: "গ্রুপসমূহ"
|
||||
createGroup: "গ্রুপ তৈরী করুন"
|
||||
ownedGroups: "আপনার গ্রুপগুলি"
|
||||
joinedGroups: "যেসব গ্রুপে আপনি আছেন"
|
||||
invites: "আমন্ত্রণ"
|
||||
groupName: "গ্রুপের নাম"
|
||||
members: "সদস্যবৃন্দ"
|
||||
transfer: "হস্তান্তর"
|
||||
messagingWithUser: "প্রাইভেট চ্যাট"
|
||||
messagingWithGroup: "গ্রুপ চ্যাট"
|
||||
title: "শিরোনাম"
|
||||
text: "পাঠ্য"
|
||||
enable: "সক্রিয়"
|
||||
next: "পরবর্তী"
|
||||
retype: "পুনঃ প্রবেশ"
|
||||
noteOf: "{user} এর নোট"
|
||||
inviteToGroup: "গ্রুপে আমন্ত্রণ জানান"
|
||||
quoteAttached: "উদ্ধৃত"
|
||||
quoteQuestion: "উদ্ধৃতি হিসাবে সংযুক্ত করবেন?"
|
||||
noMessagesYet: "কোন মেসেজ নেই"
|
||||
@@ -445,13 +442,19 @@ passwordMatched: "মিলেছে"
|
||||
passwordNotMatched: "মিলেনি"
|
||||
signinWith: "{x} এর সাহায্যে সাইন ইন করুন"
|
||||
signinFailed: "লগ ইন করা যায়নি। আপনার ব্যবহারকারীর নাম এবং পাসওয়ার্ড চেক করুন."
|
||||
tapSecurityKey: "সিকিউরিটি কী স্পর্শ করুন"
|
||||
or: "অথবা"
|
||||
language: "ভাষা"
|
||||
uiLanguage: "UI এর ভাষা"
|
||||
groupInvited: "আপনি একটি গ্রুপে আমন্ত্রিত হয়েছেন"
|
||||
aboutX: "{x} সম্পর্কে"
|
||||
useOsNativeEmojis: "অপারেটিং সিস্টেমের নেটিভ ইমোজি ব্যবহার করুন"
|
||||
disableDrawer: "ড্রয়ার মেনু প্রদর্শন করবেন না"
|
||||
youHaveNoGroups: "আপনার কোন গ্রুপ নেই "
|
||||
joinOrCreateGroup: "একটি বিদ্যমান গ্রুপের আমন্ত্রণ পান বা একটি নতুন গ্রুপ তৈরি করুন৷"
|
||||
noHistory: "কোনো ইতিহাস নেই"
|
||||
signinHistory: "প্রবেশ করার ইতিহাস"
|
||||
disableAnimatedMfm: "অ্যানিমেটেড MFM অক্ষম করুন"
|
||||
doing: "প্রক্রিয়া করছে..."
|
||||
category: "বিভাগ"
|
||||
tags: "ট্যাগসমূহ"
|
||||
@@ -498,7 +501,6 @@ deleteAll: "সব মুছুন"
|
||||
showFixedPostForm: "টাইমলাইনের শীর্ষে পোস্ট করার ফর্মটি দেখান"
|
||||
newNoteRecived: "নতুন নোট আছে"
|
||||
sounds: "শব্দ"
|
||||
sound: "শব্দ"
|
||||
listen: "শুনুন"
|
||||
none: "কিছুই না"
|
||||
showInPage: "পেজে দেখান"
|
||||
@@ -575,6 +577,7 @@ tokenRequested: "অ্যাকাউন্টে অ্যাক্সেস
|
||||
pluginTokenRequestedDescription: "এই প্লাগইনটি এখানে দেওয়া অনুমুতিসমূহ ব্যাবহার করবে"
|
||||
notificationType: "বিজ্ঞপ্তির ধরন"
|
||||
edit: "সম্পাদনা"
|
||||
useStarForReactionFallback: "রিঅ্যাকশনের ইমোজি না জানলে ★ ব্যবহার করুন"
|
||||
emailServer: "ইমেইল সার্ভার"
|
||||
enableEmail: "ইমেইল বিতরণ চালু করুন"
|
||||
emailConfigInfo: "আপনার ইমেল ঠিকানা নিশ্চিত করতে এবং আপনার পাসওয়ার্ড পুনরায় সেট করতে ব্যবহৃত হয়"
|
||||
@@ -642,7 +645,6 @@ createNew: "নতুন"
|
||||
optional: "প্রয়োজনীয় নয়"
|
||||
createNewClip: "নতুন ক্লিপ তৈরি করুন"
|
||||
public: "সর্বজনীন"
|
||||
private: "ব্যাক্তিগত"
|
||||
i18nInfo: "Misskey স্বেচ্ছাসেবকদের দ্বারা বিভিন্ন ভাষায় অনুবাদ করা হচ্ছে। আপনি {link} এ গিয়ে অনুবাদে সহযোগিতা করতে পারেন।"
|
||||
manageAccessTokens: "অ্যাক্সেস টোকেন পরিচালনা করুন"
|
||||
accountInfo: "অ্যাকাউন্টের তথ্য"
|
||||
@@ -810,11 +812,15 @@ makeReactionsPublicDescription: "আপনার পূর্ববর্তী
|
||||
classic: "ক্লাসিক"
|
||||
muteThread: "থ্রেড মিউট করুন"
|
||||
unmuteThread: "থ্রেড আনমিউট করুন"
|
||||
ffVisibility: "অনুসরণ/অনুসরণকারীদের দৃশ্যমান্যতা"
|
||||
ffVisibilityDescription: "আপনি কাকে অনুসরণ করেন এবং কে আপনাকে অনুসরণ করে, সেটা কারা দেখতে পাবে তা নির্ধারণ করে।"
|
||||
continueThread: "আরো থ্রেড দেখুন"
|
||||
deleteAccountConfirm: "আপনার অ্যাকাউন্ট মুছে ফেলা হবে। ঠিক আছে?"
|
||||
incorrectPassword: "আপনার দেওয়া পাসওয়ার্ডটি ভুল।"
|
||||
voteConfirm: "\"{choice}\" এ ভোট দিতে চান?"
|
||||
hide: "লুকান"
|
||||
leaveGroup: "গ্রুপ ছেড়ে চলে যান"
|
||||
leaveGroupConfirm: "\"{name}\" গ্রুপ ছেড়ে চলে যেতে চান?"
|
||||
useDrawerReactionPickerForMobile: "মোবাইলে রিঅ্যাকশন পিকারকে ড্রয়ারে প্রদর্শন করুন"
|
||||
welcomeBackWithName: "আবার স্বাগতম, {name}"
|
||||
clickToFinishEmailVerification: " [{ok}] ক্লিক করার মাধ্যমে আপনার ইমেল ঠিকানা নিশ্চিত করুন।"
|
||||
@@ -830,7 +836,6 @@ instanceDefaultLightTheme: "ইন্সট্যান্সের ডিফল
|
||||
instanceDefaultDarkTheme: "ইন্সট্যান্সের ডিফল্ট ডার্ক থিম"
|
||||
instanceDefaultThemeDescription: "অবজেক্ট ফরম্যাটে থিম কোড লিখুন"
|
||||
mutePeriod: "মিউটের সময়কাল"
|
||||
period: "পোলের সময়সীমা"
|
||||
indefinitely: "অনির্দিষ্ট"
|
||||
tenMinutes: "১০ মিনিট"
|
||||
oneHour: "১ ঘণ্টা"
|
||||
@@ -845,21 +850,6 @@ colored: "রঙ্গিন"
|
||||
label: "লেবেল"
|
||||
localOnly: "শুধুমাত্র লোকাল"
|
||||
account: "অ্যাকাউন্টগুলি"
|
||||
like: "পছন্দ করা"
|
||||
show: "প্রদর্শন"
|
||||
color: "রং"
|
||||
horizontal: "পাশে"
|
||||
youFollowing: "অনুসরণ করা হচ্ছে"
|
||||
icon: "প্রোফাইল ছবি"
|
||||
replies: "জবাব"
|
||||
renotes: "রিনোট"
|
||||
flip: "উল্টান"
|
||||
_role:
|
||||
priority: "অগ্রাধিকার"
|
||||
_priority:
|
||||
low: "নিম্ন"
|
||||
middle: "মাঝারি"
|
||||
high: "উচ্চ"
|
||||
_emailUnavailable:
|
||||
used: "এই ইমেইল ঠিকানাটি ইতোমধ্যে ব্যবহৃত হয়েছে"
|
||||
format: "এই ইমেল ঠিকানাটি সঠিকভাবে লিখা হয়নি"
|
||||
@@ -884,7 +874,6 @@ _accountDelete:
|
||||
_ad:
|
||||
back: "পিছনে"
|
||||
reduceFrequencyOfThisAd: "এই বিজ্ঞাপনটি কম দেখান"
|
||||
hide: "দেখাবেন না"
|
||||
_forgotPassword:
|
||||
enterEmail: "আপনি আপনার অ্যাকাউন্টের জন্য নিবন্ধিত ইমেল ঠিকানা লিখুন. সেই ঠিকানায় একটি পাসওয়ার্ড রিসেট লিঙ্ক পাঠানো হবে।"
|
||||
ifNoEmail: "আপনি যদি নিবন্ধনের সময় ই-মেইল ঠিকানা না দিয়ে থাকেন, তাহলে অনুগ্রহ করে প্রশাসকের সাথে যোগাযোগ করুন।"
|
||||
@@ -903,7 +892,6 @@ _plugin:
|
||||
install: "প্লাগইন ইন্সটল করুন"
|
||||
installWarn: "অবিশ্বস্ত প্লাগইন ইনস্টল করবেন না।"
|
||||
manage: "প্লাগইন ম্যানেজ করুন"
|
||||
viewSource: "উৎস দেখুন"
|
||||
_registry:
|
||||
scope: "স্কোপ"
|
||||
key: "কী"
|
||||
@@ -919,6 +907,74 @@ _aboutMisskey:
|
||||
donate: "Misskey তে দান করুন"
|
||||
morePatrons: "আরও অনেকে আমাদের সাহায্য করছেন। তাদের সবাইকে ধন্যবাদ 🥰"
|
||||
patrons: "সমর্থনকারী"
|
||||
_nsfw:
|
||||
respect: "স্পর্শকাতর মিডিয়া লুকান"
|
||||
ignore: "স্পর্শকাতর মিডিয়া লুকাবেন না"
|
||||
force: "সকল মিডিয়া লুকান"
|
||||
_mfm:
|
||||
cheatSheet: "MFM চিটশিট"
|
||||
intro: "MFM একটি মার্কআপ ভাষা যা Misskey-এর মধ্যে বিভিন্ন জায়গায় ব্যবহার করা যেতে পারে। এখানে আপনি MFM-এর সিনট্যাক্সগুলির একটি তালিকা দেখতে পারবেন।"
|
||||
dummy: "মিসকি ফেডিভার্সের বিশ্বকে প্রসারিত করে"
|
||||
mention: "উল্লেখ"
|
||||
mentionDescription: "@ চিহ্ন + ব্যবহারকারীর নাম একটি নির্দিষ্ট ব্যবহারকারীকে নির্দেশ করতে ব্যবহার করা যায়।"
|
||||
hashtag: "হ্যাশট্যাগ"
|
||||
hashtagDescription: "আপনি একটি # চিহ্ন + ট্যাগ সহ একটি হ্যাশট্যাগ নির্দেশ করতে পারেন।"
|
||||
url: "URL"
|
||||
urlDescription: "URL দেখানো সম্ভব।"
|
||||
link: "লিংক"
|
||||
linkDescription: "আপনি পাঠ্যের একটি নির্দিষ্ট অংশকে URL হিসাবে দেখাতে পারেন৷"
|
||||
bold: "গাঢ়"
|
||||
boldDescription: "অক্ষরগুলিকে মোটাকরে প্রদর্শন করা হবে।"
|
||||
small: "ছোট"
|
||||
smallDescription: "লেখা ছোট এবং পাতলা করে দেখানো হবে।"
|
||||
center: "সেন্টার"
|
||||
centerDescription: "লেখা মাঝ বরাবর দেখানো হবে"
|
||||
inlineCode: "কোড (ইনলাইন)"
|
||||
inlineCodeDescription: " প্রোগ্রামের কোডের জন্য ইনলাইন সিনট্যাক্স হাইলাইটিং করা হবে"
|
||||
blockCode: "কোড (ব্লক)"
|
||||
blockCodeDescription: "মাল্টি-লাইন প্রোগ্রামের কোডের জন্য সিনট্যাক্স হাইলাইট করে।"
|
||||
inlineMath: "গাণিতিক সূত্র (ইনলাইন)"
|
||||
inlineMathDescription: "গাণিতিক সূত্র প্রদর্শন করুন (KaTeX) ইনলাইন।"
|
||||
blockMath: "গাণিতিক সূত্র (ব্লক)"
|
||||
blockMathDescription: "একটি ব্লকে একাধিক লাইনের গাণিতিক সূত্র প্রদর্শন করুন (KaTeX)।"
|
||||
quote: "উদ্ধৃতি"
|
||||
quoteDescription: "বিষয়বস্তুকে একটি উদ্ধৃতি হিসাবে দেখানো হবে।"
|
||||
emoji: "স্বনির্ধারিত ইমোজিগুলি"
|
||||
emojiDescription: "আপনি একটি কাস্টম ইমোজির নাম কোলনে আবদ্ধ করে কাস্টম ইমোজিটি দেখাতে পারেন৷"
|
||||
search: "খুঁজুন"
|
||||
searchDescription: "পূর্ব-টাইপ করা পাঠ্য সহ একটি অনুসন্ধান বাক্স প্রদর্শন করে।"
|
||||
flip: "উল্টান"
|
||||
flipDescription: "বিষয়বস্তু উপরে/নীচে বা বাম/ডানে উল্টান।"
|
||||
jelly: "অ্যানিমেশন (জেলি)"
|
||||
jellyDescription: "জেলির মত অ্যানিমেশন দেখায়।"
|
||||
tada: "অ্যানিমেশন (টাডা)"
|
||||
tadaDescription: "\"টাডা!\" এর মত অ্যানিমেশন দেখায়।"
|
||||
jump: "অ্যানিমেশন (লাফ)"
|
||||
jumpDescription: "বিষয়বস্তুতে লাফ মারার মত অ্যানিমেশন দেখায়।"
|
||||
bounce: "অ্যানিমেশন (তিড়িং বিড়িং)"
|
||||
bounceDescription: "তিড়িং বিড়িং করার মত অ্যানিমেশন দেখায়।"
|
||||
shake: "অ্যানিমেশন (ঝাঁকি)"
|
||||
shakeDescription: "ঝাঁকির মত অ্যানিমেশন দেখায়।"
|
||||
twitch: "অ্যানিমেশন (মোচড়ানো)"
|
||||
twitchDescription: "মোচড়ানোর মত অ্যানিমেশন দেখায়।"
|
||||
spin: "অ্যানিমেশন (ঘুরা)"
|
||||
spinDescription: "ঘুরার মত অ্যানিমেশন দেখায়।"
|
||||
x2: "বড়"
|
||||
x2Description: "বিষয়বস্তু বড় করে দেখায়।"
|
||||
x3: "অনেক বড়"
|
||||
x3Description: "বিষয়বস্তু আরও বড় করে দেখায়।"
|
||||
x4: "অস্বাভাবিক বড়"
|
||||
x4Description: "বিষয়বস্তুকে আগের থেকেও আরও বড় করে দেখায়।"
|
||||
blur: "ব্লার"
|
||||
blurDescription: "বিষয়বস্তুকে ব্লার করতে পারেন। আপনি এর উপর মাউস কার্সার রাখলে, এটি পরিষ্কারভাবে দেখতে পাবেন।"
|
||||
font: "ফন্ট"
|
||||
fontDescription: "বিষয়বস্তুকে কোন ফন্টে দেখানো হবে তা নির্ধারণ করে।"
|
||||
rainbow: "রেইনবো"
|
||||
rainbowDescription: "বিষয়বস্তুকে রংধনুর রং গুলিতে প্রদর্শন করে।"
|
||||
sparkle: "চিক চিক"
|
||||
sparkleDescription: "বিষয়বস্তুকে একটি চিকচিকে কণা প্রভাব দেয়।"
|
||||
rotate: "ঘুরান"
|
||||
rotateDescription: "বিষয়বস্তুকে একটি নির্দিষ্ট কোনে ঘুরায়।"
|
||||
_instanceTicker:
|
||||
none: "দেখাবেন না"
|
||||
remote: "রিমোট ব্যাবহারকারীদের জন্য দেখান"
|
||||
@@ -946,6 +1002,11 @@ _wordMute:
|
||||
muteWords: "নিঃশব্দ করা শব্দগুলি"
|
||||
muteWordsDescription: "স্পেস দিয়ে আলাদা করলে AND শর্ত তৈরি হবে এবং আলাদা লাইনে লিখলে OR শর্ত তৈরি হবে।"
|
||||
muteWordsDescription2: "রেগুলার এক্সপ্রেশন ব্যবহার করতে স্ল্যাশ দিয়ে কীওয়ার্ডকে ঘিরে রাখুন।"
|
||||
softDescription: "টাইমলাইন থেকে নির্দিষ্ট শর্তানুযায়ী নোট লুকিয়ে রাখে।"
|
||||
hardDescription: "নির্দিষ্ট শর্তানুযায়ী নোটগুলিকে টাইমলাইন থেকে বাদ দেয়। আপনি শর্ত পরিবর্তন করলেও যে নোটগুলি যোগ করা হয়নি সেগুলি বাদ দেওয়া হবে।"
|
||||
soft: "নমনীয়"
|
||||
hard: "কঠোর"
|
||||
mutedNotes: "মিউট করা নোটগুলি"
|
||||
_instanceMute:
|
||||
instanceMuteDescription: "কনফিগার করা ইন্সট্যান্সের সব নোট এবং রিনোট মিউট করুন, মিউট করা ইন্সট্যান্সের ব্যবহারকারীদের উত্তর সহ।"
|
||||
instanceMuteDescription2: "প্রতিটিকে আলাদা লাইনে লিখুন"
|
||||
@@ -1009,6 +1070,9 @@ _theme:
|
||||
infoFg: "তথ্যের পাঠ্য"
|
||||
infoWarnBg: "ওয়ার্নিং এর পটভূমি"
|
||||
infoWarnFg: "ওয়ার্নিং এর পাঠ্য"
|
||||
cwBg: "CW বাটনের পটভূমি"
|
||||
cwFg: "CW বাটনের পাঠ্য"
|
||||
cwHoverBg: "CW বাটনের পটভূমি (হভার)"
|
||||
toastBg: "বিজ্ঞপ্তির পটভূমি"
|
||||
toastFg: "বিজ্ঞপ্তির পাঠ্য"
|
||||
buttonBg: "বাটনের পটভূমি"
|
||||
@@ -1026,6 +1090,8 @@ _sfx:
|
||||
note: "নোটগুলি"
|
||||
noteMy: "নোট (আপনার)"
|
||||
notification: "বিজ্ঞপ্তি"
|
||||
chat: "চ্যাট"
|
||||
chatBg: "চ্যাট (ব্যাকগ্রাউন্ড)"
|
||||
antenna: "অ্যান্টেনাগুলি"
|
||||
channel: "চ্যানেলের বিজ্ঞপ্তি"
|
||||
_ago:
|
||||
@@ -1038,20 +1104,44 @@ _ago:
|
||||
weeksAgo: "{n} সপ্তাহ আগে"
|
||||
monthsAgo: "{n} মাস আগে"
|
||||
yearsAgo: "{n} বছর আগে"
|
||||
invalid: "এখানে কিছুই নাই"
|
||||
_time:
|
||||
second: "সেকেন্ড"
|
||||
minute: "মিনিট"
|
||||
hour: "ঘণ্টা"
|
||||
day: "দিন"
|
||||
_tutorial:
|
||||
title: "Misskey কিভাবে ব্যাবহার করবেন"
|
||||
step1_1: "স্বাগতম!"
|
||||
step1_2: "এই স্ক্রীনটিকে \"টাইমলাইন\" বলা হয় এবং কালানুক্রমিক ক্রমে আপনার এবং আপনি যাদের \"অনুসরণ করেন\" তাদের \"নোটগুলি\" দেখায়৷"
|
||||
step1_3: "আপনি আপনার টাইমলাইনে কিছু দেখতে পাবেন না কারণ আপনি এখনও কোনো নোট পোস্ট করেননি এবং আপনি কাউকে অনুসরণ করছেন না৷"
|
||||
step2_1: "নোট তৈরি করার আগে বা কাউকে অনুসরণ করার আগে প্রথমে আপনার প্রোফাইলটি সম্পূর্ণ করুন।"
|
||||
step2_2: "আপনি কে তা জানা অনেক লোকের জন্য আপনার নোটগুলি দেখা এবং অনুসরণ করাকে সহজ করে তোলে৷"
|
||||
step3_1: "আপনি কি সফলভাবে আপনার প্রোফাইল সেট আপ করেছেন?"
|
||||
step3_2: "এখন, কিছু নোট পোস্ট করার চেষ্টা করুন। পোস্ট ফর্ম খুলতে পেন্সিল চিহ্নযুক্ত বাটনে ক্লিক করুন।"
|
||||
step3_3: "বিষয়বস্তু লেখার পরে, আপনি ফর্মের উপরের ডানদিকের বাটনে ক্লিক করে পোস্ট করতে পারেন।"
|
||||
step3_4: "পোস্ট করার মত কিছু মনে পরছে না? \"আমি মিসকি সেট আপ করছি\" বললে কেমন হয়?"
|
||||
step4_1: "পোস্ট করেছেন?"
|
||||
step4_2: "সাবাশ! এখন আপনার নোট টাইমলাইনে দেখা যাবে।"
|
||||
step5_1: "এখন অন্যদেরকে অনুসরণ করে আপনার টাইমলাইনকে প্রাণবন্ত করে তুলুন।"
|
||||
step5_2: "আপনি {featured}-এ জনপ্রিয় নোটগুলি দেখতে পারেন, যাতে আপনি যে ব্যক্তিকে পছন্দ করেন তাকে বেছে নিতে এবং অনুসরণ করতে পারেন, অথবা {explore}-এ জনপ্রিয় ব্যবহারকারীদের দেখতে পারেন৷"
|
||||
step5_3: "একজন ব্যবহারকারীকে অনুসরণ করতে, ব্যবহারকারীর আইকনে ক্লিক করুন এবং ব্যবহারকারীর পৃষ্ঠাতে \"অনুসরণ করুন\" বাটনে ক্লিক করুন।"
|
||||
step5_4: "যদি ব্যবহারকারীর নামের পাশে একটি লক আইকন থাকে তাহলে আপনার অনুসরণের অনুরোধ গ্রহণ করার জন্য তারা কিছু সময় নিতে পারে।"
|
||||
step6_1: "সবকিছু ঠিক থাকলে আপনি টাইমলাইনে অন্য ব্যবহারকারীদের নোট দেখতে পাবেন।"
|
||||
step6_2: "আপনি সহজেই আপনার প্রতিক্রিয়া জানাতে অন্য ব্যক্তির নোটে \"রিঅ্যাকশন\" যোগ করতে পারেন।"
|
||||
step6_3: "একটি রিঅ্যাকশন যোগ করতে, নোটে \"+\" চিহ্নে ক্লিক করুন এবং আপনার পছন্দের রিঅ্যাকশন নির্বাচন করুন।"
|
||||
step7_1: "অভিনন্দন! আপনি এখন Misskey-র প্রাথমিক টিউটোরিয়ালটি শেষ করেছেন।"
|
||||
step7_2: "আপনি যদি Misskey সম্পর্কে আরও জানতে চান, তাহলে {help} এ দেখুন।"
|
||||
step7_3: "এখন Misskey উপভোগ করুন 🚀"
|
||||
_2fa:
|
||||
alreadyRegistered: "আপনি ইতিমধ্যে একটি 2-ফ্যাক্টর অথেনটিকেশন ডিভাইস নিবন্ধন করেছেন৷"
|
||||
registerDevice: "নতুন ডিভাইস নিবন্ধন করুন"
|
||||
registerKey: "সিকিউরিটি কী নিবন্ধন করুন"
|
||||
step1: "প্রথমে, আপনার ডিভাইসে {a} বা {b} এর মতো একটি অথেনটিকেশন অ্যাপ ইনস্টল করুন৷"
|
||||
step2: "এরপরে, অ্যাপের সাহায্যে প্রদর্শিত QR কোডটি স্ক্যান করুন।"
|
||||
step2Url: "ডেস্কটপ অ্যাপে, নিম্নলিখিত URL লিখুন:"
|
||||
step3: "অ্যাপে প্রদর্শিত টোকেনটি লিখুন এবং আপনার কাজ শেষ।"
|
||||
step4: "আপনাকে এখন থেকে লগ ইন করার সময়, এইভাবে টোকেন লিখতে হবে।"
|
||||
securityKeyInfo: "আপনি একটি হার্ডওয়্যার সিকিউরিটি কী ব্যবহার করে লগ ইন করতে পারেন যা FIDO2 বা ডিভাইসের ফিঙ্গারপ্রিন্ট সেন্সর বা পিন সমর্থন করে৷"
|
||||
renewTOTPCancel: "না, ধন্যবাদ"
|
||||
_permissions:
|
||||
"read:account": "অ্যাকাউন্টের তথ্য দেখুন"
|
||||
"write:account": "অ্যাকাউন্টের তথ্য সম্পাদন করুন"
|
||||
@@ -1097,6 +1187,7 @@ _antennaSources:
|
||||
homeTimeline: "আপনি অনুসরণ করছেন, এমন ব্যবহারকারীদের নোট"
|
||||
users: "এক বা একাধিক নির্দিষ্ট ব্যবহারকারীর নোট"
|
||||
userList: "নির্দিষ্ট তালিকায় নাম থাকা ব্যবহারকারীদের নোট"
|
||||
userGroup: "নির্দিষ্ট গ্রুপে থাকা ব্যবহারকারীদের নোট"
|
||||
_weekday:
|
||||
sunday: "রবিবার"
|
||||
monday: "সোমবার"
|
||||
@@ -1106,8 +1197,6 @@ _weekday:
|
||||
friday: "শুক্রবার"
|
||||
saturday: "শনিবার"
|
||||
_widgets:
|
||||
profile: "প্রোফাইল"
|
||||
instanceInfo: "ইন্সট্যান্সের তথ্য"
|
||||
memo: "স্টিকি নোট"
|
||||
notifications: "বিজ্ঞপ্তি"
|
||||
timeline: "টাইমলাইন"
|
||||
@@ -1127,8 +1216,6 @@ _widgets:
|
||||
serverMetric: "সার্ভার মেট্রিক্স"
|
||||
aiscript: "AiScript কনসোল"
|
||||
aichan: "আই চান"
|
||||
_userList:
|
||||
chooseList: "লিস্ট নির্বাচন করুন"
|
||||
_cw:
|
||||
hide: "লুকান"
|
||||
show: "আরও দেখুন"
|
||||
@@ -1165,6 +1252,8 @@ _visibility:
|
||||
followersDescription: "শুধুমাত্র আপনার অনুসরণকারীদের নিকট পোস্ট করুন"
|
||||
specified: "ডাইরেক্ট নোট"
|
||||
specifiedDescription: "শুধুমাত্র নির্দিষ্ট ব্যাবহারকারীর নিকট পাঠান"
|
||||
localOnly: "শুধুমাত্র লোকাল"
|
||||
localOnlyDescription: "রিমোট ব্যাবহারকারীদের নিকট দৃশ্যমান নয়"
|
||||
_postForm:
|
||||
replyPlaceholder: "নোটটির জবাব দিন..."
|
||||
quotePlaceholder: "নোটটিকে উদ্ধৃত করুন..."
|
||||
@@ -1227,12 +1316,6 @@ _timelines:
|
||||
local: "স্থানীয়"
|
||||
social: "সামাজিক"
|
||||
global: "গ্লোবাল"
|
||||
_play:
|
||||
viewSource: "উৎস দেখুন"
|
||||
featured: "জনপ্রিয়"
|
||||
title: "শিরোনাম"
|
||||
script: "স্ক্রিপ্ট"
|
||||
summary: "বর্ণনা"
|
||||
_pages:
|
||||
newPage: "নতুন পৃষ্ঠা বানান"
|
||||
editPage: "পৃষ্ঠাটি সম্পাদনা করুন"
|
||||
@@ -1268,6 +1351,8 @@ _pages:
|
||||
eyeCatchingImageRemove: "থাম্বনেইল সরান"
|
||||
chooseBlock: "ব্লক যোগ করুন"
|
||||
selectType: "ধরন নির্বাচন করুন"
|
||||
enterVariableName: "চলকের নাম লিখুন"
|
||||
variableNameIsAlreadyUsed: "চলকের নামটি ইতিপূর্বে ব্যাবহৃত হয়েছে"
|
||||
contentBlocks: "বিষয়বস্তু"
|
||||
inputBlocks: "ইনপুট"
|
||||
specialBlocks: "বিশেষ"
|
||||
@@ -1277,11 +1362,249 @@ _pages:
|
||||
section: "বিভাগ"
|
||||
image: "ছবি"
|
||||
button: "বাটন"
|
||||
if: "যদি"
|
||||
_if:
|
||||
variable: "চলকগুলি"
|
||||
post: "নোট লিখুন"
|
||||
_post:
|
||||
text: "বিষয়বস্তু"
|
||||
attachCanvasImage: "ক্যানভাস ছবিসহ পোস্ট করুন"
|
||||
canvasId: "ক্যানভাস ID"
|
||||
textInput: "টেক্সট ইনপুট"
|
||||
_textInput:
|
||||
name: "চলকের নাম"
|
||||
text: "শিরোনাম"
|
||||
default: "ডিফল্ট মান"
|
||||
textareaInput: "একাধিক লাইনের টেক্সট ইনপুট"
|
||||
_textareaInput:
|
||||
name: "চলকের নাম"
|
||||
text: "শিরোনাম"
|
||||
default: "ডিফল্ট মান"
|
||||
numberInput: "সংখ্যা ইনপুট"
|
||||
_numberInput:
|
||||
name: "চলকের নাম"
|
||||
text: "শিরোনাম"
|
||||
default: "ডিফল্ট মান"
|
||||
canvas: "ক্যানভাস"
|
||||
_canvas:
|
||||
id: "ক্যানভাস ID"
|
||||
width: "প্রস্থ"
|
||||
height: "উচ্চতা"
|
||||
note: "এম্বেড নোট"
|
||||
_note:
|
||||
id: "নোট ID"
|
||||
idDescription: "আপনি এর বদলে নোটের URL পেস্ট করতে পারেন."
|
||||
detailed: "বিস্তারিত দেখুন"
|
||||
switch: "সুইচ"
|
||||
_switch:
|
||||
name: "চলকের নাম"
|
||||
text: "শিরোনাম"
|
||||
default: "ডিফল্ট মান"
|
||||
counter: "কাউন্টার"
|
||||
_counter:
|
||||
name: "চলকের নাম"
|
||||
text: "শিরোনাম"
|
||||
inc: "এভাবে মান বাড়ান"
|
||||
_button:
|
||||
text: "শিরোনাম"
|
||||
colored: "রঙ্গিন"
|
||||
action: "বাটনে ক্লিক করলে যা হবে"
|
||||
_action:
|
||||
dialog: "ডায়ালগ দেখান "
|
||||
_dialog:
|
||||
content: "বিষয়বস্তু"
|
||||
resetRandom: "র্যানডম সিড রিসেট করুন"
|
||||
pushEvent: "ইভেন্ট পাঠান"
|
||||
_pushEvent:
|
||||
event: "ইভেন্টের নাম"
|
||||
message: "চালু হলে প্রদর্শনের জন্য বার্তা"
|
||||
variable: "পাঠানো চলক"
|
||||
no-variable: "কিছুই না"
|
||||
callAiScript: "AiScript চালান"
|
||||
_callAiScript:
|
||||
functionName: "ফাংশনের নাম"
|
||||
radioButton: "বহুনির্বাচনী"
|
||||
_radioButton:
|
||||
name: "চলকের নাম"
|
||||
title: "শিরোনাম"
|
||||
values: "বিকল্পগুলিকে আলাদা লাইনে লিখুন"
|
||||
default: "ডিফল্ট মান"
|
||||
script:
|
||||
categories:
|
||||
flow: "নিয়ন্ত্রণ"
|
||||
logical: "লজিক্যাল অপারেশন"
|
||||
operation: "হিসাব-নিকাশ"
|
||||
comparison: "তুলনা"
|
||||
random: "র্যান্ডম"
|
||||
value: "মান"
|
||||
fn: "ফাংশন"
|
||||
text: "টেক্সট ম্যানিপুলেশন"
|
||||
convert: "রুপান্তর"
|
||||
list: "লিস্ট"
|
||||
blocks:
|
||||
text: "লেখা"
|
||||
multiLineText: "লেখা (একাধিক লাইন)"
|
||||
textList: "লেখার লিস্ট"
|
||||
_textList:
|
||||
info: "প্রতিটি এন্ট্রিকে আলাদা লাইনে লিখুন"
|
||||
strLen: "লেখার দৈর্ঘ্য"
|
||||
_strLen:
|
||||
arg1: "লেখা"
|
||||
strPick: "অক্ষর বের করে আনুন"
|
||||
_strPick:
|
||||
arg1: "লেখা"
|
||||
arg2: "অক্ষরের অবস্থান"
|
||||
strReplace: "লেখা প্রতিস্থাপন"
|
||||
_strReplace:
|
||||
arg1: "লেখা"
|
||||
arg2: "যে লেখা প্রতিস্থাপন করা হবে"
|
||||
arg3: "যা দ্বারা প্রতিস্থাপন করা হবে"
|
||||
strReverse: "লেখা উল্টান"
|
||||
_strReverse:
|
||||
arg1: "লেখা"
|
||||
join: "লেখা যুক্ত করুন"
|
||||
_join:
|
||||
arg1: "লিস্ট"
|
||||
arg2: "বিভাজক"
|
||||
add: "যোগ"
|
||||
_add:
|
||||
arg1: "A"
|
||||
arg2: "B"
|
||||
subtract: "বিয়োগ"
|
||||
_subtract:
|
||||
arg1: "A"
|
||||
arg2: "B"
|
||||
multiply: "গুন"
|
||||
_multiply:
|
||||
arg1: "A"
|
||||
arg2: "B"
|
||||
divide: "ভাগ"
|
||||
_divide:
|
||||
arg1: "A"
|
||||
arg2: "B"
|
||||
mod: "ভাগশেষ"
|
||||
_mod:
|
||||
arg1: "A"
|
||||
arg2: "B"
|
||||
round: "দশমিক রাউন্ড করুন"
|
||||
_round:
|
||||
arg1: "সংখ্যা"
|
||||
eq: "A ও B সমান"
|
||||
_eq:
|
||||
arg1: "A"
|
||||
arg2: "B"
|
||||
notEq: "A ও B সমান না"
|
||||
_notEq:
|
||||
arg1: "A"
|
||||
arg2: "B"
|
||||
and: "A এবং B"
|
||||
_and:
|
||||
arg1: "A"
|
||||
arg2: "B"
|
||||
or: "A অথবা B"
|
||||
_or:
|
||||
arg1: "A"
|
||||
arg2: "B"
|
||||
lt: "< A , B হতে কম"
|
||||
_lt:
|
||||
arg1: "A"
|
||||
arg2: "B"
|
||||
gt: "> A , B হতে বেশী"
|
||||
_gt:
|
||||
arg1: "A"
|
||||
arg2: "B"
|
||||
ltEq: "<= A , B হতে কম বা সমান"
|
||||
_ltEq:
|
||||
arg1: "A"
|
||||
arg2: "B"
|
||||
gtEq: ">= A , B হতে বেশী বা সমান"
|
||||
_gtEq:
|
||||
arg1: "A"
|
||||
arg2: "B"
|
||||
if: "যদি"
|
||||
_if:
|
||||
arg1: "যদি"
|
||||
arg2: "তাহলে"
|
||||
arg3: "তাছাড়া"
|
||||
not: "না"
|
||||
_not:
|
||||
arg1: "না"
|
||||
random: "র্যান্ডম"
|
||||
_random:
|
||||
arg1: "সম্ভাব্যতা"
|
||||
rannum: "র্যানডম সংখ্যা"
|
||||
_rannum:
|
||||
arg1: "ন্যূনতম মান"
|
||||
arg2: "সর্বোচ্চ মান"
|
||||
randomPick: "তালিকা থেকে দৈবচয়ন করুন"
|
||||
_randomPick:
|
||||
arg1: "লিস্ট"
|
||||
dailyRandom: "র্যান্ডম সংখ্যা (প্রতিটি ব্যবহারকারীর জন্য প্রতিদিন পরিবর্তীত হয়)"
|
||||
_dailyRandom:
|
||||
arg1: "সম্ভাব্যতা"
|
||||
dailyRannum: "র্যান্ডম সংখ্যা (প্রতিটি ব্যবহারকারীর জন্য প্রতিদিন পরিবর্তীত হয়)"
|
||||
_dailyRannum:
|
||||
arg1: "ন্যূনতম মান"
|
||||
arg2: "সর্বোচ্চ মান"
|
||||
dailyRandomPick: "তালিকা থেকে এলোমেলোভাবে নির্বাচন করুন (প্রতিটি ব্যবহারকারীর জন্য প্রতিদিন পরিবর্তীত হয়)"
|
||||
_dailyRandomPick:
|
||||
arg1: "লিস্ট"
|
||||
seedRandom: "র্যানডম (সীড দ্বারা)"
|
||||
_seedRandom:
|
||||
arg1: "সীড"
|
||||
arg2: "সম্ভাব্যতা"
|
||||
seedRannum: "র্যানডম সংখ্যা (সীড দ্বারা)"
|
||||
_seedRannum:
|
||||
arg1: "সীড"
|
||||
arg2: "ন্যূনতম মান"
|
||||
arg3: "সর্বোচ্চ মান"
|
||||
seedRandomPick: "তালিকা থেকে দৈবচয়ন করুন (সীড দ্বারা)"
|
||||
_seedRandomPick:
|
||||
arg1: "সীড"
|
||||
arg2: "লিস্ট"
|
||||
DRPWPM: "সম্ভাব্যতা সহ একটি তালিকা থেকে এলোমেলোভাবে নির্বাচন করুন (প্রতিটি ব্যবহারকারীর জন্য প্রতিদিন)"
|
||||
_DRPWPM:
|
||||
arg1: "লেখার লিস্ট"
|
||||
pick: "তালিকা থেকে নির্বাচন করুন"
|
||||
_pick:
|
||||
arg1: "লিস্ট"
|
||||
arg2: "অবস্থান"
|
||||
listLen: "লিস্টের দৈর্ঘ্য পান"
|
||||
_listLen:
|
||||
arg1: "লিস্ট"
|
||||
number: "সংখ্যা"
|
||||
stringToNumber: "পাঠ্য থেকে সংখ্যা"
|
||||
_stringToNumber:
|
||||
arg1: "লেখা"
|
||||
numberToString: "সংখ্যা থেকে পাঠ্য"
|
||||
_numberToString:
|
||||
arg1: "সংখ্যা"
|
||||
splitStrByLine: "পাঠ্যকে লাইনে বিভক্ত করুন"
|
||||
_splitStrByLine:
|
||||
arg1: "লেখা"
|
||||
ref: "চলক"
|
||||
aiScriptVar: "AiScript চলক"
|
||||
fn: "ফাংশন"
|
||||
_fn:
|
||||
slots: "স্লটগুলি"
|
||||
slots-info: "প্রতিটি স্লটকে আলাদা লাইনে লিখুন"
|
||||
arg1: "আউটপুট"
|
||||
for: "for-লুপ"
|
||||
_for:
|
||||
arg1: "কতবার চলবে"
|
||||
arg2: "অ্যাকশন"
|
||||
typeError: "স্লট {slot}, {expect} ধরনের মান গ্রহণ করে, কিন্তু {actual} ধরনের মান দেওয়া হয়েছে!"
|
||||
thereIsEmptySlot: "স্লট {slot} খালি!"
|
||||
types:
|
||||
string: "লেখা"
|
||||
number: "সংখ্যা"
|
||||
boolean: "ফ্ল্যাগ"
|
||||
array: "লিস্ট"
|
||||
stringArray: "লেখার লিস্ট"
|
||||
emptySlot: "খালি স্লট"
|
||||
enviromentVariables: "এনভাইরনমেন্ট ভ্যারিয়েবল"
|
||||
pageVariables: "পেজের চলক"
|
||||
argVariables: "ইনপুটের জায়গা"
|
||||
_relayStatus:
|
||||
requesting: "অপেক্ষমান"
|
||||
accepted: "অনুমোদিত"
|
||||
@@ -1292,9 +1615,13 @@ _notification:
|
||||
youGotReply: "{name} আপনাকে জবাব দিয়েছে"
|
||||
youGotQuote: "{name} আপনাকে উদ্ধৃত করেছে"
|
||||
youRenoted: "{name} এর Renote"
|
||||
youGotPoll: "{name} আপনার পোলে ভোট দিয়েছে"
|
||||
youGotMessagingMessageFromUser: "{name} আপনাকে মেসেজ করেছে"
|
||||
youGotMessagingMessageFromGroup: "{name} গ্রুপে একটি নতুন মেসেজ আছে"
|
||||
youWereFollowed: "আপনাকে অনুসরণ করছে"
|
||||
youReceivedFollowRequest: "অনুসরণ করার জন্য অনুরোধ পাওয়া গেছে"
|
||||
yourFollowRequestAccepted: "আপনার অনুসরণ করার অনুরোধ গৃহীত হয়েছে"
|
||||
youWereInvitedToGroup: "আপনি একটি গ্রুপে আমন্ত্রিত হয়েছেন"
|
||||
pollEnded: "পোলের ফলাফল দেখা যাবে"
|
||||
emptyPushNotificationMessage: "আপডেট করা পুশ বিজ্ঞপ্তি"
|
||||
_types:
|
||||
@@ -1305,9 +1632,11 @@ _notification:
|
||||
renote: "রিনোট"
|
||||
quote: "উদ্ধৃতি"
|
||||
reaction: "প্রতিক্রিয়া"
|
||||
pollVote: "পোলে ভোট আছে"
|
||||
pollEnded: "পোল শেষ"
|
||||
receiveFollowRequest: "প্রাপ্ত অনুসরণের অনুরোধসমূহ"
|
||||
followRequestAccepted: "গৃহীত অনুসরণের অনুরোধসমূহ"
|
||||
groupInvited: "গ্রুপের আমন্ত্রনসমূহ"
|
||||
app: "লিঙ্ক করা অ্যাপ থেকে বিজ্ঞপ্তি"
|
||||
_actions:
|
||||
followBack: "ফলো ব্যাক করেছে"
|
||||
@@ -1332,12 +1661,5 @@ _deck:
|
||||
tl: "টাইমলাইন"
|
||||
antenna: "অ্যান্টেনা"
|
||||
list: "লিস্ট"
|
||||
channel: "চ্যানেলগুলি"
|
||||
mentions: "উল্লেখসমূহ"
|
||||
direct: "ডাইরেক্ট নোটগুলি"
|
||||
_webhookSettings:
|
||||
name: "নাম"
|
||||
active: "চালু"
|
||||
_moderationLogTypes:
|
||||
suspend: "স্থগিত করা"
|
||||
resetPassword: "পাসওয়ার্ড রিসেট করুন"
|
||||
|
@@ -2,7 +2,6 @@
|
||||
_lang_: "Català"
|
||||
headlineMisskey: "Una xarxa connectada per notes"
|
||||
introMisskey: "Benvingut! Misskey és un servei de microblogging descentralitzat de codi obert.\nCrea \"notes\" per compartir els teus pensaments amb tots els que t'envolten. 📡\nAmb \"reaccions\", també pots expressar ràpidament els teus sentiments sobre les notes de tothom. 👍\nExplorem un món nou! 🚀"
|
||||
poweredByMisskeyDescription: "{name} És un del serveis (anomenats instàncies de Misskey) que utilitzen la plataforma de codi obert <b>Misskey</b>."
|
||||
monthAndDay: "{day}/{month}"
|
||||
search: "Cercar"
|
||||
notifications: "Notificacions"
|
||||
@@ -13,14 +12,12 @@ fetchingAsApObject: "Cercant en el Fediverse..."
|
||||
ok: "OK"
|
||||
gotIt: "Ho he entès!"
|
||||
cancel: "Cancel·lar"
|
||||
noThankYou: "No, gràcies"
|
||||
enterUsername: "Introdueix el teu nom d'usuari"
|
||||
renotedBy: "Impulsat per {usuari}"
|
||||
renotedBy: "Resignat per {usuari}"
|
||||
noNotes: "Cap nota"
|
||||
noNotifications: "Cap notificació"
|
||||
instance: "Servidor"
|
||||
instance: "Instàncies"
|
||||
settings: "Preferències"
|
||||
notificationSettings: "Paràmetres de notificacions"
|
||||
basicSettings: "Configuració bàsica"
|
||||
otherSettings: "Configuració avançada"
|
||||
openInWindow: "Obrir en una nova finestra"
|
||||
@@ -32,7 +29,7 @@ loggingIn: "Identificant-se"
|
||||
logout: "Tancar la sessió"
|
||||
signup: "Registrar-se"
|
||||
uploading: "Pujant..."
|
||||
save: "Desa"
|
||||
save: "Desar"
|
||||
users: "Usuaris"
|
||||
addUser: "Afegir un usuari"
|
||||
favorite: "Afegir a preferits"
|
||||
@@ -45,25 +42,16 @@ pin: "Fixar al perfil"
|
||||
unpin: "Para de fixar del perfil"
|
||||
copyContent: "Copiar el contingut"
|
||||
copyLink: "Copiar l'enllaç"
|
||||
copyLinkRenote: "Copiar l'enllaç de la renota"
|
||||
delete: "Elimina"
|
||||
deleteAndEdit: "Elimina i edita"
|
||||
deleteAndEditConfirm: "Segur que vols eliminar aquesta publicació i editar-la? Perdràs totes les reaccions, impulsos i respostes."
|
||||
delete: "Eliminar"
|
||||
deleteAndEdit: "Esborrar i editar"
|
||||
deleteAndEditConfirm: "Estàs segur que vols suprimir aquesta nota i editar-la? Perdràs totes les reaccions, notes i respostes."
|
||||
addToList: "Afegir a una llista"
|
||||
addToAntenna: "Afegir a l'antena"
|
||||
sendMessage: "Enviar un missatge"
|
||||
copyRSS: "Copiar RSS"
|
||||
copyUsername: "Copiar nom d'usuari"
|
||||
copyUserId: "Copiar ID d'usuari"
|
||||
copyNoteId: "Copiar ID de nota"
|
||||
copyFileId: "Copiar ID d'arxiu"
|
||||
copyFolderId: "Copiar ID de carpeta"
|
||||
copyProfileUrl: "Copiar URL del perfil"
|
||||
searchUser: "Cercar un usuari"
|
||||
searchUser: "Cercar usuaris"
|
||||
reply: "Respondre"
|
||||
loadMore: "Carregar més"
|
||||
showMore: "Veure més"
|
||||
showLess: "Mostra menys"
|
||||
youGotNewFollower: "t'ha seguit"
|
||||
receiveFollowRequest: "Sol·licitud de seguiment rebuda"
|
||||
followRequestAccepted: "Sol·licitud de seguiment acceptada"
|
||||
@@ -72,7 +60,7 @@ mentions: "Mencions"
|
||||
directNotes: "Notes directes"
|
||||
importAndExport: "Importar / Exportar"
|
||||
import: "Importar"
|
||||
export: "Exporta"
|
||||
export: "Exportar"
|
||||
files: "Fitxers"
|
||||
download: "Baixar"
|
||||
driveFileDeleteConfirm: "Estàs segur que vols suprimir el fitxer \"{name}\"? Les notes associades a aquest fitxer adjunt també se suprimiran."
|
||||
@@ -105,14 +93,12 @@ followRequests: "Sol·licituds de seguiment"
|
||||
unfollow: "Deixar de seguir"
|
||||
followRequestPending: "Sol·licituds de seguiment pendents"
|
||||
enterEmoji: "Introduir un emoji"
|
||||
renote: "Impulsa"
|
||||
unrenote: "Anul·la l'impuls"
|
||||
renoted: "S'ha impulsat"
|
||||
cantRenote: "No es pot impulsar aquesta publicació"
|
||||
cantReRenote: "No es pot impulsar l'impuls."
|
||||
quote: "Cita"
|
||||
inChannelRenote: "Renotar només al Canal"
|
||||
inChannelQuote: "Citar només al Canal"
|
||||
renote: "Renotar"
|
||||
unrenote: "Anul·lar renota"
|
||||
renoted: "Renotat."
|
||||
cantRenote: "Aquesta publicació no pot ser renotada."
|
||||
cantReRenote: "Impossible renotar una renota."
|
||||
quote: "Citar"
|
||||
pinnedNote: "Nota fixada"
|
||||
pinned: "Fixar al perfil"
|
||||
you: "Tu"
|
||||
@@ -120,13 +106,7 @@ clickToShow: "Fes clic per mostrar"
|
||||
sensitive: "NSFW"
|
||||
add: "Afegir"
|
||||
reaction: "Reaccions"
|
||||
reactions: "Reaccions"
|
||||
emojiPicker: "Selecció d'emojis"
|
||||
pinnedEmojisForReactionSettingDescription: "Selecciona l'emoji amb el qual reaccionar"
|
||||
pinnedEmojisSettingDescription: "Selecciona l'emoji amb el qual reaccionar"
|
||||
emojiPickerDisplay: "Visualitza el selector d'emojis"
|
||||
overwriteFromPinnedEmojisForReaction: "Reemplaça els emojis de la reacció"
|
||||
overwriteFromPinnedEmojis: "Sobreescriu des dels emojis fixats"
|
||||
reactionSetting: "Reaccions a mostrar al selector de reaccions"
|
||||
reactionSettingDescription2: "Arrossega per reordenar, fes clic per suprimir, prem \"+\" per afegir."
|
||||
rememberNoteVisibility: "Recorda la configuració de visibilitat de les notes"
|
||||
attachCancel: "Eliminar el fitxer adjunt"
|
||||
@@ -135,518 +115,83 @@ unmarkAsSensitive: "Deixar de marcar com a sensible"
|
||||
enterFileName: "Defineix nom del fitxer"
|
||||
mute: "Silencia"
|
||||
unmute: "Deixa de silenciar"
|
||||
renoteMute: "Silenciar Renotes"
|
||||
renoteUnmute: "Treure el silenci de les renotes"
|
||||
block: "Bloqueja"
|
||||
unblock: "Desbloqueja"
|
||||
suspend: "Suspèn"
|
||||
unsuspend: "Deixa de suspendre"
|
||||
blockConfirm: "Vols bloquejar?"
|
||||
unblockConfirm: "Vols desbloquejar-lo?"
|
||||
suspendConfirm: "Estàs segur que vols suspendre aquest compte?"
|
||||
unsuspendConfirm: "Estàs segur que vols treure la suspensió d'aquest compte?"
|
||||
selectList: "Tria una llista"
|
||||
editList: "Editar llista"
|
||||
selectChannel: "Selecciona un canal"
|
||||
selectAntenna: "Tria una antena"
|
||||
editAntenna: "Modificar antena"
|
||||
selectWidget: "Triar un giny"
|
||||
editWidgets: "Editar ginys"
|
||||
editWidgetsExit: "Fet"
|
||||
customEmojis: "Emojis personalitzats"
|
||||
emoji: "Emoji"
|
||||
emojis: "Emoji"
|
||||
emojiName: "Nom del emoji"
|
||||
emojiUrl: "URL del emoji"
|
||||
addEmoji: "Afegeix un emoji"
|
||||
settingGuide: "Configuració recomanada"
|
||||
cacheRemoteFiles: "Emmagatzemar fitxers remots"
|
||||
cacheRemoteFilesDescription: "Quan aquesta opció està desactivada, els fitxers remots es carreguen directament des del servidor remot. Si desactiveu això, es reduirà l'ús d'emmagatzematge, però augmentarà el trànsit, ja que no es generaran miniatures."
|
||||
youCanCleanRemoteFilesCache: "Pots netejar la memòria cau fent clic al botó de la paperera🗑️ a l'administrador d'arxius."
|
||||
cacheRemoteSensitiveFiles: "Posar a la memòria cau arxius remots sensibles"
|
||||
cacheRemoteSensitiveFilesDescription: "Quan aquesta opció és desactiva, els arxius remots sensibles es carregant directament del servidor d'origen sense que es guardin a la memòria cau."
|
||||
flagAsBot: "Marca aquest compte com a bot"
|
||||
flagAsBotDescription: "Marca aquest compte com a bot"
|
||||
flagAsCat: "Marca aquest compte com a gat"
|
||||
flagAsCatDescription: "Activeu aquesta opció per marcar aquest compte com a gat."
|
||||
flagShowTimelineReplies: "Mostra les respostes a la línia de temps"
|
||||
flagShowTimelineRepliesDescription: "Mostra les respostes a la línia de temps"
|
||||
autoAcceptFollowed: "Aprova automàticament les sol·licituds de seguiment dels usuaris que segueixes"
|
||||
addAccount: "Afegeix un compte"
|
||||
reloadAccountsList: "Recarregar la llista de contactes"
|
||||
loginFailed: "S'ha produït un error al accedir."
|
||||
showOnRemote: "Navega més en el perfil original"
|
||||
general: "General"
|
||||
wallpaper: "Fons de Pantalla"
|
||||
setWallpaper: "Defineix el fons de pantalla"
|
||||
removeWallpaper: "Elimina el fons de pantalla"
|
||||
searchWith: "Cerca: {q}"
|
||||
youHaveNoLists: "No tens cap llista"
|
||||
followConfirm: "Estàs segur que vols deixar de seguir {name}?"
|
||||
proxyAccount: "Compte de proxy"
|
||||
proxyAccountDescription: "Un compte proxy és un compte que actua com a seguidor remot per als usuaris en determinades condicions. Per exemple, quan un usuari afegeix un usuari remot a la llista, l'activitat de l'usuari remot no es lliurarà al servidor si cap usuari local segueix aquest usuari, de manera que el compte proxy el seguirà."
|
||||
host: "Amfitrió"
|
||||
selectUser: "Selecciona usuari/a"
|
||||
recipient: "Destinatari"
|
||||
annotation: "Comentaris"
|
||||
federation: "Federació"
|
||||
instances: "Servidors"
|
||||
registeredAt: "Registrat a"
|
||||
latestRequestReceivedAt: "Última petició rebuda"
|
||||
latestStatus: "Últim estat"
|
||||
storageUsage: "Emmagatzematge utilitzat"
|
||||
charts: "Gràfics"
|
||||
perHour: "Per hora"
|
||||
perDay: "Per dia"
|
||||
stopActivityDelivery: "Deixa d'enviar activitats"
|
||||
blockThisInstance: "Deixa d'enviar activitats"
|
||||
silenceThisInstance: "Silencia aquesta instància "
|
||||
operations: "Accions"
|
||||
software: "Programari"
|
||||
version: "Versió"
|
||||
metadata: "Metadades"
|
||||
withNFiles: "{n} fitxer(s)"
|
||||
monitor: "Monitor"
|
||||
jobQueue: "Cua de tasques"
|
||||
cpuAndMemory: "CPU i memòria"
|
||||
network: "Xarxa"
|
||||
disk: "Disc"
|
||||
instanceInfo: "Informació del fitxer d'instal·lació"
|
||||
statistics: "Estadístiques"
|
||||
clearQueue: "Esborrar la cua"
|
||||
clearQueueConfirmTitle: "Esteu segur que voleu esborrar la cua?"
|
||||
clearQueueConfirmText: "Les notes no lliurades que quedin a la cua no es federaran. Normalment aquesta operació no és necessària."
|
||||
clearCachedFiles: "Esborra la memòria cau"
|
||||
clearCachedFilesConfirm: "Segur que voleu eliminar tots els fitxers de la memòria cau?"
|
||||
blockedInstances: "Instàncies bloquejades"
|
||||
blockedInstancesDescription: "Llista els enllaços d'amfitrió de les instàncies que vols bloquejar separades per un salt de pàgina. Les instàncies llistades no podran comunicar-se amb aquesta instància."
|
||||
silencedInstances: "Instàncies silenciades"
|
||||
silencedInstancesDescription: "Llista els enllaços d'amfitrió de les instàncies que vols silenciar. Tots els comptes de les instàncies llistades s'establiran com silenciades i només podran fer sol·licitacions de seguiment, i no podran mencionar als comptes locals si no els segueixen. Això no afectarà les instàncies bloquejades."
|
||||
muteAndBlock: "Silencia i bloca"
|
||||
mutedUsers: "Usuaris silenciats"
|
||||
blockedUsers: "Usuaris bloquejats"
|
||||
noUsers: "No hi ha usuaris"
|
||||
editProfile: "Edita el perfil"
|
||||
noteDeleteConfirm: "Segur que voleu eliminar aquesta publicació?"
|
||||
pinLimitExceeded: "No podeu fixar més publicacions"
|
||||
intro: "La instal·lació de Misskey ha acabat! Crea un usuari d'administrador."
|
||||
done: "Fet"
|
||||
processing: "S'està processant..."
|
||||
preview: "Vista prèvia"
|
||||
default: "Per defecte"
|
||||
defaultValueIs: "Per defecte: {value}"
|
||||
noCustomEmojis: "Cap emoji personalitzat"
|
||||
noJobs: "No hi ha feines"
|
||||
federating: "Federant"
|
||||
blocked: "Bloquejat"
|
||||
suspended: "Suspés"
|
||||
all: "tot"
|
||||
subscribing: "Subscrit a"
|
||||
publishing: "S'està publicant"
|
||||
notResponding: "Sense resposta"
|
||||
instanceFollowing: "Seguits del servidor"
|
||||
instanceFollowers: "Seguidors del servidor"
|
||||
instanceUsers: "Usuaris del servidor"
|
||||
changePassword: "Canvia la contrasenya"
|
||||
security: "Seguretat"
|
||||
retypedNotMatch: "L'entrada no coincideix"
|
||||
currentPassword: "Contrasenya actual"
|
||||
newPassword: "Contrasenya nova"
|
||||
newPasswordRetype: "Contrasenya nou (repeteix-la)"
|
||||
attachFile: "Adjunta fitxers"
|
||||
more: "Més"
|
||||
featured: "Destacat"
|
||||
usernameOrUserId: "Nom o ID d'usuari"
|
||||
noSuchUser: "No s'ha trobat l'usuari"
|
||||
lookup: "Cerca"
|
||||
announcements: "Anuncis"
|
||||
imageUrl: "URL de la imatge"
|
||||
instances: "Instàncies"
|
||||
remove: "Eliminar"
|
||||
removed: "Eliminat"
|
||||
removeAreYouSure: "Segur que voleu retirar «{x}»?"
|
||||
deleteAreYouSure: "Segur que voleu retirar «{x}»?"
|
||||
resetAreYouSure: "Segur que voleu restablir-ho?"
|
||||
areYouSure: "Està segur?"
|
||||
saved: "S'ha desat"
|
||||
messaging: "Xat"
|
||||
upload: "Puja"
|
||||
keepOriginalUploading: "Guarda la imatge original"
|
||||
keepOriginalUploadingDescription: "Guarda la imatge pujada com hi és. Si està apagat, una versió per a la visualització a la xarxa serà generada quan sigui pujada."
|
||||
fromDrive: "Des de la unitat"
|
||||
fromUrl: "Des d'un enllaç"
|
||||
uploadFromUrl: "Carrega des d'un enllaç"
|
||||
uploadFromUrlDescription: "Enllaç del fitxer que vols carregar"
|
||||
uploadFromUrlRequested: "Càrrega sol·licitada"
|
||||
uploadFromUrlMayTakeTime: "La càrrega des de l'enllaç pot prendre un temps"
|
||||
explore: "Explora"
|
||||
messageRead: "Vist"
|
||||
noMoreHistory: "No hi resta més per veure"
|
||||
startMessaging: "Començar a xatejar"
|
||||
nUsersRead: "Vist per {n}"
|
||||
agreeTo: "Accepto que {0}"
|
||||
agree: "Hi estic d'acord"
|
||||
agreeBelow: "Hi estic d'acord amb el següent"
|
||||
basicNotesBeforeCreateAccount: "Notes importants"
|
||||
termsOfService: "Condicions d'ús"
|
||||
start: "Comença"
|
||||
home: "Inici"
|
||||
remoteUserCaution: "Ja que aquest usuari resideix a una instància remota, la informació mostrada es podria trobar incompleta."
|
||||
activity: "Activitat"
|
||||
images: "Imatges"
|
||||
image: "Imatges"
|
||||
birthday: "Aniversari"
|
||||
yearsOld: "{age} anys"
|
||||
registeredDate: "Data de registre"
|
||||
location: "Ubicació"
|
||||
theme: "Tema"
|
||||
themeForLightMode: "Tema del mode clar"
|
||||
themeForDarkMode: "Tema del mode fosc"
|
||||
light: "Clar"
|
||||
dark: "Fosc"
|
||||
lightThemes: "Temes clars"
|
||||
darkThemes: "Temes foscos"
|
||||
syncDeviceDarkMode: "Sincronitza el mode fosc amb la configuració del dispositiu"
|
||||
drive: "Unitat"
|
||||
fileName: "Nom del Fitxer"
|
||||
selectFile: "Selecciona fitxers"
|
||||
selectFiles: "Selecciona fitxers"
|
||||
selectFolder: "Selecció de carpeta"
|
||||
selectFolders: "Selecció de carpeta"
|
||||
renameFile: "Canvia el nom del fitxer"
|
||||
folderName: "Nom de la carpeta"
|
||||
createFolder: "Crea una carpeta"
|
||||
renameFolder: "Canvia el nom de la carpeta"
|
||||
deleteFolder: "Elimina la carpeta"
|
||||
folder: "Carpeta "
|
||||
addFile: "Afegeix un fitxer"
|
||||
emptyDrive: "La teva unitat és buida"
|
||||
emptyFolder: "La carpeta està buida"
|
||||
unableToDelete: "No es pot eliminar"
|
||||
inputNewFileName: "Introduïu el nom de fitxer nou"
|
||||
inputNewDescription: "Inserta una nova llegenda"
|
||||
inputNewFolderName: "Introduïu el nom de la carpeta nova"
|
||||
circularReferenceFolder: "La carpeta destinatària és una subcarpeta de la carpeta a la qual la desitges moure"
|
||||
hasChildFilesOrFolders: "No és possible esborrar aquesta carpeta ja que no és buida"
|
||||
copyUrl: "Copia l'URL"
|
||||
rename: "Canvia el nom"
|
||||
avatar: "Icona"
|
||||
banner: "Bàner"
|
||||
displayOfSensitiveMedia: "Visualització de contingut sensible"
|
||||
whenServerDisconnected: "Quan es perdi la connexió al servidor"
|
||||
disconnectedFromServer: "Desconnectat pel servidor"
|
||||
reload: "Actualitza"
|
||||
doNothing: "Ignora"
|
||||
accept: "Accepta"
|
||||
normal: "Nomal"
|
||||
instanceName: "Nom del servidor"
|
||||
instanceDescription: "Descripció del servidor"
|
||||
maintainerName: "Nom de l'administrador"
|
||||
maintainerEmail: "Correu electrònic de l'administrador"
|
||||
tosUrl: "URL de les Condicions d'ús"
|
||||
thisYear: "Enguany"
|
||||
thisMonth: "Aquest mes"
|
||||
today: "Avui"
|
||||
dayX: "{day}"
|
||||
monthX: "{month}"
|
||||
yearX: "{year}"
|
||||
pages: "Pàgines"
|
||||
integration: "Integració"
|
||||
connectService: "Connecta"
|
||||
disconnectService: "Desconnecta"
|
||||
enableLocalTimeline: "Activa la línia de temps local"
|
||||
enableGlobalTimeline: "Activa la línia de temps global"
|
||||
registration: "Registre"
|
||||
invite: "Convida"
|
||||
basicInfo: "Informació bàsica"
|
||||
pinnedUsers: "Usuaris fixats"
|
||||
nsfw: "NSFW"
|
||||
pinnedNotes: "Nota fixada"
|
||||
turnstile: "Turnstile"
|
||||
enableTurnstile: "Activar Turnstile"
|
||||
turnstileSiteKey: "Clau del lloc"
|
||||
turnstileSecretKey: "Clau secreta"
|
||||
antennas: "Antena"
|
||||
manageAntennas: "Gestiona les antenes"
|
||||
antennaSource: "Font de l'antena"
|
||||
antennaKeywords: "Paraules clau a seguir"
|
||||
antennaExcludeKeywords: "Paraules clau a excloure"
|
||||
antennaKeywordsDescription: "Separar amb espais per la condició AND o amb salts de línia per la condició OR."
|
||||
notifyAntenna: "Notifica'm les publicacions noves"
|
||||
withFileAntenna: "Només les publicacions amb fitxers"
|
||||
antennaUsersDescription: "Llistar un nom d'usuari per línia"
|
||||
notesAndReplies: "Amb respostes"
|
||||
silence: "Silencia"
|
||||
silenceConfirm: "Segur que vols silenciar aquest usuari?"
|
||||
unsilence: "Deixa de silenciar"
|
||||
unsilenceConfirm: "Segur que vols deixar de silenciar aquest usuari?"
|
||||
popularUsers: "Usuaris populars"
|
||||
recentlyUpdatedUsers: "Usuaris actius fa poc"
|
||||
recentlyRegisteredUsers: "Usuaris nous"
|
||||
recentlyDiscoveredUsers: "Usuaris descoberts fa poc"
|
||||
exploreUsersCount: "Hi ha {count} usuaris"
|
||||
exploreFediverse: "Explora el fedivers"
|
||||
popularTags: "Etiquetes populars"
|
||||
userList: "Llistes"
|
||||
about: "Informació"
|
||||
aboutMisskey: "Quant a Misskey"
|
||||
administrator: "Administrador/a"
|
||||
moderator: "Moderador/a"
|
||||
moderation: "Moderació"
|
||||
nUsersMentioned: "{n} usuaris mencionats"
|
||||
securityKey: "Clau de seguretat"
|
||||
unregister: "Cancel·la el registre"
|
||||
passwordLessLogin: "Inici de sessió sense contrasenya"
|
||||
resetPassword: "Restableix la contrasenya"
|
||||
newPasswordIs: "La contrasenya nova és «{password}»"
|
||||
reduceUiAnimation: "Redueix les animacions de la interfície"
|
||||
share: "Comparteix"
|
||||
notFound: "No s'ha trobat"
|
||||
markAsReadAllUnreadNotes: "Marca-ho tot com a llegit"
|
||||
help: "Ajuda"
|
||||
invites: "Convida"
|
||||
title: "Títol"
|
||||
text: "Text"
|
||||
enable: "Habilita"
|
||||
next: "Següent"
|
||||
retype: "Torneu a introduir-la"
|
||||
noteOf: "Publicació de: {user}"
|
||||
quoteAttached: "Frase adjunta"
|
||||
quoteQuestion: "Vols annexar-la com a cita?"
|
||||
noMessagesYet: "Encara no hi ha missatges"
|
||||
newMessageExists: "Has rebut un nou missatge"
|
||||
onlyOneFileCanBeAttached: "Només pots adjuntar un fitxer a un missatge"
|
||||
signinRequired: "Si us plau, Registra't o inicia la sessió abans de continuar"
|
||||
invitations: "Convida"
|
||||
invitationCode: "Codi d'invitació"
|
||||
checking: "Comprovació en curs..."
|
||||
available: "Disponible"
|
||||
unavailable: "No és disponible"
|
||||
usernameInvalidFormat: "Pots fer servir lletres (majúscules i minúscules), números i barres baixes (\"_\")"
|
||||
tooShort: "Massa curt"
|
||||
tooLong: "Massa llarg"
|
||||
weakPassword: "Contrasenya insegura"
|
||||
normalPassword: "Bona contrasenya"
|
||||
strongPassword: "Contrasenya segura"
|
||||
passwordMatched: "Correcte!"
|
||||
passwordNotMatched: "No coincideix"
|
||||
signinWith: "Inicia sessió amb amb {x}"
|
||||
signinFailed: "Autenticació sense èxit. Intenta-ho un altre cop utilitzant la contrasenya i el nom correctes."
|
||||
or: "O"
|
||||
language: "Idioma"
|
||||
uiLanguage: "Idioma de l'interfície"
|
||||
aboutX: "Respecte a {x}"
|
||||
emojiStyle: "Estil d'emoji"
|
||||
native: "Nadiu"
|
||||
disableDrawer: "No mostrar els menús en calaixos"
|
||||
showNoteActionsOnlyHover: "Només mostra accions de la nota en passar amb el cursor"
|
||||
noHistory: "No hi ha un registre previ"
|
||||
signinHistory: "Historial d'autenticacions"
|
||||
enableAdvancedMfm: "Habilitar l'MFM avançat"
|
||||
enableAnimatedMfm: "Habilitar l'MFM amb moviment"
|
||||
doing: "Processant..."
|
||||
category: "Categoria"
|
||||
tags: "Etiquetes"
|
||||
docSource: "Font del document"
|
||||
createAccount: "Crea un compte"
|
||||
existingAccount: "Compte existent"
|
||||
regenerate: "Regenera"
|
||||
fontSize: "Mida del text"
|
||||
mediaListWithOneImageAppearance: "Altura de la llista de fitxers amb una única imatge"
|
||||
limitTo: "Limita a {x}"
|
||||
noFollowRequests: "No tens sol·licituds de seguiment"
|
||||
openImageInNewTab: "Obre imatges a una nova pestanya"
|
||||
dashboard: "Panell de control"
|
||||
local: "Local"
|
||||
remote: "Remot"
|
||||
total: "Total"
|
||||
weekOverWeekChanges: "Canvis l'última setmana"
|
||||
dayOverDayChanges: "Canvis ahir"
|
||||
appearance: "Aparença"
|
||||
clientSettings: "Configuració del client"
|
||||
accountSettings: "Configuració del compte"
|
||||
promotion: "Promocionat"
|
||||
promote: "Promoure"
|
||||
numberOfDays: "Nombre de dies"
|
||||
hideThisNote: "Amaga la publicació"
|
||||
showFeaturedNotesInTimeline: "Mostra publicacions destacades en la línia de temps"
|
||||
objectStorage: "Emmagatzematge d'objectes\n"
|
||||
useObjectStorage: "Utilitzar l'emmagatzematge d'objectes"
|
||||
objectStorageBaseUrl: "Base d'enllaç"
|
||||
objectStorageBaseUrlDesc: "Prefix d'enllaç utilitzat per a fer referencia als fitxers. Especifica l'enllaç del teu CDN o Proxy si n'estàs utilitzant qualsevol, en cas contrari, especifica l'enllaç al que es pot accedir públicament segons la guia de servei que vosté utilitza.\nPer l'ús d'S3 utilitza 'https://<bucket>.s3.amazonaws.com' I per a GCS o serveis equivalents utilitza 'https://storage.googleapis.com/<bucket>'."
|
||||
newNoteRecived: "Hi ha publicacions noves"
|
||||
installedDate: "Data d'instal·lació"
|
||||
state: "Estat"
|
||||
sort: "Ordena"
|
||||
ascendingOrder: "Ascendent"
|
||||
descendingOrder: "Descendent"
|
||||
removeAllFollowing: "Deixar de seguir tots els usuaris seguits"
|
||||
removeAllFollowingDescription: "El fet d'executar això, et farà deixar de seguir a tots els usuaris de {host}. Si us plau, executa això si l'amfitrió, per exemple, ja no existeix."
|
||||
userSuspended: "Aquest usuari ha sigut suspès"
|
||||
userSilenced: "Aquest usuari està sent silenciat"
|
||||
yourAccountSuspendedTitle: "Aquest compte és suspès"
|
||||
yourAccountSuspendedDescription: "Aquest compte ha sigut suspès a causa de la violació de les condicions d'ús o similars. Contacta l'administrador si en vol saber més. Si us plau, no en faci un altre compte."
|
||||
tokenRevoked: "Codi de seguretat no vàlid"
|
||||
tokenRevokedDescription: "La petició més recent ha estat denegada perquè contenia un codi de seguretat no vàlid. Actualitza la pàgina i torna-ho a provar."
|
||||
accountDeleted: "Compte eliminat amb èxit"
|
||||
accountDeletedDescription: "Aquest compte ha sigut eliminat"
|
||||
menu: "Menú"
|
||||
divider: "Divisor"
|
||||
addItem: "Afegir element"
|
||||
rearrange: "Torna a ordenar"
|
||||
relays: "Relés"
|
||||
addRelay: "Afegeix relés"
|
||||
inboxUrl: "Enllaç de la safata d'entrada"
|
||||
addedRelays: "Relés afegits"
|
||||
serviceworkerInfo: "És obligatòria l'activació per a obtenir notificacions push"
|
||||
deletedNote: "Publicacions eliminades"
|
||||
invisibleNote: "Publicacions amagades"
|
||||
enableInfiniteScroll: "Carrega més automàticament\n"
|
||||
visibility: "Visibilitat"
|
||||
poll: "Enquesta"
|
||||
useCw: "Amaga el contingut"
|
||||
enablePlayer: "Obre el reproductor de vídeo"
|
||||
disablePlayer: "Tanca el reproductor de vídeo"
|
||||
expandTweet: "Expandir post"
|
||||
themeEditor: "Editor de temes"
|
||||
description: "Descripció"
|
||||
describeFile: "Afegir subtitulació"
|
||||
enterFileDescription: "Afegeix un títol"
|
||||
author: "Autor"
|
||||
leaveConfirm: "Hi ha canvis sense guardar. Els vols descartar?"
|
||||
manage: "Administració"
|
||||
plugins: "Extensions"
|
||||
preferencesBackups: "Configuracions de les Còpies de seguretat"
|
||||
deck: "Escriptori"
|
||||
undeck: "Tanca l'escriptori"
|
||||
useBlurEffectForModal: "Utilitzar l'efecte de difuminació a modals"
|
||||
useFullReactionPicker: "Utilitza el cercador de reaccions d'escala sencera"
|
||||
width: "Amplada"
|
||||
height: "Alçària"
|
||||
large: "Gran"
|
||||
medium: "Mitjà"
|
||||
small: "Petit"
|
||||
generateAccessToken: "Genera codi d'accés"
|
||||
permission: "Permisos"
|
||||
enableAll: "Habilita tot"
|
||||
disableAll: "Deshabilita tot"
|
||||
tokenRequested: "Donar accés al compte"
|
||||
smtpHost: "Amfitrió"
|
||||
smtpUser: "Nom d'usuari"
|
||||
smtpPass: "Contrasenya"
|
||||
renotesCount: "Impulsos fets"
|
||||
renotedCount: "Impulsos rebuts"
|
||||
clearCache: "Esborra la memòria cau"
|
||||
showingPastTimeline: "Estàs veient una línia de temps antiga"
|
||||
info: "Informació"
|
||||
user: "Usuaris"
|
||||
administration: "Administració"
|
||||
middle: "Mitjà"
|
||||
global: "Global"
|
||||
searchByGoogle: "Cercar"
|
||||
file: "Fitxers"
|
||||
icon: "Icona"
|
||||
replies: "Respondre"
|
||||
renotes: "Impulsa"
|
||||
_role:
|
||||
_priority:
|
||||
middle: "Mitjà"
|
||||
_options:
|
||||
antennaMax: "Nombre màxim d'antenes"
|
||||
_email:
|
||||
_follow:
|
||||
title: "t'ha seguit"
|
||||
_instanceMute:
|
||||
instanceMuteDescription: "Silencia tots els impulsos dels servidors seleccionats, també els usuaris que responen a altres d'un servidor silenciat."
|
||||
_mfm:
|
||||
mention: "Menció"
|
||||
quote: "Citar"
|
||||
search: "Cercar"
|
||||
_theme:
|
||||
description: "Descripció"
|
||||
keys:
|
||||
mention: "Menció"
|
||||
renote: "Renotar"
|
||||
divider: "Divisor"
|
||||
_sfx:
|
||||
note: "Notes"
|
||||
notification: "Notificacions"
|
||||
antenna: "Antenes"
|
||||
_2fa:
|
||||
renewTOTPCancel: "No, gràcies"
|
||||
_antennaSources:
|
||||
all: "Totes les publicacions"
|
||||
homeTimeline: "Publicacions dels usuaris seguits"
|
||||
users: "Publicacions d'usuaris específics"
|
||||
userList: "Publicacions d'una llista d'usuaris"
|
||||
step2Url: "També pots inserir aquest enllaç i utilitzes una aplicació d'escriptori:"
|
||||
_widgets:
|
||||
profile: "Perfil"
|
||||
instanceInfo: "Informació del fitxer d'instal·lació"
|
||||
notifications: "Notificacions"
|
||||
timeline: "Línia de temps"
|
||||
activity: "Activitat"
|
||||
federation: "Federació"
|
||||
jobQueue: "Cua de tasques"
|
||||
_userList:
|
||||
chooseList: "Tria una llista"
|
||||
_cw:
|
||||
show: "Carregar més"
|
||||
_visibility:
|
||||
home: "Inici"
|
||||
followers: "Seguidors"
|
||||
_profile:
|
||||
username: "Nom d'usuari"
|
||||
_exportOrImport:
|
||||
allNotes: "Totes les publicacions"
|
||||
followingList: "Seguint"
|
||||
muteList: "Silencia"
|
||||
blockingList: "Bloqueja"
|
||||
userLists: "Llistes"
|
||||
_charts:
|
||||
federation: "Federació"
|
||||
_timelines:
|
||||
home: "Inici"
|
||||
local: "Local"
|
||||
social: "Social"
|
||||
global: "Global"
|
||||
_play:
|
||||
summary: "Descripció"
|
||||
_pages:
|
||||
contents: "Contingut"
|
||||
blocks:
|
||||
image: "Imatges"
|
||||
_note:
|
||||
id: "ID de la publicació"
|
||||
detailed: "Mostra els detalls"
|
||||
script:
|
||||
categories:
|
||||
list: "Llistes"
|
||||
blocks:
|
||||
_join:
|
||||
arg1: "Llistes"
|
||||
_randomPick:
|
||||
arg1: "Llistes"
|
||||
_dailyRandomPick:
|
||||
arg1: "Llistes"
|
||||
_seedRandomPick:
|
||||
arg2: "Llistes"
|
||||
_pick:
|
||||
arg1: "Llistes"
|
||||
_listLen:
|
||||
arg1: "Llistes"
|
||||
types:
|
||||
array: "Llistes"
|
||||
_notification:
|
||||
youRenoted: "Impulsat per {name}"
|
||||
youWereFollowed: "t'ha seguit"
|
||||
unreadAntennaNote: "Antena {name}"
|
||||
_types:
|
||||
all: "Tots"
|
||||
follow: "Seguint"
|
||||
mention: "Menció"
|
||||
renote: "Renotar"
|
||||
quote: "Citar"
|
||||
reaction: "Reaccions"
|
||||
_actions:
|
||||
followBack: "t'ha seguit també"
|
||||
reply: "Respondre"
|
||||
renote: "Renotar"
|
||||
_deck:
|
||||
columnAlign: "Alinea les columnes"
|
||||
addColumn: "Afig una columna"
|
||||
swapLeft: "Mou a l’esquerra"
|
||||
swapRight: "Mou a la dreta"
|
||||
swapUp: "Mou cap amunt"
|
||||
swapDown: "Mou cap avall"
|
||||
popRight: "Col·loca a la dreta"
|
||||
profile: "Perfil"
|
||||
newProfile: "Perfil nou"
|
||||
deleteProfile: "Elimina el perfil"
|
||||
_columns:
|
||||
main: "Principal"
|
||||
widgets: "Ginys"
|
||||
notifications: "Notificacions"
|
||||
tl: "Línia de temps"
|
||||
antenna: "Antena"
|
||||
list: "Llistes"
|
||||
mentions: "Mencions"
|
||||
direct: "Publicacions directes"
|
||||
_moderationLogTypes:
|
||||
suspend: "Suspèn"
|
||||
resetPassword: "Restableix la contrasenya"
|
||||
|
1440
locales/cs-CZ.yml
1440
locales/cs-CZ.yml
File diff suppressed because it is too large
Load Diff
1314
locales/de-DE.yml
1314
locales/de-DE.yml
File diff suppressed because it is too large
Load Diff
@@ -1,397 +0,0 @@
|
||||
---
|
||||
_lang_: "Ελληνικά"
|
||||
monthAndDay: "{day}/{month}"
|
||||
search: "Αναζήτηση"
|
||||
notifications: "Ειδοποιήσεις"
|
||||
username: "Όνομα μέλους"
|
||||
password: "Κωδικός πρόσβασης"
|
||||
forgotPassword: "Ξέχασα τον κωδικό πρόσβασης"
|
||||
fetchingAsApObject: "Μαζεύοντας από το Fediverse..."
|
||||
ok: "Εντάξει"
|
||||
gotIt: "Τό'πιασα!"
|
||||
cancel: "Ακύρωση"
|
||||
enterUsername: "Εισάγετε το όνομα μέλους"
|
||||
renotedBy: "Κοινοποιήθηκε από {user}"
|
||||
noNotes: "Δεν υπάρχουν σημειώματα"
|
||||
noNotifications: "Δεν υπάρχουν ειδοποιήσεις"
|
||||
settings: "Ρυθμίσεις"
|
||||
basicSettings: "Βασικές ρυθμίσεις"
|
||||
otherSettings: "Άλλες ρυθμίσεις"
|
||||
openInWindow: "Άνοιγμα σε παράθυρο"
|
||||
profile: "Προφίλ"
|
||||
timeline: "Χρονολόγιο"
|
||||
noAccountDescription: "Αυτό το μέλος δεν έχει γράψει βιογραφικό ακόμη."
|
||||
login: "Σύνδεση"
|
||||
loggingIn: "Συνδέεστε"
|
||||
logout: "Αποσύνδεση"
|
||||
signup: "Δημιουργία λογαριασμού"
|
||||
uploading: "Ανέβασμα..."
|
||||
save: "Αποθήκευση"
|
||||
users: "Μέλη"
|
||||
addUser: "Προσθήκη μέλους"
|
||||
favorite: "Προσθήκη στα αγαπημένα"
|
||||
favorites: "Αγαπημένα"
|
||||
unfavorite: "Αφαίρεση από αγαπημένα"
|
||||
favorited: "Προστέθηκε στα αγαπημένα."
|
||||
alreadyFavorited: "Έχει ήδη προστεθεί στα αγαπημένα."
|
||||
cantFavorite: "Αδυναμία προσθήκης στα αγαπημένα."
|
||||
pin: "Καρφίτσωμα στο προφίλ"
|
||||
unpin: "Ξεκαρφίτσωμα από το προφίλ"
|
||||
copyContent: "Αντιγραφή περιεχομένων"
|
||||
copyLink: "Αντιγραφή συνδέσμου"
|
||||
delete: "Διαγραφή"
|
||||
deleteAndEdit: "Διαγραφή και επεξεργασία"
|
||||
deleteAndEditConfirm: "Σίγουρα θέλετε να διαγράψετε αυτό το σημείωμα και να το επεξεργαστείτε; Θα χάσετε όλες τις αντιδράσεις, κοινοποιήσεις και απαντήσεις σε αυτό."
|
||||
addToList: "Προσθήκη στη λίστα"
|
||||
sendMessage: "Αποστολή μηνύματος"
|
||||
copyUsername: "Αντιγραφή ονόματος μέλους"
|
||||
searchUser: "Αναζήτηση μέλους"
|
||||
reply: "Απάντηση"
|
||||
loadMore: "Φόρτωσε περισσότερα"
|
||||
showMore: "Δείξε περισσότερα"
|
||||
showLess: "Κλείσιμο"
|
||||
youGotNewFollower: "σε ακολούθησε"
|
||||
receiveFollowRequest: "Λάβατε αίτημα ακολούθησης"
|
||||
followRequestAccepted: "Το αίτημα ακολούθησης έγινε δεκτό"
|
||||
mention: "Επισήμανση"
|
||||
mentions: "Επισημάνσεις"
|
||||
directNotes: "Απευθείας σημειώματα"
|
||||
importAndExport: "Εισαγωγή / Εξαγωγή"
|
||||
import: "Εισαγωγή"
|
||||
export: "Εξαγωγή"
|
||||
files: "Αρχεία"
|
||||
download: "Λήψη"
|
||||
driveFileDeleteConfirm: "Θέλετε σίγουρα να διαγράψετε το αρχείο \"{name}\"; Τα σημειώματα με αυτό το συνημμένο αρχείο επίσης θα διαγραφούν."
|
||||
unfollowConfirm: "Θέλετε σίγουρα να σταματήσετε να ακολουθείτε το μέλος {name};"
|
||||
exportRequested: "Ζητήσατε μία εξαγωγή. Αυτό μπορεί να πάρει κάποιον χρόνο. Επίσης θα προστεθεί στον Δίσκο σας μόλις ολοκληρωθεί."
|
||||
importRequested: "Ζητήσατε μία εισαγωγή. Αυτό μπορεί να πάρει κάποιον χρόνο."
|
||||
lists: "Λίστες"
|
||||
noLists: "Δεν έχετε λίστες"
|
||||
note: "Σημείωμα"
|
||||
notes: "Σημειώματα"
|
||||
following: "Ακολουθεί"
|
||||
followers: "Ακολουθούν"
|
||||
followsYou: "Σε ακολουθεί"
|
||||
createList: "Δημιουργία λίστας"
|
||||
manageLists: "Διαχείριση λιστών"
|
||||
error: "Σφάλμα"
|
||||
somethingHappened: "Προέκυψε ένα σφάλμα"
|
||||
retry: "Προσπάθεια ξανά"
|
||||
pageLoadError: "Ένα σφάλμα προέκυψε φορτώνοντας τη σελίδα."
|
||||
pageLoadErrorDescription: "Αυτό κανονικά προκαλείται από σφάλματα δικτύου ή από την προσωρινή μνήμη του προγράμματος περιήγησης. Δοκιμάστε να σβήσετε την προσωρινή μνήμη (cache) και ξαναδοκιμάστε μετά από λίγο."
|
||||
serverIsDead: "Αυτός ο server δεν αποκρίνεται. Παρακαλώ περιμέντε λίγο και δοκιμάστε ξανά."
|
||||
youShouldUpgradeClient: "Για να δείτε αυτή τη σελίδα, παρακαλώ επαναφορτώστε για να ενημερωθεί το πρόγραμμα."
|
||||
enterListName: "Πληκτρολογήστε ένα όνομα για τη λίστα"
|
||||
privacy: "Ιδιωτικότητα"
|
||||
makeFollowManuallyApprove: "Τα αιτήματα ακολούθησης χρειάζονται έγκριση"
|
||||
defaultNoteVisibility: "Προεπιλεγμένη ορατότητα"
|
||||
follow: "Ακολουθήστε"
|
||||
followRequest: "Στείλτε αίτημα ακολούθησης"
|
||||
followRequests: "Αιτήματα ακολούθησης"
|
||||
unfollow: "Να μην ακολουθώ"
|
||||
followRequestPending: "Το αίτημα ακολούθησης εκκρεμεί"
|
||||
enterEmoji: "Εισάγετε ένα emoji"
|
||||
renote: "Κοινοποίηση σημειώματος"
|
||||
unrenote: "Ακύρωση κοινοποίησης"
|
||||
renoted: "Κοινοποιήθηκε."
|
||||
cantRenote: "Αυτή η δημοσίευση δεν μπορεί να κοινοποιηθεί."
|
||||
cantReRenote: "Μία κοινοποίηση δεν μπορεί να κοινοποιηθεί."
|
||||
quote: "Παράθεση"
|
||||
pinnedNote: "Καρφιτσωμένο σημείωμα"
|
||||
pinned: "Καρφίτσωμα στο προφίλ"
|
||||
you: "Εσύ"
|
||||
clickToShow: "Κάντε κλικ για εμφάνιση"
|
||||
add: "Προσθέστε"
|
||||
reaction: "Αντιδράσεις"
|
||||
reactions: "Αντιδράσεις"
|
||||
reactionSettingDescription2: "Σύρετε για να αλλάξετε τη σειρά, κάντε κλικ για να διαγράψετε, πατήστε \"+\" για να προσθέσετε."
|
||||
rememberNoteVisibility: "Θυμήσου τις ρυθμίσεις ορατότητας σημειώματος"
|
||||
attachCancel: "Διαγραφή αρχείου"
|
||||
enterFileName: "Πληκτρολογήστε όνομα αρχείου"
|
||||
mute: "Σίγαση"
|
||||
unmute: "Άρση σίγασης"
|
||||
block: "Μπλοκάρισμα"
|
||||
unblock: "Άρση μπλοκαρίσματος"
|
||||
suspend: "Αποβολή"
|
||||
unsuspend: "Άρση αποβολής"
|
||||
blockConfirm: "Θέλετε σίγουρα να μπλοκάρετε αυτόν τον λογαριασμό;"
|
||||
unblockConfirm: "Θέλετε σίγουρα να ξεμπλοκάρετε αυτόν τον λογαριασμό;"
|
||||
suspendConfirm: "Θέλετε σίγουρα να αποβάλλετε αυτόν τον λογαριασμό;"
|
||||
unsuspendConfirm: "Θέλετε σίγουρα να άρετε την αποβολή αυτού του λογαριασμού;"
|
||||
selectList: "Επιλέξτε μία λίστα"
|
||||
selectAntenna: "Επιλέξτε μία αντένα"
|
||||
selectWidget: "Επιλέξτε ένα μαραφέτι"
|
||||
editWidgets: "Επεξεργασία μαραφετίων"
|
||||
editWidgetsExit: "Ολοκληρώθηκε"
|
||||
customEmojis: "Επιπλέον emoji"
|
||||
emojiName: "Όνομα emoji"
|
||||
addEmoji: "Προσθήκη emoji"
|
||||
settingGuide: "Συνιστώμενες ρυθμίσεις"
|
||||
flagAsBot: "Αυτός ο λογαριασμός είναι bot"
|
||||
flagAsCat: "Αυτός ο λογαριασμός είναι γάτα"
|
||||
flagShowTimelineReplies: "Εμφάνιση απαντήσεων στο χρονολόγιο"
|
||||
addAccount: "Προσθήκη λογαριασμού"
|
||||
general: "Γενικές"
|
||||
wallpaper: "Ταπετσαρία"
|
||||
setWallpaper: "Ορισμός ταπετσαρίας"
|
||||
removeWallpaper: "Διαγραφή ταπετσαρίας"
|
||||
searchWith: "Αναζήτηση: {q}"
|
||||
youHaveNoLists: "Δεν έχετε λίστες"
|
||||
followConfirm: "Θέλετε σίγουρα να ακολουθήσετε τον λογαριασμό {name};"
|
||||
host: "Φιλοξενεί"
|
||||
selectUser: "Επιλέξτε ένα μέλος"
|
||||
recipient: "Αποδέκτης-τρια"
|
||||
annotation: "Σχόλια"
|
||||
federation: "Ομοσπονδία"
|
||||
storageUsage: "Χρήση χώρου"
|
||||
version: "Έκδοση"
|
||||
metadata: "Μεταδεδομένα"
|
||||
network: "Δίκτυο"
|
||||
disk: "Δίσκος"
|
||||
instanceInfo: "Πληροφορίες του instance"
|
||||
statistics: "Στατιστικά"
|
||||
clearQueue: "Εκκαθάριση ουράς"
|
||||
clearQueueConfirmTitle: "Θέλετε να διαγράψετε την ουρά;"
|
||||
clearCachedFiles: "Εκκαθάριση προσωρινής μνήμης"
|
||||
done: "Ολοκληρώθηκε"
|
||||
attachFile: "Επισύναψη αρχείων"
|
||||
more: "Περισσότερα!"
|
||||
noSuchUser: "Το μέλος δεν βρέθηκε"
|
||||
announcements: "Ανακοινώσεις"
|
||||
imageUrl: "URL εικόνας"
|
||||
remove: "Διαγραφή"
|
||||
removed: "Η διαγραφή ολοκληρώθηκε επιτυχώς"
|
||||
saved: "Αποθηκεύτηκε"
|
||||
messaging: "Συνομιλία"
|
||||
upload: "Ανεβάστε"
|
||||
fromDrive: "Από τον Αποθηκευτικό Χώρο"
|
||||
fromUrl: "Από URL"
|
||||
uploadFromUrl: "Ανεβάστε από URL"
|
||||
explore: "Εξερευνήστε"
|
||||
messageRead: "Διαβάστηκε"
|
||||
startMessaging: "Ξεκινήστε μία συνομιλία"
|
||||
nUsersRead: "διαβάστηκε από {n}"
|
||||
start: "Ας αρχίσουμε"
|
||||
home: "Κεντρικό"
|
||||
activity: "Δραστηριότητα"
|
||||
images: "Εικόνες"
|
||||
image: "Εικόνες"
|
||||
birthday: "Γενέθλια"
|
||||
registeredDate: "Έγινε μέλος στις"
|
||||
location: "Τοποθεσία"
|
||||
theme: "Θέματα"
|
||||
light: "Ανοιχτόχρωμο"
|
||||
dark: "Σκούρο"
|
||||
drive: "Αποθηκευτικός Χώρος"
|
||||
fileName: "Όνομα αρχείου"
|
||||
selectFile: "Επιλέξτε ένα αρχείο"
|
||||
selectFiles: "Επιλέξτε αρχεία"
|
||||
selectFolder: "Επιλέξτε φάκελο"
|
||||
selectFolders: "Επιλέξτε φακέλους"
|
||||
renameFile: "Μετονομασία αρχείου"
|
||||
addFile: "Προσθήκη αρχείου"
|
||||
emptyDrive: "Ο Αποθηκευτικός Χώρος σας είναι άδειος"
|
||||
copyUrl: "Αντιγραφή URL"
|
||||
rename: "Αλλαγή ονόματος"
|
||||
avatar: "Εικονίδιο"
|
||||
banner: "Πανό"
|
||||
reload: "Ανανέωση"
|
||||
doNothing: "Αγνόηση"
|
||||
watch: "Παρακολούθηση"
|
||||
unwatch: "Τέλος παρακολούθησης"
|
||||
accept: "Αποδοχή"
|
||||
reject: "Απόρριψη"
|
||||
normal: "Κανονικό"
|
||||
instanceName: "Όνομα instance"
|
||||
thisYear: "Έτος"
|
||||
thisMonth: "Μήνας"
|
||||
today: "Σήμερα"
|
||||
dayX: "{day}"
|
||||
pages: "Σελίδες"
|
||||
connectService: "Σύνδεση"
|
||||
disconnectService: "Αποσύνδεση"
|
||||
registration: "Εγγραφή"
|
||||
pinnedPages: "Καρφιτσωμένες Σελίδες"
|
||||
pinnedNotes: "Καρφιτσωμένα σημειώματα"
|
||||
antennas: "Αντένες"
|
||||
manageAntennas: "Διαχείριση αντενών"
|
||||
name: "Όνομα"
|
||||
antennaSource: "Πηγή αντένας"
|
||||
antennaKeywords: "Λέξεις-κλειδιά για παρακολούθηση"
|
||||
antennaExcludeKeywords: "Λέξεις-κλειδιά για αποκλεισμό"
|
||||
notifyAntenna: "Ειδοποίηση για νέα σημειώματα"
|
||||
withFileAntenna: "Μόνο σημειώματα με αρχεία"
|
||||
caseSensitive: "Διάκριση Πεζών-Κεφαλαίων"
|
||||
popularTags: "Δημοφιλείς ετικέτες"
|
||||
userList: "Λίστες"
|
||||
about: "Πληροφορίες"
|
||||
moderator: "Συντονιστής"
|
||||
moderation: "Συντονισμός"
|
||||
markAsReadAllNotifications: "Όλες οι ειδοποιήσεις διαβάστηκαν"
|
||||
members: "Μέλη"
|
||||
transfer: "Μεταφορά"
|
||||
title: "Τίτλος"
|
||||
text: "Κείμενο"
|
||||
enable: "Ενεργοποίηση"
|
||||
next: "Επόμενο"
|
||||
noteOf: "Σημείωμα από {user}"
|
||||
quoteAttached: "Παράθεση"
|
||||
signinRequired: "Παρακαλούμε δημιουργήστε λογαριασμό ή συνδεθείτε πριν συνεχίσετε"
|
||||
category: "Κατηγορία"
|
||||
tags: "Ετικέτες"
|
||||
createAccount: "Δημιουργία λογαριασμού"
|
||||
local: "Τοπικό"
|
||||
remote: "Απομακρυσμένo"
|
||||
total: "Σύνολο"
|
||||
appearance: "Εμφάνιση"
|
||||
accountSettings: "Ρυθμίσεις λογαριασμού"
|
||||
sounds: "Ήχοι"
|
||||
sound: "Ήχοι"
|
||||
listen: "Ακρόαση"
|
||||
showInPage: "Εμφάνιση στη σελίδα"
|
||||
volume: "Ένταση"
|
||||
masterVolume: "Κύρια ένταση"
|
||||
details: "Λεπτομέρειες"
|
||||
install: "Εγκατάσταση"
|
||||
uninstall: "Κατάργηση εγκατάστασης"
|
||||
manage: "Διαχείριση"
|
||||
smtpHost: "Φιλοξενεί"
|
||||
smtpUser: "Όνομα μέλους"
|
||||
smtpPass: "Κωδικός πρόσβασης"
|
||||
notificationSetting: "Ρυθμίσεις ειδοποιήσεων"
|
||||
notificationSettingDesc: "Επιλέξτε τους τύπους ειδοποιήσεων που εμφανίζονται"
|
||||
switchUi: "Αλλαγή UI"
|
||||
clip: "Κλιπ"
|
||||
driveFilesCount: "Αριθμός αρχείων Αποθηκευτικού Χώρου"
|
||||
driveUsage: "Χρήση Αποθηκευτικού Χώρου"
|
||||
noteFavoritesCount: "Αριθμός αγαπημένων σημειωμάτων"
|
||||
clips: "Κλιπ"
|
||||
clearCache: "Εκκαθάριση προσωρινής μνήμης"
|
||||
emailNotification: "Ειδοποιήσεις μέσω mail"
|
||||
inChannelSearch: "Αναζήτηση στο κανάλι"
|
||||
info: "Πληροφορίες"
|
||||
notRecommended: "Δεν προτείνεται"
|
||||
switchAccount: "Αλλαγή λογαριασμού"
|
||||
user: "Μέλη"
|
||||
administration: "Διαχείριση"
|
||||
switch: "Εναλλαγή"
|
||||
gallery: "Γκαλερί"
|
||||
global: "Παγκόσμιο"
|
||||
searchResult: "Αποτελέσματα αναζήτησης"
|
||||
learnMore: "Μάθετε περισσότερα"
|
||||
controlPanel: "Πίνακας ελέγχου"
|
||||
manageAccounts: "Διαχείριση Λογαριασμών"
|
||||
searchByGoogle: "Αναζήτηση"
|
||||
file: "Αρχεία"
|
||||
recommended: "Προτεινόμενα"
|
||||
cannotUploadBecauseNoFreeSpace: "Το ανέβασμα απέτυχε λόγω ανεπαρκούς Αποθηκευτικού Χώρου"
|
||||
icon: "Εικονίδιο"
|
||||
replies: "Απάντηση"
|
||||
renotes: "Κοινοποίηση σημειώματος"
|
||||
_email:
|
||||
_follow:
|
||||
title: "Έχετε ένα νέο ακόλουθο"
|
||||
_channel:
|
||||
featured: "Δημοφιλή"
|
||||
_theme:
|
||||
keys:
|
||||
panel: "Πίνακας"
|
||||
mention: "Επισήμανση"
|
||||
renote: "Κοινοποίηση σημειώματος"
|
||||
_sfx:
|
||||
note: "Σημειώματα"
|
||||
notification: "Ειδοποιήσεις"
|
||||
antenna: "Αντένες"
|
||||
channel: "Ειδοποιήσεις καναλιών"
|
||||
_ago:
|
||||
future: "Μελλοντικό"
|
||||
justNow: "Μόλις τώρα"
|
||||
secondsAgo: "{n} δευτερόλεπτο(α) πριν"
|
||||
minutesAgo: "{n} λεπτό(ά) πριν"
|
||||
hoursAgo: "{n} ώρα(ες) πριν"
|
||||
daysAgo: "{n} μέρα(ες) πριν"
|
||||
weeksAgo: "{n} εβδομάδα(ες) πριν"
|
||||
monthsAgo: "{n} μήνα(ες) πριν"
|
||||
yearsAgo: "{n} έτος(η) πριν"
|
||||
_permissions:
|
||||
"write:drive": "Επεξεργαστείτε ή διαγράψτε τα αρχεία και τους φακέλους του Αποθηκευτικού Χώρου σας"
|
||||
"read:favorites": "Δείτε τη λίστα των αγαπημένων σας"
|
||||
"write:favorites": "Επεξεργαστείτε τη λίστα των αγαπημένων σας"
|
||||
"read:messaging": "Δείτε τις συνομιλίες σας"
|
||||
"write:messaging": "Γράψτε ή διαγράψτε μηνύματα συνομιλίας"
|
||||
"read:notifications": "Δείτε τις ειδοποιήσεις σας"
|
||||
"write:notifications": "Διαχειριστείτε τις ειδοποιήσεις σας"
|
||||
"read:pages": "Δείτε τις Σελίδες σας"
|
||||
"write:pages": "Επεξεργαστείτε ή διαγράψτε τις σελίδες σας"
|
||||
_antennaSources:
|
||||
all: "Όλα τα σημειώματα"
|
||||
homeTimeline: "Σημειώματα από μέλη που ακολουθείτε"
|
||||
users: "Σημειώματα από συγκεκριμένα μέλη"
|
||||
userList: "Σημειώματα από καθορισμένη λίστα μελών"
|
||||
_widgets:
|
||||
profile: "Προφίλ"
|
||||
instanceInfo: "Πληροφορίες του instance"
|
||||
notifications: "Ειδοποιήσεις"
|
||||
timeline: "Χρονολόγιο"
|
||||
calendar: "Ημερολόγιο"
|
||||
trends: "Δημοφιλή"
|
||||
clock: "Ρολόι"
|
||||
activity: "Δραστηριότητα"
|
||||
photos: "Φωτογραφίες"
|
||||
digitalClock: "Ψηφιακό ρολόι"
|
||||
federation: "Ομοσπονδία"
|
||||
postForm: "Φόρμα δημοσίευσης"
|
||||
button: "Κουμπί"
|
||||
onlineUsers: "Συνδεδεμένα μέλη"
|
||||
_userList:
|
||||
chooseList: "Επιλέξτε μία λίστα"
|
||||
_cw:
|
||||
show: "Δείτε περισσότερα"
|
||||
_visibility:
|
||||
home: "Κεντρικό"
|
||||
homeDescription: "Δημοσίευση στο κεντρικό χρονολόγιο μόνο"
|
||||
followers: "Ακολουθούν"
|
||||
_profile:
|
||||
name: "Όνομα"
|
||||
username: "Όνομα μέλους"
|
||||
_exportOrImport:
|
||||
allNotes: "Όλα τα σημειώματα"
|
||||
followingList: "Ακολουθεί"
|
||||
muteList: "Μέλη σε σίγαση"
|
||||
blockingList: "Μπλοκαρισμένα μέλη"
|
||||
userLists: "Λίστες"
|
||||
_charts:
|
||||
federation: "Ομοσπονδία"
|
||||
_timelines:
|
||||
home: "Κεντρικό"
|
||||
local: "Τοπικό"
|
||||
social: "Κοινωνικό"
|
||||
global: "Παγκόσμιο"
|
||||
_pages:
|
||||
viewPage: "Δείτε τις Σελίδες σας"
|
||||
blocks:
|
||||
image: "Εικόνες"
|
||||
_notification:
|
||||
youWereFollowed: "σε ακολούθησε"
|
||||
_types:
|
||||
follow: "Νέοι ακόλουθοι"
|
||||
mention: "Επισήμανση"
|
||||
renote: "Κοινοποίηση σημειώματος"
|
||||
quote: "Παράθεση"
|
||||
reaction: "Αντιδράσεις"
|
||||
_actions:
|
||||
reply: "Απάντηση"
|
||||
renote: "Κοινοποίηση σημειώματος"
|
||||
_deck:
|
||||
widgetsIntroduction: "Παρακαλούμε επιλέξτε \"Επεξεργασία μαραφετίων\" στο μενού και προσθέστε μαραφέτι."
|
||||
_columns:
|
||||
widgets: "Μαραφέτια"
|
||||
notifications: "Ειδοποιήσεις"
|
||||
tl: "Χρονολόγιο"
|
||||
antenna: "Αντένες"
|
||||
list: "Λίστα"
|
||||
mentions: "Επισημάνσεις"
|
||||
_webhookSettings:
|
||||
name: "Όνομα"
|
||||
_moderationLogTypes:
|
||||
suspend: "Αποβολή"
|
1438
locales/en-US.yml
1438
locales/en-US.yml
File diff suppressed because it is too large
Load Diff
1419
locales/es-ES.yml
1419
locales/es-ES.yml
File diff suppressed because it is too large
Load Diff
1247
locales/fr-FR.yml
1247
locales/fr-FR.yml
File diff suppressed because it is too large
Load Diff
@@ -1,85 +0,0 @@
|
||||
import * as fs from 'node:fs';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
import { dirname } from 'node:path';
|
||||
import * as yaml from 'js-yaml';
|
||||
import ts from 'typescript';
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = dirname(__filename);
|
||||
|
||||
function createMembers(record) {
|
||||
return Object.entries(record)
|
||||
.map(([k, v]) => ts.factory.createPropertySignature(
|
||||
undefined,
|
||||
ts.factory.createStringLiteral(k),
|
||||
undefined,
|
||||
typeof v === 'string'
|
||||
? ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword)
|
||||
: ts.factory.createTypeLiteralNode(createMembers(v)),
|
||||
));
|
||||
}
|
||||
|
||||
export default function generateDTS() {
|
||||
const locale = yaml.load(fs.readFileSync(`${__dirname}/ja-JP.yml`, 'utf-8'));
|
||||
const members = createMembers(locale);
|
||||
const elements = [
|
||||
ts.factory.createInterfaceDeclaration(
|
||||
[ts.factory.createToken(ts.SyntaxKind.ExportKeyword)],
|
||||
ts.factory.createIdentifier('Locale'),
|
||||
undefined,
|
||||
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.NodeFlags.Ambient | ts.NodeFlags.ContextFlags,
|
||||
),
|
||||
),
|
||||
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')),
|
||||
];
|
||||
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`, `/* eslint-disable */
|
||||
// This file is generated by locales/generateDTS.js
|
||||
// Do not edit this file directly.
|
||||
${printed}`, 'utf-8');
|
||||
}
|
@@ -1,5 +1 @@
|
||||
---
|
||||
_lang_: "japanski"
|
||||
ok: "OK"
|
||||
gotIt: "Razumijem"
|
||||
cancel: "otkazati"
|
||||
|
@@ -1,18 +1 @@
|
||||
---
|
||||
_lang_: "Japonè"
|
||||
password: "modpas"
|
||||
ok: "OK"
|
||||
gotIt: "Konprann"
|
||||
cancel: "anile"
|
||||
noThankYou: "Sispann"
|
||||
instance: "sèvè"
|
||||
profile: "pwofil"
|
||||
save: "kenbe"
|
||||
delete: "efase"
|
||||
instances: "sèvè"
|
||||
remove: "efase"
|
||||
smtpPass: "modpas"
|
||||
_2fa:
|
||||
renewTOTPCancel: "Sispann"
|
||||
_widgets:
|
||||
profile: "pwofil"
|
||||
|
@@ -1,104 +0,0 @@
|
||||
---
|
||||
_lang_: "Japán"
|
||||
monthAndDay: "{month}.{day}."
|
||||
search: "Keresés"
|
||||
notifications: "Értesítések"
|
||||
username: "Felhasználónév"
|
||||
password: "Jelszó"
|
||||
forgotPassword: "Elfelejtett jelszó"
|
||||
ok: "OK"
|
||||
gotIt: "Rendben"
|
||||
cancel: "Mégse"
|
||||
noThankYou: "Nem, köszönöm"
|
||||
enterUsername: "Felhasználónév megadása"
|
||||
renotedBy: "{user} Renotolta"
|
||||
noNotes: "Nincs Note"
|
||||
noNotifications: "Nincs értesítés"
|
||||
instance: "Szerver"
|
||||
settings: "Beállítások"
|
||||
notificationSettings: "Értesítés beállításai"
|
||||
basicSettings: "Alapbeállítás"
|
||||
otherSettings: "Egyéb beállítások"
|
||||
openInWindow: "Megnyitás ablakban"
|
||||
profile: "Saját profil"
|
||||
timeline: "Idővonal"
|
||||
noAccountDescription: "Nincs leírás"
|
||||
login: "Bejelentkezés"
|
||||
loggingIn: "Belépés"
|
||||
logout: "Kijelentkezés"
|
||||
signup: "Regisztráció"
|
||||
uploading: "Feltöltés"
|
||||
save: "Mentés"
|
||||
users: "Felhasználók"
|
||||
addUser: "Felhasználó hozzáadása"
|
||||
favorite: "Kedvencek"
|
||||
favorites: "Kedvencek"
|
||||
unfavorite: "Törlés a kedvencek közül."
|
||||
favorited: "Kedvencek közé rakva."
|
||||
alreadyFavorited: "Már a kedvencek között van."
|
||||
cantFavorite: "Nem sikerült a kedvencek közé rakni."
|
||||
pin: "Rögzítés"
|
||||
unpin: "Rögzítés feloldása"
|
||||
copyContent: "Tartalom másolása"
|
||||
copyLink: "Hivatkozás Másolása"
|
||||
delete: "Törlés"
|
||||
deleteAndEdit: "Törlés és szerkesztés"
|
||||
deleteAndEditConfirm: "Biztosan törlöd ezt a jegyzetet és újrafogalmazza? Így eveszíted az összes reakciót, renote-ot és választ."
|
||||
addToList: "Hozzáadás a listákhoz"
|
||||
privacy: "Adatvédelem"
|
||||
makeFollowManuallyApprove: "Csak jóváhagyással követhetnek"
|
||||
defaultNoteVisibility: "Alapértelmezett láthatóság"
|
||||
follow: "Követés"
|
||||
followRequest: "Követés kérése"
|
||||
followRequests: "Követési kérések"
|
||||
unfollow: "Követés visszavonása"
|
||||
followRequestPending: "Függőben levő követési kérés"
|
||||
enterEmoji: "Írj egy emoji-t"
|
||||
renote: "Renote"
|
||||
unrenote: "Renote visszavonása"
|
||||
renoted: "Renotolva"
|
||||
cantRenote: "Nem lehet Renotolni"
|
||||
cantReRenote: "A Renote nem renotálható"
|
||||
quote: "Idézet"
|
||||
inChannelRenote: "Csak csatornán bellüli Renote"
|
||||
inChannelQuote: "Csak csatornán bellüli idézet"
|
||||
pinnedNote: "Csatolt jegyzet"
|
||||
pinned: "Rögzítés"
|
||||
you: "Te"
|
||||
clickToShow: "Kattints ide"
|
||||
sensitive: "Érzékeny"
|
||||
add: "Hozzáad"
|
||||
reaction: "Reakciók"
|
||||
reactions: "Reakciók"
|
||||
instances: "Szerver"
|
||||
remove: "Törlés"
|
||||
pinnedNotes: "Csatolt jegyzet"
|
||||
smtpUser: "Felhasználónév"
|
||||
smtpPass: "Jelszó"
|
||||
user: "Felhasználók"
|
||||
searchByGoogle: "Keresés"
|
||||
renotes: "Renote"
|
||||
_theme:
|
||||
keys:
|
||||
renote: "Renote"
|
||||
_sfx:
|
||||
notification: "Értesítések"
|
||||
_2fa:
|
||||
renewTOTPCancel: "Nem, köszönöm"
|
||||
_widgets:
|
||||
profile: "Saját profil"
|
||||
notifications: "Értesítések"
|
||||
timeline: "Idővonal"
|
||||
_profile:
|
||||
username: "Felhasználónév"
|
||||
_notification:
|
||||
_types:
|
||||
renote: "Renote"
|
||||
quote: "Idézet"
|
||||
reaction: "Reakciók"
|
||||
_actions:
|
||||
renote: "Renote"
|
||||
_deck:
|
||||
_columns:
|
||||
notifications: "Értesítések"
|
||||
tl: "Idővonal"
|
1482
locales/id-ID.yml
1482
locales/id-ID.yml
File diff suppressed because it is too large
Load Diff
2622
locales/index.d.ts
vendored
2622
locales/index.d.ts
vendored
File diff suppressed because it is too large
Load Diff
@@ -2,8 +2,8 @@
|
||||
* Languages Loader
|
||||
*/
|
||||
|
||||
import * as fs from 'node:fs';
|
||||
import * as yaml from 'js-yaml';
|
||||
const fs = require('fs');
|
||||
const yaml = require('js-yaml');
|
||||
|
||||
const merge = (...args) => args.reduce((a, c) => ({
|
||||
...a,
|
||||
@@ -34,7 +34,6 @@ const languages = [
|
||||
'pt-PT',
|
||||
'ru-RU',
|
||||
'sk-SK',
|
||||
'th-TH',
|
||||
'ug-CN',
|
||||
'uk-UA',
|
||||
'vi-VN',
|
||||
@@ -51,37 +50,20 @@ const primaries = {
|
||||
// 何故か文字列にバックスペース文字が混入することがあり、YAMLが壊れるので取り除く
|
||||
const clean = (text) => text.replace(new RegExp(String.fromCodePoint(0x08), 'g'), '');
|
||||
|
||||
export function build() {
|
||||
const locales = languages.reduce((a, c) => (a[c] = yaml.load(clean(fs.readFileSync(new URL(`${c}.yml`, import.meta.url), 'utf-8'))) || {}, a), {});
|
||||
const locales = languages.reduce((a, c) => (a[c] = yaml.load(clean(fs.readFileSync(`${__dirname}/${c}.yml`, '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);
|
||||
}
|
||||
module.exports = 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
|
||||
);
|
||||
}
|
||||
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();
|
||||
})(), a), {});
|
||||
|
1945
locales/it-IT.yml
1945
locales/it-IT.yml
File diff suppressed because it is too large
Load Diff
1601
locales/ja-JP.yml
1601
locales/ja-JP.yml
File diff suppressed because it is too large
Load Diff
1861
locales/ja-KS.yml
1861
locales/ja-KS.yml
File diff suppressed because it is too large
Load Diff
@@ -1,3 +1 @@
|
||||
---
|
||||
_lang_: "la .lojban."
|
||||
headlineMisskey: "lo se tcana noi jorne fi loi notci"
|
||||
|
@@ -39,8 +39,10 @@ remove: "Kkes"
|
||||
connectService: "Qqen"
|
||||
userList: "Tibdarin"
|
||||
securityKey: "Tasarutt n tɣellist"
|
||||
securityKeyName: "Isem n tsarutt"
|
||||
signinRequired: "Ttxil jerred"
|
||||
signinWith: "Tuqqna s {x}"
|
||||
tapSecurityKey: "Sekcem tasarutt-ik·im n tɣellist"
|
||||
uiLanguage: "Tutlayt n wegrudem"
|
||||
accountSettings: "Iɣewwaṛen n umiḍan"
|
||||
plugins: "Izegrar"
|
||||
@@ -56,10 +58,13 @@ accounts: "Imiḍan"
|
||||
searchByGoogle: "Nadi"
|
||||
file: "Ifuyla"
|
||||
account: "Imiḍan"
|
||||
replies: "Err"
|
||||
_email:
|
||||
_follow:
|
||||
title: "Yeṭṭafaṛ-ik·em-id"
|
||||
_mfm:
|
||||
mention: "Bder"
|
||||
search: "Nadi"
|
||||
font: "Tasefsit"
|
||||
_theme:
|
||||
keys:
|
||||
mention: "Bder"
|
||||
@@ -68,10 +73,7 @@ _sfx:
|
||||
_permissions:
|
||||
"write:account": "Ẓreg talɣut n umiḍan-ik·im"
|
||||
_widgets:
|
||||
profile: "Amaɣnu"
|
||||
notifications: "Ilɣuyen"
|
||||
_userList:
|
||||
chooseList: "Fren tabdart"
|
||||
_cw:
|
||||
show: "Wali ugar"
|
||||
_visibility:
|
||||
@@ -93,6 +95,24 @@ _pages:
|
||||
contentBlocks: "Agbur"
|
||||
inputBlocks: "Anekcum"
|
||||
specialBlocks: "Uzzig"
|
||||
script:
|
||||
categories:
|
||||
list: "Tibdarin"
|
||||
blocks:
|
||||
_join:
|
||||
arg1: "Tibdarin"
|
||||
_randomPick:
|
||||
arg1: "Tibdarin"
|
||||
_dailyRandomPick:
|
||||
arg1: "Tibdarin"
|
||||
_seedRandomPick:
|
||||
arg2: "Tibdarin"
|
||||
_pick:
|
||||
arg1: "Tibdarin"
|
||||
_listLen:
|
||||
arg1: "Tibdarin"
|
||||
types:
|
||||
array: "Tibdarin"
|
||||
_notification:
|
||||
youWereFollowed: "Yeṭṭafaṛ-ik·em-id"
|
||||
_types:
|
||||
|
@@ -61,14 +61,14 @@ smtpPass: "ಗುಪ್ತಪದ"
|
||||
user: "ಬಳಕೆದಾರ"
|
||||
searchByGoogle: "ಹುಡುಕು"
|
||||
file: "ಕಡತಗಳು"
|
||||
replies: "ಉತ್ತರಿಸು"
|
||||
_email:
|
||||
_follow:
|
||||
title: "ಹಿಂಬಾಲಿಸಿದರು"
|
||||
_mfm:
|
||||
search: "ಹುಡುಕು"
|
||||
_sfx:
|
||||
notification: "ಅಧಿಸೂಚನೆಗಳು"
|
||||
_widgets:
|
||||
profile: "ಪ್ರೊಫೈಲು"
|
||||
notifications: "ಅಧಿಸೂಚನೆಗಳು"
|
||||
timeline: "ಸಮಯಸಾಲು"
|
||||
_cw:
|
||||
|
@@ -1,723 +0,0 @@
|
||||
---
|
||||
_lang_: "한국어(경상)"
|
||||
headlineMisskey: "노트로 이언 네트워크"
|
||||
introMisskey: "어서 오이소! Misskey넌 오픈소스 분산헹 마이크로 블로그 서비스입니다.\n‘노트’럴 맨걸어서 지검 일나넌 일얼 노누던가 내 이바구럴 남한데 서 보이소.📡\n‘리액션’ 기넝서 남으 노트에 억수로 빠리게 답할 수 잇십니다.👍\n새롭운 세게럴 탐험해 보입시다.🚀"
|
||||
poweredByMisskeyDescription: "{name} 서버넌 오픈소스 플랫폼 <b>Misskey</b>으 서버 가운데 하나입니다."
|
||||
monthAndDay: "{month}월 {day}일"
|
||||
search: "찾기"
|
||||
notifications: "알림"
|
||||
username: "사용자 이럼"
|
||||
password: "비밀번호"
|
||||
forgotPassword: "비밀번호럴 잊엇뿟십니꺼?"
|
||||
fetchingAsApObject: "연합서 찾아보고 잇어예"
|
||||
ok: "예"
|
||||
gotIt: "알것어예"
|
||||
cancel: "아이예"
|
||||
noThankYou: "뎃어예"
|
||||
enterUsername: "사용자 이럼 서기"
|
||||
renotedBy: "{user}님이 리노트햇어예"
|
||||
noNotes: "노트가 없십니다"
|
||||
noNotifications: "알림이 없십니다"
|
||||
instance: "서버"
|
||||
settings: "설정"
|
||||
notificationSettings: "알림 설정"
|
||||
basicSettings: "기본 설정"
|
||||
otherSettings: "다린 설정"
|
||||
openInWindow: "창서 옐기"
|
||||
profile: "프로필"
|
||||
timeline: "타임라인"
|
||||
noAccountDescription: "자기소개가 없십니다"
|
||||
login: "로그인"
|
||||
loggingIn: "로그인하고 잇어예"
|
||||
logout: "로그아웃"
|
||||
signup: "가입하기"
|
||||
uploading: "올리고 잇어예"
|
||||
save: "저장하기"
|
||||
users: "사용자"
|
||||
addUser: "사용자 옇기"
|
||||
favorite: "질겨찾기"
|
||||
favorites: "질겨찾기"
|
||||
unfavorite: "질겨찾기서 어ᇝ애기"
|
||||
favorited: "질겨찾기에 담앗십니다."
|
||||
alreadyFavorited: "벌시로 질겨찾기에 담기 잇십니다."
|
||||
cantFavorite: "질겨찾기에 몬 담았십니다."
|
||||
pin: "프로필에 붙이기"
|
||||
unpin: "프로필서 띠기"
|
||||
copyContent: "내용 복사하기"
|
||||
copyLink: "링크 복사하기"
|
||||
copyLinkRenote: "리노트 링크 복사"
|
||||
delete: "내삐리기"
|
||||
deleteAndEdit: "내삐리고 새로 적기"
|
||||
deleteAndEditConfirm: "요 노트럴 뭉캐고 새로 적십니꺼? 요 노트서 리액션하고 리노트, 답하기도 말캉 뭉캐집니다."
|
||||
addToList: "리스트에 옇기"
|
||||
addToAntenna: "안테나에 옇기"
|
||||
sendMessage: "메시지 보내기"
|
||||
copyRSS: "알에스에스 복사하기"
|
||||
copyUsername: "사용자 이럼 복사하기"
|
||||
copyUserId: "사용자 아이디 복사하기"
|
||||
copyNoteId: "노트 아이디 복사하기"
|
||||
copyFileId: "파일 아이디 복사하기"
|
||||
copyFolderId: "폴더 아이디 복사하기"
|
||||
copyProfileUrl: "프로필 주소 복사하기"
|
||||
searchUser: "사용자 찾기"
|
||||
reply: "답하기"
|
||||
loadMore: "더 볼래예"
|
||||
showMore: "더 볼래예"
|
||||
showLess: "꺼기"
|
||||
youGotNewFollower: "새 팔로워가 잇십니다"
|
||||
receiveFollowRequest: "팔로잉 요청이 잇십니다"
|
||||
followRequestAccepted: "팔로잉이 받아딜이젓십니다"
|
||||
mention: "멘션"
|
||||
mentions: "받언 멘션"
|
||||
directNotes: "쪽지 서기"
|
||||
importAndExport: "가오기하고 내가기"
|
||||
import: "가오기"
|
||||
export: "내가기"
|
||||
files: "파일"
|
||||
download: "내리받기"
|
||||
driveFileDeleteConfirm: "‘{name}’ 파일얼 뭉캡니꺼? 요 파일얼 서넌 콘텐츠도 뭉캐집니다."
|
||||
unfollowConfirm: "{name}님얼 고마 팔로잉합니꺼?"
|
||||
exportRequested: "내가기 요청얼 햇십니다. 시간이 쪼매 걸릴 깁니다. 요청이 껕나모 ‘드라이브’에 옇십니다."
|
||||
importRequested: "가오기 요청얼 햇십니다. 시간이 쪼매 걸릴 깁니다."
|
||||
lists: "리스트"
|
||||
noLists: "리스트가 없십니다"
|
||||
note: "노트"
|
||||
notes: "노트"
|
||||
following: "팔로잉"
|
||||
followers: "팔로워"
|
||||
followsYou: "내럴 팔로잉합니다"
|
||||
createList: "리스트 맨걸기"
|
||||
manageLists: "리스트 간리하기"
|
||||
error: "우짭니꺼"
|
||||
somethingHappened: "먼가 일낫십니다"
|
||||
retry: "다시 하기"
|
||||
pageLoadError: "하멘 부리오기가 아이뎁니다."
|
||||
pageLoadErrorDescription: "네트워크나 브라우저 캐시 때문일 깁니다. 캐시럴 뭉캐던가 쪼매 잇다 새로 해 주이소."
|
||||
serverIsDead: "서버가 대답얼 아이합니다. 쪼매 잇다 새로 해 주이소."
|
||||
youShouldUpgradeClient: "요 하멘얼 볼라먼 새로 곤치던가 새 버전으 클라이언트럴 받아 서 보이소."
|
||||
enterListName: "리스트 이럼 서기"
|
||||
privacy: "개인 정보"
|
||||
makeFollowManuallyApprove: "팔로잉얼 하나석 받아딜이기"
|
||||
defaultNoteVisibility: "기본 공개 범위"
|
||||
follow: "팔로우"
|
||||
followRequest: "팔로우 요청하기"
|
||||
followRequests: "팔로우 요청"
|
||||
unfollow: "팔로우 무루기"
|
||||
followRequestPending: "팔로우 수락 지둘림"
|
||||
enterEmoji: "이모지 서기"
|
||||
renote: "리노트"
|
||||
unrenote: "리노트 무루기"
|
||||
renoted: "리노트럴 햇십니다."
|
||||
cantRenote: "요 걸언 리노트럴 몬 합니다."
|
||||
cantReRenote: "리노트넌 지럴 리노트 몬 합니다."
|
||||
quote: "따오기"
|
||||
inChannelRenote: "채널 안 리노트"
|
||||
inChannelQuote: "채널 안 따오기"
|
||||
pinnedNote: "붙인 노트"
|
||||
pinned: "프로필에 붙이기"
|
||||
you: "나"
|
||||
clickToShow: "누질라서 보기"
|
||||
sensitive: "수ᇚ힛섭니다"
|
||||
add: "옇기"
|
||||
reaction: "반엉"
|
||||
reactions: "반엉"
|
||||
reactionSettingDescription2: "꺼시서 두고, 누질라서 뭉캐고, ‘+’럴 누질라서 옇십니다."
|
||||
rememberNoteVisibility: "공개 범위럴 기억하기"
|
||||
attachCancel: "붙임 빼기"
|
||||
markAsSensitive: "수ᇚ힘 설정"
|
||||
unmarkAsSensitive: "수ᇚ힘 무루기"
|
||||
enterFileName: "파일 이럼 서기"
|
||||
mute: "수ᇚ후기"
|
||||
unmute: "수ᇚ훈 거 무루기"
|
||||
renoteMute: "리노트 수ᇚ후기"
|
||||
renoteUnmute: "리노트 수ᇚ훈 거 무루기"
|
||||
block: "차단하기"
|
||||
unblock: "차단 무루기"
|
||||
suspend: "얼우기"
|
||||
unsuspend: "얼우기 풀기"
|
||||
blockConfirm: "차단합니꺼?"
|
||||
unblockConfirm: "차단얼 무룹니꺼?"
|
||||
suspendConfirm: "얼웁니꺼?"
|
||||
unsuspendConfirm: "얼운 거 풉니꺼?"
|
||||
selectList: "리스트 개리기"
|
||||
editList: "리스트 적기"
|
||||
selectChannel: "채널 개리기"
|
||||
selectAntenna: "안테나 개리기"
|
||||
editAntenna: "안테나 적기"
|
||||
selectWidget: "위젯 개리기"
|
||||
editWidgets: "위젯 적기"
|
||||
editWidgetsExit: "고마 적기"
|
||||
customEmojis: "사용자 지정 이모지"
|
||||
emoji: "이모지"
|
||||
emojis: "이모지"
|
||||
emojiName: "이모지 이럼"
|
||||
emojiUrl: "이모지 주소"
|
||||
addEmoji: "이모지 옇기"
|
||||
settingGuide: "개않언 설정"
|
||||
cacheRemoteFiles: "웬겍 파일 캐시하기"
|
||||
cacheRemoteFilesDescription: "요 설정얼 키모 웬겍 파일얼 요 서버으 스토리지에 캐시합니다. 미디어가 사게 비이지먼 서버으 스토리지럴 마이 섭니다. 웬겍 사용자가 얼매나 캐시럴 둘 긴가넌 고 옉할으 드라이브 크기 제한마중 다립니다. 요 제한얼 넘구모 엣날 파일버터 캐시서 뭉캐지서 링크가 뎁니다. 요 설정얼 꺼모 웬겍 파일언 첨버터 링크가 뎁니다. 이미지으 섬네일얼 맨걸던 사용자으 개인 정보럴 징키던 할라먼 default.yml서 proxyRemoteFiles럴 ture로 하입시다."
|
||||
youCanCleanRemoteFilesCache: "파일 간리으 🗑️ 모냥얼 누질리모 캐시럴 말캉 뭉캘 수 잇십니다."
|
||||
cacheRemoteSensitiveFiles: "웬겍으 수ᇚ힌 파일얼 캐시하기"
|
||||
cacheRemoteSensitiveFilesDescription: "요 설정얼 꺼모 웬겍 수ᇚ힌 파일이 캐시하지 아이하고 바리 링크합니다."
|
||||
flagAsBot: "자동 게정입니다"
|
||||
flagAsBotDescription: "요 게정얼 프로그램서 설라먼 키야 합니다. 키모 다런 개발자가 반엉얼 끋없이 데풀이하지 몬 하게 도아 줄 수 잇고 Misskey으 시스템서 자동 게정이 뎁니다."
|
||||
flagAsCat: "애웅애웅애웅애웅!"
|
||||
flagAsCatDescription: "애옹?"
|
||||
flagShowTimelineReplies: "타임라인서 노트으 답하기 보기"
|
||||
flagShowTimelineRepliesDescription: "키모 타임라인서 다런 사용자덜으 답하기도 봅니다."
|
||||
autoAcceptFollowed: "팔로잉하넌 사용자으 팔로잉 요청 바리 받아딜이기"
|
||||
addAccount: "게정 옇기"
|
||||
reloadAccountsList: "게정 리스트으 정보 새로 바꾸기"
|
||||
loginFailed: "로그인이 아이뎁니다."
|
||||
showOnRemote: "웬겍서 보기"
|
||||
general: "일반"
|
||||
wallpaper: "벡지"
|
||||
setWallpaper: "벡지 설정"
|
||||
removeWallpaper: "벡지 뭉캐기"
|
||||
searchWith: "찾기: {q}"
|
||||
youHaveNoLists: "리스트가 없십니다"
|
||||
followConfirm: "{name}님얼 팔로잉합니꺼?"
|
||||
proxyAccount: "프락시 게정"
|
||||
proxyAccountDescription: "프락시 게정언 턱벨한 조겐서 웬겍 팔로잉얼 하넌 게정입니다. 사용자가 웬겍 사용자럴 리스트에 옇얼 때 리스트에 옇언 사용자럴 누도 팔로잉 아이하모 할동이 서버로 아이 오니께 요 게정이 아인 프락시 게정얼 팔로잉하게 합니다."
|
||||
host: "호스트 이럼"
|
||||
selectUser: "사용자 개리기"
|
||||
recipient: "받넌 사람"
|
||||
annotation: "주석"
|
||||
federation: "옌합"
|
||||
instances: "서버"
|
||||
registeredAt: "첫 발겐"
|
||||
latestRequestReceivedAt: "막죽에 받언 요청"
|
||||
latestStatus: "막죽 상태"
|
||||
storageUsage: "스토리지 사용량"
|
||||
charts: "차트"
|
||||
perHour: "한 시간마중"
|
||||
perDay: "하리마중"
|
||||
stopActivityDelivery: "할동 고마 보내기"
|
||||
blockThisInstance: "요 서버 차단하기"
|
||||
silenceThisInstance: "서버 수ᇚ후기"
|
||||
operations: "동작"
|
||||
software: "소프트웨어"
|
||||
version: "버전"
|
||||
metadata: "메타데이터"
|
||||
withNFiles: "파일 {n}개"
|
||||
monitor: "모니터"
|
||||
jobQueue: "작업 대기옐"
|
||||
cpuAndMemory: "시피유하고 메모리"
|
||||
network: "네트워크"
|
||||
disk: "디스크"
|
||||
instanceInfo: "서버 정보"
|
||||
statistics: "통게"
|
||||
clearQueue: "대기옐 비우기"
|
||||
clearQueueConfirmTitle: "대기옐얼 비웁니꺼?"
|
||||
clearQueueConfirmText: "대기옐에 잇넌 걸얼 아이 보냅니다. 흐이 요 동작언 할 필요가 없십니다."
|
||||
clearCachedFiles: "캐시 비우기"
|
||||
clearCachedFilesConfirm: "캐시한 웬겍 파일얼 말캉 뭉캡니꺼?"
|
||||
blockedInstances: "차단한 서버"
|
||||
blockedInstancesDescription: "차단할라넌 서버으 호스트럴 줄 바꿈해서로 비이 줍니다. 차단한 서버넌 요 서버하고 교류 몬 합니다."
|
||||
silencedInstances: "수ᇚ훈 서버"
|
||||
silencedInstancesDescription: "수ᇚ훌라넌 서버으 호스트럴 줄 바꿈해서로 비이 줍니다. 수ᇚ훈 서버으 게정언 말캉 ‘수ᇚ후기’가 데서 팔로잉 요청만 데고 팔로워가 아인 로컬 게정서 멘션얼 몬 합니다. 차단한 서버넌 상간 없십니다."
|
||||
muteAndBlock: "수ᇚ훔하고 차단"
|
||||
mutedUsers: "수ᇚ훈 사용자"
|
||||
blockedUsers: "차단한 사용자"
|
||||
noUsers: "사용자가 없십니다"
|
||||
editProfile: "프로필 적기"
|
||||
noteDeleteConfirm: "요 노트럴 뭉캡니꺼?"
|
||||
pinLimitExceeded: "더 몬 붙입니다"
|
||||
intro: "Misskey럴 다 깔앗십니다! 간리자 게정얼 맨걸어 보입시다."
|
||||
done: "햇어예"
|
||||
processing: "처리하고 잇어예"
|
||||
preview: "미리보기"
|
||||
default: "기본값"
|
||||
defaultValueIs: "기본값: {value}"
|
||||
noCustomEmojis: "이모지가 없십니다"
|
||||
noJobs: "작업이 없십니다"
|
||||
federating: "옌합하고 잇어예"
|
||||
blocked: "차단햇어예"
|
||||
suspended: "고만 보내예"
|
||||
all: "말캉"
|
||||
subscribing: "구독하고 잇어예"
|
||||
publishing: "보내고 잇어예"
|
||||
notResponding: "답이 없어예"
|
||||
instanceFollowing: "서버으 팔로잉"
|
||||
instanceFollowers: "서버으 팔로워"
|
||||
instanceUsers: "서버으 사용자"
|
||||
changePassword: "비밀번호 바꾸기"
|
||||
security: "보안"
|
||||
retypedNotMatch: "선 거가 안 맞십니다."
|
||||
currentPassword: "지검 비밀번호"
|
||||
newPassword: "새 비밀번호"
|
||||
newPasswordRetype: "새 비밀번호 다시 서기"
|
||||
attachFile: "파일 붙이기"
|
||||
more: "더 볼래예!"
|
||||
featured: "인기"
|
||||
usernameOrUserId: "사용자 이럼이나 사용자 아이디"
|
||||
noSuchUser: "사용자럴 몬 찾앗십니다"
|
||||
lookup: "찾아보기"
|
||||
announcements: "공지 걸"
|
||||
imageUrl: "이미지 주소"
|
||||
remove: "내삐리기"
|
||||
removed: "뭉캣십니다"
|
||||
removeAreYouSure: "‘{x}’(얼)럴 뭉캡니꺼?"
|
||||
deleteAreYouSure: "‘{x}’(얼)럴 뭉캡니꺼?"
|
||||
resetAreYouSure: "아시로 데돌립니꺼?"
|
||||
areYouSure: "갠찮십니꺼?"
|
||||
saved: "저장햇십니다"
|
||||
messaging: "대화"
|
||||
upload: "올리기"
|
||||
keepOriginalUploading: "온본 두기"
|
||||
keepOriginalUploadingDescription: "이미지럴 올릴 때 온본얼 고대로 둡니다. 꺼모 올릴 때 브라우저서 웹 공개 이미지럴 맨겁니다."
|
||||
fromDrive: "드라이브서"
|
||||
fromUrl: "주소서"
|
||||
uploadFromUrl: "주소 올리기"
|
||||
uploadFromUrlDescription: "올리기할라넌 파일으 주소"
|
||||
uploadFromUrlRequested: "올리기럴 요청햇십니다"
|
||||
uploadFromUrlMayTakeTime: "올리기가 껕날라먼 시간이 쪼매 걸릴 깁니다."
|
||||
explore: "살펴보기"
|
||||
messageRead: "이럿어예"
|
||||
noMoreHistory: "요카마 엣날 기록이 없십니다"
|
||||
startMessaging: "대화하기"
|
||||
nUsersRead: "{n}멩이 이럿십니다"
|
||||
agreeTo: "{0}에 동이하기"
|
||||
agree: "동이합니다"
|
||||
agreeBelow: "밑으 내용에 동이합니다"
|
||||
basicNotesBeforeCreateAccount: "주이할 내용"
|
||||
termsOfService: "이용 약간"
|
||||
start: "시작하기"
|
||||
home: "덜머리"
|
||||
remoteUserCaution: "웬겍 사용자넌 정보가 학실하지 아이할 수 잇십니다."
|
||||
activity: "할동"
|
||||
images: "이미지"
|
||||
image: "이미지"
|
||||
birthday: "생일"
|
||||
yearsOld: "{age}살"
|
||||
registeredDate: "맨건 날"
|
||||
location: "장소"
|
||||
theme: "테마"
|
||||
themeForLightMode: "볽엄 모드서 설 테마"
|
||||
themeForDarkMode: "어덥엄 모드서 설 테마"
|
||||
light: "볽엄"
|
||||
dark: "어덥엄"
|
||||
lightThemes: "볽언 테마"
|
||||
darkThemes: "어덥언 테마"
|
||||
syncDeviceDarkMode: "디바이스 쪽 어덥엄 모드하고 같구로 마추기"
|
||||
drive: "드라이브"
|
||||
fileName: "파일 이럼"
|
||||
selectFile: "파일 개리기"
|
||||
selectFiles: "파일 개리기"
|
||||
selectFolder: "폴더 개리기"
|
||||
selectFolders: "폴더 개리기"
|
||||
renameFile: "파일 이럼 바꾸기"
|
||||
folderName: "폴더 이럼"
|
||||
createFolder: "폴더 맨걸기"
|
||||
renameFolder: "폴더 이럼 바꾸기"
|
||||
deleteFolder: "폴더 뭉캐기"
|
||||
folder: "폴더"
|
||||
addFile: "파일 옇기"
|
||||
emptyDrive: "드라이브가 비잇십니다"
|
||||
emptyFolder: "폴더가 비잇십니다"
|
||||
unableToDelete: "몬 뭉캡니다"
|
||||
inputNewFileName: "새 파일 이럼얼 서 보이소"
|
||||
inputNewDescription: "새 설멩얼 서 보이소"
|
||||
inputNewFolderName: "새 폴더 이럼얼 서 보이소"
|
||||
circularReferenceFolder: "엚길 폴더으 아래 폴더입니다."
|
||||
hasChildFilesOrFolders: "요 폴더넌 아이 비잇어니께 몬 뭉캡니다."
|
||||
copyUrl: "주소 복사하기"
|
||||
rename: "이럼 바꾸기"
|
||||
avatar: "아바타"
|
||||
banner: "배너"
|
||||
displayOfSensitiveMedia: "수ᇚ힌 옝상물 보기"
|
||||
whenServerDisconnected: "서버하고 옌겔이 껂기모"
|
||||
disconnectedFromServer: "서버하고 옌겔이 껂깃십니다"
|
||||
reload: "새로곤침"
|
||||
doNothing: "무시하기"
|
||||
reloadConfirm: "새로곤침합니꺼?"
|
||||
watch: "간심 갖기"
|
||||
unwatch: "간심 고마 갖기"
|
||||
accept: "받기"
|
||||
reject: "아이 받기"
|
||||
normal: "일반"
|
||||
instanceName: "서버 이럼"
|
||||
instanceDescription: "서버 소개"
|
||||
maintainerName: "간리자 이럼"
|
||||
maintainerEmail: "간리자 전자우펜"
|
||||
tosUrl: "이용 약간 주소"
|
||||
thisYear: "올개"
|
||||
thisMonth: "요달"
|
||||
today: "오올"
|
||||
dayX: "{day}일"
|
||||
monthX: "{month}월"
|
||||
yearX: "{year}년"
|
||||
pages: "바닥"
|
||||
integration: "옌겔"
|
||||
connectService: "옌겔하기"
|
||||
disconnectService: "껂기"
|
||||
enableLocalTimeline: "로컬 타임라인 키기"
|
||||
enableGlobalTimeline: "글로벌 타임라인 키기"
|
||||
disablingTimelinesInfo: "요 타임라인얼 꺼도 간리자하고 중재자넌 고대로 설 수 잇십니다."
|
||||
registration: "맨걸기"
|
||||
enableRegistration: "누라도 새로 맨걸 수 잇거로 하기"
|
||||
invite: "초대하기"
|
||||
driveCapacityPerLocalAccount: "로컬 사용자 하나마중 드라이브 커기"
|
||||
driveCapacityPerRemoteAccount: "웬겍 사용자 하나마중 드라이브 커기"
|
||||
inMb: "메가바이트 단이"
|
||||
bannerUrl: "배너 이미지 주소"
|
||||
backgroundImageUrl: "배겡 이미지 주소"
|
||||
basicInfo: "기본 정보"
|
||||
pinnedUsers: "붙인 사용자"
|
||||
pinnedUsersDescription: "‘살펴보기’서 붙일라넌 사용자럴 줄 바꿈해서로 적십니다."
|
||||
pinnedPages: "붙인 바닥"
|
||||
pinnedPagesDescription: "서버으 대문서 붙일라넌 바닥으 겡로럴 줄 바꿈해서로 적십니다."
|
||||
pinnedClipId: "붙일 클립으 아이디"
|
||||
pinnedNotes: "붙인 노트"
|
||||
hcaptcha: "에이치캡차"
|
||||
enableHcaptcha: "에이치캡차 키기"
|
||||
hcaptchaSiteKey: "사이트키"
|
||||
hcaptchaSecretKey: "시크릿키"
|
||||
recaptcha: "리캡차"
|
||||
enableRecaptcha: "리캡차 키기"
|
||||
recaptchaSiteKey: "사이트키"
|
||||
recaptchaSecretKey: "시크릿키"
|
||||
turnstile: "턴스타일"
|
||||
enableTurnstile: "턴스타일 키기"
|
||||
turnstileSiteKey: "사이트키"
|
||||
turnstileSecretKey: "시크릿키"
|
||||
avoidMultiCaptchaConfirm: "오만 캡차럴 서모 간섭이 잇얼 깁니다. 다린 캡차를 껍니꺼? ‘아이예’럴 누질리모 오만 캡차럴 키 둘 수도 잇십니다."
|
||||
antennas: "안테나"
|
||||
manageAntennas: "안테나 간리"
|
||||
name: "이럼"
|
||||
antennaSource: "받얼 소스"
|
||||
antennaKeywords: "받얼 검색어"
|
||||
antennaExcludeKeywords: "수ᇚ훌 검색어"
|
||||
antennaKeywordsDescription: "띠어서기럴 하모 ‘거라고’가 데고 줄 바꿈얼 하모 ‘아이먼’이 뎁니다"
|
||||
notifyAntenna: "새 노트럴 알리기"
|
||||
withFileAntenna: "파일이 붙언 노트마"
|
||||
enableServiceworker: "브라우저서 알림 포시럴 키기"
|
||||
antennaUsersDescription: "사용자 이럼얼 줄 바꿈해서로 섭니다"
|
||||
caseSensitive: "대소문자럴 구벨하기"
|
||||
withReplies: "답하기도 옇기"
|
||||
connectedTo: "요 게정하고 옌겔데어 잇십니다"
|
||||
notesAndReplies: "걸하고 답걸"
|
||||
withFiles: "파일에 붙이기"
|
||||
silence: "수ᇚ후기"
|
||||
silenceConfirm: "수ᇚ훕니꺼?"
|
||||
unsilence: "수ᇚ후기 어ᇝ애기"
|
||||
unsilenceConfirm: "수ᇚ후기럴 어ᇝ앱니꺼?"
|
||||
popularUsers: "소문난 사용자"
|
||||
recentlyUpdatedUsers: "얼마 전에 걸 선 사용자"
|
||||
recentlyRegisteredUsers: "얼마 전에 맨건 사용자"
|
||||
recentlyDiscoveredUsers: "얼마 전에 찾언 사용자"
|
||||
exploreUsersCount: "사용자 {count}멩이 잇십니다."
|
||||
exploreFediverse: "옌합우주 탐험하기"
|
||||
popularTags: "소문난 태그"
|
||||
userList: "리스트"
|
||||
about: "정보"
|
||||
aboutMisskey: "Misskey넌예"
|
||||
administrator: "간리자"
|
||||
token: "학인 기호"
|
||||
2fa: "두 단게 정멩"
|
||||
setupOf2fa: "두 단게 정멩 설정"
|
||||
totp: "정멩 앱"
|
||||
totpDescription: "정멩 앱서 단헤용 비밀번호 서기"
|
||||
moderator: "중재자"
|
||||
moderation: "중재"
|
||||
moderationNote: "중재 노트"
|
||||
addModerationNote: "중재 노트 옇기"
|
||||
moderationLogs: "중재 일지"
|
||||
nUsersMentioned: "{n}멩이 이바구하고 잇어예"
|
||||
securityKeyAndPasskey: "보안키·패스키"
|
||||
securityKey: "보안키"
|
||||
lastUsed: "마지막 쓰임"
|
||||
lastUsedAt: "마지막 쓰임: {t}"
|
||||
unregister: "맨걸기 무루기"
|
||||
passwordLessLogin: "비밀번호 없시 로그인"
|
||||
passwordLessLoginDescription: "비밀번호 말고 보안키나 패스키 같은 것만 써 가 로그인합니다."
|
||||
resetPassword: "비밀번호 재설정"
|
||||
newPasswordIs: "새 비밀번호는 \"{password}\" 입니다"
|
||||
reduceUiAnimation: "화면 움직임 효과들을 수ᇚ후기"
|
||||
share: "노누기"
|
||||
notFound: "몬 찾앗십니다"
|
||||
notFoundDescription: "고런 주소로 들어가는 하멘은 없십니다."
|
||||
uploadFolder: "기본 업로드 위치"
|
||||
markAsReadAllNotifications: "모든 알림 이럿다고 표시"
|
||||
markAsReadAllUnreadNotes: "모든 글 이럿다고 표시"
|
||||
markAsReadAllTalkMessages: "모든 대화 이럿다고 표시"
|
||||
help: "도움말"
|
||||
inputMessageHere: "여따가 메시지를 입력해주이소"
|
||||
close: "닫기"
|
||||
invites: "초대하기"
|
||||
members: "멤버"
|
||||
transfer: "양도"
|
||||
title: "제목"
|
||||
text: "글"
|
||||
enable: "키기"
|
||||
next: "다음"
|
||||
retype: "다시 서기"
|
||||
noteOf: "{user}님으 노트"
|
||||
quoteAttached: "따옴"
|
||||
quoteQuestion: "따와가 작성하겠십니까?"
|
||||
noMessagesYet: "아직 대화가 없십니다"
|
||||
newMessageExists: "새 메시지가 있십니다"
|
||||
onlyOneFileCanBeAttached: "메시지엔 파일 하나까제밖에 몬 넣십니다"
|
||||
invitations: "초대하기"
|
||||
invitationCode: "초대장"
|
||||
checking: "학인하고 잇십니다"
|
||||
passwordMatched: "맞십니다"
|
||||
passwordNotMatched: "안 맞십니다"
|
||||
signinFailed: "로그인 몬 했십니다. 고 이름이랑 비밀번호 제대로 썼는가 확인해 주이소."
|
||||
or: "아니면"
|
||||
language: "언어"
|
||||
uiLanguage: "UI 표시 언어"
|
||||
aboutX: "{x}에 대해서"
|
||||
emojiStyle: "이모지 모양"
|
||||
native: "기본"
|
||||
disableDrawer: "드로어 메뉴 쓰지 않기"
|
||||
showNoteActionsOnlyHover: "마우스 올맀을 때만 노트 액션 버턴 보이기"
|
||||
noHistory: "기록이 없십니다"
|
||||
signinHistory: "로그인 기록"
|
||||
enableAdvancedMfm: "복잡한 MFM 키기"
|
||||
enableAnimatedMfm: "정신사나운 MFM 키기"
|
||||
doing: "잠만예"
|
||||
category: "카테고리"
|
||||
tags: "태그"
|
||||
docSource: "요 문서의 원본"
|
||||
createAccount: "게정 맨걸기"
|
||||
existingAccount: "원래 게정"
|
||||
regenerate: "엎고 다시 맨걸기"
|
||||
fontSize: "글자 크기"
|
||||
mediaListWithOneImageAppearance: "사진 하나짜리 미디어 목록의 높이"
|
||||
limitTo: "{x}로 제한"
|
||||
noFollowRequests: "지둘리는 팔로우 요청이 없십니다"
|
||||
openImageInNewTab: "새 탭서 사진 열기"
|
||||
dashboard: "대시보드"
|
||||
local: "로컬"
|
||||
remote: "웬겍"
|
||||
total: "합계"
|
||||
weekOverWeekChanges: "저번주보다"
|
||||
dayOverDayChanges: "어제보다"
|
||||
appearance: "모냥"
|
||||
clientSettings: "클라이언트 설정"
|
||||
accountSettings: "게정 설정"
|
||||
promotion: "선전"
|
||||
promote: "선전하기"
|
||||
numberOfDays: "며칠동안"
|
||||
hideThisNote: "요 노트를 수ᇚ후기"
|
||||
showFeaturedNotesInTimeline: "타임라인에다 추천 노트 보이기"
|
||||
objectStorage: "오브젝트 스토리지"
|
||||
useObjectStorage: "오브젝트 스토리지 키기"
|
||||
objectStorageBaseUrl: "Base URL"
|
||||
objectStorageBaseUrlDesc: "오브젝트 (미디어) 참조 링크 만들 때 쓰는 URL임다. CDN 내지 프락시를 쓴다 카멘은 그 URL을 갖다 늫고, 아이면 써먹을 서비스네 가이드를 봐봐가 공개적으로 접근할 수 있는 주소를 여 넣어 주이소. 그니께, 내가 AWS S3을 쓴다 카면은 'https://<bucket>.s3.amazonaws.com', GCS를 쓴다 카면 'https://storage.googleapis.com/<bucket>' 처럼 쓰믄 되입니더."
|
||||
objectStorageBucket: "Bucket"
|
||||
objectStorageBucketDesc: "써먹을 서비스의 바께쓰 이름을 여 써 주이소."
|
||||
objectStoragePrefix: "Prefix"
|
||||
objectStoragePrefixDesc: "요 Prefix 디렉토리 안에다가 파일이 들어감다."
|
||||
objectStorageEndpoint: "Endpoint"
|
||||
objectStorageEndpointDesc: "AWS S3을 쓸라멘 요는 비워두고, 아이멘은 그 서비스 가이드에 맞게 endpoint를 넣어 주이소. '<host>' 내지 '<host>:<port>'처럼 넣십니다."
|
||||
objectStorageRegion: "Region"
|
||||
objectStorageRegionDesc: "'xx-east-1' 같은 region 이름을 옇어 주이소. 써먹을 서비스에 region 개념 같은 게 읎다! 카면은 대신에 'us-east-1'을 옇어 놓으이소. AWS 설정 파일이나 환경 변수를 갖다 끌어다 쓸 거면은 요는 비워 두이소."
|
||||
objectStorageUseSSL: "SSL 쓰기"
|
||||
objectStorageUseSSLDesc: "API 호출할 때 HTTPS 안 쓸거면은 꺼 두이소"
|
||||
objectStorageUseProxy: "연결에 프락시 사용"
|
||||
objectStorageUseProxyDesc: "오브젝트 스토리지 API 호출에 프락시 안 쓸 거면 꺼 두이소"
|
||||
objectStorageSetPublicRead: "업로드할 때 'public-read' 설정하기"
|
||||
s3ForcePathStyleDesc: "s3ForcePathStyle을 키면, 바께쓰 이름을 URL의 호스트명 말고 경로의 일부로써 취급합니다. 셀프 호스트 Minio 같은 걸 굴릴라믄 켜놔야 될 수도 있십니다."
|
||||
serverLogs: "서버 로그"
|
||||
deleteAll: "말캉 뭉캐기"
|
||||
showFixedPostForm: "타임라인 우에 글 작성 칸 박기"
|
||||
showFixedPostFormInChannel: "채널 타임라인 우에 글 작성 칸 박기"
|
||||
withRepliesByDefaultForNewlyFollowed: "팔로우 할 때 기본적으로 답걸도 타임라인에 나오게 하기"
|
||||
newNoteRecived: "새 노트 있어예"
|
||||
sounds: "소리"
|
||||
sound: "소리"
|
||||
listen: "듣기"
|
||||
none: "없음"
|
||||
showInPage: "바닥서 보기"
|
||||
popout: "새 창 열기"
|
||||
volume: "음량"
|
||||
masterVolume: "대빵 음량"
|
||||
notUseSound: "음소거하기"
|
||||
useSoundOnlyWhenActive: "Misskey가 활성화되어 있을 때만 소리 내기"
|
||||
details: "좀 더"
|
||||
chooseEmoji: "이모지 선택"
|
||||
unableToProcess: "작업 다 몬 했십니다"
|
||||
recentUsed: "최근 쓴 놈"
|
||||
install: "설치"
|
||||
uninstall: "삭제"
|
||||
installedApps: "설치된 애플리케이션"
|
||||
nothing: "뭣도 없어예"
|
||||
installedDate: "설치한 날"
|
||||
lastUsedDate: "마지막 사용"
|
||||
state: "상태"
|
||||
sort: "정렬하기"
|
||||
ascendingOrder: "작은 순"
|
||||
descendingOrder: "큰 순"
|
||||
scratchpad: "스크래치 패드"
|
||||
scratchpadDescription: "스크래치 패드는 AiScript를 끼적거리는 창입니더. Misskey랑 갖다 이리저리 상호작용하는 코드를 서가 굴리멘은 그 결과도 바로 확인할 수 있십니다."
|
||||
output: "출력"
|
||||
script: "스크립트"
|
||||
disablePagesScript: "온갖 바닥서 AiScript를 쓰지 않음"
|
||||
updateRemoteUser: "원겍 사용자 근황 알아오기"
|
||||
unsetUserAvatar: "아바타 치우기"
|
||||
unsetUserAvatarConfirm: "아바타 갖다 치울까예?"
|
||||
unsetUserBanner: "배너 치우기"
|
||||
unsetUserBannerConfirm: "배너 갖다 치울까예?"
|
||||
deleteAllFiles: "파일 말캉 뭉캐기"
|
||||
deleteAllFilesConfirm: "파일을 싸그리 다 뭉캐삐릴까예?"
|
||||
removeAllFollowing: "팔로잉 말캉 무루기"
|
||||
removeAllFollowingDescription: "{host} 서버랑 걸어놓은 모든 팔로잉을 무룹니다. 고 서버가 아예 없어지삐맀든가, 그런 경우에 하이소."
|
||||
userSuspended: "요 게정은... 얼어 있십니다."
|
||||
userSilenced: "요 게정은... 수ᇚ혀 있십니다."
|
||||
relays: "릴레이"
|
||||
addRelay: "릴레이 옇기"
|
||||
addedRelays: "옇은 릴레이"
|
||||
enableInfiniteScroll: "알아서 더 보기"
|
||||
author: "맨던 사람"
|
||||
manage: "간리"
|
||||
emailServer: "전자우펜 서버"
|
||||
email: "전자우펜"
|
||||
emailAddress: "전자우펜 주소"
|
||||
smtpHost: "호스트 이럼"
|
||||
smtpPort: "포트"
|
||||
smtpUser: "사용자 이럼"
|
||||
smtpPass: "비밀번호"
|
||||
display: "보기"
|
||||
create: "맨걸기"
|
||||
abuseReports: "신고하기"
|
||||
reportAbuse: "신고하기"
|
||||
reportAbuseRenote: "리노트 신고하기"
|
||||
reportAbuseOf: "{name}님얼 신고하기"
|
||||
reporter: "신고한 사람"
|
||||
reporteeOrigin: "신고덴 사람"
|
||||
reporterOrigin: "신고한 곳"
|
||||
forwardReport: "웬겍 서버에 신고 보내기"
|
||||
random: "무작이"
|
||||
system: "시스템"
|
||||
clip: "클립 맨걸기"
|
||||
createNew: "새로 맨걸기"
|
||||
notesCount: "노트 수"
|
||||
renotesCount: "리노트한 수"
|
||||
renotedCount: "리노트덴 수"
|
||||
followingCount: "팔로우 수"
|
||||
followersCount: "팔로워 수"
|
||||
clips: "클립 맨걸기"
|
||||
clearCache: "캐시 비우기"
|
||||
unlikeConfirm: "좋네예럴 무룹니꺼?"
|
||||
info: "정보"
|
||||
user: "사용자"
|
||||
administration: "간리"
|
||||
on: "킴"
|
||||
off: "껌"
|
||||
clickToFinishEmailVerification: "[{ok}]럴 누질라서 전자우펜 정멩얼 껕내이소."
|
||||
searchByGoogle: "찾기"
|
||||
tenMinutes: "십 분"
|
||||
oneHour: "한 시간"
|
||||
oneDay: "하리"
|
||||
oneWeek: "한 주"
|
||||
oneMonth: "한 달"
|
||||
file: "파일"
|
||||
tools: "도구"
|
||||
like: "좋네예!"
|
||||
unlike: "좋네예 무루기"
|
||||
numberOfLikes: "좋네예 수"
|
||||
show: "보기"
|
||||
roles: "옉할"
|
||||
role: "옉할"
|
||||
noRole: "옉할이 없십니다"
|
||||
thisPostMayBeAnnoyingCancel: "아이예"
|
||||
likeOnly: "좋네예마"
|
||||
icon: "아바타"
|
||||
replies: "답하기"
|
||||
renotes: "리노트"
|
||||
_initialAccountSetting:
|
||||
startTutorial: "길라잡이 하기"
|
||||
_initialTutorial:
|
||||
launchTutorial: "길라잡이 보기"
|
||||
title: "길라잡이"
|
||||
skipAreYouSure: "길라잡이럴 껕냅니까?"
|
||||
_landing:
|
||||
title: "길라잡이에 어서 오이소"
|
||||
_done:
|
||||
title: "길라잡이가 껕낫십니다!🎉"
|
||||
_achievements:
|
||||
_types:
|
||||
_tutorialCompleted:
|
||||
description: "길라잡이럴 껕냇십니다"
|
||||
_gallery:
|
||||
liked: "좋네예한 걸"
|
||||
like: "좋네예!"
|
||||
unlike: "좋네예 무루기"
|
||||
_email:
|
||||
_follow:
|
||||
title: "새 팔로워가 잇십니다"
|
||||
_serverDisconnectedBehavior:
|
||||
reload: "알아서 새로곤침"
|
||||
_channel:
|
||||
removeBanner: "배너 뭉캐기"
|
||||
_theme:
|
||||
keys:
|
||||
mention: "멘션"
|
||||
_sfx:
|
||||
note: "새 노트"
|
||||
notification: "알림"
|
||||
_2fa:
|
||||
step3Title: "학인 기호럴 서기"
|
||||
renewTOTPCancel: "뎃어예"
|
||||
_widgets:
|
||||
profile: "프로필"
|
||||
instanceInfo: "서버 정보"
|
||||
notifications: "알림"
|
||||
timeline: "타임라인"
|
||||
activity: "할동"
|
||||
federation: "옌합"
|
||||
jobQueue: "작업 대기옐"
|
||||
_userList:
|
||||
chooseList: "리스트 개리기"
|
||||
_cw:
|
||||
show: "더 볼래예"
|
||||
_visibility:
|
||||
home: "덜머리"
|
||||
followers: "팔로워"
|
||||
_profile:
|
||||
name: "이럼"
|
||||
username: "사용자 이럼"
|
||||
_exportOrImport:
|
||||
followingList: "팔로잉"
|
||||
muteList: "수ᇚ후기"
|
||||
blockingList: "차단하기"
|
||||
userLists: "리스트"
|
||||
_charts:
|
||||
federation: "옌합"
|
||||
_timelines:
|
||||
home: "덜머리"
|
||||
_play:
|
||||
script: "스크립트"
|
||||
_pages:
|
||||
like: "좋네예"
|
||||
unlike: "좋네예 무루기"
|
||||
blocks:
|
||||
image: "이미지"
|
||||
_note:
|
||||
id: "노트 아이디"
|
||||
_notification:
|
||||
youWereFollowed: "새 팔로워가 잇십니다"
|
||||
_types:
|
||||
follow: "팔로잉"
|
||||
mention: "멘션"
|
||||
quote: "따오기"
|
||||
reaction: "반엉"
|
||||
_actions:
|
||||
reply: "답하기"
|
||||
_deck:
|
||||
_columns:
|
||||
notifications: "알림"
|
||||
tl: "타임라인"
|
||||
antenna: "안테나"
|
||||
list: "리스트"
|
||||
mentions: "받언 멘션"
|
||||
_webhookSettings:
|
||||
name: "이럼"
|
||||
_moderationLogTypes:
|
||||
suspend: "얼우기"
|
||||
deleteNote: "노트 뭉캐기"
|
||||
deleteUserAnnouncement: "사용자 공지 걸 뭉캐기"
|
||||
resetPassword: "비밀번호 재설정"
|
||||
resolveAbuseReport: "신고 해겔하기"
|
1624
locales/ko-KR.yml
1624
locales/ko-KR.yml
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user