Compare commits
27 Commits
master
...
fetch-outb
Author | SHA1 | Date | |
---|---|---|---|
![]() |
a926e84b14 | ||
![]() |
df636659e2 | ||
![]() |
888cd2eb9f | ||
![]() |
ff4b3d2d9e | ||
![]() |
60fd848182 | ||
![]() |
76def0032e | ||
![]() |
da0804eb17 | ||
![]() |
6b26ce3768 | ||
![]() |
5a0d7d41e6 | ||
![]() |
08e2b6ee32 | ||
![]() |
ca0c673b44 | ||
![]() |
70bb9a4d1f | ||
![]() |
b93046c071 | ||
![]() |
f34f0dfcb6 | ||
![]() |
26040c2bb0 | ||
![]() |
bdbad4605b | ||
![]() |
ec62fe02b1 | ||
![]() |
a74af07992 | ||
![]() |
aa78c29e8c | ||
![]() |
45d0b46e7a | ||
![]() |
6087d02047 | ||
![]() |
7bf318ae98 | ||
![]() |
71d74676f0 | ||
![]() |
5077df2973 | ||
![]() |
a1388a8444 | ||
![]() |
630e97bd06 | ||
![]() |
2e1de4fca9 |
@@ -1,229 +0,0 @@
|
|||||||
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
||||||
# Misskey configuration
|
|
||||||
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
||||||
|
|
||||||
# ┌────────────────────────┐
|
|
||||||
#───┘ Initial Setup Password └─────────────────────────────────────────────────────
|
|
||||||
|
|
||||||
# Password to initiate setting up admin account.
|
|
||||||
# It will not be used after the initial setup is complete.
|
|
||||||
#
|
|
||||||
# Be sure to change this when you set up Misskey via the Internet.
|
|
||||||
#
|
|
||||||
# The provider of the service who sets up Misskey on behalf of the customer should
|
|
||||||
# set this value to something unique when generating the Misskey config file,
|
|
||||||
# and provide it to the customer.
|
|
||||||
setupPassword: example_password_please_change_this_or_you_will_get_hacked
|
|
||||||
|
|
||||||
# ┌─────┐
|
|
||||||
#───┘ URL └─────────────────────────────────────────────────────
|
|
||||||
|
|
||||||
# Final accessible URL seen by a user.
|
|
||||||
url: 'http://misskey.local'
|
|
||||||
|
|
||||||
# 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: 61812
|
|
||||||
|
|
||||||
# ┌──────────────────────────┐
|
|
||||||
#───┘ 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
|
|
||||||
|
|
||||||
#redisForReactions:
|
|
||||||
# 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'
|
|
||||||
|
|
||||||
# ┌────────────────┐
|
|
||||||
#───┘ Error tracking └──────────────────────────────────────────
|
|
||||||
|
|
||||||
# Sentry is available for error tracking.
|
|
||||||
# See the Sentry documentation for more details on options.
|
|
||||||
|
|
||||||
#sentryForBackend:
|
|
||||||
# enableNodeProfiling: true
|
|
||||||
# options:
|
|
||||||
# dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0'
|
|
||||||
|
|
||||||
#sentryForFrontend:
|
|
||||||
# options:
|
|
||||||
# dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0'
|
|
||||||
|
|
||||||
# ┌─────────────────────┐
|
|
||||||
#───┘ 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'
|
|
||||||
]
|
|
||||||
|
|
||||||
# Disable automatic redirect for ActivityPub object lookup. (default: false)
|
|
||||||
# This is a strong defense against potential impersonation attacks if the viewer instance has inadequate validation.
|
|
||||||
# However it will make it impossible for other instances to lookup third-party user and notes through your URL.
|
|
||||||
#disallowExternalApRedirect: true
|
|
||||||
|
|
||||||
# Upload or download file size limits (bytes)
|
|
||||||
#maxFileSize: 262144000
|
|
@@ -1,11 +1,4 @@
|
|||||||
# misskey settings
|
|
||||||
# MISSKEY_URL=https://example.tld/
|
|
||||||
|
|
||||||
# db settings
|
# db settings
|
||||||
POSTGRES_PASSWORD=example-misskey-pass
|
POSTGRES_PASSWORD=example-misskey-pass
|
||||||
# DATABASE_PASSWORD=${POSTGRES_PASSWORD}
|
|
||||||
POSTGRES_USER=example-misskey-user
|
POSTGRES_USER=example-misskey-user
|
||||||
# DATABASE_USER=${POSTGRES_USER}
|
|
||||||
POSTGRES_DB=misskey
|
POSTGRES_DB=misskey
|
||||||
# DATABASE_DB=${POSTGRES_DB}
|
|
||||||
DATABASE_URL="postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}"
|
|
||||||
|
@@ -6,7 +6,6 @@
|
|||||||
#───┘ URL └─────────────────────────────────────────────────────
|
#───┘ URL └─────────────────────────────────────────────────────
|
||||||
|
|
||||||
# Final accessible URL seen by a user.
|
# Final accessible URL seen by a user.
|
||||||
# You can set url from an environment variable instead.
|
|
||||||
url: https://example.tld/
|
url: https://example.tld/
|
||||||
|
|
||||||
# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE
|
# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE
|
||||||
@@ -39,11 +38,9 @@ db:
|
|||||||
port: 5432
|
port: 5432
|
||||||
|
|
||||||
# Database name
|
# Database name
|
||||||
# You can set db from an environment variable instead.
|
|
||||||
db: misskey
|
db: misskey
|
||||||
|
|
||||||
# Auth
|
# Auth
|
||||||
# You can set user and pass from environment variables instead.
|
|
||||||
user: example-misskey-user
|
user: example-misskey-user
|
||||||
pass: example-misskey-pass
|
pass: example-misskey-pass
|
||||||
|
|
||||||
@@ -98,45 +95,8 @@ redis:
|
|||||||
# #prefix: example-prefix
|
# #prefix: example-prefix
|
||||||
# #db: 1
|
# #db: 1
|
||||||
|
|
||||||
#redisForTimelines:
|
# ┌───────────────────────────┐
|
||||||
# host: redis
|
#───┘ MeiliSearch configuration └─────────────────────────────
|
||||||
# port: 6379
|
|
||||||
# #family: 0 # 0=Both, 4=IPv4, 6=IPv6
|
|
||||||
# #pass: example-pass
|
|
||||||
# #prefix: example-prefix
|
|
||||||
# #db: 1
|
|
||||||
|
|
||||||
#redisForReactions:
|
|
||||||
# host: redis
|
|
||||||
# port: 6379
|
|
||||||
# #family: 0 # 0=Both, 4=IPv4, 6=IPv6
|
|
||||||
# #pass: example-pass
|
|
||||||
# #prefix: example-prefix
|
|
||||||
# #db: 1
|
|
||||||
|
|
||||||
# ┌───────────────────────────────┐
|
|
||||||
#───┘ Fulltext search configuration └─────────────────────────────
|
|
||||||
|
|
||||||
# These are the setting items for the full-text search provider.
|
|
||||||
fulltextSearch:
|
|
||||||
# You can select the ID generation method.
|
|
||||||
# - sqlLike (default)
|
|
||||||
# Use SQL-like search.
|
|
||||||
# This is a standard feature of PostgreSQL, so no special extensions are required.
|
|
||||||
# - sqlPgroonga
|
|
||||||
# Use pgroonga.
|
|
||||||
# You need to install pgroonga and configure it as a PostgreSQL extension.
|
|
||||||
# In addition to the above, you need to create a pgroonga index on the text column of the note table.
|
|
||||||
# see: https://pgroonga.github.io/tutorial/
|
|
||||||
# - meilisearch
|
|
||||||
# Use Meilisearch.
|
|
||||||
# You need to install Meilisearch and configure.
|
|
||||||
provider: sqlLike
|
|
||||||
|
|
||||||
# For Meilisearch settings.
|
|
||||||
# If you select "meilisearch" for "fulltextSearch.provider", it must be set.
|
|
||||||
# You can set scope to local (default value) or global
|
|
||||||
# (include notes from remote).
|
|
||||||
|
|
||||||
#meilisearch:
|
#meilisearch:
|
||||||
# host: meilisearch
|
# host: meilisearch
|
||||||
@@ -144,7 +104,6 @@ fulltextSearch:
|
|||||||
# apiKey: ''
|
# apiKey: ''
|
||||||
# ssl: true
|
# ssl: true
|
||||||
# index: ''
|
# index: ''
|
||||||
# scope: local
|
|
||||||
|
|
||||||
# ┌───────────────┐
|
# ┌───────────────┐
|
||||||
#───┘ ID generation └───────────────────────────────────────────
|
#───┘ ID generation └───────────────────────────────────────────
|
||||||
@@ -165,21 +124,6 @@ fulltextSearch:
|
|||||||
|
|
||||||
id: 'aidx'
|
id: 'aidx'
|
||||||
|
|
||||||
# ┌────────────────┐
|
|
||||||
#───┘ Error tracking └──────────────────────────────────────────
|
|
||||||
|
|
||||||
# Sentry is available for error tracking.
|
|
||||||
# See the Sentry documentation for more details on options.
|
|
||||||
|
|
||||||
#sentryForBackend:
|
|
||||||
# enableNodeProfiling: true
|
|
||||||
# options:
|
|
||||||
# dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0'
|
|
||||||
|
|
||||||
#sentryForFrontend:
|
|
||||||
# options:
|
|
||||||
# dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0'
|
|
||||||
|
|
||||||
# ┌─────────────────────┐
|
# ┌─────────────────────┐
|
||||||
#───┘ Other configuration └─────────────────────────────────────
|
#───┘ Other configuration └─────────────────────────────────────
|
||||||
|
|
||||||
@@ -195,7 +139,7 @@ id: 'aidx'
|
|||||||
|
|
||||||
# Job rate limiter
|
# Job rate limiter
|
||||||
# deliverJobPerSec: 128
|
# deliverJobPerSec: 128
|
||||||
# inboxJobPerSec: 32
|
# inboxJobPerSec: 16
|
||||||
|
|
||||||
# Job attempts
|
# Job attempts
|
||||||
# deliverJobMaxAttempts: 12
|
# deliverJobMaxAttempts: 12
|
||||||
@@ -228,27 +172,9 @@ proxyRemoteFiles: true
|
|||||||
# Sign to ActivityPub GET request (default: true)
|
# Sign to ActivityPub GET request (default: true)
|
||||||
signToActivityPubGet: 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: [
|
#allowedPrivateNetworks: [
|
||||||
# '127.0.0.1/32'
|
# '127.0.0.1/32'
|
||||||
#]
|
#]
|
||||||
|
|
||||||
# Disable automatic redirect for ActivityPub object lookup. (default: false)
|
|
||||||
# This is a strong defense against potential impersonation attacks if the viewer instance has inadequate validation.
|
|
||||||
# However it will make it impossible for other instances to lookup third-party user and notes through your URL.
|
|
||||||
#disallowExternalApRedirect: true
|
|
||||||
|
|
||||||
# Upload or download file size limits (bytes)
|
# Upload or download file size limits (bytes)
|
||||||
#maxFileSize: 262144000
|
#maxFileSize: 262144000
|
||||||
|
|
||||||
# Log settings
|
|
||||||
# logging:
|
|
||||||
# sql:
|
|
||||||
# # Outputs query parameters during SQL execution to the log.
|
|
||||||
# # default: false
|
|
||||||
# enableQueryParamLogging: false
|
|
||||||
# # Disable query truncation. If set to true, the full text of the query will be output to the log.
|
|
||||||
# # default: false
|
|
||||||
# disableQueryTruncation: false
|
|
||||||
|
@@ -2,77 +2,6 @@
|
|||||||
# Misskey configuration
|
# Misskey configuration
|
||||||
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||||
|
|
||||||
# ┌──────────────────────────────┐
|
|
||||||
#───┘ a boring but important thing └────────────────────────────
|
|
||||||
|
|
||||||
#
|
|
||||||
# First of all, let me tell you a story that may possibly be
|
|
||||||
# boring to you and possibly important to you.
|
|
||||||
#
|
|
||||||
# Misskey is licensed under the AGPLv3 license. This license is
|
|
||||||
# known to be often misunderstood. Please read the following
|
|
||||||
# instructions carefully and select the appropriate option so
|
|
||||||
# that you do not negligently cause a license violation.
|
|
||||||
#
|
|
||||||
|
|
||||||
# --------
|
|
||||||
# Option 1: If you host Misskey AS-IS (without any changes to
|
|
||||||
# the source code. forks are not included).
|
|
||||||
#
|
|
||||||
# Step 1: Congratulations! You don't need to do anything.
|
|
||||||
|
|
||||||
# --------
|
|
||||||
# Option 2: If you have made changes to the source code (forks
|
|
||||||
# are included) and publish a Git repository of source
|
|
||||||
# code. There should be no access restrictions on
|
|
||||||
# this repository. Strictly speaking, it doesn't have
|
|
||||||
# to be a Git repository, but you'll probably use Git!
|
|
||||||
#
|
|
||||||
# Step 1: Build and run the Misskey server first.
|
|
||||||
# Step 2: Open <https://your.misskey.example/admin/settings> in
|
|
||||||
# your browser with the administrator account.
|
|
||||||
# Step 3: Enter the URL of your Git repository in the
|
|
||||||
# "Repository URL" field.
|
|
||||||
|
|
||||||
# --------
|
|
||||||
# Option 3: If neither of the above applies to you.
|
|
||||||
# (In this case, the source code should be published
|
|
||||||
# on the Misskey interface. IT IS NOT ENOUGH TO
|
|
||||||
# DISCLOSE THE SOURCE CODE WHEN A USER REQUESTS IT BY
|
|
||||||
# E-MAIL OR OTHER MEANS. If you are not satisfied
|
|
||||||
# with this, it is recommended that you read the
|
|
||||||
# license again carefully. Anyway, enabling this
|
|
||||||
# option will automatically generate and publish a
|
|
||||||
# tarball at build time, protecting you from
|
|
||||||
# inadvertent license violations. (There is no legal
|
|
||||||
# guarantee, of course.) The tarball will generated
|
|
||||||
# from the root directory of your codebase. So it is
|
|
||||||
# also recommended to check <built/tarball> directory
|
|
||||||
# once after building and before activating the server
|
|
||||||
# to avoid ACCIDENTAL LEAKING OF SENSITIVE INFORMATION.
|
|
||||||
# To prevent certain files from being included in the
|
|
||||||
# tarball, add a glob pattern after line 15 in
|
|
||||||
# <scripts/tarball.mjs>. DO NOT FORGET TO BUILD AFTER
|
|
||||||
# ENABLING THIS OPTION!)
|
|
||||||
#
|
|
||||||
# Step 1: Uncomment the following line.
|
|
||||||
#
|
|
||||||
# publishTarballInsteadOfProvideRepositoryUrl: true
|
|
||||||
|
|
||||||
# ┌────────────────────────┐
|
|
||||||
#───┘ Initial Setup Password └─────────────────────────────────────────────────────
|
|
||||||
|
|
||||||
# Password to initiate setting up admin account.
|
|
||||||
# It will not be used after the initial setup is complete.
|
|
||||||
#
|
|
||||||
# Be sure to change this when you set up Misskey via the Internet.
|
|
||||||
#
|
|
||||||
# The provider of the service who sets up Misskey on behalf of the customer should
|
|
||||||
# set this value to something unique when generating the Misskey config file,
|
|
||||||
# and provide it to the customer.
|
|
||||||
#
|
|
||||||
# setupPassword: example_password_please_change_this_or_you_will_get_hacked
|
|
||||||
|
|
||||||
# ┌─────┐
|
# ┌─────┐
|
||||||
#───┘ URL └─────────────────────────────────────────────────────
|
#───┘ URL └─────────────────────────────────────────────────────
|
||||||
|
|
||||||
@@ -176,49 +105,8 @@ redis:
|
|||||||
# # You can specify more ioredis options...
|
# # You can specify more ioredis options...
|
||||||
# #username: example-username
|
# #username: example-username
|
||||||
|
|
||||||
#redisForTimelines:
|
# ┌───────────────────────────┐
|
||||||
# host: localhost
|
#───┘ MeiliSearch configuration └─────────────────────────────
|
||||||
# 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
|
|
||||||
|
|
||||||
#redisForReactions:
|
|
||||||
# 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
|
|
||||||
|
|
||||||
# ┌───────────────────────────────┐
|
|
||||||
#───┘ Fulltext search configuration └─────────────────────────────
|
|
||||||
|
|
||||||
# These are the setting items for the full-text search provider.
|
|
||||||
fulltextSearch:
|
|
||||||
# You can select the ID generation method.
|
|
||||||
# - sqlLike (default)
|
|
||||||
# Use SQL-like search.
|
|
||||||
# This is a standard feature of PostgreSQL, so no special extensions are required.
|
|
||||||
# - sqlPgroonga
|
|
||||||
# Use pgroonga.
|
|
||||||
# You need to install pgroonga and configure it as a PostgreSQL extension.
|
|
||||||
# In addition to the above, you need to create a pgroonga index on the text column of the note table.
|
|
||||||
# see: https://pgroonga.github.io/tutorial/
|
|
||||||
# - meilisearch
|
|
||||||
# Use Meilisearch.
|
|
||||||
# You need to install Meilisearch and configure.
|
|
||||||
provider: sqlLike
|
|
||||||
|
|
||||||
# For Meilisearch settings.
|
|
||||||
# If you select "meilisearch" for "fulltextSearch.provider", it must be set.
|
|
||||||
# You can set scope to local (default value) or global
|
|
||||||
# (include notes from remote).
|
|
||||||
|
|
||||||
#meilisearch:
|
#meilisearch:
|
||||||
# host: localhost
|
# host: localhost
|
||||||
@@ -247,21 +135,6 @@ fulltextSearch:
|
|||||||
|
|
||||||
id: 'aidx'
|
id: 'aidx'
|
||||||
|
|
||||||
# ┌────────────────┐
|
|
||||||
#───┘ Error tracking └──────────────────────────────────────────
|
|
||||||
|
|
||||||
# Sentry is available for error tracking.
|
|
||||||
# See the Sentry documentation for more details on options.
|
|
||||||
|
|
||||||
#sentryForBackend:
|
|
||||||
# enableNodeProfiling: true
|
|
||||||
# options:
|
|
||||||
# dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0'
|
|
||||||
|
|
||||||
#sentryForFrontend:
|
|
||||||
# options:
|
|
||||||
# dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0'
|
|
||||||
|
|
||||||
# ┌─────────────────────┐
|
# ┌─────────────────────┐
|
||||||
#───┘ Other configuration └─────────────────────────────────────
|
#───┘ Other configuration └─────────────────────────────────────
|
||||||
|
|
||||||
@@ -274,14 +147,14 @@ id: 'aidx'
|
|||||||
# Job concurrency per worker
|
# Job concurrency per worker
|
||||||
#deliverJobConcurrency: 128
|
#deliverJobConcurrency: 128
|
||||||
#inboxJobConcurrency: 16
|
#inboxJobConcurrency: 16
|
||||||
#relationshipJobConcurrency: 16
|
#relashionshipJobConcurrency: 16
|
||||||
# What's relationshipJob?:
|
# What's relashionshipJob?:
|
||||||
# Follow, unfollow, block and unblock(ings) while following-imports, etc. or account migrations.
|
# Follow, unfollow, block and unblock(ings) while following-imports, etc. or account migrations.
|
||||||
|
|
||||||
# Job rate limiter
|
# Job rate limiter
|
||||||
#deliverJobPerSec: 128
|
#deliverJobPerSec: 128
|
||||||
#inboxJobPerSec: 32
|
#inboxJobPerSec: 16
|
||||||
#relationshipJobPerSec: 64
|
#relashionshipJobPerSec: 64
|
||||||
|
|
||||||
# Job attempts
|
# Job attempts
|
||||||
#deliverJobMaxAttempts: 12
|
#deliverJobMaxAttempts: 12
|
||||||
@@ -327,30 +200,9 @@ proxyRemoteFiles: true
|
|||||||
# Sign to ActivityPub GET request (default: true)
|
# Sign to ActivityPub GET request (default: true)
|
||||||
signToActivityPubGet: 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: [
|
#allowedPrivateNetworks: [
|
||||||
# '127.0.0.1/32'
|
# '127.0.0.1/32'
|
||||||
#]
|
#]
|
||||||
|
|
||||||
# Disable automatic redirect for ActivityPub object lookup. (default: false)
|
|
||||||
# This is a strong defense against potential impersonation attacks if the viewer instance has inadequate validation.
|
|
||||||
# However it will make it impossible for other instances to lookup third-party user and notes through your URL.
|
|
||||||
#disallowExternalApRedirect: true
|
|
||||||
|
|
||||||
# Upload or download file size limits (bytes)
|
# Upload or download file size limits (bytes)
|
||||||
#maxFileSize: 262144000
|
#maxFileSize: 262144000
|
||||||
|
|
||||||
# PID File of master process
|
|
||||||
#pidFile: /tmp/misskey.pid
|
|
||||||
|
|
||||||
# Log settings
|
|
||||||
# logging:
|
|
||||||
# sql:
|
|
||||||
# # Outputs query parameters during SQL execution to the log.
|
|
||||||
# # default: false
|
|
||||||
# enableQueryParamLogging: false
|
|
||||||
# # Disable query truncation. If set to true, the full text of the query will be output to the log.
|
|
||||||
# # default: false
|
|
||||||
# disableQueryTruncation: false
|
|
||||||
|
@@ -1,24 +1,23 @@
|
|||||||
{
|
{
|
||||||
"name": "Misskey",
|
"name": "Misskey",
|
||||||
"dockerComposeFile": "compose.yml",
|
"dockerComposeFile": "docker-compose.yml",
|
||||||
"service": "app",
|
"service": "app",
|
||||||
"workspaceFolder": "/workspace",
|
"workspaceFolder": "/workspace",
|
||||||
"features": {
|
"features": {
|
||||||
|
"ghcr.io/devcontainers-contrib/features/pnpm:2": {},
|
||||||
"ghcr.io/devcontainers/features/node:1": {
|
"ghcr.io/devcontainers/features/node:1": {
|
||||||
"version": "22.11.0"
|
"version": "20.5.1"
|
||||||
},
|
|
||||||
"ghcr.io/devcontainers-extra/features/pnpm:2": {
|
|
||||||
"version": "10.6.1"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"forwardPorts": [3000],
|
"forwardPorts": [3000],
|
||||||
"postCreateCommand": "/bin/bash .devcontainer/init.sh",
|
"postCreateCommand": "sudo chmod 755 .devcontainer/init.sh && .devcontainer/init.sh",
|
||||||
"customizations": {
|
"customizations": {
|
||||||
"vscode": {
|
"vscode": {
|
||||||
"extensions": [
|
"extensions": [
|
||||||
"editorconfig.editorconfig",
|
"editorconfig.editorconfig",
|
||||||
"dbaeumer.vscode-eslint",
|
"dbaeumer.vscode-eslint",
|
||||||
"Vue.volar",
|
"Vue.volar",
|
||||||
|
"Vue.vscode-typescript-vue-plugin",
|
||||||
"Orta.vscode-jest",
|
"Orta.vscode-jest",
|
||||||
"dbaeumer.vscode-eslint",
|
"dbaeumer.vscode-eslint",
|
||||||
"mrmlnc.vscode-json5"
|
"mrmlnc.vscode-json5"
|
||||||
|
@@ -95,22 +95,6 @@ redis:
|
|||||||
# #prefix: example-prefix
|
# #prefix: example-prefix
|
||||||
# #db: 1
|
# #db: 1
|
||||||
|
|
||||||
#redisForTimelines:
|
|
||||||
# host: redis
|
|
||||||
# port: 6379
|
|
||||||
# #family: 0 # 0=Both, 4=IPv4, 6=IPv6
|
|
||||||
# #pass: example-pass
|
|
||||||
# #prefix: example-prefix
|
|
||||||
# #db: 1
|
|
||||||
|
|
||||||
#redisForReactions:
|
|
||||||
# host: redis
|
|
||||||
# port: 6379
|
|
||||||
# #family: 0 # 0=Both, 4=IPv4, 6=IPv6
|
|
||||||
# #pass: example-pass
|
|
||||||
# #prefix: example-prefix
|
|
||||||
# #db: 1
|
|
||||||
|
|
||||||
# ┌───────────────────────────┐
|
# ┌───────────────────────────┐
|
||||||
#───┘ MeiliSearch configuration └─────────────────────────────
|
#───┘ MeiliSearch configuration └─────────────────────────────
|
||||||
|
|
||||||
@@ -140,21 +124,6 @@ redis:
|
|||||||
|
|
||||||
id: 'aidx'
|
id: 'aidx'
|
||||||
|
|
||||||
# ┌────────────────┐
|
|
||||||
#───┘ Error tracking └──────────────────────────────────────────
|
|
||||||
|
|
||||||
# Sentry is available for error tracking.
|
|
||||||
# See the Sentry documentation for more details on options.
|
|
||||||
|
|
||||||
#sentryForBackend:
|
|
||||||
# enableNodeProfiling: true
|
|
||||||
# options:
|
|
||||||
# dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0'
|
|
||||||
|
|
||||||
#sentryForFrontend:
|
|
||||||
# options:
|
|
||||||
# dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0'
|
|
||||||
|
|
||||||
# ┌─────────────────────┐
|
# ┌─────────────────────┐
|
||||||
#───┘ Other configuration └─────────────────────────────────────
|
#───┘ Other configuration └─────────────────────────────────────
|
||||||
|
|
||||||
@@ -170,7 +139,7 @@ id: 'aidx'
|
|||||||
|
|
||||||
# Job rate limiter
|
# Job rate limiter
|
||||||
# deliverJobPerSec: 128
|
# deliverJobPerSec: 128
|
||||||
# inboxJobPerSec: 32
|
# inboxJobPerSec: 16
|
||||||
|
|
||||||
# Job attempts
|
# Job attempts
|
||||||
# deliverJobMaxAttempts: 12
|
# deliverJobMaxAttempts: 12
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
|
version: '3.8'
|
||||||
|
|
||||||
services:
|
services:
|
||||||
app:
|
app:
|
||||||
build:
|
build:
|
||||||
@@ -6,7 +8,6 @@ services:
|
|||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
- ../:/workspace:cached
|
- ../:/workspace:cached
|
||||||
- node_modules:/workspace/node_modules
|
|
||||||
|
|
||||||
command: sleep infinity
|
command: sleep infinity
|
||||||
|
|
||||||
@@ -45,7 +46,6 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
postgres-data:
|
postgres-data:
|
||||||
redis-data:
|
redis-data:
|
||||||
node_modules:
|
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
internal_network:
|
internal_network:
|
@@ -2,14 +2,10 @@
|
|||||||
|
|
||||||
set -xe
|
set -xe
|
||||||
|
|
||||||
sudo chown node node_modules
|
sudo chown -R node /workspace
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get -y install libgtk2.0-0 libgtk-3-0 libgbm-dev libnotify-dev libnss3 libxss1 libasound2 libxtst6 xauth xvfb
|
|
||||||
git config --global --add safe.directory /workspace
|
|
||||||
git submodule update --init
|
git submodule update --init
|
||||||
pnpm config set store-dir /home/node/.local/share/pnpm/store
|
pnpm config set store-dir /home/node/.local/share/pnpm/store
|
||||||
pnpm install --frozen-lockfile
|
pnpm install --frozen-lockfile
|
||||||
cp .devcontainer/devcontainer.yml .config/default.yml
|
cp .devcontainer/devcontainer.yml .config/default.yml
|
||||||
pnpm build
|
pnpm build
|
||||||
pnpm migrate
|
pnpm migrate
|
||||||
pnpm exec cypress install
|
|
||||||
|
@@ -7,11 +7,12 @@ Dockerfile
|
|||||||
build/
|
build/
|
||||||
built/
|
built/
|
||||||
db/
|
db/
|
||||||
.devcontainer/compose.yml
|
docker-compose.yml
|
||||||
node_modules/
|
node_modules/
|
||||||
packages/*/node_modules
|
packages/*/node_modules
|
||||||
redis/
|
redis/
|
||||||
files/
|
files/
|
||||||
|
misskey-assets/
|
||||||
fluent-emojis/
|
fluent-emojis/
|
||||||
.pnp.*
|
.pnp.*
|
||||||
|
|
||||||
@@ -27,4 +28,4 @@ fluent-emojis/
|
|||||||
|
|
||||||
.idea/
|
.idea/
|
||||||
packages/*/.vscode/
|
packages/*/.vscode/
|
||||||
packages/backend/test/compose.yml
|
packages/backend/test/docker-compose.yml
|
||||||
|
3
.github/FUNDING.yml
vendored
Normal file
3
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# These are supported funding model platforms
|
||||||
|
|
||||||
|
patreon: syuilo
|
60
.github/ISSUE_TEMPLATE/01_bug-report.md
vendored
Normal file
60
.github/ISSUE_TEMPLATE/01_bug-report.md
vendored
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
---
|
||||||
|
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.
|
||||||
|
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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
## 💡 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 -->
|
||||||
|
<!-- DO NOT WRITE "latest". Please provide the specific version. -->
|
||||||
|
|
||||||
|
### 💻 Frontend
|
||||||
|
* Model and OS of the device(s):
|
||||||
|
<!-- Example: MacBook Pro (14inch, 2021), macOS Ventura 13.4 -->
|
||||||
|
* Browser:
|
||||||
|
<!-- Example: Chrome 113.0.5672.126 -->
|
||||||
|
* Server URL:
|
||||||
|
<!-- Example: misskey.io -->
|
||||||
|
* Misskey:
|
||||||
|
13.x.x
|
||||||
|
|
||||||
|
### 🛰 Backend (for server admin)
|
||||||
|
<!-- If you are using a managed service, put that after the version. -->
|
||||||
|
|
||||||
|
* Installation Method or Hosting Service: <!-- Example: 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: <!-- Example: Ubuntu 22.04.2 LTS aarch64 -->
|
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.example.com
|
|
||||||
* Misskey: 2025.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: 2025.x.x
|
|
||||||
* Node: 20.x.x
|
|
||||||
* PostgreSQL: 15.x.x
|
|
||||||
* Redis: 7.x.x
|
|
||||||
* OS and Architecture: Ubuntu 24.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
|
|
4
.github/ISSUE_TEMPLATE/config.yml
vendored
4
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -2,7 +2,3 @@ contact_links:
|
|||||||
- name: 💬 Misskey official Discord
|
- name: 💬 Misskey official Discord
|
||||||
url: https://discord.gg/Wp8gVStHW3
|
url: https://discord.gg/Wp8gVStHW3
|
||||||
about: Chat freely about Misskey
|
about: Chat freely about Misskey
|
||||||
# 仮
|
|
||||||
- name: 💬 Start discussion
|
|
||||||
url: https://github.com/misskey-dev/misskey/discussions
|
|
||||||
about: The official forum to join conversation and ask question
|
|
||||||
|
30
.github/dependabot.yml
vendored
30
.github/dependabot.yml
vendored
@@ -9,7 +9,7 @@ updates:
|
|||||||
directory: "/"
|
directory: "/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: daily
|
interval: daily
|
||||||
open-pull-requests-limit: 0
|
open-pull-requests-limit: 100
|
||||||
|
|
||||||
# Add only the root, not each workspace item
|
# Add only the root, not each workspace item
|
||||||
# https://github.com/dependabot/dependabot-core/issues/4993#issuecomment-1289133027
|
# https://github.com/dependabot/dependabot-core/issues/4993#issuecomment-1289133027
|
||||||
@@ -17,32 +17,16 @@ updates:
|
|||||||
directory: "/"
|
directory: "/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: daily
|
interval: daily
|
||||||
|
# PNPM has an issue with dependabot. See:
|
||||||
|
# https://github.com/dependabot/dependabot-core/issues/7258
|
||||||
|
# https://github.com/pnpm/pnpm/issues/6530
|
||||||
|
# TODO: Restore this when the issue is solved
|
||||||
open-pull-requests-limit: 0
|
open-pull-requests-limit: 0
|
||||||
# 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:
|
groups:
|
||||||
aws-sdk:
|
swc:
|
||||||
patterns:
|
patterns:
|
||||||
- "@aws-sdk/*"
|
- "@swc/*"
|
||||||
bull-board:
|
|
||||||
patterns:
|
|
||||||
- "@bull-board/*"
|
|
||||||
nestjs:
|
|
||||||
patterns:
|
|
||||||
- "@nestjs/*"
|
|
||||||
slacc:
|
|
||||||
patterns:
|
|
||||||
- "slacc-*"
|
|
||||||
storybook:
|
storybook:
|
||||||
patterns:
|
patterns:
|
||||||
- "storybook*"
|
- "storybook*"
|
||||||
- "@storybook/*"
|
- "@storybook/*"
|
||||||
swc-core:
|
|
||||||
patterns:
|
|
||||||
- "@swc/core*"
|
|
||||||
typescript-eslint:
|
|
||||||
patterns:
|
|
||||||
- "@typescript-eslint/*"
|
|
||||||
tensorflow:
|
|
||||||
patterns:
|
|
||||||
- "@tensorflow/*"
|
|
||||||
|
29
.github/labeler.yml
vendored
29
.github/labeler.yml
vendored
@@ -1,34 +1,21 @@
|
|||||||
'packages/backend':
|
'packages/backend':
|
||||||
- any:
|
- packages/backend/**/*
|
||||||
- changed-files:
|
|
||||||
- any-glob-to-any-file: ['packages/backend/**/*']
|
|
||||||
|
|
||||||
'packages/backend:test':
|
'packages/backend:test':
|
||||||
- any:
|
- packages/backend/test/**/*
|
||||||
- changed-files:
|
|
||||||
- any-glob-to-any-file: ['packages/backend/test/**/*', 'packages/backend/test-federation/**/*']
|
|
||||||
|
|
||||||
'packages/frontend':
|
'packages/frontend':
|
||||||
- any:
|
- packages/frontend/**/*
|
||||||
- changed-files:
|
|
||||||
- any-glob-to-any-file: ['packages/frontend/**/*']
|
|
||||||
|
|
||||||
'packages/frontend:test':
|
'packages/frontend:test':
|
||||||
- any:
|
- cypress/**/*
|
||||||
- changed-files:
|
|
||||||
- any-glob-to-any-file: ['cypress/**/*']
|
|
||||||
|
|
||||||
'packages/sw':
|
'packages/sw':
|
||||||
- any:
|
- packages/sw/**/*
|
||||||
- changed-files:
|
|
||||||
- any-glob-to-any-file: ['packages/sw/**/*']
|
|
||||||
|
|
||||||
'packages/misskey-js':
|
'packages/misskey-js':
|
||||||
- any:
|
- packages/misskey-js/**/*
|
||||||
- changed-files:
|
|
||||||
- any-glob-to-any-file: ['packages/misskey-js/**/*']
|
|
||||||
|
|
||||||
'packages/misskey-js:test':
|
'packages/misskey-js:test':
|
||||||
- any:
|
- packages/misskey-js/test/**/*
|
||||||
- changed-files:
|
- packages/misskey-js/test-d/**/*
|
||||||
- any-glob-to-any-file: ['packages/misskey-js/test/**/*', 'packages/misskey-js/test-d/**/*']
|
|
||||||
|
2
.github/misskey/test.yml
vendored
2
.github/misskey/test.yml
vendored
@@ -1,7 +1,5 @@
|
|||||||
url: 'http://misskey.local'
|
url: 'http://misskey.local'
|
||||||
|
|
||||||
setupPassword: example_password_please_change_this_or_you_will_get_hacked
|
|
||||||
|
|
||||||
# ローカルでテストするときにポートを被らないようにするためデフォルトのものとは変える(以下同じ)
|
# ローカルでテストするときにポートを被らないようにするためデフォルトのものとは変える(以下同じ)
|
||||||
port: 61812
|
port: 61812
|
||||||
|
|
||||||
|
18
.github/workflows/api-misskey-js.yml
vendored
18
.github/workflows/api-misskey-js.yml
vendored
@@ -1,14 +1,7 @@
|
|||||||
name: API report (misskey.js)
|
name: API report (misskey.js)
|
||||||
|
|
||||||
on:
|
on: [push, pull_request]
|
||||||
push:
|
|
||||||
paths:
|
|
||||||
- packages/misskey-js/**
|
|
||||||
- .github/workflows/api-misskey-js.yml
|
|
||||||
pull_request:
|
|
||||||
paths:
|
|
||||||
- packages/misskey-js/**
|
|
||||||
- .github/workflows/api-misskey-js.yml
|
|
||||||
jobs:
|
jobs:
|
||||||
report:
|
report:
|
||||||
|
|
||||||
@@ -16,13 +9,12 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4.2.2
|
uses: actions/checkout@v4.0.0
|
||||||
|
|
||||||
- name: Setup pnpm
|
- run: corepack enable
|
||||||
uses: pnpm/action-setup@v4.1.0
|
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
uses: actions/setup-node@v4.2.0
|
uses: actions/setup-node@v3.8.1
|
||||||
with:
|
with:
|
||||||
node-version-file: '.node-version'
|
node-version-file: '.node-version'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
43
.github/workflows/changelog-check.yml
vendored
43
.github/workflows/changelog-check.yml
vendored
@@ -1,43 +0,0 @@
|
|||||||
name: Check the description in CHANGELOG.md
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
- develop
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
check-changelog:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout head
|
|
||||||
uses: actions/checkout@v4.2.2
|
|
||||||
- name: Setup Node.js
|
|
||||||
uses: actions/setup-node@v4.2.0
|
|
||||||
with:
|
|
||||||
node-version-file: '.node-version'
|
|
||||||
|
|
||||||
- name: Checkout base
|
|
||||||
run: |
|
|
||||||
mkdir _base
|
|
||||||
cp -r .git _base/.git
|
|
||||||
cd _base
|
|
||||||
git fetch --depth 1 origin ${{ github.base_ref }}
|
|
||||||
git checkout origin/${{ github.base_ref }} CHANGELOG.md
|
|
||||||
|
|
||||||
- name: Copy to Checker directory for CHANGELOG-base.md
|
|
||||||
run: cp _base/CHANGELOG.md scripts/changelog-checker/CHANGELOG-base.md
|
|
||||||
- name: Copy to Checker directory for CHANGELOG-head.md
|
|
||||||
run: cp CHANGELOG.md scripts/changelog-checker/CHANGELOG-head.md
|
|
||||||
- name: diff
|
|
||||||
continue-on-error: true
|
|
||||||
run: diff -u CHANGELOG-base.md CHANGELOG-head.md
|
|
||||||
working-directory: scripts/changelog-checker
|
|
||||||
|
|
||||||
- name: Setup Checker
|
|
||||||
run: npm install
|
|
||||||
working-directory: scripts/changelog-checker
|
|
||||||
- name: Run Checker
|
|
||||||
run: npm run run
|
|
||||||
working-directory: scripts/changelog-checker
|
|
139
.github/workflows/check-misskey-js-autogen.yml
vendored
139
.github/workflows/check-misskey-js-autogen.yml
vendored
@@ -1,139 +0,0 @@
|
|||||||
name: Check Misskey JS autogen
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request_target:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
- develop
|
|
||||||
- improve-misskey-js-autogen-check
|
|
||||||
paths:
|
|
||||||
- packages/backend/**
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
# pull_request_target safety: permissions: read-all, and there are no secrets used in this job
|
|
||||||
generate-misskey-js:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
if: ${{ github.event.pull_request.mergeable == null || github.event.pull_request.mergeable == true }}
|
|
||||||
steps:
|
|
||||||
- name: checkout
|
|
||||||
uses: actions/checkout@v4.2.2
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
persist-credentials: false
|
|
||||||
ref: refs/pull/${{ github.event.pull_request.number }}/merge
|
|
||||||
|
|
||||||
- name: setup pnpm
|
|
||||||
uses: pnpm/action-setup@v4
|
|
||||||
|
|
||||||
- name: setup node
|
|
||||||
id: setup-node
|
|
||||||
uses: actions/setup-node@v4.2.0
|
|
||||||
with:
|
|
||||||
node-version-file: '.node-version'
|
|
||||||
cache: pnpm
|
|
||||||
|
|
||||||
- name: install dependencies
|
|
||||||
run: pnpm i --frozen-lockfile
|
|
||||||
|
|
||||||
# generate api.json
|
|
||||||
- name: Copy Config
|
|
||||||
run: cp .config/example.yml .config/default.yml
|
|
||||||
- name: Build
|
|
||||||
run: pnpm build
|
|
||||||
- name: Generate API JSON
|
|
||||||
run: pnpm --filter backend generate-api-json
|
|
||||||
|
|
||||||
# build misskey js
|
|
||||||
- name: Build misskey-js
|
|
||||||
run: |-
|
|
||||||
cp packages/backend/built/api.json packages/misskey-js/generator/api.json
|
|
||||||
pnpm run --filter misskey-js-type-generator generate
|
|
||||||
|
|
||||||
# packages/misskey-js/generator/built/autogen
|
|
||||||
- name: Upload Generated
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: generated-misskey-js
|
|
||||||
path: packages/misskey-js/generator/built/autogen
|
|
||||||
|
|
||||||
# pull_request_target safety: permissions: read-all, and no user codes are executed
|
|
||||||
get-actual-misskey-js:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
if: ${{ github.event.pull_request.mergeable == null || github.event.pull_request.mergeable == true }}
|
|
||||||
steps:
|
|
||||||
- name: checkout
|
|
||||||
uses: actions/checkout@v4.2.2
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
persist-credentials: false
|
|
||||||
ref: refs/pull/${{ github.event.pull_request.number }}/merge
|
|
||||||
|
|
||||||
- name: Upload From Merged
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: actual-misskey-js
|
|
||||||
path: packages/misskey-js/src/autogen
|
|
||||||
|
|
||||||
# pull_request_target safety: nothing is cloned from repository
|
|
||||||
comment-misskey-js-autogen:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs: [generate-misskey-js, get-actual-misskey-js]
|
|
||||||
permissions:
|
|
||||||
pull-requests: write
|
|
||||||
steps:
|
|
||||||
- name: download generated-misskey-js
|
|
||||||
uses: actions/download-artifact@v4
|
|
||||||
with:
|
|
||||||
name: generated-misskey-js
|
|
||||||
path: misskey-js-generated
|
|
||||||
|
|
||||||
- name: download actual-misskey-js
|
|
||||||
uses: actions/download-artifact@v4
|
|
||||||
with:
|
|
||||||
name: actual-misskey-js
|
|
||||||
path: misskey-js-actual
|
|
||||||
|
|
||||||
- name: check misskey-js changes
|
|
||||||
id: check-changes
|
|
||||||
run: |
|
|
||||||
diff -r -u --label=generated --label=on-tree ./misskey-js-generated ./misskey-js-actual > misskey-js.diff || true
|
|
||||||
|
|
||||||
if [ -s misskey-js.diff ]; then
|
|
||||||
echo "changes=true" >> $GITHUB_OUTPUT
|
|
||||||
else
|
|
||||||
echo "changes=false" >> $GITHUB_OUTPUT
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Print full diff
|
|
||||||
run: cat ./misskey-js.diff
|
|
||||||
|
|
||||||
- name: send message
|
|
||||||
if: steps.check-changes.outputs.changes == 'true'
|
|
||||||
uses: thollander/actions-comment-pull-request@v2
|
|
||||||
with:
|
|
||||||
comment_tag: check-misskey-js-autogen
|
|
||||||
message: |-
|
|
||||||
Thank you for sending us a great Pull Request! 👍
|
|
||||||
Please regenerate misskey-js type definitions! 🙏
|
|
||||||
|
|
||||||
example:
|
|
||||||
```sh
|
|
||||||
pnpm run build-misskey-js-with-types
|
|
||||||
```
|
|
||||||
|
|
||||||
- name: send message
|
|
||||||
if: steps.check-changes.outputs.changes == 'false'
|
|
||||||
uses: thollander/actions-comment-pull-request@v2
|
|
||||||
with:
|
|
||||||
comment_tag: check-misskey-js-autogen
|
|
||||||
mode: delete
|
|
||||||
message: "Thank you!"
|
|
||||||
create_if_not_exists: false
|
|
||||||
|
|
||||||
- name: Make failure if changes are detected
|
|
||||||
if: steps.check-changes.outputs.changes == 'true'
|
|
||||||
run: exit 1
|
|
29
.github/workflows/check-misskey-js-version.yml
vendored
29
.github/workflows/check-misskey-js-version.yml
vendored
@@ -1,29 +0,0 @@
|
|||||||
name: Check Misskey JS version
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [ develop ]
|
|
||||||
paths:
|
|
||||||
- packages/misskey-js/package.json
|
|
||||||
- package.json
|
|
||||||
- .github/workflows/check-misskey-js-version.yml
|
|
||||||
pull_request:
|
|
||||||
branches: [ develop ]
|
|
||||||
paths:
|
|
||||||
- packages/misskey-js/package.json
|
|
||||||
- package.json
|
|
||||||
- .github/workflows/check-misskey-js-version.yml
|
|
||||||
jobs:
|
|
||||||
check-version:
|
|
||||||
# ルートの package.json と packages/misskey-js/package.json のバージョンが一致しているかを確認する
|
|
||||||
name: Check version
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4.2.2
|
|
||||||
- name: Check version
|
|
||||||
run: |
|
|
||||||
if [ "$(jq -r '.version' package.json)" != "$(jq -r '.version' packages/misskey-js/package.json)" ]; then
|
|
||||||
echo "Version mismatch!"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
79
.github/workflows/check-spdx-license-id.yml
vendored
79
.github/workflows/check-spdx-license-id.yml
vendored
@@ -1,79 +0,0 @@
|
|||||||
name: Check SPDX-License-Identifier
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
- develop
|
|
||||||
pull_request:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
check-spdx-license-id:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4.2.2
|
|
||||||
- name: Check
|
|
||||||
run: |
|
|
||||||
counter=0
|
|
||||||
|
|
||||||
search() {
|
|
||||||
local directory="$1"
|
|
||||||
find "$directory" -type f \
|
|
||||||
'(' \
|
|
||||||
-name "*.cjs" -and -not -name '*.config.cjs' -o \
|
|
||||||
-name "*.html" -o \
|
|
||||||
-name "*.js" -and -not -name '*.config.js' -o \
|
|
||||||
-name "*.mjs" -and -not -name '*.config.mjs' -o \
|
|
||||||
-name "*.scss" -o \
|
|
||||||
-name "*.ts" -and -not -name '*.config.ts' -o \
|
|
||||||
-name "*.vue" \
|
|
||||||
')' -and \
|
|
||||||
-not -name '*eslint*'
|
|
||||||
}
|
|
||||||
|
|
||||||
check() {
|
|
||||||
local file="$1"
|
|
||||||
if ! (
|
|
||||||
grep -q "SPDX-FileCopyrightText: syuilo and misskey-project" "$file" ||
|
|
||||||
grep -q "SPDX-License-Identifier: AGPL-3.0-only" "$file"
|
|
||||||
); then
|
|
||||||
echo "Missing: $file"
|
|
||||||
((counter++))
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
directories=(
|
|
||||||
"cypress/e2e"
|
|
||||||
"packages/backend/migration"
|
|
||||||
"packages/backend/src"
|
|
||||||
"packages/backend/test"
|
|
||||||
"packages/frontend-shared/@types"
|
|
||||||
"packages/frontend-shared/js"
|
|
||||||
"packages/frontend/.storybook"
|
|
||||||
"packages/frontend/@types"
|
|
||||||
"packages/frontend/lib"
|
|
||||||
"packages/frontend/public"
|
|
||||||
"packages/frontend/src"
|
|
||||||
"packages/frontend/test"
|
|
||||||
"packages/frontend-embed/@types"
|
|
||||||
"packages/frontend-embed/src"
|
|
||||||
"packages/misskey-bubble-game/src"
|
|
||||||
"packages/misskey-reversi/src"
|
|
||||||
"packages/sw/src"
|
|
||||||
"scripts"
|
|
||||||
)
|
|
||||||
|
|
||||||
for directory in "${directories[@]}"; do
|
|
||||||
for file in $(search $directory); do
|
|
||||||
check "$file"
|
|
||||||
done
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ $counter -gt 0 ]; then
|
|
||||||
echo "SPDX-License-Identifier is missing in $counter files."
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
echo "SPDX-License-Identifier is certainly described in all target files!"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
2
.github/workflows/check_copyright_year.yml
vendored
2
.github/workflows/check_copyright_year.yml
vendored
@@ -10,7 +10,7 @@ jobs:
|
|||||||
check_copyright_year:
|
check_copyright_year:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.2.2
|
- uses: actions/checkout@v4.0.0
|
||||||
- run: |
|
- run: |
|
||||||
if [ "$(grep Copyright COPYING | sed -e 's/.*2014-\([0-9]*\) .*/\1/g')" -ne "$(date +%Y)" ]; then
|
if [ "$(grep Copyright COPYING | sed -e 's/.*2014-\([0-9]*\) .*/\1/g')" -ne "$(date +%Y)" ]; then
|
||||||
echo "Please change copyright year!"
|
echo "Please change copyright year!"
|
||||||
|
84
.github/workflows/deploy-test-environment.yml
vendored
84
.github/workflows/deploy-test-environment.yml
vendored
@@ -1,84 +0,0 @@
|
|||||||
name: deploy-test-environment
|
|
||||||
|
|
||||||
on:
|
|
||||||
issue_comment:
|
|
||||||
types: [created]
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
repository:
|
|
||||||
description: 'Repository to deploy (optional, use the repository where this workflow is stored by default)'
|
|
||||||
required: false
|
|
||||||
default: ''
|
|
||||||
branch_or_hash:
|
|
||||||
description: 'Branch or Commit hash to deploy (optional, use the branch where this workflow is stored by default)'
|
|
||||||
required: false
|
|
||||||
default: ''
|
|
||||||
wait_time:
|
|
||||||
description: 'Time to wait in seconds (optional, 1800 seconds by default)'
|
|
||||||
required: false
|
|
||||||
default: ''
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
get-pr-ref:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.event_name == 'issue_comment' && github.event.issue.pull_request && startsWith(github.event.comment.body, '/preview')
|
|
||||||
outputs:
|
|
||||||
is-allowed-user: ${{ steps.check-allowed-users.outputs.is-allowed-user }}
|
|
||||||
pr-ref: ${{ steps.get-ref.outputs.pr-ref }}
|
|
||||||
wait_time: ${{ steps.get-wait-time.outputs.wait_time }}
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4.2.2
|
|
||||||
|
|
||||||
- name: Check allowed users
|
|
||||||
id: check-allowed-users
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
ORG_ID: ${{ github.repository_owner_id }}
|
|
||||||
COMMENT_AUTHOR: ${{ github.event.comment.user.login }}
|
|
||||||
run: |
|
|
||||||
MEMBERSHIP_STATUS=$(curl -s -H "Authorization: Bearer $GITHUB_TOKEN" \
|
|
||||||
-H "Accept: application/vnd.github+json" \
|
|
||||||
-H "X-GitHub-Api-Version: 2022-11-28" \
|
|
||||||
"https://api.github.com/organizations/$ORG_ID/public_members/$COMMENT_AUTHOR" \
|
|
||||||
-o /dev/null -w '%{http_code}\n' -s)
|
|
||||||
if [ "$MEMBERSHIP_STATUS" -eq 204 ]; then
|
|
||||||
echo "is-allowed-user=true" > $GITHUB_OUTPUT
|
|
||||||
else
|
|
||||||
echo "is-allowed-user=false" > $GITHUB_OUTPUT
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Get PR ref
|
|
||||||
id: get-ref
|
|
||||||
run: |
|
|
||||||
PR_REF="refs/pull/${{ github.event.issue.number }}/head"
|
|
||||||
echo "pr-ref=$PR_REF" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Extract wait time
|
|
||||||
id: get-wait-time
|
|
||||||
env:
|
|
||||||
COMMENT_BODY: ${{ github.event.comment.body }}
|
|
||||||
run: |
|
|
||||||
WAIT_TIME=$(echo "$COMMENT_BODY" | grep -oP '(?<=/preview\s)\d+' || echo "1800")
|
|
||||||
echo "wait_time=$WAIT_TIME" > $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
deploy-test-environment-pr-comment:
|
|
||||||
needs: get-pr-ref
|
|
||||||
if: needs.get-pr-ref.outputs.is-allowed-user == 'true'
|
|
||||||
uses: joinmisskey/misskey-tga/.github/workflows/deploy-test-environment.yml@main
|
|
||||||
with:
|
|
||||||
repository: ${{ github.repository }}
|
|
||||||
branch_or_hash: ${{ needs.get-pr-ref.outputs.pr-ref }}
|
|
||||||
wait_time: ${{ needs.get-pr-ref.outputs.wait_time }}
|
|
||||||
secrets:
|
|
||||||
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
|
|
||||||
|
|
||||||
deploy-test-environment-wd:
|
|
||||||
if: github.event_name == 'workflow_dispatch'
|
|
||||||
uses: joinmisskey/misskey-tga/.github/workflows/deploy-test-environment.yml@main
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
branch_or_hash: ${{ inputs.branch_or_hash || github.ref_name }}
|
|
||||||
wait_time: ${{ inputs.wait_time || '1800' }}
|
|
||||||
secrets:
|
|
||||||
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
|
|
79
.github/workflows/docker-develop.yml
vendored
79
.github/workflows/docker-develop.yml
vendored
@@ -6,83 +6,38 @@ on:
|
|||||||
- develop
|
- develop
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
env:
|
|
||||||
REGISTRY_IMAGE: misskey/misskey
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
# see https://docs.docker.com/build/ci/github-actions/multi-platform/#distribute-build-across-multiple-runners
|
push_to_registry:
|
||||||
build:
|
name: Push Docker image to Docker Hub
|
||||||
name: Build
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
platform:
|
|
||||||
- linux/amd64
|
|
||||||
- linux/arm64
|
|
||||||
if: github.repository == 'misskey-dev/misskey'
|
if: github.repository == 'misskey-dev/misskey'
|
||||||
steps:
|
steps:
|
||||||
- name: Prepare
|
|
||||||
run: |
|
|
||||||
platform=${{ matrix.platform }}
|
|
||||||
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
|
|
||||||
- name: Check out the repo
|
- name: Check out the repo
|
||||||
uses: actions/checkout@v4.2.2
|
uses: actions/checkout@v4.0.0
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v3
|
id: buildx
|
||||||
|
uses: docker/setup-buildx-action@v3.0.0
|
||||||
|
with:
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
|
- name: Docker meta
|
||||||
|
id: meta
|
||||||
|
uses: docker/metadata-action@v5
|
||||||
|
with:
|
||||||
|
images: misskey/misskey
|
||||||
- name: Log in to Docker Hub
|
- name: Log in to Docker Hub
|
||||||
uses: docker/login-action@v3
|
uses: docker/login-action@v3
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKER_USERNAME }}
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
- name: Build and push by digest
|
- name: Build and Push to Docker Hub
|
||||||
id: build
|
uses: docker/build-push-action@v5
|
||||||
uses: docker/build-push-action@v6
|
|
||||||
with:
|
with:
|
||||||
|
builder: ${{ steps.buildx.outputs.name }}
|
||||||
context: .
|
context: .
|
||||||
push: true
|
push: true
|
||||||
platforms: ${{ matrix.platform }}
|
platforms: ${{ steps.buildx.outputs.platforms }}
|
||||||
provenance: false
|
provenance: false
|
||||||
|
tags: misskey/misskey:develop
|
||||||
labels: develop
|
labels: develop
|
||||||
cache-from: type=gha
|
cache-from: type=gha
|
||||||
cache-to: type=gha,mode=max
|
cache-to: type=gha,mode=max
|
||||||
outputs: type=image,name=${{ env.REGISTRY_IMAGE }},push-by-digest=true,name-canonical=true,push=true
|
|
||||||
- name: Export digest
|
|
||||||
run: |
|
|
||||||
mkdir -p /tmp/digests
|
|
||||||
digest="${{ steps.build.outputs.digest }}"
|
|
||||||
touch "/tmp/digests/${digest#sha256:}"
|
|
||||||
- name: Upload digest
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: digests-${{ env.PLATFORM_PAIR }}
|
|
||||||
path: /tmp/digests/*
|
|
||||||
if-no-files-found: error
|
|
||||||
retention-days: 1
|
|
||||||
|
|
||||||
merge:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs:
|
|
||||||
- build
|
|
||||||
steps:
|
|
||||||
- name: Download digests
|
|
||||||
uses: actions/download-artifact@v4
|
|
||||||
with:
|
|
||||||
path: /tmp/digests
|
|
||||||
pattern: digests-*
|
|
||||||
merge-multiple: true
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v3
|
|
||||||
- name: Login to Docker Hub
|
|
||||||
uses: docker/login-action@v3
|
|
||||||
with:
|
|
||||||
username: ${{ secrets.DOCKER_USERNAME }}
|
|
||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
|
||||||
- name: Create manifest list and push
|
|
||||||
working-directory: /tmp/digests
|
|
||||||
run: |
|
|
||||||
docker buildx imagetools create --tag ${{ env.REGISTRY_IMAGE }}:develop \
|
|
||||||
$(printf '${{ env.REGISTRY_IMAGE }}@sha256:%s ' *)
|
|
||||||
- name: Inspect image
|
|
||||||
run: |
|
|
||||||
docker buildx imagetools inspect ${{ env.REGISTRY_IMAGE }}:develop
|
|
||||||
|
102
.github/workflows/docker.yml
vendored
102
.github/workflows/docker.yml
vendored
@@ -5,101 +5,45 @@ on:
|
|||||||
types: [published]
|
types: [published]
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
env:
|
jobs:
|
||||||
REGISTRY_IMAGE: misskey/misskey
|
push_to_registry:
|
||||||
TAGS: |
|
name: Push Docker image to Docker Hub
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Check out the repo
|
||||||
|
uses: actions/checkout@v4.0.0
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
id: buildx
|
||||||
|
uses: docker/setup-buildx-action@v3.0.0
|
||||||
|
with:
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
|
- name: Docker meta
|
||||||
|
id: meta
|
||||||
|
uses: docker/metadata-action@v5
|
||||||
|
with:
|
||||||
|
images: misskey/misskey
|
||||||
|
tags: |
|
||||||
type=edge
|
type=edge
|
||||||
type=ref,event=pr
|
type=ref,event=pr
|
||||||
type=ref,event=branch
|
type=ref,event=branch
|
||||||
type=semver,pattern={{version}}
|
type=semver,pattern={{version}}
|
||||||
type=semver,pattern={{major}}.{{minor}}
|
type=semver,pattern={{major}}.{{minor}}
|
||||||
type=semver,pattern={{major}}
|
type=semver,pattern={{major}}
|
||||||
|
|
||||||
jobs:
|
|
||||||
# see https://docs.docker.com/build/ci/github-actions/multi-platform/#distribute-build-across-multiple-runners
|
|
||||||
build:
|
|
||||||
name: Build
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
platform:
|
|
||||||
- linux/amd64
|
|
||||||
- linux/arm64
|
|
||||||
steps:
|
|
||||||
- name: Prepare
|
|
||||||
run: |
|
|
||||||
platform=${{ matrix.platform }}
|
|
||||||
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
|
|
||||||
- name: Check out the repo
|
|
||||||
uses: actions/checkout@v4.2.2
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v3
|
|
||||||
- name: Docker meta
|
|
||||||
id: meta
|
|
||||||
uses: docker/metadata-action@v5
|
|
||||||
with:
|
|
||||||
images: ${{ env.REGISTRY_IMAGE }}
|
|
||||||
tags: ${{ env.TAGS }}
|
|
||||||
- name: Log in to Docker Hub
|
- name: Log in to Docker Hub
|
||||||
uses: docker/login-action@v3
|
uses: docker/login-action@v3
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKER_USERNAME }}
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
- name: Build and Push to Docker Hub
|
- name: Build and Push to Docker Hub
|
||||||
id: build
|
uses: docker/build-push-action@v5
|
||||||
uses: docker/build-push-action@v6
|
|
||||||
with:
|
with:
|
||||||
|
builder: ${{ steps.buildx.outputs.name }}
|
||||||
context: .
|
context: .
|
||||||
push: true
|
push: true
|
||||||
platforms: ${{ matrix.platform }}
|
platforms: ${{ steps.buildx.outputs.platforms }}
|
||||||
provenance: false
|
provenance: false
|
||||||
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
cache-from: type=gha
|
cache-from: type=gha
|
||||||
cache-to: type=gha,mode=max
|
cache-to: type=gha,mode=max
|
||||||
outputs: type=image,name=${{ env.REGISTRY_IMAGE }},push-by-digest=true,name-canonical=true,push=true
|
|
||||||
- name: Export digest
|
|
||||||
run: |
|
|
||||||
mkdir -p /tmp/digests
|
|
||||||
digest="${{ steps.build.outputs.digest }}"
|
|
||||||
touch "/tmp/digests/${digest#sha256:}"
|
|
||||||
- name: Upload digest
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: digests-${{ env.PLATFORM_PAIR }}
|
|
||||||
path: /tmp/digests/*
|
|
||||||
if-no-files-found: error
|
|
||||||
retention-days: 1
|
|
||||||
|
|
||||||
merge:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs:
|
|
||||||
- build
|
|
||||||
steps:
|
|
||||||
- name: Download digests
|
|
||||||
uses: actions/download-artifact@v4
|
|
||||||
with:
|
|
||||||
path: /tmp/digests
|
|
||||||
pattern: digests-*
|
|
||||||
merge-multiple: true
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v3
|
|
||||||
- name: Docker meta
|
|
||||||
id: meta
|
|
||||||
uses: docker/metadata-action@v5
|
|
||||||
with:
|
|
||||||
images: ${{ env.REGISTRY_IMAGE }}
|
|
||||||
tags: ${{ env.TAGS }}
|
|
||||||
- name: Login to Docker Hub
|
|
||||||
uses: docker/login-action@v3
|
|
||||||
with:
|
|
||||||
username: ${{ secrets.DOCKER_USERNAME }}
|
|
||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
|
||||||
- name: Create manifest list and push
|
|
||||||
working-directory: /tmp/digests
|
|
||||||
run: |
|
|
||||||
docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
|
|
||||||
$(printf '${{ env.REGISTRY_IMAGE }}@sha256:%s ' *)
|
|
||||||
- name: Inspect image
|
|
||||||
run: |
|
|
||||||
docker buildx imagetools inspect ${{ env.REGISTRY_IMAGE }}:${{ steps.meta.outputs.version }}
|
|
||||||
|
10
.github/workflows/dockle.yml
vendored
10
.github/workflows/dockle.yml
vendored
@@ -13,16 +13,14 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
env:
|
env:
|
||||||
DOCKER_CONTENT_TRUST: 1
|
DOCKER_CONTENT_TRUST: 1
|
||||||
DOCKLE_VERSION: 0.4.14
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.2.2
|
- uses: actions/checkout@v4.0.0
|
||||||
- name: Download and install dockle v${{ env.DOCKLE_VERSION }}
|
- run: |
|
||||||
run: |
|
curl -L -o dockle.deb "https://github.com/goodwithtech/dockle/releases/download/v0.4.10/dockle_0.4.10_Linux-64bit.deb"
|
||||||
curl -L -o dockle.deb "https://github.com/goodwithtech/dockle/releases/download/v${DOCKLE_VERSION}/dockle_${DOCKLE_VERSION}_Linux-64bit.deb"
|
|
||||||
sudo dpkg -i dockle.deb
|
sudo dpkg -i dockle.deb
|
||||||
- run: |
|
- run: |
|
||||||
cp .config/docker_example.env .config/docker.env
|
cp .config/docker_example.env .config/docker.env
|
||||||
cp ./compose_example.yml ./compose.yml
|
cp ./docker-compose.yml.example ./docker-compose.yml
|
||||||
- run: |
|
- run: |
|
||||||
docker compose up -d web
|
docker compose up -d web
|
||||||
docker tag "$(docker compose images web | awk 'OFS=":" {print $4}' | tail -n +2)" misskey-web:latest
|
docker tag "$(docker compose images web | awk 'OFS=":" {print $4}' | tail -n +2)" misskey-web:latest
|
||||||
|
68
.github/workflows/get-api-diff.yml
vendored
68
.github/workflows/get-api-diff.yml
vendored
@@ -1,68 +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: [22.11.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.2.2
|
|
||||||
with:
|
|
||||||
ref: ${{ matrix.ref }}
|
|
||||||
submodules: true
|
|
||||||
- name: Setup pnpm
|
|
||||||
uses: pnpm/action-setup@v4.1.0
|
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
|
||||||
uses: actions/setup-node@v4.2.0
|
|
||||||
with:
|
|
||||||
node-version: ${{ matrix.node-version }}
|
|
||||||
cache: 'pnpm'
|
|
||||||
- run: pnpm i --frozen-lockfile
|
|
||||||
- name: Check pnpm-lock.yaml
|
|
||||||
run: git diff --exit-code pnpm-lock.yaml
|
|
||||||
- name: Copy Configure
|
|
||||||
run: cp .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
|
pull-requests: write
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/labeler@v5
|
- uses: actions/labeler@v4
|
||||||
with:
|
with:
|
||||||
repo-token: "${{ secrets.GITHUB_TOKEN }}"
|
repo-token: "${{ secrets.GITHUB_TOKEN }}"
|
||||||
|
76
.github/workflows/lint.yml
vendored
76
.github/workflows/lint.yml
vendored
@@ -5,43 +5,25 @@ on:
|
|||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
- develop
|
- develop
|
||||||
paths:
|
|
||||||
- packages/backend/**
|
|
||||||
- packages/frontend/**
|
|
||||||
- packages/frontend-shared/**
|
|
||||||
- packages/frontend-embed/**
|
|
||||||
- packages/sw/**
|
|
||||||
- packages/misskey-js/**
|
|
||||||
- packages/misskey-bubble-game/**
|
|
||||||
- packages/misskey-reversi/**
|
|
||||||
- packages/shared/eslint.config.js
|
|
||||||
- .github/workflows/lint.yml
|
|
||||||
pull_request:
|
pull_request:
|
||||||
paths:
|
|
||||||
- packages/backend/**
|
|
||||||
- packages/frontend/**
|
|
||||||
- packages/frontend-shared/**
|
|
||||||
- packages/frontend-embed/**
|
|
||||||
- packages/sw/**
|
|
||||||
- packages/misskey-js/**
|
|
||||||
- packages/misskey-bubble-game/**
|
|
||||||
- packages/misskey-reversi/**
|
|
||||||
- packages/shared/eslint.config.js
|
|
||||||
- .github/workflows/lint.yml
|
|
||||||
jobs:
|
jobs:
|
||||||
pnpm_install:
|
pnpm_install:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.2.2
|
- uses: actions/checkout@v4.0.0
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
submodules: true
|
submodules: true
|
||||||
- name: Setup pnpm
|
- uses: pnpm/action-setup@v2
|
||||||
uses: pnpm/action-setup@v4.1.0
|
with:
|
||||||
- uses: actions/setup-node@v4.2.0
|
version: 8
|
||||||
|
run_install: false
|
||||||
|
- uses: actions/setup-node@v3.8.1
|
||||||
with:
|
with:
|
||||||
node-version-file: '.node-version'
|
node-version-file: '.node-version'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
- run: corepack enable
|
||||||
- run: pnpm i --frozen-lockfile
|
- run: pnpm i --frozen-lockfile
|
||||||
|
|
||||||
lint:
|
lint:
|
||||||
@@ -53,34 +35,24 @@ jobs:
|
|||||||
workspace:
|
workspace:
|
||||||
- backend
|
- backend
|
||||||
- frontend
|
- frontend
|
||||||
- frontend-shared
|
|
||||||
- frontend-embed
|
|
||||||
- sw
|
- sw
|
||||||
- misskey-js
|
- misskey-js
|
||||||
- misskey-bubble-game
|
|
||||||
- misskey-reversi
|
|
||||||
env:
|
|
||||||
eslint-cache-version: v1
|
|
||||||
eslint-cache-path: ${{ github.workspace }}/node_modules/.cache/eslint-${{ matrix.workspace }}
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.2.2
|
- uses: actions/checkout@v4.0.0
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
submodules: true
|
submodules: true
|
||||||
- name: Setup pnpm
|
- uses: pnpm/action-setup@v2
|
||||||
uses: pnpm/action-setup@v4.1.0
|
with:
|
||||||
- uses: actions/setup-node@v4.2.0
|
version: 7
|
||||||
|
run_install: false
|
||||||
|
- uses: actions/setup-node@v3.8.1
|
||||||
with:
|
with:
|
||||||
node-version-file: '.node-version'
|
node-version-file: '.node-version'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
- run: corepack enable
|
||||||
- run: pnpm i --frozen-lockfile
|
- run: pnpm i --frozen-lockfile
|
||||||
- name: Restore eslint cache
|
- run: pnpm --filter ${{ matrix.workspace }} run eslint
|
||||||
uses: actions/cache@v4.2.2
|
|
||||||
with:
|
|
||||||
path: ${{ env.eslint-cache-path }}
|
|
||||||
key: eslint-${{ env.eslint-cache-version }}-${{ matrix.workspace }}-${{ hashFiles('**/pnpm-lock.yaml') }}-${{ github.ref_name }}-${{ github.sha }}
|
|
||||||
restore-keys: eslint-${{ env.eslint-cache-version }}-${{ matrix.workspace }}-${{ hashFiles('**/pnpm-lock.yaml') }}-
|
|
||||||
- run: pnpm --filter ${{ matrix.workspace }} run eslint --cache --cache-location ${{ env.eslint-cache-path }} --cache-strategy content
|
|
||||||
|
|
||||||
typecheck:
|
typecheck:
|
||||||
needs: [pnpm_install]
|
needs: [pnpm_install]
|
||||||
@@ -90,22 +62,20 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
workspace:
|
workspace:
|
||||||
- backend
|
- backend
|
||||||
- sw
|
|
||||||
- misskey-js
|
- misskey-js
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.2.2
|
- uses: actions/checkout@v4.0.0
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
submodules: true
|
submodules: true
|
||||||
- name: Setup pnpm
|
- uses: pnpm/action-setup@v2
|
||||||
uses: pnpm/action-setup@v4.1.0
|
with:
|
||||||
- uses: actions/setup-node@v4.2.0
|
version: 7
|
||||||
|
run_install: false
|
||||||
|
- uses: actions/setup-node@v3.8.1
|
||||||
with:
|
with:
|
||||||
node-version-file: '.node-version'
|
node-version-file: '.node-version'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
- run: corepack enable
|
||||||
- run: pnpm i --frozen-lockfile
|
- run: pnpm i --frozen-lockfile
|
||||||
- run: pnpm --filter misskey-js run build
|
|
||||||
if: ${{ matrix.workspace == 'backend' || matrix.workspace == 'sw' }}
|
|
||||||
- run: pnpm --filter misskey-reversi run build
|
|
||||||
if: ${{ matrix.workspace == 'backend' }}
|
|
||||||
- run: pnpm --filter ${{ matrix.workspace }} run typecheck
|
- run: pnpm --filter ${{ matrix.workspace }} run typecheck
|
||||||
|
28
.github/workflows/locale.yml
vendored
28
.github/workflows/locale.yml
vendored
@@ -1,28 +0,0 @@
|
|||||||
name: Lint
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
paths:
|
|
||||||
- locales/**
|
|
||||||
- .github/workflows/locale.yml
|
|
||||||
pull_request:
|
|
||||||
paths:
|
|
||||||
- locales/**
|
|
||||||
- .github/workflows/locale.yml
|
|
||||||
jobs:
|
|
||||||
locale_verify:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
continue-on-error: true
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4.2.2
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
submodules: true
|
|
||||||
- name: Setup pnpm
|
|
||||||
uses: pnpm/action-setup@v4.1.0
|
|
||||||
- uses: actions/setup-node@v4.2.0
|
|
||||||
with:
|
|
||||||
node-version-file: '.node-version'
|
|
||||||
cache: 'pnpm'
|
|
||||||
- run: pnpm i --frozen-lockfile
|
|
||||||
- run: cd locales && node verify.js
|
|
36
.github/workflows/ok-to-test.yml
vendored
Normal file
36
.github/workflows/ok-to-test.yml
vendored
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
# If someone with write access comments "/ok-to-test" on a pull request, emit a repository_dispatch event
|
||||||
|
name: Ok To Test
|
||||||
|
|
||||||
|
on:
|
||||||
|
issue_comment:
|
||||||
|
types: [created]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
ok-to-test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
# Only run for PRs, not issue comments
|
||||||
|
if: ${{ github.event.issue.pull_request }}
|
||||||
|
steps:
|
||||||
|
# Generate a GitHub App installation access token from an App ID and private key
|
||||||
|
# To create a new GitHub App:
|
||||||
|
# https://developer.github.com/apps/building-github-apps/creating-a-github-app/
|
||||||
|
# See app.yml for an example app manifest
|
||||||
|
- name: Generate token
|
||||||
|
id: generate_token
|
||||||
|
uses: tibdex/github-app-token@v2
|
||||||
|
with:
|
||||||
|
app_id: ${{ secrets.DEPLOYBOT_APP_ID }}
|
||||||
|
private_key: ${{ secrets.DEPLOYBOT_PRIVATE_KEY }}
|
||||||
|
|
||||||
|
- name: Slash Command Dispatch
|
||||||
|
uses: peter-evans/slash-command-dispatch@v3
|
||||||
|
env:
|
||||||
|
TOKEN: ${{ steps.generate_token.outputs.token }}
|
||||||
|
with:
|
||||||
|
token: ${{ env.TOKEN }} # GitHub App installation access token
|
||||||
|
# token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} # PAT or OAuth token will also work
|
||||||
|
reaction-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
issue-type: pull-request
|
||||||
|
commands: deploy
|
||||||
|
named-args: true
|
||||||
|
permission: write
|
41
.github/workflows/on-release-created.yml
vendored
41
.github/workflows/on-release-created.yml
vendored
@@ -1,41 +0,0 @@
|
|||||||
name: On Release Created (Publish misskey-js)
|
|
||||||
|
|
||||||
on:
|
|
||||||
release:
|
|
||||||
types: [created]
|
|
||||||
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
publish-misskey-js:
|
|
||||||
name: Publish misskey-js
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
node-version: [22.11.0]
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4.2.2
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
- name: Setup pnpm
|
|
||||||
uses: pnpm/action-setup@v4.1.0
|
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
|
||||||
uses: actions/setup-node@v4.2.0
|
|
||||||
with:
|
|
||||||
node-version: ${{ matrix.node-version }}
|
|
||||||
cache: 'pnpm'
|
|
||||||
registry-url: 'https://registry.npmjs.org'
|
|
||||||
- name: Publish package
|
|
||||||
run: |
|
|
||||||
pnpm i --frozen-lockfile
|
|
||||||
pnpm build
|
|
||||||
pnpm --filter misskey-js publish --access public --no-git-checks --provenance
|
|
||||||
env:
|
|
||||||
NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }}
|
|
||||||
NPM_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }}
|
|
92
.github/workflows/pr-preview-deploy.yml
vendored
Normal file
92
.github/workflows/pr-preview-deploy.yml
vendored
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
# Run secret-dependent integration tests only after /deploy approval
|
||||||
|
on:
|
||||||
|
repository_dispatch:
|
||||||
|
types: [deploy-command]
|
||||||
|
|
||||||
|
name: Deploy preview environment
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
# Repo owner has commented /deploy on a (fork-based) pull request
|
||||||
|
deploy-preview-environment:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if:
|
||||||
|
github.event.client_payload.slash_command.sha != '' &&
|
||||||
|
contains(github.event.client_payload.pull_request.head.sha, github.event.client_payload.slash_command.sha)
|
||||||
|
steps:
|
||||||
|
- uses: actions/github-script@v6.3.3
|
||||||
|
id: check-id
|
||||||
|
env:
|
||||||
|
number: ${{ github.event.client_payload.pull_request.number }}
|
||||||
|
job: ${{ github.job }}
|
||||||
|
with:
|
||||||
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
result-encoding: string
|
||||||
|
script: |
|
||||||
|
const { data: pull } = await github.rest.pulls.get({
|
||||||
|
...context.repo,
|
||||||
|
pull_number: process.env.number
|
||||||
|
});
|
||||||
|
const ref = pull.head.sha;
|
||||||
|
|
||||||
|
const { data: checks } = await github.rest.checks.listForRef({
|
||||||
|
...context.repo,
|
||||||
|
ref
|
||||||
|
});
|
||||||
|
|
||||||
|
const check = checks.check_runs.filter(c => c.name === process.env.job);
|
||||||
|
|
||||||
|
return check[0].id;
|
||||||
|
|
||||||
|
- uses: actions/github-script@v6.3.3
|
||||||
|
env:
|
||||||
|
check_id: ${{ steps.check-id.outputs.result }}
|
||||||
|
details_url: ${{ github.server_url }}/${{ github.repository }}/runs/${{ github.run_id }}
|
||||||
|
with:
|
||||||
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
script: |
|
||||||
|
await github.rest.checks.update({
|
||||||
|
...context.repo,
|
||||||
|
check_run_id: process.env.check_id,
|
||||||
|
status: 'in_progress',
|
||||||
|
details_url: process.env.details_url
|
||||||
|
});
|
||||||
|
|
||||||
|
# Check out merge commit
|
||||||
|
- name: Fork based /deploy checkout
|
||||||
|
uses: actions/checkout@v4.0.0
|
||||||
|
with:
|
||||||
|
ref: 'refs/pull/${{ github.event.client_payload.pull_request.number }}/merge'
|
||||||
|
|
||||||
|
# <insert integration tests needing secrets>
|
||||||
|
- name: Context
|
||||||
|
uses: okteto/context@latest
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.OKTETO_TOKEN }}
|
||||||
|
|
||||||
|
- name: Deploy preview environment
|
||||||
|
uses: ikuradon/deploy-preview@latest
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
with:
|
||||||
|
name: pr-${{ github.event.client_payload.pull_request.number }}-syuilo
|
||||||
|
timeout: 15m
|
||||||
|
|
||||||
|
# Update check run called "integration-fork"
|
||||||
|
- uses: actions/github-script@v6.3.3
|
||||||
|
id: update-check-run
|
||||||
|
if: ${{ always() }}
|
||||||
|
env:
|
||||||
|
# Conveniently, job.status maps to https://developer.github.com/v3/checks/runs/#update-a-check-run
|
||||||
|
conclusion: ${{ job.status }}
|
||||||
|
check_id: ${{ steps.check-id.outputs.result }}
|
||||||
|
with:
|
||||||
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
script: |
|
||||||
|
const { data: result } = await github.rest.checks.update({
|
||||||
|
...context.repo,
|
||||||
|
check_run_id: process.env.check_id,
|
||||||
|
status: 'completed',
|
||||||
|
conclusion: process.env.conclusion
|
||||||
|
});
|
||||||
|
|
||||||
|
return result;
|
54
.github/workflows/pr-preview-destroy.yml
vendored
Normal file
54
.github/workflows/pr-preview-destroy.yml
vendored
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
# file: .github/workflows/preview-closed.yaml
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types:
|
||||||
|
- closed
|
||||||
|
|
||||||
|
name: Destroy preview environment
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
destroy-preview-environment:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/github-script@v6.3.3
|
||||||
|
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
|
48
.github/workflows/release-edit-with-push.yml
vendored
48
.github/workflows/release-edit-with-push.yml
vendored
@@ -1,48 +0,0 @@
|
|||||||
name: "Release Manager: sync changelog with PR"
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- develop
|
|
||||||
paths:
|
|
||||||
- 'CHANGELOG.md'
|
|
||||||
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
issues: write
|
|
||||||
pull-requests: write
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
edit:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
# headが$GITHUB_REF_NAME, baseが$STABLE_BRANCHかつopenのPRを1つ取得
|
|
||||||
- name: Get PR
|
|
||||||
run: |
|
|
||||||
echo "pr_number=$(gh pr list --limit 1 --search "head:$GITHUB_REF_NAME base:$STABLE_BRANCH is:open" --json number --jq '.[] | .number')" >> $GITHUB_OUTPUT
|
|
||||||
id: get_pr
|
|
||||||
env:
|
|
||||||
STABLE_BRANCH: ${{ vars.STABLE_BRANCH }}
|
|
||||||
- name: Get target version
|
|
||||||
if: steps.get_pr.outputs.pr_number != ''
|
|
||||||
uses: misskey-dev/release-manager-actions/.github/actions/get-target-version@v2
|
|
||||||
id: v
|
|
||||||
# CHANGELOG.mdの内容を取得
|
|
||||||
- name: Get changelog
|
|
||||||
if: steps.get_pr.outputs.pr_number != ''
|
|
||||||
uses: misskey-dev/release-manager-actions/.github/actions/get-changelog@v2
|
|
||||||
with:
|
|
||||||
version: ${{ steps.v.outputs.target_version }}
|
|
||||||
id: changelog
|
|
||||||
# PRのnotesを更新
|
|
||||||
- name: Update PR
|
|
||||||
if: steps.get_pr.outputs.pr_number != ''
|
|
||||||
run: |
|
|
||||||
gh pr edit "$PR_NUMBER" --body "$CHANGELOG"
|
|
||||||
env:
|
|
||||||
PR_NUMBER: ${{ steps.get_pr.outputs.pr_number }}
|
|
||||||
CHANGELOG: ${{ steps.changelog.outputs.changelog }}
|
|
136
.github/workflows/release-with-dispatch.yml
vendored
136
.github/workflows/release-with-dispatch.yml
vendored
@@ -1,136 +0,0 @@
|
|||||||
name: "Release Manager [Dispatch]"
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
## Specify the type of the next release.
|
|
||||||
#version_increment_type:
|
|
||||||
# type: choice
|
|
||||||
# description: 'VERSION INCREMENT TYPE'
|
|
||||||
# default: 'patch'
|
|
||||||
# required: false
|
|
||||||
# options:
|
|
||||||
# - 'major'
|
|
||||||
# - 'minor'
|
|
||||||
# - 'patch'
|
|
||||||
merge:
|
|
||||||
type: boolean
|
|
||||||
description: 'MERGE RELEASE BRANCH TO MAIN'
|
|
||||||
default: false
|
|
||||||
start-rc:
|
|
||||||
type: boolean
|
|
||||||
description: 'Start Release Candidate'
|
|
||||||
default: false
|
|
||||||
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
issues: write
|
|
||||||
pull-requests: write
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
get-pr:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
outputs:
|
|
||||||
pr_number: ${{ steps.get_pr.outputs.pr_number }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
# headが$GITHUB_REF_NAME, baseが$STABLE_BRANCHかつopenのPRを1つ取得
|
|
||||||
- name: Get PRs
|
|
||||||
run: |
|
|
||||||
echo "pr_number=$(gh pr list --limit 1 --search "head:$GITHUB_REF_NAME base:$STABLE_BRANCH is:open" --json number --jq '.[] | .number')" >> $GITHUB_OUTPUT
|
|
||||||
id: get_pr
|
|
||||||
env:
|
|
||||||
STABLE_BRANCH: ${{ vars.STABLE_BRANCH }}
|
|
||||||
|
|
||||||
merge:
|
|
||||||
uses: misskey-dev/release-manager-actions/.github/workflows/merge.yml@v2
|
|
||||||
needs: get-pr
|
|
||||||
if: ${{ needs.get-pr.outputs.pr_number != '' && inputs.merge == true }}
|
|
||||||
with:
|
|
||||||
pr_number: ${{ needs.get-pr.outputs.pr_number }}
|
|
||||||
user: 'github-actions[bot]'
|
|
||||||
package_jsons_to_rewrite: ${{ vars.PACKAGE_JSONS_TO_REWRITE }}
|
|
||||||
# Text to prepend to the changelog
|
|
||||||
# The first line must be `## Unreleased`
|
|
||||||
changes_template: |
|
|
||||||
## Unreleased
|
|
||||||
|
|
||||||
### General
|
|
||||||
-
|
|
||||||
|
|
||||||
### Client
|
|
||||||
-
|
|
||||||
|
|
||||||
### Server
|
|
||||||
-
|
|
||||||
|
|
||||||
use_external_app_to_release: ${{ vars.USE_RELEASE_APP == 'true' }}
|
|
||||||
indent: ${{ vars.INDENT }}
|
|
||||||
secrets:
|
|
||||||
RELEASE_APP_ID: ${{ secrets.RELEASE_APP_ID }}
|
|
||||||
RELEASE_APP_PRIVATE_KEY: ${{ secrets.RELEASE_APP_PRIVATE_KEY }}
|
|
||||||
|
|
||||||
create-prerelease:
|
|
||||||
uses: misskey-dev/release-manager-actions/.github/workflows/create-prerelease.yml@v2
|
|
||||||
needs: get-pr
|
|
||||||
if: ${{ needs.get-pr.outputs.pr_number != '' && inputs.merge != true }}
|
|
||||||
with:
|
|
||||||
pr_number: ${{ needs.get-pr.outputs.pr_number }}
|
|
||||||
user: 'github-actions[bot]'
|
|
||||||
package_jsons_to_rewrite: ${{ vars.PACKAGE_JSONS_TO_REWRITE }}
|
|
||||||
use_external_app_to_release: ${{ vars.USE_RELEASE_APP == 'true' }}
|
|
||||||
indent: ${{ vars.INDENT }}
|
|
||||||
draft_prerelease_channel: alpha
|
|
||||||
ready_start_prerelease_channel: beta
|
|
||||||
prerelease_channel: ${{ inputs.start-rc && 'rc' || '' }}
|
|
||||||
reset_number_on_channel_change: true
|
|
||||||
secrets:
|
|
||||||
RELEASE_APP_ID: ${{ secrets.RELEASE_APP_ID }}
|
|
||||||
RELEASE_APP_PRIVATE_KEY: ${{ secrets.RELEASE_APP_PRIVATE_KEY }}
|
|
||||||
|
|
||||||
create-target:
|
|
||||||
uses: misskey-dev/release-manager-actions/.github/workflows/create-target.yml@v2
|
|
||||||
needs: get-pr
|
|
||||||
if: ${{ needs.get-pr.outputs.pr_number == '' }}
|
|
||||||
with:
|
|
||||||
user: 'github-actions[bot]'
|
|
||||||
# The script for version increment.
|
|
||||||
# process.env.CURRENT_VERSION: The current version.
|
|
||||||
#
|
|
||||||
# Misskey calender versioning (yyyy.MM.patch) example
|
|
||||||
version_increment_script: |
|
|
||||||
const now = new Date();
|
|
||||||
const year = now.toLocaleDateString('en-US', { year: 'numeric', timeZone: 'Asia/Tokyo' });
|
|
||||||
const month = now.toLocaleDateString('en-US', { month: 'numeric', timeZone: 'Asia/Tokyo' });
|
|
||||||
const [major, minor, _patch] = process.env.CURRENT_VERSION.split('.');
|
|
||||||
const patch = Number(_patch.split('-')[0]);
|
|
||||||
if (Number.isNaN(patch)) {
|
|
||||||
console.error('Invalid patch version', year, month, process.env.CURRENT_VERSION, major, minor, _patch);
|
|
||||||
throw new Error('Invalid patch version');
|
|
||||||
}
|
|
||||||
if (year !== major || month !== minor) {
|
|
||||||
return `${year}.${month}.0`;
|
|
||||||
} else {
|
|
||||||
return `${major}.${minor}.${patch + 1}`;
|
|
||||||
}
|
|
||||||
##Semver example
|
|
||||||
#version_increment_script: |
|
|
||||||
# const [major, minor, patch] = process.env.CURRENT_VERSION.split('.');
|
|
||||||
# if ("${{ inputs.version_increment_type }}" === "major") {
|
|
||||||
# return `${Number(major) + 1}.0.0`;
|
|
||||||
# } else if ("${{ inputs.version_increment_type }}" === "minor") {
|
|
||||||
# return `${major}.${Number(minor) + 1}.0`;
|
|
||||||
# } else {
|
|
||||||
# return `${major}.${minor}.${Number(patch) + 1}`;
|
|
||||||
# }
|
|
||||||
package_jsons_to_rewrite: ${{ vars.PACKAGE_JSONS_TO_REWRITE }}
|
|
||||||
use_external_app_to_release: ${{ vars.USE_RELEASE_APP == 'true' }}
|
|
||||||
indent: ${{ vars.INDENT }}
|
|
||||||
stable_branch: ${{ vars.STABLE_BRANCH }}
|
|
||||||
draft_prerelease_channel: alpha
|
|
||||||
secrets:
|
|
||||||
RELEASE_APP_ID: ${{ secrets.RELEASE_APP_ID }}
|
|
||||||
RELEASE_APP_PRIVATE_KEY: ${{ secrets.RELEASE_APP_PRIVATE_KEY }}
|
|
104
.github/workflows/report-api-diff.yml
vendored
104
.github/workflows/report-api-diff.yml
vendored
@@ -1,104 +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.0.1
|
|
||||||
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: |
|
|
||||||
HEADER="このPRによるapi.jsonの差分"
|
|
||||||
FOOTER="[Get diff files from Workflow Page](https://github.com/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID})"
|
|
||||||
DIFF_BYTES="$(stat ./api.json.diff -c '%s' | tr -d '\n')"
|
|
||||||
|
|
||||||
echo "$HEADER" > ./output.md
|
|
||||||
|
|
||||||
if (( "$DIFF_BYTES" <= 1 )); then
|
|
||||||
echo '差分はありません。' >> ./output.md
|
|
||||||
else
|
|
||||||
echo '<details>' >> ./output.md
|
|
||||||
echo '<summary>差分はこちら</summary>' >> ./output.md
|
|
||||||
echo >> ./output.md
|
|
||||||
echo '```diff' >> ./output.md
|
|
||||||
cat ./api.json.diff >> ./output.md
|
|
||||||
echo '```' >> ./output.md
|
|
||||||
echo '</details>' >> .output.md
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "$FOOTER" >> ./output.md
|
|
||||||
- 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/storybook.yml
vendored
117
.github/workflows/storybook.yml
vendored
@@ -1,117 +0,0 @@
|
|||||||
name: Storybook
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
- develop
|
|
||||||
- dev/storybook8 # for testing
|
|
||||||
pull_request_target:
|
|
||||||
branches-ignore:
|
|
||||||
# Since pull requests targets master mostly is the "develop" branch.
|
|
||||||
# Storybook CI is checked on the "push" event of "develop" branch so it would cause a duplicate build.
|
|
||||||
# This is a waste of chromatic build quota, so we don't run storybook CI on pull requests targets master.
|
|
||||||
- master
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
# chromatic is not likely to be available for fork repositories, so we disable for fork repositories.
|
|
||||||
if: github.repository == 'misskey-dev/misskey'
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
env:
|
|
||||||
NODE_OPTIONS: "--max_old_space_size=7168"
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4.2.2
|
|
||||||
if: github.event_name != 'pull_request_target'
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
submodules: true
|
|
||||||
- uses: actions/checkout@v4.2.2
|
|
||||||
if: github.event_name == 'pull_request_target'
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
submodules: true
|
|
||||||
ref: "refs/pull/${{ github.event.number }}/merge"
|
|
||||||
- name: Checkout actual HEAD
|
|
||||||
if: github.event_name == 'pull_request_target'
|
|
||||||
id: rev
|
|
||||||
run: |
|
|
||||||
echo "base=$(git rev-list --parents -n1 HEAD | cut -d" " -f2)" >> $GITHUB_OUTPUT
|
|
||||||
git checkout $(git rev-list --parents -n1 HEAD | cut -d" " -f3)
|
|
||||||
- name: Setup pnpm
|
|
||||||
uses: pnpm/action-setup@v4.1.0
|
|
||||||
- name: Use Node.js 20.x
|
|
||||||
uses: actions/setup-node@v4.2.0
|
|
||||||
with:
|
|
||||||
node-version-file: '.node-version'
|
|
||||||
cache: 'pnpm'
|
|
||||||
- run: pnpm i --frozen-lockfile
|
|
||||||
- name: Check pnpm-lock.yaml
|
|
||||||
run: git diff --exit-code pnpm-lock.yaml
|
|
||||||
- name: Build misskey-js
|
|
||||||
run: pnpm --filter misskey-js build
|
|
||||||
- name: Build storybook
|
|
||||||
run: pnpm --filter frontend build-storybook
|
|
||||||
- name: Publish to Chromatic
|
|
||||||
if: github.event_name != 'pull_request_target' && github.ref == 'refs/heads/master'
|
|
||||||
run: pnpm --filter frontend chromatic --exit-once-uploaded -d storybook-static
|
|
||||||
env:
|
|
||||||
CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
|
|
||||||
- name: Publish to Chromatic
|
|
||||||
if: github.event_name != 'pull_request_target' && github.ref != 'refs/heads/master'
|
|
||||||
id: chromatic_push
|
|
||||||
run: |
|
|
||||||
DIFF="${{ github.event.before }} HEAD"
|
|
||||||
if [ "$DIFF" = "0000000000000000000000000000000000000000 HEAD" ]; then
|
|
||||||
DIFF="HEAD"
|
|
||||||
fi
|
|
||||||
CHROMATIC_PARAMETER="$(node packages/frontend/.storybook/changes.js $(git diff-tree --no-commit-id --name-only -r $(echo "$DIFF") | xargs))"
|
|
||||||
if [ "$CHROMATIC_PARAMETER" = " --skip" ]; then
|
|
||||||
echo "skip=true" >> $GITHUB_OUTPUT
|
|
||||||
fi
|
|
||||||
if pnpm --filter frontend chromatic -d storybook-static $(echo "$CHROMATIC_PARAMETER"); then
|
|
||||||
echo "success=true" >> $GITHUB_OUTPUT
|
|
||||||
else
|
|
||||||
echo "success=false" >> $GITHUB_OUTPUT
|
|
||||||
fi
|
|
||||||
env:
|
|
||||||
CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
|
|
||||||
- name: Publish to Chromatic
|
|
||||||
if: github.event_name == 'pull_request_target'
|
|
||||||
id: chromatic_pull_request
|
|
||||||
run: |
|
|
||||||
DIFF="${{ steps.rev.outputs.base }} HEAD"
|
|
||||||
if [ "$DIFF" = "0000000000000000000000000000000000000000 HEAD" ]; then
|
|
||||||
DIFF="HEAD"
|
|
||||||
fi
|
|
||||||
CHROMATIC_PARAMETER="$(node packages/frontend/.storybook/changes.js $(git diff-tree --no-commit-id --name-only -r $(echo "$DIFF") | xargs))"
|
|
||||||
if [ "$CHROMATIC_PARAMETER" = " --skip" ]; then
|
|
||||||
echo "skip=true" >> $GITHUB_OUTPUT
|
|
||||||
fi
|
|
||||||
BRANCH="${{ github.event.pull_request.head.user.login }}:$HEAD_REF"
|
|
||||||
if [ "$BRANCH" = "misskey-dev:$HEAD_REF" ]; then
|
|
||||||
BRANCH="$HEAD_REF"
|
|
||||||
fi
|
|
||||||
pnpm --filter frontend chromatic --exit-once-uploaded -d storybook-static --branch-name "$BRANCH" $(echo "$CHROMATIC_PARAMETER")
|
|
||||||
env:
|
|
||||||
HEAD_REF: ${{ github.event.pull_request.head.ref }}
|
|
||||||
CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
|
|
||||||
- name: Notify that Chromatic detects changes
|
|
||||||
uses: actions/github-script@v7.0.1
|
|
||||||
if: github.event_name != 'pull_request_target' && steps.chromatic_push.outputs.success == 'false'
|
|
||||||
with:
|
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
script: |
|
|
||||||
github.rest.repos.createCommitComment({
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo,
|
|
||||||
commit_sha: context.sha,
|
|
||||||
body: 'Chromatic detects changes. Please [review the changes on Chromatic](https://www.chromatic.com/builds?appId=6428f7d7b962f0b79f97d6e4).'
|
|
||||||
})
|
|
||||||
- name: Upload Artifacts
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: storybook
|
|
||||||
path: packages/frontend/storybook-static
|
|
100
.github/workflows/test-backend.yml
vendored
100
.github/workflows/test-backend.yml
vendored
@@ -5,31 +5,19 @@ on:
|
|||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
- develop
|
- develop
|
||||||
paths:
|
|
||||||
- packages/backend/**
|
|
||||||
# for permissions
|
|
||||||
- packages/misskey-js/**
|
|
||||||
- .github/workflows/test-backend.yml
|
|
||||||
- .github/misskey/test.yml
|
|
||||||
pull_request:
|
pull_request:
|
||||||
paths:
|
|
||||||
- packages/backend/**
|
|
||||||
# for permissions
|
|
||||||
- packages/misskey-js/**
|
|
||||||
- .github/workflows/test-backend.yml
|
|
||||||
- .github/misskey/test.yml
|
|
||||||
jobs:
|
jobs:
|
||||||
unit:
|
jest:
|
||||||
name: Unit tests (backend)
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
node-version: [22.11.0]
|
node-version: [20.5.1]
|
||||||
|
|
||||||
services:
|
services:
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:15
|
image: postgres:13
|
||||||
ports:
|
ports:
|
||||||
- 54312:5432
|
- 54312:5432
|
||||||
env:
|
env:
|
||||||
@@ -41,31 +29,20 @@ jobs:
|
|||||||
- 56312:6379
|
- 56312:6379
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.2.2
|
- uses: actions/checkout@v4.0.0
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
- name: Setup pnpm
|
- name: Install pnpm
|
||||||
uses: pnpm/action-setup@v4.1.0
|
uses: pnpm/action-setup@v2
|
||||||
- name: Install FFmpeg
|
with:
|
||||||
run: |
|
version: 8
|
||||||
for i in {1..3}; do
|
run_install: false
|
||||||
echo "Attempt $i: Installing FFmpeg..."
|
|
||||||
curl -s -L https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz -o ffmpeg.tar.xz && \
|
|
||||||
tar -xf ffmpeg.tar.xz && \
|
|
||||||
mv ffmpeg-*-static/ffmpeg /usr/local/bin/ && \
|
|
||||||
mv ffmpeg-*-static/ffprobe /usr/local/bin/ && \
|
|
||||||
rm -rf ffmpeg.tar.xz ffmpeg-*-static/ && \
|
|
||||||
break || sleep 10
|
|
||||||
if [ $i -eq 3 ]; then
|
|
||||||
echo "Failed to install FFmpeg after 3 attempts"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
- name: Use Node.js ${{ matrix.node-version }}
|
||||||
uses: actions/setup-node@v4.2.0
|
uses: actions/setup-node@v3.8.1
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
- run: corepack enable
|
||||||
- run: pnpm i --frozen-lockfile
|
- run: pnpm i --frozen-lockfile
|
||||||
- name: Check pnpm-lock.yaml
|
- name: Check pnpm-lock.yaml
|
||||||
run: git diff --exit-code pnpm-lock.yaml
|
run: git diff --exit-code pnpm-lock.yaml
|
||||||
@@ -74,56 +51,9 @@ jobs:
|
|||||||
- name: Build
|
- name: Build
|
||||||
run: pnpm build
|
run: pnpm build
|
||||||
- name: Test
|
- name: Test
|
||||||
run: pnpm --filter backend test-and-coverage
|
run: pnpm jest-and-coverage
|
||||||
- name: Upload to Codecov
|
- name: Upload Coverage
|
||||||
uses: codecov/codecov-action@v5
|
uses: codecov/codecov-action@v3
|
||||||
with:
|
|
||||||
token: ${{ secrets.CODECOV_TOKEN }}
|
|
||||||
files: ./packages/backend/coverage/coverage-final.json
|
|
||||||
|
|
||||||
e2e:
|
|
||||||
name: E2E tests (backend)
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
node-version: [22.11.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.2.2
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
- name: Setup pnpm
|
|
||||||
uses: pnpm/action-setup@v4.1.0
|
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
|
||||||
uses: actions/setup-node@v4.2.0
|
|
||||||
with:
|
|
||||||
node-version: ${{ matrix.node-version }}
|
|
||||||
cache: 'pnpm'
|
|
||||||
- run: pnpm i --frozen-lockfile
|
|
||||||
- name: Check pnpm-lock.yaml
|
|
||||||
run: git diff --exit-code pnpm-lock.yaml
|
|
||||||
- name: Copy Configure
|
|
||||||
run: cp .github/misskey/test.yml .config
|
|
||||||
- name: Build
|
|
||||||
run: pnpm build
|
|
||||||
- name: Test
|
|
||||||
run: pnpm --filter backend test-and-coverage:e2e
|
|
||||||
- name: Upload to Codecov
|
|
||||||
uses: codecov/codecov-action@v5
|
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.CODECOV_TOKEN }}
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
files: ./packages/backend/coverage/coverage-final.json
|
files: ./packages/backend/coverage/coverage-final.json
|
||||||
|
88
.github/workflows/test-federation.yml
vendored
88
.github/workflows/test-federation.yml
vendored
@@ -1,88 +0,0 @@
|
|||||||
name: Test (federation)
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
- develop
|
|
||||||
paths:
|
|
||||||
- packages/backend/**
|
|
||||||
- packages/misskey-js/**
|
|
||||||
- .github/workflows/test-federation.yml
|
|
||||||
pull_request:
|
|
||||||
paths:
|
|
||||||
- packages/backend/**
|
|
||||||
- packages/misskey-js/**
|
|
||||||
- .github/workflows/test-federation.yml
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
test:
|
|
||||||
name: Federation test
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
node-version: [22.11.0]
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
- name: Setup pnpm
|
|
||||||
uses: pnpm/action-setup@v4.1.0
|
|
||||||
- name: Install FFmpeg
|
|
||||||
run: |
|
|
||||||
for i in {1..3}; do
|
|
||||||
echo "Attempt $i: Installing FFmpeg..."
|
|
||||||
curl -s -L https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz -o ffmpeg.tar.xz && \
|
|
||||||
tar -xf ffmpeg.tar.xz && \
|
|
||||||
mv ffmpeg-*-static/ffmpeg /usr/local/bin/ && \
|
|
||||||
mv ffmpeg-*-static/ffprobe /usr/local/bin/ && \
|
|
||||||
rm -rf ffmpeg.tar.xz ffmpeg-*-static/ && \
|
|
||||||
break || sleep 10
|
|
||||||
if [ $i -eq 3 ]; then
|
|
||||||
echo "Failed to install FFmpeg after 3 attempts"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
|
||||||
uses: actions/setup-node@v4.2.0
|
|
||||||
with:
|
|
||||||
node-version: ${{ matrix.node-version }}
|
|
||||||
cache: 'pnpm'
|
|
||||||
- name: Build Misskey
|
|
||||||
run: |
|
|
||||||
pnpm i --frozen-lockfile
|
|
||||||
pnpm build
|
|
||||||
- name: Setup
|
|
||||||
run: |
|
|
||||||
cd packages/backend/test-federation
|
|
||||||
bash ./setup.sh
|
|
||||||
sudo chmod 644 ./certificates/*.test.key
|
|
||||||
- name: Start servers
|
|
||||||
id: start_servers
|
|
||||||
continue-on-error: true
|
|
||||||
# https://github.com/docker/compose/issues/1294#issuecomment-374847206
|
|
||||||
run: |
|
|
||||||
cd packages/backend/test-federation
|
|
||||||
docker compose up -d --scale tester=0
|
|
||||||
- name: Print start_servers error
|
|
||||||
if: ${{ steps.start_servers.outcome == 'failure' }}
|
|
||||||
run: |
|
|
||||||
cd packages/backend/test-federation
|
|
||||||
docker compose logs | tail -n 300
|
|
||||||
exit 1
|
|
||||||
- name: Test
|
|
||||||
id: test
|
|
||||||
continue-on-error: true
|
|
||||||
run: |
|
|
||||||
cd packages/backend/test-federation
|
|
||||||
docker compose run --no-deps tester
|
|
||||||
- name: Log
|
|
||||||
if: ${{ steps.test.outcome == 'failure' }}
|
|
||||||
run: |
|
|
||||||
cd packages/backend/test-federation
|
|
||||||
docker compose logs
|
|
||||||
exit 1
|
|
||||||
- name: Stop servers
|
|
||||||
run: |
|
|
||||||
cd packages/backend/test-federation
|
|
||||||
docker compose down
|
|
56
.github/workflows/test-frontend.yml
vendored
56
.github/workflows/test-frontend.yml
vendored
@@ -5,43 +5,31 @@ on:
|
|||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
- develop
|
- develop
|
||||||
paths:
|
|
||||||
- packages/frontend/**
|
|
||||||
# for permissions
|
|
||||||
- packages/misskey-js/**
|
|
||||||
# for e2e
|
|
||||||
- packages/backend/**
|
|
||||||
- .github/workflows/test-frontend.yml
|
|
||||||
- .github/misskey/test.yml
|
|
||||||
pull_request:
|
pull_request:
|
||||||
paths:
|
|
||||||
- packages/frontend/**
|
|
||||||
# for permissions
|
|
||||||
- packages/misskey-js/**
|
|
||||||
# for e2e
|
|
||||||
- packages/backend/**
|
|
||||||
- .github/workflows/test-frontend.yml
|
|
||||||
- .github/misskey/test.yml
|
|
||||||
jobs:
|
jobs:
|
||||||
vitest:
|
vitest:
|
||||||
name: Unit tests (frontend)
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
node-version: [22.11.0]
|
node-version: [20.5.1]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.2.2
|
- uses: actions/checkout@v4.0.0
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
- name: Setup pnpm
|
- name: Install pnpm
|
||||||
uses: pnpm/action-setup@v4.1.0
|
uses: pnpm/action-setup@v2
|
||||||
|
with:
|
||||||
|
version: 8
|
||||||
|
run_install: false
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
- name: Use Node.js ${{ matrix.node-version }}
|
||||||
uses: actions/setup-node@v4.2.0
|
uses: actions/setup-node@v3.8.1
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
- run: corepack enable
|
||||||
- run: pnpm i --frozen-lockfile
|
- run: pnpm i --frozen-lockfile
|
||||||
- name: Check pnpm-lock.yaml
|
- name: Check pnpm-lock.yaml
|
||||||
run: git diff --exit-code pnpm-lock.yaml
|
run: git diff --exit-code pnpm-lock.yaml
|
||||||
@@ -52,24 +40,23 @@ jobs:
|
|||||||
- name: Test
|
- name: Test
|
||||||
run: pnpm --filter frontend test-and-coverage
|
run: pnpm --filter frontend test-and-coverage
|
||||||
- name: Upload Coverage
|
- name: Upload Coverage
|
||||||
uses: codecov/codecov-action@v5
|
uses: codecov/codecov-action@v3
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.CODECOV_TOKEN }}
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
files: ./packages/frontend/coverage/coverage-final.json
|
files: ./packages/frontend/coverage/coverage-final.json
|
||||||
|
|
||||||
e2e:
|
e2e:
|
||||||
name: E2E tests (frontend)
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
node-version: [22.11.0]
|
node-version: [20.5.1]
|
||||||
browser: [chrome]
|
browser: [chrome]
|
||||||
|
|
||||||
services:
|
services:
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:15
|
image: postgres:13
|
||||||
ports:
|
ports:
|
||||||
- 54312:5432
|
- 54312:5432
|
||||||
env:
|
env:
|
||||||
@@ -81,7 +68,7 @@ jobs:
|
|||||||
- 56312:6379
|
- 56312:6379
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.2.2
|
- uses: actions/checkout@v4.0.0
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
# https://github.com/cypress-io/cypress-docker-images/issues/150
|
# https://github.com/cypress-io/cypress-docker-images/issues/150
|
||||||
@@ -90,13 +77,17 @@ jobs:
|
|||||||
# if: ${{ matrix.browser == 'firefox' }}
|
# if: ${{ matrix.browser == 'firefox' }}
|
||||||
#- uses: browser-actions/setup-firefox@latest
|
#- uses: browser-actions/setup-firefox@latest
|
||||||
# if: ${{ matrix.browser == 'firefox' }}
|
# if: ${{ matrix.browser == 'firefox' }}
|
||||||
- name: Setup pnpm
|
- name: Install pnpm
|
||||||
uses: pnpm/action-setup@v4.1.0
|
uses: pnpm/action-setup@v2
|
||||||
|
with:
|
||||||
|
version: 7
|
||||||
|
run_install: false
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
- name: Use Node.js ${{ matrix.node-version }}
|
||||||
uses: actions/setup-node@v4.2.0
|
uses: actions/setup-node@v3.8.1
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
- run: corepack enable
|
||||||
- run: pnpm i --frozen-lockfile
|
- run: pnpm i --frozen-lockfile
|
||||||
- name: Copy Configure
|
- name: Copy Configure
|
||||||
run: cp .github/misskey/test.yml .config
|
run: cp .github/misskey/test.yml .config
|
||||||
@@ -111,19 +102,18 @@ jobs:
|
|||||||
run: pnpm exec cypress install
|
run: pnpm exec cypress install
|
||||||
- name: Cypress run
|
- name: Cypress run
|
||||||
uses: cypress-io/github-action@v6
|
uses: cypress-io/github-action@v6
|
||||||
timeout-minutes: 15
|
|
||||||
with:
|
with:
|
||||||
install: false
|
install: false
|
||||||
start: pnpm start:test
|
start: pnpm start:test
|
||||||
wait-on: 'http://localhost:61812'
|
wait-on: 'http://localhost:61812'
|
||||||
headed: true
|
headed: true
|
||||||
browser: ${{ matrix.browser }}
|
browser: ${{ matrix.browser }}
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v2
|
||||||
if: failure()
|
if: failure()
|
||||||
with:
|
with:
|
||||||
name: ${{ matrix.browser }}-cypress-screenshots
|
name: ${{ matrix.browser }}-cypress-screenshots
|
||||||
path: cypress/screenshots
|
path: cypress/screenshots
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v2
|
||||||
if: always()
|
if: always()
|
||||||
with:
|
with:
|
||||||
name: ${{ matrix.browser }}-cypress-videos
|
name: ${{ matrix.browser }}-cypress-videos
|
||||||
|
19
.github/workflows/test-misskey-js.yml
vendored
19
.github/workflows/test-misskey-js.yml
vendored
@@ -6,34 +6,27 @@ name: Test (misskey.js)
|
|||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [ develop ]
|
branches: [ develop ]
|
||||||
paths:
|
|
||||||
- packages/misskey-js/**
|
|
||||||
- .github/workflows/test-misskey-js.yml
|
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [ develop ]
|
branches: [ develop ]
|
||||||
paths:
|
|
||||||
- packages/misskey-js/**
|
|
||||||
- .github/workflows/test-misskey-js.yml
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
name: Unit tests (misskey.js)
|
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
node-version: [22.11.0]
|
node-version: [20.5.1]
|
||||||
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
|
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4.2.2
|
uses: actions/checkout@v4.0.0
|
||||||
|
|
||||||
- name: Setup pnpm
|
- run: corepack enable
|
||||||
uses: pnpm/action-setup@v4.1.0
|
|
||||||
|
|
||||||
- name: Setup Node.js ${{ matrix.node-version }}
|
- name: Setup Node.js ${{ matrix.node-version }}
|
||||||
uses: actions/setup-node@v4.2.0
|
uses: actions/setup-node@v3.8.1
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
@@ -53,7 +46,7 @@ jobs:
|
|||||||
CI: true
|
CI: true
|
||||||
|
|
||||||
- name: Upload Coverage
|
- name: Upload Coverage
|
||||||
uses: codecov/codecov-action@v5
|
uses: codecov/codecov-action@v3
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.CODECOV_TOKEN }}
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
files: ./packages/misskey-js/coverage/coverage-final.json
|
files: ./packages/misskey-js/coverage/coverage-final.json
|
||||||
|
15
.github/workflows/test-production.yml
vendored
15
.github/workflows/test-production.yml
vendored
@@ -12,24 +12,27 @@ env:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
production:
|
production:
|
||||||
name: Production build
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
node-version: [22.11.0]
|
node-version: [20.5.1]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.2.2
|
- uses: actions/checkout@v4.0.0
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
- name: Setup pnpm
|
- name: Install pnpm
|
||||||
uses: pnpm/action-setup@v4.1.0
|
uses: pnpm/action-setup@v2
|
||||||
|
with:
|
||||||
|
version: 8
|
||||||
|
run_install: false
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
- name: Use Node.js ${{ matrix.node-version }}
|
||||||
uses: actions/setup-node@v4.2.0
|
uses: actions/setup-node@v3.8.1
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
- run: corepack enable
|
||||||
- run: pnpm i --frozen-lockfile
|
- run: pnpm i --frozen-lockfile
|
||||||
- name: Check pnpm-lock.yaml
|
- name: Check pnpm-lock.yaml
|
||||||
run: git diff --exit-code pnpm-lock.yaml
|
run: git diff --exit-code pnpm-lock.yaml
|
||||||
|
44
.github/workflows/validate-api-json.yml
vendored
44
.github/workflows/validate-api-json.yml
vendored
@@ -1,44 +0,0 @@
|
|||||||
name: api.json validation
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
- develop
|
|
||||||
paths:
|
|
||||||
- packages/backend/**
|
|
||||||
- .github/workflows/validate-api-json.yml
|
|
||||||
pull_request:
|
|
||||||
paths:
|
|
||||||
- packages/backend/**
|
|
||||||
- .github/workflows/validate-api-json.yml
|
|
||||||
jobs:
|
|
||||||
validate-api-json:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
node-version: [22.11.0]
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4.2.2
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
- name: Setup pnpm
|
|
||||||
uses: pnpm/action-setup@v4.1.0
|
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
|
||||||
uses: actions/setup-node@v4.2.0
|
|
||||||
with:
|
|
||||||
node-version: ${{ matrix.node-version }}
|
|
||||||
cache: 'pnpm'
|
|
||||||
- name: Install Redocly CLI
|
|
||||||
run: npm i -g @redocly/cli
|
|
||||||
- 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: npx @redocly/cli lint --extends=minimal ./packages/backend/built/api.json
|
|
15
.gitignore
vendored
15
.gitignore
vendored
@@ -35,17 +35,12 @@ coverage
|
|||||||
!/.config/example.yml
|
!/.config/example.yml
|
||||||
!/.config/docker_example.yml
|
!/.config/docker_example.yml
|
||||||
!/.config/docker_example.env
|
!/.config/docker_example.env
|
||||||
!/.config/cypress-devcontainer.yml
|
|
||||||
docker-compose.yml
|
docker-compose.yml
|
||||||
./compose.yml
|
!/.devcontainer/docker-compose.yml
|
||||||
.devcontainer/compose.yml
|
|
||||||
!/.devcontainer/compose.yml
|
|
||||||
|
|
||||||
# misskey
|
# misskey
|
||||||
/build
|
/build
|
||||||
built
|
built
|
||||||
built-test
|
|
||||||
js-built
|
|
||||||
/data
|
/data
|
||||||
/.cache-loader
|
/.cache-loader
|
||||||
/db
|
/db
|
||||||
@@ -62,14 +57,6 @@ api-docs.json
|
|||||||
ormconfig.json
|
ormconfig.json
|
||||||
temp
|
temp
|
||||||
/packages/frontend/src/**/*.stories.ts
|
/packages/frontend/src/**/*.stories.ts
|
||||||
tsdoc-metadata.json
|
|
||||||
misskey-assets
|
|
||||||
|
|
||||||
# Vite temporary files
|
|
||||||
vite.config.js.timestamp-*
|
|
||||||
vite.config.ts.timestamp-*
|
|
||||||
vite.config.local-dev.js.timestamp-*
|
|
||||||
vite.config.local-dev.ts.timestamp-*
|
|
||||||
|
|
||||||
# blender backups
|
# blender backups
|
||||||
*.blend1
|
*.blend1
|
||||||
|
3
.gitmodules
vendored
3
.gitmodules
vendored
@@ -1,3 +1,6 @@
|
|||||||
|
[submodule "misskey-assets"]
|
||||||
|
path = misskey-assets
|
||||||
|
url = https://github.com/misskey-dev/assets.git
|
||||||
[submodule "fluent-emojis"]
|
[submodule "fluent-emojis"]
|
||||||
path = fluent-emojis
|
path = fluent-emojis
|
||||||
url = https://github.com/misskey-dev/emojis.git
|
url = https://github.com/misskey-dev/emojis.git
|
||||||
|
@@ -1 +1 @@
|
|||||||
22.11.0
|
20.5.1
|
||||||
|
2
.vscode/extensions.json
vendored
2
.vscode/extensions.json
vendored
@@ -3,7 +3,9 @@
|
|||||||
"editorconfig.editorconfig",
|
"editorconfig.editorconfig",
|
||||||
"dbaeumer.vscode-eslint",
|
"dbaeumer.vscode-eslint",
|
||||||
"Vue.volar",
|
"Vue.volar",
|
||||||
|
"Vue.vscode-typescript-vue-plugin",
|
||||||
"Orta.vscode-jest",
|
"Orta.vscode-jest",
|
||||||
|
"dbaeumer.vscode-eslint",
|
||||||
"mrmlnc.vscode-json5"
|
"mrmlnc.vscode-json5"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
6
.vscode/settings.json
vendored
6
.vscode/settings.json
vendored
@@ -7,9 +7,5 @@
|
|||||||
"*.test.ts": "typescript"
|
"*.test.ts": "typescript"
|
||||||
},
|
},
|
||||||
"jest.jestCommandLine": "pnpm run jest",
|
"jest.jestCommandLine": "pnpm run jest",
|
||||||
"jest.runMode": "on-demand",
|
"jest.autoRun": "off"
|
||||||
"editor.codeActionsOnSave": {
|
|
||||||
"source.fixAll": "explicit"
|
|
||||||
},
|
|
||||||
"editor.formatOnSave": false
|
|
||||||
}
|
}
|
1243
CHANGELOG.md
1243
CHANGELOG.md
File diff suppressed because it is too large
Load Diff
@@ -2,131 +2,45 @@
|
|||||||
|
|
||||||
## Our Pledge
|
## Our Pledge
|
||||||
|
|
||||||
We as members, contributors, and leaders pledge to make participation in our
|
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.
|
||||||
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.
|
|
||||||
|
|
||||||
## Our Standards
|
## Our Standards
|
||||||
|
|
||||||
Examples of behavior that contributes to a positive environment for our
|
Examples of behavior that contributes to creating a positive environment include:
|
||||||
community include:
|
|
||||||
|
|
||||||
* Demonstrating empathy and kindness toward other people
|
* Using welcoming and inclusive language
|
||||||
* Being respectful of differing opinions, viewpoints, and experiences
|
* Being respectful of differing viewpoints and experiences
|
||||||
* Giving and gracefully accepting constructive feedback
|
* Gracefully accepting constructive criticism
|
||||||
* Accepting responsibility and apologizing to those affected by our mistakes,
|
* Focusing on what is best for the community
|
||||||
and learning from the experience
|
* Showing empathy towards other community members
|
||||||
* Focusing on what is best not just for us as individuals, but for the overall
|
|
||||||
community
|
|
||||||
|
|
||||||
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
|
* The use of sexualized language or imagery and unwelcome sexual attention or advances
|
||||||
any kind
|
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
|
||||||
* Public or private harassment
|
* Public or private harassment
|
||||||
* Publishing others' private information, such as a physical or email address,
|
* Publishing others' private information, such as a physical or electronic address, without explicit permission
|
||||||
without their explicit permission
|
* Other conduct which could reasonably be considered inappropriate in a professional setting
|
||||||
* 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
|
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.
|
||||||
acceptable behavior and will take appropriate and fair corrective action in
|
|
||||||
response to any behavior that they deem inappropriate, threatening, offensive,
|
|
||||||
or harmful.
|
|
||||||
|
|
||||||
Community leaders have the right and responsibility to remove, edit, or reject
|
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.
|
||||||
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.
|
|
||||||
|
|
||||||
## Scope
|
## Scope
|
||||||
|
|
||||||
This Code of Conduct applies within all community spaces, and also applies when
|
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.
|
||||||
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.
|
|
||||||
|
|
||||||
## Enforcement
|
## Enforcement
|
||||||
|
|
||||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
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.
|
||||||
reported to the community leaders responsible for enforcement at
|
|
||||||
<syuilotan@yahoo.co.jp>.
|
|
||||||
All complaints will be reviewed and investigated promptly and fairly.
|
|
||||||
|
|
||||||
All community leaders are obligated to respect the privacy and security of the
|
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.
|
||||||
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.
|
|
||||||
|
|
||||||
## Attribution
|
## Attribution
|
||||||
|
|
||||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
|
||||||
version 2.1, available at
|
|
||||||
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
|
|
||||||
|
|
||||||
Community Impact Guidelines were inspired by
|
[homepage]: http://contributor-covenant.org
|
||||||
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
|
[version]: http://contributor-covenant.org/version/1/4/
|
||||||
|
|
||||||
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
|
|
||||||
|
287
CONTRIBUTING.md
287
CONTRIBUTING.md
@@ -1,7 +1,7 @@
|
|||||||
# Contribution guide
|
# Contribution guide
|
||||||
We're glad you're interested in contributing Misskey! In this document you will find the information you need to contribute to the project.
|
We're glad you're interested in contributing Misskey! In this document you will find the information you need to contribute to the project.
|
||||||
|
|
||||||
> [!NOTE]
|
> **Note**
|
||||||
> This project uses Japanese as its major language, **but you do not need to translate and write the Issues/PRs in Japanese.**
|
> This project uses Japanese as its major language, **but you do not need to translate and write the Issues/PRs in Japanese.**
|
||||||
> Also, you might receive comments on your Issue/PR in Japanese, but you do not need to reply to them in Japanese as well.\
|
> Also, you might receive comments on your Issue/PR in Japanese, but you do not need to reply to them in Japanese as well.\
|
||||||
> The accuracy of machine translation into Japanese is not high, so it will be easier for us to understand if you write it in the original language.
|
> The accuracy of machine translation into Japanese is not high, so it will be easier for us to understand if you write it in the original language.
|
||||||
@@ -15,33 +15,18 @@ Before creating an issue, please check the following:
|
|||||||
- To avoid duplication, please search for similar issues before creating a new issue.
|
- To avoid duplication, please search for similar issues before creating a new issue.
|
||||||
- Do not use Issues to ask questions or troubleshooting.
|
- Do not use Issues to ask questions or troubleshooting.
|
||||||
- Issues should only be used to feature requests, suggestions, and bug tracking.
|
- 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/)~~ [GitHub Discussions](https://github.com/misskey-dev/misskey/discussions) or [Discord](https://discord.gg/Wp8gVStHW3).
|
||||||
|
|
||||||
> [!WARNING]
|
> **Warning**
|
||||||
> Do not close issues that are about to be resolved. It should remain open until a commit that actually resolves it is merged.
|
> Do not close issues that are about to be resolved. It should remain open until a commit that actually resolves it is merged.
|
||||||
|
|
||||||
### Recommended discussing before implementation
|
## Before implementation
|
||||||
We welcome your proposal.
|
|
||||||
|
|
||||||
When you want to add a feature or fix a bug, **first have the design and policy reviewed in an Issue** (if it is not there, please make one). Without this step, there is a high possibility that the PR will not be merged even if it is implemented.
|
When you want to add a feature or fix a bug, **first have the design and policy reviewed in an Issue** (if it is not there, please make one). Without this step, there is a high possibility that the PR will not be merged even if it is implemented.
|
||||||
|
|
||||||
At this point, you also need to clarify the goals of the PR you will create, and make sure that the other members of the team are aware of them.
|
At this point, you also need to clarify the goals of the PR you will create, and make sure that the other members of the team are aware of them.
|
||||||
PRs that do not have a clear set of do's and don'ts tend to be bloated and difficult to review.
|
PRs that do not have a clear set of do's and don'ts tend to be bloated and difficult to review.
|
||||||
|
|
||||||
Also, when you start implementation, assign yourself to the Issue (if you cannot do it yourself, ask Committer to assign you).
|
Also, when you start implementation, assign yourself to the Issue (if you cannot do it yourself, ask another member to assign you). By expressing your intention to work the Issue, you can prevent conflicts in the work.
|
||||||
By expressing your intention to work on the Issue, you can prevent conflicts in the work.
|
|
||||||
|
|
||||||
To the Committers: you should not assign someone on it before the Final Decision.
|
|
||||||
|
|
||||||
### How issues are triaged
|
|
||||||
|
|
||||||
The Committers may:
|
|
||||||
* close an issue that is not reproducible on latest stable release,
|
|
||||||
* merge an issue into another issue,
|
|
||||||
* split an issue into multiple issues,
|
|
||||||
* or re-open that has been closed for some reason which is not applicable anymore.
|
|
||||||
|
|
||||||
@syuilo reserves the Final Decision rights including whether the project will implement feature and how to implement, these rights are not always exercised.
|
|
||||||
|
|
||||||
## Well-known branches
|
## Well-known branches
|
||||||
- **`master`** branch is tracking the latest release and used for production purposes.
|
- **`master`** branch is tracking the latest release and used for production purposes.
|
||||||
@@ -64,29 +49,9 @@ Thank you for your PR! Before creating a PR, please check the following:
|
|||||||
|
|
||||||
Thanks for your cooperation 🤗
|
Thanks for your cooperation 🤗
|
||||||
|
|
||||||
### Additional things for ActivityPub payload changes
|
|
||||||
*This section is specific to misskey-dev implementation. Other fork or implementation may take different way. A significant difference is that non-"misskey-dev" extension is not described in the misskey-hub's document.*
|
|
||||||
|
|
||||||
If PR includes changes to ActivityPub payload, please reflect it in [misskey-hub's document](https://github.com/misskey-dev/misskey-hub-next/blob/master/content/ns.md) by sending PR.
|
|
||||||
|
|
||||||
The name of purporsed extension property (referred as "extended property" in later) to ActivityPub shall be prefixed by `_misskey_`. (i.e. `_misskey_quote`)
|
|
||||||
|
|
||||||
The extended property in `packages/backend/src/core/activitypub/type.ts` **must** be declared as optional because ActivityPub payloads that comes from older Misskey or other implementation may not contain it.
|
|
||||||
|
|
||||||
The extended property must be included in the context definition. Context is defined in `packages/backend/src/core/activitypub/misc/contexts.ts`.
|
|
||||||
The key shall be same as the name of extended property, and the value shall be same as "short IRI".
|
|
||||||
|
|
||||||
"Short IRI" is defined in misskey-hub's document, but usually takes form of `misskey:<name of extended property>`. (i.e. `misskey:_misskey_quote`)
|
|
||||||
|
|
||||||
One should not add property that has defined before by other implementation, or add custom variant value to "well-known" property.
|
|
||||||
|
|
||||||
## Reviewers guide
|
## Reviewers guide
|
||||||
Be willing to comment on the good points and not just the things you want fixed 💯
|
Be willing to comment on the good points and not just the things you want fixed 💯
|
||||||
|
|
||||||
読んでおくといいやつ
|
|
||||||
- https://blog.lacolaco.net/posts/1e2cf439b3c2/
|
|
||||||
- https://konifar-zatsu.hatenadiary.jp/entry/2024/11/05/192421
|
|
||||||
|
|
||||||
### Review perspective
|
### Review perspective
|
||||||
- Scope
|
- Scope
|
||||||
- Are the goals of the PR clear?
|
- Are the goals of the PR clear?
|
||||||
@@ -101,22 +66,6 @@ Be willing to comment on the good points and not just the things you want fixed
|
|||||||
- Are there any omissions or gaps?
|
- Are there any omissions or gaps?
|
||||||
- Does it check for anomalies?
|
- Does it check for anomalies?
|
||||||
|
|
||||||
## Security Advisory
|
|
||||||
### For reporter
|
|
||||||
Thank you for your reporting!
|
|
||||||
|
|
||||||
If you can also create a patch to fix the vulnerability, please create a PR on the private fork.
|
|
||||||
|
|
||||||
> [!note]
|
|
||||||
> There is a GitHub bug that prevents merging if a PR not following the develop branch of upstream, so please keep follow the develop branch.
|
|
||||||
|
|
||||||
### For misskey-dev member
|
|
||||||
修正PRがdevelopに追従されていないとマージできないので、マージできなかったら
|
|
||||||
|
|
||||||
> Could you merge or rebase onto upstream develop branch?
|
|
||||||
|
|
||||||
などと伝える。
|
|
||||||
|
|
||||||
## Deploy
|
## Deploy
|
||||||
The `/deploy` command by issue comment can be used to deploy the contents of a PR to the preview environment.
|
The `/deploy` command by issue comment can be used to deploy the contents of a PR to the preview environment.
|
||||||
```
|
```
|
||||||
@@ -128,7 +77,7 @@ An actual domain will be assigned so you can test the federation.
|
|||||||
|
|
||||||
## Release
|
## Release
|
||||||
### Release Instructions
|
### Release Instructions
|
||||||
1. Commit version changes in the `develop` branch ([package.json](package.json))
|
1. Commit version changes in the `develop` branch ([package.json](https://github.com/misskey-dev/misskey/blob/develop/package.json))
|
||||||
2. Create a release PR.
|
2. Create a release PR.
|
||||||
- Into `master` from `develop` branch.
|
- Into `master` from `develop` branch.
|
||||||
- The title must be in the format `Release: x.y.z`.
|
- The title must be in the format `Release: x.y.z`.
|
||||||
@@ -139,7 +88,7 @@ An actual domain will be assigned so you can test the federation.
|
|||||||
- The target branch must be `master`
|
- The target branch must be `master`
|
||||||
- The tag name must be the version
|
- The tag name must be the version
|
||||||
|
|
||||||
> [!NOTE]
|
> **Note**
|
||||||
> Why this instruction is necessary:
|
> Why this instruction is necessary:
|
||||||
> - To perform final QA checks
|
> - To perform final QA checks
|
||||||
> - To distribute responsibility
|
> - To distribute responsibility
|
||||||
@@ -152,28 +101,24 @@ You can improve our translations with your Crowdin account.
|
|||||||
Your changes in Crowdin are automatically submitted as a PR (with the title "New Crowdin translations") to the repository.
|
Your changes in Crowdin are automatically submitted as a PR (with the title "New Crowdin translations") to the repository.
|
||||||
The owner [@syuilo](https://github.com/syuilo) merges the PR into the develop branch before the next release.
|
The owner [@syuilo](https://github.com/syuilo) merges the PR into the develop branch before the next release.
|
||||||
|
|
||||||
If your language is not listed in Crowdin, please open an issue. We will add it to Crowdin.
|
If your language is not listed in Crowdin, please open an issue.
|
||||||
For newly added languages, once the translation progress per language exceeds 70%, it will be officially introduced into Misskey and made available to users.
|
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## Development
|
## Development
|
||||||
### Setup
|
During development, it is useful to use the
|
||||||
Before developing, you have to set up environment. Misskey requires Redis, PostgreSQL, and FFmpeg.
|
|
||||||
|
|
||||||
You would want to install Meilisearch to experiment related features. Technically, meilisearch is not strict requirement, but some features and tests require it.
|
```
|
||||||
|
pnpm dev
|
||||||
|
```
|
||||||
|
|
||||||
There are a few ways to proceed.
|
command.
|
||||||
|
|
||||||
#### Use system-wide software
|
- Server-side source files and automatically builds them if they are modified. Automatically start the server process(es).
|
||||||
You could install them in system-wide (such as from package manager).
|
- Vite HMR (just the `vite` command) is available. The behavior may be different from production.
|
||||||
|
- Service Worker is watched by esbuild.
|
||||||
#### Use `docker compose`
|
|
||||||
You could obtain middleware container by typing `docker compose -f $PROJECT_ROOT/compose.local-db.yml up -d`.
|
|
||||||
|
|
||||||
#### Use Devcontainer
|
|
||||||
Devcontainer also has necessary setting. This method can be done by connecting from VSCode.
|
|
||||||
|
|
||||||
|
### Dev Container
|
||||||
Instead of running `pnpm` locally, you can use Dev Container to set up your development environment.
|
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.
|
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.
|
**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.
|
||||||
@@ -187,61 +132,38 @@ pnpm build
|
|||||||
pnpm migrate
|
pnpm migrate
|
||||||
```
|
```
|
||||||
|
|
||||||
After finishing the migration, you can proceed.
|
After finishing the migration, run the `pnpm dev` command to start the development server.
|
||||||
|
|
||||||
### Start developing
|
``` bash
|
||||||
During development, it is useful to use the
|
|
||||||
```
|
|
||||||
pnpm dev
|
pnpm dev
|
||||||
```
|
```
|
||||||
command.
|
|
||||||
|
|
||||||
- Server-side source files and automatically builds them if they are modified. Automatically start the server process(es).
|
|
||||||
- Service Worker is watched by esbuild.
|
|
||||||
- Vite HMR (just the `vite` command) is available. The behavior may be different from production.
|
|
||||||
- Vite runs behind the backend (the backend will proxy Vite at /vite and /embed_vite except for websocket used for HMR).
|
|
||||||
- You can see Misskey by accessing `http://localhost:3000` (Replace `3000` with the port configured with `port` in .config/default.yml).
|
|
||||||
|
|
||||||
## Testing
|
## Testing
|
||||||
You can run non-backend tests by executing following commands:
|
- Test codes are located in [`/packages/backend/test`](/packages/backend/test).
|
||||||
```sh
|
|
||||||
pnpm --filter frontend test
|
### Run test
|
||||||
pnpm --filter misskey-js test
|
Create a config file.
|
||||||
```
|
```
|
||||||
|
|
||||||
Backend tests require manual preparation of servers. See the next section for more on this.
|
|
||||||
|
|
||||||
### Backend
|
|
||||||
There are three types of test codes for the backend:
|
|
||||||
- Unit tests: [`/packages/backend/test/unit`](/packages/backend/test/unit)
|
|
||||||
- Single-server E2E tests: [`/packages/backend/test/e2e`](/packages/backend/test/e2e)
|
|
||||||
- Multiple-server E2E tests: [`/packages/backend/test-federation`](/packages/backend/test-federation)
|
|
||||||
|
|
||||||
#### Running Unit Tests or Single-server E2E Tests
|
|
||||||
1. Create a config file:
|
|
||||||
```sh
|
|
||||||
cp .github/misskey/test.yml .config/
|
cp .github/misskey/test.yml .config/
|
||||||
```
|
```
|
||||||
|
Prepare DB/Redis for testing.
|
||||||
2. Start DB and Redis servers for testing:
|
|
||||||
```sh
|
|
||||||
docker compose -f packages/backend/test/compose.yml up
|
|
||||||
```
|
```
|
||||||
Instead, you can prepare an empty (data can be erased) DB and edit `.config/test.yml` appropriately.
|
docker compose -f packages/backend/test/docker-compose.yml up
|
||||||
|
|
||||||
3. Run all tests:
|
|
||||||
```sh
|
|
||||||
pnpm --filter backend test # unit tests
|
|
||||||
pnpm --filter backend test:e2e # single-server E2E tests
|
|
||||||
```
|
```
|
||||||
If you want to run a specific test, run as a following command:
|
Alternatively, prepare an empty (data can be erased) DB and edit `.config/test.yml`.
|
||||||
```sh
|
|
||||||
pnpm --filter backend test -- packages/backend/test/unit/activitypub.ts
|
Run all test.
|
||||||
pnpm --filter backend test:e2e -- packages/backend/test/e2e/nodeinfo.ts
|
```
|
||||||
|
pnpm test
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Running Multiple-server E2E Tests
|
#### Run specify test
|
||||||
See [`/packages/backend/test-federation/README.md`](/packages/backend/test-federation/README.md).
|
```
|
||||||
|
pnpm jest -- foo.ts
|
||||||
|
```
|
||||||
|
|
||||||
|
### e2e tests
|
||||||
|
TODO
|
||||||
|
|
||||||
## Environment Variable
|
## Environment Variable
|
||||||
|
|
||||||
@@ -265,7 +187,7 @@ niraxは、Misskeyで使用しているオリジナルのフロントエンド
|
|||||||
### ルート定義
|
### ルート定義
|
||||||
ルート定義は、以下の形式のオブジェクトの配列です。
|
ルート定義は、以下の形式のオブジェクトの配列です。
|
||||||
|
|
||||||
```ts
|
``` ts
|
||||||
{
|
{
|
||||||
name?: string;
|
name?: string;
|
||||||
path: string;
|
path: string;
|
||||||
@@ -278,7 +200,7 @@ niraxは、Misskeyで使用しているオリジナルのフロントエンド
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
> [!WARNING]
|
> **Warning**
|
||||||
> 現状、ルートは定義された順に評価されます。
|
> 現状、ルートは定義された順に評価されます。
|
||||||
> たとえば、`/foo/:id`ルート定義の次に`/foo/bar`ルート定義がされていた場合、後者がマッチすることはありません。
|
> たとえば、`/foo/:id`ルート定義の次に`/foo/bar`ルート定義がされていた場合、後者がマッチすることはありません。
|
||||||
|
|
||||||
@@ -340,7 +262,7 @@ export const Default = {
|
|||||||
parameters: {
|
parameters: {
|
||||||
layout: 'centered',
|
layout: 'centered',
|
||||||
},
|
},
|
||||||
} satisfies StoryObj<typeof MyComponent>;
|
} 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.
|
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.
|
||||||
@@ -360,115 +282,24 @@ export const argTypes = {
|
|||||||
min: 1,
|
min: 1,
|
||||||
max: 4,
|
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.
|
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
|
```ts
|
||||||
import { HttpResponse, http } from 'msw';
|
import { rest } from 'msw';
|
||||||
export const handlers = [
|
export const handlers = [
|
||||||
http.post('/api/notes/timeline', ({ request }) => {
|
rest.post('/api/notes/timeline', (req, res, ctx) => {
|
||||||
return HttpResponse.json([]);
|
return res(
|
||||||
|
ctx.json([]),
|
||||||
|
);
|
||||||
}),
|
}),
|
||||||
];
|
];
|
||||||
```
|
```
|
||||||
|
|
||||||
Don't forget to re-run the `.storybook/generate.js` script after adding, editing, or removing the above files.
|
Don't forget to re-run the `.storybook/generate.js` script after adding, editing, or removing the above files.
|
||||||
|
|
||||||
## Nest
|
|
||||||
|
|
||||||
### Nest Service Circular dependency / Nestでサービスの循環参照でエラーが起きた場合
|
|
||||||
|
|
||||||
#### forwardRef
|
|
||||||
まずは簡単に`forwardRef`を試してみる
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
export class FooService {
|
|
||||||
constructor(
|
|
||||||
@Inject(forwardRef(() => BarService))
|
|
||||||
private barService: BarService
|
|
||||||
) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
#### OnModuleInit
|
|
||||||
できなければ`OnModuleInit`を使う
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
import { Injectable, OnModuleInit } from '@nestjs/common';
|
|
||||||
import { ModuleRef } from '@nestjs/core';
|
|
||||||
import { BarService } from '@/core/BarService';
|
|
||||||
|
|
||||||
@Injectable()
|
|
||||||
export class FooService implements OnModuleInit {
|
|
||||||
private barService: BarService // constructorから移動してくる
|
|
||||||
|
|
||||||
constructor(
|
|
||||||
private moduleRef: ModuleRef,
|
|
||||||
) {
|
|
||||||
}
|
|
||||||
|
|
||||||
async onModuleInit() {
|
|
||||||
this.barService = this.moduleRef.get(BarService.name);
|
|
||||||
}
|
|
||||||
|
|
||||||
public async niceMethod() {
|
|
||||||
return await this.barService.incredibleMethod({ hoge: 'fuga' });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
##### Service Unit Test
|
|
||||||
テストで`onModuleInit`を呼び出す必要がある
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
// import ...
|
|
||||||
|
|
||||||
describe('test', () => {
|
|
||||||
let app: TestingModule;
|
|
||||||
let fooService: FooService; // for test case
|
|
||||||
let barService: BarService; // for test case
|
|
||||||
|
|
||||||
beforeEach(async () => {
|
|
||||||
app = await Test.createTestingModule({
|
|
||||||
imports: ...,
|
|
||||||
providers: [
|
|
||||||
FooService,
|
|
||||||
{ // mockする (mockは必須ではないかもしれない)
|
|
||||||
provide: BarService,
|
|
||||||
useFactory: () => ({
|
|
||||||
incredibleMethod: jest.fn(),
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
{ // Provideにする
|
|
||||||
provide: BarService.name,
|
|
||||||
useExisting: BarService,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
})
|
|
||||||
.useMocker(...
|
|
||||||
.compile();
|
|
||||||
|
|
||||||
fooService = app.get<FooService>(FooService);
|
|
||||||
barService = app.get<BarService>(BarService) as jest.Mocked<BarService>;
|
|
||||||
|
|
||||||
// onModuleInitを実行する
|
|
||||||
await fooService.onModuleInit();
|
|
||||||
});
|
|
||||||
|
|
||||||
test('nice', () => {
|
|
||||||
await fooService.niceMethod();
|
|
||||||
|
|
||||||
expect(barService.incredibleMethod).toHaveBeenCalled();
|
|
||||||
expect(barService.incredibleMethod.mock.lastCall![0])
|
|
||||||
.toEqual({ hoge: 'fuga' });
|
|
||||||
});
|
|
||||||
})
|
|
||||||
```
|
|
||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
|
|
||||||
### Misskeyのドメイン固有の概念は`Mi`をprefixする
|
### Misskeyのドメイン固有の概念は`Mi`をprefixする
|
||||||
@@ -476,11 +307,6 @@ describe('test', () => {
|
|||||||
コード上でMisskeyのドメイン固有の概念には`Mi`をprefixすることで、他のドメインの同様の概念と区別できるほか、名前の衝突を防ぐ。
|
コード上でMisskeyのドメイン固有の概念には`Mi`をprefixすることで、他のドメインの同様の概念と区別できるほか、名前の衝突を防ぐ。
|
||||||
ただし、文脈上Misskeyのものを指すことが明らかであり、名前の衝突の恐れがない場合は、一時的なローカル変数に限って`Mi`を省略してもよい。
|
ただし、文脈上Misskeyのものを指すことが明らかであり、名前の衝突の恐れがない場合は、一時的なローカル変数に限って`Mi`を省略してもよい。
|
||||||
|
|
||||||
### Misskey.jsの型生成
|
|
||||||
```bash
|
|
||||||
pnpm build-misskey-js-with-types
|
|
||||||
```
|
|
||||||
|
|
||||||
### How to resolve conflictions occurred at pnpm-lock.yaml?
|
### How to resolve conflictions occurred at pnpm-lock.yaml?
|
||||||
|
|
||||||
Just execute `pnpm` to fix it.
|
Just execute `pnpm` to fix it.
|
||||||
@@ -583,7 +409,7 @@ https://github.com/misskey-dev/misskey/pull/10082
|
|||||||
|
|
||||||
テキストhogeおよびfugaについて、片方を必須としつつ両方の指定もありうる場合:
|
テキストhogeおよびfugaについて、片方を必須としつつ両方の指定もありうる場合:
|
||||||
|
|
||||||
```ts
|
```
|
||||||
export const paramDef = {
|
export const paramDef = {
|
||||||
type: 'object',
|
type: 'object',
|
||||||
properties: {
|
properties: {
|
||||||
@@ -613,24 +439,3 @@ marginはそのコンポーネントを使う側が設定する
|
|||||||
|
|
||||||
### indexというファイル名を使うな
|
### indexというファイル名を使うな
|
||||||
ESMではディレクトリインポートは廃止されているのと、ディレクトリインポートせずともファイル名が index だと何故か一部のライブラリ?でディレクトリインポートだと見做されてエラーになる
|
ESMではディレクトリインポートは廃止されているのと、ディレクトリインポートせずともファイル名が index だと何故か一部のライブラリ?でディレクトリインポートだと見做されてエラーになる
|
||||||
|
|
||||||
## CSS Recipe
|
|
||||||
|
|
||||||
### Lighten CSS vars
|
|
||||||
|
|
||||||
``` css
|
|
||||||
color: hsl(from var(--MI_THEME-accent) h s calc(l + 10));
|
|
||||||
```
|
|
||||||
|
|
||||||
### Darken CSS vars
|
|
||||||
|
|
||||||
``` css
|
|
||||||
color: hsl(from var(--MI_THEME-accent) h s calc(l - 10));
|
|
||||||
```
|
|
||||||
|
|
||||||
### Add alpha to CSS vars
|
|
||||||
|
|
||||||
``` css
|
|
||||||
color: color(from var(--MI_THEME-accent) srgb r g b / 0.5);
|
|
||||||
```
|
|
||||||
|
|
||||||
|
2
COPYING
2
COPYING
@@ -1,5 +1,5 @@
|
|||||||
Unless otherwise stated this repository is
|
Unless otherwise stated this repository is
|
||||||
Copyright © 2014-2025 syuilo and contributors
|
Copyright © 2014-2023 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.
|
And is distributed under The GNU Affero General Public License Version 3, you should have received a copy of the license file as LICENSE.
|
||||||
|
|
||||||
|
41
Dockerfile
41
Dockerfile
@@ -1,6 +1,6 @@
|
|||||||
# syntax = docker/dockerfile:1.4
|
# syntax = docker/dockerfile:1.4
|
||||||
|
|
||||||
ARG NODE_VERSION=22.11.0-bookworm
|
ARG NODE_VERSION=20.5.1-bullseye
|
||||||
|
|
||||||
# build assets & compile TypeScript
|
# build assets & compile TypeScript
|
||||||
|
|
||||||
@@ -14,28 +14,24 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
|||||||
&& apt-get install -yqq --no-install-recommends \
|
&& apt-get install -yqq --no-install-recommends \
|
||||||
build-essential
|
build-essential
|
||||||
|
|
||||||
|
RUN corepack enable
|
||||||
|
|
||||||
WORKDIR /misskey
|
WORKDIR /misskey
|
||||||
|
|
||||||
COPY --link ["pnpm-lock.yaml", "pnpm-workspace.yaml", "package.json", "./"]
|
COPY --link ["pnpm-lock.yaml", "pnpm-workspace.yaml", "package.json", "./"]
|
||||||
COPY --link ["scripts", "./scripts"]
|
COPY --link ["scripts", "./scripts"]
|
||||||
COPY --link ["packages/backend/package.json", "./packages/backend/"]
|
COPY --link ["packages/backend/package.json", "./packages/backend/"]
|
||||||
COPY --link ["packages/frontend-shared/package.json", "./packages/frontend-shared/"]
|
|
||||||
COPY --link ["packages/frontend/package.json", "./packages/frontend/"]
|
COPY --link ["packages/frontend/package.json", "./packages/frontend/"]
|
||||||
COPY --link ["packages/frontend-embed/package.json", "./packages/frontend-embed/"]
|
|
||||||
COPY --link ["packages/sw/package.json", "./packages/sw/"]
|
COPY --link ["packages/sw/package.json", "./packages/sw/"]
|
||||||
COPY --link ["packages/misskey-js/package.json", "./packages/misskey-js/"]
|
COPY --link ["packages/misskey-js/package.json", "./packages/misskey-js/"]
|
||||||
COPY --link ["packages/misskey-reversi/package.json", "./packages/misskey-reversi/"]
|
|
||||||
COPY --link ["packages/misskey-bubble-game/package.json", "./packages/misskey-bubble-game/"]
|
|
||||||
|
|
||||||
ARG NODE_ENV=production
|
|
||||||
|
|
||||||
RUN node -e "console.log(JSON.parse(require('node:fs').readFileSync('./package.json')).packageManager)" | xargs npm install -g
|
|
||||||
|
|
||||||
RUN --mount=type=cache,target=/root/.local/share/pnpm/store,sharing=locked \
|
RUN --mount=type=cache,target=/root/.local/share/pnpm/store,sharing=locked \
|
||||||
pnpm i --frozen-lockfile --aggregate-output
|
pnpm i --frozen-lockfile --aggregate-output
|
||||||
|
|
||||||
COPY --link . ./
|
COPY --link . ./
|
||||||
|
|
||||||
|
ARG NODE_ENV=production
|
||||||
|
|
||||||
RUN git submodule update --init
|
RUN git submodule update --init
|
||||||
RUN pnpm build
|
RUN pnpm build
|
||||||
RUN rm -rf .git/
|
RUN rm -rf .git/
|
||||||
@@ -48,18 +44,13 @@ RUN apt-get update \
|
|||||||
&& apt-get install -yqq --no-install-recommends \
|
&& apt-get install -yqq --no-install-recommends \
|
||||||
build-essential
|
build-essential
|
||||||
|
|
||||||
|
RUN corepack enable
|
||||||
|
|
||||||
WORKDIR /misskey
|
WORKDIR /misskey
|
||||||
|
|
||||||
COPY --link ["pnpm-lock.yaml", "pnpm-workspace.yaml", "package.json", "./"]
|
COPY --link ["pnpm-lock.yaml", "pnpm-workspace.yaml", "package.json", "./"]
|
||||||
COPY --link ["scripts", "./scripts"]
|
COPY --link ["scripts", "./scripts"]
|
||||||
COPY --link ["packages/backend/package.json", "./packages/backend/"]
|
COPY --link ["packages/backend/package.json", "./packages/backend/"]
|
||||||
COPY --link ["packages/misskey-js/package.json", "./packages/misskey-js/"]
|
|
||||||
COPY --link ["packages/misskey-reversi/package.json", "./packages/misskey-reversi/"]
|
|
||||||
COPY --link ["packages/misskey-bubble-game/package.json", "./packages/misskey-bubble-game/"]
|
|
||||||
|
|
||||||
ARG NODE_ENV=production
|
|
||||||
|
|
||||||
RUN node -e "console.log(JSON.parse(require('node:fs').readFileSync('./package.json')).packageManager)" | xargs npm install -g
|
|
||||||
|
|
||||||
RUN --mount=type=cache,target=/root/.local/share/pnpm/store,sharing=locked \
|
RUN --mount=type=cache,target=/root/.local/share/pnpm/store,sharing=locked \
|
||||||
pnpm i --frozen-lockfile --aggregate-output
|
pnpm i --frozen-lockfile --aggregate-output
|
||||||
@@ -72,35 +63,25 @@ ARG GID="991"
|
|||||||
RUN apt-get update \
|
RUN apt-get update \
|
||||||
&& apt-get install -y --no-install-recommends \
|
&& apt-get install -y --no-install-recommends \
|
||||||
ffmpeg tini curl libjemalloc-dev libjemalloc2 \
|
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 \
|
&& groupadd -g "${GID}" misskey \
|
||||||
&& useradd -l -u "${UID}" -g "${GID}" -m -d /misskey 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 /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 {} \; \
|
&& find / -type d -path /proc -prune -o -type f -perm /g+s -ignore_readdir_race -exec chmod g-s {} \; \
|
||||||
&& apt-get clean \
|
&& apt-get clean \
|
||||||
&& rm -rf /var/lib/apt/lists
|
&& rm -rf /var/lib/apt/lists
|
||||||
|
|
||||||
# add package.json to add pnpm
|
|
||||||
COPY ./package.json ./package.json
|
|
||||||
RUN node -e "console.log(JSON.parse(require('node:fs').readFileSync('./package.json')).packageManager)" | xargs npm install -g
|
|
||||||
|
|
||||||
USER misskey
|
USER misskey
|
||||||
WORKDIR /misskey
|
WORKDIR /misskey
|
||||||
|
|
||||||
COPY --chown=misskey:misskey --from=target-builder /misskey/node_modules ./node_modules
|
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/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=target-builder /misskey/packages/misskey-reversi/node_modules ./packages/misskey-reversi/node_modules
|
|
||||||
COPY --chown=misskey:misskey --from=target-builder /misskey/packages/misskey-bubble-game/node_modules ./packages/misskey-bubble-game/node_modules
|
|
||||||
COPY --chown=misskey:misskey --from=native-builder /misskey/built ./built
|
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/misskey-reversi/built ./packages/misskey-reversi/built
|
|
||||||
COPY --chown=misskey:misskey --from=native-builder /misskey/packages/misskey-bubble-game/built ./packages/misskey-bubble-game/built
|
|
||||||
COPY --chown=misskey:misskey --from=native-builder /misskey/packages/backend/built ./packages/backend/built
|
COPY --chown=misskey:misskey --from=native-builder /misskey/packages/backend/built ./packages/backend/built
|
||||||
COPY --chown=misskey:misskey --from=native-builder /misskey/fluent-emojis /misskey/fluent-emojis
|
COPY --chown=misskey:misskey --from=native-builder /misskey/fluent-emojis /misskey/fluent-emojis
|
||||||
COPY --chown=misskey:misskey . ./
|
COPY --chown=misskey:misskey . ./
|
||||||
|
|
||||||
ENV LD_PRELOAD=/usr/local/lib/libjemalloc.so
|
ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2
|
||||||
ENV NODE_ENV=production
|
ENV NODE_ENV=production
|
||||||
HEALTHCHECK --interval=5s --retries=20 CMD ["/bin/bash", "/misskey/healthcheck.sh"]
|
HEALTHCHECK --interval=5s --retries=20 CMD ["/bin/bash", "/misskey/healthcheck.sh"]
|
||||||
ENTRYPOINT ["/usr/bin/tini", "--"]
|
ENTRYPOINT ["/usr/bin/tini", "--"]
|
||||||
|
49
README.md
49
README.md
@@ -1,18 +1,16 @@
|
|||||||
<div align="center">
|
<div align="center">
|
||||||
<a href="https://misskey-hub.net">
|
<a href="https://misskey-hub.net">
|
||||||
<img src="./assets/title_float.svg" alt="Misskey logo" style="border-radius:50%" width="300"/>
|
<img src="./assets/title_float.svg" alt="Misskey logo" style="border-radius:50%" width="400"/>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
**🌎 **Misskey** is an open source, federated social media platform that's free forever! 🚀**
|
**🌎 **[Misskey](https://misskey-hub.net/)** is an open source, decentralized social media platform that's free forever! 🚀**
|
||||||
|
|
||||||
[Learn more](https://misskey-hub.net/)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<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>
|
<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>
|
<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">
|
<a href="./CONTRIBUTING.md">
|
||||||
@@ -24,14 +22,45 @@
|
|||||||
<a href="https://www.patreon.com/syuilo">
|
<a href="https://www.patreon.com/syuilo">
|
||||||
<img src="https://custom-icon-badges.herokuapp.com/badge/become_a-patron-F96854?logoColor=F96854&style=for-the-badge&logo=patreon&labelColor=363B40" alt="become a patron"/></a>
|
<img src="https://custom-icon-badges.herokuapp.com/badge/become_a-patron-F96854?logoColor=F96854&style=for-the-badge&logo=patreon&labelColor=363B40" alt="become a patron"/></a>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
[](https://codecov.io/gh/misskey-dev/misskey)
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
|
||||||
|
<a href="https://xn--931a.moe/"><img src="https://github.com/misskey-dev/misskey/blob/develop/assets/ai.png?raw=true" align="right" height="320px"/></a>
|
||||||
|
|
||||||
|
## ✨ Features
|
||||||
|
- **ActivityPub support**\
|
||||||
|
Not on Misskey? No problem! Not only can Misskey instances talk to each other, but you can make friends with people on other networks like Mastodon and Pixelfed!
|
||||||
|
- **Reactions**\
|
||||||
|
You can add emoji reactions to any post! No longer are you bound by a like button, show everyone exactly how you feel with the tap of a button.
|
||||||
|
- **Drive**\
|
||||||
|
With Misskey's built in drive, you get cloud storage right in your social media, where you can upload any files, make folders, and find media from posts you've made!
|
||||||
|
- **Rich Web UI**\
|
||||||
|
Misskey has a rich and easy to use Web UI!
|
||||||
|
It is highly customizable, from changing the layout and adding widgets to making custom themes.
|
||||||
|
Furthermore, plugins can be created using AiScript, an original programming language.
|
||||||
|
- And much more...
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div style="clear: both;"></div>
|
||||||
|
|
||||||
|
## Documentation
|
||||||
|
|
||||||
|
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>
|
</div>
|
||||||
|
|
||||||
## Thanks
|
## Thanks
|
||||||
|
|
||||||
<a href="https://sentry.io/"><img src="https://github.com/misskey-dev/misskey/assets/4439005/98576556-222f-467a-94be-e98dbda1d852" height="30" alt="Sentry" /></a>
|
|
||||||
|
|
||||||
Thanks to [Sentry](https://sentry.io/) for providing the error tracking platform that helps us catch unexpected errors.
|
|
||||||
|
|
||||||
<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>
|
<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.
|
Thanks to [Chromatic](https://www.chromatic.com/) for providing the visual testing platform that helps us review UI changes and catch visual regressions.
|
||||||
|
@@ -6,7 +6,6 @@ Also, the later tasks are more indefinite and are subject to change as developme
|
|||||||
This is the phase we are at now. We need to make a high-maintenance environment that can withstand future development.
|
This is the phase we are at now. We need to make a high-maintenance environment that can withstand future development.
|
||||||
|
|
||||||
- ~~Make the number of type errors zero (backend)~~ → Done ✔️
|
- ~~Make the number of type errors zero (backend)~~ → Done ✔️
|
||||||
- Make the number of type errors zero (frontend)
|
|
||||||
- Improve CI
|
- Improve CI
|
||||||
- ~~Fix tests~~ → Done ✔️
|
- ~~Fix tests~~ → Done ✔️
|
||||||
- Fix random test failures - https://github.com/misskey-dev/misskey/issues/7985 and https://github.com/misskey-dev/misskey/issues/7986
|
- Fix random test failures - https://github.com/misskey-dev/misskey/issues/7985 and https://github.com/misskey-dev/misskey/issues/7986
|
||||||
|
15
SECURITY.md
15
SECURITY.md
@@ -1,20 +1,9 @@
|
|||||||
# Reporting Security Issues
|
# 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
|
This will allow us to assess the risk, and make a fix available before we add a
|
||||||
bug report to the GitHub repository.
|
bug report to the GitHub repository.
|
||||||
|
|
||||||
Thanks for helping make Misskey safe for everyone.
|
Thanks for helping make Misskey safe for everyone.
|
||||||
|
|
||||||
> [!note]
|
|
||||||
> CNA [requires](https://www.cve.org/ResourcesSupport/AllResources/CNARules#section_5-2_Description) that CVEs include a description in English for inclusion in the CVE Catalog.
|
|
||||||
>
|
|
||||||
> When creating a security advisory, all content must be written in English (it is acceptable to include a non-English description along with the English one).
|
|
||||||
|
|
||||||
## When create a patch
|
|
||||||
|
|
||||||
If you can also create a patch to fix the vulnerability, please create a PR on the private fork.
|
|
||||||
|
|
||||||
> [!note]
|
|
||||||
> There is a GitHub bug that prevents merging if a PR not following the develop branch of upstream, so please keep follow the develop branch.
|
|
||||||
|
@@ -116,22 +116,6 @@ redis:
|
|||||||
# #prefix: example-prefix
|
# #prefix: example-prefix
|
||||||
# #db: 1
|
# #db: 1
|
||||||
|
|
||||||
#redisForTimelines:
|
|
||||||
# host: redis
|
|
||||||
# port: 6379
|
|
||||||
# #family: 0 # 0=Both, 4=IPv4, 6=IPv6
|
|
||||||
# #pass: example-pass
|
|
||||||
# #prefix: example-prefix
|
|
||||||
# #db: 1
|
|
||||||
|
|
||||||
#redisForReactions:
|
|
||||||
# host: redis
|
|
||||||
# port: 6379
|
|
||||||
# #family: 0 # 0=Both, 4=IPv4, 6=IPv6
|
|
||||||
# #pass: example-pass
|
|
||||||
# #prefix: example-prefix
|
|
||||||
# #db: 1
|
|
||||||
|
|
||||||
# ┌───────────────────────────┐
|
# ┌───────────────────────────┐
|
||||||
#───┘ MeiliSearch configuration └─────────────────────────────
|
#───┘ MeiliSearch configuration └─────────────────────────────
|
||||||
|
|
||||||
@@ -160,22 +144,6 @@ redis:
|
|||||||
# ID SETTINGS AFTER THAT!
|
# ID SETTINGS AFTER THAT!
|
||||||
|
|
||||||
id: "aidx"
|
id: "aidx"
|
||||||
|
|
||||||
# ┌────────────────┐
|
|
||||||
#───┘ Error tracking └──────────────────────────────────────────
|
|
||||||
|
|
||||||
# Sentry is available for error tracking.
|
|
||||||
# See the Sentry documentation for more details on options.
|
|
||||||
|
|
||||||
#sentryForBackend:
|
|
||||||
# enableNodeProfiling: true
|
|
||||||
# options:
|
|
||||||
# dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0'
|
|
||||||
|
|
||||||
#sentryForFrontend:
|
|
||||||
# options:
|
|
||||||
# dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0'
|
|
||||||
|
|
||||||
# ┌─────────────────────┐
|
# ┌─────────────────────┐
|
||||||
#───┘ Other configuration └─────────────────────────────────────
|
#───┘ Other configuration └─────────────────────────────────────
|
||||||
|
|
||||||
@@ -191,7 +159,7 @@ id: "aidx"
|
|||||||
|
|
||||||
# Job rate limiter
|
# Job rate limiter
|
||||||
# deliverJobPerSec: 128
|
# deliverJobPerSec: 128
|
||||||
# inboxJobPerSec: 32
|
# inboxJobPerSec: 16
|
||||||
|
|
||||||
# Job attempts
|
# Job attempts
|
||||||
# deliverJobMaxAttempts: 12
|
# deliverJobMaxAttempts: 12
|
||||||
@@ -219,6 +187,10 @@ id: "aidx"
|
|||||||
# Sign to ActivityPub GET request (default: true)
|
# Sign to ActivityPub GET request (default: true)
|
||||||
signToActivityPubGet: true
|
signToActivityPubGet: true
|
||||||
|
|
||||||
|
# Limit of notes to fetch from outbox with remote user first fetched (default: 5)
|
||||||
|
# https://github.com/misskey-dev/misskey/pull/11130
|
||||||
|
outboxNotesFetchLimit: 5
|
||||||
|
|
||||||
#allowedPrivateNetworks: [
|
#allowedPrivateNetworks: [
|
||||||
# '127.0.0.1/32'
|
# '127.0.0.1/32'
|
||||||
#]
|
#]
|
||||||
|
@@ -27,7 +27,7 @@ spec:
|
|||||||
ports:
|
ports:
|
||||||
- containerPort: 3000
|
- containerPort: 3000
|
||||||
- name: postgres
|
- name: postgres
|
||||||
image: postgres:15-alpine
|
image: postgres:14-alpine
|
||||||
env:
|
env:
|
||||||
- name: POSTGRES_USER
|
- name: POSTGRES_USER
|
||||||
value: "example-misskey-user"
|
value: "example-misskey-user"
|
||||||
@@ -38,7 +38,7 @@ spec:
|
|||||||
ports:
|
ports:
|
||||||
- containerPort: 5432
|
- containerPort: 5432
|
||||||
- name: redis
|
- name: redis
|
||||||
image: redis:7-alpine
|
image: redis:alpine
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 6379
|
- containerPort: 6379
|
||||||
volumes:
|
volumes:
|
||||||
|
@@ -1,40 +0,0 @@
|
|||||||
# この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
|
|
||||||
|
|
@@ -1,8 +1,3 @@
|
|||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: syuilo and misskey-project
|
|
||||||
* SPDX-License-Identifier: AGPL-3.0-only
|
|
||||||
*/
|
|
||||||
|
|
||||||
describe('Before setup instance', () => {
|
describe('Before setup instance', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
cy.resetState();
|
cy.resetState();
|
||||||
@@ -23,7 +18,6 @@ describe('Before setup instance', () => {
|
|||||||
|
|
||||||
cy.intercept('POST', '/api/admin/accounts/create').as('signup');
|
cy.intercept('POST', '/api/admin/accounts/create').as('signup');
|
||||||
|
|
||||||
cy.get('[data-cy-admin-initial-password] input').type('example_password_please_change_this_or_you_will_get_hacked');
|
|
||||||
cy.get('[data-cy-admin-username] input').type('admin');
|
cy.get('[data-cy-admin-username] input').type('admin');
|
||||||
cy.get('[data-cy-admin-password] input').type('admin1234');
|
cy.get('[data-cy-admin-password] input').type('admin1234');
|
||||||
cy.get('[data-cy-admin-ok]').click();
|
cy.get('[data-cy-admin-ok]').click();
|
||||||
@@ -120,16 +114,11 @@ describe('After user signup', () => {
|
|||||||
it('signin', () => {
|
it('signin', () => {
|
||||||
cy.visitHome();
|
cy.visitHome();
|
||||||
|
|
||||||
cy.intercept('POST', '/api/signin-flow').as('signin');
|
cy.intercept('POST', '/api/signin').as('signin');
|
||||||
|
|
||||||
cy.get('[data-cy-signin]').click();
|
cy.get('[data-cy-signin]').click();
|
||||||
|
cy.get('[data-cy-signin-username] input').type('alice');
|
||||||
cy.get('[data-cy-signin-page-input]').should('be.visible', { timeout: 1000 });
|
// Enterキーでサインインできるかの確認も兼ねる
|
||||||
// Enterキーで続行できるかの確認も兼ねる
|
|
||||||
cy.get('[data-cy-signin-username] input').type('alice{enter}');
|
|
||||||
|
|
||||||
cy.get('[data-cy-signin-page-password]').should('be.visible', { timeout: 10000 });
|
|
||||||
// Enterキーで続行できるかの確認も兼ねる
|
|
||||||
cy.get('[data-cy-signin-password] input').type('alice1234{enter}');
|
cy.get('[data-cy-signin-password] input').type('alice1234{enter}');
|
||||||
|
|
||||||
cy.wait('@signin');
|
cy.wait('@signin');
|
||||||
@@ -144,9 +133,8 @@ describe('After user signup', () => {
|
|||||||
cy.visitHome();
|
cy.visitHome();
|
||||||
|
|
||||||
cy.get('[data-cy-signin]').click();
|
cy.get('[data-cy-signin]').click();
|
||||||
|
cy.get('[data-cy-signin-username] input').type('alice');
|
||||||
cy.get('[data-cy-signin-page-input]').should('be.visible', { timeout: 1000 });
|
cy.get('[data-cy-signin-password] input').type('alice1234{enter}');
|
||||||
cy.get('[data-cy-signin-username] input').type('alice{enter}');
|
|
||||||
|
|
||||||
// TODO: cypressにブラウザの言語指定できる機能が実装され次第英語のみテストするようにする
|
// TODO: cypressにブラウザの言語指定できる機能が実装され次第英語のみテストするようにする
|
||||||
cy.contains(/アカウントが凍結されています|This account has been suspended due to/gi);
|
cy.contains(/アカウントが凍結されています|This account has been suspended due to/gi);
|
||||||
@@ -173,13 +161,11 @@ describe('After user signed in', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('successfully loads', () => {
|
it('successfully loads', () => {
|
||||||
// 表示に時間がかかるのでデフォルト秒数だとタイムアウトする
|
cy.get('[data-cy-user-setup-continue]').should('be.visible');
|
||||||
cy.get('[data-cy-user-setup-continue]', { timeout: 30000 }).should('be.visible');
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('account setup wizard', () => {
|
it('account setup wizard', () => {
|
||||||
// 表示に時間がかかるのでデフォルト秒数だとタイムアウトする
|
cy.get('[data-cy-user-setup-continue]').click();
|
||||||
cy.get('[data-cy-user-setup-continue]', { timeout: 30000 }).click();
|
|
||||||
|
|
||||||
cy.get('[data-cy-user-setup-user-name] input').type('ありす');
|
cy.get('[data-cy-user-setup-user-name] input').type('ありす');
|
||||||
cy.get('[data-cy-user-setup-user-description] textarea').type('ほげ');
|
cy.get('[data-cy-user-setup-user-description] textarea').type('ほげ');
|
||||||
@@ -216,8 +202,7 @@ describe('After user setup', () => {
|
|||||||
cy.login('alice', 'alice1234');
|
cy.login('alice', 'alice1234');
|
||||||
|
|
||||||
// アカウント初期設定ウィザード
|
// アカウント初期設定ウィザード
|
||||||
// 表示に時間がかかるのでデフォルト秒数だとタイムアウトする
|
cy.get('[data-cy-user-setup] [data-cy-modal-window-close]').click();
|
||||||
cy.get('[data-cy-user-setup] [data-cy-modal-window-close]', { timeout: 30000 }).click();
|
|
||||||
cy.get('[data-cy-modal-dialog-ok]').click();
|
cy.get('[data-cy-modal-dialog-ok]').click();
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -233,7 +218,7 @@ describe('After user setup', () => {
|
|||||||
cy.get('[data-cy-post-form-text]').type('Hello, Misskey!');
|
cy.get('[data-cy-post-form-text]').type('Hello, Misskey!');
|
||||||
cy.get('[data-cy-open-post-form-submit]').click();
|
cy.get('[data-cy-open-post-form-submit]').click();
|
||||||
|
|
||||||
cy.contains('Hello, Misskey!', { timeout: 15000 });
|
cy.contains('Hello, Misskey!');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('open note form with hotkey', () => {
|
it('open note form with hotkey', () => {
|
@@ -1,35 +0,0 @@
|
|||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: syuilo and misskey-project
|
|
||||||
* SPDX-License-Identifier: AGPL-3.0-only
|
|
||||||
*/
|
|
||||||
|
|
||||||
describe('Router transition', () => {
|
|
||||||
describe('Redirect', () => {
|
|
||||||
// サーバの初期化。ルートのテストに関しては各describeごとに1度だけ実行で十分だと思う(使いまわした方が早い)
|
|
||||||
before(() => {
|
|
||||||
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]', { timeout: 30000 }).click();
|
|
||||||
cy.wait(500);
|
|
||||||
cy.get('[data-cy-modal-dialog-ok]').click();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('redirect to user profile', () => {
|
|
||||||
// テストのためだけに用意されたリダイレクト用ルートに飛ぶ
|
|
||||||
cy.visit('/redirect-test');
|
|
||||||
|
|
||||||
// プロフィールページのURLであることを確認する
|
|
||||||
cy.url().should('include', '/@alice')
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
@@ -1,9 +1,3 @@
|
|||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: syuilo and misskey-project
|
|
||||||
* SPDX-License-Identifier: AGPL-3.0-only
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* flaky
|
|
||||||
describe('After user signed in', () => {
|
describe('After user signed in', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
cy.resetState();
|
cy.resetState();
|
||||||
@@ -73,4 +67,3 @@ describe('After user signed in', () => {
|
|||||||
buildWidgetTest('aiscript');
|
buildWidgetTest('aiscript');
|
||||||
buildWidgetTest('aichan');
|
buildWidgetTest('aichan');
|
||||||
});
|
});
|
||||||
*/
|
|
@@ -30,13 +30,9 @@ Cypress.Commands.add('visitHome', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
Cypress.Commands.add('resetState', () => {
|
Cypress.Commands.add('resetState', () => {
|
||||||
// iframe.contentWindow.indexedDB.deleteDatabase() がchromeのバグで使用できないため、indexedDBを無効化している。
|
cy.window(win => {
|
||||||
// see https://github.com/misskey-dev/misskey/issues/13605#issuecomment-2053652123
|
|
||||||
/*
|
|
||||||
cy.window().then(win => {
|
|
||||||
win.indexedDB.deleteDatabase('keyval-store');
|
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.get('@reset').its('status').should('equal', 204);
|
||||||
cy.reload(true);
|
cy.reload(true);
|
||||||
@@ -48,19 +44,16 @@ Cypress.Commands.add('registerUser', (username, password, isAdmin = false) => {
|
|||||||
cy.request('POST', route, {
|
cy.request('POST', route, {
|
||||||
username: username,
|
username: username,
|
||||||
password: password,
|
password: password,
|
||||||
...(isAdmin ? { setupPassword: 'example_password_please_change_this_or_you_will_get_hacked' } : {}),
|
|
||||||
}).its('body').as(username);
|
}).its('body').as(username);
|
||||||
});
|
});
|
||||||
|
|
||||||
Cypress.Commands.add('login', (username, password) => {
|
Cypress.Commands.add('login', (username, password) => {
|
||||||
cy.visitHome();
|
cy.visitHome();
|
||||||
|
|
||||||
cy.intercept('POST', '/api/signin-flow').as('signin');
|
cy.intercept('POST', '/api/signin').as('signin');
|
||||||
|
|
||||||
cy.get('[data-cy-signin]').click();
|
cy.get('[data-cy-signin]').click();
|
||||||
cy.get('[data-cy-signin-page-input]').should('be.visible', { timeout: 1000 });
|
cy.get('[data-cy-signin-username] input').type(username);
|
||||||
cy.get('[data-cy-signin-username] input').type(`${username}{enter}`);
|
|
||||||
cy.get('[data-cy-signin-page-password]').should('be.visible', { timeout: 10000 });
|
|
||||||
cy.get('[data-cy-signin-password] input').type(`${password}{enter}`);
|
cy.get('[data-cy-signin-password] input').type(`${password}{enter}`);
|
||||||
|
|
||||||
cy.wait('@signin').as('signedIn');
|
cy.wait('@signin').as('signedIn');
|
@@ -1,19 +0,0 @@
|
|||||||
declare global {
|
|
||||||
namespace Cypress {
|
|
||||||
interface Chainable {
|
|
||||||
login(username: string, password: string): Chainable<void>;
|
|
||||||
|
|
||||||
registerUser(
|
|
||||||
username: string,
|
|
||||||
password: string,
|
|
||||||
isAdmin?: boolean
|
|
||||||
): Chainable<void>;
|
|
||||||
|
|
||||||
resetState(): Chainable<void>;
|
|
||||||
|
|
||||||
visitHome(): Chainable<void>;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export {}
|
|
@@ -1,8 +0,0 @@
|
|||||||
{
|
|
||||||
"compilerOptions": {
|
|
||||||
"lib": ["dom", "es5"],
|
|
||||||
"target": "es5",
|
|
||||||
"types": ["cypress", "node"]
|
|
||||||
},
|
|
||||||
"include": ["./**/*.ts"]
|
|
||||||
}
|
|
@@ -1,3 +1,5 @@
|
|||||||
|
version: "3"
|
||||||
|
|
||||||
services:
|
services:
|
||||||
web:
|
web:
|
||||||
build: .
|
build: .
|
||||||
@@ -5,7 +7,6 @@ services:
|
|||||||
links:
|
links:
|
||||||
- db
|
- db
|
||||||
- redis
|
- redis
|
||||||
# - mcaptcha
|
|
||||||
# - meilisearch
|
# - meilisearch
|
||||||
depends_on:
|
depends_on:
|
||||||
db:
|
db:
|
||||||
@@ -17,8 +18,6 @@ services:
|
|||||||
networks:
|
networks:
|
||||||
- internal_network
|
- internal_network
|
||||||
- external_network
|
- external_network
|
||||||
# env_file:
|
|
||||||
# - .config/docker.env
|
|
||||||
volumes:
|
volumes:
|
||||||
- ./files:/misskey/files
|
- ./files:/misskey/files
|
||||||
- ./.config:/misskey/.config:ro
|
- ./.config:/misskey/.config:ro
|
||||||
@@ -49,36 +48,6 @@ services:
|
|||||||
interval: 5s
|
interval: 5s
|
||||||
retries: 20
|
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:
|
# meilisearch:
|
||||||
# restart: always
|
# restart: always
|
||||||
# image: getmeili/meilisearch:v1.3.4
|
# image: getmeili/meilisearch:v1.3.4
|
@@ -1,7 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# SPDX-FileCopyrightText: syuilo and misskey-project
|
# SPDX-FileCopyrightText: syuilo and other misskey contributors
|
||||||
# SPDX-License-Identifier: AGPL-3.0-only
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
PORT=$(grep '^port:' /misskey/.config/default.yml | awk 'NR==1{print $2; exit}')
|
PORT=$(grep '^port:' /misskey/.config/default.yml | awk 'NR==1{print $2; exit}')
|
||||||
curl -Sfso/dev/null "http://localhost:${PORT}/healthz"
|
curl -s -S -o /dev/null "http://localhost:${PORT}"
|
||||||
|
@@ -1 +0,0 @@
|
|||||||
使われなくなったけど消すのは勿体ない(将来使えるかもしれない)コードを入れておくとこ
|
|
@@ -120,10 +120,10 @@ sensitive: "محتوى حساس"
|
|||||||
add: "إضافة"
|
add: "إضافة"
|
||||||
reaction: "التفاعلات"
|
reaction: "التفاعلات"
|
||||||
reactions: "التفاعلات"
|
reactions: "التفاعلات"
|
||||||
|
reactionSetting: "التفاعلات المراد عرضها في منتقي التفاعلات."
|
||||||
reactionSettingDescription2: "اسحب لترتيب ، انقر للحذف ، استخدم \"+\" للإضافة."
|
reactionSettingDescription2: "اسحب لترتيب ، انقر للحذف ، استخدم \"+\" للإضافة."
|
||||||
rememberNoteVisibility: "تذكر إعدادت مدى رؤية الملاحظات"
|
rememberNoteVisibility: "تذكر إعدادت مدى رؤية الملاحظات"
|
||||||
attachCancel: "أزل المرفق"
|
attachCancel: "أزل المرفق"
|
||||||
deleteFile: "حُذف الملف"
|
|
||||||
markAsSensitive: "علّمه كمحتوى حساس"
|
markAsSensitive: "علّمه كمحتوى حساس"
|
||||||
unmarkAsSensitive: "ألغ تعيينه كمحتوى حساس"
|
unmarkAsSensitive: "ألغ تعيينه كمحتوى حساس"
|
||||||
enterFileName: "ادخل اسم الملف"
|
enterFileName: "ادخل اسم الملف"
|
||||||
@@ -343,10 +343,12 @@ enableLocalTimeline: "تفعيل الخيط المحلي"
|
|||||||
enableGlobalTimeline: "تفعيل الخيط الزمني الشامل"
|
enableGlobalTimeline: "تفعيل الخيط الزمني الشامل"
|
||||||
disablingTimelinesInfo: "سيتمكن المديرون والمشرفون من الوصول إلى كل الخيوط الزمنية حتى وإن لم تفعّل."
|
disablingTimelinesInfo: "سيتمكن المديرون والمشرفون من الوصول إلى كل الخيوط الزمنية حتى وإن لم تفعّل."
|
||||||
registration: "إنشاء حساب"
|
registration: "إنشاء حساب"
|
||||||
|
enableRegistration: "تفعيل إنشاء الحسابات الجديدة"
|
||||||
invite: "دعوة"
|
invite: "دعوة"
|
||||||
driveCapacityPerLocalAccount: "حصة التخزين لكل مستخدم محلي"
|
driveCapacityPerLocalAccount: "حصة التخزين لكل مستخدم محلي"
|
||||||
driveCapacityPerRemoteAccount: "حصة التخزين لكل مستخدم بعيد"
|
driveCapacityPerRemoteAccount: "حصة التخزين لكل مستخدم بعيد"
|
||||||
inMb: "بالميغابايت"
|
inMb: "بالميغابايت"
|
||||||
|
iconUrl: "رابط الأيقونة"
|
||||||
bannerUrl: "رابط صورة اللافتة"
|
bannerUrl: "رابط صورة اللافتة"
|
||||||
backgroundImageUrl: "رابط صورة الخلفية"
|
backgroundImageUrl: "رابط صورة الخلفية"
|
||||||
basicInfo: "المعلومات الأساسية "
|
basicInfo: "المعلومات الأساسية "
|
||||||
@@ -360,8 +362,6 @@ hcaptcha: "hCaptcha"
|
|||||||
enableHcaptcha: "فعّل hCaptcha"
|
enableHcaptcha: "فعّل hCaptcha"
|
||||||
hcaptchaSiteKey: "مفتاح الموقع"
|
hcaptchaSiteKey: "مفتاح الموقع"
|
||||||
hcaptchaSecretKey: "المفتاح السري"
|
hcaptchaSecretKey: "المفتاح السري"
|
||||||
mcaptchaSiteKey: "مفتاح الموقع"
|
|
||||||
mcaptchaSecretKey: "المفتاح السري"
|
|
||||||
recaptcha: "reCAPTCHA"
|
recaptcha: "reCAPTCHA"
|
||||||
enableRecaptcha: "تمكين reCAPTCHA"
|
enableRecaptcha: "تمكين reCAPTCHA"
|
||||||
recaptchaSiteKey: "مفتاح الموقع"
|
recaptchaSiteKey: "مفتاح الموقع"
|
||||||
@@ -419,6 +419,7 @@ share: "شارِك"
|
|||||||
notFound: "غير موجود"
|
notFound: "غير موجود"
|
||||||
notFoundDescription: "تعذر العثور على صفحة يقود إليها هذا الرابط."
|
notFoundDescription: "تعذر العثور على صفحة يقود إليها هذا الرابط."
|
||||||
uploadFolder: "المجلد الافتراضي للرفع"
|
uploadFolder: "المجلد الافتراضي للرفع"
|
||||||
|
cacheClear: "مسح ذاكرة التخزين المؤقت"
|
||||||
markAsReadAllNotifications: "وضع جميع الإشعارات كأنها مقروءة"
|
markAsReadAllNotifications: "وضع جميع الإشعارات كأنها مقروءة"
|
||||||
markAsReadAllUnreadNotes: "علّم جميع الملاحظات كمقروءة"
|
markAsReadAllUnreadNotes: "علّم جميع الملاحظات كمقروءة"
|
||||||
markAsReadAllTalkMessages: "علّم جميع الرسائل كمقروءة"
|
markAsReadAllTalkMessages: "علّم جميع الرسائل كمقروءة"
|
||||||
@@ -625,7 +626,10 @@ abuseReported: "أُرسل البلاغ، شكرًا لك"
|
|||||||
reporter: "المُبلّغ"
|
reporter: "المُبلّغ"
|
||||||
reporteeOrigin: "أصل البلاغ"
|
reporteeOrigin: "أصل البلاغ"
|
||||||
reporterOrigin: "أصل المُبلّغ"
|
reporterOrigin: "أصل المُبلّغ"
|
||||||
|
forwardReport: "وجّه البلاغ إلى المثيل البعيد"
|
||||||
|
forwardReportIsAnonymous: "في المثيل البعيد سيظهر المبلّغ كحساب مجهول."
|
||||||
send: "أرسل"
|
send: "أرسل"
|
||||||
|
abuseMarkAsResolved: "علّم البلاغ كمحلول"
|
||||||
openInNewTab: "افتح في لسان جديد"
|
openInNewTab: "افتح في لسان جديد"
|
||||||
defaultNavigationBehaviour: "سلوك الملاحة الافتراضي"
|
defaultNavigationBehaviour: "سلوك الملاحة الافتراضي"
|
||||||
editTheseSettingsMayBreakAccount: "تعديل هذه الإعدادات قد يسبب عطبًا لحسابك"
|
editTheseSettingsMayBreakAccount: "تعديل هذه الإعدادات قد يسبب عطبًا لحسابك"
|
||||||
@@ -815,6 +819,8 @@ makeReactionsPublicDescription: "هذا سيجعل قائمة تفاعلاتك
|
|||||||
classic: "تقليدي"
|
classic: "تقليدي"
|
||||||
muteThread: "اكتم النقاش"
|
muteThread: "اكتم النقاش"
|
||||||
unmuteThread: "ارفع الكتم عن النقاش"
|
unmuteThread: "ارفع الكتم عن النقاش"
|
||||||
|
ffVisibility: "مرئية المتابِعين/المتابَعين"
|
||||||
|
ffVisibilityDescription: "يسمح لك بتحديد من يمكنهم رؤية متابِعيك ومتابَعيك."
|
||||||
continueThread: "اعرض بقية النقاش"
|
continueThread: "اعرض بقية النقاش"
|
||||||
deleteAccountConfirm: "سيحذف حسابك نهائيًا، أتريد المتابعة؟"
|
deleteAccountConfirm: "سيحذف حسابك نهائيًا، أتريد المتابعة؟"
|
||||||
incorrectPassword: "كلمة السر خاطئة."
|
incorrectPassword: "كلمة السر خاطئة."
|
||||||
@@ -943,12 +949,9 @@ rolesAssignedToMe: "الأدوار المسندة إلي"
|
|||||||
resetPasswordConfirm: "هل تريد إعادة تعيين كلمة السر؟"
|
resetPasswordConfirm: "هل تريد إعادة تعيين كلمة السر؟"
|
||||||
license: "الرخصة"
|
license: "الرخصة"
|
||||||
unfavoriteConfirm: "أتريد إزالتها من المفضلة؟"
|
unfavoriteConfirm: "أتريد إزالتها من المفضلة؟"
|
||||||
reactionsDisplaySize: "حجم التفاعلات"
|
|
||||||
limitWidthOfReaction: "تصغير حجم التفاعلات"
|
|
||||||
noteIdOrUrl: "معرف الملاحظة أو رابطها"
|
noteIdOrUrl: "معرف الملاحظة أو رابطها"
|
||||||
video: "فيديو"
|
video: "فيديو"
|
||||||
videos: "فيديوهات"
|
videos: "فيديوهات"
|
||||||
dataSaver: "موفر البيانات"
|
|
||||||
accountMigration: "ترحيل الحساب"
|
accountMigration: "ترحيل الحساب"
|
||||||
accountMoved: "نقل هذا المستخدم حسابه:"
|
accountMoved: "نقل هذا المستخدم حسابه:"
|
||||||
accountMovedShort: "رُحل هذا الحساب."
|
accountMovedShort: "رُحل هذا الحساب."
|
||||||
@@ -956,7 +959,6 @@ operationForbidden: "عملية ممنوعة"
|
|||||||
forceShowAds: "أظهر الإعلانات التجارية دائما"
|
forceShowAds: "أظهر الإعلانات التجارية دائما"
|
||||||
reactionsList: "التفاعلات"
|
reactionsList: "التفاعلات"
|
||||||
renotesList: "إعادات النشر"
|
renotesList: "إعادات النشر"
|
||||||
notificationDisplay: "إشعارات"
|
|
||||||
leftTop: "أعلى اليسار"
|
leftTop: "أعلى اليسار"
|
||||||
rightTop: "أعلى اليمين"
|
rightTop: "أعلى اليمين"
|
||||||
leftBottom: "أسفل اليسار"
|
leftBottom: "أسفل اليسار"
|
||||||
@@ -979,7 +981,6 @@ thisChannelArchived: "أُرشفت هذه القناة."
|
|||||||
displayOfNote: "عرض الملاحظة"
|
displayOfNote: "عرض الملاحظة"
|
||||||
initialAccountSetting: "إعداد الملف الشخصي"
|
initialAccountSetting: "إعداد الملف الشخصي"
|
||||||
youFollowing: "متابَع"
|
youFollowing: "متابَع"
|
||||||
preventAiLearning: "منع استخدام البيانات في تعليم الآلة"
|
|
||||||
options: "خيارات"
|
options: "خيارات"
|
||||||
specifyUser: "مستخدم محدد"
|
specifyUser: "مستخدم محدد"
|
||||||
failedToPreviewUrl: "تتعذر المعاينة"
|
failedToPreviewUrl: "تتعذر المعاينة"
|
||||||
@@ -993,27 +994,10 @@ later: "لاحقاً"
|
|||||||
goToMisskey: "لميسكي"
|
goToMisskey: "لميسكي"
|
||||||
additionalEmojiDictionary: "قواميس إيموجي إضافية"
|
additionalEmojiDictionary: "قواميس إيموجي إضافية"
|
||||||
installed: "مُثبت"
|
installed: "مُثبت"
|
||||||
enableServerMachineStats: "نشر إحصائيات عتاد الخادم"
|
|
||||||
turnOffToImprovePerformance: "تفعيله قد يزيد الأداء."
|
|
||||||
createInviteCode: "ولِّد دعوة"
|
|
||||||
inviteCodeCreated: "ولِّدت دعوة"
|
|
||||||
inviteLimitExceeded: "وصلتَ لحد عدد الدعوات المسموح لك توليدها."
|
|
||||||
createLimitRemaining: "حد عدد الدعوات: {limit} دعوة"
|
|
||||||
expirationDate: "تاريخ انتهاء الصلاحية"
|
expirationDate: "تاريخ انتهاء الصلاحية"
|
||||||
noExpirationDate: "لا نهاية لصلاحيتها"
|
|
||||||
inviteCodeUsedAt: "اُستخدم رمز الدعوة في"
|
|
||||||
registeredUserUsingInviteCode: "اِستخدم رمز الدعوة"
|
|
||||||
unused: "غير مستعمَل"
|
unused: "غير مستعمَل"
|
||||||
expired: "منتهية صلاحيته"
|
expired: "منتهية صلاحيته"
|
||||||
icon: "الصورة الرمزية"
|
icon: "الصورة الرمزية"
|
||||||
replies: "رد"
|
|
||||||
renotes: "أعد النشر"
|
|
||||||
sourceCode: "الشفرة المصدرية"
|
|
||||||
flip: "اقلب"
|
|
||||||
lastNDays: "آخر {n} أيام"
|
|
||||||
surrender: "ألغِ"
|
|
||||||
_delivery:
|
|
||||||
stop: "مُعلّق"
|
|
||||||
_initialAccountSetting:
|
_initialAccountSetting:
|
||||||
accountCreated: "نجح إنشاء حسابك!"
|
accountCreated: "نجح إنشاء حسابك!"
|
||||||
letsStartAccountSetup: "إذا كنت جديدًا لنعدّ حسابك الشخصي."
|
letsStartAccountSetup: "إذا كنت جديدًا لنعدّ حسابك الشخصي."
|
||||||
@@ -1155,7 +1139,6 @@ _plugin:
|
|||||||
install: "ثبّت إضافات"
|
install: "ثبّت إضافات"
|
||||||
installWarn: "رجاءً لا تثبت إضافات غير موثوقة."
|
installWarn: "رجاءً لا تثبت إضافات غير موثوقة."
|
||||||
manage: "إدارة الإضافات"
|
manage: "إدارة الإضافات"
|
||||||
viewSource: "اظهر المصدر"
|
|
||||||
_preferencesBackups:
|
_preferencesBackups:
|
||||||
createdAt: "تم إنشاؤه: {date} {time}"
|
createdAt: "تم إنشاؤه: {date} {time}"
|
||||||
updatedAt: "آخر تحديث: {date} {time}"
|
updatedAt: "آخر تحديث: {date} {time}"
|
||||||
@@ -1199,6 +1182,11 @@ _wordMute:
|
|||||||
muteWords: "الكلمات المحظورة"
|
muteWords: "الكلمات المحظورة"
|
||||||
muteWordsDescription: "افصل بينهم بمسافة لاستخدام معامل \"و\" أو بسطر لاستخدام معامل \"أو\"."
|
muteWordsDescription: "افصل بينهم بمسافة لاستخدام معامل \"و\" أو بسطر لاستخدام معامل \"أو\"."
|
||||||
muteWordsDescription2: "احصر الكلمات المفتاحية بين بين شرطتين مائلتين لاستخدامها كتعابير نمطية"
|
muteWordsDescription2: "احصر الكلمات المفتاحية بين بين شرطتين مائلتين لاستخدامها كتعابير نمطية"
|
||||||
|
softDescription: "اخف الملاحظات التي تستوف الشروط من الخيط الزمني."
|
||||||
|
hardDescription: "اخف الملاحظات التي تستوف الشروط من الخيط الزمني.بالإضافة إلى أن هذه الملاحظات ستبقى مخفية حتى وإن تغيرت الشروط."
|
||||||
|
soft: "لينة"
|
||||||
|
hard: "قاسية"
|
||||||
|
mutedNotes: "الملاحظات المكتومة"
|
||||||
_instanceMute:
|
_instanceMute:
|
||||||
instanceMuteDescription: "هذه سيحجب كل ملاحظات الخوادم المحجوبة ومشاركاتها والردود على تلك الملاحظات حتى وإن كانت من خادم غير محجوب."
|
instanceMuteDescription: "هذه سيحجب كل ملاحظات الخوادم المحجوبة ومشاركاتها والردود على تلك الملاحظات حتى وإن كانت من خادم غير محجوب."
|
||||||
instanceMuteDescription2: "مدخلة لكل سطر"
|
instanceMuteDescription2: "مدخلة لكل سطر"
|
||||||
@@ -1251,12 +1239,17 @@ _theme:
|
|||||||
buttonBg: "خلفية الأزرار"
|
buttonBg: "خلفية الأزرار"
|
||||||
buttonHoverBg: "خلفية الأزرار (عند التمرير فوقها)"
|
buttonHoverBg: "خلفية الأزرار (عند التمرير فوقها)"
|
||||||
inputBorder: "حواف حقل الإدخال"
|
inputBorder: "حواف حقل الإدخال"
|
||||||
|
listItemHoverBg: "خلفية عناصر القائمة (عند التمرير فوقها)"
|
||||||
driveFolderBg: "خلفية مجلد قرص التخزين"
|
driveFolderBg: "خلفية مجلد قرص التخزين"
|
||||||
messageBg: "خلفية المحادثة"
|
messageBg: "خلفية المحادثة"
|
||||||
_sfx:
|
_sfx:
|
||||||
note: "الملاحظات"
|
note: "الملاحظات"
|
||||||
noteMy: "ملاحظتي"
|
noteMy: "ملاحظتي"
|
||||||
notification: "الإشعارات"
|
notification: "الإشعارات"
|
||||||
|
chat: "المحادثة"
|
||||||
|
chatBg: "المحادثة (الخلفية)"
|
||||||
|
antenna: "الهوائيات"
|
||||||
|
channel: "إشعارات القنات"
|
||||||
_ago:
|
_ago:
|
||||||
future: "المستقبَل"
|
future: "المستقبَل"
|
||||||
justNow: "اللحظة"
|
justNow: "اللحظة"
|
||||||
@@ -1273,6 +1266,9 @@ _time:
|
|||||||
minute: "د"
|
minute: "د"
|
||||||
hour: "سا"
|
hour: "سا"
|
||||||
day: "ي"
|
day: "ي"
|
||||||
|
_timelineTutorial:
|
||||||
|
title: "كيف تستخدم Misskey"
|
||||||
|
step3_1: "هل نشرت ملاحظتك الأولى؟"
|
||||||
_2fa:
|
_2fa:
|
||||||
alreadyRegistered: "سجلت سلفًا جهازًا للاستيثاق بعاملين."
|
alreadyRegistered: "سجلت سلفًا جهازًا للاستيثاق بعاملين."
|
||||||
step1: "أولًا ثبّت تطبيق استيثاق على جهازك (مثل {a} و{b})."
|
step1: "أولًا ثبّت تطبيق استيثاق على جهازك (مثل {a} و{b})."
|
||||||
@@ -1415,7 +1411,6 @@ _profile:
|
|||||||
_exportOrImport:
|
_exportOrImport:
|
||||||
allNotes: "كل الملاحظات"
|
allNotes: "كل الملاحظات"
|
||||||
favoritedNotes: " الملاحظات المفضلة"
|
favoritedNotes: " الملاحظات المفضلة"
|
||||||
clips: "مِشبك"
|
|
||||||
followingList: "المتابَعون"
|
followingList: "المتابَعون"
|
||||||
muteList: "المستخدمون المكتومون"
|
muteList: "المستخدمون المكتومون"
|
||||||
blockingList: "المستخدمون المحجوبون"
|
blockingList: "المستخدمون المحجوبون"
|
||||||
@@ -1460,6 +1455,9 @@ _pages:
|
|||||||
newPage: "أنشئ صفحة جديدة"
|
newPage: "أنشئ صفحة جديدة"
|
||||||
editPage: "عدّل الصفحة"
|
editPage: "عدّل الصفحة"
|
||||||
readPage: "نُشّط عرض المصدر"
|
readPage: "نُشّط عرض المصدر"
|
||||||
|
created: "نجح إنشاء الصفحة"
|
||||||
|
updated: "نجح تعديل الصفحة"
|
||||||
|
deleted: "نجح حذف الصفحة"
|
||||||
pageSetting: "إعدادات الصفحة"
|
pageSetting: "إعدادات الصفحة"
|
||||||
nameAlreadyExists: "رابط الصفحة موجود مسبقًا"
|
nameAlreadyExists: "رابط الصفحة موجود مسبقًا"
|
||||||
invalidNameTitle: "رابط الصفحة ليس صالحًا"
|
invalidNameTitle: "رابط الصفحة ليس صالحًا"
|
||||||
@@ -1525,7 +1523,6 @@ _notification:
|
|||||||
reaction: "التفاعل"
|
reaction: "التفاعل"
|
||||||
receiveFollowRequest: "طلبات المتابعة"
|
receiveFollowRequest: "طلبات المتابعة"
|
||||||
followRequestAccepted: "طلبات المتابعة المقبولة"
|
followRequestAccepted: "طلبات المتابعة المقبولة"
|
||||||
login: "لِج"
|
|
||||||
app: "إشعارات التطبيقات المرتبطة"
|
app: "إشعارات التطبيقات المرتبطة"
|
||||||
_actions:
|
_actions:
|
||||||
followBack: "تابعك بالمثل"
|
followBack: "تابعك بالمثل"
|
||||||
@@ -1557,34 +1554,3 @@ _webhookSettings:
|
|||||||
active: "مُفعّل"
|
active: "مُفعّل"
|
||||||
_events:
|
_events:
|
||||||
reaction: "عند التفاعل"
|
reaction: "عند التفاعل"
|
||||||
_abuseReport:
|
|
||||||
_notificationRecipient:
|
|
||||||
_recipientType:
|
|
||||||
mail: "البريد الإلكتروني "
|
|
||||||
_moderationLogTypes:
|
|
||||||
suspend: "علِق"
|
|
||||||
deleteDriveFile: "حُذف الملف"
|
|
||||||
deleteNote: "حُذفت الملاحظة"
|
|
||||||
createGlobalAnnouncement: "أُنشئ إعلان عام"
|
|
||||||
createUserAnnouncement: "أُنشئ إعلان مستخدم"
|
|
||||||
updateGlobalAnnouncement: "حُدث إعلان عام"
|
|
||||||
updateUserAnnouncement: "حُدث إعلان مستخدم"
|
|
||||||
resetPassword: "أعد تعيين كلمتك السرية"
|
|
||||||
createInvitation: "ولِّد دعوة"
|
|
||||||
_reversi:
|
|
||||||
total: "المجموع"
|
|
||||||
lookingForPlayer: "يبحث عن خصم..."
|
|
||||||
gameCanceled: "أُلغيت اللعبة."
|
|
||||||
opponentHasSettingsChanged: "غيَر الخصم إعدادته."
|
|
||||||
showBoardLabels: "اعرض ترقيم الصفوف والأعمدة على اللوح"
|
|
||||||
useAvatarAsStone: "حوَل الحجارة إلى صور مستخدمين"
|
|
||||||
_offlineScreen:
|
|
||||||
title: "غير متصل - يتعذر الاتصال بالخادم"
|
|
||||||
header: "يتعذر الاتصال بالخادم"
|
|
||||||
_remoteLookupErrors:
|
|
||||||
_noSuchObject:
|
|
||||||
title: "غير موجود"
|
|
||||||
_search:
|
|
||||||
searchScopeAll: "الكل"
|
|
||||||
searchScopeLocal: "المحلي"
|
|
||||||
searchScopeUser: "مستخدم محدد"
|
|
||||||
|
@@ -2,7 +2,6 @@
|
|||||||
_lang_: "বাংলা"
|
_lang_: "বাংলা"
|
||||||
headlineMisskey: "নোট ব্যাবহার করে সংযুক্ত নেটওয়ার্ক"
|
headlineMisskey: "নোট ব্যাবহার করে সংযুক্ত নেটওয়ার্ক"
|
||||||
introMisskey: "স্বাগতম! মিসকি একটি ওপেন সোর্স, ডিসেন্ট্রালাইজড মাইক্রোব্লগিং পরিষেবা। \n\"নোট\" তৈরির মাধ্যমে যা ঘটছে তা সবার সাথে শেয়ার করুন 📡\n\"রিঅ্যাকশন\" গুলির মাধ্যমে যেকোনো নোট সম্পর্কে আপনার অনুভূতি ব্যাক্ত করতে পারেন 👍\nএকটি নতুন দুনিয়া ঘুরে দেখুন 🚀\n"
|
introMisskey: "স্বাগতম! মিসকি একটি ওপেন সোর্স, ডিসেন্ট্রালাইজড মাইক্রোব্লগিং পরিষেবা। \n\"নোট\" তৈরির মাধ্যমে যা ঘটছে তা সবার সাথে শেয়ার করুন 📡\n\"রিঅ্যাকশন\" গুলির মাধ্যমে যেকোনো নোট সম্পর্কে আপনার অনুভূতি ব্যাক্ত করতে পারেন 👍\nএকটি নতুন দুনিয়া ঘুরে দেখুন 🚀\n"
|
||||||
poweredByMisskeyDescription: "{name} হল ওপেন সোর্স প্ল্যাটফর্ম <b>Misskey</b>-এর সার্ভারগুলির একটি৷"
|
|
||||||
monthAndDay: "{day}/{month}"
|
monthAndDay: "{day}/{month}"
|
||||||
search: "খুঁজুন"
|
search: "খুঁজুন"
|
||||||
notifications: "বিজ্ঞপ্তি"
|
notifications: "বিজ্ঞপ্তি"
|
||||||
@@ -13,14 +12,12 @@ fetchingAsApObject: "ফেডিভার্স থেকে খবর আন
|
|||||||
ok: "ঠিক"
|
ok: "ঠিক"
|
||||||
gotIt: "বুঝেছি"
|
gotIt: "বুঝেছি"
|
||||||
cancel: "বাতিল"
|
cancel: "বাতিল"
|
||||||
noThankYou: "না, ধন্যবাদ"
|
|
||||||
enterUsername: "ইউজারনেম লিখুন"
|
enterUsername: "ইউজারনেম লিখুন"
|
||||||
renotedBy: "{user} রিনোট করেছেন"
|
renotedBy: "{user} রিনোট করেছেন"
|
||||||
noNotes: "কোন নোট নেই"
|
noNotes: "কোন নোট নেই"
|
||||||
noNotifications: "কোনো বিজ্ঞপ্তি নেই"
|
noNotifications: "কোনো বিজ্ঞপ্তি নেই"
|
||||||
instance: "ইন্সট্যান্স"
|
instance: "ইন্সট্যান্স"
|
||||||
settings: "সেটিংস"
|
settings: "সেটিংস"
|
||||||
notificationSettings: "বিজ্ঞপ্তির সেটিংস"
|
|
||||||
basicSettings: "সাধারণ সেটিংস"
|
basicSettings: "সাধারণ সেটিংস"
|
||||||
otherSettings: "অন্যান্য সেটিংস"
|
otherSettings: "অন্যান্য সেটিংস"
|
||||||
openInWindow: "নতুন উইন্ডোতে খুলা"
|
openInWindow: "নতুন উইন্ডোতে খুলা"
|
||||||
@@ -45,20 +42,12 @@ pin: "পিন করা"
|
|||||||
unpin: "পিন সরান"
|
unpin: "পিন সরান"
|
||||||
copyContent: "বিষয়বস্তু কপি করুন"
|
copyContent: "বিষয়বস্তু কপি করুন"
|
||||||
copyLink: "লিঙ্ক কপি করুন"
|
copyLink: "লিঙ্ক কপি করুন"
|
||||||
copyLinkRenote: "রিনোট লিঙ্ক কপি করুন"
|
|
||||||
delete: "মুছুন"
|
delete: "মুছুন"
|
||||||
deleteAndEdit: "মুছুন এবং সম্পাদনা করুন"
|
deleteAndEdit: "মুছুন এবং সম্পাদনা করুন"
|
||||||
deleteAndEditConfirm: "আপনি কি এই নোটটি মুছে এটি সম্পাদনা করার বিষয়ে নিশ্চিত? আপনি এটির সমস্ত রিঅ্যাকশন, রিনোট এবং জবাব হারাবেন।"
|
deleteAndEditConfirm: "আপনি কি এই নোটটি মুছে এটি সম্পাদনা করার বিষয়ে নিশ্চিত? আপনি এটির সমস্ত রিঅ্যাকশন, রিনোট এবং জবাব হারাবেন।"
|
||||||
addToList: "লিস্ট এ যোগ করুন"
|
addToList: "লিস্ট এ যোগ করুন"
|
||||||
addToAntenna: "অ্যান্টেনা এ যোগ করুন"
|
|
||||||
sendMessage: "একটি বার্তা পাঠান"
|
sendMessage: "একটি বার্তা পাঠান"
|
||||||
copyRSS: "RSS কপি করুন"
|
|
||||||
copyUsername: "ব্যবহারকারীর নাম কপি করুন"
|
copyUsername: "ব্যবহারকারীর নাম কপি করুন"
|
||||||
copyUserId: "ব্যবহারকারীর ID কপি করুন"
|
|
||||||
copyNoteId: "নোটের ID কপি করুন"
|
|
||||||
copyFileId: "ফাইল ID কপি করুন"
|
|
||||||
copyFolderId: "ফোল্ডার ID কপি করুন"
|
|
||||||
copyProfileUrl: "প্রোফাইল URL কপি করুন"
|
|
||||||
searchUser: "ব্যবহারকারী খুঁজুন..."
|
searchUser: "ব্যবহারকারী খুঁজুন..."
|
||||||
reply: "জবাব"
|
reply: "জবাব"
|
||||||
loadMore: "আরও দেখুন"
|
loadMore: "আরও দেখুন"
|
||||||
@@ -111,8 +100,6 @@ renoted: "রিনোট করা হয়েছে"
|
|||||||
cantRenote: "এই নোটটি রিনোট করা যাবে না।"
|
cantRenote: "এই নোটটি রিনোট করা যাবে না।"
|
||||||
cantReRenote: "রিনোটকে রিনোট করা যাবে না।"
|
cantReRenote: "রিনোটকে রিনোট করা যাবে না।"
|
||||||
quote: "উদ্ধৃতি"
|
quote: "উদ্ধৃতি"
|
||||||
inChannelRenote: "চ্যানেলে রিনোট"
|
|
||||||
inChannelQuote: "চ্যানেলে উদ্ধৃতি"
|
|
||||||
pinnedNote: "পিন করা নোট"
|
pinnedNote: "পিন করা নোট"
|
||||||
pinned: "পিন করা"
|
pinned: "পিন করা"
|
||||||
you: "আপনি"
|
you: "আপনি"
|
||||||
@@ -121,10 +108,7 @@ sensitive: "সংবেদনশীল বিষয়বস্তু"
|
|||||||
add: "যুক্ত করুন"
|
add: "যুক্ত করুন"
|
||||||
reaction: "প্রতিক্রিয়া"
|
reaction: "প্রতিক্রিয়া"
|
||||||
reactions: "প্রতিক্রিয়া"
|
reactions: "প্রতিক্রিয়া"
|
||||||
emojiPicker: "ইমোজি পিকার"
|
reactionSetting: "রিঅ্যাকশন পিকারে যেসকল প্রতিক্রিয়া দেখানো হবে"
|
||||||
pinnedEmojisForReactionSettingDescription: "রিঅ্যাকশন দেয়ার সময় আপনি ইমোজিটিকে পিন করা এবং প্রদর্শিত হওয়ার জন্য সেট করতে পারেন।"
|
|
||||||
pinnedEmojisSettingDescription: "ইমোজি ইনপুট দেয়ার সময় আপনি ইমোজিটিকে পিন করা এবং প্রদর্শিত হওয়ার জন্য সেট করতে পারেন।"
|
|
||||||
emojiPickerDisplay: "পিকার ডিসপ্লে"
|
|
||||||
reactionSettingDescription2: "পুনরায় সাজাতে টেনে আনুন, মুছতে ক্লিক করুন, যোগ করতে + টিপুন।"
|
reactionSettingDescription2: "পুনরায় সাজাতে টেনে আনুন, মুছতে ক্লিক করুন, যোগ করতে + টিপুন।"
|
||||||
rememberNoteVisibility: "নোটের দৃশ্যমান্যতার সেটিংস মনে রাখুন"
|
rememberNoteVisibility: "নোটের দৃশ্যমান্যতার সেটিংস মনে রাখুন"
|
||||||
attachCancel: "অ্যাটাচমেন্ট সরান "
|
attachCancel: "অ্যাটাচমেন্ট সরান "
|
||||||
@@ -339,10 +323,12 @@ enableLocalTimeline: "স্থানীয় টাইমলাইন চাল
|
|||||||
enableGlobalTimeline: "গ্লোবাল টাইমলাইন চালু করুন"
|
enableGlobalTimeline: "গ্লোবাল টাইমলাইন চালু করুন"
|
||||||
disablingTimelinesInfo: "আপনি এই টাইমলাইনগুলি বন্ধ করলেও প্রশাসক এবং মডারেটররা এই টাইমলাইনগুলি ব্যাবহার করতে পারবে"
|
disablingTimelinesInfo: "আপনি এই টাইমলাইনগুলি বন্ধ করলেও প্রশাসক এবং মডারেটররা এই টাইমলাইনগুলি ব্যাবহার করতে পারবে"
|
||||||
registration: "নিবন্ধন"
|
registration: "নিবন্ধন"
|
||||||
|
enableRegistration: "নতুন ব্যাবহারকারী নিবন্ধন চালু করুন"
|
||||||
invite: "আমন্ত্রণ"
|
invite: "আমন্ত্রণ"
|
||||||
driveCapacityPerLocalAccount: "প্রত্যেক স্থানীয় ব্যাবহারকারীর জন্য ড্রাইভের জায়গা"
|
driveCapacityPerLocalAccount: "প্রত্যেক স্থানীয় ব্যাবহারকারীর জন্য ড্রাইভের জায়গা"
|
||||||
driveCapacityPerRemoteAccount: "প্রত্যেক রিমোট ব্যাবহারকারীর জন্য ড্রাইভের জায়গা"
|
driveCapacityPerRemoteAccount: "প্রত্যেক রিমোট ব্যাবহারকারীর জন্য ড্রাইভের জায়গা"
|
||||||
inMb: "মেগাবাইটে লিখুন"
|
inMb: "মেগাবাইটে লিখুন"
|
||||||
|
iconUrl: "আইকনের URL (ফ্যাভিকন, ইত্যাদি)"
|
||||||
bannerUrl: "ব্যানার ছবির URL"
|
bannerUrl: "ব্যানার ছবির URL"
|
||||||
backgroundImageUrl: "পটভূমির চিত্রের URL"
|
backgroundImageUrl: "পটভূমির চিত্রের URL"
|
||||||
basicInfo: "আপনার ব্যক্তিগত তথ্য"
|
basicInfo: "আপনার ব্যক্তিগত তথ্য"
|
||||||
@@ -356,8 +342,6 @@ hcaptcha: "hCaptcha"
|
|||||||
enableHcaptcha: "hCaptcha চালু করুন"
|
enableHcaptcha: "hCaptcha চালু করুন"
|
||||||
hcaptchaSiteKey: "সাইট কী"
|
hcaptchaSiteKey: "সাইট কী"
|
||||||
hcaptchaSecretKey: "সিক্রেট কী"
|
hcaptchaSecretKey: "সিক্রেট কী"
|
||||||
mcaptchaSiteKey: "সাইট কী"
|
|
||||||
mcaptchaSecretKey: "সিক্রেট কী"
|
|
||||||
recaptcha: "reCAPTCHA"
|
recaptcha: "reCAPTCHA"
|
||||||
enableRecaptcha: "reCAPTCHA চালু করুন"
|
enableRecaptcha: "reCAPTCHA চালু করুন"
|
||||||
recaptchaSiteKey: "সাইট কী"
|
recaptchaSiteKey: "সাইট কী"
|
||||||
@@ -410,6 +394,7 @@ share: "শেয়ার"
|
|||||||
notFound: "পাওয়া যায়নি"
|
notFound: "পাওয়া যায়নি"
|
||||||
notFoundDescription: "এই URL-এর সাথে সম্পর্কিত কোনো পৃষ্ঠা নেই।"
|
notFoundDescription: "এই URL-এর সাথে সম্পর্কিত কোনো পৃষ্ঠা নেই।"
|
||||||
uploadFolder: "আপলোডের জন্য ডিফল্ট ফোল্ডার"
|
uploadFolder: "আপলোডের জন্য ডিফল্ট ফোল্ডার"
|
||||||
|
cacheClear: "ক্যাশ পরিষ্কার করুন"
|
||||||
markAsReadAllNotifications: "সমস্ত বিজ্ঞপ্তিগুলি পঠিত হিসাবে চিহ্নিত করুন"
|
markAsReadAllNotifications: "সমস্ত বিজ্ঞপ্তিগুলি পঠিত হিসাবে চিহ্নিত করুন"
|
||||||
markAsReadAllUnreadNotes: "সমস্ত নোটগুলি পঠিত হিসাবে চিহ্নিত করুন"
|
markAsReadAllUnreadNotes: "সমস্ত নোটগুলি পঠিত হিসাবে চিহ্নিত করুন"
|
||||||
markAsReadAllTalkMessages: "সমস্ত মেসেজ পঠিত হিসাবে চিহ্নিত করুন"
|
markAsReadAllTalkMessages: "সমস্ত মেসেজ পঠিত হিসাবে চিহ্নিত করুন"
|
||||||
@@ -450,6 +435,7 @@ or: "অথবা"
|
|||||||
language: "ভাষা"
|
language: "ভাষা"
|
||||||
uiLanguage: "UI এর ভাষা"
|
uiLanguage: "UI এর ভাষা"
|
||||||
aboutX: "{x} সম্পর্কে"
|
aboutX: "{x} সম্পর্কে"
|
||||||
|
disableDrawer: "ড্রয়ার মেনু প্রদর্শন করবেন না"
|
||||||
noHistory: "কোনো ইতিহাস নেই"
|
noHistory: "কোনো ইতিহাস নেই"
|
||||||
signinHistory: "প্রবেশ করার ইতিহাস"
|
signinHistory: "প্রবেশ করার ইতিহাস"
|
||||||
doing: "প্রক্রিয়া করছে..."
|
doing: "প্রক্রিয়া করছে..."
|
||||||
@@ -623,7 +609,10 @@ abuseReported: "আপনার অভিযোগটি দাখিল কর
|
|||||||
reporter: "অভিযোগকারী"
|
reporter: "অভিযোগকারী"
|
||||||
reporteeOrigin: "অভিযোগটির উৎস"
|
reporteeOrigin: "অভিযোগটির উৎস"
|
||||||
reporterOrigin: "অভিযোগকারীর উৎস"
|
reporterOrigin: "অভিযোগকারীর উৎস"
|
||||||
|
forwardReport: "রিমোট ইন্সত্যান্সে অভিযোগটি পাঠান"
|
||||||
|
forwardReportIsAnonymous: "আপনার তথ্য রিমোট ইন্সত্যান্সে পাঠানো হবে না এবং একটি বেনামী সিস্টেম অ্যাকাউন্ট হিসাবে প্রদর্শিত হবে।"
|
||||||
send: "পাঠান"
|
send: "পাঠান"
|
||||||
|
abuseMarkAsResolved: "অভিযোগটিকে সমাধাকৃত হিসাবে চিহ্নিত করুন"
|
||||||
openInNewTab: "নতুন ট্যাবে খুলুন"
|
openInNewTab: "নতুন ট্যাবে খুলুন"
|
||||||
openInSideView: "সাইড ভিউতে খুলুন"
|
openInSideView: "সাইড ভিউতে খুলুন"
|
||||||
defaultNavigationBehaviour: "ডিফল্ট নেভিগেশন"
|
defaultNavigationBehaviour: "ডিফল্ট নেভিগেশন"
|
||||||
@@ -807,6 +796,8 @@ makeReactionsPublicDescription: "আপনার পূর্ববর্তী
|
|||||||
classic: "ক্লাসিক"
|
classic: "ক্লাসিক"
|
||||||
muteThread: "থ্রেড মিউট করুন"
|
muteThread: "থ্রেড মিউট করুন"
|
||||||
unmuteThread: "থ্রেড আনমিউট করুন"
|
unmuteThread: "থ্রেড আনমিউট করুন"
|
||||||
|
ffVisibility: "অনুসরণ/অনুসরণকারীদের দৃশ্যমান্যতা"
|
||||||
|
ffVisibilityDescription: "আপনি কাকে অনুসরণ করেন এবং কে আপনাকে অনুসরণ করে, সেটা কারা দেখতে পাবে তা নির্ধারণ করে।"
|
||||||
continueThread: "আরো থ্রেড দেখুন"
|
continueThread: "আরো থ্রেড দেখুন"
|
||||||
deleteAccountConfirm: "আপনার অ্যাকাউন্ট মুছে ফেলা হবে। ঠিক আছে?"
|
deleteAccountConfirm: "আপনার অ্যাকাউন্ট মুছে ফেলা হবে। ঠিক আছে?"
|
||||||
incorrectPassword: "আপনার দেওয়া পাসওয়ার্ডটি ভুল।"
|
incorrectPassword: "আপনার দেওয়া পাসওয়ার্ডটি ভুল।"
|
||||||
@@ -848,14 +839,6 @@ color: "রং"
|
|||||||
horizontal: "পাশে"
|
horizontal: "পাশে"
|
||||||
youFollowing: "অনুসরণ করা হচ্ছে"
|
youFollowing: "অনুসরণ করা হচ্ছে"
|
||||||
icon: "প্রোফাইল ছবি"
|
icon: "প্রোফাইল ছবি"
|
||||||
replies: "জবাব"
|
|
||||||
renotes: "রিনোট"
|
|
||||||
sourceCode: "সোর্স কোড"
|
|
||||||
flip: "উল্টান"
|
|
||||||
_delivery:
|
|
||||||
stop: "স্থগিত করা হয়েছে"
|
|
||||||
_type:
|
|
||||||
none: "প্রকাশ করা হচ্ছে"
|
|
||||||
_role:
|
_role:
|
||||||
priority: "অগ্রাধিকার"
|
priority: "অগ্রাধিকার"
|
||||||
_priority:
|
_priority:
|
||||||
@@ -905,7 +888,6 @@ _plugin:
|
|||||||
install: "প্লাগইন ইন্সটল করুন"
|
install: "প্লাগইন ইন্সটল করুন"
|
||||||
installWarn: "অবিশ্বস্ত প্লাগইন ইনস্টল করবেন না।"
|
installWarn: "অবিশ্বস্ত প্লাগইন ইনস্টল করবেন না।"
|
||||||
manage: "প্লাগইন ম্যানেজ করুন"
|
manage: "প্লাগইন ম্যানেজ করুন"
|
||||||
viewSource: "উৎস দেখুন"
|
|
||||||
_registry:
|
_registry:
|
||||||
scope: "স্কোপ"
|
scope: "স্কোপ"
|
||||||
key: "কী"
|
key: "কী"
|
||||||
@@ -948,6 +930,11 @@ _wordMute:
|
|||||||
muteWords: "নিঃশব্দ করা শব্দগুলি"
|
muteWords: "নিঃশব্দ করা শব্দগুলি"
|
||||||
muteWordsDescription: "স্পেস দিয়ে আলাদা করলে AND শর্ত তৈরি হবে এবং আলাদা লাইনে লিখলে OR শর্ত তৈরি হবে।"
|
muteWordsDescription: "স্পেস দিয়ে আলাদা করলে AND শর্ত তৈরি হবে এবং আলাদা লাইনে লিখলে OR শর্ত তৈরি হবে।"
|
||||||
muteWordsDescription2: "রেগুলার এক্সপ্রেশন ব্যবহার করতে স্ল্যাশ দিয়ে কীওয়ার্ডকে ঘিরে রাখুন।"
|
muteWordsDescription2: "রেগুলার এক্সপ্রেশন ব্যবহার করতে স্ল্যাশ দিয়ে কীওয়ার্ডকে ঘিরে রাখুন।"
|
||||||
|
softDescription: "টাইমলাইন থেকে নির্দিষ্ট শর্তানুযায়ী নোট লুকিয়ে রাখে।"
|
||||||
|
hardDescription: "নির্দিষ্ট শর্তানুযায়ী নোটগুলিকে টাইমলাইন থেকে বাদ দেয়। আপনি শর্ত পরিবর্তন করলেও যে নোটগুলি যোগ করা হয়নি সেগুলি বাদ দেওয়া হবে।"
|
||||||
|
soft: "নমনীয়"
|
||||||
|
hard: "কঠোর"
|
||||||
|
mutedNotes: "মিউট করা নোটগুলি"
|
||||||
_instanceMute:
|
_instanceMute:
|
||||||
instanceMuteDescription: "কনফিগার করা ইন্সট্যান্সের সব নোট এবং রিনোট মিউট করুন, মিউট করা ইন্সট্যান্সের ব্যবহারকারীদের উত্তর সহ।"
|
instanceMuteDescription: "কনফিগার করা ইন্সট্যান্সের সব নোট এবং রিনোট মিউট করুন, মিউট করা ইন্সট্যান্সের ব্যবহারকারীদের উত্তর সহ।"
|
||||||
instanceMuteDescription2: "প্রতিটিকে আলাদা লাইনে লিখুন"
|
instanceMuteDescription2: "প্রতিটিকে আলাদা লাইনে লিখুন"
|
||||||
@@ -1011,11 +998,15 @@ _theme:
|
|||||||
infoFg: "তথ্যের পাঠ্য"
|
infoFg: "তথ্যের পাঠ্য"
|
||||||
infoWarnBg: "ওয়ার্নিং এর পটভূমি"
|
infoWarnBg: "ওয়ার্নিং এর পটভূমি"
|
||||||
infoWarnFg: "ওয়ার্নিং এর পাঠ্য"
|
infoWarnFg: "ওয়ার্নিং এর পাঠ্য"
|
||||||
|
cwBg: "CW বাটনের পটভূমি"
|
||||||
|
cwFg: "CW বাটনের পাঠ্য"
|
||||||
|
cwHoverBg: "CW বাটনের পটভূমি (হভার)"
|
||||||
toastBg: "বিজ্ঞপ্তির পটভূমি"
|
toastBg: "বিজ্ঞপ্তির পটভূমি"
|
||||||
toastFg: "বিজ্ঞপ্তির পাঠ্য"
|
toastFg: "বিজ্ঞপ্তির পাঠ্য"
|
||||||
buttonBg: "বাটনের পটভূমি"
|
buttonBg: "বাটনের পটভূমি"
|
||||||
buttonHoverBg: "বাটনের পটভূমি (হভার)"
|
buttonHoverBg: "বাটনের পটভূমি (হভার)"
|
||||||
inputBorder: "ইনপুট ফিল্ডের বর্ডার"
|
inputBorder: "ইনপুট ফিল্ডের বর্ডার"
|
||||||
|
listItemHoverBg: "লিস্ট আইটেমের পটভূমি (হোভার)"
|
||||||
driveFolderBg: "ড্রাইভ ফোল্ডারের পটভূমি"
|
driveFolderBg: "ড্রাইভ ফোল্ডারের পটভূমি"
|
||||||
wallpaperOverlay: "ওয়ালপেপার ওভারলে"
|
wallpaperOverlay: "ওয়ালপেপার ওভারলে"
|
||||||
badge: "ব্যাজ"
|
badge: "ব্যাজ"
|
||||||
@@ -1027,6 +1018,10 @@ _sfx:
|
|||||||
note: "নোটগুলি"
|
note: "নোটগুলি"
|
||||||
noteMy: "নোট (আপনার)"
|
noteMy: "নোট (আপনার)"
|
||||||
notification: "বিজ্ঞপ্তি"
|
notification: "বিজ্ঞপ্তি"
|
||||||
|
chat: "চ্যাট"
|
||||||
|
chatBg: "চ্যাট (ব্যাকগ্রাউন্ড)"
|
||||||
|
antenna: "অ্যান্টেনাগুলি"
|
||||||
|
channel: "চ্যানেলের বিজ্ঞপ্তি"
|
||||||
_ago:
|
_ago:
|
||||||
future: "ভবিষ্যৎ"
|
future: "ভবিষ্যৎ"
|
||||||
justNow: "এইমাত্র"
|
justNow: "এইমাত্র"
|
||||||
@@ -1050,7 +1045,6 @@ _2fa:
|
|||||||
step3: "অ্যাপে প্রদর্শিত টোকেনটি লিখুন এবং আপনার কাজ শেষ।"
|
step3: "অ্যাপে প্রদর্শিত টোকেনটি লিখুন এবং আপনার কাজ শেষ।"
|
||||||
step4: "আপনাকে এখন থেকে লগ ইন করার সময়, এইভাবে টোকেন লিখতে হবে।"
|
step4: "আপনাকে এখন থেকে লগ ইন করার সময়, এইভাবে টোকেন লিখতে হবে।"
|
||||||
securityKeyInfo: "আপনি একটি হার্ডওয়্যার সিকিউরিটি কী ব্যবহার করে লগ ইন করতে পারেন যা FIDO2 বা ডিভাইসের ফিঙ্গারপ্রিন্ট সেন্সর বা পিন সমর্থন করে৷"
|
securityKeyInfo: "আপনি একটি হার্ডওয়্যার সিকিউরিটি কী ব্যবহার করে লগ ইন করতে পারেন যা FIDO2 বা ডিভাইসের ফিঙ্গারপ্রিন্ট সেন্সর বা পিন সমর্থন করে৷"
|
||||||
renewTOTPCancel: "না, ধন্যবাদ"
|
|
||||||
_permissions:
|
_permissions:
|
||||||
"read:account": "অ্যাকাউন্টের তথ্য দেখুন"
|
"read:account": "অ্যাকাউন্টের তথ্য দেখুন"
|
||||||
"write:account": "অ্যাকাউন্টের তথ্য সম্পাদন করুন"
|
"write:account": "অ্যাকাউন্টের তথ্য সম্পাদন করুন"
|
||||||
@@ -1189,7 +1183,6 @@ _profile:
|
|||||||
changeBanner: "ব্যানার পরিবর্তন করুন"
|
changeBanner: "ব্যানার পরিবর্তন করুন"
|
||||||
_exportOrImport:
|
_exportOrImport:
|
||||||
allNotes: "সকল নোট"
|
allNotes: "সকল নোট"
|
||||||
clips: "ক্লিপ"
|
|
||||||
followingList: "অনুসরণ করা হচ্ছে"
|
followingList: "অনুসরণ করা হচ্ছে"
|
||||||
muteList: "মিউট"
|
muteList: "মিউট"
|
||||||
blockingList: "ব্লক"
|
blockingList: "ব্লক"
|
||||||
@@ -1237,6 +1230,9 @@ _pages:
|
|||||||
newPage: "নতুন পৃষ্ঠা বানান"
|
newPage: "নতুন পৃষ্ঠা বানান"
|
||||||
editPage: "পৃষ্ঠাটি সম্পাদনা করুন"
|
editPage: "পৃষ্ঠাটি সম্পাদনা করুন"
|
||||||
readPage: "উৎস দেখছেন"
|
readPage: "উৎস দেখছেন"
|
||||||
|
created: "পৃষ্ঠা তৈরি করা হয়েছে"
|
||||||
|
updated: "পৃষ্ঠা সম্পাদনা করা হয়েছে"
|
||||||
|
deleted: "পৃষ্ঠা মুছে ফেলা হয়েছে"
|
||||||
pageSetting: "পৃষ্ঠার সেটিংস"
|
pageSetting: "পৃষ্ঠার সেটিংস"
|
||||||
nameAlreadyExists: "পৃষ্ঠার URLটি ইতিমধ্যেই ব্যাবহার করা হয়েছে"
|
nameAlreadyExists: "পৃষ্ঠার URLটি ইতিমধ্যেই ব্যাবহার করা হয়েছে"
|
||||||
invalidNameTitle: "পৃষ্ঠার URL অবৈধ"
|
invalidNameTitle: "পৃষ্ঠার URL অবৈধ"
|
||||||
@@ -1305,7 +1301,6 @@ _notification:
|
|||||||
pollEnded: "পোল শেষ"
|
pollEnded: "পোল শেষ"
|
||||||
receiveFollowRequest: "প্রাপ্ত অনুসরণের অনুরোধসমূহ"
|
receiveFollowRequest: "প্রাপ্ত অনুসরণের অনুরোধসমূহ"
|
||||||
followRequestAccepted: "গৃহীত অনুসরণের অনুরোধসমূহ"
|
followRequestAccepted: "গৃহীত অনুসরণের অনুরোধসমূহ"
|
||||||
login: "প্রবেশ করুন"
|
|
||||||
app: "লিঙ্ক করা অ্যাপ থেকে বিজ্ঞপ্তি"
|
app: "লিঙ্ক করা অ্যাপ থেকে বিজ্ঞপ্তি"
|
||||||
_actions:
|
_actions:
|
||||||
followBack: "ফলো ব্যাক করেছে"
|
followBack: "ফলো ব্যাক করেছে"
|
||||||
@@ -1336,18 +1331,3 @@ _deck:
|
|||||||
_webhookSettings:
|
_webhookSettings:
|
||||||
name: "নাম"
|
name: "নাম"
|
||||||
active: "চালু"
|
active: "চালু"
|
||||||
_abuseReport:
|
|
||||||
_notificationRecipient:
|
|
||||||
_recipientType:
|
|
||||||
mail: "ইমেইল"
|
|
||||||
_moderationLogTypes:
|
|
||||||
suspend: "স্থগিত করা"
|
|
||||||
resetPassword: "পাসওয়ার্ড রিসেট করুন"
|
|
||||||
_reversi:
|
|
||||||
total: "মোট"
|
|
||||||
_remoteLookupErrors:
|
|
||||||
_noSuchObject:
|
|
||||||
title: "পাওয়া যায়নি"
|
|
||||||
_search:
|
|
||||||
searchScopeAll: "সবগুলো"
|
|
||||||
searchScopeLocal: "স্থানীয়"
|
|
||||||
|
2528
locales/ca-ES.yml
2528
locales/ca-ES.yml
File diff suppressed because it is too large
Load Diff
@@ -5,7 +5,6 @@ introMisskey: "Vítejte! Misskey je otevřený a decentralizovaný microblogový
|
|||||||
poweredByMisskeyDescription: "{name} je jeden ze serverů využívající open source platformu <b>Misskey<b> (nazývaná \"Misskey instance\")."
|
poweredByMisskeyDescription: "{name} je jeden ze serverů využívající open source platformu <b>Misskey<b> (nazývaná \"Misskey instance\")."
|
||||||
monthAndDay: "{day}. {month}."
|
monthAndDay: "{day}. {month}."
|
||||||
search: "Vyhledávání"
|
search: "Vyhledávání"
|
||||||
reset: "Obnovit"
|
|
||||||
notifications: "Oznámení"
|
notifications: "Oznámení"
|
||||||
username: "Uživatelské jméno"
|
username: "Uživatelské jméno"
|
||||||
password: "Heslo"
|
password: "Heslo"
|
||||||
@@ -121,6 +120,7 @@ sensitive: "NSFW"
|
|||||||
add: "Přidat"
|
add: "Přidat"
|
||||||
reaction: "Reakce"
|
reaction: "Reakce"
|
||||||
reactions: "Reakce"
|
reactions: "Reakce"
|
||||||
|
reactionSetting: "Reakce zobrazené ve výběru reakcí"
|
||||||
reactionSettingDescription2: "Přetažením změníte pořadí, kliknutím smažete, zmáčkněte \"+\" k přidání"
|
reactionSettingDescription2: "Přetažením změníte pořadí, kliknutím smažete, zmáčkněte \"+\" k přidání"
|
||||||
rememberNoteVisibility: "Zapamatovat nastavení zobrazení poznámky"
|
rememberNoteVisibility: "Zapamatovat nastavení zobrazení poznámky"
|
||||||
attachCancel: "Odstranit přílohu"
|
attachCancel: "Odstranit přílohu"
|
||||||
@@ -349,10 +349,12 @@ enableLocalTimeline: "Povolit lokální čas"
|
|||||||
enableGlobalTimeline: "Povolit globální čas"
|
enableGlobalTimeline: "Povolit globální čas"
|
||||||
disablingTimelinesInfo: "Administrátoři a Moderátoři budou mít stálý přístup ke všem časovým osám i přes to že nejsou zapnuté."
|
disablingTimelinesInfo: "Administrátoři a Moderátoři budou mít stálý přístup ke všem časovým osám i přes to že nejsou zapnuté."
|
||||||
registration: "Registrace"
|
registration: "Registrace"
|
||||||
|
enableRegistration: "Povolit registraci novým uživatelům"
|
||||||
invite: "Pozvat"
|
invite: "Pozvat"
|
||||||
driveCapacityPerLocalAccount: "Kapacita disku na lokálního uživatele"
|
driveCapacityPerLocalAccount: "Kapacita disku na lokálního uživatele"
|
||||||
driveCapacityPerRemoteAccount: "Kapacita disku na vzdáleného uživatele"
|
driveCapacityPerRemoteAccount: "Kapacita disku na vzdáleného uživatele"
|
||||||
inMb: "V megabajtech"
|
inMb: "V megabajtech"
|
||||||
|
iconUrl: "Favicon URL"
|
||||||
bannerUrl: "Baner URL"
|
bannerUrl: "Baner URL"
|
||||||
backgroundImageUrl: "Adresa URL obrázku pozadí"
|
backgroundImageUrl: "Adresa URL obrázku pozadí"
|
||||||
basicInfo: "Základní informace"
|
basicInfo: "Základní informace"
|
||||||
@@ -366,11 +368,6 @@ hcaptcha: "hCaptcha"
|
|||||||
enableHcaptcha: "Aktivovat hCaptchu"
|
enableHcaptcha: "Aktivovat hCaptchu"
|
||||||
hcaptchaSiteKey: "Klíč stránky"
|
hcaptchaSiteKey: "Klíč stránky"
|
||||||
hcaptchaSecretKey: "Tajný Klíč (Secret Key)"
|
hcaptchaSecretKey: "Tajný Klíč (Secret Key)"
|
||||||
mcaptcha: "mCaptcha"
|
|
||||||
enableMcaptcha: "Aktivovat mCaptchu"
|
|
||||||
mcaptchaSiteKey: "Klíč stránky"
|
|
||||||
mcaptchaSecretKey: "Tajný Klíč (Secret Key)"
|
|
||||||
mcaptchaInstanceUrl: "URL mCaptcha serveru"
|
|
||||||
recaptcha: "reCAPTCHA"
|
recaptcha: "reCAPTCHA"
|
||||||
enableRecaptcha: "Zapnout ReCAPTCHu"
|
enableRecaptcha: "Zapnout ReCAPTCHu"
|
||||||
recaptchaSiteKey: "Klíč stránky"
|
recaptchaSiteKey: "Klíč stránky"
|
||||||
@@ -432,6 +429,7 @@ share: "Sdílet"
|
|||||||
notFound: "Nenalezeno"
|
notFound: "Nenalezeno"
|
||||||
notFoundDescription: "Nebyla nalezená žádná stránka korespondující se zadanou URL."
|
notFoundDescription: "Nebyla nalezená žádná stránka korespondující se zadanou URL."
|
||||||
uploadFolder: "Výchozí lokace pro upload"
|
uploadFolder: "Výchozí lokace pro upload"
|
||||||
|
cacheClear: "Vymazat cache"
|
||||||
markAsReadAllNotifications: "Označit všechna oznámení za přečtená"
|
markAsReadAllNotifications: "Označit všechna oznámení za přečtená"
|
||||||
markAsReadAllUnreadNotes: "Označit všechny příspěvky za přečtené"
|
markAsReadAllUnreadNotes: "Označit všechny příspěvky za přečtené"
|
||||||
markAsReadAllTalkMessages: "Označit všechny zprávy za přečtené"
|
markAsReadAllTalkMessages: "Označit všechny zprávy za přečtené"
|
||||||
@@ -474,6 +472,7 @@ uiLanguage: "Jazyk uživatelského rozhraní"
|
|||||||
aboutX: "O {x}"
|
aboutX: "O {x}"
|
||||||
emojiStyle: "Styl emoji"
|
emojiStyle: "Styl emoji"
|
||||||
native: "Výchozí"
|
native: "Výchozí"
|
||||||
|
disableDrawer: "Nepoužívat šuplíkové menu"
|
||||||
showNoteActionsOnlyHover: "Zobrazit akce poznámky jenom při naběhnutí myši"
|
showNoteActionsOnlyHover: "Zobrazit akce poznámky jenom při naběhnutí myši"
|
||||||
noHistory: "Žádná historie"
|
noHistory: "Žádná historie"
|
||||||
signinHistory: "Historie přihlášení"
|
signinHistory: "Historie přihlášení"
|
||||||
@@ -660,7 +659,10 @@ abuseReported: "Nahlášení bylo odesláno. Děkujeme převelice."
|
|||||||
reporter: "Nahlásil"
|
reporter: "Nahlásil"
|
||||||
reporteeOrigin: "Původ nahlášení"
|
reporteeOrigin: "Původ nahlášení"
|
||||||
reporterOrigin: "Původ nahlasovače"
|
reporterOrigin: "Původ nahlasovače"
|
||||||
|
forwardReport: "Přeposlat nahlášení do vzdálené instance"
|
||||||
|
forwardReportIsAnonymous: "Místo vašeho účtu se ve vzdálené instanci zobrazí anonymní systémový účet jako nahlašovač."
|
||||||
send: "Odeslat"
|
send: "Odeslat"
|
||||||
|
abuseMarkAsResolved: "Označit nahlášení jako vyřešené"
|
||||||
openInNewTab: "Otevřít v nové kartě"
|
openInNewTab: "Otevřít v nové kartě"
|
||||||
openInSideView: "Otevřít v bočním panelu"
|
openInSideView: "Otevřít v bočním panelu"
|
||||||
defaultNavigationBehaviour: "Výchozí chování navigace"
|
defaultNavigationBehaviour: "Výchozí chování navigace"
|
||||||
@@ -855,6 +857,8 @@ makeReactionsPublicDescription: "Tohle zviditelný seznam vašich předchozích
|
|||||||
classic: "Klasický"
|
classic: "Klasický"
|
||||||
muteThread: "Ztlumit vlákno"
|
muteThread: "Ztlumit vlákno"
|
||||||
unmuteThread: "Zrušit ztlumení vlákna"
|
unmuteThread: "Zrušit ztlumení vlákna"
|
||||||
|
ffVisibility: "Viditelnost Sledovaných/Sledujících"
|
||||||
|
ffVisibilityDescription: "Umožní vám nastavit kdo uvidí koho sledujete a kdo vás sleduje."
|
||||||
continueThread: "Zobrazit pokračování vlákna"
|
continueThread: "Zobrazit pokračování vlákna"
|
||||||
deleteAccountConfirm: "Tohle nenávratně smaže váš účet, chcete pokračovat?"
|
deleteAccountConfirm: "Tohle nenávratně smaže váš účet, chcete pokračovat?"
|
||||||
incorrectPassword: "Nesprávné heslo."
|
incorrectPassword: "Nesprávné heslo."
|
||||||
@@ -1004,7 +1008,6 @@ resetPasswordConfirm: "Opravdu chcete resetovat heslo?"
|
|||||||
sensitiveWords: "Citlivá slova"
|
sensitiveWords: "Citlivá slova"
|
||||||
sensitiveWordsDescription: "Viditelnost všech poznámek obsahujících některé z nakonfigurovaných slov bude automaticky nastavena na \"Domů\". Můžete jich uvést více tak, že je oddělíte pomocí řádků."
|
sensitiveWordsDescription: "Viditelnost všech poznámek obsahujících některé z nakonfigurovaných slov bude automaticky nastavena na \"Domů\". Můžete jich uvést více tak, že je oddělíte pomocí řádků."
|
||||||
sensitiveWordsDescription2: "Použití mezer vytvoří výrazy AND a obklopení klíčových slov lomítky je změní na regulární výraz."
|
sensitiveWordsDescription2: "Použití mezer vytvoří výrazy AND a obklopení klíčových slov lomítky je změní na regulární výraz."
|
||||||
prohibitedWordsDescription2: "Použití mezer vytvoří výrazy AND a obklopení klíčových slov lomítky je změní na regulární výraz."
|
|
||||||
notesSearchNotAvailable: "Vyhledávání poznámek je nedostupné."
|
notesSearchNotAvailable: "Vyhledávání poznámek je nedostupné."
|
||||||
license: "Licence"
|
license: "Licence"
|
||||||
unfavoriteConfirm: "Opravdu chcete odstranit z oblíbených?"
|
unfavoriteConfirm: "Opravdu chcete odstranit z oblíbených?"
|
||||||
@@ -1092,16 +1095,6 @@ doYouAgree: "Souhlasíte?"
|
|||||||
beSureToReadThisAsItIsImportant: "Přečtěte si prosím tyto důležité informace."
|
beSureToReadThisAsItIsImportant: "Přečtěte si prosím tyto důležité informace."
|
||||||
iHaveReadXCarefullyAndAgree: "Přečetl jsem si text \"{x}\" a souhlasím s ním."
|
iHaveReadXCarefullyAndAgree: "Přečetl jsem si text \"{x}\" a souhlasím s ním."
|
||||||
icon: "Avatar"
|
icon: "Avatar"
|
||||||
replies: "Odpovědět"
|
|
||||||
renotes: "Přeposlat"
|
|
||||||
sourceCode: "Zdrojový kód"
|
|
||||||
flip: "Otočit"
|
|
||||||
lastNDays: "Posledních {n} dnů"
|
|
||||||
surrender: "Zrušit"
|
|
||||||
_delivery:
|
|
||||||
stop: "Suspendováno"
|
|
||||||
_type:
|
|
||||||
none: "Publikuji"
|
|
||||||
_initialAccountSetting:
|
_initialAccountSetting:
|
||||||
accountCreated: "Váš účet byl úspěšně vytvořen!"
|
accountCreated: "Váš účet byl úspěšně vytvořen!"
|
||||||
letsStartAccountSetup: "Pro začátek si nastavte svůj profil."
|
letsStartAccountSetup: "Pro začátek si nastavte svůj profil."
|
||||||
@@ -1114,12 +1107,11 @@ _initialAccountSetting:
|
|||||||
pushNotificationDescription: "Povolení push oznámení vám umožní přijímat oznámení od {name} přímo ve vašem zařízení."
|
pushNotificationDescription: "Povolení push oznámení vám umožní přijímat oznámení od {name} přímo ve vašem zařízení."
|
||||||
initialAccountSettingCompleted: "Nastavení profilu dokončeno!"
|
initialAccountSettingCompleted: "Nastavení profilu dokončeno!"
|
||||||
haveFun: "Užívejte {name}!"
|
haveFun: "Užívejte {name}!"
|
||||||
|
ifYouNeedLearnMore: "Pokud se chcete dozvědět více o tom, jak používat {name} (Misskey), navštivte {link}."
|
||||||
skipAreYouSure: "Opravdu chcete přeskočit nastavení profilu?"
|
skipAreYouSure: "Opravdu chcete přeskočit nastavení profilu?"
|
||||||
laterAreYouSure: "Opravdu chcete provést nastavení profilu později?"
|
laterAreYouSure: "Opravdu chcete provést nastavení profilu později?"
|
||||||
_serverRules:
|
_serverRules:
|
||||||
description: "Soubor pravidel, která se zobrazí před registrací. Doporučuje se nastavit shrnutí podmínek služby."
|
description: "Soubor pravidel, která se zobrazí před registrací. Doporučuje se nastavit shrnutí podmínek služby."
|
||||||
_serverSettings:
|
|
||||||
iconUrl: "URL ikony"
|
|
||||||
_accountMigration:
|
_accountMigration:
|
||||||
moveFrom: "Migrace jiného účtu na tento účet"
|
moveFrom: "Migrace jiného účtu na tento účet"
|
||||||
moveFromSub: "Vytvořit alias na jiný účet"
|
moveFromSub: "Vytvořit alias na jiný účet"
|
||||||
@@ -1497,7 +1489,6 @@ _plugin:
|
|||||||
install: "Instalovat plugin"
|
install: "Instalovat plugin"
|
||||||
installWarn: "Neinstalujte nedůvěryhodné pluginy."
|
installWarn: "Neinstalujte nedůvěryhodné pluginy."
|
||||||
manage: "Správce pluginů"
|
manage: "Správce pluginů"
|
||||||
viewSource: "Zobrazit zdroj"
|
|
||||||
_preferencesBackups:
|
_preferencesBackups:
|
||||||
list: "Vytvořit backup"
|
list: "Vytvořit backup"
|
||||||
saveNew: "Uložit novou zálohu"
|
saveNew: "Uložit novou zálohu"
|
||||||
@@ -1564,6 +1555,11 @@ _wordMute:
|
|||||||
muteWords: "Ztlumená slova"
|
muteWords: "Ztlumená slova"
|
||||||
muteWordsDescription: "Podmínku AND oddělujte mezerami, podmínku OR oddělujte řádkovými zlomy."
|
muteWordsDescription: "Podmínku AND oddělujte mezerami, podmínku OR oddělujte řádkovými zlomy."
|
||||||
muteWordsDescription2: "Chcete-li použít regulární výrazy, obklopte klíčová slova lomítky."
|
muteWordsDescription2: "Chcete-li použít regulární výrazy, obklopte klíčová slova lomítky."
|
||||||
|
softDescription: "Skrýt poznámky, které splňují nastavené podmínky, z časové osy."
|
||||||
|
hardDescription: "Zabrání přidání poznámek splňujících nastavené podmínky na časovou osu. Kromě toho nebudou tyto poznámky přidány na časovou osu, ani když se podmínky změní."
|
||||||
|
soft: "Měkký"
|
||||||
|
hard: "Tvrdý"
|
||||||
|
mutedNotes: "Ztlumené poznámky"
|
||||||
_instanceMute:
|
_instanceMute:
|
||||||
instanceMuteDescription: "Tímhle se ztlumí všechny poznámky/poznámky z uvedených instancí, včetně poznámek uživatelů, kteří odpovídají uživateli ze ztlumené instance."
|
instanceMuteDescription: "Tímhle se ztlumí všechny poznámky/poznámky z uvedených instancí, včetně poznámek uživatelů, kteří odpovídají uživateli ze ztlumené instance."
|
||||||
instanceMuteDescription2: "Oddělte novými řádky"
|
instanceMuteDescription2: "Oddělte novými řádky"
|
||||||
@@ -1627,11 +1623,15 @@ _theme:
|
|||||||
infoFg: "Text informací"
|
infoFg: "Text informací"
|
||||||
infoWarnBg: "Pozadí varování"
|
infoWarnBg: "Pozadí varování"
|
||||||
infoWarnFg: "Text varování"
|
infoWarnFg: "Text varování"
|
||||||
|
cwBg: "Pozadí CW tlačítka"
|
||||||
|
cwFg: "Text CW tlačítka"
|
||||||
|
cwHoverBg: "Pozadí CW tlačítka (Hover)"
|
||||||
toastBg: "Pozadí oznámení"
|
toastBg: "Pozadí oznámení"
|
||||||
toastFg: "Text oznámení"
|
toastFg: "Text oznámení"
|
||||||
buttonBg: "Pozadí tlačítka"
|
buttonBg: "Pozadí tlačítka"
|
||||||
buttonHoverBg: "Pozadí tlačítka (Hover)"
|
buttonHoverBg: "Pozadí tlačítka (Hover)"
|
||||||
inputBorder: "Ohraničení vstupního pole"
|
inputBorder: "Ohraničení vstupního pole"
|
||||||
|
listItemHoverBg: "Pozadí položky seznamu (Hover)"
|
||||||
driveFolderBg: "Pozadí složky disku"
|
driveFolderBg: "Pozadí složky disku"
|
||||||
wallpaperOverlay: "Překrytí tapety"
|
wallpaperOverlay: "Překrytí tapety"
|
||||||
badge: "Odznak"
|
badge: "Odznak"
|
||||||
@@ -1643,6 +1643,10 @@ _sfx:
|
|||||||
note: "Poznámky"
|
note: "Poznámky"
|
||||||
noteMy: "Moje poznámka"
|
noteMy: "Moje poznámka"
|
||||||
notification: "Oznámení"
|
notification: "Oznámení"
|
||||||
|
chat: "Zprávy"
|
||||||
|
chatBg: "Chat (Pozadí)"
|
||||||
|
antenna: "Antény"
|
||||||
|
channel: "Oznámení kanálu"
|
||||||
_ago:
|
_ago:
|
||||||
future: "Budoucí"
|
future: "Budoucí"
|
||||||
justNow: "Teď"
|
justNow: "Teď"
|
||||||
@@ -1659,11 +1663,23 @@ _time:
|
|||||||
minute: "Minut"
|
minute: "Minut"
|
||||||
hour: "Hodin"
|
hour: "Hodin"
|
||||||
day: "Dnů"
|
day: "Dnů"
|
||||||
|
_timelineTutorial:
|
||||||
|
title: "Jak používat Misskey"
|
||||||
|
step1_1: "Toto je \"časová osa\". Zde se chronologicky zobrazují všechny \"poznámky\" odeslané na {name}."
|
||||||
|
step1_2: "Existuje několik různých časových plánů. Například \"Domácí časová osa\" bude obsahovat poznámky uživatelů, které sledujete, a \"Místní časová osa\" bude obsahovat poznámky všech uživatelů {name}."
|
||||||
|
step2_1: "Zkusme zveřejnit poznámku. Můžete tak učinit stisknutím tlačítka s ikonou tužky."
|
||||||
|
step2_2: "Co takhle napsat sebepředstavení, nebo jen \"Ahoj {name}!\", pokud se vám nechce?"
|
||||||
|
step3_1: "Dokončil jsi svou první poznámku?"
|
||||||
|
step3_2: "Na časové ose by se nyní měla zobrazit vaše první poznámka."
|
||||||
|
step4_1: "K poznámkám můžete také připojit \"Reakce\"."
|
||||||
|
step4_2: "Chcete-li připojit reakci, stiskněte na poznámce znaménko \"+\" a vyberte emoji, kterým chcete reagovat."
|
||||||
_2fa:
|
_2fa:
|
||||||
alreadyRegistered: "Již jste zaregistrovali dvoufaktorové ověřovací zařízení."
|
alreadyRegistered: "Již jste zaregistrovali dvoufaktorové ověřovací zařízení."
|
||||||
registerTOTP: "Registrovat aplikaci autentizátoru"
|
registerTOTP: "Registrovat aplikaci autentizátoru"
|
||||||
|
passwordToTOTP: "Zadejte své heslo"
|
||||||
step1: "Nejprve si do zařízení nainstalujte aplikaci pro ověřování (například {a} nebo {b})."
|
step1: "Nejprve si do zařízení nainstalujte aplikaci pro ověřování (například {a} nebo {b})."
|
||||||
step2: "Poté naskenujte QR kód zobrazený na této obrazovce."
|
step2: "Poté naskenujte QR kód zobrazený na této obrazovce."
|
||||||
|
step2Click: "Kliknutím na tento QR kód můžete zaregistrovat 2FA do bezpečnostního klíče nebo aplikace autentizace telefonu."
|
||||||
step3Title: "Zadejte ověřovací kód"
|
step3Title: "Zadejte ověřovací kód"
|
||||||
step3: "Pro dokončení nastavení zadejte token poskytnutý vaší aplikací."
|
step3: "Pro dokončení nastavení zadejte token poskytnutý vaší aplikací."
|
||||||
step4: "Od této chvíle budou všechny budoucí pokusy o přihlášení vyžadovat tento přihlašovací token."
|
step4: "Od této chvíle budou všechny budoucí pokusy o přihlášení vyžadovat tento přihlašovací token."
|
||||||
@@ -1717,7 +1733,7 @@ _auth:
|
|||||||
shareAccessTitle: "Udělovat oprávnění k aplikacím"
|
shareAccessTitle: "Udělovat oprávnění k aplikacím"
|
||||||
shareAccess: "Chcete autorizovat \"{name}\" pro přístup k tomuto účtu?"
|
shareAccess: "Chcete autorizovat \"{name}\" pro přístup k tomuto účtu?"
|
||||||
shareAccessAsk: "Opravdu chcete této aplikaci povolit přístup k vašemu účtu?"
|
shareAccessAsk: "Opravdu chcete této aplikaci povolit přístup k vašemu účtu?"
|
||||||
permission: "{name} požaduje tato oprávnění"
|
permission: "{jméno} požaduje tato oprávnění"
|
||||||
permissionAsk: "Tato aplikace požaduje následující oprávnění"
|
permissionAsk: "Tato aplikace požaduje následující oprávnění"
|
||||||
pleaseGoBack: "Vraťte se prosím zpět do aplikace"
|
pleaseGoBack: "Vraťte se prosím zpět do aplikace"
|
||||||
callback: "Návrat k aplikaci"
|
callback: "Návrat k aplikaci"
|
||||||
@@ -1830,7 +1846,6 @@ _profile:
|
|||||||
_exportOrImport:
|
_exportOrImport:
|
||||||
allNotes: "Všechny poznámky"
|
allNotes: "Všechny poznámky"
|
||||||
favoritedNotes: "Oblíbené poznámky"
|
favoritedNotes: "Oblíbené poznámky"
|
||||||
clips: "Oříznout"
|
|
||||||
followingList: "Sledovaní"
|
followingList: "Sledovaní"
|
||||||
muteList: "Ztlumit"
|
muteList: "Ztlumit"
|
||||||
blockingList: "Zablokovat"
|
blockingList: "Zablokovat"
|
||||||
@@ -1887,6 +1902,9 @@ _pages:
|
|||||||
newPage: "Vytvořit novou stránku"
|
newPage: "Vytvořit novou stránku"
|
||||||
editPage: "Upravit stránku"
|
editPage: "Upravit stránku"
|
||||||
readPage: "Prohlížení zdroje této stránky"
|
readPage: "Prohlížení zdroje této stránky"
|
||||||
|
created: "Stránka byla úspěšně vytvořena"
|
||||||
|
updated: "Stránka byla úspěšně aktualizována"
|
||||||
|
deleted: "Stránka byla úspěšně smazána"
|
||||||
pageSetting: "Nastavení stránky"
|
pageSetting: "Nastavení stránky"
|
||||||
nameAlreadyExists: "Zadaná adresa URL stránky již existuje"
|
nameAlreadyExists: "Zadaná adresa URL stránky již existuje"
|
||||||
invalidNameTitle: "Zadaná adresa URL stránky je neplatná"
|
invalidNameTitle: "Zadaná adresa URL stránky je neplatná"
|
||||||
@@ -1938,7 +1956,7 @@ _notification:
|
|||||||
youGotMention: "{name} vás zmínil"
|
youGotMention: "{name} vás zmínil"
|
||||||
youGotReply: "{name} vám odpověděl"
|
youGotReply: "{name} vám odpověděl"
|
||||||
youGotQuote: "{name} vás citoval"
|
youGotQuote: "{name} vás citoval"
|
||||||
youRenoted: "Poznámka od {name}"
|
youRenoted: "Poznámka od {jméno}"
|
||||||
youWereFollowed: "Máte nového následovníka"
|
youWereFollowed: "Máte nového následovníka"
|
||||||
youReceivedFollowRequest: "Obdrželi jste žádost o sledování"
|
youReceivedFollowRequest: "Obdrželi jste žádost o sledování"
|
||||||
yourFollowRequestAccepted: "Vaše žádost o sledování byla přijata"
|
yourFollowRequestAccepted: "Vaše žádost o sledování byla přijata"
|
||||||
@@ -1958,7 +1976,6 @@ _notification:
|
|||||||
receiveFollowRequest: "Obdržené žádosti o sledování"
|
receiveFollowRequest: "Obdržené žádosti o sledování"
|
||||||
followRequestAccepted: "Přijaté žádosti o sledování"
|
followRequestAccepted: "Přijaté žádosti o sledování"
|
||||||
achievementEarned: "Úspěch odemčen"
|
achievementEarned: "Úspěch odemčen"
|
||||||
login: "Přihlásit se"
|
|
||||||
app: "Oznámení z propojených aplikací"
|
app: "Oznámení z propojených aplikací"
|
||||||
_actions:
|
_actions:
|
||||||
followBack: "vás začal sledovat zpět"
|
followBack: "vás začal sledovat zpět"
|
||||||
@@ -2006,6 +2023,7 @@ _webhookSettings:
|
|||||||
createWebhook: "Vytvořit Webhook"
|
createWebhook: "Vytvořit Webhook"
|
||||||
name: "Jméno"
|
name: "Jméno"
|
||||||
secret: "Tajné"
|
secret: "Tajné"
|
||||||
|
events: "Události Webhook"
|
||||||
active: "Zapnuto"
|
active: "Zapnuto"
|
||||||
_events:
|
_events:
|
||||||
follow: "Při sledování uživatele"
|
follow: "Při sledování uživatele"
|
||||||
@@ -2015,20 +2033,3 @@ _webhookSettings:
|
|||||||
renote: "Při renotaci poznámky"
|
renote: "Při renotaci poznámky"
|
||||||
reaction: "Při obdržení reakce"
|
reaction: "Při obdržení reakce"
|
||||||
mention: "Při zmínce"
|
mention: "Při zmínce"
|
||||||
_abuseReport:
|
|
||||||
_notificationRecipient:
|
|
||||||
_recipientType:
|
|
||||||
mail: "Email"
|
|
||||||
_moderationLogTypes:
|
|
||||||
suspend: "Zmrazit"
|
|
||||||
resetPassword: "Resetovat heslo"
|
|
||||||
createInvitation: "Vygenerovat pozvánku"
|
|
||||||
_reversi:
|
|
||||||
total: "Celkem"
|
|
||||||
_remoteLookupErrors:
|
|
||||||
_noSuchObject:
|
|
||||||
title: "Nenalezeno"
|
|
||||||
_search:
|
|
||||||
searchScopeAll: "Vše"
|
|
||||||
searchScopeLocal: "Místní"
|
|
||||||
searchScopeUser: "Upřesnit uživatele"
|
|
||||||
|
@@ -1,4 +1,2 @@
|
|||||||
---
|
---
|
||||||
_lang_: "Dansk"
|
_lang_: "Dansk"
|
||||||
headlineMisskey: ""
|
|
||||||
introMisskey: "ようこそ!Misskeyは、オープンソースの分散型マイクロブログサービスです。\n「ノート」を作成して、いま起こっていることを共有したり、あなたについて皆に発信しよう📡\n「リアクション」機能で、皆のノートに素早く反応を追加することもできます👍\n新しい世界を探検しよう🚀"
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@@ -104,6 +104,7 @@ clickToShow: "Κάντε κλικ για εμφάνιση"
|
|||||||
add: "Προσθέστε"
|
add: "Προσθέστε"
|
||||||
reaction: "Αντιδράσεις"
|
reaction: "Αντιδράσεις"
|
||||||
reactions: "Αντιδράσεις"
|
reactions: "Αντιδράσεις"
|
||||||
|
reactionSetting: "Αντιδράσεις για εμφάνιση στην επιλογή αντίδρασης"
|
||||||
reactionSettingDescription2: "Σύρετε για να αλλάξετε τη σειρά, κάντε κλικ για να διαγράψετε, πατήστε \"+\" για να προσθέσετε."
|
reactionSettingDescription2: "Σύρετε για να αλλάξετε τη σειρά, κάντε κλικ για να διαγράψετε, πατήστε \"+\" για να προσθέσετε."
|
||||||
rememberNoteVisibility: "Θυμήσου τις ρυθμίσεις ορατότητας σημειώματος"
|
rememberNoteVisibility: "Θυμήσου τις ρυθμίσεις ορατότητας σημειώματος"
|
||||||
attachCancel: "Διαγραφή αρχείου"
|
attachCancel: "Διαγραφή αρχείου"
|
||||||
@@ -227,6 +228,7 @@ userList: "Λίστες"
|
|||||||
about: "Πληροφορίες"
|
about: "Πληροφορίες"
|
||||||
moderator: "Συντονιστής"
|
moderator: "Συντονιστής"
|
||||||
moderation: "Συντονισμός"
|
moderation: "Συντονισμός"
|
||||||
|
cacheClear: "Εκκαθάριση προσωρινής μνήμης"
|
||||||
markAsReadAllNotifications: "Όλες οι ειδοποιήσεις διαβάστηκαν"
|
markAsReadAllNotifications: "Όλες οι ειδοποιήσεις διαβάστηκαν"
|
||||||
members: "Μέλη"
|
members: "Μέλη"
|
||||||
transfer: "Μεταφορά"
|
transfer: "Μεταφορά"
|
||||||
@@ -286,8 +288,6 @@ file: "Αρχεία"
|
|||||||
recommended: "Προτεινόμενα"
|
recommended: "Προτεινόμενα"
|
||||||
cannotUploadBecauseNoFreeSpace: "Το ανέβασμα απέτυχε λόγω ανεπαρκούς Αποθηκευτικού Χώρου"
|
cannotUploadBecauseNoFreeSpace: "Το ανέβασμα απέτυχε λόγω ανεπαρκούς Αποθηκευτικού Χώρου"
|
||||||
icon: "Εικονίδιο"
|
icon: "Εικονίδιο"
|
||||||
replies: "Απάντηση"
|
|
||||||
renotes: "Κοινοποίηση σημειώματος"
|
|
||||||
_email:
|
_email:
|
||||||
_follow:
|
_follow:
|
||||||
title: "Έχετε ένα νέο ακόλουθο"
|
title: "Έχετε ένα νέο ακόλουθο"
|
||||||
@@ -301,6 +301,10 @@ _theme:
|
|||||||
_sfx:
|
_sfx:
|
||||||
note: "Σημειώματα"
|
note: "Σημειώματα"
|
||||||
notification: "Ειδοποιήσεις"
|
notification: "Ειδοποιήσεις"
|
||||||
|
chat: "Συνομιλία"
|
||||||
|
chatBg: "Συνομιλία (Παρασκήνιο)"
|
||||||
|
antenna: "Αντένες"
|
||||||
|
channel: "Ειδοποιήσεις καναλιών"
|
||||||
_ago:
|
_ago:
|
||||||
future: "Μελλοντικό"
|
future: "Μελλοντικό"
|
||||||
justNow: "Μόλις τώρα"
|
justNow: "Μόλις τώρα"
|
||||||
@@ -354,7 +358,6 @@ _profile:
|
|||||||
username: "Όνομα μέλους"
|
username: "Όνομα μέλους"
|
||||||
_exportOrImport:
|
_exportOrImport:
|
||||||
allNotes: "Όλα τα σημειώματα"
|
allNotes: "Όλα τα σημειώματα"
|
||||||
clips: "Κλιπ"
|
|
||||||
followingList: "Ακολουθεί"
|
followingList: "Ακολουθεί"
|
||||||
muteList: "Μέλη σε σίγαση"
|
muteList: "Μέλη σε σίγαση"
|
||||||
blockingList: "Μπλοκαρισμένα μέλη"
|
blockingList: "Μπλοκαρισμένα μέλη"
|
||||||
@@ -378,7 +381,6 @@ _notification:
|
|||||||
renote: "Κοινοποίηση σημειώματος"
|
renote: "Κοινοποίηση σημειώματος"
|
||||||
quote: "Παράθεση"
|
quote: "Παράθεση"
|
||||||
reaction: "Αντιδράσεις"
|
reaction: "Αντιδράσεις"
|
||||||
login: "Σύνδεση"
|
|
||||||
_actions:
|
_actions:
|
||||||
reply: "Απάντηση"
|
reply: "Απάντηση"
|
||||||
renote: "Κοινοποίηση σημειώματος"
|
renote: "Κοινοποίηση σημειώματος"
|
||||||
@@ -393,9 +395,3 @@ _deck:
|
|||||||
mentions: "Επισημάνσεις"
|
mentions: "Επισημάνσεις"
|
||||||
_webhookSettings:
|
_webhookSettings:
|
||||||
name: "Όνομα"
|
name: "Όνομα"
|
||||||
_moderationLogTypes:
|
|
||||||
suspend: "Αποβολή"
|
|
||||||
_reversi:
|
|
||||||
total: "Σύνολο"
|
|
||||||
_search:
|
|
||||||
searchScopeLocal: "Τοπικό"
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -6,225 +6,68 @@ import ts from 'typescript';
|
|||||||
|
|
||||||
const __filename = fileURLToPath(import.meta.url);
|
const __filename = fileURLToPath(import.meta.url);
|
||||||
const __dirname = dirname(__filename);
|
const __dirname = dirname(__filename);
|
||||||
const parameterRegExp = /\{(\w+)\}/g;
|
|
||||||
|
|
||||||
function createMemberType(item) {
|
|
||||||
if (typeof item !== 'string') {
|
|
||||||
return ts.factory.createTypeLiteralNode(createMembers(item));
|
|
||||||
}
|
|
||||||
const parameters = Array.from(
|
|
||||||
item.matchAll(parameterRegExp),
|
|
||||||
([, parameter]) => parameter,
|
|
||||||
);
|
|
||||||
return parameters.length
|
|
||||||
? ts.factory.createTypeReferenceNode(
|
|
||||||
ts.factory.createIdentifier('ParameterizedString'),
|
|
||||||
[
|
|
||||||
ts.factory.createUnionTypeNode(
|
|
||||||
parameters.map((parameter) =>
|
|
||||||
ts.factory.createStringLiteral(parameter),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
: ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword);
|
|
||||||
}
|
|
||||||
|
|
||||||
function createMembers(record) {
|
function createMembers(record) {
|
||||||
return Object.entries(record).map(([k, v]) => {
|
return Object.entries(record)
|
||||||
const node = ts.factory.createPropertySignature(
|
.map(([k, v]) => ts.factory.createPropertySignature(
|
||||||
undefined,
|
undefined,
|
||||||
ts.factory.createStringLiteral(k),
|
ts.factory.createStringLiteral(k),
|
||||||
undefined,
|
undefined,
|
||||||
createMemberType(v),
|
typeof v === 'string'
|
||||||
);
|
? ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword)
|
||||||
if (typeof v === 'string') {
|
: ts.factory.createTypeLiteralNode(createMembers(v)),
|
||||||
ts.addSyntheticLeadingComment(
|
));
|
||||||
node,
|
|
||||||
ts.SyntaxKind.MultiLineCommentTrivia,
|
|
||||||
`*
|
|
||||||
* ${v.replace(/\n/g, '\n * ')}
|
|
||||||
`,
|
|
||||||
true,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return node;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function generateDTS() {
|
export default function generateDTS() {
|
||||||
const locale = yaml.load(fs.readFileSync(`${__dirname}/ja-JP.yml`, 'utf-8'));
|
const locale = yaml.load(fs.readFileSync(`${__dirname}/ja-JP.yml`, 'utf-8'));
|
||||||
const members = createMembers(locale);
|
const members = createMembers(locale);
|
||||||
const elements = [
|
const elements = [
|
||||||
ts.factory.createVariableStatement(
|
|
||||||
[ts.factory.createToken(ts.SyntaxKind.DeclareKeyword)],
|
|
||||||
ts.factory.createVariableDeclarationList(
|
|
||||||
[
|
|
||||||
ts.factory.createVariableDeclaration(
|
|
||||||
ts.factory.createIdentifier('kParameters'),
|
|
||||||
undefined,
|
|
||||||
ts.factory.createTypeOperatorNode(
|
|
||||||
ts.SyntaxKind.UniqueKeyword,
|
|
||||||
ts.factory.createKeywordTypeNode(ts.SyntaxKind.SymbolKeyword),
|
|
||||||
),
|
|
||||||
undefined,
|
|
||||||
),
|
|
||||||
],
|
|
||||||
ts.NodeFlags.Const,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
ts.factory.createInterfaceDeclaration(
|
|
||||||
[ts.factory.createToken(ts.SyntaxKind.ExportKeyword)],
|
|
||||||
ts.factory.createIdentifier('ParameterizedString'),
|
|
||||||
[
|
|
||||||
ts.factory.createTypeParameterDeclaration(
|
|
||||||
undefined,
|
|
||||||
ts.factory.createIdentifier('T'),
|
|
||||||
ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),
|
|
||||||
ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
undefined,
|
|
||||||
[
|
|
||||||
ts.factory.createPropertySignature(
|
|
||||||
undefined,
|
|
||||||
ts.factory.createComputedPropertyName(
|
|
||||||
ts.factory.createIdentifier('kParameters'),
|
|
||||||
),
|
|
||||||
undefined,
|
|
||||||
ts.factory.createTypeReferenceNode(
|
|
||||||
ts.factory.createIdentifier('T'),
|
|
||||||
undefined,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
ts.factory.createInterfaceDeclaration(
|
|
||||||
[ts.factory.createToken(ts.SyntaxKind.ExportKeyword)],
|
|
||||||
ts.factory.createIdentifier('ILocale'),
|
|
||||||
undefined,
|
|
||||||
undefined,
|
|
||||||
[
|
|
||||||
ts.factory.createIndexSignature(
|
|
||||||
undefined,
|
|
||||||
[
|
|
||||||
ts.factory.createParameterDeclaration(
|
|
||||||
undefined,
|
|
||||||
undefined,
|
|
||||||
ts.factory.createIdentifier('_'),
|
|
||||||
undefined,
|
|
||||||
ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),
|
|
||||||
undefined,
|
|
||||||
),
|
|
||||||
],
|
|
||||||
ts.factory.createUnionTypeNode([
|
|
||||||
ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),
|
|
||||||
ts.factory.createTypeReferenceNode(
|
|
||||||
ts.factory.createIdentifier('ParameterizedString'),
|
|
||||||
),
|
|
||||||
ts.factory.createTypeReferenceNode(
|
|
||||||
ts.factory.createIdentifier('ILocale'),
|
|
||||||
undefined,
|
|
||||||
),
|
|
||||||
]),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
ts.factory.createInterfaceDeclaration(
|
ts.factory.createInterfaceDeclaration(
|
||||||
[ts.factory.createToken(ts.SyntaxKind.ExportKeyword)],
|
[ts.factory.createToken(ts.SyntaxKind.ExportKeyword)],
|
||||||
ts.factory.createIdentifier('Locale'),
|
ts.factory.createIdentifier('Locale'),
|
||||||
undefined,
|
undefined,
|
||||||
[
|
|
||||||
ts.factory.createHeritageClause(ts.SyntaxKind.ExtendsKeyword, [
|
|
||||||
ts.factory.createExpressionWithTypeArguments(
|
|
||||||
ts.factory.createIdentifier('ILocale'),
|
|
||||||
undefined,
|
undefined,
|
||||||
),
|
|
||||||
]),
|
|
||||||
],
|
|
||||||
members,
|
members,
|
||||||
),
|
),
|
||||||
ts.factory.createVariableStatement(
|
ts.factory.createVariableStatement(
|
||||||
[ts.factory.createToken(ts.SyntaxKind.DeclareKeyword)],
|
[ts.factory.createToken(ts.SyntaxKind.DeclareKeyword)],
|
||||||
ts.factory.createVariableDeclarationList(
|
ts.factory.createVariableDeclarationList(
|
||||||
[
|
[ts.factory.createVariableDeclaration(
|
||||||
ts.factory.createVariableDeclaration(
|
|
||||||
ts.factory.createIdentifier('locales'),
|
ts.factory.createIdentifier('locales'),
|
||||||
undefined,
|
undefined,
|
||||||
ts.factory.createTypeLiteralNode([
|
ts.factory.createTypeLiteralNode([ts.factory.createIndexSignature(
|
||||||
ts.factory.createIndexSignature(
|
|
||||||
undefined,
|
undefined,
|
||||||
[
|
[ts.factory.createParameterDeclaration(
|
||||||
ts.factory.createParameterDeclaration(
|
|
||||||
undefined,
|
undefined,
|
||||||
undefined,
|
undefined,
|
||||||
ts.factory.createIdentifier('lang'),
|
ts.factory.createIdentifier('lang'),
|
||||||
undefined,
|
undefined,
|
||||||
ts.factory.createKeywordTypeNode(
|
ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),
|
||||||
ts.SyntaxKind.StringKeyword,
|
|
||||||
),
|
|
||||||
undefined,
|
undefined,
|
||||||
),
|
)],
|
||||||
],
|
|
||||||
ts.factory.createTypeReferenceNode(
|
ts.factory.createTypeReferenceNode(
|
||||||
ts.factory.createIdentifier('Locale'),
|
ts.factory.createIdentifier('Locale'),
|
||||||
undefined,
|
undefined,
|
||||||
),
|
),
|
||||||
),
|
)]),
|
||||||
]),
|
|
||||||
undefined,
|
undefined,
|
||||||
|
)],
|
||||||
|
ts.NodeFlags.Const | ts.NodeFlags.Ambient | ts.NodeFlags.ContextFlags,
|
||||||
),
|
),
|
||||||
],
|
|
||||||
ts.NodeFlags.Const,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
ts.factory.createFunctionDeclaration(
|
|
||||||
[ts.factory.createModifier(ts.SyntaxKind.ExportKeyword)],
|
|
||||||
undefined,
|
|
||||||
ts.factory.createIdentifier('build'),
|
|
||||||
undefined,
|
|
||||||
[],
|
|
||||||
ts.factory.createTypeReferenceNode(
|
|
||||||
ts.factory.createIdentifier('Locale'),
|
|
||||||
undefined,
|
|
||||||
),
|
|
||||||
undefined,
|
|
||||||
),
|
),
|
||||||
ts.factory.createExportDefault(ts.factory.createIdentifier('locales')),
|
ts.factory.createExportDefault(ts.factory.createIdentifier('locales')),
|
||||||
];
|
];
|
||||||
ts.addSyntheticLeadingComment(
|
const printed = ts.createPrinter({
|
||||||
elements[0],
|
|
||||||
ts.SyntaxKind.MultiLineCommentTrivia,
|
|
||||||
' eslint-disable ',
|
|
||||||
true,
|
|
||||||
);
|
|
||||||
ts.addSyntheticLeadingComment(
|
|
||||||
elements[0],
|
|
||||||
ts.SyntaxKind.SingleLineCommentTrivia,
|
|
||||||
' This file is generated by locales/generateDTS.js',
|
|
||||||
true,
|
|
||||||
);
|
|
||||||
ts.addSyntheticLeadingComment(
|
|
||||||
elements[0],
|
|
||||||
ts.SyntaxKind.SingleLineCommentTrivia,
|
|
||||||
' Do not edit this file directly.',
|
|
||||||
true,
|
|
||||||
);
|
|
||||||
const printed = ts
|
|
||||||
.createPrinter({
|
|
||||||
newLine: ts.NewLineKind.LineFeed,
|
newLine: ts.NewLineKind.LineFeed,
|
||||||
})
|
}).printList(
|
||||||
.printList(
|
|
||||||
ts.ListFormat.MultiLine,
|
ts.ListFormat.MultiLine,
|
||||||
ts.factory.createNodeArray(elements),
|
ts.factory.createNodeArray(elements),
|
||||||
ts.createSourceFile(
|
ts.createSourceFile('index.d.ts', '', ts.ScriptTarget.ESNext, true, ts.ScriptKind.TS),
|
||||||
'index.d.ts',
|
|
||||||
'',
|
|
||||||
ts.ScriptTarget.ESNext,
|
|
||||||
true,
|
|
||||||
ts.ScriptKind.TS,
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
fs.writeFileSync(`${__dirname}/index.d.ts`, printed, 'utf-8');
|
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,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
_lang_: "Magyar"
|
_lang_: "Japán"
|
||||||
monthAndDay: "{month}.{day}."
|
monthAndDay: "{month}.{day}."
|
||||||
search: "Keresés"
|
search: "Keresés"
|
||||||
notifications: "Értesítések"
|
notifications: "Értesítések"
|
||||||
@@ -77,7 +77,6 @@ smtpUser: "Felhasználónév"
|
|||||||
smtpPass: "Jelszó"
|
smtpPass: "Jelszó"
|
||||||
user: "Felhasználók"
|
user: "Felhasználók"
|
||||||
searchByGoogle: "Keresés"
|
searchByGoogle: "Keresés"
|
||||||
renotes: "Renote"
|
|
||||||
_theme:
|
_theme:
|
||||||
keys:
|
keys:
|
||||||
renote: "Renote"
|
renote: "Renote"
|
||||||
@@ -96,7 +95,6 @@ _notification:
|
|||||||
renote: "Renote"
|
renote: "Renote"
|
||||||
quote: "Idézet"
|
quote: "Idézet"
|
||||||
reaction: "Reakciók"
|
reaction: "Reakciók"
|
||||||
login: "Bejelentkezés"
|
|
||||||
_actions:
|
_actions:
|
||||||
renote: "Renote"
|
renote: "Renote"
|
||||||
_deck:
|
_deck:
|
||||||
|
File diff suppressed because it is too large
Load Diff
9091
locales/index.d.ts
vendored
9091
locales/index.d.ts
vendored
File diff suppressed because it is too large
Load Diff
@@ -15,7 +15,6 @@ const merge = (...args) => args.reduce((a, c) => ({
|
|||||||
|
|
||||||
const languages = [
|
const languages = [
|
||||||
'ar-SA',
|
'ar-SA',
|
||||||
'ca-ES',
|
|
||||||
'cs-CZ',
|
'cs-CZ',
|
||||||
'da-DK',
|
'da-DK',
|
||||||
'de-DE',
|
'de-DE',
|
||||||
@@ -52,28 +51,10 @@ const primaries = {
|
|||||||
// 何故か文字列にバックスペース文字が混入することがあり、YAMLが壊れるので取り除く
|
// 何故か文字列にバックスペース文字が混入することがあり、YAMLが壊れるので取り除く
|
||||||
const clean = (text) => text.replace(new RegExp(String.fromCodePoint(0x08), 'g'), '');
|
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), {});
|
||||||
// vitestの挙動を調整するため、一度ローカル変数化する必要がある
|
|
||||||
// https://github.com/vitest-dev/vitest/issues/3988#issuecomment-1686599577
|
|
||||||
// https://github.com/misskey-dev/misskey/pull/14057#issuecomment-2192833785
|
|
||||||
const metaUrl = import.meta.url;
|
|
||||||
const locales = languages.reduce((a, c) => (a[c] = yaml.load(clean(fs.readFileSync(new URL(`${c}.yml`, metaUrl), 'utf-8'))) || {}, a), {});
|
|
||||||
|
|
||||||
// 空文字列が入ることがあり、フォールバックが動作しなくなるのでプロパティごと消す
|
export default Object.entries(locales)
|
||||||
const removeEmpty = (obj) => {
|
.reduce((a, [k ,v]) => (a[k] = (() => {
|
||||||
for (const [k, v] of Object.entries(obj)) {
|
|
||||||
if (v === '') {
|
|
||||||
delete obj[k];
|
|
||||||
} else if (typeof v === 'object') {
|
|
||||||
removeEmpty(v);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return obj;
|
|
||||||
};
|
|
||||||
removeEmpty(locales);
|
|
||||||
|
|
||||||
return Object.entries(locales)
|
|
||||||
.reduce((a, [k, v]) => (a[k] = (() => {
|
|
||||||
const [lang] = k.split('-');
|
const [lang] = k.split('-');
|
||||||
switch (k) {
|
switch (k) {
|
||||||
case 'ja-JP': return v;
|
case 'ja-JP': return v;
|
||||||
@@ -82,11 +63,8 @@ export function build() {
|
|||||||
default: return merge(
|
default: return merge(
|
||||||
locales['ja-JP'],
|
locales['ja-JP'],
|
||||||
locales['en-US'],
|
locales['en-US'],
|
||||||
locales[`${lang}-${primaries[lang]}`] ?? {},
|
locales[`${lang}-${primaries[lang]}`] || {},
|
||||||
v
|
v
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
})(), a), {});
|
})(), a), {});
|
||||||
}
|
|
||||||
|
|
||||||
export default build();
|
|
||||||
|
1242
locales/it-IT.yml
1242
locales/it-IT.yml
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
1266
locales/ja-KS.yml
1266
locales/ja-KS.yml
File diff suppressed because it is too large
Load Diff
@@ -56,7 +56,6 @@ accounts: "Imiḍan"
|
|||||||
searchByGoogle: "Nadi"
|
searchByGoogle: "Nadi"
|
||||||
file: "Ifuyla"
|
file: "Ifuyla"
|
||||||
account: "Imiḍan"
|
account: "Imiḍan"
|
||||||
replies: "Err"
|
|
||||||
_email:
|
_email:
|
||||||
_follow:
|
_follow:
|
||||||
title: "Yeṭṭafaṛ-ik·em-id"
|
title: "Yeṭṭafaṛ-ik·em-id"
|
||||||
@@ -104,7 +103,3 @@ _deck:
|
|||||||
_columns:
|
_columns:
|
||||||
notifications: "Ilɣuyen"
|
notifications: "Ilɣuyen"
|
||||||
list: "Tibdarin"
|
list: "Tibdarin"
|
||||||
_abuseReport:
|
|
||||||
_notificationRecipient:
|
|
||||||
_recipientType:
|
|
||||||
mail: "Imayl"
|
|
||||||
|
@@ -61,7 +61,6 @@ smtpPass: "ಗುಪ್ತಪದ"
|
|||||||
user: "ಬಳಕೆದಾರ"
|
user: "ಬಳಕೆದಾರ"
|
||||||
searchByGoogle: "ಹುಡುಕು"
|
searchByGoogle: "ಹುಡುಕು"
|
||||||
file: "ಕಡತಗಳು"
|
file: "ಕಡತಗಳು"
|
||||||
replies: "ಉತ್ತರಿಸು"
|
|
||||||
_email:
|
_email:
|
||||||
_follow:
|
_follow:
|
||||||
title: "ಹಿಂಬಾಲಿಸಿದರು"
|
title: "ಹಿಂಬಾಲಿಸಿದರು"
|
||||||
@@ -77,8 +76,6 @@ _profile:
|
|||||||
username: "ಬಳಕೆಹೆಸರು"
|
username: "ಬಳಕೆಹೆಸರು"
|
||||||
_notification:
|
_notification:
|
||||||
youWereFollowed: "ಹಿಂಬಾಲಿಸಿದರು"
|
youWereFollowed: "ಹಿಂಬಾಲಿಸಿದರು"
|
||||||
_types:
|
|
||||||
login: "ಪ್ರವೇಶ"
|
|
||||||
_actions:
|
_actions:
|
||||||
reply: "ಉತ್ತರಿಸು"
|
reply: "ಉತ್ತರಿಸು"
|
||||||
_deck:
|
_deck:
|
||||||
|
@@ -1,848 +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: "붙임 빼기"
|
|
||||||
deleteFile: "파일 뭉캐기"
|
|
||||||
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: "맨걸기"
|
|
||||||
invite: "초대하기"
|
|
||||||
driveCapacityPerLocalAccount: "로컬 사용자 하나마중 드라이브 커기"
|
|
||||||
driveCapacityPerRemoteAccount: "웬겍 사용자 하나마중 드라이브 커기"
|
|
||||||
inMb: "메가바이트 단이"
|
|
||||||
bannerUrl: "배너 이미지 주소"
|
|
||||||
backgroundImageUrl: "배겡 이미지 주소"
|
|
||||||
basicInfo: "기본 정보"
|
|
||||||
pinnedUsers: "붙인 사용자"
|
|
||||||
pinnedUsersDescription: "‘살펴보기’서 붙일라넌 사용자럴 줄 바꿈해서로 적십니다."
|
|
||||||
pinnedPages: "붙인 바닥"
|
|
||||||
pinnedPagesDescription: "서버으 대문서 붙일라넌 바닥으 겡로럴 줄 바꿈해서로 적십니다."
|
|
||||||
pinnedClipId: "붙일 클립으 아이디"
|
|
||||||
pinnedNotes: "붙인 노트"
|
|
||||||
hcaptcha: "에이치캡차"
|
|
||||||
enableHcaptcha: "에이치캡차 키기"
|
|
||||||
hcaptchaSiteKey: "사이트키"
|
|
||||||
hcaptchaSecretKey: "시크릿키"
|
|
||||||
mcaptchaSiteKey: "사이트키"
|
|
||||||
mcaptchaSecretKey: "시크릿키"
|
|
||||||
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: "학인하고 잇십니다"
|
|
||||||
tooShort: "억수로 짜립니다"
|
|
||||||
tooLong: "억수로 집니다"
|
|
||||||
passwordMatched: "맞십니다"
|
|
||||||
passwordNotMatched: "안 맞십니다"
|
|
||||||
signinWith: "{x} 서 로그인"
|
|
||||||
signinFailed: "로그인 몬 했십니다. 고 이름이랑 비밀번호 제대로 썼는가 확인해 주이소."
|
|
||||||
or: "아니면"
|
|
||||||
language: "언어"
|
|
||||||
uiLanguage: "UI 표시 언어"
|
|
||||||
aboutX: "{x}에 대해서"
|
|
||||||
emojiStyle: "이모지 모양"
|
|
||||||
native: "기본"
|
|
||||||
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넌 비아 두고 다런 것언 거 서비스으 엔드포인트럴 서 주이소. ‘<host>’나 ‘<host>:<port>’맨치로 섭니다."
|
|
||||||
objectStorageRegion: "Region"
|
|
||||||
objectStorageRegionDesc: "‘xx-east-1’맨치로 리전 이럼얼 서 주이소. 설 서비스에 리전 개넴이 어ᇝ어먼 ‘us-east-1’라고 해 두이소. 에이더블유에스 설정 파일이나 환겡 벤수가 이ᇇ어면 비아 두이소."
|
|
||||||
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: "옇은 릴레이"
|
|
||||||
deletedNote: "뭉캔 걸"
|
|
||||||
enableInfiniteScroll: "알아서 더 보기"
|
|
||||||
useCw: "내용 수ᇚ후기"
|
|
||||||
description: "설멩"
|
|
||||||
describeFile: "캡션 옇기"
|
|
||||||
enterFileDescription: "캡션 서기"
|
|
||||||
author: "맨던 사람"
|
|
||||||
manage: "간리"
|
|
||||||
large: "커게"
|
|
||||||
medium: "엔갆게"
|
|
||||||
small: "쪼맪게"
|
|
||||||
emailServer: "전자우펜 서버"
|
|
||||||
email: "전자우펜"
|
|
||||||
emailAddress: "전자우펜 주소"
|
|
||||||
smtpHost: "호스트 이럼"
|
|
||||||
smtpPort: "포트"
|
|
||||||
smtpUser: "사용자 이럼"
|
|
||||||
smtpPass: "비밀번호"
|
|
||||||
display: "보기"
|
|
||||||
create: "맨걸기"
|
|
||||||
abuseReports: "신고하기"
|
|
||||||
reportAbuse: "신고하기"
|
|
||||||
reportAbuseRenote: "리노트 신고하기"
|
|
||||||
reportAbuseOf: "{name}님얼 신고하기"
|
|
||||||
reporter: "신고한 사람"
|
|
||||||
reporteeOrigin: "신고덴 사람"
|
|
||||||
reporterOrigin: "신고한 곳"
|
|
||||||
waitingFor: "{x}(얼)럴 지달리고 잇십니다"
|
|
||||||
random: "무작이"
|
|
||||||
system: "시스템"
|
|
||||||
clip: "클립 맨걸기"
|
|
||||||
createNew: "새로 맨걸기"
|
|
||||||
notesCount: "노트 수"
|
|
||||||
renotesCount: "리노트한 수"
|
|
||||||
renotedCount: "리노트덴 수"
|
|
||||||
followingCount: "팔로우 수"
|
|
||||||
followersCount: "팔로워 수"
|
|
||||||
noteFavoritesCount: "질겨찾기한 노트 수"
|
|
||||||
clips: "클립 맨걸기"
|
|
||||||
clearCache: "캐시 비우기"
|
|
||||||
nUsers: "{n} 사용자"
|
|
||||||
typingUsers: "{users} 님이 서고 잇어예"
|
|
||||||
unlikeConfirm: "좋네예럴 무룹니꺼?"
|
|
||||||
info: "정보"
|
|
||||||
selectAccount: "계정 개리기"
|
|
||||||
user: "사용자"
|
|
||||||
administration: "간리"
|
|
||||||
middle: "엔갆게"
|
|
||||||
translatedFrom: "{x}서 번옉"
|
|
||||||
on: "킴"
|
|
||||||
off: "껌"
|
|
||||||
hide: "수ᇚ후기"
|
|
||||||
clickToFinishEmailVerification: "[{ok}]럴 누질라서 전자우펜 정멩얼 껕내이소."
|
|
||||||
searchByGoogle: "찾기"
|
|
||||||
tenMinutes: "십 분"
|
|
||||||
oneHour: "한 시간"
|
|
||||||
oneDay: "하리"
|
|
||||||
oneWeek: "한 주"
|
|
||||||
oneMonth: "한 달"
|
|
||||||
file: "파일"
|
|
||||||
typeToConfirm: "게속할라먼 {x}럴 누질라 주이소"
|
|
||||||
pleaseSelect: "개리 주이소"
|
|
||||||
remoteOnly: "웬겍만"
|
|
||||||
tools: "도구"
|
|
||||||
like: "좋네예!"
|
|
||||||
unlike: "좋네예 무루기"
|
|
||||||
numberOfLikes: "좋네예 수"
|
|
||||||
show: "보기"
|
|
||||||
roles: "옉할"
|
|
||||||
role: "옉할"
|
|
||||||
noRole: "옉할이 어ᇝ십니다"
|
|
||||||
thisPostMayBeAnnoyingCancel: "아이예"
|
|
||||||
likeOnly: "좋네예마"
|
|
||||||
hiddenTags: "수ᇚ훈 해시태그"
|
|
||||||
myClips: "내 클립"
|
|
||||||
preservedUsernames: "예약 사용자 이럼"
|
|
||||||
specifyUser: "사용자 지정"
|
|
||||||
icon: "아바타"
|
|
||||||
replies: "답하기"
|
|
||||||
renotes: "리노트"
|
|
||||||
attach: "옇기"
|
|
||||||
surrender: "아이예"
|
|
||||||
_delivery:
|
|
||||||
stop: "고만 보내예"
|
|
||||||
_type:
|
|
||||||
none: "보내고 잇어예"
|
|
||||||
_initialAccountSetting:
|
|
||||||
startTutorial: "길라잡이 하기"
|
|
||||||
_initialTutorial:
|
|
||||||
launchTutorial: "길라잡이 보기"
|
|
||||||
title: "길라잡이"
|
|
||||||
skipAreYouSure: "길라잡이럴 껕냅니까?"
|
|
||||||
_landing:
|
|
||||||
title: "길라잡이에 어서 오이소"
|
|
||||||
_done:
|
|
||||||
title: "길라잡이가 껕낫십니다!🎉"
|
|
||||||
_achievements:
|
|
||||||
_types:
|
|
||||||
_notes1:
|
|
||||||
description: "첫 노트럴 섯어예"
|
|
||||||
_notes10:
|
|
||||||
description: "노트럴 10번 섰어예"
|
|
||||||
_notes100:
|
|
||||||
description: "노트럴 100번 섰어예"
|
|
||||||
_notes500:
|
|
||||||
description: "노트럴 500번 섰어예"
|
|
||||||
_notes1000:
|
|
||||||
description: "노트럴 1,000번 섰어예"
|
|
||||||
_notes5000:
|
|
||||||
description: "노트럴 5,000번 섰어예"
|
|
||||||
_notes10000:
|
|
||||||
description: "노트럴 10,000번 섰어예"
|
|
||||||
_notes20000:
|
|
||||||
description: "노트럴 20,000번 섰어예"
|
|
||||||
_notes30000:
|
|
||||||
description: "노트럴 30,000번 섰어예"
|
|
||||||
_notes40000:
|
|
||||||
description: "노트럴 40,000번 섰어예"
|
|
||||||
_notes50000:
|
|
||||||
description: "노트럴 50,000번 섰어예"
|
|
||||||
_notes60000:
|
|
||||||
description: "노트럴 60,000번 섰어예"
|
|
||||||
_notes70000:
|
|
||||||
description: "노트럴 70,000번 섰어예"
|
|
||||||
_notes80000:
|
|
||||||
description: "노트럴 80,000번 섰어예"
|
|
||||||
_notes90000:
|
|
||||||
description: "노트럴 90,000번 섰어예"
|
|
||||||
_notes100000:
|
|
||||||
description: "노트럴 100,000번 섰어예"
|
|
||||||
_noteClipped1:
|
|
||||||
description: "첫 노트럴 클립햇어예"
|
|
||||||
_noteFavorited1:
|
|
||||||
description: "첫 노트럴 질겨찾기에 담앗어예"
|
|
||||||
_myNoteFavorited1:
|
|
||||||
description: "다런 사람이 내 노트럴 질겨찾기에 담앗십니다"
|
|
||||||
_iLoveMisskey:
|
|
||||||
description: "“I ❤ #Misskey”럴 섰어예"
|
|
||||||
_postedAt0min0sec:
|
|
||||||
description: "0분 0초에 노트를 섰어예"
|
|
||||||
_tutorialCompleted:
|
|
||||||
description: "길라잡이럴 껕냇십니다"
|
|
||||||
_role:
|
|
||||||
displayOrder: "보기 순서"
|
|
||||||
_priority:
|
|
||||||
middle: "엔갆게"
|
|
||||||
_options:
|
|
||||||
canHideAds: "강고 수ᇚ후기"
|
|
||||||
_condition:
|
|
||||||
isRemote: "웬겍 사용자"
|
|
||||||
isCat: "갱이 사용자"
|
|
||||||
isBot: "자동 사용자"
|
|
||||||
_gallery:
|
|
||||||
my: "내 걸"
|
|
||||||
liked: "좋네예한 걸"
|
|
||||||
like: "좋네예!"
|
|
||||||
unlike: "좋네예 무루기"
|
|
||||||
_email:
|
|
||||||
_follow:
|
|
||||||
title: "새 팔로워가 잇십니다"
|
|
||||||
_serverDisconnectedBehavior:
|
|
||||||
reload: "알아서 새로곤침"
|
|
||||||
_channel:
|
|
||||||
removeBanner: "배너 뭉캐기"
|
|
||||||
usersCount: "{n}명 참여"
|
|
||||||
notesCount: "노트 {n}개"
|
|
||||||
_menuDisplay:
|
|
||||||
hide: "수ᇚ후기"
|
|
||||||
_theme:
|
|
||||||
description: "설멩"
|
|
||||||
keys:
|
|
||||||
mention: "멘션"
|
|
||||||
_sfx:
|
|
||||||
note: "새 노트"
|
|
||||||
notification: "알림"
|
|
||||||
reaction: "리액션 개리기"
|
|
||||||
_2fa:
|
|
||||||
step3Title: "학인 기호럴 서기"
|
|
||||||
renewTOTPCancel: "뎃어예"
|
|
||||||
_permissions:
|
|
||||||
"read:favorites": "질겨찾기 보기"
|
|
||||||
"write:favorites": "질겨찾기 곤치기"
|
|
||||||
_widgets:
|
|
||||||
profile: "프로필"
|
|
||||||
instanceInfo: "서버 정보"
|
|
||||||
notifications: "알림"
|
|
||||||
timeline: "타임라인"
|
|
||||||
activity: "할동"
|
|
||||||
federation: "옌합"
|
|
||||||
jobQueue: "작업 대기옐"
|
|
||||||
_userList:
|
|
||||||
chooseList: "리스트 개리기"
|
|
||||||
_cw:
|
|
||||||
hide: "수ᇚ후기"
|
|
||||||
show: "더 볼래예"
|
|
||||||
chars: "걸자 {count}개"
|
|
||||||
files: "파일 {count}개"
|
|
||||||
_visibility:
|
|
||||||
home: "덜머리"
|
|
||||||
followers: "팔로워"
|
|
||||||
_postForm:
|
|
||||||
_placeholders:
|
|
||||||
e: "옇다 서 주이소"
|
|
||||||
_profile:
|
|
||||||
name: "이럼"
|
|
||||||
username: "사용자 이럼"
|
|
||||||
_exportOrImport:
|
|
||||||
favoritedNotes: "질겨찾기한 노트"
|
|
||||||
clips: "클립 맨걸기"
|
|
||||||
followingList: "팔로잉"
|
|
||||||
muteList: "수ᇚ후기"
|
|
||||||
blockingList: "차단하기"
|
|
||||||
userLists: "리스트"
|
|
||||||
_charts:
|
|
||||||
federation: "옌합"
|
|
||||||
_timelines:
|
|
||||||
home: "덜머리"
|
|
||||||
_play:
|
|
||||||
my: "내 플레이"
|
|
||||||
script: "스크립트"
|
|
||||||
summary: "설멩"
|
|
||||||
_pages:
|
|
||||||
like: "좋네예"
|
|
||||||
unlike: "좋네예 무루기"
|
|
||||||
my: "내 페이지"
|
|
||||||
blocks:
|
|
||||||
image: "이미지"
|
|
||||||
_note:
|
|
||||||
id: "노트 아이디"
|
|
||||||
_notification:
|
|
||||||
youWereFollowed: "새 팔로워가 잇십니다"
|
|
||||||
newNote: "새 걸"
|
|
||||||
_types:
|
|
||||||
follow: "팔로잉"
|
|
||||||
mention: "멘션"
|
|
||||||
renote: "리노트"
|
|
||||||
quote: "따오기"
|
|
||||||
reaction: "반엉"
|
|
||||||
login: "로그인"
|
|
||||||
_actions:
|
|
||||||
reply: "답하기"
|
|
||||||
renote: "리노트"
|
|
||||||
_deck:
|
|
||||||
_columns:
|
|
||||||
notifications: "알림"
|
|
||||||
tl: "타임라인"
|
|
||||||
antenna: "안테나"
|
|
||||||
list: "리스트"
|
|
||||||
mentions: "받언 멘션"
|
|
||||||
_webhookSettings:
|
|
||||||
name: "이럼"
|
|
||||||
_abuseReport:
|
|
||||||
_notificationRecipient:
|
|
||||||
_recipientType:
|
|
||||||
mail: "전자우펜"
|
|
||||||
_moderationLogTypes:
|
|
||||||
suspend: "얼우기"
|
|
||||||
deleteNote: "노트 뭉캐기"
|
|
||||||
deleteUserAnnouncement: "사용자 공지 걸 뭉캐기"
|
|
||||||
resetPassword: "비밀번호 재설정"
|
|
||||||
resolveAbuseReport: "신고 해겔하기"
|
|
||||||
_reversi:
|
|
||||||
reversi: "리버시"
|
|
||||||
chooseBoard: "보드 개리기"
|
|
||||||
black: "꺼멍"
|
|
||||||
white: "허영"
|
|
||||||
total: "합게"
|
|
||||||
_remoteLookupErrors:
|
|
||||||
_noSuchObject:
|
|
||||||
title: "몬 찾앗십니다"
|
|
||||||
_search:
|
|
||||||
searchScopeAll: "말캉"
|
|
||||||
searchScopeUser: "사용자 지정"
|
|
1165
locales/ko-KR.yml
1165
locales/ko-KR.yml
File diff suppressed because it is too large
Load Diff
@@ -1,9 +1,9 @@
|
|||||||
---
|
---
|
||||||
_lang_: "ພາສາລາວ"
|
_lang_: "ພາສາລາວ"
|
||||||
headlineMisskey: "ເຊື່ອມຕໍ່ເຄືອຂ່າຍໂດຍ note"
|
headlineMisskey: "ເຊື່ອມຕໍ່ເຄືອຂ່າຍໂດຍຫມາຍເຫດ"
|
||||||
introMisskey: "ຍິນດີຕ້ອນຮັບ! Misskey ເປັນຊອຟແວopensource, ສຳລັບບໍລິການ microblogging ແບບ decentralized\nສ້າງ “note” ເພື່ອແບ່ງປັນຄວາມຄິດຂອງທ່ານກັບທຸກໆ ຄົນທີ່ຢູ່ອ້ອມຮອບທ່ານ 📡\nຢ່າລືມ “reaction” ໂນຕຂອງລາວເພື່ອສະແດງຄວາມຮູ້ສຶກ 👍\nມາສຳຫຼວດໂລກໃໝ່ແນ! 🚀"
|
introMisskey: "ຍິນດີຕ້ອນຮັບ! Misskey ເປັນແຫຼ່ງເປີດ, ການບໍລິການ microblogging ກະຈາຍ\nສ້າງ \"ບັນທຶກ\" ເພື່ອແບ່ງປັນຄວາມຄິດຂອງທ່ານກັບທຸກໆຄົນທີ່ຢູ່ອ້ອມຮອບທ່ານ 📡\nດ້ວຍ \"ປະຕິກິລິຍາ\", ທ່ານຍັງສາມາດສະແດງຄວາມຮູ້ສຶກຂອງທ່ານຢ່າງໄວວາກ່ຽວກັບບັນທຶກຂອງທຸກໆຄົນ 👍\nມາສຳຫຼວດໂລກໃໝ່! 🚀"
|
||||||
poweredByMisskeyDescription: "{name} ແມ່ນສ່ວນໜຶ່ງຂອງການບໍລິການທີ່ຂັບເຄື່ອນໂດຍແພລດຟອມ open source. <b>Misskey</b> (ເອີ້ນວ່າ \"Misskey instance\")"
|
poweredByMisskeyDescription: "{name} ແມ່ນສ່ວນໜຶ່ງຂອງການບໍລິການທີ່ຂັບເຄື່ອນໂດຍແພລດຟອມ open source. <b>Misskey</b> (ເອີ້ນວ່າ \"Misskey instance\")"
|
||||||
monthAndDay: "ເດືອນ{month} / ວັນ{day}"
|
monthAndDay: "{ເດືອນ}/{ມື້}"
|
||||||
search: "ຄົ້ນຫາ"
|
search: "ຄົ້ນຫາ"
|
||||||
notifications: "ການແຈ້ງເຕືອນ"
|
notifications: "ການແຈ້ງເຕືອນ"
|
||||||
username: "ຊື່ຜູ້ໃຊ້"
|
username: "ຊື່ຜູ້ໃຊ້"
|
||||||
@@ -15,79 +15,78 @@ gotIt: "ເຂົ້າໃຈແລ້ວ!"
|
|||||||
cancel: "ຍົກເລີກ"
|
cancel: "ຍົກເລີກ"
|
||||||
noThankYou: "ບໍ່ແມ່ນຕອນນີ້"
|
noThankYou: "ບໍ່ແມ່ນຕອນນີ້"
|
||||||
enterUsername: "ປ້ອນຊື່ຜູ້ໃຊ້"
|
enterUsername: "ປ້ອນຊື່ຜູ້ໃຊ້"
|
||||||
renotedBy: "Renoted ໂດຍ {user}"
|
renotedBy: "Renoted ໂດຍ {ຜູ້ໃຊ້}"
|
||||||
noNotes: "ບໍ່ມີ note"
|
noNotes: "ບໍ່ມີຫມາຍເຫດ"
|
||||||
noNotifications: "ບໍ່ມີການແຈ້ງເຕືອນ"
|
noNotifications: "ບໍ່ມີການແຈ້ງເຕືອນ"
|
||||||
instance: "ເຊີຟເວີຣ໌"
|
instance: "ອີນສະແຕນ"
|
||||||
settings: "ຕັ້ງຄ່າ"
|
settings: "ກຳນົດຄ່າ"
|
||||||
notificationSettings: "ຕັ້ງຄ່າການແຈ້ງເຕືອນ"
|
notificationSettings: "ຕັ້ງຄ່າການແຈ້ງເຕືອນ"
|
||||||
basicSettings: "ການຕັ້ງຄ່າພື້ນຖານ"
|
basicSettings: "ການຕັ້ງຄ່າພື້ນຖານ"
|
||||||
otherSettings: "ການຕັ້ງຄ່າອື່ນໆ"
|
otherSettings: "ການຕັ້ງຄ່າອື່ນໆ"
|
||||||
openInWindow: "ເປີດໃນ window"
|
openInWindow: "ເປີດຢູ່ໃນປ່ອງຢ້ຽມ"
|
||||||
profile: "ໂປຣໄຟລ໌"
|
profile: "ໂພຼຟາຍ"
|
||||||
timeline: "ໄທມ໌ໄລນ໌"
|
timeline: "ເສັ້ນກຳນົດເວລາ"
|
||||||
noAccountDescription: "ຜູ້ໃຊ້ຄົນນີ້ຍັງບໍ່ໄດ້ຂຽນຄຳແນະນຳໂຕ"
|
noAccountDescription: "ຜູ້ໃຊ້ນີ້ຍັງບໍ່ໄດ້ຂຽນໃນຊີວະປະຫວັດຂອງເຂົາເຈົ້າເທື່ອ"
|
||||||
login: "ເຂົ້າສູ່ລະບົບ"
|
login: "ເຂົ້າສູ່ລະບົບ"
|
||||||
loggingIn: "ກຳລັງເຂົ້າສູ່ລະບົບ..."
|
loggingIn: "ກຳລັງເຂົ້າສູ່ລະບົບ..."
|
||||||
logout: "ອອກຈາກລະບົບ"
|
logout: "ອອກຈາກລະບົບ"
|
||||||
signup: "ລົງທະບຽນ"
|
signup: "ລົງທະບຽນ"
|
||||||
uploading: "ກຳລັງອັບໂຫຼດ..."
|
uploading: "ການອັບໂຫຼດ..."
|
||||||
save: "ບັນທຶກ"
|
save: "ບັນທຶກ"
|
||||||
users: "ຜູ້ໃຊ້"
|
users: "ຜູ້ໃຊ້ຕ່າງໆ"
|
||||||
addUser: "ເພີ່ມຜູ້ໃຊ້"
|
addUser: "ເພີ່ມຜູ້ໃຊ້"
|
||||||
favorite: "ເພີ່ມໃສ່ລາຍການທີ່ມັກ"
|
favorite: "ເພີ່ມໃສ່ລາຍການທີ່ມັກ"
|
||||||
favorites: "ລາຍການທີ່ມັກ"
|
favorites: "ລາຍການທີ່ມັກ"
|
||||||
unfavorite: "ເອົາອອກຈາກລາຍການທີ່ມັກ"
|
unfavorite: "ລຶບອອກຈາກລາຍການທີ່ມັກ"
|
||||||
favorited: "ເພີ່ມໃສ່ລາຍການທີ່ມັກແລ້ວ"
|
favorited: "ເພີ່ມໃສ່ລາຍການທີ່ມັກແລ້ວ"
|
||||||
alreadyFavorited: "ເພີ່ມເຂົ້າໃນລາຍການທີ່ມັກແລ້ວ."
|
alreadyFavorited: "ເພີ່ມເຂົ້າໃນລາຍການທີ່ມັກແລ້ວ."
|
||||||
cantFavorite: "ບໍ່ສາມາດເພີ່ມໃສ່ລາຍການທີ່ມັກໄດ້."
|
cantFavorite: "ບໍ່ສາມາດເພີ່ມໃສ່ລາຍການທີ່ມັກໄດ້."
|
||||||
pin: "ປັກໝຸດ"
|
pin: "ປັກໝຸດໄປຫາໂປຣໄຟລ໌"
|
||||||
unpin: "ຖອດປັກໝຸດອອກ"
|
unpin: "ຖອດປັກໝຸດອອກຈາກໂປຣໄຟລ໌"
|
||||||
copyContent: "ຄັດລອກເນື້ອຫາ"
|
copyContent: "ຄັດລອກເນື້ອຫາ"
|
||||||
copyLink: "ຄັດລອກລິ້ງ"
|
copyLink: "ສຳເນົາລິ້ງ"
|
||||||
copyLinkRenote: "ຄັດລອກລິ້ງຂອງ renote"
|
|
||||||
delete: "ລຶບ"
|
delete: "ລຶບ"
|
||||||
deleteAndEdit: "ລຶບແລະແກ້ໄຂ"
|
deleteAndEdit: "ລົບແລະແກ້ໄຂ"
|
||||||
deleteAndEditConfirm: "ຕ້ອງການລຶບ note ນີ້ແລະແກ້ໄຂໃໝ່ແມ່ນບໍ່? reaction, renote ແລະການຕອບກັບຕໍ່ note ນີ້ ທັງເບິດຈະຖືກລຶບອອກ"
|
deleteAndEditConfirm: "ເຈົ້າແນ່ໃຈບໍ່? ທີ່ທ່ານຕ້ອງການທີ່ຈະລຶບບັນທຶກນີ້ແລະແກ້ໄຂມັນ ທ່ານອາດຈະສູນເສຍການໂຕ້ຕອບ, ບັນທຶກ, ແລະການຕອບກັບທັງໝົດ"
|
||||||
addToList: "ເພີ່ມໃສ່ລາຍຊື່"
|
addToList: "ເພີ່ມໃສ່ລາຍຊື່"
|
||||||
addToAntenna: "ເພີ່ມໃສ່ເສົາອາກາດ"
|
addToAntenna: "ເພີ່ມໃສ່ເສົາອາກາດ"
|
||||||
sendMessage: "ສົ່ງຂໍ້ຄວາມ"
|
sendMessage: "ສົ່ງຂໍ້ຄວາມ"
|
||||||
copyRSS: "ຄັດລອກ RSS"
|
copyRSS: "ສຳເນົາ RSS"
|
||||||
copyUsername: "ຄັດລອກຊື່ຜູ້ໃຊ້"
|
copyUsername: "ສຳເນົາຊື່ຜູ້ໃຊ້"
|
||||||
copyUserId: "ຄັດລອກ ID ຜູ້ໃຊ້"
|
copyUserId: "ສຳເນົາ ID ຜູ້ໃຊ້"
|
||||||
copyNoteId: "ຄັດລອກ ID ຂອງ note"
|
copyNoteId: "ສຳເນົາ ID ບັນທຶກ"
|
||||||
copyFileId: "ຄັດລອກ ID ໄຟລ໌"
|
copyFileId: "ສຳເນົາ ID ໄຟລ໌"
|
||||||
copyFolderId: "ຄັດລອກ ID ໂຟລ໌ເດີຣ໌"
|
copyFolderId: "ສຳເນົາ ID ໂຟນເດີ"
|
||||||
copyProfileUrl: "ຄັດລອກ URL ໂປຣໄຟລ໌"
|
copyProfileUrl: "ສຳເນົາ URL ໂປຣໄຟລ໌"
|
||||||
searchUser: "ຄົ້ນຫາຜູ້ໃຊ້"
|
searchUser: "ຄົ້ນຫາຜູ້ໃຊ້"
|
||||||
reply: "ຕອບກັບ"
|
reply: "ຕອບໄປທີ"
|
||||||
loadMore: "ໂຫຼດເພີ່ມເຕີມ"
|
loadMore: "ໂຫຼດເພີ່ມເຕີມ"
|
||||||
showMore: "ໂຫຼດເພີ່ມເຕີມ"
|
showMore: "ໂຫຼດເພີ່ມເຕີມ"
|
||||||
showLess: "ປິດ"
|
showLess: "ປິດ"
|
||||||
youGotNewFollower: "ໄດ້ຕິດຕາມເຈົ້າ"
|
youGotNewFollower: "ໄດ້ຕິດຕາມທ່ານ"
|
||||||
receiveFollowRequest: "ມີຄຳຂໍຕິດຕາມສົ່ງມາ"
|
receiveFollowRequest: "ປະຕິບັດຕາມຄໍາຮ້ອງຂໍທີ່ໄດ້ຮັບ"
|
||||||
followRequestAccepted: "ການຕິດຕາມໄດ້ຮັບອນຸຍາດແລ້ວ"
|
followRequestAccepted: "ຜູ້ຕິດຕາມໄດ້ຍອມຮັບຄໍາຮ້ອງຂໍຂອງທ່ານ"
|
||||||
mention: "ເວົ້າເຖີງ"
|
mention: "ໄດ້ກ່າວມາ"
|
||||||
mentions: "ເວົ້າເຖີງເຈົ້າ"
|
mentions: "ກ່າວເຖິງ"
|
||||||
directNotes: "ໂພສ Direct note"
|
directNotes: "ໂດຍກົງຫມາຍເຫດ"
|
||||||
importAndExport: "ນໍາເຂົ້າ / ສົ່ງອອກ"
|
importAndExport: "ນໍາເຂົ້າ / ສົ່ງອອກ"
|
||||||
import: "ນຳເຂົ້າ"
|
import: "ນຳເຂົ້າ"
|
||||||
export: "ສົ່ງອອກ"
|
export: "ນຳອອກ"
|
||||||
files: "ໄຟລ໌"
|
files: "ໄຟລ໌"
|
||||||
download: "ດາວໂຫລດ"
|
download: "ດາວໂຫລດ"
|
||||||
driveFileDeleteConfirm: "ຕ້ອງການລຶບໄຟລ໌ “{name}” ແມ່ນບໍ່? Note ທີ່ແນບມາກັບໄຟລ໌ນີ້ຈະຖືກລຶບອອກ"
|
driveFileDeleteConfirm: "ທ່ານແນ່ໃຈບໍ່ວ່າຕ້ອງການລຶບໄຟລ໌ \"{name}\"? ບັນທຶກທີ່ມີໄຟລ໌ແນບນີ້ຈະຖືກລຶບຖິ້ມ"
|
||||||
unfollowConfirm: "ຕ້ອງການເລີກຕິດຕາມ {name} ແມ່ນບໍ່?"
|
unfollowConfirm: "ທ່ານແນ່ໃຈບໍ່ວ່າຕ້ອງການເຊົາຕິດຕາມ {name}?"
|
||||||
exportRequested: "ເຈົ້າໄດ້ຮ້ອງຂໍການສົ່ງອອກ ອາດໃຊ້ເວລາຈັກໜ່ອຍ ເມື່ອແລ້ວຈະຖືກເພີ່ມໃສ່ drive"
|
exportRequested: "ໃນເວລາທີ່ທ່ານໄດ້ຮ້ອງຂໍການສົ່ງອອກ ມັນອາດຈະໃຊ້ເວລາບາງເວລາ ແລະມັນຈະຖືກເພີ່ມໃສ່ drive ຂອງທ່ານເມື່ອມັນສຳເລັດແລ້ວ"
|
||||||
importRequested: "ເຈົ້າໄດ້ຮ້ອງຂໍການນຳເຂົ້າ ການດຳເນິນການນີ້ອາດໃຊ້ເວລາຈັກໜ່ອຍ"
|
importRequested: "ໃນເວລາທີ່ທ່ານໄດ້ຮ້ອງຂໍການນໍາເຂົ້າ ມັນອາດຈະໃຊ້ເວລາບາງເວລາ"
|
||||||
lists: "ລາຍການ"
|
lists: "ລາຍການ"
|
||||||
noLists: "ບໍ່ມີລາຍການໃດໆ"
|
noLists: "ທ່ານບໍ່ມີລາຍການໃດໆ"
|
||||||
note: "Note"
|
note: "ບັນທຶກ"
|
||||||
notes: "Note"
|
notes: "ບັນທຶກ"
|
||||||
following: "ກຳລັງຕິດຕາມ"
|
following: "ກຳລັງຕິດຕາມ"
|
||||||
followers: "ຜູ້ຕິດຕາມ"
|
followers: "ຜູ້ຕິດຕາມ"
|
||||||
followsYou: "ຕິດຕາມເຈົ້າ"
|
followsYou: "ຕິດຕາມເຈົ້າ"
|
||||||
createList: "ສ້າງລາຍຊື່"
|
createList: "ສ້າງລາຍຊື່"
|
||||||
manageLists: "ຈັດການລາຍຊື່"
|
manageLists: "ການບໍລິຫານບັນຊີລາຍການ"
|
||||||
error: "ຂໍ້ຜິດພາດ"
|
error: "ຂໍ້ຜິດພາດ"
|
||||||
somethingHappened: "ອຸຍ, ມີບາງຢ່າງຜິດພາດ"
|
somethingHappened: "ອຸຍ, ມີບາງຢ່າງຜິດພາດ"
|
||||||
retry: "ລອງໃຫມ່"
|
retry: "ລອງໃຫມ່"
|
||||||
@@ -97,38 +96,38 @@ serverIsDead: "ເຊີບເວີນີ້ບໍ່ຕອບສະໜອງ
|
|||||||
youShouldUpgradeClient: "ເພື່ອເບິ່ງໜ້ານີ້, ກະລຸນາໂຫຼດຂໍ້ມູນຄືນໃໝ່ເພື່ອອັບເດດລູກຄ້າຂອງທ່ານ"
|
youShouldUpgradeClient: "ເພື່ອເບິ່ງໜ້ານີ້, ກະລຸນາໂຫຼດຂໍ້ມູນຄືນໃໝ່ເພື່ອອັບເດດລູກຄ້າຂອງທ່ານ"
|
||||||
enterListName: "ໃສ່ຊື່ສຳລັບລາຍຊື່"
|
enterListName: "ໃສ່ຊື່ສຳລັບລາຍຊື່"
|
||||||
privacy: "ຄວາມເປັນສ່ວນຕົວ"
|
privacy: "ຄວາມເປັນສ່ວນຕົວ"
|
||||||
makeFollowManuallyApprove: "ຕິດຕາມຄຳຂໍທີ່ຕ້ອງໄດ້ຮັບການອະນຸມັດ"
|
makeFollowManuallyApprove: "ປະຕິບັດຕາມການຮ້ອງຂໍຮຽກຮ້ອງໃຫ້ມີການອະນຸມັດ"
|
||||||
defaultNoteVisibility: "ການເບິ່ງເຫັນທີ່ເປັນຄ່າເລີ່ມຕົ້ນ"
|
defaultNoteVisibility: "ເປັນຄ່າເລີ່ມຕົ້ນ"
|
||||||
follow: "ກຳລັງຕິດຕາມ"
|
follow: "ກຳລັງຕິດຕາມ"
|
||||||
followRequest: "ສົ່ງຄຳຂໍຕິດຕາມ"
|
followRequest: "ສົ່ງການຮ້ອງຂໍປະຕິບຕາມ"
|
||||||
followRequests: "ສົ່ງຄຳຂໍຕິດຕາມ"
|
followRequests: "ປະຕິບັດຕາມຄໍາຮ້ອງຂໍ"
|
||||||
unfollow: "ເຊົາຕິດຕາມ"
|
unfollow: "ເຊົາຕິດຕາມ"
|
||||||
followRequestPending: "ລໍຖ້າການອະນຸມັດໃຫ້ຕິດຕາມ"
|
followRequestPending: "ປະຕິບັດຕາມຄໍາຮ້ອງຂໍທີ່ລໍຖ້າຢູ່"
|
||||||
enterEmoji: "ປ້ອນເອໂມຈິ"
|
enterEmoji: "ປ້ອນອີໂມຈິ"
|
||||||
renote: "Renote"
|
renote: "Renote"
|
||||||
unrenote: "ເລີກ Renote"
|
unrenote: "ເລີກ Renote"
|
||||||
renoted: "renote ແລ້ວ"
|
renoted: "ເກັບບັນທຶກໄວ້"
|
||||||
cantRenote: "ໂພສນີ້ບໍ່ສາມາດ renote ໃໝ່ໄດ້"
|
cantRenote: "ໂພສນີ້ບໍ່ສາມາດຖືກບັນທຶກໄວ້ຄືນໃໝ່ໄດ້"
|
||||||
cantReRenote: "ບໍ່ສາມາດບັນທຶກຄືນໃໝ່ໄດ້"
|
cantReRenote: "ບໍ່ສາມາດບັນທຶກຄືນໃໝ່ໄດ້"
|
||||||
quote: "ອ້າງອີງ"
|
quote: "ລວມຂໍ້ຄວາມອ້າງອີງ"
|
||||||
inChannelRenote: "Renote ໃນ channel ເທົ່ານັ້ນ"
|
inChannelRenote: "ຊ່ອງພຽງແຕ່ Renote"
|
||||||
inChannelQuote: "ອ້າງອິງໃນ channel ເທົ່ານັ້ນ"
|
inChannelQuote: "ຊ່ອງເທົ່ານັ້ນ Quote"
|
||||||
pinnedNote: "note ທີ່ປັກໝຸດໄວ້"
|
pinnedNote: "ບັນທຶກທີ່ປັກໝຸດໄວ້"
|
||||||
pinned: "ປັກໝຸດ"
|
pinned: "ປັກໝຸດໄປຫາໂປຣໄຟລ໌"
|
||||||
you: "ເຈົ້າ"
|
you: "ເຈົ້າ"
|
||||||
clickToShow: "ກົດເພື່ອສະແດງໃຫ້ເຫັນ"
|
clickToShow: "ກົດເພື່ອສະແດງໃຫ້ເຫັນ"
|
||||||
sensitive: "NSFW"
|
sensitive: "NSFW"
|
||||||
add: "ເພີ່ມ"
|
add: "ເພີ່ມ"
|
||||||
reaction: "reaction"
|
reaction: "ປະຕິກິລິຍາ"
|
||||||
reactions: "reaction"
|
reactions: "ປະຕິກິລິຍາ"
|
||||||
attachCancel: "ເອົາໄຟລ໌ແນບ"
|
attachCancel: "ເອົາໄຟລ໌ແນບ"
|
||||||
mute: "ປີດສຽງ"
|
mute: "ປີດສຽງ"
|
||||||
unmute: "ເປີດສຽງ"
|
unmute: "ເປີດສຽງ"
|
||||||
block: "ບລັອກ"
|
block: "ບ໋ອກ"
|
||||||
unblock: "ເລີກບລັອກ"
|
unblock: "ຍົກເລີກກາຮົບລັອກ"
|
||||||
suspend: "ລະງັບ"
|
suspend: "ລະງັບ"
|
||||||
unsuspend: "ເຊົາລະງັບ"
|
unsuspend: "ເຊົາລະງັບ"
|
||||||
selectList: "ເລືອກລາຍຊື່"
|
selectList: "ເລືອກບັນຊີລາຍການ"
|
||||||
editList: "ແກ້ໄຂລາຍຊື່"
|
editList: "ແກ້ໄຂລາຍຊື່"
|
||||||
selectChannel: "ເລືອກຊ່ອງ"
|
selectChannel: "ເລືອກຊ່ອງ"
|
||||||
selectAntenna: "ເລືອກເສົາອາກາດ"
|
selectAntenna: "ເລືອກເສົາອາກາດ"
|
||||||
@@ -151,30 +150,30 @@ flagShowTimelineRepliesDescription: "ສະແດງການຕອບກັບ
|
|||||||
autoAcceptFollowed: "ອະນຸມັດອັດຕະໂນມັດຕາມຄຳຮ້ອງຂໍຈາກຜູ້ໃຊ້ທີ່ທ່ານກຳລັງຕິດຕາມຢູ່"
|
autoAcceptFollowed: "ອະນຸມັດອັດຕະໂນມັດຕາມຄຳຮ້ອງຂໍຈາກຜູ້ໃຊ້ທີ່ທ່ານກຳລັງຕິດຕາມຢູ່"
|
||||||
addAccount: "ເພີ່ມບັນຊີ"
|
addAccount: "ເພີ່ມບັນຊີ"
|
||||||
loginFailed: "ການເຂົ້າສູ່ລະບົບບໍ່ສຳເລັດ"
|
loginFailed: "ການເຂົ້າສູ່ລະບົບບໍ່ສຳເລັດ"
|
||||||
showOnRemote: "ເບິ່ງໃນເຊີຟເວີຣ໌ໄລຍະໄກ"
|
showOnRemote: "ເບິ່ງຢູ່ໃນຕົວຢ່າງໄລຍະໄກ"
|
||||||
general: "ທົ່ວໄປ"
|
general: "ທົ່ວໄປ"
|
||||||
wallpaper: "ພາບພື້ນຫລັງ"
|
wallpaper: "ພາບພື້ນຫລັງ"
|
||||||
setWallpaper: "ຕັ້ງເປັນພາບພື້ນຫຼັງ"
|
setWallpaper: "ຕັ້ງເປັນພາບພື້ນຫຼັງ"
|
||||||
removeWallpaper: "ລຶບຮູບວໍເປເປີອອກ"
|
removeWallpaper: "ລຶບຮູບວໍເປເປີອອກ"
|
||||||
searchWith: "ຊອກຫາ: {q}"
|
searchWith: "ຊອກຫາ: {q}"
|
||||||
youHaveNoLists: "ເຈົ້າບໍ່ມີລາຍຊື່ໃດໆ"
|
youHaveNoLists: "ທ່ານບໍ່ມີລາຍການໃດໆ"
|
||||||
proxyAccount: "ບັນຊີພຣັອກຊີ"
|
proxyAccount: "ບັນຊີພຣັອກຊີ"
|
||||||
host: "ໂຮສຕ໌"
|
host: "ໂຮດສ"
|
||||||
selectUser: "ເລືອກຜູ້ໃຊ້"
|
selectUser: "ເລືອກຜູ້ໃຊ້"
|
||||||
recipient: "ເຖິງ"
|
recipient: "ເຖິງ"
|
||||||
annotation: "ຄຳເຫັນ"
|
annotation: "ຄຳເຫັນ"
|
||||||
federation: "ສະຫະພັນ"
|
federation: "ສະຫະພັນ"
|
||||||
instances: "ເຊີຟເວີຣ໌"
|
instances: "ອີນສະແຕນ"
|
||||||
registeredAt: "ລົງທະບຽນຢູ່"
|
registeredAt: "ລົງທະບຽນຢູ່"
|
||||||
storageUsage: "ບ່ອນຈັດເກັບຂໍ້ມູນທີ່ໃຊ້"
|
storageUsage: "ບ່ອນຈັດເກັບຂໍ້ມູນທີ່ໃຊ້"
|
||||||
charts: "ແຜນພູມ"
|
charts: "ອັນດັບເພງ"
|
||||||
perHour: "ຕໍ່ຊົ່ວໂມງ"
|
perHour: "ຕໍ່ຊົ່ວໂມງ"
|
||||||
perDay: "ຕໍ່ມື້"
|
perDay: "ຕໍ່ມື້"
|
||||||
stopActivityDelivery: "ຢຸດເຊົາການສົ່ງກິດຈະກໍາ"
|
stopActivityDelivery: "ຢຸດເຊົາການສົ່ງກິດຈະກໍາ"
|
||||||
blockThisInstance: "ຂັດຂວາງຕົວຢ່າງນີ້"
|
blockThisInstance: "ຂັດຂວາງຕົວຢ່າງນີ້"
|
||||||
operations: "ການດຳເນີນງານ"
|
operations: "ການດຳເນີນງານ"
|
||||||
software: "ຊອບແວ"
|
software: "ຊອບແວ"
|
||||||
version: "ເວີຣ໌ຊັນ"
|
version: "ສະບັບ"
|
||||||
metadata: "Metadata"
|
metadata: "Metadata"
|
||||||
withNFiles: "{n} ໄຟລ໌(s)"
|
withNFiles: "{n} ໄຟລ໌(s)"
|
||||||
monitor: "ຈໍພາບ"
|
monitor: "ຈໍພາບ"
|
||||||
@@ -199,15 +198,15 @@ federating: "ສະຫະພັນ"
|
|||||||
blocked: "ບລັອກແລ້ວ "
|
blocked: "ບລັອກແລ້ວ "
|
||||||
suspended: "ໂຈະ"
|
suspended: "ໂຈະ"
|
||||||
all: "ທັງໝົດ"
|
all: "ທັງໝົດ"
|
||||||
subscribing: "ກຳລັງສະມັກສະມາຊິກ"
|
subscribing: "ສະໝັກສະມາຊິກແລັວ"
|
||||||
publishing: "ກຳລັງເຜີຍແພ່"
|
publishing: "ການພິມເຜີຍແຜ່"
|
||||||
notResponding: "ບໍ່ຕອບສະໜອງ"
|
notResponding: "ບໍ່ຕອບສະໜອງ"
|
||||||
instanceFollowing: "ກຳລັງຕິດຕາມບົນເຊີຟເວີຣ໌"
|
instanceFollowing: "ກຳລັງຕິດຕາມສຸດຕົວຢ່າງ"
|
||||||
instanceFollowers: "ຜູ້ຕິດຕາມຂອງເຊີຟເວີຣ໌"
|
instanceFollowers: "ຜູ້ຕິດຕາມຕົວຢ່າງ"
|
||||||
instanceUsers: "ຜູ້ໃຊ້ຂອງເຊີຟເວີຣ໌ນີ້"
|
instanceUsers: "ຜູ້ຊົມໃຊ້ຂອງຕົວຢ່າງນີ້"
|
||||||
changePassword: "ປ່ຽນລະຫັດຜ່ານ"
|
changePassword: "ປ່ຽນລະຫັດຜ່ານ"
|
||||||
security: "ຄວາມປອດໄພ"
|
security: "ຄວາມປອດໄພ"
|
||||||
retypedNotMatch: "ປ້ອນຂໍ້ມູນບໍ່ກົງກັນ"
|
retypedNotMatch: "ວັດສະດຸປ້ອນບໍ່ກົງກັນ"
|
||||||
currentPassword: "ລະຫັດຜ່ານປະຈຸບັນ"
|
currentPassword: "ລະຫັດຜ່ານປະຈຸບັນ"
|
||||||
newPassword: "ລະຫັດຜ່ານໃໝ່"
|
newPassword: "ລະຫັດຜ່ານໃໝ່"
|
||||||
newPasswordRetype: "ໃສ່ລະຫັດຜ່ານໃໝ່ອີກເທື່ອໜຶ່ງ"
|
newPasswordRetype: "ໃສ່ລະຫັດຜ່ານໃໝ່ອີກເທື່ອໜຶ່ງ"
|
||||||
@@ -223,14 +222,14 @@ remove: "ລຶບ"
|
|||||||
removed: "ລຶບແລ້ວ"
|
removed: "ລຶບແລ້ວ"
|
||||||
resetAreYouSure: "ຣີເຊັດບໍ?"
|
resetAreYouSure: "ຣີເຊັດບໍ?"
|
||||||
saved: "ບັນທຶກແລ້ວ"
|
saved: "ບັນທຶກແລ້ວ"
|
||||||
messaging: "ແຊັຕ"
|
messaging: "ແຊ໋ດ"
|
||||||
upload: "ອັບໂຫຼດ"
|
upload: "ອັບໂຫຼດ"
|
||||||
keepOriginalUploading: "ຮັກສາຮູບພາບຕົ້ນສະບັບ"
|
keepOriginalUploading: "ຮັກສາຮູບພາບຕົ້ນສະບັບ"
|
||||||
fromDrive: "ຈາກ Drive"
|
fromDrive: "ຈາກ Drive"
|
||||||
fromUrl: "ຈາກ URL"
|
fromUrl: "ຈາກ URL"
|
||||||
uploadFromUrl: "ອັບໂຫຼດຈາກ URL"
|
uploadFromUrl: "ອັບໂຫຼດຈາກ URL"
|
||||||
uploadFromUrlDescription: "URL ຂອງໄຟລ໌ທີ່ທ່ານຕ້ອງການອັບໂຫລດ"
|
uploadFromUrlDescription: "URL ຂອງໄຟລ໌ທີ່ທ່ານຕ້ອງການອັບໂຫລດ"
|
||||||
uploadFromUrlRequested: "ຮ້ອງຂໍການອັບໂຫລດແລ້ວ"
|
uploadFromUrlRequested: "ຮ້ອງຂໍການອັບໂຫລດ"
|
||||||
explore: "ສຳຫຼວດ"
|
explore: "ສຳຫຼວດ"
|
||||||
messageRead: "ອ່ານແລ້ວ"
|
messageRead: "ອ່ານແລ້ວ"
|
||||||
startMessaging: "ເລີ່ມການສົນທະນາໃໝ່"
|
startMessaging: "ເລີ່ມການສົນທະນາໃໝ່"
|
||||||
@@ -244,47 +243,47 @@ images: "ຮູບພາບ"
|
|||||||
image: "ຮູບພາບ"
|
image: "ຮູບພາບ"
|
||||||
birthday: "ວັນເກີດ"
|
birthday: "ວັນເກີດ"
|
||||||
yearsOld: "{age} ປີ"
|
yearsOld: "{age} ປີ"
|
||||||
registeredDate: "ວັນທີ່ລົງທະບຽນ"
|
registeredDate: "ວັນທີ່ເປັນສະມາຊິກ"
|
||||||
location: "ທີ່ຕັ້ງ"
|
location: "ທີ່ຕັ້ງ"
|
||||||
theme: "Theme"
|
theme: "ແທ໋ມ"
|
||||||
themeForLightMode: "Theme ໃຊ້ໃນໂໝດສະຫວ່າງ"
|
themeForLightMode: "ຮູບແບບສີສັນເພື່ອໃຊ້ໃນໂໝດແສງ"
|
||||||
themeForDarkMode: "Theme ໃຊ້ໃນໂໝດມືດ"
|
themeForDarkMode: "ຮູບແບບສີສັນທີ່ຈະໃຊ້ຢູ່ໃນໂໝດມືດ"
|
||||||
light: "ສະຫວ່າງ"
|
light: "ສະຫວ່າງ"
|
||||||
dark: "ມືດ"
|
dark: "ມືດ"
|
||||||
lightThemes: "ຊຸດຮູບແບບສະຫວ່າງ"
|
lightThemes: "ຊຸດຮູບແບບສະຫວ່າງ"
|
||||||
darkThemes: "ຮູບແບບສີສັນມືດ"
|
darkThemes: "ຮູບແບບສີສັນມືດ"
|
||||||
syncDeviceDarkMode: "ຊິງຄ໌ໂໝດມືດກັບການຕັ້ງຄ່າທົ່ວອຸປະກອນ"
|
syncDeviceDarkMode: "ຊິງຄ໌ໂໝດມືດກັບການຕັ້ງຄ່າທົ່ວອຸປະກອນ"
|
||||||
drive: "Drive"
|
drive: "ຂັບ"
|
||||||
fileName: "ຊື່ໄຟລ໌"
|
fileName: "ຊື່ໄຟລ໌"
|
||||||
selectFile: "ເລືອກໄຟລ໌"
|
selectFile: "ເລືອກໄຟລ໌"
|
||||||
selectFiles: "ເລືອກໄຟລ໌"
|
selectFiles: "ເລືອກໄຟລ໌"
|
||||||
selectFolder: "ເລືອກໂຟລເດີ"
|
selectFolder: "ເລືອກໂຟລເດີ"
|
||||||
selectFolders: "ເລືອກໂຟລເດີ"
|
selectFolders: "ເລືອກໂຟລເດີ"
|
||||||
renameFile: "ປ່ຽນຊື່ໄຟລ໌"
|
renameFile: "ປ່ຽນຊື່ໄຟລ໌"
|
||||||
folderName: "ຊື່ໂຟລເດີຣ໌"
|
folderName: "ຊື່ໂຟນເດີ"
|
||||||
createFolder: "ສ້າງໂຟລເດີ"
|
createFolder: "ສ້າງໂຟລເດີ"
|
||||||
renameFolder: "ປ່ຽນຊື່ໂຟນເດີນີ້"
|
renameFolder: "ປ່ຽນຊື່ໂຟນເດີນີ້"
|
||||||
deleteFolder: "ລົບໂຟລເດີ"
|
deleteFolder: "ລົບໂຟລເດີ"
|
||||||
addFile: "ເພີ່ມໄຟລ໌"
|
addFile: "ເພີ່ມໄຟລ໌"
|
||||||
emptyDrive: "Drive ຂອງທ່ານຫວ່າງເປົ່າ"
|
emptyDrive: "Drive ຂອງທ່ານຫວ່າງເປົ່າ"
|
||||||
emptyFolder: "ໂຟລເດີຣ໌ນີ້ວ່າງເປົ່າ"
|
emptyFolder: "ໂຟນເດີນີ້ເປົ່າຫວ່າງ"
|
||||||
unableToDelete: "ບໍ່ສາມາດລົບໄດ້"
|
unableToDelete: "ບໍ່ສາມາດລົບໄດ້"
|
||||||
inputNewFileName: "ໃສ່ຊື່ໄຟລ໌ໃໝ່"
|
inputNewFileName: "ໃສ່ຊື່ໄຟລ໌ໃໝ່"
|
||||||
inputNewDescription: "ໃສ່ຄຳບັນຍາຍໃໝ່"
|
inputNewDescription: "ໃສ່ຄຳບັນຍາຍໃໝ່"
|
||||||
inputNewFolderName: "ໃສ່ຊື່ໂຟນເດີໃໝ່"
|
inputNewFolderName: "ໃສ່ຊື່ໂຟນເດີໃໝ່"
|
||||||
circularReferenceFolder: "ໂຟນເດີປາຍທາງແມ່ນໂຟນເດີຍ່ອຍຂອງໂຟນເດີທີ່ທ່ານຕ້ອງການຍ້າຍ"
|
circularReferenceFolder: "ໂຟນເດີປາຍທາງແມ່ນໂຟນເດີຍ່ອຍຂອງໂຟນເດີທີ່ທ່ານຕ້ອງການຍ້າຍ"
|
||||||
rename: "ປ່ຽນຊື່"
|
rename: "ປ່ຽນຊື່"
|
||||||
doNothing: "ຢ່າມັນ"
|
doNothing: "ບໍ່ສົນໃຈ"
|
||||||
watch: "ເພັ່ງເລັງ"
|
watch: "ເບິ່ງ"
|
||||||
unwatch: "ຢຸດເພັ່ງເລັງ"
|
unwatch: "ຢຸດເບິ່ງ"
|
||||||
accept: "ອະນຸຍາດ"
|
accept: "ອະນຸຍາດ"
|
||||||
reject: "ປະຕິເສດ"
|
reject: "ປະຕິເສດ"
|
||||||
normal: "ປົກກະຕິ"
|
normal: "ປົກກະຕິ"
|
||||||
instanceName: "ຊື່ເຊີເວີ້"
|
instanceName: "ຊື່ເຊີເວີ້"
|
||||||
instanceDescription: "ຄຳອະທິບາຍແນະນຳເຊີຟເວີຣ໌"
|
instanceDescription: "ຄໍາອະທິບາຍຕົວຢ່າງ"
|
||||||
maintainerName: "ຜູ້ດູແລ"
|
maintainerName: "ຜູ້ດູແລ"
|
||||||
maintainerEmail: "ອີເມລຜູ້ດູແລ"
|
maintainerEmail: "ອີເມວ admin"
|
||||||
tosUrl: " URL ເງື່ອນໄຂການໃຫ້ບໍລິການ"
|
tosUrl: "ເງື່ອນໄຂການໃຫ້ບໍລິການ URL"
|
||||||
thisYear: "ປີນີ້"
|
thisYear: "ປີນີ້"
|
||||||
thisMonth: "ເດືອນນີ້"
|
thisMonth: "ເດືອນນີ້"
|
||||||
today: "ມື້ນີ້"
|
today: "ມື້ນີ້"
|
||||||
@@ -292,36 +291,36 @@ dayX: "ວັນ {day}"
|
|||||||
monthX: "ເດືອນ {month}"
|
monthX: "ເດືອນ {month}"
|
||||||
yearX: "ປີ {year}"
|
yearX: "ປີ {year}"
|
||||||
pages: "ໜ້າ"
|
pages: "ໜ້າ"
|
||||||
integration: "ເຊື່ອມໂຍງ"
|
integration: "ຄວາມສຳພັນຂອງ"
|
||||||
connectService: "ເຊື່ອມຕໍ່"
|
connectService: "ເຊື່ອມຕໍ່"
|
||||||
disconnectService: "ຕັດການເຊື່ອມຕໍ່"
|
disconnectService: "ຕັດການເຊື່ອມຕໍ່"
|
||||||
enableLocalTimeline: "ເປີດໃຊ້ທາມລາຍທ້ອງຖິ່ນ"
|
enableLocalTimeline: "ເປີດໃຊ້ທາມລາຍທ້ອງຖິ່ນ"
|
||||||
enableGlobalTimeline: "ເປີດໃຊ້ທາມລາຍທົ່ວໂລກ"
|
enableGlobalTimeline: "ເປີດໃຊ້ທາມລາຍທົ່ວໂລກ"
|
||||||
disablingTimelinesInfo: "ຜູ້ດູແລລະບບແລະຜູ້ຄວບຄຸມຈະສາມາດເຂົ້າເຖີງໄທມ໌ໄລນ໌ທັ້ງເບີດ ເຖີງວ່າຈະບໍ່ໄດ້ເປີດໃຊ້ງານກໍ່ຕາມ"
|
disablingTimelinesInfo: "ຜູ້ເບິ່ງແຍງລະບົບ ແລະຜູ້ຄວບຄຸມຈະມີການເຂົ້າເຖິງທຸກກຳນົດເວລາ, ເຖິງແມ່ນວ່າຈະບໍ່ໄດ້ເປີດໃຊ້ງານກໍຕາມ"
|
||||||
registration: "ລົງທະບຽນ"
|
registration: "ລົງທະບຽນ"
|
||||||
|
enableRegistration: "ເປີດໃຊ້ການລົງທະບຽນຜູ້ໃຊ້ໃໝ່"
|
||||||
invite: "ເຊີນ"
|
invite: "ເຊີນ"
|
||||||
driveCapacityPerLocalAccount: "ຄວາມຈຸຂອງ drive ຕໍ່ຜູ້ໃຊ້ທ້ອງຖິ່ນ"
|
driveCapacityPerLocalAccount: "ຄວາມອາດສາມາດຂັບຕໍ່ຜູ້ໃຊ້ທ້ອງຖິ່ນ"
|
||||||
driveCapacityPerRemoteAccount: "ຄວາມຈຸຂອງ drive ຕໍ່ຜູ້ໃຊ້ໄລຍະໄກ"
|
driveCapacityPerRemoteAccount: "ໄດຣຟ໌ຄວາມອາດສາມາດຕໍ່ຜູ້ໃຊ້ທາງໄກ"
|
||||||
basicInfo: "ຂໍ້ມຸນເບື້ອງຕົ້ນ"
|
basicInfo: "ຂໍ້ມຸນເບື້ອງຕົ້ນ"
|
||||||
pinnedNotes: "Note ທີ່ປັກໝຸດໄວ້"
|
pinnedNotes: "ບັນທຶກທີ່ປັກໝຸດໄວ້"
|
||||||
hcaptchaSiteKey: "Site key"
|
hcaptchaSiteKey: "ກະແຈໄຊທ໌"
|
||||||
hcaptchaSecretKey: "Secret key"
|
hcaptchaSecretKey: "ກະແຈລັບ"
|
||||||
mcaptchaSiteKey: "Site key"
|
|
||||||
mcaptchaSecretKey: "Secret Key"
|
|
||||||
recaptcha: "reCAPTCHA"
|
recaptcha: "reCAPTCHA"
|
||||||
enableRecaptcha: "ເປີດໃຊ້ງານ reCAPTCHA"
|
enableRecaptcha: "ເປີດໃຊ້ງານລີແຄ໋ບຈາ"
|
||||||
recaptchaSiteKey: "Site key"
|
recaptchaSiteKey: "ກະແຈໄຊທ໌"
|
||||||
recaptchaSecretKey: "Secret key"
|
recaptchaSecretKey: "ກະແຈລັບ"
|
||||||
turnstileSiteKey: "Site key"
|
turnstileSiteKey: "ກະແຈໄຊທ໌"
|
||||||
turnstileSecretKey: "Secret key"
|
turnstileSecretKey: "ກະແຈລັບ"
|
||||||
name: "ຊື່"
|
name: "ຊື່"
|
||||||
userList: "ລາຍການ"
|
userList: "ລາຍການ"
|
||||||
about: "ກ່ຽວກັບ"
|
about: "ກ່ຽວກັບ"
|
||||||
aboutMisskey: "ກ່ຽວກັບ Misskey"
|
aboutMisskey: "ກ່ຽວກັບ Misskey"
|
||||||
administrator: "ຜູ້ດູແລ"
|
administrator: "ຜູ້ບໍລິຫານ"
|
||||||
token: "ໂທເຄັນ"
|
token: "ໂທເຄັນ"
|
||||||
share: "ແບ່ງປັນ"
|
share: "ແບ່ງປັນ"
|
||||||
notFound: "ບໍ່ພົບ"
|
notFound: "ບໍ່ພົບ"
|
||||||
|
cacheClear: "ລຶບລ້າງແຄສ"
|
||||||
help: "ຊ່ວຍເຫຼືອ"
|
help: "ຊ່ວຍເຫຼືອ"
|
||||||
close: "ປິດ"
|
close: "ປິດ"
|
||||||
invites: "ເຊີນ"
|
invites: "ເຊີນ"
|
||||||
@@ -331,27 +330,27 @@ title: "ຫົວຂໍ້"
|
|||||||
text: "ຂໍ້ຄວາມ"
|
text: "ຂໍ້ຄວາມ"
|
||||||
enable: "ເປີດໃຊ້"
|
enable: "ເປີດໃຊ້"
|
||||||
next: "ຕໍ່ໄປ"
|
next: "ຕໍ່ໄປ"
|
||||||
retype: "ລອງພິມລະຫັດອີກເທື່ອໜຶ່ງ"
|
retype: "ເຂົ້າໄປອີກຄັ້ງ"
|
||||||
quoteAttached: "ອ້າງອິງ"
|
quoteAttached: "ວົງຢືມ"
|
||||||
invitations: "ເຊີນ"
|
invitations: "ເຊີນ"
|
||||||
unavailable: "ບໍ່ສາມາດໃຊ້ໄດ້"
|
unavailable: "ບໍ່ສາມາດໃຊ້ໄດ້"
|
||||||
language: "ພາສາ"
|
language: "ພາສາ"
|
||||||
aboutX: "ກ່ຽວກັບ {x}"
|
aboutX: "ກ່ຽວກັບ {x}"
|
||||||
emojiStyle: "ຮູບແບບອີໂມຈິ"
|
emojiStyle: "ຮູບແບບອີໂມຈິ"
|
||||||
native: "ພາສາແມ່"
|
native: "ພາສາແມ່"
|
||||||
noHistory: "ບໍ່ມີປະຫວັດ"
|
noHistory: "ບໍ່ມີລາຍການຢູ່ບ່ອນນີ້"
|
||||||
doing: "ກຳລັງປະມວນຜົນ..."
|
doing: "ກຳລັງປະມວນຜົນ..."
|
||||||
category: "ຫມວດຫມູ່"
|
category: "ຫມວດຫມູ່"
|
||||||
tags: "Aliases"
|
tags: "ແທ໋ກ"
|
||||||
createAccount: "ສ້າງບັນຊີ"
|
createAccount: "ສ້າງບັນຊີ"
|
||||||
existingAccount: "ບັນຊີທີ່ມີຢູ່ແລ້ວ"
|
existingAccount: "ທີ່ມີຢູ່"
|
||||||
dashboard: "Dashboard"
|
dashboard: "ໜ້າປັດ"
|
||||||
local: "ທ້ອງຖິ່ນ"
|
local: "ທ້ອງຖິ່ນ"
|
||||||
numberOfDays: "ຈຳນວນມື້"
|
numberOfDays: "ຈຳນວນມື້"
|
||||||
objectStorageBucket: "Bucket"
|
objectStorageBucket: "Bucket"
|
||||||
objectStoragePrefix: "Prefix"
|
objectStoragePrefix: "Prefix"
|
||||||
objectStorageEndpoint: "Endpoint"
|
objectStorageEndpoint: "Endpoint"
|
||||||
objectStorageRegion: "ພູມິພາກ"
|
objectStorageRegion: "ພາກພື້ນ"
|
||||||
deleteAll: "ລຶບທັງໝົດ"
|
deleteAll: "ລຶບທັງໝົດ"
|
||||||
sounds: "ສຽງ"
|
sounds: "ສຽງ"
|
||||||
sound: "ສຽງ"
|
sound: "ສຽງ"
|
||||||
@@ -364,11 +363,11 @@ state: "ສະຖານະ"
|
|||||||
sort: "ຈັດຮຽງໂດຍ"
|
sort: "ຈັດຮຽງໂດຍ"
|
||||||
ascendingOrder: "ນ້ອຍໄປຫາໃຫຍ່"
|
ascendingOrder: "ນ້ອຍໄປຫາໃຫຍ່"
|
||||||
descendingOrder: "ໃຫຍ່ຫານ້ອຍ"
|
descendingOrder: "ໃຫຍ່ຫານ້ອຍ"
|
||||||
output: "Output"
|
output: "ຜົນຜະລິດ"
|
||||||
script: "Script"
|
script: "ບົດຄວາມ"
|
||||||
menu: "ເມນູ"
|
menu: "ເມນູ"
|
||||||
rearrange: "ຈັດລຽງໃໝ່"
|
rearrange: "ຈັດລຽງຄືນ"
|
||||||
poll: "Poll"
|
poll: "ການພູນ"
|
||||||
description: "ລາຍລະອຽດ"
|
description: "ລາຍລະອຽດ"
|
||||||
author: "ຜູ້ຂຽນ"
|
author: "ຜູ້ຂຽນ"
|
||||||
manage: "ການຈັດການ"
|
manage: "ການຈັດການ"
|
||||||
@@ -382,7 +381,7 @@ permission: "ການອະນຸຍາດ"
|
|||||||
notificationType: "ປະເພດການແຈ້ງເຕືອນ"
|
notificationType: "ປະເພດການແຈ້ງເຕືອນ"
|
||||||
edit: "ແກ້ໄຂ"
|
edit: "ແກ້ໄຂ"
|
||||||
email: "ອີເມວ"
|
email: "ອີເມວ"
|
||||||
smtpHost: "ໂຮສຕ໌"
|
smtpHost: "ໂຮດສ"
|
||||||
smtpUser: "ຊື່ຜູ້ໃຊ້"
|
smtpUser: "ຊື່ຜູ້ໃຊ້"
|
||||||
smtpPass: "ລະຫັດຜ່ານ"
|
smtpPass: "ລະຫັດຜ່ານ"
|
||||||
clearCache: "ລຶບລ້າງແຄສ"
|
clearCache: "ລຶບລ້າງແຄສ"
|
||||||
@@ -392,12 +391,6 @@ administration: "ການຈັດການ"
|
|||||||
middle: "ປານກາງ"
|
middle: "ປານກາງ"
|
||||||
searchByGoogle: "ຄົ້ນຫາ"
|
searchByGoogle: "ຄົ້ນຫາ"
|
||||||
file: "ໄຟລ໌"
|
file: "ໄຟລ໌"
|
||||||
replies: "ຕອບກັບ"
|
|
||||||
renotes: "Renote"
|
|
||||||
_delivery:
|
|
||||||
stop: "ໂຈະ"
|
|
||||||
_type:
|
|
||||||
none: "ກຳລັງເຜີຍແພ່"
|
|
||||||
_role:
|
_role:
|
||||||
_priority:
|
_priority:
|
||||||
middle: "ປານກາງ"
|
middle: "ປານກາງ"
|
||||||
@@ -412,11 +405,12 @@ _theme:
|
|||||||
_sfx:
|
_sfx:
|
||||||
note: "ບັນທຶກ"
|
note: "ບັນທຶກ"
|
||||||
notification: "ການແຈ້ງເຕືອນ"
|
notification: "ການແຈ້ງເຕືອນ"
|
||||||
|
chat: "ແຊ໋ດ"
|
||||||
_2fa:
|
_2fa:
|
||||||
renewTOTPCancel: "ບໍ່ແມ່ນຕອນນີ້"
|
renewTOTPCancel: "ບໍ່ແມ່ນຕອນນີ້"
|
||||||
_widgets:
|
_widgets:
|
||||||
profile: "ໂປຣໄຟລ໌"
|
profile: "ໂພຼຟາຍ"
|
||||||
instanceInfo: "ຂໍ້ມູລເຊີຟເວີຣ໌"
|
instanceInfo: "ອີນສະແຕນ"
|
||||||
notifications: "ການແຈ້ງເຕືອນ"
|
notifications: "ການແຈ້ງເຕືອນ"
|
||||||
timeline: "ເສັ້ນກຳນົດເວລາ"
|
timeline: "ເສັ້ນກຳນົດເວລາ"
|
||||||
activity: "ກິດຈະກຳ"
|
activity: "ກິດຈະກຳ"
|
||||||
@@ -435,29 +429,28 @@ _profile:
|
|||||||
_exportOrImport:
|
_exportOrImport:
|
||||||
followingList: "ກຳລັງຕິດຕາມ"
|
followingList: "ກຳລັງຕິດຕາມ"
|
||||||
muteList: "ປີດສຽງ"
|
muteList: "ປີດສຽງ"
|
||||||
blockingList: "ບລັອກ"
|
blockingList: "ບ໋ອກ"
|
||||||
userLists: "ລາຍການ"
|
userLists: "ລາຍການ"
|
||||||
_charts:
|
_charts:
|
||||||
federation: "ສະຫະພັນ"
|
federation: "ສະຫະພັນ"
|
||||||
_timelines:
|
_timelines:
|
||||||
home: "ໜ້າຫຼັກ"
|
home: "ໜ້າຫຼັກ"
|
||||||
_play:
|
_play:
|
||||||
script: "Script"
|
script: "ບົດຄວາມ"
|
||||||
summary: "ລາຍລະອຽດ"
|
summary: "ລາຍລະອຽດ"
|
||||||
_pages:
|
_pages:
|
||||||
blocks:
|
blocks:
|
||||||
image: "ຮູບພາບ"
|
image: "ຮູບພາບ"
|
||||||
_notification:
|
_notification:
|
||||||
youWereFollowed: "ໄດ້ຕິດຕາມເຈົ້າ"
|
youWereFollowed: "ໄດ້ຕິດຕາມທ່ານ"
|
||||||
_types:
|
_types:
|
||||||
follow: "ກຳລັງຕິດຕາມ"
|
follow: "ກຳລັງຕິດຕາມ"
|
||||||
mention: "ໄດ້ກ່າວເຖິງ"
|
mention: "ໄດ້ກ່າວມາ"
|
||||||
renote: "Renote"
|
renote: "Renote"
|
||||||
quote: "ອ້າງອີງ"
|
quote: "ລວມຂໍ້ຄວາມອ້າງອີງ"
|
||||||
reaction: "Reaction"
|
reaction: "ປະຕິກິລິຍາ"
|
||||||
login: "ເຂົ້າສູ່ລະບົບ"
|
|
||||||
_actions:
|
_actions:
|
||||||
reply: "ຕອບກັບ"
|
reply: "ຕອບໄປທີ"
|
||||||
renote: "Renote"
|
renote: "Renote"
|
||||||
_deck:
|
_deck:
|
||||||
_columns:
|
_columns:
|
||||||
@@ -465,17 +458,6 @@ _deck:
|
|||||||
tl: "ເສັ້ນກຳນົດເວລາ"
|
tl: "ເສັ້ນກຳນົດເວລາ"
|
||||||
list: "ລາຍການ"
|
list: "ລາຍການ"
|
||||||
channel: "ຊ່ອງ"
|
channel: "ຊ່ອງ"
|
||||||
mentions: "ກ່າວເຖິງເຈົ້າ"
|
mentions: "ກ່າວເຖິງ"
|
||||||
_webhookSettings:
|
_webhookSettings:
|
||||||
name: "ຊື່"
|
name: "ຊື່"
|
||||||
_abuseReport:
|
|
||||||
_notificationRecipient:
|
|
||||||
_recipientType:
|
|
||||||
mail: "ອີເມວ"
|
|
||||||
_moderationLogTypes:
|
|
||||||
suspend: "ລະງັບ"
|
|
||||||
_remoteLookupErrors:
|
|
||||||
_noSuchObject:
|
|
||||||
title: "ບໍ່ພົບ"
|
|
||||||
_search:
|
|
||||||
searchScopeAll: "ທັງໝົດ"
|
|
||||||
|
@@ -8,9 +8,6 @@ search: "Zoeken"
|
|||||||
notifications: "Meldingen"
|
notifications: "Meldingen"
|
||||||
username: "Gebruikersnaam"
|
username: "Gebruikersnaam"
|
||||||
password: "Wachtwoord"
|
password: "Wachtwoord"
|
||||||
initialPasswordForSetup: "Initiële wachtwoord voor configuratie"
|
|
||||||
initialPasswordIsIncorrect: "Initiële wachtwoord voor configuratie is onjuist"
|
|
||||||
initialPasswordForSetupDescription: "Gebruik het initiële wachtwoord uit de configuratie, als je Misskey zelf hebt geïnstalleerd.\nAls je een Misskey hosting provider gebruikt, gebruik dan het gegeven wachtwoord.\nAls je geen wachtwoord hebt gezet, laat het dan leeg om verder te gaan."
|
|
||||||
forgotPassword: "Wachtwoord vergeten"
|
forgotPassword: "Wachtwoord vergeten"
|
||||||
fetchingAsApObject: "Ophalen vanuit de Fediverse"
|
fetchingAsApObject: "Ophalen vanuit de Fediverse"
|
||||||
ok: "Ok"
|
ok: "Ok"
|
||||||
@@ -48,7 +45,6 @@ pin: "Vastmaken aan profielpagina"
|
|||||||
unpin: "Losmaken van profielpagina"
|
unpin: "Losmaken van profielpagina"
|
||||||
copyContent: "Kopiëren inhoud"
|
copyContent: "Kopiëren inhoud"
|
||||||
copyLink: "Kopiëren link"
|
copyLink: "Kopiëren link"
|
||||||
copyLinkRenote: ""
|
|
||||||
delete: "Verwijderen"
|
delete: "Verwijderen"
|
||||||
deleteAndEdit: "Verwijderen en bewerken"
|
deleteAndEdit: "Verwijderen en bewerken"
|
||||||
deleteAndEditConfirm: "Weet je zeker dat je deze notitie wilt verwijderen en dan bewerken? Je verliest alle reacties, herdelingen en antwoorden erop."
|
deleteAndEditConfirm: "Weet je zeker dat je deze notitie wilt verwijderen en dan bewerken? Je verliest alle reacties, herdelingen en antwoorden erop."
|
||||||
@@ -111,12 +107,9 @@ enterEmoji: "Voer een emoji in"
|
|||||||
renote: "Herdelen"
|
renote: "Herdelen"
|
||||||
unrenote: "Stop herdelen"
|
unrenote: "Stop herdelen"
|
||||||
renoted: "Herdeeld"
|
renoted: "Herdeeld"
|
||||||
renotedToX: "Renoted naar {name}"
|
|
||||||
cantRenote: "Dit bericht kan niet worden herdeeld"
|
cantRenote: "Dit bericht kan niet worden herdeeld"
|
||||||
cantReRenote: "Een herdeling kan niet worden herdeeld"
|
cantReRenote: "Een herdeling kan niet worden herdeeld"
|
||||||
quote: "Quote"
|
quote: "Quote"
|
||||||
renoteToChannel: "Renote naar kanaal"
|
|
||||||
renoteToOtherChannel: "Renote naar ander kanaal"
|
|
||||||
pinnedNote: "Vastgemaakte notitie"
|
pinnedNote: "Vastgemaakte notitie"
|
||||||
pinned: "Vastmaken aan profielpagina"
|
pinned: "Vastmaken aan profielpagina"
|
||||||
you: "Jij"
|
you: "Jij"
|
||||||
@@ -125,10 +118,7 @@ sensitive: "NSFW"
|
|||||||
add: "Toevoegen"
|
add: "Toevoegen"
|
||||||
reaction: "Reacties"
|
reaction: "Reacties"
|
||||||
reactions: "Reacties"
|
reactions: "Reacties"
|
||||||
emojiPicker: "Emoji kiezer"
|
reactionSetting: "Reacties die in de reactie-selector worden getoond"
|
||||||
pinnedEmojisForReactionSettingDescription: "Kies de emojis die als eerste getoond worden tijdens het reageren"
|
|
||||||
pinnedEmojisSettingDescription: "Kies de emojis die als eerste getoond worden tijdens het reageren"
|
|
||||||
emojiPickerDisplay: "Emoji kiezer weergave"
|
|
||||||
reactionSettingDescription2: "Sleep om opnieuw te ordenen, Klik om te verwijderen, Druk op \"+\" om toe te voegen"
|
reactionSettingDescription2: "Sleep om opnieuw te ordenen, Klik om te verwijderen, Druk op \"+\" om toe te voegen"
|
||||||
rememberNoteVisibility: "Vergeet niet de notitie zichtbaarheidsinstellingen"
|
rememberNoteVisibility: "Vergeet niet de notitie zichtbaarheidsinstellingen"
|
||||||
attachCancel: "Verwijder bijlage"
|
attachCancel: "Verwijder bijlage"
|
||||||
@@ -150,7 +140,7 @@ selectAntenna: "Kies een antenne"
|
|||||||
selectWidget: "Kies een widget"
|
selectWidget: "Kies een widget"
|
||||||
editWidgets: "Bewerk widgets"
|
editWidgets: "Bewerk widgets"
|
||||||
editWidgetsExit: "Klaar"
|
editWidgetsExit: "Klaar"
|
||||||
customEmojis: "Eigen emoji"
|
customEmojis: "Maatwerk emoji"
|
||||||
emoji: "Emoji"
|
emoji: "Emoji"
|
||||||
emojis: "Emoji"
|
emojis: "Emoji"
|
||||||
emojiName: "Naam emoji"
|
emojiName: "Naam emoji"
|
||||||
@@ -343,10 +333,12 @@ enableLocalTimeline: "Inschakelen lokale tijdlijn"
|
|||||||
enableGlobalTimeline: "Inschakelen globale tijdlijn "
|
enableGlobalTimeline: "Inschakelen globale tijdlijn "
|
||||||
disablingTimelinesInfo: "Beheerders en moderators hebben altijd toegang tot alle tijdlijnen, ook als ze niet actief zijn."
|
disablingTimelinesInfo: "Beheerders en moderators hebben altijd toegang tot alle tijdlijnen, ook als ze niet actief zijn."
|
||||||
registration: "Registreren"
|
registration: "Registreren"
|
||||||
|
enableRegistration: "Inschakelen registratie nieuwe gebruikers "
|
||||||
invite: "Uitnodigen"
|
invite: "Uitnodigen"
|
||||||
driveCapacityPerLocalAccount: "Opslagruimte per lokale gebruiker"
|
driveCapacityPerLocalAccount: "Opslagruimte per lokale gebruiker"
|
||||||
driveCapacityPerRemoteAccount: "Opslagruimte per externe gebruiker"
|
driveCapacityPerRemoteAccount: "Opslagruimte per externe gebruiker"
|
||||||
inMb: "in megabytes"
|
inMb: "in megabytes"
|
||||||
|
iconUrl: "Pictogram URL"
|
||||||
bannerUrl: "Banner URL"
|
bannerUrl: "Banner URL"
|
||||||
backgroundImageUrl: "URL afbeelding"
|
backgroundImageUrl: "URL afbeelding"
|
||||||
basicInfo: "Basisinformatie"
|
basicInfo: "Basisinformatie"
|
||||||
@@ -357,8 +349,6 @@ hcaptcha: "hCaptcha"
|
|||||||
enableHcaptcha: "Inschakelen hCaptcha"
|
enableHcaptcha: "Inschakelen hCaptcha"
|
||||||
hcaptchaSiteKey: "Site sleutel"
|
hcaptchaSiteKey: "Site sleutel"
|
||||||
hcaptchaSecretKey: "Geheime sleutel"
|
hcaptchaSecretKey: "Geheime sleutel"
|
||||||
mcaptchaSiteKey: "Site sleutel"
|
|
||||||
mcaptchaSecretKey: "Geheime sleutel"
|
|
||||||
recaptcha: "reCAPTCHA"
|
recaptcha: "reCAPTCHA"
|
||||||
enableRecaptcha: "Inschakelen reCAPTCHA"
|
enableRecaptcha: "Inschakelen reCAPTCHA"
|
||||||
recaptchaSiteKey: "Site sleutel"
|
recaptchaSiteKey: "Site sleutel"
|
||||||
@@ -406,6 +396,7 @@ reduceUiAnimation: "Verminder beweging in de UI"
|
|||||||
share: "Delen"
|
share: "Delen"
|
||||||
notFound: "Niet gevonden"
|
notFound: "Niet gevonden"
|
||||||
uploadFolder: "Standaardmap voor uploaden"
|
uploadFolder: "Standaardmap voor uploaden"
|
||||||
|
cacheClear: "Cache verwijderen"
|
||||||
markAsReadAllNotifications: "Markeer alle meldingen als gelezen"
|
markAsReadAllNotifications: "Markeer alle meldingen als gelezen"
|
||||||
markAsReadAllUnreadNotes: "Markeer alle berichten als gelezen"
|
markAsReadAllUnreadNotes: "Markeer alle berichten als gelezen"
|
||||||
markAsReadAllTalkMessages: "Markeer alle berichten als gelezen"
|
markAsReadAllTalkMessages: "Markeer alle berichten als gelezen"
|
||||||
@@ -413,31 +404,7 @@ help: "Help"
|
|||||||
inputMessageHere: "Voer hier je bericht in"
|
inputMessageHere: "Voer hier je bericht in"
|
||||||
close: "Sluiten"
|
close: "Sluiten"
|
||||||
invites: "Uitnodigen"
|
invites: "Uitnodigen"
|
||||||
members: "Leden"
|
|
||||||
transfer: "Overdracht"
|
|
||||||
title: "Titel"
|
|
||||||
text: "Tekst"
|
|
||||||
enable: "Inschakelen"
|
|
||||||
next: "Volgende"
|
|
||||||
retype: "Opnieuw invoeren"
|
|
||||||
noteOf: "Notitie van {user}"
|
|
||||||
quoteAttached: "Citaat"
|
|
||||||
quoteQuestion: "Toevoegen als citaat?"
|
|
||||||
invitations: "Uitnodigen"
|
invitations: "Uitnodigen"
|
||||||
dashboard: "Overzicht"
|
|
||||||
local: "Lokaal"
|
|
||||||
remote: "Remote"
|
|
||||||
total: "Totaal"
|
|
||||||
weekOverWeekChanges: "Wijzigingen sinds vorige week"
|
|
||||||
dayOverDayChanges: "Dagelijkse wijzigingen"
|
|
||||||
appearance: "Weergave"
|
|
||||||
clientSettings: "Clientinstellingen"
|
|
||||||
accountSettings: "Accountinstellingen"
|
|
||||||
promotion: "Promotie"
|
|
||||||
promote: "Promoot"
|
|
||||||
numberOfDays: "Aantal dagen"
|
|
||||||
hideThisNote: "Verberg deze notitie"
|
|
||||||
showFeaturedNotesInTimeline: "Laat featured notities in tijdlijn zien"
|
|
||||||
sound: "Geluid"
|
sound: "Geluid"
|
||||||
smtpHost: "Server"
|
smtpHost: "Server"
|
||||||
smtpUser: "Gebruikersnaam"
|
smtpUser: "Gebruikersnaam"
|
||||||
@@ -460,12 +427,6 @@ windowMaximize: "Maximaliseren"
|
|||||||
windowRestore: "Herstellen"
|
windowRestore: "Herstellen"
|
||||||
loggedInAsBot: "Momenteel als bot ingelogd"
|
loggedInAsBot: "Momenteel als bot ingelogd"
|
||||||
icon: "Avatar"
|
icon: "Avatar"
|
||||||
replies: "Antwoord"
|
|
||||||
renotes: "Herdelen"
|
|
||||||
_delivery:
|
|
||||||
stop: "Opgeschort"
|
|
||||||
_type:
|
|
||||||
none: "Publiceren"
|
|
||||||
_email:
|
_email:
|
||||||
_follow:
|
_follow:
|
||||||
title: "volgde jou"
|
title: "volgde jou"
|
||||||
@@ -476,6 +437,7 @@ _theme:
|
|||||||
_sfx:
|
_sfx:
|
||||||
note: "Notities"
|
note: "Notities"
|
||||||
notification: "Meldingen"
|
notification: "Meldingen"
|
||||||
|
chat: "Chat"
|
||||||
_2fa:
|
_2fa:
|
||||||
renewTOTPCancel: "Nee, bedankt"
|
renewTOTPCancel: "Nee, bedankt"
|
||||||
_widgets:
|
_widgets:
|
||||||
@@ -519,7 +481,6 @@ _notification:
|
|||||||
renote: "Herdelen"
|
renote: "Herdelen"
|
||||||
quote: "Quote"
|
quote: "Quote"
|
||||||
reaction: "Reacties"
|
reaction: "Reacties"
|
||||||
login: "Inloggen"
|
|
||||||
_actions:
|
_actions:
|
||||||
reply: "Antwoord"
|
reply: "Antwoord"
|
||||||
renote: "Herdelen"
|
renote: "Herdelen"
|
||||||
@@ -532,13 +493,3 @@ _deck:
|
|||||||
mentions: "Vermeldingen"
|
mentions: "Vermeldingen"
|
||||||
_webhookSettings:
|
_webhookSettings:
|
||||||
name: "Naam"
|
name: "Naam"
|
||||||
_moderationLogTypes:
|
|
||||||
suspend: "Opschorten"
|
|
||||||
resetPassword: "Wachtwoord terugzetten"
|
|
||||||
_reversi:
|
|
||||||
total: "Totaal"
|
|
||||||
_remoteLookupErrors:
|
|
||||||
_noSuchObject:
|
|
||||||
title: "Niet gevonden"
|
|
||||||
_search:
|
|
||||||
searchScopeAll: "Alle"
|
|
||||||
|
@@ -102,6 +102,7 @@ clickToShow: "Klikk for å vise"
|
|||||||
add: "Legg til"
|
add: "Legg til"
|
||||||
reaction: "Reaksjon"
|
reaction: "Reaksjon"
|
||||||
reactions: "Reaksjoner"
|
reactions: "Reaksjoner"
|
||||||
|
reactionSetting: "Reaksjoner som vises i reaksjonsvelgeren"
|
||||||
reactionSettingDescription2: "Dra for å endre rekkefølgen, klikk for å slette, trykk \"+\" for å legge til."
|
reactionSettingDescription2: "Dra for å endre rekkefølgen, klikk for å slette, trykk \"+\" for å legge til."
|
||||||
rememberNoteVisibility: "Husk innstillingene for synlighet av Notes"
|
rememberNoteVisibility: "Husk innstillingene for synlighet av Notes"
|
||||||
attachCancel: "Fjern vedlegg"
|
attachCancel: "Fjern vedlegg"
|
||||||
@@ -260,6 +261,7 @@ enableLocalTimeline: "Aktiver lokal tidslinje"
|
|||||||
enableGlobalTimeline: "Aktiver global tidslinje"
|
enableGlobalTimeline: "Aktiver global tidslinje"
|
||||||
disablingTimelinesInfo: "Administratorer og Moderatorer vil alltid ha tilgang til alle tidslinjer, selv om de ikke er aktivert."
|
disablingTimelinesInfo: "Administratorer og Moderatorer vil alltid ha tilgang til alle tidslinjer, selv om de ikke er aktivert."
|
||||||
registration: "Registrer"
|
registration: "Registrer"
|
||||||
|
enableRegistration: "Aktiver registrering av nye brukere"
|
||||||
invite: "Inviter"
|
invite: "Inviter"
|
||||||
basicInfo: "Grunnleggende informasjon"
|
basicInfo: "Grunnleggende informasjon"
|
||||||
pinnedUsers: "Festede brukrere"
|
pinnedUsers: "Festede brukrere"
|
||||||
@@ -460,11 +462,6 @@ continue: "Fortsett"
|
|||||||
youFollowing: "Følger"
|
youFollowing: "Følger"
|
||||||
options: "Alternativ"
|
options: "Alternativ"
|
||||||
icon: "Avatar"
|
icon: "Avatar"
|
||||||
replies: "Svar"
|
|
||||||
renotes: "Renote"
|
|
||||||
surrender: "Avbryt"
|
|
||||||
_delivery:
|
|
||||||
stop: "Suspendert"
|
|
||||||
_initialAccountSetting:
|
_initialAccountSetting:
|
||||||
theseSettingsCanEditLater: "Du kan endre disse innstillingene senere."
|
theseSettingsCanEditLater: "Du kan endre disse innstillingene senere."
|
||||||
_achievements:
|
_achievements:
|
||||||
@@ -576,6 +573,9 @@ _channel:
|
|||||||
nameAndDescription: "Navn og beskrivelse"
|
nameAndDescription: "Navn og beskrivelse"
|
||||||
_menuDisplay:
|
_menuDisplay:
|
||||||
hide: "Skjul"
|
hide: "Skjul"
|
||||||
|
_wordMute:
|
||||||
|
soft: "Myk"
|
||||||
|
hard: "Hard"
|
||||||
_theme:
|
_theme:
|
||||||
description: "Beskrivelse"
|
description: "Beskrivelse"
|
||||||
color: "Farge"
|
color: "Farge"
|
||||||
@@ -602,6 +602,9 @@ _time:
|
|||||||
minute: "Minutter"
|
minute: "Minutter"
|
||||||
hour: "Timer"
|
hour: "Timer"
|
||||||
day: "Dager"
|
day: "Dager"
|
||||||
|
_timelineTutorial:
|
||||||
|
title: "Hvordan bruke Misskey"
|
||||||
|
step2_2: "Hva med å skrive en selvpresentasjon, eller bare \"Hei {name}!\" hvis du ikke har lyst?"
|
||||||
_2fa:
|
_2fa:
|
||||||
renewTOTPCancel: "Avbryt"
|
renewTOTPCancel: "Avbryt"
|
||||||
_weekday:
|
_weekday:
|
||||||
@@ -700,7 +703,6 @@ _notification:
|
|||||||
renote: "Renotes"
|
renote: "Renotes"
|
||||||
quote: "Sitater"
|
quote: "Sitater"
|
||||||
reaction: "Reaksjoner"
|
reaction: "Reaksjoner"
|
||||||
login: "Logg inn"
|
|
||||||
_actions:
|
_actions:
|
||||||
reply: "Svar"
|
reply: "Svar"
|
||||||
renote: "Renote"
|
renote: "Renote"
|
||||||
@@ -721,14 +723,3 @@ _deck:
|
|||||||
direct: "Direkte"
|
direct: "Direkte"
|
||||||
_webhookSettings:
|
_webhookSettings:
|
||||||
name: "Navn"
|
name: "Navn"
|
||||||
_abuseReport:
|
|
||||||
_notificationRecipient:
|
|
||||||
_recipientType:
|
|
||||||
mail: "E-post"
|
|
||||||
_moderationLogTypes:
|
|
||||||
suspend: "Suspender"
|
|
||||||
_remoteLookupErrors:
|
|
||||||
_noSuchObject:
|
|
||||||
title: "Ikke funnet"
|
|
||||||
_search:
|
|
||||||
searchScopeAll: "Alle"
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user