Compare commits
254 commits
miau
...
misskey-de
Author | SHA1 | Date | |
---|---|---|---|
|
41bef75d1a | ||
|
14e32557d2 | ||
|
6d7a29b2cb | ||
|
7db4af5578 | ||
|
f7747af690 | ||
4940894324 | |||
|
2618d72f1f | ||
|
38d5303ccd | ||
|
efafc31c9b | ||
|
b35c3114c8 | ||
|
b9f9fe2927 | ||
|
d393cabfe1 | ||
|
bf186de56c | ||
|
21279769c9 | ||
|
bc73ad2e56 | ||
|
f882e0b6b6 | ||
|
bc012784ef | ||
|
f66235f066 | ||
|
60710805d5 | ||
|
62f8af4891 | ||
|
7dd9f93efb | ||
|
972b03f842 | ||
|
a1cbffd14f | ||
|
38c1867a8b | ||
|
cb246d3459 | ||
|
40656e3ee2 | ||
ef9fdb93d2 | |||
|
02fafd5114 | ||
|
58b00e2f4c | ||
|
0de176a2ba | ||
|
1778269ea8 | ||
|
ccea04f391 | ||
|
135dfa8026 | ||
|
25b7d02540 | ||
|
4f0878e267 | ||
|
1eb504a640 | ||
|
ce9d29828d | ||
|
2fe4a51d26 | ||
|
452f2a07ac | ||
|
cd07eb222e | ||
a228d1ddaa | |||
d748ba2c51 | |||
a5c3fcea6e | |||
2bd4323b17 | |||
935fce338a | |||
366fae41ff | |||
0b9c961707 | |||
f14d5886f2 | |||
ea9e32096b | |||
121fa40621 | |||
|
f9444aa3d3 | ||
|
08c6ed04bf | ||
|
65c12903e4 | ||
e0e42a6425 | |||
b438a1935d | |||
|
4ab2f16ed3 | ||
|
dc1a35c13c | ||
|
1cb847aa80 | ||
|
034c5d792b | ||
|
0076797b15 | ||
|
ee0d3c6742 | ||
|
1163c85db6 | ||
|
af6dd4194f | ||
|
26c89e053d | ||
|
751e655d72 | ||
|
57c6db6952 | ||
|
66ffb253a2 | ||
|
ab5cd1cb15 | ||
|
4774bc1f47 | ||
|
1cc8fd54c0 | ||
|
e393ab6044 | ||
|
01688b543a | ||
|
b2af1948a4 | ||
|
0eb473198c | ||
|
44c85aff86 | ||
|
f8f3ecbf02 | ||
|
dd426735a0 | ||
|
0de973d293 | ||
|
9c6a220810 | ||
|
ec41aefeea | ||
|
66231c1669 | ||
|
f9ba35d928 | ||
|
ef83670716 | ||
|
949dbb3918 | ||
|
eb709508a4 | ||
|
eccc90c843 | ||
|
ded0f6f0df | ||
|
52a1ec9af1 | ||
|
b773d516d3 | ||
|
6bcd5cb310 | ||
|
01d5a97a4f | ||
|
afe0d9a266 | ||
|
add6e9b14b | ||
|
80a033c1cf | ||
|
c67c3b0360 | ||
|
f635d5b864 | ||
|
9205155fc9 | ||
|
65b0a002c7 | ||
|
2f65d91ea8 | ||
|
b846ebeb97 | ||
66b27bdc97 | |||
|
649bb672df | ||
|
27fef64cf3 | ||
|
e3bf53ea84 | ||
|
30aa1dcdcd | ||
|
7c7ce072c7 | ||
|
6ba888f476 | ||
|
bbdc52a7ea | ||
|
cb697cf582 | ||
|
4c2cd3c8d5 | ||
|
1bec974fe6 | ||
|
1069ae6525 | ||
|
ed41d542bb | ||
|
eac31eb323 | ||
|
324f5525b5 | ||
|
6f3e64f13e | ||
|
6f2d2a71f9 | ||
|
47dcb1b41f | ||
|
fa6eb0e0f2 | ||
|
bffe6fb9bf | ||
|
9ac526b6b6 | ||
ca6afd40ad | |||
8b7dcf4dba | |||
|
99dcd7bb27 | ||
|
6a7dff1c82 | ||
|
82e9658ac3 | ||
|
3f6e04697a | ||
|
c9b3ab80ca | ||
7f111f4474 | |||
|
f997b7dff2 | ||
|
a107dff4d6 | ||
|
bb68cfaa81 | ||
|
4fd386c3dc | ||
|
8648308823 | ||
|
2b1e03cc64 | ||
|
0f1c0a42a2 | ||
|
1a698111a4 | ||
|
9f7c9b122f | ||
|
9a4198293a | ||
|
ac162f9996 | ||
|
d7e7152bd3 | ||
|
a50b1d69a1 | ||
|
30bdfde4cc | ||
|
ea3d391df9 | ||
|
270e1212ac | ||
|
57bb6e611f | ||
|
31d73f4659 | ||
|
5c3e782d29 | ||
|
553d644781 | ||
|
7d8a70f99e | ||
|
0f550d568d | ||
|
0657995b42 | ||
|
fe460c022c | ||
|
d7c6e2e61c | ||
|
c04d3d22af | ||
|
164d4a9825 | ||
|
596a61ce18 | ||
|
40cd5c5a49 | ||
|
329f055a97 | ||
bc3ae901cc | |||
|
0ec266abf7 | ||
|
f834d6a813 | ||
|
4634920866 | ||
|
744db4b5ed | ||
|
bd3c6f4157 | ||
|
4329d9e76d | ||
|
311478e725 | ||
|
c27d9e11b4 | ||
|
de43b47ca8 | ||
|
3183a02824 | ||
|
0cae0a49e2 | ||
|
2366f568b9 | ||
|
5e95a1f7af | ||
|
6a4574b612 | ||
|
f071ea4902 | ||
|
0af581f2e6 | ||
|
0248a2a989 | ||
|
c67c0df762 | ||
|
929dc076ec | ||
|
58e83f8e4f | ||
|
7be4b2145b | ||
d5ef68336a | |||
|
126011c1a7 | ||
36f09b6cdc | |||
5728350267 | |||
|
e3461f1b58 | ||
|
ca5200d1f1 | ||
|
16fda89738 | ||
|
b2caf821ef | ||
|
734fe9fd9d | ||
|
03973654b5 | ||
|
1b2bd89383 | ||
|
1e8d84dbfa | ||
|
696e8add00 | ||
|
905d8625f8 | ||
|
bf4726f91d | ||
|
274352beab | ||
|
a1449455a2 | ||
a5241379af | |||
|
6f8e3fe366 | ||
1c2e2c4b06 | |||
|
55c22eec8b | ||
|
4a5d5fe20c | ||
|
12374bd6a3 | ||
|
c9e9129373 | ||
|
5ee53c222b | ||
|
3e1248ff35 | ||
4f4d2b7c53 | |||
ecdaeea94f | |||
|
d1e151172b | ||
|
2a2020b797 | ||
|
43b9a9e618 | ||
|
aabf12038c | ||
|
d3f25fa290 | ||
|
be383aa5b2 | ||
|
85365da69e | ||
|
e44cb42de4 | ||
|
ad123b3cce | ||
|
1e85a3025c | ||
|
c9d4c00708 | ||
e0c6688709 | |||
|
2d181ba5af | ||
|
f880d0631c | ||
|
a6fff86099 | ||
|
4efee455b1 | ||
|
14cc341cc9 | ||
|
ce6cc21bcd | ||
3796a3edea | |||
|
f995172c5d | ||
|
8e20e27ff9 | ||
|
699f24f3dc | ||
|
30a39a296d | ||
|
b70473ed60 | ||
54465d36a7 | |||
|
802a35d4b6 | ||
|
5b7595d9d7 | ||
|
d7bab7cf0b | ||
|
6422cde5f2 | ||
|
8df2f19b5b | ||
|
e29a310f7d | ||
|
70450fe6b4 | ||
|
7faa75d483 | ||
|
836ecff785 | ||
6078c986d3 | |||
b54f906605 | |||
|
4a55425fdb | ||
|
fdba255b9a | ||
|
1d8ec102f1 | ||
3a42fe50c6 | |||
|
e4dc25dd5c | ||
|
f1e6fa8ee2 | ||
10d979bd65 | |||
b5390c0922 | |||
|
963f538728 |
|
@ -1,4 +1,4 @@
|
||||||
# db settings
|
# db settings
|
||||||
POSTGRES_PASSWORD=example-foundkey-pass
|
POSTGRES_PASSWORD=example-misskey-pass
|
||||||
POSTGRES_USER=example-foundkey-user
|
POSTGRES_USER=example-misskey-user
|
||||||
POSTGRES_DB=foundkey
|
POSTGRES_DB=misskey
|
||||||
|
|
|
@ -1,34 +1,33 @@
|
||||||
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||||
# FoundKey configuration
|
# Misskey configuration
|
||||||
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||||
|
|
||||||
# ┌─────┐
|
# ┌─────┐
|
||||||
#───┘ URL └─────────────────────────────────────────────────────
|
#───┘ URL └─────────────────────────────────────────────────────
|
||||||
|
|
||||||
# Final accessible URL seen by a user.
|
# Final accessible URL seen by a user.
|
||||||
# Only the host part will be used.
|
|
||||||
# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE
|
|
||||||
# URL SETTINGS AFTER THAT!
|
|
||||||
url: https://example.tld/
|
url: https://example.tld/
|
||||||
|
|
||||||
|
# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE
|
||||||
|
# URL SETTINGS AFTER THAT!
|
||||||
|
|
||||||
# ┌───────────────────────┐
|
# ┌───────────────────────┐
|
||||||
#───┘ Port and TLS settings └───────────────────────────────────
|
#───┘ Port and TLS settings └───────────────────────────────────
|
||||||
|
|
||||||
#
|
#
|
||||||
# FoundKey requires a reverse proxy to support HTTPS connections.
|
# Misskey requires a reverse proxy to support HTTPS connections.
|
||||||
#
|
#
|
||||||
# +-------- https://example.tld/ ----------+
|
# +----- https://example.tld/ ------------+
|
||||||
# +------+ |+-------------+ +-----------------+|
|
# +------+ |+-------------+ +----------------+|
|
||||||
# | User | ---> || Proxy (443) | ---> | FoundKey (3000) ||
|
# | User | ---> || Proxy (443) | ---> | Misskey (3000) ||
|
||||||
# +------+ |+-------------+ +-----------------+|
|
# +------+ |+-------------+ +----------------+|
|
||||||
# +----------------------------------------+
|
# +---------------------------------------+
|
||||||
#
|
#
|
||||||
# You need to set up a reverse proxy. (e.g. nginx)
|
# You need to set up a reverse proxy. (e.g. nginx)
|
||||||
# An encrypted connection with HTTPS is highly recommended
|
# An encrypted connection with HTTPS is highly recommended
|
||||||
# because tokens may be transferred in GET requests.
|
# because tokens may be transferred in GET requests.
|
||||||
|
|
||||||
# The port that your FoundKey server should listen on.
|
# The port that your Misskey server should listen on.
|
||||||
port: 3000
|
port: 3000
|
||||||
|
|
||||||
# ┌──────────────────────────┐
|
# ┌──────────────────────────┐
|
||||||
|
@ -39,17 +38,16 @@ db:
|
||||||
port: 5432
|
port: 5432
|
||||||
|
|
||||||
# Database name
|
# Database name
|
||||||
db: foundkey
|
db: misskey
|
||||||
|
|
||||||
# Auth
|
# Auth
|
||||||
user: example-foundkey-user
|
user: example-misskey-user
|
||||||
pass: example-foundkey-pass
|
pass: example-misskey-pass
|
||||||
|
|
||||||
# Whether to disable query caching
|
# Whether disable Caching queries
|
||||||
# Default is to cache, i.e. false.
|
|
||||||
#disableCache: true
|
#disableCache: true
|
||||||
|
|
||||||
# Extra connection options
|
# Extra Connection options
|
||||||
#extra:
|
#extra:
|
||||||
# ssl: true
|
# ssl: true
|
||||||
|
|
||||||
|
@ -59,11 +57,7 @@ db:
|
||||||
redis:
|
redis:
|
||||||
host: localhost
|
host: localhost
|
||||||
port: 6379
|
port: 6379
|
||||||
# Address family to connect over.
|
#family: 0 # 0=Both, 4=IPv4, 6=IPv6
|
||||||
# Can be either a number or string (0/dual, 4/ipv4, 6/ipv6)
|
|
||||||
# Default is "dual".
|
|
||||||
#family: dual
|
|
||||||
# The following properties are optional.
|
|
||||||
#pass: example-pass
|
#pass: example-pass
|
||||||
#prefix: example-prefix
|
#prefix: example-prefix
|
||||||
#db: 1
|
#db: 1
|
||||||
|
@ -71,7 +65,6 @@ redis:
|
||||||
# ┌─────────────────────────────┐
|
# ┌─────────────────────────────┐
|
||||||
#───┘ Elasticsearch configuration └─────────────────────────────
|
#───┘ Elasticsearch configuration └─────────────────────────────
|
||||||
|
|
||||||
# Elasticsearch is optional.
|
|
||||||
#elasticsearch:
|
#elasticsearch:
|
||||||
# host: localhost
|
# host: localhost
|
||||||
# port: 9200
|
# port: 9200
|
||||||
|
@ -79,39 +72,56 @@ redis:
|
||||||
# user:
|
# user:
|
||||||
# pass:
|
# pass:
|
||||||
|
|
||||||
|
# ┌───────────────┐
|
||||||
|
#───┘ 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
|
||||||
|
# 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: 'aid'
|
||||||
|
|
||||||
# ┌─────────────────────┐
|
# ┌─────────────────────┐
|
||||||
#───┘ Other configuration └─────────────────────────────────────
|
#───┘ Other configuration └─────────────────────────────────────
|
||||||
|
|
||||||
# Whether to disable HSTS (not recommended)
|
# Whether disable HSTS
|
||||||
# Default is to enable HSTS, i.e. false.
|
|
||||||
#disableHsts: true
|
#disableHsts: true
|
||||||
|
|
||||||
# Number of worker processes by type.
|
# Number of worker processes
|
||||||
# The sum should not exceed the number of available cores.
|
#clusterLimit: 1
|
||||||
#clusterLimits:
|
|
||||||
# web: 1
|
|
||||||
# queue: 1
|
|
||||||
|
|
||||||
# Jobs each worker will try to work on at a time.
|
# Job concurrency per worker
|
||||||
#deliverJobConcurrency: 128
|
# deliverJobConcurrency: 128
|
||||||
#inboxJobConcurrency: 16
|
# inboxJobConcurrency: 16
|
||||||
|
|
||||||
# Rate limit for each Worker.
|
# Job rate limiter
|
||||||
# Use -1 to disable.
|
# deliverJobPerSec: 128
|
||||||
# A rate limit for deliver jobs is not recommended as it comes with
|
# inboxJobPerSec: 16
|
||||||
# a big performance penalty due to overhead of rate limiting.
|
|
||||||
#deliverJobPerSec: -1
|
|
||||||
#inboxJobPerSec: 16
|
|
||||||
|
|
||||||
# Number of times each job will be tried.
|
# Job attempts
|
||||||
# 1 means only try once and don't retry.
|
# deliverJobMaxAttempts: 12
|
||||||
#deliverJobMaxAttempts: 12
|
# inboxJobMaxAttempts: 8
|
||||||
#inboxJobMaxAttempts: 8
|
|
||||||
|
|
||||||
# Proxy for HTTP/HTTPS outgoing connections
|
# IP address family used for outgoing request (ipv4, ipv6 or dual)
|
||||||
|
#outgoingAddressFamily: ipv4
|
||||||
|
|
||||||
|
# Syslog option
|
||||||
|
#syslog:
|
||||||
|
# host: localhost
|
||||||
|
# port: 514
|
||||||
|
|
||||||
|
# Proxy for HTTP/HTTPS
|
||||||
#proxy: http://127.0.0.1:3128
|
#proxy: http://127.0.0.1:3128
|
||||||
|
|
||||||
# Hosts that should not be connected to through the proxy specified above
|
|
||||||
#proxyBypassHosts: [
|
#proxyBypassHosts: [
|
||||||
# 'example.com',
|
# 'example.com',
|
||||||
# '192.0.2.8'
|
# '192.0.2.8'
|
||||||
|
@ -125,37 +135,15 @@ redis:
|
||||||
# Media Proxy
|
# Media Proxy
|
||||||
#mediaProxy: https://example.com/proxy
|
#mediaProxy: https://example.com/proxy
|
||||||
|
|
||||||
# Proxy remote files
|
# Proxy remote files (default: false)
|
||||||
# Default is to not proxy remote files, i.e. false.
|
|
||||||
#proxyRemoteFiles: true
|
#proxyRemoteFiles: true
|
||||||
|
|
||||||
# Storage path for files if stored locally (absolute path)
|
# Sign to ActivityPub GET request (default: false)
|
||||||
# default is to store it in ./files in the directory foundkey is located in
|
#signToActivityPubGet: true
|
||||||
#internalStoragePath: '/etc/foundkey/files'
|
|
||||||
|
|
||||||
# Upload or download file size limits (bytes)
|
|
||||||
# default is 262144000 = 250MiB
|
|
||||||
#maxFileSize: 262144000
|
|
||||||
|
|
||||||
# Max note text length (in characters)
|
|
||||||
#maxNoteTextLength: 3000
|
|
||||||
|
|
||||||
# By default, Foundkey will fail when something tries to make it fetch something from private IPs.
|
|
||||||
# With the following setting you can explicitly allow some private CIDR subnets.
|
|
||||||
# Default is an empty list, i.e. none allowed.
|
|
||||||
#allowedPrivateNetworks: [
|
#allowedPrivateNetworks: [
|
||||||
# '127.0.0.1/32'
|
# '127.0.0.1/32'
|
||||||
#]
|
#]
|
||||||
|
|
||||||
# images used on error screens. You can use absolute or relative URLs.
|
# Upload or download file size limits (bytes)
|
||||||
# If you use relative URLs, be aware that the URL may be used on different pages/paths, so the path component should be absolute.
|
#maxFileSize: 262144000
|
||||||
#images:
|
|
||||||
# info: /twemoji/1f440.svg
|
|
||||||
# notFound: /twemoji/2049.svg
|
|
||||||
# error: /twemoji/1f480.svg
|
|
||||||
|
|
||||||
# Whether it should be allowed to fetch content in ActivityPub form without HTTP signatures.
|
|
||||||
# It is recommended to leave this as default to improve the effectiveness of instance blocks.s
|
|
||||||
# However, note that while this prevents fetching in ActivityPub form, it could still be scraped
|
|
||||||
# from the API or other representations if the other side is determined to do so.
|
|
||||||
#allowUnsignedFetches: false
|
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
.autogen
|
.autogen
|
||||||
|
.github
|
||||||
|
.travis
|
||||||
|
.vscode
|
||||||
.config
|
.config
|
||||||
.woodpecker
|
|
||||||
Dockerfile
|
Dockerfile
|
||||||
build/
|
build/
|
||||||
built/
|
built/
|
||||||
|
@ -10,3 +12,4 @@ elasticsearch/
|
||||||
node_modules/
|
node_modules/
|
||||||
redis/
|
redis/
|
||||||
files/
|
files/
|
||||||
|
misskey-assets/
|
||||||
|
|
|
@ -2,10 +2,9 @@ root = true
|
||||||
|
|
||||||
[*]
|
[*]
|
||||||
indent_style = tab
|
indent_style = tab
|
||||||
indent_size = 4
|
indent_size = 2
|
||||||
charset = utf-8
|
charset = utf-8
|
||||||
insert_final_newline = true
|
insert_final_newline = true
|
||||||
|
|
||||||
[*.yml]
|
[*.yml]
|
||||||
indent_style = space
|
indent_style = space
|
||||||
indent_size = 2
|
|
||||||
|
|
6
.gitattributes
vendored
|
@ -1 +1,7 @@
|
||||||
*.svg -diff -text
|
*.svg -diff -text
|
||||||
|
*.psd -diff -text
|
||||||
|
*.ai -diff -text
|
||||||
|
*.mqo -diff -text
|
||||||
|
*.glb -diff -text
|
||||||
|
*.blend -diff -text
|
||||||
|
*.afdesign -diff -text
|
||||||
|
|
3
.github/FUNDING.yml
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
# These are supported funding model platforms
|
||||||
|
|
||||||
|
patreon: syuilo
|
42
.github/ISSUE_TEMPLATE/01_bug-report.md
vendored
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
---
|
||||||
|
name: 🐛 Bug Report
|
||||||
|
about: Create a report to help us improve
|
||||||
|
title: ''
|
||||||
|
labels: ⚠️bug?
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Thanks for reporting!
|
||||||
|
First, in order to avoid duplicate Issues, please search to see if the problem you found has already been reported.
|
||||||
|
-->
|
||||||
|
|
||||||
|
## 💡 Summary
|
||||||
|
|
||||||
|
<!-- Tell us what the bug is -->
|
||||||
|
|
||||||
|
## 🥰 Expected Behavior
|
||||||
|
|
||||||
|
<!--- Tell us what should happen -->
|
||||||
|
|
||||||
|
## 🤬 Actual Behavior
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Tell us what happens instead of the expected behavior.
|
||||||
|
Please include errors from the developer console and/or server log files if you have access to them.
|
||||||
|
-->
|
||||||
|
|
||||||
|
## 📝 Steps to Reproduce
|
||||||
|
|
||||||
|
1.
|
||||||
|
2.
|
||||||
|
3.
|
||||||
|
|
||||||
|
## 📌 Environment
|
||||||
|
|
||||||
|
<!-- Tell us where on the platform it happens -->
|
||||||
|
|
||||||
|
Misskey version:
|
||||||
|
Your OS:
|
||||||
|
Your browser:
|
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 -->
|
7
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
contact_links:
|
||||||
|
- name: 👪 Misskey Forum
|
||||||
|
url: https://forum.misskey.io/
|
||||||
|
about: Ask questions and share knowledge
|
||||||
|
- name: 💬 Misskey official Discord
|
||||||
|
url: https://discord.gg/Wp8gVStHW3
|
||||||
|
about: Chat freely about Misskey
|
17
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
<!-- ℹ お読みください / README
|
||||||
|
PRありがとうございます! PRを作成する前に、コントリビューションガイドをご確認ください:
|
||||||
|
Thank you for your PR! Before creating a PR, please check the contribution guide:
|
||||||
|
https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md
|
||||||
|
-->
|
||||||
|
|
||||||
|
# What
|
||||||
|
<!-- このPRで何をしたのか? どう変わるのか? -->
|
||||||
|
<!-- What did you do with this PR? How will it change things? -->
|
||||||
|
|
||||||
|
# Why
|
||||||
|
<!-- なぜそうするのか? どういう意図なのか? 何が困っているのか? -->
|
||||||
|
<!-- Why do you do it? What are your intentions? What is the problem? -->
|
||||||
|
|
||||||
|
# Additional info (optional)
|
||||||
|
<!-- テスト観点など -->
|
||||||
|
<!-- Test perspective, etc -->
|
22
.github/dependabot.yml
vendored
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
# To get started with Dependabot version updates, you'll need to specify which
|
||||||
|
# package ecosystems to update and where the package manifests are located.
|
||||||
|
# Please see the documentation for all configuration options:
|
||||||
|
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
||||||
|
|
||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
- package-ecosystem: npm
|
||||||
|
directory: "/"
|
||||||
|
schedule:
|
||||||
|
interval: daily
|
||||||
|
open-pull-requests-limit: 0
|
||||||
|
- package-ecosystem: npm
|
||||||
|
directory: "/packages/backend"
|
||||||
|
schedule:
|
||||||
|
interval: daily
|
||||||
|
open-pull-requests-limit: 0
|
||||||
|
- package-ecosystem: npm
|
||||||
|
directory: "/packages/client"
|
||||||
|
schedule:
|
||||||
|
interval: daily
|
||||||
|
open-pull-requests-limit: 0
|
12
.github/labeler.yml
vendored
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
'⚙️Server':
|
||||||
|
- packages/backend/**/*
|
||||||
|
|
||||||
|
'🖥️Client':
|
||||||
|
- packages/client/**/*
|
||||||
|
|
||||||
|
'🧪Test':
|
||||||
|
- cypress/**/*
|
||||||
|
- packages/backend/test/**/*
|
||||||
|
|
||||||
|
'‼️ wrong locales':
|
||||||
|
- any: ['locales/*.yml', '!locales/ja-JP.yml']
|
15
.github/misskey/test.yml
vendored
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
url: 'http://misskey.local'
|
||||||
|
|
||||||
|
# ローカルでテストするときにポートを被らないようにするためデフォルトのものとは変える(以下同じ)
|
||||||
|
port: 61812
|
||||||
|
|
||||||
|
db:
|
||||||
|
host: localhost
|
||||||
|
port: 54312
|
||||||
|
db: test-misskey
|
||||||
|
user: postgres
|
||||||
|
pass: ''
|
||||||
|
redis:
|
||||||
|
host: localhost
|
||||||
|
port: 56312
|
||||||
|
id: aid
|
33
.github/workflows/docker-develop.yml
vendored
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
name: Publish Docker image (develop)
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- develop
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
push_to_registry:
|
||||||
|
name: Push Docker image to Docker Hub
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Check out the repo
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- name: Docker meta
|
||||||
|
id: meta
|
||||||
|
uses: docker/metadata-action@v3
|
||||||
|
with:
|
||||||
|
images: misskey/misskey
|
||||||
|
- name: Log in to Docker Hub
|
||||||
|
uses: docker/login-action@v1
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
- name: Build and Push to Docker Hub
|
||||||
|
uses: docker/build-push-action@v2
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
push: true
|
||||||
|
tags: misskey/misskey:develop
|
||||||
|
labels: develop
|
32
.github/workflows/docker.yml
vendored
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
name: Publish Docker image
|
||||||
|
|
||||||
|
on:
|
||||||
|
release:
|
||||||
|
types: [published]
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
push_to_registry:
|
||||||
|
name: Push Docker image to Docker Hub
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Check out the repo
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- name: Docker meta
|
||||||
|
id: meta
|
||||||
|
uses: docker/metadata-action@v3
|
||||||
|
with:
|
||||||
|
images: misskey/misskey
|
||||||
|
- name: Log in to Docker Hub
|
||||||
|
uses: docker/login-action@v1
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
- name: Build and Push to Docker Hub
|
||||||
|
uses: docker/build-push-action@v2
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
push: true
|
||||||
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
|
labels: ${{ steps.meta.outputs.labels }}
|
16
.github/workflows/labeler.yml
vendored
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
name: "Pull Request Labeler"
|
||||||
|
on:
|
||||||
|
pull_request_target:
|
||||||
|
branches-ignore:
|
||||||
|
- 'l10n_develop'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
triage:
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
pull-requests: write
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/labeler@v4
|
||||||
|
with:
|
||||||
|
repo-token: "${{ secrets.GITHUB_TOKEN }}"
|
39
.github/workflows/lint.yml
vendored
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
name: Lint
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
- develop
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
backend:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
- uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: 18.x
|
||||||
|
cache: 'yarn'
|
||||||
|
cache-dependency-path: |
|
||||||
|
packages/backend/yarn.lock
|
||||||
|
- run: yarn install
|
||||||
|
- run: yarn --cwd ./packages/backend lint
|
||||||
|
|
||||||
|
client:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
- uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: 18.x
|
||||||
|
cache: 'yarn'
|
||||||
|
cache-dependency-path: |
|
||||||
|
packages/client/yarn.lock
|
||||||
|
- run: yarn install
|
||||||
|
- run: yarn --cwd ./packages/client lint
|
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@v1
|
||||||
|
with:
|
||||||
|
app_id: ${{ secrets.DEPLOYBOT_APP_ID }}
|
||||||
|
private_key: ${{ secrets.DEPLOYBOT_PRIVATE_KEY }}
|
||||||
|
|
||||||
|
- name: Slash Command Dispatch
|
||||||
|
uses: peter-evans/slash-command-dispatch@v1
|
||||||
|
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
|
95
.github/workflows/pr-preview-deploy.yml
vendored
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
# Run secret-dependent integration tests only after /deploy approval
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types: [opened, reopened, synchronize]
|
||||||
|
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_name == 'repository_dispatch' &&
|
||||||
|
github.event.client_payload.slash_command.sha != '' &&
|
||||||
|
contains(github.event.client_payload.pull_request.head.sha, github.event.client_payload.slash_command.sha)
|
||||||
|
steps:
|
||||||
|
- uses: actions/github-script@v5
|
||||||
|
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@v5
|
||||||
|
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@v2
|
||||||
|
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@v5
|
||||||
|
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;
|
21
.github/workflows/pr-preview-destroy.yml
vendored
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
# file: .github/workflows/preview-closed.yaml
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types:
|
||||||
|
- closed
|
||||||
|
|
||||||
|
name: Destroy preview environment
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
destroy-preview-environment:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Context
|
||||||
|
uses: okteto/context@latest
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.OKTETO_TOKEN }}
|
||||||
|
|
||||||
|
- name: Destroy preview environment
|
||||||
|
uses: okteto/destroy-preview@latest
|
||||||
|
with:
|
||||||
|
name: pr-${{ github.event.number }}-syuilo
|
122
.github/workflows/test.yml
vendored
Normal file
|
@ -0,0 +1,122 @@
|
||||||
|
name: Test
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
- develop
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
mocha:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
node-version: [18.x]
|
||||||
|
|
||||||
|
services:
|
||||||
|
postgres:
|
||||||
|
image: postgres:13
|
||||||
|
ports:
|
||||||
|
- 54312:5432
|
||||||
|
env:
|
||||||
|
POSTGRES_DB: test-misskey
|
||||||
|
POSTGRES_HOST_AUTH_METHOD: trust
|
||||||
|
redis:
|
||||||
|
image: redis:6
|
||||||
|
ports:
|
||||||
|
- 56312:6379
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
- name: Use Node.js ${{ matrix.node-version }}
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: ${{ matrix.node-version }}
|
||||||
|
cache: 'yarn'
|
||||||
|
cache-dependency-path: |
|
||||||
|
packages/backend/yarn.lock
|
||||||
|
packages/client/yarn.lock
|
||||||
|
- name: Install dependencies
|
||||||
|
run: yarn install
|
||||||
|
- name: Check yarn.lock
|
||||||
|
run: git diff --exit-code yarn.lock
|
||||||
|
- name: Copy Configure
|
||||||
|
run: cp .github/misskey/test.yml .config
|
||||||
|
- name: Build
|
||||||
|
run: yarn build
|
||||||
|
- name: Test
|
||||||
|
run: yarn mocha
|
||||||
|
|
||||||
|
e2e:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
node-version: [18.x]
|
||||||
|
browser: [chrome]
|
||||||
|
|
||||||
|
services:
|
||||||
|
postgres:
|
||||||
|
image: postgres:13
|
||||||
|
ports:
|
||||||
|
- 54312:5432
|
||||||
|
env:
|
||||||
|
POSTGRES_DB: test-misskey
|
||||||
|
POSTGRES_HOST_AUTH_METHOD: trust
|
||||||
|
redis:
|
||||||
|
image: redis:6
|
||||||
|
ports:
|
||||||
|
- 56312:6379
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
# https://github.com/cypress-io/cypress-docker-images/issues/150
|
||||||
|
#- name: Install mplayer for FireFox
|
||||||
|
# run: sudo apt install mplayer -y
|
||||||
|
# if: ${{ matrix.browser == 'firefox' }}
|
||||||
|
#- uses: browser-actions/setup-firefox@latest
|
||||||
|
# if: ${{ matrix.browser == 'firefox' }}
|
||||||
|
- name: Use Node.js ${{ matrix.node-version }}
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: ${{ matrix.node-version }}
|
||||||
|
cache: 'yarn'
|
||||||
|
cache-dependency-path: |
|
||||||
|
packages/backend/yarn.lock
|
||||||
|
packages/client/yarn.lock
|
||||||
|
- name: Install dependencies
|
||||||
|
run: yarn install
|
||||||
|
- name: Check yarn.lock
|
||||||
|
run: git diff --exit-code yarn.lock
|
||||||
|
- name: Copy Configure
|
||||||
|
run: cp .github/misskey/test.yml .config
|
||||||
|
- name: Build
|
||||||
|
run: yarn build
|
||||||
|
# https://github.com/cypress-io/cypress/issues/4351#issuecomment-559489091
|
||||||
|
- name: ALSA Env
|
||||||
|
run: echo -e 'pcm.!default {\n type hw\n card 0\n}\n\nctl.!default {\n type hw\n card 0\n}' > ~/.asoundrc
|
||||||
|
- name: Cypress run
|
||||||
|
uses: cypress-io/github-action@v4
|
||||||
|
with:
|
||||||
|
install: false
|
||||||
|
start: npm run start:test
|
||||||
|
wait-on: 'http://localhost:61812'
|
||||||
|
headless: false
|
||||||
|
browser: ${{ matrix.browser }}
|
||||||
|
- uses: actions/upload-artifact@v2
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
name: ${{ matrix.browser }}-cypress-screenshots
|
||||||
|
path: cypress/screenshots
|
||||||
|
- uses: actions/upload-artifact@v2
|
||||||
|
if: always()
|
||||||
|
with:
|
||||||
|
name: ${{ matrix.browser }}-cypress-videos
|
||||||
|
path: cypress/videos
|
25
.gitignore
vendored
|
@ -1,19 +1,10 @@
|
||||||
# Visual Studio Code
|
# Visual Studio Code
|
||||||
/.vscode
|
/.vscode
|
||||||
/.vsls.json
|
!/.vscode/extensions.json
|
||||||
|
|
||||||
# Intelij-IDEA
|
# Intelij-IDEA
|
||||||
/.idea
|
/.idea
|
||||||
|
|
||||||
# Sublime Text
|
|
||||||
/*.sublime-*
|
|
||||||
|
|
||||||
# nano
|
|
||||||
.swp
|
|
||||||
|
|
||||||
# vimlocal
|
|
||||||
.vimlocal
|
|
||||||
|
|
||||||
# Node.js
|
# Node.js
|
||||||
node_modules
|
node_modules
|
||||||
report.*.json
|
report.*.json
|
||||||
|
@ -51,17 +42,3 @@ ormconfig.json
|
||||||
*.blend3
|
*.blend3
|
||||||
*.blend4
|
*.blend4
|
||||||
*.blend5
|
*.blend5
|
||||||
|
|
||||||
# Yarn
|
|
||||||
.yarn/*
|
|
||||||
!.yarn/patches
|
|
||||||
!.yarn/plugins
|
|
||||||
!.yarn/releases
|
|
||||||
!.yarn/sdks
|
|
||||||
!.yarn/versions
|
|
||||||
packages/client/.yarn/*
|
|
||||||
packages/backend/.yarn/*
|
|
||||||
packages/sw/.yarn/*
|
|
||||||
|
|
||||||
# TypeScript
|
|
||||||
tsconfig.tsbuildinfo
|
|
||||||
|
|
3
.gitmodules
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[submodule "misskey-assets"]
|
||||||
|
path = misskey-assets
|
||||||
|
url = https://github.com/misskey-dev/assets.git
|
32
.mailmap
|
@ -1,32 +0,0 @@
|
||||||
Andreas Nedbal <git@pixelde.su> <andreas.nedbal@in2code.de>
|
|
||||||
Andreas Nedbal <git@pixelde.su> <github-bf215181b5140522137b3d4f6b73544a@desu.email>
|
|
||||||
Balazs Nadasdi <balazs@weave.works> <yitsushi@gmail.com>
|
|
||||||
Chloe Kudryavtsev <code@toast.bunkerlabs.net> <code@code.bunkerlabs.net>
|
|
||||||
Chloe Kudryavtsev <code@toast.bunkerlabs.net> <toast+git@toast.cafe>
|
|
||||||
Chloe Kudryavtsev <code@toast.bunkerlabs.net> <toast@toast.cafe>
|
|
||||||
Dr. Gutfuck LLC <40531868+gutfuckllc@users.noreply.github.com>
|
|
||||||
Ehsan Javadynia <31900907+ehsanjavadynia@users.noreply.github.com> <ehsan.javadynia@gmail.com>
|
|
||||||
Norm <normandy@biribiri.dev>
|
|
||||||
Hakaba Hitoyo <tsukadayoshio@gmail.com> Hakaba Hitoyo <example@example.com>
|
|
||||||
Johann150 <johann.galle@protonmail.com> <johann@qwertqwefsday.eu>
|
|
||||||
Michcio <public+git@meekchopp.es> <michcio@noreply.akkoma>
|
|
||||||
Nya Candy <20502130+Candinya@users.noreply.github.com> <dev@candinya.com>
|
|
||||||
Nya Candy <20502130+Candinya@users.noreply.github.com> <github@lcy.moe>
|
|
||||||
Skehmatics <skeh@is.nota.live>
|
|
||||||
Skehmatics <skeh@is.nota.live> <skehmatics@gmail.com>
|
|
||||||
ThatOneCalculator <kainoa@t1c.dev> <44733677+ThatOneCalculator@users.noreply.github.com>
|
|
||||||
Weblate <noreply@weblate.org>
|
|
||||||
Xeltica <7106976+Xeltica@users.noreply.github.com>
|
|
||||||
YuzuRyo61 <yuzuryo61@yuzulia.com> <cyberman.craft@gmail.com>
|
|
||||||
YuzuRyo61 <yuzuryo61@yuzulia.com> <yuzuryo61@yuzulia.work>
|
|
||||||
dependabot[bot] <dependabot[bot]@users.noreply.github.com> <27856297+dependabot-preview[bot]@users.noreply.github.com>
|
|
||||||
dependabot[bot] <dependabot[bot]@users.noreply.github.com> <49699333+dependabot[bot]@users.noreply.github.com>
|
|
||||||
dependabot[bot] <dependabot[bot]@users.noreply.github.com> <support@dependabot.com>
|
|
||||||
imgbot[bot] <imgbot[bot]@users.noreply.github.com> <31301654+imgbot[bot]@users.noreply.github.com>
|
|
||||||
imgbot[bot] <imgbot[bot]@users.noreply.github.com> <ImgBotHelp@gmail.com>
|
|
||||||
marihachi <marihachi0620@gmail.com>
|
|
||||||
mei23 <m@m544.net> <30769358+mei23@users.noreply.github.com>
|
|
||||||
nullobsi <me@nullob.si>
|
|
||||||
otofune <otofune@gmail.com> <otofune@users.noreply.github.com>
|
|
||||||
syuilo <syuilotan@yahoo.co.jp> <Syuilotan@yahoo.co.jp>
|
|
||||||
xianon <xianon@hotmail.co.jp>
|
|
|
@ -1 +1 @@
|
||||||
v18.7.0
|
v16.15.0
|
||||||
|
|
2
.npmrc
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
save-exact = true
|
||||||
|
package-lock = false
|
6
.okteto/okteto-pipeline.yml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
build:
|
||||||
|
misskey:
|
||||||
|
args:
|
||||||
|
- NODE_ENV=development
|
||||||
|
deploy:
|
||||||
|
- helm upgrade --install misskey chart --set image=${OKTETO_BUILD_MISSKEY_IMAGE} --set url="https://misskey-$(kubectl config view --minify -o jsonpath='{..namespace}').cloud.okteto.net" --set environment=development
|
9
.vscode/extensions.json
vendored
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
"recommendations": [
|
||||||
|
"editorconfig.editorconfig",
|
||||||
|
"eg2.vscode-npm-script",
|
||||||
|
"dbaeumer.vscode-eslint",
|
||||||
|
"Vue.volar",
|
||||||
|
"Vue.vscode-typescript-vue-plugin"
|
||||||
|
]
|
||||||
|
}
|
4
.vsls.json
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"$schema": "http://json.schemastore.org/vsls",
|
||||||
|
"gitignore": "exclude"
|
||||||
|
}
|
|
@ -1,22 +0,0 @@
|
||||||
clone:
|
|
||||||
git:
|
|
||||||
image: woodpeckerci/plugin-git
|
|
||||||
settings:
|
|
||||||
depth: 1 # CI does not need commit history
|
|
||||||
recursive: true
|
|
||||||
|
|
||||||
pipeline:
|
|
||||||
install:
|
|
||||||
when:
|
|
||||||
branch: main
|
|
||||||
event: push
|
|
||||||
image: node:18.6.0
|
|
||||||
commands:
|
|
||||||
- yarn install
|
|
||||||
build:
|
|
||||||
when:
|
|
||||||
branch: main
|
|
||||||
event: push
|
|
||||||
image: node:18.6.0
|
|
||||||
commands:
|
|
||||||
- yarn build
|
|
|
@ -1,22 +0,0 @@
|
||||||
clone:
|
|
||||||
git:
|
|
||||||
image: woodpeckerci/plugin-git
|
|
||||||
settings:
|
|
||||||
depth: 1 # CI does not need commit history
|
|
||||||
recursive: true
|
|
||||||
|
|
||||||
pipeline:
|
|
||||||
install:
|
|
||||||
when:
|
|
||||||
branch: main
|
|
||||||
event: push
|
|
||||||
image: node:18.6.0
|
|
||||||
commands:
|
|
||||||
- yarn install
|
|
||||||
lint:
|
|
||||||
when:
|
|
||||||
branch: main
|
|
||||||
event: push
|
|
||||||
image: node:18.6.0
|
|
||||||
commands:
|
|
||||||
- yarn workspace backend run lint
|
|
|
@ -1,22 +0,0 @@
|
||||||
clone:
|
|
||||||
git:
|
|
||||||
image: woodpeckerci/plugin-git
|
|
||||||
settings:
|
|
||||||
depth: 1 # CI does not need commit history
|
|
||||||
recursive: true
|
|
||||||
|
|
||||||
pipeline:
|
|
||||||
install:
|
|
||||||
when:
|
|
||||||
branch: main
|
|
||||||
event: push
|
|
||||||
image: node:18.6.0
|
|
||||||
commands:
|
|
||||||
- yarn install
|
|
||||||
lint:
|
|
||||||
when:
|
|
||||||
branch: main
|
|
||||||
event: push
|
|
||||||
image: node:18.6.0
|
|
||||||
commands:
|
|
||||||
- yarn workspace client run lint
|
|
|
@ -1,22 +0,0 @@
|
||||||
clone:
|
|
||||||
git:
|
|
||||||
image: woodpeckerci/plugin-git
|
|
||||||
settings:
|
|
||||||
depth: 1 # CI does not need commit history
|
|
||||||
recursive: true
|
|
||||||
|
|
||||||
pipeline:
|
|
||||||
install:
|
|
||||||
when:
|
|
||||||
branch: main
|
|
||||||
event: push
|
|
||||||
image: node:18.6.0
|
|
||||||
commands:
|
|
||||||
- yarn install
|
|
||||||
lint:
|
|
||||||
when:
|
|
||||||
branch: main
|
|
||||||
event: push
|
|
||||||
image: node:18.6.0
|
|
||||||
commands:
|
|
||||||
- yarn workspace foundkey-js run lint
|
|
|
@ -1,22 +0,0 @@
|
||||||
clone:
|
|
||||||
git:
|
|
||||||
image: woodpeckerci/plugin-git
|
|
||||||
settings:
|
|
||||||
depth: 1 # CI does not need commit history
|
|
||||||
recursive: true
|
|
||||||
|
|
||||||
pipeline:
|
|
||||||
install:
|
|
||||||
when:
|
|
||||||
branch: main
|
|
||||||
event: push
|
|
||||||
image: node:18.6.0
|
|
||||||
commands:
|
|
||||||
- yarn install
|
|
||||||
lint:
|
|
||||||
when:
|
|
||||||
branch: main
|
|
||||||
event: push
|
|
||||||
image: node:18.6.0
|
|
||||||
commands:
|
|
||||||
- yarn workspace sw run lint
|
|
|
@ -1,13 +0,0 @@
|
||||||
url: 'http://misskey.local'
|
|
||||||
|
|
||||||
port: 80
|
|
||||||
|
|
||||||
db:
|
|
||||||
host: postgres
|
|
||||||
port: 5432
|
|
||||||
db: test-misskey
|
|
||||||
user: postgres
|
|
||||||
pass: ''
|
|
||||||
redis:
|
|
||||||
host: redis
|
|
||||||
port: 6379
|
|
|
@ -1,48 +0,0 @@
|
||||||
clone:
|
|
||||||
git:
|
|
||||||
image: woodpeckerci/plugin-git
|
|
||||||
settings:
|
|
||||||
depth: 1 # CI does not need commit history
|
|
||||||
recursive: true
|
|
||||||
|
|
||||||
depends_on:
|
|
||||||
- build
|
|
||||||
|
|
||||||
pipeline:
|
|
||||||
build:
|
|
||||||
when:
|
|
||||||
branch: main
|
|
||||||
event: push
|
|
||||||
image: node:18.6.0
|
|
||||||
commands:
|
|
||||||
- yarn install
|
|
||||||
- git diff --exit-code yarn.lock
|
|
||||||
- cp .woodpecker/misskey/test.yml .config
|
|
||||||
- yarn build
|
|
||||||
mocha:
|
|
||||||
when:
|
|
||||||
branch: main
|
|
||||||
event: push
|
|
||||||
image: node:18.6.0
|
|
||||||
commands:
|
|
||||||
- yarn mocha
|
|
||||||
e2e:
|
|
||||||
when:
|
|
||||||
branch: main
|
|
||||||
event: push
|
|
||||||
image: cypress/included:10.3.0
|
|
||||||
commands:
|
|
||||||
- npm run start:test &
|
|
||||||
- sleep 30 # wait for server to start
|
|
||||||
- cypress run --browser chrome
|
|
||||||
# TODO: upload screenshots and video artifacts?
|
|
||||||
# would need some kind of storage though
|
|
||||||
|
|
||||||
services:
|
|
||||||
postgres:
|
|
||||||
image: postgres:13
|
|
||||||
environment:
|
|
||||||
- POSTGRES_DB=test-misskey
|
|
||||||
- POSTGRES_HOST_AUTH_METHOD=trust
|
|
||||||
redis:
|
|
||||||
image: redis:6
|
|
541
.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
vendored
873
.yarn/releases/yarn-3.4.1.cjs
vendored
1
.yarnrc
Normal file
|
@ -0,0 +1 @@
|
||||||
|
network-timeout 600000
|
11
.yarnrc.yml
|
@ -1,11 +0,0 @@
|
||||||
httpTimeout: 600000
|
|
||||||
|
|
||||||
nodeLinker: node-modules
|
|
||||||
|
|
||||||
plugins:
|
|
||||||
- path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
|
|
||||||
spec: "@yarnpkg/plugin-interactive-tools"
|
|
||||||
- path: .yarn/plugins/@yarnpkg/plugin-workspace-tools.cjs
|
|
||||||
spec: "@yarnpkg/plugin-workspace-tools"
|
|
||||||
|
|
||||||
yarnPath: .yarn/releases/yarn-3.4.1.cjs
|
|
670
CHANGELOG-OLD.md
|
@ -1,670 +0,0 @@
|
||||||
**This is the changelog for Misskey v12.111.1 and earlier for historical reference. Changes for FoundKey versions post-fork can be found in the current [CHANGELOG.md](./CHANGELOG.md).**
|
|
||||||
|
|
||||||
**Contributors should use [changelog trailers](./CONTRIBUTING.md#changelog-trailer) for any changes that should be noted in the current changelog.**
|
|
||||||
|
|
||||||
## 12.x.x (unreleased)
|
|
||||||
|
|
||||||
### Changes
|
|
||||||
- ハイライトがみつけるに統合されました
|
|
||||||
- カスタム絵文字ページはインスタンス情報ページに統合されました
|
|
||||||
- 連合ページはインスタンス情報ページに統合されました
|
|
||||||
|
|
||||||
### Improvements
|
|
||||||
- Client: Fix URL-encoded routing
|
|
||||||
- Server: Allow GET method for some endpoints @syuilo
|
|
||||||
- Server: Add rate limit to i/notifications @tamaina
|
|
||||||
- Client: Improve control panel @syuilo
|
|
||||||
- Client: Show warning in control panel when there is an unresolved abuse report @syuilo
|
|
||||||
- Client: For notes with specified visibility, show recipients when hovering over visibility symbol. @Johann150
|
|
||||||
- Client: Add rss-ticker widget @syuilo
|
|
||||||
- Client: Removing entries from a clip @futchitwo
|
|
||||||
- Client: Poll highlights in explore page @syuilo
|
|
||||||
- Make possible to delete an account by admin @syuilo
|
|
||||||
- Improve player detection in URL preview @mei23
|
|
||||||
- Add Badge Image to Push Notification #8012 @tamaina
|
|
||||||
- Server: Improve performance
|
|
||||||
- Server: Supports IPv6 on Redis transport. @mei23
|
|
||||||
IPv4/IPv6 is used by default. You can tune this behavior via `redis.family`.
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- Server: Fix GenerateVideoThumbnail failed @mei23
|
|
||||||
- Server: Ensure temp directory cleanup @Johann150
|
|
||||||
- favicons of federated instances not showing @syuilo
|
|
||||||
- Client: fix switch to receive email notifications @syuilo
|
|
||||||
- Client: Page freezes when trying to open configuration page of existing webhooks @syuilo
|
|
||||||
|
|
||||||
## 12.111.1 (2022/06/13)
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- some fixes of multiple notification read @tamaina
|
|
||||||
- some GenerateVideoThumbnail failed @Johann150
|
|
||||||
- Client: デッキでウィジェットの情報が保存されない問題を修正 @syuilo
|
|
||||||
- Client: ギャラリーの投稿を開こうとすると編集画面が表示される @futchitwo
|
|
||||||
|
|
||||||
## 12.111.0 (2022/06/11)
|
|
||||||
### Note
|
|
||||||
- Node.js 16.15.0 or later is required
|
|
||||||
|
|
||||||
### Improvements
|
|
||||||
- Supports Unicode Emoji 14.0 @mei23
|
|
||||||
- プッシュ通知を複数アカウント対応に #7667 @tamaina
|
|
||||||
- プッシュ通知にクリックやactionを設定 #7667 @tamaina
|
|
||||||
- ドライブに画像ファイルをアップロードするときオリジナル画像を破棄してwebpublicのみ保持するオプション @tamaina
|
|
||||||
- Server: always remove completed tasks of job queue @Johann150
|
|
||||||
- Client: アバターの設定で画像をクロップできるように @syuilo
|
|
||||||
- Client: make emoji stand out more on reaction button @Johann150
|
|
||||||
- Client: display URL of QR code for TOTP registration @tamaina
|
|
||||||
- Client: render quote renote CWs as MFM @pixeldesu
|
|
||||||
- API: notifications/readは配列でも受け付けるように #7667 @tamaina
|
|
||||||
- API: ユーザー検索で、クエリがusernameの条件を満たす場合はusernameもLIKE検索するように @tamaina
|
|
||||||
- MFM: Allow speed changes in all animated MFMs @Johann150
|
|
||||||
- The theme color is now better validated. @Johann150
|
|
||||||
Your own theme color may be unset if it was in an invalid format.
|
|
||||||
Admins should check their instance settings if in doubt.
|
|
||||||
- Perform port diagnosis at startup only when Listen fails @mei23
|
|
||||||
- Rate limiting is now also usable for non-authenticated users. @Johann150 @mei23
|
|
||||||
Admins should make sure the reverse proxy sets the `X-Forwarded-For` header to the original address.
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- Server: keep file order of note attachement @Johann150
|
|
||||||
- Server: fix missing foreign key for reports leading to reports page being unusable @Johann150
|
|
||||||
- Server: fix internal in-memory caching @Johann150
|
|
||||||
- Server: prevent crash when processing certain PNGs @syuilo
|
|
||||||
- Server: Fix unable to generate video thumbnails @mei23
|
|
||||||
- Server: Fix `Cannot find module` issue @mei23
|
|
||||||
- Federation: Add rel attribute to host-meta @mei23
|
|
||||||
- Federation: add id for activitypub follows @Johann150
|
|
||||||
- Federation: use `source` instead of `_misskey_content` @Johann150
|
|
||||||
- Federation: ensure resolver does not fetch local resources via HTTP(S) @Johann150
|
|
||||||
- Federation: correctly render empty note text @Johann150
|
|
||||||
- Federation: Fix quote renotes containing no text being federated correctly @Johann150
|
|
||||||
- Federation: remove duplicate br tag/newline @Johann150
|
|
||||||
- Federation: add missing authorization checks @Johann150
|
|
||||||
- Client: fix profile picture height in mentions @tamaina
|
|
||||||
- Client: fix abuse reports page to be able to show all reports @Johann150
|
|
||||||
- Client: fix settings page @tamaina
|
|
||||||
- Client: fix profile tabs @futchitwo
|
|
||||||
- Client: fix popout URL @futchitwo
|
|
||||||
- Client: correctly handle MiAuth URLs with query string @sn0w
|
|
||||||
- Client: ノート詳細ページの新しいノートを表示する機能の動作が正しくなるように修正する @xianonn
|
|
||||||
- MFM: more animated functions support `speed` parameter @futchitwo
|
|
||||||
- MFM: limit large MFM @Johann150
|
|
||||||
|
|
||||||
## 12.110.1 (2022/04/23)
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- Fix GOP rendering @syuilo
|
|
||||||
- Improve performance of antenna, clip, and list @xianonn
|
|
||||||
|
|
||||||
## 12.110.0 (2022/04/11)
|
|
||||||
|
|
||||||
### Improvements
|
|
||||||
- Improve webhook @syuilo
|
|
||||||
- Client: Show loading icon on splash screen @syuilo
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- API: parameter validation of users/show was wrong
|
|
||||||
- Federation: リモートインスタンスへのダイレクト投稿が届かない問題を修正 @syuilo
|
|
||||||
|
|
||||||
## 12.109.2 (2022/04/03)
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- API: admin/update-meta was not working @syuilo
|
|
||||||
- Client: テーマを切り替えたり読み込んだりするとmeta[name="theme-color"]のcontentがundefinedになる問題を修正 @tamaina
|
|
||||||
|
|
||||||
## 12.109.1 (2022/04/02)
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- API: Renoteが行えない問題を修正
|
|
||||||
|
|
||||||
## 12.109.0 (2022/04/02)
|
|
||||||
|
|
||||||
### Improvements
|
|
||||||
- Webhooks @syuilo
|
|
||||||
- Bull Dashboardを組み込み、ジョブキューの確認や操作を行えるように @syuilo
|
|
||||||
- Bull Dashboardを開くには、最初だけ一旦ログアウトしてから再度管理者権限を持つアカウントでログインする必要があります
|
|
||||||
- Check that installed Node.js version fulfills version requirement @ThatOneCalculator
|
|
||||||
- Server: overall performance improvements @syuilo
|
|
||||||
- Federation: avoid duplicate activity delivery @Johann150
|
|
||||||
- Federation: limit federation of reactions on direct notes @Johann150
|
|
||||||
- Client: タッチパッド・タッチスクリーンでのデッキの操作性を向上 @tamaina
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- email address validation was not working @ybw2016v
|
|
||||||
- API: fix endpoint endpoint @Johann150
|
|
||||||
- API: fix admin/meta endpoint @syuilo
|
|
||||||
- API: improved validation and documentation for endpoints that accept different variants of input @Johann150
|
|
||||||
- API: `notes/create`: The `mediaIds` property is now deprecated. @Johann150
|
|
||||||
- Use `fileIds` instead, it has the same behaviour.
|
|
||||||
- Client: URIエンコーディングが異常でdecodeURIComponentが失敗するとURLが表示できなくなる問題を修正 @tamaina
|
|
||||||
|
|
||||||
## 12.108.1 (2022/03/12)
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- リレーが動作しない問題を修正 @xianonn
|
|
||||||
- ulidを使用していると動作しない問題を修正 @syuilo
|
|
||||||
- 外部からOGPが正しく取得できない問題を修正 @syuilo
|
|
||||||
- instance can not get the files from other instance when there are items in allowedPrivateNetworks in .config/default.yml @ybw2016v
|
|
||||||
|
|
||||||
## 12.108.0 (2022/03/09)
|
|
||||||
|
|
||||||
### NOTE
|
|
||||||
このバージョンからNode v16.14.0以降が必要です
|
|
||||||
|
|
||||||
### Changes
|
|
||||||
- ノートの最大文字数を設定できる機能が廃止され、デフォルトで一律3000文字になりました @syuilo
|
|
||||||
- Misskey can no longer terminate HTTPS connections. @Johann150
|
|
||||||
- If you did not use a reverse proxy (e.g. nginx) before, you will probably need to adjust
|
|
||||||
your configuration file and set up a reverse proxy. The `https` configuration key is no
|
|
||||||
longer recognized!
|
|
||||||
|
|
||||||
### Improvements
|
|
||||||
- インスタンスデフォルトテーマを設定できるように @syuilo
|
|
||||||
- ミュートに期限を設定できるように @syuilo
|
|
||||||
- アンケートが終了したときに通知が作成されるように @syuilo
|
|
||||||
- プロフィールの追加情報を最大16まで保存できるように @syuilo
|
|
||||||
- 連合チャートにPub&Subを追加 @syuilo
|
|
||||||
- 連合チャートにActiveを追加 @syuilo
|
|
||||||
- デフォルトで10秒以上時間がかかるデータベースへのクエリは中断されるように @syuilo
|
|
||||||
- 設定ファイルの`db.extra`に`statement_timeout`を設定することでタイムアウト時間を変更できます
|
|
||||||
- Client: スプラッシュスクリーンにインスタンスのアイコンを表示するように @syuilo
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- Client: リアクションピッカーの高さが低くなったまま戻らないことがあるのを修正 @syuilo
|
|
||||||
- Client: ユーザー名オートコンプリートが正しく動作しない問題を修正 @syuilo
|
|
||||||
- Client: タッチ操作だとウィジェットの編集がしにくいのを修正 @xianonn
|
|
||||||
- Client: register_note_view_interruptor()が動かないのを修正 @syuilo
|
|
||||||
- Client: iPhone X以降(?)でページの内容が全て表示しきれないのを修正 @tamaina
|
|
||||||
- Client: fix image caption on mobile @nullobsi
|
|
||||||
|
|
||||||
## 12.107.0 (2022/02/12)
|
|
||||||
|
|
||||||
### Improvements
|
|
||||||
- クライアント: テーマを追加 @syuilo
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- API: stats APIで内部エラーが発生する問題を修正 @syuilo
|
|
||||||
- クライアント: ソフトミュートですべてがマッチしてしまう場合があるのを修正 @tamaina
|
|
||||||
- クライアント: デバイスのスクリーンのセーフエリアを考慮するように @syuilo
|
|
||||||
- クライアント: 一部環境でサイドバーの投稿ボタンが表示されない問題を修正 @syuilo
|
|
||||||
|
|
||||||
## 12.106.3 (2022/02/11)
|
|
||||||
|
|
||||||
### Improvements
|
|
||||||
- クライアント: スマートフォンでの余白を調整 @syuilo
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- クライアント: ノートの詳細が表示されない問題を修正 @syuilo
|
|
||||||
|
|
||||||
## 12.106.2 (2022/02/11)
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- クライアント: 削除したノートがタイムラインから自動で消えない問題を修正 @syuilo
|
|
||||||
- クライアント: リアクション数が正しくないことがある問題を修正 @syuilo
|
|
||||||
- 一部環境でマイグレーションが動作しない問題を修正 @syuilo
|
|
||||||
|
|
||||||
## 12.106.1 (2022/02/11)
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- クライアント: ワードミュートが保存できない問題を修正 @syuilo
|
|
||||||
|
|
||||||
## 12.106.0 (2022/02/11)
|
|
||||||
|
|
||||||
### Improvements
|
|
||||||
- Improve federation chart @syuilo
|
|
||||||
- クライアント: リアクションピッカーのサイズを設定できるように @syuilo
|
|
||||||
- クライアント: リアクションピッカーの幅、高さ制限を緩和 @syuilo
|
|
||||||
- Docker: Update to Node v16.13.2 @mei23
|
|
||||||
- Update dependencies
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- validate regular expressions in word mutes @Johann150
|
|
||||||
|
|
||||||
## 12.105.0 (2022/02/09)
|
|
||||||
|
|
||||||
### Improvements
|
|
||||||
- インスタンスのテーマカラーを設定できるように @syuilo
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- 一部環境でマイグレーションが失敗する問題を修正 @syuilo
|
|
||||||
|
|
||||||
## 12.104.0 (2022/02/09)
|
|
||||||
|
|
||||||
### Note
|
|
||||||
ビルドする前に`npm run clean`を実行してください。
|
|
||||||
|
|
||||||
このリリースはマイグレーションの規模が大きいため、インスタンスによってはマイグレーションに時間がかかる可能性があります。
|
|
||||||
マイグレーションが終わらない場合は、チャートの情報はリセットされてしまいますが`__chart__`で始まるテーブルの**レコード**を全て削除(テーブル自体は消さないでください)してから再度試す方法もあります。
|
|
||||||
|
|
||||||
### Improvements
|
|
||||||
- チャートエンジンの強化 @syuilo
|
|
||||||
- テーブルサイズの削減
|
|
||||||
- notes/instance/perUserNotesチャートに添付ファイル付きノートの数を追加
|
|
||||||
- activeUsersチャートに新しい項目を追加
|
|
||||||
- federationチャートに新しい項目を追加
|
|
||||||
- apRequestチャートを追加
|
|
||||||
- networkチャート廃止
|
|
||||||
- クライアント: 自インスタンス情報ページでチャートを見れるように @syuilo
|
|
||||||
- クライアント: デバイスの種類を手動指定できるように @syuilo
|
|
||||||
- クライアント: UIのアイコンを更新 @syuilo
|
|
||||||
- クライアント: UIのアイコンをセルフホスティングするように @syuilo
|
|
||||||
- NodeInfo のユーザー数と投稿数の内容を見直す @xianonn
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- Client: タイムライン種別を切り替えると「新しいノートがあります」の表示が残留してしまうのを修正 @tamaina
|
|
||||||
- Client: UIのサイズがおかしくなる問題の修正 @tamaina
|
|
||||||
- Client: Setting instance information of notes to always show breaks the timeline @Johann150
|
|
||||||
- Client: 環境に依っては返信する際のカーソル位置が正しくない問題を修正 @syuilo
|
|
||||||
- Client: コントロールパネルのユーザー、ファイルにて、インスタンスの表示範囲切り替えが機能しない問題を修正 @syuilo
|
|
||||||
- Client: アップデートお知らせダイアログが出ないのを修正 @syuilo
|
|
||||||
- Client: Follows/Followers Visibility changes won't be saved unless clicking on an other checkbox @Johann150
|
|
||||||
- API: Fix API cast @mei23
|
|
||||||
- add instance favicon where it's missing @solfisher
|
|
||||||
- チャートの定期resyncが動作していない問題を修正 @syuilo
|
|
||||||
|
|
||||||
## 12.103.1 (2022/02/02)
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- クライアント: ツールチップの表示位置が正しくない問題を修正
|
|
||||||
|
|
||||||
## 12.103.0 (2022/02/02)
|
|
||||||
|
|
||||||
### Improvements
|
|
||||||
- クライアント: 連合インスタンスページからインスタンス情報再取得を行えるように
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- クライアント: 投稿のNSFW画像を表示したあとにリアクションが更新されると画像が非表示になる問題を修正
|
|
||||||
- クライアント: 「クリップ」ページが開かない問題を修正
|
|
||||||
- クライアント: トレンドウィジェットが動作しないのを修正
|
|
||||||
- クライアント: フェデレーションウィジェットが動作しないのを修正
|
|
||||||
- クライアント: リアクション設定で絵文字ピッカーが開かないのを修正
|
|
||||||
- クライアント: DMページでメンションが含まれる問題を修正
|
|
||||||
- クライアント: 投稿フォームのハッシュタグ保持フィールドが動作しない問題を修正
|
|
||||||
- クライアント: サイドビューが動かないのを修正
|
|
||||||
- クライアント: ensure that specified users does not get duplicates
|
|
||||||
- Add `img-src` and `media-src` directives to `Content-Security-Policy` for
|
|
||||||
files and media proxy
|
|
||||||
|
|
||||||
## 12.102.1 (2022/01/27)
|
|
||||||
### Bugfixes
|
|
||||||
- チャットが表示できない問題を修正
|
|
||||||
|
|
||||||
## 12.102.0 (2022/01/27)
|
|
||||||
|
|
||||||
### NOTE
|
|
||||||
アップデート後、一部カスタム絵文字が表示できなくなる場合があります。その場合、一旦絵文字管理ページから絵文字を一括エクスポートし、再度コントロールパネルから一括インポートすると直ります。
|
|
||||||
⚠ 12.102.0以前にエクスポートされたzipとは互換性がありません。アップデートしてからエクスポートを行なってください。
|
|
||||||
|
|
||||||
### Changes
|
|
||||||
- Room機能が削除されました
|
|
||||||
- 後日別リポジトリとして復活予定です
|
|
||||||
- リバーシ機能が削除されました
|
|
||||||
- 後日別リポジトリとして復活予定です
|
|
||||||
- Chat UIが削除されました
|
|
||||||
- ノートに添付できるファイルの数が16に増えました
|
|
||||||
- カスタム絵文字にSVGを指定した場合、PNGに変換されて表示されるようになりました
|
|
||||||
|
|
||||||
### Improvements
|
|
||||||
- カスタム絵文字一括編集機能
|
|
||||||
- カスタム絵文字一括インポート
|
|
||||||
- 投稿フォームで一時的に投稿するアカウントを切り替えられるように
|
|
||||||
- Unifying Misskey-specific IRIs in JSON-LD `@context`
|
|
||||||
- クライアントのパフォーマンス向上
|
|
||||||
- セキュリティの向上
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- アップロードエラー時の処理を修正
|
|
||||||
|
|
||||||
## 12.101.1 (2021/12/29)
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- SVG絵文字が表示できないのを修正
|
|
||||||
- エクスポートした絵文字の拡張子がfalseになることがあるのを修正
|
|
||||||
|
|
||||||
## 12.101.0 (2021/12/29)
|
|
||||||
|
|
||||||
### Improvements
|
|
||||||
- クライアント: ノートプレビューの精度を改善
|
|
||||||
- クライアント: MFM sparkleエフェクトの改善
|
|
||||||
- クライアント: デザインの調整
|
|
||||||
- セキュリティの向上
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- クライアント: 一部のコンポーネントが裏に隠れるのを修正
|
|
||||||
- fix html blockquote conversion
|
|
||||||
|
|
||||||
## 12.100.2 (2021/12/18)
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- クライアント: Deckカラムの増減がページをリロードするまで正しく反映されない問題を修正
|
|
||||||
- クライアント: 一部のコンポーネントが裏に隠れるのを修正
|
|
||||||
- クライアント: カスタム絵文字一覧ページの負荷が高いのを修正
|
|
||||||
|
|
||||||
## 12.100.1 (2021/12/17)
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- クライアント: デザインの調整
|
|
||||||
|
|
||||||
## 12.100.0 (2021/12/17)
|
|
||||||
|
|
||||||
### Improvements
|
|
||||||
- クライアント: モバイルでの各種メニュー、リアクションピッカーの表示を改善
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- クライアント: 一部のコンポーネントが裏に隠れるのを修正
|
|
||||||
|
|
||||||
## 12.99.3 (2021/12/14)
|
|
||||||
### Bugfixes
|
|
||||||
- クライアント: オートコンプリートがダイアログの裏に隠れる問題を修正
|
|
||||||
|
|
||||||
## 12.99.2 (2021/12/14)
|
|
||||||
|
|
||||||
## 12.99.1 (2021/12/14)
|
|
||||||
|
|
||||||
## 12.99.0 (2021/12/14)
|
|
||||||
|
|
||||||
### Improvements
|
|
||||||
- Added a user-level instance mute in user settings
|
|
||||||
- フォローエクスポートでミュートしているユーザーを含めないオプションを追加
|
|
||||||
- フォローエクスポートで使われていないアカウントを含めないオプションを追加
|
|
||||||
- カスタム絵文字エクスポート機能
|
|
||||||
- チャートのパフォーマンスの改善
|
|
||||||
- グループから抜けられるように
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- クライアント: タッチ機能付きディスプレイを使っていてマウス操作をしている場合に一部機能が動作しない問題を修正
|
|
||||||
- クライアント: クリップの設定を編集できない問題を修正
|
|
||||||
- クライアント: メニューなどがウィンドウの裏に隠れる問題を修正
|
|
||||||
|
|
||||||
## 12.98.0 (2021/12/03)
|
|
||||||
|
|
||||||
### Improvements
|
|
||||||
- API: /antennas/notes API で日付による絞り込みができるように
|
|
||||||
- クライアント: アンケートに投票する際に確認ダイアログを出すように
|
|
||||||
- クライアント: Renoteなノート詳細ページから元のノートページに遷移できるように
|
|
||||||
- クライアント: 画像ポップアップでクリックで閉じられるように
|
|
||||||
- クライアント: デザインの調整
|
|
||||||
- フォロワーを解除できる機能
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- クライアント: LTLやGTLが無効になっている場合でもUI上にタブが表示される問題を修正
|
|
||||||
- クライアント: ログインにおいてパスワードが誤っている際のエラーメッセージが正しく表示されない問題を修正
|
|
||||||
- クライアント: リアクションツールチップ、Renoteツールチップのユーザーの並び順を修正
|
|
||||||
- クライアント: サウンドのマスターボリュームが正しく保存されない問題を修正
|
|
||||||
- クライアント: 一部環境において通知が表示されると操作不能になる問題を修正
|
|
||||||
- クライアント: モバイルでタップしたときにツールチップが表示される問題を修正
|
|
||||||
- クライアント: リモートインスタンスのノートに返信するとき、対象のノートにそのリモートインスタンス内のユーザーへのメンションが含まれていると、返信テキスト内にローカルユーザーへのメンションとして引き継がれてしまう場合がある問題を修正
|
|
||||||
- クライアント: 画像ビューワーで全体表示した時に上側の一部しか表示されない画像がある問題を修正
|
|
||||||
- API: ユーザーを取得時に条件によっては内部エラーになる問題を修正
|
|
||||||
|
|
||||||
### Changes
|
|
||||||
- クライアント: ノートにモデレーターバッジを表示するのを廃止
|
|
||||||
|
|
||||||
## 12.97.0 (2021/11/19)
|
|
||||||
|
|
||||||
### Improvements
|
|
||||||
- クライアント: 返信先やRenoteに対しても自動折りたたみされるように
|
|
||||||
- クライアント: 長いスレッドの表示を改善
|
|
||||||
- クライアント: 翻訳にもMFMを適用し、元の文章の改行などを保持するように
|
|
||||||
- クライアント: アカウント削除に確認ダイアログを出すように
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- クライアント: ユーザー検索の「全て」が動作しない問題を修正
|
|
||||||
- クライアント: リアクション一覧、Renote一覧ツールチップのスタイルを修正
|
|
||||||
|
|
||||||
## 12.96.1 (2021/11/13)
|
|
||||||
### Improvements
|
|
||||||
- npm scriptの互換性を向上
|
|
||||||
|
|
||||||
## 12.96.0 (2021/11/13)
|
|
||||||
|
|
||||||
### Improvements
|
|
||||||
- フォロー/フォロワーを非公開にできるように
|
|
||||||
- インスタンスプロフィールレンダリング ready
|
|
||||||
- 通知のリアクションアイコンをホバーで拡大できるように
|
|
||||||
- RenoteボタンをホバーでRenoteしたユーザー一覧を表示するように
|
|
||||||
- 返信の際にメンションを含めるように
|
|
||||||
- 通報があったときに管理者へEメールで通知されるように
|
|
||||||
- メールアドレスのバリデーションを強化
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- アカウント削除処理があると高負荷になる問題を修正
|
|
||||||
- クライアント: 長いメニューが画面からはみ出す問題を修正
|
|
||||||
- クライアント: コントロールパネルのジョブキューに個々のジョブが表示されないのを修正
|
|
||||||
- クライアント: fix missing i18n string
|
|
||||||
- fix html conversion issue with code blocks
|
|
||||||
|
|
||||||
### Changes
|
|
||||||
- ノートにモバイルからの投稿か否かの情報を含めないように
|
|
||||||
|
|
||||||
## 12.95.0 (2021/10/31)
|
|
||||||
|
|
||||||
### Improvements
|
|
||||||
- スレッドミュート機能
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- リレー向けのActivityが一部実装で除外されてしまうことがあるのを修正
|
|
||||||
- 削除したノートやユーザーがリモートから参照されると復活することがあるのを修正
|
|
||||||
- クライアント: ページ編集時のドロップダウンメニューなどが動作しない問題を修正
|
|
||||||
- クライアント: コントロールパネルのカスタム絵文字タブが切り替わらないように見える問題を修正
|
|
||||||
- API: ユーザー情報の hasUnreadChannel が常に false になっている問題を修正
|
|
||||||
|
|
||||||
## 12.94.1 (2021/10/25)
|
|
||||||
|
|
||||||
### Improvements
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- クライアント: ユーザーページのナビゲーションが失敗する問題を修正
|
|
||||||
|
|
||||||
## 12.94.0 (2021/10/25)
|
|
||||||
|
|
||||||
### Improvements
|
|
||||||
- クライアント: 画像ビューアを強化
|
|
||||||
- クライアント: メンションにユーザーのアバターを表示するように
|
|
||||||
- クライアント: デザインの調整
|
|
||||||
- クライアント: twemojiをセルフホスティングするように
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- クライアント: CWで画像が隠されたとき、画像の高さがおかしいことになる問題を修正
|
|
||||||
|
|
||||||
### NOTE
|
|
||||||
- このバージョンから、iOS 15未満のサポートがされなくなります。対象のバージョンをお使いの方は、iOSのバージョンアップを行ってください。
|
|
||||||
|
|
||||||
## 12.93.2 (2021/10/23)
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- クライアント: ウィジェットを追加できない問題を修正
|
|
||||||
|
|
||||||
## 12.93.1 (2021/10/23)
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- クライアント: 通知上でローカルのリアクションが表示されないのを修正
|
|
||||||
|
|
||||||
## 12.93.0 (2021/10/23)
|
|
||||||
|
|
||||||
### Improvements
|
|
||||||
- クライアント: コントロールパネルのパフォーマンスを改善
|
|
||||||
- クライアント: 自分のリアクション一覧を見れるように
|
|
||||||
- 設定により、リアクション一覧を全員に公開することも可能
|
|
||||||
- クライアント: ユーザー検索の精度を強化
|
|
||||||
- クライアント: 新しいライトテーマを追加
|
|
||||||
- クライアント: 新しいダークテーマを追加
|
|
||||||
- API: ユーザーのリアクション一覧を取得する users/reactions を追加
|
|
||||||
- API: users/search および users/search-by-username-and-host を強化
|
|
||||||
- ミュート及びブロックのインポートを行えるように
|
|
||||||
- クライアント: /share のクエリでリプライやファイル等の情報を渡せるように
|
|
||||||
- チャートのsyncを毎日0時に自動で行うように
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- クライアント: テーマの管理が行えない問題を修正
|
|
||||||
- API: アプリケーション通知が取得できない問題を修正
|
|
||||||
- クライアント: リモートノートで意図せずローカルカスタム絵文字が使われてしまうことがあるのを修正
|
|
||||||
- ActivityPub: not reacted な Undo.Like がinboxに滞留するのを修正
|
|
||||||
|
|
||||||
### Changes
|
|
||||||
- 連合の考慮に問題があることなどが分かったため、モデレーターをブロックできない仕様を廃止しました
|
|
||||||
- データベースにログを保存しないようになりました
|
|
||||||
- ログを永続化したい場合はsyslogを利用してください
|
|
||||||
|
|
||||||
## 12.92.0 (2021/10/16)
|
|
||||||
|
|
||||||
### Improvements
|
|
||||||
- アカウント登録にメールアドレスの設定を必須にするオプション
|
|
||||||
- クライアント: 全体的なUIのブラッシュアップ
|
|
||||||
- クライアント: MFM関数構文のサジェストを実装
|
|
||||||
- クライアント: ノート本文を投稿フォーム内でプレビューできるように
|
|
||||||
- クライアント: 未読の通知のみ表示する機能
|
|
||||||
- クライアント: 通知ページで通知の種類によるフィルタ
|
|
||||||
- クライアント: アニメーションを減らす設定の適用範囲を拡充
|
|
||||||
- クライアント: 新しいダークテーマを追加
|
|
||||||
- クライアント: テーマコンパイラに hue と saturate 関数を追加
|
|
||||||
- ActivityPub: HTML -> MFMの変換を強化
|
|
||||||
- API: グループから抜ける users/groups/leave エンドポイントを実装
|
|
||||||
- API: i/notifications に unreadOnly オプションを追加
|
|
||||||
- API: ap系のエンドポイントをログイン必須化+レートリミット追加
|
|
||||||
- MFM: Add tag syntaxes of bold <b></b> and strikethrough <s></s>
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- Fix createDeleteAccountJob
|
|
||||||
- admin inbox queue does not show individual jobs
|
|
||||||
- クライアント: ヘッダーのタブが折り返される問題を修正
|
|
||||||
- クライアント: ヘッダーにタブが表示されている状態でタイトルをクリックしたときにタブ選択が表示されるのを修正
|
|
||||||
- クライアント: ユーザーページのタブが機能していない問題を修正
|
|
||||||
- クライアント: ピン留めユーザーの設定項目がない問題を修正
|
|
||||||
- クライアント: Deck UIにおいて、重ねたカラムの片方を畳んだ状態で右に出すと表示が壊れる問題を修正
|
|
||||||
- API: 管理者およびモデレーターをブロックできてしまう問題を修正
|
|
||||||
- MFM: Mentions in the link label are parsed as text
|
|
||||||
- MFM: Add a property to the URL node indicating whether it was enclosed in <>
|
|
||||||
- MFM: Disallows < and > in hashtags
|
|
||||||
|
|
||||||
### Changes
|
|
||||||
- 保守性やユーザビリティの観点から、Misskeyのコマンドラインオプションが削除されました。
|
|
||||||
- 必要であれば、代わりに環境変数で設定することができます
|
|
||||||
- MFM: パフォーマンス、保守性、構文誤認識抑制の観点から、旧関数構文のサポートが削除されました。
|
|
||||||
- 旧構文(`[foo bar]`)を使用せず、現行の構文(`$[foo bar]`)を使用してください。
|
|
||||||
|
|
||||||
## 12.91.0 (2021/09/22)
|
|
||||||
|
|
||||||
### Improvements
|
|
||||||
- ActivityPub: リモートユーザーのDeleteアクティビティに対応
|
|
||||||
- ActivityPub: add resolver check for blocked instance
|
|
||||||
- ActivityPub: deliverキューのメモリ使用量を削減
|
|
||||||
- API: 管理者用アカウント削除APIを実装(/admin/accounts/delete)
|
|
||||||
- リモートユーザーの削除も可能に
|
|
||||||
- アカウントが凍結された場合に、凍結された旨を表示してからログアウトするように
|
|
||||||
- 凍結されたアカウントにログインしようとしたときに、凍結されている旨を表示するように
|
|
||||||
- リスト、アンテナタイムラインを個別ページとして分割
|
|
||||||
- UIの改善
|
|
||||||
- MFMにsparklesエフェクトを追加
|
|
||||||
- 非ログイン自は更新ダイアログを出さないように
|
|
||||||
- クライアント起動時、アップデートが利用可能な場合エラー表示およびダイアログ表示しないように
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- アカウントデータのエクスポート/インポート処理ができない問題を修正
|
|
||||||
- アンテナの既読が付かない問題を修正
|
|
||||||
- popupで設定ページを表示すると、アカウントの削除ページにアクセスすることができない問題を修正
|
|
||||||
- "問題が発生しました"ウィンドウを開くと☓ボタンがなくて閉じれない問題を修正
|
|
||||||
|
|
||||||
## 12.90.1 (2021/09/05)
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- Dockerfileを修正
|
|
||||||
- ノート翻訳時に公開範囲が考慮されていない問題を修正
|
|
||||||
|
|
||||||
## 12.90.0 (2021/09/04)
|
|
||||||
|
|
||||||
### Improvements
|
|
||||||
- 藍モード、および藍ウィジェット
|
|
||||||
- クライアントに藍ちゃんを召喚することができるようになりました。
|
|
||||||
- URLからのアップロード, APの添付ファイル, 外部ファイルのプロキシ等では、Privateアドレス等へのリクエストは拒否されるようになりました。
|
|
||||||
- developmentで動作している場合は、この制限は適用されません。
|
|
||||||
- Proxy使用時には、この制限は適用されません。
|
|
||||||
Proxy使用時に同等の制限を行いたい場合は、Proxy側で設定を行う必要があります。
|
|
||||||
- `default.yml`にて`allowedPrivateNetworks`にCIDRを追加することにより、宛先ネットワークを指定してこの制限から除外することが出来ます。
|
|
||||||
- アップロード, ダウンロード出来るファイルサイズにハードリミットが適用されるようになりました。(約250MB)
|
|
||||||
- `default.yml`にて`maxFileSize`を変更することにより、制限値を変更することが出来ます。
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- 管理者が最初にサインアップするページでログインされないのを修正
|
|
||||||
- CWを維持する設定を復活
|
|
||||||
- クライアントの表示を修正
|
|
||||||
|
|
||||||
## 12.89.2 (2021/08/24)
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- カスタムCSSを有効にしているとエラーになる問題を修正
|
|
||||||
|
|
||||||
## 12.89.1 (2021/08/24)
|
|
||||||
|
|
||||||
### Improvements
|
|
||||||
- クライアントのデザインの調整
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- 翻訳でDeepLのProアカウントに対応していない問題を修正
|
|
||||||
- インスタンス設定でDeepLのAuth Keyが空で表示される問題を修正
|
|
||||||
- セキュリティの向上
|
|
||||||
|
|
||||||
## 12.89.0 (2021/08/21)
|
|
||||||
|
|
||||||
### Improvements
|
|
||||||
- アカウント削除の安定性を向上
|
|
||||||
- 絵文字オートコンプリートの挙動を改修
|
|
||||||
- localStorageのaccountsはindexedDBで保持するように
|
|
||||||
- ActivityPub: ジョブキューの試行タイミングを調整 (#7635)
|
|
||||||
- API: sw/unregisterを追加
|
|
||||||
- ワードミュートのドキュメントを追加
|
|
||||||
- クライアントのデザインの調整
|
|
||||||
- 依存関係の更新
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- チャンネルを作成しているとアカウントを削除できないのを修正
|
|
||||||
- ノートの「削除して編集」をするとアンケートの選択肢が[object Object]になる問題を修正
|
|
||||||
|
|
||||||
## 12.88.0 (2021/08/17)
|
|
||||||
|
|
||||||
### Features
|
|
||||||
- ノートの翻訳機能を追加
|
|
||||||
- 有効にするには、サーバー管理者がDeepLの無料アカウントを登録し、取得した認証キーを「インスタンス設定 > その他 > DeepL Auth Key」に設定する必要があります。
|
|
||||||
- Misskey更新時にダイアログを表示するように
|
|
||||||
- ジョブキューウィジェットに警報音を鳴らす設定を追加
|
|
||||||
|
|
||||||
### Improvements
|
|
||||||
- ブロックの挙動を改修
|
|
||||||
- ブロックされたユーザーがブロックしたユーザーに対してアクション出来ないようになりました。詳細はドキュメントをご確認ください。
|
|
||||||
- UIデザインの調整
|
|
||||||
- データベースのインデックスを最適化
|
|
||||||
- Proxy使用時にKeep-Aliveをサポート
|
|
||||||
- DNSキャッシュでネガティブキャッシュをサポート
|
|
||||||
- 依存関係の更新
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- タッチ操作でウィンドウを閉じることができない問題を修正
|
|
||||||
- Renoteされた時刻が投稿された時刻のように表示される問題を修正
|
|
||||||
- コントロールパネルでファイルを削除した際の表示を修正
|
|
||||||
- ActivityPub: 長いユーザーの名前や自己紹介の対応
|
|
||||||
|
|
||||||
## 12.87.0 (2021/08/12)
|
|
||||||
|
|
||||||
### Improvements
|
|
||||||
- 絵文字オートコンプリートで一文字目は最近使った絵文字をサジェストするように
|
|
||||||
- 絵文字オートコンプリートのパフォーマンスを改善
|
|
||||||
- about-misskeyページにドキュメントへのリンクを追加
|
|
||||||
- Docker: Node.jsを16.6.2に
|
|
||||||
- 依存関係の更新
|
|
||||||
- 翻訳の更新
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- Misskey更新時、テーマキャッシュの影響でスタイルがおかしくなる問題を修正
|
|
||||||
|
|
||||||
## 12.86.0 (2021/08/11)
|
|
||||||
|
|
||||||
### Improvements
|
|
||||||
- ドキュメントの更新
|
|
||||||
- ドキュメントにchangelogを追加
|
|
||||||
- ぼかし効果のオプションを追加
|
|
||||||
- Vueを3.2.1に更新
|
|
||||||
- UIの調整
|
|
||||||
|
|
||||||
### Bugfixes
|
|
||||||
- ハッシュタグ入力が空のときに#が付くのを修正
|
|
||||||
- フォローリクエストのEメール通知を修正
|
|
1089
CHANGELOG.md
|
@ -1,136 +1,46 @@
|
||||||
|
|
||||||
# Contributor Covenant Code of Conduct
|
# Contributor Covenant Code of Conduct
|
||||||
|
|
||||||
## 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 via email at
|
|
||||||
johann<EFBFBD>qwertqwefsday.eu and/or toast<73>bunkerlabs.net .
|
|
||||||
(The at sign has been replaced so that spammers do not find these email addresses easily.
|
|
||||||
If you are a human you hopefully know what to do.)
|
|
||||||
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
|
|
||||||
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
|
|
||||||
|
|
||||||
For answers to common questions about this code of conduct, see the FAQ at
|
|
||||||
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
|
|
||||||
[https://www.contributor-covenant.org/translations][translations].
|
|
||||||
|
|
||||||
[homepage]: https://www.contributor-covenant.org
|
|
||||||
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
|
|
||||||
[Mozilla CoC]: https://github.com/mozilla/diversity
|
|
||||||
[FAQ]: https://www.contributor-covenant.org/faq
|
|
||||||
[translations]: https://www.contributor-covenant.org/translations
|
|
||||||
|
|
||||||
|
[homepage]: http://contributor-covenant.org
|
||||||
|
[version]: http://contributor-covenant.org/version/1/4/
|
||||||
|
|
316
CONTRIBUTING.md
|
@ -1,44 +1,61 @@
|
||||||
# Contribution guide
|
# Contribution guide
|
||||||
We're glad you're interested in contributing to Foundkey! 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.
|
||||||
|
|
||||||
The project uses English as its primary language. However due to being a fork of Misskey (which uses Japanese as its primary language) you may find things that are in Japanese.
|
> **Note**
|
||||||
If you make contributions (pull requests, commits, comments in newly added code etc.) we expect that these should be in English.
|
> 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.\
|
||||||
|
> 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.
|
||||||
|
> It will also allow the reader to use the translation tool of their preference if necessary.
|
||||||
|
|
||||||
We won't mind if issues are not in English but we cannot guarantee we will understand you correctly.
|
## Roadmap
|
||||||
However it might stíll be better if you write issues in your original language if you are not confident of your English skills because we might be able to use different translators or ask people to translate if we are not sure what you mean.
|
See [ROADMAP.md](./ROADMAP.md)
|
||||||
Please understand that in such cases we might edit your issue to translate it, to help us avoid duplicating issues.
|
|
||||||
|
|
||||||
## Development platform
|
|
||||||
FoundKey generally assumes that it is running on a Unix-like platform (e.g. Linux or macOS). If you are using Windows for development, we highly suggest using the Windows Subsystem for Linux (WSL) as the development environment.
|
|
||||||
|
|
||||||
## Issues
|
## Issues
|
||||||
Issues are intended for feature requests and bug tracking.
|
Before creating an issue, please check the following:
|
||||||
Please note that in general, we are not looking for completely new features to add, but quality of life improvements will be considered.
|
- To avoid duplication, please search for similar issues before creating a new issue.
|
||||||
|
- Do not use Issues to ask questions or troubleshooting.
|
||||||
|
- Issues should only be used to feature requests, suggestions, and bug tracking.
|
||||||
|
- Please ask questions or troubleshooting in the [Misskey Forum](https://forum.misskey.io/) or [Discord](https://discord.gg/Wp8gVStHW3).
|
||||||
|
|
||||||
Please do not close issues that are about to be resolved. It should remain open until a commit that actually resolves it is merged.
|
> **Warning**
|
||||||
|
> Do not close issues that are about to be resolved. It should remain open until a commit that actually resolves it is merged.
|
||||||
|
|
||||||
|
## Before implementation
|
||||||
|
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.
|
||||||
|
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 another member to assign you). By expressing your intention to work the Issue, you can prevent conflicts in the work.
|
||||||
|
|
||||||
## Well-known branches
|
## Well-known branches
|
||||||
branch|what it's for
|
- **`master`** branch is tracking the latest release and used for production purposes.
|
||||||
---|---
|
- **`develop`** branch is where we work for the next release.
|
||||||
main|development branch
|
- When you create a PR, basically target it to this branch.
|
||||||
translate|managed by weblate, see [section about translation](#Translation)
|
- **`l10n_develop`** branch is reserved for localization management.
|
||||||
|
|
||||||
For a production environment you might not want to follow the `main` branch directly but instead check out one of the git tags.
|
## Creating a PR
|
||||||
|
Thank you for your PR! Before creating a PR, please check the following:
|
||||||
|
- If possible, prefix the title with a keyword that identifies the type of this PR, as shown below.
|
||||||
|
- `fix` / `refactor` / `feat` / `enhance` / `perf` / `chore` etc
|
||||||
|
- Also, make sure that the granularity of this PR is appropriate. Please do not include more than one type of change or interest in a single PR.
|
||||||
|
- If there is an Issue which will be resolved by this PR, please include a reference to the Issue in the text.
|
||||||
|
- Please add the summary of the changes to [`CHANGELOG.md`](/CHANGELOG.md). However, this is not necessary for changes that do not affect the users, such as refactoring.
|
||||||
|
- Check if there are any documents that need to be created or updated due to this change.
|
||||||
|
- If you have added a feature or fixed a bug, please add a test case if possible.
|
||||||
|
- Please make sure that tests and Lint are passed in advance.
|
||||||
|
- You can run it with `npm run test` and `npm run lint`. [See more info](#testing)
|
||||||
|
- If this PR includes UI changes, please attach a screenshot in the text.
|
||||||
|
|
||||||
## Considerations to be made for all contributions
|
Thanks for your cooperation 🤗
|
||||||
|
|
||||||
This project follows [Semantic Versioning 2.0.0](https://semver.org/spec/v2.0.0.html).
|
## Reviewers guide
|
||||||
Significant changes should be listed in the changelog (i.e. the file called `CHANGELOG.md`, see also section "Changelog Trailer" below).
|
Be willing to comment on the good points and not just the things you want fixed 💯
|
||||||
Although Semantic Versioning talks about "the API", changes to the user interface should also be tracked.
|
|
||||||
However, changes to translation files are not considered notable enough to be listed in the changelog.
|
|
||||||
|
|
||||||
Consider if any of the existing documentation has to be updated because of your contribution.
|
|
||||||
|
|
||||||
Some more points you might want to consider are:
|
|
||||||
|
|
||||||
|
### Review perspective
|
||||||
- Scope
|
- Scope
|
||||||
- Are the goals of the PR clear?
|
- Are the goals of the PR clear?
|
||||||
- Is the granularity of the PR appropriate?
|
- Is the granularity of the PR appropriate?
|
||||||
- Security
|
- Security
|
||||||
- Does merging this PR create a vulnerability?
|
- Does merging this PR create a vulnerability?
|
||||||
- Performance
|
- Performance
|
||||||
|
@ -49,111 +66,37 @@ Some more points you might want to consider are:
|
||||||
- Are there any omissions or gaps?
|
- Are there any omissions or gaps?
|
||||||
- Does it check for anomalies?
|
- Does it check for anomalies?
|
||||||
|
|
||||||
## Code contributions
|
## Deploy
|
||||||
|
The `/deploy` command by issue comment can be used to deploy the contents of a PR to the preview environment.
|
||||||
There are different "rules" of how you can contribute, depending on your access privileges to the repository.
|
|
||||||
|
|
||||||
### Without push access
|
|
||||||
|
|
||||||
If you do not have push access, you have to create a pull request to get your changes into Foundkey.
|
|
||||||
Someone with push access should review your contribution.
|
|
||||||
If they are satisfied that what you are doing seems like a good idea and the considerations from the section above are fulfilled, they can merge your pull request.
|
|
||||||
Or, they might request another member to also review your changes.
|
|
||||||
Please be patient as nobody is getting paid to do this, so it might take a bit longer.
|
|
||||||
|
|
||||||
### With push access
|
|
||||||
|
|
||||||
You can push stuff directly to any branch.
|
|
||||||
But y'know, "with great power comes great responsibility" and so on, be sensible.
|
|
||||||
We most likely will not kick you out if you made a mistake, it happens to the best.
|
|
||||||
But this of course means that the erroneous contributions may be either fixed or undone.
|
|
||||||
|
|
||||||
Alternatively, you can also proceed as for "without push access" above.
|
|
||||||
In this case it will be assumed that you wish for a review of the changes you want to make.
|
|
||||||
Instead of having someone else merge the pull request when they have approved your changes, you can also merge yourself if you think the given feedback is sufficient.
|
|
||||||
|
|
||||||
### Changelog Trailer
|
|
||||||
|
|
||||||
To keep track of changes that should go into the CHANGELOG, we use a standard [trailer](https://git-scm.com/docs/git-interpret-trailers).
|
|
||||||
For single-commits that should be included in the changeset, include the trailer directly.
|
|
||||||
For multiple commits, the merge commit (in case of a branch) or an empty final commit should include the trailer.
|
|
||||||
|
|
||||||
Valid values for the trailer are: "Added", "Changed", "Removed", "Fixed", "Security".
|
|
||||||
For breaking changes, include a "BREAKING:" in the summary.
|
|
||||||
Any additional notes should go into the commit body.
|
|
||||||
|
|
||||||
If you forget to include it, you can create an empty commit after the fact with it (`--allow-empty`).
|
|
||||||
Try not to include invalid values in the trailer.
|
|
||||||
|
|
||||||
Here is an example complete breaking commit with notes.
|
|
||||||
|
|
||||||
```
|
```
|
||||||
BREAKING: client: remove rooms
|
/deploy sha=<commit hash>
|
||||||
|
|
||||||
Rooms were removed by syuilo some time ago.
|
|
||||||
This commit is an example of what the changelog trailer usage is like.
|
|
||||||
Admins should ensure to run migrations on startup, else foundkey will fail to start.
|
|
||||||
|
|
||||||
Changelog: Removed
|
|
||||||
```
|
```
|
||||||
|
An actual domain will be assigned so you can test the federation.
|
||||||
|
|
||||||
### Creating a PR
|
## Merge
|
||||||
|
|
||||||
- Please prefix the title with the part of FoundKey you are changing, i.e. `server:` or `client:`
|
|
||||||
- The rest of the title should roughly describe what you did.
|
|
||||||
- Make sure that the granularity of this PR is appropriate. Please do not include more than one type of change in a single PR.
|
|
||||||
- If there is an issue which will be resolved by this PR, please include a reference to the Issue in the text.
|
|
||||||
- If you have added a feature or fixed a bug, please add a test case if possible.
|
|
||||||
- Please make sure that tests and Lint are passed in advance.
|
|
||||||
- You can run it with `npm run test` and `npm run lint`. [See more info](#testing)
|
|
||||||
- Don't forget to update the changelog and/or documentation as appropriate (see above).
|
|
||||||
|
|
||||||
Thanks for your cooperation!
|
|
||||||
|
|
||||||
## Release
|
## Release
|
||||||
|
### Release Instructions
|
||||||
|
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.
|
||||||
|
- Into `master` from `develop` branch.
|
||||||
|
- The title must be in the format `Release: x.y.z`.
|
||||||
|
- `x.y.z` is the new version you are trying to release.
|
||||||
|
3. Deploy and perform a simple QA check. Also verify that the tests passed.
|
||||||
|
4. Merge it.
|
||||||
|
5. Create a [release of GitHub](https://github.com/misskey-dev/misskey/releases)
|
||||||
|
- The target branch must be `master`
|
||||||
|
- The tag name must be the version
|
||||||
|
|
||||||
### Fork transition
|
## Localization (l10n)
|
||||||
|
Misskey uses [Crowdin](https://crowdin.com/project/misskey) for localization management.
|
||||||
|
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.
|
||||||
|
The owner [@syuilo](https://github.com/syuilo) merges the PR into the develop branch before the next release.
|
||||||
|
|
||||||
**Note:**
|
If your language is not listed in Crowdin, please open an issue.
|
||||||
Since Foundkey was forked from Misskey recently, there might be some breaking changes we want to make.
|
|
||||||
For this purpose there will be several pre-release versions of 13.0.0 (e.g. `13.0.0-preview1`).
|
|
||||||
Until major version 13 is released, the below process is not fully in effect.
|
|
||||||
|
|
||||||
### Release process
|
![Crowdin](https://d322cqt584bo4o.cloudfront.net/misskey/localized.svg)
|
||||||
Before a stable version is released, there should be a comment period which should usually be 7 days to give everyone the chance to comment.
|
|
||||||
If a (critical) bug or similar is found during the comment period, the release may be postponed until a fix is found.
|
|
||||||
For commenting, an issue should be created, and the comment period should also be announced in the `#foundkey-dev` [IRC](https://irc.akkoma.dev) channel.
|
|
||||||
|
|
||||||
Pre-releases do not require as much scrutiny and can be useful for "field testing" before a stable release is made.
|
|
||||||
|
|
||||||
All releases are managed as git tags.
|
|
||||||
If the released version is 1.2.3, the git tag should be "v1.2.3".
|
|
||||||
Pre-releases are marked "previewN".
|
|
||||||
The first pre-release for 1.2.3 should be tagged "v1.2.3-preview1".
|
|
||||||
The tag should be a "lightweight" tag (not annotated) of the commit that modifies the CHANGELOG and package.json version.
|
|
||||||
|
|
||||||
To generate the changelog, we use a standard shortlog command: `git shortlog --format='%h %s' --group=trailer:changelog LAST_TAG..`.
|
|
||||||
The person performing the release process should build the next CHANGELOG section based on this output, not use it as-is.
|
|
||||||
Full releases should also remove any pre-release CHANGELOG sections.
|
|
||||||
|
|
||||||
Here is the step by step checklist:
|
|
||||||
1. If **stable** release, announce the comment period. Restart the comment period if a blocker bug is found and fixed.
|
|
||||||
2. Edit various `package.json`s to the new version.
|
|
||||||
3. Write a new entry into the changelog.
|
|
||||||
You should use the `git shortlog --format='%h %s' --group=trailer:changelog LAST_TAG..` command to get general data,
|
|
||||||
then rewrite it in a human way.
|
|
||||||
4. Tag the commit with the changes in 2 and 3 (if together, else the latter).
|
|
||||||
|
|
||||||
## Translation
|
|
||||||
|
|
||||||
[![Translation status](http://translate.akkoma.dev/widgets/foundkey/-/svg-badge.svg)](http://translate.akkoma.dev/engage/foundkey/)
|
|
||||||
|
|
||||||
<small>a.k.a. Localization (l10n) or Internationalization (i18n)</small>
|
|
||||||
|
|
||||||
To translate text used in Foundkey, we use weblate at <https://translate.akkoma.dev/projects/foundkey/>.
|
|
||||||
|
|
||||||
Localization files are found in `/locales/` and are YAML files using the `yml` file extension.
|
|
||||||
The file name consists of the [IETF BCP 47](https://www.rfc-editor.org/info/bcp47) language code.
|
|
||||||
|
|
||||||
## Development
|
## Development
|
||||||
During development, it is useful to use the `npm run dev` command.
|
During development, it is useful to use the `npm run dev` command.
|
||||||
|
@ -187,34 +130,27 @@ npx cross-env TS_NODE_FILES=true TS_NODE_TRANSPILE_ONLY=true TS_NODE_PROJECT="./
|
||||||
### e2e tests
|
### e2e tests
|
||||||
TODO
|
TODO
|
||||||
|
|
||||||
## Continuous integration (CI)
|
## Continuous integration
|
||||||
|
Misskey uses GitHub Actions for executing automated tests.
|
||||||
Foundkey uses Woodpecker for executing automated tests and lints.
|
Configuration files are located in [`/.github/workflows`](/.github/workflows).
|
||||||
CI runs can be found at [ci.akkoma.dev](https://ci.akkoma.dev/FoundKeyGang/FoundKey)
|
|
||||||
Configuration files are located in `/.woodpecker/`.
|
|
||||||
|
|
||||||
## Vue
|
## Vue
|
||||||
Misskey uses Vue(v3) as its front-end framework.
|
Misskey uses Vue(v3) as its front-end framework.
|
||||||
- Use TypeScript functionality.
|
- Use TypeScript.
|
||||||
- Use the type only variant of `defineProps` and `defineEmits`.
|
- **When creating a new component, please use the Composition API (with [setup sugar](https://v3.vuejs.org/api/sfc-script-setup.html) and [ref sugar](https://github.com/vuejs/rfcs/discussions/369)) instead of the Options API.**
|
||||||
- When creating a new component, please use the Composition API (with [setup sugar](https://v3.vuejs.org/api/sfc-script-setup.html) and [ref sugar](https://github.com/vuejs/rfcs/discussions/369)) instead of the Options API.
|
- Some of the existing components are implemented in the Options API, but it is an old implementation. Refactors that migrate those components to the Composition API are also welcome.
|
||||||
- Some of the existing components are implemented in the Options API, but it is an old implementation. Refactors that migrate those components to the Composition API are welcome.
|
|
||||||
You might be able to use this shell command to find components that have not yet been refactored: `find packages/client/src -name '*.vue' | xargs grep '<script' | grep -v 'setup'`
|
|
||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
### How to resolve `yarn.lock` conflicts?
|
### How to resolve conflictions occurred at yarn.lock?
|
||||||
|
|
||||||
Just execute `yarn` to fix it.
|
Just execute `yarn` to fix it.
|
||||||
|
|
||||||
### Use `insert` instead of `save` to create new objects
|
### INSERTするときにはsaveではなくinsertを使用する
|
||||||
When using `save`, you may accidentally update an existing item, because `save` circumvents uniqueness constraints.
|
#6441
|
||||||
|
|
||||||
See also <https://github.com/misskey-dev/misskey/issues/6441>.
|
### placeholder
|
||||||
|
SQLをクエリビルダで組み立てる際、使用するプレースホルダは重複してはならない
|
||||||
### typeorm placeholders
|
例えば
|
||||||
The names of placeholders used in queries must be unique in each query.
|
|
||||||
|
|
||||||
For example
|
|
||||||
``` ts
|
``` ts
|
||||||
query.andWhere(new Brackets(qb => {
|
query.andWhere(new Brackets(qb => {
|
||||||
for (const type of ps.fileType) {
|
for (const type of ps.fileType) {
|
||||||
|
@ -222,8 +158,8 @@ query.andWhere(new Brackets(qb => {
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
```
|
```
|
||||||
would mean that `type` is used multiple times because it is used in a loop.
|
と書くと、ループ中で`type`というプレースホルダが複数回使われてしまいおかしくなる
|
||||||
This is incorrect. instead you would need to do something like the following:
|
だから次のようにする必要がある
|
||||||
```ts
|
```ts
|
||||||
query.andWhere(new Brackets(qb => {
|
query.andWhere(new Brackets(qb => {
|
||||||
for (const type of ps.fileType) {
|
for (const type of ps.fileType) {
|
||||||
|
@ -233,88 +169,82 @@ query.andWhere(new Brackets(qb => {
|
||||||
}));
|
}));
|
||||||
```
|
```
|
||||||
|
|
||||||
### `null` (JS/TS) and `NULL` (SQL)
|
### Not `null` in TypeORM
|
||||||
#### in TypeORM FindOptions
|
```ts
|
||||||
Using the JavaScript/TypeScript `null` constant is not supported in Typeorm. Instead you need to use the special `Null()` function Typeorm provides.
|
const foo = await Foos.findOne({
|
||||||
It can also be combined with other similar TypeORM functions.
|
bar: Not(null)
|
||||||
|
});
|
||||||
For example to make a condition similar to SQL `IS NOT NULL`, do the following:
|
```
|
||||||
|
のようなクエリ(`bar`が`null`ではない)は期待通りに動作しない。
|
||||||
|
次のようにします:
|
||||||
```ts
|
```ts
|
||||||
import { IsNull, Not } from 'typeorm';
|
|
||||||
|
|
||||||
const foo = await Foos.findOne({
|
const foo = await Foos.findOne({
|
||||||
bar: Not(IsNull())
|
bar: Not(IsNull())
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
#### in SQL queries or `QueryBuilder`s
|
### `null` in SQL
|
||||||
In SQL statements, you need to have separate statements for cases where parameters may be `null`.
|
SQLを発行する際、パラメータが`null`になる可能性のある場合はSQL文を出し分けなければならない
|
||||||
|
例えば
|
||||||
Take for example this snippet:
|
|
||||||
``` ts
|
``` ts
|
||||||
query.where('file.folderId = :folderId', { folderId: ps.folderId });
|
query.where('file.folderId = :folderId', { folderId: ps.folderId });
|
||||||
```
|
```
|
||||||
If `ps.folderId === null`, the resulting query would be `file.folderId = null` which is incorrect and might produce unexpected results.
|
という処理で、`ps.folderId`が`null`だと結果的に`file.folderId = null`のようなクエリが発行されてしまい、これは正しいSQLではないので期待した結果が得られない
|
||||||
|
だから次のようにする必要がある
|
||||||
What you need to do instead is something like the following:
|
|
||||||
``` ts
|
``` ts
|
||||||
if (ps.folderId != null) {
|
if (ps.folderId) {
|
||||||
query.where('file.folderId = :folderId', { folderId: ps.folderId });
|
query.where('file.folderId = :folderId', { folderId: ps.folderId });
|
||||||
} else {
|
} else {
|
||||||
query.where('file.folderId IS NULL');
|
query.where('file.folderId IS NULL');
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Empty array handling in TypeORM FindOptions
|
### `[]` in SQL
|
||||||
If you are using the `In` function in `FindOptions`, there must be different behaviour if it may receive empty arrays.
|
SQLを発行する際、`IN`のパラメータが`[]`(空の配列)になる可能性のある場合はSQL文を出し分けなければならない
|
||||||
|
例えば
|
||||||
``` ts
|
``` ts
|
||||||
const users = await Users.find({
|
const users = await Users.find({
|
||||||
id: In(userIds)
|
id: In(userIds)
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
This would produce erroneous SQL, i.e. `user.id IN ()`.
|
という処理で、`userIds`が`[]`だと結果的に`user.id IN ()`のようなクエリが発行されてしまい、これは正しいSQLではないので期待した結果が得られない
|
||||||
To fix this you would need separate handling for an empty array, for example like this:
|
だから次のようにする必要がある
|
||||||
``` ts
|
``` ts
|
||||||
const users = userIds.length > 0 ? await Users.find({
|
const users = userIds.length > 0 ? await Users.find({
|
||||||
id: In(userIds)
|
id: In(userIds)
|
||||||
}) : [];
|
}) : [];
|
||||||
```
|
```
|
||||||
|
|
||||||
### typeorm: selecting only specific columns
|
### 配列のインデックス in SQL
|
||||||
|
SQLでは配列のインデックスは**1始まり**。
|
||||||
|
`[a, b, c]`の `a`にアクセスしたいなら`[0]`ではなく`[1]`と書く
|
||||||
|
|
||||||
If you select specific columns of a table only, you will probably not be able to use the usual `getOne`, `getMany` etc.
|
### null IN
|
||||||
Instead you might want to try using `getRawOne` and `getRawMany`.
|
nullが含まれる可能性のあるカラムにINするときは、そのままだとおかしくなるのでORなどでnullのハンドリングをしよう。
|
||||||
For that, you may also want to add aliases to the columns you select, which can be done using the second parameter of `select` or `addSelect`.
|
|
||||||
|
|
||||||
### Array indexing in SQL
|
### `undefined`にご用心
|
||||||
PostgreSQL array indices **start at 1**.
|
MongoDBの時とは違い、findOneでレコードを取得する時に対象レコードが存在しない場合 **`undefined`** が返ってくるので注意。
|
||||||
|
MongoDBは`null`で返してきてたので、その感覚で`if (x === null)`とか書くとバグる。代わりに`if (x == null)`と書いてください
|
||||||
|
|
||||||
### `NULL IN ...`
|
### Migration作成方法
|
||||||
When `IN` is performed on a column that may contain `NULL` values, use `OR` or similar to handle `NULL` values.
|
packages/backendで:
|
||||||
|
|
||||||
### creating migrations
|
|
||||||
First make changes to the entity files in `packages/backend/src/models/entities/`.
|
|
||||||
|
|
||||||
Then, in `packages/backend`, run:
|
|
||||||
```sh
|
```sh
|
||||||
yarn build
|
|
||||||
npx typeorm migration:generate -d ormconfig.js -o <migration name>
|
npx typeorm migration:generate -d ormconfig.js -o <migration name>
|
||||||
```
|
```
|
||||||
|
|
||||||
After generating (and potentially editing) the file, move it to the `packages/backend/migration` folder.
|
- 生成後、ファイルをmigration下に移してください
|
||||||
|
- 作成されたスクリプトは不必要な変更を含むため除去してください
|
||||||
|
|
||||||
### `markRaw` for connections
|
### コネクションには`markRaw`せよ
|
||||||
When setting up a foundkey-js streaming connection as a data option to a Vue component, be sure to wrap it in `markRaw`.
|
**Vueのコンポーネントのdataオプションとして**misskey.jsのコネクションを設定するとき、必ず`markRaw`でラップしてください。インスタンスが不必要にリアクティブ化されることで、misskey.js内の処理で不具合が発生するとともに、パフォーマンス上の問題にも繋がる。なお、Composition APIを使う場合はこの限りではない(リアクティブ化はマニュアルなため)。
|
||||||
Unnecessarily reactivating a connection causes problems with processing in foundkey-js and leads to performance issues.
|
|
||||||
This does not apply when using the Composition API since reactivation is manual.
|
|
||||||
|
|
||||||
### JSON imports
|
### JSONのimportに気を付けよう
|
||||||
If you import json in TypeScript, the json file will be spit out together with the TypeScript file into the dist directory when compiling with tsc. This behavior may cause unintentional rewriting of files, so when importing json files, be sure to check whether the files are allowed to be rewritten or not. If you do not want the file to be rewritten, you should make sure that the file can be rewritten by importing the json file. If you do not want the file to be rewritten, use functions such as `fs.readFileSync` to read the file instead of importing it.
|
TypeScriptでjsonをimportすると、tscでコンパイルするときにそのjsonファイルも一緒にdistディレクトリに吐き出されてしまう。この挙動により、意図せずファイルの書き換えが発生することがあるので、jsonをimportするときは書き換えられても良いものかどうか確認すること。書き換えされて欲しくない場合は、importで読み込むのではなく、`fs.readFileSync`などの関数を使って読み込むようにすればよい。
|
||||||
|
|
||||||
### Component style definitions do not have a `margin`
|
### コンポーネントのスタイル定義でmarginを持たせない
|
||||||
~~Setting the `margin` of a component may be confusing. Instead, it should always be the user of a component that sets a `margin`.~~
|
コンポーネント自身がmarginを設定するのは問題の元となることはよく知られている
|
||||||
This was a philosophy used previously. Hoever it now seems a better idea to add a default margin to the top level element of a component which can be easily overwritten on the usage of that component with a `style` attribute.
|
marginはそのコンポーネントを使う側が設定する
|
||||||
|
|
||||||
### Do not use the word "follow" in HTML class names
|
## その他
|
||||||
This has caused things to be blocked by an ad blocker in the past.
|
### HTMLのクラス名で follow という単語は使わない
|
||||||
|
広告ブロッカーで誤ってブロックされる
|
||||||
|
|
22
COPYING
|
@ -1,10 +1,10 @@
|
||||||
Unless otherwise stated this repository is
|
Unless otherwise stated this repository is
|
||||||
Copyright © 2014-2022 syuilo and contributors
|
Copyright © 2014-2020 syuilo and contributers
|
||||||
Copyright © 2022-2023 FoundKey contributors
|
|
||||||
And is distributed under The GNU Affero General Public License Version 3, you should have received a copy of the license file as LICENSE.
|
|
||||||
(You may be able to run `git shortlog -se` to see a full list of authors.)
|
|
||||||
|
|
||||||
FoundKey includes several third-party Open-Source softwares.
|
And is distributed under The GNU Affero General Public License Version 3, you should have received a copy of the license file as LICENSE.
|
||||||
|
|
||||||
|
|
||||||
|
Misskey includes several third-party Open-Source softwares.
|
||||||
|
|
||||||
Emoji keywords for Unicode 11 and below by Mu-An Chiou
|
Emoji keywords for Unicode 11 and below by Mu-An Chiou
|
||||||
License: MIT
|
License: MIT
|
||||||
|
@ -13,15 +13,3 @@ https://github.com/muan/emojilib/blob/master/LICENSE
|
||||||
RsaSignature2017 implementation by Transmute Industries Inc
|
RsaSignature2017 implementation by Transmute Industries Inc
|
||||||
License: MIT
|
License: MIT
|
||||||
https://github.com/transmute-industries/RsaSignature2017/blob/master/LICENSE
|
https://github.com/transmute-industries/RsaSignature2017/blob/master/LICENSE
|
||||||
|
|
||||||
Chiptune2.js by Simon Gündling
|
|
||||||
License: MIT
|
|
||||||
https://github.com/deskjet/chiptune2.js#license
|
|
||||||
|
|
||||||
libopenmpt (as part of openmpt) by OpenMPT
|
|
||||||
License: BSD 3-Clause
|
|
||||||
https://github.com/OpenMPT/openmpt/blob/master/LICENSE
|
|
||||||
|
|
||||||
The logo file (logo.svg) was created by Blinry
|
|
||||||
License: [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0/)
|
|
||||||
https://blinry.org/
|
|
||||||
|
|
14
Dockerfile
|
@ -1,8 +1,8 @@
|
||||||
FROM node:18.12.1-alpine3.16 AS base
|
FROM node:18.0.0-alpine3.15 AS base
|
||||||
|
|
||||||
ARG NODE_ENV=production
|
ARG NODE_ENV=production
|
||||||
|
|
||||||
WORKDIR /foundkey
|
WORKDIR /misskey
|
||||||
|
|
||||||
ENV BUILD_DEPS autoconf automake file g++ gcc libc-dev libtool make nasm pkgconfig python3 zlib-dev git
|
ENV BUILD_DEPS autoconf automake file g++ gcc libc-dev libtool make nasm pkgconfig python3 zlib-dev git
|
||||||
|
|
||||||
|
@ -24,11 +24,11 @@ RUN apk add --no-cache \
|
||||||
|
|
||||||
ENTRYPOINT ["/sbin/tini", "--"]
|
ENTRYPOINT ["/sbin/tini", "--"]
|
||||||
|
|
||||||
COPY --from=builder /foundkey/node_modules ./node_modules
|
COPY --from=builder /misskey/node_modules ./node_modules
|
||||||
COPY --from=builder /foundkey/built ./built
|
COPY --from=builder /misskey/built ./built
|
||||||
COPY --from=builder /foundkey/packages/backend/node_modules ./packages/backend/node_modules
|
COPY --from=builder /misskey/packages/backend/node_modules ./packages/backend/node_modules
|
||||||
COPY --from=builder /foundkey/packages/backend/built ./packages/backend/built
|
COPY --from=builder /misskey/packages/backend/built ./packages/backend/built
|
||||||
COPY --from=builder /foundkey/packages/foundkey-js/built ./packages/foundkey-js/built
|
COPY --from=builder /misskey/packages/client/node_modules ./packages/client/node_modules
|
||||||
COPY . ./
|
COPY . ./
|
||||||
|
|
||||||
ENV NODE_ENV=production
|
ENV NODE_ENV=production
|
||||||
|
|
99
READING.md
|
@ -1,99 +0,0 @@
|
||||||
This file provides an overview of what functionality goes where.
|
|
||||||
|
|
||||||
As convention for this file, when a path is given that does **not** start with a slash, its a relative path.
|
|
||||||
Look further up in the section to find the "base path" it is relative to.
|
|
||||||
|
|
||||||
## backend
|
|
||||||
|
|
||||||
All the backend code is in `/packages/backend/src`.
|
|
||||||
|
|
||||||
### Database
|
|
||||||
|
|
||||||
For connecting to the database an ORM (object–relational mapping) is used.
|
|
||||||
The ORM can map between database entries and TypeScript objects.
|
|
||||||
The type definitions for these objects can be found in `/packages/backend/src/models/`.
|
|
||||||
|
|
||||||
Definitions for individual objects are defined in `entities/`.
|
|
||||||
Some behaviour that is mostly used by the API is defined in `repositories/`.
|
|
||||||
These can be thought of like the database tables themselves.
|
|
||||||
Often there is functionality called "pack" in these, and by "packing" a database object you will get the API representation of that object.
|
|
||||||
Schemas for these API versions of the objects are defined in `schema/`.
|
|
||||||
|
|
||||||
### API
|
|
||||||
|
|
||||||
API stuff goes in `/packages/backend/src/server/api/`
|
|
||||||
|
|
||||||
All API routes are "mounted" in `index.ts`.
|
|
||||||
For this to work, the endpoint has to be tied into the respective path in `endpoints.ts`.
|
|
||||||
|
|
||||||
Endpoints are defined using a JSON object, and documentation is automatically generated using these objects.
|
|
||||||
The type definition for that object is also contained/documented in `endpoints.ts`.
|
|
||||||
|
|
||||||
Reading that file you can see that the endpoint behaviour is defined in `endpoints/`.
|
|
||||||
The paths below that directory should be the same as on the API.
|
|
||||||
|
|
||||||
Handling the API calls is done in `api-handler.ts`, which does some preprocessing of the request.
|
|
||||||
It then uses `authenticate.ts` to try to authenticate the user.
|
|
||||||
After that the actual endpoint code is run by `call.ts` after checking some more of the preconditions set by the endpoint definiton.
|
|
||||||
|
|
||||||
### ActivityPub
|
|
||||||
|
|
||||||
ActivityPub related code is in `/packages/backend/src/remote/activitypub/`
|
|
||||||
|
|
||||||
Both incoming and outgoing ActivityPub request are handled through queues, to e.g. allow for retrying a request when it fails, or spikes of many incoming requests.
|
|
||||||
|
|
||||||
#### Incoming Activities
|
|
||||||
Remote ActivityPub implementations will HTTP POST to the resource `/user/:userId/inbox` or `/inbox` (the latter is also known as the "shared inbox").
|
|
||||||
The behaviour for these routes is exactly the same: They add all the received data into the inbox queue.
|
|
||||||
This is defined in `/packages/backend/src/server/activitypub.ts`.
|
|
||||||
|
|
||||||
The inbox processor will do some basic things like verify signatures.
|
|
||||||
|
|
||||||
Incoming ActivityPub requests are processed by the code in `kernel/`.
|
|
||||||
The files/directories are generally named the same as the Activities that they process, which should help with orientation.
|
|
||||||
The entry point for processing an activity is `processOneActivity` in the `kernel/index.ts` file in that directory.
|
|
||||||
Parts of incoming activities may also be processed by `models/`.
|
|
||||||
|
|
||||||
#### Outgoing Activities
|
|
||||||
Outgoing activities are usually initiated in the logic of the API endpoints.
|
|
||||||
The bodies of outgoing ActivityPub requests are "rendered" using `renderer/`.
|
|
||||||
These files define several functions that are meant to be used together, e.g. `renderCreate(await renderNote(note, false), note)`.
|
|
||||||
The invocation of these functions is placed either in the API endpoints directly or in the services code.
|
|
||||||
|
|
||||||
The rendered bodies of the functions and the recipients are put into the deliver queue to be delivered.
|
|
||||||
|
|
||||||
### Services
|
|
||||||
|
|
||||||
If code for handling a task seems to big to e.g. do directly in an API endpoint or should be reused, it is probably placed in `/packages/backend/src/services/`.
|
|
||||||
|
|
||||||
### Queues
|
|
||||||
|
|
||||||
Code regarding queues is in `/packages/backend/src/queue/`.
|
|
||||||
|
|
||||||
Misskey defines several queues for processing things that might take longer in the background.
|
|
||||||
The queues themselves are defined in `index.ts`.
|
|
||||||
How the different queues are then processed is defined by the code in the `processors/` directory.
|
|
||||||
|
|
||||||
## client
|
|
||||||
|
|
||||||
All the client code is in `/packages/client/src/`.
|
|
||||||
The client uses Vue 3 and its Composition API, but there are also some older Options API components that have yet to be refactored (see CONTRIBUTING.md).
|
|
||||||
|
|
||||||
### Pages
|
|
||||||
|
|
||||||
If it is something you can navigate to, it is most likely a page.
|
|
||||||
These are defined in `/packages/client/src/pages/` and should be organized by the path you use to see them.
|
|
||||||
|
|
||||||
### Components
|
|
||||||
|
|
||||||
If it is not a page, it is probably a component.
|
|
||||||
Components can be things like the emoji picker, a tooltip, a widget.
|
|
||||||
Components can be combined to make bigger components or also pages.
|
|
||||||
They are defined in `/packages/client/src/components/`.
|
|
||||||
|
|
||||||
### Directives
|
|
||||||
|
|
||||||
Vue has "directives", e.g. you can add an attribute to a component like `v-tooltip`.
|
|
||||||
There are some built in directives like e.g. `v-if` and `v-for`.
|
|
||||||
Other custom directives are defined in `/packages/client/src/directives/`.
|
|
||||||
They are added to the Vue app in `index.ts` and their behavior is defined in separate files in the directory.
|
|
62
README.md
|
@ -1,21 +1,57 @@
|
||||||
<div align="center"><img src="./logo.svg" height="200" alt="Foundkey logo, an owl holding a key"/></div>
|
<div align="center">
|
||||||
|
<a href="https://misskey-hub.net">
|
||||||
|
<img src="./assets/title_float.svg" alt="Misskey logo" style="border-radius:50%" width="400"/>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
**🌎 **[Misskey](https://misskey-hub.net/)** is an open source, decentralized social media platform that's free forever! 🚀**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
# FoundKey
|
<a href="https://misskey-hub.net/instances.html">
|
||||||
FoundKey is a free and open source microblogging server compatible with ActivityPub.
|
<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>
|
||||||
It is currently under **LIMITED MAINTENANCE** and is not well suited for large instances.
|
|
||||||
No more than 20 users per instance are recommended.
|
|
||||||
|
|
||||||
Forked from Misskey, FoundKey improves on maintainability and behaviour, while also bringing in useful features.
|
<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>
|
||||||
|
|
||||||
See the [changelog](./CHANGELOG.md) and [roadmap](./ROADMAP.md) for more on what's changed and future plans.
|
<a href="./CONTRIBUTING.md">
|
||||||
|
<img src="https://custom-icon-badges.herokuapp.com/badge/become_a-contributor-A371F7?logoColor=A371F7&style=for-the-badge&logo=git-merge&labelColor=363B40" alt="become a contributor"/></a>
|
||||||
|
|
||||||
|
<a href="https://discord.gg/Wp8gVStHW3">
|
||||||
|
<img src="https://custom-icon-badges.herokuapp.com/badge/join_the-community-5865F2?logoColor=5865F2&style=for-the-badge&logo=discord&labelColor=363B40" alt="join the community"/></a>
|
||||||
|
|
||||||
|
<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>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
</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
|
## Documentation
|
||||||
FoundKey's documentation is a work in progress, which can be found in the `docs/` folder.
|
|
||||||
Feel free to contribute some documentation.
|
|
||||||
|
|
||||||
## Contributing
|
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.
|
||||||
If you're interested in helping out with the project, please read the [contributing guide](./CONTRIBUTING.md).
|
|
||||||
|
|
||||||
## Sponsors
|
## Sponsors
|
||||||
FoundKey is not interested in finanical sponsorships.
|
<div align="center">
|
||||||
We welcome contributions in the forms of code, testing and bug reporting (see also section *Contributing* above).
|
<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>
|
||||||
|
|
83
ROADMAP.md
|
@ -1,62 +1,37 @@
|
||||||
# FoundKey Goals
|
# Roadmap
|
||||||
Note: this document is historical.
|
The order of individual tasks is a guide only and is subject to change depending on the situation.
|
||||||
Everything starting with the next section is the original "idea" document that led to the foundation of FoundKey.
|
Also, the later tasks are more indefinite and are subject to change as development progresses.
|
||||||
|
|
||||||
For the current status you should see the following:
|
## (1) Improve maintainability \<current phase\>
|
||||||
* Issues labeled with [behaviour-fix](https://akkoma.dev/FoundKeyGang/FoundKey/issues?labels=44)
|
This is the phase we are at now. We need to make a high-maintenance environment that can withstand future development.
|
||||||
* Issues labeled with [upkeep](https://akkoma.dev/FoundKeyGang/FoundKey/issues?labels=43)
|
|
||||||
* Issues labeled with [feature](https://akkoma.dev/FoundKeyGang/FoundKey/issues?labels=42)
|
|
||||||
|
|
||||||
## Misskey Goals
|
- Make the number of type errors zero (backend)
|
||||||
I’ve been thinking about a community misskey fork for a while now. To some of you, this is not a surprise. Let’s talk about that.
|
- Probably need to switch some libraries to others that make it difficult to reduce type errors
|
||||||
|
- e.g. koa to fastify https://github.com/misskey-dev/misskey/issues/7537
|
||||||
|
- Improve CI
|
||||||
|
- Fix tests
|
||||||
|
- mocha, jest, etc. do not support the combination of `TypeScript + ESM + Path alias`, and the tests currently do not work.
|
||||||
|
- Fix random test failures - https://github.com/misskey-dev/misskey/issues/7985 and https://github.com/misskey-dev/misskey/issues/7986
|
||||||
|
- Add more tests
|
||||||
|
- May need to implement a mechanism that allows for DI
|
||||||
|
- Improve documentation
|
||||||
|
|
||||||
## Why a Fork?
|
## (2) Improve functionality
|
||||||
Misskey is the ever evolving social platform. But some sheer coincidence, the state it was in in summer 2021 happened to be close to what our little fedi bubble has mostly wanted for a long time. Closer than anything else, but not necessarily it.
|
Once Phase 1 is complete and an environment conducive to the development of a stable system is in place, the implementation of new functions can begin gradually.
|
||||||
|
|
||||||
There are some glaring issues. For example, conversation mutes don’t mute notifications. According to syuilo, this is [intended behavior](https://github.com/misskey-dev/misskey/issues/8102#issuecomment-1035080526). The point is that whatever change we might want to make for ourselves would need to be accepted by the wider misskey community (possible, but not obvious) and syuilo in particular (harder).
|
- Improve features for moderation
|
||||||
|
- OAuth2 support https://github.com/misskey-dev/misskey/issues/8262
|
||||||
|
- GraphQL support?
|
||||||
|
|
||||||
By having a community fork, we can avoid any potential future changes that turn misskey into yet another direction, while refining the things we already like, all without needing to worry about ruining the fun for someone else. And without “supervision from above”, which is often the enemy of creative work.
|
## (3) Improve scalability
|
||||||
|
Once the development of the feature has settled down, this may be an opportunity to make larger modifications.
|
||||||
|
|
||||||
## What Changes?
|
- Rewriting in Rust?
|
||||||
The direction I’d like to see misskey go in involves a couple of different subcategories of changes. Behaviour fixes, technological upkeep, and new features. Let’s go through them. (Note that this list is not “complete”, but here to offer a representative selection of the kinds of changes to expect - the best place to look for specifics will be the kanban board once the fork is up!)
|
|
||||||
|
|
||||||
### Behaviour Fixes
|
## (4) Change the world
|
||||||
Some things misskey does just don’t seem right. Mutes don’t work properly. The timeline behaviour is oddly arbitrary. Sometimes things don’t federate properly (if anything it’s a miracle things do federate as often as they do!). Maximum note length is no longer configurable, and while there was a [suggestion](https://github.com/misskey-dev/misskey/issues/8323) that that might change, it’s been a while now.
|
It is time to promote Misskey and change the world.
|
||||||
Anything that doesn’t fit to our communal standards, we fix.
|
|
||||||
|
|
||||||
### Technological Upkeep
|
- Become more major than services such as Twitter and become critical infrastructure for the world
|
||||||
Misskey’s tech stack has some glaring inconsistencies. MFM is a fairly poor ad-hoc parser, so it would be nice to rewrite it as a set of extensions to marked. Some features are simply not used, and can be ripped out (which ones will depend on communal consensus). Some UI components and DB queries are slow - we make them faster. Misskey has no true JSON-LD support, but JS does have a “legitimate” library for it - maybe we should use that.
|
- MiOS will be developed and integrated into various systems - What is MiOS?
|
||||||
An attempt to provide serious documentation will be started, and can be rather complete (since we no longer need to worry about sudden *uninformed* changes; see governance) eventually, which will be useful to some rewrites (such as misskey-go, which may consider targeting us for the rewrite eventually).
|
- Letting Ai-chan interfere with the real world
|
||||||
These are all less changes to behaviour, but rather ways to make misskey a better piece of software overall.
|
- Make Misskey a member of GAFA; Misskey's office must be a reinforced concrete brutalist building with a courtyard.
|
||||||
|
|
||||||
### New Features
|
|
||||||
There are plenty of things, back in the summer of 2021, that we looked at, went “cool!!” and then found out were lacking. Or things we wished there were.
|
|
||||||
Better drive management. Federation for groups. Nicer UX (such as deleting things!) for galleries and pages. Letting the database clean itself (built-in forget, including for remote posts).
|
|
||||||
These are all “new” features that would be hard to justify to the wider community (I still remember someone asking us why “the western community seems to think everything should be federated”), but once it’s implemented is easier to just merge in.
|
|
||||||
New features that we want to see in the software.
|
|
||||||
|
|
||||||
### The Elephant in the Room
|
|
||||||
While I do fully intend to do as much of the above as possible - I’m just one person. Not one with a high capacity for creative output either (by now you lot probably have seen just how long it can take me to do even small things).
|
|
||||||
There’s a reason I’m talking about it as a “community fork”, and not “my fork”. So let’s talk about governance.
|
|
||||||
|
|
||||||
## Governance
|
|
||||||
Assuming the offer is still available, the fork will reside on akkoma.dev and use akkoma’s CICD tools - we’re part of the same fedi bubble, and floaty has offered to facilitate this process as a whole.
|
|
||||||
|
|
||||||
Push access will be granted liberally as long as:
|
|
||||||
1. The person is in the general fedi community (i.e has the same general priorities, definitionally).
|
|
||||||
2. The person has contributed to the project at some point (just to avoid non-devs etc taking up push access and doing nothing with it).
|
|
||||||
|
|
||||||
Anyone with push access can request someone else to be granted push access (given the above) and such requests will generally not be refused.
|
|
||||||
|
|
||||||
The branch layout will be modified: the “main” branch will contain development data, and tags (starting with 200.1.0, following semver from there, to avoid conflicts) will be used for releases. This minimizes backport efforts.
|
|
||||||
There will also be a “syuilo” branch (at least initially) that will contain misskey develop (synced manually on occasion), for easier switching and cherry-picking.
|
|
||||||
|
|
||||||
There will be no consequences for “pushing bad code”, unless it was clearly done maliciously (unlikely). Running main will indeed be potentially awkward. Tags will be checked for issues before tagging, however. Similarly, it’s important to make sure any documentation-visible changes are discussed and informed of before a tag is made, so that the docs are up to date! In short, the only seriously “controlled” part will be the tag/release process. Exact details will depend on the set of people that will end up with push access.
|
|
||||||
|
|
||||||
I will also be dedicating some amount of time each week specifically to going over MRs and issues. I hope some other people with push access will do the same.
|
|
||||||
|
|
||||||
## And So
|
|
||||||
Is this something we want? As I mentioned, my capacity for output simply isn’t great enough to truly do all the things I’d like to see happen, so if this level of ambition is to ever be met, I’ll need the community to actually be interested and participate.
|
|
||||||
Hopefully, I do understand what we all want to some degree, and hopefully I’ve outlined a sufficiently friendly environment for people to be comfortable wanting to work on it.
|
|
||||||
Please tell me what you think!
|
|
||||||
If this does not turn out to be as interesting, a fork could still happen, but may also be significantly less ambitious (namely aiming for bug fixes and integration of my olde patches).
|
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
# Reporting Security Issues
|
# Reporting Security Issues
|
||||||
|
|
||||||
If you discover a security issue in Foundkey, please report it by sending an
|
If you discover a security issue in Misskey, please report it by sending an
|
||||||
email to [johann@qwertqwefsday.eu](mailto:johann@qwertqwefsday.eu).
|
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 repository.
|
bug report to the GitHub repository.
|
||||||
|
|
||||||
Thanks for helping make Foundkey safe for everyone.
|
Thanks for helping make Misskey safe for everyone.
|
||||||
|
|
BIN
assets/about/drive.png
Normal file
After Width: | Height: | Size: 94 KiB |
BIN
assets/about/post.png
Normal file
After Width: | Height: | Size: 317 KiB |
BIN
assets/about/reaction.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
assets/about/ui.png
Normal file
After Width: | Height: | Size: 95 KiB |
BIN
assets/ai-orig.png
Normal file
After Width: | Height: | Size: 200 KiB |
BIN
assets/ai.png
Normal file
After Width: | Height: | Size: 235 KiB |
BIN
assets/banner.afdesign
Normal file
BIN
assets/mi-white.afdesign
Normal file
BIN
assets/mi.afdesign
Normal file
BIN
assets/ss/explore.jpg
Normal file
After Width: | Height: | Size: 238 KiB |
BIN
assets/ss/user.jpg
Normal file
After Width: | Height: | Size: 148 KiB |
BIN
assets/title.png
Normal file
After Width: | Height: | Size: 3.8 KiB |
BIN
assets/title_float.svg
Normal file
After Width: | Height: | Size: 6.1 KiB |
3
chart/Chart.yaml
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
apiVersion: v2
|
||||||
|
name: misskey
|
||||||
|
version: 0.0.0
|
165
chart/files/default.yml
Normal file
|
@ -0,0 +1,165 @@
|
||||||
|
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||||
|
# Misskey configuration
|
||||||
|
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||||
|
|
||||||
|
# ┌─────┐
|
||||||
|
#───┘ URL └─────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
# Final accessible URL seen by a user.
|
||||||
|
# url: https://example.tld/
|
||||||
|
|
||||||
|
# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE
|
||||||
|
# URL SETTINGS AFTER THAT!
|
||||||
|
|
||||||
|
# ┌───────────────────────┐
|
||||||
|
#───┘ Port and TLS settings └───────────────────────────────────
|
||||||
|
|
||||||
|
#
|
||||||
|
# Misskey supports two deployment options for public.
|
||||||
|
#
|
||||||
|
|
||||||
|
# Option 1: With Reverse Proxy
|
||||||
|
#
|
||||||
|
# +----- https://example.tld/ ------------+
|
||||||
|
# +------+ |+-------------+ +----------------+|
|
||||||
|
# | User | ---> || Proxy (443) | ---> | Misskey (3000) ||
|
||||||
|
# +------+ |+-------------+ +----------------+|
|
||||||
|
# +---------------------------------------+
|
||||||
|
#
|
||||||
|
# You need to setup reverse proxy. (eg. nginx)
|
||||||
|
# You do not define 'https' section.
|
||||||
|
|
||||||
|
# Option 2: Standalone
|
||||||
|
#
|
||||||
|
# +- https://example.tld/ -+
|
||||||
|
# +------+ | +---------------+ |
|
||||||
|
# | User | ---> | | Misskey (443) | |
|
||||||
|
# +------+ | +---------------+ |
|
||||||
|
# +------------------------+
|
||||||
|
#
|
||||||
|
# You need to run Misskey as root.
|
||||||
|
# You need to set Certificate in 'https' section.
|
||||||
|
|
||||||
|
# To use option 1, uncomment below line.
|
||||||
|
port: 3000 # A port that your Misskey server should listen.
|
||||||
|
|
||||||
|
# To use option 2, uncomment below lines.
|
||||||
|
#port: 443
|
||||||
|
|
||||||
|
#https:
|
||||||
|
# # path for certification
|
||||||
|
# key: /etc/letsencrypt/live/example.tld/privkey.pem
|
||||||
|
# cert: /etc/letsencrypt/live/example.tld/fullchain.pem
|
||||||
|
|
||||||
|
# ┌──────────────────────────┐
|
||||||
|
#───┘ PostgreSQL configuration └────────────────────────────────
|
||||||
|
|
||||||
|
db:
|
||||||
|
host: localhost
|
||||||
|
port: 5432
|
||||||
|
|
||||||
|
# Database name
|
||||||
|
db: misskey
|
||||||
|
|
||||||
|
# Auth
|
||||||
|
user: example-misskey-user
|
||||||
|
pass: example-misskey-pass
|
||||||
|
|
||||||
|
# Whether disable Caching queries
|
||||||
|
#disableCache: true
|
||||||
|
|
||||||
|
# Extra Connection options
|
||||||
|
#extra:
|
||||||
|
# ssl: true
|
||||||
|
|
||||||
|
# ┌─────────────────────┐
|
||||||
|
#───┘ Redis configuration └─────────────────────────────────────
|
||||||
|
|
||||||
|
redis:
|
||||||
|
host: localhost
|
||||||
|
port: 6379
|
||||||
|
#pass: example-pass
|
||||||
|
#prefix: example-prefix
|
||||||
|
#db: 1
|
||||||
|
|
||||||
|
# ┌─────────────────────────────┐
|
||||||
|
#───┘ Elasticsearch configuration └─────────────────────────────
|
||||||
|
|
||||||
|
#elasticsearch:
|
||||||
|
# host: localhost
|
||||||
|
# port: 9200
|
||||||
|
# ssl: false
|
||||||
|
# user:
|
||||||
|
# pass:
|
||||||
|
|
||||||
|
# ┌───────────────┐
|
||||||
|
#───┘ 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
|
||||||
|
# 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: "aid"
|
||||||
|
# ┌─────────────────────┐
|
||||||
|
#───┘ 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: 16
|
||||||
|
|
||||||
|
# Job attempts
|
||||||
|
# deliverJobMaxAttempts: 12
|
||||||
|
# inboxJobMaxAttempts: 8
|
||||||
|
|
||||||
|
# IP address family used for outgoing request (ipv4, ipv6 or dual)
|
||||||
|
#outgoingAddressFamily: ipv4
|
||||||
|
|
||||||
|
# Syslog option
|
||||||
|
#syslog:
|
||||||
|
# host: localhost
|
||||||
|
# port: 514
|
||||||
|
|
||||||
|
# Proxy for HTTP/HTTPS
|
||||||
|
#proxy: http://127.0.0.1:3128
|
||||||
|
|
||||||
|
#proxyBypassHosts: [
|
||||||
|
# 'example.com',
|
||||||
|
# '192.0.2.8'
|
||||||
|
#]
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
|
# Sign to ActivityPub GET request (default: false)
|
||||||
|
#signToActivityPubGet: true
|
||||||
|
|
||||||
|
#allowedPrivateNetworks: [
|
||||||
|
# '127.0.0.1/32'
|
||||||
|
#]
|
||||||
|
|
||||||
|
# Upload or download file size limits (bytes)
|
||||||
|
#maxFileSize: 262144000
|
8
chart/templates/ConfigMap.yml
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: {{ include "misskey.fullname" . }}-configuration
|
||||||
|
data:
|
||||||
|
default.yml: |-
|
||||||
|
{{ .Files.Get "files/default.yml"|nindent 4 }}
|
||||||
|
url: {{ .Values.url }}
|
47
chart/templates/Deployment.yml
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: {{ include "misskey.fullname" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "misskey.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "misskey.selectorLabels" . | nindent 6 }}
|
||||||
|
replicas: 1
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "misskey.selectorLabels" . | nindent 8 }}
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: misskey
|
||||||
|
image: {{ .Values.image }}
|
||||||
|
env:
|
||||||
|
- name: NODE_ENV
|
||||||
|
value: {{ .Values.environment }}
|
||||||
|
volumeMounts:
|
||||||
|
- name: {{ include "misskey.fullname" . }}-configuration
|
||||||
|
mountPath: /misskey/.config
|
||||||
|
readOnly: true
|
||||||
|
ports:
|
||||||
|
- containerPort: 3000
|
||||||
|
- name: postgres
|
||||||
|
image: postgres:14-alpine
|
||||||
|
env:
|
||||||
|
- name: POSTGRES_USER
|
||||||
|
value: "example-misskey-user"
|
||||||
|
- name: POSTGRES_PASSWORD
|
||||||
|
value: "example-misskey-pass"
|
||||||
|
- name: POSTGRES_DB
|
||||||
|
value: "misskey"
|
||||||
|
ports:
|
||||||
|
- containerPort: 5432
|
||||||
|
- name: redis
|
||||||
|
image: redis:alpine
|
||||||
|
ports:
|
||||||
|
- containerPort: 6379
|
||||||
|
volumes:
|
||||||
|
- name: {{ include "misskey.fullname" . }}-configuration
|
||||||
|
configMap:
|
||||||
|
name: {{ include "misskey.fullname" . }}-configuration
|
14
chart/templates/Service.yml
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: {{ include "misskey.fullname" . }}
|
||||||
|
annotations:
|
||||||
|
dev.okteto.com/auto-ingress: "true"
|
||||||
|
spec:
|
||||||
|
type: ClusterIP
|
||||||
|
ports:
|
||||||
|
- port: 3000
|
||||||
|
protocol: TCP
|
||||||
|
name: http
|
||||||
|
selector:
|
||||||
|
{{- include "misskey.selectorLabels" . | nindent 4 }}
|
62
chart/templates/_helpers.tpl
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
{{/*
|
||||||
|
Expand the name of the chart.
|
||||||
|
*/}}
|
||||||
|
{{- define "misskey.name" -}}
|
||||||
|
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create a default fully qualified app name.
|
||||||
|
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||||
|
If release name contains chart name it will be used as a full name.
|
||||||
|
*/}}
|
||||||
|
{{- define "misskey.fullname" -}}
|
||||||
|
{{- if .Values.fullnameOverride }}
|
||||||
|
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- else }}
|
||||||
|
{{- $name := default .Chart.Name .Values.nameOverride }}
|
||||||
|
{{- if contains $name .Release.Name }}
|
||||||
|
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- else }}
|
||||||
|
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create chart name and version as used by the chart label.
|
||||||
|
*/}}
|
||||||
|
{{- define "misskey.chart" -}}
|
||||||
|
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Common labels
|
||||||
|
*/}}
|
||||||
|
{{- define "misskey.labels" -}}
|
||||||
|
helm.sh/chart: {{ include "misskey.chart" . }}
|
||||||
|
{{ include "misskey.selectorLabels" . }}
|
||||||
|
{{- if .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
||||||
|
{{- end }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Selector labels
|
||||||
|
*/}}
|
||||||
|
{{- define "misskey.selectorLabels" -}}
|
||||||
|
app.kubernetes.io/name: {{ include "misskey.name" . }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create the name of the service account to use
|
||||||
|
*/}}
|
||||||
|
{{- define "misskey.serviceAccountName" -}}
|
||||||
|
{{- if .Values.serviceAccount.create }}
|
||||||
|
{{- default (include "misskey.fullname" .) .Values.serviceAccount.name }}
|
||||||
|
{{- else }}
|
||||||
|
{{- default "default" .Values.serviceAccount.name }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
3
chart/values.yml
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
url: https://example.tld/
|
||||||
|
image: okteto.dev/misskey
|
||||||
|
environment: production
|
4
crowdin.yml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
files:
|
||||||
|
- source: /locales/ja-JP.yml
|
||||||
|
translation: /locales/%locale%.yml
|
||||||
|
update_option: update_as_unapproved
|
|
@ -9,17 +9,17 @@ services:
|
||||||
- redis
|
- redis
|
||||||
# - es
|
# - es
|
||||||
ports:
|
ports:
|
||||||
- "127.0.0.1:3000:3000"
|
- "3000:3000"
|
||||||
networks:
|
networks:
|
||||||
- internal_network
|
- internal_network
|
||||||
- external_network
|
- external_network
|
||||||
volumes:
|
volumes:
|
||||||
- ./files:/foundkey/files
|
- ./files:/misskey/files
|
||||||
- ./.config:/foundkey/.config:ro
|
- ./.config:/misskey/.config:ro
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
restart: always
|
restart: always
|
||||||
image: redis:7.0-alpine
|
image: redis:4.0-alpine
|
||||||
networks:
|
networks:
|
||||||
- internal_network
|
- internal_network
|
||||||
volumes:
|
volumes:
|
||||||
|
@ -27,7 +27,7 @@ services:
|
||||||
|
|
||||||
db:
|
db:
|
||||||
restart: always
|
restart: always
|
||||||
image: postgres:14.5-alpine
|
image: postgres:12.2-alpine
|
||||||
networks:
|
networks:
|
||||||
- internal_network
|
- internal_network
|
||||||
env_file:
|
env_file:
|
||||||
|
|
25
docs/DONATORS.md
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
DONATORS
|
||||||
|
========
|
||||||
|
The list of people who have sent donation for Misskey.
|
||||||
|
|
||||||
|
(In random order, honorific titles are omitted.)
|
||||||
|
|
||||||
|
* らふぁ
|
||||||
|
* 俺様
|
||||||
|
* なぎうり
|
||||||
|
* スルメ https://surume.tk/
|
||||||
|
* 藍
|
||||||
|
* 音船 https://otofune.me/
|
||||||
|
* aqz https://misskey.xyz/aqz
|
||||||
|
* kotodu "虚無創作中"
|
||||||
|
* Maya Minatsuki
|
||||||
|
* Knzk https://knzk.me/@Knzk
|
||||||
|
* ねじりわさび https://knzk.me/@y
|
||||||
|
* NCLS https://knzk.me/@imncls]
|
||||||
|
* こじま @skoji@sandbox.skoji.jp
|
||||||
|
|
||||||
|
:heart: Thanks for donating, guys!
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
If your name is missing, please contact us!
|
108
docs/emoji.md
|
@ -1,108 +0,0 @@
|
||||||
# Managing Custom Emoji
|
|
||||||
|
|
||||||
Custom emoji can be managed by administrators or moderators by going to the instance settings and then the custom emoji submenu.
|
|
||||||
By default you will see a list of the current locally installed emoji.
|
|
||||||
At the start this list will be empty, but you can add custom emoji in different ways.
|
|
||||||
|
|
||||||
## Copying Emoji from another Instance
|
|
||||||
|
|
||||||
Emoji can be easily copied from another instance.
|
|
||||||
To do this, switch to the "remote" tab in the custom emoji settings.
|
|
||||||
You can search emoji by name and/or host they are from.
|
|
||||||
|
|
||||||
When you have found an emoji you want, click it to open a small menu which will allow you to import the emoji.
|
|
||||||
|
|
||||||
Please note that Emoji may be subject to copyright and you are responsible for checking whether you may legally use another emoji.
|
|
||||||
|
|
||||||
## Individual Emoji Import
|
|
||||||
|
|
||||||
If you have an image file that you would like to turn into a custom emoji you can import the image as an emoji.
|
|
||||||
This works just like attaching files to a note:
|
|
||||||
You can choose to upload a new file, pick a file from your Foundkey drive or upload a file from another URL.
|
|
||||||
|
|
||||||
**Warning:**
|
|
||||||
When you import emoji from your drive, the file will remain inside your drive.
|
|
||||||
Foundkey does not make a copy of this file so if you delete it, the emoji will be broken.
|
|
||||||
|
|
||||||
The emoji will be added to the instance and you will then be able to edit or delete it as usual.
|
|
||||||
|
|
||||||
## Bulk Emoji import
|
|
||||||
|
|
||||||
Emojis can be imported in bulk as packed ZIP files with a special format.
|
|
||||||
This ability can be found in the three dots menu in the top right corner of the custom emoji menu.
|
|
||||||
|
|
||||||
**Warning:**
|
|
||||||
Bulk emoji import may overwrite existing emoji or otherwise mess up your instance.
|
|
||||||
Be sure to only import emoji from trusted sources, ideally only ones you exported yourself.
|
|
||||||
|
|
||||||
### Packed emoji format
|
|
||||||
|
|
||||||
At the top level is a file called `meta.json` which contains information about the emoji contained in the packed file.
|
|
||||||
A type definition for this file would look like this, where `Meta` is the structure of the whole file.
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
class Meta {
|
|
||||||
metaVersion: number;
|
|
||||||
host: string;
|
|
||||||
/**
|
|
||||||
* Date and time representation returned by ECMAScript `Date.prototype.toString`.
|
|
||||||
*/
|
|
||||||
exportedAt: string;
|
|
||||||
emojis: Emoji[];
|
|
||||||
}
|
|
||||||
|
|
||||||
class Emoji {
|
|
||||||
downloaded: boolean;
|
|
||||||
fileName: string;
|
|
||||||
emoji: {
|
|
||||||
id: string;
|
|
||||||
updatedAt: string;
|
|
||||||
name: string;
|
|
||||||
host: null;
|
|
||||||
category: string;
|
|
||||||
originalUrl: string;
|
|
||||||
publicUrl: string;
|
|
||||||
uri: null;
|
|
||||||
type: string;
|
|
||||||
aliases: string[];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
The fields of `Meta` are currently not used or checked when importing emoji, except for the `emojis` field.
|
|
||||||
|
|
||||||
For each `Emoji`:
|
|
||||||
- `downloaded`: should always be true. If the field is missing or not truthy, the emoji will not be imported.
|
|
||||||
- `fileName`: name of the image file inside the packed file.
|
|
||||||
- `emoji`: data associated with the emoji as it was stored in the database. Currently most of these fields are
|
|
||||||
not even checked for existence. The following are currently used:
|
|
||||||
- `name`: name of the emoji for the user, e.g. `blobfox` if a user should type in `:blobfox:` to get the emoji.
|
|
||||||
If a previous emoji with the same name exists, it **will be overwritten**!
|
|
||||||
- `category`: category of the emoji
|
|
||||||
- `aliases`: list of strings that should be added as aliases. The admin UI calls these "tags".
|
|
||||||
|
|
||||||
## Editing and Deleting Emoji
|
|
||||||
|
|
||||||
The properties of an emoji can be edited by clicking it in the list of local emoji.
|
|
||||||
When you click on a custom emoji, a dialog for editing the properties will open.
|
|
||||||
This dialog will also allow you to delete an emoji.
|
|
||||||
|
|
||||||
**Warning:**
|
|
||||||
When you delete a custom emoji, old notes that contain it will still have the text name of the emoji in it.
|
|
||||||
The emoji will no longer be rendered correctly.
|
|
||||||
|
|
||||||
Note that remote emoji can not be edited or deleted.
|
|
||||||
|
|
||||||
Each emoji can have a name and a category and several tags.
|
|
||||||
The category is used for structuring the emoji picker.
|
|
||||||
Meanwhile the tags can be used as alternate names by which the emoji can be found when searching in the emoji picker.
|
|
||||||
|
|
||||||
When you are done editing, save your changes by clicking the check mark in the top right corner of the dialog.
|
|
||||||
|
|
||||||
### Bulk Editing
|
|
||||||
|
|
||||||
Emoji can be edited in bulk by checking the box below the search field.
|
|
||||||
With this enabled, clicking on an emoji will select it instead of opening the editing dialog.
|
|
||||||
|
|
||||||
The Editing options will be displayed as buttons below the checkbox.
|
|
||||||
To return to the normal behaviour just uncheck the box again.
|
|
|
@ -1,85 +0,0 @@
|
||||||
# Create FoundKey instance with Docker Compose
|
|
||||||
|
|
||||||
This guide describes how to install and setup FoundKey with Docker Compose.
|
|
||||||
|
|
||||||
**WARNING:**
|
|
||||||
Never change the domain name (hostname) of an instance once you start using it!
|
|
||||||
|
|
||||||
|
|
||||||
## Requirements
|
|
||||||
- Docker or Podman
|
|
||||||
- Docker Compose plugin (or podman-compose)
|
|
||||||
|
|
||||||
If using Podman, replace `docker` with `podman`. Commands using `docker compose` should be replaced with `podman-compose`.
|
|
||||||
|
|
||||||
You may need to prefix `docker` commands with `sudo` unless your user is in the `docker` group or you are running Docker in rootless mode.
|
|
||||||
|
|
||||||
## Get the repository
|
|
||||||
```sh
|
|
||||||
git clone https://akkoma.dev/FoundKeyGang/FoundKey.git
|
|
||||||
cd FoundKey
|
|
||||||
```
|
|
||||||
|
|
||||||
To make it easier to perform your own changes on top, we suggest making a branch based on the latest tag.
|
|
||||||
In this example, we'll use `v13.0.0-preview1` as the tag to check out and `my-branch` as the branch name.
|
|
||||||
```sh
|
|
||||||
git checkout tags/v13.0.0-preview1 -b my-branch
|
|
||||||
```
|
|
||||||
|
|
||||||
## Configure
|
|
||||||
|
|
||||||
Copy example configuration files with following:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
cp .config/docker_example.yml .config/default.yml
|
|
||||||
cp .config/docker_example.env .config/docker.env
|
|
||||||
```
|
|
||||||
|
|
||||||
Edit `default.yml` and `docker.env` according to the instructions in the files.
|
|
||||||
You will need to set the database host to `db` and Redis host to `redis` in order to use the internal container network for these services.
|
|
||||||
|
|
||||||
Edit `docker-compose.yml` if necessary. (e.g. if you want to change the port).
|
|
||||||
If you are using SELinux (eg. you're on Fedora or a RHEL derivative), you'll want to add the `Z` mount flag to the volume mounts to allow the containers to access the contents of those volumes.
|
|
||||||
|
|
||||||
Also check out the [Configure Foundkey](./install.md#configure-foundkey) section in the ordinary installation instructions.
|
|
||||||
|
|
||||||
## Build and initialize
|
|
||||||
The following command will build FoundKey and initialize the database.
|
|
||||||
This will take some time.
|
|
||||||
|
|
||||||
``` shell
|
|
||||||
docker compose build
|
|
||||||
docker compose run --rm web yarn run init
|
|
||||||
```
|
|
||||||
|
|
||||||
## Launch
|
|
||||||
You can start FoundKey with the following command:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
docker compose up -d
|
|
||||||
```
|
|
||||||
|
|
||||||
In case you are encountering issues, you can run `docker compose logs -f` to get the log output of the running containers.
|
|
||||||
|
|
||||||
## How to update your FoundKey server
|
|
||||||
When updating, be sure to check the [release notes](https://akkoma.dev/FoundKeyGang/FoundKey/src/branch/main/CHANGELOG.md) to know in advance the changes and whether or not additional work is required (in most cases, it is not).
|
|
||||||
|
|
||||||
To update your branch to the latest tag (in this example `v13.0.0-preview2`), you can do the following:
|
|
||||||
```sh
|
|
||||||
git fetch -t
|
|
||||||
|
|
||||||
# Use --squash if you want to merge all of the changes in the tag into a single commit.
|
|
||||||
# Useful if you have made additional changes.
|
|
||||||
git merge tags/v13.0.0-preview2
|
|
||||||
|
|
||||||
# Rebuild and restart the docker container.
|
|
||||||
docker compose build
|
|
||||||
docker compose down && docker compose up -d
|
|
||||||
```
|
|
||||||
|
|
||||||
It may take some time depending on the contents of the update and the size of the database.
|
|
||||||
|
|
||||||
## How to execute CLI commands
|
|
||||||
```sh
|
|
||||||
docker compose run --rm web node packages/backend/built/tools/foo bar
|
|
||||||
```
|
|
243
docs/install.md
|
@ -1,243 +0,0 @@
|
||||||
# FoundKey Setup and Installation Guide
|
|
||||||
|
|
||||||
This guide will assume that you have administrative rights, either as root or a user with sudo permissions. If you are using a non-root user, prefix the commands with `sudo` except when you are logged into the foundkey user with `su`.
|
|
||||||
|
|
||||||
This guide will also assume you're using Debian or a derivative like Ubuntu. If you are using another OS, you will need to adapt the comamnds and package names to match those that your OS uses.
|
|
||||||
|
|
||||||
## Install dependencies
|
|
||||||
FoundKey requires the following packages to run:
|
|
||||||
|
|
||||||
### Dependencies :package:
|
|
||||||
* **[Node.js](https://nodejs.org/en/)** (18.x)
|
|
||||||
* **[PostgreSQL](https://www.postgresql.org/)** (12.x minimum; 13.x+ is preferred)
|
|
||||||
* **[Redis](https://redis.io/)**
|
|
||||||
* **[Yarn](https://yarnpkg.com/)**
|
|
||||||
|
|
||||||
The following are needed to compile native npm modules:
|
|
||||||
* A C/C++ compiler like **GCC** or **Clang**
|
|
||||||
* Build tools like **make**
|
|
||||||
* **[Python](https://python.org/)** (3.x)
|
|
||||||
|
|
||||||
### Optional
|
|
||||||
* [FFmpeg](https://www.ffmpeg.org/)
|
|
||||||
|
|
||||||
To install the dependiencies on Debian (or derivatives like Ubuntu) you can use the following commands:
|
|
||||||
```sh
|
|
||||||
curl -fsSL https://deb.nodesource.com/setup_18.x | bash -
|
|
||||||
apt install build-essential python3 nodejs postgresql redis
|
|
||||||
corepack enable # for yarn
|
|
||||||
|
|
||||||
# Optional dependencies
|
|
||||||
apt install ffmpeg
|
|
||||||
```
|
|
||||||
|
|
||||||
## Create FoundKey user
|
|
||||||
Create a separate non-root user to run FoundKey:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
adduser --disabled-password --disabled-login foundkey
|
|
||||||
```
|
|
||||||
|
|
||||||
The following steps will require logging into the `foundkey` user, so do that now.
|
|
||||||
```sh
|
|
||||||
su - foundkey
|
|
||||||
```
|
|
||||||
|
|
||||||
## Install FoundKey
|
|
||||||
We recommend using a local branch and merging in upstream releases as they get tagged. This allows for easy local customization of your install.
|
|
||||||
|
|
||||||
First, clone the FoundKey repo:
|
|
||||||
```sh
|
|
||||||
git clone https://akkoma.dev/FoundKeyGang/FoundKey
|
|
||||||
cd FoundKey
|
|
||||||
```
|
|
||||||
|
|
||||||
Now create your local branch. In this example, we'll be using `toast.cafe` as the local branch name and release `v13.0.0-preview1` as the tag to track. To create that branch:
|
|
||||||
```sh
|
|
||||||
git checkout tags/v13.0.0-preview1 -b toast.cafe
|
|
||||||
```
|
|
||||||
|
|
||||||
Updating will be covered in a later section. For now you'll want to install the dependencies using Yarn:
|
|
||||||
```sh
|
|
||||||
yarn install
|
|
||||||
```
|
|
||||||
|
|
||||||
## Configure FoundKey
|
|
||||||
1. Copy `.config/example.yml` to `.config/default.yml`.
|
|
||||||
|
|
||||||
`cp .config/example.yml .config/default.yml`
|
|
||||||
|
|
||||||
2. Edit `default.yml` with a text editor
|
|
||||||
- Make sure you set the PostgreSQL and Redis settings correctly.
|
|
||||||
- Use a strong password for the PostgreSQL user and take note of it since it'll be needed later.
|
|
||||||
|
|
||||||
### Reverse proxy
|
|
||||||
For production use and for HTTPS termination you will have to use a reverse proxy.
|
|
||||||
There are instructions for setting up [nginx](./nginx.md) for this purpose.
|
|
||||||
|
|
||||||
### Changing the default Reaction
|
|
||||||
You can change the default reaction that is used when an ActivityPub "Like" is received from '👍' to '⭐' by changing the boolean value `meta.useStarForReactionFallback` in the databse respectively.
|
|
||||||
|
|
||||||
### Environment variables
|
|
||||||
There are some behaviour changes which can be accomplished using environment variables.
|
|
||||||
|
|
||||||
|variable name|meaning|
|
|
||||||
|---|---|
|
|
||||||
|`FK_ONLY_QUEUE`|If set, only the queue processing will be run. The frontend will not be available. Cannot be combined with `FK_ONLY_SERVER` or `FK_DISABLE_CLUSTERING`.|
|
|
||||||
|`FK_ONLY_SERVER`|If set, only the frontend will be run. Queues will not be processed. Cannot be combined with `FK_ONLY_QUEUE` or `FK_DISABLE_CLUSTERING`.|
|
|
||||||
|`FK_NO_DAEMONS`|If set, the server statistics and queue statistics will not be run.|
|
|
||||||
|`FK_DISABLE_CLUSTERING`|If set, all work will be done in a single thread instead of different threads for frontend and queue. (not recommended)|
|
|
||||||
|`FK_WITH_LOG_TIME`|If set, a timestamp will be appended to all log messages.|
|
|
||||||
|`FK_SLOW`|If set, all requests will be delayed by 3s. (not recommended, useful for testing)|
|
|
||||||
|`FK_LOG_LEVEL`|Sets the log level. Messages below the set log level will be suppressed. Available log levels are `quiet` (suppress all), `error`, `warning`, `success`, `info`, `debug`.|
|
|
||||||
|
|
||||||
If the `NODE_ENV` environment variable is set to `testing`, then the flags `FK_DISABLE_CLUSTERING` and `FK_NO_DAEMONS` will always be set, and the log level will always be `quiet`.
|
|
||||||
|
|
||||||
## Build FoundKey
|
|
||||||
|
|
||||||
Build foundkey with the following:
|
|
||||||
|
|
||||||
`NODE_ENV=production yarn build`
|
|
||||||
|
|
||||||
If your system has at least 4GB of RAM, run `NODE_ENV=production yarn build-parallel` to speed up build times.
|
|
||||||
|
|
||||||
If you're still encountering errors about some modules, use node-gyp:
|
|
||||||
|
|
||||||
1. `npx node-gyp configure`
|
|
||||||
2. `npx node-gyp build`
|
|
||||||
3. `NODE_ENV=production yarn build`
|
|
||||||
|
|
||||||
## Setting up the database
|
|
||||||
Create the appropriate PostgreSQL users with respective passwords, and empty database as named in the configuration file.
|
|
||||||
|
|
||||||
Make sure the database connection also works correctly when run from the user that will later run FoundKey, or it could cause problems later. The encoding of the database should be UTF-8.
|
|
||||||
|
|
||||||
```sh
|
|
||||||
sudo -u postgres psql
|
|
||||||
```
|
|
||||||
|
|
||||||
```sql
|
|
||||||
create database foundkey with encoding = 'UTF8';
|
|
||||||
create user foundkey with encrypted password '{YOUR_PASSWORD}';
|
|
||||||
grant all privileges on database foundkey to foundkey;
|
|
||||||
\q
|
|
||||||
```
|
|
||||||
|
|
||||||
Next, initialize the database:
|
|
||||||
`yarn run init`
|
|
||||||
|
|
||||||
## Running FoundKey
|
|
||||||
You can either run FoundKey manually or use the system service manager to start FoundKey automatically on startup.
|
|
||||||
|
|
||||||
### Launching manually
|
|
||||||
Run `NODE_ENV=production npm start` to launch FoundKey manually. To stop the server, use Ctrl-C.
|
|
||||||
|
|
||||||
### Launch with systemd
|
|
||||||
|
|
||||||
Run `systemctl edit --full --force foundkey.service`, and paste the following:
|
|
||||||
|
|
||||||
```ini
|
|
||||||
[Unit]
|
|
||||||
Description=FoundKey daemon
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
User=foundkey
|
|
||||||
ExecStart=/usr/bin/npm start
|
|
||||||
WorkingDirectory=/home/foundkey/FoundKey
|
|
||||||
Environment="NODE_ENV=production"
|
|
||||||
TimeoutSec=60
|
|
||||||
StandardOutput=syslog
|
|
||||||
StandardError=syslog
|
|
||||||
SyslogIdentifier=foundkey
|
|
||||||
Restart=always
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
```
|
|
||||||
|
|
||||||
Save the file, then enable and start FoundKey.
|
|
||||||
```sh
|
|
||||||
systemctl enable --now foundkey
|
|
||||||
```
|
|
||||||
|
|
||||||
You can check if the service is running with `systemctl status foundkey`.
|
|
||||||
|
|
||||||
### Launch with OpenRC
|
|
||||||
|
|
||||||
Copy the following text to `/etc/init.d/foundkey`:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
#!/sbin/openrc-run
|
|
||||||
|
|
||||||
name=foundkey
|
|
||||||
description="FoundKey daemon"
|
|
||||||
|
|
||||||
command="/usr/bin/npm"
|
|
||||||
command_args="start"
|
|
||||||
command_user="foundkey"
|
|
||||||
|
|
||||||
supervisor="supervise-daemon"
|
|
||||||
supervise_daemon_args=" -d /home/foundkey/FoundKey -e NODE_ENV=\"production\""
|
|
||||||
|
|
||||||
pidfile="/run/${RC_SVCNAME}.pid"
|
|
||||||
|
|
||||||
depend() {
|
|
||||||
need net
|
|
||||||
use logger
|
|
||||||
|
|
||||||
# alternatively, uncomment if using nginx reverse proxy
|
|
||||||
#use logger nginx
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Mark the script as executable and enable the service to start on boot:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
chmod +x /etc/init.d/foundkey
|
|
||||||
rc-update add foundkey
|
|
||||||
```
|
|
||||||
|
|
||||||
Start the FoundKey service:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
rc-service foundkey start
|
|
||||||
```
|
|
||||||
|
|
||||||
You can check if the service is running with `rc-service foundkey status`.
|
|
||||||
|
|
||||||
### Updating FoundKey
|
|
||||||
When a new release comes out, simply fetch and merge in the new tag. If you plan on making additional changes on top of that tag, we suggest using the `--squash` option with `git merge`.
|
|
||||||
```sh
|
|
||||||
git fetch -t
|
|
||||||
git merge tags/v13.0.0-preview2
|
|
||||||
# you are now on the "next" release
|
|
||||||
```
|
|
||||||
|
|
||||||
Now you'll want to update your dependencies and rebuild:
|
|
||||||
```sh
|
|
||||||
yarn install
|
|
||||||
# Use build-parallel if your system has 4GB or more RAM and want faster builds
|
|
||||||
NODE_ENV=production yarn build
|
|
||||||
```
|
|
||||||
|
|
||||||
Next, run the database migrations:
|
|
||||||
```sh
|
|
||||||
yarn migrate
|
|
||||||
```
|
|
||||||
|
|
||||||
Then restart FoundKey if it's still running.
|
|
||||||
```sh
|
|
||||||
# Systemd
|
|
||||||
systemctl restart foundkey
|
|
||||||
|
|
||||||
# OpenRC
|
|
||||||
rc-service foundkey restart
|
|
||||||
```
|
|
||||||
|
|
||||||
If you encounter any problems with updating, please try the following:
|
|
||||||
1. `yarn clean` or `yarn cleanall`
|
|
||||||
2. Retry update (Don't forget `yarn install`)
|
|
||||||
|
|
||||||
## Need Help?
|
|
||||||
If you have any questions or troubles, feel free to contact us on IRC: `#foundkey` on `irc.akkoma.dev`, port `6697` with SSL
|
|
|
@ -1,80 +0,0 @@
|
||||||
# Migrating to FoundKey
|
|
||||||
|
|
||||||
Migrating from Misskey to FoundKey is relatively straightforward. However, additional steps are required as there are significant changes between the two projects.
|
|
||||||
|
|
||||||
## Backup
|
|
||||||
The process will take some time and it's possible something will go wrong. It's highly suggested to make a database dump using `pgdump` and backing up `.config/default.yml` and the `files/` directory before proceeding any further.
|
|
||||||
|
|
||||||
## Requirements
|
|
||||||
FoundKey has different version requirements compared to Misskey. Before continuing please check if you have the following minimum versions installed:
|
|
||||||
* Node (version 18)
|
|
||||||
* Postgresql (version 12)
|
|
||||||
|
|
||||||
## Reverting migrations
|
|
||||||
If you're migrating from Misskey 12.112.0 or higher, you'll need to revert some database migrations as they have diverged from that point. Specifically, you'll need to revert `nsfwDetection1655368940105` and newer migrations.
|
|
||||||
|
|
||||||
Run the following to revert those migrations:
|
|
||||||
```sh
|
|
||||||
cd packages/backend
|
|
||||||
|
|
||||||
LINE_NUM="$(npx typeorm migration:show -d ormconfig.js | grep -n nsfwDetection1655368940105 | cut -d ':' -f 1)"
|
|
||||||
NUM_MIGRATIONS="$(npx typeorm migration:show -d ormconfig.js | tail -n+"$LINE_NUM" | grep '\[X\]' | nl)"
|
|
||||||
|
|
||||||
for i in $(seq 1 $NUM_MIGRATIONS); do
|
|
||||||
npx typeorm migration:revert -d ormconfig.js || continue
|
|
||||||
done
|
|
||||||
```
|
|
||||||
|
|
||||||
**Note:** TypeORM might hang when reverting a migration. If it says that the migration was reverted successfully, you can force close TypeORM using Ctrl-C. The script will continue until all of the migrations have been reverted.
|
|
||||||
|
|
||||||
## Switching repositories
|
|
||||||
To switch to the FoundKey repository, do the following in your Misskey install location:
|
|
||||||
```sh
|
|
||||||
git remote set-url origin https://akkoma.dev/FoundKeyGang/FoundKey.git
|
|
||||||
git fetch origin
|
|
||||||
```
|
|
||||||
We recommend using a local branch and merging in upstream releases as they get tagged. This allows for easy local customization of your install.
|
|
||||||
|
|
||||||
For example, say your local branch is `toast.cafe` and you want to use release `v13.0.0-preview1`. To create that branch:
|
|
||||||
```sh
|
|
||||||
git checkout tags/v13.0.0-preview1 -b toast.cafe
|
|
||||||
```
|
|
||||||
|
|
||||||
When a new release comes out, simply fetch and merge in the new tag. Here we opt to squash upstream commits as it allows for easy reverts in case something goes wrong.
|
|
||||||
```sh
|
|
||||||
git fetch -t
|
|
||||||
git merge tags/v13.0.0-preview2 --squash
|
|
||||||
# you are now on the "next" release
|
|
||||||
```
|
|
||||||
|
|
||||||
## Making sure modern Yarn works
|
|
||||||
FoundKey uses modern Yarn instead of Classic (1.x) using [Corepack](https://github.com/nodejs/corepack). To make sure the `yarn` command will work going forward, run `corepack enable`.
|
|
||||||
|
|
||||||
If you previously had Yarn installed manually you have to remove it and install Corepack:
|
|
||||||
```sh
|
|
||||||
npm uninstall -g yarn
|
|
||||||
npm install -g corepack
|
|
||||||
corepack enable
|
|
||||||
```
|
|
||||||
|
|
||||||
## Rebuilding and running database migrations
|
|
||||||
This will be pretty much the same as a regular update of Misskey. Note that `yarn install` may take a while since dependency versions have been updated or removed and we use a newer version of Yarn.
|
|
||||||
```sh
|
|
||||||
yarn install
|
|
||||||
NODE_ENV=production yarn build
|
|
||||||
yarn migrate
|
|
||||||
```
|
|
||||||
If you encounter issues during the build process run `yarn clean-all` and run the install and build command again.
|
|
||||||
|
|
||||||
## Restarting your instance
|
|
||||||
To let the changes take effect restart your instance as usual:
|
|
||||||
```sh
|
|
||||||
# Systemd
|
|
||||||
systemctl restart misskey
|
|
||||||
|
|
||||||
# OpenRC
|
|
||||||
rc-service misskey restart
|
|
||||||
```
|
|
||||||
|
|
||||||
## Need help?
|
|
||||||
If you have any questions or troubles, feel free to contact us on IRC: `#foundkey` on `irc.akkoma.dev`, port `6697` with SSL
|
|
|
@ -1,103 +0,0 @@
|
||||||
# User moderation
|
|
||||||
|
|
||||||
A lot of the user moderation activities can be found on the `user-info` page. You can reach this page by going to a users profile page, open the three dot menu, select "About" and navigating to the "Moderation" section of the page that opens.
|
|
||||||
With the necessary privileges, this page will allow you to:
|
|
||||||
- Toggle whether a user is a moderator (administrators on local users only)
|
|
||||||
- Reset the users password (local users only)
|
|
||||||
- Delete a user (administrators only)
|
|
||||||
- Delete all files of a user
|
|
||||||
For remote users, cached files (if any) will be deleted.
|
|
||||||
- Silence a user
|
|
||||||
This disallows a user from making a note with `public` visibility.
|
|
||||||
If necessary the visibility of incoming notes or locally created notes will be lowered.
|
|
||||||
- Suspend a user
|
|
||||||
This will drop any incoming activities of this actor and hide them from public view on this instance.
|
|
||||||
|
|
||||||
# Administrator
|
|
||||||
|
|
||||||
When an instance is first set up, the initial user to be created will be made an administrator by default.
|
|
||||||
This means that typically the instance owner is the administrator.
|
|
||||||
It is also possible to have multiple administrators, however making a user an administrator is not implemented in the client.
|
|
||||||
To make a user an administrator, you will need access to the database.
|
|
||||||
This is intended for security reasons of
|
|
||||||
1. not exposing this very dangerous functionality via the API
|
|
||||||
2. making sure someone that has shell access to the server anyway "approves" this.
|
|
||||||
|
|
||||||
To make a user an administrator, you will first need the user's ID.
|
|
||||||
To get it you can go to the user's profile page, open the three dot menu, select "About" and copy the ID displayed there.
|
|
||||||
Then, go to the database and run the following query, replacing `<ID>` with the ID gotten above.
|
|
||||||
```sql
|
|
||||||
UPDATE "user" SET "isAdmin" = true WHERE "id" = '<ID>';
|
|
||||||
```
|
|
||||||
|
|
||||||
The user that was made administrator may need to reload their client to see the changes take effect.
|
|
||||||
|
|
||||||
To demote a user, you can do a similar operation, but instead with `... SET "isAdmin" = false ...`.
|
|
||||||
|
|
||||||
## Immunity
|
|
||||||
|
|
||||||
- Cannot be reported by local users.
|
|
||||||
- Cannot have their password reset.
|
|
||||||
To see how you can reset an administrator password, see below.
|
|
||||||
- Cannot have their account deleted.
|
|
||||||
- Cannot be suspended.
|
|
||||||
- Cannot be silenced.
|
|
||||||
- Cannot have their account details viewed by moderators.
|
|
||||||
- Cannot be made moderators.
|
|
||||||
|
|
||||||
## Abilities
|
|
||||||
|
|
||||||
- Create or delete user accounts.
|
|
||||||
- Add or remove moderators.
|
|
||||||
- View and change instance configuration (e.g. Translation API keys).
|
|
||||||
- View all followers and followees.
|
|
||||||
|
|
||||||
Administrators also have the same ability as moderators.
|
|
||||||
Note of course that people with access to the server and/or database access can do basically anything without restrictions (including breaking the instance).
|
|
||||||
|
|
||||||
## Resetting an administrators password
|
|
||||||
|
|
||||||
Administrators are blocked from the paths of resetting the password by moderators or administrators.
|
|
||||||
However, if your server has email configured you should be able to use the "Forgot password" link on the normal signin dialog.
|
|
||||||
|
|
||||||
If you did not set up email, you will need to kick of this process instead through modifying the database yourself.
|
|
||||||
You will need the user ID whose password should be reset, indicated in the following as `<USERID>`;
|
|
||||||
as well as a random string (a UUID would be recommended) indicated as `<TOKEN>`.
|
|
||||||
|
|
||||||
Replacing the two terms above, run the following SQL query:
|
|
||||||
```sql
|
|
||||||
INSERT INTO "password_reset_request" VALUES ('0000000000', now(), '<TOKEN>', '<USERID>');
|
|
||||||
```
|
|
||||||
|
|
||||||
After that, navigate to `/reset-password/<TOKEN>` on your instance to finish the password reset process.
|
|
||||||
After that you should be able to sign in with the new password you just set.
|
|
||||||
|
|
||||||
# Moderator
|
|
||||||
|
|
||||||
A moderator has fewer privileges than an administrator.
|
|
||||||
They can also be more easily added or removed by an adminstrator.
|
|
||||||
Having moderators may be a good idea to help with user moderation.
|
|
||||||
|
|
||||||
## Immunity
|
|
||||||
|
|
||||||
- Cannot be reported by local users.
|
|
||||||
- Cannot be suspended.
|
|
||||||
|
|
||||||
## Abilities
|
|
||||||
|
|
||||||
- Suspend users.
|
|
||||||
- Add, list and remove relays.
|
|
||||||
- View queue, database and server information.
|
|
||||||
- Create, edit, delete, export and import local custom emoji.
|
|
||||||
- View global, social and local timelines even if disabled by administrators.
|
|
||||||
- Show, update and delete any users files and file metadata.
|
|
||||||
Managing emoji is described in [a separate file](emoji.md).
|
|
||||||
- Delete any users notes.
|
|
||||||
- Create an invitation.
|
|
||||||
This allows users to register an account even if (public) registrations are closed using an invite code.
|
|
||||||
- View users' account details.
|
|
||||||
- Suspend and unsuspend users.
|
|
||||||
- Silence and unsilence users.
|
|
||||||
- Handle reports.
|
|
||||||
- Create, update and delete announcements.
|
|
||||||
- View the moderation log.
|
|
|
@ -1,86 +0,0 @@
|
||||||
# Nginx configuration
|
|
||||||
1. Create `/etc/nginx/conf.d/foundkey.conf` or `/etc/nginx/sites-available/foundkey.conf` and copy the following example to the file.\
|
|
||||||
(The file name does not have to be "foundkey".)
|
|
||||||
2. Edit as follows:
|
|
||||||
1. Replace example.tld with the domain you have prepared.\
|
|
||||||
`ssl_certificate` and `ssl_certificate_key` should be the path to the certificate obtained from Let's Encrypt.
|
|
||||||
2. If using a CDN such as Cloudflare, remove 4 lines from "If it's behind another reverse proxy or CDN, remove the following."
|
|
||||||
3. If you create `/etc/nginx/sites-available/foundkey.conf`, create symlink as `/etc/nginx/sites-enabled/foundkey.conf`.\
|
|
||||||
`sudo ln -s /etc/nginx/sites-available/foundkey.conf /etc/nginx/sites-enabled/foundkey.conf`
|
|
||||||
4. Run `sudo nginx -t` to verify that the configuration file will be loaded successfully.
|
|
||||||
5. Run `sudo systemctl restart nginx` to restart nginx.
|
|
||||||
|
|
||||||
# Nginx config example
|
|
||||||
|
|
||||||
```nginx
|
|
||||||
# For WebSocket
|
|
||||||
map $http_upgrade $connection_upgrade {
|
|
||||||
default upgrade;
|
|
||||||
'' close;
|
|
||||||
}
|
|
||||||
|
|
||||||
proxy_cache_path /tmp/nginx_cache levels=1:2 keys_zone=cache1:16m max_size=1g inactive=720m use_temp_path=off;
|
|
||||||
|
|
||||||
server {
|
|
||||||
listen 80;
|
|
||||||
listen [::]:80;
|
|
||||||
server_name example.tld;
|
|
||||||
|
|
||||||
# For SSL domain validation
|
|
||||||
root /var/www/html;
|
|
||||||
location /.well-known/acme-challenge/ { allow all; }
|
|
||||||
location /.well-known/pki-validation/ { allow all; }
|
|
||||||
location / { return 301 https://$server_name$request_uri; }
|
|
||||||
}
|
|
||||||
|
|
||||||
server {
|
|
||||||
listen 443 ssl http2;
|
|
||||||
listen [::]:443 ssl http2;
|
|
||||||
server_name example.tld;
|
|
||||||
|
|
||||||
ssl_session_timeout 1d;
|
|
||||||
ssl_session_cache shared:ssl_session_cache:10m;
|
|
||||||
ssl_session_tickets off;
|
|
||||||
|
|
||||||
# To use Let's Encrypt certificate
|
|
||||||
ssl_certificate /etc/letsencrypt/live/example.tld/fullchain.pem;
|
|
||||||
ssl_certificate_key /etc/letsencrypt/live/example.tld/privkey.pem;
|
|
||||||
|
|
||||||
# To use Debian/Ubuntu's self-signed certificate (For testing or before issuing a certificate)
|
|
||||||
#ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
|
|
||||||
#ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
|
|
||||||
|
|
||||||
# SSL protocol settings
|
|
||||||
ssl_protocols TLSv1.2 TLSv1.3;
|
|
||||||
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
|
|
||||||
ssl_prefer_server_ciphers off;
|
|
||||||
ssl_stapling on;
|
|
||||||
ssl_stapling_verify on;
|
|
||||||
|
|
||||||
# Change to your upload limit
|
|
||||||
client_max_body_size 80m;
|
|
||||||
|
|
||||||
# Proxy to Node
|
|
||||||
location / {
|
|
||||||
proxy_pass http://127.0.0.1:3000;
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_redirect off;
|
|
||||||
|
|
||||||
# If it's behind another reverse proxy or CDN, remove the following.
|
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
||||||
proxy_set_header X-Forwarded-Proto https;
|
|
||||||
|
|
||||||
# For WebSocket
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection $connection_upgrade;
|
|
||||||
|
|
||||||
# Cache settings
|
|
||||||
proxy_cache cache1;
|
|
||||||
proxy_cache_lock on;
|
|
||||||
proxy_cache_use_stale updating;
|
|
||||||
add_header X-Cache $upstream_cache_status;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
|
@ -1,42 +0,0 @@
|
||||||
# 3rd party access
|
|
||||||
Foundkey supports:
|
|
||||||
- OAuth 2.0 Authorization Code grant per [RFC 6749](https://www.rfc-editor.org/rfc/rfc6749).
|
|
||||||
- OAuth Bearer Token Usage per [RFC 6750](https://www.rfc-editor.org/rfc/rfc6750).
|
|
||||||
- Proof Key for Code Exchange (PKCE) per [RFC 7636](https://www.rfc-editor.org/rfc/rfc7636).
|
|
||||||
- OAuth 2.0 Authorization Server Metadata per [RFC 8414](https://www.rfc-editor.org/rfc/rfc8414.html).
|
|
||||||
|
|
||||||
# Discovery
|
|
||||||
Because the implementation may change in the future, it is recommended that you use OAuth 2.0 Authorization Server Metadata a.k.a. OpenID Connect Discovery.
|
|
||||||
In short, this means that to discover the URLs for the grant endpoints you should request `/.well-known/oauth-authorization-server`, which is a JSON object.
|
|
||||||
From there, `authorization_endpoint` and `token_endpoint` will probably be most interesting to you.
|
|
||||||
The definitions of all data fields are to be found in [RFC 8414, section 2](https://www.rfc-editor.org/rfc/rfc8414#section-2).
|
|
||||||
|
|
||||||
# App registration
|
|
||||||
Before using the OAuth grant you need to register your application.
|
|
||||||
Currently you will need to use the pre-existing Misskey API to register, though Dynamic Client Registration may be implemented at a later point.
|
|
||||||
(You'd be able to tell from the Authorization Server Metadata, see above.)
|
|
||||||
|
|
||||||
The data you will need to know before registering is the following:
|
|
||||||
- a name for your app,
|
|
||||||
- a short description to be shown to users,
|
|
||||||
- which API permissions you need, and
|
|
||||||
- the callback URL you want to use.
|
|
||||||
|
|
||||||
There can only be 1 callback URL per registration.
|
|
||||||
|
|
||||||
Note that you can specify permissions a 2nd time in the OAuth flow.
|
|
||||||
If you do not provide permissions again in the grant flow, the default is to use all permissions you gave when registering the app.
|
|
||||||
If you do provide permissions in the grant flow, permissions that were not registered will never be granted.
|
|
||||||
A list of available permissions can be viewed on any Foundkey instance by going to the API documentation at `/api-doc`.
|
|
||||||
|
|
||||||
To register your app you need to `POST` to `/api/app/create`.
|
|
||||||
The body of the request must be a JSON object with the following keys:
|
|
||||||
- `name` (string): a name for your app,
|
|
||||||
- `description` (string): a short description to be shown to users,
|
|
||||||
- `permission` (array of permission names) which API permissions you need, and
|
|
||||||
- `callbackUrl` (string): the callback URL you want to use.
|
|
||||||
|
|
||||||
If successful (HTTP response code 200) you will receive back a JSON object containing among other things:
|
|
||||||
- `id` (string): the client ID
|
|
||||||
- `secret` (string): the client secret
|
|
||||||
With these credentials you should be able to use the Authorization Code grant to obtain authorization.
|
|
|
@ -16,11 +16,11 @@ gulp.task('copy:backend:views', () =>
|
||||||
);
|
);
|
||||||
|
|
||||||
gulp.task('copy:client:fonts', () =>
|
gulp.task('copy:client:fonts', () =>
|
||||||
gulp.src('./node_modules/three/examples/fonts/**/*').pipe(gulp.dest('./built/_client_dist_/fonts/'))
|
gulp.src('./packages/client/node_modules/three/examples/fonts/**/*').pipe(gulp.dest('./built/_client_dist_/fonts/'))
|
||||||
);
|
);
|
||||||
|
|
||||||
gulp.task('copy:client:fontawesome', () =>
|
gulp.task('copy:client:fontawesome', () =>
|
||||||
gulp.src('./node_modules/@fortawesome/fontawesome-free/**/*').pipe(gulp.dest('./built/_client_dist_/fontawesome/'))
|
gulp.src('./packages/client/node_modules/@fortawesome/fontawesome-free/**/*').pipe(gulp.dest('./built/_client_dist_/fontawesome/'))
|
||||||
);
|
);
|
||||||
|
|
||||||
gulp.task('copy:client:locales', cb => {
|
gulp.task('copy:client:locales', cb => {
|
||||||
|
@ -36,7 +36,7 @@ gulp.task('copy:client:locales', cb => {
|
||||||
});
|
});
|
||||||
|
|
||||||
gulp.task('build:backend:script', () => {
|
gulp.task('build:backend:script', () => {
|
||||||
return gulp.src(['./packages/backend/src/server/web/boot.js'])
|
return gulp.src(['./packages/backend/src/server/web/boot.js', './packages/backend/src/server/web/bios.js', './packages/backend/src/server/web/cli.js'])
|
||||||
.pipe(replace('LANGS', JSON.stringify(Object.keys(locales))))
|
.pipe(replace('LANGS', JSON.stringify(Object.keys(locales))))
|
||||||
.pipe(terser({
|
.pipe(terser({
|
||||||
toplevel: true
|
toplevel: true
|
||||||
|
@ -45,7 +45,7 @@ gulp.task('build:backend:script', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
gulp.task('build:backend:style', () => {
|
gulp.task('build:backend:style', () => {
|
||||||
return gulp.src(['./packages/backend/src/server/web/style.css'])
|
return gulp.src(['./packages/backend/src/server/web/style.css', './packages/backend/src/server/web/bios.css', './packages/backend/src/server/web/cli.css'])
|
||||||
.pipe(cssnano({
|
.pipe(cssnano({
|
||||||
zindex: false
|
zindex: false
|
||||||
}))
|
}))
|
||||||
|
|
6
locales/README.md
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# **DO NOT edit locale files** except `ja-JP.yml`.
|
||||||
|
|
||||||
|
When you add text to the ja-JP file (of misskey-dev/misskey), it will automatically be applied to other language files.
|
||||||
|
Translations added in ja-JP file should contain the original Japanese strings.
|
||||||
|
|
||||||
|
Please see [Contribution guide](../CONTRIBUTING.md) for more information.
|
|
@ -1,9 +1,7 @@
|
||||||
|
---
|
||||||
_lang_: "Català"
|
_lang_: "Català"
|
||||||
headlineMisskey: "Una xarxa connectada per notes"
|
headlineMisskey: "Una xarxa connectada per notes"
|
||||||
introMisskey: "Benvingut! FoundKey és un servei de microblogging descentralitzat de\
|
introMisskey: "Benvingut! Misskey és un servei de microblogging descentralitzat de codi obert.\nCrea \"notes\" per compartir els teus pensaments amb tots els que t'envolten. 📡\nAmb \"reaccions\", també pots expressar ràpidament els teus sentiments sobre les notes de tothom. 👍\nExplorem un món nou! 🚀"
|
||||||
\ codi obert.\nCrea \"notes\" per compartir els teus pensaments amb tots els que\
|
|
||||||
\ t'envolten. \U0001F4E1\nAmb \"reaccions\", també pots expressar ràpidament els\
|
|
||||||
\ teus sentiments sobre les notes de tothom. \U0001F44D\nExplorem un món nou! \U0001F680"
|
|
||||||
monthAndDay: "{day}/{month}"
|
monthAndDay: "{day}/{month}"
|
||||||
search: "Cercar"
|
search: "Cercar"
|
||||||
notifications: "Notificacions"
|
notifications: "Notificacions"
|
||||||
|
@ -14,7 +12,8 @@ fetchingAsApObject: "Cercant en el Fediverse..."
|
||||||
ok: "OK"
|
ok: "OK"
|
||||||
gotIt: "Ho he entès!"
|
gotIt: "Ho he entès!"
|
||||||
cancel: "Cancel·lar"
|
cancel: "Cancel·lar"
|
||||||
renotedBy: "Resignat per {user}"
|
enterUsername: "Introdueix el teu nom d'usuari"
|
||||||
|
renotedBy: "Resignat per {usuari}"
|
||||||
noNotes: "Cap nota"
|
noNotes: "Cap nota"
|
||||||
noNotifications: "Cap notificació"
|
noNotifications: "Cap notificació"
|
||||||
instance: "Instàncies"
|
instance: "Instàncies"
|
||||||
|
@ -29,20 +28,27 @@ login: "Iniciar sessió"
|
||||||
loggingIn: "Identificant-se"
|
loggingIn: "Identificant-se"
|
||||||
logout: "Tancar la sessió"
|
logout: "Tancar la sessió"
|
||||||
signup: "Registrar-se"
|
signup: "Registrar-se"
|
||||||
|
uploading: "Pujant..."
|
||||||
save: "Desar"
|
save: "Desar"
|
||||||
users: "Usuaris"
|
users: "Usuaris"
|
||||||
addUser: "Afegir un usuari"
|
addUser: "Afegir un usuari"
|
||||||
|
favorite: "Afegir a preferits"
|
||||||
|
favorites: "Favorits"
|
||||||
|
unfavorite: "Eliminar dels preferits"
|
||||||
|
favorited: "Afegit als preferits."
|
||||||
|
alreadyFavorited: "Ja s'ha afegit als preferits."
|
||||||
|
cantFavorite: "No s'ha pogut afegir als preferits."
|
||||||
pin: "Fixar al perfil"
|
pin: "Fixar al perfil"
|
||||||
unpin: "Para de fixar del perfil"
|
unpin: "Para de fixar del perfil"
|
||||||
copyContent: "Copiar el contingut"
|
copyContent: "Copiar el contingut"
|
||||||
copyLink: "Copiar l'enllaç"
|
copyLink: "Copiar l'enllaç"
|
||||||
delete: "Eliminar"
|
delete: "Eliminar"
|
||||||
deleteAndEdit: "Esborrar i editar"
|
deleteAndEdit: "Esborrar i editar"
|
||||||
deleteAndEditConfirm: "Estàs segur que vols suprimir aquesta nota i editar-la? Perdràs\
|
deleteAndEditConfirm: "Estàs segur que vols suprimir aquesta nota i editar-la? Perdràs totes les reaccions, notes i respostes."
|
||||||
\ totes les reaccions, notes i respostes."
|
|
||||||
addToList: "Afegir a una llista"
|
addToList: "Afegir a una llista"
|
||||||
sendMessage: "Enviar un missatge"
|
sendMessage: "Enviar un missatge"
|
||||||
copyUsername: "Copiar nom d'usuari"
|
copyUsername: "Copiar nom d'usuari"
|
||||||
|
searchUser: "Cercar usuaris"
|
||||||
reply: "Respondre"
|
reply: "Respondre"
|
||||||
loadMore: "Carregar més"
|
loadMore: "Carregar més"
|
||||||
showMore: "Veure més"
|
showMore: "Veure més"
|
||||||
|
@ -57,13 +63,12 @@ import: "Importar"
|
||||||
export: "Exportar"
|
export: "Exportar"
|
||||||
files: "Fitxers"
|
files: "Fitxers"
|
||||||
download: "Baixar"
|
download: "Baixar"
|
||||||
driveFileDeleteConfirm: "Estàs segur que vols suprimir el fitxer \"{name}\"? Les notes\
|
driveFileDeleteConfirm: "Estàs segur que vols suprimir el fitxer \"{name}\"? Les notes associades a aquest fitxer adjunt també se suprimiran."
|
||||||
\ associades a aquest fitxer adjunt també se suprimiran."
|
|
||||||
unfollowConfirm: "Estàs segur que vols deixar de seguir {name}?"
|
unfollowConfirm: "Estàs segur que vols deixar de seguir {name}?"
|
||||||
exportRequested: "Has sol·licitat una exportació. Això pot trigar una estona. S'afegirà\
|
exportRequested: "Has sol·licitat una exportació. Això pot trigar una estona. S'afegirà a la teva unitat un cop completat."
|
||||||
\ a la teva unitat un cop completat."
|
|
||||||
importRequested: "Has sol·licitat una importació. Això pot trigar una estona."
|
importRequested: "Has sol·licitat una importació. Això pot trigar una estona."
|
||||||
lists: "Llistes"
|
lists: "Llistes"
|
||||||
|
noLists: "No tens cap llista"
|
||||||
note: "Nota"
|
note: "Nota"
|
||||||
notes: "Notes"
|
notes: "Notes"
|
||||||
following: "Seguint"
|
following: "Seguint"
|
||||||
|
@ -75,12 +80,9 @@ error: "Error"
|
||||||
somethingHappened: "S'ha produït un error"
|
somethingHappened: "S'ha produït un error"
|
||||||
retry: "Torna-ho a intentar"
|
retry: "Torna-ho a intentar"
|
||||||
pageLoadError: "S'ha produït un error en carregar la pàgina"
|
pageLoadError: "S'ha produït un error en carregar la pàgina"
|
||||||
pageLoadErrorDescription: "Això normalment es deu a errors de xarxa o a la memòria\
|
pageLoadErrorDescription: "Això normalment es deu a errors de xarxa o a la memòria cau del navegador. Prova d'esborrar la memòria cau i torna-ho a provar després d'esperar una estona."
|
||||||
\ cau del navegador. Prova d'esborrar la memòria cau i torna-ho a provar després\
|
|
||||||
\ d'esperar una estona."
|
|
||||||
serverIsDead: "Aquest servidor no respon. Espera una estona i torna-ho a provar."
|
serverIsDead: "Aquest servidor no respon. Espera una estona i torna-ho a provar."
|
||||||
youShouldUpgradeClient: "Per veure aquesta pàgina, actualitzeu-la per actualitzar\
|
youShouldUpgradeClient: "Per veure aquesta pàgina, actualitzeu-la per actualitzar el vostre client."
|
||||||
\ el vostre client."
|
|
||||||
enterListName: "Introdueix un nom per a la llista"
|
enterListName: "Introdueix un nom per a la llista"
|
||||||
privacy: "Privadesa"
|
privacy: "Privadesa"
|
||||||
makeFollowManuallyApprove: "Les sol·licituds de seguiment requereixen aprovació"
|
makeFollowManuallyApprove: "Les sol·licituds de seguiment requereixen aprovació"
|
||||||
|
@ -90,25 +92,35 @@ followRequest: "Enviar la sol·licitud de seguiment"
|
||||||
followRequests: "Sol·licituds de seguiment"
|
followRequests: "Sol·licituds de seguiment"
|
||||||
unfollow: "Deixar de seguir"
|
unfollow: "Deixar de seguir"
|
||||||
followRequestPending: "Sol·licituds de seguiment pendents"
|
followRequestPending: "Sol·licituds de seguiment pendents"
|
||||||
|
enterEmoji: "Introduir un emoji"
|
||||||
renote: "Renotar"
|
renote: "Renotar"
|
||||||
unrenote: "Anul·lar renota"
|
unrenote: "Anul·lar renota"
|
||||||
|
renoted: "Renotat."
|
||||||
|
cantRenote: "Aquesta publicació no pot ser renotada."
|
||||||
|
cantReRenote: "Impossible renotar una renota."
|
||||||
quote: "Citar"
|
quote: "Citar"
|
||||||
pinnedNote: "Nota fixada"
|
pinnedNote: "Nota fixada"
|
||||||
|
pinned: "Fixar al perfil"
|
||||||
you: "Tu"
|
you: "Tu"
|
||||||
clickToShow: "Fes clic per mostrar"
|
clickToShow: "Fes clic per mostrar"
|
||||||
sensitive: "NSFW"
|
sensitive: "NSFW"
|
||||||
add: "Afegir"
|
add: "Afegir"
|
||||||
reaction: "Reaccions"
|
reaction: "Reaccions"
|
||||||
reactionSettingDescription2: "Arrossega per reordenar, fes clic per suprimir, prem\
|
reactionSetting: "Reaccions a mostrar al selector de reaccions"
|
||||||
\ \"+\" per afegir."
|
reactionSettingDescription2: "Arrossega per reordenar, fes clic per suprimir, prem \"+\" per afegir."
|
||||||
|
rememberNoteVisibility: "Recorda la configuració de visibilitat de les notes"
|
||||||
attachCancel: "Eliminar el fitxer adjunt"
|
attachCancel: "Eliminar el fitxer adjunt"
|
||||||
markAsSensitive: "Marcar com a NSFW"
|
markAsSensitive: "Marcar com a NSFW"
|
||||||
|
instances: "Instàncies"
|
||||||
remove: "Eliminar"
|
remove: "Eliminar"
|
||||||
nsfw: "NSFW"
|
nsfw: "NSFW"
|
||||||
|
pinnedNotes: "Nota fixada"
|
||||||
userList: "Llistes"
|
userList: "Llistes"
|
||||||
smtpUser: "Nom d'usuari"
|
smtpUser: "Nom d'usuari"
|
||||||
smtpPass: "Contrasenya"
|
smtpPass: "Contrasenya"
|
||||||
user: "Usuaris"
|
user: "Usuaris"
|
||||||
|
searchByGoogle: "Cercar"
|
||||||
|
file: "Fitxers"
|
||||||
_email:
|
_email:
|
||||||
_follow:
|
_follow:
|
||||||
title: "t'ha seguit"
|
title: "t'ha seguit"
|
||||||
|
@ -116,7 +128,10 @@ _mfm:
|
||||||
mention: "Menció"
|
mention: "Menció"
|
||||||
quote: "Citar"
|
quote: "Citar"
|
||||||
search: "Cercar"
|
search: "Cercar"
|
||||||
_theme: {}
|
_theme:
|
||||||
|
keys:
|
||||||
|
mention: "Menció"
|
||||||
|
renote: "Renotar"
|
||||||
_sfx:
|
_sfx:
|
||||||
note: "Notes"
|
note: "Notes"
|
||||||
notification: "Notificacions"
|
notification: "Notificacions"
|
||||||
|
@ -134,6 +149,25 @@ _profile:
|
||||||
_exportOrImport:
|
_exportOrImport:
|
||||||
followingList: "Seguint"
|
followingList: "Seguint"
|
||||||
userLists: "Llistes"
|
userLists: "Llistes"
|
||||||
|
_pages:
|
||||||
|
script:
|
||||||
|
categories:
|
||||||
|
list: "Llistes"
|
||||||
|
blocks:
|
||||||
|
_join:
|
||||||
|
arg1: "Llistes"
|
||||||
|
_randomPick:
|
||||||
|
arg1: "Llistes"
|
||||||
|
_dailyRandomPick:
|
||||||
|
arg1: "Llistes"
|
||||||
|
_seedRandomPick:
|
||||||
|
arg2: "Llistes"
|
||||||
|
_pick:
|
||||||
|
arg1: "Llistes"
|
||||||
|
_listLen:
|
||||||
|
arg1: "Llistes"
|
||||||
|
types:
|
||||||
|
array: "Llistes"
|
||||||
_notification:
|
_notification:
|
||||||
youWereFollowed: "t'ha seguit"
|
youWereFollowed: "t'ha seguit"
|
||||||
_types:
|
_types:
|
||||||
|
@ -151,5 +185,3 @@ _deck:
|
||||||
tl: "Línia de temps"
|
tl: "Línia de temps"
|
||||||
list: "Llistes"
|
list: "Llistes"
|
||||||
mentions: "Mencions"
|
mentions: "Mencions"
|
||||||
_services: {}
|
|
||||||
_postForm: {}
|
|
||||||
|
|
|
@ -1,9 +1,7 @@
|
||||||
|
---
|
||||||
_lang_: "Čeština"
|
_lang_: "Čeština"
|
||||||
headlineMisskey: "Síť propojená poznámkami"
|
headlineMisskey: "Síť propojená poznámkami"
|
||||||
introMisskey: "Vítejte! FoundKey je otevřený a decentralizovaný microblogový servis.\n\
|
introMisskey: "Vítejte! Misskey je otevřený a decentralizovaný microblogový servis.\n\"Poznámkami\" můžete sdílet co se zrovna děje se všemi ve Vašem okolí. 📡\nPomocí \"reakcí\" můžete sdílet své názory a pocity na ostatní poznámky. 👍\nPojďte objevovat nový svět! 🚀"
|
||||||
\"Poznámkami\" můžete sdílet co se zrovna děje se všemi ve Vašem okolí. \U0001F4E1\
|
|
||||||
\nPomocí \"reakcí\" můžete sdílet své názory a pocity na ostatní poznámky. \U0001F44D\
|
|
||||||
\nPojďte objevovat nový svět! \U0001F680"
|
|
||||||
monthAndDay: "{day}. {month}."
|
monthAndDay: "{day}. {month}."
|
||||||
search: "Vyhledávání"
|
search: "Vyhledávání"
|
||||||
notifications: "Oznámení"
|
notifications: "Oznámení"
|
||||||
|
@ -14,6 +12,7 @@ fetchingAsApObject: "Načítám data z Fediversu..."
|
||||||
ok: "Potvrdit"
|
ok: "Potvrdit"
|
||||||
gotIt: "Rozumím!"
|
gotIt: "Rozumím!"
|
||||||
cancel: "Zrušit"
|
cancel: "Zrušit"
|
||||||
|
enterUsername: "Zadej uživatelské jméno"
|
||||||
renotedBy: "{user} přeposla/a"
|
renotedBy: "{user} přeposla/a"
|
||||||
noNotes: "Žádné poznámky"
|
noNotes: "Žádné poznámky"
|
||||||
noNotifications: "Žádná oznámení"
|
noNotifications: "Žádná oznámení"
|
||||||
|
@ -29,20 +28,27 @@ login: "Přihlásit se"
|
||||||
loggingIn: "Probíhá přihlašování"
|
loggingIn: "Probíhá přihlašování"
|
||||||
logout: "Odhlásit"
|
logout: "Odhlásit"
|
||||||
signup: "Registrace"
|
signup: "Registrace"
|
||||||
|
uploading: "Nahrávám"
|
||||||
save: "Uložit"
|
save: "Uložit"
|
||||||
users: "Uživatelé"
|
users: "Uživatelé"
|
||||||
addUser: "Přidat uživatele"
|
addUser: "Přidat uživatele"
|
||||||
|
favorite: "Oblíbené"
|
||||||
|
favorites: "Oblíbené"
|
||||||
|
unfavorite: "Odebrat z oblízených"
|
||||||
|
favorited: "Přidáno do oblíbených"
|
||||||
|
alreadyFavorited: "Už je mezi oblíbenými"
|
||||||
|
cantFavorite: "Nepodařilo se přidat mezi oblíbené."
|
||||||
pin: "Připnout"
|
pin: "Připnout"
|
||||||
unpin: "Odepnout"
|
unpin: "Odepnout"
|
||||||
copyContent: "Zkopírovat obsah"
|
copyContent: "Zkopírovat obsah"
|
||||||
copyLink: "Kopírovat odkaz"
|
copyLink: "Kopírovat odkaz"
|
||||||
delete: "Smazat"
|
delete: "Smazat"
|
||||||
deleteAndEdit: "Smazat a upravit"
|
deleteAndEdit: "Smazat a upravit"
|
||||||
deleteAndEditConfirm: "Jste si jistí že chcete smazat tuto poznámku a editovat ji?\
|
deleteAndEditConfirm: "Jste si jistí že chcete smazat tuto poznámku a editovat ji? Ztratíte tím všechny reakce, sdílení a odpovědi na ni."
|
||||||
\ Ztratíte tím všechny reakce, sdílení a odpovědi na ni."
|
|
||||||
addToList: "Přidat do seznamu"
|
addToList: "Přidat do seznamu"
|
||||||
sendMessage: "Odeslat zprávu"
|
sendMessage: "Odeslat zprávu"
|
||||||
copyUsername: "Kopírovat uživatelské jméno"
|
copyUsername: "Kopírovat uživatelské jméno"
|
||||||
|
searchUser: "Vyhledat uživatele"
|
||||||
reply: "Odpovědět"
|
reply: "Odpovědět"
|
||||||
loadMore: "Zobrazit více"
|
loadMore: "Zobrazit více"
|
||||||
showMore: "Zobrazit více"
|
showMore: "Zobrazit více"
|
||||||
|
@ -56,13 +62,12 @@ import: "Importovat"
|
||||||
export: "Exportovat"
|
export: "Exportovat"
|
||||||
files: "Soubor(ů)"
|
files: "Soubor(ů)"
|
||||||
download: "Stáhnout"
|
download: "Stáhnout"
|
||||||
driveFileDeleteConfirm: "Opravdu chcete smazat soubor \"{name}\"? Poznámky, ke kterým\
|
driveFileDeleteConfirm: "Opravdu chcete smazat soubor \"{name}\"? Poznámky, ke kterým je tento soubor připojen, budou také smazány."
|
||||||
\ je tento soubor připojen, budou také smazány."
|
|
||||||
unfollowConfirm: "Jste si jisti že už nechcete sledovat {name}?"
|
unfollowConfirm: "Jste si jisti že už nechcete sledovat {name}?"
|
||||||
exportRequested: "Požádali jste o export. To může chvíli trvat. Přidáme ho na váš\
|
exportRequested: "Požádali jste o export. To může chvíli trvat. Přidáme ho na váš Disk až bude dokončen."
|
||||||
\ Disk až bude dokončen."
|
|
||||||
importRequested: "Požádali jste o export. To může chvilku trvat."
|
importRequested: "Požádali jste o export. To může chvilku trvat."
|
||||||
lists: "Seznamy"
|
lists: "Seznamy"
|
||||||
|
noLists: "Nemáte žádné seznamy"
|
||||||
note: "Poznámka"
|
note: "Poznámka"
|
||||||
notes: "Poznámky"
|
notes: "Poznámky"
|
||||||
following: "Sledovaní"
|
following: "Sledovaní"
|
||||||
|
@ -75,8 +80,7 @@ somethingHappened: "Jejda. Něco se nepovedlo."
|
||||||
retry: "Opakovat"
|
retry: "Opakovat"
|
||||||
pageLoadError: "Nepodařilo se načíst stránku"
|
pageLoadError: "Nepodařilo se načíst stránku"
|
||||||
serverIsDead: "Server neodpovídá. Počkejte chvíli a zkuste to znovu."
|
serverIsDead: "Server neodpovídá. Počkejte chvíli a zkuste to znovu."
|
||||||
youShouldUpgradeClient: "Pro zobrazení této stránky obnovte stránku pro aktualizaci\
|
youShouldUpgradeClient: "Pro zobrazení této stránky obnovte stránku pro aktualizaci klienta."
|
||||||
\ klienta."
|
|
||||||
enterListName: "Jméno seznamu"
|
enterListName: "Jméno seznamu"
|
||||||
privacy: "Soukromí"
|
privacy: "Soukromí"
|
||||||
makeFollowManuallyApprove: "Žádosti o sledování vyžadují potvrzení"
|
makeFollowManuallyApprove: "Žádosti o sledování vyžadují potvrzení"
|
||||||
|
@ -86,17 +90,22 @@ followRequest: "Odeslat žádost o sledování"
|
||||||
followRequests: "Žádosti o sledování"
|
followRequests: "Žádosti o sledování"
|
||||||
unfollow: "Přestat sledovat"
|
unfollow: "Přestat sledovat"
|
||||||
followRequestPending: "Čekající žádosti o sledování"
|
followRequestPending: "Čekající žádosti o sledování"
|
||||||
|
enterEmoji: "Vložte emoji"
|
||||||
renote: "Přeposlat"
|
renote: "Přeposlat"
|
||||||
unrenote: "Zrušit přeposlání"
|
unrenote: "Zrušit přeposlání"
|
||||||
|
renoted: "Přeposláno"
|
||||||
|
cantRenote: "Tento příspěvek nelze přeposlat."
|
||||||
|
cantReRenote: "Odpověď nemůže být odstraněna."
|
||||||
quote: "Citovat"
|
quote: "Citovat"
|
||||||
pinnedNote: "Připnutá poznámka"
|
pinnedNote: "Připnutá poznámka"
|
||||||
|
pinned: "Připnout"
|
||||||
you: "Vy"
|
you: "Vy"
|
||||||
clickToShow: "Klikněte pro zobrazení"
|
clickToShow: "Klikněte pro zobrazení"
|
||||||
sensitive: "NSFW"
|
sensitive: "NSFW"
|
||||||
add: "Přidat"
|
add: "Přidat"
|
||||||
reaction: "Reakce"
|
reaction: "Reakce"
|
||||||
reactionSettingDescription2: "Přetažením změníte pořadí, kliknutím smažete, zmáčkněte\
|
reactionSettingDescription2: "Přetažením změníte pořadí, kliknutím smažete, zmáčkněte \"+\" k přidání"
|
||||||
\ \"+\" k přidání"
|
rememberNoteVisibility: "Zapamatovat nastavení zobrazení poznámky"
|
||||||
attachCancel: "Odstranit přílohu"
|
attachCancel: "Odstranit přílohu"
|
||||||
markAsSensitive: "Označit jako NSFW"
|
markAsSensitive: "Označit jako NSFW"
|
||||||
unmarkAsSensitive: "Odznačit jako NSFW"
|
unmarkAsSensitive: "Odznačit jako NSFW"
|
||||||
|
@ -119,52 +128,57 @@ editWidgetsExit: "Hotovo"
|
||||||
customEmojis: "Vlastní emoji"
|
customEmojis: "Vlastní emoji"
|
||||||
emoji: "Emoji"
|
emoji: "Emoji"
|
||||||
emojis: "Emoji"
|
emojis: "Emoji"
|
||||||
|
emojiName: "Jméno emoji"
|
||||||
|
emojiUrl: "URL obrázku"
|
||||||
addEmoji: "Přidat emoji"
|
addEmoji: "Přidat emoji"
|
||||||
|
settingGuide: "Doporučené nastavení"
|
||||||
cacheRemoteFiles: "Ukládání vzdálených souborů do mezipaměti"
|
cacheRemoteFiles: "Ukládání vzdálených souborů do mezipaměti"
|
||||||
cacheRemoteFilesDescription: "Zakázání tohoto nastavení způsobí, že vzdálené soubory\
|
cacheRemoteFilesDescription: "Zakázání tohoto nastavení způsobí, že vzdálené soubory budou odkazovány přímo, místo aby byly ukládány do mezipaměti. Tím se ušetří úložiště na serveru, ale zvýší se provoz, protože se negenerují miniatury."
|
||||||
\ budou odkazovány přímo, místo aby byly ukládány do mezipaměti. Tím se ušetří úložiště\
|
|
||||||
\ na serveru, ale zvýší se provoz, protože se negenerují miniatury."
|
|
||||||
flagAsBot: "Tento účet je bot"
|
flagAsBot: "Tento účet je bot"
|
||||||
flagAsBotDescription: "Pokud je tento účet kontrolován programem zaškrtněte tuto možnost.\
|
flagAsBotDescription: "Pokud je tento účet kontrolován programem zaškrtněte tuto možnost. To označí tento účet jako bot pro ostatní vývojáře a zabrání tak nekonečným interakcím s ostatními boty a upraví Misskey systém aby se choval k tomuhle účtu jako bot."
|
||||||
\ To označí tento účet jako bot pro ostatní vývojáře a zabrání tak nekonečným interakcím\
|
|
||||||
\ s ostatními boty a upraví FoundKey systém aby se choval k tomuhle účtu jako bot."
|
|
||||||
flagAsCat: "Tenhle účet je kočka"
|
flagAsCat: "Tenhle účet je kočka"
|
||||||
flagAsCatDescription: "Vyberte tuto možnost aby tento účet byl označen jako kočka."
|
flagAsCatDescription: "Vyberte tuto možnost aby tento účet byl označen jako kočka."
|
||||||
flagShowTimelineReplies: "Zobrazovat odpovědi na časové ose"
|
flagShowTimelineReplies: "Zobrazovat odpovědi na časové ose"
|
||||||
flagShowTimelineRepliesDescription: "Je-li zapnuto, zobrazí odpovědi uživatelů na\
|
flagShowTimelineRepliesDescription: "Je-li zapnuto, zobrazí odpovědi uživatelů na poznámky jiných uživatelů na vaší časové ose."
|
||||||
\ poznámky jiných uživatelů na vaší časové ose."
|
|
||||||
autoAcceptFollowed: "Automaticky akceptovat následování od účtů které sledujete"
|
autoAcceptFollowed: "Automaticky akceptovat následování od účtů které sledujete"
|
||||||
addAccount: "Přidat účet"
|
addAccount: "Přidat účet"
|
||||||
loginFailed: "Přihlášení se nezdařilo."
|
loginFailed: "Přihlášení se nezdařilo."
|
||||||
showOnRemote: "Více na původním profilu"
|
showOnRemote: "Více na původním profilu"
|
||||||
general: "Obecně"
|
general: "Obecně"
|
||||||
|
wallpaper: "Obrázek na pozadí"
|
||||||
setWallpaper: "Nastavení obrázku na pozadí"
|
setWallpaper: "Nastavení obrázku na pozadí"
|
||||||
removeWallpaper: "Odstranit pozadí"
|
removeWallpaper: "Odstranit pozadí"
|
||||||
|
searchWith: "Hledat: {q}"
|
||||||
youHaveNoLists: "Nemáte žádné seznamy"
|
youHaveNoLists: "Nemáte žádné seznamy"
|
||||||
followConfirm: "Jste si jisti, že chcete sledovat {name}?"
|
followConfirm: "Jste si jisti, že chcete sledovat {name}?"
|
||||||
proxyAccount: "Proxy účet"
|
proxyAccount: "Proxy účet"
|
||||||
proxyAccountDescription: "Proxy účet je účet, který za určitých podmínek sleduje uživatele\
|
proxyAccountDescription: "Proxy účet je účet, který za určitých podmínek sleduje uživatele na dálku vaším jménem. Například když uživatel zařadí vzdáleného uživatele do seznamu, pokud nikdo nesleduje uživatele na seznamu, aktivita nebude doručena instanci, takže místo toho bude uživatele sledovat účet proxy."
|
||||||
\ na dálku vaším jménem. Například když uživatel zařadí vzdáleného uživatele do\
|
|
||||||
\ seznamu, pokud nikdo nesleduje uživatele na seznamu, aktivita nebude doručena\
|
|
||||||
\ instanci, takže místo toho bude uživatele sledovat účet proxy."
|
|
||||||
host: "Hostitel"
|
host: "Hostitel"
|
||||||
selectUser: "Vyberte uživatele"
|
selectUser: "Vyberte uživatele"
|
||||||
recipient: "Pro"
|
recipient: "Pro"
|
||||||
annotation: "Komentáře"
|
annotation: "Komentáře"
|
||||||
federation: "Federace"
|
federation: "Federace"
|
||||||
|
instances: "Instance"
|
||||||
registeredAt: "Registrován"
|
registeredAt: "Registrován"
|
||||||
latestRequestSentAt: "Poslední požadavek poslán"
|
latestRequestSentAt: "Poslední požadavek poslán"
|
||||||
latestRequestReceivedAt: "Poslední požadavek přijat"
|
latestRequestReceivedAt: "Poslední požadavek přijat"
|
||||||
latestStatus: "Poslední status"
|
latestStatus: "Poslední status"
|
||||||
|
storageUsage: "Využití úložiště"
|
||||||
charts: "Grafy"
|
charts: "Grafy"
|
||||||
perHour: "za hodinu"
|
perHour: "za hodinu"
|
||||||
perDay: "za den"
|
perDay: "za den"
|
||||||
stopActivityDelivery: "Přestat zasílat aktivitu"
|
stopActivityDelivery: "Přestat zasílat aktivitu"
|
||||||
blockThisInstance: "Blokovat tuto instanci"
|
blockThisInstance: "Blokovat tuto instanci"
|
||||||
|
operations: "Operace"
|
||||||
software: "Software"
|
software: "Software"
|
||||||
version: "Verze"
|
version: "Verze"
|
||||||
|
metadata: "Metadata"
|
||||||
withNFiles: "{n} soubor(ů)"
|
withNFiles: "{n} soubor(ů)"
|
||||||
|
monitor: "Monitorovat"
|
||||||
jobQueue: "Fronta úloh"
|
jobQueue: "Fronta úloh"
|
||||||
|
cpuAndMemory: "CPU a paměť"
|
||||||
|
network: "Síť"
|
||||||
|
disk: "Disk"
|
||||||
instanceInfo: "Informace o instanci"
|
instanceInfo: "Informace o instanci"
|
||||||
statistics: "Statistiky"
|
statistics: "Statistiky"
|
||||||
clearQueue: "Vyčistit frontu"
|
clearQueue: "Vyčistit frontu"
|
||||||
|
@ -174,7 +188,7 @@ blockedInstances: "Blokované instance"
|
||||||
noUsers: "Žádní uživatelé"
|
noUsers: "Žádní uživatelé"
|
||||||
editProfile: "Upravit můj profil"
|
editProfile: "Upravit můj profil"
|
||||||
pinLimitExceeded: "Nemůžete připnout další poznámky."
|
pinLimitExceeded: "Nemůžete připnout další poznámky."
|
||||||
intro: "Instalace FoundKey byla dokončena! Prosím vytvořte admina."
|
intro: "Instalace Misskey byla dokončena! Prosím vytvořte admina."
|
||||||
done: "Hotovo"
|
done: "Hotovo"
|
||||||
processing: "Zpracovávám"
|
processing: "Zpracovávám"
|
||||||
preview: "Náhled"
|
preview: "Náhled"
|
||||||
|
@ -186,6 +200,9 @@ all: "Vše"
|
||||||
subscribing: "Odebíráte"
|
subscribing: "Odebíráte"
|
||||||
publishing: "Publikuji"
|
publishing: "Publikuji"
|
||||||
notResponding: "Neodpovídá"
|
notResponding: "Neodpovídá"
|
||||||
|
instanceFollowing: "Následovníci na instanci"
|
||||||
|
instanceFollowers: "Následovníci na instanci"
|
||||||
|
instanceUsers: "Uživatelé této instance"
|
||||||
changePassword: "Změnit heslo"
|
changePassword: "Změnit heslo"
|
||||||
security: "Zabezpečení"
|
security: "Zabezpečení"
|
||||||
currentPassword: "Současné heslo"
|
currentPassword: "Současné heslo"
|
||||||
|
@ -199,6 +216,7 @@ noSuchUser: "Uživatel nebyl nalezen"
|
||||||
announcements: "Oznámení"
|
announcements: "Oznámení"
|
||||||
imageUrl: "URL obrázku"
|
imageUrl: "URL obrázku"
|
||||||
remove: "Smazat"
|
remove: "Smazat"
|
||||||
|
removed: "Smazáno"
|
||||||
removeAreYouSure: "Jste si jistí že chcete smazat \"{x}\"?"
|
removeAreYouSure: "Jste si jistí že chcete smazat \"{x}\"?"
|
||||||
deleteAreYouSure: "Jste si jistí že chcete smazat \"{x}\"?"
|
deleteAreYouSure: "Jste si jistí že chcete smazat \"{x}\"?"
|
||||||
resetAreYouSure: "Opravdu resetovat?"
|
resetAreYouSure: "Opravdu resetovat?"
|
||||||
|
@ -219,8 +237,7 @@ agreeTo: "Souhlasím s {0}"
|
||||||
tos: "Podmínky užívání"
|
tos: "Podmínky užívání"
|
||||||
start: "Začít"
|
start: "Začít"
|
||||||
home: "Domů"
|
home: "Domů"
|
||||||
remoteUserCaution: "Tyto informace nemusí být aktuální jelikož uživatel je ze vzdálené\
|
remoteUserCaution: "Tyto informace nemusí být aktuální jelikož uživatel je ze vzdálené instance."
|
||||||
\ instance."
|
|
||||||
activity: "Aktivita"
|
activity: "Aktivita"
|
||||||
images: "Obrázky"
|
images: "Obrázky"
|
||||||
birthday: "Datum narození"
|
birthday: "Datum narození"
|
||||||
|
@ -236,6 +253,7 @@ lightThemes: "Světlý vzhled"
|
||||||
darkThemes: "Tmavý vzhled"
|
darkThemes: "Tmavý vzhled"
|
||||||
syncDeviceDarkMode: "Synchronizovat tmavý vzhled s nastavením Vašeho systému"
|
syncDeviceDarkMode: "Synchronizovat tmavý vzhled s nastavením Vašeho systému"
|
||||||
drive: "Úložiště"
|
drive: "Úložiště"
|
||||||
|
fileName: "Název souboru"
|
||||||
selectFile: "Vybrat soubor"
|
selectFile: "Vybrat soubor"
|
||||||
selectFiles: "Vybrat soubory"
|
selectFiles: "Vybrat soubory"
|
||||||
selectFolder: "Vyberte složku"
|
selectFolder: "Vyberte složku"
|
||||||
|
@ -246,6 +264,7 @@ createFolder: "Vytvořit složku"
|
||||||
renameFolder: "Přejmenovat složku"
|
renameFolder: "Přejmenovat složku"
|
||||||
deleteFolder: "Odstranit složku"
|
deleteFolder: "Odstranit složku"
|
||||||
addFile: "Přidat soubor"
|
addFile: "Přidat soubor"
|
||||||
|
emptyFolder: "Tato složka je prázdná"
|
||||||
unableToDelete: "Nelze smazat"
|
unableToDelete: "Nelze smazat"
|
||||||
inputNewFileName: "Zadejte nový název"
|
inputNewFileName: "Zadejte nový název"
|
||||||
copyUrl: "Kopírovat URL"
|
copyUrl: "Kopírovat URL"
|
||||||
|
@ -273,26 +292,38 @@ dayX: "{day}"
|
||||||
monthX: "{month}"
|
monthX: "{month}"
|
||||||
yearX: "{year}"
|
yearX: "{year}"
|
||||||
pages: "Stránky"
|
pages: "Stránky"
|
||||||
|
integration: "Integrace"
|
||||||
|
connectService: "Připojit"
|
||||||
|
disconnectService: "Odpojit"
|
||||||
enableLocalTimeline: "Povolit lokální čas"
|
enableLocalTimeline: "Povolit lokální čas"
|
||||||
enableGlobalTimeline: "Povolit globální čas"
|
enableGlobalTimeline: "Povolit globální čas"
|
||||||
|
registration: "Registrace"
|
||||||
enableRegistration: "Povolit registraci novým uživatelům"
|
enableRegistration: "Povolit registraci novým uživatelům"
|
||||||
invite: "Pozvat"
|
invite: "Pozvat"
|
||||||
inMb: "V megabajtech"
|
inMb: "V megabajtech"
|
||||||
iconUrl: "Favicon URL"
|
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"
|
||||||
pinnedUsers: "Připnutí uživatelé"
|
pinnedUsers: "Připnutí uživatelé"
|
||||||
|
pinnedNotes: "Připnutá poznámka"
|
||||||
|
hcaptcha: "hCaptcha"
|
||||||
|
enableHcaptcha: "Aktivovat hCaptchu"
|
||||||
hcaptchaSecretKey: "Tajný Klíč (Secret Key)"
|
hcaptchaSecretKey: "Tajný Klíč (Secret Key)"
|
||||||
|
recaptcha: "reCAPTCHA"
|
||||||
|
enableRecaptcha: "Zapnout ReCAPTCHu"
|
||||||
recaptchaSecretKey: "Tajný Klíč (Secret Key)"
|
recaptchaSecretKey: "Tajný Klíč (Secret Key)"
|
||||||
antennas: "Antény"
|
antennas: "Antény"
|
||||||
manageAntennas: "Spravovat Antény"
|
manageAntennas: "Spravovat Antény"
|
||||||
name: "Jméno"
|
name: "Jméno"
|
||||||
antennaSource: "Zdroj Antény"
|
antennaSource: "Zdroj Antény"
|
||||||
|
enableServiceworker: "Povolit ServiceWorker"
|
||||||
caseSensitive: "Rozlišuje malá a velká písmena"
|
caseSensitive: "Rozlišuje malá a velká písmena"
|
||||||
connectedTo: "Následující účty jsou připojeny"
|
connectedTo: "Následující účty jsou připojeny"
|
||||||
popularTags: "Populární tagy"
|
popularTags: "Populární tagy"
|
||||||
userList: "Seznamy"
|
userList: "Seznamy"
|
||||||
aboutMisskey: "O FoundKey"
|
about: "Informace"
|
||||||
|
aboutMisskey: "O Misskey"
|
||||||
administrator: "Administrátor"
|
administrator: "Administrátor"
|
||||||
token: "Token"
|
token: "Token"
|
||||||
twoStepAuthentication: "Dvoufaktorová autentikace"
|
twoStepAuthentication: "Dvoufaktorová autentikace"
|
||||||
|
@ -310,6 +341,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é"
|
||||||
|
@ -335,6 +367,7 @@ inviteToGroup: "Pozvat do skupiny"
|
||||||
newMessageExists: "Máte novou zprávu"
|
newMessageExists: "Máte novou zprávu"
|
||||||
onlyOneFileCanBeAttached: "Ke zprávě můžete přiložit jenom jeden soubor"
|
onlyOneFileCanBeAttached: "Ke zprávě můžete přiložit jenom jeden soubor"
|
||||||
signinRequired: "Přihlašte se, prosím"
|
signinRequired: "Přihlašte se, prosím"
|
||||||
|
invitations: "Pozvat"
|
||||||
checking: "Ověřuji"
|
checking: "Ověřuji"
|
||||||
available: "K dispozici"
|
available: "K dispozici"
|
||||||
unavailable: "Není k dispozici"
|
unavailable: "Není k dispozici"
|
||||||
|
@ -346,11 +379,13 @@ normalPassword: "Dobré heslo"
|
||||||
strongPassword: "Silné heslo"
|
strongPassword: "Silné heslo"
|
||||||
passwordMatched: "Hesla se schodují"
|
passwordMatched: "Hesla se schodují"
|
||||||
passwordNotMatched: "Hesla se neschodují"
|
passwordNotMatched: "Hesla se neschodují"
|
||||||
|
signinWith: "Přihlásit se s {x}"
|
||||||
signinFailed: "Nelze se přihlásit. Zkontrolujte prosím své uživatelské jméno a heslo."
|
signinFailed: "Nelze se přihlásit. Zkontrolujte prosím své uživatelské jméno a heslo."
|
||||||
or: "Nebo"
|
or: "Nebo"
|
||||||
language: "Jazyk"
|
language: "Jazyk"
|
||||||
uiLanguage: "Jazyk uživatelského rozhraní"
|
uiLanguage: "Jazyk uživatelského rozhraní"
|
||||||
groupInvited: "Pozvat do skupiny"
|
groupInvited: "Pozvat do skupiny"
|
||||||
|
aboutX: "O {x}"
|
||||||
useOsNativeEmojis: "Použití nativních emoji operačního systému"
|
useOsNativeEmojis: "Použití nativních emoji operačního systému"
|
||||||
youHaveNoGroups: "Nemáte žádné skupiny"
|
youHaveNoGroups: "Nemáte žádné skupiny"
|
||||||
joinOrCreateGroup: "Můžete požádat o pozvání do stávající skupiny nebo vytvořit novou."
|
joinOrCreateGroup: "Můžete požádat o pozvání do stávající skupiny nebo vytvořit novou."
|
||||||
|
@ -360,16 +395,25 @@ category: "Kategorie"
|
||||||
tags: "Štítky"
|
tags: "Štítky"
|
||||||
createAccount: "Vytvořit účet"
|
createAccount: "Vytvořit účet"
|
||||||
existingAccount: "Existující účet"
|
existingAccount: "Existující účet"
|
||||||
|
regenerate: "Obnovit"
|
||||||
fontSize: "Velikost písma"
|
fontSize: "Velikost písma"
|
||||||
openImageInNewTab: "Otevřít obrázek v novém panelu"
|
openImageInNewTab: "Otevřít obrázek v novém panelu"
|
||||||
dashboard: "Přehled"
|
dashboard: "Přehled"
|
||||||
local: "Lokální"
|
local: "Lokální"
|
||||||
remote: "Vzdálené"
|
remote: "Vzdálené"
|
||||||
|
total: "Celkem"
|
||||||
|
weekOverWeekChanges: "Týdně"
|
||||||
dayOverDayChanges: "Denně"
|
dayOverDayChanges: "Denně"
|
||||||
appearance: "Vzhled"
|
appearance: "Vzhled"
|
||||||
clientSettings: "Nastavení klienta"
|
clientSettings: "Nastavení klienta"
|
||||||
|
accountSettings: "Nastavení účtu"
|
||||||
|
promotion: "Propagace"
|
||||||
|
promote: "Propagovat"
|
||||||
|
numberOfDays: "Počet dní"
|
||||||
|
deleteAll: "Smazat vše"
|
||||||
showFixedPostForm: "Zobrazit formulář pro nové příspěvky nad časovou osou"
|
showFixedPostForm: "Zobrazit formulář pro nové příspěvky nad časovou osou"
|
||||||
masterVolume: "Celková hlasitost"
|
masterVolume: "Celková hlasitost"
|
||||||
|
chooseEmoji: "Vybrat emotikon"
|
||||||
unableToProcess: "Operace nebyla dokončena."
|
unableToProcess: "Operace nebyla dokončena."
|
||||||
recentUsed: "Naposledy použité"
|
recentUsed: "Naposledy použité"
|
||||||
install: "Nainstalovat"
|
install: "Nainstalovat"
|
||||||
|
@ -383,13 +427,16 @@ ascendingOrder: "Vzestupně"
|
||||||
descendingOrder: "Sestupně"
|
descendingOrder: "Sestupně"
|
||||||
scratchpad: "Zápisník"
|
scratchpad: "Zápisník"
|
||||||
output: "Výstup"
|
output: "Výstup"
|
||||||
|
script: "Skript"
|
||||||
updateRemoteUser: "Aktualizovat informace o vzdáleném účtu"
|
updateRemoteUser: "Aktualizovat informace o vzdáleném účtu"
|
||||||
|
deleteAllFiles: "Smazat všechny soubory"
|
||||||
deleteAllFilesConfirm: "Jste si jistí že chcete smazat všechny soubory?"
|
deleteAllFilesConfirm: "Jste si jistí že chcete smazat všechny soubory?"
|
||||||
userSuspended: "Tomuto uživateli byl pozastaven účet."
|
userSuspended: "Tomuto uživateli byl pozastaven účet."
|
||||||
menu: "Menu"
|
menu: "Menu"
|
||||||
addItem: "Přidat položku"
|
addItem: "Přidat položku"
|
||||||
inboxUrl: "Inbox URL"
|
inboxUrl: "Inbox URL"
|
||||||
deletedNote: "Odstraněné příspěvky"
|
deletedNote: "Odstraněné příspěvky"
|
||||||
|
invisibleNote: "Skryté příspěvky"
|
||||||
description: "Popis"
|
description: "Popis"
|
||||||
author: "Autor"
|
author: "Autor"
|
||||||
manage: "Administrace"
|
manage: "Administrace"
|
||||||
|
@ -398,6 +445,7 @@ generateAccessToken: "Vygenerovat přístupový token"
|
||||||
permission: "Oprávnění"
|
permission: "Oprávnění"
|
||||||
enableAll: "Povolit vše"
|
enableAll: "Povolit vše"
|
||||||
disableAll: "Vypnout vše"
|
disableAll: "Vypnout vše"
|
||||||
|
notificationType: "Typy oznámení"
|
||||||
edit: "Upravit"
|
edit: "Upravit"
|
||||||
emailServer: "Mailový server"
|
emailServer: "Mailový server"
|
||||||
enableEmail: "Zapnout email dystribuci"
|
enableEmail: "Zapnout email dystribuci"
|
||||||
|
@ -412,6 +460,7 @@ smtpSecureInfo: "Toto vypněte pokud používáte STARTTLS"
|
||||||
makeActive: "Aktivovat"
|
makeActive: "Aktivovat"
|
||||||
display: "Zobrazit"
|
display: "Zobrazit"
|
||||||
copy: "Kopírovat"
|
copy: "Kopírovat"
|
||||||
|
logs: "Logy"
|
||||||
database: "Databáze"
|
database: "Databáze"
|
||||||
create: "Vytvořit"
|
create: "Vytvořit"
|
||||||
notificationSetting: "Nastavení oznámení"
|
notificationSetting: "Nastavení oznámení"
|
||||||
|
@ -419,10 +468,13 @@ useGlobalSetting: "Použít globální nastavení"
|
||||||
other: "Ostatní"
|
other: "Ostatní"
|
||||||
fileIdOrUrl: "ID nebo URL souboru"
|
fileIdOrUrl: "ID nebo URL souboru"
|
||||||
behavior: "Chování"
|
behavior: "Chování"
|
||||||
|
sample: "Ukázka"
|
||||||
clearCache: "Vyprázdnit mezipaměť"
|
clearCache: "Vyprázdnit mezipaměť"
|
||||||
info: "Informace"
|
info: "Informace"
|
||||||
user: "Uživatelé"
|
user: "Uživatelé"
|
||||||
administration: "Administrace"
|
administration: "Administrace"
|
||||||
|
searchByGoogle: "Vyhledávání"
|
||||||
|
file: "Soubor(ů)"
|
||||||
_email:
|
_email:
|
||||||
_follow:
|
_follow:
|
||||||
title: "Máte nového následovníka"
|
title: "Máte nového následovníka"
|
||||||
|
@ -433,6 +485,9 @@ _mfm:
|
||||||
search: "Vyhledávání"
|
search: "Vyhledávání"
|
||||||
_theme:
|
_theme:
|
||||||
description: "Popis"
|
description: "Popis"
|
||||||
|
keys:
|
||||||
|
mention: "Zmínění"
|
||||||
|
renote: "Přeposlat"
|
||||||
_sfx:
|
_sfx:
|
||||||
note: "Poznámky"
|
note: "Poznámky"
|
||||||
notification: "Oznámení"
|
notification: "Oznámení"
|
||||||
|
@ -460,6 +515,27 @@ _charts:
|
||||||
federation: "Federace"
|
federation: "Federace"
|
||||||
_timelines:
|
_timelines:
|
||||||
home: "Domů"
|
home: "Domů"
|
||||||
|
_pages:
|
||||||
|
blocks:
|
||||||
|
image: "Obrázky"
|
||||||
|
script:
|
||||||
|
categories:
|
||||||
|
list: "Seznamy"
|
||||||
|
blocks:
|
||||||
|
_join:
|
||||||
|
arg1: "Seznamy"
|
||||||
|
_randomPick:
|
||||||
|
arg1: "Seznamy"
|
||||||
|
_dailyRandomPick:
|
||||||
|
arg1: "Seznamy"
|
||||||
|
_seedRandomPick:
|
||||||
|
arg2: "Seznamy"
|
||||||
|
_pick:
|
||||||
|
arg1: "Seznamy"
|
||||||
|
_listLen:
|
||||||
|
arg1: "Seznamy"
|
||||||
|
types:
|
||||||
|
array: "Seznamy"
|
||||||
_notification:
|
_notification:
|
||||||
youWereFollowed: "Máte nového následovníka"
|
youWereFollowed: "Máte nového následovníka"
|
||||||
youWereInvitedToGroup: "Pozvat do skupiny"
|
youWereInvitedToGroup: "Pozvat do skupiny"
|
||||||
|
@ -479,4 +555,3 @@ _deck:
|
||||||
antenna: "Antény"
|
antenna: "Antény"
|
||||||
list: "Seznamy"
|
list: "Seznamy"
|
||||||
mentions: "Zmínění"
|
mentions: "Zmínění"
|
||||||
_services: {}
|
|
||||||
|
|
2
locales/da-DK.yml
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
---
|
||||||
|
_lang_: "Dansk"
|
1016
locales/de-DE.yml
1074
locales/es-ES.yml
1052
locales/fr-FR.yml
1
locales/hr-HR.yml
Normal file
|
@ -0,0 +1 @@
|
||||||
|
---
|
1
locales/ht-HT.yml
Normal file
|
@ -0,0 +1 @@
|
||||||
|
---
|
|
@ -8,18 +8,15 @@ const yaml = require('js-yaml');
|
||||||
const merge = (...args) => args.reduce((a, c) => ({
|
const merge = (...args) => args.reduce((a, c) => ({
|
||||||
...a,
|
...a,
|
||||||
...c,
|
...c,
|
||||||
// this is necessary to merge "sub-objects" correctly instead of overwriting them
|
|
||||||
...Object.entries(a)
|
...Object.entries(a)
|
||||||
.filter(([k]) => c && typeof c[k] === 'object')
|
.filter(([k]) => c && typeof c[k] === 'object')
|
||||||
.reduce((a, [k, v]) => (a[k] = merge(v, c[k]), a), {})
|
.reduce((a, [k, v]) => (a[k] = merge(v, c[k]), a), {})
|
||||||
}), {});
|
}), {});
|
||||||
|
|
||||||
// For a language to be generated as a locale it has to be listed here.
|
|
||||||
const languages = [
|
const languages = [
|
||||||
'ar-SA',
|
'ar-SA',
|
||||||
'bn-BD',
|
|
||||||
'ca-ES',
|
|
||||||
'cs-CZ',
|
'cs-CZ',
|
||||||
|
'da-DK',
|
||||||
'de-DE',
|
'de-DE',
|
||||||
'en-US',
|
'en-US',
|
||||||
'es-ES',
|
'es-ES',
|
||||||
|
@ -32,40 +29,40 @@ const languages = [
|
||||||
'kn-IN',
|
'kn-IN',
|
||||||
'ko-KR',
|
'ko-KR',
|
||||||
'nl-NL',
|
'nl-NL',
|
||||||
|
'no-NO',
|
||||||
'pl-PL',
|
'pl-PL',
|
||||||
'pt-PT',
|
'pt-PT',
|
||||||
'ru-RU',
|
'ru-RU',
|
||||||
'sk-SK',
|
'sk-SK',
|
||||||
'sv-SE',
|
'ug-CN',
|
||||||
'tr-TR',
|
|
||||||
'uk-UA',
|
'uk-UA',
|
||||||
'vi-VN',
|
|
||||||
'zh-CN',
|
'zh-CN',
|
||||||
'zh-TW',
|
'zh-TW',
|
||||||
];
|
];
|
||||||
|
|
||||||
// Load the locales listed above.
|
const primaries = {
|
||||||
const locales = languages.reduce(
|
'en': 'US',
|
||||||
(acc, lang) => {
|
'ja': 'JP',
|
||||||
acc[lang] = yaml.load(
|
'zh': 'CN',
|
||||||
fs.readFileSync(`${__dirname}/${lang}.yml`, 'utf-8')
|
};
|
||||||
// Remove backspace characters, which for some reason can get mixed in with the string and break the YAML.
|
|
||||||
.replaceAll('\b', '')
|
// 何故か文字列にバックスペース文字が混入することがあり、YAMLが壊れるので取り除く
|
||||||
) || {};
|
const clean = (text) => text.replace(new RegExp(String.fromCodePoint(0x08), 'g'), '');
|
||||||
return acc;
|
|
||||||
},
|
const locales = languages.reduce((a, c) => (a[c] = yaml.load(clean(fs.readFileSync(`${__dirname}/${c}.yml`, 'utf-8'))) || {}, a), {});
|
||||||
{} // initial accumulator
|
|
||||||
);
|
|
||||||
|
|
||||||
module.exports = Object.entries(locales)
|
module.exports = Object.entries(locales)
|
||||||
.reduce((acc, [lang, strings]) => {
|
.reduce((a, [k ,v]) => (a[k] = (() => {
|
||||||
if (lang == 'en-US') {
|
const [lang] = k.split('-');
|
||||||
acc[lang] = strings;
|
switch (k) {
|
||||||
} else {
|
case 'ja-JP': return v;
|
||||||
// all other locales fall back to en-US
|
case 'ja-KS':
|
||||||
acc[lang] = merge(locales['en-US'], strings);
|
case 'en-US': return merge(locales['ja-JP'], v);
|
||||||
}
|
default: return merge(
|
||||||
return acc;
|
locales['ja-JP'],
|
||||||
},
|
locales['en-US'],
|
||||||
{} // initial accumulator
|
locales[`${lang}-${primaries[lang]}`] || {},
|
||||||
);
|
v
|
||||||
|
);
|
||||||
|
}
|
||||||
|
})(), a), {});
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
---
|
||||||
_lang_: "日本語 (関西弁)"
|
_lang_: "日本語 (関西弁)"
|
||||||
headlineMisskey: "ノートでつながるネットワーク"
|
headlineMisskey: "ノートでつながるネットワーク"
|
||||||
introMisskey: "ようお越し!FoundKeyは、オープンソースの分散型マイクロブログサービスやねん。\n「ノート」を作って、いま起こっとることを共有したり、あんたについて皆に発信しよう\U0001F4E1\
|
introMisskey: "ようお越し!Misskeyは、オープンソースの分散型マイクロブログサービスやねん。\n「ノート」を作って、いま起こっとることを共有したり、あんたについて皆に発信しよう📡\n「リアクション」機能で、皆のノートに素早く反応を追加したりもできるで✌\nほな新しい世界を探検しよか🚀"
|
||||||
\n「リアクション」機能で、皆のノートに素早く反応を追加したりもできるで✌\nほな新しい世界を探検しよか\U0001F680"
|
|
||||||
monthAndDay: "{month}月 {day}日"
|
monthAndDay: "{month}月 {day}日"
|
||||||
search: "探す"
|
search: "探す"
|
||||||
notifications: "通知"
|
notifications: "通知"
|
||||||
|
@ -12,6 +12,7 @@ fetchingAsApObject: "今ちと連合に照会しとるで"
|
||||||
ok: "OKや"
|
ok: "OKや"
|
||||||
gotIt: "ほい"
|
gotIt: "ほい"
|
||||||
cancel: "やめとく"
|
cancel: "やめとく"
|
||||||
|
enterUsername: "ユーザー名を入れてや"
|
||||||
renotedBy: "{user}がRenote"
|
renotedBy: "{user}がRenote"
|
||||||
noNotes: "ノートはあらへん"
|
noNotes: "ノートはあらへん"
|
||||||
noNotifications: "通知はあらへん"
|
noNotifications: "通知はあらへん"
|
||||||
|
@ -27,9 +28,16 @@ login: "ログイン"
|
||||||
loggingIn: "ログインしよるで"
|
loggingIn: "ログインしよるで"
|
||||||
logout: "ログアウト"
|
logout: "ログアウト"
|
||||||
signup: "新規登録"
|
signup: "新規登録"
|
||||||
|
uploading: "アップロードしとるで"
|
||||||
save: "保存"
|
save: "保存"
|
||||||
users: "ユーザー"
|
users: "ユーザー"
|
||||||
addUser: "ユーザーを追加や"
|
addUser: "ユーザーを追加や"
|
||||||
|
favorite: "お気に入り"
|
||||||
|
favorites: "お気に入り"
|
||||||
|
unfavorite: "やっぱ気に入らん"
|
||||||
|
favorited: "お気に入りに登録したで"
|
||||||
|
alreadyFavorited: "もうお気に入りに入れとるがな。"
|
||||||
|
cantFavorite: "アカン、お気に入り登録できへんかったで。"
|
||||||
pin: "ピン留めしとく"
|
pin: "ピン留めしとく"
|
||||||
unpin: "やっぱピン留めせん"
|
unpin: "やっぱピン留めせん"
|
||||||
copyContent: "内容をコピー"
|
copyContent: "内容をコピー"
|
||||||
|
@ -40,6 +48,7 @@ deleteAndEditConfirm: "このノートをほかして書き直すんか?この
|
||||||
addToList: "リストに入れたる"
|
addToList: "リストに入れたる"
|
||||||
sendMessage: "メッセージを送る"
|
sendMessage: "メッセージを送る"
|
||||||
copyUsername: "ユーザー名をコピー"
|
copyUsername: "ユーザー名をコピー"
|
||||||
|
searchUser: "ユーザーを検索"
|
||||||
reply: "返事"
|
reply: "返事"
|
||||||
loadMore: "まだまだあるで!"
|
loadMore: "まだまだあるで!"
|
||||||
showMore: "まだまだあるで!"
|
showMore: "まだまだあるで!"
|
||||||
|
@ -59,6 +68,7 @@ unfollowConfirm: "{name}のフォローを解除してもええんか?"
|
||||||
exportRequested: "エクスポートしてな、ってリクエストしたけど、これ多分めっちゃ時間かかるで。エクスポート終わったら「ドライブ」に突っ込んどくで。"
|
exportRequested: "エクスポートしてな、ってリクエストしたけど、これ多分めっちゃ時間かかるで。エクスポート終わったら「ドライブ」に突っ込んどくで。"
|
||||||
importRequested: "インポートしてな、ってリクエストしたけど、これ多分めっちゃ時間かかるで。"
|
importRequested: "インポートしてな、ってリクエストしたけど、これ多分めっちゃ時間かかるで。"
|
||||||
lists: "リスト"
|
lists: "リスト"
|
||||||
|
noLists: "リストなんてあらへんで"
|
||||||
note: "ノート"
|
note: "ノート"
|
||||||
notes: "ノート"
|
notes: "ノート"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
|
@ -71,6 +81,8 @@ somethingHappened: "なんかアカンことが起こったで"
|
||||||
retry: "もっぺんやる?"
|
retry: "もっぺんやる?"
|
||||||
pageLoadError: "ページの読み込みに失敗してしもうたで…"
|
pageLoadError: "ページの読み込みに失敗してしもうたで…"
|
||||||
pageLoadErrorDescription: "これは普通、ネットワークかブラウザキャッシュが原因やからね。キャッシュをクリアするか、もうちっとだけ待ってくれへんか?"
|
pageLoadErrorDescription: "これは普通、ネットワークかブラウザキャッシュが原因やからね。キャッシュをクリアするか、もうちっとだけ待ってくれへんか?"
|
||||||
|
serverIsDead: "The server is not responding. Please wait for a while before trying again."
|
||||||
|
youShouldUpgradeClient: "To display this page, please reload and use a new version client. "
|
||||||
enterListName: "リスト名を入れてや"
|
enterListName: "リスト名を入れてや"
|
||||||
privacy: "プライバシー"
|
privacy: "プライバシー"
|
||||||
makeFollowManuallyApprove: "自分が認めた人だけがこのアカウントをフォローできるようにする"
|
makeFollowManuallyApprove: "自分が認めた人だけがこのアカウントをフォローできるようにする"
|
||||||
|
@ -80,16 +92,23 @@ followRequest: "フォローを頼む"
|
||||||
followRequests: "フォロー申請"
|
followRequests: "フォロー申請"
|
||||||
unfollow: "フォローやめる"
|
unfollow: "フォローやめる"
|
||||||
followRequestPending: "フォロー許してくれるん待っとる"
|
followRequestPending: "フォロー許してくれるん待っとる"
|
||||||
|
enterEmoji: "絵文字を入れてや"
|
||||||
renote: "Renote"
|
renote: "Renote"
|
||||||
unrenote: "Renoteやめる"
|
unrenote: "Renoteやめる"
|
||||||
|
renoted: "Renoteしたで。"
|
||||||
|
cantRenote: "この投稿はRenoteできへんらしい。"
|
||||||
|
cantReRenote: "Renote自体はRenoteできへんで。"
|
||||||
quote: "引用"
|
quote: "引用"
|
||||||
pinnedNote: "ピン留めされとるノート"
|
pinnedNote: "ピン留めされとるノート"
|
||||||
|
pinned: "ピン留めしとく"
|
||||||
you: "あんた"
|
you: "あんた"
|
||||||
clickToShow: "押したら見えるで"
|
clickToShow: "押したら見えるで"
|
||||||
sensitive: "ちょっとアカンやつやで"
|
sensitive: "ちょっとアカンやつやで"
|
||||||
add: "増やす"
|
add: "増やす"
|
||||||
reaction: "リアクション"
|
reaction: "リアクション"
|
||||||
|
reactionSetting: "Reaction that will be displayed in Picker. "
|
||||||
reactionSettingDescription2: "ドラッグで並び替え、クリックで削除、+を押して追加やで。"
|
reactionSettingDescription2: "ドラッグで並び替え、クリックで削除、+を押して追加やで。"
|
||||||
|
rememberNoteVisibility: "公開範囲覚えといて"
|
||||||
attachCancel: "のっけるのやめる"
|
attachCancel: "のっけるのやめる"
|
||||||
markAsSensitive: "ちょっとこれはアカン"
|
markAsSensitive: "ちょっとこれはアカン"
|
||||||
unmarkAsSensitive: "そこまでアカンことないやろ"
|
unmarkAsSensitive: "そこまでアカンことないやろ"
|
||||||
|
@ -112,20 +131,27 @@ editWidgetsExit: "編集終ったで"
|
||||||
customEmojis: "カスタム絵文字"
|
customEmojis: "カスタム絵文字"
|
||||||
emoji: "絵文字"
|
emoji: "絵文字"
|
||||||
emojis: "絵文字"
|
emojis: "絵文字"
|
||||||
|
emojiName: "絵文字名"
|
||||||
|
emojiUrl: "絵文字画像URL"
|
||||||
addEmoji: "絵文字を追加"
|
addEmoji: "絵文字を追加"
|
||||||
|
settingGuide: "ええ感じの設定"
|
||||||
cacheRemoteFiles: "リモートのファイルをキャッシュする"
|
cacheRemoteFiles: "リモートのファイルをキャッシュする"
|
||||||
cacheRemoteFilesDescription: "この設定を切っとくと、リモートファイルをキャッシュせず直リンクするようになるで。サーバーの容量は節約できるけど、サムネイルが作られんくなるから通信量が増えるで。"
|
cacheRemoteFilesDescription: "この設定を切っとくと、リモートファイルをキャッシュせず直リンクするようになるで。サーバーの容量は節約できるけど、サムネイルが作られんくなるから通信量が増えるで。"
|
||||||
flagAsBot: "Botやで"
|
flagAsBot: "Botやで"
|
||||||
flagAsBotDescription: "もしこのアカウントがプログラムによって運用されるんやったら、このフラグをオンにしてたのむで。オンにすると、反応の連鎖を防ぐためのフラグとして他の開発者に役立ったり、FoundKeyのシステム上での扱いがBotに合ったもんになるんやで。"
|
flagAsBotDescription: "もしこのアカウントがプログラムによって運用されるんやったら、このフラグをオンにしてたのむで。オンにすると、反応の連鎖を防ぐためのフラグとして他の開発者に役立ったり、Misskeyのシステム上での扱いがBotに合ったもんになるんやで。"
|
||||||
flagAsCat: "Catやで"
|
flagAsCat: "Catやで"
|
||||||
flagAsCatDescription: "ワレ、猫ちゃんならこのフラグをつけてみ?"
|
flagAsCatDescription: "ワレ、猫ちゃんならこのフラグをつけてみ?"
|
||||||
|
flagShowTimelineReplies: "It will display the reply to the note in the timeline. "
|
||||||
|
flagShowTimelineRepliesDescription: "It will display the reply to notes other than the user notes in the timeline when you turn it on. "
|
||||||
autoAcceptFollowed: "フォローしとるユーザーからのフォローリクエストを勝手に許可しとく"
|
autoAcceptFollowed: "フォローしとるユーザーからのフォローリクエストを勝手に許可しとく"
|
||||||
addAccount: "アカウントを追加"
|
addAccount: "アカウントを追加"
|
||||||
loginFailed: "ログインに失敗してしもうた…"
|
loginFailed: "ログインに失敗してしもうた…"
|
||||||
showOnRemote: "リモートで見る"
|
showOnRemote: "リモートで見る"
|
||||||
general: "全般"
|
general: "全般"
|
||||||
|
wallpaper: "壁紙"
|
||||||
setWallpaper: "壁紙を設定"
|
setWallpaper: "壁紙を設定"
|
||||||
removeWallpaper: "壁紙を削除"
|
removeWallpaper: "壁紙を削除"
|
||||||
|
searchWith: "検索: {q}"
|
||||||
youHaveNoLists: "リストがあらへんで?"
|
youHaveNoLists: "リストがあらへんで?"
|
||||||
followConfirm: "{name}をフォローしてええか?"
|
followConfirm: "{name}をフォローしてええか?"
|
||||||
proxyAccount: "プロキシアカウント"
|
proxyAccount: "プロキシアカウント"
|
||||||
|
@ -135,19 +161,27 @@ selectUser: "ユーザーを選ぶ"
|
||||||
recipient: "宛先"
|
recipient: "宛先"
|
||||||
annotation: "注釈"
|
annotation: "注釈"
|
||||||
federation: "連合"
|
federation: "連合"
|
||||||
|
instances: "インスタンス"
|
||||||
registeredAt: "初観測"
|
registeredAt: "初観測"
|
||||||
latestRequestSentAt: "ちょっと前のリクエスト送信"
|
latestRequestSentAt: "ちょっと前のリクエスト送信"
|
||||||
latestRequestReceivedAt: "ちょっと前のリクエスト受信"
|
latestRequestReceivedAt: "ちょっと前のリクエスト受信"
|
||||||
latestStatus: "ちょっと前のステータス"
|
latestStatus: "ちょっと前のステータス"
|
||||||
|
storageUsage: "ストレージ使うた量"
|
||||||
charts: "チャート"
|
charts: "チャート"
|
||||||
perHour: "1時間ごと"
|
perHour: "1時間ごと"
|
||||||
perDay: "1日ごと"
|
perDay: "1日ごと"
|
||||||
stopActivityDelivery: "アクティビティの配送をやめる"
|
stopActivityDelivery: "アクティビティの配送をやめる"
|
||||||
blockThisInstance: "このインスタンスをブロック"
|
blockThisInstance: "このインスタンスをブロック"
|
||||||
|
operations: "操作"
|
||||||
software: "ソフトウェア"
|
software: "ソフトウェア"
|
||||||
version: "バージョン"
|
version: "バージョン"
|
||||||
|
metadata: "メタデータ"
|
||||||
withNFiles: "{n}個のファイル"
|
withNFiles: "{n}個のファイル"
|
||||||
|
monitor: "モニター"
|
||||||
jobQueue: "ジョブキュー"
|
jobQueue: "ジョブキュー"
|
||||||
|
cpuAndMemory: "CPUとメモリ"
|
||||||
|
network: "ネットワーク"
|
||||||
|
disk: "ディスク"
|
||||||
instanceInfo: "インスタンス情報"
|
instanceInfo: "インスタンス情報"
|
||||||
statistics: "統計"
|
statistics: "統計"
|
||||||
clearQueue: "キューにさいなら"
|
clearQueue: "キューにさいなら"
|
||||||
|
@ -164,7 +198,7 @@ noUsers: "ユーザーはおらへん"
|
||||||
editProfile: "プロフィールをいじる"
|
editProfile: "プロフィールをいじる"
|
||||||
noteDeleteConfirm: "このノートを削除しまっか?"
|
noteDeleteConfirm: "このノートを削除しまっか?"
|
||||||
pinLimitExceeded: "これ以上ピン留めできひん"
|
pinLimitExceeded: "これ以上ピン留めできひん"
|
||||||
intro: "FoundKeyのインストールが完了してん!管理者アカウントを作ってや。"
|
intro: "Misskeyのインストールが完了してん!管理者アカウントを作ってや。"
|
||||||
done: "でけた"
|
done: "でけた"
|
||||||
processing: "処理しとる"
|
processing: "処理しとる"
|
||||||
preview: "プレビュー"
|
preview: "プレビュー"
|
||||||
|
@ -178,6 +212,9 @@ all: "みんな"
|
||||||
subscribing: "購読しとる"
|
subscribing: "購読しとる"
|
||||||
publishing: "配信しとる"
|
publishing: "配信しとる"
|
||||||
notResponding: "応答してへんで"
|
notResponding: "応答してへんで"
|
||||||
|
instanceFollowing: "インスタンスのフォロー"
|
||||||
|
instanceFollowers: "インスタンスのフォロワー\n"
|
||||||
|
instanceUsers: "インスタンスのユーザー"
|
||||||
changePassword: "パスワード変える"
|
changePassword: "パスワード変える"
|
||||||
security: "セキュリティ"
|
security: "セキュリティ"
|
||||||
retypedNotMatch: "そやないねん。"
|
retypedNotMatch: "そやないねん。"
|
||||||
|
@ -193,12 +230,15 @@ lookup: "見てきて"
|
||||||
announcements: "お知らせ"
|
announcements: "お知らせ"
|
||||||
imageUrl: "画像URL"
|
imageUrl: "画像URL"
|
||||||
remove: "ほかす"
|
remove: "ほかす"
|
||||||
|
removed: "削除したで!"
|
||||||
removeAreYouSure: "「{x}」はほかしてええか?"
|
removeAreYouSure: "「{x}」はほかしてええか?"
|
||||||
deleteAreYouSure: "「{x}」はほかしてええか?"
|
deleteAreYouSure: "「{x}」はほかしてええか?"
|
||||||
resetAreYouSure: "リセットしてええん?"
|
resetAreYouSure: "リセットしてええん?"
|
||||||
saved: "保存したで!"
|
saved: "保存したで!"
|
||||||
messaging: "チャット"
|
messaging: "チャット"
|
||||||
upload: "アップロード"
|
upload: "アップロード"
|
||||||
|
keepOriginalUploading: "Retain the original image. "
|
||||||
|
keepOriginalUploadingDescription: "When uploading the clip, the original version will be retained. Turning it of then uploading will produce images for public use. "
|
||||||
fromDrive: "ドライブから"
|
fromDrive: "ドライブから"
|
||||||
fromUrl: "URLから"
|
fromUrl: "URLから"
|
||||||
uploadFromUrl: "URLアップロード"
|
uploadFromUrl: "URLアップロード"
|
||||||
|
@ -230,6 +270,7 @@ lightThemes: "デイゲーム"
|
||||||
darkThemes: "ナイトゲーム"
|
darkThemes: "ナイトゲーム"
|
||||||
syncDeviceDarkMode: "デバイスのダークモードと一緒にする"
|
syncDeviceDarkMode: "デバイスのダークモードと一緒にする"
|
||||||
drive: "ドライブ"
|
drive: "ドライブ"
|
||||||
|
fileName: "ファイル名"
|
||||||
selectFile: "ファイル選んでや"
|
selectFile: "ファイル選んでや"
|
||||||
selectFiles: "ファイル選んでや"
|
selectFiles: "ファイル選んでや"
|
||||||
selectFolder: "フォルダ選んでや"
|
selectFolder: "フォルダ選んでや"
|
||||||
|
@ -240,6 +281,8 @@ createFolder: "フォルダー作る"
|
||||||
renameFolder: "フォルダー名を変える"
|
renameFolder: "フォルダー名を変える"
|
||||||
deleteFolder: "フォルダーを消してまう"
|
deleteFolder: "フォルダーを消してまう"
|
||||||
addFile: "ファイルを追加"
|
addFile: "ファイルを追加"
|
||||||
|
emptyDrive: "ドライブにはなんも残っとらん"
|
||||||
|
emptyFolder: "ふぉろだーにはなんも残っとらん"
|
||||||
unableToDelete: "消そうおもってんけどな、あかんかったわ"
|
unableToDelete: "消そうおもってんけどな、あかんかったわ"
|
||||||
inputNewFileName: "今度のファイル名は何にするん?"
|
inputNewFileName: "今度のファイル名は何にするん?"
|
||||||
inputNewDescription: "新しいキャプションを入力しましょ"
|
inputNewDescription: "新しいキャプションを入力しましょ"
|
||||||
|
@ -273,9 +316,11 @@ dayX: "{day}日"
|
||||||
monthX: "{month}月"
|
monthX: "{month}月"
|
||||||
yearX: "{year}年"
|
yearX: "{year}年"
|
||||||
pages: "ページ"
|
pages: "ページ"
|
||||||
|
integration: "連携"
|
||||||
enableLocalTimeline: "ローカルタイムラインを使えるようにする"
|
enableLocalTimeline: "ローカルタイムラインを使えるようにする"
|
||||||
enableGlobalTimeline: "グローバルタイムラインを使えるようにする"
|
enableGlobalTimeline: "グローバルタイムラインを使えるようにする"
|
||||||
disablingTimelinesInfo: "ここらへんのタイムラインを使えんようにしてしもても、管理者とモデレーターは使えるままになってるで、そうやなかったら不便やからな。"
|
disablingTimelinesInfo: "ここらへんのタイムラインを使えんようにしてしもても、管理者とモデレーターは使えるままになってるで、そうやなかったら不便やからな。"
|
||||||
|
registration: "登録"
|
||||||
enableRegistration: "一見さんでも誰でもいらっしゃ~い"
|
enableRegistration: "一見さんでも誰でもいらっしゃ~い"
|
||||||
invite: "来てや"
|
invite: "来てや"
|
||||||
driveCapacityPerLocalAccount: "ローカルユーザーひとりあたりのドライブ容量"
|
driveCapacityPerLocalAccount: "ローカルユーザーひとりあたりのドライブ容量"
|
||||||
|
@ -283,12 +328,20 @@ driveCapacityPerRemoteAccount: "リモートユーザーひとりあたりのド
|
||||||
inMb: "メガバイト単位"
|
inMb: "メガバイト単位"
|
||||||
iconUrl: "アイコン画像のURL"
|
iconUrl: "アイコン画像のURL"
|
||||||
bannerUrl: "バナー画像のURL"
|
bannerUrl: "バナー画像のURL"
|
||||||
|
basicInfo: "基本情報"
|
||||||
pinnedUsers: "ピン留めしたユーザー"
|
pinnedUsers: "ピン留めしたユーザー"
|
||||||
pinnedUsersDescription: "「みつける」ページとかにピン留めしたいユーザーをここに書けばええんやで。他ん人との名前は改行で区切ればええんやで。"
|
pinnedUsersDescription: "「みつける」ページとかにピン留めしたいユーザーをここに書けばええんやで。他ん人との名前は改行で区切ればええんやで。"
|
||||||
|
pinnedPages: "ピン留めページ"
|
||||||
|
pinnedNotes: "ピン留めされとるノート"
|
||||||
|
hcaptcha: "hCaptcha(キャプチャ)"
|
||||||
|
enableHcaptcha: "hCaptcha(キャプチャ)をつけとく"
|
||||||
hcaptchaSiteKey: "サイトキー"
|
hcaptchaSiteKey: "サイトキー"
|
||||||
hcaptchaSecretKey: "シークレットキー"
|
hcaptchaSecretKey: "シークレットキー"
|
||||||
|
recaptcha: "reCAPTCHA"
|
||||||
|
enableRecaptcha: "reCAPTCHA(リキャプチャ)を有効にする"
|
||||||
recaptchaSiteKey: "サイトキー"
|
recaptchaSiteKey: "サイトキー"
|
||||||
recaptchaSecretKey: "シークレットキー"
|
recaptchaSecretKey: "シークレットキー"
|
||||||
|
avoidMultiCaptchaConfirm: "ぎょうさんのCaptchaをつこてしまうと、仲良うせんことがあるんや。他のCaptchaをなおしとこか?別にキャンセルしてもろうたらCaptchaは消されへんで済むけど知らんで。"
|
||||||
antennas: "アンテナ"
|
antennas: "アンテナ"
|
||||||
manageAntennas: "アンテナいじる"
|
manageAntennas: "アンテナいじる"
|
||||||
name: "名前"
|
name: "名前"
|
||||||
|
@ -298,6 +351,7 @@ antennaExcludeKeywords: "除外キーワード"
|
||||||
antennaKeywordsDescription: "スペースで区切ったるとAND指定で、改行で区切ったるとOR指定や"
|
antennaKeywordsDescription: "スペースで区切ったるとAND指定で、改行で区切ったるとOR指定や"
|
||||||
notifyAntenna: "新しいノートを通知すんで"
|
notifyAntenna: "新しいノートを通知すんで"
|
||||||
withFileAntenna: "なんか添付されたノートだけ"
|
withFileAntenna: "なんか添付されたノートだけ"
|
||||||
|
enableServiceworker: "ServiceWorkerをつこて"
|
||||||
antennaUsersDescription: "ユーザー名を改行で区切ったってな"
|
antennaUsersDescription: "ユーザー名を改行で区切ったってな"
|
||||||
caseSensitive: "大文字と小文字は別もんや"
|
caseSensitive: "大文字と小文字は別もんや"
|
||||||
withReplies: "返信も入れたって"
|
withReplies: "返信も入れたって"
|
||||||
|
@ -312,9 +366,12 @@ popularUsers: "人気のユーザー"
|
||||||
recentlyUpdatedUsers: "ちょっと前に投稿したばっかりのユーザー"
|
recentlyUpdatedUsers: "ちょっと前に投稿したばっかりのユーザー"
|
||||||
recentlyRegisteredUsers: "ちょっと前に始めたばっかりのユーザー"
|
recentlyRegisteredUsers: "ちょっと前に始めたばっかりのユーザー"
|
||||||
recentlyDiscoveredUsers: "最近見っけたユーザー"
|
recentlyDiscoveredUsers: "最近見っけたユーザー"
|
||||||
|
exploreUsersCount: "{count}もユーザーおるで"
|
||||||
|
exploreFediverse: "Fediverseを探ってみる"
|
||||||
popularTags: "人気のタグ"
|
popularTags: "人気のタグ"
|
||||||
userList: "リスト"
|
userList: "リスト"
|
||||||
aboutMisskey: "FoundKeyってなんや?"
|
about: "情報"
|
||||||
|
aboutMisskey: "Misskeyってなんや?"
|
||||||
administrator: "管理者"
|
administrator: "管理者"
|
||||||
token: "トークン"
|
token: "トークン"
|
||||||
twoStepAuthentication: "二段階認証"
|
twoStepAuthentication: "二段階認証"
|
||||||
|
@ -333,6 +390,7 @@ share: "わけわけ"
|
||||||
notFound: "見つからへんね"
|
notFound: "見つからへんね"
|
||||||
notFoundDescription: "指定されたURLに該当するページはあらへんやった。"
|
notFoundDescription: "指定されたURLに該当するページはあらへんやった。"
|
||||||
uploadFolder: "とりあえずアップロードしたやつ置いとく所"
|
uploadFolder: "とりあえずアップロードしたやつ置いとく所"
|
||||||
|
cacheClear: "キャッシュをほかす"
|
||||||
markAsReadAllNotifications: "通知はもう全て読んだわっ"
|
markAsReadAllNotifications: "通知はもう全て読んだわっ"
|
||||||
markAsReadAllUnreadNotes: "投稿は全て読んだわっ"
|
markAsReadAllUnreadNotes: "投稿は全て読んだわっ"
|
||||||
markAsReadAllTalkMessages: "チャットはもうぜんぶ読んだわっ"
|
markAsReadAllTalkMessages: "チャットはもうぜんぶ読んだわっ"
|
||||||
|
@ -363,9 +421,10 @@ noMessagesYet: "まだチャットはあらへんで"
|
||||||
newMessageExists: "新しいメッセージがきたで"
|
newMessageExists: "新しいメッセージがきたで"
|
||||||
onlyOneFileCanBeAttached: "すまん、メッセージに添付できるファイルはひとつだけなんや。"
|
onlyOneFileCanBeAttached: "すまん、メッセージに添付できるファイルはひとつだけなんや。"
|
||||||
signinRequired: "ログインしてくれへん?"
|
signinRequired: "ログインしてくれへん?"
|
||||||
|
invitations: "来てや"
|
||||||
invitationCode: "招待コード"
|
invitationCode: "招待コード"
|
||||||
checking: "確認しとるで"
|
checking: "確認しとるで"
|
||||||
available: "利用できる"
|
available: "利用できる\n"
|
||||||
unavailable: "利用できん"
|
unavailable: "利用できん"
|
||||||
usernameInvalidFormat: "a~z、A~Z、0~9、_が使えるで"
|
usernameInvalidFormat: "a~z、A~Z、0~9、_が使えるで"
|
||||||
tooShort: "短すぎやろ!"
|
tooShort: "短すぎやろ!"
|
||||||
|
@ -375,33 +434,44 @@ normalPassword: "普通のパスワード"
|
||||||
strongPassword: "ええ感じのパスワード"
|
strongPassword: "ええ感じのパスワード"
|
||||||
passwordMatched: "よし!一致や!"
|
passwordMatched: "よし!一致や!"
|
||||||
passwordNotMatched: "一致しとらんで?"
|
passwordNotMatched: "一致しとらんで?"
|
||||||
|
signinWith: "{x}でログイン"
|
||||||
or: "それか"
|
or: "それか"
|
||||||
language: "言語"
|
language: "言語"
|
||||||
uiLanguage: "UIの表示言語"
|
uiLanguage: "UIの表示言語"
|
||||||
groupInvited: "グループに招待されとるで"
|
groupInvited: "グループに招待されとるで"
|
||||||
|
aboutX: "{x}について"
|
||||||
useOsNativeEmojis: "OSネイティブの絵文字を使う"
|
useOsNativeEmojis: "OSネイティブの絵文字を使う"
|
||||||
youHaveNoGroups: "グループがあらへんねぇ。"
|
youHaveNoGroups: "グループがあらへんねぇ。"
|
||||||
noHistory: "履歴はあらへんねぇ。"
|
noHistory: "履歴はあらへんねぇ。"
|
||||||
signinHistory: "ログイン履歴"
|
signinHistory: "ログイン履歴"
|
||||||
disableAnimatedMfm: "動きがやかましいMFMを止める"
|
disableAnimatedMfm: "動きがやかましいMFMを止める"
|
||||||
|
doing: "やっとるがな"
|
||||||
category: "カテゴリ"
|
category: "カテゴリ"
|
||||||
tags: "タグ"
|
tags: "タグ"
|
||||||
|
docSource: "このドキュメントのソース"
|
||||||
createAccount: "アカウントを作成"
|
createAccount: "アカウントを作成"
|
||||||
|
regenerate: "再生成"
|
||||||
fontSize: "フォントサイズ"
|
fontSize: "フォントサイズ"
|
||||||
noFollowRequests: "フォロー申請はあらへんで"
|
noFollowRequests: "フォロー申請はあらへんで"
|
||||||
openImageInNewTab: "画像を新しいタブで開く"
|
openImageInNewTab: "画像を新しいタブで開く"
|
||||||
dashboard: "ダッシュボード"
|
dashboard: "ダッシュボード"
|
||||||
local: "ローカル"
|
local: "ローカル"
|
||||||
remote: "リモート"
|
remote: "リモート"
|
||||||
|
total: "合計"
|
||||||
|
weekOverWeekChanges: "前週比"
|
||||||
dayOverDayChanges: "前日比"
|
dayOverDayChanges: "前日比"
|
||||||
appearance: "見た目"
|
appearance: "見た目"
|
||||||
clientSettings: "クライアントの設定"
|
clientSettings: "クライアントの設定"
|
||||||
|
accountSettings: "アカウントの設定"
|
||||||
|
promotion: "宣伝"
|
||||||
|
promote: "宣伝"
|
||||||
|
numberOfDays: "日数"
|
||||||
|
hideThisNote: "このノートは表示せんでいい"
|
||||||
showFeaturedNotesInTimeline: "タイムラインにおすすめのノートを表示してや"
|
showFeaturedNotesInTimeline: "タイムラインにおすすめのノートを表示してや"
|
||||||
objectStorage: "オブジェクトストレージ"
|
objectStorage: "オブジェクトストレージ"
|
||||||
useObjectStorage: "オブジェクトストレージを使う"
|
useObjectStorage: "オブジェクトストレージを使う"
|
||||||
objectStorageBaseUrl: "Base URL"
|
objectStorageBaseUrl: "Base URL"
|
||||||
objectStorageBaseUrlDesc: "参照に使うにURLやで。CDNやProxyを使用してるんならそのURL、S3: 'https://<bucket>.s3.amazonaws.com'、GCSとかなら:\
|
objectStorageBaseUrlDesc: "参照に使うにURLやで。CDNやProxyを使用してるんならそのURL、S3: 'https://<bucket>.s3.amazonaws.com'、GCSとかなら: 'https://storage.googleapis.com/<bucket>'。"
|
||||||
\ 'https://storage.googleapis.com/<bucket>'。"
|
|
||||||
objectStorageBucket: "Bucket"
|
objectStorageBucket: "Bucket"
|
||||||
objectStoragePrefix: "Prefix"
|
objectStoragePrefix: "Prefix"
|
||||||
objectStorageEndpoint: "Endpoint"
|
objectStorageEndpoint: "Endpoint"
|
||||||
|
@ -410,6 +480,8 @@ objectStorageUseSSL: "SSLを使う"
|
||||||
objectStorageUseProxy: "Proxyを使う"
|
objectStorageUseProxy: "Proxyを使う"
|
||||||
objectStorageUseProxyDesc: "API接続にproxy使わんのやったら切ってくれへん?"
|
objectStorageUseProxyDesc: "API接続にproxy使わんのやったら切ってくれへん?"
|
||||||
objectStorageSetPublicRead: "アップロードした時に'public-read'を設定してや"
|
objectStorageSetPublicRead: "アップロードした時に'public-read'を設定してや"
|
||||||
|
serverLogs: "サーバーログ"
|
||||||
|
deleteAll: "全て削除してや"
|
||||||
showFixedPostForm: "タイムラインの上の方で投稿できるようにやってくれへん?"
|
showFixedPostForm: "タイムラインの上の方で投稿できるようにやってくれへん?"
|
||||||
newNoteRecived: "新しいノートがあるで"
|
newNoteRecived: "新しいノートがあるで"
|
||||||
sounds: "サウンド"
|
sounds: "サウンド"
|
||||||
|
@ -420,6 +492,7 @@ popout: "ポップアウト"
|
||||||
volume: "音量"
|
volume: "音量"
|
||||||
masterVolume: "全体の音量"
|
masterVolume: "全体の音量"
|
||||||
details: "もっと"
|
details: "もっと"
|
||||||
|
chooseEmoji: "絵文字を選ぶ"
|
||||||
unableToProcess: "なんか作業が止まってしまったようやね"
|
unableToProcess: "なんか作業が止まってしまったようやね"
|
||||||
recentUsed: "最近使ったやつ"
|
recentUsed: "最近使ったやつ"
|
||||||
install: "インストール"
|
install: "インストール"
|
||||||
|
@ -433,9 +506,12 @@ sort: "仕分ける"
|
||||||
ascendingOrder: "小さい順"
|
ascendingOrder: "小さい順"
|
||||||
descendingOrder: "大きい順"
|
descendingOrder: "大きい順"
|
||||||
scratchpad: "スクラッチパッド"
|
scratchpad: "スクラッチパッド"
|
||||||
scratchpadDescription: "スクラッチパッドではAiScriptを色々試すことができるんや。FoundKeyに対して色々できるコードを書いて動かしてみたり、結果を見たりできるで。"
|
scratchpadDescription: "スクラッチパッドではAiScriptを色々試すことができるんや。Misskeyに対して色々できるコードを書いて動かしてみたり、結果を見たりできるで。"
|
||||||
output: "出力"
|
output: "出力"
|
||||||
|
script: "スクリプト"
|
||||||
|
disablePagesScript: "Pagesのスクリプトを無効にしてや"
|
||||||
updateRemoteUser: "リモートユーザー情報の更新してくれん?"
|
updateRemoteUser: "リモートユーザー情報の更新してくれん?"
|
||||||
|
deleteAllFiles: "すべてのファイルを削除"
|
||||||
deleteAllFilesConfirm: "ホンマにすべてのファイルを削除するん?消したもんはもう戻ってこんのやで?"
|
deleteAllFilesConfirm: "ホンマにすべてのファイルを削除するん?消したもんはもう戻ってこんのやで?"
|
||||||
removeAllFollowing: "フォローを全解除"
|
removeAllFollowing: "フォローを全解除"
|
||||||
removeAllFollowingDescription: "{host}からのフォローをすべて解除するで。そのインスタンスが消えて無くなった時とかには便利な機能やで。"
|
removeAllFollowingDescription: "{host}からのフォローをすべて解除するで。そのインスタンスが消えて無くなった時とかには便利な機能やで。"
|
||||||
|
@ -445,9 +521,11 @@ divider: "分割線"
|
||||||
relays: "リレー"
|
relays: "リレー"
|
||||||
addRelay: "リレーの追加"
|
addRelay: "リレーの追加"
|
||||||
inboxUrl: "inboxのURL"
|
inboxUrl: "inboxのURL"
|
||||||
|
addedRelays: "追加済みのリレー"
|
||||||
poll: "アンケート"
|
poll: "アンケート"
|
||||||
enablePlayer: "プレイヤーを開く"
|
enablePlayer: "プレイヤーを開く"
|
||||||
disablePlayer: "プレイヤーを閉じる"
|
disablePlayer: "プレイヤーを閉じる"
|
||||||
|
expandTweet: "ツイートを展開する"
|
||||||
themeEditor: "テーマエディター"
|
themeEditor: "テーマエディター"
|
||||||
description: "説明"
|
description: "説明"
|
||||||
author: "作者"
|
author: "作者"
|
||||||
|
@ -455,6 +533,7 @@ leaveConfirm: "未保存の変更があるで!ほかしてええか?"
|
||||||
manage: "管理"
|
manage: "管理"
|
||||||
plugins: "プラグイン"
|
plugins: "プラグイン"
|
||||||
deck: "デッキ"
|
deck: "デッキ"
|
||||||
|
undeck: "デッキ解除"
|
||||||
width: "幅"
|
width: "幅"
|
||||||
height: "高さ"
|
height: "高さ"
|
||||||
large: "大"
|
large: "大"
|
||||||
|
@ -478,7 +557,10 @@ userSaysSomething: "{name}が何か言ったようやで"
|
||||||
makeActive: "使うで"
|
makeActive: "使うで"
|
||||||
display: "表示"
|
display: "表示"
|
||||||
copy: "コピー"
|
copy: "コピー"
|
||||||
|
metrics: "メトリクス"
|
||||||
overview: "概要"
|
overview: "概要"
|
||||||
|
logs: "ログ"
|
||||||
|
delayed: "遅延"
|
||||||
database: "データベース"
|
database: "データベース"
|
||||||
channel: "チャンネル"
|
channel: "チャンネル"
|
||||||
create: "作成"
|
create: "作成"
|
||||||
|
@ -488,14 +570,19 @@ useGlobalSetting: "グローバル設定を使ってや"
|
||||||
other: "その他"
|
other: "その他"
|
||||||
regenerateLoginToken: "ログイントークンを再生成"
|
regenerateLoginToken: "ログイントークンを再生成"
|
||||||
behavior: "動作"
|
behavior: "動作"
|
||||||
|
sample: "サンプル"
|
||||||
abuseReports: "通報"
|
abuseReports: "通報"
|
||||||
reportAbuse: "通報"
|
reportAbuse: "通報"
|
||||||
reportAbuseOf: "{name}を通報する"
|
reportAbuseOf: "{name}を通報する"
|
||||||
send: "送信"
|
send: "送信"
|
||||||
abuseMarkAsResolved: "対応したで"
|
abuseMarkAsResolved: "対応したで"
|
||||||
openInNewTab: "新しいタブで開く"
|
openInNewTab: "新しいタブで開く"
|
||||||
|
openInSideView: "サイドビューで開く"
|
||||||
defaultNavigationBehaviour: "デフォルトのナビゲーション"
|
defaultNavigationBehaviour: "デフォルトのナビゲーション"
|
||||||
|
editTheseSettingsMayBreakAccount: "このへんの設定をようわからんままイジるとアカウントが壊れて使えんくなるかも知れへんで?"
|
||||||
instanceTicker: "ノートのインスタンス情報"
|
instanceTicker: "ノートのインスタンス情報"
|
||||||
|
waitingFor: "{x}を待っとるで"
|
||||||
|
random: "ランダム"
|
||||||
system: "システム"
|
system: "システム"
|
||||||
switchUi: "UI切り替え"
|
switchUi: "UI切り替え"
|
||||||
desktop: "デスクトップ"
|
desktop: "デスクトップ"
|
||||||
|
@ -516,16 +603,29 @@ center: "中央"
|
||||||
wide: "広い"
|
wide: "広い"
|
||||||
narrow: "狭い"
|
narrow: "狭い"
|
||||||
reloadToApplySetting: "設定はページリロード後に反映されるで。今リロードしとくか?"
|
reloadToApplySetting: "設定はページリロード後に反映されるで。今リロードしとくか?"
|
||||||
|
showTitlebar: "タイトルバーを見せる"
|
||||||
clearCache: "キャッシュをほかす"
|
clearCache: "キャッシュをほかす"
|
||||||
onlineUsersCount: "{n}人が起きとるで"
|
onlineUsersCount: "{n}人が起きとるで"
|
||||||
|
nUsers: "{n}ユーザー"
|
||||||
|
nNotes: "{n}ノート"
|
||||||
|
sendErrorReports: "エラーリポートを送る"
|
||||||
|
sendErrorReportsDescription: "オンにしたら、なんか変なことが起きたときにエラーの詳細がMisskeyに共有されて、ソフトウェアの品質向上に役立てられるんや。エラー情報には、OSのバージョン、ブラウザの種類、行動履歴などが含まれるで。"
|
||||||
|
myTheme: "マイテーマ"
|
||||||
backgroundColor: "背景"
|
backgroundColor: "背景"
|
||||||
accentColor: "アクセント"
|
accentColor: "アクセント"
|
||||||
textColor: "文字"
|
textColor: "文字"
|
||||||
saveAs: "名前を付けて保存"
|
saveAs: "名前を付けて保存"
|
||||||
|
advanced: "高度"
|
||||||
|
value: "値"
|
||||||
createdAt: "作成した日"
|
createdAt: "作成した日"
|
||||||
updatedAt: "更新日時"
|
updatedAt: "更新日時"
|
||||||
|
saveConfirm: "保存するで?"
|
||||||
deleteConfirm: "ホンマに削除するで?"
|
deleteConfirm: "ホンマに削除するで?"
|
||||||
|
registry: "レジストリ"
|
||||||
closeAccount: "アカウントを閉鎖する"
|
closeAccount: "アカウントを閉鎖する"
|
||||||
|
currentVersion: "現在のバージョン"
|
||||||
|
latestVersion: "最新のバージョン"
|
||||||
|
youAreRunningUpToDateClient: "今使ってるクライアントが最新やで!"
|
||||||
newVersionOfClientAvailable: "新しいバージョンのクライアントが使えるで。"
|
newVersionOfClientAvailable: "新しいバージョンのクライアントが使えるで。"
|
||||||
usageAmount: "使用量"
|
usageAmount: "使用量"
|
||||||
capacity: "容量"
|
capacity: "容量"
|
||||||
|
@ -534,18 +634,34 @@ editCode: "コードを編集"
|
||||||
apply: "適用"
|
apply: "適用"
|
||||||
receiveAnnouncementFromInstance: "インスタンスからのお知らせを受け取る"
|
receiveAnnouncementFromInstance: "インスタンスからのお知らせを受け取る"
|
||||||
emailNotification: "メール通知"
|
emailNotification: "メール通知"
|
||||||
|
inChannelSearch: "チャンネル内検索"
|
||||||
useReactionPickerForContextMenu: "右クリックでリアクションピッカーを開くようにする"
|
useReactionPickerForContextMenu: "右クリックでリアクションピッカーを開くようにする"
|
||||||
typingUsers: "{users}が今書きよるで"
|
typingUsers: "{users}が今書きよるで"
|
||||||
jumpToSpecifiedDate: "特定の日付にジャンプ"
|
jumpToSpecifiedDate: "特定の日付にジャンプ"
|
||||||
|
showingPastTimeline: "過去のタイムラインを表示してるで"
|
||||||
clear: "クリア"
|
clear: "クリア"
|
||||||
markAllAsRead: "もうみな読んでもうたわ"
|
markAllAsRead: "もうみな読んでもうたわ"
|
||||||
goBack: "戻る"
|
goBack: "戻る"
|
||||||
info: "情報"
|
info: "情報"
|
||||||
user: "ユーザー"
|
user: "ユーザー"
|
||||||
administration: "管理"
|
administration: "管理"
|
||||||
|
ads: "広告"
|
||||||
|
expiration: "期限"
|
||||||
|
memo: "メモ"
|
||||||
|
high: "高い"
|
||||||
|
middle: "中"
|
||||||
|
low: "低い"
|
||||||
|
global: "グローバル"
|
||||||
|
sent: "送信"
|
||||||
hashtags: "ハッシュタグ"
|
hashtags: "ハッシュタグ"
|
||||||
hide: "隠す"
|
hide: "隠す"
|
||||||
|
searchByGoogle: "探す"
|
||||||
indefinitely: "無期限"
|
indefinitely: "無期限"
|
||||||
|
file: "ファイル"
|
||||||
|
_ad:
|
||||||
|
back: "戻る"
|
||||||
|
_gallery:
|
||||||
|
unlike: "良くないわ"
|
||||||
_email:
|
_email:
|
||||||
_follow:
|
_follow:
|
||||||
title: "フォローされたで"
|
title: "フォローされたで"
|
||||||
|
@ -554,6 +670,7 @@ _email:
|
||||||
_plugin:
|
_plugin:
|
||||||
install: "プラグインのインストール"
|
install: "プラグインのインストール"
|
||||||
installWarn: "信頼できへんプラグインはインストールせんとってな"
|
installWarn: "信頼できへんプラグインはインストールせんとってな"
|
||||||
|
manage: "プラグインの管理"
|
||||||
_registry:
|
_registry:
|
||||||
scope: "スコープ"
|
scope: "スコープ"
|
||||||
key: "キー"
|
key: "キー"
|
||||||
|
@ -561,9 +678,14 @@ _registry:
|
||||||
domain: "ドメイン"
|
domain: "ドメイン"
|
||||||
createKey: "キーを作る"
|
createKey: "キーを作る"
|
||||||
_aboutMisskey:
|
_aboutMisskey:
|
||||||
about: "FoundKeyはsyuiloが2014年からずっと作ってはる、オープンソースなソフトウェアや。"
|
about: "Misskeyはsyuiloが2014年からずっと作ってはる、オープンソースなソフトウェアや。"
|
||||||
|
contributors: "主な貢献者"
|
||||||
allContributors: "全ての貢献者"
|
allContributors: "全ての貢献者"
|
||||||
source: "ソースコード"
|
source: "ソースコード"
|
||||||
|
translation: "Misskeyを翻訳"
|
||||||
|
donate: "Misskeyに寄付"
|
||||||
|
morePatrons: "他にもぎょうさんの人からサポートしてもろてんねん。ほんまおおきに🥰"
|
||||||
|
patrons: "支援者"
|
||||||
_mfm:
|
_mfm:
|
||||||
cheatSheet: "MFMチートシート"
|
cheatSheet: "MFMチートシート"
|
||||||
mention: "メンション"
|
mention: "メンション"
|
||||||
|
@ -614,6 +736,64 @@ _theme:
|
||||||
builtinThemes: "標準のテーマ"
|
builtinThemes: "標準のテーマ"
|
||||||
alreadyInstalled: "そのテーマはもうインストールされとるで?"
|
alreadyInstalled: "そのテーマはもうインストールされとるで?"
|
||||||
make: "テーマを作る"
|
make: "テーマを作る"
|
||||||
|
base: "ベース"
|
||||||
|
addConstant: "定数を追加"
|
||||||
|
defaultValue: "デフォルト値"
|
||||||
|
color: "色"
|
||||||
|
refProp: "プロパティを参照"
|
||||||
|
refConst: "定数を参照"
|
||||||
|
key: "キー"
|
||||||
|
func: "関数"
|
||||||
|
funcKind: "関数の種類"
|
||||||
|
argument: "引数"
|
||||||
|
basedProp: "元にするプロパティの名前"
|
||||||
|
alpha: "不透明度"
|
||||||
|
darken: "暗さ"
|
||||||
|
lighten: "明るさ"
|
||||||
|
keys:
|
||||||
|
accent: "アクセント"
|
||||||
|
bg: "背景"
|
||||||
|
fg: "文字"
|
||||||
|
focus: "フォーカス"
|
||||||
|
indicator: "インジケーター"
|
||||||
|
panel: "パネル"
|
||||||
|
shadow: "影"
|
||||||
|
header: "ヘッダー"
|
||||||
|
navBg: "サイドバーの背景"
|
||||||
|
navFg: "サイドバーの文字"
|
||||||
|
navHoverFg: "サイドバー文字(ホバー)"
|
||||||
|
navActive: "サイドバー文字(アクティブ)"
|
||||||
|
navIndicator: "サイドバーのインジケーター"
|
||||||
|
link: "リンク"
|
||||||
|
hashtag: "ハッシュタグ"
|
||||||
|
mention: "メンション"
|
||||||
|
mentionMe: "うち宛てのメンション"
|
||||||
|
renote: "Renote"
|
||||||
|
modalBg: "モーダルの背景"
|
||||||
|
divider: "分割線"
|
||||||
|
scrollbarHandle: "スクロールバーの取っ手"
|
||||||
|
scrollbarHandleHover: "スクロールバーの取っ手(ホバー)"
|
||||||
|
dateLabelFg: "日付ラベルの文字"
|
||||||
|
infoBg: "情報の背景"
|
||||||
|
infoFg: "情報の文字"
|
||||||
|
infoWarnBg: "警告の背景"
|
||||||
|
infoWarnFg: "警告の文字"
|
||||||
|
cwBg: "CW ボタンの背景"
|
||||||
|
cwFg: "CW ボタンの文字"
|
||||||
|
cwHoverBg: "CW ボタンの背景 (ホバー)"
|
||||||
|
toastBg: "通知トーストの背景"
|
||||||
|
toastFg: "通知トーストの文字"
|
||||||
|
buttonBg: "ボタンの背景"
|
||||||
|
buttonHoverBg: "ボタンの背景 (ホバー)"
|
||||||
|
inputBorder: "入力ボックスの縁取り"
|
||||||
|
listItemHoverBg: "リスト項目の背景 (ホバー)"
|
||||||
|
driveFolderBg: "ドライブフォルダーの背景"
|
||||||
|
wallpaperOverlay: "壁紙のオーバーレイ"
|
||||||
|
badge: "バッジ"
|
||||||
|
messageBg: "チャットの背景"
|
||||||
|
accentDarken: "アクセント (暗め)"
|
||||||
|
accentLighten: "アクセント (明るめ)"
|
||||||
|
fgHighlighted: "強調されとる文字"
|
||||||
_sfx:
|
_sfx:
|
||||||
note: "ノート"
|
note: "ノート"
|
||||||
noteMy: "ノート(自分)"
|
noteMy: "ノート(自分)"
|
||||||
|
@ -639,6 +819,7 @@ _tutorial:
|
||||||
_2fa:
|
_2fa:
|
||||||
alreadyRegistered: "もう設定終わっとるわ。"
|
alreadyRegistered: "もう設定終わっとるわ。"
|
||||||
_permissions:
|
_permissions:
|
||||||
|
"read:reactions": "リアクションを見る"
|
||||||
"write:votes": "投票する"
|
"write:votes": "投票する"
|
||||||
"read:pages": "ページを見る"
|
"read:pages": "ページを見る"
|
||||||
"read:page-likes": "ページのええやんを見る"
|
"read:page-likes": "ページのええやんを見る"
|
||||||
|
@ -679,7 +860,7 @@ _widgets:
|
||||||
aiscript: "AiScriptコンソール"
|
aiscript: "AiScriptコンソール"
|
||||||
_cw:
|
_cw:
|
||||||
hide: "隠す"
|
hide: "隠す"
|
||||||
show: "続き見して"
|
show: "続き見して!"
|
||||||
chars: "{count}文字"
|
chars: "{count}文字"
|
||||||
files: "{count}ファイル"
|
files: "{count}ファイル"
|
||||||
_poll:
|
_poll:
|
||||||
|
@ -758,7 +939,254 @@ _pages:
|
||||||
fontSansSerif: "サンセリフ"
|
fontSansSerif: "サンセリフ"
|
||||||
eyeCatchingImageSet: "アイキャッチ画像を設定"
|
eyeCatchingImageSet: "アイキャッチ画像を設定"
|
||||||
eyeCatchingImageRemove: "アイキャッチ画像を削除"
|
eyeCatchingImageRemove: "アイキャッチ画像を削除"
|
||||||
|
chooseBlock: "ブロックを追加"
|
||||||
|
selectType: "種類を選択"
|
||||||
|
contentBlocks: "コンテンツ"
|
||||||
|
inputBlocks: "入力"
|
||||||
|
specialBlocks: "特殊"
|
||||||
|
blocks:
|
||||||
|
text: "テキスト"
|
||||||
|
textarea: "テキストエリア"
|
||||||
|
section: "セクション"
|
||||||
|
image: "画像"
|
||||||
|
button: "ボタン"
|
||||||
|
if: "もし"
|
||||||
|
_if:
|
||||||
|
variable: "変数"
|
||||||
|
post: "投稿フォーム"
|
||||||
|
_post:
|
||||||
|
text: "内容"
|
||||||
|
canvasId: "キャンバスID"
|
||||||
|
textInput: "テキスト入力"
|
||||||
|
_textInput:
|
||||||
|
name: "変数名"
|
||||||
|
text: "タイトル"
|
||||||
|
default: "デフォルト値"
|
||||||
|
textareaInput: "複数行テキスト入力"
|
||||||
|
_textareaInput:
|
||||||
|
name: "変数名"
|
||||||
|
text: "タイトル"
|
||||||
|
default: "デフォルト値"
|
||||||
|
numberInput: "数値入力"
|
||||||
|
_numberInput:
|
||||||
|
name: "変数名"
|
||||||
|
text: "タイトル"
|
||||||
|
default: "デフォルト値"
|
||||||
|
canvas: "キャンバス"
|
||||||
|
_canvas:
|
||||||
|
id: "キャンバスID"
|
||||||
|
width: "幅"
|
||||||
|
height: "高さ"
|
||||||
|
note: "ノート埋め込み"
|
||||||
|
_note:
|
||||||
|
id: "ノートID"
|
||||||
|
detailed: "詳細な表示"
|
||||||
|
switch: "スイッチ"
|
||||||
|
_switch:
|
||||||
|
name: "変数名"
|
||||||
|
text: "タイトル"
|
||||||
|
default: "デフォルト値"
|
||||||
|
counter: "カウンター"
|
||||||
|
_counter:
|
||||||
|
name: "変数名"
|
||||||
|
text: "タイトル"
|
||||||
|
inc: "増加値"
|
||||||
|
_button:
|
||||||
|
text: "タイトル"
|
||||||
|
colored: "色付き"
|
||||||
|
action: "ボタンを押したときの動作"
|
||||||
|
_action:
|
||||||
|
dialog: "ダイアログを表示する"
|
||||||
|
_dialog:
|
||||||
|
content: "内容"
|
||||||
|
resetRandom: "乱数をリセット"
|
||||||
|
pushEvent: "イベントを送信させる"
|
||||||
|
_pushEvent:
|
||||||
|
event: "イベント名"
|
||||||
|
no-variable: "なし"
|
||||||
|
callAiScript: "AiScript呼び出し"
|
||||||
|
_callAiScript:
|
||||||
|
functionName: "関数名"
|
||||||
|
radioButton: "選択肢"
|
||||||
|
_radioButton:
|
||||||
|
name: "変数名"
|
||||||
|
title: "タイトル"
|
||||||
|
values: "改行で区切った選択肢"
|
||||||
|
default: "デフォルト値"
|
||||||
|
script:
|
||||||
|
categories:
|
||||||
|
flow: "制御"
|
||||||
|
logical: "論理演算"
|
||||||
|
operation: "計算"
|
||||||
|
comparison: "比較"
|
||||||
|
random: "ランダム"
|
||||||
|
value: "値"
|
||||||
|
fn: "関数"
|
||||||
|
text: "関数"
|
||||||
|
convert: "変換"
|
||||||
|
list: "リスト"
|
||||||
|
blocks:
|
||||||
|
text: "テキスト"
|
||||||
|
multiLineText: "テキスト(複数行)"
|
||||||
|
textList: "テキストのリスト"
|
||||||
|
strLen: "テキストの長さ"
|
||||||
|
_strLen:
|
||||||
|
arg1: "テキスト"
|
||||||
|
strPick: "文字取り出し"
|
||||||
|
_strPick:
|
||||||
|
arg1: "テキスト"
|
||||||
|
arg2: "文字の位置"
|
||||||
|
strReplace: "テキスト置き換え"
|
||||||
|
_strReplace:
|
||||||
|
arg1: "テキスト"
|
||||||
|
arg2: "置き換え前"
|
||||||
|
arg3: "置き換え後"
|
||||||
|
strReverse: "テキストを反転"
|
||||||
|
_strReverse:
|
||||||
|
arg1: "テキスト"
|
||||||
|
join: "テキストを連結"
|
||||||
|
_join:
|
||||||
|
arg1: "リスト"
|
||||||
|
arg2: "区切り"
|
||||||
|
add: "足す"
|
||||||
|
_add:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
subtract: "引く"
|
||||||
|
_subtract:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "A"
|
||||||
|
multiply: "掛ける"
|
||||||
|
_multiply:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
divide: "割る"
|
||||||
|
_divide:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
mod: "割った余り"
|
||||||
|
_mod:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
round: "小数を丸める"
|
||||||
|
_round:
|
||||||
|
arg1: "数値"
|
||||||
|
eq: "AとBが同じ"
|
||||||
|
_eq:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
notEq: "AとBが異なる"
|
||||||
|
_notEq:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
and: "AかつB"
|
||||||
|
_and:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
or: "AまたはB"
|
||||||
|
_or:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
lt: "< AがBより小さい"
|
||||||
|
_lt:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
gt: "> AがBより大きい"
|
||||||
|
_gt:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
ltEq: "<= AがBと同じか小さい"
|
||||||
|
_ltEq:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
gtEq: ">= AがBと同じか大きい"
|
||||||
|
_gtEq:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
if: "分岐"
|
||||||
|
_if:
|
||||||
|
arg1: "もし"
|
||||||
|
arg2: "なら"
|
||||||
|
arg3: "そうでなければ"
|
||||||
|
not: "否定"
|
||||||
|
_not:
|
||||||
|
arg1: "否定"
|
||||||
|
random: "ランダム"
|
||||||
|
_random:
|
||||||
|
arg1: "確率"
|
||||||
|
rannum: "乱数"
|
||||||
|
_rannum:
|
||||||
|
arg1: "最小"
|
||||||
|
arg2: "最大"
|
||||||
|
randomPick: "リストからランダムに選ぶ"
|
||||||
|
_randomPick:
|
||||||
|
arg1: "リスト"
|
||||||
|
dailyRandom: "ランダム (ユーザーごとに日替わり)"
|
||||||
|
_dailyRandom:
|
||||||
|
arg1: "確率"
|
||||||
|
dailyRannum: "乱数 (ユーザーごとに日替わり)"
|
||||||
|
_dailyRannum:
|
||||||
|
arg1: "最小"
|
||||||
|
arg2: "最大"
|
||||||
|
dailyRandomPick: "リストからランダムに選ぶ (ユーザーごとに日替わり)"
|
||||||
|
_dailyRandomPick:
|
||||||
|
arg1: "リスト"
|
||||||
|
seedRandom: "ランダム (シード)"
|
||||||
|
_seedRandom:
|
||||||
|
arg1: "シード"
|
||||||
|
arg2: "確率"
|
||||||
|
seedRannum: "乱数 (シード)"
|
||||||
|
_seedRannum:
|
||||||
|
arg1: "シード"
|
||||||
|
arg2: "最小"
|
||||||
|
arg3: "最大"
|
||||||
|
seedRandomPick: "リストからランダムに選択 (シード)"
|
||||||
|
_seedRandomPick:
|
||||||
|
arg1: "シード"
|
||||||
|
arg2: "リスト"
|
||||||
|
DRPWPM: "確率付きリストからランダムに選ぶ (ユーザーごとに日替わり)"
|
||||||
|
_DRPWPM:
|
||||||
|
arg1: "テキストのリスト"
|
||||||
|
pick: "リストから選ぶ"
|
||||||
|
_pick:
|
||||||
|
arg1: "リスト"
|
||||||
|
arg2: "位置"
|
||||||
|
listLen: "リストの長さを取得"
|
||||||
|
_listLen:
|
||||||
|
arg1: "リスト"
|
||||||
|
number: "数値"
|
||||||
|
stringToNumber: "テキストを数値に"
|
||||||
|
_stringToNumber:
|
||||||
|
arg1: "テキスト"
|
||||||
|
numberToString: "数値をテキストに"
|
||||||
|
_numberToString:
|
||||||
|
arg1: "数値"
|
||||||
|
splitStrByLine: "テキストを行で分割"
|
||||||
|
_splitStrByLine:
|
||||||
|
arg1: "テキスト"
|
||||||
|
ref: "変数"
|
||||||
|
aiScriptVar: "AiScript変数"
|
||||||
|
fn: "関数"
|
||||||
|
_fn:
|
||||||
|
slots: "スロット"
|
||||||
|
arg1: "出力"
|
||||||
|
for: "繰り返し"
|
||||||
|
_for:
|
||||||
|
arg1: "回数"
|
||||||
|
arg2: "処理"
|
||||||
|
thereIsEmptySlot: "スロット{slot}が空っぽやで!"
|
||||||
|
types:
|
||||||
|
string: "テキスト"
|
||||||
|
number: "数値"
|
||||||
|
boolean: "フラグ"
|
||||||
|
array: "リスト"
|
||||||
|
stringArray: "テキストのリスト"
|
||||||
|
emptySlot: "空のスロット"
|
||||||
|
enviromentVariables: "環境変数"
|
||||||
|
pageVariables: "ページ要素"
|
||||||
|
argVariables: "入力スロット"
|
||||||
_notification:
|
_notification:
|
||||||
|
fileUploaded: "ファイルが無事アップロードされたで。"
|
||||||
youGotMention: "{name}からのメンション"
|
youGotMention: "{name}からのメンション"
|
||||||
youGotReply: "{name}からのリプライ"
|
youGotReply: "{name}からのリプライ"
|
||||||
youWereFollowed: "フォローされたで"
|
youWereFollowed: "フォローされたで"
|
||||||
|
@ -766,6 +1194,7 @@ _notification:
|
||||||
yourFollowRequestAccepted: "フォローさせてもろたで"
|
yourFollowRequestAccepted: "フォローさせてもろたで"
|
||||||
youWereInvitedToGroup: "グループに招待されとるで"
|
youWereInvitedToGroup: "グループに招待されとるで"
|
||||||
_types:
|
_types:
|
||||||
|
all: "すべて"
|
||||||
follow: "フォロー"
|
follow: "フォロー"
|
||||||
mention: "メンション"
|
mention: "メンション"
|
||||||
renote: "Renote"
|
renote: "Renote"
|
||||||
|
@ -779,8 +1208,6 @@ _notification:
|
||||||
_deck:
|
_deck:
|
||||||
alwaysShowMainColumn: "いつもメインカラムを表示"
|
alwaysShowMainColumn: "いつもメインカラムを表示"
|
||||||
columnAlign: "カラムの寄せ"
|
columnAlign: "カラムの寄せ"
|
||||||
columnMargin: "カラム間のマージン"
|
|
||||||
columnHeaderHeight: "カラムのヘッダー幅"
|
|
||||||
addColumn: "カラムを追加"
|
addColumn: "カラムを追加"
|
||||||
swapLeft: "左に移動"
|
swapLeft: "左に移動"
|
||||||
swapRight: "右に移動"
|
swapRight: "右に移動"
|
||||||
|
@ -798,4 +1225,3 @@ _deck:
|
||||||
list: "リスト"
|
list: "リスト"
|
||||||
mentions: "あんた宛て"
|
mentions: "あんた宛て"
|
||||||
direct: "ダイレクト"
|
direct: "ダイレクト"
|
||||||
_services: {}
|
|
||||||
|
|
1
locales/jbo-EN.yml
Normal file
|
@ -0,0 +1 @@
|
||||||
|
---
|