Compare commits
643 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d67d163c78 | ||
|
|
a973bd56fe | ||
|
|
08b6fda065 | ||
|
|
d0cc145cb3 | ||
|
|
19588647d6 | ||
|
|
09da292f1a | ||
|
|
c8107ff936 | ||
|
|
b44afc1876 | ||
|
|
c26168f22e | ||
|
|
391be342ac | ||
|
|
16549f8f84 | ||
|
|
2d2b65d9fa | ||
|
|
a12ad37522 | ||
|
|
84541faf92 | ||
|
|
c7daaba370 | ||
|
|
f128813a5e | ||
|
|
699a55ea08 | ||
|
|
90a674f99b | ||
|
|
f236d36ed3 | ||
|
|
1b2200ccf4 | ||
|
|
c6353f3502 | ||
|
|
f09b8a78a0 | ||
|
|
5f741ac46e | ||
|
|
a434cfbe0d | ||
|
|
cd4c7689b7 | ||
|
|
3cc2049fb3 | ||
|
|
0d3117e472 | ||
|
|
b335975c97 | ||
|
|
5511b6e013 | ||
|
|
262d5ead51 | ||
|
|
a78b048720 | ||
|
|
e7dd5e155d | ||
|
|
5a3ea38bbf | ||
|
|
786521eba7 | ||
|
|
202cb3048a | ||
|
|
7e642cf700 | ||
|
|
7732aabc1e | ||
|
|
1cf9f52eca | ||
|
|
d1d5e10b72 | ||
|
|
c3fada264f | ||
|
|
45eeb74b83 | ||
|
|
b9a6e551cd | ||
|
|
c610e5ed9b | ||
|
|
c2c2824e50 | ||
|
|
01fab09683 | ||
|
|
e103904a04 | ||
|
|
56678cbac0 | ||
|
|
7fade8939d | ||
|
|
daa557f6a3 | ||
|
|
23a257ed86 | ||
|
|
05d0620491 | ||
|
|
5225139284 | ||
|
|
9b2e996cae | ||
|
|
6a561342a4 | ||
|
|
429bed2f91 | ||
|
|
200d593414 | ||
|
|
9dbe12135d | ||
|
|
318d7f2652 | ||
|
|
5a653531e2 | ||
|
|
c7cc3dcdfd | ||
|
|
61f54f8f74 | ||
|
|
a3b27fe3a1 | ||
|
|
380749051d | ||
|
|
81625f9fc5 | ||
|
|
d6ccb1725b | ||
|
|
5ce412aeda | ||
|
|
fe6d88e410 | ||
|
|
a21357248f | ||
|
|
70d710c9a9 | ||
|
|
183c82fb8d | ||
|
|
62cbb92154 | ||
|
|
7d70126072 | ||
|
|
54bfffa7b9 | ||
|
|
3f5b96bf62 | ||
|
|
3d8bbedf1b | ||
|
|
23c9f6a6ca | ||
|
|
5ba8d4949d | ||
|
|
a6befdd541 | ||
|
|
e5409db0e8 | ||
|
|
678d610cd6 | ||
|
|
466fe9c368 | ||
|
|
13feaea7b7 | ||
|
|
e52f9301fa | ||
|
|
1b58e18a6d | ||
|
|
b779ff08e0 | ||
|
|
811f9c22d7 | ||
|
|
c3529f0691 | ||
|
|
f9f574532e | ||
|
|
92dee53dd6 | ||
|
|
5d42ee2359 | ||
|
|
7c03d37caa | ||
|
|
b128b593c2 | ||
|
|
342e48ed77 | ||
|
|
052f8b265d | ||
|
|
2eedc91d74 | ||
|
|
410b9ad6bc | ||
|
|
24c6dff3e4 | ||
|
|
161db7636a | ||
|
|
796252357e | ||
|
|
b0344d52e9 | ||
|
|
8e6da3a0d9 | ||
|
|
756e4eaeec | ||
|
|
3126d0730a | ||
|
|
748e9f15df | ||
|
|
7c714f5788 | ||
|
|
d3c3ad839b | ||
|
|
168de3c316 | ||
|
|
9e20fc5c88 | ||
|
|
1ff5151786 | ||
|
|
a56738a331 | ||
|
|
2d04a3d6d2 | ||
|
|
e0a55b9100 | ||
|
|
0a57eecb3a | ||
|
|
51f98020f6 | ||
|
|
70123805e1 | ||
|
|
1448b11d00 | ||
|
|
490b81ed05 | ||
|
|
96f675abed | ||
|
|
4cd451c613 | ||
|
|
187792dfc4 | ||
|
|
3dde561fe5 | ||
|
|
a75ec45172 | ||
|
|
3732ddf75f | ||
|
|
b8d8097734 | ||
|
|
1092532292 | ||
|
|
8a79ba0e2b | ||
|
|
ca2949fbb4 | ||
|
|
17b373ac07 | ||
|
|
7aa66f438f | ||
|
|
73641fd78d | ||
|
|
64aac9d6ad | ||
|
|
2be13736c8 | ||
|
|
ff4f5fec1d | ||
|
|
7d64f8abe4 | ||
|
|
88e6929e9f | ||
|
|
5fb0a995dd | ||
|
|
58a04ce1a5 | ||
|
|
f74e0d9123 | ||
|
|
c6249b82d4 | ||
|
|
d6131c0b09 | ||
|
|
e62c810b7c | ||
|
|
2851a1a7ef | ||
|
|
12cd2709d6 | ||
|
|
bf54e58873 | ||
|
|
6b473e3a5c | ||
|
|
4b68abd963 | ||
|
|
0e764a2b3e | ||
|
|
9d1ed1eb0d | ||
|
|
a09a3465a2 | ||
|
|
001969efaf | ||
|
|
e7c515da9a | ||
|
|
8367c7dd49 | ||
|
|
55e6cae240 | ||
|
|
5553c3fb17 | ||
|
|
026265cb1e | ||
|
|
289c76a802 | ||
|
|
7c1bc1d6bc | ||
|
|
90cf0d32b5 | ||
|
|
88d934f922 | ||
|
|
abf11bb03c | ||
|
|
2d1f50303d | ||
|
|
9fb7c4091f | ||
|
|
2fdec27ab0 | ||
|
|
aff56469ed | ||
|
|
419cb7fbad | ||
|
|
7882851539 | ||
|
|
358299cf0e | ||
|
|
5a2af24869 | ||
|
|
6d35872af5 | ||
|
|
559dfdaa80 | ||
|
|
79c49bc926 | ||
|
|
76c538ad25 | ||
|
|
e76e358d98 | ||
|
|
76f37671b4 | ||
|
|
a9fc176c3c | ||
|
|
8b13e3c327 | ||
|
|
c3cd6ad2d2 | ||
|
|
3444b9c9c8 | ||
|
|
ca6fc9cd79 | ||
|
|
4747ae8b61 | ||
|
|
b6c50d63a0 | ||
|
|
52ebf2055e | ||
|
|
d0af2c2a98 | ||
|
|
10216af48a | ||
|
|
d0c8d537f5 | ||
|
|
1903aaf351 | ||
|
|
e6cdf1b995 | ||
|
|
2900d22cdc | ||
|
|
dc072d4706 | ||
|
|
8ae14f146b | ||
|
|
57444c6c3f | ||
|
|
759719d124 | ||
|
|
59782973be | ||
|
|
6c647ea91c | ||
|
|
c9763dabe1 | ||
|
|
da82754659 | ||
|
|
a3cc0ad18b | ||
|
|
2e8e5c2751 | ||
|
|
a60d83b101 | ||
|
|
6d45265763 | ||
|
|
42e84b77e1 | ||
|
|
24121cfadb | ||
|
|
93093dd288 | ||
|
|
53381c04e6 | ||
|
|
c6b64e57f1 | ||
|
|
9158426d0a | ||
|
|
cef26853df | ||
|
|
c0673884c5 | ||
|
|
c98eb64598 | ||
|
|
8836bd4f3b | ||
|
|
a58df29208 | ||
|
|
0d64a17d86 | ||
|
|
c886c09cdb | ||
|
|
e86d0007c6 | ||
|
|
624ee76e71 | ||
|
|
9406079cb7 | ||
|
|
cd2de7f893 | ||
|
|
342061803e | ||
|
|
05b8111c19 | ||
|
|
747a0b1791 | ||
|
|
c05586b53a | ||
|
|
0cfca4a618 | ||
|
|
2b8187f7ab | ||
|
|
291e7e7943 | ||
|
|
535d10f469 | ||
|
|
4cb58c0892 | ||
|
|
6721d27e3f | ||
|
|
da9dd7c423 | ||
|
|
867eb41618 | ||
|
|
6fdff13480 | ||
|
|
e581ead1ed | ||
|
|
7495206db2 | ||
|
|
fe87d16d46 | ||
|
|
0db54386cd | ||
|
|
772258b0b8 | ||
|
|
3ef002e14d | ||
|
|
b90d473ae5 | ||
|
|
f5091d524b | ||
|
|
ee5720df2c | ||
|
|
afe2037985 | ||
|
|
878cd18144 | ||
|
|
e8c8f67a09 | ||
|
|
7b29e7cf7e | ||
|
|
723d3e6871 | ||
|
|
f063dee12a | ||
|
|
db4b315d3d | ||
|
|
64d00b08a3 | ||
|
|
74736a941e | ||
|
|
c40366f20a | ||
|
|
d73e52ac2a | ||
|
|
9fac8a611f | ||
|
|
9c774a50f8 | ||
|
|
4f20ee1909 | ||
|
|
1440c5bc65 | ||
|
|
5829b2a7c1 | ||
|
|
e3c4bc18d0 | ||
|
|
8555ec2f72 | ||
|
|
8d7cefbbbe | ||
|
|
5aa5896b22 | ||
|
|
8a55bdd89d | ||
|
|
6444ef6444 | ||
|
|
701ab6cc68 | ||
|
|
3c6ce7a943 | ||
|
|
1e54afd217 | ||
|
|
4e90fd3a06 | ||
|
|
0463c6bb0f | ||
|
|
f31f986d66 | ||
|
|
c203c8302b | ||
|
|
dea4a7b389 | ||
|
|
0caf9b0706 | ||
|
|
5f655c9fd7 | ||
|
|
44aed53998 | ||
|
|
f9ff621d4a | ||
|
|
23a5a75778 | ||
|
|
a78475844a | ||
|
|
575cf2935e | ||
|
|
ae43aa1bc0 | ||
|
|
0ba71c6a47 | ||
|
|
643f7d1803 | ||
|
|
5d06da4db2 | ||
|
|
2934b09361 | ||
|
|
97341d3fa0 | ||
|
|
a95546ede0 | ||
|
|
7b44727b23 | ||
|
|
debe648a98 | ||
|
|
fda8cf77ed | ||
|
|
8aaab195c6 | ||
|
|
4096ddcbd0 | ||
|
|
ae6cc11ad2 | ||
|
|
dab7e527de | ||
|
|
8b92feac71 | ||
|
|
4beb3e5755 | ||
|
|
55f63229cd | ||
|
|
7827aeb695 | ||
|
|
cce768aaac | ||
|
|
80b83c0624 | ||
|
|
73b683bb4d | ||
|
|
d78a5c0863 | ||
|
|
683e5b6abe | ||
|
|
653b8f6352 | ||
|
|
9ec6afa375 | ||
|
|
adff5382ca | ||
|
|
704aabd703 | ||
|
|
f7b1ef0690 | ||
|
|
929982117f | ||
|
|
56a530d769 | ||
|
|
7ef75fb06b | ||
|
|
112a72abdf | ||
|
|
71813e03ee | ||
|
|
9b05b6ef28 | ||
|
|
54a87b25b3 | ||
|
|
55e97864bd | ||
|
|
95733c9490 | ||
|
|
e19ae644f1 | ||
|
|
ac4ea25267 | ||
|
|
611e4f34dc | ||
|
|
faf017f333 | ||
|
|
5eec896615 | ||
|
|
17f35174ea | ||
|
|
bf71b31123 | ||
|
|
9399a44c82 | ||
|
|
c96418806f | ||
|
|
7945eddef6 | ||
|
|
0ede390fef | ||
|
|
85959a3b9b | ||
|
|
946c3a25b9 | ||
|
|
f9d697128a | ||
|
|
532ef744f4 | ||
|
|
27a961814b | ||
|
|
5a5b65e9bf | ||
|
|
96673ad610 | ||
|
|
a9025aea0d | ||
|
|
f38ab0b973 | ||
|
|
150dac00cf | ||
|
|
bcb1a9c5d3 | ||
|
|
2e55aea584 | ||
|
|
4f5a3f0df5 | ||
|
|
e265b538cc | ||
|
|
b186504718 | ||
|
|
fc27890f13 | ||
|
|
a583939767 | ||
|
|
52e3bcfd29 | ||
|
|
85d29a3f9d | ||
|
|
18944d389d | ||
|
|
e90ac5d6a4 | ||
|
|
cb9a6ae774 | ||
|
|
3ef09aa6b2 | ||
|
|
4db22e45a2 | ||
|
|
f966d0b32c | ||
|
|
ba3879a95a | ||
|
|
c6cef0162d | ||
|
|
6d09aa86e9 | ||
|
|
b711f0f9c6 | ||
|
|
8fefb3a4c9 | ||
|
|
400cdf0f26 | ||
|
|
bce8c5a315 | ||
|
|
f44dc2dd05 | ||
|
|
df950d2fc5 | ||
|
|
5e1f804dd1 | ||
|
|
15de89f2f9 | ||
|
|
df647a415c | ||
|
|
fc66231f8e | ||
|
|
71df3e1566 | ||
|
|
168c22fc98 | ||
|
|
792ec23d7a | ||
|
|
ff625253ce | ||
|
|
8c872c6b22 | ||
|
|
541f5bc0a6 | ||
|
|
77ff7b9df0 | ||
|
|
203cc5075e | ||
|
|
7abfcd06da | ||
|
|
724f81c7f3 | ||
|
|
4d2e98af7b | ||
|
|
08221fdda7 | ||
|
|
c0f72970b9 | ||
|
|
18bc4a49e8 | ||
|
|
f90b6dbed4 | ||
|
|
d2d991ff34 | ||
|
|
190a5e175b | ||
|
|
a05f5a91b8 | ||
|
|
4d02ff27be | ||
|
|
df92b41d25 | ||
|
|
075af96338 | ||
|
|
64bbc55336 | ||
|
|
06c621acc1 | ||
|
|
d040dc19bc | ||
|
|
a38ae4a402 | ||
|
|
772063aade | ||
|
|
31c26354c5 | ||
|
|
64b331c5b2 | ||
|
|
94f8a145ec | ||
|
|
b357afa30a | ||
|
|
fee0437493 | ||
|
|
663b8864c1 | ||
|
|
c6eafdde30 | ||
|
|
f32ff95256 | ||
|
|
0452b75c3e | ||
|
|
97efd23ec8 | ||
|
|
ea3e311528 | ||
|
|
0565454419 | ||
|
|
35c79c2f29 | ||
|
|
e6089aec48 | ||
|
|
dd3f7834c3 | ||
|
|
f8cf18d880 | ||
|
|
2ac7e242b6 | ||
|
|
d8b604a94f | ||
|
|
a1f7b00981 | ||
|
|
b7ee42198c | ||
|
|
d66e4b7ff9 | ||
|
|
7f9789cf65 | ||
|
|
b41c18e033 | ||
|
|
3c73a7ec6d | ||
|
|
182c09d952 | ||
|
|
9fb86aed04 | ||
|
|
b8f7b13b05 | ||
|
|
1ee1d5b6d1 | ||
|
|
154c38c314 | ||
|
|
3c0626752a | ||
|
|
511ef77fb7 | ||
|
|
4df3ede500 | ||
|
|
e83c080af8 | ||
|
|
054220db70 | ||
|
|
97bff010a8 | ||
|
|
487a3079cd | ||
|
|
2d5158c680 | ||
|
|
837be06b72 | ||
|
|
7e0d8dd4d7 | ||
|
|
146fb23d7d | ||
|
|
61455ffe29 | ||
|
|
c267baafdc | ||
|
|
42248a306a | ||
|
|
694ec7ebe1 | ||
|
|
e3b3f8fac1 | ||
|
|
b390363b25 | ||
|
|
f6f8cdbcf2 | ||
|
|
f46f53b8a3 | ||
|
|
a2fcae4383 | ||
|
|
483f043768 | ||
|
|
f8e0f4f21f | ||
|
|
9c3613e96d | ||
|
|
d9cacdc86d | ||
|
|
aa3d2deeaa | ||
|
|
e64912545a | ||
|
|
b247be80cc | ||
|
|
343f2f1f33 | ||
|
|
2d590df900 | ||
|
|
ba56b2b9fd | ||
|
|
bf472b0c5e | ||
|
|
f7961f34c5 | ||
|
|
e369031a28 | ||
|
|
186d7bbfd9 | ||
|
|
60a11f8da5 | ||
|
|
1181fcdceb | ||
|
|
8cb9852058 | ||
|
|
53d46d1cbe | ||
|
|
275e1c8de9 | ||
|
|
d46eca4c87 | ||
|
|
2927fb1597 | ||
|
|
8c72e011d2 | ||
|
|
69662e24c3 | ||
|
|
96099ffe98 | ||
|
|
ae16b45c11 | ||
|
|
cfee87d3ef | ||
|
|
5fcf5bc635 | ||
|
|
14bcb813cc | ||
|
|
6af19794b6 | ||
|
|
8316186695 | ||
|
|
85d3023cd5 | ||
|
|
78414dee29 | ||
|
|
084135141f | ||
|
|
467a21f028 | ||
|
|
6e284c44d6 | ||
|
|
daf9a449e8 | ||
|
|
960268fd33 | ||
|
|
8c331da315 | ||
|
|
b0d626d862 | ||
|
|
a51fbd7316 | ||
|
|
063f372f3c | ||
|
|
987168b863 | ||
|
|
4ee40c3345 | ||
|
|
654daff7ce | ||
|
|
64e10e9619 | ||
|
|
b89cffe98d | ||
|
|
bd76ba702f | ||
|
|
5d52e9ce6b | ||
|
|
3c29027ca3 | ||
|
|
2ff3069d23 | ||
|
|
4198246351 | ||
|
|
2b6389b4dc | ||
|
|
d7df75ae6c | ||
|
|
11c30eccb3 | ||
|
|
ab8c6515b8 | ||
|
|
d4ad36fa41 | ||
|
|
4d688be3df | ||
|
|
d2b75f3501 | ||
|
|
46b78cb4ff | ||
|
|
5d6e0d0f37 | ||
|
|
e19d0a37bb | ||
|
|
dea3e2132e | ||
|
|
91c1ceefbd | ||
|
|
5c50989970 | ||
|
|
2a7e3b9c51 | ||
|
|
ab302df0ae | ||
|
|
21e5809993 | ||
|
|
c58afc67e8 | ||
|
|
8e344f2deb | ||
|
|
c28f4ffb3f | ||
|
|
2a40240310 | ||
|
|
0e9fba9287 | ||
|
|
2e3dd2a30a | ||
|
|
dda5f6559d | ||
|
|
4152e59638 | ||
|
|
9d5a92bce6 | ||
|
|
30172b92e6 | ||
|
|
8468a9d4c7 | ||
|
|
626cfb61ac | ||
|
|
9603f3fa4f | ||
|
|
619a1b9e53 | ||
|
|
62e76ad588 | ||
|
|
236d72685d | ||
|
|
72a5f7b1e2 | ||
|
|
d1c16a90b4 | ||
|
|
33a9783ae5 | ||
|
|
4d64fd665e | ||
|
|
96443384fe | ||
|
|
69939f1edb | ||
|
|
e3c0058942 | ||
|
|
3dc2361654 | ||
|
|
ec2f709018 | ||
|
|
ea06665c51 | ||
|
|
83b7010d6a | ||
|
|
71654cbe47 | ||
|
|
e8f96e848a | ||
|
|
251abf21d4 | ||
|
|
d103427932 | ||
|
|
74a4bd704c | ||
|
|
c62f3e0e45 | ||
|
|
a56a969433 | ||
|
|
1016f94bbb | ||
|
|
e98cce9aee | ||
|
|
d4bdb5d327 | ||
|
|
db4378415e | ||
|
|
9b594880c8 | ||
|
|
d44fc3db2f | ||
|
|
5133b0a0c0 | ||
|
|
815469304f | ||
|
|
c651921c79 | ||
|
|
d18c835221 | ||
|
|
e38335077e | ||
|
|
34c150cf73 | ||
|
|
24cb3ba091 | ||
|
|
c07eaef2d1 | ||
|
|
5df708ac9f | ||
|
|
38ffbe95e9 | ||
|
|
8bec4042fc | ||
|
|
ee7ef89dfb | ||
|
|
54a5246061 | ||
|
|
fa6eae2937 | ||
|
|
795be20ee1 | ||
|
|
87d3a06dcd | ||
|
|
8b5c917195 | ||
|
|
c7da0e59ff | ||
|
|
eb14acbe0c | ||
|
|
56860a6bef | ||
|
|
735687be21 | ||
|
|
592cdfa910 | ||
|
|
f2ad1a0406 | ||
|
|
fab0cc51b3 | ||
|
|
3a26acbdb2 | ||
|
|
8d0c31bcda | ||
|
|
0b99293d4c | ||
|
|
802153ff9b | ||
|
|
ec73e2d237 | ||
|
|
c32b020535 | ||
|
|
c4441804e2 | ||
|
|
6c9d80d4e8 | ||
|
|
a231f8d26c | ||
|
|
82af9320c0 | ||
|
|
fceebf7388 | ||
|
|
08da258b63 | ||
|
|
5994926440 | ||
|
|
30f2da4215 | ||
|
|
1a2229f886 | ||
|
|
1e166490d9 | ||
|
|
1c57e6f80a | ||
|
|
a6537a8748 | ||
|
|
842b75977b | ||
|
|
9b3dccf60c | ||
|
|
2d533e0cd8 | ||
|
|
9e1925c808 | ||
|
|
142d59be85 | ||
|
|
d9a5e06b5b | ||
|
|
b6889e9ac6 | ||
|
|
dc82203e9b | ||
|
|
6a30d32e7d | ||
|
|
d9780606b3 | ||
|
|
fffa32df48 | ||
|
|
cad49892d3 | ||
|
|
f0a29721c9 | ||
|
|
13caf37991 | ||
|
|
b71a602107 | ||
|
|
e6ce0dd43a | ||
|
|
094a5214f1 | ||
|
|
0932fcd114 | ||
|
|
f26643cea3 | ||
|
|
63b1689155 | ||
|
|
59dc929431 | ||
|
|
deaadc33db | ||
|
|
0ba92a4f29 | ||
|
|
7dc5009ec7 | ||
|
|
0ee827afd3 | ||
|
|
551d1b7f86 | ||
|
|
7ed1b695f5 | ||
|
|
7ad31b9b33 | ||
|
|
edd8992f7f | ||
|
|
96fe42cfcb | ||
|
|
c3872b4a38 | ||
|
|
762945113d | ||
|
|
037e9230fc | ||
|
|
3f59ebf986 | ||
|
|
e51e1d2b09 | ||
|
|
26cc49eb69 | ||
|
|
7987bb491c | ||
|
|
16b7ac5a87 | ||
|
|
5932cb8609 | ||
|
|
dfe694d39f | ||
|
|
278624f2c8 | ||
|
|
899f42c070 | ||
|
|
8ce1d4d6a3 | ||
|
|
52225d703b | ||
|
|
81739af7cb | ||
|
|
25473222cc | ||
|
|
0b7be70935 | ||
|
|
818b71abd6 | ||
|
|
25575e8510 | ||
|
|
6c85adcf23 | ||
|
|
5dc92d7a40 | ||
|
|
4e2b966b80 | ||
|
|
d34f8c3cb9 | ||
|
|
9049ecb1cf | ||
|
|
7bebea087c | ||
|
|
1c79e30436 | ||
|
|
1d7933349b |
@@ -4,14 +4,9 @@ executors:
|
|||||||
default:
|
default:
|
||||||
working_directory: /tmp/workspace
|
working_directory: /tmp/workspace
|
||||||
docker:
|
docker:
|
||||||
- image: misskey/ci:latest
|
- image: misskey/ci:v11-node11
|
||||||
- image: circleci/mongo:latest
|
|
||||||
with-redis:
|
|
||||||
working_directory: /tmp/workspace
|
|
||||||
docker:
|
|
||||||
- image: misskey/ci:latest
|
|
||||||
- image: circleci/mongo:latest
|
|
||||||
- image: circleci/redis:latest
|
- image: circleci/redis:latest
|
||||||
|
- image: circleci/postgres:latest
|
||||||
docker:
|
docker:
|
||||||
working_directory: /tmp/workspace
|
working_directory: /tmp/workspace
|
||||||
docker:
|
docker:
|
||||||
@@ -62,22 +57,10 @@ jobs:
|
|||||||
executor:
|
executor:
|
||||||
type: string
|
type: string
|
||||||
default: "default"
|
default: "default"
|
||||||
without_redis:
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
executor: <<parameters.executor>>
|
executor: <<parameters.executor>>
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /tmp/workspace
|
at: /tmp/workspace
|
||||||
- when:
|
|
||||||
condition: <<parameters.without_redis>>
|
|
||||||
steps:
|
|
||||||
- run:
|
|
||||||
name: Configure
|
|
||||||
command: |
|
|
||||||
mv .config/test.yml .config/test_redis.yml
|
|
||||||
touch .config/test.yml
|
|
||||||
cat .config/test_redis.yml | while IFS= read line; do if [[ "$line" = '# __REDIS__' ]]; then break; else echo "$line" >> .config/test.yml; fi; done
|
|
||||||
- run:
|
- run:
|
||||||
name: Test
|
name: Test
|
||||||
command: |
|
command: |
|
||||||
@@ -140,32 +123,14 @@ workflows:
|
|||||||
branches:
|
branches:
|
||||||
only: master
|
only: master
|
||||||
- test:
|
- test:
|
||||||
name: manual-test-with-redis
|
name: manual-test
|
||||||
executor: with-redis
|
|
||||||
requires:
|
requires:
|
||||||
- manual-build
|
- manual-build
|
||||||
filters:
|
filters:
|
||||||
branches:
|
branches:
|
||||||
ignore: master
|
ignore: master
|
||||||
- test:
|
- test:
|
||||||
name: auto-test-without-redis
|
name: auto-test
|
||||||
executor: with-redis
|
|
||||||
requires:
|
|
||||||
- auto-build
|
|
||||||
filters:
|
|
||||||
branches:
|
|
||||||
only: master
|
|
||||||
- test:
|
|
||||||
name: manual-test-with-redis
|
|
||||||
without_redis: true
|
|
||||||
requires:
|
|
||||||
- manual-build
|
|
||||||
filters:
|
|
||||||
branches:
|
|
||||||
ignore: master
|
|
||||||
- test:
|
|
||||||
name: auto-test-without-redis
|
|
||||||
without_redis: true
|
|
||||||
requires:
|
requires:
|
||||||
- auto-build
|
- auto-build
|
||||||
filters:
|
filters:
|
||||||
|
|||||||
@@ -6,8 +6,6 @@ mongodb:
|
|||||||
db: misskey
|
db: misskey
|
||||||
user: syuilo
|
user: syuilo
|
||||||
pass: ''
|
pass: ''
|
||||||
drive:
|
|
||||||
storage: 'db'
|
|
||||||
redis:
|
redis:
|
||||||
host: localhost
|
host: localhost
|
||||||
port: 6379
|
port: 6379
|
||||||
|
|||||||
@@ -6,8 +6,6 @@ mongodb:
|
|||||||
db: test-misskey
|
db: test-misskey
|
||||||
user: admin
|
user: admin
|
||||||
pass: ''
|
pass: ''
|
||||||
drive:
|
|
||||||
storage: 'db'
|
|
||||||
# __REDIS__
|
# __REDIS__
|
||||||
redis:
|
redis:
|
||||||
host: localhost
|
host: localhost
|
||||||
|
|||||||
4
.config/docker_example.env
Normal file
4
.config/docker_example.env
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
# db settings
|
||||||
|
POSTGRES_PASSWORD=example-misskey-pass
|
||||||
|
POSTGRES_USER=example-misskey-user
|
||||||
|
POSTGRES_DB=misskey
|
||||||
@@ -1,8 +1,16 @@
|
|||||||
|
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||||
|
# Misskey configuration
|
||||||
|
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||||
|
|
||||||
|
# ┌─────┐
|
||||||
|
#───┘ URL └─────────────────────────────────────────────────────
|
||||||
|
|
||||||
# Final accessible URL seen by a user.
|
# Final accessible URL seen by a user.
|
||||||
url: https://example.tld/
|
url: https://example.tld/
|
||||||
|
|
||||||
|
# ┌───────────────────────┐
|
||||||
|
#───┘ Port and TLS settings └───────────────────────────────────
|
||||||
|
|
||||||
### Port and TLS settings ######################################
|
|
||||||
#
|
#
|
||||||
# Misskey supports two deployment options for public.
|
# Misskey supports two deployment options for public.
|
||||||
#
|
#
|
||||||
@@ -34,82 +42,72 @@ url: https://example.tld/
|
|||||||
|
|
||||||
# To use option 2, uncomment below lines.
|
# To use option 2, uncomment below lines.
|
||||||
#port: 443
|
#port: 443
|
||||||
#
|
|
||||||
#https:
|
#https:
|
||||||
# # path for certification
|
# # path for certification
|
||||||
# key: /etc/letsencrypt/live/example.tld/privkey.pem
|
# key: /etc/letsencrypt/live/example.tld/privkey.pem
|
||||||
# cert: /etc/letsencrypt/live/example.tld/fullchain.pem
|
# cert: /etc/letsencrypt/live/example.tld/fullchain.pem
|
||||||
|
|
||||||
################################################################
|
# ┌──────────────────────────┐
|
||||||
|
#───┘ PostgreSQL configuration └────────────────────────────────
|
||||||
|
|
||||||
|
db:
|
||||||
mongodb:
|
|
||||||
host: localhost
|
host: localhost
|
||||||
port: 27017
|
port: 5432
|
||||||
|
|
||||||
|
# Database name
|
||||||
db: misskey
|
db: misskey
|
||||||
|
|
||||||
|
# Auth
|
||||||
user: example-misskey-user
|
user: example-misskey-user
|
||||||
pass: example-misskey-pass
|
pass: example-misskey-pass
|
||||||
|
|
||||||
drive:
|
# ┌─────────────────────┐
|
||||||
storage: 'db'
|
#───┘ Redis configuration └─────────────────────────────────────
|
||||||
|
|
||||||
# OR
|
redis:
|
||||||
|
host: localhost
|
||||||
# storage: 'minio'
|
port: 6379
|
||||||
# bucket:
|
|
||||||
# prefix:
|
|
||||||
# config:
|
|
||||||
# endPoint:
|
|
||||||
# port:
|
|
||||||
# useSSL:
|
|
||||||
# accessKey:
|
|
||||||
# secretKey:
|
|
||||||
|
|
||||||
# S3 example
|
|
||||||
# storage: 'minio'
|
|
||||||
# bucket: bucket-name
|
|
||||||
# prefix: files
|
|
||||||
# config:
|
|
||||||
# endPoint: s3-us-west-2.amazonaws.com
|
|
||||||
# region: us-west-2
|
|
||||||
# useSSL: true
|
|
||||||
# accessKey: XXX
|
|
||||||
# secretKey: YYY
|
|
||||||
|
|
||||||
# S3 example (with CDN, custom domain)
|
|
||||||
# storage: 'minio'
|
|
||||||
# bucket: drive.example.com
|
|
||||||
# prefix: files
|
|
||||||
# baseUrl: https://drive.example.com
|
|
||||||
# config:
|
|
||||||
# endPoint: s3-us-west-2.amazonaws.com
|
|
||||||
# region: us-west-2
|
|
||||||
# useSSL: true
|
|
||||||
# accessKey: XXX
|
|
||||||
# secretKey: YYY
|
|
||||||
|
|
||||||
# If enabled:
|
|
||||||
# The first account created is automatically marked as Admin.
|
|
||||||
autoAdmin: true
|
|
||||||
|
|
||||||
#
|
|
||||||
# Below settings are optional
|
|
||||||
#
|
|
||||||
|
|
||||||
# Redis
|
|
||||||
#redis:
|
|
||||||
# host: localhost
|
|
||||||
# port: 6379
|
|
||||||
#pass: example-pass
|
#pass: example-pass
|
||||||
|
|
||||||
# Elasticsearch
|
# ┌─────────────────────────────┐
|
||||||
|
#───┘ Elasticsearch configuration └─────────────────────────────
|
||||||
|
|
||||||
#elasticsearch:
|
#elasticsearch:
|
||||||
# host: localhost
|
# host: localhost
|
||||||
# port: 9200
|
# port: 9200
|
||||||
# pass: null
|
# pass: null
|
||||||
|
|
||||||
|
# ┌───────────────┐
|
||||||
|
#───┘ 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 └─────────────────────────────────────
|
||||||
|
|
||||||
|
# If enabled:
|
||||||
|
# The first account created is automatically marked as Admin.
|
||||||
|
autoAdmin: true
|
||||||
|
|
||||||
# Whether disable HSTS
|
# Whether disable HSTS
|
||||||
#disableHsts: true
|
#disableHsts: true
|
||||||
|
|
||||||
# Clustering
|
# Clustering
|
||||||
#clusterLimit: 1
|
#clusterLimit: 1
|
||||||
|
|
||||||
|
# IP address family used for outgoing request (ipv4, ipv6 or dual)
|
||||||
|
#outgoingAddressFamily: ipv4
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
var user = {
|
|
||||||
user: 'example-misskey-user',
|
|
||||||
pwd: 'example-misskey-pass',
|
|
||||||
roles: [
|
|
||||||
{
|
|
||||||
role: 'readWrite',
|
|
||||||
db: 'misskey'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
};
|
|
||||||
|
|
||||||
db.createUser(user);
|
|
||||||
|
|
||||||
6
.dockerignore
Executable file → Normal file
6
.dockerignore
Executable file → Normal file
@@ -5,8 +5,8 @@
|
|||||||
.vscode
|
.vscode
|
||||||
Dockerfile
|
Dockerfile
|
||||||
build/
|
build/
|
||||||
|
db/
|
||||||
docker-compose.yml
|
docker-compose.yml
|
||||||
node_modules/
|
|
||||||
mongo/
|
|
||||||
redis/
|
|
||||||
elasticsearch/
|
elasticsearch/
|
||||||
|
node_modules/
|
||||||
|
redis/
|
||||||
|
|||||||
4
.github/CODEOWNERS
vendored
4
.github/CODEOWNERS
vendored
@@ -1,7 +1,7 @@
|
|||||||
# PATH OWNERS
|
# PATH OWNERS
|
||||||
/.autogen/ @acid-chicken
|
/.autogen/ @acid-chicken
|
||||||
/.circleci/ @syuilo @acid-chicken
|
/.circleci/ @syuilo @acid-chicken
|
||||||
/.config/ @syuilo @AyaMorisawa @mei23 @acid-chicken
|
/.config/ @syuilo @AyaMorisawa @mei23 @acid-chicken @rinsuki
|
||||||
# /.config/mongo_initdb_example.js @khws4v1
|
# /.config/mongo_initdb_example.js @khws4v1
|
||||||
/.github/ @syuilo @AyaMorisawa @acid-chicken
|
/.github/ @syuilo @AyaMorisawa @acid-chicken
|
||||||
/.vscode/ @acid-chicken
|
/.vscode/ @acid-chicken
|
||||||
@@ -12,7 +12,7 @@
|
|||||||
# /docs/*.fr.md @BoFFire
|
# /docs/*.fr.md @BoFFire
|
||||||
# /docs/docker.*.md @khws4v1
|
# /docs/docker.*.md @khws4v1
|
||||||
/locales/ @syuilo
|
/locales/ @syuilo
|
||||||
/src/ @syuilo @AyaMorisawa @mei23 @acid-chicken
|
/src/ @syuilo @AyaMorisawa @mei23 @acid-chicken @rinsuki
|
||||||
# /src/crypto_key.cc @akihikodaki
|
# /src/crypto_key.cc @akihikodaki
|
||||||
# /src/crypto_key.d.ts @akihikodaki
|
# /src/crypto_key.d.ts @akihikodaki
|
||||||
/.dockerignore @syuilo # @khws4v1
|
/.dockerignore @syuilo # @khws4v1
|
||||||
|
|||||||
10
.github/ISSUE_TEMPLATE/01_bug-report.md
vendored
10
.github/ISSUE_TEMPLATE/01_bug-report.md
vendored
@@ -7,24 +7,24 @@ assignees: ''
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Summary
|
## 💡 Summary
|
||||||
|
|
||||||
<!-- Tell us what the bug is -->
|
<!-- Tell us what the bug is -->
|
||||||
|
|
||||||
## Expected Behavior
|
## 🙂 Expected Behavior
|
||||||
|
|
||||||
<!--- Tell us what should happen -->
|
<!--- Tell us what should happen -->
|
||||||
|
|
||||||
## Actual Behavior
|
## ☹️ Actual Behavior
|
||||||
|
|
||||||
<!--- Tell us what happens instead of the expected behavior -->
|
<!--- Tell us what happens instead of the expected behavior -->
|
||||||
|
|
||||||
## Steps to Reproduce
|
## 📝 Steps to Reproduce
|
||||||
|
|
||||||
1.
|
1.
|
||||||
2.
|
2.
|
||||||
3.
|
3.
|
||||||
|
|
||||||
## Environment
|
## 📌 Environment
|
||||||
|
|
||||||
<!-- Tell us where on the platform it happens -->
|
<!-- Tell us where on the platform it happens -->
|
||||||
|
|||||||
25
.gitignore
vendored
25
.gitignore
vendored
@@ -1,21 +1,34 @@
|
|||||||
|
# Visual Studio Code
|
||||||
|
/.vscode
|
||||||
|
|
||||||
|
# Intelij-IDEA
|
||||||
|
/.idea
|
||||||
|
|
||||||
|
# Node.js
|
||||||
|
/node_modules
|
||||||
|
|
||||||
|
# yarn
|
||||||
|
yarn.lock
|
||||||
|
|
||||||
|
# config
|
||||||
/.config/*
|
/.config/*
|
||||||
!/.config/example.yml
|
!/.config/example.yml
|
||||||
!/.config/mongo_initdb_example.js
|
!/.config/mongo_initdb_example.js
|
||||||
/.vscode
|
|
||||||
/node_modules
|
# misskey
|
||||||
/build
|
/build
|
||||||
/built
|
/built
|
||||||
built
|
|
||||||
/data
|
/data
|
||||||
/.cache-loader
|
/.cache-loader
|
||||||
|
/db
|
||||||
|
/elasticsearch
|
||||||
npm-debug.log
|
npm-debug.log
|
||||||
*.pem
|
*.pem
|
||||||
run.bat
|
run.bat
|
||||||
api-docs.json
|
api-docs.json
|
||||||
*.log
|
*.log
|
||||||
/redis
|
/redis
|
||||||
/mongo
|
|
||||||
/elasticsearch
|
|
||||||
*.code-workspace
|
*.code-workspace
|
||||||
yarn.lock
|
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
/files
|
||||||
|
ormconfig.json
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
v11.7.0
|
v12.1.0
|
||||||
|
|||||||
514
CHANGELOG.md
514
CHANGELOG.md
@@ -5,6 +5,520 @@ If you encounter any problems with updating, please try the following:
|
|||||||
1. `npm run clean` or `npm run cleanall`
|
1. `npm run clean` or `npm run cleanall`
|
||||||
2. Retry update (Don't forget `npm i`)
|
2. Retry update (Don't forget `npm i`)
|
||||||
|
|
||||||
|
Migration
|
||||||
|
------------------------------
|
||||||
|
#### 1
|
||||||
|
```
|
||||||
|
npm i -g ts-node
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 2
|
||||||
|
```
|
||||||
|
npm run migrate
|
||||||
|
```
|
||||||
|
|
||||||
|
How to migrate to v11 from v10
|
||||||
|
------------------------------
|
||||||
|
### 移行の注意点
|
||||||
|
**以下のデータは引き継がれません**
|
||||||
|
* 通知
|
||||||
|
* リモートの投稿
|
||||||
|
* リバーシの対局
|
||||||
|
|
||||||
|
### 手順
|
||||||
|
1. v11をインストールしたい場所に syuilo/misskey をクローン
|
||||||
|
2. config を設定する
|
||||||
|
* PostgreSQL(`db`)の設定とは別に、v10からMongoDBの設定をコピペしてくる(例は下にあります)
|
||||||
|
* `id`の設定を`meid`または`objectid`にする
|
||||||
|
|
||||||
|
``` yml
|
||||||
|
db:
|
||||||
|
host: localhost
|
||||||
|
port: 5432
|
||||||
|
db: misskey
|
||||||
|
user: x
|
||||||
|
pass: x
|
||||||
|
|
||||||
|
mongodb:
|
||||||
|
user: x
|
||||||
|
pass: x
|
||||||
|
host: localhost
|
||||||
|
port: 27017
|
||||||
|
db: misskey
|
||||||
|
```
|
||||||
|
3. migration ブランチに切り替え
|
||||||
|
4. `npm i`
|
||||||
|
5. `npm run build`
|
||||||
|
6. `npm run init`
|
||||||
|
7. `npm run migrate`
|
||||||
|
8. master ブランチに戻す
|
||||||
|
9. enjoy
|
||||||
|
|
||||||
|
11.18.1 (2019/05/21)
|
||||||
|
--------------------
|
||||||
|
### 🐛Fixes
|
||||||
|
* 11.18.0からフォロー/フォロワーのもっと読み込む機能が作動していない問題を修正
|
||||||
|
* iOSで投稿フォームに自動フォーカスしない問題を修正
|
||||||
|
* ダークモードでグループ名がみにくい問題を修正
|
||||||
|
* ハッシュタグタイムラインを読み込んだ時にプログレスバーが残り続ける問題を修正
|
||||||
|
* ユーザビリティの修正
|
||||||
|
|
||||||
|
11.18.0 (2019/05/21)
|
||||||
|
--------------------
|
||||||
|
### ✨Improvements
|
||||||
|
* デザインの調整
|
||||||
|
|
||||||
|
### 🐛Fixes
|
||||||
|
* 投稿の削除が連合しない問題を修正
|
||||||
|
|
||||||
|
11.17.1 (2019/05/20)
|
||||||
|
--------------------
|
||||||
|
### 🐛Fixes
|
||||||
|
* トークの通知インジケーターが点灯し続ける問題を修正
|
||||||
|
* ユーザーグループの読み込みでエラーになることがある問題を修正
|
||||||
|
|
||||||
|
11.17.0 (2019/05/19)
|
||||||
|
--------------------
|
||||||
|
### 注意
|
||||||
|
このアップデートを適用した後、プロセスを起動(もしくは再起動)する前に[マイグレーション](#migration)の手順を実行してください
|
||||||
|
|
||||||
|
### ✨Improvements
|
||||||
|
* ユーザーグループを招待制に
|
||||||
|
|
||||||
|
### 🐛Fixes
|
||||||
|
* フォロー申請が表示されない問題を修正
|
||||||
|
* トークの通知インジケーターが点灯し続ける問題を修正
|
||||||
|
* 自分を自分のグループから削除できる問題を修正
|
||||||
|
* 新しいタブでグループトークを開くことができない問題を修正
|
||||||
|
|
||||||
|
11.16.1 (2019/05/19)
|
||||||
|
--------------------
|
||||||
|
### 🐛Fixes
|
||||||
|
* Dockerで起動できない問題を修正
|
||||||
|
|
||||||
|
11.16.0 (2019/05/19)
|
||||||
|
--------------------
|
||||||
|
### 注意
|
||||||
|
このアップデートを適用した後、プロセスを起動(もしくは再起動)する前に[マイグレーション](#migration)の手順を実行してください
|
||||||
|
|
||||||
|
### ✨Improvements
|
||||||
|
* ユーザーグループ機能を追加
|
||||||
|
* ページに「いいね」できるように
|
||||||
|
* UIの改善
|
||||||
|
|
||||||
|
### 🐛Fixes
|
||||||
|
* トークを読み込むときに最大数指定できなかった問題を修正
|
||||||
|
|
||||||
|
11.15.0 (2019/05/16)
|
||||||
|
--------------------
|
||||||
|
### ✨Improvements
|
||||||
|
* 管理画面でreCAPTCHAのプレビューを表示するように
|
||||||
|
|
||||||
|
### 🐛Fixes
|
||||||
|
* オブジェクトストレージのリージョンの設定が反映されない問題を修正
|
||||||
|
|
||||||
|
11.14.0 (2019/05/16)
|
||||||
|
--------------------
|
||||||
|
### 注意
|
||||||
|
このバージョンからオブジェクトストレージの設定は設定ファイルではなく管理画面から行うようになりました。
|
||||||
|
オブジェクトストレージを使用している場合、アップデートした後管理画面にアクセスしオブジェクトストレージの設定を再度行ってください。
|
||||||
|
|
||||||
|
### ✨Improvements
|
||||||
|
* 特定のユーザーのファイルをすべて削除できるように
|
||||||
|
* インスタンスの設定画面を整理
|
||||||
|
|
||||||
|
### 🐛Fixes
|
||||||
|
* GIF画像のサムネイルが生成されないのを修正
|
||||||
|
* 管理画面の「ログ」で複数の除外条件を設定できない問題を修正
|
||||||
|
|
||||||
|
11.13.0 (2019/05/14)
|
||||||
|
--------------------
|
||||||
|
### 注意
|
||||||
|
このアップデートを適用した後、プロセスを起動(もしくは再起動)する前に[マイグレーション](#migration)の手順を実行してください
|
||||||
|
|
||||||
|
### ✨Improvements
|
||||||
|
* 利用規約URL、リポジトリURL、フィードバックURLを設定できるように
|
||||||
|
* 特定のインスタンスのファイルをすべて削除できるように
|
||||||
|
* _blankで外部リンクされる可能性がある箇所にnoopenerを追加
|
||||||
|
* ユーザーや外部インスタンスが生成するリンクにnofollowを追加
|
||||||
|
* リモートのユーザーページやノートページにnoindexを追加
|
||||||
|
* 自分のユーザーメニューにはミュートなどを表示しないように
|
||||||
|
* デザインの調整
|
||||||
|
|
||||||
|
### 🐛Fixes
|
||||||
|
* インスタンスブロックを設定できない問題を修正
|
||||||
|
* ピン留め投稿の表示順がおかしい問題を修正
|
||||||
|
* 設定の「アップデートを確認」でメッセージが正しく表示されない問題を修正
|
||||||
|
* Firefoxで自分のメニューが開けない問題を修正
|
||||||
|
* Welcomeページのタグクラウドが動かない問題を修正
|
||||||
|
|
||||||
|
11.12.0 (2019/05/10)
|
||||||
|
--------------------
|
||||||
|
### 注意
|
||||||
|
このアップデートを適用した後、プロセスを起動(もしくは再起動)する前に[マイグレーション](#migration)の手順を実行してください
|
||||||
|
|
||||||
|
### ✨ Improvements
|
||||||
|
* インスタンス運営者がおすすめアカウントを設定できるように
|
||||||
|
* MisskeyPagesでNAME環境変数がNULLにならないように
|
||||||
|
* MisskeyPagesにNULL環境変数を追加
|
||||||
|
* MisskeyPagesで変数を並べ替えられるように
|
||||||
|
* MisskeyPagesのテキストのリスト内で変数埋め込みできるように
|
||||||
|
* 自分の指定した投稿のRenoteを全て解除するAPIを追加
|
||||||
|
|
||||||
|
### 🐛Fixes
|
||||||
|
* Noteをpull取得した時にhost名がvalidateされていない問題を修正
|
||||||
|
* みつけるで人気のタグが表示されない問題を修正
|
||||||
|
|
||||||
|
### その他
|
||||||
|
* アカウントのisVerifiedフラグを廃止
|
||||||
|
|
||||||
|
11.11.2 (2019/05/07)
|
||||||
|
--------------------
|
||||||
|
### 🐛Fixes
|
||||||
|
* IPv4 onlyホストからDualstackホストにAP deliverできない問題を修正
|
||||||
|
* ストリーミングに接続するまでラグがある問題を修正
|
||||||
|
* 2段階認証のコードが0から始まる時正しく入力できない問題を修正
|
||||||
|
* ユーザーの更新日時が新しい順で更新日時がnullのユーザーが先頭に来る問題を修正
|
||||||
|
* 値選択時の問題を修正
|
||||||
|
* リバーシでマップの変更が反映されない問題を修正
|
||||||
|
* リバーシで対局終了直後に盤面を巻き戻してもすぐ最終ターンまでリセットされる問題を修正
|
||||||
|
|
||||||
|
11.11.1 (2019/05/05)
|
||||||
|
--------------------
|
||||||
|
### 🐛Fixes
|
||||||
|
* MisskeyPagesのリストから選択関数が使えない問題を修正
|
||||||
|
|
||||||
|
11.11.0 (2019/05/05)
|
||||||
|
--------------------
|
||||||
|
### ✨ Improvements
|
||||||
|
* MisskeyPagesにリストから選択関数を追加
|
||||||
|
* MisskeyPagesに確率を指定できるテキストランダム選択関数を追加
|
||||||
|
* 外部サービス連携ログインリンクにアイコン追加
|
||||||
|
|
||||||
|
### 🐛Fixes
|
||||||
|
* MisskeyPagesでifを入れ子にできなくなっていた問題を修正
|
||||||
|
* MisskeyPagesで数値入力を作成するとテキスト入力になる問題を修正
|
||||||
|
* 外部サービス連携に関する問題を修正
|
||||||
|
|
||||||
|
11.10.1 (2019/05/04)
|
||||||
|
--------------------
|
||||||
|
### 🐛Fixes
|
||||||
|
* MisskeyPagesでページブロックを削除できなくなっていた問題を修正
|
||||||
|
|
||||||
|
### その他
|
||||||
|
* Node.js v12対応
|
||||||
|
|
||||||
|
11.10.0 (2019/05/03)
|
||||||
|
--------------------
|
||||||
|
### 注意
|
||||||
|
このアップデートを適用した後、プロセスを起動(もしくは再起動)する前に[マイグレーション](#migration)の手順を実行してください
|
||||||
|
|
||||||
|
### ✨ Improvements
|
||||||
|
* MisskeyPagesに割った余りを求める関数を追加
|
||||||
|
* Mastodon v2.8.0 のフォローリストをインポートできるように
|
||||||
|
* エクスポートリクエストに失敗したらエラーを表示するように
|
||||||
|
* エクスポートファイルでは同一ハッシュチェックをしないように
|
||||||
|
|
||||||
|
### 🐛Fixes
|
||||||
|
* 2段階認証を設定するとログインできなくなる問題を修正
|
||||||
|
* ファイルをアップロードできないことがある問題を修正
|
||||||
|
* リモートファイルをキャッシュしない設定だとサムネイル時にオリジナル画像が表示されない問題を修正
|
||||||
|
* 外部サービス連携の不具合を修正
|
||||||
|
|
||||||
|
11.9.0 (2019/05/02)
|
||||||
|
-------------------
|
||||||
|
### ✨ Improvements
|
||||||
|
* MisskeyPagesで編集時にページブロックをドラッグで並べ替えられるように
|
||||||
|
* MisskeyPagesにカウンターボタンブロックを追加
|
||||||
|
|
||||||
|
11.8.1 (2019/05/02)
|
||||||
|
-------------------
|
||||||
|
### 🐛Fixes
|
||||||
|
* リモートファイルをキャッシュしないオプション有効時にファイルが作成できない問題を修正
|
||||||
|
|
||||||
|
11.8.0-2 (2019/05/01)
|
||||||
|
-------------------
|
||||||
|
* 11.8.0 のリリース内容が 11.7.0 と同一だったのを修正
|
||||||
|
|
||||||
|
11.8.0 (2019/05/01)
|
||||||
|
-------------------
|
||||||
|
### ✨ Improvements
|
||||||
|
* MisskeyPagesで関数を作成できるように
|
||||||
|
* MisskeyPagesでソースを表示できるように
|
||||||
|
* MisskeyPagesにシードを与えるランダム関数を追加
|
||||||
|
* MisskeyPagesに複数行テキストをテキストのリストに変換する関数を追加
|
||||||
|
|
||||||
|
### 🐛Fixes
|
||||||
|
* APIドキュメントが見れなくなっていたのを修正
|
||||||
|
* mention (あなた宛て) streaming にミュートが効かない問題を修正
|
||||||
|
* デザインの調整
|
||||||
|
|
||||||
|
11.7.0 (2019/04/30)
|
||||||
|
-------------------
|
||||||
|
### ✨ Improvements
|
||||||
|
* MisskeyPagesに ifブロック を追加
|
||||||
|
* MisskeyPagesに テキストエリア を追加
|
||||||
|
* MisskeyPagesに 複数行テキスト入力 を追加
|
||||||
|
* MisskeyPagesに 投稿フォーム を追加
|
||||||
|
* MisskeyPagesに 変換系関数 を追加
|
||||||
|
* MisskeyPagesに 環境変数 URL を追加
|
||||||
|
* MisskeyPagesでボタンやスイッチなどのテキストに変数使えるように
|
||||||
|
|
||||||
|
### 🐛Fixes
|
||||||
|
* OGPのサイト名を修正
|
||||||
|
* デザインの調整
|
||||||
|
|
||||||
|
11.6.0 (2019/04/29)
|
||||||
|
-------------------
|
||||||
|
### ✨ Improvements
|
||||||
|
* AiScriptにいくつかの文字列操作関数を追加
|
||||||
|
* ページ編集画面にページへのリンクを表示するように
|
||||||
|
|
||||||
|
### 🐛Fixes
|
||||||
|
* MisskeyPagesで数値入力が文字列として扱われる問題を修正
|
||||||
|
* デザインの調整
|
||||||
|
|
||||||
|
11.5.1 (2019/04/29)
|
||||||
|
-------------------
|
||||||
|
### 🐛Fixes
|
||||||
|
* MisskeyPagesで環境変数を別の変数内で使えない問題を修正
|
||||||
|
* MisskeyPagesで値が0の変数が表示されない問題を修正
|
||||||
|
|
||||||
|
11.5.0 (2019/04/29)
|
||||||
|
-------------------
|
||||||
|
### 注意
|
||||||
|
このアップデートを適用した後、プロセスを起動(もしくは再起動)する前に[マイグレーション](migration)の手順を実行してください
|
||||||
|
|
||||||
|
### New features
|
||||||
|
#### MisskeyPages
|
||||||
|
ページ(記事)を作成できるように。
|
||||||
|
|
||||||
|
* 後から何度でも編集できる
|
||||||
|
* アイキャッチを設定できる
|
||||||
|
* フォントを設定できる
|
||||||
|
* 画像を好きな位置に挿入できる
|
||||||
|
* URLを決められる
|
||||||
|
* タイトルを設定できる
|
||||||
|
* 見出しを設定できる
|
||||||
|
* ページの要約を設定できる(URLプレビュー時などに便利)
|
||||||
|
* 変数や式(aka AiScript)を使用して動的なページも作れる
|
||||||
|
* 目次自動生成(coming soon)
|
||||||
|
|
||||||
|
ページを気に入ったら「いいね」しよう (coming soon)
|
||||||
|
|
||||||
|
### ✨ Improvements
|
||||||
|
* APIコンソールでパラメータテンプレートを表示するように
|
||||||
|
|
||||||
|
### 🐛Fixes
|
||||||
|
* おすすめユーザーに自分自身が含まれる問題を修正
|
||||||
|
* ユーザーサジェストで表示名が変わらない問題を修正
|
||||||
|
|
||||||
|
11.4.0 (2019/04/25)
|
||||||
|
-------------------
|
||||||
|
### ✨ Improvements
|
||||||
|
* 検索でローカルの投稿のみに絞れるように
|
||||||
|
* 検索で特定のインスタンスの投稿のみに絞れるように
|
||||||
|
* 検索で特定のユーザーの投稿のみに絞れるように
|
||||||
|
|
||||||
|
### 🐛Fixes
|
||||||
|
* 投稿が増殖する問題を修正
|
||||||
|
* ストリームで過去の投稿が流れてくる問題を修正
|
||||||
|
* モバイル版のユーザーページで遷移してもユーザー名が変わらない問題を修正
|
||||||
|
* お知らせを切り替えても内容が変わらない問題を修正
|
||||||
|
|
||||||
|
11.3.1 (2019/04/24)
|
||||||
|
-------------------
|
||||||
|
### 🐛Fixes
|
||||||
|
* Webからファイルがアップロードできない問題を修正
|
||||||
|
|
||||||
|
11.3.0 (2019/04/24)
|
||||||
|
-------------------
|
||||||
|
### ✨ Improvements
|
||||||
|
* お知らせにMFMを使えるように
|
||||||
|
* お知らせに画像を添付できるように
|
||||||
|
|
||||||
|
### 🐛Fixes
|
||||||
|
* 投稿のタグ検索APIで大文字小文字が区別されていたのを修正
|
||||||
|
* 公開範囲がホームの投稿がグローバルTLに流れる問題を修正
|
||||||
|
* モバイルビューの投稿詳細にて acct が長いとアイコンが圧迫面接される問題を修正
|
||||||
|
|
||||||
|
11.2.2 (2019/04/22)
|
||||||
|
-------------------
|
||||||
|
### 🐛Fixes
|
||||||
|
* 2段階認証を有効にするとログインできない問題を修正
|
||||||
|
* リモートユーザーの修復処理が自動的に実行されない問題を修正
|
||||||
|
* リモートユーザー情報が更新されない問題を修正
|
||||||
|
|
||||||
|
11.2.1 (2019/04/21)
|
||||||
|
-------------------
|
||||||
|
### 🐛Fixes
|
||||||
|
* MEIDが25桁になっているのを修正
|
||||||
|
* リモートユーザー情報が更新されない問題を修正
|
||||||
|
|
||||||
|
11.2.0 (2019/04/18)
|
||||||
|
-------------------
|
||||||
|
### ✨ Improvements
|
||||||
|
* 検索で日付(日時)を入力するとタイムラインをその時点まで遡るように
|
||||||
|
* APIコンソールでエンドポイントをサジェストするように
|
||||||
|
* モバイル版でドライブのメニューを使いやすく
|
||||||
|
* サイレンス時に確認を表示するように
|
||||||
|
* ユーザーメニューでブロックなどの操作を行う時に確認するように
|
||||||
|
|
||||||
|
### 🐛Fixes
|
||||||
|
* アプリケーション連携画面でパーミッションが表示されない問題を修正
|
||||||
|
* アンケートウィジットでもMFMを使用するように
|
||||||
|
* フォローしてないユーザーのホーム投稿がSTLに流れてくる問題を修正
|
||||||
|
* モバイル版でウィジェットを設定できない問題を修正
|
||||||
|
* スプラッシュがクリックに反応するように
|
||||||
|
|
||||||
|
11.1.6 (2019/04/18)
|
||||||
|
-------------------
|
||||||
|
### 🐛Fixes
|
||||||
|
* 未認知ユーザーからActivityが飛んできた場合に処理できない問題を修正
|
||||||
|
* その投稿を見たのにも関わらずメンションインジケーターが点灯し続ける問題を修正
|
||||||
|
* ハッシュタグの判定を改善
|
||||||
|
* サーバーのエラーハンドリングを改善
|
||||||
|
|
||||||
|
11.1.5 (2019/04/17)
|
||||||
|
-------------------
|
||||||
|
### 🐛Fixes
|
||||||
|
* ユーザー名に含まれているカスタム絵文字が表示されないことがある問題を修正
|
||||||
|
* 壁紙の設定ができない問題を修正
|
||||||
|
* デザインの調整
|
||||||
|
|
||||||
|
11.1.4 (2019/04/17)
|
||||||
|
-------------------
|
||||||
|
### 🐛Fixes
|
||||||
|
* タイムライン取得時に削除されたファイルを添付している投稿が含まれているとサーバーでエラーになる問題を修正
|
||||||
|
* 管理画面のインスタンスメニューで変更前の設定が読み込まれないことがある問題を修正
|
||||||
|
* 猫ではないのに猫のままで表示される問題を修正
|
||||||
|
* admin/driveのアイコンがずれてる問題を修正
|
||||||
|
* チャートで大きな数値を扱えない問題を修正
|
||||||
|
* UIの修正
|
||||||
|
|
||||||
|
11.1.3 (2019/04/16)
|
||||||
|
-------------------
|
||||||
|
### 🐛Fixes
|
||||||
|
* アプリからAPIにリクエストするときにランダムなユーザーがリクエストしたことになる問題を修正
|
||||||
|
|
||||||
|
11.1.2 (2019/04/15)
|
||||||
|
-------------------
|
||||||
|
### 🐛Fixes
|
||||||
|
* 画像描画の依存関係を変更
|
||||||
|
* リモートユーザーのファイルを削除するときに古い方からではなく新しい方から削除されるのを修正
|
||||||
|
* リアクションしてないのにリアクションしたことになる問題を修正
|
||||||
|
* APIドキュメントの修正
|
||||||
|
|
||||||
|
11.1.1 (2019/04/15)
|
||||||
|
-------------------
|
||||||
|
### 🐛Fixes
|
||||||
|
* Metaタグの application-name を Misskey で固定するように修正
|
||||||
|
* トークメッセージが既読にならない問題を修正
|
||||||
|
* デフォルトでHTLを表示するように
|
||||||
|
|
||||||
|
11.1.0 (2019/04/15)
|
||||||
|
-------------------
|
||||||
|
### ✨ Improvements
|
||||||
|
* アイコン未設定時にランダムな画像を表示するように
|
||||||
|
* 管理者やモデレーターはレートリミット無効に
|
||||||
|
|
||||||
|
### 🐛Fixes
|
||||||
|
* メンションの「あなた」インジケーターが表示されない問題を修正
|
||||||
|
* ブロックAPIでエラーが発生する問題を修正
|
||||||
|
* プッシュ通知の購読に失敗する問題を修正
|
||||||
|
|
||||||
|
11.0.3 (2019/04/15)
|
||||||
|
-------------------
|
||||||
|
### 🐛Fixes
|
||||||
|
* ハッシュタグ検索APIが動作しない問題を修正
|
||||||
|
* モデレーターなのにアカウントメニューに「管理」が表示されない問題を修正
|
||||||
|
* プッシュ通知の購読に失敗する問題を修正
|
||||||
|
* ユーザー取得APIでユーザーを指定しない場合エラーになる問題を修正
|
||||||
|
|
||||||
|
11.0.2 (2019/04/15)
|
||||||
|
-------------------
|
||||||
|
### 🐛Fixes
|
||||||
|
* アプリが作成できない問題を修正
|
||||||
|
* 「ハイライト」が表示されない問題を修正
|
||||||
|
* リモートの投稿に添付されている画像が小さい問題を修正
|
||||||
|
* モバイル版でリストの名前が表示されない問題を修正
|
||||||
|
* APIドキュメントにパーミッション一覧を追加
|
||||||
|
|
||||||
|
11.0.1 (2019/04/15)
|
||||||
|
-------------------
|
||||||
|
### ✨ Improvements
|
||||||
|
* 不要な依存関係を削除
|
||||||
|
|
||||||
|
11.0.0 daybreak (2019/04/14)
|
||||||
|
----------------------------
|
||||||
|
### ✨ Improvements
|
||||||
|
* **データベースがMongoDBからPostgreSQLに変更されました**
|
||||||
|
* **Redisが必須に**
|
||||||
|
* アカウントを完全に削除できるように
|
||||||
|
* 投稿フォームで添付ファイルの閲覧注意を確認/設定できるように
|
||||||
|
* ミュート/ブロック時にそのユーザーの投稿のウォッチをすべて解除するように
|
||||||
|
|
||||||
|
### 🐛Fixes
|
||||||
|
* フォロー申請数が実際より1すくなくなる問題を修正
|
||||||
|
* リストからアカウント削除したユーザーを削除できない問題を修正
|
||||||
|
* リストTLでフォローしていないユーザーの非公開投稿が流れる問題を修正
|
||||||
|
* リストTLでダイレクト投稿が流れない問題を修正
|
||||||
|
* ミュートしているユーザーの投稿がタイムラインに流れてくることがある問題を修正
|
||||||
|
|
||||||
|
### APIの破壊的変更
|
||||||
|
* v10時点で deprecated だったパラメータなどを削除
|
||||||
|
* ユーザーリストの title が name に
|
||||||
|
* リバーシの対局の`settings`プロパティがなくなり、その中にあったプロパティがすべて上の階層に
|
||||||
|
* 例えば`game.settings.map`は`game.map`になる
|
||||||
|
|
||||||
|
### 既知の問題
|
||||||
|
* ユーザー認証無しでのアプリが作成できない
|
||||||
|
* 依存ライブラリの問題と思わるため、対応が難しい
|
||||||
|
|
||||||
|
### Migration
|
||||||
|
coming soon...
|
||||||
|
|
||||||
|
10.100.0
|
||||||
|
----------
|
||||||
|
* ユーザーリストでフォローボタンを表示するように
|
||||||
|
* ドライブのファイルのサムネイルを修正
|
||||||
|
* 投稿ウィジットでローカルのみの公開範囲で投稿できない問題を修正
|
||||||
|
* TLを遡った時に抜けがある時がある問題を修正
|
||||||
|
* ユーザータイムラインが投稿日時順ではなくなっているのを修正
|
||||||
|
* 10.99.0 でチャートのレンダリングがおかしい問題を修正
|
||||||
|
|
||||||
|
10.99.0
|
||||||
|
----------
|
||||||
|
* manifest.json にインスタンス名を反映させるように
|
||||||
|
* Metaに投稿やユーザーのIDを設定するように
|
||||||
|
* 設定でポートが指定されていない場合、環境変数を参照するように
|
||||||
|
* フォローインポートで途中にエラーになるユーザーがいると途中で終了してしまう問題を修正
|
||||||
|
* フォローインポートで自分が含まれていた場合自分をフォローしてしまう問題を修正
|
||||||
|
* ServiceWorkerの設定がUIで有効にならない問題を修正
|
||||||
|
* ユーザー一覧でのユーザーの自己紹介が複数行になることがある問題を修正
|
||||||
|
* フォローインポートでAPI limitに達していても正常にリクエストされたように表示されてしまう問題を修正
|
||||||
|
* DBに保存されたrepository urlを変更する方法がない問題を修正
|
||||||
|
* デスクトップDeckだとviaが投稿内に2箇所表示される問題を修正
|
||||||
|
* デザインの調整
|
||||||
|
* 依存関係の更新
|
||||||
|
* ローカリゼーション
|
||||||
|
|
||||||
|
10.98.3
|
||||||
|
----------
|
||||||
|
* リアクションのカスタム絵文字の情報がNoteに添付されない問題を修正
|
||||||
|
* フォルダーの移動をするとき親フォルダーに自分自身を指定できてしまう問題を修正
|
||||||
|
* デザインの調整
|
||||||
|
|
||||||
|
10.98.2
|
||||||
|
----------
|
||||||
|
* 他のインスタンスから添付画像が見れない問題を修正
|
||||||
|
|
||||||
|
10.98.1
|
||||||
|
----------
|
||||||
|
* ドライブのファイルのサムネイルが表示されない問題を修正
|
||||||
|
* APでカスタム絵文字を送る時に常にimage/pngで送っている問題を修正
|
||||||
|
* いくらいじってもページリロードするとmisskeyのテーマがdark(future)になっちゃう問題を修正
|
||||||
|
|
||||||
10.98.0
|
10.98.0
|
||||||
----------
|
----------
|
||||||
* ドライブのファイルダウンロード時に元のファイル名を尊重するように
|
* ドライブのファイルダウンロード時に元のファイル名を尊重するように
|
||||||
|
|||||||
152
CONTRIBUTING.md
152
CONTRIBUTING.md
@@ -46,10 +46,40 @@ Convert な(na) to にゃ(nya)
|
|||||||
Revert Nyaize
|
Revert Nyaize
|
||||||
|
|
||||||
## Code style
|
## Code style
|
||||||
### Use semicolon
|
### セミコロンを省略しない
|
||||||
To avoid ASI Hazard
|
ASI Hazardを避けるためでもある
|
||||||
|
|
||||||
|
### 中括弧を省略しない
|
||||||
|
Bad:
|
||||||
|
``` ts
|
||||||
|
if (foo)
|
||||||
|
bar;
|
||||||
|
else
|
||||||
|
baz;
|
||||||
|
```
|
||||||
|
|
||||||
|
Good:
|
||||||
|
``` ts
|
||||||
|
if (foo) {
|
||||||
|
bar;
|
||||||
|
} else {
|
||||||
|
baz;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
ただし**`if`が一行**の時だけは省略しても良い
|
||||||
|
Good:
|
||||||
|
``` ts
|
||||||
|
if (foo) bar;
|
||||||
|
```
|
||||||
|
|
||||||
|
### `export default`を使わない
|
||||||
|
インテリセンスと相性が悪かったりするため
|
||||||
|
|
||||||
|
参考:
|
||||||
|
* https://gfx.hatenablog.com/entry/2017/11/24/135343
|
||||||
|
* https://basarat.gitbooks.io/typescript/docs/tips/defaultIsBad.html
|
||||||
|
|
||||||
### Don't use `export default`
|
|
||||||
Bad:
|
Bad:
|
||||||
``` ts
|
``` ts
|
||||||
export default function(foo: string): string {
|
export default function(foo: string): string {
|
||||||
@@ -75,3 +105,119 @@ src ... Source code
|
|||||||
test ... Test code
|
test ... Test code
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
### placeholder
|
||||||
|
SQLをクエリビルダで組み立てる際、使用するプレースホルダは重複してはならない
|
||||||
|
例えば
|
||||||
|
``` ts
|
||||||
|
query.andWhere(new Brackets(qb => {
|
||||||
|
for (const type of ps.fileType) {
|
||||||
|
qb.orWhere(`:type = ANY(note.attachedFileTypes)`, { type: type });
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
```
|
||||||
|
と書くと、ループ中で`type`というプレースホルダが複数回使われてしまいおかしくなる
|
||||||
|
だから次のようにする必要がある
|
||||||
|
```ts
|
||||||
|
query.andWhere(new Brackets(qb => {
|
||||||
|
for (const type of ps.fileType) {
|
||||||
|
const i = ps.fileType.indexOf(type);
|
||||||
|
qb.orWhere(`:type${i} = ANY(note.attachedFileTypes)`, { [`type${i}`]: type });
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
```
|
||||||
|
|
||||||
|
### Not `null` in TypeORM
|
||||||
|
```ts
|
||||||
|
const foo = await Foos.findOne({
|
||||||
|
bar: Not(null)
|
||||||
|
});
|
||||||
|
```
|
||||||
|
のようなクエリ(`bar`が`null`ではない)は期待通りに動作しない。
|
||||||
|
次のようにします:
|
||||||
|
```ts
|
||||||
|
const foo = await Foos.findOne({
|
||||||
|
bar: Not(IsNull())
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
### `null` in SQL
|
||||||
|
SQLを発行する際、パラメータが`null`になる可能性のある場合はSQL文を出し分けなければならない
|
||||||
|
例えば
|
||||||
|
``` ts
|
||||||
|
query.where('file.folderId = :folderId', { folderId: ps.folderId });
|
||||||
|
```
|
||||||
|
という処理で、`ps.folderId`が`null`だと結果的に`file.folderId = null`のようなクエリが発行されてしまい、これは正しいSQLではないので期待した結果が得られない
|
||||||
|
だから次のようにする必要がある
|
||||||
|
``` ts
|
||||||
|
if (ps.folderId) {
|
||||||
|
query.where('file.folderId = :folderId', { folderId: ps.folderId });
|
||||||
|
} else {
|
||||||
|
query.where('file.folderId IS NULL');
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### `[]` in SQL
|
||||||
|
SQLを発行する際、`IN`のパラメータが`[]`(空の配列)になる可能性のある場合はSQL文を出し分けなければならない
|
||||||
|
例えば
|
||||||
|
``` ts
|
||||||
|
const users = await Users.find({
|
||||||
|
id: In(userIds)
|
||||||
|
});
|
||||||
|
```
|
||||||
|
という処理で、`userIds`が`[]`だと結果的に`user.id IN ()`のようなクエリが発行されてしまい、これは正しいSQLではないので期待した結果が得られない
|
||||||
|
だから次のようにする必要がある
|
||||||
|
``` ts
|
||||||
|
const users = userIds.length > 0 ? await Users.find({
|
||||||
|
id: In(userIds)
|
||||||
|
}) : [];
|
||||||
|
```
|
||||||
|
|
||||||
|
### 配列のインデックス in SQL
|
||||||
|
SQLでは配列のインデックスは**1始まり**。
|
||||||
|
`[a, b, c]`の `a`にアクセスしたいなら`[0]`ではなく`[1]`と書く
|
||||||
|
|
||||||
|
### `undefined`にご用心
|
||||||
|
MongoDBの時とは違い、findOneでレコードを取得する時に対象レコードが存在しない場合 **`undefined`** が返ってくるので注意。
|
||||||
|
MongoDBは`null`で返してきてたので、その感覚で`if (x === null)`とか書くとバグる。代わりに`if (x == null)`と書いてください
|
||||||
|
|
||||||
|
### 簡素な`undefined`チェック
|
||||||
|
データベースからレコードを取得するときに、プログラムの流れ的に(ほぼ)絶対`undefined`にはならない場合でも、`undefined`チェックしないとTypeScriptに怒られます。
|
||||||
|
でもいちいち複数行を費やして、発生するはずのない`undefined`をチェックするのも面倒なので、`ensure`というユーティリティ関数を用意しています。
|
||||||
|
例えば、
|
||||||
|
``` ts
|
||||||
|
const user = await Users.findOne(userId);
|
||||||
|
// この時点で user の型は User | undefined
|
||||||
|
if (user == null) {
|
||||||
|
throw 'missing user';
|
||||||
|
}
|
||||||
|
// この時点で user の型は User
|
||||||
|
```
|
||||||
|
という処理を`ensure`を使うと
|
||||||
|
``` ts
|
||||||
|
const user = await Users.findOne(userId).then(ensure);
|
||||||
|
// この時点で user の型は User
|
||||||
|
```
|
||||||
|
という風に書けます。
|
||||||
|
もちろん`ensure`内部でエラーを握りつぶすようなことはしておらず、万が一`undefined`だった場合はPromiseがRejectされ後続の処理は実行されません。
|
||||||
|
``` ts
|
||||||
|
const user = await Users.findOne(userId).then(ensure);
|
||||||
|
// 万が一 Users.findOne の結果が undefined だったら、ensure でエラーが発生するので
|
||||||
|
// この行に到達することは無い
|
||||||
|
// なので、.then(ensure) は
|
||||||
|
// if (user == null) {
|
||||||
|
// throw 'missing user';
|
||||||
|
// }
|
||||||
|
// の糖衣構文のような扱いです
|
||||||
|
```
|
||||||
|
|
||||||
|
### Migration作成方法
|
||||||
|
コードの変更をした後、`ormconfig.json`(`npm run ormconfig`で生成)を用意し、
|
||||||
|
|
||||||
|
```
|
||||||
|
npm i -g ts-node
|
||||||
|
ts-node ./node_modules/typeorm/cli.js migration:generate -n 変更の名前
|
||||||
|
```
|
||||||
|
|
||||||
|
作成されたスクリプトは不必要な変更を含むため除去してください。
|
||||||
|
|||||||
10
Dockerfile
10
Dockerfile
@@ -1,4 +1,4 @@
|
|||||||
FROM node:11-alpine AS base
|
FROM node:12.1-alpine AS base
|
||||||
|
|
||||||
ENV NODE_ENV=production
|
ENV NODE_ENV=production
|
||||||
|
|
||||||
@@ -21,11 +21,11 @@ RUN apk add --no-cache \
|
|||||||
pkgconfig \
|
pkgconfig \
|
||||||
python \
|
python \
|
||||||
zlib-dev
|
zlib-dev
|
||||||
RUN npm i -g yarn
|
|
||||||
|
|
||||||
|
COPY package.json ./
|
||||||
|
RUN npm i
|
||||||
COPY . ./
|
COPY . ./
|
||||||
RUN yarn install
|
RUN npm run build
|
||||||
RUN yarn build
|
|
||||||
|
|
||||||
FROM base AS runner
|
FROM base AS runner
|
||||||
|
|
||||||
@@ -39,4 +39,4 @@ COPY --from=builder /misskey/node_modules ./node_modules
|
|||||||
COPY --from=builder /misskey/built ./built
|
COPY --from=builder /misskey/built ./built
|
||||||
COPY . ./
|
COPY . ./
|
||||||
|
|
||||||
CMD ["npm", "start"]
|
CMD ["npm", "run", "migrateandstart"]
|
||||||
|
|||||||
81
README.md
81
README.md
@@ -1,6 +1,6 @@
|
|||||||
<a href="https://ai.misskey.xyz/"><img src="https://github.com/syuilo/misskey/blob/develop/assets/ai-orig.png?raw=true" align="right" height="320px"/></a>
|
<a href="https://xn--931a.moe/"><img src="https://github.com/syuilo/misskey/blob/develop/assets/ai-orig.png?raw=true" align="right" height="320px"/></a>
|
||||||
|
|
||||||
[](https://misskey.xyz/)
|
[](https://misskey.io/)
|
||||||
================================================================
|
================================================================
|
||||||
|
|
||||||
[](https://circleci.com/gh/syuilo/misskey)
|
[](https://circleci.com/gh/syuilo/misskey)
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
**A forever evolving, sophisticated microblogging platform.**
|
**A forever evolving, sophisticated microblogging platform.**
|
||||||
|
|
||||||
<p align="justify">
|
<p align="justify">
|
||||||
<a href="https://misskey.xyz">Misskey</a> is a decentralized microblogging platform born on Earth.
|
<a href="https://misskey.io">Misskey</a> is a decentralized microblogging platform born on Earth.
|
||||||
Since it exists within the Fediverse (a universe where various social media platforms are organized),
|
Since it exists within the Fediverse (a universe where various social media platforms are organized),
|
||||||
it is mutually linked with other social media platforms.
|
it is mutually linked with other social media platforms.
|
||||||
Why don't you take a short break from the hustle and bustle of the city, and dive into a new Internet? <a href="https://joinmisskey.github.io/">Find an instance!</a>
|
Why don't you take a short break from the hustle and bustle of the city, and dive into a new Internet? <a href="https://joinmisskey.github.io/">Find an instance!</a>
|
||||||
@@ -59,7 +59,7 @@ Organize and store your files! Want to post a picture you have already uploaded?
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
...and more! Experience Misskey with your own eyes at [misskey.xyz](https://misskey.xyz) or join one of the [other instances](https://joinmisskey.github.io/) that are available.
|
...and more! Experience Misskey with your own eyes at [misskey.io](https://misskey.io/) or join one of the [other instances](https://joinmisskey.github.io/) that are available.
|
||||||
|
|
||||||
Screen shots
|
Screen shots
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
@@ -88,12 +88,14 @@ Please see the [Contribution Guide](./CONTRIBUTING.md).
|
|||||||
<td><img src="https://avatars0.githubusercontent.com/u/10798641?s=460&v=4" alt="AyaMorisawa" width="100"></td>
|
<td><img src="https://avatars0.githubusercontent.com/u/10798641?s=460&v=4" alt="AyaMorisawa" width="100"></td>
|
||||||
<td><img src="https://avatars1.githubusercontent.com/u/30769358?s=460&v=4" alt="mei23" width="100"></td>
|
<td><img src="https://avatars1.githubusercontent.com/u/30769358?s=460&v=4" alt="mei23" width="100"></td>
|
||||||
<td><img src="https://avatars2.githubusercontent.com/u/20679825?s=460&v=4" alt="acid-chicken" width="100"></td>
|
<td><img src="https://avatars2.githubusercontent.com/u/20679825?s=460&v=4" alt="acid-chicken" width="100"></td>
|
||||||
|
<td><img src="https://avatars2.githubusercontent.com/u/6533808?s=460&v=4" alt="rinsuki" width="100"></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center"><a href="https://github.com/syuilo">@syuilo</a></td>
|
<td align="center"><a href="https://github.com/syuilo">@syuilo</a></td>
|
||||||
<td align="center"><a href="https://github.com/AyaMorisawa">@AyaMorisawa</a></td>
|
<td align="center"><a href="https://github.com/AyaMorisawa">@AyaMorisawa</a></td>
|
||||||
<td align="center"><a href="https://github.com/mei23">@mei23</a></td>
|
<td align="center"><a href="https://github.com/mei23">@mei23</a></td>
|
||||||
<td align="center"><a href="https://github.com/acid-chicken">@acid-chicken</a></td>
|
<td align="center"><a href="https://github.com/acid-chicken">@acid-chicken</a></td>
|
||||||
|
<td align="center"><a href="https://github.com/rinsuki">@rinsuki</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
@@ -101,60 +103,79 @@ Please see the [Contribution Guide](./CONTRIBUTING.md).
|
|||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
<!-- PATREON_START -->
|
<!-- PATREON_START -->
|
||||||
<table><tr>
|
<table><tr>
|
||||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12190916/fb7fa7983c14425f890369535b1506a4/1?token-time=2145916800&token-hash=WeuDzzz24cRXJogyIkU-mxARqkdyms-rcZKbO-GpGjw%3D" alt="weep" width="100"></td>
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/5888816/36da0f7c15954df0ab13f9abdf227f66/1.jpeg?token-time=2145916800&token-hash=at8QpJXJ8C0zINY_NmoMKv-MhXVoUK-YzTgaJPJzJYU%3D" alt="Hiroshi Seki" width="100"></td>
|
||||||
<td><img src="https://c8.patreon.com/2/200/12059069" alt="naga_rus" width="100"></td>
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12190916/fb7fa7983c14425f890369535b1506a4/3.png?token-time=2145916800&token-hash=oH_i7gJjNT7Ot6j9JiVwy7ZJIBqACVnzLqlz4YrDAZA%3D" alt="weepjp" width="100"></td>
|
||||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12913507/f7181eacafe8469a93033d85f5969c29/4?token-time=2145916800&token-hash=vZdDTTF-ahiKBjjgppS2ev4rkD8H7TTKkXXoxsucs6Y%3D" alt="Melilot" width="100"></td>
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/19045173/cb91c0f345c24d4ebfd05f19906d5e26/1.png?token-time=2145916800&token-hash=o_zKBytJs_AxHwSYw_5R8eD0eSJe3RoTR3kR3Q0syN0%3D" alt="kiritan" width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/13099460/43cecdbaa63a40d79bf50a96b9910b9d/1.jpe?token-time=2145916800&token-hash=bqwLTk0Wo0hUJJ8J5y7ii05bLzz-_CDA7Bo0Mp4RFU0%3D" alt="ne_moni" width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12913507/f7181eacafe8469a93033d85f5969c29/4.jpe?token-time=2145916800&token-hash=zEyJqVM7u9d8Ri-65fJYSJcWF1jBH1nJ5a3taRzrTmw%3D" alt="Melilot" width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/5670915/ee175f0bfb6347ffa4ea101a8c097bff/1.jpg?token-time=2145916800&token-hash=mPLM9CA-riFHx-myr3bLZJuH2xBRHA9se5VbHhLIOuA%3D" alt="osapon" width="100"></td>
|
||||||
<td><img src="https://c8.patreon.com/2/200/16869916" alt="見当かなみ" width="100"></td>
|
<td><img src="https://c8.patreon.com/2/200/16869916" alt="見当かなみ" width="100"></td>
|
||||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12999811/5f349fafcce44dd1824a8b1ebbec4564/3?token-time=2145916800&token-hash=LtV2lRi3L2jOWMLwccr9qWYfPrFlzIo2jYZHKzHEb6k%3D" alt="Xeltica" width="100"></td>
|
|
||||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12021162/963128bb8d14476dbd8407943db8f31a/1?token-time=2145916800&token-hash=1FlxS9MEgmNGH_RHUVHbO5hIXB5I1z0lvA33CTvYvjA%3D" alt="gutfuckllc" width="100"></td>
|
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
<td><a href="https://www.patreon.com/weepjp">weep</a></td>
|
<td><a href="https://www.patreon.com/rane_hs">Hiroshi Seki</a></td>
|
||||||
<td><a href="https://www.patreon.com/user?u=12059069">naga_rus</a></td>
|
<td><a href="https://www.patreon.com/weepjp">weepjp</a></td>
|
||||||
|
<td><a href="https://www.patreon.com/user?u=19045173">kiritan</a></td>
|
||||||
|
<td><a href="https://www.patreon.com/user?u=13099460">ne_moni</a></td>
|
||||||
<td><a href="https://www.patreon.com/user?u=12913507">Melilot</a></td>
|
<td><a href="https://www.patreon.com/user?u=12913507">Melilot</a></td>
|
||||||
|
<td><a href="https://www.patreon.com/osapon">osapon</a></td>
|
||||||
<td><a href="https://www.patreon.com/user?u=16869916">見当かなみ</a></td>
|
<td><a href="https://www.patreon.com/user?u=16869916">見当かなみ</a></td>
|
||||||
<td><a href="https://www.patreon.com/Xeltica">Xeltica</a></td>
|
|
||||||
<td><a href="https://www.patreon.com/gutfuckllc">gutfuckllc</a></td>
|
|
||||||
</tr></table>
|
</tr></table>
|
||||||
<table><tr>
|
<table><tr>
|
||||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/11357794/923ce94cd8c44ba788ee931907881839/1?token-time=2145916800&token-hash=0xgcpqvFDqRcV_YIEhcPNVH7gs9sLg_BBnTJXCkN4ao%3D" alt="mydarkstar" width="100"></td>
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/18899730/6a22797f68254034a854d69ea2445fc8/1.png?token-time=2145916800&token-hash=b_uj57yxo5VzkSOUS7oXE_762dyOTB_oxzbO6lFNG3k%3D" alt="YuzuRyo61" width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12021162/963128bb8d14476dbd8407943db8f31a/1.png?token-time=2145916800&token-hash=FMV7cPKBD1TU2WTbl1jg6AcdKSvTb2BSFcDhgc-EO8w%3D" alt="gutfuckllc" width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/11357794/923ce94cd8c44ba788ee931907881839/1.png?token-time=2145916800&token-hash=9nEQje_eMvUjq9a7L3uBqW-MQbS-rRMaMgd7UYVoFNM%3D" alt="mydarkstar" width="100"></td>
|
||||||
<td><img src="https://c8.patreon.com/2/200/12718187" alt="Peter G." width="100"></td>
|
<td><img src="https://c8.patreon.com/2/200/12718187" alt="Peter G." width="100"></td>
|
||||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/13039004/509d0c412eb14ae08d6a812a3054f7d6/1?token-time=2145916800&token-hash=2PsbFNw0tnubZzgSXD01R6hIgncfiElG7H7HX2Y3dyo%3D" alt="nemu" width="100"></td>
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/13039004/509d0c412eb14ae08d6a812a3054f7d6/1.jpe?token-time=2145916800&token-hash=UQRWf01TwHDV4Cls1K0YAOAjM29ssif7hLVq0ESQ0hs%3D" alt="nemu" width="100"></td>
|
||||||
<td><img src="https://c8.patreon.com/2/200/17866454" alt="sikyosyounin" width="100"></td>
|
<td><img src="https://c8.patreon.com/2/200/17866454" alt="sikyosyounin" width="100"></td>
|
||||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/5881381/6235ca5d3fb04c8e95ef5b4ff2abcc18/3?token-time=2145916800&token-hash=9JtETp0X8gI280Ne1E8bxn6j4Lw5o2k4mJkICx97V_k%3D" alt="YUKIMOCHI" width="100"></td>
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/5881381/6235ca5d3fb04c8e95ef5b4ff2abcc18/3.png?token-time=2145916800&token-hash=KjfQL8nf3AIf6WqzLshBYAyX44piAqOAZiYXgZS_H6A%3D" alt="YUKIMOCHI" width="100"></td>
|
||||||
<td><img src="https://c8.patreon.com/2/200/17463605" alt="Sampot" width="100"></td>
|
<td><img src="https://c8.patreon.com/2/200/17463605" alt="Sampot" width="100"></td>
|
||||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/17880724/311738c8a48f4a6b9443c2445a75adde/1?token-time=2145916800&token-hash=95p8VdGX45E8BitZR_eOcDlqCjumjzNLBPQJrJdeCpI%3D" alt="takimura" width="100"></td>
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/19356899/496b4681d33b4520bd7688e0fd19c04d/2.jpeg?token-time=2145916800&token-hash=_sTj3dUBOhn9qwiJ7F19Qd-yWWfUqJC_0jG1h0agEqQ%3D" alt="sheeta.s" width="100"></td>
|
||||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/17195955/be45e5e14c3e48b2bee0456c84e19df4/4?token-time=2145916800&token-hash=SbdZeN5SmsuT9stD6v0jN1z0hftg0FmRiCTxysU0Ihw%3D" alt="Damillora" width="100"></td>
|
|
||||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/16900731/935a10339daa4ede8e555903a0707060/1?token-time=2145916800&token-hash=3CrpqH-XtKs_NoIlSsTyVs8wCzP1WFCsG2xwps1IJq0%3D" alt="Atsuko Tominaga" width="100"></td>
|
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
|
<td><a href="https://www.patreon.com/Yuzulia">YuzuRyo61</a></td>
|
||||||
|
<td><a href="https://www.patreon.com/gutfuckllc">gutfuckllc</a></td>
|
||||||
<td><a href="https://www.patreon.com/mydarkstar">mydarkstar</a></td>
|
<td><a href="https://www.patreon.com/mydarkstar">mydarkstar</a></td>
|
||||||
<td><a href="https://www.patreon.com/user?u=12718187">Peter G.</a></td>
|
<td><a href="https://www.patreon.com/user?u=12718187">Peter G.</a></td>
|
||||||
<td><a href="https://www.patreon.com/user?u=13039004">nemu</a></td>
|
<td><a href="https://www.patreon.com/user?u=13039004">nemu</a></td>
|
||||||
<td><a href="https://www.patreon.com/user?u=17866454">sikyosyounin</a></td>
|
<td><a href="https://www.patreon.com/user?u=17866454">sikyosyounin</a></td>
|
||||||
<td><a href="https://www.patreon.com/yukimochi">YUKIMOCHI</a></td>
|
<td><a href="https://www.patreon.com/yukimochi">YUKIMOCHI</a></td>
|
||||||
<td><a href="https://www.patreon.com/user?u=17463605">Sampot</a></td>
|
<td><a href="https://www.patreon.com/user?u=17463605">Sampot</a></td>
|
||||||
|
<td><a href="https://www.patreon.com/user?u=19356899">sheeta.s</a></td>
|
||||||
|
</tr></table>
|
||||||
|
<table><tr>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/13737140/1adf7835017d479280d90fe8d30aade2/1.png?token-time=2145916800&token-hash=0pdle8h5pDZrww0BDOjdz6zO-HudeGTh36a3qi1biVU%3D" alt="Satsuki Yanagi" width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/17880724/311738c8a48f4a6b9443c2445a75adde/1.jpe?token-time=2145916800&token-hash=CPxGQhKIlEaa6WUcgbyHixyKEhakiw9RFdOhsIJBQ_o%3D" alt="takimura" width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/17195955/be45e5e14c3e48b2bee0456c84e19df4/4.jpe?token-time=2145916800&token-hash=UslrPVM-8TXOe8AapuNiaFYjcIJgPNcU-fKpGbfGJNI%3D" alt="Damillora" width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/16900731/83884b38afc74d4cbe83c30a13b10edd/1.png?token-time=2145916800&token-hash=R5Tog8RWg0rguRoCIoir3lThokrdPvs8Utfikhc0nhY%3D" alt="Atsuko Tominaga" width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/4389829/9f709180ac714651a70f74a82f3ffdb9/3.png?token-time=2145916800&token-hash=FTm3WVom4dJ9NwWMU4OpCL_8Yc13WiwEbKrDPyTZTPs%3D" alt="natalie" width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/13034746/c711c7f58e204ecfbc2fd646bc8a4eee/1.jpe?token-time=2145916800&token-hash=EWxXhVbZYH7KB4IDT3joc8TbIg8zPO40x1r5IDn3R7c%3D" alt="Hiratake" width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/5923936/2a743cbfbff946c2af3f09026047c0da/2.png?token-time=2145916800&token-hash=h6yphW1qnM0n_NOWaf8qtszMRLXEwIxfk5beu4RxdT0%3D" alt="noellabo" width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/2384390/5681180e1efb46a8b28e0e8d4c8b9037/1.jpg?token-time=2145916800&token-hash=SJcMy-Q1BcS940-LFUVOMfR7-5SgrzsEQGhYb3yowFk%3D" alt="CG" width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/18072312/98e894d960314fa7bc236a72a39488fe/1.jpe?token-time=2145916800&token-hash=qA8j97lIZNc-74AuZ0p4F3ms6sKPeKjtNt2vEuwpsyo%3D" alt="Hekovic" width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/10789744/97175095d8f04c0f86225ff47cb98d40/1.jpeg?token-time=2145916800&token-hash=l4AoMR7Nj7K4yAHrkrk2hAoggPkbSPm12m1nmbe9Pb8%3D" alt="Naoki Hirayama" width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/4503830/ccf2cc867ea64de0b524bb2e24b9a1cb/1.jpeg?token-time=2145916800&token-hash=L55UhJ0rcuNAH3w_ryeeGN4hC6taoOixyAhraEi0bzw%3D" alt="dansup" width="100"></td>
|
||||||
|
</tr><tr>
|
||||||
|
<td><a href="https://www.patreon.com/user?u=13737140">Satsuki Yanagi</a></td>
|
||||||
<td><a href="https://www.patreon.com/takimura">takimura</a></td>
|
<td><a href="https://www.patreon.com/takimura">takimura</a></td>
|
||||||
<td><a href="https://www.patreon.com/damillora">Damillora</a></td>
|
<td><a href="https://www.patreon.com/damillora">Damillora</a></td>
|
||||||
<td><a href="https://www.patreon.com/user?u=16900731">Atsuko Tominaga</a></td>
|
<td><a href="https://www.patreon.com/user?u=16900731">Atsuko Tominaga</a></td>
|
||||||
</tr></table>
|
|
||||||
<table><tr>
|
|
||||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/4389829/9f709180ac714651a70f74a82f3ffdb9/3?token-time=2145916800&token-hash=-iJszBqgYBhsM5qMdA1knf9wvprhEfESzKfR2oh7mIA%3D" alt="natalie" width="100"></td>
|
|
||||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/13034746/c711c7f58e204ecfbc2fd646bc8a4eee/1?token-time=2145916800&token-hash=5T8XcaAf9Zyzfg3QubR06s_kJZkArVEM2dwObrBVAU4%3D" alt="Hiratake" width="100"></td>
|
|
||||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/18072312/98e894d960314fa7bc236a72a39488fe/1?token-time=2145916800&token-hash=D6QK3fPyqiYKJfOzc-QqaSSairUrWdjld-ewp2waj6s%3D" alt="Hekovic" width="100"></td>
|
|
||||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/4503830/ccf2cc867ea64de0b524bb2e24b9a1cb/1?token-time=2145916800&token-hash=Ksk_2l3gjPDbnzMUOCSW1E-hdPJsNs2tSR4_RAakRK8%3D" alt="dansup" width="100"></td>
|
|
||||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/619786/32cf01444db24e578cd1982c197f6fc6/1?token-time=2145916800&token-hash=CXe9AqlZy9AsYfiWd3OBYVOzvODoN47Litz0Tu4BFpU%3D" alt="Gargron" width="100"></td>
|
|
||||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/5731881/4b6038e6cda34c04b83a5fcce3806a93/1?token-time=2145916800&token-hash=xhR1n6NAAyEb-IUXLD6_dshkFa3mefU5ZZuk1L8qKTs%3D" alt="Nokotaro Takeda" width="100"></td>
|
|
||||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12531784/93a45137841849329ba692da92ac7c60/1?token-time=2145916800&token-hash=uR-48MQ0A4j0irQSrCAQZJ-sJUSs_Fkihlg3-l59b7c%3D" alt="Takashi Shibuya" width="100"></td>
|
|
||||||
</tr><tr>
|
|
||||||
<td><a href="https://www.patreon.com/user?u=4389829">natalie</a></td>
|
<td><a href="https://www.patreon.com/user?u=4389829">natalie</a></td>
|
||||||
<td><a href="https://www.patreon.com/hiratake">Hiratake</a></td>
|
<td><a href="https://www.patreon.com/hiratake">Hiratake</a></td>
|
||||||
|
<td><a href="https://www.patreon.com/noellabo">noellabo</a></td>
|
||||||
|
<td><a href="https://www.patreon.com/Corset">CG</a></td>
|
||||||
<td><a href="https://www.patreon.com/hekovic">Hekovic</a></td>
|
<td><a href="https://www.patreon.com/hekovic">Hekovic</a></td>
|
||||||
|
<td><a href="https://www.patreon.com/spinlock">Naoki Hirayama</a></td>
|
||||||
<td><a href="https://www.patreon.com/dansup">dansup</a></td>
|
<td><a href="https://www.patreon.com/dansup">dansup</a></td>
|
||||||
|
</tr></table>
|
||||||
|
<table><tr>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/619786/32cf01444db24e578cd1982c197f6fc6/1.jpeg?token-time=2145916800&token-hash=d8jBQLMOHD87KtXs5C9fk1o58DMF73pQ-dYH3uZJPBE%3D" alt="Gargron" width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/5731881/4b6038e6cda34c04b83a5fcce3806a93/1.png?token-time=2145916800&token-hash=hBayGfOmQH3kRMdNnDe4oCZD_9fsJWSt29xXR3KRMVk%3D" alt="Nokotaro Takeda" width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12531784/93a45137841849329ba692da92ac7c60/1.jpeg?token-time=2145916800&token-hash=vGe7wXGqmA8Q7m-kDNb6fyGdwk-Dxk4F-ut8ZZu51RM%3D" alt="Takashi Shibuya" width="100"></td>
|
||||||
|
</tr><tr>
|
||||||
<td><a href="https://www.patreon.com/mastodon">Gargron</a></td>
|
<td><a href="https://www.patreon.com/mastodon">Gargron</a></td>
|
||||||
<td><a href="https://www.patreon.com/takenoko">Nokotaro Takeda</a></td>
|
<td><a href="https://www.patreon.com/takenoko">Nokotaro Takeda</a></td>
|
||||||
<td><a href="https://www.patreon.com/user?u=12531784">Takashi Shibuya</a></td>
|
<td><a href="https://www.patreon.com/user?u=12531784">Takashi Shibuya</a></td>
|
||||||
</tr></table>
|
</tr></table>
|
||||||
|
|
||||||
**Last updated:** Tue, 12 Mar 2019 00:50:06 UTC
|
**Last updated:** Sun, 19 May 2019 02:37:06 UTC
|
||||||
<!-- PATREON_END -->
|
<!-- PATREON_END -->
|
||||||
|
|
||||||
:four_leaf_clover: Copyright
|
:four_leaf_clover: Copyright
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
{
|
|
||||||
'targets': [
|
|
||||||
{
|
|
||||||
'target_name': 'crypto_key',
|
|
||||||
'sources': ['src/crypto_key.cc'],
|
|
||||||
'include_dirs': ['<!(node -e "require(\'nan\')")']
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
const mongo = require('mongodb');
|
|
||||||
const User = require('../built/models/user').default;
|
|
||||||
|
|
||||||
const args = process.argv.slice(2);
|
|
||||||
|
|
||||||
const user = args[0];
|
|
||||||
|
|
||||||
const q = user.startsWith('@') ? {
|
|
||||||
username: user.split('@')[1],
|
|
||||||
host: user.split('@')[2] || null
|
|
||||||
} : { _id: new mongo.ObjectID(user) };
|
|
||||||
|
|
||||||
console.log(`Mark as admin ${user}...`);
|
|
||||||
|
|
||||||
User.update(q, {
|
|
||||||
$set: {
|
|
||||||
isAdmin: true
|
|
||||||
}
|
|
||||||
}).then(() => {
|
|
||||||
console.log(`Done ${user}`);
|
|
||||||
}, e => {
|
|
||||||
console.error(e);
|
|
||||||
});
|
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
// for Node.js interpret
|
|
||||||
|
|
||||||
const chalk = require('chalk');
|
|
||||||
const sequential = require('promise-sequential');
|
|
||||||
|
|
||||||
const { default: User } = require('../../built/models/user');
|
|
||||||
const { default: DriveFile } = require('../../built/models/drive-file');
|
|
||||||
|
|
||||||
async function main() {
|
|
||||||
const promiseGens = [];
|
|
||||||
|
|
||||||
const count = await DriveFile.count({});
|
|
||||||
|
|
||||||
let prev;
|
|
||||||
|
|
||||||
for (let i = 0; i < count; i++) {
|
|
||||||
promiseGens.push(() => {
|
|
||||||
const promise = new Promise(async (res, rej) => {
|
|
||||||
const file = await DriveFile.findOne(prev ? {
|
|
||||||
_id: { $gt: prev._id }
|
|
||||||
} : {}, {
|
|
||||||
sort: {
|
|
||||||
_id: 1
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
prev = file;
|
|
||||||
|
|
||||||
const user = await User.findOne({ _id: file.metadata.userId });
|
|
||||||
|
|
||||||
DriveFile.update({
|
|
||||||
_id: file._id
|
|
||||||
}, {
|
|
||||||
$set: {
|
|
||||||
'metadata._user': {
|
|
||||||
host: user.host
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}).then(() => {
|
|
||||||
res([i, file]);
|
|
||||||
}).catch(rej);
|
|
||||||
});
|
|
||||||
|
|
||||||
promise.then(([i, file]) => {
|
|
||||||
console.log(chalk`{gray ${i}} {green done: {bold ${file._id}} ${file.filename}}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
return promise;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return await sequential(promiseGens);
|
|
||||||
}
|
|
||||||
|
|
||||||
main().then(() => {
|
|
||||||
console.log('ALL DONE');
|
|
||||||
}).catch(console.error);
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
// for Node.js interpret
|
|
||||||
|
|
||||||
const chalk = require('chalk');
|
|
||||||
const sequential = require('promise-sequential');
|
|
||||||
|
|
||||||
const { default: User } = require('../../built/models/user');
|
|
||||||
const { default: DriveFile } = require('../../built/models/drive-file');
|
|
||||||
|
|
||||||
async function main() {
|
|
||||||
const promiseGens = [];
|
|
||||||
|
|
||||||
const count = await User.count({});
|
|
||||||
|
|
||||||
let prev;
|
|
||||||
|
|
||||||
for (let i = 0; i < count; i++) {
|
|
||||||
promiseGens.push(() => {
|
|
||||||
const promise = new Promise(async (res, rej) => {
|
|
||||||
const user = await User.findOne(prev ? {
|
|
||||||
_id: { $gt: prev._id }
|
|
||||||
} : {}, {
|
|
||||||
sort: {
|
|
||||||
_id: 1
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
prev = user;
|
|
||||||
|
|
||||||
const set = {};
|
|
||||||
|
|
||||||
if (user.avatarId != null) {
|
|
||||||
const file = await DriveFile.findOne({ _id: user.avatarId });
|
|
||||||
|
|
||||||
if (file && file.metadata.properties.avgColor) {
|
|
||||||
set.avatarColor = file.metadata.properties.avgColor;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (user.bannerId != null) {
|
|
||||||
const file = await DriveFile.findOne({ _id: user.bannerId });
|
|
||||||
|
|
||||||
if (file && file.metadata.properties.avgColor) {
|
|
||||||
set.bannerColor = file.metadata.properties.avgColor;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Object.keys(set).length === 0) return res([i, user]);
|
|
||||||
|
|
||||||
User.update({
|
|
||||||
_id: user._id
|
|
||||||
}, {
|
|
||||||
$set: set
|
|
||||||
}).then(() => {
|
|
||||||
res([i, user]);
|
|
||||||
}).catch(rej);
|
|
||||||
});
|
|
||||||
|
|
||||||
promise.then(([i, user]) => {
|
|
||||||
console.log(chalk`{gray ${i}} {green done: {bold ${user._id}} @${user.username}}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
return promise;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return await sequential(promiseGens);
|
|
||||||
}
|
|
||||||
|
|
||||||
main().then(() => {
|
|
||||||
console.log('ALL DONE');
|
|
||||||
}).catch(console.error);
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
const { default: DriveFile } = require('../../built/models/drive-file');
|
|
||||||
|
|
||||||
DriveFile.update({}, {
|
|
||||||
$rename: {
|
|
||||||
'metadata.isMetaOnly': 'metadata.withoutChunks'
|
|
||||||
}
|
|
||||||
}, {
|
|
||||||
multi: true
|
|
||||||
});
|
|
||||||
@@ -1,134 +0,0 @@
|
|||||||
const { default: Stats } = require('../../built/models/stats');
|
|
||||||
const { default: User } = require('../../built/models/user');
|
|
||||||
const { default: Note } = require('../../built/models/note');
|
|
||||||
const { default: DriveFile } = require('../../built/models/drive-file');
|
|
||||||
|
|
||||||
const now = new Date();
|
|
||||||
const y = now.getFullYear();
|
|
||||||
const m = now.getMonth();
|
|
||||||
const d = now.getDate();
|
|
||||||
const today = new Date(y, m, d);
|
|
||||||
|
|
||||||
async function main() {
|
|
||||||
const localUsersCount = await User.count({
|
|
||||||
host: null
|
|
||||||
});
|
|
||||||
|
|
||||||
const remoteUsersCount = await User.count({
|
|
||||||
host: { $ne: null }
|
|
||||||
});
|
|
||||||
|
|
||||||
const localNotesCount = await Note.count({
|
|
||||||
'_user.host': null
|
|
||||||
});
|
|
||||||
|
|
||||||
const remoteNotesCount = await Note.count({
|
|
||||||
'_user.host': { $ne: null }
|
|
||||||
});
|
|
||||||
|
|
||||||
const localDriveFilesCount = await DriveFile.count({
|
|
||||||
'metadata._user.host': null
|
|
||||||
});
|
|
||||||
|
|
||||||
const remoteDriveFilesCount = await DriveFile.count({
|
|
||||||
'metadata._user.host': { $ne: null }
|
|
||||||
});
|
|
||||||
|
|
||||||
const localDriveFilesSize = await DriveFile
|
|
||||||
.aggregate([{
|
|
||||||
$match: {
|
|
||||||
'metadata._user.host': null,
|
|
||||||
'metadata.deletedAt': { $exists: false }
|
|
||||||
}
|
|
||||||
}, {
|
|
||||||
$project: {
|
|
||||||
length: true
|
|
||||||
}
|
|
||||||
}, {
|
|
||||||
$group: {
|
|
||||||
_id: null,
|
|
||||||
usage: { $sum: '$length' }
|
|
||||||
}
|
|
||||||
}])
|
|
||||||
.then(aggregates => {
|
|
||||||
if (aggregates.length > 0) {
|
|
||||||
return aggregates[0].usage;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
});
|
|
||||||
|
|
||||||
const remoteDriveFilesSize = await DriveFile
|
|
||||||
.aggregate([{
|
|
||||||
$match: {
|
|
||||||
'metadata._user.host': { $ne: null },
|
|
||||||
'metadata.deletedAt': { $exists: false }
|
|
||||||
}
|
|
||||||
}, {
|
|
||||||
$project: {
|
|
||||||
length: true
|
|
||||||
}
|
|
||||||
}, {
|
|
||||||
$group: {
|
|
||||||
_id: null,
|
|
||||||
usage: { $sum: '$length' }
|
|
||||||
}
|
|
||||||
}])
|
|
||||||
.then(aggregates => {
|
|
||||||
if (aggregates.length > 0) {
|
|
||||||
return aggregates[0].usage;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
});
|
|
||||||
|
|
||||||
await Stats.insert({
|
|
||||||
date: today,
|
|
||||||
users: {
|
|
||||||
local: {
|
|
||||||
total: localUsersCount,
|
|
||||||
diff: 0
|
|
||||||
},
|
|
||||||
remote: {
|
|
||||||
total: remoteUsersCount,
|
|
||||||
diff: 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
notes: {
|
|
||||||
local: {
|
|
||||||
total: localNotesCount,
|
|
||||||
diff: 0,
|
|
||||||
diffs: {
|
|
||||||
normal: 0,
|
|
||||||
reply: 0,
|
|
||||||
renote: 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
remote: {
|
|
||||||
total: remoteNotesCount,
|
|
||||||
diff: 0,
|
|
||||||
diffs: {
|
|
||||||
normal: 0,
|
|
||||||
reply: 0,
|
|
||||||
renote: 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
drive: {
|
|
||||||
local: {
|
|
||||||
totalCount: localDriveFilesCount,
|
|
||||||
totalSize: localDriveFilesSize,
|
|
||||||
diffCount: 0,
|
|
||||||
diffSize: 0
|
|
||||||
},
|
|
||||||
remote: {
|
|
||||||
totalCount: remoteDriveFilesCount,
|
|
||||||
totalSize: remoteDriveFilesSize,
|
|
||||||
diffCount: 0,
|
|
||||||
diffSize: 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
console.log('done');
|
|
||||||
}
|
|
||||||
|
|
||||||
main();
|
|
||||||
@@ -1,144 +0,0 @@
|
|||||||
const { default: Stats } = require('../../built/models/stats');
|
|
||||||
const { default: User } = require('../../built/models/user');
|
|
||||||
const { default: Note } = require('../../built/models/note');
|
|
||||||
const { default: DriveFile } = require('../../built/models/drive-file');
|
|
||||||
|
|
||||||
const now = new Date();
|
|
||||||
const y = now.getFullYear();
|
|
||||||
const m = now.getMonth();
|
|
||||||
const d = now.getDate();
|
|
||||||
const h = now.getHours();
|
|
||||||
const date = new Date(y, m, d, h);
|
|
||||||
|
|
||||||
async function main() {
|
|
||||||
await Stats.update({}, {
|
|
||||||
$set: {
|
|
||||||
span: 'day'
|
|
||||||
}
|
|
||||||
}, {
|
|
||||||
multi: true
|
|
||||||
});
|
|
||||||
|
|
||||||
const localUsersCount = await User.count({
|
|
||||||
host: null
|
|
||||||
});
|
|
||||||
|
|
||||||
const remoteUsersCount = await User.count({
|
|
||||||
host: { $ne: null }
|
|
||||||
});
|
|
||||||
|
|
||||||
const localNotesCount = await Note.count({
|
|
||||||
'_user.host': null
|
|
||||||
});
|
|
||||||
|
|
||||||
const remoteNotesCount = await Note.count({
|
|
||||||
'_user.host': { $ne: null }
|
|
||||||
});
|
|
||||||
|
|
||||||
const localDriveFilesCount = await DriveFile.count({
|
|
||||||
'metadata._user.host': null
|
|
||||||
});
|
|
||||||
|
|
||||||
const remoteDriveFilesCount = await DriveFile.count({
|
|
||||||
'metadata._user.host': { $ne: null }
|
|
||||||
});
|
|
||||||
|
|
||||||
const localDriveFilesSize = await DriveFile
|
|
||||||
.aggregate([{
|
|
||||||
$match: {
|
|
||||||
'metadata._user.host': null,
|
|
||||||
'metadata.deletedAt': { $exists: false }
|
|
||||||
}
|
|
||||||
}, {
|
|
||||||
$project: {
|
|
||||||
length: true
|
|
||||||
}
|
|
||||||
}, {
|
|
||||||
$group: {
|
|
||||||
_id: null,
|
|
||||||
usage: { $sum: '$length' }
|
|
||||||
}
|
|
||||||
}])
|
|
||||||
.then(aggregates => {
|
|
||||||
if (aggregates.length > 0) {
|
|
||||||
return aggregates[0].usage;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
});
|
|
||||||
|
|
||||||
const remoteDriveFilesSize = await DriveFile
|
|
||||||
.aggregate([{
|
|
||||||
$match: {
|
|
||||||
'metadata._user.host': { $ne: null },
|
|
||||||
'metadata.deletedAt': { $exists: false }
|
|
||||||
}
|
|
||||||
}, {
|
|
||||||
$project: {
|
|
||||||
length: true
|
|
||||||
}
|
|
||||||
}, {
|
|
||||||
$group: {
|
|
||||||
_id: null,
|
|
||||||
usage: { $sum: '$length' }
|
|
||||||
}
|
|
||||||
}])
|
|
||||||
.then(aggregates => {
|
|
||||||
if (aggregates.length > 0) {
|
|
||||||
return aggregates[0].usage;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
});
|
|
||||||
|
|
||||||
await Stats.insert({
|
|
||||||
date: date,
|
|
||||||
span: 'hour',
|
|
||||||
users: {
|
|
||||||
local: {
|
|
||||||
total: localUsersCount,
|
|
||||||
diff: 0
|
|
||||||
},
|
|
||||||
remote: {
|
|
||||||
total: remoteUsersCount,
|
|
||||||
diff: 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
notes: {
|
|
||||||
local: {
|
|
||||||
total: localNotesCount,
|
|
||||||
diff: 0,
|
|
||||||
diffs: {
|
|
||||||
normal: 0,
|
|
||||||
reply: 0,
|
|
||||||
renote: 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
remote: {
|
|
||||||
total: remoteNotesCount,
|
|
||||||
diff: 0,
|
|
||||||
diffs: {
|
|
||||||
normal: 0,
|
|
||||||
reply: 0,
|
|
||||||
renote: 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
drive: {
|
|
||||||
local: {
|
|
||||||
totalCount: localDriveFilesCount,
|
|
||||||
totalSize: localDriveFilesSize,
|
|
||||||
diffCount: 0,
|
|
||||||
diffSize: 0
|
|
||||||
},
|
|
||||||
remote: {
|
|
||||||
totalCount: remoteDriveFilesCount,
|
|
||||||
totalSize: remoteDriveFilesSize,
|
|
||||||
diffCount: 0,
|
|
||||||
diffSize: 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
console.log('done');
|
|
||||||
}
|
|
||||||
|
|
||||||
main();
|
|
||||||
@@ -5,8 +5,8 @@ services:
|
|||||||
build: .
|
build: .
|
||||||
restart: always
|
restart: always
|
||||||
links:
|
links:
|
||||||
- mongo
|
- db
|
||||||
# - redis
|
- redis
|
||||||
# - es
|
# - es
|
||||||
ports:
|
ports:
|
||||||
- "127.0.0.1:3000:3000"
|
- "127.0.0.1:3000:3000"
|
||||||
@@ -14,26 +14,23 @@ services:
|
|||||||
- internal_network
|
- internal_network
|
||||||
- external_network
|
- external_network
|
||||||
|
|
||||||
# redis:
|
redis:
|
||||||
# restart: always
|
|
||||||
# image: redis:4.0-alpine
|
|
||||||
# networks:
|
|
||||||
# - internal_network
|
|
||||||
### Uncomment to enable Redis persistance
|
|
||||||
## volumes:
|
|
||||||
## - ./redis:/data
|
|
||||||
|
|
||||||
mongo:
|
|
||||||
restart: always
|
restart: always
|
||||||
image: mongo:4.1
|
image: redis:4.0-alpine
|
||||||
networks:
|
networks:
|
||||||
- internal_network
|
- internal_network
|
||||||
environment:
|
|
||||||
MONGO_INITDB_DATABASE: "misskey"
|
|
||||||
volumes:
|
volumes:
|
||||||
- ./.config/mongo_initdb.js:/docker-entrypoint-initdb.d/mongo_initdb.js:ro
|
- ./redis:/data
|
||||||
### Uncomment to enable MongoDB persistance
|
|
||||||
# - ./mongo:/data
|
db:
|
||||||
|
restart: always
|
||||||
|
image: postgres:11.2-alpine
|
||||||
|
networks:
|
||||||
|
- internal_network
|
||||||
|
env_file:
|
||||||
|
- .config/docker.env
|
||||||
|
volumes:
|
||||||
|
- ./db:/var/lib/postgresql/data
|
||||||
|
|
||||||
# es:
|
# es:
|
||||||
# restart: always
|
# restart: always
|
||||||
@@ -42,9 +39,8 @@ services:
|
|||||||
# - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
|
# - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
|
||||||
# networks:
|
# networks:
|
||||||
# - internal_network
|
# - internal_network
|
||||||
#### Uncomment to enable ES persistence
|
# volumes:
|
||||||
## volumes:
|
# - ./elasticsearch:/usr/share/elasticsearch/data
|
||||||
## - ./elasticsearch:/usr/share/elasticsearch/data
|
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
internal_network:
|
internal_network:
|
||||||
|
|||||||
@@ -1,22 +0,0 @@
|
|||||||
Comment faire une sauvegarde de votre Misskey ?
|
|
||||||
==========================
|
|
||||||
|
|
||||||
Assurez-vous d'avoir installé **mongodb-tools**.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
Dans votre terminal :
|
|
||||||
``` shell
|
|
||||||
$ mongodump --archive=db-backup -u <VotreNomdUtilisateur> -p <VotreMotDePasse>
|
|
||||||
```
|
|
||||||
|
|
||||||
Pour plus de détails, merci de consulter [la documentation de mongodump](https://docs.mongodb.com/manual/reference/program/mongodump/).
|
|
||||||
|
|
||||||
Restauration
|
|
||||||
-------
|
|
||||||
|
|
||||||
``` shell
|
|
||||||
$ mongorestore --archive=db-backup
|
|
||||||
```
|
|
||||||
|
|
||||||
Pour plus de détails, merci de consulter [la documentation de mongorestore](https://docs.mongodb.com/manual/reference/program/mongorestore/).
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
How to backup your Misskey
|
|
||||||
==========================
|
|
||||||
|
|
||||||
Make sure **mongodb-tools** installed.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
In your shell:
|
|
||||||
``` shell
|
|
||||||
$ mongodump --archive=db-backup -u <YourUserName> -p <YourPassword>
|
|
||||||
```
|
|
||||||
|
|
||||||
For details, please see [mongodump docs](https://docs.mongodb.com/manual/reference/program/mongodump/).
|
|
||||||
|
|
||||||
Restore
|
|
||||||
-------
|
|
||||||
|
|
||||||
``` shell
|
|
||||||
$ mongorestore --archive=db-backup
|
|
||||||
```
|
|
||||||
|
|
||||||
For details, please see [mongorestore docs](https://docs.mongodb.com/manual/reference/program/mongorestore/).
|
|
||||||
@@ -9,15 +9,51 @@ This guide describes how to install and setup Misskey with Docker.
|
|||||||
|
|
||||||
*1.* Download Misskey
|
*1.* Download Misskey
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
1. `git clone -b master git://github.com/syuilo/misskey.git` Clone Misskey repository's master branch.
|
1. Clone Misskey repository's master branch.
|
||||||
2. `cd misskey` Move to misskey directory.
|
|
||||||
3. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)` Checkout to the [latest release](https://github.com/syuilo/misskey/releases/latest) tag.
|
`git clone -b master git://github.com/syuilo/misskey.git`
|
||||||
|
|
||||||
|
2. Move to misskey directory.
|
||||||
|
|
||||||
|
`cd misskey`
|
||||||
|
|
||||||
|
3. Checkout to the [latest release](https://github.com/syuilo/misskey/releases/latest) tag.
|
||||||
|
|
||||||
|
`git checkout master`
|
||||||
|
|
||||||
*2.* Configure Misskey
|
*2.* Configure Misskey
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
1. `cp .config/example.yml .config/default.yml` Copy the `.config/example.yml` and rename it to `default.yml`.
|
|
||||||
2. `cp .config/mongo_initdb_example.js .config/mongo_initdb.js` Copy the `.config/mongo_initdb_example.js` and rename it to `mongo_initdb.js`.
|
Create configuration files with following:
|
||||||
3. Edit `default.yml` and `mongo_initdb.js`.
|
|
||||||
|
```bash
|
||||||
|
cd .config
|
||||||
|
cp example.yml default.yml
|
||||||
|
cp docker_example.env docker.env
|
||||||
|
```
|
||||||
|
|
||||||
|
### `default.yml`
|
||||||
|
|
||||||
|
Edit this file the same as non-Docker environment.
|
||||||
|
However hostname of Postgresql, Redis and Elasticsearch are not `localhost`, they are set in `docker-compose.yml`.
|
||||||
|
The following is default hostname:
|
||||||
|
|
||||||
|
| Service | Hostname |
|
||||||
|
|---------------|----------|
|
||||||
|
| Postgresql | `db` |
|
||||||
|
| Redis | `redis` |
|
||||||
|
| Elasticsearch | `es` |
|
||||||
|
|
||||||
|
### `docker.env`
|
||||||
|
|
||||||
|
Configure Postgresql in this file.
|
||||||
|
The minimum required settings are:
|
||||||
|
|
||||||
|
| name | Description |
|
||||||
|
|---------------------|---------------|
|
||||||
|
| `POSTGRES_PASSWORD` | Password |
|
||||||
|
| `POSTGRES_USER` | Username |
|
||||||
|
| `POSTGRES_DB` | Database name |
|
||||||
|
|
||||||
*3.* Configure Docker
|
*3.* Configure Docker
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
@@ -29,7 +65,13 @@ Build misskey with the following:
|
|||||||
|
|
||||||
`docker-compose build`
|
`docker-compose build`
|
||||||
|
|
||||||
*5.* That is it.
|
*5.* Init DB
|
||||||
|
----------------------------------------------------------------
|
||||||
|
``` shell
|
||||||
|
docker-compose run --rm web npm run init
|
||||||
|
```
|
||||||
|
|
||||||
|
*6.* That is it.
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
Well done! Now you have an environment to run Misskey.
|
Well done! Now you have an environment to run Misskey.
|
||||||
|
|
||||||
@@ -37,9 +79,9 @@ Well done! Now you have an environment to run Misskey.
|
|||||||
Just `docker-compose up -d`. GLHF!
|
Just `docker-compose up -d`. GLHF!
|
||||||
|
|
||||||
### How to update your Misskey server to the latest version
|
### How to update your Misskey server to the latest version
|
||||||
1. `git fetch`
|
1. `git stash`
|
||||||
2. `git stash`
|
2. `git checkout master`
|
||||||
3. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)`
|
3. `git pull`
|
||||||
4. `git stash pop`
|
4. `git stash pop`
|
||||||
5. `docker-compose build`
|
5. `docker-compose build`
|
||||||
6. Check [ChangeLog](../CHANGELOG.md) for migration information
|
6. Check [ChangeLog](../CHANGELOG.md) for migration information
|
||||||
|
|||||||
@@ -10,9 +10,17 @@ Ce guide explique comment installer et configurer Misskey avec Docker.
|
|||||||
|
|
||||||
*1.* Télécharger Misskey
|
*1.* Télécharger Misskey
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
1. `git clone -b master git://github.com/syuilo/misskey.git` Clone le dépôt de Misskey sur la branche master.
|
1. Clone le dépôt de Misskey sur la branche master.
|
||||||
2. `cd misskey` Naviguez dans le dossier du dépôt.
|
|
||||||
3. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)` Checkout sur le tag de la [dernière version](https://github.com/syuilo/misskey/releases/latest).
|
`git clone -b master git://github.com/syuilo/misskey.git`
|
||||||
|
|
||||||
|
2. Naviguez dans le dossier du dépôt.
|
||||||
|
|
||||||
|
`cd misskey`
|
||||||
|
|
||||||
|
3. Checkout sur le tag de la [dernière version](https://github.com/syuilo/misskey/releases/latest).
|
||||||
|
|
||||||
|
`git checkout master`
|
||||||
|
|
||||||
*2.* Configuration de Misskey
|
*2.* Configuration de Misskey
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
@@ -38,9 +46,9 @@ Parfait, Vous avez un environnement prêt pour démarrer Misskey.
|
|||||||
Utilisez la commande `docker-compose up -d`. GLHF!
|
Utilisez la commande `docker-compose up -d`. GLHF!
|
||||||
|
|
||||||
### How to update your Misskey server to the latest version
|
### How to update your Misskey server to the latest version
|
||||||
1. `git fetch`
|
1. `git stash`
|
||||||
2. `git stash`
|
2. `git checkout master`
|
||||||
3. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)`
|
3. `git pull`
|
||||||
4. `git stash pop`
|
4. `git stash pop`
|
||||||
5. `docker-compose build`
|
5. `docker-compose build`
|
||||||
6. Consultez le [ChangeLog](../CHANGELOG.md) pour avoir les éventuelles informations de migration
|
6. Consultez le [ChangeLog](../CHANGELOG.md) pour avoir les éventuelles informations de migration
|
||||||
@@ -52,14 +60,28 @@ Utilisez la commande `docker-compose up -d`. GLHF!
|
|||||||
### Configuration d'ElasticSearch (pour la fonction de recherche)
|
### Configuration d'ElasticSearch (pour la fonction de recherche)
|
||||||
*1.* Préparation de l'environnement
|
*1.* Préparation de l'environnement
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
1. `mkdir elasticsearch && chown 1000:1000 elasticsearch` Permet de créer le dossier d'accueil de la base ElasticSearch aves les bons droits
|
1. Permet de créer le dossier d'accueil de la base ElasticSearch aves les bons droits
|
||||||
2. `sysctl -w vm.max_map_count=262144` Augmente la valeur max du paramètre map_count du système (valeur minimum pour pouvoir lancer ES)
|
|
||||||
|
`mkdir elasticsearch && chown 1000:1000 elasticsearch`
|
||||||
|
|
||||||
|
2. Augmente la valeur max du paramètre map_count du système (valeur minimum pour pouvoir lancer ES)
|
||||||
|
|
||||||
|
`sysctl -w vm.max_map_count=262144`
|
||||||
|
|
||||||
*2.* Après lancement du docker-compose, initialisation de la base ElasticSearch
|
*2.* Après lancement du docker-compose, initialisation de la base ElasticSearch
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
1. `docker-compose -it web /bin/sh` Connexion dans le conteneur web
|
1. Connexion dans le conteneur web
|
||||||
2. `apk add curl` Ajout du paquet curl
|
|
||||||
3. `curl -X PUT "es:9200/misskey" -H 'Content-Type: application/json' -d'{ "settings" : { "index" : { } }}'` Création de la base ES
|
`docker-compose -it web /bin/sh`
|
||||||
|
|
||||||
|
2. Ajout du paquet curl
|
||||||
|
|
||||||
|
`apk add curl`
|
||||||
|
|
||||||
|
3. Création de la base ES
|
||||||
|
|
||||||
|
`curl -X PUT "es:9200/misskey" -H 'Content-Type: application/json' -d'{ "settings" : { "index" : { } }}'`
|
||||||
|
|
||||||
4. `exit`
|
4. `exit`
|
||||||
|
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
|
|||||||
@@ -9,15 +9,51 @@ Dockerを使ったMisskey構築方法
|
|||||||
|
|
||||||
*1.* Misskeyのダウンロード
|
*1.* Misskeyのダウンロード
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
1. `git clone -b master git://github.com/syuilo/misskey.git` masterブランチからMisskeyレポジトリをクローン
|
1. masterブランチからMisskeyレポジトリをクローン
|
||||||
2. `cd misskey` misskeyディレクトリに移動
|
|
||||||
3. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)` [最新のリリース](https://github.com/syuilo/misskey/releases/latest)を確認
|
|
||||||
|
|
||||||
*2.* 設定ファイルを作成する
|
`git clone -b master git://github.com/syuilo/misskey.git`
|
||||||
|
|
||||||
|
2. misskeyディレクトリに移動
|
||||||
|
|
||||||
|
`cd misskey`
|
||||||
|
|
||||||
|
3. [最新のリリース](https://github.com/syuilo/misskey/releases/latest)を確認
|
||||||
|
|
||||||
|
`git checkout master`
|
||||||
|
|
||||||
|
*2.* 設定ファイルの作成と編集
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
1. `cp .config/example.yml .config/default.yml` `.config/example.yml`をコピーし名前を`default.yml`にする
|
|
||||||
2. `cp .config/mongo_initdb_example.js .config/mongo_initdb.js` `.config/mongo_initdb_example.js`をコピーし名前を`mongo_initdb.js`にする
|
下記コマンドで設定ファイルを作成してください。
|
||||||
3. `default.yml`と`mongo_initdb.js`を編集する
|
|
||||||
|
```bash
|
||||||
|
cd .config
|
||||||
|
cp example.yml default.yml
|
||||||
|
cp docker_example.env docker.env
|
||||||
|
```
|
||||||
|
|
||||||
|
### `default.yml`の編集
|
||||||
|
|
||||||
|
非Docker環境と同じ様に編集してください。
|
||||||
|
ただし、Postgresql、RedisとElasticsearchのホストは`localhost`ではなく、`docker-compose.yml`で設定されたサービス名になっています。
|
||||||
|
標準設定では次の通りです。
|
||||||
|
|
||||||
|
| サービス | ホスト名 |
|
||||||
|
|---------------|---------|
|
||||||
|
| Postgresql |`db` |
|
||||||
|
| Redis |`redis` |
|
||||||
|
| Elasticsearch |`es` |
|
||||||
|
|
||||||
|
### `docker.env`の編集
|
||||||
|
|
||||||
|
このファイルはPostgresqlの設定を記述します。
|
||||||
|
最低限記述する必要がある設定は次の通りです。
|
||||||
|
|
||||||
|
| 設定 | 内容 |
|
||||||
|
|---------------------|--------------|
|
||||||
|
| `POSTGRES_PASSWORD` | パスワード |
|
||||||
|
| `POSTGRES_USER` | ユーザー名 |
|
||||||
|
| `POSTGRES_DB` | データベース名 |
|
||||||
|
|
||||||
*3.* Dockerの設定
|
*3.* Dockerの設定
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
@@ -29,7 +65,13 @@ Dockerを使ったMisskey構築方法
|
|||||||
|
|
||||||
`docker-compose build`
|
`docker-compose build`
|
||||||
|
|
||||||
*5.* 以上です!
|
*5.* データベースを初期化
|
||||||
|
----------------------------------------------------------------
|
||||||
|
``` shell
|
||||||
|
docker-compose run --rm web npm run init
|
||||||
|
```
|
||||||
|
|
||||||
|
*6.* 以上です!
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
お疲れ様でした。これでMisskeyを動かす準備は整いました。
|
お疲れ様でした。これでMisskeyを動かす準備は整いました。
|
||||||
|
|
||||||
@@ -37,9 +79,9 @@ Dockerを使ったMisskey構築方法
|
|||||||
`docker-compose up -d`するだけです。GLHF!
|
`docker-compose up -d`するだけです。GLHF!
|
||||||
|
|
||||||
### Misskeyを最新バージョンにアップデートする方法:
|
### Misskeyを最新バージョンにアップデートする方法:
|
||||||
1. `git fetch`
|
1. `git stash`
|
||||||
2. `git stash`
|
2. `git checkout master`
|
||||||
3. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)`
|
3. `git pull`
|
||||||
4. `git stash pop`
|
4. `git stash pop`
|
||||||
5. `docker-compose build`
|
5. `docker-compose build`
|
||||||
6. [ChangeLog](../CHANGELOG.md)でマイグレーション情報を確認する
|
6. [ChangeLog](../CHANGELOG.md)でマイグレーション情報を確認する
|
||||||
|
|||||||
@@ -22,37 +22,45 @@ adduser --disabled-password --disabled-login misskey
|
|||||||
Please install and setup these softwares:
|
Please install and setup these softwares:
|
||||||
|
|
||||||
#### Dependencies :package:
|
#### Dependencies :package:
|
||||||
* **[Node.js](https://nodejs.org/en/)** >= 10.0.0
|
* **[Node.js](https://nodejs.org/en/)** >= 11.7.0
|
||||||
* **[MongoDB](https://www.mongodb.com/)** >= 3.6
|
* **[PostgreSQL](https://www.postgresql.org/)** >= 10
|
||||||
|
* **[Redis](https://redis.io/)**
|
||||||
|
|
||||||
##### Optional
|
##### Optional
|
||||||
* [Redis](https://redis.io/)
|
|
||||||
* Redis is optional, but we strongly recommended to install it
|
|
||||||
* [Elasticsearch](https://www.elastic.co/) - required to enable the search feature
|
* [Elasticsearch](https://www.elastic.co/) - required to enable the search feature
|
||||||
* [FFmpeg](https://www.ffmpeg.org/)
|
* [FFmpeg](https://www.ffmpeg.org/)
|
||||||
|
|
||||||
*3.* Setup MongoDB
|
*3.* Install Misskey
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
As root:
|
1. Connect to misskey user.
|
||||||
1. `mongo` Go to the mongo shell
|
|
||||||
2. `use misskey` Use the misskey database
|
|
||||||
3. `db.createUser( { user: "misskey", pwd: "<password>", roles: [ { role: "readWrite", db: "misskey" } ] } )` Create the misskey user.
|
|
||||||
4. `exit` You're done!
|
|
||||||
|
|
||||||
*4.* Install Misskey
|
`su - misskey`
|
||||||
----------------------------------------------------------------
|
|
||||||
1. `su - misskey` Connect to misskey user.
|
|
||||||
2. `git clone -b master git://github.com/syuilo/misskey.git` Clone the misskey repo from master branch.
|
|
||||||
3. `cd misskey` Navigate to misskey directory
|
|
||||||
4. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)` Checkout to the [latest release](https://github.com/syuilo/misskey/releases/latest)
|
|
||||||
5. `npm install` Install misskey dependencies.
|
|
||||||
|
|
||||||
*5.* Configure Misskey
|
2. Clone the misskey repo from master branch.
|
||||||
|
|
||||||
|
`git clone -b master git://github.com/syuilo/misskey.git`
|
||||||
|
|
||||||
|
3. Navigate to misskey directory
|
||||||
|
|
||||||
|
`cd misskey`
|
||||||
|
|
||||||
|
4. Checkout to the [latest release](https://github.com/syuilo/misskey/releases/latest)
|
||||||
|
|
||||||
|
`git checkout master`
|
||||||
|
|
||||||
|
5. Install misskey dependencies.
|
||||||
|
|
||||||
|
`npm install`
|
||||||
|
|
||||||
|
*4.* Configure Misskey
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
1. `cp .config/example.yml .config/default.yml` Copy the `.config/example.yml` and rename it to `default.yml`.
|
1. Copy the `.config/example.yml` and rename it to `default.yml`.
|
||||||
|
|
||||||
|
`cp .config/example.yml .config/default.yml`
|
||||||
|
|
||||||
2. Edit `default.yml`
|
2. Edit `default.yml`
|
||||||
|
|
||||||
*6.* Build Misskey
|
*5.* Build Misskey
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
|
|
||||||
Build misskey with the following:
|
Build misskey with the following:
|
||||||
@@ -68,6 +76,12 @@ If you're still encountering errors about some modules, use node-gyp:
|
|||||||
3. `node-gyp build`
|
3. `node-gyp build`
|
||||||
4. `NODE_ENV=production npm run build`
|
4. `NODE_ENV=production npm run build`
|
||||||
|
|
||||||
|
*6.* Init DB
|
||||||
|
----------------------------------------------------------------
|
||||||
|
``` shell
|
||||||
|
npm run init
|
||||||
|
```
|
||||||
|
|
||||||
*7.* That is it.
|
*7.* That is it.
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
Well done! Now, you have an environment that run to Misskey.
|
Well done! Now, you have an environment that run to Misskey.
|
||||||
@@ -77,7 +91,10 @@ Just `NODE_ENV=production npm start`. GLHF!
|
|||||||
|
|
||||||
### Launch with systemd
|
### Launch with systemd
|
||||||
|
|
||||||
1. Create a systemd service here: `/etc/systemd/system/misskey.service`
|
1. Create a systemd service here
|
||||||
|
|
||||||
|
`/etc/systemd/system/misskey.service`
|
||||||
|
|
||||||
2. Edit it, and paste this and save:
|
2. Edit it, and paste this and save:
|
||||||
|
|
||||||
```
|
```
|
||||||
@@ -100,14 +117,19 @@ Restart=always
|
|||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
```
|
```
|
||||||
|
|
||||||
3. `systemctl daemon-reload ; systemctl enable misskey` Reload systemd and enable the misskey service.
|
3. Reload systemd and enable the misskey service.
|
||||||
4. `systemctl start misskey` Start the misskey service.
|
|
||||||
|
`systemctl daemon-reload ; systemctl enable misskey`
|
||||||
|
|
||||||
|
4. Start the misskey service.
|
||||||
|
|
||||||
|
`systemctl start misskey`
|
||||||
|
|
||||||
You can check if the service is running with `systemctl status misskey`.
|
You can check if the service is running with `systemctl status misskey`.
|
||||||
|
|
||||||
### How to update your Misskey server to the latest version
|
### How to update your Misskey server to the latest version
|
||||||
1. `git fetch`
|
1. `git checkout master`
|
||||||
2. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)`
|
2. `git pull`
|
||||||
3. `npm install`
|
3. `npm install`
|
||||||
4. `NODE_ENV=production npm run build`
|
4. `NODE_ENV=production npm run build`
|
||||||
5. Check [ChangeLog](../CHANGELOG.md) for migration information
|
5. Check [ChangeLog](../CHANGELOG.md) for migration information
|
||||||
|
|||||||
@@ -22,37 +22,45 @@ adduser --disabled-password --disabled-login misskey
|
|||||||
Installez les paquets suivants :
|
Installez les paquets suivants :
|
||||||
|
|
||||||
#### Dépendences :package:
|
#### Dépendences :package:
|
||||||
* **[Node.js](https://nodejs.org/en/)** >= 10.0.0
|
* **[Node.js](https://nodejs.org/en/)** >= 11.7.0
|
||||||
* **[MongoDB](https://www.mongodb.com/)** >= 3.6
|
* **[PostgreSQL](https://www.postgresql.org/)** >= 10
|
||||||
|
* **[Redis](https://redis.io/)**
|
||||||
|
|
||||||
##### Optionnels
|
##### Optionnels
|
||||||
* [Redis](https://redis.io/)
|
|
||||||
* Redis est optionnel mais nous vous recommandons vivement de l'installer
|
|
||||||
* [Elasticsearch](https://www.elastic.co/) - requis pour pouvoir activer la fonctionnalité de recherche
|
* [Elasticsearch](https://www.elastic.co/) - requis pour pouvoir activer la fonctionnalité de recherche
|
||||||
* [FFmpeg](https://www.ffmpeg.org/)
|
* [FFmpeg](https://www.ffmpeg.org/)
|
||||||
|
|
||||||
*3.* Paramètrage de MongoDB
|
*3.* Installation de Misskey
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
En root :
|
1. Basculez vers l'utilisateur misskey.
|
||||||
1. `mongo` Ouvrez le shell mongo
|
|
||||||
2. `use misskey` Utilisez la base de données misskey
|
|
||||||
3. `db.createUser( { user: "misskey", pwd: "<password>", roles: [ { role: "readWrite", db: "misskey" } ] } )` Créez l'utilisateur misskey.
|
|
||||||
4. `exit` Vous avez terminé !
|
|
||||||
|
|
||||||
*4.* Installation de Misskey
|
`su - misskey`
|
||||||
----------------------------------------------------------------
|
|
||||||
1. `su - misskey` Basculez vers l'utilisateur misskey.
|
|
||||||
2. `git clone -b master git://github.com/syuilo/misskey.git` Clonez la branche master du dépôt misskey.
|
|
||||||
3. `cd misskey` Accédez au dossier misskey.
|
|
||||||
4. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)` Checkout sur le tag de la [version la plus récente](https://github.com/syuilo/misskey/releases/latest)
|
|
||||||
5. `npm install` Installez les dépendances de misskey.
|
|
||||||
|
|
||||||
*5.* Création du fichier de configuration
|
2. Clonez la branche master du dépôt misskey.
|
||||||
|
|
||||||
|
`git clone -b master git://github.com/syuilo/misskey.git`
|
||||||
|
|
||||||
|
3. Accédez au dossier misskey.
|
||||||
|
|
||||||
|
`cd misskey`
|
||||||
|
|
||||||
|
4. Checkout sur le tag de la [version la plus récente](https://github.com/syuilo/misskey/releases/latest)
|
||||||
|
|
||||||
|
`git checkout master`
|
||||||
|
|
||||||
|
5. Installez les dépendances de misskey.
|
||||||
|
|
||||||
|
`npm install`
|
||||||
|
|
||||||
|
*4.* Création du fichier de configuration
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
1. `cp .config/example.yml .config/default.yml` Copiez le fichier `.config/example.yml` et renommez-le`default.yml`.
|
1. Copiez le fichier `.config/example.yml` et renommez-le`default.yml`.
|
||||||
|
|
||||||
|
`cp .config/example.yml .config/default.yml`
|
||||||
|
|
||||||
2. Editez le fichier `default.yml`
|
2. Editez le fichier `default.yml`
|
||||||
|
|
||||||
*6.* Construction de Misskey
|
*5.* Construction de Misskey
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
|
|
||||||
Construisez Misskey comme ceci :
|
Construisez Misskey comme ceci :
|
||||||
@@ -68,7 +76,7 @@ Si vous rencontrez des erreurs concernant certains modules, utilisez node-gyp:
|
|||||||
3. `node-gyp build`
|
3. `node-gyp build`
|
||||||
4. `NODE_ENV=production npm run build`
|
4. `NODE_ENV=production npm run build`
|
||||||
|
|
||||||
*7.* C'est tout.
|
*6.* C'est tout.
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
Excellent ! Maintenant, vous avez un environnement prêt pour lancer Misskey
|
Excellent ! Maintenant, vous avez un environnement prêt pour lancer Misskey
|
||||||
|
|
||||||
@@ -77,7 +85,10 @@ Lancez tout simplement `NODE_ENV=production npm start`. Bonne chance et amusez-v
|
|||||||
|
|
||||||
### Démarrage avec systemd
|
### Démarrage avec systemd
|
||||||
|
|
||||||
1. Créez un service systemd sur : `/etc/systemd/system/misskey.service`
|
1. Créez un service systemd sur
|
||||||
|
|
||||||
|
`/etc/systemd/system/misskey.service`
|
||||||
|
|
||||||
2. Editez-le puis copiez et coller ceci dans le fichier :
|
2. Editez-le puis copiez et coller ceci dans le fichier :
|
||||||
|
|
||||||
```
|
```
|
||||||
@@ -100,14 +111,19 @@ Restart=always
|
|||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
```
|
```
|
||||||
|
|
||||||
3. `systemctl daemon-reload ; systemctl enable misskey` Redémarre systemd et active le service misskey.
|
3. Redémarre systemd et active le service misskey.
|
||||||
4. `systemctl start misskey` Démarre le service misskey.
|
|
||||||
|
`systemctl daemon-reload ; systemctl enable misskey`
|
||||||
|
|
||||||
|
4. Démarre le service misskey.
|
||||||
|
|
||||||
|
`systemctl start misskey`
|
||||||
|
|
||||||
Vous pouvez vérifier si le service a démarré en utilisant la commande `systemctl status misskey`.
|
Vous pouvez vérifier si le service a démarré en utilisant la commande `systemctl status misskey`.
|
||||||
|
|
||||||
### Méthode de mise à jour vers la plus récente version de Misskey
|
### Méthode de mise à jour vers la plus récente version de Misskey
|
||||||
1. `git fetch`
|
1. `git checkout master`
|
||||||
2. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)`
|
2. `git pull`
|
||||||
3. `npm install`
|
3. `npm install`
|
||||||
4. `NODE_ENV=production npm run build`
|
4. `NODE_ENV=production npm run build`
|
||||||
5. Consultez [ChangeLog](../CHANGELOG.md) pour les information de migration.
|
5. Consultez [ChangeLog](../CHANGELOG.md) pour les information de migration.
|
||||||
|
|||||||
@@ -22,44 +22,46 @@ adduser --disabled-password --disabled-login misskey
|
|||||||
これらのソフトウェアをインストール・設定してください:
|
これらのソフトウェアをインストール・設定してください:
|
||||||
|
|
||||||
#### 依存関係 :package:
|
#### 依存関係 :package:
|
||||||
* **[Node.js](https://nodejs.org/en/)** (10.0.0以上)
|
* **[Node.js](https://nodejs.org/en/)** (11.7.0以上)
|
||||||
* **[MongoDB](https://www.mongodb.com/)** (3.6以上)
|
* **[PostgreSQL](https://www.postgresql.org/)** (10以上)
|
||||||
|
* **[Redis](https://redis.io/)**
|
||||||
|
|
||||||
##### オプション
|
##### オプション
|
||||||
* [Redis](https://redis.io/)
|
|
||||||
* Redisはオプションですが、インストールすることを強く推奨します。
|
|
||||||
* インストールしなくていいのは、あなたのインスタンスが自分専用のときだけとお考えください。
|
|
||||||
* 具体的には、Redisをインストールしないと、次の事が出来なくなります:
|
|
||||||
* Misskeyプロセスを複数起動しての負荷分散
|
|
||||||
* レートリミット
|
|
||||||
* ジョブキュー
|
|
||||||
* Twitter連携
|
|
||||||
* [Elasticsearch](https://www.elastic.co/)
|
* [Elasticsearch](https://www.elastic.co/)
|
||||||
* 検索機能を有効にするためにはインストールが必要です。
|
* 検索機能を有効にするためにはインストールが必要です。
|
||||||
* [FFmpeg](https://www.ffmpeg.org/)
|
* [FFmpeg](https://www.ffmpeg.org/)
|
||||||
|
|
||||||
*3.* MongoDBの設定
|
*3.* Misskeyのインストール
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
ルートで:
|
1. misskeyユーザーを使用
|
||||||
1. `mongo` mongoシェルを起動
|
|
||||||
2. `use misskey` misskeyデータベースを使用
|
|
||||||
3. `db.createUser( { user: "misskey", pwd: "<password>", roles: [ { role: "readWrite", db: "misskey" } ] } )` misskeyユーザーを作成
|
|
||||||
4. `exit` mongoシェルを終了
|
|
||||||
|
|
||||||
*4.* Misskeyのインストール
|
`su - misskey`
|
||||||
----------------------------------------------------------------
|
|
||||||
1. `su - misskey` misskeyユーザーを使用
|
|
||||||
2. `git clone -b master git://github.com/syuilo/misskey.git` masterブランチからMisskeyレポジトリをクローン
|
|
||||||
3. `cd misskey` misskeyディレクトリに移動
|
|
||||||
4. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)` [最新のリリース](https://github.com/syuilo/misskey/releases/latest)を確認
|
|
||||||
5. `npm install` Misskeyの依存パッケージをインストール
|
|
||||||
|
|
||||||
*5.* 設定ファイルを作成する
|
2. masterブランチからMisskeyレポジトリをクローン
|
||||||
|
|
||||||
|
`git clone -b master git://github.com/syuilo/misskey.git`
|
||||||
|
|
||||||
|
3. misskeyディレクトリに移動
|
||||||
|
|
||||||
|
`cd misskey`
|
||||||
|
|
||||||
|
4. [最新のリリース](https://github.com/syuilo/misskey/releases/latest)を確認
|
||||||
|
|
||||||
|
`git checkout master`
|
||||||
|
|
||||||
|
5. Misskeyの依存パッケージをインストール
|
||||||
|
|
||||||
|
`npm install`
|
||||||
|
|
||||||
|
*4.* 設定ファイルを作成する
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
1. `cp .config/example.yml .config/default.yml` `.config/example.yml`をコピーし名前を`default.yml`にする。
|
1. `.config/example.yml`をコピーし名前を`default.yml`にする。
|
||||||
|
|
||||||
|
`cp .config/example.yml .config/default.yml`
|
||||||
|
|
||||||
2. `default.yml` を編集する。
|
2. `default.yml` を編集する。
|
||||||
|
|
||||||
*6.* Misskeyのビルド
|
*5.* Misskeyのビルド
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
|
|
||||||
次のコマンドでMisskeyをビルドしてください:
|
次のコマンドでMisskeyをビルドしてください:
|
||||||
@@ -74,6 +76,12 @@ Debianをお使いであれば、`build-essential`パッケージをインスト
|
|||||||
3. `node-gyp build`
|
3. `node-gyp build`
|
||||||
4. `NODE_ENV=production npm run build`
|
4. `NODE_ENV=production npm run build`
|
||||||
|
|
||||||
|
*6.* データベースを初期化
|
||||||
|
----------------------------------------------------------------
|
||||||
|
``` shell
|
||||||
|
npm run init
|
||||||
|
```
|
||||||
|
|
||||||
*7.* 以上です!
|
*7.* 以上です!
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
お疲れ様でした。これでMisskeyを動かす準備は整いました。
|
お疲れ様でした。これでMisskeyを動かす準備は整いました。
|
||||||
@@ -82,7 +90,10 @@ Debianをお使いであれば、`build-essential`パッケージをインスト
|
|||||||
`NODE_ENV=production npm start`するだけです。GLHF!
|
`NODE_ENV=production npm start`するだけです。GLHF!
|
||||||
|
|
||||||
### systemdを用いた起動
|
### systemdを用いた起動
|
||||||
1. systemdサービスのファイルを作成: `/etc/systemd/system/misskey.service`
|
1. systemdサービスのファイルを作成
|
||||||
|
|
||||||
|
`/etc/systemd/system/misskey.service`
|
||||||
|
|
||||||
2. エディタで開き、以下のコードを貼り付けて保存:
|
2. エディタで開き、以下のコードを貼り付けて保存:
|
||||||
|
|
||||||
```
|
```
|
||||||
@@ -104,16 +115,22 @@ Restart=always
|
|||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
```
|
```
|
||||||
|
|
||||||
CentOSで1024以下のポートを使用してMisskeyを使用する場合は`ExecStart=/usr/bin/sudo /usr/bin/npm start`に変更する必要があります。
|
CentOSで1024以下のポートを使用してMisskeyを使用する場合は`ExecStart=/usr/bin/sudo /usr/bin/npm start`に変更する必要があります。
|
||||||
|
|
||||||
3. `systemctl daemon-reload ; systemctl enable misskey` systemdを再読み込みしmisskeyサービスを有効化
|
3. systemdを再読み込みしmisskeyサービスを有効化
|
||||||
4. `systemctl start misskey` misskeyサービスの起動
|
|
||||||
|
`systemctl daemon-reload ; systemctl enable misskey`
|
||||||
|
|
||||||
|
4. misskeyサービスの起動
|
||||||
|
|
||||||
|
`systemctl start misskey`
|
||||||
|
|
||||||
`systemctl status misskey`と入力すると、サービスの状態を調べることができます。
|
`systemctl status misskey`と入力すると、サービスの状態を調べることができます。
|
||||||
|
|
||||||
### Misskeyを最新バージョンにアップデートする方法:
|
### Misskeyを最新バージョンにアップデートする方法:
|
||||||
1. `git fetch`
|
1. `git checkout master`
|
||||||
2. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)`
|
2. `git pull`
|
||||||
3. `npm install`
|
3. `npm install`
|
||||||
4. `NODE_ENV=production npm run build`
|
4. `NODE_ENV=production npm run build`
|
||||||
5. [ChangeLog](../CHANGELOG.md)でマイグレーション情報を確認する
|
5. [ChangeLog](../CHANGELOG.md)でマイグレーション情報を確認する
|
||||||
|
|||||||
@@ -49,7 +49,6 @@ gulp.task('build:copy:views', () =>
|
|||||||
|
|
||||||
gulp.task('build:copy', gulp.parallel('build:copy:views', () =>
|
gulp.task('build:copy', gulp.parallel('build:copy:views', () =>
|
||||||
gulp.src([
|
gulp.src([
|
||||||
'./build/Release/crypto_key.node',
|
|
||||||
'./src/const.json',
|
'./src/const.json',
|
||||||
'./src/server/web/views/**/*',
|
'./src/server/web/views/**/*',
|
||||||
'./src/**/assets/**/*',
|
'./src/**/assets/**/*',
|
||||||
@@ -120,7 +119,7 @@ gulp.task('copy:client', () =>
|
|||||||
])
|
])
|
||||||
.pipe(isProduction ? (imagemin as any)() : gutil.noop())
|
.pipe(isProduction ? (imagemin as any)() : gutil.noop())
|
||||||
.pipe(rename(path => {
|
.pipe(rename(path => {
|
||||||
path.dirname = path.dirname.replace('assets', '.');
|
path.dirname = path.dirname!.replace('assets', '.');
|
||||||
}))
|
}))
|
||||||
.pipe(gulp.dest('./built/client/assets/'))
|
.pipe(gulp.dest('./built/client/assets/'))
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ common:
|
|||||||
outro: "Podívejte se na unikátní vlastnosti Misskey vlastníma očima! Pokud si myslíte, že tato instance není pro vás, zkuste jiné instance, neboť Misskey je decentralizovaná sociální síť, takže můžete snadno najít své přátele. Hodně štěstí a zábavy!"
|
outro: "Podívejte se na unikátní vlastnosti Misskey vlastníma očima! Pokud si myslíte, že tato instance není pro vás, zkuste jiné instance, neboť Misskey je decentralizovaná sociální síť, takže můžete snadno najít své přátele. Hodně štěstí a zábavy!"
|
||||||
adblock:
|
adblock:
|
||||||
detected: "Prosím vypněte svůj blokovač reklam"
|
detected: "Prosím vypněte svůj blokovač reklam"
|
||||||
warning: "<strong>Misskey nepoužívá reklamy</strong>, některé vlastnosti však mohou být nedostupné nebo mohou způsobovat chyby, pokud máte povolený blokovač reklam."
|
warning: "Některé vlastnosti mohou být nedostupné nebo mohou způsobovat chyby, pokud máte povolený blokovač reklam. <strong>Misskey nepoužívá reklamy</strong>."
|
||||||
application-authorization: "Autorizované aplikace"
|
application-authorization: "Autorizované aplikace"
|
||||||
close: "Zavřít"
|
close: "Zavřít"
|
||||||
do-not-copy-paste: "Prosím nezadávejte ani nevkládejte sem kód. Váš účet může být kompromitován."
|
do-not-copy-paste: "Prosím nezadávejte ani nevkládejte sem kód. Váš účet může být kompromitován."
|
||||||
@@ -61,6 +61,7 @@ common:
|
|||||||
month-and-day: "{day}. {month}."
|
month-and-day: "{day}. {month}."
|
||||||
trash: "Koš"
|
trash: "Koš"
|
||||||
drive: "Disk"
|
drive: "Disk"
|
||||||
|
pages: "Stránky"
|
||||||
messaging: "Konverzace"
|
messaging: "Konverzace"
|
||||||
home: "Domů"
|
home: "Domů"
|
||||||
deck: "Deck"
|
deck: "Deck"
|
||||||
@@ -69,6 +70,26 @@ common:
|
|||||||
following: "Sledovaní"
|
following: "Sledovaní"
|
||||||
followers: "Sledující"
|
followers: "Sledující"
|
||||||
favorites: "Oblíbené"
|
favorites: "Oblíbené"
|
||||||
|
permissions:
|
||||||
|
"read:account": "Zobrazit informace o účtu"
|
||||||
|
"write:account": "Narábět s účtem"
|
||||||
|
"read:blocks": "Prohlížet blokování"
|
||||||
|
"write:blocks": "Narábět s blokováním"
|
||||||
|
"read:drive": "Prohlížet Disk"
|
||||||
|
"write:drive": "Pracovat s Diskem"
|
||||||
|
"read:favorites": "Prohlížet oblíbené"
|
||||||
|
"write:favorites": "Narábět s oblíbeními"
|
||||||
|
"read:following": "Prohlížet následování"
|
||||||
|
"write:following": "Pracovat s následováním"
|
||||||
|
"read:messaging": "Prohlížet konverzaci"
|
||||||
|
"write:messaging": "Pracovat s konverzaci"
|
||||||
|
"read:mutes": "Prohlížet ztlumené"
|
||||||
|
"write:mutes": "Narábět s utíšeními"
|
||||||
|
"write:notes": "Narábět s poznámkami"
|
||||||
|
"read:notifications": "Prohlížet oznámení"
|
||||||
|
"write:notifications": "Pracovat s oznámeními"
|
||||||
|
"read:reactions": "Prohlížet reakce"
|
||||||
|
"write:votes": "Hlasovat"
|
||||||
empty-timeline-info:
|
empty-timeline-info:
|
||||||
follow-users-to-make-your-timeline: "Poznámky sledujících se zobrazí ve vaší časové ose"
|
follow-users-to-make-your-timeline: "Poznámky sledujících se zobrazí ve vaší časové ose"
|
||||||
explore: "Najít uživatele"
|
explore: "Najít uživatele"
|
||||||
@@ -131,7 +152,7 @@ common:
|
|||||||
other: "Ostatní"
|
other: "Ostatní"
|
||||||
appearance: "Vzhled"
|
appearance: "Vzhled"
|
||||||
behavior: "Chování"
|
behavior: "Chování"
|
||||||
fetch-on-scroll: "Nekonečné rolování"
|
fetch-on-scroll: "Nekonečné načítaní posuvem"
|
||||||
fetch-on-scroll-desc: "Pokud budete rolovat dolů po stránce, automaticky bude načten další obsah."
|
fetch-on-scroll-desc: "Pokud budete rolovat dolů po stránce, automaticky bude načten další obsah."
|
||||||
note-visibility: "Viditelnost příspěvku"
|
note-visibility: "Viditelnost příspěvku"
|
||||||
default-note-visibility: "Výchozí viditelnost příspěvku"
|
default-note-visibility: "Výchozí viditelnost příspěvku"
|
||||||
@@ -227,9 +248,10 @@ common:
|
|||||||
cancel: "Zrušit"
|
cancel: "Zrušit"
|
||||||
update-available-title: "Aktualizace k dispozici"
|
update-available-title: "Aktualizace k dispozici"
|
||||||
update-available: "Je k dispozici nová verze Misskey ({newer},vaše verze je {current}). Pro aplikování nové verze znovunačtěte stránku."
|
update-available: "Je k dispozici nová verze Misskey ({newer},vaše verze je {current}). Pro aplikování nové verze znovunačtěte stránku."
|
||||||
verified-user: "Ověřené účty"
|
my-token-regenerated: "Váš token byl regenerován, proto budete odhlášen/a."
|
||||||
hide-password: "Skrýt heslo"
|
hide-password: "Skrýt heslo"
|
||||||
show-password: "Zobrazit heslo"
|
show-password: "Zobrazit heslo"
|
||||||
|
enter-username: "Zadejte uživatelské jméno"
|
||||||
do-not-use-in-production: "Tohle je vývojářský build. Nepoužívejte v produkci."
|
do-not-use-in-production: "Tohle je vývojářský build. Nepoužívejte v produkci."
|
||||||
user-suspended: "Tomuto uživateli byl pozastaven účet."
|
user-suspended: "Tomuto uživateli byl pozastaven účet."
|
||||||
is-remote-user: "Informace o tomto uživateli nemusí být kompletní."
|
is-remote-user: "Informace o tomto uživateli nemusí být kompletní."
|
||||||
@@ -275,18 +297,13 @@ common:
|
|||||||
nav: "Navigace"
|
nav: "Navigace"
|
||||||
tips: "Tipy"
|
tips: "Tipy"
|
||||||
hashtags: "Hashtagy"
|
hashtags: "Hashtagy"
|
||||||
|
queue: "Ve frontě"
|
||||||
dev: "Nepodařilo se vytvořit aplikace. Prosím zkuste to znovu."
|
dev: "Nepodařilo se vytvořit aplikace. Prosím zkuste to znovu."
|
||||||
ai-chan-kawaii: "Ai-chan kawaii!"
|
ai-chan-kawaii: "Ai-chan kawaii!"
|
||||||
you: "Vy"
|
you: "Vy"
|
||||||
auth/views/form.vue:
|
auth/views/form.vue:
|
||||||
share-access: "Chcete dovolit aplikaci <i>{name}</i> přístup k vašemu účtu?"
|
share-access: "Chcete dovolit aplikaci <i>{name}</i> přístup k vašemu účtu?"
|
||||||
permission-ask: "Tato aplikace vyžaduje následující oprávnění:"
|
permission-ask: "Tato aplikace vyžaduje následující oprávnění:"
|
||||||
account-read: "Zobrazit informace účtu"
|
|
||||||
note-write: "Odeslat."
|
|
||||||
following-write: "Sledovat a přestat sledovat"
|
|
||||||
drive-read: "Přečíst váš Disk"
|
|
||||||
notification-read: "Sledovat oznámení."
|
|
||||||
notification-write: "Zpravovat notifikace."
|
|
||||||
cancel: "Zrušit"
|
cancel: "Zrušit"
|
||||||
accept: "Povolit přístup"
|
accept: "Povolit přístup"
|
||||||
auth/views/index.vue:
|
auth/views/index.vue:
|
||||||
@@ -295,13 +312,13 @@ auth/views/index.vue:
|
|||||||
error: "Taková relace neexistuje."
|
error: "Taková relace neexistuje."
|
||||||
sign-in: "Prosím přihlaste se."
|
sign-in: "Prosím přihlaste se."
|
||||||
common/views/pages/explore.vue:
|
common/views/pages/explore.vue:
|
||||||
verified-users: "Ověřené účty"
|
|
||||||
popular-users: "Populární uživatelé"
|
popular-users: "Populární uživatelé"
|
||||||
recently-updated-users: "Nedávno aktívni uživatelé"
|
recently-updated-users: "Nedávno aktívni uživatelé"
|
||||||
recently-registered-users: "Nedávno registrovaní uživatelé"
|
recently-registered-users: "Nedávno registrovaní uživatelé"
|
||||||
popular-tags: "Populární tagy"
|
popular-tags: "Populární tagy"
|
||||||
federated: "Z fedivesmíru"
|
federated: "Z fedivesmíru"
|
||||||
explore: "Prozkoumat {host}"
|
explore: "Prozkoumat {host}"
|
||||||
|
users-info: "Aktuálně je zde registrováno {users} uživatelů"
|
||||||
common/views/components/url-preview.vue:
|
common/views/components/url-preview.vue:
|
||||||
enable-player: "Otevřít v přehrávači"
|
enable-player: "Otevřít v přehrávači"
|
||||||
disable-player: "Zavřít přehrávač"
|
disable-player: "Zavřít přehrávač"
|
||||||
@@ -354,19 +371,24 @@ common/views/components/connect-failed.troubleshooter.vue:
|
|||||||
no-network-desc: "Ujistěte se že jste připojeni k Internetu."
|
no-network-desc: "Ujistěte se že jste připojeni k Internetu."
|
||||||
no-internet: "Nejste připojeni k internetu"
|
no-internet: "Nejste připojeni k internetu"
|
||||||
no-internet-desc: "Jste připojen k síti, ale zdá se že stále chybí připojení k Internetu. Prosím zkontrolujte Vaše připojení k Internetu."
|
no-internet-desc: "Jste připojen k síti, ale zdá se že stále chybí připojení k Internetu. Prosím zkontrolujte Vaše připojení k Internetu."
|
||||||
|
no-server: "Nelze se připojit k serveru Misskey"
|
||||||
common/views/components/media-banner.vue:
|
common/views/components/media-banner.vue:
|
||||||
click-to-show: "Klikněte pro zobrazení"
|
click-to-show: "Klikněte pro zobrazení"
|
||||||
common/views/components/theme.vue:
|
common/views/components/theme.vue:
|
||||||
light-theme: "Šablona pro použití ve světlém vzhledu"
|
light-theme: "Motiv pro použití ve světlém vzhledu"
|
||||||
dark-theme: "Šablona pro použití v tmavém vzhledu"
|
dark-theme: "Motiv pro použití v tmavém vzhledu"
|
||||||
light-themes: "Světlý vzhled"
|
light-themes: "Světlý vzhled"
|
||||||
dark-themes: "Tmavý vzhled"
|
dark-themes: "Tmavý vzhled"
|
||||||
install-a-theme: "Nainstalovat šablonu"
|
install-a-theme: "Nainstalovat motiv"
|
||||||
theme-code: "Kód šablony"
|
theme-code: "Kód motivu"
|
||||||
install: "Nainstalovat"
|
install: "Nainstalovat"
|
||||||
installed: "\"{}\" byl nainstalován"
|
installed: "\"{}\" byl nainstalován"
|
||||||
create-a-theme: "Vytvořit motiv"
|
create-a-theme: "Vytvořit motiv"
|
||||||
|
save-created-theme: "Uložit motiv"
|
||||||
|
text-color: "Barva textu"
|
||||||
base-theme: "Základní vzhled"
|
base-theme: "Základní vzhled"
|
||||||
|
base-theme-light: "Světlý"
|
||||||
|
base-theme-dark: "Tmavý"
|
||||||
find-more-theme: "Najít další vzhledy"
|
find-more-theme: "Najít další vzhledy"
|
||||||
theme-name: "Jméno vzhledu"
|
theme-name: "Jméno vzhledu"
|
||||||
preview-created-theme: "Náhled"
|
preview-created-theme: "Náhled"
|
||||||
@@ -393,14 +415,12 @@ common/views/components/messaging.vue:
|
|||||||
search-user: "Najít uživatele"
|
search-user: "Najít uživatele"
|
||||||
you: "Vy"
|
you: "Vy"
|
||||||
no-history: "Žádná historie"
|
no-history: "Žádná historie"
|
||||||
|
user: "Uživatel"
|
||||||
common/views/components/messaging-room.vue:
|
common/views/components/messaging-room.vue:
|
||||||
empty: "Žádné zprávy"
|
|
||||||
new-message: "Máte novou zprávu"
|
new-message: "Máte novou zprávu"
|
||||||
only-one-file-attached: "Jenom JEDEN soubor může být přiložen ke zprávě."
|
|
||||||
common/views/components/messaging-room.form.vue:
|
common/views/components/messaging-room.form.vue:
|
||||||
send: "Odeslat"
|
send: "Odeslat"
|
||||||
attach-from-local: "Přiložit soubory z Vašeho zařízení"
|
attach-from-local: "Přiložit soubory z Vašeho zařízení"
|
||||||
only-one-file-attached: "Jenom JEDEN soubor může být přiložen ke zprávě."
|
|
||||||
common/views/components/messaging-room.message.vue:
|
common/views/components/messaging-room.message.vue:
|
||||||
is-read: "Přečtené"
|
is-read: "Přečtené"
|
||||||
deleted: "Tato zpráva byla odstraněna"
|
deleted: "Tato zpráva byla odstraněna"
|
||||||
@@ -435,19 +455,38 @@ common/views/components/user-menu.vue:
|
|||||||
unblock: "Odblokovat"
|
unblock: "Odblokovat"
|
||||||
push-to-list: "Přidat do seznamu"
|
push-to-list: "Přidat do seznamu"
|
||||||
select-list: "Vyberte seznam"
|
select-list: "Vyberte seznam"
|
||||||
|
report-abuse: "Nahlásit spam"
|
||||||
report-abuse-reported: "Problém byl nahlášen administrátorovi. Děkujeme za Vaší kooperaci."
|
report-abuse-reported: "Problém byl nahlášen administrátorovi. Děkujeme za Vaší kooperaci."
|
||||||
|
silence: "Ztlumit"
|
||||||
|
suspend: "Zmrazit"
|
||||||
common/views/components/poll.vue:
|
common/views/components/poll.vue:
|
||||||
vote-count: "{} hlasů"
|
vote-count: "{} hlasů"
|
||||||
|
total-votes: "{} hlasů celkem"
|
||||||
vote: "Hlasovat"
|
vote: "Hlasovat"
|
||||||
show-result: "Podívat se na výsledky"
|
show-result: "Podívat se na výsledky"
|
||||||
voted: "Už jste hlasovaly"
|
voted: "Už jste hlasovaly"
|
||||||
|
closed: "Ukončeno"
|
||||||
remaining-days: "zbývá {d} dnů, {h} hodin"
|
remaining-days: "zbývá {d} dnů, {h} hodin"
|
||||||
remaining-hours: "zbývá {h} hodin, a {m} minut"
|
remaining-hours: "zbývá {h} hodin, a {m} minut"
|
||||||
remaining-minutes: "zbývá {m} minut, a {s} sekund"
|
remaining-minutes: "zbývá {m} minut, a {s} sekund"
|
||||||
remaining-seconds: "zbývá {s} sekund"
|
remaining-seconds: "zbývá {s} sekund"
|
||||||
common/views/components/poll-editor.vue:
|
common/views/components/poll-editor.vue:
|
||||||
no-only-one-choice: "Musíte vybrat alespoň dvě možnosti"
|
no-only-one-choice: "Musíte vybrat alespoň dvě možnosti"
|
||||||
|
choice-n: "Volba {}"
|
||||||
|
remove: "Odstranit tuto možnost"
|
||||||
|
add: "+ Přidat možnost"
|
||||||
|
destroy: "Zahodit dotazník"
|
||||||
|
expiration: "Termín"
|
||||||
|
infinite: "Nekonečne"
|
||||||
|
at: "Výběr data a času"
|
||||||
|
deadline-date: "Termín ukončení"
|
||||||
|
interval: "Trvání"
|
||||||
|
second: "Sekunda"
|
||||||
|
minute: "Minuta"
|
||||||
|
hour: "Hodina"
|
||||||
day: "Ne"
|
day: "Ne"
|
||||||
|
common/views/components/reaction-picker.vue:
|
||||||
|
choose-reaction: "Vyberte svoji reakci"
|
||||||
common/views/components/emoji-picker.vue:
|
common/views/components/emoji-picker.vue:
|
||||||
custom-emoji: "Emoji"
|
custom-emoji: "Emoji"
|
||||||
people: "Lidé"
|
people: "Lidé"
|
||||||
@@ -577,6 +616,15 @@ common/views/components/user-list-editor.vue:
|
|||||||
remove-user: "Odebrat z tohoto seznamu"
|
remove-user: "Odebrat z tohoto seznamu"
|
||||||
delete-are-you-sure: "Smazat seznam \"$1\"?"
|
delete-are-you-sure: "Smazat seznam \"$1\"?"
|
||||||
deleted: "Smazáno"
|
deleted: "Smazáno"
|
||||||
|
add-user: "Přidat uživatele"
|
||||||
|
common/views/components/user-group-editor.vue:
|
||||||
|
deleted: "Smazáno"
|
||||||
|
invite: "Pozvat"
|
||||||
|
common/views/components/user-lists.vue:
|
||||||
|
user-lists: "Seznamy"
|
||||||
|
list-name: "Název seznamu"
|
||||||
|
common/views/components/user-groups.vue:
|
||||||
|
invites: "Pozvat"
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "Načítám"
|
fetching: "Načítám"
|
||||||
next: "Další"
|
next: "Další"
|
||||||
@@ -603,6 +651,8 @@ common/views/widgets/memo.vue:
|
|||||||
save: "Uložit"
|
save: "Uložit"
|
||||||
common/views/widgets/slideshow.vue:
|
common/views/widgets/slideshow.vue:
|
||||||
no-image: "V této složce nebyly nalezeny žádné fotky."
|
no-image: "V této složce nebyly nalezeny žádné fotky."
|
||||||
|
common/views/pages/not-found.vue:
|
||||||
|
page-not-found: "Stránka nenalezena"
|
||||||
desktop:
|
desktop:
|
||||||
banner: "Baner"
|
banner: "Baner"
|
||||||
avatar-crop-title: "Vyberte část, která se zobrazí jako avatar"
|
avatar-crop-title: "Vyberte část, která se zobrazí jako avatar"
|
||||||
@@ -687,10 +737,6 @@ desktop/views/components/home.vue:
|
|||||||
desktop/views/input-dialog.vue:
|
desktop/views/input-dialog.vue:
|
||||||
cancel: "Zrušit"
|
cancel: "Zrušit"
|
||||||
ok: "OK"
|
ok: "OK"
|
||||||
desktop/views/components/messaging-room-window.vue:
|
|
||||||
title: "Zprávy:"
|
|
||||||
desktop/views/components/messaging-window.vue:
|
|
||||||
title: "Zprávy"
|
|
||||||
desktop/views/components/note-detail.vue:
|
desktop/views/components/note-detail.vue:
|
||||||
private: "Tento příspěvek je soukromý"
|
private: "Tento příspěvek je soukromý"
|
||||||
deleted: "Tento příspěvek byl odstraněn"
|
deleted: "Tento příspěvek byl odstraněn"
|
||||||
@@ -789,14 +835,11 @@ desktop/views/components/settings.tags.vue:
|
|||||||
title: "Tagy"
|
title: "Tagy"
|
||||||
add: "Přidat"
|
add: "Přidat"
|
||||||
save: "Uložit"
|
save: "Uložit"
|
||||||
desktop/views/components/taskmanager.vue:
|
|
||||||
title: "Správce úloh"
|
|
||||||
desktop/views/components/timeline.vue:
|
desktop/views/components/timeline.vue:
|
||||||
home: "Domů"
|
home: "Domů"
|
||||||
local: "Lokální"
|
local: "Lokální"
|
||||||
global: "Globální"
|
global: "Globální"
|
||||||
mentions: "Zmínění"
|
mentions: "Zmínění"
|
||||||
messages: "Zprávy"
|
|
||||||
list: "Seznamy"
|
list: "Seznamy"
|
||||||
hashtag: "Hashtag"
|
hashtag: "Hashtag"
|
||||||
add-list: "Přidat do seznamu"
|
add-list: "Přidat do seznamu"
|
||||||
@@ -816,13 +859,6 @@ desktop/views/components/ui.header.post.vue:
|
|||||||
post: "Nový příspěvek"
|
post: "Nový příspěvek"
|
||||||
desktop/views/components/ui.header.search.vue:
|
desktop/views/components/ui.header.search.vue:
|
||||||
placeholder: "Vyhledávání"
|
placeholder: "Vyhledávání"
|
||||||
desktop/views/components/received-follow-requests-window.vue:
|
|
||||||
accept: "Přijmout"
|
|
||||||
reject: "Odmítnout"
|
|
||||||
desktop/views/components/user-lists-window.vue:
|
|
||||||
title: "Seznamy uživatelů"
|
|
||||||
create-list: "Vytvořit seznam"
|
|
||||||
list-name: "Název seznamu"
|
|
||||||
desktop/views/components/user-preview.vue:
|
desktop/views/components/user-preview.vue:
|
||||||
notes: "Příspěvky"
|
notes: "Příspěvky"
|
||||||
desktop/views/components/users-list.vue:
|
desktop/views/components/users-list.vue:
|
||||||
@@ -836,9 +872,8 @@ admin/views/index.vue:
|
|||||||
emoji: "Emoji"
|
emoji: "Emoji"
|
||||||
moderators: "Moderátoři"
|
moderators: "Moderátoři"
|
||||||
users: "Uživatelé"
|
users: "Uživatelé"
|
||||||
federation: "Federovaná"
|
federation: "Z fedivesmíru"
|
||||||
announcements: "Oznámení"
|
announcements: "Oznámení"
|
||||||
hashtags: "Hashtagy"
|
|
||||||
queue: "Fronta úloh"
|
queue: "Fronta úloh"
|
||||||
logs: "Logy"
|
logs: "Logy"
|
||||||
back-to-misskey: "Zpět na Misskey"
|
back-to-misskey: "Zpět na Misskey"
|
||||||
@@ -848,7 +883,7 @@ admin/views/dashboard.vue:
|
|||||||
drive: "Disk"
|
drive: "Disk"
|
||||||
instances: "Instance"
|
instances: "Instance"
|
||||||
this-instance: "Tato instance"
|
this-instance: "Tato instance"
|
||||||
federated: "Federovaná"
|
federated: "Z fedivesmíru"
|
||||||
admin/views/abuse.vue:
|
admin/views/abuse.vue:
|
||||||
details: "Popis"
|
details: "Popis"
|
||||||
remove-report: "Odstranit"
|
remove-report: "Odstranit"
|
||||||
@@ -863,12 +898,12 @@ admin/views/instance.vue:
|
|||||||
maintainer-config: "Informace o administrátorovi"
|
maintainer-config: "Informace o administrátorovi"
|
||||||
maintainer-name: "Jméno administrátora"
|
maintainer-name: "Jméno administrátora"
|
||||||
maintainer-email: "Kontakt na administrátora"
|
maintainer-email: "Kontakt na administrátora"
|
||||||
|
object-storage-endpoint: "Endpoint"
|
||||||
mb: "V megabajtech"
|
mb: "V megabajtech"
|
||||||
recaptcha-config: "nastavení služby reCAPTCHA"
|
recaptcha-config: "nastavení služby reCAPTCHA"
|
||||||
recaptcha-info: "reCAPTCHA token je povinný. Můžete jej získat na https://www.google.com/recaptcha/intro/"
|
recaptcha-info: "reCAPTCHA token je povinný. Můžete jej získat na https://www.google.com/recaptcha/intro/"
|
||||||
enable-recaptcha: "povolit reCAPTCHA"
|
enable-recaptcha: "povolit reCAPTCHA"
|
||||||
recaptcha-site-key: "reCAPTCHA klíč stránky (site key)"
|
recaptcha-preview: "Náhled"
|
||||||
recaptcha-secret-key: "reCAPTCHA tajný klíč"
|
|
||||||
twitter-integration-config: "Nastavení spojení s Twitterem"
|
twitter-integration-config: "Nastavení spojení s Twitterem"
|
||||||
twitter-integration-info: "The callback URL is set on {url}."
|
twitter-integration-info: "The callback URL is set on {url}."
|
||||||
enable-twitter-integration: "Povolit připojení k Twitteru"
|
enable-twitter-integration: "Povolit připojení k Twitteru"
|
||||||
@@ -887,7 +922,6 @@ admin/views/instance.vue:
|
|||||||
invite: "Pozvat"
|
invite: "Pozvat"
|
||||||
save: "Uložit"
|
save: "Uložit"
|
||||||
saved: "Uloženo"
|
saved: "Uloženo"
|
||||||
user-recommendation-config: "Doporučení uživatelé"
|
|
||||||
email: "Emailová adresa"
|
email: "Emailová adresa"
|
||||||
smtp-port: "SMTP Port"
|
smtp-port: "SMTP Port"
|
||||||
smtp-auth: "Provést SMTP autentikaci"
|
smtp-auth: "Provést SMTP autentikaci"
|
||||||
@@ -939,12 +973,6 @@ admin/views/users.vue:
|
|||||||
reset-password: "Resetovat heslo"
|
reset-password: "Resetovat heslo"
|
||||||
reset-password-confirm: "Opravdu chcete resetovat Vaše heslo?"
|
reset-password-confirm: "Opravdu chcete resetovat Vaše heslo?"
|
||||||
password-updated: "Heslo je nyní \"{password}\""
|
password-updated: "Heslo je nyní \"{password}\""
|
||||||
verify: "Ověřit účet"
|
|
||||||
verify-confirm: "Chcete aby toto byl ověřený účet?"
|
|
||||||
verified: "Účet se nyní ověřuje"
|
|
||||||
unverify: "Zrušit ověření účtu"
|
|
||||||
unverify-confirm: "Opravdu chcete zrušit designaci \"ověřený účet\"?"
|
|
||||||
unverified: "Ruší se potvrzení účtu"
|
|
||||||
update-remote-user: "Aktualizovat informace o vzdáleném účtu"
|
update-remote-user: "Aktualizovat informace o vzdáleném účtu"
|
||||||
users:
|
users:
|
||||||
title: "Uživatel"
|
title: "Uživatel"
|
||||||
@@ -952,7 +980,6 @@ admin/views/users.vue:
|
|||||||
all: "Všechny"
|
all: "Všechny"
|
||||||
moderator: "Moderátor"
|
moderator: "Moderátor"
|
||||||
adminOrModerator: "Admin/Moderátor"
|
adminOrModerator: "Admin/Moderátor"
|
||||||
verified: "Ověřený účet"
|
|
||||||
origin:
|
origin:
|
||||||
title: "Původ"
|
title: "Původ"
|
||||||
combined: "Lokální + Vzdálené"
|
combined: "Lokální + Vzdálené"
|
||||||
@@ -1003,7 +1030,7 @@ admin/views/federation.vue:
|
|||||||
status: "Status"
|
status: "Status"
|
||||||
latest-request-received-at: "Poslední požadavek přijat"
|
latest-request-received-at: "Poslední požadavek přijat"
|
||||||
block: "Blokován"
|
block: "Blokován"
|
||||||
instances: "Federovaná"
|
instances: "Z fedivesmíru"
|
||||||
states:
|
states:
|
||||||
all: "Všechny"
|
all: "Všechny"
|
||||||
blocked: "Blokován"
|
blocked: "Blokován"
|
||||||
@@ -1017,6 +1044,7 @@ admin/views/federation.vue:
|
|||||||
chart-spans:
|
chart-spans:
|
||||||
hour: "za hodinu"
|
hour: "za hodinu"
|
||||||
day: "za den"
|
day: "za den"
|
||||||
|
blocked-hosts: "Blokován"
|
||||||
desktop/views/pages/welcome.vue:
|
desktop/views/pages/welcome.vue:
|
||||||
about: "O Misskey"
|
about: "O Misskey"
|
||||||
timeline: "Časová osa"
|
timeline: "Časová osa"
|
||||||
@@ -1057,8 +1085,6 @@ desktop/views/pages/user/user.header.vue:
|
|||||||
posts: "Poznámky"
|
posts: "Poznámky"
|
||||||
month: "Po"
|
month: "Po"
|
||||||
day: "Ne"
|
day: "Ne"
|
||||||
desktop/views/widgets/messaging.vue:
|
|
||||||
title: "Zprávy"
|
|
||||||
desktop/views/widgets/notifications.vue:
|
desktop/views/widgets/notifications.vue:
|
||||||
title: "Oznámení"
|
title: "Oznámení"
|
||||||
desktop/views/widgets/polls.vue:
|
desktop/views/widgets/polls.vue:
|
||||||
@@ -1069,7 +1095,6 @@ mobile/views/components/drive.vue:
|
|||||||
used: "využito"
|
used: "využito"
|
||||||
file-count: "Soubor(ů)"
|
file-count: "Soubor(ů)"
|
||||||
folder-is-empty: "Tato složka je prázdná"
|
folder-is-empty: "Tato složka je prázdná"
|
||||||
deletion-alert: "Omlouváme se, ale mazání složek ještě nebylo implementováno."
|
|
||||||
folder-name: "Název složky"
|
folder-name: "Název složky"
|
||||||
url-prompt: "URL adresa souboru, který chcete nahrát"
|
url-prompt: "URL adresa souboru, který chcete nahrát"
|
||||||
uploading: "Byl zahájen upload. Může chvilku trvat než bude dokončen."
|
uploading: "Byl zahájen upload. Může chvilku trvat než bude dokončen."
|
||||||
@@ -1111,7 +1136,7 @@ mobile/views/components/post-form.vue:
|
|||||||
reply: "Odpovědět"
|
reply: "Odpovědět"
|
||||||
renote: "Renotovat"
|
renote: "Renotovat"
|
||||||
reply-placeholder: "Odpovědět na tento příspěvěk"
|
reply-placeholder: "Odpovědět na tento příspěvěk"
|
||||||
location-alert: "Vaše zařízení nepodporuje lokační službu"
|
geolocation-alert: "Vaše zařízení nepodporuje lokační službu"
|
||||||
error: "Chyba"
|
error: "Chyba"
|
||||||
username-prompt: "Zadejte uživatelské jméno"
|
username-prompt: "Zadejte uživatelské jméno"
|
||||||
mobile/views/components/sub-note-content.vue:
|
mobile/views/components/sub-note-content.vue:
|
||||||
@@ -1130,8 +1155,10 @@ mobile/views/components/ui.nav.vue:
|
|||||||
game: "Hry"
|
game: "Hry"
|
||||||
admin: "Administrace"
|
admin: "Administrace"
|
||||||
about: "O Misskey"
|
about: "O Misskey"
|
||||||
mobile/views/pages/user-lists.vue:
|
mobile/views/pages/drive.vue:
|
||||||
title: "Seznamy"
|
contextmenu:
|
||||||
|
upload: "Nahrát soubor"
|
||||||
|
create-folder: "Vytvořit složku"
|
||||||
mobile/views/pages/signup.vue:
|
mobile/views/pages/signup.vue:
|
||||||
lets-start: "Váš účet je připraven! 📦"
|
lets-start: "Váš účet je připraven! 📦"
|
||||||
mobile/views/pages/home.vue:
|
mobile/views/pages/home.vue:
|
||||||
@@ -1139,7 +1166,6 @@ mobile/views/pages/home.vue:
|
|||||||
local: "Lokální"
|
local: "Lokální"
|
||||||
global: "Globální"
|
global: "Globální"
|
||||||
mentions: "Zmínění"
|
mentions: "Zmínění"
|
||||||
messages: "Zprávy"
|
|
||||||
mobile/views/pages/tag.vue:
|
mobile/views/pages/tag.vue:
|
||||||
no-posts-found: "Nebyly nalezeny žádné příspěvky s \"{q}\"."
|
no-posts-found: "Nebyly nalezeny žádné příspěvky s \"{q}\"."
|
||||||
mobile/views/pages/widgets.vue:
|
mobile/views/pages/widgets.vue:
|
||||||
@@ -1149,9 +1175,6 @@ mobile/views/pages/widgets/activity.vue:
|
|||||||
activity: "Aktivita"
|
activity: "Aktivita"
|
||||||
mobile/views/pages/share.vue:
|
mobile/views/pages/share.vue:
|
||||||
share-with: "Sdílet na {name}"
|
share-with: "Sdílet na {name}"
|
||||||
mobile/views/pages/received-follow-requests.vue:
|
|
||||||
accept: "Přijmout"
|
|
||||||
reject: "Odmítnout"
|
|
||||||
mobile/views/pages/note.vue:
|
mobile/views/pages/note.vue:
|
||||||
prev: "Předchozí příspěvěk"
|
prev: "Předchozí příspěvěk"
|
||||||
next: "Následující příspěvek"
|
next: "Následující příspěvek"
|
||||||
@@ -1183,11 +1206,43 @@ deck/deck.user-column.vue:
|
|||||||
activity: "Aktivita"
|
activity: "Aktivita"
|
||||||
dev/views/new-app.vue:
|
dev/views/new-app.vue:
|
||||||
app-name-desc: "Jméno vaší aplikace"
|
app-name-desc: "Jméno vaší aplikace"
|
||||||
app-desc: "Stručný popis nebo představení vaší aplikace."
|
pages:
|
||||||
account-read: "Zobrazit informace účtu"
|
like: "Lajk"
|
||||||
note-write: "Odeslat."
|
title: "Titulek"
|
||||||
reaction-write: "Přidat nebo odebrat reakce."
|
blocks:
|
||||||
following-write: "Sledovat a přestat sledovat"
|
post: "Formulář pro psaní"
|
||||||
drive-read: "Přečíst váš Disk"
|
_post:
|
||||||
notification-read: "Sledovat oznámení."
|
text: "Obsah"
|
||||||
notification-write: "Zpravovat notifikace."
|
_textInput:
|
||||||
|
text: "Titulek"
|
||||||
|
_textareaInput:
|
||||||
|
text: "Titulek"
|
||||||
|
_numberInput:
|
||||||
|
text: "Titulek"
|
||||||
|
_switch:
|
||||||
|
text: "Titulek"
|
||||||
|
_counter:
|
||||||
|
text: "Titulek"
|
||||||
|
_button:
|
||||||
|
text: "Titulek"
|
||||||
|
_action:
|
||||||
|
_dialog:
|
||||||
|
content: "Obsah"
|
||||||
|
script:
|
||||||
|
categories:
|
||||||
|
random: "Náhodně"
|
||||||
|
list: "Seznamy"
|
||||||
|
blocks:
|
||||||
|
_join:
|
||||||
|
arg1: "Seznamy"
|
||||||
|
random: "Náhodně"
|
||||||
|
_randomPick:
|
||||||
|
arg1: "Seznamy"
|
||||||
|
_dailyRandomPick:
|
||||||
|
arg1: "Seznamy"
|
||||||
|
_seedRandomPick:
|
||||||
|
arg2: "Seznamy"
|
||||||
|
_pick:
|
||||||
|
arg1: "Seznamy"
|
||||||
|
types:
|
||||||
|
array: "Seznamy"
|
||||||
|
|||||||
1896
locales/da-DK.yml
Normal file
1896
locales/da-DK.yml
Normal file
File diff suppressed because it is too large
Load Diff
@@ -7,6 +7,7 @@ common:
|
|||||||
about: "Danke, dass Du Misskey gefunden hast. Misskey ist eine <b>dezentralisierte Microblogging-Plattform</b>, welche auf der ganzen Welt verteilt ist. Da es innerhalb es Fediversums existiert (ein Universum, in dem verschiedene Soziale Netzwerke organisiert sind), ist es unmittelbar mit anderen sozialen Netzwerken verbunden. Warum nimmst du dir nicht einmal eine Auszeit von dem Trubel der Stadt und tauchst in das neue Internet hinein?"
|
about: "Danke, dass Du Misskey gefunden hast. Misskey ist eine <b>dezentralisierte Microblogging-Plattform</b>, welche auf der ganzen Welt verteilt ist. Da es innerhalb es Fediversums existiert (ein Universum, in dem verschiedene Soziale Netzwerke organisiert sind), ist es unmittelbar mit anderen sozialen Netzwerken verbunden. Warum nimmst du dir nicht einmal eine Auszeit von dem Trubel der Stadt und tauchst in das neue Internet hinein?"
|
||||||
intro:
|
intro:
|
||||||
title: "Was ist Misskey?"
|
title: "Was ist Misskey?"
|
||||||
|
about: "Misskey ist eine Quelloffene, <b>dezentralisierte microblogging Software</b>. Es bietet eine erweiterbare Benutzeroberfläche, verschiedenste Möglichkeiten auf Beiträge zu reagieren, kostenlosen Datenspeicher, und andere fortschrittliche Funktionen. Zusätzlich ist Misskey dazu in der Lage, sich mittels des Fediverse mit beliebig vielen anderen ActivityPub-kompatiblen Diensten zu verbinden. Wenn du zum Beispiel einen Betrag mit Misskey abschickst, wird dieser auch für Nutzer von Mastodon oder Pleroma sichtbar sein. So ähnlich wie eine Radioübertragung zwischen Planeten."
|
||||||
features: "Funktionen"
|
features: "Funktionen"
|
||||||
rich-contents: "Notizen"
|
rich-contents: "Notizen"
|
||||||
reaction: "Reaktionen"
|
reaction: "Reaktionen"
|
||||||
@@ -19,6 +20,13 @@ common:
|
|||||||
load-more: "Mehr laden"
|
load-more: "Mehr laden"
|
||||||
enter-password: "Bitte Passwort eingeben"
|
enter-password: "Bitte Passwort eingeben"
|
||||||
2fa: "Zwei-Faktor-Authentifizierung"
|
2fa: "Zwei-Faktor-Authentifizierung"
|
||||||
|
customize-home: "Layout Anpassen"
|
||||||
|
featured-notes: "Hervorgehobene Beiträge"
|
||||||
|
dark-mode: "Dunkler Modus"
|
||||||
|
signin: "Einloggen"
|
||||||
|
signup: "Registrieren"
|
||||||
|
signout: "Ausloggen"
|
||||||
|
reload-to-apply-the-setting: "Die Seite muss zum Übernehmen dieser Einstellung aktualisiert werden. Soll die Seite jetzt neu geladen werden?"
|
||||||
got-it: "Verstanden!"
|
got-it: "Verstanden!"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "Anpassung-Tipps"
|
title: "Anpassung-Tipps"
|
||||||
@@ -26,6 +34,7 @@ common:
|
|||||||
notification:
|
notification:
|
||||||
file-uploaded: "Datei hochgeladen!"
|
file-uploaded: "Datei hochgeladen!"
|
||||||
message-from: "Nachricht von {}:"
|
message-from: "Nachricht von {}:"
|
||||||
|
reversi-invited: "Zu einem Spiel eingeladen"
|
||||||
reversi-invited-by: "Eingeladen von {}:"
|
reversi-invited-by: "Eingeladen von {}:"
|
||||||
notified-by: "Benachrichtigt von {}:"
|
notified-by: "Benachrichtigt von {}:"
|
||||||
reply-from: "Antwort von {}:"
|
reply-from: "Antwort von {}:"
|
||||||
@@ -44,9 +53,28 @@ common:
|
|||||||
month-and-day: "{day}/{month}"
|
month-and-day: "{day}/{month}"
|
||||||
trash: "Papierkorb"
|
trash: "Papierkorb"
|
||||||
drive: "Drive"
|
drive: "Drive"
|
||||||
|
pages: "Seite"
|
||||||
messaging: "Unterhaltungen"
|
messaging: "Unterhaltungen"
|
||||||
home: "Home"
|
home: "Home"
|
||||||
favorites: "Diese Notiz favorisieren"
|
deck: "Stapel"
|
||||||
|
timeline: "Zeitleiste"
|
||||||
|
explore: "Entdecken"
|
||||||
|
following: "Folgt"
|
||||||
|
followers: "Folgende"
|
||||||
|
favorites: "Diesen Beitrag favorisieren"
|
||||||
|
permissions:
|
||||||
|
"read:account": "Accountinformationen anzeigen."
|
||||||
|
"write:account": "Accountinformationen bearbeiten."
|
||||||
|
"read:blocks": "Blöcke anzeigen"
|
||||||
|
"read:drive": "Dateien anzeigen"
|
||||||
|
"write:drive": "Dateien bearbeiten"
|
||||||
|
"read:favorites": "Favoriten anzeigen"
|
||||||
|
"read:messaging": "Unterhaltung anzeigen"
|
||||||
|
"write:messaging": "Unterhaltung bearbeiten"
|
||||||
|
"write:votes": "Abstimmen"
|
||||||
|
empty-timeline-info:
|
||||||
|
follow-users-to-make-your-timeline: "Beiträge von Benutzern, denen du folgst, werden in der Zeitleiste angezeigt."
|
||||||
|
explore: "Benutzer finden"
|
||||||
weekday-short:
|
weekday-short:
|
||||||
sunday: "So"
|
sunday: "So"
|
||||||
monday: "Mo"
|
monday: "Mo"
|
||||||
@@ -77,11 +105,11 @@ common:
|
|||||||
note-visibility:
|
note-visibility:
|
||||||
public: "Öffentlich"
|
public: "Öffentlich"
|
||||||
home: "Startseite"
|
home: "Startseite"
|
||||||
home-desc: "Nur auf die Startseite posten"
|
home-desc: "Auf die Startseite posten"
|
||||||
followers: "Abonnenten"
|
followers: "Abonnenten"
|
||||||
followers-desc: "Nur für diejenigen sichtbar, die dir folgen"
|
followers-desc: "Nur für diejenigen sichtbar, die dir folgen"
|
||||||
specified: "Direkt"
|
specified: "Direkt"
|
||||||
specified-desc: "Nur für bestimmte Benutzer posten"
|
specified-desc: "Nur für bestimmte Benutzer sichtbar"
|
||||||
local-public: "Öffentlich (nur lokal)"
|
local-public: "Öffentlich (nur lokal)"
|
||||||
local-home: "Home (nur lokal)"
|
local-home: "Home (nur lokal)"
|
||||||
local-followers: "Follower (nur lokal)"
|
local-followers: "Follower (nur lokal)"
|
||||||
@@ -91,19 +119,41 @@ common:
|
|||||||
c: "Was geht dir durch den Kopf?"
|
c: "Was geht dir durch den Kopf?"
|
||||||
d: "Willst du etwas sagen?"
|
d: "Willst du etwas sagen?"
|
||||||
e: "Schreib hier etwas!"
|
e: "Schreib hier etwas!"
|
||||||
f: "Warte darauf, das du schreibst."
|
f: "Warte darauf, das du schreibst..."
|
||||||
|
settings: "Einstellungen"
|
||||||
_settings:
|
_settings:
|
||||||
profile: "Dein Profil"
|
profile: "Dein Profil"
|
||||||
notification: "Benachrichtigungen"
|
notification: "Benachrichtigungen"
|
||||||
|
apps: "Anwendungen"
|
||||||
|
tags: "Hashtags"
|
||||||
|
mute-and-block: "Stummschalten/Blocken"
|
||||||
|
blocking: "Blocken"
|
||||||
|
security: "Sicherheit"
|
||||||
|
signin: "Login-Verlauf"
|
||||||
password: "Passwort"
|
password: "Passwort"
|
||||||
|
other: "Mehr"
|
||||||
|
appearance: "Designs"
|
||||||
|
behavior: "Verhalten"
|
||||||
|
fetch-on-scroll: "Unendliches laden beim scrollen"
|
||||||
|
fetch-on-scroll-desc: "Wenn beim scrollen das Ende erreicht wird, lädt die Anwendung automatisch neue Inhalte nach."
|
||||||
|
note-visibility: "Sichtbarkeit von Beiträgen"
|
||||||
|
default-note-visibility: "Die Standardsichtbarkeit"
|
||||||
|
remember-note-visibility: "Erinnerung an Sichtbarkeit von Beiträgen"
|
||||||
|
web-search-engine: "Web-Suchmaschine"
|
||||||
|
web-search-engine-desc: "Beispiel: https://www.google.de/search?q={{query}}"
|
||||||
|
keep-cw: "Inhaltswarnung beibehalten"
|
||||||
|
keep-cw-desc: "Wenn auf einen Beitrag geantwortet wird, wird die Inhaltswarnung des Originalbeitrags übernommen."
|
||||||
|
i-like-sushi: "Ich bevorzuge Sushi anstelle von Pudding"
|
||||||
|
show-reversi-board-labels: "Zeige Reihen- und Spaltenbeschreibungen in Reversi an"
|
||||||
|
use-avatar-reversi-stones: "Avatar als Stein in Reversi anzeigen"
|
||||||
|
disable-animated-mfm: "Animierten Text in Beiträgen deaktivieren"
|
||||||
search: "Suche"
|
search: "Suche"
|
||||||
delete: "Löschen"
|
delete: "Löschen"
|
||||||
loading: "Laden"
|
loading: "Laden"
|
||||||
update-available-title: "Aktualisierung verfügbar"
|
update-available-title: "Aktualisierung verfügbar"
|
||||||
update-available: "Eine neue Version von Misskey ist verfügbar ({newer}, aktuell ist {current}). Lade die Seite neu um die aktuelle Version zu laden"
|
update-available: "Eine neue Version von Misskey ist verfügbar ({newer}, aktuell ist {current}). Lade die Seite neu um die aktuelle Version zu laden"
|
||||||
my-token-regenerated: "Dein Token wurde generiert. Du wirst jetzt abgemeldet."
|
my-token-regenerated: "Dein Token wurde generiert. Du wirst jetzt abgemeldet."
|
||||||
verified-user: "Verifizierter Benutzer"
|
do-not-use-in-production: "Dies ist eine Entwicklungsversion. Nicht in einer Produktivumgebung verwenden."
|
||||||
do-not-use-in-production: "Dies ist eine Entwicklungsversion. Nicht in einer Produktionsumgebung verwenden."
|
|
||||||
error:
|
error:
|
||||||
retry: "Erneut versuchen"
|
retry: "Erneut versuchen"
|
||||||
reversi:
|
reversi:
|
||||||
@@ -117,7 +167,7 @@ common:
|
|||||||
analog-clock: "Analoge Uhr"
|
analog-clock: "Analoge Uhr"
|
||||||
profile: "Profil"
|
profile: "Profil"
|
||||||
calendar: "Kalender"
|
calendar: "Kalender"
|
||||||
timemachine: "Kalender (Zeitmaschiene)"
|
timemachine: "Kalender (Zeitmaschine)"
|
||||||
activity: "Aktivitäten"
|
activity: "Aktivitäten"
|
||||||
rss: "RSS Leser"
|
rss: "RSS Leser"
|
||||||
memo: "Notizen"
|
memo: "Notizen"
|
||||||
@@ -128,7 +178,7 @@ common:
|
|||||||
notifications: "Benachrichtigungen"
|
notifications: "Benachrichtigungen"
|
||||||
users: "Empfohlene Benutzer"
|
users: "Empfohlene Benutzer"
|
||||||
polls: "Umfrage"
|
polls: "Umfrage"
|
||||||
post-form: "Beitragsform"
|
post-form: "\"Neuer Beitrag\"-Formular"
|
||||||
server: "Server-Info"
|
server: "Server-Info"
|
||||||
nav: "Navigation"
|
nav: "Navigation"
|
||||||
tips: "Tipps"
|
tips: "Tipps"
|
||||||
@@ -138,13 +188,6 @@ common:
|
|||||||
auth/views/form.vue:
|
auth/views/form.vue:
|
||||||
share-access: "Erlaubst Du <i>{name}</i> auf deinen Account zuzugreifen?"
|
share-access: "Erlaubst Du <i>{name}</i> auf deinen Account zuzugreifen?"
|
||||||
permission-ask: "Diese Applikation benötigt folgende Berechtigungen:"
|
permission-ask: "Diese Applikation benötigt folgende Berechtigungen:"
|
||||||
account-read: "Accountinformationen anzeigen."
|
|
||||||
account-write: "Accountinformationen bearbeiten."
|
|
||||||
note-write: "Senden."
|
|
||||||
like-write: "Auf Beiträge reagieren."
|
|
||||||
following-write: "Folgen oder entfolgen."
|
|
||||||
notification-read: "Siehe deine Benachrichtigungen."
|
|
||||||
notification-write: "Benachrichtigungen verwalten."
|
|
||||||
cancel: "Abbrechen"
|
cancel: "Abbrechen"
|
||||||
accept: "Zugriff erlauben."
|
accept: "Zugriff erlauben."
|
||||||
auth/views/index.vue:
|
auth/views/index.vue:
|
||||||
@@ -155,8 +198,6 @@ auth/views/index.vue:
|
|||||||
please-go-back: "Bitte gehe zurück zur Anwendung."
|
please-go-back: "Bitte gehe zurück zur Anwendung."
|
||||||
error: "Sitzung ist nicht vorhanden."
|
error: "Sitzung ist nicht vorhanden."
|
||||||
sign-in: "Bitte melde dich an."
|
sign-in: "Bitte melde dich an."
|
||||||
common/views/pages/explore.vue:
|
|
||||||
verified-users: "Verifizierter Benutzer"
|
|
||||||
common/views/components/games/reversi/reversi.vue:
|
common/views/components/games/reversi/reversi.vue:
|
||||||
matching:
|
matching:
|
||||||
waiting-for: "Warten auf {}"
|
waiting-for: "Warten auf {}"
|
||||||
@@ -185,7 +226,7 @@ common/views/components/games/reversi/reversi.room.vue:
|
|||||||
ready: "Bereit"
|
ready: "Bereit"
|
||||||
common/views/components/connect-failed.vue:
|
common/views/components/connect-failed.vue:
|
||||||
title: "Verbindung zum Server ist fehlgeschlagen"
|
title: "Verbindung zum Server ist fehlgeschlagen"
|
||||||
description: "Es gibt entweder ein Problem mit deiner Internetverbindung, der Server ist nicht erreichbar oder wird gerade gewartet. Bitte versuche es später noch einmal."
|
description: "Entweder gibt es ein Problem mit deiner Internetverbindung oder der Server ist zur Zeit nicht erreichbar oder wird gewartet. Bitte versuche es später noch einmal."
|
||||||
thanks: "Vielen Dank für das nutzen von Misskey."
|
thanks: "Vielen Dank für das nutzen von Misskey."
|
||||||
troubleshoot: "Problembehandlung"
|
troubleshoot: "Problembehandlung"
|
||||||
common/views/components/connect-failed.troubleshooter.vue:
|
common/views/components/connect-failed.troubleshooter.vue:
|
||||||
@@ -202,8 +243,8 @@ common/views/components/connect-failed.troubleshooter.vue:
|
|||||||
no-internet: "Keine Internetverbindung"
|
no-internet: "Keine Internetverbindung"
|
||||||
no-internet-desc: "Bitte vergewissere dich, dass du mit dem Internet verbunden bist."
|
no-internet-desc: "Bitte vergewissere dich, dass du mit dem Internet verbunden bist."
|
||||||
no-server: "Verbindung mit dem Server nicht möglich"
|
no-server: "Verbindung mit dem Server nicht möglich"
|
||||||
no-server-desc: "Die Internetverbindung scheint in Ordnung zu sein, aber eine Verbindung mit dem Misskey Server konnte nicht hergestellt werden. Möglicherweise ist dieser zur Zeit offline oder in der Wartung, bitte versuche es später noch einmal."
|
no-server-desc: "Die Internetverbindung scheint in Ordnung zu sein, aber eine Verbindung mit dem Misskey-Server konnte nicht hergestellt werden. Möglicherweise ist dieser zur Zeit offline oder wird gewartet. Bitte versuche es später noch einmal."
|
||||||
success: "Erfolgreich mit dem Misskey Server verbunden"
|
success: "Erfolgreich mit dem Misskey-Server verbunden"
|
||||||
success-desc: "Die Verbindung scheint zu funktionieren. Bitte lade die Seite neu."
|
success-desc: "Die Verbindung scheint zu funktionieren. Bitte lade die Seite neu."
|
||||||
flush: "Cache leeren"
|
flush: "Cache leeren"
|
||||||
set-version: "Version angeben"
|
set-version: "Version angeben"
|
||||||
@@ -230,6 +271,7 @@ common/views/components/theme.vue:
|
|||||||
invalid-theme: "Thema ist ungültig"
|
invalid-theme: "Thema ist ungültig"
|
||||||
already-installed: "Thema ist bereits installiert"
|
already-installed: "Thema ist bereits installiert"
|
||||||
author: "Autor"
|
author: "Autor"
|
||||||
|
desc: "Beschreibung"
|
||||||
export: "Exportieren"
|
export: "Exportieren"
|
||||||
import: "Importieren"
|
import: "Importieren"
|
||||||
common/views/components/cw-button.vue:
|
common/views/components/cw-button.vue:
|
||||||
@@ -239,9 +281,7 @@ common/views/components/messaging.vue:
|
|||||||
you: "Du"
|
you: "Du"
|
||||||
no-history: "Keine Chronik"
|
no-history: "Keine Chronik"
|
||||||
common/views/components/messaging-room.vue:
|
common/views/components/messaging-room.vue:
|
||||||
empty: "Keine Unterhaltungen"
|
|
||||||
no-history: "Keine weitere Chronik vorhanden"
|
no-history: "Keine weitere Chronik vorhanden"
|
||||||
resize-form: "Ziehen um die Größe zu verändern"
|
|
||||||
new-message: "Neue Nachricht"
|
new-message: "Neue Nachricht"
|
||||||
common/views/components/messaging-room.form.vue:
|
common/views/components/messaging-room.form.vue:
|
||||||
input-message-here: "Nachricht hier eingeben"
|
input-message-here: "Nachricht hier eingeben"
|
||||||
@@ -257,15 +297,15 @@ common/views/components/nav.vue:
|
|||||||
status: "Status"
|
status: "Status"
|
||||||
wiki: "Wiki"
|
wiki: "Wiki"
|
||||||
donors: "Spender"
|
donors: "Spender"
|
||||||
repository: "Projektarchiv"
|
repository: "Quellcode"
|
||||||
develop: "Entwickler"
|
develop: "Entwickler"
|
||||||
feedback: "Feedback"
|
feedback: "Feedback"
|
||||||
common/views/components/note-menu.vue:
|
common/views/components/note-menu.vue:
|
||||||
favorite: "Diese Notiz favorisieren"
|
favorite: "Diesen Beitrag favorisieren"
|
||||||
unfavorite: "Aus Favoriten entfernen"
|
unfavorite: "Aus Favoriten entfernen"
|
||||||
pin: "An die Profilseite pinnen"
|
pin: "An die Profilseite pinnen"
|
||||||
delete: "Löschen"
|
delete: "Löschen"
|
||||||
delete-confirm: "Diesen Post löschen?"
|
delete-confirm: "Diesen Beitrag löschen?"
|
||||||
remote: "Auf Quelle anzeigen"
|
remote: "Auf Quelle anzeigen"
|
||||||
common/views/components/poll.vue:
|
common/views/components/poll.vue:
|
||||||
vote-to: "Stimme für '{}'"
|
vote-to: "Stimme für '{}'"
|
||||||
@@ -302,8 +342,8 @@ common/views/components/signup.vue:
|
|||||||
password: "Passwort"
|
password: "Passwort"
|
||||||
password-placeholder: "Wir empfehlen mindestens 8 Zeichen"
|
password-placeholder: "Wir empfehlen mindestens 8 Zeichen"
|
||||||
weak-password: "Schwaches Passwort"
|
weak-password: "Schwaches Passwort"
|
||||||
normal-password: "Faires Passwort"
|
normal-password: "Normales Passwort"
|
||||||
strong-password: "Schwaches Passwort"
|
strong-password: "Starkes Passwort"
|
||||||
retype: "Wiederholen"
|
retype: "Wiederholen"
|
||||||
retype-placeholder: "Bitte das Passwort erneut eingeben"
|
retype-placeholder: "Bitte das Passwort erneut eingeben"
|
||||||
password-matched: "OK"
|
password-matched: "OK"
|
||||||
@@ -325,16 +365,17 @@ common/views/components/uploader.vue:
|
|||||||
common/views/components/visibility-chooser.vue:
|
common/views/components/visibility-chooser.vue:
|
||||||
public: "Öffentlich"
|
public: "Öffentlich"
|
||||||
home: "Home"
|
home: "Home"
|
||||||
home-desc: "Nur auf die Startseite posten"
|
home-desc: "Auf die Startseite posten"
|
||||||
followers: "Folgende"
|
followers: "Folgende"
|
||||||
followers-desc: "Nur für diejenigen sichtbar, die dir folgen"
|
followers-desc: "Nur für diejenigen sichtbar, die dir folgen"
|
||||||
specified: "Direkt"
|
specified: "Direkt"
|
||||||
specified-desc: "Poste nur für bestimmte Benutzer"
|
specified-desc: "Nur für bestimmte Benutzer sichtbar"
|
||||||
local-public: "Öffentlich (nur lokal)"
|
local-public: "Öffentlich (nur lokal)"
|
||||||
local-home: "Home (nur lokal)"
|
local-home: "Home (nur lokal)"
|
||||||
local-followers: "Follower (nur lokal)"
|
local-followers: "Follower (nur lokal)"
|
||||||
common/views/components/profile-editor.vue:
|
common/views/components/profile-editor.vue:
|
||||||
title: "Dein Profil"
|
title: "Dein Profil"
|
||||||
|
name: "Name"
|
||||||
avatar: "Avatar"
|
avatar: "Avatar"
|
||||||
banner: "Banner"
|
banner: "Banner"
|
||||||
save: "Speichern"
|
save: "Speichern"
|
||||||
@@ -343,6 +384,12 @@ common/views/components/profile-editor.vue:
|
|||||||
export-targets:
|
export-targets:
|
||||||
user-lists: "Listen"
|
user-lists: "Listen"
|
||||||
enter-password: "Bitte Passwort eingeben"
|
enter-password: "Bitte Passwort eingeben"
|
||||||
|
common/views/components/user-group-editor.vue:
|
||||||
|
invite: "Einladen"
|
||||||
|
common/views/components/user-lists.vue:
|
||||||
|
user-lists: "Listen"
|
||||||
|
common/views/components/user-groups.vue:
|
||||||
|
invites: "Einladen"
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "Laden"
|
fetching: "Laden"
|
||||||
no-broadcasts: "Keine Broadcasts"
|
no-broadcasts: "Keine Broadcasts"
|
||||||
@@ -406,8 +453,8 @@ desktop/views/components/drive.file.vue:
|
|||||||
copied: "Kopieren erfolgreich"
|
copied: "Kopieren erfolgreich"
|
||||||
copied-url-to-clipboard: "URL wurde in die Zwischenablage kopiert"
|
copied-url-to-clipboard: "URL wurde in die Zwischenablage kopiert"
|
||||||
desktop/views/components/drive.folder.vue:
|
desktop/views/components/drive.folder.vue:
|
||||||
unable-to-process: "Der Vorgang konnte nicht beendet werden"
|
unable-to-process: "Der Vorgang konnte nicht abgeschlossen werden"
|
||||||
circular-reference-detected: "Das Zielverzeichnis ist ein Unterverzeichnis des Verzeichnisses welches du verschieben möchtest"
|
circular-reference-detected: "Das Zielverzeichnis ist innerhalb des Verzeichnisses, dass du verschieben möchtest"
|
||||||
unhandled-error: "Unbekannter Fehler"
|
unhandled-error: "Unbekannter Fehler"
|
||||||
contextmenu:
|
contextmenu:
|
||||||
move-to-this-folder: "Verschiebe in diesen Ordner"
|
move-to-this-folder: "Verschiebe in diesen Ordner"
|
||||||
@@ -422,7 +469,7 @@ desktop/views/components/drive.vue:
|
|||||||
empty-drive-description: "Du kannst rechts klicken und \"Datei hochladen\" auswählen oder eine Datei per Drag and Drop auf das Fenster ziehen."
|
empty-drive-description: "Du kannst rechts klicken und \"Datei hochladen\" auswählen oder eine Datei per Drag and Drop auf das Fenster ziehen."
|
||||||
empty-folder: "Dieser Ordner ist leer"
|
empty-folder: "Dieser Ordner ist leer"
|
||||||
unable-to-process: "Der Vorgang konnte nicht beendet werden"
|
unable-to-process: "Der Vorgang konnte nicht beendet werden"
|
||||||
circular-reference-detected: "Das Zielverzeichnis ist ein Unterverzeichnis des Verzeichnisses welches du verschieben möchtest"
|
circular-reference-detected: "Das Zielverzeichnis ist innerhalb des Verzeichnisses, dass du verschieben möchtest"
|
||||||
unhandled-error: "Unbekannter Fehler"
|
unhandled-error: "Unbekannter Fehler"
|
||||||
url-upload: "Von einer URL hochladen"
|
url-upload: "Von einer URL hochladen"
|
||||||
url-of-file: "URL der Datei, welche du hochladen möchtest"
|
url-of-file: "URL der Datei, welche du hochladen möchtest"
|
||||||
@@ -445,20 +492,16 @@ desktop/views/components/home.vue:
|
|||||||
desktop/views/input-dialog.vue:
|
desktop/views/input-dialog.vue:
|
||||||
cancel: "Abbrechen"
|
cancel: "Abbrechen"
|
||||||
ok: "OK"
|
ok: "OK"
|
||||||
desktop/views/components/messaging-room-window.vue:
|
|
||||||
title: "Nachrichten:"
|
|
||||||
desktop/views/components/messaging-window.vue:
|
|
||||||
title: "Nachrichten"
|
|
||||||
desktop/views/components/note-detail.vue:
|
desktop/views/components/note-detail.vue:
|
||||||
private: "Dieser Post ist privat"
|
private: "Dieser Beitrag ist privat"
|
||||||
deleted: "Dieser Beitrag wurde entfernt"
|
deleted: "Dieser Beitrag wurde entfernt"
|
||||||
location: "Ort"
|
location: "Ort"
|
||||||
renote: "Anmerkung"
|
renote: "Anmerkung"
|
||||||
add-reaction: "Reaktion hinzufügen"
|
add-reaction: "Reaktion hinzufügen"
|
||||||
desktop/views/components/note.vue:
|
desktop/views/components/note.vue:
|
||||||
reply: "Antworten"
|
reply: "Antworten"
|
||||||
renote: "Anmerkung"
|
renote: "Anmerken"
|
||||||
private: "Dieser Post ist privat"
|
private: "Dieser Beitrag ist privat"
|
||||||
deleted: "Dieser Beitrag wurde entfernt"
|
deleted: "Dieser Beitrag wurde entfernt"
|
||||||
desktop/views/components/notes.vue:
|
desktop/views/components/notes.vue:
|
||||||
error: "Laden fehlgeschlagen."
|
error: "Laden fehlgeschlagen."
|
||||||
@@ -470,9 +513,9 @@ desktop/views/components/post-form.vue:
|
|||||||
hide-contents: "Inhalt verstecken"
|
hide-contents: "Inhalt verstecken"
|
||||||
reply-placeholder: "Antworte auf diese Anmerkung..."
|
reply-placeholder: "Antworte auf diese Anmerkung..."
|
||||||
quote-placeholder: "Zitiere diese Anmerkung..."
|
quote-placeholder: "Zitiere diese Anmerkung..."
|
||||||
submit: "Beitragsform"
|
submit: "Abschicken"
|
||||||
reply: "Antworten"
|
reply: "Antworten"
|
||||||
renote: "Anmerkung"
|
renote: "Anmerken"
|
||||||
posted: "Gepostet!"
|
posted: "Gepostet!"
|
||||||
replied: "Geantwortet!"
|
replied: "Geantwortet!"
|
||||||
reposted: "Weitergesagt!"
|
reposted: "Weitergesagt!"
|
||||||
@@ -482,14 +525,13 @@ desktop/views/components/post-form.vue:
|
|||||||
posting: "Posting"
|
posting: "Posting"
|
||||||
attach-media-from-local: "Medien von deinem PC hinzufügen"
|
attach-media-from-local: "Medien von deinem PC hinzufügen"
|
||||||
attach-media-from-drive: "Medien von deinem Speicher hinzufügen"
|
attach-media-from-drive: "Medien von deinem Speicher hinzufügen"
|
||||||
attach-cancel: "Hinzufügen abbrechen"
|
|
||||||
create-poll: "Eine Abstimmung erstellen"
|
create-poll: "Eine Abstimmung erstellen"
|
||||||
text-remain: "{} Zeichen verbleibend"
|
text-remain: "{} Zeichen verbleibend"
|
||||||
visibility: "Sichtbarkeit"
|
visibility: "Sichtbarkeit"
|
||||||
error: "Fehler"
|
error: "Fehler"
|
||||||
enter-username: "Bitte gib einen Benutzernamen ein..."
|
enter-username: "Bitte gib einen Benutzernamen ein..."
|
||||||
desktop/views/components/post-form-window.vue:
|
desktop/views/components/post-form-window.vue:
|
||||||
note: "Neue Notiz"
|
note: "Neuer Beitrag"
|
||||||
reply: "Antworten"
|
reply: "Antworten"
|
||||||
attaches: "{} Medien hinzugefügt"
|
attaches: "{} Medien hinzugefügt"
|
||||||
uploading-media: "Lade {} Medien hoch"
|
uploading-media: "Lade {} Medien hoch"
|
||||||
@@ -503,7 +545,7 @@ desktop/views/components/renote-form.vue:
|
|||||||
success: "Weitergesagt!"
|
success: "Weitergesagt!"
|
||||||
failure: "Weitersagen fehlgeschlagen"
|
failure: "Weitersagen fehlgeschlagen"
|
||||||
desktop/views/components/renote-form-window.vue:
|
desktop/views/components/renote-form-window.vue:
|
||||||
title: "Bist du dir sicher, dass du das reposten willst?"
|
title: "Bist du dir sicher, dass du das weitersagen willst?"
|
||||||
desktop/views/components/settings.2fa.vue:
|
desktop/views/components/settings.2fa.vue:
|
||||||
url: "https://www.google.de/intl/de/landing/2step/"
|
url: "https://www.google.de/intl/de/landing/2step/"
|
||||||
register: "Ein Gerät registrieren"
|
register: "Ein Gerät registrieren"
|
||||||
@@ -515,6 +557,7 @@ desktop/views/components/settings.2fa.vue:
|
|||||||
common/views/components/api-settings.vue:
|
common/views/components/api-settings.vue:
|
||||||
enter-password: "Bitte Passwort eingeben"
|
enter-password: "Bitte Passwort eingeben"
|
||||||
console:
|
console:
|
||||||
|
parameter: "Parameter"
|
||||||
send: "Senden"
|
send: "Senden"
|
||||||
common/views/components/drive-settings.vue:
|
common/views/components/drive-settings.vue:
|
||||||
in-use: "benutzt"
|
in-use: "benutzt"
|
||||||
@@ -522,19 +565,16 @@ common/views/components/drive-settings.vue:
|
|||||||
common/views/components/mute-and-block.vue:
|
common/views/components/mute-and-block.vue:
|
||||||
save: "Speichern"
|
save: "Speichern"
|
||||||
desktop/views/components/sub-note-content.vue:
|
desktop/views/components/sub-note-content.vue:
|
||||||
private: "Dieser Post ist privat"
|
private: "Dieser Beitrag ist privat"
|
||||||
deleted: "Dieser Beitrag wurde entfernt"
|
deleted: "Dieser Beitrag wurde entfernt"
|
||||||
poll: "Umfrage"
|
poll: "Umfrage"
|
||||||
desktop/views/components/settings.tags.vue:
|
desktop/views/components/settings.tags.vue:
|
||||||
add: "Hinzufügen"
|
add: "Hinzufügen"
|
||||||
save: "Speichern"
|
save: "Speichern"
|
||||||
desktop/views/components/taskmanager.vue:
|
|
||||||
title: "Taskmanager"
|
|
||||||
desktop/views/components/timeline.vue:
|
desktop/views/components/timeline.vue:
|
||||||
home: "Home"
|
home: "Home"
|
||||||
local: "Lokal"
|
local: "Lokal"
|
||||||
global: "Global"
|
global: "Global"
|
||||||
messages: "Nachrichten"
|
|
||||||
list: "Listen"
|
list: "Listen"
|
||||||
desktop/views/components/ui.header.account.vue:
|
desktop/views/components/ui.header.account.vue:
|
||||||
profile: "Dein Profil"
|
profile: "Dein Profil"
|
||||||
@@ -547,8 +587,6 @@ desktop/views/components/ui.header.post.vue:
|
|||||||
post: "Einen neuen Post erstellen"
|
post: "Einen neuen Post erstellen"
|
||||||
desktop/views/components/ui.header.search.vue:
|
desktop/views/components/ui.header.search.vue:
|
||||||
placeholder: "Suchen"
|
placeholder: "Suchen"
|
||||||
desktop/views/components/user-lists-window.vue:
|
|
||||||
title: "Listen"
|
|
||||||
desktop/views/components/users-list.vue:
|
desktop/views/components/users-list.vue:
|
||||||
fetching: "Lade…"
|
fetching: "Lade…"
|
||||||
admin/views/dashboard.vue:
|
admin/views/dashboard.vue:
|
||||||
@@ -556,6 +594,7 @@ admin/views/dashboard.vue:
|
|||||||
admin/views/abuse.vue:
|
admin/views/abuse.vue:
|
||||||
remove-report: "Löschen"
|
remove-report: "Löschen"
|
||||||
admin/views/instance.vue:
|
admin/views/instance.vue:
|
||||||
|
recaptcha-preview: "Vorschau"
|
||||||
invite: "Einladen"
|
invite: "Einladen"
|
||||||
save: "Speichern"
|
save: "Speichern"
|
||||||
admin/views/charts.vue:
|
admin/views/charts.vue:
|
||||||
@@ -566,8 +605,6 @@ admin/views/drive.vue:
|
|||||||
delete: "Löschen"
|
delete: "Löschen"
|
||||||
admin/views/users.vue:
|
admin/views/users.vue:
|
||||||
users:
|
users:
|
||||||
state:
|
|
||||||
verified: "Verifizierter Benutzer"
|
|
||||||
origin:
|
origin:
|
||||||
local: "Lokal"
|
local: "Lokal"
|
||||||
admin/views/emoji.vue:
|
admin/views/emoji.vue:
|
||||||
@@ -600,8 +637,6 @@ desktop/views/pages/user/user.photos.vue:
|
|||||||
desktop/views/pages/user/user.header.vue:
|
desktop/views/pages/user/user.header.vue:
|
||||||
month: "Mo"
|
month: "Mo"
|
||||||
day: "So"
|
day: "So"
|
||||||
desktop/views/widgets/messaging.vue:
|
|
||||||
title: "Nachrichten"
|
|
||||||
desktop/views/widgets/notifications.vue:
|
desktop/views/widgets/notifications.vue:
|
||||||
title: "Benachrichtigungen"
|
title: "Benachrichtigungen"
|
||||||
desktop/views/widgets/polls.vue:
|
desktop/views/widgets/polls.vue:
|
||||||
@@ -617,22 +652,22 @@ mobile/views/components/drive.file-detail.vue:
|
|||||||
download: "Download"
|
download: "Download"
|
||||||
rename: "Umbenennen"
|
rename: "Umbenennen"
|
||||||
mobile/views/components/note.vue:
|
mobile/views/components/note.vue:
|
||||||
private: "Dieser Post ist privat"
|
private: "Dieser Beitrag ist privat"
|
||||||
deleted: "Dieser Beitrag wurde entfernt"
|
deleted: "Dieser Beitrag wurde entfernt"
|
||||||
location: "Ort"
|
location: "Ort"
|
||||||
mobile/views/components/note-detail.vue:
|
mobile/views/components/note-detail.vue:
|
||||||
reply: "Antworten"
|
reply: "Antworten"
|
||||||
private: "Dieser Post ist privat"
|
private: "Dieser Beitrag ist privat"
|
||||||
deleted: "Dieser Beitrag wurde entfernt"
|
deleted: "Dieser Beitrag wurde entfernt"
|
||||||
location: "Ort"
|
location: "Ort"
|
||||||
mobile/views/components/notifications.vue:
|
mobile/views/components/notifications.vue:
|
||||||
empty: "Keine Benachrichtigungen"
|
empty: "Keine Benachrichtigungen"
|
||||||
mobile/views/components/post-form.vue:
|
mobile/views/components/post-form.vue:
|
||||||
reply: "Antworten"
|
reply: "Antworten"
|
||||||
renote: "Anmerkung"
|
renote: "Anmerken"
|
||||||
reply-placeholder: "Antworte auf diese Anmerkung..."
|
reply-placeholder: "Antworte auf diese Anmerkung..."
|
||||||
mobile/views/components/sub-note-content.vue:
|
mobile/views/components/sub-note-content.vue:
|
||||||
private: "Dieser Post ist privat"
|
private: "Dieser Beitrag ist privat"
|
||||||
deleted: "Dieser Beitrag wurde entfernt"
|
deleted: "Dieser Beitrag wurde entfernt"
|
||||||
poll: "Umfrage"
|
poll: "Umfrage"
|
||||||
mobile/views/components/ui.nav.vue:
|
mobile/views/components/ui.nav.vue:
|
||||||
@@ -641,16 +676,17 @@ mobile/views/components/ui.nav.vue:
|
|||||||
user-lists: "Listen"
|
user-lists: "Listen"
|
||||||
game: "Spielen"
|
game: "Spielen"
|
||||||
about: "Über"
|
about: "Über"
|
||||||
mobile/views/pages/user-lists.vue:
|
mobile/views/pages/drive.vue:
|
||||||
title: "Listen"
|
contextmenu:
|
||||||
|
upload: "Eine Datei hochladen"
|
||||||
|
create-folder: "Ein Verzeichnis erstellen"
|
||||||
mobile/views/pages/home.vue:
|
mobile/views/pages/home.vue:
|
||||||
home: "Home"
|
home: "Home"
|
||||||
local: "Lokal"
|
local: "Lokal"
|
||||||
global: "Global"
|
global: "Global"
|
||||||
messages: "Nachrichten"
|
|
||||||
mobile/views/pages/widgets.vue:
|
mobile/views/pages/widgets.vue:
|
||||||
add-widget: "Hinzufügen"
|
add-widget: "Hinzufügen"
|
||||||
customization-tips: "Anpassung-Tipps"
|
customization-tips: "Anpassungs-Tipps"
|
||||||
mobile/views/pages/widgets/activity.vue:
|
mobile/views/pages/widgets/activity.vue:
|
||||||
activity: "Aktivität"
|
activity: "Aktivität"
|
||||||
mobile/views/pages/note.vue:
|
mobile/views/pages/note.vue:
|
||||||
@@ -671,11 +707,50 @@ deck:
|
|||||||
list: "Listen"
|
list: "Listen"
|
||||||
rename: "Umbenennen"
|
rename: "Umbenennen"
|
||||||
deck/deck.user-column.vue:
|
deck/deck.user-column.vue:
|
||||||
|
following: "Folgen"
|
||||||
|
followers: "Folgende"
|
||||||
|
images: "Bilder"
|
||||||
activity: "Aktivität"
|
activity: "Aktivität"
|
||||||
|
timeline: "Zeitleiste"
|
||||||
|
pinned-notes: "Angeheftete Beiträge"
|
||||||
|
docs:
|
||||||
|
edit-this-page-on-github: "Hast Du einen Fehler gefunden oder Lust, diese Dokumentation zu verbessern?"
|
||||||
|
edit-this-page-on-github-link: "Seite auf GitHub bearbeiten!"
|
||||||
|
dev/views/index.vue:
|
||||||
|
manage-apps: "Anwendungen verwalten"
|
||||||
|
dev/views/apps.vue:
|
||||||
|
manage-apps: "Anwendungen verwalten"
|
||||||
|
create-app: "Anwendung erstellen"
|
||||||
|
app-missing: "Keine Anwendungen"
|
||||||
dev/views/new-app.vue:
|
dev/views/new-app.vue:
|
||||||
account-read: "Accountinformationen anzeigen."
|
create-app: "Erstelle Anwendung"
|
||||||
account-write: "Accountinformationen bearbeiten."
|
app-name: "Name der Anwendung"
|
||||||
note-write: "Senden."
|
app-name-desc: "Der Name der Anwendung"
|
||||||
following-write: "Folgen oder entfolgen."
|
app-overview: "Beschreibung der Anwendung"
|
||||||
notification-read: "Siehe deine Benachrichtigungen."
|
callback-url: "Callback-URL (optional)"
|
||||||
notification-write: "Benachrichtigungen verwalten."
|
callback-url-desc: "Die URL, auf die nach erfolgreicher Authentifizierung umgeleitet werden soll."
|
||||||
|
authority: "Berechtigungen"
|
||||||
|
authority-desc: "Nur die hier eingetragenen Berechtigungen, werden per API zur Verfügung stehen."
|
||||||
|
authority-warning: "Dies kann auch nach dem erstellen der Anwendung geändert werden, allerdings werden dann alle bisher generierten Token ungültig."
|
||||||
|
pages:
|
||||||
|
like: "Gefällt mir"
|
||||||
|
blocks:
|
||||||
|
post: "\"Neuer Beitrag\"-Formular"
|
||||||
|
script:
|
||||||
|
categories:
|
||||||
|
random: "Zufällige Auswahl"
|
||||||
|
list: "Listen"
|
||||||
|
blocks:
|
||||||
|
_join:
|
||||||
|
arg1: "Listen"
|
||||||
|
random: "Zufällige Auswahl"
|
||||||
|
_randomPick:
|
||||||
|
arg1: "Listen"
|
||||||
|
_dailyRandomPick:
|
||||||
|
arg1: "Listen"
|
||||||
|
_seedRandomPick:
|
||||||
|
arg2: "Listen"
|
||||||
|
_pick:
|
||||||
|
arg1: "Listen"
|
||||||
|
types:
|
||||||
|
array: "Listen"
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ common:
|
|||||||
signup: "Sign up"
|
signup: "Sign up"
|
||||||
signout: "Logout"
|
signout: "Logout"
|
||||||
reload-to-apply-the-setting: "You'll need to reload the page to reflect this setting. Do you want to reload it now?"
|
reload-to-apply-the-setting: "You'll need to reload the page to reflect this setting. Do you want to reload it now?"
|
||||||
|
fetching-as-ap-object: "Inquiring to union"
|
||||||
got-it: "Got it!"
|
got-it: "Got it!"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "Customization tips"
|
title: "Customization tips"
|
||||||
@@ -61,6 +62,7 @@ common:
|
|||||||
month-and-day: "{month}/{day}"
|
month-and-day: "{month}/{day}"
|
||||||
trash: "Trash"
|
trash: "Trash"
|
||||||
drive: "Drive"
|
drive: "Drive"
|
||||||
|
pages: "Pages"
|
||||||
messaging: "Talk"
|
messaging: "Talk"
|
||||||
home: "Home"
|
home: "Home"
|
||||||
deck: "Deck"
|
deck: "Deck"
|
||||||
@@ -69,6 +71,27 @@ common:
|
|||||||
following: "Following"
|
following: "Following"
|
||||||
followers: "Followers"
|
followers: "Followers"
|
||||||
favorites: "Favorites"
|
favorites: "Favorites"
|
||||||
|
permissions:
|
||||||
|
"read:account": "View account information"
|
||||||
|
"write:account": "Update your account information"
|
||||||
|
"read:blocks": "View Blocks"
|
||||||
|
"write:blocks": "Work with Blocks"
|
||||||
|
"read:drive": "Browse the Drive"
|
||||||
|
"write:drive": "Work with the Drive"
|
||||||
|
"read:favorites": "View Favorites"
|
||||||
|
"write:favorites": "Work with Favorites"
|
||||||
|
"read:following": "View Follower info"
|
||||||
|
"write:following": "Work with Follow info"
|
||||||
|
"read:messaging": "View Messaging"
|
||||||
|
"write:messaging": "Work with Messaging"
|
||||||
|
"read:mutes": "View Muted"
|
||||||
|
"write:mutes": "Work with Muted"
|
||||||
|
"write:notes": "Create and delete posts"
|
||||||
|
"read:notifications": "View notifications"
|
||||||
|
"write:notifications": "Work with notifications"
|
||||||
|
"read:reactions": "View reactions"
|
||||||
|
"write:reactions": "Work with reactions"
|
||||||
|
"write:votes": "Vote"
|
||||||
empty-timeline-info:
|
empty-timeline-info:
|
||||||
follow-users-to-make-your-timeline: "Following users will show their posts in your timeline."
|
follow-users-to-make-your-timeline: "Following users will show their posts in your timeline."
|
||||||
explore: "Find users"
|
explore: "Find users"
|
||||||
@@ -224,13 +247,13 @@ common:
|
|||||||
delete: "Delete"
|
delete: "Delete"
|
||||||
loading: "Loading"
|
loading: "Loading"
|
||||||
ok: "Confirm"
|
ok: "Confirm"
|
||||||
cancel: "Exit"
|
cancel: "Cancel"
|
||||||
update-available-title: "Update available"
|
update-available-title: "Update available"
|
||||||
update-available: "A new version of Misskey is now available({newer}, the current version is {current}). Reload the page to apply updates."
|
update-available: "A new version of Misskey is now available({newer}, the current version is {current}). Reload the page to apply updates."
|
||||||
my-token-regenerated: "Your token has been regenerated, so you will be signed out."
|
my-token-regenerated: "Your token has been regenerated, so you will be signed out."
|
||||||
verified-user: "Verified account"
|
|
||||||
hide-password: "Hide Password"
|
hide-password: "Hide Password"
|
||||||
show-password: "Show Password"
|
show-password: "Show Password"
|
||||||
|
enter-username: "Enter user name"
|
||||||
do-not-use-in-production: "This is a development build. Do not use in production."
|
do-not-use-in-production: "This is a development build. Do not use in production."
|
||||||
user-suspended: "This user has been suspended."
|
user-suspended: "This user has been suspended."
|
||||||
is-remote-user: "The information about this user may not be entirely complete."
|
is-remote-user: "The information about this user may not be entirely complete."
|
||||||
@@ -276,21 +299,13 @@ common:
|
|||||||
nav: "Navigation"
|
nav: "Navigation"
|
||||||
tips: "Tips"
|
tips: "Tips"
|
||||||
hashtags: "Hashtags"
|
hashtags: "Hashtags"
|
||||||
|
queue: "Queue"
|
||||||
dev: "Failed to create the application. Please try again."
|
dev: "Failed to create the application. Please try again."
|
||||||
ai-chan-kawaii: "Ai-chan kawaii!"
|
ai-chan-kawaii: "Ai-chan kawaii!"
|
||||||
you: "You"
|
you: "You"
|
||||||
auth/views/form.vue:
|
auth/views/form.vue:
|
||||||
share-access: "Would you allow <i>{name}</i> to access your account?"
|
share-access: "Would you allow <i>{name}</i> to access your account?"
|
||||||
permission-ask: "This application requires the following permissions:"
|
permission-ask: "This application requires the following permissions:"
|
||||||
account-read: "View account information."
|
|
||||||
account-write: "Modify account information."
|
|
||||||
note-write: "Post."
|
|
||||||
like-write: "Express yourself about this post."
|
|
||||||
following-write: "Follow and unfollow."
|
|
||||||
drive-read: "Read your drive."
|
|
||||||
drive-write: "Upload/delete files in your drive."
|
|
||||||
notification-read: "Read your notifications."
|
|
||||||
notification-write: "Manage your notifications."
|
|
||||||
cancel: "Cancel"
|
cancel: "Cancel"
|
||||||
accept: "Allow access."
|
accept: "Allow access."
|
||||||
auth/views/index.vue:
|
auth/views/index.vue:
|
||||||
@@ -304,7 +319,7 @@ auth/views/index.vue:
|
|||||||
error: "Session does not exist."
|
error: "Session does not exist."
|
||||||
sign-in: "Please sign in."
|
sign-in: "Please sign in."
|
||||||
common/views/pages/explore.vue:
|
common/views/pages/explore.vue:
|
||||||
verified-users: "Official accounts"
|
pinned-users: "Higlighted users"
|
||||||
popular-users: "Popular users"
|
popular-users: "Popular users"
|
||||||
recently-updated-users: "Recently active users"
|
recently-updated-users: "Recently active users"
|
||||||
recently-registered-users: "Users who joined recently"
|
recently-registered-users: "Users who joined recently"
|
||||||
@@ -434,18 +449,15 @@ common/views/components/messaging.vue:
|
|||||||
search-user: "Find a user"
|
search-user: "Find a user"
|
||||||
you: "You"
|
you: "You"
|
||||||
no-history: "Without history"
|
no-history: "Without history"
|
||||||
|
user: "User"
|
||||||
common/views/components/messaging-room.vue:
|
common/views/components/messaging-room.vue:
|
||||||
empty: "No conversations"
|
|
||||||
no-history: "There is no further history"
|
no-history: "There is no further history"
|
||||||
resize-form: "Drag to resize"
|
|
||||||
new-message: "New message"
|
new-message: "New message"
|
||||||
only-one-file-attached: "Only ONE file can be attached to a message."
|
|
||||||
common/views/components/messaging-room.form.vue:
|
common/views/components/messaging-room.form.vue:
|
||||||
input-message-here: "Enter message here"
|
input-message-here: "Enter message here"
|
||||||
send: "Send"
|
send: "Send"
|
||||||
attach-from-local: "Attach files from your device"
|
attach-from-local: "Attach files from your device"
|
||||||
attach-from-drive: "Attach files from your Drive"
|
attach-from-drive: "Attach files from your Drive"
|
||||||
only-one-file-attached: "Only one file can be attached to the message."
|
|
||||||
common/views/components/messaging-room.message.vue:
|
common/views/components/messaging-room.message.vue:
|
||||||
is-read: "Read"
|
is-read: "Read"
|
||||||
deleted: "This message has been deleted"
|
deleted: "This message has been deleted"
|
||||||
@@ -458,6 +470,7 @@ common/views/components/nav.vue:
|
|||||||
repository: "Repository"
|
repository: "Repository"
|
||||||
develop: "Developers"
|
develop: "Developers"
|
||||||
feedback: "Feedback"
|
feedback: "Feedback"
|
||||||
|
tos: "Terms Of Service"
|
||||||
common/views/components/note-menu.vue:
|
common/views/components/note-menu.vue:
|
||||||
mention: "Mention"
|
mention: "Mention"
|
||||||
detail: "Details"
|
detail: "Details"
|
||||||
@@ -476,17 +489,25 @@ common/views/components/user-menu.vue:
|
|||||||
mention: "Mention"
|
mention: "Mention"
|
||||||
mute: "Mute"
|
mute: "Mute"
|
||||||
unmute: "Unmute"
|
unmute: "Unmute"
|
||||||
|
mute-confirm: "Are you sure you want to mute this user?"
|
||||||
|
unmute-confirm: "Are you certain that you want to unmute this user?"
|
||||||
block: "Block"
|
block: "Block"
|
||||||
unblock: "Unblock"
|
unblock: "Unblock"
|
||||||
|
block-confirm: "Are you sure you want to block this user?"
|
||||||
|
unblock-confirm: "Are you certain that you want to unblock this user?"
|
||||||
push-to-list: "Add to list"
|
push-to-list: "Add to list"
|
||||||
select-list: "Select a list"
|
select-list: "Select a list"
|
||||||
report-abuse: "Report abuse"
|
report-abuse: "Report abuse"
|
||||||
report-abuse-detail: "What kind of nuisance did you encounter?"
|
report-abuse-detail: "What kind of nuisance did you encounter?"
|
||||||
report-abuse-reported: "The issue has been reported to the administrator. Your cooperation is much appreciated."
|
report-abuse-reported: "The issue has been reported to the administrator. Your cooperation is much appreciated."
|
||||||
silence: "Mute"
|
silence: "Silence"
|
||||||
unsilence: "Unmute"
|
unsilence: "Unsilence"
|
||||||
|
silence-confirm: "Are you sure that you want to silence this user?"
|
||||||
|
unsilence-confirm: "Are you sure that you want to stop silencing this user?"
|
||||||
suspend: "Suspend"
|
suspend: "Suspend"
|
||||||
unsuspend: "Unsuspend"
|
unsuspend: "Unsuspend"
|
||||||
|
suspend-confirm: "Are you sure that you want to suspend this user?"
|
||||||
|
unsuspend-confirm: "Are you sure that you want to unsuspend this user?"
|
||||||
common/views/components/poll.vue:
|
common/views/components/poll.vue:
|
||||||
vote-to: "Vote for '{}'"
|
vote-to: "Vote for '{}'"
|
||||||
vote-count: "{} votes"
|
vote-count: "{} votes"
|
||||||
@@ -562,6 +583,8 @@ common/views/components/signup.vue:
|
|||||||
password-matched: "OK"
|
password-matched: "OK"
|
||||||
password-not-matched: "Doesn't match"
|
password-not-matched: "Doesn't match"
|
||||||
recaptcha: "Verification"
|
recaptcha: "Verification"
|
||||||
|
agree-to: "Accept {0}."
|
||||||
|
tos: "Terms Of Service"
|
||||||
create: "Create an Account"
|
create: "Create an Account"
|
||||||
some-error: "An attempt at account creation has failed for some reason. Please try again."
|
some-error: "An attempt at account creation has failed for some reason. Please try again."
|
||||||
common/views/components/special-message.vue:
|
common/views/components/special-message.vue:
|
||||||
@@ -669,6 +692,16 @@ common/views/components/user-list-editor.vue:
|
|||||||
remove-user: "Remove from this list"
|
remove-user: "Remove from this list"
|
||||||
delete-are-you-sure: "Delete list \"$1\"?"
|
delete-are-you-sure: "Delete list \"$1\"?"
|
||||||
deleted: "Deleted successfully"
|
deleted: "Deleted successfully"
|
||||||
|
add-user: "Add a user"
|
||||||
|
common/views/components/user-group-editor.vue:
|
||||||
|
deleted: "Deleted"
|
||||||
|
invite: "Invite"
|
||||||
|
common/views/components/user-lists.vue:
|
||||||
|
user-lists: "Lists"
|
||||||
|
create-list: "Create a list"
|
||||||
|
list-name: "List name"
|
||||||
|
common/views/components/user-groups.vue:
|
||||||
|
invites: "Invite"
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "Checking"
|
fetching: "Checking"
|
||||||
no-broadcasts: "No announcements"
|
no-broadcasts: "No announcements"
|
||||||
@@ -730,6 +763,8 @@ common/views/pages/follow.vue:
|
|||||||
request-pending: "Pending follow request"
|
request-pending: "Pending follow request"
|
||||||
follow-processing: "Processing follow"
|
follow-processing: "Processing follow"
|
||||||
follow-request: "Follow request"
|
follow-request: "Follow request"
|
||||||
|
common/views/pages/follow-requests.vue:
|
||||||
|
received-follow-requests: "Follow requests"
|
||||||
desktop:
|
desktop:
|
||||||
banner-crop-title: "Crop the part that appears as a banner"
|
banner-crop-title: "Crop the part that appears as a banner"
|
||||||
banner: "Banner"
|
banner: "Banner"
|
||||||
@@ -839,10 +874,6 @@ desktop/views/components/home.vue:
|
|||||||
desktop/views/input-dialog.vue:
|
desktop/views/input-dialog.vue:
|
||||||
cancel: "Cancel"
|
cancel: "Cancel"
|
||||||
ok: "OK"
|
ok: "OK"
|
||||||
desktop/views/components/messaging-room-window.vue:
|
|
||||||
title: "Messages:"
|
|
||||||
desktop/views/components/messaging-window.vue:
|
|
||||||
title: "Messaging"
|
|
||||||
desktop/views/components/note-detail.vue:
|
desktop/views/components/note-detail.vue:
|
||||||
private: "Post is private"
|
private: "Post is private"
|
||||||
deleted: "Post has been removed"
|
deleted: "Post has been removed"
|
||||||
@@ -881,7 +912,6 @@ desktop/views/components/post-form.vue:
|
|||||||
posting: "Posting"
|
posting: "Posting"
|
||||||
attach-media-from-local: "Attach media from your device"
|
attach-media-from-local: "Attach media from your device"
|
||||||
attach-media-from-drive: "Attach media from your Drive"
|
attach-media-from-drive: "Attach media from your Drive"
|
||||||
attach-cancel: "Cancel attachment"
|
|
||||||
insert-a-kao: "v('ω')v"
|
insert-a-kao: "v('ω')v"
|
||||||
create-poll: "Create a poll"
|
create-poll: "Create a poll"
|
||||||
text-remain: "{} characters remaining"
|
text-remain: "{} characters remaining"
|
||||||
@@ -974,6 +1004,10 @@ common/views/components/password-settings.vue:
|
|||||||
not-match: "The new passwords do not match"
|
not-match: "The new passwords do not match"
|
||||||
changed: "Password changed"
|
changed: "Password changed"
|
||||||
failed: "Failed to change password"
|
failed: "Failed to change password"
|
||||||
|
common/views/components/post-form-attaches.vue:
|
||||||
|
attach-cancel: "Remove Attachment"
|
||||||
|
mark-as-sensitive: "Mark as 'sensitive'"
|
||||||
|
unmark-as-sensitive: "Unmark as 'sensitive'"
|
||||||
desktop/views/components/sub-note-content.vue:
|
desktop/views/components/sub-note-content.vue:
|
||||||
private: "This post is private"
|
private: "This post is private"
|
||||||
deleted: "This post has been deleted"
|
deleted: "This post has been deleted"
|
||||||
@@ -984,15 +1018,13 @@ desktop/views/components/settings.tags.vue:
|
|||||||
query: "Query (optional)"
|
query: "Query (optional)"
|
||||||
add: "Add"
|
add: "Add"
|
||||||
save: "Save"
|
save: "Save"
|
||||||
desktop/views/components/taskmanager.vue:
|
|
||||||
title: "Task Manager"
|
|
||||||
desktop/views/components/timeline.vue:
|
desktop/views/components/timeline.vue:
|
||||||
home: "Home"
|
home: "Home"
|
||||||
local: "Local"
|
local: "Local"
|
||||||
hybrid: "Social"
|
hybrid: "Social"
|
||||||
global: "Global"
|
global: "Global"
|
||||||
mentions: "Mentions"
|
mentions: "Mentions"
|
||||||
messages: "Messages"
|
messages: "Direct posts"
|
||||||
list: "Lists"
|
list: "Lists"
|
||||||
hashtag: "Hashtag"
|
hashtag: "Hashtag"
|
||||||
add-tag-timeline: "Add hashtag cloud"
|
add-tag-timeline: "Add hashtag cloud"
|
||||||
@@ -1014,14 +1046,6 @@ desktop/views/components/ui.header.post.vue:
|
|||||||
post: "Compose new Post"
|
post: "Compose new Post"
|
||||||
desktop/views/components/ui.header.search.vue:
|
desktop/views/components/ui.header.search.vue:
|
||||||
placeholder: "Search"
|
placeholder: "Search"
|
||||||
desktop/views/components/received-follow-requests-window.vue:
|
|
||||||
title: "Follow requests"
|
|
||||||
accept: "Accept"
|
|
||||||
reject: "Reject"
|
|
||||||
desktop/views/components/user-lists-window.vue:
|
|
||||||
title: "User lists"
|
|
||||||
create-list: "Create a list"
|
|
||||||
list-name: "List name"
|
|
||||||
desktop/views/components/user-preview.vue:
|
desktop/views/components/user-preview.vue:
|
||||||
notes: "Posts"
|
notes: "Posts"
|
||||||
following: "Following"
|
following: "Following"
|
||||||
@@ -1043,7 +1067,6 @@ admin/views/index.vue:
|
|||||||
users: "Users"
|
users: "Users"
|
||||||
federation: "Federation"
|
federation: "Federation"
|
||||||
announcements: "Announcements"
|
announcements: "Announcements"
|
||||||
hashtags: "Hashtags"
|
|
||||||
abuse: "Abuse"
|
abuse: "Abuse"
|
||||||
queue: "Job Queue"
|
queue: "Job Queue"
|
||||||
logs: "Logs"
|
logs: "Logs"
|
||||||
@@ -1070,14 +1093,22 @@ admin/views/instance.vue:
|
|||||||
instance-name: "Instance name"
|
instance-name: "Instance name"
|
||||||
instance-description: "Instance description"
|
instance-description: "Instance description"
|
||||||
host: "Host"
|
host: "Host"
|
||||||
|
icon-url: "URL of the icon"
|
||||||
|
logo-url: "URL of the logo"
|
||||||
banner-url: "Banner image URL"
|
banner-url: "Banner image URL"
|
||||||
error-image-url: "Error image URL"
|
error-image-url: "Error image URL"
|
||||||
languages: "Language of this instance"
|
languages: "Language of this instance"
|
||||||
languages-desc: "You can add more than one, separated by spaces."
|
languages-desc: "You can add more than one, separated by spaces."
|
||||||
|
tos-url: "Terms of Service URL"
|
||||||
|
repository-url: "Repository URL"
|
||||||
|
feedback-url: "URL for feedback"
|
||||||
maintainer-config: "Administrator information"
|
maintainer-config: "Administrator information"
|
||||||
maintainer-name: "Administrator name"
|
maintainer-name: "Administrator name"
|
||||||
maintainer-email: "Contact Administrator"
|
maintainer-email: "Contact Administrator"
|
||||||
|
advanced-config: "Other settings"
|
||||||
drive-config: "Drive settings"
|
drive-config: "Drive settings"
|
||||||
|
object-storage-base-url: "URL"
|
||||||
|
object-storage-endpoint: "Endpoint"
|
||||||
cache-remote-files: "Cache remote files"
|
cache-remote-files: "Cache remote files"
|
||||||
cache-remote-files-desc: "Without this parameter, all remote files are linked to their host server directly. This will be an effective solution to save your server storage, however make remote files invisible to users who set direct-link disabled, since no thumbnail will be generated, increase traffic. It is recommended that this parameter set enabled."
|
cache-remote-files-desc: "Without this parameter, all remote files are linked to their host server directly. This will be an effective solution to save your server storage, however make remote files invisible to users who set direct-link disabled, since no thumbnail will be generated, increase traffic. It is recommended that this parameter set enabled."
|
||||||
local-drive-capacity-mb: "Volume of Drive per user"
|
local-drive-capacity-mb: "Volume of Drive per user"
|
||||||
@@ -1086,8 +1117,7 @@ admin/views/instance.vue:
|
|||||||
recaptcha-config: "the reCAPTCHA settings"
|
recaptcha-config: "the reCAPTCHA settings"
|
||||||
recaptcha-info: "reCAPTCHA token is required. Please get it on https://www.google.com/recaptcha/intro/"
|
recaptcha-info: "reCAPTCHA token is required. Please get it on https://www.google.com/recaptcha/intro/"
|
||||||
enable-recaptcha: "enable reCAPTCHA"
|
enable-recaptcha: "enable reCAPTCHA"
|
||||||
recaptcha-site-key: "reCAPTCHA site key"
|
recaptcha-preview: "Preview"
|
||||||
recaptcha-secret-key: "reCAPTCHA secret key"
|
|
||||||
twitter-integration-config: "Settings of connecting to Twitter"
|
twitter-integration-config: "Settings of connecting to Twitter"
|
||||||
twitter-integration-info: "The callback URL is set on {url}."
|
twitter-integration-info: "The callback URL is set on {url}."
|
||||||
enable-twitter-integration: "Enable connection to Twitter"
|
enable-twitter-integration: "Enable connection to Twitter"
|
||||||
@@ -1114,15 +1144,11 @@ admin/views/instance.vue:
|
|||||||
disable-global-timeline: "Disable global timeline"
|
disable-global-timeline: "Disable global timeline"
|
||||||
disabling-timelines-info: "Even if you disable these timelines, the administrator as well as moderators can use them continually."
|
disabling-timelines-info: "Even if you disable these timelines, the administrator as well as moderators can use them continually."
|
||||||
enable-emoji-reaction: "Enable pictograms for reactions"
|
enable-emoji-reaction: "Enable pictograms for reactions"
|
||||||
|
use-star-for-reaction-fallback: "Use the star as fallback for unknown reaction"
|
||||||
invite: "Invite"
|
invite: "Invite"
|
||||||
save: "Save"
|
save: "Save"
|
||||||
saved: "Saved"
|
saved: "Saved"
|
||||||
user-recommendation-config: "Recommended users"
|
pinned-users: "Higlighted user"
|
||||||
enable-external-user-recommendation: "Enable external user recommendations"
|
|
||||||
external-user-recommendation-engine: "Engine"
|
|
||||||
external-user-recommendation-engine-desc: "Example : https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}"
|
|
||||||
external-user-recommendation-timeout: "Timeout"
|
|
||||||
external-user-recommendation-timeout-desc: "Number of milliseconds (ex. 300,000)"
|
|
||||||
email-config: "Email server settings"
|
email-config: "Email server settings"
|
||||||
email-config-info: "Used to confirm email and password reset etc."
|
email-config-info: "Used to confirm email and password reset etc."
|
||||||
enable-email: "Enable email delivery"
|
enable-email: "Enable email delivery"
|
||||||
@@ -1202,14 +1228,10 @@ admin/views/users.vue:
|
|||||||
unsuspend: "Unsuspend"
|
unsuspend: "Unsuspend"
|
||||||
unsuspend-confirm: "Are you sure you want to unsuspend this account?"
|
unsuspend-confirm: "Are you sure you want to unsuspend this account?"
|
||||||
unsuspended: "The user has successfully unsuspended."
|
unsuspended: "The user has successfully unsuspended."
|
||||||
make-silence: "Mute"
|
make-silence: "Silence"
|
||||||
unmake-silence: "Unmute"
|
silence-confirm: "Silence user?"
|
||||||
verify: "Verify account"
|
unmake-silence: "Unsilence"
|
||||||
verify-confirm: "Do you want this to be a verified account?"
|
unsilence-confirm: "Are you certain that you want to stop silencing this user?"
|
||||||
verified: "The account is now being verified"
|
|
||||||
unverify: "Unverify account"
|
|
||||||
unverify-confirm: "Do you want to remove the 'verified account' designation?"
|
|
||||||
unverified: "The account is now being unverified"
|
|
||||||
update-remote-user: "Update information about remote user"
|
update-remote-user: "Update information about remote user"
|
||||||
remote-user-updated: "The information regarding the remote user has been updated."
|
remote-user-updated: "The information regarding the remote user has been updated."
|
||||||
users:
|
users:
|
||||||
@@ -1226,7 +1248,6 @@ admin/views/users.vue:
|
|||||||
admin: "Administrator"
|
admin: "Administrator"
|
||||||
moderator: "Moderator"
|
moderator: "Moderator"
|
||||||
adminOrModerator: "Admin/Moderator"
|
adminOrModerator: "Admin/Moderator"
|
||||||
verified: "Verified account"
|
|
||||||
silenced: "Already silenced"
|
silenced: "Already silenced"
|
||||||
suspended: "Suspended"
|
suspended: "Suspended"
|
||||||
origin:
|
origin:
|
||||||
@@ -1334,6 +1355,7 @@ admin/views/federation.vue:
|
|||||||
chart-spans:
|
chart-spans:
|
||||||
hour: "Hourly"
|
hour: "Hourly"
|
||||||
day: "Daily"
|
day: "Daily"
|
||||||
|
blocked-hosts: "Blocking"
|
||||||
desktop/views/pages/welcome.vue:
|
desktop/views/pages/welcome.vue:
|
||||||
about: "More details..."
|
about: "More details..."
|
||||||
timeline: "Timeline"
|
timeline: "Timeline"
|
||||||
@@ -1388,8 +1410,6 @@ desktop/views/pages/user/user.timeline.vue:
|
|||||||
with-replies: "Posts and replies"
|
with-replies: "Posts and replies"
|
||||||
with-media: "Media"
|
with-media: "Media"
|
||||||
my-posts: "My posts"
|
my-posts: "My posts"
|
||||||
desktop/views/widgets/messaging.vue:
|
|
||||||
title: "Messaging"
|
|
||||||
desktop/views/widgets/notifications.vue:
|
desktop/views/widgets/notifications.vue:
|
||||||
title: "Notifications"
|
title: "Notifications"
|
||||||
desktop/views/widgets/polls.vue:
|
desktop/views/widgets/polls.vue:
|
||||||
@@ -1399,6 +1419,7 @@ desktop/views/widgets/polls.vue:
|
|||||||
desktop/views/widgets/post-form.vue:
|
desktop/views/widgets/post-form.vue:
|
||||||
title: "Post"
|
title: "Post"
|
||||||
note: "Post"
|
note: "Post"
|
||||||
|
something-happened: "Could not be posted in this circumstance."
|
||||||
desktop/views/widgets/profile.vue:
|
desktop/views/widgets/profile.vue:
|
||||||
update-banner: "Click to edit your banner"
|
update-banner: "Click to edit your banner"
|
||||||
update-avatar: "Click to edit your avatar"
|
update-avatar: "Click to edit your avatar"
|
||||||
@@ -1417,12 +1438,11 @@ mobile/views/components/drive.vue:
|
|||||||
file-count: "File(s)"
|
file-count: "File(s)"
|
||||||
nothing-in-drive: "There's nothing stored."
|
nothing-in-drive: "There's nothing stored."
|
||||||
folder-is-empty: "This folder is empty"
|
folder-is-empty: "This folder is empty"
|
||||||
prompt: "What do you want to do? (Please enter a number): <1 → Upload a file | 2 → Upload a file from a URL | 3 → Create a folder | 4 → Change this folder's name | 5 → Move this folder | 6 → Delete this folder>"
|
|
||||||
deletion-alert: "Sorry! Deleting a folder is not yet implemented."
|
|
||||||
folder-name: "Folder name"
|
folder-name: "Folder name"
|
||||||
here-is-root: "Currently, you are on the root, not inside of any folder."
|
here-is-root: "Currently, you are on the root, not inside of any folder."
|
||||||
url-prompt: "URL of the file you want to upload"
|
url-prompt: "URL of the file you want to upload"
|
||||||
uploading: "Upload requested. It may take a while for the upload to finish."
|
uploading: "Upload requested. It may take a while for the upload to finish."
|
||||||
|
folder-name-cannot-empty: "Folder name cannot be blank."
|
||||||
mobile/views/components/drive-file-chooser.vue:
|
mobile/views/components/drive-file-chooser.vue:
|
||||||
select-file: "Choose files"
|
select-file: "Choose files"
|
||||||
mobile/views/components/drive-folder-chooser.vue:
|
mobile/views/components/drive-folder-chooser.vue:
|
||||||
@@ -1475,7 +1495,7 @@ mobile/views/components/post-form.vue:
|
|||||||
quote-placeholder: "Quote this post... (optional)"
|
quote-placeholder: "Quote this post... (optional)"
|
||||||
reply-placeholder: "Reply to this note..."
|
reply-placeholder: "Reply to this note..."
|
||||||
cw-placeholder: "Comments for the post (optional)"
|
cw-placeholder: "Comments for the post (optional)"
|
||||||
location-alert: "Your device does not provide location services"
|
geolocation-alert: "Your device does not provide location services."
|
||||||
error: "Error"
|
error: "Error"
|
||||||
username-prompt: "Enter user name"
|
username-prompt: "Enter user name"
|
||||||
mobile/views/components/sub-note-content.vue:
|
mobile/views/components/sub-note-content.vue:
|
||||||
@@ -1496,9 +1516,14 @@ mobile/views/components/ui.nav.vue:
|
|||||||
game: "Games"
|
game: "Games"
|
||||||
admin: "Admin"
|
admin: "Admin"
|
||||||
about: "About Misskey"
|
about: "About Misskey"
|
||||||
mobile/views/pages/user-lists.vue:
|
mobile/views/pages/drive.vue:
|
||||||
title: "Lists"
|
contextmenu:
|
||||||
enter-list-name: "Enter a name of the list to make"
|
upload: "Upload a file"
|
||||||
|
url-upload: "Upload file from a URL"
|
||||||
|
create-folder: "Create a folder"
|
||||||
|
rename-folder: "Rename folder"
|
||||||
|
move-folder: "Move this folder"
|
||||||
|
delete-folder: "Delete this folder"
|
||||||
mobile/views/pages/signup.vue:
|
mobile/views/pages/signup.vue:
|
||||||
lets-start: "Your account is now ready! 📦"
|
lets-start: "Your account is now ready! 📦"
|
||||||
mobile/views/pages/followers.vue:
|
mobile/views/pages/followers.vue:
|
||||||
@@ -1511,7 +1536,7 @@ mobile/views/pages/home.vue:
|
|||||||
hybrid: "Social"
|
hybrid: "Social"
|
||||||
global: "Global"
|
global: "Global"
|
||||||
mentions: "Mentions"
|
mentions: "Mentions"
|
||||||
messages: "Messages"
|
messages: "Direct posts"
|
||||||
mobile/views/pages/tag.vue:
|
mobile/views/pages/tag.vue:
|
||||||
no-posts-found: "No posts contains \"{q}\" found."
|
no-posts-found: "No posts contains \"{q}\" found."
|
||||||
mobile/views/pages/widgets.vue:
|
mobile/views/pages/widgets.vue:
|
||||||
@@ -1523,10 +1548,6 @@ mobile/views/pages/widgets/activity.vue:
|
|||||||
activity: "Activity"
|
activity: "Activity"
|
||||||
mobile/views/pages/share.vue:
|
mobile/views/pages/share.vue:
|
||||||
share-with: "Share on {name}"
|
share-with: "Share on {name}"
|
||||||
mobile/views/pages/received-follow-requests.vue:
|
|
||||||
title: "Follow requests"
|
|
||||||
accept: "Accept"
|
|
||||||
reject: "Reject"
|
|
||||||
mobile/views/pages/note.vue:
|
mobile/views/pages/note.vue:
|
||||||
title: "Post"
|
title: "Post"
|
||||||
prev: "Previous note"
|
prev: "Previous note"
|
||||||
@@ -1599,25 +1620,6 @@ deck/deck.user-column.vue:
|
|||||||
docs:
|
docs:
|
||||||
edit-this-page-on-github: "Found an error, or do you want to contribute to the documentation?"
|
edit-this-page-on-github: "Found an error, or do you want to contribute to the documentation?"
|
||||||
edit-this-page-on-github-link: "Edit this page at GitHub!"
|
edit-this-page-on-github-link: "Edit this page at GitHub!"
|
||||||
api:
|
|
||||||
entities:
|
|
||||||
properties: "Properties"
|
|
||||||
endpoints:
|
|
||||||
params: "Parameters"
|
|
||||||
no-params: "No parameter."
|
|
||||||
res: "Response"
|
|
||||||
require-credential: "This endpoint requires the authentication information."
|
|
||||||
require-permission: "This endpoint requires {permission} permission."
|
|
||||||
has-limit: "There is a rate limit."
|
|
||||||
duration-limit: "If you have sent your requests more than {max} times in {duration} milliseconds, you will be unable to send more requests."
|
|
||||||
min-interval-limit: "If {interval} milliseconds haven't passed since the last request, you can't send a request."
|
|
||||||
show-src: "You can view the source code for this endpoint."
|
|
||||||
show-src-link: "See the code on GitHub"
|
|
||||||
generated: "This document is generated by the API definition."
|
|
||||||
props:
|
|
||||||
name: "Name"
|
|
||||||
type: "Type"
|
|
||||||
description: "Description"
|
|
||||||
dev/views/index.vue:
|
dev/views/index.vue:
|
||||||
manage-apps: "Manage apps"
|
manage-apps: "Manage apps"
|
||||||
dev/views/apps.vue:
|
dev/views/apps.vue:
|
||||||
@@ -1625,24 +1627,254 @@ dev/views/apps.vue:
|
|||||||
create-app: "Create app"
|
create-app: "Create app"
|
||||||
app-missing: "No apps"
|
app-missing: "No apps"
|
||||||
dev/views/new-app.vue:
|
dev/views/new-app.vue:
|
||||||
|
new-app: "New Application"
|
||||||
|
new-app-info: "You can also create an application with the API. (app/create)"
|
||||||
create-app: "Creating application"
|
create-app: "Creating application"
|
||||||
app-name: "Application name"
|
app-name: "Application name"
|
||||||
|
app-name-placeholder: "ex) Misskey for iOS"
|
||||||
app-name-desc: "The name of your app"
|
app-name-desc: "The name of your app"
|
||||||
app-name-ex: "ex) Misskey for iOS"
|
|
||||||
app-overview: "Application summary"
|
app-overview: "Application summary"
|
||||||
app-desc: "A brief description or introduction of your app."
|
app-overview-placeholder: " ex) Misskey iOS Client."
|
||||||
app-desc-ex: "ex) Misskey iOS client."
|
app-overview-desc: "A brief description, or an introduction of your app."
|
||||||
callback-url: "The callback URL (optional)"
|
callback-url: "The callback URL (optional)"
|
||||||
|
callback-url-placeholder: "ex) https://your.app.example.com/callback.php"
|
||||||
callback-url-desc: "The URL to redirect to after the user is authenticated via the authentication form."
|
callback-url-desc: "The URL to redirect to after the user is authenticated via the authentication form."
|
||||||
authority: "Permissions"
|
authority: "Permissions"
|
||||||
authority-desc: "Only the functions requested here can be accessed via the API."
|
authority-desc: "Only the functions requested here can be accessed via the API."
|
||||||
authority-warning: "You can change it even after creating the application, but if you give different permissions, all user keys associated at that time will be invalidated."
|
authority-warning: "You can change it even after creating the application, but if you give different permissions, all user keys associated at that time will be invalidated."
|
||||||
account-read: "View account information."
|
pages:
|
||||||
account-write: "Modify account information."
|
new-page: "Create a page"
|
||||||
note-write: "Post."
|
edit-page: "Edit a page"
|
||||||
reaction-write: "Add or remove reactions."
|
read-page: "Viewing the source"
|
||||||
following-write: "Follow and unfollow."
|
page-created: "Created the page!"
|
||||||
drive-read: "Read the drive."
|
page-updated: "Updated the page"
|
||||||
drive-write: "Upload/delete files in the drive."
|
are-you-sure-delete: "Do you want to delete this page?"
|
||||||
notification-read: "Read your notifications."
|
page-deleted: "The page has been deleted"
|
||||||
notification-write: "Manage your notifications."
|
edit-this-page: "Edit this page"
|
||||||
|
view-source: "View Source"
|
||||||
|
view-page: "View page"
|
||||||
|
like: "Like"
|
||||||
|
inspector: "Inspector"
|
||||||
|
content: "Page block"
|
||||||
|
variables: "Variables"
|
||||||
|
more-details: "Description"
|
||||||
|
title: "Title"
|
||||||
|
url: "Page URL"
|
||||||
|
summary: "Summary of page"
|
||||||
|
align-center: "Center align"
|
||||||
|
font: "Font"
|
||||||
|
fontSerif: "Serif"
|
||||||
|
fontSansSerif: "Sans Serif"
|
||||||
|
set-eye-catching-image: "Set an eye-catching image"
|
||||||
|
remove-eye-catching-image: "Delete an eye-catching image"
|
||||||
|
choose-block: "Add a block"
|
||||||
|
select-type: "Select a type"
|
||||||
|
enter-variable-name: "Please choose a variable name"
|
||||||
|
the-variable-name-is-already-used: "This variable name is already used"
|
||||||
|
content-blocks: "Content"
|
||||||
|
input-blocks: "Input"
|
||||||
|
special-blocks: "Special"
|
||||||
|
post-from-post-form: "Post this content"
|
||||||
|
posted-from-post-form: "Posted!"
|
||||||
|
blocks:
|
||||||
|
text: "Text"
|
||||||
|
textarea: "Text area"
|
||||||
|
section: "Section"
|
||||||
|
image: "Images"
|
||||||
|
button: "Button"
|
||||||
|
if: "If"
|
||||||
|
_if:
|
||||||
|
variable: "Variables"
|
||||||
|
post: "Post form"
|
||||||
|
_post:
|
||||||
|
text: "Content"
|
||||||
|
textInput: "Text input"
|
||||||
|
_textInput:
|
||||||
|
name: "Variable name"
|
||||||
|
text: "Title"
|
||||||
|
default: "Default value"
|
||||||
|
textareaInput: "Multiple type text input"
|
||||||
|
_textareaInput:
|
||||||
|
name: "Variable name"
|
||||||
|
text: "Title"
|
||||||
|
default: "Default value"
|
||||||
|
numberInput: "Numeric input"
|
||||||
|
_numberInput:
|
||||||
|
name: "Variable name"
|
||||||
|
text: "Title"
|
||||||
|
default: "Default value"
|
||||||
|
switch: "Switch"
|
||||||
|
_switch:
|
||||||
|
name: "Variable name"
|
||||||
|
text: "Title"
|
||||||
|
default: "Default value"
|
||||||
|
counter: "Counter"
|
||||||
|
_counter:
|
||||||
|
name: "Variable name"
|
||||||
|
text: "Title"
|
||||||
|
inc: "Increase number"
|
||||||
|
_button:
|
||||||
|
text: "Title"
|
||||||
|
action: "Operation when the button pressed"
|
||||||
|
_action:
|
||||||
|
dialog: "Show a dialog"
|
||||||
|
_dialog:
|
||||||
|
content: "Content"
|
||||||
|
resetRandom: "Reset a random number"
|
||||||
|
script:
|
||||||
|
categories:
|
||||||
|
flow: "Control"
|
||||||
|
logical: "Logical operation"
|
||||||
|
operation: "Compute"
|
||||||
|
comparison: "Compare"
|
||||||
|
random: "Random"
|
||||||
|
value: "Value"
|
||||||
|
fn: "Function"
|
||||||
|
text: "Text operation"
|
||||||
|
convert: "Variable"
|
||||||
|
list: "Lists"
|
||||||
|
blocks:
|
||||||
|
text: "Text"
|
||||||
|
multiLineText: "Text (Multiple lines)"
|
||||||
|
textList: "List of text"
|
||||||
|
_textList:
|
||||||
|
info: "Separate each one with a newline"
|
||||||
|
strLen: "Length of text"
|
||||||
|
_strLen:
|
||||||
|
arg1: "Text"
|
||||||
|
strPick: "Extract character"
|
||||||
|
_strPick:
|
||||||
|
arg1: "Text"
|
||||||
|
arg2: "Position of character"
|
||||||
|
strReplace: "Replace string(s)"
|
||||||
|
_strReplace:
|
||||||
|
arg1: "Text"
|
||||||
|
arg2: "Before replacement"
|
||||||
|
arg3: "After replacement"
|
||||||
|
strReverse: "Flip text"
|
||||||
|
_strReverse:
|
||||||
|
arg1: "Text"
|
||||||
|
_join:
|
||||||
|
arg1: "Lists"
|
||||||
|
arg2: "Separator"
|
||||||
|
add: "+ Plus"
|
||||||
|
_add:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
subtract: "- Minus"
|
||||||
|
_subtract:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
multiply: "× Multiply"
|
||||||
|
_multiply:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
divide: "÷ Divide"
|
||||||
|
_divide:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
_remind:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
eq: "A and B are equal"
|
||||||
|
_eq:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
notEq: "A and B are different"
|
||||||
|
_notEq:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
and: "A and B"
|
||||||
|
_and:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
or: "A or B"
|
||||||
|
_or:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
lt: "A is smaller than B"
|
||||||
|
_lt:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
gt: "A is bigger than B"
|
||||||
|
_gt:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
ltEq: "A is smaller or same than B"
|
||||||
|
_ltEq:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
gtEq: "A is bigger or same than B"
|
||||||
|
_gtEq:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
if: "Branch"
|
||||||
|
_if:
|
||||||
|
arg1: "If"
|
||||||
|
arg2: "then"
|
||||||
|
arg3: "else"
|
||||||
|
not: "denial"
|
||||||
|
_not:
|
||||||
|
arg1: "denial"
|
||||||
|
random: "Random"
|
||||||
|
_random:
|
||||||
|
arg1: "Probability"
|
||||||
|
rannum: "Random number"
|
||||||
|
_rannum:
|
||||||
|
arg1: "Minimum"
|
||||||
|
arg2: "Maximum"
|
||||||
|
randomPick: "Choose at random from the list"
|
||||||
|
_randomPick:
|
||||||
|
arg1: "Lists"
|
||||||
|
dailyRandom: "Random (Daily for each user)"
|
||||||
|
_dailyRandom:
|
||||||
|
arg1: "Probability"
|
||||||
|
dailyRannum: "Random number (Daily for each user)"
|
||||||
|
_dailyRannum:
|
||||||
|
arg1: "Minimum"
|
||||||
|
arg2: "Maximum"
|
||||||
|
dailyRandomPick: "Choose at random from the list (Daily for each user)"
|
||||||
|
_dailyRandomPick:
|
||||||
|
arg1: "Lists"
|
||||||
|
_seedRandom:
|
||||||
|
arg1: "Seed"
|
||||||
|
arg2: "Probability"
|
||||||
|
_seedRannum:
|
||||||
|
arg1: "Seed"
|
||||||
|
arg2: "Minimum"
|
||||||
|
arg3: "Maximum"
|
||||||
|
_seedRandomPick:
|
||||||
|
arg1: "Seed"
|
||||||
|
arg2: "Lists"
|
||||||
|
_DRPWPM:
|
||||||
|
arg1: "List of text"
|
||||||
|
_pick:
|
||||||
|
arg1: "Lists"
|
||||||
|
arg2: "Position"
|
||||||
|
number: "Number"
|
||||||
|
stringToNumber: "Text to number"
|
||||||
|
_stringToNumber:
|
||||||
|
arg1: "Text"
|
||||||
|
numberToString: "Number to text"
|
||||||
|
_numberToString:
|
||||||
|
arg1: "Number"
|
||||||
|
splitStrByLine: "Split the text by lines"
|
||||||
|
_splitStrByLine:
|
||||||
|
arg1: "Text"
|
||||||
|
ref: "Variables"
|
||||||
|
fn: "Function"
|
||||||
|
_fn:
|
||||||
|
slots: "Slots"
|
||||||
|
arg1: "Output"
|
||||||
|
for: "Repeat"
|
||||||
|
thereIsEmptySlot: "Slot {slot} is empty!"
|
||||||
|
types:
|
||||||
|
string: "Text"
|
||||||
|
number: "Number"
|
||||||
|
boolean: "Flag"
|
||||||
|
array: "Lists"
|
||||||
|
stringArray: "List of text"
|
||||||
|
emptySlot: "Empty slot"
|
||||||
|
enviromentVariables: "Environment variable"
|
||||||
|
pageVariables: "Page element"
|
||||||
|
argVariables: "Input slot"
|
||||||
|
|||||||
@@ -12,7 +12,9 @@ common:
|
|||||||
rich-contents: "Posts"
|
rich-contents: "Posts"
|
||||||
rich-contents-desc: "Escribe sobre tus pensamientos, eventos, todo lo que quieras compartir. Si es necesario, puedes usar varias sintaxis, decorar tus posts y añadir tus imágenes favoritas, archivos de viddeo y encuestas."
|
rich-contents-desc: "Escribe sobre tus pensamientos, eventos, todo lo que quieras compartir. Si es necesario, puedes usar varias sintaxis, decorar tus posts y añadir tus imágenes favoritas, archivos de viddeo y encuestas."
|
||||||
reaction: "Reacciones"
|
reaction: "Reacciones"
|
||||||
|
reaction-desc: "La forma mas facil de expresar tus emociones. Misskey te permite añadir varios tipos de reacciones a los posts de otros usuarios. La emperiencia emocional en Misskey nunca será igual que en otra red social, donde solo puedes poner \"likes\"."
|
||||||
ui: "Interfaz"
|
ui: "Interfaz"
|
||||||
|
ui-desc: "No hay ninguna interfaz que le vaya bien a todos. Por eso, Misskey tiene una interfaz altamente personalizable para tus gustos. Puedes hacer tu página principal única editando la interfaz de tu timeline y moviendo varios widgets para conseguir hacer de este lugar uno propio."
|
||||||
drive: "Drive"
|
drive: "Drive"
|
||||||
adblock:
|
adblock:
|
||||||
detected: "Por favor, desactive el bloqueador de publicidad."
|
detected: "Por favor, desactive el bloqueador de publicidad."
|
||||||
@@ -20,8 +22,15 @@ common:
|
|||||||
application-authorization: "Autorizaciones de la aplicación."
|
application-authorization: "Autorizaciones de la aplicación."
|
||||||
close: "Cerrar"
|
close: "Cerrar"
|
||||||
do-not-copy-paste: "Por favor no copies código aquí. Tu cuenta puede resultar comprometida."
|
do-not-copy-paste: "Por favor no copies código aquí. Tu cuenta puede resultar comprometida."
|
||||||
|
load-more: "Leer más"
|
||||||
enter-password: "Escribe una contraseña"
|
enter-password: "Escribe una contraseña"
|
||||||
2fa: "Autenticación de dos factores"
|
2fa: "Autenticación de dos factores"
|
||||||
|
customize-home: "Personaliza la página principal"
|
||||||
|
featured-notes: "Destacados"
|
||||||
|
dark-mode: "Modo oscuro"
|
||||||
|
signin: "Iniciar sesión"
|
||||||
|
signup: "¡Regístrate!"
|
||||||
|
signout: "Cerrar sesión"
|
||||||
got-it: "¡Listo!"
|
got-it: "¡Listo!"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "Consejos de personalización"
|
title: "Consejos de personalización"
|
||||||
@@ -48,10 +57,29 @@ common:
|
|||||||
month-and-day: "{day} de {month}"
|
month-and-day: "{day} de {month}"
|
||||||
trash: "Papelera"
|
trash: "Papelera"
|
||||||
drive: "Drive"
|
drive: "Drive"
|
||||||
|
pages: "Páginas"
|
||||||
messaging: "Conversación"
|
messaging: "Conversación"
|
||||||
home: "Inicio"
|
home: "Inicio"
|
||||||
|
deck: "Deck"
|
||||||
|
timeline: "Timeline"
|
||||||
|
explore: "Explorar"
|
||||||
following: "Siguiendo"
|
following: "Siguiendo"
|
||||||
|
followers: "Seguidores"
|
||||||
favorites: "Me gusta esta nota"
|
favorites: "Me gusta esta nota"
|
||||||
|
permissions:
|
||||||
|
"read:account": "Ver información de la cuenta"
|
||||||
|
"write:account": "Editar información de la cuenta"
|
||||||
|
"read:blocks": "Ver bloques"
|
||||||
|
"write:blocks": "Editar bloques"
|
||||||
|
"read:favorites": "Ver favoritos"
|
||||||
|
"write:favorites": "Editar favoritos"
|
||||||
|
"read:following": "Ver información de seguidor"
|
||||||
|
"read:messaging": "Ver conversación"
|
||||||
|
"read:mutes": "Ver silenciados"
|
||||||
|
"write:notes": "Crear y eliminar articulos"
|
||||||
|
"read:notifications": "Ver notificaciones"
|
||||||
|
"read:reactions": "Ver reacciones"
|
||||||
|
"write:votes": "Vota"
|
||||||
weekday-short:
|
weekday-short:
|
||||||
sunday: "domingo"
|
sunday: "domingo"
|
||||||
monday: "lunes"
|
monday: "lunes"
|
||||||
@@ -97,14 +125,29 @@ common:
|
|||||||
d: "¿Quieres decir algo?"
|
d: "¿Quieres decir algo?"
|
||||||
e: "¡Escribe aquí!"
|
e: "¡Escribe aquí!"
|
||||||
f: "Esperando a que escribas algo..."
|
f: "Esperando a que escribas algo..."
|
||||||
|
settings: "Configuración"
|
||||||
_settings:
|
_settings:
|
||||||
profile: "Tu perfil"
|
profile: "Tu perfil"
|
||||||
notification: "Notificaciones"
|
notification: "Notificaciones"
|
||||||
|
apps: "Aplicaciones"
|
||||||
tags: "Etiquetas"
|
tags: "Etiquetas"
|
||||||
|
mute-and-block: "Silenciar/Bloquear"
|
||||||
blocking: "Bloquear"
|
blocking: "Bloquear"
|
||||||
|
security: "Seguridad"
|
||||||
password: "Contraseña"
|
password: "Contraseña"
|
||||||
|
other: "Otros"
|
||||||
|
appearance: "Diseño"
|
||||||
|
behavior: "Comportamiento"
|
||||||
|
fetch-on-scroll-desc: "Cuando te deslizas al final de la página nuevo contenido se carga automáticamente."
|
||||||
|
note-visibility: "Visibilidad de la publicación"
|
||||||
|
default-note-visibility: "Rango de publicación predeterminado"
|
||||||
|
web-search-engine: "Buscador web"
|
||||||
|
web-search-engine-desc: "Ejemplo: https://www.google.com/?#q={{query}}"
|
||||||
|
this-setting-is-this-device-only: "Solo para este dispositivo"
|
||||||
use-os-default-emojis: "Usar los emoticonos estándar del sistema operativo"
|
use-os-default-emojis: "Usar los emoticonos estándar del sistema operativo"
|
||||||
line-width: "Grosor de línea"
|
line-width: "Grosor de línea"
|
||||||
|
line-width-thin: "Fino"
|
||||||
|
line-width-normal: "Normal"
|
||||||
line-width-thick: "Grosor"
|
line-width-thick: "Grosor"
|
||||||
font-size: "Tamaño del texto"
|
font-size: "Tamaño del texto"
|
||||||
font-size-x-small: "Muy pequeño"
|
font-size-x-small: "Muy pequeño"
|
||||||
@@ -128,22 +171,60 @@ common:
|
|||||||
contrasted-acct: "Añadir contraste al nombre de usuario"
|
contrasted-acct: "Añadir contraste al nombre de usuario"
|
||||||
wallpaper: "Fondo de pantalla"
|
wallpaper: "Fondo de pantalla"
|
||||||
choose-wallpaper: "Escoge un fondo de pantalla"
|
choose-wallpaper: "Escoge un fondo de pantalla"
|
||||||
|
delete-wallpaper: "Quitar fondo de pantalla"
|
||||||
|
post-form-on-timeline: "Mostrar el formulario de las entradas encima de la línea de tiempo"
|
||||||
|
show-clock-on-header: "Muestra el reloj en la parte superior derecha"
|
||||||
|
show-reply-target: "Mostrar destinatario de la mención"
|
||||||
|
timeline: "Timeline"
|
||||||
|
show-my-renotes: "Mostrar mis renotes en la timeline"
|
||||||
|
show-renoted-my-notes: "Mostrar renotes de mis posts en la timeline"
|
||||||
|
sound: "Sonido"
|
||||||
|
enable-sounds: "Habilitar sonido"
|
||||||
|
volume: "Volúmen"
|
||||||
|
test: "Prueba"
|
||||||
|
update: "Actualizar Misskey"
|
||||||
|
version: "Versión"
|
||||||
|
latest-version: "Última versión"
|
||||||
|
update-checking: "Buscando actualizaciones"
|
||||||
|
no-updates: "No hay actualizaciones disponibles"
|
||||||
|
no-updates-desc: "Tu Misskey está actualizado"
|
||||||
|
update-available: "¡Una nueva versión está disponible!"
|
||||||
|
update-available-desc: "Las actualizaciones se aplicarán cuando la página se vuelva a cargar."
|
||||||
|
advanced-settings: "Configuraciones avanzadas"
|
||||||
navbar-position-left: "Izquierda"
|
navbar-position-left: "Izquierda"
|
||||||
search: "Buscar"
|
search: "Buscar"
|
||||||
delete: "eliminar"
|
delete: "eliminar"
|
||||||
loading: "cargando"
|
loading: "cargando"
|
||||||
|
ok: "Confirmar"
|
||||||
|
cancel: "Cancelar"
|
||||||
update-available-title: "Actualización disponible"
|
update-available-title: "Actualización disponible"
|
||||||
update-available: "Hay disponible una nueva versión de Misskey ({newer}, la versión actual es {current}). Refresca la página para aplicar las actualizaciones."
|
update-available: "Hay disponible una nueva versión de Misskey ({newer}, la versión actual es {current}). Refresca la página para aplicar las actualizaciones."
|
||||||
my-token-regenerated: "Tu token se ha regenerado vas a ser desconectado."
|
my-token-regenerated: "Tu token se ha regenerado vas a ser desconectado."
|
||||||
verified-user: "Cuenta verificada"
|
hide-password: "Ocultar contraseña"
|
||||||
|
show-password: "Mostrar contraseña"
|
||||||
do-not-use-in-production: "Esto está en desarrollo, no usarlo para producción."
|
do-not-use-in-production: "Esto está en desarrollo, no usarlo para producción."
|
||||||
|
user-suspended: "Este usuario ha sido suspendido"
|
||||||
|
is-remote-user: "La información sobre este usuario puede no estar completa"
|
||||||
|
is-remote-post: "Es una publicación remota"
|
||||||
|
view-on-remote: "Consultar el perfil completo"
|
||||||
|
renoted-by: "Renotado por {user}"
|
||||||
|
no-notes: "No hay publicaciones"
|
||||||
|
turn-on-darkmode: "Cambiar a modo oscuro"
|
||||||
|
turn-off-darkmode: "Modo claro"
|
||||||
|
error:
|
||||||
|
title: "Se ha producido un problema :("
|
||||||
|
retry: "Inténtalo otra vez"
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "Empatado"
|
drawn: "Empatado"
|
||||||
my-turn: "Mi turno"
|
my-turn: "Mi turno"
|
||||||
opponent-turn: "Turno del oponente"
|
opponent-turn: "Turno del oponente"
|
||||||
|
turn-of: "Turno de {name}"
|
||||||
|
past-turn-of: "Turno de {name}"
|
||||||
|
won: "{name} ha ganado"
|
||||||
black: "Negro"
|
black: "Negro"
|
||||||
white: "Blanco"
|
white: "Blanco"
|
||||||
total: "Total"
|
total: "Total"
|
||||||
|
this-turn: "Turno {count}"
|
||||||
widgets:
|
widgets:
|
||||||
analog-clock: "Reloj analógico"
|
analog-clock: "Reloj analógico"
|
||||||
profile: "Perfil"
|
profile: "Perfil"
|
||||||
@@ -166,18 +247,13 @@ common:
|
|||||||
nav: "Navegación"
|
nav: "Navegación"
|
||||||
tips: "Consejos"
|
tips: "Consejos"
|
||||||
hashtags: "Etiquetas"
|
hashtags: "Etiquetas"
|
||||||
|
queue: "En cola"
|
||||||
|
dev: "Se ha producido un error creando la aplicación. Intentelo de nuevo."
|
||||||
|
ai-chan-kawaii: "Ai-chan es muy mona!"
|
||||||
you: "Tú"
|
you: "Tú"
|
||||||
auth/views/form.vue:
|
auth/views/form.vue:
|
||||||
|
share-access: "¿Deseas permitir a <i>{name}</i> acceder a tu cuenta?"
|
||||||
permission-ask: "La aplicación requiere los siguientes permisos:"
|
permission-ask: "La aplicación requiere los siguientes permisos:"
|
||||||
account-read: "Viendo información de la cuenta:"
|
|
||||||
account-write: "Modificar información de la cuenta:"
|
|
||||||
note-write: "Publicación."
|
|
||||||
like-write: "Para reaccionar a las publicaciones."
|
|
||||||
following-write: "Seguir o dejar de seguir"
|
|
||||||
drive-read: "Leer tu unidad."
|
|
||||||
drive-write: "Cargar o borrar archivos de tu unidad."
|
|
||||||
notification-read: "Leer tus notificaciones."
|
|
||||||
notification-write: "Administrar tus notificaciones."
|
|
||||||
cancel: "Cancelar"
|
cancel: "Cancelar"
|
||||||
accept: "Garantizar acceso."
|
accept: "Garantizar acceso."
|
||||||
auth/views/index.vue:
|
auth/views/index.vue:
|
||||||
@@ -191,7 +267,18 @@ auth/views/index.vue:
|
|||||||
error: "Esta sesión no existe."
|
error: "Esta sesión no existe."
|
||||||
sign-in: "Por favor inicia sesión."
|
sign-in: "Por favor inicia sesión."
|
||||||
common/views/pages/explore.vue:
|
common/views/pages/explore.vue:
|
||||||
verified-users: "Cuenta verificada"
|
popular-users: "Usuarios populares"
|
||||||
|
recently-updated-users: "Usuarios activos recientemente"
|
||||||
|
recently-registered-users: "Usuarios que se han unido recientemente"
|
||||||
|
popular-tags: "Etiquetas populares"
|
||||||
|
federated: "Desde el fediverso"
|
||||||
|
explore: "Explorar {host}"
|
||||||
|
users-info: "Actualmente hay {users} registrados aquí"
|
||||||
|
common/views/components/url-preview.vue:
|
||||||
|
enable-player: "Activar reproducción"
|
||||||
|
disable-player: "Cerrar el reproductor"
|
||||||
|
common/views/components/user-list.vue:
|
||||||
|
no-users: "No hay usuarios."
|
||||||
common/views/components/games/reversi/reversi.vue:
|
common/views/components/games/reversi/reversi.vue:
|
||||||
matching:
|
matching:
|
||||||
waiting-for: "Esperando por {}"
|
waiting-for: "Esperando por {}"
|
||||||
@@ -207,6 +294,7 @@ common/views/components/games/reversi/reversi.index.vue:
|
|||||||
sub-title: "¡Juega Reversi con tus amigos!"
|
sub-title: "¡Juega Reversi con tus amigos!"
|
||||||
invite: "Invitar"
|
invite: "Invitar"
|
||||||
rule: "Cómo jugar"
|
rule: "Cómo jugar"
|
||||||
|
rule-desc: "Reversi es un juego de estrategia para dos jugadores, el cual se juega en un tablero de 8x8. Hay 64 fichas llamadas discos, las cuales son claras de un lado y oscuras del otro. Los jugadores toman turnos colocando fichas en el tablero con su color asignado mirando hacia arriba. Durante una jugada, cualquier disco del color del oponente que esté en fila entre un disco del oponente y otro del mismo color, será volteado para tener el color del jugador que haya hecho la movida. El objetivo del juego es tener la mayoría de los discos de tu color cuando el último cuadro es llenado."
|
||||||
mode-invite: "Invitar"
|
mode-invite: "Invitar"
|
||||||
mode-invite-desc: "Invitar un usuario al juego."
|
mode-invite-desc: "Invitar un usuario al juego."
|
||||||
invitations: "¡Has recibido una invitación!"
|
invitations: "¡Has recibido una invitación!"
|
||||||
@@ -263,23 +351,40 @@ common/views/components/media-banner.vue:
|
|||||||
click-to-show: "Click para mostrar"
|
click-to-show: "Click para mostrar"
|
||||||
common/views/components/theme.vue:
|
common/views/components/theme.vue:
|
||||||
theme: "Tema"
|
theme: "Tema"
|
||||||
|
light-theme: "Tema a usar en Light mode"
|
||||||
|
dark-theme: "Tema a usar en dark mode"
|
||||||
light-themes: "Tema claro"
|
light-themes: "Tema claro"
|
||||||
dark-themes: "Tema oscuro"
|
dark-themes: "Tema oscuro"
|
||||||
install-a-theme: "Instalar tema"
|
install-a-theme: "Instalar tema"
|
||||||
theme-code: "Código del tema"
|
theme-code: "Código del tema"
|
||||||
install: "Instalación"
|
install: "Instalación"
|
||||||
|
installed: "\"{}\" se ha instalado"
|
||||||
|
create-a-theme: "Crear tema"
|
||||||
|
save-created-theme: "Guardar tema"
|
||||||
primary-color: "Color primario"
|
primary-color: "Color primario"
|
||||||
secondary-color: "Color secundario"
|
secondary-color: "Color secundario"
|
||||||
|
text-color: "Color del texto"
|
||||||
base-theme: "Tema base"
|
base-theme: "Tema base"
|
||||||
base-theme-light: "Claro"
|
base-theme-light: "Claro"
|
||||||
base-theme-dark: "Oscuro"
|
base-theme-dark: "Oscuro"
|
||||||
|
find-more-theme: "Obtener más temas"
|
||||||
theme-name: "Nombre del tema"
|
theme-name: "Nombre del tema"
|
||||||
preview-created-theme: "Vista previa"
|
preview-created-theme: "Vista previa"
|
||||||
|
invalid-theme: "No es un tema válido"
|
||||||
|
already-installed: "Este tema ya está instalado."
|
||||||
|
saved: "Guardado"
|
||||||
|
manage-themes: "Gestor de temas"
|
||||||
|
builtin-themes: "Temas estandar"
|
||||||
my-themes: "Mis temas"
|
my-themes: "Mis temas"
|
||||||
installed-themes: "Temas instalados"
|
installed-themes: "Temas instalados"
|
||||||
|
select-theme: "Elegir tema"
|
||||||
uninstall: "Desinstalar"
|
uninstall: "Desinstalar"
|
||||||
|
uninstalled: "\"{}\" ha sido desinstalado"
|
||||||
|
author: "Autor"
|
||||||
|
desc: "Descripción"
|
||||||
export: "Exportar"
|
export: "Exportar"
|
||||||
import: "Importar"
|
import: "Importar"
|
||||||
|
import-by-code: "o pega el código"
|
||||||
common/views/components/cw-button.vue:
|
common/views/components/cw-button.vue:
|
||||||
show: "Mostrar"
|
show: "Mostrar"
|
||||||
chars: "{count} letras"
|
chars: "{count} letras"
|
||||||
@@ -290,17 +395,13 @@ common/views/components/messaging.vue:
|
|||||||
you: "Tu"
|
you: "Tu"
|
||||||
no-history: "Sin historial"
|
no-history: "Sin historial"
|
||||||
common/views/components/messaging-room.vue:
|
common/views/components/messaging-room.vue:
|
||||||
empty: "Sin conversaciones"
|
|
||||||
no-history: "El historial se ha acabado"
|
no-history: "El historial se ha acabado"
|
||||||
resize-form: "Arrastra para redimensionar"
|
|
||||||
new-message: "Nuevo mensaje"
|
new-message: "Nuevo mensaje"
|
||||||
only-one-file-attached: "Un único archivo se puede conectar al mensaje"
|
|
||||||
common/views/components/messaging-room.form.vue:
|
common/views/components/messaging-room.form.vue:
|
||||||
input-message-here: "Escribe el mensaje aquí"
|
input-message-here: "Escribe el mensaje aquí"
|
||||||
send: "Enviar"
|
send: "Enviar"
|
||||||
attach-from-local: "Adjunta ficheros desde tu PC"
|
attach-from-local: "Adjunta ficheros desde tu PC"
|
||||||
attach-from-drive: "Adjunta ficheros desde tu disco"
|
attach-from-drive: "Adjunta ficheros desde tu disco"
|
||||||
only-one-file-attached: "Un único archivo se puede conectar al mensaje"
|
|
||||||
common/views/components/messaging-room.message.vue:
|
common/views/components/messaging-room.message.vue:
|
||||||
is-read: "Leer"
|
is-read: "Leer"
|
||||||
deleted: "El mensaje se ha borrado"
|
deleted: "El mensaje se ha borrado"
|
||||||
@@ -393,10 +494,25 @@ common/views/components/stream-indicator.vue:
|
|||||||
connected: "Conectado"
|
connected: "Conectado"
|
||||||
common/views/components/notification-settings.vue:
|
common/views/components/notification-settings.vue:
|
||||||
title: "Notificaciones"
|
title: "Notificaciones"
|
||||||
|
common/views/components/integration-settings.vue:
|
||||||
|
title: "Integraciones"
|
||||||
|
connect: "Conectar"
|
||||||
|
disconnect: "Desconectarse"
|
||||||
|
connected-to: "Estas conectado a la siguiente cuenta"
|
||||||
common/views/components/github-setting.vue:
|
common/views/components/github-setting.vue:
|
||||||
|
description: "Una vez conectada tu cuenta de GitHub a Misskey podrás ver la información sobre tu perfil de GitHub y además podrás registrarte mediante tu cuenta de GitHub."
|
||||||
|
connected-to: "Estas conectado a esta cuenta de GitHub"
|
||||||
detail: "Ver detalles..."
|
detail: "Ver detalles..."
|
||||||
|
reconnect: "Reconectar"
|
||||||
|
connect: "Vincular tu cuenta de GitHub"
|
||||||
|
disconnect: "Desconectarse"
|
||||||
common/views/components/discord-setting.vue:
|
common/views/components/discord-setting.vue:
|
||||||
|
description: "Una vez conectada tu cuenta de Discord a Misskey podrás ver la información sobre tu perfil de Discord y además podrás registrarte mediante tu cuenta de Discord."
|
||||||
|
connected-to: "Estas conectado a esta cuenta de Discord"
|
||||||
detail: "Ver detalles..."
|
detail: "Ver detalles..."
|
||||||
|
reconnect: "Reconectar"
|
||||||
|
connect: "Vincular tu cuenta de Discord"
|
||||||
|
disconnect: "Desconectarse"
|
||||||
common/views/components/uploader.vue:
|
common/views/components/uploader.vue:
|
||||||
waiting: "Un momento"
|
waiting: "Un momento"
|
||||||
common/views/components/visibility-chooser.vue:
|
common/views/components/visibility-chooser.vue:
|
||||||
@@ -408,27 +524,72 @@ common/views/components/visibility-chooser.vue:
|
|||||||
specified: "Directo"
|
specified: "Directo"
|
||||||
specified-desc: "Publica solo para los seguidores que quieras"
|
specified-desc: "Publica solo para los seguidores que quieras"
|
||||||
local-public: "Público (sólo local)"
|
local-public: "Público (sólo local)"
|
||||||
|
local-public-desc: "No publicar para remoto"
|
||||||
local-home: "Inicio (sólo local)"
|
local-home: "Inicio (sólo local)"
|
||||||
local-followers: "Seguidores (sólo local)"
|
local-followers: "Seguidores (sólo local)"
|
||||||
|
common/views/components/trends.vue:
|
||||||
|
count: "{} usuarios mencionados"
|
||||||
|
empty: "Ninguna tendencia popular ahora"
|
||||||
|
common/views/components/language-settings.vue:
|
||||||
|
title: "Mostrar idioma"
|
||||||
|
pick-language: "Selecciona un idioma"
|
||||||
|
recommended: "Recomendado"
|
||||||
|
auto: "Automático"
|
||||||
|
specify-language: "Especifica el idioma"
|
||||||
|
info: "Necesitas recargar la página para que los cambios tengan efecto."
|
||||||
common/views/components/profile-editor.vue:
|
common/views/components/profile-editor.vue:
|
||||||
title: "Perfil"
|
title: "Perfil"
|
||||||
name: "Nombre"
|
name: "Nombre"
|
||||||
account: "Cuenta"
|
account: "Cuenta"
|
||||||
|
location: "Localización"
|
||||||
|
description: "Acerca de mí"
|
||||||
|
you-can-include-hashtags: "También puedes incluir hashtags en la descripción de tu perfil."
|
||||||
|
language: "Idioma"
|
||||||
|
birthday: "Fecha de nacimiento"
|
||||||
avatar: "Avatar"
|
avatar: "Avatar"
|
||||||
banner: "Banner"
|
banner: "Banner"
|
||||||
is-cat: "Esta cuenta es un gato"
|
is-cat: "Esta cuenta es un gato"
|
||||||
is-bot: "Esta cuenta es un bot"
|
is-bot: "Esta cuenta es un bot"
|
||||||
|
is-locked: "Las peticiones de seguimiento necesitan aprobación"
|
||||||
|
careful-bot: "Las peticiones de seguimiento de bots necesitan aprobación"
|
||||||
|
auto-accept-followed: "Aprobar automaticamente las peticiones de follow de gente a la que sigues"
|
||||||
|
advanced: "Otros"
|
||||||
|
privacy: "Privacidad"
|
||||||
save: "Guardar"
|
save: "Guardar"
|
||||||
|
saved: "Perfil actualizado con exito"
|
||||||
|
uploading: "Subiendo"
|
||||||
|
upload-failed: "Error al subir"
|
||||||
|
email: "Preferencias de correo"
|
||||||
email-address: "Correo electrónico"
|
email-address: "Correo electrónico"
|
||||||
|
email-verified: "Tu cuenta de correo ha sido verificada."
|
||||||
|
email-not-verified: "Tu cuenta de correo no está verificada. Por favor comprueba tu bandeja de entrada."
|
||||||
export: "Exportar"
|
export: "Exportar"
|
||||||
import: "Importar"
|
import: "Importar"
|
||||||
|
export-and-import: "Exportar/Importar"
|
||||||
export-targets:
|
export-targets:
|
||||||
|
all-notes: "Todas las notas publicadas"
|
||||||
|
following-list: "Seguidores"
|
||||||
mute-list: "Silenciar"
|
mute-list: "Silenciar"
|
||||||
blocking-list: "Bloquear"
|
blocking-list: "Bloquear"
|
||||||
user-lists: "Listas"
|
user-lists: "Listas"
|
||||||
|
export-requested: "Has solicitado una exportación. Esto puede tardar un rato. Después de que termine la exportación el archivo se añadirá al drive."
|
||||||
|
import-requested: "Has empezado una importación. Esto puede tardar un rato."
|
||||||
enter-password: "Escribe una contraseña"
|
enter-password: "Escribe una contraseña"
|
||||||
|
danger-zone: "Zona de peligro"
|
||||||
|
delete-account: "Eliminar cuenta"
|
||||||
|
account-deleted: "Esta cuenta ha sido eliminada. Puede tardar un rato hasta que toda la información desaparazca."
|
||||||
common/views/components/user-list-editor.vue:
|
common/views/components/user-list-editor.vue:
|
||||||
users: "Usuarios"
|
users: "Usuarios"
|
||||||
|
rename: "Cambiar el nombre de la lista"
|
||||||
|
delete: "Eliminar lista"
|
||||||
|
remove-user: "Eliminar de la lista"
|
||||||
|
common/views/components/user-group-editor.vue:
|
||||||
|
invite: "Invitar"
|
||||||
|
common/views/components/user-lists.vue:
|
||||||
|
user-lists: "Listas"
|
||||||
|
list-name: "Nombre de lista"
|
||||||
|
common/views/components/user-groups.vue:
|
||||||
|
invites: "Invitar"
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "Recuperando"
|
fetching: "Recuperando"
|
||||||
no-broadcasts: "Sin emisión"
|
no-broadcasts: "Sin emisión"
|
||||||
@@ -487,6 +648,8 @@ common/views/pages/follow.vue:
|
|||||||
request-pending: "Solicitud pendiente"
|
request-pending: "Solicitud pendiente"
|
||||||
follow-processing: "Solicitud en proceso"
|
follow-processing: "Solicitud en proceso"
|
||||||
follow-request: "Solicitar suscripción"
|
follow-request: "Solicitar suscripción"
|
||||||
|
common/views/pages/follow-requests.vue:
|
||||||
|
received-follow-requests: "Solicitudes de seguimiento"
|
||||||
desktop:
|
desktop:
|
||||||
banner-crop-title: "Corta la parte que aparece como un banner"
|
banner-crop-title: "Corta la parte que aparece como un banner"
|
||||||
banner: "Banner"
|
banner: "Banner"
|
||||||
@@ -595,10 +758,6 @@ desktop/views/components/home.vue:
|
|||||||
desktop/views/input-dialog.vue:
|
desktop/views/input-dialog.vue:
|
||||||
cancel: "Cancelar"
|
cancel: "Cancelar"
|
||||||
ok: "OK"
|
ok: "OK"
|
||||||
desktop/views/components/messaging-room-window.vue:
|
|
||||||
title: "Mensajes:"
|
|
||||||
desktop/views/components/messaging-window.vue:
|
|
||||||
title: "Mensajes"
|
|
||||||
desktop/views/components/note-detail.vue:
|
desktop/views/components/note-detail.vue:
|
||||||
private: "Esta publicación es privada"
|
private: "Esta publicación es privada"
|
||||||
deleted: "Esta publicación ha sido removida"
|
deleted: "Esta publicación ha sido removida"
|
||||||
@@ -635,7 +794,6 @@ desktop/views/components/post-form.vue:
|
|||||||
posting: "Publicando"
|
posting: "Publicando"
|
||||||
attach-media-from-local: "Agregar medios de tu dispositivo"
|
attach-media-from-local: "Agregar medios de tu dispositivo"
|
||||||
attach-media-from-drive: "Adjunta multimedia desde tu Disco"
|
attach-media-from-drive: "Adjunta multimedia desde tu Disco"
|
||||||
attach-cancel: "Quitar el archivo adjunto"
|
|
||||||
create-poll: "Crea una encuesta"
|
create-poll: "Crea una encuesta"
|
||||||
text-remain: "quedan {} caracteres"
|
text-remain: "quedan {} caracteres"
|
||||||
recent-tags: "Reciente"
|
recent-tags: "Reciente"
|
||||||
@@ -701,6 +859,9 @@ common/views/components/mute-and-block.vue:
|
|||||||
mute: "Silenciar"
|
mute: "Silenciar"
|
||||||
block: "Bloquear"
|
block: "Bloquear"
|
||||||
save: "Guardar"
|
save: "Guardar"
|
||||||
|
common/views/components/post-form-attaches.vue:
|
||||||
|
mark-as-sensitive: "Marcar como 'sensible'"
|
||||||
|
unmark-as-sensitive: "Desmarcar como 'sensible'"
|
||||||
desktop/views/components/sub-note-content.vue:
|
desktop/views/components/sub-note-content.vue:
|
||||||
private: "Esta publicación es privada"
|
private: "Esta publicación es privada"
|
||||||
deleted: "Esta publicación ha sido removida"
|
deleted: "Esta publicación ha sido removida"
|
||||||
@@ -712,9 +873,7 @@ desktop/views/components/settings.tags.vue:
|
|||||||
desktop/views/components/timeline.vue:
|
desktop/views/components/timeline.vue:
|
||||||
home: "Inicio"
|
home: "Inicio"
|
||||||
local: "Local"
|
local: "Local"
|
||||||
hybrid: "Social"
|
|
||||||
global: "Global"
|
global: "Global"
|
||||||
messages: "Mensajes"
|
|
||||||
list: "Listas"
|
list: "Listas"
|
||||||
hashtag: "Hashtags"
|
hashtag: "Hashtags"
|
||||||
list-name: "Nombre de lista"
|
list-name: "Nombre de lista"
|
||||||
@@ -734,14 +893,6 @@ desktop/views/components/ui.header.post.vue:
|
|||||||
post: "Crear una publicación"
|
post: "Crear una publicación"
|
||||||
desktop/views/components/ui.header.search.vue:
|
desktop/views/components/ui.header.search.vue:
|
||||||
placeholder: "Buscar"
|
placeholder: "Buscar"
|
||||||
desktop/views/components/received-follow-requests-window.vue:
|
|
||||||
title: "Solicitudes de seguidores"
|
|
||||||
accept: "Aceptar"
|
|
||||||
reject: "Rechazar"
|
|
||||||
desktop/views/components/user-lists-window.vue:
|
|
||||||
title: "Listas de usuario"
|
|
||||||
create-list: "Crear lista"
|
|
||||||
list-name: "Nombre de lista"
|
|
||||||
desktop/views/components/user-preview.vue:
|
desktop/views/components/user-preview.vue:
|
||||||
notes: "Publicaciones"
|
notes: "Publicaciones"
|
||||||
following: "Sigue"
|
following: "Sigue"
|
||||||
@@ -755,25 +906,45 @@ admin/views/index.vue:
|
|||||||
instance: "Instancia"
|
instance: "Instancia"
|
||||||
moderators: "Moderadores"
|
moderators: "Moderadores"
|
||||||
users: "Usuarios"
|
users: "Usuarios"
|
||||||
hashtags: "Hashtags"
|
federation: "Federado"
|
||||||
|
queue: "Cola de trabajos"
|
||||||
|
logs: "Registros"
|
||||||
back-to-misskey: "Volver a Misskey"
|
back-to-misskey: "Volver a Misskey"
|
||||||
admin/views/dashboard.vue:
|
admin/views/dashboard.vue:
|
||||||
dashboard: "Panel de Control"
|
dashboard: "Panel de Control"
|
||||||
accounts: "Cuenta"
|
accounts: "Cuenta"
|
||||||
|
notes: "Publicaciones"
|
||||||
drive: "Drive"
|
drive: "Drive"
|
||||||
instances: "Instancias"
|
instances: "Instancias"
|
||||||
this-instance: "Esta instancia"
|
this-instance: "Esta instancia"
|
||||||
|
federated: "Federado"
|
||||||
|
admin/views/queue.vue:
|
||||||
|
title: "Cola"
|
||||||
|
remove-all-jobs: "Limpiar todos los trabajos pendientes"
|
||||||
admin/views/abuse.vue:
|
admin/views/abuse.vue:
|
||||||
|
title: "Abuso"
|
||||||
|
target: "Destinatario"
|
||||||
|
reporter: "Informador"
|
||||||
details: "Detalles"
|
details: "Detalles"
|
||||||
remove-report: "eliminar"
|
remove-report: "eliminar"
|
||||||
admin/views/instance.vue:
|
admin/views/instance.vue:
|
||||||
instance: "Instancia"
|
instance: "Instancia"
|
||||||
instance-name: "Nombre de la instancia"
|
instance-name: "Nombre de la instancia"
|
||||||
|
instance-description: "Descripción de la instancia"
|
||||||
host: "Host"
|
host: "Host"
|
||||||
recaptcha-secret-key: "clave secreta reCAPTCHA"
|
banner-url: "URL de la imagen de banner"
|
||||||
|
error-image-url: "Error en la URL de la imagen"
|
||||||
|
languages: "Idioma de esta instancia"
|
||||||
|
languages-desc: "Puedes añadir mas de uno, separado por espacios."
|
||||||
|
maintainer-config: "Información del administrador"
|
||||||
|
maintainer-name: "Nombre del administrador"
|
||||||
|
maintainer-email: "Contactar con el administrador"
|
||||||
|
drive-config: "Ajustes del Drive"
|
||||||
|
cache-remote-files: "Mantener en cache los archivos remotos"
|
||||||
|
recaptcha-preview: "Vista previa"
|
||||||
invite: "Invitar"
|
invite: "Invitar"
|
||||||
save: "Guardar"
|
save: "Guardar"
|
||||||
external-user-recommendation-timeout: "Tiempo de espera"
|
saved: "Guardado"
|
||||||
email: "Correo electrónico"
|
email: "Correo electrónico"
|
||||||
smtp-host: "Host SMTP"
|
smtp-host: "Host SMTP"
|
||||||
smtp-port: "Puerto SMTP"
|
smtp-port: "Puerto SMTP"
|
||||||
@@ -802,7 +973,6 @@ admin/views/users.vue:
|
|||||||
state:
|
state:
|
||||||
all: "Todo"
|
all: "Todo"
|
||||||
moderator: "Moderadores"
|
moderator: "Moderadores"
|
||||||
verified: "Cuenta verificada"
|
|
||||||
origin:
|
origin:
|
||||||
local: "Local"
|
local: "Local"
|
||||||
admin/views/emoji.vue:
|
admin/views/emoji.vue:
|
||||||
@@ -814,12 +984,14 @@ admin/views/announcements.vue:
|
|||||||
save: "Guardar"
|
save: "Guardar"
|
||||||
remove: "eliminar"
|
remove: "eliminar"
|
||||||
add: "Agregar"
|
add: "Agregar"
|
||||||
|
saved: "Guardado"
|
||||||
admin/views/federation.vue:
|
admin/views/federation.vue:
|
||||||
instance: "Instancia"
|
instance: "Instancia"
|
||||||
host: "Host"
|
host: "Host"
|
||||||
following: "Siguiendo"
|
following: "Siguiendo"
|
||||||
status: "Estado"
|
status: "Estado"
|
||||||
block: "Bloquear"
|
block: "Bloquear"
|
||||||
|
instances: "Federado"
|
||||||
states:
|
states:
|
||||||
all: "Todo"
|
all: "Todo"
|
||||||
blocked: "Bloquear"
|
blocked: "Bloquear"
|
||||||
@@ -827,6 +999,7 @@ admin/views/federation.vue:
|
|||||||
chart-spans:
|
chart-spans:
|
||||||
hour: "Por hora"
|
hour: "Por hora"
|
||||||
day: "Por día"
|
day: "Por día"
|
||||||
|
blocked-hosts: "Bloquear"
|
||||||
desktop/views/pages/selectdrive.vue:
|
desktop/views/pages/selectdrive.vue:
|
||||||
cancel: "Cancelar"
|
cancel: "Cancelar"
|
||||||
desktop/views/pages/user-list.users.vue:
|
desktop/views/pages/user-list.users.vue:
|
||||||
@@ -841,8 +1014,6 @@ desktop/views/pages/user/user.photos.vue:
|
|||||||
desktop/views/pages/user/user.header.vue:
|
desktop/views/pages/user/user.header.vue:
|
||||||
month: "lunes"
|
month: "lunes"
|
||||||
day: "domingo"
|
day: "domingo"
|
||||||
desktop/views/widgets/messaging.vue:
|
|
||||||
title: "Mensajes"
|
|
||||||
desktop/views/widgets/notifications.vue:
|
desktop/views/widgets/notifications.vue:
|
||||||
title: "Notificaciones"
|
title: "Notificaciones"
|
||||||
desktop/views/widgets/polls.vue:
|
desktop/views/widgets/polls.vue:
|
||||||
@@ -885,6 +1056,7 @@ mobile/views/components/post-form.vue:
|
|||||||
reply: "Responder"
|
reply: "Responder"
|
||||||
renote: "Republicar"
|
renote: "Republicar"
|
||||||
reply-placeholder: "Responder a esta nota..."
|
reply-placeholder: "Responder a esta nota..."
|
||||||
|
geolocation-alert: "Tu dispositivo no tiene soporte de geolocalización."
|
||||||
mobile/views/components/sub-note-content.vue:
|
mobile/views/components/sub-note-content.vue:
|
||||||
private: "Esta publicación es privada"
|
private: "Esta publicación es privada"
|
||||||
deleted: "Esta publicación ha sido removida"
|
deleted: "Esta publicación ha sido removida"
|
||||||
@@ -900,24 +1072,20 @@ mobile/views/components/ui.nav.vue:
|
|||||||
game: "Juegos"
|
game: "Juegos"
|
||||||
admin: "Admin"
|
admin: "Admin"
|
||||||
about: "Sobre"
|
about: "Sobre"
|
||||||
mobile/views/pages/user-lists.vue:
|
mobile/views/pages/drive.vue:
|
||||||
title: "Listas"
|
contextmenu:
|
||||||
|
upload: "Subir fichero"
|
||||||
|
create-folder: "Crear una carpeta"
|
||||||
mobile/views/pages/home.vue:
|
mobile/views/pages/home.vue:
|
||||||
home: "Inicio"
|
home: "Inicio"
|
||||||
local: "Local"
|
local: "Local"
|
||||||
hybrid: "Social"
|
|
||||||
global: "Global"
|
global: "Global"
|
||||||
messages: "Mensajes"
|
|
||||||
mobile/views/pages/widgets.vue:
|
mobile/views/pages/widgets.vue:
|
||||||
dashboard: "Panel de control"
|
dashboard: "Panel de control"
|
||||||
add-widget: "Agregar"
|
add-widget: "Agregar"
|
||||||
customization-tips: "Consejos de personalización"
|
customization-tips: "Consejos de personalización"
|
||||||
mobile/views/pages/widgets/activity.vue:
|
mobile/views/pages/widgets/activity.vue:
|
||||||
activity: "Actividad"
|
activity: "Actividad"
|
||||||
mobile/views/pages/received-follow-requests.vue:
|
|
||||||
title: "Solicitudes de seguimiento"
|
|
||||||
accept: "Aceptar"
|
|
||||||
reject: "Rechazar"
|
|
||||||
mobile/views/pages/games/reversi.vue:
|
mobile/views/pages/games/reversi.vue:
|
||||||
reversi: "Reversi"
|
reversi: "Reversi"
|
||||||
mobile/views/pages/search.vue:
|
mobile/views/pages/search.vue:
|
||||||
@@ -929,7 +1097,6 @@ mobile/views/pages/user/home.photos.vue:
|
|||||||
deck:
|
deck:
|
||||||
home: "Inicio"
|
home: "Inicio"
|
||||||
local: "Local"
|
local: "Local"
|
||||||
hybrid: "Social"
|
|
||||||
hashtag: "Etiquetas"
|
hashtag: "Etiquetas"
|
||||||
global: "Global"
|
global: "Global"
|
||||||
notifications: "Notificaciones"
|
notifications: "Notificaciones"
|
||||||
@@ -937,12 +1104,25 @@ deck:
|
|||||||
rename: "Renombrar"
|
rename: "Renombrar"
|
||||||
deck/deck.user-column.vue:
|
deck/deck.user-column.vue:
|
||||||
activity: "Actividad"
|
activity: "Actividad"
|
||||||
dev/views/new-app.vue:
|
pages:
|
||||||
account-read: "Viendo información de la cuenta:"
|
like: "Me gusta"
|
||||||
account-write: "Modificar información de la cuenta:"
|
blocks:
|
||||||
note-write: "Publicación."
|
post: "Formulario"
|
||||||
following-write: "Seguir o dejar de seguir"
|
script:
|
||||||
drive-read: "Leer tu unidad."
|
categories:
|
||||||
drive-write: "Cargar o borrar archivos de tu unidad."
|
random: "Aleatorio"
|
||||||
notification-read: "Leer tus notificaciones."
|
list: "Listas"
|
||||||
notification-write: "Administrar tus notificaciones."
|
blocks:
|
||||||
|
_join:
|
||||||
|
arg1: "Listas"
|
||||||
|
random: "Aleatorio"
|
||||||
|
_randomPick:
|
||||||
|
arg1: "Listas"
|
||||||
|
_dailyRandomPick:
|
||||||
|
arg1: "Listas"
|
||||||
|
_seedRandomPick:
|
||||||
|
arg2: "Listas"
|
||||||
|
_pick:
|
||||||
|
arg1: "Listas"
|
||||||
|
types:
|
||||||
|
array: "Listas"
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ common:
|
|||||||
rich-contents-desc: "Partagez vos idées, les événements et les sujets qui vous tiennent à cœur ainsi que tout autre chose que vous souhaitez partager avec les autres. Si vous le désirez, vous pouvez décorer vos messages en utilisant une syntaxe différente ou en y joignant des sondages et des fichiers, tels que les photos ou les vidéos que vous aimez."
|
rich-contents-desc: "Partagez vos idées, les événements et les sujets qui vous tiennent à cœur ainsi que tout autre chose que vous souhaitez partager avec les autres. Si vous le désirez, vous pouvez décorer vos messages en utilisant une syntaxe différente ou en y joignant des sondages et des fichiers, tels que les photos ou les vidéos que vous aimez."
|
||||||
reaction: "Réactions"
|
reaction: "Réactions"
|
||||||
reaction-desc: "Une manière simple d'exprimer vos émotions. Misskey peut attacher diverses réactions aux publications des autres utilisateurs. Si vous essayez les réactions sur Misskey, vous ne pourrez plus retourner sur une autre plateforme de réseaux sociaux n'offrant que des « J'aime »."
|
reaction-desc: "Une manière simple d'exprimer vos émotions. Misskey peut attacher diverses réactions aux publications des autres utilisateurs. Si vous essayez les réactions sur Misskey, vous ne pourrez plus retourner sur une autre plateforme de réseaux sociaux n'offrant que des « J'aime »."
|
||||||
ui: "Interface utilisateur"
|
ui: "Interface"
|
||||||
ui-desc: "Aucune interface graphique ne peut plaire à tout le monde. Par conséquent, Misskey possède une interface utilisateur hautement personnalisable selon vos goûts. Vous pouvez rendre votre page d'accueil originale en modifiant la mise en page de votre fil et en déplaçant les widgets que vous pouvez facilement ajuster pour vous approprier cet espace."
|
ui-desc: "Aucune interface graphique ne peut plaire à tout le monde. Par conséquent, Misskey possède une interface utilisateur hautement personnalisable selon vos goûts. Vous pouvez rendre votre page d'accueil originale en modifiant la mise en page de votre fil et en déplaçant les widgets que vous pouvez facilement ajuster pour vous approprier cet espace."
|
||||||
drive: "Drive"
|
drive: "Drive"
|
||||||
drive-desc: "Vous voulez poster une photo que vous avez déjà transférée ? Vous souhaitez organiser, nommer et créer un dossier pour vos fichiers téléversés ? Misskey Drive est la meilleure solution pour vous. Très facile de partager vos fichiers en ligne."
|
drive-desc: "Vous voulez poster une photo que vous avez déjà transférée ? Vous souhaitez organiser, nommer et créer un dossier pour vos fichiers téléversés ? Misskey Drive est la meilleure solution pour vous. Très facile de partager vos fichiers en ligne."
|
||||||
@@ -29,6 +29,11 @@ common:
|
|||||||
2fa: "Authentification à deux facteurs"
|
2fa: "Authentification à deux facteurs"
|
||||||
customize-home: "Personnaliser la disposition de votre accueil"
|
customize-home: "Personnaliser la disposition de votre accueil"
|
||||||
featured-notes: "Les notes mises en avant"
|
featured-notes: "Les notes mises en avant"
|
||||||
|
dark-mode: "Mode nuit"
|
||||||
|
signin: "Se connecter"
|
||||||
|
signup: "S'enregistrer"
|
||||||
|
signout: "Se déconnecter"
|
||||||
|
reload-to-apply-the-setting: "Le rechargement de la page est nécessaire pour appliquer ces paramètres. Désirez-vous la recharger maintenant ?"
|
||||||
got-it: "J’ai compris !"
|
got-it: "J’ai compris !"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "Conseils de personnalisation"
|
title: "Conseils de personnalisation"
|
||||||
@@ -55,6 +60,7 @@ common:
|
|||||||
month-and-day: "{day}-{month}"
|
month-and-day: "{day}-{month}"
|
||||||
trash: "Corbeille"
|
trash: "Corbeille"
|
||||||
drive: "Drive"
|
drive: "Drive"
|
||||||
|
pages: "Pages"
|
||||||
messaging: "Conversations"
|
messaging: "Conversations"
|
||||||
home: "Principal"
|
home: "Principal"
|
||||||
deck: "Deck"
|
deck: "Deck"
|
||||||
@@ -62,7 +68,23 @@ common:
|
|||||||
explore: "Découvrir"
|
explore: "Découvrir"
|
||||||
following: "Suit"
|
following: "Suit"
|
||||||
followers: "Abonné·e·s"
|
followers: "Abonné·e·s"
|
||||||
favorites: "Mettre cette note en favoris"
|
favorites: "Favorites"
|
||||||
|
permissions:
|
||||||
|
"read:account": "Afficher les informations du compte"
|
||||||
|
"write:account": "Mettre à jour les informations de votre compte"
|
||||||
|
"read:blocks": "Voir les blocs"
|
||||||
|
"write:blocks": "Écrire des blocs"
|
||||||
|
"read:drive": "Parcourir le Drive"
|
||||||
|
"write:drive": "Écrire sur le Drive"
|
||||||
|
"read:favorites": "Afficher les favoris"
|
||||||
|
"write:favorites": "Écrire des favoris"
|
||||||
|
"write:messaging": "Utiliser la messagerie"
|
||||||
|
"write:notes": "Créer ou supprimer des publications"
|
||||||
|
"read:notifications": "Afficher les notifications"
|
||||||
|
"write:notifications": "Gérer vos notifications"
|
||||||
|
"read:reactions": "Lire les réactions"
|
||||||
|
"write:reactions": "Gérer vos réactions"
|
||||||
|
"write:votes": "Vote"
|
||||||
empty-timeline-info:
|
empty-timeline-info:
|
||||||
follow-users-to-make-your-timeline: "Les utilisateurs suivants afficheront leurs publications sur votre fil."
|
follow-users-to-make-your-timeline: "Les utilisateurs suivants afficheront leurs publications sur votre fil."
|
||||||
explore: "Trouver des utilisateurs"
|
explore: "Trouver des utilisateurs"
|
||||||
@@ -111,23 +133,117 @@ common:
|
|||||||
d: "Désirez-vous publier quelques mots ?"
|
d: "Désirez-vous publier quelques mots ?"
|
||||||
e: "Écrivez ici"
|
e: "Écrivez ici"
|
||||||
f: "En attente de vos écrits"
|
f: "En attente de vos écrits"
|
||||||
|
settings: "Paramètres"
|
||||||
_settings:
|
_settings:
|
||||||
profile: "Votre profil"
|
profile: "Votre profil"
|
||||||
notification: "Notifications"
|
notification: "Notifications"
|
||||||
|
apps: "Applications"
|
||||||
tags: "Hashtags"
|
tags: "Hashtags"
|
||||||
|
mute-and-block: "Silencés / Bloqués"
|
||||||
blocking: "En cours blocage"
|
blocking: "En cours blocage"
|
||||||
|
security: "Sécurité"
|
||||||
|
signin: "Historique des connexions"
|
||||||
password: "Mot de passe"
|
password: "Mot de passe"
|
||||||
other: "Avancé"
|
other: "Avancé"
|
||||||
|
appearance: "Apparence"
|
||||||
|
behavior: "Comportement"
|
||||||
|
fetch-on-scroll: "Chargement automatique lors du défilement"
|
||||||
|
fetch-on-scroll-desc: "Chargement automatique du contenu lors du défilement de la page."
|
||||||
|
note-visibility: "Visibilité de la publication"
|
||||||
|
default-note-visibility: "Visibilité par défaut"
|
||||||
|
remember-note-visibility: "Se souvenir du mode de visibilité de la publication"
|
||||||
|
web-search-engine: "Moteur de recherche Web"
|
||||||
|
web-search-engine-desc: "Exemple : https://www.google.com/?#q={{query}}"
|
||||||
|
keep-cw: "Maintenir l'avertissement de contenu"
|
||||||
|
i-like-sushi: "Je préfère les sushis plutôt que le pudding"
|
||||||
|
show-reversi-board-labels: "Afficher les étiquettes des lignes et colonnes dans Reversi"
|
||||||
|
use-avatar-reversi-stones: "Utiliser l’avatar comme pion dans Reversi"
|
||||||
|
disable-animated-mfm: "Désactiver les textes animés dans les publications"
|
||||||
|
disable-showing-animated-images: "Désactiver l'animation des images"
|
||||||
|
suggest-recent-hashtags: "Afficher les hashtags populaires dans le champs de saisie"
|
||||||
|
always-show-nsfw: "Toujours afficher les contenus sensibles"
|
||||||
|
always-mark-nsfw: "Toujours marquer les notes ayant des médias comme sensibles"
|
||||||
|
show-full-acct: "Afficher l’adresse complète de l’utilisateur"
|
||||||
|
show-via: "Afficher via"
|
||||||
|
reduce-motion: "Réduire les animations dans l’interface utilisateur"
|
||||||
|
this-setting-is-this-device-only: "Uniquement sur cet appareil"
|
||||||
|
use-os-default-emojis: "Utiliser les émojis standards du système"
|
||||||
|
line-width: "Epaisseur du trait"
|
||||||
|
line-width-thin: "Fine"
|
||||||
|
line-width-normal: "Normale"
|
||||||
|
line-width-thick: "Épaisse"
|
||||||
|
font-size: "Taille du texte"
|
||||||
|
font-size-x-small: "Très petit"
|
||||||
|
font-size-small: "Petite"
|
||||||
|
font-size-medium: "Normale"
|
||||||
|
font-size-large: "Grande"
|
||||||
|
font-size-x-large: "Large"
|
||||||
|
deck-column-align: "Alignement des colonnes du Deck"
|
||||||
|
deck-column-align-center: "Centrer"
|
||||||
|
deck-column-align-left: "À gauche"
|
||||||
|
deck-column-align-flexible: "Flexible"
|
||||||
|
deck-column-width: "Largeur des colonnes du Deck"
|
||||||
|
deck-column-width-narrow: "Étroite"
|
||||||
|
deck-column-width-narrower: "Légèrement étroite"
|
||||||
|
deck-column-width-normal: "Normale"
|
||||||
|
deck-column-width-wider: "Légèrement large"
|
||||||
|
deck-column-width-wide: "Large"
|
||||||
|
use-shadow: "Utiliser les ombres dans l'interface utilisateur"
|
||||||
|
rounded-corners: "Coins arrondis de l'interface utilisateur"
|
||||||
|
circle-icons: "Utiliser des icônes circulaires"
|
||||||
|
contrasted-acct: "Ajouter du contraste au nom de l’utilisateur"
|
||||||
|
wallpaper: "Image du fond d'écran"
|
||||||
|
choose-wallpaper: "Sélectionner un fond d'écran"
|
||||||
|
delete-wallpaper: "Supprimer le fond d'écran"
|
||||||
|
post-form-on-timeline: "Afficher le champs de saisie en haut du fil"
|
||||||
|
show-clock-on-header: "Afficher l'horloge sur le coté supérieur droit"
|
||||||
timeline: "Fil d’actualité"
|
timeline: "Fil d’actualité"
|
||||||
|
show-my-renotes: "Afficher mes republications dans le fil"
|
||||||
|
show-renoted-my-notes: "Afficher les partages de mes propres notes sur le fil"
|
||||||
|
remain-deleted-note: "Continuer à afficher les notes supprimées"
|
||||||
|
sound: "Son"
|
||||||
|
enable-sounds: "Activer les sons"
|
||||||
|
enable-sounds-desc: "Jouer un son lorsque vous recevez un message/publication. Ce paramètre est sauvegardé dans le navigateur."
|
||||||
|
volume: "Volume"
|
||||||
|
test: "Test"
|
||||||
|
update: "Mise à jour de Misskey"
|
||||||
|
version: "Version actuelle :"
|
||||||
|
latest-version: "Dernière version :"
|
||||||
|
update-checking: "Recherche de mises à jour"
|
||||||
|
do-update: "Rechercher des mises à jour"
|
||||||
|
update-settings: "Paramètres avancés"
|
||||||
|
no-updates: "Aucune mise à jour disponible"
|
||||||
|
no-updates-desc: "Votre Misskey est à jour."
|
||||||
|
update-available: "Nouvelle version disponible !"
|
||||||
|
update-available-desc: "Les mises à jour seront appliquées une fois la page est rechargée."
|
||||||
|
advanced-settings: "Paramètres avancés"
|
||||||
|
debug-mode: "Activer le mode débogage"
|
||||||
|
debug-mode-desc: "Ce paramètre est stocké dans le navigateur."
|
||||||
|
navbar-position: "Position de la barre de navigation"
|
||||||
|
navbar-position-top: "En haut"
|
||||||
|
navbar-position-left: "À gauche"
|
||||||
|
navbar-position-right: "À droite"
|
||||||
|
i-am-under-limited-internet: "J'ai un accès Internet limité"
|
||||||
|
post-style: "Style d'affichage des notes"
|
||||||
|
post-style-standard: "Standard"
|
||||||
|
post-style-smart: "Intelligent"
|
||||||
|
notification-position: "Afficher les notifications"
|
||||||
|
notification-position-bottom: "en bas"
|
||||||
|
notification-position-top: "En haut"
|
||||||
|
disable-via-mobile: "Enlever la mention publié via 'mobile'"
|
||||||
|
load-raw-images: "Afficher les photos jointes dans leur qualité originale"
|
||||||
|
load-remote-media: "Afficher les médias depuis le serveur distant"
|
||||||
search: "Recherche"
|
search: "Recherche"
|
||||||
delete: "Supprimer"
|
delete: "Supprimer"
|
||||||
loading: "Chargement en cours …"
|
loading: "Chargement en cours …"
|
||||||
|
ok: "Confirmer"
|
||||||
|
cancel: "Quitter"
|
||||||
update-available-title: "Mise à jour disponible"
|
update-available-title: "Mise à jour disponible"
|
||||||
update-available: "Une nouvelle version de Misskey est disponible ({newer}, version actuelle: {current}). Veuillez recharger la page pour appliquer la mise à jour."
|
update-available: "Une nouvelle version de Misskey est disponible ({newer}, version actuelle: {current}). Veuillez recharger la page pour appliquer la mise à jour."
|
||||||
my-token-regenerated: "Votre jeton vient d’être généré, vous allez maintenant être déconnecté."
|
my-token-regenerated: "Votre jeton vient d’être généré, vous allez maintenant être déconnecté."
|
||||||
verified-user: "Compte vérifié"
|
|
||||||
hide-password: "Masquer le mot de passe"
|
hide-password: "Masquer le mot de passe"
|
||||||
show-password: "Afficher le mot de passe"
|
show-password: "Afficher le mot de passe"
|
||||||
|
enter-username: "Saisir un nom d'utilisateur"
|
||||||
do-not-use-in-production: "Il s’agit d’une version de développement. Ne pas utiliser dans un environnement de production."
|
do-not-use-in-production: "Il s’agit d’une version de développement. Ne pas utiliser dans un environnement de production."
|
||||||
user-suspended: "Cet·te utilisateur·trice a été suspendu·e"
|
user-suspended: "Cet·te utilisateur·trice a été suspendu·e"
|
||||||
is-remote-user: "Les informations à propos de ce compte peuvent être incomplètes."
|
is-remote-user: "Les informations à propos de ce compte peuvent être incomplètes."
|
||||||
@@ -135,7 +251,7 @@ common:
|
|||||||
view-on-remote: " Consulter le profil complet"
|
view-on-remote: " Consulter le profil complet"
|
||||||
renoted-by: "Renoté par {user}"
|
renoted-by: "Renoté par {user}"
|
||||||
no-notes: "Sans aucune note"
|
no-notes: "Sans aucune note"
|
||||||
turn-on-darkmode: "Basculer vers le mode nuit"
|
turn-on-darkmode: "Mode nuit"
|
||||||
turn-off-darkmode: "Mode jour"
|
turn-off-darkmode: "Mode jour"
|
||||||
error:
|
error:
|
||||||
title: "Une erreur est survenue"
|
title: "Une erreur est survenue"
|
||||||
@@ -173,21 +289,13 @@ common:
|
|||||||
nav: "Navigation"
|
nav: "Navigation"
|
||||||
tips: "Conseils"
|
tips: "Conseils"
|
||||||
hashtags: "Hashtags"
|
hashtags: "Hashtags"
|
||||||
|
queue: "File d'attente"
|
||||||
dev: "Échec lors de la création de l’application. Veuillez réessayer."
|
dev: "Échec lors de la création de l’application. Veuillez réessayer."
|
||||||
ai-chan-kawaii: "Ai-Chan est mignonne !"
|
ai-chan-kawaii: "Ai-Chan est mignonne !"
|
||||||
you: "Vous"
|
you: "Vous"
|
||||||
auth/views/form.vue:
|
auth/views/form.vue:
|
||||||
share-access: "Désirez-vous autoriser <i>{name}</i> à avoir accès à votre compte ?"
|
share-access: "Désirez-vous autoriser <i>{name}</i> à avoir accès à votre compte ?"
|
||||||
permission-ask: "Cette application nécessite les autorisations suivantes :"
|
permission-ask: "Cette application nécessite les autorisations suivantes :"
|
||||||
account-read: "Afficher les informations du compte."
|
|
||||||
account-write: "Modifications des informations du compte."
|
|
||||||
note-write: "Publier."
|
|
||||||
like-write: "Réagir aux publications."
|
|
||||||
following-write: "Suivre des comptes et se désabonner."
|
|
||||||
drive-read: "Lire votre Drive"
|
|
||||||
drive-write: "Téléverser/supprimer des fichiers dans votre Drive."
|
|
||||||
notification-read: "Lire vos notifications."
|
|
||||||
notification-write: "Gérer vos notifications."
|
|
||||||
cancel: "Annuler"
|
cancel: "Annuler"
|
||||||
accept: "Autoriser l’accès"
|
accept: "Autoriser l’accès"
|
||||||
auth/views/index.vue:
|
auth/views/index.vue:
|
||||||
@@ -201,7 +309,6 @@ auth/views/index.vue:
|
|||||||
error: "La session n’existe pas."
|
error: "La session n’existe pas."
|
||||||
sign-in: "Veuillez vous connecter"
|
sign-in: "Veuillez vous connecter"
|
||||||
common/views/pages/explore.vue:
|
common/views/pages/explore.vue:
|
||||||
verified-users: "Comptes vérifiés"
|
|
||||||
popular-users: "Utilisateurs populaires"
|
popular-users: "Utilisateurs populaires"
|
||||||
recently-updated-users: "Utilisateurs actifs récemment"
|
recently-updated-users: "Utilisateurs actifs récemment"
|
||||||
recently-registered-users: "Les nouveaux inscrits"
|
recently-registered-users: "Les nouveaux inscrits"
|
||||||
@@ -209,6 +316,9 @@ common/views/pages/explore.vue:
|
|||||||
federated: "Du Fédiverse"
|
federated: "Du Fédiverse"
|
||||||
explore: "Explorer {host}"
|
explore: "Explorer {host}"
|
||||||
users-info: "Actuellement, {users} utilisateurs se sont inscrit ici"
|
users-info: "Actuellement, {users} utilisateurs se sont inscrit ici"
|
||||||
|
common/views/components/url-preview.vue:
|
||||||
|
enable-player: "Activer la lecture"
|
||||||
|
disable-player: "Fermer le lecteur"
|
||||||
common/views/components/user-list.vue:
|
common/views/components/user-list.vue:
|
||||||
no-users: "Il n'y a aucun utilisateur"
|
no-users: "Il n'y a aucun utilisateur"
|
||||||
common/views/components/games/reversi/reversi.vue:
|
common/views/components/games/reversi/reversi.vue:
|
||||||
@@ -327,18 +437,15 @@ common/views/components/messaging.vue:
|
|||||||
search-user: "Trouver un utilisateur"
|
search-user: "Trouver un utilisateur"
|
||||||
you: "Vous"
|
you: "Vous"
|
||||||
no-history: "Pas d'historique"
|
no-history: "Pas d'historique"
|
||||||
|
user: "Utilisateur·rice·s"
|
||||||
common/views/components/messaging-room.vue:
|
common/views/components/messaging-room.vue:
|
||||||
empty: "Pas de conversations"
|
|
||||||
no-history: "Aucun historique"
|
no-history: "Aucun historique"
|
||||||
resize-form: "Faites glisser pour redimensionner"
|
|
||||||
new-message: "Nouveau message"
|
new-message: "Nouveau message"
|
||||||
only-one-file-attached: "Un seul fichier peut être joint au message"
|
|
||||||
common/views/components/messaging-room.form.vue:
|
common/views/components/messaging-room.form.vue:
|
||||||
input-message-here: "Tapez ici votre message"
|
input-message-here: "Tapez ici votre message"
|
||||||
send: "Envoyer"
|
send: "Envoyer"
|
||||||
attach-from-local: "Joindre un fichier depuis votre ordinateur"
|
attach-from-local: "Joindre un fichier depuis votre ordinateur"
|
||||||
attach-from-drive: "Joindre un fichier depuis votre Drive"
|
attach-from-drive: "Joindre un fichier depuis votre Drive"
|
||||||
only-one-file-attached: "Un seul fichier uniquement peut être joint au message"
|
|
||||||
common/views/components/messaging-room.message.vue:
|
common/views/components/messaging-room.message.vue:
|
||||||
is-read: "Lu"
|
is-read: "Lu"
|
||||||
deleted: "Ce message a été supprimé"
|
deleted: "Ce message a été supprimé"
|
||||||
@@ -351,6 +458,7 @@ common/views/components/nav.vue:
|
|||||||
repository: "Dépôt"
|
repository: "Dépôt"
|
||||||
develop: "Développeurs"
|
develop: "Développeurs"
|
||||||
feedback: "Suggestions"
|
feedback: "Suggestions"
|
||||||
|
tos: "Conditions d'utilisation"
|
||||||
common/views/components/note-menu.vue:
|
common/views/components/note-menu.vue:
|
||||||
mention: "Mention"
|
mention: "Mention"
|
||||||
detail: "Détails"
|
detail: "Détails"
|
||||||
@@ -369,8 +477,12 @@ common/views/components/user-menu.vue:
|
|||||||
mention: "Mention"
|
mention: "Mention"
|
||||||
mute: "Silencier"
|
mute: "Silencier"
|
||||||
unmute: "Enlever la sourdine"
|
unmute: "Enlever la sourdine"
|
||||||
|
mute-confirm: "Rendre muet cet utilisateur ?"
|
||||||
|
unmute-confirm: "Ne plus masquer cet utilisateur ?"
|
||||||
block: "Bloquer"
|
block: "Bloquer"
|
||||||
unblock: "Débloquer"
|
unblock: "Débloquer"
|
||||||
|
block-confirm: "Bloquer cet utilisateur ?"
|
||||||
|
unblock-confirm: "Débloquer cet utilisateur ?"
|
||||||
push-to-list: "Ajouter à une liste"
|
push-to-list: "Ajouter à une liste"
|
||||||
select-list: "Sélectionnez une liste"
|
select-list: "Sélectionnez une liste"
|
||||||
report-abuse: "Signaler un abus"
|
report-abuse: "Signaler un abus"
|
||||||
@@ -383,15 +495,32 @@ common/views/components/user-menu.vue:
|
|||||||
common/views/components/poll.vue:
|
common/views/components/poll.vue:
|
||||||
vote-to: "Voter pour '{}'"
|
vote-to: "Voter pour '{}'"
|
||||||
vote-count: "{} votes"
|
vote-count: "{} votes"
|
||||||
|
total-votes: "{} Total des votes"
|
||||||
vote: "Vote"
|
vote: "Vote"
|
||||||
show-result: "Montrer les résultats"
|
show-result: "Montrer les résultats"
|
||||||
voted: "Voté"
|
voted: "Voté"
|
||||||
|
closed: "Terminé"
|
||||||
|
remaining-days: "{d} jours, {h} heures restantes"
|
||||||
|
remaining-hours: "{h} heures et {m} minutes restantes"
|
||||||
|
remaining-minutes: "{m} minutes et {s} secondes restantes"
|
||||||
|
remaining-seconds: "{s} secondes restantes"
|
||||||
common/views/components/poll-editor.vue:
|
common/views/components/poll-editor.vue:
|
||||||
no-only-one-choice: "Vous devez saisir au moins deux choix."
|
no-only-one-choice: "Vous devez saisir au moins deux choix."
|
||||||
choice-n: "Choix {}"
|
choice-n: "Choix {}"
|
||||||
remove: "Supprimer ce choix"
|
remove: "Supprimer ce choix"
|
||||||
add: "+ Ajouter un choix"
|
add: "+ Ajouter un choix"
|
||||||
destroy: "Annuler ce sondage"
|
destroy: "Annuler ce sondage"
|
||||||
|
expiration: "Valide jusqu'à"
|
||||||
|
infinite: "Illimité"
|
||||||
|
at: "Choisir une date et une durée"
|
||||||
|
no-more: "Vous ne pouvez pas en ajouter davantage"
|
||||||
|
deadline-date: "Date d’échéance"
|
||||||
|
deadline-time: "Durée"
|
||||||
|
interval: "Durée"
|
||||||
|
unit: "Unité"
|
||||||
|
second: "secondes"
|
||||||
|
minute: "Minutes"
|
||||||
|
hour: "Heures"
|
||||||
day: "D"
|
day: "D"
|
||||||
common/views/components/reaction-picker.vue:
|
common/views/components/reaction-picker.vue:
|
||||||
choose-reaction: "Choisissez votre réaction"
|
choose-reaction: "Choisissez votre réaction"
|
||||||
@@ -436,6 +565,7 @@ common/views/components/signup.vue:
|
|||||||
password-matched: "OK"
|
password-matched: "OK"
|
||||||
password-not-matched: "Les mots de passe ne correspondent pas."
|
password-not-matched: "Les mots de passe ne correspondent pas."
|
||||||
recaptcha: "Vérifier"
|
recaptcha: "Vérifier"
|
||||||
|
tos: "Conditions d'utilisation"
|
||||||
create: "Créer un compte"
|
create: "Créer un compte"
|
||||||
some-error: "La création du compte a échoué. Veuillez réessayer."
|
some-error: "La création du compte a échoué. Veuillez réessayer."
|
||||||
common/views/components/special-message.vue:
|
common/views/components/special-message.vue:
|
||||||
@@ -523,6 +653,7 @@ common/views/components/profile-editor.vue:
|
|||||||
email-not-verified: "Adresse de courriel n’est pas confirmée. Veuillez vérifier votre boite de réception."
|
email-not-verified: "Adresse de courriel n’est pas confirmée. Veuillez vérifier votre boite de réception."
|
||||||
export: "Exporter"
|
export: "Exporter"
|
||||||
import: "Importer"
|
import: "Importer"
|
||||||
|
export-and-import: "Exportation et importation"
|
||||||
export-targets:
|
export-targets:
|
||||||
all-notes: "Toutes les notes publiées"
|
all-notes: "Toutes les notes publiées"
|
||||||
following-list: "Liste des abonnements"
|
following-list: "Liste des abonnements"
|
||||||
@@ -530,6 +661,7 @@ common/views/components/profile-editor.vue:
|
|||||||
blocking-list: "Liste des comptes bloqués"
|
blocking-list: "Liste des comptes bloqués"
|
||||||
user-lists: "Listes"
|
user-lists: "Listes"
|
||||||
export-requested: "Vous avez demandé une exportation. Cela peut prendre un certain temps. Une fois l'exportation terminée, le fichier résultant sera ajouté dans le Drive."
|
export-requested: "Vous avez demandé une exportation. Cela peut prendre un certain temps. Une fois l'exportation terminée, le fichier résultant sera ajouté dans le Drive."
|
||||||
|
import-requested: "Vous avez initié un import. Ceci peut prendre un peu de temps."
|
||||||
enter-password: "Veuillez saisir votre mot de passe"
|
enter-password: "Veuillez saisir votre mot de passe"
|
||||||
danger-zone: "Zone de danger"
|
danger-zone: "Zone de danger"
|
||||||
delete-account: "Supprimer le compte"
|
delete-account: "Supprimer le compte"
|
||||||
@@ -541,6 +673,20 @@ common/views/components/user-list-editor.vue:
|
|||||||
remove-user: "Retirer de cette liste"
|
remove-user: "Retirer de cette liste"
|
||||||
delete-are-you-sure: "Voulez-vous vraiment supprimer la liste « $1 » ?"
|
delete-are-you-sure: "Voulez-vous vraiment supprimer la liste « $1 » ?"
|
||||||
deleted: "Supprimé"
|
deleted: "Supprimé"
|
||||||
|
add-user: "Ajouter un utilisateur"
|
||||||
|
common/views/components/user-group-editor.vue:
|
||||||
|
rename: "Renommer le groupe"
|
||||||
|
delete: "Supprimer le groupe"
|
||||||
|
deleted: "Supprimé"
|
||||||
|
invite: "Inviter"
|
||||||
|
common/views/components/user-lists.vue:
|
||||||
|
user-lists: "Listes"
|
||||||
|
create-list: "Créer une liste"
|
||||||
|
list-name: "Nom de la liste"
|
||||||
|
common/views/components/user-groups.vue:
|
||||||
|
create-group: "Créer un groupe"
|
||||||
|
invites: "Inviter"
|
||||||
|
reject-invite: "Refuser"
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "Récupération"
|
fetching: "Récupération"
|
||||||
no-broadcasts: "Aucune annonce"
|
no-broadcasts: "Aucune annonce"
|
||||||
@@ -601,6 +747,10 @@ common/views/pages/follow.vue:
|
|||||||
request-pending: "Demande d’abonnement en attente"
|
request-pending: "Demande d’abonnement en attente"
|
||||||
follow-processing: "Demande en attente"
|
follow-processing: "Demande en attente"
|
||||||
follow-request: "Demande d’abonnement"
|
follow-request: "Demande d’abonnement"
|
||||||
|
common/views/pages/follow-requests.vue:
|
||||||
|
received-follow-requests: "Demandes d’abonnement"
|
||||||
|
accept: "Accepter"
|
||||||
|
reject: "Refuser"
|
||||||
desktop:
|
desktop:
|
||||||
banner-crop-title: "Découpez la partie qui apparaîtra comme bannière"
|
banner-crop-title: "Découpez la partie qui apparaîtra comme bannière"
|
||||||
banner: "Bannière"
|
banner: "Bannière"
|
||||||
@@ -710,10 +860,6 @@ desktop/views/components/home.vue:
|
|||||||
desktop/views/input-dialog.vue:
|
desktop/views/input-dialog.vue:
|
||||||
cancel: "Annuler"
|
cancel: "Annuler"
|
||||||
ok: "OK"
|
ok: "OK"
|
||||||
desktop/views/components/messaging-room-window.vue:
|
|
||||||
title: "Messages :"
|
|
||||||
desktop/views/components/messaging-window.vue:
|
|
||||||
title: "Messagerie"
|
|
||||||
desktop/views/components/note-detail.vue:
|
desktop/views/components/note-detail.vue:
|
||||||
private: "cette publication est privée"
|
private: "cette publication est privée"
|
||||||
deleted: "cette publication a été supprimée"
|
deleted: "cette publication a été supprimée"
|
||||||
@@ -752,7 +898,6 @@ desktop/views/components/post-form.vue:
|
|||||||
posting: "Publication …"
|
posting: "Publication …"
|
||||||
attach-media-from-local: "Joindre un média depuis votre appareil"
|
attach-media-from-local: "Joindre un média depuis votre appareil"
|
||||||
attach-media-from-drive: "Joindre un média depuis votre Drive"
|
attach-media-from-drive: "Joindre un média depuis votre Drive"
|
||||||
attach-cancel: "Annuler le fichier attaché"
|
|
||||||
insert-a-kao: "v('ω')v"
|
insert-a-kao: "v('ω')v"
|
||||||
create-poll: "Créer un sondage"
|
create-poll: "Créer un sondage"
|
||||||
text-remain: "{} caractères restants"
|
text-remain: "{} caractères restants"
|
||||||
@@ -845,6 +990,10 @@ common/views/components/password-settings.vue:
|
|||||||
not-match: "Les nouveaux mots de passe ne sont pas identiques"
|
not-match: "Les nouveaux mots de passe ne sont pas identiques"
|
||||||
changed: "Mot de passe modifié avec succès"
|
changed: "Mot de passe modifié avec succès"
|
||||||
failed: "Échec lors de la modification du mot de passe"
|
failed: "Échec lors de la modification du mot de passe"
|
||||||
|
common/views/components/post-form-attaches.vue:
|
||||||
|
attach-cancel: "Enlever le fichier attaché"
|
||||||
|
mark-as-sensitive: "Marquer comme sensible"
|
||||||
|
unmark-as-sensitive: "Ne pas marquer comme sensible"
|
||||||
desktop/views/components/sub-note-content.vue:
|
desktop/views/components/sub-note-content.vue:
|
||||||
private: "cette publication est privée"
|
private: "cette publication est privée"
|
||||||
deleted: "cette publication a été supprimée"
|
deleted: "cette publication a été supprimée"
|
||||||
@@ -855,15 +1004,13 @@ desktop/views/components/settings.tags.vue:
|
|||||||
query: "Requête (optionnelle)"
|
query: "Requête (optionnelle)"
|
||||||
add: "Ajouter"
|
add: "Ajouter"
|
||||||
save: "Enregistrer"
|
save: "Enregistrer"
|
||||||
desktop/views/components/taskmanager.vue:
|
|
||||||
title: "Gestionnaire de tâches"
|
|
||||||
desktop/views/components/timeline.vue:
|
desktop/views/components/timeline.vue:
|
||||||
home: "Accueil"
|
home: "Accueil"
|
||||||
local: "Local"
|
local: "Local"
|
||||||
hybrid: "Social"
|
hybrid: "Social"
|
||||||
global: "Global"
|
global: "Global"
|
||||||
mentions: "Mentions"
|
mentions: "Mentions"
|
||||||
messages: "Messages"
|
messages: "Messages directs"
|
||||||
list: "Listes"
|
list: "Listes"
|
||||||
hashtag: "Hashtag"
|
hashtag: "Hashtag"
|
||||||
add-tag-timeline: "Ajouter un fil de hashtags"
|
add-tag-timeline: "Ajouter un fil de hashtags"
|
||||||
@@ -875,6 +1022,7 @@ desktop/views/components/ui.header.vue:
|
|||||||
desktop/views/components/ui.header.account.vue:
|
desktop/views/components/ui.header.account.vue:
|
||||||
profile: "Votre profil"
|
profile: "Votre profil"
|
||||||
lists: "Listes"
|
lists: "Listes"
|
||||||
|
groups: "Groupes"
|
||||||
follow-requests: "Demandes d’abonnement"
|
follow-requests: "Demandes d’abonnement"
|
||||||
admin: "Admin"
|
admin: "Admin"
|
||||||
desktop/views/components/ui.header.nav.vue:
|
desktop/views/components/ui.header.nav.vue:
|
||||||
@@ -885,14 +1033,6 @@ desktop/views/components/ui.header.post.vue:
|
|||||||
post: "Rédiger une nouvelle publication"
|
post: "Rédiger une nouvelle publication"
|
||||||
desktop/views/components/ui.header.search.vue:
|
desktop/views/components/ui.header.search.vue:
|
||||||
placeholder: "Chercher"
|
placeholder: "Chercher"
|
||||||
desktop/views/components/received-follow-requests-window.vue:
|
|
||||||
title: "Demandes d’abonnement"
|
|
||||||
accept: "Accepter"
|
|
||||||
reject: "Refuser"
|
|
||||||
desktop/views/components/user-lists-window.vue:
|
|
||||||
title: "Listes de l'utilisateur"
|
|
||||||
create-list: "Créer une liste"
|
|
||||||
list-name: "Nom de la liste"
|
|
||||||
desktop/views/components/user-preview.vue:
|
desktop/views/components/user-preview.vue:
|
||||||
notes: "Publications"
|
notes: "Publications"
|
||||||
following: "Abonné à"
|
following: "Abonné à"
|
||||||
@@ -914,9 +1054,9 @@ admin/views/index.vue:
|
|||||||
users: "Utilisateurs"
|
users: "Utilisateurs"
|
||||||
federation: "Fédération"
|
federation: "Fédération"
|
||||||
announcements: "Annonces"
|
announcements: "Annonces"
|
||||||
hashtags: "Hashtags"
|
|
||||||
abuse: "Abus"
|
abuse: "Abus"
|
||||||
queue: "File d’attente"
|
queue: "File d’attente"
|
||||||
|
logs: "Journaux"
|
||||||
back-to-misskey: "Retour vers Misskey"
|
back-to-misskey: "Retour vers Misskey"
|
||||||
admin/views/dashboard.vue:
|
admin/views/dashboard.vue:
|
||||||
dashboard: "Tableau de bord"
|
dashboard: "Tableau de bord"
|
||||||
@@ -927,6 +1067,7 @@ admin/views/dashboard.vue:
|
|||||||
this-instance: "Cette instance"
|
this-instance: "Cette instance"
|
||||||
federated: "Fédérées"
|
federated: "Fédérées"
|
||||||
admin/views/queue.vue:
|
admin/views/queue.vue:
|
||||||
|
title: "File d'attente"
|
||||||
remove-all-jobs: "Enlever toutes les tâches en attente"
|
remove-all-jobs: "Enlever toutes les tâches en attente"
|
||||||
admin/views/abuse.vue:
|
admin/views/abuse.vue:
|
||||||
title: "Abus"
|
title: "Abus"
|
||||||
@@ -939,14 +1080,23 @@ admin/views/instance.vue:
|
|||||||
instance-name: "Nom de l’instance"
|
instance-name: "Nom de l’instance"
|
||||||
instance-description: "Description de l’instance"
|
instance-description: "Description de l’instance"
|
||||||
host: "Hôte"
|
host: "Hôte"
|
||||||
|
icon-url: "URL de l'icône"
|
||||||
|
logo-url: "URL do logo"
|
||||||
banner-url: "URL de l’image de la bannière"
|
banner-url: "URL de l’image de la bannière"
|
||||||
error-image-url: "URL de l’image d’erreur"
|
error-image-url: "URL de l’image d’erreur"
|
||||||
languages: "Langue de l’instance"
|
languages: "Langue de l’instance"
|
||||||
languages-desc: "Vous pouvez en définir plus d’une, séparées par des espaces."
|
languages-desc: "Vous pouvez en définir plus d’une, séparées par des espaces."
|
||||||
|
tos-url: "URL des conditions d'utilisation"
|
||||||
|
repository-url: "URL du dépôt"
|
||||||
maintainer-config: "Informations de l’administrateur"
|
maintainer-config: "Informations de l’administrateur"
|
||||||
maintainer-name: "Nom de l’administrateur"
|
maintainer-name: "Nom de l’administrateur"
|
||||||
maintainer-email: "Contact administratif"
|
maintainer-email: "Contact administratif"
|
||||||
|
advanced-config: "Autres réglages"
|
||||||
drive-config: "Paramètres du lecteur"
|
drive-config: "Paramètres du lecteur"
|
||||||
|
object-storage-base-url: "URL"
|
||||||
|
object-storage-endpoint: "Point de terminaison"
|
||||||
|
object-storage-access-key: "Clé d'accès"
|
||||||
|
object-storage-secret-key: "Clé secrète"
|
||||||
cache-remote-files: "Mettre en cache des fichiers distants"
|
cache-remote-files: "Mettre en cache des fichiers distants"
|
||||||
local-drive-capacity-mb: "Volume du lecteur par utilisateur"
|
local-drive-capacity-mb: "Volume du lecteur par utilisateur"
|
||||||
remote-drive-capacity-mb: "Volume du lecteur par utilisateur distant"
|
remote-drive-capacity-mb: "Volume du lecteur par utilisateur distant"
|
||||||
@@ -954,8 +1104,8 @@ admin/views/instance.vue:
|
|||||||
recaptcha-config: "Paramètres de reCAPTCHA"
|
recaptcha-config: "Paramètres de reCAPTCHA"
|
||||||
recaptcha-info: "Si activé, un jeton reCAPTCHA est requis. Vous pouvez en obtenir un sur https://www.google.com/recaptcha/intro/"
|
recaptcha-info: "Si activé, un jeton reCAPTCHA est requis. Vous pouvez en obtenir un sur https://www.google.com/recaptcha/intro/"
|
||||||
enable-recaptcha: "Activation de reCAPTCHA"
|
enable-recaptcha: "Activation de reCAPTCHA"
|
||||||
recaptcha-site-key: "Clé reCAPTCHA du site"
|
recaptcha-secret-key: "Clé secrète"
|
||||||
recaptcha-secret-key: "Clé secrète reCAPTCHA"
|
recaptcha-preview: "Prévisualisation"
|
||||||
twitter-integration-config: "Paramètres de connexion à Twitter"
|
twitter-integration-config: "Paramètres de connexion à Twitter"
|
||||||
twitter-integration-info: "L'URL de callback est {url}."
|
twitter-integration-info: "L'URL de callback est {url}."
|
||||||
enable-twitter-integration: "Activer la connexion à Twitter"
|
enable-twitter-integration: "Activer la connexion à Twitter"
|
||||||
@@ -983,12 +1133,6 @@ admin/views/instance.vue:
|
|||||||
invite: "Inviter"
|
invite: "Inviter"
|
||||||
save: "Sauvegarder"
|
save: "Sauvegarder"
|
||||||
saved: "Enregistré"
|
saved: "Enregistré"
|
||||||
user-recommendation-config: "Utilisateurs"
|
|
||||||
enable-external-user-recommendation: "Activer la recommandation des utilisateurs distants"
|
|
||||||
external-user-recommendation-engine: "Moteur"
|
|
||||||
external-user-recommendation-engine-desc: "Exemple : https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}"
|
|
||||||
external-user-recommendation-timeout: "Délai d’expiration"
|
|
||||||
external-user-recommendation-timeout-desc: "En millisecondes (par exemple : 300000)"
|
|
||||||
email-config: "Paramètres du serveur de messagerie"
|
email-config: "Paramètres du serveur de messagerie"
|
||||||
email-config-info: "Utilisé pour confirmer votre adresse de courrier électronique et la réinitialisation de votre mot de passe."
|
email-config-info: "Utilisé pour confirmer votre adresse de courrier électronique et la réinitialisation de votre mot de passe."
|
||||||
enable-email: "Activation de la distribution du courrier"
|
enable-email: "Activation de la distribution du courrier"
|
||||||
@@ -1069,13 +1213,8 @@ admin/views/users.vue:
|
|||||||
unsuspend-confirm: "Souhaiteriez-vous ne plus suspendre ce compte ?"
|
unsuspend-confirm: "Souhaiteriez-vous ne plus suspendre ce compte ?"
|
||||||
unsuspended: "La suspension de l’utilisateur a été levée avec succès"
|
unsuspended: "La suspension de l’utilisateur a été levée avec succès"
|
||||||
make-silence: "Mettre en sourdine"
|
make-silence: "Mettre en sourdine"
|
||||||
|
silence-confirm: "Mettre l'utilisateur sous silence ?"
|
||||||
unmake-silence: "Enlever la sourdine"
|
unmake-silence: "Enlever la sourdine"
|
||||||
verify: "Vérification du compte"
|
|
||||||
verify-confirm: "Souhaiteriez-vous rendre votre compte comme étant un compte vérifié ?"
|
|
||||||
verified: "Le compte a été vérifié"
|
|
||||||
unverify: "Enlever la vérification du compte"
|
|
||||||
unverify-confirm: "Désirez-vous considérer ce compte comme étant non-vérifié ?"
|
|
||||||
unverified: "Ce compte n'est plus vérifié"
|
|
||||||
update-remote-user: "Mettre à jour les informations de l’utilisateur·rice distant·e"
|
update-remote-user: "Mettre à jour les informations de l’utilisateur·rice distant·e"
|
||||||
remote-user-updated: "Les informations de l’utilisateur·rice distant·e ont étés mis à jour"
|
remote-user-updated: "Les informations de l’utilisateur·rice distant·e ont étés mis à jour"
|
||||||
users:
|
users:
|
||||||
@@ -1092,7 +1231,6 @@ admin/views/users.vue:
|
|||||||
admin: "Admin"
|
admin: "Admin"
|
||||||
moderator: "Modérateur"
|
moderator: "Modérateur"
|
||||||
adminOrModerator: "Administrateur/Modérateur"
|
adminOrModerator: "Administrateur/Modérateur"
|
||||||
verified: "Compte vérifié"
|
|
||||||
silenced: "Déjà mis en sourdine"
|
silenced: "Déjà mis en sourdine"
|
||||||
suspended: "Suspendu"
|
suspended: "Suspendu"
|
||||||
origin:
|
origin:
|
||||||
@@ -1157,6 +1295,7 @@ admin/views/federation.vue:
|
|||||||
marked-as-closed: "Marquées comme fermées"
|
marked-as-closed: "Marquées comme fermées"
|
||||||
lookup: "Recherche"
|
lookup: "Recherche"
|
||||||
instances: "Fédérées"
|
instances: "Fédérées"
|
||||||
|
instance-not-registered: "L’instance n’a pas encore été découverte"
|
||||||
sort: "Trier par"
|
sort: "Trier par"
|
||||||
sorts:
|
sorts:
|
||||||
caughtAtAsc: "Date d’inscription (Ascendant)"
|
caughtAtAsc: "Date d’inscription (Ascendant)"
|
||||||
@@ -1164,6 +1303,7 @@ admin/views/federation.vue:
|
|||||||
lastCommunicatedAtAsc: "La date et l'heure des interactions plus anciennes"
|
lastCommunicatedAtAsc: "La date et l'heure des interactions plus anciennes"
|
||||||
lastCommunicatedAtDesc: "La date et l'heure des nouvelles interactions"
|
lastCommunicatedAtDesc: "La date et l'heure des nouvelles interactions"
|
||||||
notesDesc: "Description des notes"
|
notesDesc: "Description des notes"
|
||||||
|
usersAsc: "Peu d'abonnés"
|
||||||
followingAsc: "Les moins suivies"
|
followingAsc: "Les moins suivies"
|
||||||
followingDesc: "Ayant le plus d'abonné·e·s"
|
followingDesc: "Ayant le plus d'abonné·e·s"
|
||||||
followersAsc: "Ayant le moins d'abonné·e·s"
|
followersAsc: "Ayant le moins d'abonné·e·s"
|
||||||
@@ -1189,6 +1329,7 @@ admin/views/federation.vue:
|
|||||||
chart-spans:
|
chart-spans:
|
||||||
hour: "Par heure"
|
hour: "Par heure"
|
||||||
day: "Par jour"
|
day: "Par jour"
|
||||||
|
blocked-hosts: "En cours blocage"
|
||||||
desktop/views/pages/welcome.vue:
|
desktop/views/pages/welcome.vue:
|
||||||
about: "à propos"
|
about: "à propos"
|
||||||
timeline: "Fil d’actualité"
|
timeline: "Fil d’actualité"
|
||||||
@@ -1243,8 +1384,6 @@ desktop/views/pages/user/user.timeline.vue:
|
|||||||
with-replies: "Publications et réponses"
|
with-replies: "Publications et réponses"
|
||||||
with-media: "Média"
|
with-media: "Média"
|
||||||
my-posts: "Mes Messages"
|
my-posts: "Mes Messages"
|
||||||
desktop/views/widgets/messaging.vue:
|
|
||||||
title: "Messagerie"
|
|
||||||
desktop/views/widgets/notifications.vue:
|
desktop/views/widgets/notifications.vue:
|
||||||
title: "Notifications"
|
title: "Notifications"
|
||||||
desktop/views/widgets/polls.vue:
|
desktop/views/widgets/polls.vue:
|
||||||
@@ -1272,8 +1411,6 @@ mobile/views/components/drive.vue:
|
|||||||
file-count: "Fichier·s"
|
file-count: "Fichier·s"
|
||||||
nothing-in-drive: "Rien"
|
nothing-in-drive: "Rien"
|
||||||
folder-is-empty: "Ce dossier est vide"
|
folder-is-empty: "Ce dossier est vide"
|
||||||
prompt: "Que veux-tu faire ? (Entrez un nombre): <1 → Télécharger le fichier | 2 → Télécharger le fichier avec l'URL | 3 → Créer le dossier | 4 → Modifier le nom du dossier | 5 → Déplacer ce dossier | 6 → Supprimer ce dossier >"
|
|
||||||
deletion-alert: "Désolé ! La suppression d’un dossier n’est pas encore implémentée."
|
|
||||||
folder-name: "Nom du dossier"
|
folder-name: "Nom du dossier"
|
||||||
url-prompt: "URL du fichier que vous souhaitez téléverser"
|
url-prompt: "URL du fichier que vous souhaitez téléverser"
|
||||||
uploading: "Envoi demandé. Le téléversement pourrait prendre un certain temps avant de s'achever."
|
uploading: "Envoi demandé. Le téléversement pourrait prendre un certain temps avant de s'achever."
|
||||||
@@ -1329,7 +1466,7 @@ mobile/views/components/post-form.vue:
|
|||||||
quote-placeholder: "Citer ce billet ... (Facultatif)"
|
quote-placeholder: "Citer ce billet ... (Facultatif)"
|
||||||
reply-placeholder: "Répondre à cette note"
|
reply-placeholder: "Répondre à cette note"
|
||||||
cw-placeholder: "Commenter le contenu (optionnel)"
|
cw-placeholder: "Commenter le contenu (optionnel)"
|
||||||
location-alert: "Votre appareil ne prend pas en charge les services de localisation"
|
geolocation-alert: "Votre appareil ne prend pas en charge les services de localisation"
|
||||||
error: "Erreur"
|
error: "Erreur"
|
||||||
username-prompt: "Saisir un nom d'utilisateur"
|
username-prompt: "Saisir un nom d'utilisateur"
|
||||||
mobile/views/components/sub-note-content.vue:
|
mobile/views/components/sub-note-content.vue:
|
||||||
@@ -1350,9 +1487,14 @@ mobile/views/components/ui.nav.vue:
|
|||||||
game: "Jeux"
|
game: "Jeux"
|
||||||
admin: "Admin"
|
admin: "Admin"
|
||||||
about: "À propos de Misskey"
|
about: "À propos de Misskey"
|
||||||
mobile/views/pages/user-lists.vue:
|
mobile/views/pages/drive.vue:
|
||||||
title: "Listes"
|
contextmenu:
|
||||||
enter-list-name: "Nom de la liste"
|
upload: "Téléverser un fichier"
|
||||||
|
url-upload: "Transférer un fichier depuis une URL"
|
||||||
|
create-folder: "Créer un dossier"
|
||||||
|
rename-folder: "Renommer le dossier"
|
||||||
|
move-folder: "Déplacer ce dossier"
|
||||||
|
delete-folder: "Supprimer ce dossier"
|
||||||
mobile/views/pages/signup.vue:
|
mobile/views/pages/signup.vue:
|
||||||
lets-start: "Votre compte est prêt ! 📦"
|
lets-start: "Votre compte est prêt ! 📦"
|
||||||
mobile/views/pages/followers.vue:
|
mobile/views/pages/followers.vue:
|
||||||
@@ -1365,7 +1507,7 @@ mobile/views/pages/home.vue:
|
|||||||
hybrid: "Social"
|
hybrid: "Social"
|
||||||
global: "Global"
|
global: "Global"
|
||||||
mentions: "Mentions"
|
mentions: "Mentions"
|
||||||
messages: "Messages"
|
messages: "Messages directs"
|
||||||
mobile/views/pages/tag.vue:
|
mobile/views/pages/tag.vue:
|
||||||
no-posts-found: "Aucune publication ayant pour hashtag « {q} » n’a été trouvée."
|
no-posts-found: "Aucune publication ayant pour hashtag « {q} » n’a été trouvée."
|
||||||
mobile/views/pages/widgets.vue:
|
mobile/views/pages/widgets.vue:
|
||||||
@@ -1376,10 +1518,6 @@ mobile/views/pages/widgets/activity.vue:
|
|||||||
activity: "Activité"
|
activity: "Activité"
|
||||||
mobile/views/pages/share.vue:
|
mobile/views/pages/share.vue:
|
||||||
share-with: "Partager avec {name}"
|
share-with: "Partager avec {name}"
|
||||||
mobile/views/pages/received-follow-requests.vue:
|
|
||||||
title: "Demandes d’abonnement"
|
|
||||||
accept: "Accepter"
|
|
||||||
reject: "Refuser"
|
|
||||||
mobile/views/pages/note.vue:
|
mobile/views/pages/note.vue:
|
||||||
title: "Publication"
|
title: "Publication"
|
||||||
prev: "Note précédente"
|
prev: "Note précédente"
|
||||||
@@ -1452,25 +1590,6 @@ deck/deck.user-column.vue:
|
|||||||
docs:
|
docs:
|
||||||
edit-this-page-on-github: "Vous avez trouvé une erreur ou vous voulez contribuer à la documentation ?"
|
edit-this-page-on-github: "Vous avez trouvé une erreur ou vous voulez contribuer à la documentation ?"
|
||||||
edit-this-page-on-github-link: "Éditez cette page sur GitHub !"
|
edit-this-page-on-github-link: "Éditez cette page sur GitHub !"
|
||||||
api:
|
|
||||||
entities:
|
|
||||||
properties: "Propriétés"
|
|
||||||
endpoints:
|
|
||||||
params: "Paramètres"
|
|
||||||
no-params: "Aucun paramètre"
|
|
||||||
res: "Réponse"
|
|
||||||
require-credential: "Ce point de communication nécessite une authentification."
|
|
||||||
require-permission: "Ce point de communication nécessite la permission {permission}."
|
|
||||||
has-limit: "Il y’a un taux limite."
|
|
||||||
duration-limit: "Si vous avez envoyé plus de {max} requêtes en {duration} millisecondes, vous ne serez pas en mesure d'envoyer d'autres requêtes."
|
|
||||||
min-interval-limit: "Vous ne pourrez pas effectuer une nouvelle requête si {interval} millisecondes ne se sont pas écoulées depuis la dernière demande."
|
|
||||||
show-src: "Vous pouvez voir le code source ce point de communication."
|
|
||||||
show-src-link: "Consulter le code sur GitHub"
|
|
||||||
generated: "Ce document est généré à partir de la définition de l’API."
|
|
||||||
props:
|
|
||||||
name: "Nom"
|
|
||||||
type: "Type"
|
|
||||||
description: "Description"
|
|
||||||
dev/views/index.vue:
|
dev/views/index.vue:
|
||||||
manage-apps: "Gestion des applications"
|
manage-apps: "Gestion des applications"
|
||||||
dev/views/apps.vue:
|
dev/views/apps.vue:
|
||||||
@@ -1478,24 +1597,193 @@ dev/views/apps.vue:
|
|||||||
create-app: "Créer une app"
|
create-app: "Créer une app"
|
||||||
app-missing: "Aucune application"
|
app-missing: "Aucune application"
|
||||||
dev/views/new-app.vue:
|
dev/views/new-app.vue:
|
||||||
|
new-app: "Nouvelle application"
|
||||||
create-app: "Création d’une application"
|
create-app: "Création d’une application"
|
||||||
app-name: "Nom de l’application"
|
app-name: "Nom de l’application"
|
||||||
app-name-desc: "Le nom de votre application"
|
app-name-desc: "Le nom de votre application"
|
||||||
app-name-ex: "p. ex. Misskey pour iOS"
|
|
||||||
app-overview: "Description courte de l’application"
|
app-overview: "Description courte de l’application"
|
||||||
app-desc: "Brève description introductive à votre application."
|
|
||||||
app-desc-ex: "p. ex) Misskey pour iOS"
|
|
||||||
callback-url: "L’Url de callback (facultatif)"
|
callback-url: "L’Url de callback (facultatif)"
|
||||||
callback-url-desc: "Vous pouvez définir l’URL de redirection lorsque l’utilisateur s’est authentifié via formulaire d’authentification."
|
callback-url-desc: "Vous pouvez définir l’URL de redirection lorsque l’utilisateur s’est authentifié via formulaire d’authentification."
|
||||||
authority: "Autorisations "
|
authority: "Autorisations "
|
||||||
authority-desc: "Sont accessibles via l’API, uniquement les fonctionnalités demandées ici."
|
authority-desc: "Sont accessibles via l’API, uniquement les fonctionnalités demandées ici."
|
||||||
authority-warning: "Vous pouvez le changer même après avoir créé l'application, mais si vous attribuez une nouvelle permission, toutes les clés utilisateur associées seront dès lors invalides."
|
authority-warning: "Vous pouvez le changer même après avoir créé l'application, mais si vous attribuez une nouvelle permission, toutes les clés utilisateur associées seront dès lors invalides."
|
||||||
account-read: "Afficher les informations du compte"
|
pages:
|
||||||
account-write: "Modifications des informations du compte"
|
page-created: "Page a été créée !"
|
||||||
note-write: "Publications."
|
are-you-sure-delete: "Confirmez-vous la suppression de cette page ?"
|
||||||
reaction-write: "Ajout et suppression de réactions."
|
page-deleted: "La page a bien été supprimée."
|
||||||
following-write: "S’abonner et se désabonner."
|
edit-this-page: "Éditer cette page"
|
||||||
drive-read: "Lecture du Drive."
|
view-source: "Afficher la source"
|
||||||
drive-write: "Téléversement/suppression des fichiers de votre Lecteur."
|
view-page: "Afficher la page"
|
||||||
notification-read: "Lire vos notifications."
|
like: "Bien"
|
||||||
notification-write: "Gestion de vos notifications."
|
inspector: "Inspecteur"
|
||||||
|
content: "Bloc de page"
|
||||||
|
variables: "Variables"
|
||||||
|
more-details: "Description"
|
||||||
|
title: "Titre"
|
||||||
|
url: "URL de page"
|
||||||
|
summary: "Résumé de page"
|
||||||
|
align-center: "Centrée"
|
||||||
|
font: "Police de caractères"
|
||||||
|
fontSerif: "Serif"
|
||||||
|
fontSansSerif: "Sans Serif"
|
||||||
|
choose-block: "Ajouter un bloc"
|
||||||
|
select-type: "Choisir un type"
|
||||||
|
enter-variable-name: "Veuillez choisir un nom de variable"
|
||||||
|
the-variable-name-is-already-used: "Cette variable est déjà utilisée"
|
||||||
|
content-blocks: "Contenu du cadre"
|
||||||
|
input-blocks: "Entrée"
|
||||||
|
special-blocks: "Spécial"
|
||||||
|
post-from-post-form: "Publier ce contenu"
|
||||||
|
posted-from-post-form: "Publié !"
|
||||||
|
blocks:
|
||||||
|
text: "Texte"
|
||||||
|
textarea: "Zone de texte"
|
||||||
|
section: "Section"
|
||||||
|
image: "Images"
|
||||||
|
button: "Bouton"
|
||||||
|
if: "Si"
|
||||||
|
_if:
|
||||||
|
variable: "Variables"
|
||||||
|
post: "Champs de publication"
|
||||||
|
_post:
|
||||||
|
text: "Contenu"
|
||||||
|
textInput: "Entrée textuelle"
|
||||||
|
_textInput:
|
||||||
|
name: "Nom de la variable"
|
||||||
|
text: "Titre"
|
||||||
|
default: "Valeur par défaut"
|
||||||
|
_textareaInput:
|
||||||
|
name: "Nom de la variable"
|
||||||
|
text: "Titre"
|
||||||
|
default: "Valeur par défaut"
|
||||||
|
numberInput: "Entrée numérique"
|
||||||
|
_numberInput:
|
||||||
|
name: "Nom de la variable"
|
||||||
|
text: "Titre"
|
||||||
|
default: "Valeur par défaut"
|
||||||
|
switch: "Basculer"
|
||||||
|
_switch:
|
||||||
|
name: "Nom de la variable"
|
||||||
|
text: "Titre"
|
||||||
|
default: "Valeur par défaut"
|
||||||
|
counter: "Compteur"
|
||||||
|
_counter:
|
||||||
|
name: "Nom de la variable"
|
||||||
|
text: "Titre"
|
||||||
|
inc: "Augmenter le chiffre"
|
||||||
|
_button:
|
||||||
|
text: "Titre"
|
||||||
|
action: "L'opération lorsque le bouton sera pressé"
|
||||||
|
_action:
|
||||||
|
dialog: "Afficher une fenêtre de dialogue"
|
||||||
|
_dialog:
|
||||||
|
content: "Contenu"
|
||||||
|
resetRandom: "Réinitialiser le nombre aléatoire"
|
||||||
|
script:
|
||||||
|
categories:
|
||||||
|
flow: "Contrôle"
|
||||||
|
logical: "Opération logique"
|
||||||
|
operation: "Calculer"
|
||||||
|
comparison: "Comparer"
|
||||||
|
random: "Aléatoire"
|
||||||
|
value: "Valeur"
|
||||||
|
fn: "Fonction"
|
||||||
|
list: "Listes"
|
||||||
|
blocks:
|
||||||
|
text: "Texte"
|
||||||
|
strLen: "Longueur du texte"
|
||||||
|
_strLen:
|
||||||
|
arg1: "Texte"
|
||||||
|
strPick: "Extraire un caractère"
|
||||||
|
_strPick:
|
||||||
|
arg1: "Texte"
|
||||||
|
_strReplace:
|
||||||
|
arg1: "Texte"
|
||||||
|
arg2: "Avant le remplacement"
|
||||||
|
arg3: "Après le remplacement"
|
||||||
|
strReverse: "Inverser le texte"
|
||||||
|
_strReverse:
|
||||||
|
arg1: "Texte"
|
||||||
|
_join:
|
||||||
|
arg1: "Listes"
|
||||||
|
arg2: "Séparateur"
|
||||||
|
add: "+ Plus"
|
||||||
|
_add:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
subtract: "- Moins"
|
||||||
|
_subtract:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
multiply: "× Multiplier par"
|
||||||
|
_multiply:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
divide: "÷ Diviser par"
|
||||||
|
_divide:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
_remind:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
eq: "A et B sont équivalents"
|
||||||
|
_eq:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
notEq: "A et B sont différents"
|
||||||
|
_notEq:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
_and:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
_or:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
_lt:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
_gt:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
_ltEq:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
_gtEq:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
random: "Aléatoire"
|
||||||
|
_randomPick:
|
||||||
|
arg1: "Listes"
|
||||||
|
_dailyRandomPick:
|
||||||
|
arg1: "Listes"
|
||||||
|
_seedRannum:
|
||||||
|
arg2: "Min"
|
||||||
|
arg3: "Max"
|
||||||
|
_seedRandomPick:
|
||||||
|
arg2: "Listes"
|
||||||
|
pick: "Sélectionner dans la liste"
|
||||||
|
_pick:
|
||||||
|
arg1: "Listes"
|
||||||
|
arg2: "Position"
|
||||||
|
number: "Numérique"
|
||||||
|
stringToNumber: "Chaîne en chiffres"
|
||||||
|
_stringToNumber:
|
||||||
|
arg1: "Texte"
|
||||||
|
numberToString: "Chiffres en chaîne"
|
||||||
|
_numberToString:
|
||||||
|
arg1: "Numérique"
|
||||||
|
_splitStrByLine:
|
||||||
|
arg1: "Texte"
|
||||||
|
ref: "Variables"
|
||||||
|
fn: "Fonction"
|
||||||
|
_fn:
|
||||||
|
slots: "Emplacement"
|
||||||
|
arg1: "Sortie"
|
||||||
|
for: "Répéter"
|
||||||
|
types:
|
||||||
|
string: "Texte"
|
||||||
|
number: "Numérique"
|
||||||
|
array: "Listes"
|
||||||
|
stringArray: "Liste de texte"
|
||||||
|
enviromentVariables: "Variables d'environnement"
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ const merge = (...args) => args.reduce((a, c) => ({
|
|||||||
|
|
||||||
const languages = [
|
const languages = [
|
||||||
'cs-CZ',
|
'cs-CZ',
|
||||||
|
'da-DK',
|
||||||
'de-DE',
|
'de-DE',
|
||||||
'en-US',
|
'en-US',
|
||||||
'es-ES',
|
'es-ES',
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ common:
|
|||||||
signup: "新規登録"
|
signup: "新規登録"
|
||||||
signout: "ログアウト"
|
signout: "ログアウト"
|
||||||
reload-to-apply-the-setting: "この設定を反映するにはページをリロードする必要があります。今すぐリロードしますか?"
|
reload-to-apply-the-setting: "この設定を反映するにはページをリロードする必要があります。今すぐリロードしますか?"
|
||||||
|
fetching-as-ap-object: "連合に照会中"
|
||||||
|
|
||||||
got-it: "わかった"
|
got-it: "わかった"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
@@ -64,6 +65,7 @@ common:
|
|||||||
|
|
||||||
trash: "ゴミ箱"
|
trash: "ゴミ箱"
|
||||||
drive: "ドライブ"
|
drive: "ドライブ"
|
||||||
|
pages: "ページ"
|
||||||
messaging: "トーク"
|
messaging: "トーク"
|
||||||
home: "ホーム"
|
home: "ホーム"
|
||||||
deck: "デッキ"
|
deck: "デッキ"
|
||||||
@@ -73,6 +75,28 @@ common:
|
|||||||
followers: "フォロワー"
|
followers: "フォロワー"
|
||||||
favorites: "お気に入り"
|
favorites: "お気に入り"
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
"read:account": "アカウントの情報を見る"
|
||||||
|
"write:account": "アカウントの情報を変更する"
|
||||||
|
"read:blocks": "ブロックを見る"
|
||||||
|
"write:blocks": "ブロックを操作する"
|
||||||
|
"read:drive": "ドライブを見る"
|
||||||
|
"write:drive": "ドライブを操作する"
|
||||||
|
"read:favorites": "お気に入りを見る"
|
||||||
|
"write:favorites": "お気に入りを操作する"
|
||||||
|
"read:following": "フォローの情報を見る"
|
||||||
|
"write:following": "フォロー・フォロー解除する"
|
||||||
|
"read:messaging": "トークを見る"
|
||||||
|
"write:messaging": "トークを操作する"
|
||||||
|
"read:mutes": "ミュートを見る"
|
||||||
|
"write:mutes": "ミュートを操作する"
|
||||||
|
"write:notes": "投稿を作成・削除する"
|
||||||
|
"read:notifications": "通知を見る"
|
||||||
|
"write:notifications": "通知を操作する"
|
||||||
|
"read:reactions": "リアクションを見る"
|
||||||
|
"write:reactions": "リアクションを操作する"
|
||||||
|
"write:votes": "投票する"
|
||||||
|
|
||||||
empty-timeline-info:
|
empty-timeline-info:
|
||||||
follow-users-to-make-your-timeline: "ユーザーをフォローすると投稿がタイムラインに表示されます。"
|
follow-users-to-make-your-timeline: "ユーザーをフォローすると投稿がタイムラインに表示されます。"
|
||||||
explore: "ユーザーを探索する"
|
explore: "ユーザーを探索する"
|
||||||
@@ -239,9 +263,9 @@ common:
|
|||||||
update-available-title: "更新があります"
|
update-available-title: "更新があります"
|
||||||
update-available: "Misskeyの新しいバージョンがあります({newer}。現在{current}を利用中)。ページを再度読み込みすると更新が適用されます。"
|
update-available: "Misskeyの新しいバージョンがあります({newer}。現在{current}を利用中)。ページを再度読み込みすると更新が適用されます。"
|
||||||
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
|
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
|
||||||
verified-user: "公式アカウント"
|
|
||||||
hide-password: "パスワードを隠す"
|
hide-password: "パスワードを隠す"
|
||||||
show-password: "パスワードを表示する"
|
show-password: "パスワードを表示する"
|
||||||
|
enter-username: "ユーザー名を入力してください"
|
||||||
|
|
||||||
do-not-use-in-production: "これは開発ビルドです。本番環境で使用しないでください。"
|
do-not-use-in-production: "これは開発ビルドです。本番環境で使用しないでください。"
|
||||||
user-suspended: "このユーザーは凍結されています。"
|
user-suspended: "このユーザーは凍結されています。"
|
||||||
@@ -291,6 +315,7 @@ common:
|
|||||||
nav: "ナビゲーション"
|
nav: "ナビゲーション"
|
||||||
tips: "ヒント"
|
tips: "ヒント"
|
||||||
hashtags: "ハッシュタグ"
|
hashtags: "ハッシュタグ"
|
||||||
|
queue: "キュー"
|
||||||
|
|
||||||
dev: "アプリの作成に失敗しました。再度お試しください。"
|
dev: "アプリの作成に失敗しました。再度お試しください。"
|
||||||
ai-chan-kawaii: "藍ちゃかわいい"
|
ai-chan-kawaii: "藍ちゃかわいい"
|
||||||
@@ -299,15 +324,6 @@ common:
|
|||||||
auth/views/form.vue:
|
auth/views/form.vue:
|
||||||
share-access: "<i>{name}</i>があなたのアカウントにアクセスすることを許可しますか?"
|
share-access: "<i>{name}</i>があなたのアカウントにアクセスすることを許可しますか?"
|
||||||
permission-ask: "このアプリは次の権限を要求しています:"
|
permission-ask: "このアプリは次の権限を要求しています:"
|
||||||
account-read: "アカウントの情報を見る。"
|
|
||||||
account-write: "アカウントの情報を操作する。"
|
|
||||||
note-write: "投稿する。"
|
|
||||||
like-write: "いいねしたりいいね解除する。"
|
|
||||||
following-write: "フォローしたりフォロー解除する。"
|
|
||||||
drive-read: "ドライブを見る。"
|
|
||||||
drive-write: "ドライブを操作する。"
|
|
||||||
notification-read: "通知を見る。"
|
|
||||||
notification-write: "通知を操作する。"
|
|
||||||
cancel: "キャンセル"
|
cancel: "キャンセル"
|
||||||
accept: "アクセスを許可"
|
accept: "アクセスを許可"
|
||||||
|
|
||||||
@@ -323,7 +339,7 @@ auth/views/index.vue:
|
|||||||
sign-in: "サインインしてください"
|
sign-in: "サインインしてください"
|
||||||
|
|
||||||
common/views/pages/explore.vue:
|
common/views/pages/explore.vue:
|
||||||
verified-users: "公式アカウント"
|
pinned-users: "ピン留めされたユーザー"
|
||||||
popular-users: "人気のユーザー"
|
popular-users: "人気のユーザー"
|
||||||
recently-updated-users: "最近投稿したユーザー"
|
recently-updated-users: "最近投稿したユーザー"
|
||||||
recently-registered-users: "新規ユーザー"
|
recently-registered-users: "新規ユーザー"
|
||||||
@@ -465,20 +481,25 @@ common/views/components/messaging.vue:
|
|||||||
search-user: "ユーザーを探す"
|
search-user: "ユーザーを探す"
|
||||||
you: "あなた"
|
you: "あなた"
|
||||||
no-history: "履歴はありません"
|
no-history: "履歴はありません"
|
||||||
|
user: "ユーザー"
|
||||||
|
group: "グループ"
|
||||||
|
start-with-user: "ユーザーとトークを開始"
|
||||||
|
start-with-group: "グループとトークを開始"
|
||||||
|
select-group: "グループを選択してください"
|
||||||
|
|
||||||
common/views/components/messaging-room.vue:
|
common/views/components/messaging-room.vue:
|
||||||
empty: "このユーザーと話したことはありません"
|
not-talked-user: "このユーザーとの会話はありません"
|
||||||
|
not-talked-group: "このグループでの会話はありません"
|
||||||
no-history: "これより過去の履歴はありません"
|
no-history: "これより過去の履歴はありません"
|
||||||
resize-form: "ドラッグしてフォームの広さを調整"
|
|
||||||
new-message: "新しいメッセージがあります"
|
new-message: "新しいメッセージがあります"
|
||||||
only-one-file-attached: "メッセージに添付できるのはひとつのファイルのみです"
|
only-one-file-attached: "メッセージに添付できるファイルはひとつです"
|
||||||
|
|
||||||
common/views/components/messaging-room.form.vue:
|
common/views/components/messaging-room.form.vue:
|
||||||
input-message-here: "ここにメッセージを入力"
|
input-message-here: "ここにメッセージを入力"
|
||||||
send: "送信"
|
send: "送信"
|
||||||
attach-from-local: "PCからファイルを添付する"
|
attach-from-local: "PCからファイルを添付する"
|
||||||
attach-from-drive: "ドライブからファイルを添付する"
|
attach-from-drive: "ドライブからファイルを添付する"
|
||||||
only-one-file-attached: "メッセージに添付できるのはひとつのファイルのみです"
|
only-one-file-attached: "メッセージに添付できるファイルはひとつです"
|
||||||
|
|
||||||
common/views/components/messaging-room.message.vue:
|
common/views/components/messaging-room.message.vue:
|
||||||
is-read: "既読"
|
is-read: "既読"
|
||||||
@@ -493,6 +514,7 @@ common/views/components/nav.vue:
|
|||||||
repository: "リポジトリ"
|
repository: "リポジトリ"
|
||||||
develop: "開発者"
|
develop: "開発者"
|
||||||
feedback: "フィードバック"
|
feedback: "フィードバック"
|
||||||
|
tos: "利用規約"
|
||||||
|
|
||||||
common/views/components/note-menu.vue:
|
common/views/components/note-menu.vue:
|
||||||
mention: "メンション"
|
mention: "メンション"
|
||||||
@@ -513,8 +535,12 @@ common/views/components/user-menu.vue:
|
|||||||
mention: "メンション"
|
mention: "メンション"
|
||||||
mute: "ミュート"
|
mute: "ミュート"
|
||||||
unmute: "ミュート解除"
|
unmute: "ミュート解除"
|
||||||
|
mute-confirm: "このユーザーをミュートしますか?"
|
||||||
|
unmute-confirm: "このユーザーをミュート解除しますか?"
|
||||||
block: "ブロック"
|
block: "ブロック"
|
||||||
unblock: "ブロック解除"
|
unblock: "ブロック解除"
|
||||||
|
block-confirm: "このユーザーをブロックしますか?"
|
||||||
|
unblock-confirm: "このユーザーをブロック解除しますか?"
|
||||||
push-to-list: "リストに追加"
|
push-to-list: "リストに追加"
|
||||||
select-list: "リストを選択してください"
|
select-list: "リストを選択してください"
|
||||||
report-abuse: "スパムを報告"
|
report-abuse: "スパムを報告"
|
||||||
@@ -522,8 +548,12 @@ common/views/components/user-menu.vue:
|
|||||||
report-abuse-reported: "管理者に報告されました。ご協力ありがとうございました。"
|
report-abuse-reported: "管理者に報告されました。ご協力ありがとうございました。"
|
||||||
silence: "サイレンス"
|
silence: "サイレンス"
|
||||||
unsilence: "サイレンス解除"
|
unsilence: "サイレンス解除"
|
||||||
|
silence-confirm: "このユーザーをサイレンスしますか?"
|
||||||
|
unsilence-confirm: "このユーザーをサイレンス解除しますか?"
|
||||||
suspend: "凍結"
|
suspend: "凍結"
|
||||||
unsuspend: "凍結解除"
|
unsuspend: "凍結解除"
|
||||||
|
suspend-confirm: "このユーザーを凍結しますか?"
|
||||||
|
unsuspend-confirm: "このユーザーを凍結解除しますか?"
|
||||||
|
|
||||||
common/views/components/poll.vue:
|
common/views/components/poll.vue:
|
||||||
vote-to: "「{}」に投票する"
|
vote-to: "「{}」に投票する"
|
||||||
@@ -605,6 +635,8 @@ common/views/components/signup.vue:
|
|||||||
password-matched: "確認されました"
|
password-matched: "確認されました"
|
||||||
password-not-matched: "一致していません"
|
password-not-matched: "一致していません"
|
||||||
recaptcha: "認証"
|
recaptcha: "認証"
|
||||||
|
agree-to: "{0}に同意します。"
|
||||||
|
tos: "利用規約"
|
||||||
create: "アカウント作成"
|
create: "アカウント作成"
|
||||||
some-error: "何らかの原因によりアカウントの作成に失敗しました。再度お試しください。"
|
some-error: "何らかの原因によりアカウントの作成に失敗しました。再度お試しください。"
|
||||||
|
|
||||||
@@ -724,6 +756,32 @@ common/views/components/user-list-editor.vue:
|
|||||||
remove-user: "このリストから削除"
|
remove-user: "このリストから削除"
|
||||||
delete-are-you-sure: "リスト「$1」を削除しますか?"
|
delete-are-you-sure: "リスト「$1」を削除しますか?"
|
||||||
deleted: "削除しました"
|
deleted: "削除しました"
|
||||||
|
add-user: "ユーザーを追加"
|
||||||
|
|
||||||
|
common/views/components/user-group-editor.vue:
|
||||||
|
users: "メンバー"
|
||||||
|
rename: "グループ名を変更"
|
||||||
|
delete: "グループを削除"
|
||||||
|
remove-user: "このグループから削除"
|
||||||
|
delete-are-you-sure: "グループ「$1」を削除しますか?"
|
||||||
|
deleted: "削除しました"
|
||||||
|
invite: "招待"
|
||||||
|
invited: "招待を送信しました"
|
||||||
|
|
||||||
|
common/views/components/user-lists.vue:
|
||||||
|
user-lists: "リスト"
|
||||||
|
create-list: "リストを作成"
|
||||||
|
list-name: "リスト名"
|
||||||
|
|
||||||
|
common/views/components/user-groups.vue:
|
||||||
|
user-groups: "グループ"
|
||||||
|
create-group: "グループを作成"
|
||||||
|
group-name: "グループ名"
|
||||||
|
owned-groups: "自分のグループ"
|
||||||
|
joined-groups: "参加しているグループ"
|
||||||
|
invites: "招待"
|
||||||
|
accept-invite: "参加"
|
||||||
|
reject-invite: "拒否"
|
||||||
|
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "確認中"
|
fetching: "確認中"
|
||||||
@@ -797,6 +855,11 @@ common/views/pages/follow.vue:
|
|||||||
follow-processing: "フォロー処理中"
|
follow-processing: "フォロー処理中"
|
||||||
follow-request: "フォロー申請"
|
follow-request: "フォロー申請"
|
||||||
|
|
||||||
|
common/views/pages/follow-requests.vue:
|
||||||
|
received-follow-requests: "フォロー申請"
|
||||||
|
accept: "承認"
|
||||||
|
reject: "拒否"
|
||||||
|
|
||||||
desktop:
|
desktop:
|
||||||
banner-crop-title: "バナーとして表示する部分を選択"
|
banner-crop-title: "バナーとして表示する部分を選択"
|
||||||
banner: "バナー"
|
banner: "バナー"
|
||||||
@@ -967,7 +1030,6 @@ desktop/views/components/post-form.vue:
|
|||||||
posting: "投稿中"
|
posting: "投稿中"
|
||||||
attach-media-from-local: "PCからメディアを添付"
|
attach-media-from-local: "PCからメディアを添付"
|
||||||
attach-media-from-drive: "ドライブからメディアを添付"
|
attach-media-from-drive: "ドライブからメディアを添付"
|
||||||
attach-cancel: "添付取り消し"
|
|
||||||
insert-a-kao: "v('ω')v"
|
insert-a-kao: "v('ω')v"
|
||||||
create-poll: "アンケートを作成"
|
create-poll: "アンケートを作成"
|
||||||
text-remain: "残り{}文字"
|
text-remain: "残り{}文字"
|
||||||
@@ -1073,6 +1135,11 @@ common/views/components/password-settings.vue:
|
|||||||
changed: "パスワードを変更しました"
|
changed: "パスワードを変更しました"
|
||||||
failed: "パスワード変更に失敗しました"
|
failed: "パスワード変更に失敗しました"
|
||||||
|
|
||||||
|
common/views/components/post-form-attaches.vue:
|
||||||
|
attach-cancel: "添付取り消し"
|
||||||
|
mark-as-sensitive: "閲覧注意に設定"
|
||||||
|
unmark-as-sensitive: "閲覧注意を解除"
|
||||||
|
|
||||||
desktop/views/components/sub-note-content.vue:
|
desktop/views/components/sub-note-content.vue:
|
||||||
private: "この投稿は非公開です"
|
private: "この投稿は非公開です"
|
||||||
deleted: "この投稿は削除されました"
|
deleted: "この投稿は削除されました"
|
||||||
@@ -1085,9 +1152,6 @@ desktop/views/components/settings.tags.vue:
|
|||||||
add: "追加"
|
add: "追加"
|
||||||
save: "保存"
|
save: "保存"
|
||||||
|
|
||||||
desktop/views/components/taskmanager.vue:
|
|
||||||
title: "タスクマネージャ"
|
|
||||||
|
|
||||||
desktop/views/components/timeline.vue:
|
desktop/views/components/timeline.vue:
|
||||||
home: "ホーム"
|
home: "ホーム"
|
||||||
local: "ローカル"
|
local: "ローカル"
|
||||||
@@ -1108,6 +1172,7 @@ desktop/views/components/ui.header.vue:
|
|||||||
desktop/views/components/ui.header.account.vue:
|
desktop/views/components/ui.header.account.vue:
|
||||||
profile: "プロフィール"
|
profile: "プロフィール"
|
||||||
lists: "リスト"
|
lists: "リスト"
|
||||||
|
groups: "グループ"
|
||||||
follow-requests: "フォロー申請"
|
follow-requests: "フォロー申請"
|
||||||
admin: "管理"
|
admin: "管理"
|
||||||
|
|
||||||
@@ -1123,16 +1188,6 @@ desktop/views/components/ui.header.post.vue:
|
|||||||
desktop/views/components/ui.header.search.vue:
|
desktop/views/components/ui.header.search.vue:
|
||||||
placeholder: "検索"
|
placeholder: "検索"
|
||||||
|
|
||||||
desktop/views/components/received-follow-requests-window.vue:
|
|
||||||
title: "フォロー申請"
|
|
||||||
accept: "承認"
|
|
||||||
reject: "拒否"
|
|
||||||
|
|
||||||
desktop/views/components/user-lists-window.vue:
|
|
||||||
title: "リスト"
|
|
||||||
create-list: "リストを作成"
|
|
||||||
list-name: "リスト名"
|
|
||||||
|
|
||||||
desktop/views/components/user-preview.vue:
|
desktop/views/components/user-preview.vue:
|
||||||
notes: "投稿"
|
notes: "投稿"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
@@ -1158,7 +1213,6 @@ admin/views/index.vue:
|
|||||||
users: "ユーザー"
|
users: "ユーザー"
|
||||||
federation: "連合"
|
federation: "連合"
|
||||||
announcements: "お知らせ"
|
announcements: "お知らせ"
|
||||||
hashtags: "ハッシュタグ"
|
|
||||||
abuse: "スパム報告"
|
abuse: "スパム報告"
|
||||||
queue: "ジョブキュー"
|
queue: "ジョブキュー"
|
||||||
logs: "ログ"
|
logs: "ログ"
|
||||||
@@ -1189,14 +1243,34 @@ admin/views/instance.vue:
|
|||||||
instance-name: "インスタンス名"
|
instance-name: "インスタンス名"
|
||||||
instance-description: "インスタンスの紹介"
|
instance-description: "インスタンスの紹介"
|
||||||
host: "ホスト"
|
host: "ホスト"
|
||||||
|
icon-url: "アイコンURL"
|
||||||
|
logo-url: "ロゴURL"
|
||||||
banner-url: "バナー画像URL"
|
banner-url: "バナー画像URL"
|
||||||
error-image-url: "エラー画像URL"
|
error-image-url: "エラー画像URL"
|
||||||
languages: "インスタンスの対象言語"
|
languages: "インスタンスの対象言語"
|
||||||
languages-desc: "スペースで区切って複数設定できます。"
|
languages-desc: "スペースで区切って複数設定できます。"
|
||||||
|
tos-url: "利用規約URL"
|
||||||
|
repository-url: "リポジトリURL"
|
||||||
|
feedback-url: "フィードバックURL"
|
||||||
maintainer-config: "管理者情報"
|
maintainer-config: "管理者情報"
|
||||||
maintainer-name: "管理者名"
|
maintainer-name: "管理者名"
|
||||||
maintainer-email: "管理者の連絡先"
|
maintainer-email: "管理者の連絡先"
|
||||||
|
advanced-config: "その他の設定"
|
||||||
|
note-and-tl: "投稿とタイムライン"
|
||||||
drive-config: "ドライブの設定"
|
drive-config: "ドライブの設定"
|
||||||
|
use-object-storage: "オブジェクトストレージを使用する"
|
||||||
|
object-storage-base-url: "URL"
|
||||||
|
object-storage-bucket: "バケット名"
|
||||||
|
object-storage-prefix: "プレフィックス"
|
||||||
|
object-storage-endpoint: "エンドポイント"
|
||||||
|
object-storage-region: "リージョン"
|
||||||
|
object-storage-port: "ポート"
|
||||||
|
object-storage-access-key: "アクセスキー"
|
||||||
|
object-storage-secret-key: "シークレットキー"
|
||||||
|
object-storage-use-ssl: "SSLを使用"
|
||||||
|
object-storage-s3-info: "Amazon S3をオブジェクトストレージとして使用する場合の「エンドポイント」と「リージョン」の設定については{0}をご確認ください。"
|
||||||
|
object-storage-s3-info-here: "こちら"
|
||||||
|
object-storage-gcs-info: "Google Cloud Storageをオブジェクトストレージとして使用する場合、「エンドポイント」は storage.googleapis.com に設定し、「リージョン」は空欄にします。"
|
||||||
cache-remote-files: "リモートのファイルをキャッシュする"
|
cache-remote-files: "リモートのファイルをキャッシュする"
|
||||||
cache-remote-files-desc: "この設定を無効にすると、リモートファイルをキャッシュせず直リンクするようになります。そのためサーバーのストレージを節約できますが、プライバシー設定で直リンクを無効にしているユーザーにはファイルが見えなくなったり、サムネイルが生成されないので通信量が増加します。通常はこの設定をオンにしておくことをおすすめします。"
|
cache-remote-files-desc: "この設定を無効にすると、リモートファイルをキャッシュせず直リンクするようになります。そのためサーバーのストレージを節約できますが、プライバシー設定で直リンクを無効にしているユーザーにはファイルが見えなくなったり、サムネイルが生成されないので通信量が増加します。通常はこの設定をオンにしておくことをおすすめします。"
|
||||||
local-drive-capacity-mb: "ローカルユーザーひとりあたりのドライブ容量"
|
local-drive-capacity-mb: "ローカルユーザーひとりあたりのドライブ容量"
|
||||||
@@ -1205,8 +1279,12 @@ admin/views/instance.vue:
|
|||||||
recaptcha-config: "reCAPTCHAの設定"
|
recaptcha-config: "reCAPTCHAの設定"
|
||||||
recaptcha-info: "reCAPTCHAを有効にする場合、reCAPTCHAトークンを取得する必要があります。https://www.google.com/recaptcha/intro/ にアクセスしてトークンを取得してください。"
|
recaptcha-info: "reCAPTCHAを有効にする場合、reCAPTCHAトークンを取得する必要があります。https://www.google.com/recaptcha/intro/ にアクセスしてトークンを取得してください。"
|
||||||
enable-recaptcha: "reCAPTCHAを有効にする"
|
enable-recaptcha: "reCAPTCHAを有効にする"
|
||||||
recaptcha-site-key: "reCAPTCHA site key"
|
recaptcha-site-key: "サイトキー"
|
||||||
recaptcha-secret-key: "reCAPTCHA secret key"
|
recaptcha-secret-key: "シークレットキー"
|
||||||
|
recaptcha-preview: "プレビュー"
|
||||||
|
hidden-tags: "非表示ハッシュタグ"
|
||||||
|
hidden-tags-info: "集計から除外するハッシュタグを改行で区切って記述します。"
|
||||||
|
external-service-integration-config: "外部サービス連携"
|
||||||
twitter-integration-config: "Twitter連携の設定"
|
twitter-integration-config: "Twitter連携の設定"
|
||||||
twitter-integration-info: "コールバックURLは {url} に設定します。"
|
twitter-integration-info: "コールバックURLは {url} に設定します。"
|
||||||
enable-twitter-integration: "Twitter連携を有効にする"
|
enable-twitter-integration: "Twitter連携を有効にする"
|
||||||
@@ -1237,12 +1315,8 @@ admin/views/instance.vue:
|
|||||||
invite: "招待"
|
invite: "招待"
|
||||||
save: "保存"
|
save: "保存"
|
||||||
saved: "保存しました"
|
saved: "保存しました"
|
||||||
user-recommendation-config: "おすすめユーザー"
|
pinned-users: "ピン留めユーザー"
|
||||||
enable-external-user-recommendation: "外部ユーザーレコメンデーションを有効にする"
|
pinned-users-info: "ピン留めしたいユーザーを改行で区切って記述します。"
|
||||||
external-user-recommendation-engine: "エンジン"
|
|
||||||
external-user-recommendation-engine-desc: "例: https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}"
|
|
||||||
external-user-recommendation-timeout: "タイムアウト"
|
|
||||||
external-user-recommendation-timeout-desc: "ミリ秒単位 (例: 300000)"
|
|
||||||
email-config: "メールサーバーの設定"
|
email-config: "メールサーバーの設定"
|
||||||
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
||||||
enable-email: "メール配信を有効にする"
|
enable-email: "メール配信を有効にする"
|
||||||
@@ -1326,15 +1400,13 @@ admin/views/users.vue:
|
|||||||
unsuspend-confirm: "凍結を解除しますか?"
|
unsuspend-confirm: "凍結を解除しますか?"
|
||||||
unsuspended: "凍結を解除しました"
|
unsuspended: "凍結を解除しました"
|
||||||
make-silence: "サイレンス"
|
make-silence: "サイレンス"
|
||||||
|
silence-confirm: "サイレンスしますか?"
|
||||||
unmake-silence: "サイレンスの解除"
|
unmake-silence: "サイレンスの解除"
|
||||||
verify: "公式アカウントにする"
|
unsilence-confirm: "サイレンスを解除しますか?"
|
||||||
verify-confirm: "公式アカウントにしますか?"
|
|
||||||
verified: "公式アカウントにしました"
|
|
||||||
unverify: "公式アカウントを解除する"
|
|
||||||
unverify-confirm: "公式アカウントを解除しますか?"
|
|
||||||
unverified: "公式アカウントを解除しました"
|
|
||||||
update-remote-user: "リモートユーザー情報の更新"
|
update-remote-user: "リモートユーザー情報の更新"
|
||||||
remote-user-updated: "リモートユーザー情報を更新しました"
|
remote-user-updated: "リモートユーザー情報を更新しました"
|
||||||
|
delete-all-files: "すべてのファイルを削除"
|
||||||
|
delete-all-files-confirm: "すべてのファイルを削除しますか?"
|
||||||
users:
|
users:
|
||||||
title: "ユーザー"
|
title: "ユーザー"
|
||||||
sort:
|
sort:
|
||||||
@@ -1349,7 +1421,6 @@ admin/views/users.vue:
|
|||||||
admin: "管理者"
|
admin: "管理者"
|
||||||
moderator: "モデレーター"
|
moderator: "モデレーター"
|
||||||
adminOrModerator: "管理者+モデレーター"
|
adminOrModerator: "管理者+モデレーター"
|
||||||
verified: "公式アカウント"
|
|
||||||
silenced: "サイレンス済み"
|
silenced: "サイレンス済み"
|
||||||
suspended: "凍結済み"
|
suspended: "凍結済み"
|
||||||
origin:
|
origin:
|
||||||
@@ -1416,6 +1487,7 @@ admin/views/federation.vue:
|
|||||||
latest-request-received-at: "直近のリクエスト受信"
|
latest-request-received-at: "直近のリクエスト受信"
|
||||||
remove-all-following: "フォローを全解除"
|
remove-all-following: "フォローを全解除"
|
||||||
remove-all-following-info: "{host}からのフォローをすべて解除します。そのインスタンスがもう存在しなくなった場合などに実行してください。"
|
remove-all-following-info: "{host}からのフォローをすべて解除します。そのインスタンスがもう存在しなくなった場合などに実行してください。"
|
||||||
|
delete-all-files: "ファイルをすべて削除"
|
||||||
block: "ブロック"
|
block: "ブロック"
|
||||||
marked-as-closed: "閉鎖されているとマーク"
|
marked-as-closed: "閉鎖されているとマーク"
|
||||||
lookup: "照会"
|
lookup: "照会"
|
||||||
@@ -1462,6 +1534,8 @@ admin/views/federation.vue:
|
|||||||
chart-spans:
|
chart-spans:
|
||||||
hour: "1時間ごと"
|
hour: "1時間ごと"
|
||||||
day: "1日ごと"
|
day: "1日ごと"
|
||||||
|
blocked-hosts: "ブロック"
|
||||||
|
blocked-hosts-info: "ブロックしたいホストを改行で区切って記述します。"
|
||||||
|
|
||||||
desktop/views/pages/welcome.vue:
|
desktop/views/pages/welcome.vue:
|
||||||
about: "詳しく..."
|
about: "詳しく..."
|
||||||
@@ -1540,6 +1614,7 @@ desktop/views/widgets/polls.vue:
|
|||||||
desktop/views/widgets/post-form.vue:
|
desktop/views/widgets/post-form.vue:
|
||||||
title: "投稿"
|
title: "投稿"
|
||||||
note: "投稿"
|
note: "投稿"
|
||||||
|
something-happened: "何らかの事情で投稿できませんでした。"
|
||||||
|
|
||||||
desktop/views/widgets/profile.vue:
|
desktop/views/widgets/profile.vue:
|
||||||
update-banner: "クリックでバナー編集"
|
update-banner: "クリックでバナー編集"
|
||||||
@@ -1562,12 +1637,11 @@ mobile/views/components/drive.vue:
|
|||||||
file-count: "ファイル"
|
file-count: "ファイル"
|
||||||
nothing-in-drive: "ドライブには何もありません"
|
nothing-in-drive: "ドライブには何もありません"
|
||||||
folder-is-empty: "このフォルダは空です"
|
folder-is-empty: "このフォルダは空です"
|
||||||
prompt: "何をしますか?(数字を入力してください): <1 → ファイルをアップロード | 2 → ファイルをURLでアップロード | 3 → フォルダ作成 | 4 → このフォルダ名を変更 | 5 → このフォルダを移動 | 6 → このフォルダを削除>"
|
|
||||||
deletion-alert: "ごめんなさい!フォルダの削除は未実装です...。"
|
|
||||||
folder-name: "フォルダー名"
|
folder-name: "フォルダー名"
|
||||||
here-is-root: "現在いる場所はルートで、フォルダではありません。"
|
here-is-root: "現在いる場所はルートで、フォルダではありません。"
|
||||||
url-prompt: "アップロードしたいファイルのURL"
|
url-prompt: "アップロードしたいファイルのURL"
|
||||||
uploading: "アップロードをリクエストしました。アップロードが完了するまで時間がかかる場合があります。"
|
uploading: "アップロードをリクエストしました。アップロードが完了するまで時間がかかる場合があります。"
|
||||||
|
folder-name-cannot-empty: "フォルダ名を空白にすることはできません。"
|
||||||
|
|
||||||
mobile/views/components/drive-file-chooser.vue:
|
mobile/views/components/drive-file-chooser.vue:
|
||||||
select-file: "ファイルを選択"
|
select-file: "ファイルを選択"
|
||||||
@@ -1632,7 +1706,7 @@ mobile/views/components/post-form.vue:
|
|||||||
quote-placeholder: "この投稿を引用... (オプション)"
|
quote-placeholder: "この投稿を引用... (オプション)"
|
||||||
reply-placeholder: "この投稿への返信..."
|
reply-placeholder: "この投稿への返信..."
|
||||||
cw-placeholder: "内容への注釈 (オプション)"
|
cw-placeholder: "内容への注釈 (オプション)"
|
||||||
location-alert: "お使いの端末は位置情報に対応していません"
|
geolocation-alert: "お使いの端末は位置情報に対応していません"
|
||||||
error: "エラー"
|
error: "エラー"
|
||||||
username-prompt: "ユーザー名を入力してください"
|
username-prompt: "ユーザー名を入力してください"
|
||||||
|
|
||||||
@@ -1652,14 +1726,20 @@ mobile/views/components/ui.nav.vue:
|
|||||||
follow-requests: "フォロー申請"
|
follow-requests: "フォロー申請"
|
||||||
search: "検索"
|
search: "検索"
|
||||||
user-lists: "リスト"
|
user-lists: "リスト"
|
||||||
|
user-groups: "グループ"
|
||||||
widgets: "ウィジェット"
|
widgets: "ウィジェット"
|
||||||
game: "ゲーム"
|
game: "ゲーム"
|
||||||
admin: "管理"
|
admin: "管理"
|
||||||
about: "Misskeyについて"
|
about: "Misskeyについて"
|
||||||
|
|
||||||
mobile/views/pages/user-lists.vue:
|
mobile/views/pages/drive.vue:
|
||||||
title: "リスト"
|
contextmenu:
|
||||||
enter-list-name: "リスト名を入力してください"
|
upload: "ファイルをアップロード"
|
||||||
|
url-upload: "ファイルをURLでアップロード"
|
||||||
|
create-folder: "フォルダーを作成"
|
||||||
|
rename-folder: "フォルダー名を変更"
|
||||||
|
move-folder: "このフォルダを移動"
|
||||||
|
delete-folder: "このフォルダを削除"
|
||||||
|
|
||||||
mobile/views/pages/signup.vue:
|
mobile/views/pages/signup.vue:
|
||||||
lets-start: "📦 始めましょう"
|
lets-start: "📦 始めましょう"
|
||||||
@@ -1693,11 +1773,6 @@ mobile/views/pages/widgets/activity.vue:
|
|||||||
mobile/views/pages/share.vue:
|
mobile/views/pages/share.vue:
|
||||||
share-with: "{name}で共有"
|
share-with: "{name}で共有"
|
||||||
|
|
||||||
mobile/views/pages/received-follow-requests.vue:
|
|
||||||
title: "フォロー申請"
|
|
||||||
accept: "承認"
|
|
||||||
reject: "拒否"
|
|
||||||
|
|
||||||
mobile/views/pages/note.vue:
|
mobile/views/pages/note.vue:
|
||||||
title: "投稿"
|
title: "投稿"
|
||||||
prev: "前の投稿"
|
prev: "前の投稿"
|
||||||
@@ -1782,26 +1857,6 @@ docs:
|
|||||||
edit-this-page-on-github: "間違いや改善点を見つけましたか?"
|
edit-this-page-on-github: "間違いや改善点を見つけましたか?"
|
||||||
edit-this-page-on-github-link: "このページをGitHubで編集"
|
edit-this-page-on-github-link: "このページをGitHubで編集"
|
||||||
|
|
||||||
api:
|
|
||||||
entities:
|
|
||||||
properties: "プロパティ"
|
|
||||||
endpoints:
|
|
||||||
params: "パラメータ"
|
|
||||||
no-params: "パラメータはありません"
|
|
||||||
res: "レスポンス"
|
|
||||||
require-credential: "このエンドポイントは認証情報が必須です。"
|
|
||||||
require-permission: "このエンドポイントは{permission}の権限を必要とします。"
|
|
||||||
has-limit: "レートリミットがあります。"
|
|
||||||
duration-limit: "直近{duration}ミリ秒の間のこのエンドポイントへのリクエスト数の合計が{max}を超える場合はリクエストできません。"
|
|
||||||
min-interval-limit: "前回のリクエストから{interval}ミリ秒経っていない場合はリクエストできません。"
|
|
||||||
show-src: "このエンドポイントのソースコードも閲覧できます。"
|
|
||||||
show-src-link: "コードをGitHubで見る"
|
|
||||||
generated: "このドキュメントはAPI定義に基づき自動生成されています。"
|
|
||||||
props:
|
|
||||||
name: "名前"
|
|
||||||
type: "型"
|
|
||||||
description: "説明"
|
|
||||||
|
|
||||||
dev/views/index.vue:
|
dev/views/index.vue:
|
||||||
manage-apps: "アプリの管理"
|
manage-apps: "アプリの管理"
|
||||||
|
|
||||||
@@ -1811,24 +1866,283 @@ dev/views/apps.vue:
|
|||||||
app-missing: "アプリなし"
|
app-missing: "アプリなし"
|
||||||
|
|
||||||
dev/views/new-app.vue:
|
dev/views/new-app.vue:
|
||||||
|
new-app: "新しいアプリケーション"
|
||||||
|
new-app-info: "アプリケーションはAPIからでも作成できます。 (app/create)"
|
||||||
create-app: "アプリケーションの作成"
|
create-app: "アプリケーションの作成"
|
||||||
app-name: "アプリケーション名"
|
app-name: "アプリケーション名"
|
||||||
|
app-name-placeholder: "ex) Misskey for iOS"
|
||||||
app-name-desc: "あなたのアプリの名称。"
|
app-name-desc: "あなたのアプリの名称。"
|
||||||
app-name-ex: "ex) Misskey for iOS"
|
|
||||||
app-overview: "アプリの概要"
|
app-overview: "アプリの概要"
|
||||||
app-desc: "あなたのアプリの簡単な説明や紹介。"
|
app-overview-placeholder: " ex) Misskey iOSクライアント。"
|
||||||
app-desc-ex: "ex) Misskey iOSクライアント。"
|
app-overview-desc: "あなたのアプリの簡単な説明や紹介。"
|
||||||
callback-url: "コールバックURL (オプション)"
|
callback-url: "コールバックURL (オプション)"
|
||||||
|
callback-url-placeholder: "ex) https://your.app.example.com/callback.php"
|
||||||
callback-url-desc: "ユーザーが認証フォームで認証した際にリダイレクトするURLを設定できます。"
|
callback-url-desc: "ユーザーが認証フォームで認証した際にリダイレクトするURLを設定できます。"
|
||||||
authority: "権限"
|
authority: "権限"
|
||||||
authority-desc: "ここで要求した機能だけがAPIからアクセスできます。"
|
authority-desc: "ここで要求した機能だけがAPIからアクセスできます。"
|
||||||
authority-warning: "アプリ作成後も変更できますが、新たな権限を付与する場合、その時点で関連付けられているユーザーキーはすべて無効になります。"
|
authority-warning: "アプリ作成後も変更できますが、新たな権限を付与する場合、その時点で関連付けられているユーザーキーはすべて無効になります。"
|
||||||
account-read: "アカウントの情報を見る。"
|
|
||||||
account-write: "アカウントの情報を操作する。"
|
pages:
|
||||||
note-write: "投稿する。"
|
new-page: "ページの作成"
|
||||||
reaction-write: "リアクションしたりリアクションをキャンセルする。"
|
edit-page: "ページの編集"
|
||||||
following-write: "フォローしたりフォロー解除する。"
|
read-page: "ソースを表示中"
|
||||||
drive-read: "ドライブを見る。"
|
page-created: "ページを作成しました"
|
||||||
drive-write: "ドライブを操作する。"
|
page-updated: "ページを更新しました"
|
||||||
notification-read: "通知を見る。"
|
are-you-sure-delete: "このページを削除しますか?"
|
||||||
notification-write: "通知を操作する。"
|
page-deleted: "ページを削除しました"
|
||||||
|
edit-this-page: "このページを編集"
|
||||||
|
view-source: "ソースを表示"
|
||||||
|
view-page: "ページを見る"
|
||||||
|
like: "いいね"
|
||||||
|
unlike: "いいね解除"
|
||||||
|
liked-pages: "いいねしたページ"
|
||||||
|
my-pages: "自分のページ"
|
||||||
|
inspector: "インスペクター"
|
||||||
|
content: "ページブロック"
|
||||||
|
variables: "変数"
|
||||||
|
variables-info: "変数を使うことで動的なページを作成できます。テキスト内で <b>{ 変数名 }</b> と書くとそこに変数の値を埋め込めます。例えば <b>Hello { thing } world!</b> というテキストで、変数(thing)の値が <b>ai</b> だった場合、テキストは <b>Hello ai world!</b> になります。"
|
||||||
|
variables-info2: "変数の評価(値を算出すること)は上から下に行われるので、ある変数の中で自分より下の変数を参照することはできません。例えば上から <b>A、B、C</b> と3つの変数を定義したとき、<b>C</b>の中で<b>A</b>や<b>B</b>を参照することはできますが、<b>A</b>の中で<b>B</b>や<b>C</b>を参照することはできません。"
|
||||||
|
variables-info3: "ユーザーからの入力を受け取るには、ページに「ユーザー入力」ブロックを設置し、「変数名」に入力を格納したい変数名を設定します(変数は自動で作成されます)。その変数を使ってユーザー入力に応じた動作を行えます。"
|
||||||
|
variables-info4: "関数を使うと、値の算出処理を再利用可能な形にまとめることができます。関数を作るには、「関数」タイプの変数を作成します。関数にはスロット(引数)を設定することができ、スロットの値は関数内で変数として利用可能です。また、AiScript標準で関数を引数に取る関数(高階関数と呼ばれます)も存在します。関数は予め定義しておくほかに、このような高階関数のスロットに即席でセットすることもできます。"
|
||||||
|
more-details: "詳しい説明"
|
||||||
|
title: "タイトル"
|
||||||
|
url: "ページURL"
|
||||||
|
summary: "ページの要約"
|
||||||
|
align-center: "中央寄せ"
|
||||||
|
font: "フォント"
|
||||||
|
fontSerif: "セリフ"
|
||||||
|
fontSansSerif: "サンセリフ"
|
||||||
|
set-eye-catching-image: "アイキャッチ画像を設定"
|
||||||
|
remove-eye-catching-image: "アイキャッチ画像を削除"
|
||||||
|
choose-block: "ブロックを追加"
|
||||||
|
select-type: "種類を選択"
|
||||||
|
enter-variable-name: "変数名を決めてください"
|
||||||
|
the-variable-name-is-already-used: "その変数名は既に使われています"
|
||||||
|
content-blocks: "コンテンツ"
|
||||||
|
input-blocks: "入力"
|
||||||
|
special-blocks: "特殊"
|
||||||
|
post-from-post-form: "この内容を投稿"
|
||||||
|
posted-from-post-form: "投稿しました"
|
||||||
|
blocks:
|
||||||
|
text: "テキスト"
|
||||||
|
textarea: "テキストエリア"
|
||||||
|
section: "セクション"
|
||||||
|
image: "画像"
|
||||||
|
button: "ボタン"
|
||||||
|
|
||||||
|
if: "もし"
|
||||||
|
_if:
|
||||||
|
variable: "変数"
|
||||||
|
|
||||||
|
post: "投稿フォーム"
|
||||||
|
_post:
|
||||||
|
text: "内容"
|
||||||
|
|
||||||
|
textInput: "テキスト入力"
|
||||||
|
_textInput:
|
||||||
|
name: "変数名"
|
||||||
|
text: "タイトル"
|
||||||
|
default: "デフォルト値"
|
||||||
|
|
||||||
|
textareaInput: "複数行テキスト入力"
|
||||||
|
_textareaInput:
|
||||||
|
name: "変数名"
|
||||||
|
text: "タイトル"
|
||||||
|
default: "デフォルト値"
|
||||||
|
|
||||||
|
numberInput: "数値入力"
|
||||||
|
_numberInput:
|
||||||
|
name: "変数名"
|
||||||
|
text: "タイトル"
|
||||||
|
default: "デフォルト値"
|
||||||
|
|
||||||
|
switch: "スイッチ"
|
||||||
|
_switch:
|
||||||
|
name: "変数名"
|
||||||
|
text: "タイトル"
|
||||||
|
default: "デフォルト値"
|
||||||
|
|
||||||
|
counter: "カウンター"
|
||||||
|
_counter:
|
||||||
|
name: "変数名"
|
||||||
|
text: "タイトル"
|
||||||
|
inc: "増加値"
|
||||||
|
|
||||||
|
_button:
|
||||||
|
text: "タイトル"
|
||||||
|
action: "ボタンを押したときの動作"
|
||||||
|
_action:
|
||||||
|
dialog: "ダイアログを表示する"
|
||||||
|
_dialog:
|
||||||
|
content: "内容"
|
||||||
|
resetRandom: "乱数をリセット"
|
||||||
|
|
||||||
|
script:
|
||||||
|
categories:
|
||||||
|
flow: "制御"
|
||||||
|
logical: "論理演算"
|
||||||
|
operation: "計算"
|
||||||
|
comparison: "比較"
|
||||||
|
random: "ランダム"
|
||||||
|
value: "値"
|
||||||
|
fn: "関数"
|
||||||
|
text: "テキスト操作"
|
||||||
|
convert: "変換"
|
||||||
|
list: "リスト"
|
||||||
|
blocks:
|
||||||
|
text: "テキスト"
|
||||||
|
multiLineText: "テキスト(複数行)"
|
||||||
|
textList: "テキストのリスト"
|
||||||
|
_textList:
|
||||||
|
info: "ひとつひとつを改行で区切ってください"
|
||||||
|
strLen: "テキストの長さ"
|
||||||
|
_strLen:
|
||||||
|
arg1: "テキスト"
|
||||||
|
strPick: "文字取り出し"
|
||||||
|
_strPick:
|
||||||
|
arg1: "テキスト"
|
||||||
|
arg2: "文字の位置"
|
||||||
|
strReplace: "テキスト置き換え"
|
||||||
|
_strReplace:
|
||||||
|
arg1: "テキスト"
|
||||||
|
arg2: "置き換え前"
|
||||||
|
arg3: "置き換え後"
|
||||||
|
strReverse: "テキストを反転"
|
||||||
|
_strReverse:
|
||||||
|
arg1: "テキスト"
|
||||||
|
join: "テキストを連結"
|
||||||
|
_join:
|
||||||
|
arg1: "リスト"
|
||||||
|
arg2: "区切り"
|
||||||
|
add: "+ 足す"
|
||||||
|
_add:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
subtract: "- 引く"
|
||||||
|
_subtract:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
multiply: "× 掛ける"
|
||||||
|
_multiply:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
divide: "÷ 割る"
|
||||||
|
_divide:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
remind: "÷ 割った余り"
|
||||||
|
_remind:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
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: "位置"
|
||||||
|
number: "数値"
|
||||||
|
stringToNumber: "テキストを数値に"
|
||||||
|
_stringToNumber:
|
||||||
|
arg1: "テキスト"
|
||||||
|
numberToString: "数値をテキストに"
|
||||||
|
_numberToString:
|
||||||
|
arg1: "数値"
|
||||||
|
splitStrByLine: "テキストを行で分割"
|
||||||
|
_splitStrByLine:
|
||||||
|
arg1: "テキスト"
|
||||||
|
ref: "変数"
|
||||||
|
fn: "関数"
|
||||||
|
_fn:
|
||||||
|
slots: "スロット"
|
||||||
|
slots-info: "スロットひとつひとつを改行で区切ってください"
|
||||||
|
arg1: "出力"
|
||||||
|
for: "繰り返し"
|
||||||
|
_for:
|
||||||
|
arg1: "回数"
|
||||||
|
arg2: "処理"
|
||||||
|
typeError: "スロット{slot}は\"{expect}\"を受け付けますが、\"{actual}\"が入れられています!"
|
||||||
|
thereIsEmptySlot: "スロット{slot}が空です!"
|
||||||
|
types:
|
||||||
|
string: "テキスト"
|
||||||
|
number: "数値"
|
||||||
|
boolean: "フラグ"
|
||||||
|
array: "リスト"
|
||||||
|
stringArray: "テキストのリスト"
|
||||||
|
emptySlot: "空のスロット"
|
||||||
|
enviromentVariables: "環境変数"
|
||||||
|
pageVariables: "ページ要素"
|
||||||
|
argVariables: "入力スロット"
|
||||||
|
|||||||
@@ -60,6 +60,8 @@ common:
|
|||||||
following: "フォローしとる"
|
following: "フォローしとる"
|
||||||
followers: "フォロワー"
|
followers: "フォロワー"
|
||||||
favorites: "お気に入り"
|
favorites: "お気に入り"
|
||||||
|
permissions:
|
||||||
|
"write:votes": "投票するで"
|
||||||
weekday-short:
|
weekday-short:
|
||||||
sunday: "日"
|
sunday: "日"
|
||||||
monday: "月"
|
monday: "月"
|
||||||
@@ -119,7 +121,7 @@ common:
|
|||||||
update-available-title: "更新があんで"
|
update-available-title: "更新があんで"
|
||||||
update-available: "Misskeyの新しいバージョンがあんで({newer}。現在{current}をつこてるわ)。ページを再度読み込みしたると更新が適用されるわ。"
|
update-available: "Misskeyの新しいバージョンがあんで({newer}。現在{current}をつこてるわ)。ページを再度読み込みしたると更新が適用されるわ。"
|
||||||
my-token-regenerated: "あんさんのトークンが更新されたらしいわ。すまんがとりあえずサインアウトすんで。"
|
my-token-regenerated: "あんさんのトークンが更新されたらしいわ。すまんがとりあえずサインアウトすんで。"
|
||||||
verified-user: "アメちゃん付きアカウント"
|
enter-username: "ユーザー名を入力してや"
|
||||||
do-not-use-in-production: "開発ビルドや。本番環境で使わんといて!知らんで!"
|
do-not-use-in-production: "開発ビルドや。本番環境で使わんといて!知らんで!"
|
||||||
is-remote-post: "この投稿情報はコピーです。"
|
is-remote-post: "この投稿情報はコピーです。"
|
||||||
view-on-remote: "ちゃんとした情報見せてや!"
|
view-on-remote: "ちゃんとした情報見せてや!"
|
||||||
@@ -166,15 +168,6 @@ common:
|
|||||||
auth/views/form.vue:
|
auth/views/form.vue:
|
||||||
share-access: "あんたのアカウントに<i>{name}</i>がアクセスしようとしてるで?ええか?"
|
share-access: "あんたのアカウントに<i>{name}</i>がアクセスしようとしてるで?ええか?"
|
||||||
permission-ask: "このアプリは次の権限を要求してんで:"
|
permission-ask: "このアプリは次の権限を要求してんで:"
|
||||||
account-read: "アカウントの情報を見させてもらうで。"
|
|
||||||
account-write: "アカウントの情報を操作させてもらうで。"
|
|
||||||
note-write: "投稿させてもらうで。"
|
|
||||||
like-write: "いいねしたりいいね解除させてもらうで。"
|
|
||||||
following-write: "フォローしたりフォロー解除させてもらうで。"
|
|
||||||
drive-read: "ドライブを見させてもらうで。"
|
|
||||||
drive-write: "ドライブを操作させてもらうで。"
|
|
||||||
notification-read: "通知を見させてもらうで。"
|
|
||||||
notification-write: "通知を操作させてもらうで。"
|
|
||||||
cancel: "やめとくわ"
|
cancel: "やめとくわ"
|
||||||
accept: "アクセスを許可や!"
|
accept: "アクセスを許可や!"
|
||||||
auth/views/index.vue:
|
auth/views/index.vue:
|
||||||
@@ -188,7 +181,6 @@ auth/views/index.vue:
|
|||||||
error: "セッションが存在してへん。"
|
error: "セッションが存在してへん。"
|
||||||
sign-in: "サインインしてや"
|
sign-in: "サインインしてや"
|
||||||
common/views/pages/explore.vue:
|
common/views/pages/explore.vue:
|
||||||
verified-users: "アメちゃん付きアカウント"
|
|
||||||
federated: "連合"
|
federated: "連合"
|
||||||
common/views/components/games/reversi/reversi.vue:
|
common/views/components/games/reversi/reversi.vue:
|
||||||
matching:
|
matching:
|
||||||
@@ -303,18 +295,15 @@ common/views/components/messaging.vue:
|
|||||||
search-user: "ユーザーを探す"
|
search-user: "ユーザーを探す"
|
||||||
you: "あんさん"
|
you: "あんさん"
|
||||||
no-history: "履歴はあらへんで"
|
no-history: "履歴はあらへんで"
|
||||||
|
user: "ユーザー"
|
||||||
common/views/components/messaging-room.vue:
|
common/views/components/messaging-room.vue:
|
||||||
empty: "このユーザーと話したことはあらへんで"
|
|
||||||
no-history: "これより過去の履歴はあらへんで"
|
no-history: "これより過去の履歴はあらへんで"
|
||||||
resize-form: "ドラッグしてフォームの広さを調整"
|
|
||||||
new-message: "新しいメッセージがあるで"
|
new-message: "新しいメッセージがあるで"
|
||||||
only-one-file-attached: "メッセージに添付できんのはひとつのファイルのみやで"
|
|
||||||
common/views/components/messaging-room.form.vue:
|
common/views/components/messaging-room.form.vue:
|
||||||
input-message-here: "ここにメッセージ書いてや"
|
input-message-here: "ここにメッセージ書いてや"
|
||||||
send: "送信"
|
send: "送信"
|
||||||
attach-from-local: "PCからファイルを添付する"
|
attach-from-local: "PCからファイルを添付する"
|
||||||
attach-from-drive: "ドライブからファイルを添付する"
|
attach-from-drive: "ドライブからファイルを添付する"
|
||||||
only-one-file-attached: "メッセージに添付できんのはひとつのファイルのみやで"
|
|
||||||
common/views/components/messaging-room.message.vue:
|
common/views/components/messaging-room.message.vue:
|
||||||
is-read: "既読"
|
is-read: "既読"
|
||||||
deleted: "このメッセージは削除されたわ"
|
deleted: "このメッセージは削除されたわ"
|
||||||
@@ -485,6 +474,14 @@ common/views/components/profile-editor.vue:
|
|||||||
enter-password: "パスワードを入れてや"
|
enter-password: "パスワードを入れてや"
|
||||||
common/views/components/user-list-editor.vue:
|
common/views/components/user-list-editor.vue:
|
||||||
users: "ユーザー"
|
users: "ユーザー"
|
||||||
|
add-user: "ユーザー増やす"
|
||||||
|
common/views/components/user-group-editor.vue:
|
||||||
|
invite: "招待"
|
||||||
|
common/views/components/user-lists.vue:
|
||||||
|
user-lists: "リスト"
|
||||||
|
list-name: "リスト名"
|
||||||
|
common/views/components/user-groups.vue:
|
||||||
|
invites: "招待"
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "見てみるわ…"
|
fetching: "見てみるわ…"
|
||||||
no-broadcasts: "お知らせはあらへんで"
|
no-broadcasts: "お知らせはあらへんで"
|
||||||
@@ -543,6 +540,8 @@ common/views/pages/follow.vue:
|
|||||||
request-pending: "フォローの許し待っとる"
|
request-pending: "フォローの許し待っとる"
|
||||||
follow-processing: "今フォロー処理やっとる‥"
|
follow-processing: "今フォロー処理やっとる‥"
|
||||||
follow-request: "フォロー許してくれや!言うてみる"
|
follow-request: "フォロー許してくれや!言うてみる"
|
||||||
|
common/views/pages/follow-requests.vue:
|
||||||
|
received-follow-requests: "フォロー許してくれや!言うてみる"
|
||||||
desktop:
|
desktop:
|
||||||
banner-crop-title: "どこバナーとして出す?"
|
banner-crop-title: "どこバナーとして出す?"
|
||||||
banner: "バナー"
|
banner: "バナー"
|
||||||
@@ -652,10 +651,6 @@ desktop/views/components/home.vue:
|
|||||||
desktop/views/input-dialog.vue:
|
desktop/views/input-dialog.vue:
|
||||||
cancel: "やめとくわ"
|
cancel: "やめとくわ"
|
||||||
ok: "これや!"
|
ok: "これや!"
|
||||||
desktop/views/components/messaging-room-window.vue:
|
|
||||||
title: "メッセージ:"
|
|
||||||
desktop/views/components/messaging-window.vue:
|
|
||||||
title: "メッセージ"
|
|
||||||
desktop/views/components/note-detail.vue:
|
desktop/views/components/note-detail.vue:
|
||||||
private: "この投稿は見せられへんわ"
|
private: "この投稿は見せられへんわ"
|
||||||
deleted: "この投稿なんか無くなってもうたわ"
|
deleted: "この投稿なんか無くなってもうたわ"
|
||||||
@@ -692,7 +687,6 @@ desktop/views/components/post-form.vue:
|
|||||||
posting: "投稿中"
|
posting: "投稿中"
|
||||||
attach-media-from-local: "PCからメディア持ってくる"
|
attach-media-from-local: "PCからメディア持ってくる"
|
||||||
attach-media-from-drive: "ドライブからメディア持ってくる"
|
attach-media-from-drive: "ドライブからメディア持ってくる"
|
||||||
attach-cancel: "くっつけるのやめよか"
|
|
||||||
create-poll: "アンケートを作成"
|
create-poll: "アンケートを作成"
|
||||||
text-remain: "残り{}文字"
|
text-remain: "残り{}文字"
|
||||||
recent-tags: "最近のタグ"
|
recent-tags: "最近のタグ"
|
||||||
@@ -783,6 +777,9 @@ common/views/components/password-settings.vue:
|
|||||||
enter-new-password-again: "もっぺん入れてや"
|
enter-new-password-again: "もっぺん入れてや"
|
||||||
not-match: "パスワードがおうとらん"
|
not-match: "パスワードがおうとらん"
|
||||||
changed: "パスワード変えたわ"
|
changed: "パスワード変えたわ"
|
||||||
|
common/views/components/post-form-attaches.vue:
|
||||||
|
mark-as-sensitive: "見たらあかん感じにしとく"
|
||||||
|
unmark-as-sensitive: "やっぱ見せたるわ"
|
||||||
desktop/views/components/sub-note-content.vue:
|
desktop/views/components/sub-note-content.vue:
|
||||||
private: "この投稿は見せられへんわ"
|
private: "この投稿は見せられへんわ"
|
||||||
deleted: "この投稿なんか無くなってもうたわ"
|
deleted: "この投稿なんか無くなってもうたわ"
|
||||||
@@ -791,15 +788,12 @@ desktop/views/components/sub-note-content.vue:
|
|||||||
desktop/views/components/settings.tags.vue:
|
desktop/views/components/settings.tags.vue:
|
||||||
add: "増やす"
|
add: "増やす"
|
||||||
save: "保存"
|
save: "保存"
|
||||||
desktop/views/components/taskmanager.vue:
|
|
||||||
title: "タスクマネージャ"
|
|
||||||
desktop/views/components/timeline.vue:
|
desktop/views/components/timeline.vue:
|
||||||
home: "ホーム"
|
home: "ホーム"
|
||||||
local: "ローカル"
|
local: "ローカル"
|
||||||
hybrid: "ソーシャル"
|
|
||||||
global: "グローバル"
|
global: "グローバル"
|
||||||
mentions: "あんた宛て"
|
mentions: "あんた宛て"
|
||||||
messages: "メッセージ"
|
messages: "ダイレクト投稿"
|
||||||
list: "リスト"
|
list: "リスト"
|
||||||
hashtag: "ハッシュタグ"
|
hashtag: "ハッシュタグ"
|
||||||
add-tag-timeline: "ハッシュタグ増やす"
|
add-tag-timeline: "ハッシュタグ増やす"
|
||||||
@@ -821,14 +815,6 @@ desktop/views/components/ui.header.post.vue:
|
|||||||
post: "新規投稿"
|
post: "新規投稿"
|
||||||
desktop/views/components/ui.header.search.vue:
|
desktop/views/components/ui.header.search.vue:
|
||||||
placeholder: "検索"
|
placeholder: "検索"
|
||||||
desktop/views/components/received-follow-requests-window.vue:
|
|
||||||
title: "フォロー許してくれや!言うてみる"
|
|
||||||
accept: "許す"
|
|
||||||
reject: "許さん"
|
|
||||||
desktop/views/components/user-lists-window.vue:
|
|
||||||
title: "リスト"
|
|
||||||
create-list: "新しいリストを作成"
|
|
||||||
list-name: "リスト名"
|
|
||||||
desktop/views/components/user-preview.vue:
|
desktop/views/components/user-preview.vue:
|
||||||
notes: "投稿"
|
notes: "投稿"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
@@ -850,7 +836,6 @@ admin/views/index.vue:
|
|||||||
users: "ユーザー"
|
users: "ユーザー"
|
||||||
federation: "連合"
|
federation: "連合"
|
||||||
announcements: "知っといてや"
|
announcements: "知っといてや"
|
||||||
hashtags: "ハッシュタグ"
|
|
||||||
back-to-misskey: "Misskeyに戻る"
|
back-to-misskey: "Misskeyに戻る"
|
||||||
admin/views/dashboard.vue:
|
admin/views/dashboard.vue:
|
||||||
dashboard: "ダッシュボード"
|
dashboard: "ダッシュボード"
|
||||||
@@ -875,6 +860,7 @@ admin/views/instance.vue:
|
|||||||
maintainer-name: "管理者名"
|
maintainer-name: "管理者名"
|
||||||
maintainer-email: "管理者の連絡先"
|
maintainer-email: "管理者の連絡先"
|
||||||
drive-config: "ドライブの設定"
|
drive-config: "ドライブの設定"
|
||||||
|
object-storage-endpoint: "エンドポイント"
|
||||||
cache-remote-files: "リモートのファイルをキャッシュする"
|
cache-remote-files: "リモートのファイルをキャッシュする"
|
||||||
cache-remote-files-desc: "この設定を無効にすると、リモートファイルをこっちで保管せずに直接リンク張るようになるで。サーバーのストレージは軽くやろうけど、プライバシー設定で直リンクを向こうにしとるユーザーはファイルが見れへんし、サムネイルが無いから通信量が増えたりするから、普通はオンにしといてな。"
|
cache-remote-files-desc: "この設定を無効にすると、リモートファイルをこっちで保管せずに直接リンク張るようになるで。サーバーのストレージは軽くやろうけど、プライバシー設定で直リンクを向こうにしとるユーザーはファイルが見れへんし、サムネイルが無いから通信量が増えたりするから、普通はオンにしといてな。"
|
||||||
local-drive-capacity-mb: "ローカルユーザーひとりあたりのドライブ容量"
|
local-drive-capacity-mb: "ローカルユーザーひとりあたりのドライブ容量"
|
||||||
@@ -883,8 +869,7 @@ admin/views/instance.vue:
|
|||||||
recaptcha-config: "reCAPTCHAの設定"
|
recaptcha-config: "reCAPTCHAの設定"
|
||||||
recaptcha-info: "reCAPTCHAを有効にするにはreCAPTCHAトークンが要るで。https://www.google.com/recaptcha/intro/ にアクセスしてトークンを取得してな。"
|
recaptcha-info: "reCAPTCHAを有効にするにはreCAPTCHAトークンが要るで。https://www.google.com/recaptcha/intro/ にアクセスしてトークンを取得してな。"
|
||||||
enable-recaptcha: "reCAPTCHAを有効にする"
|
enable-recaptcha: "reCAPTCHAを有効にする"
|
||||||
recaptcha-site-key: "reCAPTCHA site key"
|
recaptcha-preview: "試してみる"
|
||||||
recaptcha-secret-key: "reCAPTCHA secret key"
|
|
||||||
twitter-integration-config: "Twitter連携の設定"
|
twitter-integration-config: "Twitter連携の設定"
|
||||||
twitter-integration-info: "コールバックURLは {url} に設定してや。"
|
twitter-integration-info: "コールバックURLは {url} に設定してや。"
|
||||||
enable-twitter-integration: "Twitter連携を有効にする"
|
enable-twitter-integration: "Twitter連携を有効にする"
|
||||||
@@ -911,12 +896,6 @@ admin/views/instance.vue:
|
|||||||
invite: "来てや"
|
invite: "来てや"
|
||||||
save: "保存"
|
save: "保存"
|
||||||
saved: "保存したで!"
|
saved: "保存したで!"
|
||||||
user-recommendation-config: "このユーザーええで"
|
|
||||||
enable-external-user-recommendation: "外部ユーザーレコメンデーションを使えるようにする"
|
|
||||||
external-user-recommendation-engine: "エンジン"
|
|
||||||
external-user-recommendation-engine-desc: "例: https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}"
|
|
||||||
external-user-recommendation-timeout: "タイムアウト"
|
|
||||||
external-user-recommendation-timeout-desc: "ミリ秒単位 (例: 300000)"
|
|
||||||
email-config: "メールサーバーの設定"
|
email-config: "メールサーバーの設定"
|
||||||
email-config-info: "メールアドレス確認やパスワードリセットの際に使うで。"
|
email-config-info: "メールアドレス確認やパスワードリセットの際に使うで。"
|
||||||
enable-email: "メール配信を有効にする"
|
enable-email: "メール配信を有効にする"
|
||||||
@@ -973,7 +952,6 @@ admin/views/users.vue:
|
|||||||
state:
|
state:
|
||||||
all: "すべて"
|
all: "すべて"
|
||||||
moderator: "モデレーター"
|
moderator: "モデレーター"
|
||||||
verified: "アメちゃん付きアカウント"
|
|
||||||
origin:
|
origin:
|
||||||
local: "ローカル"
|
local: "ローカル"
|
||||||
admin/views/emoji.vue:
|
admin/views/emoji.vue:
|
||||||
@@ -1012,6 +990,7 @@ admin/views/federation.vue:
|
|||||||
chart-spans:
|
chart-spans:
|
||||||
hour: "1時間ごと"
|
hour: "1時間ごと"
|
||||||
day: "1日ごと"
|
day: "1日ごと"
|
||||||
|
blocked-hosts: "ブロック"
|
||||||
desktop/views/pages/welcome.vue:
|
desktop/views/pages/welcome.vue:
|
||||||
about: "もうちょい……"
|
about: "もうちょい……"
|
||||||
timeline: "タイムライン"
|
timeline: "タイムライン"
|
||||||
@@ -1061,8 +1040,6 @@ desktop/views/pages/user/user.timeline.vue:
|
|||||||
default: "投稿"
|
default: "投稿"
|
||||||
with-replies: "投稿と返信"
|
with-replies: "投稿と返信"
|
||||||
with-media: "メディア"
|
with-media: "メディア"
|
||||||
desktop/views/widgets/messaging.vue:
|
|
||||||
title: "メッセージ"
|
|
||||||
desktop/views/widgets/notifications.vue:
|
desktop/views/widgets/notifications.vue:
|
||||||
title: "通知"
|
title: "通知"
|
||||||
desktop/views/widgets/polls.vue:
|
desktop/views/widgets/polls.vue:
|
||||||
@@ -1090,8 +1067,6 @@ mobile/views/components/drive.vue:
|
|||||||
file-count: "ファイル"
|
file-count: "ファイル"
|
||||||
nothing-in-drive: "ドライブには何もあらへんで。"
|
nothing-in-drive: "ドライブには何もあらへんで。"
|
||||||
folder-is-empty: "このフォルダ何もないわ"
|
folder-is-empty: "このフォルダ何もないわ"
|
||||||
prompt: "何すんの?(数字を入れてや): <1 → ファイルをアップロード | 2 → ファイルをURLでアップロード | 3 → フォルダ作成 | 4 → このフォルダ名を変更 | 5 → このフォルダを移動 | 6 → このフォルダを削除>"
|
|
||||||
deletion-alert: "フォルダの削除は未実装やねん...。堪忍な!"
|
|
||||||
folder-name: "フォルダー名"
|
folder-name: "フォルダー名"
|
||||||
url-prompt: "このURLのファイルをアップロードしたいねん"
|
url-prompt: "このURLのファイルをアップロードしたいねん"
|
||||||
uploading: "アップロードをリクエストしたで。アップロードが完了するまで時間がかかるかも分からん、知らんけど。"
|
uploading: "アップロードをリクエストしたで。アップロードが完了するまで時間がかかるかも分からん、知らんけど。"
|
||||||
@@ -1147,7 +1122,7 @@ mobile/views/components/post-form.vue:
|
|||||||
quote-placeholder: "この投稿を持ってくる(オプション)"
|
quote-placeholder: "この投稿を持ってくる(オプション)"
|
||||||
reply-placeholder: "この投稿への返信..."
|
reply-placeholder: "この投稿への返信..."
|
||||||
cw-placeholder: "内容への注釈 (オプション)"
|
cw-placeholder: "内容への注釈 (オプション)"
|
||||||
location-alert: "あんさんのつことる端末は位置情報に対応しとらんみたいやわ、知らんけど。"
|
geolocation-alert: "あんさんのつことる端末は位置情報に対応しとらんみたいやわ、知らんけど。"
|
||||||
error: "エラー"
|
error: "エラー"
|
||||||
username-prompt: "ユーザー名を入力してや"
|
username-prompt: "ユーザー名を入力してや"
|
||||||
mobile/views/components/sub-note-content.vue:
|
mobile/views/components/sub-note-content.vue:
|
||||||
@@ -1168,9 +1143,10 @@ mobile/views/components/ui.nav.vue:
|
|||||||
game: "ゲーム"
|
game: "ゲーム"
|
||||||
admin: "管理"
|
admin: "管理"
|
||||||
about: "Misskeyってなんや?"
|
about: "Misskeyってなんや?"
|
||||||
mobile/views/pages/user-lists.vue:
|
mobile/views/pages/drive.vue:
|
||||||
title: "リスト"
|
contextmenu:
|
||||||
enter-list-name: "リスト名を入力してや"
|
upload: "ファイル上げる"
|
||||||
|
create-folder: "フォルダー作る"
|
||||||
mobile/views/pages/signup.vue:
|
mobile/views/pages/signup.vue:
|
||||||
lets-start: "📦 始めようや"
|
lets-start: "📦 始めようや"
|
||||||
mobile/views/pages/followers.vue:
|
mobile/views/pages/followers.vue:
|
||||||
@@ -1180,10 +1156,9 @@ mobile/views/pages/following.vue:
|
|||||||
mobile/views/pages/home.vue:
|
mobile/views/pages/home.vue:
|
||||||
home: "ホーム"
|
home: "ホーム"
|
||||||
local: "ローカル"
|
local: "ローカル"
|
||||||
hybrid: "ソーシャル"
|
|
||||||
global: "グローバル"
|
global: "グローバル"
|
||||||
mentions: "あんた宛て"
|
mentions: "あんた宛て"
|
||||||
messages: "メッセージ"
|
messages: "ダイレクト投稿"
|
||||||
mobile/views/pages/tag.vue:
|
mobile/views/pages/tag.vue:
|
||||||
no-posts-found: "ハッシュタグ「{q}」が付けられた投稿はあらへんかった。"
|
no-posts-found: "ハッシュタグ「{q}」が付けられた投稿はあらへんかった。"
|
||||||
mobile/views/pages/widgets.vue:
|
mobile/views/pages/widgets.vue:
|
||||||
@@ -1194,10 +1169,6 @@ mobile/views/pages/widgets/activity.vue:
|
|||||||
activity: "やっとること"
|
activity: "やっとること"
|
||||||
mobile/views/pages/share.vue:
|
mobile/views/pages/share.vue:
|
||||||
share-with: "{name}で共有"
|
share-with: "{name}で共有"
|
||||||
mobile/views/pages/received-follow-requests.vue:
|
|
||||||
title: "フォロー許してくれや!"
|
|
||||||
accept: "許す"
|
|
||||||
reject: "許さん"
|
|
||||||
mobile/views/pages/note.vue:
|
mobile/views/pages/note.vue:
|
||||||
title: "投稿"
|
title: "投稿"
|
||||||
prev: "前のやつ"
|
prev: "前のやつ"
|
||||||
@@ -1235,7 +1206,6 @@ deck:
|
|||||||
widgets: "ウィジェット"
|
widgets: "ウィジェット"
|
||||||
home: "ホーム"
|
home: "ホーム"
|
||||||
local: "ローカル"
|
local: "ローカル"
|
||||||
hybrid: "ソーシャル"
|
|
||||||
hashtag: "ハッシュタグ"
|
hashtag: "ハッシュタグ"
|
||||||
global: "グローバル"
|
global: "グローバル"
|
||||||
mentions: "あんた宛て"
|
mentions: "あんた宛て"
|
||||||
@@ -1266,25 +1236,6 @@ deck/deck.user-column.vue:
|
|||||||
docs:
|
docs:
|
||||||
edit-this-page-on-github: "間違いや改善点を見つけましたか?"
|
edit-this-page-on-github: "間違いや改善点を見つけましたか?"
|
||||||
edit-this-page-on-github-link: "このページをGitHubで編集"
|
edit-this-page-on-github-link: "このページをGitHubで編集"
|
||||||
api:
|
|
||||||
entities:
|
|
||||||
properties: "プロパティ"
|
|
||||||
endpoints:
|
|
||||||
params: "パラメータ"
|
|
||||||
no-params: "パラメータはありません"
|
|
||||||
res: "レスポンス"
|
|
||||||
require-credential: "このエンドポイントは認証情報が必須です。"
|
|
||||||
require-permission: "このエンドポイントは{permission}の権限を必要とします。"
|
|
||||||
has-limit: "レートリミットがあります。"
|
|
||||||
duration-limit: "直近{duration}ミリ秒の間のこのエンドポイントへのリクエスト数の合計が{max}を超える場合はリクエストできません。"
|
|
||||||
min-interval-limit: "前回のリクエストから{interval}ミリ秒経っていない場合はリクエストできません。"
|
|
||||||
show-src: "このエンドポイントのソースコードも閲覧できます。"
|
|
||||||
show-src-link: "コードをGitHubで見る"
|
|
||||||
generated: "このドキュメントはAPI定義に基づき自動生成されています。"
|
|
||||||
props:
|
|
||||||
name: "名前"
|
|
||||||
type: "型"
|
|
||||||
description: "説明"
|
|
||||||
dev/views/index.vue:
|
dev/views/index.vue:
|
||||||
manage-apps: "アプリの管理"
|
manage-apps: "アプリの管理"
|
||||||
dev/views/apps.vue:
|
dev/views/apps.vue:
|
||||||
@@ -1295,21 +1246,32 @@ dev/views/new-app.vue:
|
|||||||
create-app: "アプリケーション作る"
|
create-app: "アプリケーション作る"
|
||||||
app-name: "アプリケーションの名前"
|
app-name: "アプリケーションの名前"
|
||||||
app-name-desc: "あんたのアプリの名前。"
|
app-name-desc: "あんたのアプリの名前。"
|
||||||
app-name-ex: "ex) 関西ミスキー保安協会"
|
|
||||||
app-overview: "このアプリどんなん?"
|
app-overview: "このアプリどんなん?"
|
||||||
app-desc: "あんたのアプリどんなんか教えて"
|
|
||||||
app-desc-ex: "ex) 関西人なら誰でも口ずさめるこのCMがついにMisskeyへ。"
|
|
||||||
callback-url: "コールバックURL (無くてもええで)"
|
callback-url: "コールバックURL (無くてもええで)"
|
||||||
callback-url-desc: "ユーザーが認証フォームで認証した後どこに連れてくかを設定できるで"
|
callback-url-desc: "ユーザーが認証フォームで認証した後どこに連れてくかを設定できるで"
|
||||||
authority: "権限"
|
authority: "権限"
|
||||||
authority-desc: "ここにチェックした機能しかAPIからアクセスできひんから気ぃつけてな"
|
authority-desc: "ここにチェックした機能しかAPIからアクセスできひんから気ぃつけてな"
|
||||||
authority-warning: "アプリ作った後でも変えれるけど、新しいやつ追加したらそん時関連付いてるユーザーキーは全部ほかされるで。"
|
authority-warning: "アプリ作った後でも変えれるけど、新しいやつ追加したらそん時関連付いてるユーザーキーは全部ほかされるで。"
|
||||||
account-read: "アカウントの情報見せて"
|
pages:
|
||||||
account-write: "アカウントの情報いじらせて"
|
like: "ええやん"
|
||||||
note-write: "投稿させて"
|
blocks:
|
||||||
reaction-write: "リアクションしたりそれをキャンセルさせて"
|
image: "画像"
|
||||||
following-write: "フォローとかフォロー解除させて"
|
post: "投稿フォーム"
|
||||||
drive-read: "ドライブ見せて"
|
script:
|
||||||
drive-write: "ドライブいじらせて"
|
categories:
|
||||||
notification-read: "通知見せて"
|
random: "いんじゃんほい"
|
||||||
notification-write: "通知いじらせて"
|
list: "リスト"
|
||||||
|
blocks:
|
||||||
|
_join:
|
||||||
|
arg1: "リスト"
|
||||||
|
random: "いんじゃんほい"
|
||||||
|
_randomPick:
|
||||||
|
arg1: "リスト"
|
||||||
|
_dailyRandomPick:
|
||||||
|
arg1: "リスト"
|
||||||
|
_seedRandomPick:
|
||||||
|
arg2: "リスト"
|
||||||
|
_pick:
|
||||||
|
arg1: "リスト"
|
||||||
|
types:
|
||||||
|
array: "リスト"
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ common:
|
|||||||
about: "Misskey를 찾아주셔서 감사합니다. Misskey는 지구에서 태어난 <b>분산 마이크로 블로그 SNS </b> 입니다. Fediverse(다양한 SNS로 구성되는 우주)에 존재하는 다른 SNS와 상호 연결되어 있습니다. 잠시 도시의 번잡함에서 벗어나 새로운 인터넷에 다이브 해 보지 않겠습니까."
|
about: "Misskey를 찾아주셔서 감사합니다. Misskey는 지구에서 태어난 <b>분산 마이크로 블로그 SNS </b> 입니다. Fediverse(다양한 SNS로 구성되는 우주)에 존재하는 다른 SNS와 상호 연결되어 있습니다. 잠시 도시의 번잡함에서 벗어나 새로운 인터넷에 다이브 해 보지 않겠습니까."
|
||||||
intro:
|
intro:
|
||||||
title: "Misskey란?"
|
title: "Misskey란?"
|
||||||
about: "Misskey는 오픈소스 <b>분산형 마이크로블로그 SNS</b>입니다. 다양하고 폭넓게 커스터마이징할 수 있는 UI, 글에 대한 반응, 파일을 관리할 수 있는 드라이브 등의 선진적인 기능을 갖추고 있습니다. 더하여 Fediverse라고 부르는 네트워크에 연결할 수 있어 다른 SNS와도 주고받을 수 있습니다. 예를 들자면, 당신이 무언가를 게시하면, 해당 게시물은 Misskey 뿐만 아니라 다른 SNS에도 전해집니다. 살짝 어떤 행성에서 다른 행성으로 전파를 발신하고 있는 모습을 상상해주세요."
|
about: "Misskey는 오픈소스 <b>분산형 마이크로블로그 SNS</b>입니다. 다양하고 폭넓게 커스터마이징할 수 있는 UI, 글에 대한 리액션, 파일을 관리할 수 있는 드라이브 등의 선진적인 기능을 갖추고 있습니다. 더하여 Fediverse라고 부르는 네트워크에 연결할 수 있어 다른 SNS와도 주고받을 수 있습니다. 예를 들자면, 당신이 무언가를 게시하면, 해당 게시물은 Misskey 뿐만 아니라 다른 SNS에도 전해집니다. 살짝 어떤 행성에서 다른 행성으로 전파를 발신하고 있는 모습을 상상해주세요."
|
||||||
features: "특징"
|
features: "특징"
|
||||||
rich-contents: "글"
|
rich-contents: "글"
|
||||||
rich-contents-desc: "자신의 생각, 화제의 사건, 모두와 공유하고 싶은 것을 올려주세요. 필요한 경우 다양한 스타일을 사용하여 글을 장식하거나 마음에 드는 이미지, 영상 등의 파일이나 투표를 올리는 것도 가능합니다."
|
rich-contents-desc: "자신의 생각, 화제의 사건, 모두와 공유하고 싶은 것을 올려주세요. 필요한 경우 다양한 스타일을 사용하여 글을 장식하거나 마음에 드는 이미지, 영상 등의 파일이나 투표를 올리는 것도 가능합니다."
|
||||||
@@ -34,6 +34,7 @@ common:
|
|||||||
signup: "신규 등록"
|
signup: "신규 등록"
|
||||||
signout: "로그아웃"
|
signout: "로그아웃"
|
||||||
reload-to-apply-the-setting: "이 설정을 적용하려면 페이지를 새로고침해야 합니다. 바로 새로고침하시겠습니까?"
|
reload-to-apply-the-setting: "이 설정을 적용하려면 페이지를 새로고침해야 합니다. 바로 새로고침하시겠습니까?"
|
||||||
|
fetching-as-ap-object: "연합에서 조회 중"
|
||||||
got-it: "알겠습니다"
|
got-it: "알겠습니다"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "커스터마이징 도움말"
|
title: "커스터마이징 도움말"
|
||||||
@@ -61,6 +62,7 @@ common:
|
|||||||
month-and-day: "{month}월 {day}일"
|
month-and-day: "{month}월 {day}일"
|
||||||
trash: "휴지통"
|
trash: "휴지통"
|
||||||
drive: "드라이브"
|
drive: "드라이브"
|
||||||
|
pages: "페이지"
|
||||||
messaging: "대화"
|
messaging: "대화"
|
||||||
home: "홈"
|
home: "홈"
|
||||||
deck: "덱"
|
deck: "덱"
|
||||||
@@ -69,6 +71,27 @@ common:
|
|||||||
following: "팔로우 중"
|
following: "팔로우 중"
|
||||||
followers: "팔로워"
|
followers: "팔로워"
|
||||||
favorites: "즐겨찾기"
|
favorites: "즐겨찾기"
|
||||||
|
permissions:
|
||||||
|
"read:account": "계정 정보 보기"
|
||||||
|
"write:account": "계정 정보 변경"
|
||||||
|
"read:blocks": "차단 보기"
|
||||||
|
"write:blocks": "차단 수정"
|
||||||
|
"read:drive": "드라이브 보기"
|
||||||
|
"write:drive": "드라이브 수정"
|
||||||
|
"read:favorites": "즐겨찾기 보기"
|
||||||
|
"write:favorites": "즐겨찾기 수정"
|
||||||
|
"read:following": "팔로우 정보 보기"
|
||||||
|
"write:following": "팔로잉, 팔로우 수정"
|
||||||
|
"read:messaging": "대화 보기"
|
||||||
|
"write:messaging": "대화 수정"
|
||||||
|
"read:mutes": "뮤트 보기"
|
||||||
|
"write:mutes": "뮤트 수정"
|
||||||
|
"write:notes": "글 작성, 삭제"
|
||||||
|
"read:notifications": "글 보기"
|
||||||
|
"write:notifications": "알림 수정"
|
||||||
|
"read:reactions": "리액션 보기"
|
||||||
|
"write:reactions": "리액션 수정"
|
||||||
|
"write:votes": "투표하기"
|
||||||
empty-timeline-info:
|
empty-timeline-info:
|
||||||
follow-users-to-make-your-timeline: "사용자를 팔로우하면 글이 타임라인에 표시됩니다."
|
follow-users-to-make-your-timeline: "사용자를 팔로우하면 글이 타임라인에 표시됩니다."
|
||||||
explore: "사용자 탐색"
|
explore: "사용자 탐색"
|
||||||
@@ -228,9 +251,9 @@ common:
|
|||||||
update-available-title: "업데이트가 있습니다"
|
update-available-title: "업데이트가 있습니다"
|
||||||
update-available: "Misskey의 새로운 버전이 있습니다 ({newer}. 현재 {current}을 사용 중). 페이지를 다시 로드하면 업데이트가 적용됩니다."
|
update-available: "Misskey의 새로운 버전이 있습니다 ({newer}. 현재 {current}을 사용 중). 페이지를 다시 로드하면 업데이트가 적용됩니다."
|
||||||
my-token-regenerated: "당신의 토큰이 업데이트되었으므로 로그아웃합니다."
|
my-token-regenerated: "당신의 토큰이 업데이트되었으므로 로그아웃합니다."
|
||||||
verified-user: "공식 계정"
|
|
||||||
hide-password: "비밀번호 숨기기"
|
hide-password: "비밀번호 숨기기"
|
||||||
show-password: "비밀번호 표시"
|
show-password: "비밀번호 표시"
|
||||||
|
enter-username: "사용자명을 입력하여 주십시오"
|
||||||
do-not-use-in-production: "이것은 개발 빌드입니다. 프로덕션 환경에서 사용하지 마십시오."
|
do-not-use-in-production: "이것은 개발 빌드입니다. 프로덕션 환경에서 사용하지 마십시오."
|
||||||
user-suspended: "이 사용자는 정지된 상태입니다."
|
user-suspended: "이 사용자는 정지된 상태입니다."
|
||||||
is-remote-user: "이 사용자 정보는 정확하지 않을 수 있습니다."
|
is-remote-user: "이 사용자 정보는 정확하지 않을 수 있습니다."
|
||||||
@@ -271,40 +294,32 @@ common:
|
|||||||
notifications: "알림"
|
notifications: "알림"
|
||||||
users: "추천 사용자"
|
users: "추천 사용자"
|
||||||
polls: "투표"
|
polls: "투표"
|
||||||
post-form: "게시 양식"
|
post-form: "글 입력란"
|
||||||
server: "서버 정보"
|
server: "서버 정보"
|
||||||
nav: "내비게이션"
|
nav: "내비게이션"
|
||||||
tips: "팁"
|
tips: "팁"
|
||||||
hashtags: "해시태그"
|
hashtags: "해시태그"
|
||||||
|
queue: "큐"
|
||||||
dev: "앱을 만드는 데 실패했습니다. 다시 시도하시기 바랍니다."
|
dev: "앱을 만드는 데 실패했습니다. 다시 시도하시기 바랍니다."
|
||||||
ai-chan-kawaii: "아이쨩 귀여워"
|
ai-chan-kawaii: "아이쨩 귀여워"
|
||||||
you: "당신"
|
you: "당신"
|
||||||
auth/views/form.vue:
|
auth/views/form.vue:
|
||||||
share-access: "<i>{name}</i>가 당신의 계정에 엑세스하도록 허용하시겠습니까?"
|
share-access: "<i>{name}</i>가 당신의 계정에 엑세스하도록 허용하시겠습니까?"
|
||||||
permission-ask: "이 앱은 다음의 권한을 요청합니다:"
|
permission-ask: "이 앱은 다음의 권한을 요청합니다:"
|
||||||
account-read: "계정 정보 보기."
|
|
||||||
account-write: "계정 정보의 수정."
|
|
||||||
note-write: "게시하기."
|
|
||||||
like-write: "좋아요 하거나 좋아요 해제하기."
|
|
||||||
following-write: "팔로우하거나 팔로우를 취소하기."
|
|
||||||
drive-read: "드라이브 보기."
|
|
||||||
drive-write: "드라이브의 수정."
|
|
||||||
notification-read: "알림 읽기."
|
|
||||||
notification-write: "알림 수정하기."
|
|
||||||
cancel: "취소"
|
cancel: "취소"
|
||||||
accept: "접근 권한 허용"
|
accept: "접근 권한 허용"
|
||||||
auth/views/index.vue:
|
auth/views/index.vue:
|
||||||
loading: "로드 중"
|
loading: "로드 중"
|
||||||
denied: "어플리케이션의 연계를 취소하였습니다."
|
denied: "애플리케이션의 연계를 취소하였습니다."
|
||||||
denied-paragraph: "이 앱이 당신의 계정에 액세스할 수 없습니다."
|
denied-paragraph: "이 앱이 당신의 계정에 액세스할 수 없습니다."
|
||||||
already-authorized: "이 앱은 이미 연결되어 있습니다."
|
already-authorized: "이 앱은 이미 연결되어 있습니다."
|
||||||
allowed: "어플리케이션의 연동을 허용하였습니다."
|
allowed: "애플리케이션의 연동을 허용하였습니다."
|
||||||
callback-url: "어플리케이션으로 돌아갑니다."
|
callback-url: "애플리케이션으로 돌아갑니다."
|
||||||
please-go-back: "어플리케이션으로 돌아가여 시도하여 주십시오."
|
please-go-back: "애플리케이션으로 돌아가여 시도하여 주십시오."
|
||||||
error: "세션이 존재하지 않습니다."
|
error: "세션이 존재하지 않습니다."
|
||||||
sign-in: "로그인 해주시기 바랍니다"
|
sign-in: "로그인 해주시기 바랍니다"
|
||||||
common/views/pages/explore.vue:
|
common/views/pages/explore.vue:
|
||||||
verified-users: "공식 계정"
|
pinned-users: "고정된 사용자"
|
||||||
popular-users: "인기 사용자"
|
popular-users: "인기 사용자"
|
||||||
recently-updated-users: "최근 게시한 사용자"
|
recently-updated-users: "최근 게시한 사용자"
|
||||||
recently-registered-users: "신규 사용자"
|
recently-registered-users: "신규 사용자"
|
||||||
@@ -434,18 +449,23 @@ common/views/components/messaging.vue:
|
|||||||
search-user: "사용자 찾기"
|
search-user: "사용자 찾기"
|
||||||
you: "당신"
|
you: "당신"
|
||||||
no-history: "기록이 없습니다"
|
no-history: "기록이 없습니다"
|
||||||
|
user: "사용자"
|
||||||
|
group: "그룹"
|
||||||
|
start-with-user: "사용자와 대화 시작"
|
||||||
|
start-with-group: "그룹과 대화 시작"
|
||||||
|
select-group: "그룹을 선택하여 주십시오"
|
||||||
common/views/components/messaging-room.vue:
|
common/views/components/messaging-room.vue:
|
||||||
empty: "이 사용자와 대화한 적이 없습니다"
|
not-talked-user: "이 사용자와의 대화가 없습니다"
|
||||||
|
not-talked-group: "이 그룹과의 대화가 없습니다"
|
||||||
no-history: "이것보다 과거의 기록이 없습니다"
|
no-history: "이것보다 과거의 기록이 없습니다"
|
||||||
resize-form: "드래그하여 폼의 크기 조절"
|
|
||||||
new-message: "새 메시지가 있습니다"
|
new-message: "새 메시지가 있습니다"
|
||||||
only-one-file-attached: "메시지에는 하나의 파일만 첨부할 수 있습니다"
|
only-one-file-attached: "메시지에 첨부할 수 있는 파일은 하나까지입니다"
|
||||||
common/views/components/messaging-room.form.vue:
|
common/views/components/messaging-room.form.vue:
|
||||||
input-message-here: "여기에 메시지를 입력하세요"
|
input-message-here: "여기에 메시지를 입력하세요"
|
||||||
send: "전송"
|
send: "전송"
|
||||||
attach-from-local: "PC에서 파일 첨부"
|
attach-from-local: "PC에서 파일 첨부"
|
||||||
attach-from-drive: "드라이브에서 파일 첨부"
|
attach-from-drive: "드라이브에서 파일 첨부"
|
||||||
only-one-file-attached: "메시지에는 하나의 파일만 첨부할 수 있습니다"
|
only-one-file-attached: "메시지에 첨부할 수 있는 파일은 하나까지입니다"
|
||||||
common/views/components/messaging-room.message.vue:
|
common/views/components/messaging-room.message.vue:
|
||||||
is-read: "읽음"
|
is-read: "읽음"
|
||||||
deleted: "이 메시지는 삭제되었습니다"
|
deleted: "이 메시지는 삭제되었습니다"
|
||||||
@@ -458,6 +478,7 @@ common/views/components/nav.vue:
|
|||||||
repository: "저장소"
|
repository: "저장소"
|
||||||
develop: "개발자"
|
develop: "개발자"
|
||||||
feedback: "피드백"
|
feedback: "피드백"
|
||||||
|
tos: "이용 약관"
|
||||||
common/views/components/note-menu.vue:
|
common/views/components/note-menu.vue:
|
||||||
mention: "멘션"
|
mention: "멘션"
|
||||||
detail: "상세"
|
detail: "상세"
|
||||||
@@ -476,8 +497,12 @@ common/views/components/user-menu.vue:
|
|||||||
mention: "멘션"
|
mention: "멘션"
|
||||||
mute: "뮤트"
|
mute: "뮤트"
|
||||||
unmute: "뮤트 해제"
|
unmute: "뮤트 해제"
|
||||||
|
mute-confirm: "이 사용자를 뮤트하시겠습니까?"
|
||||||
|
unmute-confirm: "이 사용자를 뮤트 해제하시겠습니까?"
|
||||||
block: "차단"
|
block: "차단"
|
||||||
unblock: "차단 해제"
|
unblock: "차단 해제"
|
||||||
|
block-confirm: "이 사용자를 차단하시겠습니까?"
|
||||||
|
unblock-confirm: "이 사용자를 차단 해제하시겠습니까?"
|
||||||
push-to-list: "리스트에 추가"
|
push-to-list: "리스트에 추가"
|
||||||
select-list: "리스트를 선택하여 주십시오"
|
select-list: "리스트를 선택하여 주십시오"
|
||||||
report-abuse: "스팸 신고"
|
report-abuse: "스팸 신고"
|
||||||
@@ -485,8 +510,12 @@ common/views/components/user-menu.vue:
|
|||||||
report-abuse-reported: "관리자에게 보고되었습니다. 협조해주셔서 감사합니다."
|
report-abuse-reported: "관리자에게 보고되었습니다. 협조해주셔서 감사합니다."
|
||||||
silence: "침묵"
|
silence: "침묵"
|
||||||
unsilence: "침묵 해제"
|
unsilence: "침묵 해제"
|
||||||
|
silence-confirm: "이 사용자를 침묵하시겠습니까?"
|
||||||
|
unsilence-confirm: "이 사용자를 침묵 해제하시겠습니까?"
|
||||||
suspend: "정지"
|
suspend: "정지"
|
||||||
unsuspend: "정지 해제"
|
unsuspend: "정지 해제"
|
||||||
|
suspend-confirm: "이 사용자를 정지하시겠습니까?"
|
||||||
|
unsuspend-confirm: "이 사용자를 정지 해제하시겠습니까?"
|
||||||
common/views/components/poll.vue:
|
common/views/components/poll.vue:
|
||||||
vote-to: "\"{}\"에 투표하기"
|
vote-to: "\"{}\"에 투표하기"
|
||||||
vote-count: "{}표"
|
vote-count: "{}표"
|
||||||
@@ -520,7 +549,7 @@ common/views/components/poll-editor.vue:
|
|||||||
hour: "시간"
|
hour: "시간"
|
||||||
day: "일"
|
day: "일"
|
||||||
common/views/components/reaction-picker.vue:
|
common/views/components/reaction-picker.vue:
|
||||||
choose-reaction: "반응 선택"
|
choose-reaction: "리액션 선택"
|
||||||
common/views/components/emoji-picker.vue:
|
common/views/components/emoji-picker.vue:
|
||||||
custom-emoji: "커스텀 이모지"
|
custom-emoji: "커스텀 이모지"
|
||||||
people: "사람들"
|
people: "사람들"
|
||||||
@@ -562,6 +591,8 @@ common/views/components/signup.vue:
|
|||||||
password-matched: "확인되었습니다"
|
password-matched: "확인되었습니다"
|
||||||
password-not-matched: "일치하지 않습니다"
|
password-not-matched: "일치하지 않습니다"
|
||||||
recaptcha: "자동 가입 방지"
|
recaptcha: "자동 가입 방지"
|
||||||
|
agree-to: "{0}에 동의합니다."
|
||||||
|
tos: "이용 약관"
|
||||||
create: "계정 만들기"
|
create: "계정 만들기"
|
||||||
some-error: "알 수 없는 이유로 계정 만들기에 실패했습니다. 다시 한번 시도해 주세요."
|
some-error: "알 수 없는 이유로 계정 만들기에 실패했습니다. 다시 한번 시도해 주세요."
|
||||||
common/views/components/special-message.vue:
|
common/views/components/special-message.vue:
|
||||||
@@ -669,6 +700,29 @@ common/views/components/user-list-editor.vue:
|
|||||||
remove-user: "이 리스트에서 제거"
|
remove-user: "이 리스트에서 제거"
|
||||||
delete-are-you-sure: "리스트 \"$1\"을 삭제하시겠습니까?"
|
delete-are-you-sure: "리스트 \"$1\"을 삭제하시겠습니까?"
|
||||||
deleted: "삭제하였습니다"
|
deleted: "삭제하였습니다"
|
||||||
|
add-user: "사용자 추가"
|
||||||
|
common/views/components/user-group-editor.vue:
|
||||||
|
users: "멤버"
|
||||||
|
rename: "그룹명을 변경"
|
||||||
|
delete: "그룹을 삭제"
|
||||||
|
remove-user: "이 그룹에서 삭제"
|
||||||
|
delete-are-you-sure: "그룹 「$1」을 삭제하시겠습니까?"
|
||||||
|
deleted: "삭제하였습니다"
|
||||||
|
invite: "초대"
|
||||||
|
invited: "초대를 보냈습니다"
|
||||||
|
common/views/components/user-lists.vue:
|
||||||
|
user-lists: "리스트"
|
||||||
|
create-list: "리스트 만들기"
|
||||||
|
list-name: "리스트 이름"
|
||||||
|
common/views/components/user-groups.vue:
|
||||||
|
user-groups: "그룹"
|
||||||
|
create-group: "그룹 만들기"
|
||||||
|
group-name: "그룹명"
|
||||||
|
owned-groups: "자신의 그룹"
|
||||||
|
joined-groups: "참여중인 그룹"
|
||||||
|
invites: "초대"
|
||||||
|
accept-invite: "참여"
|
||||||
|
reject-invite: "거부"
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "확인중"
|
fetching: "확인중"
|
||||||
no-broadcasts: "공지사항이 없습니다"
|
no-broadcasts: "공지사항이 없습니다"
|
||||||
@@ -730,6 +784,10 @@ common/views/pages/follow.vue:
|
|||||||
request-pending: "팔로우 허가 대기중"
|
request-pending: "팔로우 허가 대기중"
|
||||||
follow-processing: "팔로우 처리중"
|
follow-processing: "팔로우 처리중"
|
||||||
follow-request: "팔로우 요청"
|
follow-request: "팔로우 요청"
|
||||||
|
common/views/pages/follow-requests.vue:
|
||||||
|
received-follow-requests: "팔로우 요청"
|
||||||
|
accept: "승인"
|
||||||
|
reject: "거부"
|
||||||
desktop:
|
desktop:
|
||||||
banner-crop-title: "배너로 표시할 부분을 선택"
|
banner-crop-title: "배너로 표시할 부분을 선택"
|
||||||
banner: "배너"
|
banner: "배너"
|
||||||
@@ -839,10 +897,6 @@ desktop/views/components/home.vue:
|
|||||||
desktop/views/input-dialog.vue:
|
desktop/views/input-dialog.vue:
|
||||||
cancel: "취소"
|
cancel: "취소"
|
||||||
ok: "확인"
|
ok: "확인"
|
||||||
desktop/views/components/messaging-room-window.vue:
|
|
||||||
title: "메시지:"
|
|
||||||
desktop/views/components/messaging-window.vue:
|
|
||||||
title: "메시지"
|
|
||||||
desktop/views/components/note-detail.vue:
|
desktop/views/components/note-detail.vue:
|
||||||
private: "이 글은 비공개입니다"
|
private: "이 글은 비공개입니다"
|
||||||
deleted: "이 글은 삭제되었습니다"
|
deleted: "이 글은 삭제되었습니다"
|
||||||
@@ -881,7 +935,6 @@ desktop/views/components/post-form.vue:
|
|||||||
posting: "게시중"
|
posting: "게시중"
|
||||||
attach-media-from-local: "PC에서 미디어 첨부"
|
attach-media-from-local: "PC에서 미디어 첨부"
|
||||||
attach-media-from-drive: "드라이브에서 미디어 첨부"
|
attach-media-from-drive: "드라이브에서 미디어 첨부"
|
||||||
attach-cancel: "첨부 취소"
|
|
||||||
insert-a-kao: "v('ω')v"
|
insert-a-kao: "v('ω')v"
|
||||||
create-poll: "투표 만들기"
|
create-poll: "투표 만들기"
|
||||||
text-remain: "{}문자 남음"
|
text-remain: "{}문자 남음"
|
||||||
@@ -951,7 +1004,7 @@ common/views/components/api-settings.vue:
|
|||||||
sending: "응답을 기다리는 중"
|
sending: "응답을 기다리는 중"
|
||||||
response: "결과"
|
response: "결과"
|
||||||
desktop/views/components/settings.apps.vue:
|
desktop/views/components/settings.apps.vue:
|
||||||
no-apps: "연결된 어플리케이션이 없습니다"
|
no-apps: "연결된 애플리케이션이 없습니다"
|
||||||
common/views/components/drive-settings.vue:
|
common/views/components/drive-settings.vue:
|
||||||
max: "최대 용량"
|
max: "최대 용량"
|
||||||
in-use: "사용중"
|
in-use: "사용중"
|
||||||
@@ -974,6 +1027,10 @@ common/views/components/password-settings.vue:
|
|||||||
not-match: "새 비밀번호가 일치하지 않습니다"
|
not-match: "새 비밀번호가 일치하지 않습니다"
|
||||||
changed: "비밀번호를 변경하였습니다"
|
changed: "비밀번호를 변경하였습니다"
|
||||||
failed: "비밀번호 변경을 실패하였습니다."
|
failed: "비밀번호 변경을 실패하였습니다."
|
||||||
|
common/views/components/post-form-attaches.vue:
|
||||||
|
attach-cancel: "첨부 취소"
|
||||||
|
mark-as-sensitive: "열람주의로 설정"
|
||||||
|
unmark-as-sensitive: "열람주의 해제"
|
||||||
desktop/views/components/sub-note-content.vue:
|
desktop/views/components/sub-note-content.vue:
|
||||||
private: "이 글은 비공개입니다"
|
private: "이 글은 비공개입니다"
|
||||||
deleted: "이 글은 삭제되었습니다"
|
deleted: "이 글은 삭제되었습니다"
|
||||||
@@ -984,15 +1041,13 @@ desktop/views/components/settings.tags.vue:
|
|||||||
query: "쿼리 (생략 가능)"
|
query: "쿼리 (생략 가능)"
|
||||||
add: "추가"
|
add: "추가"
|
||||||
save: "저장"
|
save: "저장"
|
||||||
desktop/views/components/taskmanager.vue:
|
|
||||||
title: "작업 관리자"
|
|
||||||
desktop/views/components/timeline.vue:
|
desktop/views/components/timeline.vue:
|
||||||
home: "홈"
|
home: "홈"
|
||||||
local: "로컬"
|
local: "로컬"
|
||||||
hybrid: "소셜"
|
hybrid: "소셜"
|
||||||
global: "글로벌"
|
global: "글로벌"
|
||||||
mentions: "받은 멘션"
|
mentions: "받은 멘션"
|
||||||
messages: "메시지"
|
messages: "다이렉트 게시글"
|
||||||
list: "리스트"
|
list: "리스트"
|
||||||
hashtag: "해시태그"
|
hashtag: "해시태그"
|
||||||
add-tag-timeline: "해시태그 추가"
|
add-tag-timeline: "해시태그 추가"
|
||||||
@@ -1004,6 +1059,7 @@ desktop/views/components/ui.header.vue:
|
|||||||
desktop/views/components/ui.header.account.vue:
|
desktop/views/components/ui.header.account.vue:
|
||||||
profile: "프로필"
|
profile: "프로필"
|
||||||
lists: "리스트"
|
lists: "리스트"
|
||||||
|
groups: "그룹"
|
||||||
follow-requests: "팔로우 요청"
|
follow-requests: "팔로우 요청"
|
||||||
admin: "관리"
|
admin: "관리"
|
||||||
desktop/views/components/ui.header.nav.vue:
|
desktop/views/components/ui.header.nav.vue:
|
||||||
@@ -1014,14 +1070,6 @@ desktop/views/components/ui.header.post.vue:
|
|||||||
post: "새 글"
|
post: "새 글"
|
||||||
desktop/views/components/ui.header.search.vue:
|
desktop/views/components/ui.header.search.vue:
|
||||||
placeholder: "검색"
|
placeholder: "검색"
|
||||||
desktop/views/components/received-follow-requests-window.vue:
|
|
||||||
title: "팔로우 요청"
|
|
||||||
accept: "승인"
|
|
||||||
reject: "거부"
|
|
||||||
desktop/views/components/user-lists-window.vue:
|
|
||||||
title: "리스트"
|
|
||||||
create-list: "리스트 만들기"
|
|
||||||
list-name: "리스트 이름"
|
|
||||||
desktop/views/components/user-preview.vue:
|
desktop/views/components/user-preview.vue:
|
||||||
notes: "글"
|
notes: "글"
|
||||||
following: "팔로잉"
|
following: "팔로잉"
|
||||||
@@ -1043,7 +1091,6 @@ admin/views/index.vue:
|
|||||||
users: "사용자"
|
users: "사용자"
|
||||||
federation: "연합"
|
federation: "연합"
|
||||||
announcements: "공지사항"
|
announcements: "공지사항"
|
||||||
hashtags: "해시태그"
|
|
||||||
abuse: "스팸 신고"
|
abuse: "스팸 신고"
|
||||||
queue: "작업 대기열"
|
queue: "작업 대기열"
|
||||||
logs: "로그"
|
logs: "로그"
|
||||||
@@ -1070,14 +1117,34 @@ admin/views/instance.vue:
|
|||||||
instance-name: "인스턴스 이름"
|
instance-name: "인스턴스 이름"
|
||||||
instance-description: "인스턴스의 소개"
|
instance-description: "인스턴스의 소개"
|
||||||
host: "관리자"
|
host: "관리자"
|
||||||
|
icon-url: "아이콘 URL"
|
||||||
|
logo-url: "로고 URL"
|
||||||
banner-url: "배너 이미지 URL"
|
banner-url: "배너 이미지 URL"
|
||||||
error-image-url: "오류 이미지 URL"
|
error-image-url: "오류 이미지 URL"
|
||||||
languages: "인스턴스의 대상 언어"
|
languages: "인스턴스의 대상 언어"
|
||||||
languages-desc: "공백으로 구분하여 여러 개 설정할 수 있습니다."
|
languages-desc: "공백으로 구분하여 여러 개 설정할 수 있습니다."
|
||||||
|
tos-url: "이용약관 URL"
|
||||||
|
repository-url: "저장소 URL"
|
||||||
|
feedback-url: "피드백 URL"
|
||||||
maintainer-config: "관리자 정보"
|
maintainer-config: "관리자 정보"
|
||||||
maintainer-name: "관리자 이름"
|
maintainer-name: "관리자 이름"
|
||||||
maintainer-email: "관리자 연락처"
|
maintainer-email: "관리자 연락처"
|
||||||
|
advanced-config: "그 외 설정"
|
||||||
|
note-and-tl: "글과 타임라인"
|
||||||
drive-config: "드라이브 설정"
|
drive-config: "드라이브 설정"
|
||||||
|
use-object-storage: "오브젝트 스토리지를 사용"
|
||||||
|
object-storage-base-url: "URL"
|
||||||
|
object-storage-bucket: "버킷 이름"
|
||||||
|
object-storage-prefix: "프리픽스"
|
||||||
|
object-storage-endpoint: "엔드포인트"
|
||||||
|
object-storage-region: "리전"
|
||||||
|
object-storage-port: "포트"
|
||||||
|
object-storage-access-key: "액세스 키"
|
||||||
|
object-storage-secret-key: "시크릿 키"
|
||||||
|
object-storage-use-ssl: "SSL 사용"
|
||||||
|
object-storage-s3-info: "Amazon S3를 오브젝트 스토리지로 사용하는 경우의 「엔드포인트」와 「리전」의 설정값에 대해서는 {0}을 확인하여 주십시오."
|
||||||
|
object-storage-s3-info-here: "이곳"
|
||||||
|
object-storage-gcs-info: "Google Cloud Storage를 오브젝트 스토리지로 사용하는 경우, 「엔드포인트」는 storage.googleapis.com 으로 설정하고, 「리전」 란은 비웁니다."
|
||||||
cache-remote-files: "원격 파일을 캐시"
|
cache-remote-files: "원격 파일을 캐시"
|
||||||
cache-remote-files-desc: "이 설정을 해지하면 원격 파일을 캐시하지 않고 해당 파일을 직접 링크하게 됩니다. 그에 따라 서버의 저장 공간을 절약할 수 있지만, 프라이버시 설정에서 직접 링크를 무효로 설정한 사용자에게는 파일이 보이지 않거나, 썸네일이 생성되지 않기 때문에 통신량이 증가합니다. 일반적으로 이 설정을 ON으로 두는 것을 추천합니다."
|
cache-remote-files-desc: "이 설정을 해지하면 원격 파일을 캐시하지 않고 해당 파일을 직접 링크하게 됩니다. 그에 따라 서버의 저장 공간을 절약할 수 있지만, 프라이버시 설정에서 직접 링크를 무효로 설정한 사용자에게는 파일이 보이지 않거나, 썸네일이 생성되지 않기 때문에 통신량이 증가합니다. 일반적으로 이 설정을 ON으로 두는 것을 추천합니다."
|
||||||
local-drive-capacity-mb: "로컬 사용자 한 명당 드라이브 용량"
|
local-drive-capacity-mb: "로컬 사용자 한 명당 드라이브 용량"
|
||||||
@@ -1086,8 +1153,12 @@ admin/views/instance.vue:
|
|||||||
recaptcha-config: "reCAPCHA 설정"
|
recaptcha-config: "reCAPCHA 설정"
|
||||||
recaptcha-info: "reCAPCHA를 사용하도록 설정하는 경우 reCAPCHA 토큰을 확보해야 합니다. https://www.google.com/recaptcha/intro/ 에 접속하여 토큰을 가져와주십시오."
|
recaptcha-info: "reCAPCHA를 사용하도록 설정하는 경우 reCAPCHA 토큰을 확보해야 합니다. https://www.google.com/recaptcha/intro/ 에 접속하여 토큰을 가져와주십시오."
|
||||||
enable-recaptcha: "reCAPCHA 활성화"
|
enable-recaptcha: "reCAPCHA 활성화"
|
||||||
recaptcha-site-key: "reCAPTCHA site key"
|
recaptcha-site-key: "사이트 키"
|
||||||
recaptcha-secret-key: "reCAPTCHA secret key"
|
recaptcha-secret-key: "시크릿 키"
|
||||||
|
recaptcha-preview: "미리보기"
|
||||||
|
hidden-tags: "숨긴 해시태그"
|
||||||
|
hidden-tags-info: "집계에서 제외할 해시태그를 줄 바꿈으로 구분하여 기술합니다."
|
||||||
|
external-service-integration-config: "외부 서비스 연계"
|
||||||
twitter-integration-config: "Twitter 연동 설정"
|
twitter-integration-config: "Twitter 연동 설정"
|
||||||
twitter-integration-info: "콜백 URL은 {url} 로 설정됩니다."
|
twitter-integration-info: "콜백 URL은 {url} 로 설정됩니다."
|
||||||
enable-twitter-integration: "트위터 연동 활성화"
|
enable-twitter-integration: "트위터 연동 활성화"
|
||||||
@@ -1113,15 +1184,13 @@ admin/views/instance.vue:
|
|||||||
disable-local-timeline: "로컬 타임라인 비활성화"
|
disable-local-timeline: "로컬 타임라인 비활성화"
|
||||||
disable-global-timeline: "글로벌 타임라인 비활성화"
|
disable-global-timeline: "글로벌 타임라인 비활성화"
|
||||||
disabling-timelines-info: "이 타임라인들을 비활성화해도 관리자 및 모더레이터는 계속 사용할 수 있습니다."
|
disabling-timelines-info: "이 타임라인들을 비활성화해도 관리자 및 모더레이터는 계속 사용할 수 있습니다."
|
||||||
|
enable-emoji-reaction: "리액션에 이모지를 사용할 수 있게 함"
|
||||||
|
use-star-for-reaction-fallback: "알 수 없는 리액션을 star로 대체하여 사용"
|
||||||
invite: "초대"
|
invite: "초대"
|
||||||
save: "저장"
|
save: "저장"
|
||||||
saved: "저장하였습니다"
|
saved: "저장하였습니다"
|
||||||
user-recommendation-config: "추천 사용자"
|
pinned-users: "고정된 사용자"
|
||||||
enable-external-user-recommendation: "외부 사용자 추천 활성화"
|
pinned-users-info: "고정해두고 싶은 사용자를 줄바꿈으로 구분하여 기술합니다."
|
||||||
external-user-recommendation-engine: "엔진"
|
|
||||||
external-user-recommendation-engine-desc: "예: https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}"
|
|
||||||
external-user-recommendation-timeout: "타임 아웃"
|
|
||||||
external-user-recommendation-timeout-desc: "밀리초 (예: 300000)"
|
|
||||||
email-config: "메일 서버 설정"
|
email-config: "메일 서버 설정"
|
||||||
email-config-info: "메일 주소 확인 혹은 비밀번호 재설정에 사용 됩니다."
|
email-config-info: "메일 주소 확인 혹은 비밀번호 재설정에 사용 됩니다."
|
||||||
enable-email: "메일 발신 활성화"
|
enable-email: "메일 발신 활성화"
|
||||||
@@ -1202,15 +1271,13 @@ admin/views/users.vue:
|
|||||||
unsuspend-confirm: "정지를 해제하시겠습니까?"
|
unsuspend-confirm: "정지를 해제하시겠습니까?"
|
||||||
unsuspended: "정지를 해제하였습니다"
|
unsuspended: "정지를 해제하였습니다"
|
||||||
make-silence: "침묵"
|
make-silence: "침묵"
|
||||||
|
silence-confirm: "침묵으로 설정합니까?"
|
||||||
unmake-silence: "침묵 해제"
|
unmake-silence: "침묵 해제"
|
||||||
verify: "공식 계정으로 설정"
|
unsilence-confirm: "침묵 해제하시겠습니까?"
|
||||||
verify-confirm: "공식 계정으로 설정하시겠습니까?"
|
|
||||||
verified: "공식 계정으로 설정하였습니다"
|
|
||||||
unverify: "공식 계정 해제"
|
|
||||||
unverify-confirm: "공식 계정을 해제하시겠습니까?"
|
|
||||||
unverified: "공식 계정을 해제하였습니다"
|
|
||||||
update-remote-user: "원격 사용자 정보 갱신"
|
update-remote-user: "원격 사용자 정보 갱신"
|
||||||
remote-user-updated: "원격 사용자 정보를 갱신하였습니다"
|
remote-user-updated: "원격 사용자 정보를 갱신하였습니다"
|
||||||
|
delete-all-files: "모든 파일 삭제"
|
||||||
|
delete-all-files-confirm: "모든 파일을 삭제하시겠습니까?"
|
||||||
users:
|
users:
|
||||||
title: "사용자"
|
title: "사용자"
|
||||||
sort:
|
sort:
|
||||||
@@ -1225,7 +1292,6 @@ admin/views/users.vue:
|
|||||||
admin: "관리자"
|
admin: "관리자"
|
||||||
moderator: "모더레이터"
|
moderator: "모더레이터"
|
||||||
adminOrModerator: "관리자+모더레이터"
|
adminOrModerator: "관리자+모더레이터"
|
||||||
verified: "공식 계정"
|
|
||||||
silenced: "침묵됨"
|
silenced: "침묵됨"
|
||||||
suspended: "정지됨"
|
suspended: "정지됨"
|
||||||
origin:
|
origin:
|
||||||
@@ -1287,6 +1353,7 @@ admin/views/federation.vue:
|
|||||||
latest-request-received-at: "마지막으로 요청을 받은 시간"
|
latest-request-received-at: "마지막으로 요청을 받은 시간"
|
||||||
remove-all-following: "모든 팔로잉 해제"
|
remove-all-following: "모든 팔로잉 해제"
|
||||||
remove-all-following-info: "{host}(으)로부터 모든 팔로잉을 해제합니다. 해당 인스턴스가 더 이상 존재하지 않게 된 경우 등에 실행하십시오."
|
remove-all-following-info: "{host}(으)로부터 모든 팔로잉을 해제합니다. 해당 인스턴스가 더 이상 존재하지 않게 된 경우 등에 실행하십시오."
|
||||||
|
delete-all-files: "파일을 모두 삭제"
|
||||||
block: "차단"
|
block: "차단"
|
||||||
marked-as-closed: "폐쇄된 것으로 표시"
|
marked-as-closed: "폐쇄된 것으로 표시"
|
||||||
lookup: "조회"
|
lookup: "조회"
|
||||||
@@ -1333,6 +1400,8 @@ admin/views/federation.vue:
|
|||||||
chart-spans:
|
chart-spans:
|
||||||
hour: "1시간마다"
|
hour: "1시간마다"
|
||||||
day: "1일마다"
|
day: "1일마다"
|
||||||
|
blocked-hosts: "차단"
|
||||||
|
blocked-hosts-info: "차단할 호스트를 줄바꿈으로 구분하여 기술합니다."
|
||||||
desktop/views/pages/welcome.vue:
|
desktop/views/pages/welcome.vue:
|
||||||
about: "자세히..."
|
about: "자세히..."
|
||||||
timeline: "타임라인"
|
timeline: "타임라인"
|
||||||
@@ -1387,8 +1456,6 @@ desktop/views/pages/user/user.timeline.vue:
|
|||||||
with-replies: "글과 답글"
|
with-replies: "글과 답글"
|
||||||
with-media: "미디어"
|
with-media: "미디어"
|
||||||
my-posts: "내 글"
|
my-posts: "내 글"
|
||||||
desktop/views/widgets/messaging.vue:
|
|
||||||
title: "메시지"
|
|
||||||
desktop/views/widgets/notifications.vue:
|
desktop/views/widgets/notifications.vue:
|
||||||
title: "알림"
|
title: "알림"
|
||||||
desktop/views/widgets/polls.vue:
|
desktop/views/widgets/polls.vue:
|
||||||
@@ -1398,6 +1465,7 @@ desktop/views/widgets/polls.vue:
|
|||||||
desktop/views/widgets/post-form.vue:
|
desktop/views/widgets/post-form.vue:
|
||||||
title: "글쓰기"
|
title: "글쓰기"
|
||||||
note: "글쓰기"
|
note: "글쓰기"
|
||||||
|
something-happened: "알 수 없는 문제로 글을 게시할 수 없습니다."
|
||||||
desktop/views/widgets/profile.vue:
|
desktop/views/widgets/profile.vue:
|
||||||
update-banner: "클릭하여 배너 변경"
|
update-banner: "클릭하여 배너 변경"
|
||||||
update-avatar: "클릭하여 아바타 변경"
|
update-avatar: "클릭하여 아바타 변경"
|
||||||
@@ -1416,12 +1484,11 @@ mobile/views/components/drive.vue:
|
|||||||
file-count: "파일"
|
file-count: "파일"
|
||||||
nothing-in-drive: "드라이브에 아무것도 없습니다"
|
nothing-in-drive: "드라이브에 아무것도 없습니다"
|
||||||
folder-is-empty: "폴더가 비어있습니다"
|
folder-is-empty: "폴더가 비어있습니다"
|
||||||
prompt: "무엇을 하시겠습니까? (숫자를 입력하여 주십시오): <1 → 파일 업로드 | 2 → 파일을 URL에서 업로드 | 3 → 폴더 만들기 | 4 → 이 폴더의 이름을 변경 | 5 → 현재 폴더 이동| 6 → 현재 폴더 삭제>"
|
|
||||||
deletion-alert: "죄송합니다! 폴더 삭제는 아직 구현되지 않았습니다..."
|
|
||||||
folder-name: "폴더 이름"
|
folder-name: "폴더 이름"
|
||||||
here-is-root: "현재 경로는 루트 경로로 폴더가 아닙니다."
|
here-is-root: "현재 경로는 루트 경로로 폴더가 아닙니다."
|
||||||
url-prompt: "업로드 하려는 파일의 URL"
|
url-prompt: "업로드 하려는 파일의 URL"
|
||||||
uploading: "업로드를 요청하였습니다. 업로드가 완료될 때까지 시간이 소요될 수 있습니다."
|
uploading: "업로드를 요청하였습니다. 업로드가 완료될 때까지 시간이 소요될 수 있습니다."
|
||||||
|
folder-name-cannot-empty: "폴더 이름은 비워둘 수 없습니다."
|
||||||
mobile/views/components/drive-file-chooser.vue:
|
mobile/views/components/drive-file-chooser.vue:
|
||||||
select-file: "파일 선택"
|
select-file: "파일 선택"
|
||||||
mobile/views/components/drive-folder-chooser.vue:
|
mobile/views/components/drive-folder-chooser.vue:
|
||||||
@@ -1474,7 +1541,7 @@ mobile/views/components/post-form.vue:
|
|||||||
quote-placeholder: "이 글을 인용... (선택적)"
|
quote-placeholder: "이 글을 인용... (선택적)"
|
||||||
reply-placeholder: "이 글에 답글..."
|
reply-placeholder: "이 글에 답글..."
|
||||||
cw-placeholder: "내용 주석 (선택적)"
|
cw-placeholder: "내용 주석 (선택적)"
|
||||||
location-alert: "사용하시는 장치가 위치정보 기능에 대응하지 않습니다"
|
geolocation-alert: "사용하시는 장치가 위치정보 기능에 대응하지 않습니다"
|
||||||
error: "오류"
|
error: "오류"
|
||||||
username-prompt: "사용자명을 입력하여 주십시오"
|
username-prompt: "사용자명을 입력하여 주십시오"
|
||||||
mobile/views/components/sub-note-content.vue:
|
mobile/views/components/sub-note-content.vue:
|
||||||
@@ -1491,13 +1558,19 @@ mobile/views/components/ui.nav.vue:
|
|||||||
follow-requests: "팔로우 요청"
|
follow-requests: "팔로우 요청"
|
||||||
search: "검색"
|
search: "검색"
|
||||||
user-lists: "리스트"
|
user-lists: "리스트"
|
||||||
|
user-groups: "그룹"
|
||||||
widgets: "위젯"
|
widgets: "위젯"
|
||||||
game: "게임"
|
game: "게임"
|
||||||
admin: "관리"
|
admin: "관리"
|
||||||
about: "Misskey에 대하여"
|
about: "Misskey에 대하여"
|
||||||
mobile/views/pages/user-lists.vue:
|
mobile/views/pages/drive.vue:
|
||||||
title: "리스트"
|
contextmenu:
|
||||||
enter-list-name: "리스트명을 입력하십시오"
|
upload: "파일 업로드"
|
||||||
|
url-upload: "파일을 URL로부터 업로드"
|
||||||
|
create-folder: "폴더 만들기"
|
||||||
|
rename-folder: "폴더 이름 바꾸기"
|
||||||
|
move-folder: "이 폴더를 이동"
|
||||||
|
delete-folder: "이 폴더를 삭제"
|
||||||
mobile/views/pages/signup.vue:
|
mobile/views/pages/signup.vue:
|
||||||
lets-start: "📦 이제 시작해도 됩니다"
|
lets-start: "📦 이제 시작해도 됩니다"
|
||||||
mobile/views/pages/followers.vue:
|
mobile/views/pages/followers.vue:
|
||||||
@@ -1510,7 +1583,7 @@ mobile/views/pages/home.vue:
|
|||||||
hybrid: "소셜"
|
hybrid: "소셜"
|
||||||
global: "글로벌"
|
global: "글로벌"
|
||||||
mentions: "받은 멘션"
|
mentions: "받은 멘션"
|
||||||
messages: "메시지"
|
messages: "다이렉트 게시글"
|
||||||
mobile/views/pages/tag.vue:
|
mobile/views/pages/tag.vue:
|
||||||
no-posts-found: "해시태그 \"{q}\"가 붙은 글을 찾을 수 없습니다."
|
no-posts-found: "해시태그 \"{q}\"가 붙은 글을 찾을 수 없습니다."
|
||||||
mobile/views/pages/widgets.vue:
|
mobile/views/pages/widgets.vue:
|
||||||
@@ -1522,10 +1595,6 @@ mobile/views/pages/widgets/activity.vue:
|
|||||||
activity: "활동"
|
activity: "활동"
|
||||||
mobile/views/pages/share.vue:
|
mobile/views/pages/share.vue:
|
||||||
share-with: "{name}(으)로 공유"
|
share-with: "{name}(으)로 공유"
|
||||||
mobile/views/pages/received-follow-requests.vue:
|
|
||||||
title: "팔로우 요청"
|
|
||||||
accept: "승인"
|
|
||||||
reject: "거부"
|
|
||||||
mobile/views/pages/note.vue:
|
mobile/views/pages/note.vue:
|
||||||
title: "글"
|
title: "글"
|
||||||
prev: "이전 글"
|
prev: "이전 글"
|
||||||
@@ -1598,25 +1667,6 @@ deck/deck.user-column.vue:
|
|||||||
docs:
|
docs:
|
||||||
edit-this-page-on-github: "틀린 점이나 개선할 점을 찾으셨나요?"
|
edit-this-page-on-github: "틀린 점이나 개선할 점을 찾으셨나요?"
|
||||||
edit-this-page-on-github-link: "이 페이지를 GitHub에서 편집"
|
edit-this-page-on-github-link: "이 페이지를 GitHub에서 편집"
|
||||||
api:
|
|
||||||
entities:
|
|
||||||
properties: "프로퍼티"
|
|
||||||
endpoints:
|
|
||||||
params: "매개변수"
|
|
||||||
no-params: "매개변수가 없습니다"
|
|
||||||
res: "응답"
|
|
||||||
require-credential: "이 엔드포인트는 인증 정보가 필수적입니다."
|
|
||||||
require-permission: "이 엔드포인트는 {permission} 권한을 필요로 합니다."
|
|
||||||
has-limit: "Rate limit(요청 비율 제한)이 있습니다."
|
|
||||||
duration-limit: "최근 {duration} 밀리초 사이에 엔드포인트로의 요청 수의 합계가 {max}를 넘는 경우 요청이 불가능합니다."
|
|
||||||
min-interval-limit: "이전 요청으로부터 {interval} 밀리초가 지나지 않은 경우 요청할 수 없습니다."
|
|
||||||
show-src: "이 엔드포인트에 대한 소스코드를 확인할 수 있습니다."
|
|
||||||
show-src-link: "코드를 Github에서 보기"
|
|
||||||
generated: "이 문서는 API 정의를 기반으로 자동으로 생성됩니다."
|
|
||||||
props:
|
|
||||||
name: "이름"
|
|
||||||
type: "자료형"
|
|
||||||
description: "설명"
|
|
||||||
dev/views/index.vue:
|
dev/views/index.vue:
|
||||||
manage-apps: "앱 관리"
|
manage-apps: "앱 관리"
|
||||||
dev/views/apps.vue:
|
dev/views/apps.vue:
|
||||||
@@ -1624,24 +1674,273 @@ dev/views/apps.vue:
|
|||||||
create-app: "앱 생성"
|
create-app: "앱 생성"
|
||||||
app-missing: "앱 없음"
|
app-missing: "앱 없음"
|
||||||
dev/views/new-app.vue:
|
dev/views/new-app.vue:
|
||||||
create-app: "어플리케이션 생성"
|
new-app: "새 애플리케이션"
|
||||||
app-name: "어플리케이션 이름"
|
new-app-info: "애플리케이션은 API에서도 생성할 수 있습니다. (app/create)"
|
||||||
|
create-app: "애플리케이션 생성"
|
||||||
|
app-name: "애플리케이션 이름"
|
||||||
|
app-name-placeholder: "ex) Misskey for iOS"
|
||||||
app-name-desc: "앱의 이름."
|
app-name-desc: "앱의 이름."
|
||||||
app-name-ex: "ex) Misskey for iOS"
|
|
||||||
app-overview: "앱 개요"
|
app-overview: "앱 개요"
|
||||||
app-desc: "어플리케이션에 대한 간단한 설명."
|
app-overview-placeholder: "ex) Misskey iOS 클라이언트."
|
||||||
app-desc-ex: "ex) Misskey iOS 클라이언트."
|
app-overview-desc: "애플리케이션에 대한 간단한 설명이나 소개"
|
||||||
callback-url: "콜백 URL (옵션)"
|
callback-url: "콜백 URL (옵션)"
|
||||||
|
callback-url-placeholder: "ex) https://your.app.example.com/callback.php"
|
||||||
callback-url-desc: "사용자가 인증 폼에서 인증한 뒤 리다이렉트할 URL을 설정합니다."
|
callback-url-desc: "사용자가 인증 폼에서 인증한 뒤 리다이렉트할 URL을 설정합니다."
|
||||||
authority: "권한"
|
authority: "권한"
|
||||||
authority-desc: "이곳에서 요청한 권한에 한정하여 API로 액세스할 수 있습니다."
|
authority-desc: "이곳에서 요청한 권한에 한정하여 API로 액세스할 수 있습니다."
|
||||||
authority-warning: "앱을 생성한 뒤에도 변경할 수 있지만, 새로운 권한을 설정하는 경우 그 시점부터 예전에 발급받았던 유저 키는 모두 무효화됩니다."
|
authority-warning: "앱을 생성한 뒤에도 변경할 수 있지만, 새로운 권한을 설정하는 경우 그 시점부터 예전에 발급받았던 유저 키는 모두 무효화됩니다."
|
||||||
account-read: "계정 정보 보기."
|
pages:
|
||||||
account-write: "계정 정보 편집."
|
new-page: "페이지 만들기"
|
||||||
note-write: "글 쓰기."
|
edit-page: "페이지 수정"
|
||||||
reaction-write: "리액션을 하거나 리액션을 취소할 수 있음."
|
read-page: "소스 표시중"
|
||||||
following-write: "팔로우하거나 팔로우 해제하기."
|
page-created: "페이지를 만들었습니다"
|
||||||
drive-read: "드라이브 보기."
|
page-updated: "페이지를 수정했습니다"
|
||||||
drive-write: "드라이브를 조작."
|
are-you-sure-delete: "이 페이지를 삭제하시겠습니까?"
|
||||||
notification-read: "알림 보기."
|
page-deleted: "페이지가 삭제되었습니다"
|
||||||
notification-write: "알림 조작."
|
edit-this-page: "이 페이지를 편집"
|
||||||
|
view-source: "소스 보기"
|
||||||
|
view-page: "페이지 보기"
|
||||||
|
like: "좋아요"
|
||||||
|
unlike: "좋아요 해제"
|
||||||
|
liked-pages: "좋아요한 페이지"
|
||||||
|
my-pages: "내 페이지"
|
||||||
|
inspector: "인스펙터"
|
||||||
|
content: "페이지 블록"
|
||||||
|
variables: "변수"
|
||||||
|
variables-info: "변수를 사용하면 동적인 페이지를 만들 수 있습니다. 텍스트에 <b>{ 변수명 }</b>을 적으면 그 위치에 변수의 값을 집어넣습니다. 예를 들자면 <b>Hello { thing } world!</b> 라는 텍스트가 있을 때, 변수(thing)의 값이 <b>ai</b>인 경우 텍스트는 <b>Hello ai world!</b>가 됩니다."
|
||||||
|
variables-info2: "변수의 평가(값을 산출해내는 것)는 위에서부터 아래로 진행되므로 어떤 변수의 내부에서 자신보다 아래에 있는 변수를 참조할 수는 없습니다. 예를 들자면 위에서부터 <b>A, B, C</b>의 3개의 변수가 정의되어 있을 때, <b>C</b>의 내부에 <b>A</b>나 <b>B</b>를 참조할 수는 있지만, <b>A</b>의 내부에서 <b>B</b>나 <b>C</b>를 참조할 수는 없습니다."
|
||||||
|
variables-info3: "사용자로부터 입력을 받으려면, 페이지에 「사용자 입력」 블록을 삽입하고 「변수명」에 입력받은 값을 저장하고 싶은 변수명을 설정합니다 (변수는 자동으로 생성됩니다). 그 변수를 사용하여 사용자 입력에 따라 동작할 수 있습니다."
|
||||||
|
variables-info4: "함수를 사용하면 반복되는 작업을 손쉽게 처리할 수 있습니다. 함수를 만드시려면 「함수」 타입의 변수를 만듭니다. 함수에서 슬롯(인수)를 받도록 설정하면, 함수를 사용할 때 슬롯에 입력된 값을 함수 안에서 변수로써 이용할 수 있게 됩니다. 또한, AiScript 표준에는 함수를 인수로 받는 함수(고차함수)도 존재합니다. 함수를 미리 정의하는 것 외에, 이와 같은 고차함수를 즉석으로 설정할 수 있습니다."
|
||||||
|
more-details: "자세한 설명"
|
||||||
|
title: "제목"
|
||||||
|
url: "페이지 URL"
|
||||||
|
summary: "페이지 요약"
|
||||||
|
align-center: "가운데 정렬"
|
||||||
|
font: "글꼴"
|
||||||
|
fontSerif: "세리프"
|
||||||
|
fontSansSerif: "산 세리프"
|
||||||
|
set-eye-catching-image: "아이캐치 이미지를 설정"
|
||||||
|
remove-eye-catching-image: "아이캐치 이미지를 삭제"
|
||||||
|
choose-block: "블록 추가"
|
||||||
|
select-type: "종류 선택"
|
||||||
|
enter-variable-name: "변수명을 설정해주십시오"
|
||||||
|
the-variable-name-is-already-used: "그 변수명은 이미 사용중입니다"
|
||||||
|
content-blocks: "콘텐츠"
|
||||||
|
input-blocks: "입력"
|
||||||
|
special-blocks: "특수"
|
||||||
|
post-from-post-form: "이 내용을 올리기"
|
||||||
|
posted-from-post-form: "게시하였습니다"
|
||||||
|
blocks:
|
||||||
|
text: "텍스트"
|
||||||
|
textarea: "텍스트 영역"
|
||||||
|
section: "섹션"
|
||||||
|
image: "이미지"
|
||||||
|
button: "버튼"
|
||||||
|
if: "만약"
|
||||||
|
_if:
|
||||||
|
variable: "변수"
|
||||||
|
post: "글 입력란"
|
||||||
|
_post:
|
||||||
|
text: "내용"
|
||||||
|
textInput: "텍스트 입력"
|
||||||
|
_textInput:
|
||||||
|
name: "변수명"
|
||||||
|
text: "제목"
|
||||||
|
default: "기본값"
|
||||||
|
textareaInput: "여러 줄 텍스트 입력"
|
||||||
|
_textareaInput:
|
||||||
|
name: "변수명"
|
||||||
|
text: "제목"
|
||||||
|
default: "기본값"
|
||||||
|
numberInput: "수치 입력"
|
||||||
|
_numberInput:
|
||||||
|
name: "변수명"
|
||||||
|
text: "제목"
|
||||||
|
default: "기본값"
|
||||||
|
switch: "스위치"
|
||||||
|
_switch:
|
||||||
|
name: "변수명"
|
||||||
|
text: "제목"
|
||||||
|
default: "기본값"
|
||||||
|
counter: "카운터"
|
||||||
|
_counter:
|
||||||
|
name: "변수명"
|
||||||
|
text: "제목"
|
||||||
|
inc: "증가치"
|
||||||
|
_button:
|
||||||
|
text: "제목"
|
||||||
|
action: "버튼을 눌렀을 때의 동작"
|
||||||
|
_action:
|
||||||
|
dialog: "대화상자를 표시"
|
||||||
|
_dialog:
|
||||||
|
content: "내용"
|
||||||
|
resetRandom: "난수를 초기화"
|
||||||
|
script:
|
||||||
|
categories:
|
||||||
|
flow: "흐름 제어"
|
||||||
|
logical: "논리 연산"
|
||||||
|
operation: "계산"
|
||||||
|
comparison: "비교"
|
||||||
|
random: "랜덤"
|
||||||
|
value: "값"
|
||||||
|
fn: "함수"
|
||||||
|
text: "텍스트 조작"
|
||||||
|
convert: "변환"
|
||||||
|
list: "리스트"
|
||||||
|
blocks:
|
||||||
|
text: "텍스트"
|
||||||
|
multiLineText: "텍스트 (여러줄)"
|
||||||
|
textList: "텍스트 목록"
|
||||||
|
_textList:
|
||||||
|
info: "각각을 줄 바꿈으로 구분해주십시오"
|
||||||
|
strLen: "텍스트의 길이"
|
||||||
|
_strLen:
|
||||||
|
arg1: "텍스트"
|
||||||
|
strPick: "문자 추출"
|
||||||
|
_strPick:
|
||||||
|
arg1: "텍스트"
|
||||||
|
arg2: "문자 위치"
|
||||||
|
strReplace: "텍스트 치환"
|
||||||
|
_strReplace:
|
||||||
|
arg1: "텍스트"
|
||||||
|
arg2: "치환 전"
|
||||||
|
arg3: "치환 후"
|
||||||
|
strReverse: "텍스트 뒤집기"
|
||||||
|
_strReverse:
|
||||||
|
arg1: "텍스트"
|
||||||
|
join: "텍스트 접합"
|
||||||
|
_join:
|
||||||
|
arg1: "리스트"
|
||||||
|
arg2: "구분자"
|
||||||
|
add: "+ 더하기"
|
||||||
|
_add:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
subtract: "- 빼기"
|
||||||
|
_subtract:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
multiply: "× 곱하기"
|
||||||
|
_multiply:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
divide: "÷ 나누기"
|
||||||
|
_divide:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
remind: "÷ 나눈 나머지"
|
||||||
|
_remind:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
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: "위치"
|
||||||
|
number: "수치"
|
||||||
|
stringToNumber: "텍스트를 수치로"
|
||||||
|
_stringToNumber:
|
||||||
|
arg1: "텍스트"
|
||||||
|
numberToString: "수치를 텍스트로"
|
||||||
|
_numberToString:
|
||||||
|
arg1: "수치"
|
||||||
|
splitStrByLine: "텍스트를 행 단위로 분할"
|
||||||
|
_splitStrByLine:
|
||||||
|
arg1: "텍스트"
|
||||||
|
ref: "변수"
|
||||||
|
fn: "함수"
|
||||||
|
_fn:
|
||||||
|
slots: "슬롯"
|
||||||
|
slots-info: "각 슬롯을 줄 바꿈으로 구분하여 주십시오"
|
||||||
|
arg1: "출력"
|
||||||
|
for: "반복"
|
||||||
|
_for:
|
||||||
|
arg1: "횟수"
|
||||||
|
arg2: "처리"
|
||||||
|
typeError: "슬롯 {slot}은 \"{expect}\"를 사용할 수 있지만 \"{actual}이 들어있습니다!"
|
||||||
|
thereIsEmptySlot: "슬롯 {slot}이(가) 비었습니다!"
|
||||||
|
types:
|
||||||
|
string: "텍스트"
|
||||||
|
number: "수치"
|
||||||
|
boolean: "플래그"
|
||||||
|
array: "리스트"
|
||||||
|
stringArray: "텍스트 목록"
|
||||||
|
emptySlot: "빈 슬롯"
|
||||||
|
enviromentVariables: "환경 변수"
|
||||||
|
pageVariables: "페이지 요소"
|
||||||
|
argVariables: "입력 슬롯"
|
||||||
|
|||||||
@@ -23,6 +23,8 @@ common:
|
|||||||
timeline: "Tijdlijn"
|
timeline: "Tijdlijn"
|
||||||
followers: "Volgers"
|
followers: "Volgers"
|
||||||
favorites: "Deze notitie toevoegen aan favorieten"
|
favorites: "Deze notitie toevoegen aan favorieten"
|
||||||
|
permissions:
|
||||||
|
"write:votes": "Stemmen"
|
||||||
weekday-short:
|
weekday-short:
|
||||||
sunday: "Z"
|
sunday: "Z"
|
||||||
monday: "M"
|
monday: "M"
|
||||||
@@ -102,10 +104,9 @@ common/views/components/messaging.vue:
|
|||||||
search-user: "Gebruiker zoeken"
|
search-user: "Gebruiker zoeken"
|
||||||
you: "Jij"
|
you: "Jij"
|
||||||
no-history: "Geen geschiedenis"
|
no-history: "Geen geschiedenis"
|
||||||
|
user: "Gebruiker"
|
||||||
common/views/components/messaging-room.vue:
|
common/views/components/messaging-room.vue:
|
||||||
empty: "Geen gesprekken"
|
|
||||||
no-history: "Er is geen verdere geschiedenis"
|
no-history: "Er is geen verdere geschiedenis"
|
||||||
resize-form: "Versleep om grootte te wijzigen"
|
|
||||||
new-message: "Nieuw bericht"
|
new-message: "Nieuw bericht"
|
||||||
common/views/components/messaging-room.form.vue:
|
common/views/components/messaging-room.form.vue:
|
||||||
input-message-here: "Voer hier je bericht in"
|
input-message-here: "Voer hier je bericht in"
|
||||||
@@ -200,6 +201,9 @@ common/views/components/profile-editor.vue:
|
|||||||
enter-password: "Voer het wachtwoord in"
|
enter-password: "Voer het wachtwoord in"
|
||||||
common/views/components/user-list-editor.vue:
|
common/views/components/user-list-editor.vue:
|
||||||
users: "Gebruiker"
|
users: "Gebruiker"
|
||||||
|
add-user: "Gebruiker toevoegen"
|
||||||
|
common/views/components/user-lists.vue:
|
||||||
|
user-lists: "Lijsten"
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "Bezig met ophalen"
|
fetching: "Bezig met ophalen"
|
||||||
no-broadcasts: "Geen uitzendingen"
|
no-broadcasts: "Geen uitzendingen"
|
||||||
@@ -307,10 +311,6 @@ desktop/views/components/home.vue:
|
|||||||
desktop/views/input-dialog.vue:
|
desktop/views/input-dialog.vue:
|
||||||
cancel: "Annuleren"
|
cancel: "Annuleren"
|
||||||
ok: "Oké"
|
ok: "Oké"
|
||||||
desktop/views/components/messaging-room-window.vue:
|
|
||||||
title: "Berichten:"
|
|
||||||
desktop/views/components/messaging-window.vue:
|
|
||||||
title: "Gesprekken"
|
|
||||||
desktop/views/components/note-detail.vue:
|
desktop/views/components/note-detail.vue:
|
||||||
private: "(dit bericht is privé)"
|
private: "(dit bericht is privé)"
|
||||||
location: "Locatie"
|
location: "Locatie"
|
||||||
@@ -338,7 +338,6 @@ desktop/views/components/post-form.vue:
|
|||||||
posting: "Bezig met plaatsen"
|
posting: "Bezig met plaatsen"
|
||||||
attach-media-from-local: "Media bijvoegen van je computer"
|
attach-media-from-local: "Media bijvoegen van je computer"
|
||||||
attach-media-from-drive: "Media bijvoegen uit je Drive"
|
attach-media-from-drive: "Media bijvoegen uit je Drive"
|
||||||
attach-cancel: "Bijlage annuleren"
|
|
||||||
create-poll: "Peiling creëren"
|
create-poll: "Peiling creëren"
|
||||||
text-remain: "{} resterende tekens"
|
text-remain: "{} resterende tekens"
|
||||||
desktop/views/components/post-form-window.vue:
|
desktop/views/components/post-form-window.vue:
|
||||||
@@ -388,13 +387,10 @@ desktop/views/components/sub-note-content.vue:
|
|||||||
poll: "Peilingen"
|
poll: "Peilingen"
|
||||||
desktop/views/components/settings.tags.vue:
|
desktop/views/components/settings.tags.vue:
|
||||||
add: "Toevoegen"
|
add: "Toevoegen"
|
||||||
desktop/views/components/taskmanager.vue:
|
|
||||||
title: "Taakbeheer"
|
|
||||||
desktop/views/components/timeline.vue:
|
desktop/views/components/timeline.vue:
|
||||||
home: "Startpagina"
|
home: "Startpagina"
|
||||||
local: "Lokaal"
|
local: "Lokaal"
|
||||||
global: "Algemeen"
|
global: "Algemeen"
|
||||||
messages: "Gesprekken"
|
|
||||||
list: "Lijsten"
|
list: "Lijsten"
|
||||||
desktop/views/components/ui.header.account.vue:
|
desktop/views/components/ui.header.account.vue:
|
||||||
profile: "Je profiel"
|
profile: "Je profiel"
|
||||||
@@ -407,9 +403,6 @@ desktop/views/components/ui.header.post.vue:
|
|||||||
post: "Nieuw bericht opstellen"
|
post: "Nieuw bericht opstellen"
|
||||||
desktop/views/components/ui.header.search.vue:
|
desktop/views/components/ui.header.search.vue:
|
||||||
placeholder: "Zoeken"
|
placeholder: "Zoeken"
|
||||||
desktop/views/components/user-lists-window.vue:
|
|
||||||
title: "Lijsten"
|
|
||||||
create-list: "Lijst creëren"
|
|
||||||
desktop/views/components/user-preview.vue:
|
desktop/views/components/user-preview.vue:
|
||||||
notes: "Berichten"
|
notes: "Berichten"
|
||||||
following: "Volgend"
|
following: "Volgend"
|
||||||
@@ -429,8 +422,6 @@ admin/views/dashboard.vue:
|
|||||||
notes: "Bericht"
|
notes: "Bericht"
|
||||||
admin/views/abuse.vue:
|
admin/views/abuse.vue:
|
||||||
remove-report: "Verwijderen"
|
remove-report: "Verwijderen"
|
||||||
admin/views/instance.vue:
|
|
||||||
user-recommendation-config: "Aanbevolen gebruikers"
|
|
||||||
admin/views/charts.vue:
|
admin/views/charts.vue:
|
||||||
notes: "Bericht"
|
notes: "Bericht"
|
||||||
users: "Gebruiker"
|
users: "Gebruiker"
|
||||||
@@ -497,8 +488,6 @@ desktop/views/pages/user/user.timeline.vue:
|
|||||||
default: "Berichten"
|
default: "Berichten"
|
||||||
with-replies: "Berichten en antwoorden"
|
with-replies: "Berichten en antwoorden"
|
||||||
with-media: "Media"
|
with-media: "Media"
|
||||||
desktop/views/widgets/messaging.vue:
|
|
||||||
title: "Gesprekken"
|
|
||||||
desktop/views/widgets/notifications.vue:
|
desktop/views/widgets/notifications.vue:
|
||||||
title: "Meldingen"
|
title: "Meldingen"
|
||||||
desktop/views/widgets/polls.vue:
|
desktop/views/widgets/polls.vue:
|
||||||
@@ -565,13 +554,14 @@ mobile/views/components/ui.nav.vue:
|
|||||||
user-lists: "Lijsten"
|
user-lists: "Lijsten"
|
||||||
game: "Othello spelen"
|
game: "Othello spelen"
|
||||||
about: "Over Misskey"
|
about: "Over Misskey"
|
||||||
mobile/views/pages/user-lists.vue:
|
mobile/views/pages/drive.vue:
|
||||||
title: "Lijsten"
|
contextmenu:
|
||||||
|
upload: "Bestand uploaden"
|
||||||
|
create-folder: "Map creëren"
|
||||||
mobile/views/pages/home.vue:
|
mobile/views/pages/home.vue:
|
||||||
home: "Startpagina"
|
home: "Startpagina"
|
||||||
local: "Lokaal"
|
local: "Lokaal"
|
||||||
global: "Algemeen"
|
global: "Algemeen"
|
||||||
messages: "Gesprekken"
|
|
||||||
mobile/views/pages/widgets.vue:
|
mobile/views/pages/widgets.vue:
|
||||||
add-widget: "Toevoegen"
|
add-widget: "Toevoegen"
|
||||||
mobile/views/pages/widgets/activity.vue:
|
mobile/views/pages/widgets/activity.vue:
|
||||||
@@ -625,13 +615,23 @@ deck/deck.user-column.vue:
|
|||||||
docs:
|
docs:
|
||||||
edit-this-page-on-github: "Heb je een fout ontdekt of wil je bijdragen aan de documentatie? "
|
edit-this-page-on-github: "Heb je een fout ontdekt of wil je bijdragen aan de documentatie? "
|
||||||
edit-this-page-on-github-link: "Bewerk deze pagina op GitHub!"
|
edit-this-page-on-github-link: "Bewerk deze pagina op GitHub!"
|
||||||
api:
|
pages:
|
||||||
entities:
|
like: "Leuk"
|
||||||
properties: "Eigenschappen"
|
blocks:
|
||||||
endpoints:
|
image: "Afbeeldingen"
|
||||||
params: "Parameters"
|
script:
|
||||||
res: "Antwoord"
|
categories:
|
||||||
props:
|
list: "Lijsten"
|
||||||
name: "Naam"
|
blocks:
|
||||||
type: "Type"
|
_join:
|
||||||
description: "Omschrijving"
|
arg1: "Lijsten"
|
||||||
|
_randomPick:
|
||||||
|
arg1: "Lijsten"
|
||||||
|
_dailyRandomPick:
|
||||||
|
arg1: "Lijsten"
|
||||||
|
_seedRandomPick:
|
||||||
|
arg2: "Lijsten"
|
||||||
|
_pick:
|
||||||
|
arg1: "Lijsten"
|
||||||
|
types:
|
||||||
|
array: "Lijsten"
|
||||||
|
|||||||
@@ -37,6 +37,8 @@ common:
|
|||||||
home: "Hjem"
|
home: "Hjem"
|
||||||
followers: "Følgere"
|
followers: "Følgere"
|
||||||
favorites: "Merket som favoritt"
|
favorites: "Merket som favoritt"
|
||||||
|
permissions:
|
||||||
|
"write:votes": "Stem"
|
||||||
weekday-short:
|
weekday-short:
|
||||||
sunday: "S"
|
sunday: "S"
|
||||||
monday: "M"
|
monday: "M"
|
||||||
@@ -128,6 +130,7 @@ common/views/components/cw-button.vue:
|
|||||||
hide: "Skjul"
|
hide: "Skjul"
|
||||||
common/views/components/messaging.vue:
|
common/views/components/messaging.vue:
|
||||||
you: "Du"
|
you: "Du"
|
||||||
|
user: "Bruker"
|
||||||
common/views/components/messaging-room.form.vue:
|
common/views/components/messaging-room.form.vue:
|
||||||
send: "Send"
|
send: "Send"
|
||||||
common/views/components/messaging-room.message.vue:
|
common/views/components/messaging-room.message.vue:
|
||||||
@@ -190,6 +193,13 @@ common/views/components/profile-editor.vue:
|
|||||||
user-lists: "Lister"
|
user-lists: "Lister"
|
||||||
common/views/components/user-list-editor.vue:
|
common/views/components/user-list-editor.vue:
|
||||||
users: "Bruker"
|
users: "Bruker"
|
||||||
|
common/views/components/user-group-editor.vue:
|
||||||
|
invite: "Inviter"
|
||||||
|
common/views/components/user-lists.vue:
|
||||||
|
user-lists: "Lister"
|
||||||
|
list-name: "Liste navn"
|
||||||
|
common/views/components/user-groups.vue:
|
||||||
|
invites: "Inviter"
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "Henter"
|
fetching: "Henter"
|
||||||
next: "Neste"
|
next: "Neste"
|
||||||
@@ -244,8 +254,6 @@ desktop/views/components/home.vue:
|
|||||||
desktop/views/input-dialog.vue:
|
desktop/views/input-dialog.vue:
|
||||||
cancel: "Avbryt"
|
cancel: "Avbryt"
|
||||||
ok: "Ok"
|
ok: "Ok"
|
||||||
desktop/views/components/messaging-window.vue:
|
|
||||||
title: "Samtaler"
|
|
||||||
desktop/views/components/note-detail.vue:
|
desktop/views/components/note-detail.vue:
|
||||||
location: "Lokasjon"
|
location: "Lokasjon"
|
||||||
desktop/views/components/note.vue:
|
desktop/views/components/note.vue:
|
||||||
@@ -290,7 +298,6 @@ desktop/views/components/timeline.vue:
|
|||||||
home: "Hjem"
|
home: "Hjem"
|
||||||
local: "Lokalt"
|
local: "Lokalt"
|
||||||
global: "Globalt"
|
global: "Globalt"
|
||||||
messages: "Samtaler"
|
|
||||||
list: "Lister"
|
list: "Lister"
|
||||||
list-name: "Liste navn"
|
list-name: "Liste navn"
|
||||||
desktop/views/components/ui.header.vue:
|
desktop/views/components/ui.header.vue:
|
||||||
@@ -306,12 +313,6 @@ desktop/views/components/ui.header.post.vue:
|
|||||||
post: "Skriv nytt innlegg"
|
post: "Skriv nytt innlegg"
|
||||||
desktop/views/components/ui.header.search.vue:
|
desktop/views/components/ui.header.search.vue:
|
||||||
placeholder: "Søk"
|
placeholder: "Søk"
|
||||||
desktop/views/components/received-follow-requests-window.vue:
|
|
||||||
accept: "Godta"
|
|
||||||
reject: "Avslå"
|
|
||||||
desktop/views/components/user-lists-window.vue:
|
|
||||||
title: "Brukerlister"
|
|
||||||
list-name: "Liste navn"
|
|
||||||
desktop/views/components/user-preview.vue:
|
desktop/views/components/user-preview.vue:
|
||||||
notes: "Innlegg"
|
notes: "Innlegg"
|
||||||
following: "Følger"
|
following: "Følger"
|
||||||
@@ -394,8 +395,6 @@ desktop/views/pages/user/user.timeline.vue:
|
|||||||
default: "Innlegg"
|
default: "Innlegg"
|
||||||
with-replies: "Innlegg og svar"
|
with-replies: "Innlegg og svar"
|
||||||
with-media: "Media"
|
with-media: "Media"
|
||||||
desktop/views/widgets/messaging.vue:
|
|
||||||
title: "Melding"
|
|
||||||
desktop/views/widgets/notifications.vue:
|
desktop/views/widgets/notifications.vue:
|
||||||
title: "Notifikasjon"
|
title: "Notifikasjon"
|
||||||
desktop/views/widgets/polls.vue:
|
desktop/views/widgets/polls.vue:
|
||||||
@@ -450,18 +449,12 @@ mobile/views/components/ui.nav.vue:
|
|||||||
user-lists: "Lister"
|
user-lists: "Lister"
|
||||||
game: "Spill"
|
game: "Spill"
|
||||||
admin: "Admin"
|
admin: "Admin"
|
||||||
mobile/views/pages/user-lists.vue:
|
|
||||||
title: "Lister"
|
|
||||||
mobile/views/pages/home.vue:
|
mobile/views/pages/home.vue:
|
||||||
home: "Hjem"
|
home: "Hjem"
|
||||||
local: "Lokalt"
|
local: "Lokalt"
|
||||||
global: "Globalt"
|
global: "Globalt"
|
||||||
messages: "Samtaler"
|
|
||||||
mobile/views/pages/widgets.vue:
|
mobile/views/pages/widgets.vue:
|
||||||
add-widget: "Legg til"
|
add-widget: "Legg til"
|
||||||
mobile/views/pages/received-follow-requests.vue:
|
|
||||||
accept: "Godta"
|
|
||||||
reject: "Avslå"
|
|
||||||
mobile/views/pages/note.vue:
|
mobile/views/pages/note.vue:
|
||||||
title: "Innlegg"
|
title: "Innlegg"
|
||||||
prev: "Forrige innlegg"
|
prev: "Forrige innlegg"
|
||||||
@@ -492,14 +485,25 @@ deck/deck.user-column.vue:
|
|||||||
following: "Følger"
|
following: "Følger"
|
||||||
followers: "Følgere"
|
followers: "Følgere"
|
||||||
images: "Bilder"
|
images: "Bilder"
|
||||||
docs:
|
pages:
|
||||||
api:
|
like: "Lik"
|
||||||
entities:
|
blocks:
|
||||||
properties: "Egenskaper"
|
image: "Bilder"
|
||||||
endpoints:
|
script:
|
||||||
params: "Parametere"
|
categories:
|
||||||
res: "Respons"
|
random: "Tilfeldig"
|
||||||
props:
|
list: "Lister"
|
||||||
name: "Navn"
|
blocks:
|
||||||
type: "Type"
|
_join:
|
||||||
description: "Beskrivelse"
|
arg1: "Lister"
|
||||||
|
random: "Tilfeldig"
|
||||||
|
_randomPick:
|
||||||
|
arg1: "Lister"
|
||||||
|
_dailyRandomPick:
|
||||||
|
arg1: "Lister"
|
||||||
|
_seedRandomPick:
|
||||||
|
arg2: "Lister"
|
||||||
|
_pick:
|
||||||
|
arg1: "Lister"
|
||||||
|
types:
|
||||||
|
array: "Lister"
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ common:
|
|||||||
enter-password: "Wprowadź Hasło"
|
enter-password: "Wprowadź Hasło"
|
||||||
2fa: "Uwierzytelnienie dwuetapowe"
|
2fa: "Uwierzytelnienie dwuetapowe"
|
||||||
customize-home: "Dostosuj stronę główną"
|
customize-home: "Dostosuj stronę główną"
|
||||||
|
featured-notes: "Wyróżnienia"
|
||||||
dark-mode: "Tryb ciemny"
|
dark-mode: "Tryb ciemny"
|
||||||
signin: "Zaloguj się"
|
signin: "Zaloguj się"
|
||||||
signup: "Rejestracja"
|
signup: "Rejestracja"
|
||||||
@@ -53,6 +54,7 @@ common:
|
|||||||
month-and-day: "{month}-{day}"
|
month-and-day: "{month}-{day}"
|
||||||
trash: "Kosz"
|
trash: "Kosz"
|
||||||
drive: "Dysk"
|
drive: "Dysk"
|
||||||
|
pages: "Strony"
|
||||||
messaging: "Rozmowy"
|
messaging: "Rozmowy"
|
||||||
home: "Strona główna"
|
home: "Strona główna"
|
||||||
deck: "Tablice"
|
deck: "Tablice"
|
||||||
@@ -61,6 +63,9 @@ common:
|
|||||||
following: "Śledzisz"
|
following: "Śledzisz"
|
||||||
followers: "Śledzący"
|
followers: "Śledzący"
|
||||||
favorites: "Moje ulubione"
|
favorites: "Moje ulubione"
|
||||||
|
permissions:
|
||||||
|
"read:drive": "Wyświetl dysk"
|
||||||
|
"write:votes": "Zagłosuj"
|
||||||
empty-timeline-info:
|
empty-timeline-info:
|
||||||
explore: "Poznaj"
|
explore: "Poznaj"
|
||||||
weekday-short:
|
weekday-short:
|
||||||
@@ -123,6 +128,7 @@ common:
|
|||||||
behavior: "Zachowanie"
|
behavior: "Zachowanie"
|
||||||
fetch-on-scroll: "Automatycznie ładuj po przeciągnięciu w dół"
|
fetch-on-scroll: "Automatycznie ładuj po przeciągnięciu w dół"
|
||||||
note-visibility: "Widoczność wpisów"
|
note-visibility: "Widoczność wpisów"
|
||||||
|
remember-note-visibility: "Zapamiętaj widoczność wpisów"
|
||||||
web-search-engine: "Wyszukiwarka internetowa"
|
web-search-engine: "Wyszukiwarka internetowa"
|
||||||
line-width: "Szerokości linii"
|
line-width: "Szerokości linii"
|
||||||
line-width-thin: "Cienka"
|
line-width-thin: "Cienka"
|
||||||
@@ -146,9 +152,11 @@ common:
|
|||||||
choose-wallpaper: "Wybierz tapetę"
|
choose-wallpaper: "Wybierz tapetę"
|
||||||
timeline: "Oś czasu"
|
timeline: "Oś czasu"
|
||||||
sound: "Dźwięk"
|
sound: "Dźwięk"
|
||||||
|
volume: "Głośność"
|
||||||
test: "Test"
|
test: "Test"
|
||||||
update: "Aktualizacja Misskey"
|
update: "Aktualizacja Misskey"
|
||||||
version: "Wersja:"
|
version: "Wersja:"
|
||||||
|
do-update: "Sprawdź dostępność nowych aktualizacji"
|
||||||
navbar-position-left: "Z lewej"
|
navbar-position-left: "Z lewej"
|
||||||
search: "Szukaj"
|
search: "Szukaj"
|
||||||
delete: "Usuń"
|
delete: "Usuń"
|
||||||
@@ -158,9 +166,9 @@ common:
|
|||||||
update-available-title: "Aktualizacja jest dostępna"
|
update-available-title: "Aktualizacja jest dostępna"
|
||||||
update-available: "Nowa wersja Misskey jest dostępna ({newer}, obecna to {current}). Odśwież stronę, aby zastosować aktualizację."
|
update-available: "Nowa wersja Misskey jest dostępna ({newer}, obecna to {current}). Odśwież stronę, aby zastosować aktualizację."
|
||||||
my-token-regenerated: "Twój token został wygenerowany. Zostaniesz wylogowany."
|
my-token-regenerated: "Twój token został wygenerowany. Zostaniesz wylogowany."
|
||||||
verified-user: "Zweryfikowane konto"
|
|
||||||
hide-password: "Ukryj hasło"
|
hide-password: "Ukryj hasło"
|
||||||
show-password: "Pokaż hasło"
|
show-password: "Pokaż hasło"
|
||||||
|
enter-username: "Wprowadź nazwę użytkownika"
|
||||||
view-on-remote: "Dla dopełnienia, zobacz to zdalnie."
|
view-on-remote: "Dla dopełnienia, zobacz to zdalnie."
|
||||||
renoted-by: "{user} udostępnił(a)"
|
renoted-by: "{user} udostępnił(a)"
|
||||||
error:
|
error:
|
||||||
@@ -199,15 +207,6 @@ common:
|
|||||||
you: "Ty"
|
you: "Ty"
|
||||||
auth/views/form.vue:
|
auth/views/form.vue:
|
||||||
permission-ask: "Ta aplikacja wymaga następujących uprawnień:"
|
permission-ask: "Ta aplikacja wymaga następujących uprawnień:"
|
||||||
account-read: "Wyświetlanie informacji o koncie:"
|
|
||||||
account-write: "Modyfikowanie informacji o koncie:"
|
|
||||||
note-write: "Publikacja."
|
|
||||||
like-write: "Reagowanie na wpisy."
|
|
||||||
following-write: "Śledzenie i cofanie śledzenia."
|
|
||||||
drive-read: "Odczytywanie Twojego dysku."
|
|
||||||
drive-write: "Wysyłanie i usuwanie plików na Twoim dysku."
|
|
||||||
notification-read: "Odczytywanie Twoich powiadomień."
|
|
||||||
notification-write: "Zarządzanie Twoimi powiadomieniami."
|
|
||||||
cancel: "Anuluj"
|
cancel: "Anuluj"
|
||||||
accept: "Przyznaj dostęp."
|
accept: "Przyznaj dostęp."
|
||||||
auth/views/index.vue:
|
auth/views/index.vue:
|
||||||
@@ -219,8 +218,6 @@ auth/views/index.vue:
|
|||||||
please-go-back: "Wróć do aplikacji."
|
please-go-back: "Wróć do aplikacji."
|
||||||
error: "Sesja nie istnieje."
|
error: "Sesja nie istnieje."
|
||||||
sign-in: "Proszę zalogować się."
|
sign-in: "Proszę zalogować się."
|
||||||
common/views/pages/explore.vue:
|
|
||||||
verified-users: "Zweryfikowane konto"
|
|
||||||
common/views/components/games/reversi/reversi.vue:
|
common/views/components/games/reversi/reversi.vue:
|
||||||
matching:
|
matching:
|
||||||
waiting-for: "Oczekiwanie na {}"
|
waiting-for: "Oczekiwanie na {}"
|
||||||
@@ -327,18 +324,15 @@ common/views/components/messaging.vue:
|
|||||||
search-user: "Znajdź użytkownika"
|
search-user: "Znajdź użytkownika"
|
||||||
you: "Ty"
|
you: "Ty"
|
||||||
no-history: "Brak historii"
|
no-history: "Brak historii"
|
||||||
|
user: "Użytkownicy"
|
||||||
common/views/components/messaging-room.vue:
|
common/views/components/messaging-room.vue:
|
||||||
empty: "Brak konwersacji"
|
|
||||||
no-history: "Brak dalszej historii"
|
no-history: "Brak dalszej historii"
|
||||||
resize-form: "Przeciągnij aby zmienić rozmiar"
|
|
||||||
new-message: "Nowa wiadomość"
|
new-message: "Nowa wiadomość"
|
||||||
only-one-file-attached: "Tylko JEDEN plik może zostać dołączony do wiadomości"
|
|
||||||
common/views/components/messaging-room.form.vue:
|
common/views/components/messaging-room.form.vue:
|
||||||
input-message-here: "Wprowadź wiadomość tutaj"
|
input-message-here: "Wprowadź wiadomość tutaj"
|
||||||
send: "Wyślij"
|
send: "Wyślij"
|
||||||
attach-from-local: "Załącz pliki z komputera"
|
attach-from-local: "Załącz pliki z komputera"
|
||||||
attach-from-drive: "Załącz pliki z dysku"
|
attach-from-drive: "Załącz pliki z dysku"
|
||||||
only-one-file-attached: "Tylko jeden plik może zostać dołączony do wiadomości"
|
|
||||||
common/views/components/messaging-room.message.vue:
|
common/views/components/messaging-room.message.vue:
|
||||||
is-read: "Przeczytano"
|
is-read: "Przeczytano"
|
||||||
deleted: "Wiadomość została usunięta"
|
deleted: "Wiadomość została usunięta"
|
||||||
@@ -515,6 +509,15 @@ common/views/components/user-list-editor.vue:
|
|||||||
remove-user: "Usuń z tej listy"
|
remove-user: "Usuń z tej listy"
|
||||||
delete-are-you-sure: "Usunąć listę \"$1\"?"
|
delete-are-you-sure: "Usunąć listę \"$1\"?"
|
||||||
deleted: "Usunięto"
|
deleted: "Usunięto"
|
||||||
|
add-user: "Dodaj użytkownika"
|
||||||
|
common/views/components/user-group-editor.vue:
|
||||||
|
deleted: "Usunięto"
|
||||||
|
invite: "Zaproś"
|
||||||
|
common/views/components/user-lists.vue:
|
||||||
|
user-lists: "Listy"
|
||||||
|
list-name: "Nazwa listy"
|
||||||
|
common/views/components/user-groups.vue:
|
||||||
|
invites: "Zaproś"
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "Sprawdzanie"
|
fetching: "Sprawdzanie"
|
||||||
no-broadcasts: "Brak transmisji"
|
no-broadcasts: "Brak transmisji"
|
||||||
@@ -570,6 +573,8 @@ common/views/pages/follow.vue:
|
|||||||
request-pending: "Oczekiwanie na pozwolenie"
|
request-pending: "Oczekiwanie na pozwolenie"
|
||||||
follow-processing: "Przetwarzanie śledzenia"
|
follow-processing: "Przetwarzanie śledzenia"
|
||||||
follow-request: "Poproś o śledzenie"
|
follow-request: "Poproś o śledzenie"
|
||||||
|
common/views/pages/follow-requests.vue:
|
||||||
|
received-follow-requests: "Prośby o śledzenie"
|
||||||
desktop:
|
desktop:
|
||||||
banner: "Baner"
|
banner: "Baner"
|
||||||
uploading-banner: "Wysyłanie baneru"
|
uploading-banner: "Wysyłanie baneru"
|
||||||
@@ -677,10 +682,6 @@ desktop/views/components/home.vue:
|
|||||||
desktop/views/input-dialog.vue:
|
desktop/views/input-dialog.vue:
|
||||||
cancel: "Anuluj"
|
cancel: "Anuluj"
|
||||||
ok: "OK"
|
ok: "OK"
|
||||||
desktop/views/components/messaging-room-window.vue:
|
|
||||||
title: "Wiadomości:"
|
|
||||||
desktop/views/components/messaging-window.vue:
|
|
||||||
title: "Wiadomości"
|
|
||||||
desktop/views/components/note-detail.vue:
|
desktop/views/components/note-detail.vue:
|
||||||
private: "ten wpis jest prywatny"
|
private: "ten wpis jest prywatny"
|
||||||
deleted: "ten wpis został usunięty"
|
deleted: "ten wpis został usunięty"
|
||||||
@@ -717,7 +718,6 @@ desktop/views/components/post-form.vue:
|
|||||||
posting: "Wysyłanie"
|
posting: "Wysyłanie"
|
||||||
attach-media-from-local: "Załącz zawartość multimedialną z komputera"
|
attach-media-from-local: "Załącz zawartość multimedialną z komputera"
|
||||||
attach-media-from-drive: "Załącz zawartość multimedialną z dysku"
|
attach-media-from-drive: "Załącz zawartość multimedialną z dysku"
|
||||||
attach-cancel: "Usuń załącznik"
|
|
||||||
insert-a-kao: "v('ω')v"
|
insert-a-kao: "v('ω')v"
|
||||||
create-poll: "Utwórz ankietę"
|
create-poll: "Utwórz ankietę"
|
||||||
text-remain: "pozostałe znaki: {}"
|
text-remain: "pozostałe znaki: {}"
|
||||||
@@ -797,6 +797,9 @@ common/views/components/password-settings.vue:
|
|||||||
enter-current-password: "Wprowadź obecne hasło"
|
enter-current-password: "Wprowadź obecne hasło"
|
||||||
enter-new-password: "Wprowadź nowe hasło"
|
enter-new-password: "Wprowadź nowe hasło"
|
||||||
enter-new-password-again: "Wprowadź ponownie nowe hasło"
|
enter-new-password-again: "Wprowadź ponownie nowe hasło"
|
||||||
|
common/views/components/post-form-attaches.vue:
|
||||||
|
mark-as-sensitive: "Oznacz jako zawartość wrażliwą"
|
||||||
|
unmark-as-sensitive: "Cofnij oznaczenie jako zawartość wrażliwą"
|
||||||
desktop/views/components/sub-note-content.vue:
|
desktop/views/components/sub-note-content.vue:
|
||||||
private: "ten wpis jest prywatny"
|
private: "ten wpis jest prywatny"
|
||||||
deleted: "ten wpis został usunięty"
|
deleted: "ten wpis został usunięty"
|
||||||
@@ -807,15 +810,12 @@ desktop/views/components/settings.tags.vue:
|
|||||||
query: "Zapytanie (opcjonalne)"
|
query: "Zapytanie (opcjonalne)"
|
||||||
add: "Dodaj"
|
add: "Dodaj"
|
||||||
save: "Zapisz"
|
save: "Zapisz"
|
||||||
desktop/views/components/taskmanager.vue:
|
|
||||||
title: "Menedżer zadań"
|
|
||||||
desktop/views/components/timeline.vue:
|
desktop/views/components/timeline.vue:
|
||||||
home: "Strona główna"
|
home: "Strona główna"
|
||||||
local: "Lokalne"
|
local: "Lokalne"
|
||||||
hybrid: "Społeczność"
|
|
||||||
global: "Globalne"
|
global: "Globalne"
|
||||||
mentions: "Wspomnienia"
|
mentions: "Wspomnienia"
|
||||||
messages: "Wiadomości"
|
messages: "Bezpośrednie wpisy"
|
||||||
list: "Listy"
|
list: "Listy"
|
||||||
hashtag: "Hashtag"
|
hashtag: "Hashtag"
|
||||||
add-tag-timeline: "Dodaj hashtag"
|
add-tag-timeline: "Dodaj hashtag"
|
||||||
@@ -836,14 +836,6 @@ desktop/views/components/ui.header.post.vue:
|
|||||||
post: "Utwórz nowy wpis"
|
post: "Utwórz nowy wpis"
|
||||||
desktop/views/components/ui.header.search.vue:
|
desktop/views/components/ui.header.search.vue:
|
||||||
placeholder: "Szukaj"
|
placeholder: "Szukaj"
|
||||||
desktop/views/components/received-follow-requests-window.vue:
|
|
||||||
title: "Prośby o śledzenie"
|
|
||||||
accept: "Zatwierdź"
|
|
||||||
reject: "Odmów"
|
|
||||||
desktop/views/components/user-lists-window.vue:
|
|
||||||
title: "Listy"
|
|
||||||
create-list: "Utwórz listę"
|
|
||||||
list-name: "Nazwa listy"
|
|
||||||
desktop/views/components/user-preview.vue:
|
desktop/views/components/user-preview.vue:
|
||||||
notes: "Wpisy"
|
notes: "Wpisy"
|
||||||
following: "Śledzeni"
|
following: "Śledzeni"
|
||||||
@@ -864,7 +856,6 @@ admin/views/index.vue:
|
|||||||
moderators: "Moderatorzy"
|
moderators: "Moderatorzy"
|
||||||
users: "Użytkownicy"
|
users: "Użytkownicy"
|
||||||
announcements: "Ogłoszenia"
|
announcements: "Ogłoszenia"
|
||||||
hashtags: "Hashtagi"
|
|
||||||
admin/views/dashboard.vue:
|
admin/views/dashboard.vue:
|
||||||
dashboard: "Kokpit"
|
dashboard: "Kokpit"
|
||||||
accounts: "Konta"
|
accounts: "Konta"
|
||||||
@@ -876,6 +867,7 @@ admin/views/abuse.vue:
|
|||||||
remove-report: "Usuń"
|
remove-report: "Usuń"
|
||||||
admin/views/instance.vue:
|
admin/views/instance.vue:
|
||||||
instance: "Instancja"
|
instance: "Instancja"
|
||||||
|
recaptcha-preview: "Pokaż podgląd"
|
||||||
github-integration-client-id: "Client ID"
|
github-integration-client-id: "Client ID"
|
||||||
github-integration-client-secret: "Client Secret"
|
github-integration-client-secret: "Client Secret"
|
||||||
discord-integration-client-id: "Client ID"
|
discord-integration-client-id: "Client ID"
|
||||||
@@ -883,9 +875,6 @@ admin/views/instance.vue:
|
|||||||
invite: "Zaproś"
|
invite: "Zaproś"
|
||||||
save: "Zapisz"
|
save: "Zapisz"
|
||||||
saved: "Zapisano"
|
saved: "Zapisano"
|
||||||
user-recommendation-config: "Polecani użytkownicy"
|
|
||||||
external-user-recommendation-engine: "Silnik"
|
|
||||||
external-user-recommendation-engine-desc: "Np: https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}"
|
|
||||||
email: "Adres e-mail"
|
email: "Adres e-mail"
|
||||||
admin/views/charts.vue:
|
admin/views/charts.vue:
|
||||||
notes: "Wpisy"
|
notes: "Wpisy"
|
||||||
@@ -915,7 +904,6 @@ admin/views/users.vue:
|
|||||||
state:
|
state:
|
||||||
all: "Wszyscy"
|
all: "Wszyscy"
|
||||||
moderator: "Moderatorzy"
|
moderator: "Moderatorzy"
|
||||||
verified: "Zweryfikowane konto"
|
|
||||||
origin:
|
origin:
|
||||||
title: "Źródło"
|
title: "Źródło"
|
||||||
local: "Lokalny"
|
local: "Lokalny"
|
||||||
@@ -961,6 +949,7 @@ admin/views/federation.vue:
|
|||||||
blocked: "Zablokuj"
|
blocked: "Zablokuj"
|
||||||
chart-srcs:
|
chart-srcs:
|
||||||
requests: "Żądania"
|
requests: "Żądania"
|
||||||
|
blocked-hosts: "Zablokuj"
|
||||||
desktop/views/pages/welcome.vue:
|
desktop/views/pages/welcome.vue:
|
||||||
about: "O Misskey"
|
about: "O Misskey"
|
||||||
timeline: "Oś czasu"
|
timeline: "Oś czasu"
|
||||||
@@ -1009,8 +998,6 @@ desktop/views/pages/user/user.timeline.vue:
|
|||||||
with-replies: "Wpisy i odpowiedzi"
|
with-replies: "Wpisy i odpowiedzi"
|
||||||
with-media: "Multimedia"
|
with-media: "Multimedia"
|
||||||
my-posts: "Moje wpisy"
|
my-posts: "Moje wpisy"
|
||||||
desktop/views/widgets/messaging.vue:
|
|
||||||
title: "Wiadomości"
|
|
||||||
desktop/views/widgets/notifications.vue:
|
desktop/views/widgets/notifications.vue:
|
||||||
title: "Powiadomienia"
|
title: "Powiadomienia"
|
||||||
desktop/views/widgets/polls.vue:
|
desktop/views/widgets/polls.vue:
|
||||||
@@ -1038,8 +1025,6 @@ mobile/views/components/drive.vue:
|
|||||||
file-count: "Plik(i)"
|
file-count: "Plik(i)"
|
||||||
nothing-in-drive: "Pusto"
|
nothing-in-drive: "Pusto"
|
||||||
folder-is-empty: "Ten katalog jest pusty"
|
folder-is-empty: "Ten katalog jest pusty"
|
||||||
prompt: "Co chcesz zrobić? (wprowadź odpowiednią cyfrę): <1 → Wysłać plik | 2 → Wysłać plik z adresu URL | 3 → Utworzyć katalog | 4 → Zmienić nazwę tego katalogu | 5 → Przenieść ten katalog | 6 → Usunąć ten katalog>"
|
|
||||||
deletion-alert: "Przepraszamy. Usuwanie katalogów nie zostało jeszcze zaimplementowane."
|
|
||||||
folder-name: "Nazwa katalogu"
|
folder-name: "Nazwa katalogu"
|
||||||
url-prompt: "Adres URL pliku, który chcesz wysłać"
|
url-prompt: "Adres URL pliku, który chcesz wysłać"
|
||||||
uploading: "Rozpoczęto wysyłanie. Może to trochę potrwać."
|
uploading: "Rozpoczęto wysyłanie. Może to trochę potrwać."
|
||||||
@@ -1095,7 +1080,7 @@ mobile/views/components/post-form.vue:
|
|||||||
quote-placeholder: "Zacytuj ten wpis… (nieobowiązkowe)"
|
quote-placeholder: "Zacytuj ten wpis… (nieobowiązkowe)"
|
||||||
reply-placeholder: "Odpowiedź na ten wpis…"
|
reply-placeholder: "Odpowiedź na ten wpis…"
|
||||||
cw-placeholder: "Treść ostrzeżenia (opcjonalnie)"
|
cw-placeholder: "Treść ostrzeżenia (opcjonalnie)"
|
||||||
location-alert: "Twoje urządzenie nie pozwala na przekazywanie informacji o lokalizacji"
|
geolocation-alert: "Twoje urządzenie nie obsługuje geolokalizacji."
|
||||||
error: "Błąd"
|
error: "Błąd"
|
||||||
username-prompt: "Wprowadź nazwę użytkownika"
|
username-prompt: "Wprowadź nazwę użytkownika"
|
||||||
mobile/views/components/sub-note-content.vue:
|
mobile/views/components/sub-note-content.vue:
|
||||||
@@ -1115,28 +1100,24 @@ mobile/views/components/ui.nav.vue:
|
|||||||
game: "Gry"
|
game: "Gry"
|
||||||
admin: "Admin"
|
admin: "Admin"
|
||||||
about: "O Misskey"
|
about: "O Misskey"
|
||||||
mobile/views/pages/user-lists.vue:
|
mobile/views/pages/drive.vue:
|
||||||
title: "Listy"
|
contextmenu:
|
||||||
enter-list-name: "Wprowadź nazwę listy"
|
upload: "Wyślij plik"
|
||||||
|
create-folder: "Utwórz katalog"
|
||||||
mobile/views/pages/signup.vue:
|
mobile/views/pages/signup.vue:
|
||||||
lets-start: "Rozpocznijmy! 📦"
|
lets-start: "Rozpocznijmy! 📦"
|
||||||
mobile/views/pages/home.vue:
|
mobile/views/pages/home.vue:
|
||||||
home: "Strona główna"
|
home: "Strona główna"
|
||||||
local: "Lokalne"
|
local: "Lokalne"
|
||||||
hybrid: "Społeczność"
|
|
||||||
global: "Globalne"
|
global: "Globalne"
|
||||||
mentions: "Wspomnienia"
|
mentions: "Wspomnienia"
|
||||||
messages: "Wiadomości"
|
messages: "Bezpośrednie wpisy"
|
||||||
mobile/views/pages/widgets.vue:
|
mobile/views/pages/widgets.vue:
|
||||||
dashboard: "Kokpit"
|
dashboard: "Kokpit"
|
||||||
add-widget: "Dodaj"
|
add-widget: "Dodaj"
|
||||||
customization-tips: "Wskazówki o dostosowywaniu"
|
customization-tips: "Wskazówki o dostosowywaniu"
|
||||||
mobile/views/pages/widgets/activity.vue:
|
mobile/views/pages/widgets/activity.vue:
|
||||||
activity: "Aktywność"
|
activity: "Aktywność"
|
||||||
mobile/views/pages/received-follow-requests.vue:
|
|
||||||
title: "Prośby o śledzenie"
|
|
||||||
accept: "Zatwierdź"
|
|
||||||
reject: "Odmów"
|
|
||||||
mobile/views/pages/note.vue:
|
mobile/views/pages/note.vue:
|
||||||
title: "Wpis"
|
title: "Wpis"
|
||||||
prev: "Poprzedni wpis"
|
prev: "Poprzedni wpis"
|
||||||
@@ -1173,7 +1154,6 @@ deck:
|
|||||||
widgets: "Widżety"
|
widgets: "Widżety"
|
||||||
home: "Strona główna"
|
home: "Strona główna"
|
||||||
local: "Lokalne"
|
local: "Lokalne"
|
||||||
hybrid: "Społeczność"
|
|
||||||
hashtag: "Hashtag"
|
hashtag: "Hashtag"
|
||||||
global: "Globalne"
|
global: "Globalne"
|
||||||
mentions: "Wspomnienia"
|
mentions: "Wspomnienia"
|
||||||
@@ -1203,23 +1183,6 @@ deck/deck.user-column.vue:
|
|||||||
docs:
|
docs:
|
||||||
edit-this-page-on-github: "Znalazłeś błąd lub chcesz pomóc w tworzeniu dokumentacji?"
|
edit-this-page-on-github: "Znalazłeś błąd lub chcesz pomóc w tworzeniu dokumentacji?"
|
||||||
edit-this-page-on-github-link: "Edytuj stronę na GitHubie!"
|
edit-this-page-on-github-link: "Edytuj stronę na GitHubie!"
|
||||||
api:
|
|
||||||
entities:
|
|
||||||
properties: "Właściwości"
|
|
||||||
endpoints:
|
|
||||||
params: "Parametry"
|
|
||||||
no-params: "Brak parametrów."
|
|
||||||
res: "Odpowiedź"
|
|
||||||
require-credential: "Punkt końcowy wymaga informacji o uwierzytelnieniu."
|
|
||||||
require-permission: "Ten punkt końcowy wymaga uprawnienia {permission}."
|
|
||||||
has-limit: "Istnieje limit częstotliwości."
|
|
||||||
min-interval-limit: "Nie możesz wykonać żądania przed upłynięciem {interval} od ostatniego żądania."
|
|
||||||
show-src: "Możesz zobaczyć kod źródłowy tego punktu końcowego."
|
|
||||||
show-src-link: "Zobacz kod na GitHubie"
|
|
||||||
props:
|
|
||||||
name: "Nazwa"
|
|
||||||
type: "Rodzaj"
|
|
||||||
description: "Opis"
|
|
||||||
dev/views/index.vue:
|
dev/views/index.vue:
|
||||||
manage-apps: "Zarządzaj aplikacjami"
|
manage-apps: "Zarządzaj aplikacjami"
|
||||||
dev/views/apps.vue:
|
dev/views/apps.vue:
|
||||||
@@ -1228,11 +1191,39 @@ dev/views/apps.vue:
|
|||||||
dev/views/new-app.vue:
|
dev/views/new-app.vue:
|
||||||
app-name: "Nazwa Aplikacji"
|
app-name: "Nazwa Aplikacji"
|
||||||
authority: "Uprawnienia"
|
authority: "Uprawnienia"
|
||||||
account-read: "Wyświetlanie informacji o koncie:"
|
pages:
|
||||||
account-write: "Modyfikowanie informacji o koncie:"
|
like: "Lubię"
|
||||||
note-write: "Publikacja."
|
title: "Tytuł"
|
||||||
following-write: "Śledzenie i cofanie śledzenia."
|
blocks:
|
||||||
drive-read: "Odczytywanie Twojego dysku."
|
image: "Zdjęcia"
|
||||||
drive-write: "Wysyłanie i usuwanie plików na Twoim dysku."
|
post: "Formularz tworzenia"
|
||||||
notification-read: "Odczytywanie Twoich powiadomień."
|
_textInput:
|
||||||
notification-write: "Zarządzanie Twoimi powiadomieniami."
|
text: "Tytuł"
|
||||||
|
_textareaInput:
|
||||||
|
text: "Tytuł"
|
||||||
|
_numberInput:
|
||||||
|
text: "Tytuł"
|
||||||
|
_switch:
|
||||||
|
text: "Tytuł"
|
||||||
|
_counter:
|
||||||
|
text: "Tytuł"
|
||||||
|
_button:
|
||||||
|
text: "Tytuł"
|
||||||
|
script:
|
||||||
|
categories:
|
||||||
|
random: "Losowy"
|
||||||
|
list: "Listy"
|
||||||
|
blocks:
|
||||||
|
_join:
|
||||||
|
arg1: "Listy"
|
||||||
|
random: "Losowy"
|
||||||
|
_randomPick:
|
||||||
|
arg1: "Listy"
|
||||||
|
_dailyRandomPick:
|
||||||
|
arg1: "Listy"
|
||||||
|
_seedRandomPick:
|
||||||
|
arg2: "Listy"
|
||||||
|
_pick:
|
||||||
|
arg1: "Listy"
|
||||||
|
types:
|
||||||
|
array: "Listy"
|
||||||
|
|||||||
@@ -89,7 +89,6 @@ common:
|
|||||||
update-available-title: "Atualização disponível"
|
update-available-title: "Atualização disponível"
|
||||||
update-available: "Uma nova versão de Misskey está disponível ({newer}). A versão atual é {current}. Recarregue a página para atualizar."
|
update-available: "Uma nova versão de Misskey está disponível ({newer}). A versão atual é {current}. Recarregue a página para atualizar."
|
||||||
my-token-regenerated: "Seu token foi recriado, portanto você foi deslogado."
|
my-token-regenerated: "Seu token foi recriado, portanto você foi deslogado."
|
||||||
verified-user: "Conta verificada"
|
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "Empatado"
|
drawn: "Empatado"
|
||||||
my-turn: "Seu turno"
|
my-turn: "Seu turno"
|
||||||
@@ -119,9 +118,6 @@ common:
|
|||||||
you: "Você"
|
you: "Você"
|
||||||
auth/views/form.vue:
|
auth/views/form.vue:
|
||||||
permission-ask: "Este aplicativo precisa das seguintes permissões:"
|
permission-ask: "Este aplicativo precisa das seguintes permissões:"
|
||||||
account-read: "Ver informações da conta."
|
|
||||||
account-write: "Modificar informações da conta."
|
|
||||||
note-write: "Publicar"
|
|
||||||
cancel: "Cancelar"
|
cancel: "Cancelar"
|
||||||
accept: "Permitir acesso"
|
accept: "Permitir acesso"
|
||||||
auth/views/index.vue:
|
auth/views/index.vue:
|
||||||
@@ -132,8 +128,6 @@ auth/views/index.vue:
|
|||||||
please-go-back: "Por favor, volte ao aplicativo."
|
please-go-back: "Por favor, volte ao aplicativo."
|
||||||
error: "A sessão não existe."
|
error: "A sessão não existe."
|
||||||
sign-in: "Por favor, entre."
|
sign-in: "Por favor, entre."
|
||||||
common/views/pages/explore.vue:
|
|
||||||
verified-users: "Conta verificada"
|
|
||||||
common/views/components/games/reversi/reversi.index.vue:
|
common/views/components/games/reversi/reversi.index.vue:
|
||||||
invite: "Convidar"
|
invite: "Convidar"
|
||||||
rule: "Como jogar"
|
rule: "Como jogar"
|
||||||
@@ -166,6 +160,10 @@ common/views/components/profile-editor.vue:
|
|||||||
name: "Nome"
|
name: "Nome"
|
||||||
export-targets:
|
export-targets:
|
||||||
following-list: "Seguindo"
|
following-list: "Seguindo"
|
||||||
|
common/views/components/user-group-editor.vue:
|
||||||
|
invite: "Convidar"
|
||||||
|
common/views/components/user-groups.vue:
|
||||||
|
invites: "Convidar"
|
||||||
common/views/widgets/posts-monitor.vue:
|
common/views/widgets/posts-monitor.vue:
|
||||||
title: "Gráfico de publicações"
|
title: "Gráfico de publicações"
|
||||||
common/views/widgets/memo.vue:
|
common/views/widgets/memo.vue:
|
||||||
@@ -197,10 +195,6 @@ admin/views/instance.vue:
|
|||||||
invite: "Convidar"
|
invite: "Convidar"
|
||||||
admin/views/drive.vue:
|
admin/views/drive.vue:
|
||||||
delete: "Apagar"
|
delete: "Apagar"
|
||||||
admin/views/users.vue:
|
|
||||||
users:
|
|
||||||
state:
|
|
||||||
verified: "Conta verificada"
|
|
||||||
admin/views/emoji.vue:
|
admin/views/emoji.vue:
|
||||||
emojis:
|
emojis:
|
||||||
remove: "Apagar"
|
remove: "Apagar"
|
||||||
@@ -277,22 +271,10 @@ deck/deck.user-column.vue:
|
|||||||
timeline: "Linha do tempo"
|
timeline: "Linha do tempo"
|
||||||
docs:
|
docs:
|
||||||
edit-this-page-on-github-link: "Edite esta página no GitHub!"
|
edit-this-page-on-github-link: "Edite esta página no GitHub!"
|
||||||
api:
|
|
||||||
entities:
|
|
||||||
properties: "Propriedades"
|
|
||||||
endpoints:
|
|
||||||
params: "Parâmetros"
|
|
||||||
no-params: "Sem parâmetros"
|
|
||||||
res: "Resposta"
|
|
||||||
show-src-link: "Veja o código no GitHub"
|
|
||||||
generated: "Este documento foi gerado pelas definições da API."
|
|
||||||
props:
|
|
||||||
name: "Nome"
|
|
||||||
type: "Tipo"
|
|
||||||
description: "Descrição"
|
|
||||||
dev/views/index.vue:
|
dev/views/index.vue:
|
||||||
manage-apps: "Gerenciar aplicativos"
|
manage-apps: "Gerenciar aplicativos"
|
||||||
dev/views/new-app.vue:
|
pages:
|
||||||
account-read: "Ver informações da conta."
|
like: "Curtir"
|
||||||
account-write: "Modificar informações da conta."
|
blocks:
|
||||||
note-write: "Publicar"
|
image: "Imagens"
|
||||||
|
post: "Formulário de publicação"
|
||||||
|
|||||||
@@ -146,3 +146,10 @@ mobile/views/components/sub-note-content.vue:
|
|||||||
poll: "Голосования"
|
poll: "Голосования"
|
||||||
mobile/views/pages/widgets.vue:
|
mobile/views/pages/widgets.vue:
|
||||||
customization-tips: "Советы по настройке"
|
customization-tips: "Советы по настройке"
|
||||||
|
pages:
|
||||||
|
like: "Нравится"
|
||||||
|
script:
|
||||||
|
categories:
|
||||||
|
random: "Случайно"
|
||||||
|
blocks:
|
||||||
|
random: "Случайно"
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ common:
|
|||||||
signup: "注册"
|
signup: "注册"
|
||||||
signout: "退出"
|
signout: "退出"
|
||||||
reload-to-apply-the-setting: "必须重新加载页面以应用此设置。 确实要立即重新加载吗?"
|
reload-to-apply-the-setting: "必须重新加载页面以应用此设置。 确实要立即重新加载吗?"
|
||||||
|
fetching-as-ap-object: "联合查询"
|
||||||
got-it: "知道了"
|
got-it: "知道了"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "自定义提示"
|
title: "自定义提示"
|
||||||
@@ -61,6 +62,7 @@ common:
|
|||||||
month-and-day: "{month}月 {day}日"
|
month-and-day: "{month}月 {day}日"
|
||||||
trash: "垃圾箱"
|
trash: "垃圾箱"
|
||||||
drive: "网盘"
|
drive: "网盘"
|
||||||
|
pages: "页面"
|
||||||
messaging: "聊天"
|
messaging: "聊天"
|
||||||
home: "首页"
|
home: "首页"
|
||||||
deck: "Deck"
|
deck: "Deck"
|
||||||
@@ -69,6 +71,27 @@ common:
|
|||||||
following: "正在关注"
|
following: "正在关注"
|
||||||
followers: "关注者"
|
followers: "关注者"
|
||||||
favorites: "最爱"
|
favorites: "最爱"
|
||||||
|
permissions:
|
||||||
|
"read:account": "查看账户信息"
|
||||||
|
"write:account": "更改我的帐户信息"
|
||||||
|
"read:blocks": "查看黑名单"
|
||||||
|
"write:blocks": "编辑黑名单"
|
||||||
|
"read:drive": "查看网盘"
|
||||||
|
"write:drive": "管理网盘文件"
|
||||||
|
"read:favorites": "查看收藏夹"
|
||||||
|
"write:favorites": "编辑收藏夹"
|
||||||
|
"read:following": "查看关注信息"
|
||||||
|
"write:following": "关注/取消关注"
|
||||||
|
"read:messaging": "查看对话"
|
||||||
|
"write:messaging": "对话操作"
|
||||||
|
"read:mutes": "查看屏蔽列表"
|
||||||
|
"write:mutes": "编辑屏蔽列表"
|
||||||
|
"write:notes": "创建或删除帖子"
|
||||||
|
"read:notifications": "查看通知"
|
||||||
|
"write:notifications": "管理通知"
|
||||||
|
"read:reactions": "查看回应"
|
||||||
|
"write:reactions": "回应操作"
|
||||||
|
"write:votes": "投票"
|
||||||
empty-timeline-info:
|
empty-timeline-info:
|
||||||
follow-users-to-make-your-timeline: "关注其他用户时,帖子将显示在时间线中。"
|
follow-users-to-make-your-timeline: "关注其他用户时,帖子将显示在时间线中。"
|
||||||
explore: "查找用户"
|
explore: "查找用户"
|
||||||
@@ -122,9 +145,9 @@ common:
|
|||||||
profile: "个人资料"
|
profile: "个人资料"
|
||||||
notification: "通知"
|
notification: "通知"
|
||||||
apps: "应用程序"
|
apps: "应用程序"
|
||||||
tags: "标签"
|
tags: "哈希标签"
|
||||||
mute-and-block: "屏蔽/拉黑"
|
mute-and-block: "屏蔽/拉黑"
|
||||||
blocking: "屏蔽"
|
blocking: "拉黑"
|
||||||
security: "安全性"
|
security: "安全性"
|
||||||
signin: "登录历史"
|
signin: "登录历史"
|
||||||
password: "密码"
|
password: "密码"
|
||||||
@@ -141,11 +164,11 @@ common:
|
|||||||
keep-cw: "保留内容警告"
|
keep-cw: "保留内容警告"
|
||||||
keep-cw-desc: "在回复帖子时,如果原帖设置了内容警告,默认情况下回帖也会设置相同的内容警告。"
|
keep-cw-desc: "在回复帖子时,如果原帖设置了内容警告,默认情况下回帖也会设置相同的内容警告。"
|
||||||
i-like-sushi: "相比于布丁来说, 我更喜欢寿司。"
|
i-like-sushi: "相比于布丁来说, 我更喜欢寿司。"
|
||||||
show-reversi-board-labels: "在 Reversi 中显示行和列表签"
|
show-reversi-board-labels: "在黑白棋中显示行和列表签"
|
||||||
use-avatar-reversi-stones: "用头像作为黑白棋的棋子"
|
use-avatar-reversi-stones: "用头像作为黑白棋的棋子"
|
||||||
disable-animated-mfm: "在帖子中禁用动画文本"
|
disable-animated-mfm: "在帖子中禁用动画文本"
|
||||||
disable-showing-animated-images: "不播放动画"
|
disable-showing-animated-images: "不播放动画"
|
||||||
suggest-recent-hashtags: "在帖子表单上显示最近流行的主题标签"
|
suggest-recent-hashtags: "在帖子表单上显示最近流行的哈希标签"
|
||||||
always-show-nsfw: "总是显示 NSFW 的内容"
|
always-show-nsfw: "总是显示 NSFW 的内容"
|
||||||
always-mark-nsfw: "总是用 NSFW 来标记附件"
|
always-mark-nsfw: "总是用 NSFW 来标记附件"
|
||||||
show-full-acct: "不要从用户名中忽略主机名"
|
show-full-acct: "不要从用户名中忽略主机名"
|
||||||
@@ -184,9 +207,9 @@ common:
|
|||||||
show-clock-on-header: "在右上角显示时钟"
|
show-clock-on-header: "在右上角显示时钟"
|
||||||
show-reply-target: "显示回复目标"
|
show-reply-target: "显示回复目标"
|
||||||
timeline: "时间线"
|
timeline: "时间线"
|
||||||
show-my-renotes: "在时间线上显示我的Renote"
|
show-my-renotes: "在时间线上显示我的转推"
|
||||||
show-renoted-my-notes: "在时间线上显示我的帖子的Renote"
|
show-renoted-my-notes: "在时间线上显示我的帖子的转推"
|
||||||
show-local-renotes: "在时间线上显示本地帖子的Renote"
|
show-local-renotes: "在时间线上显示本地帖子的转推"
|
||||||
remain-deleted-note: "继续显示已删除的帖子"
|
remain-deleted-note: "继续显示已删除的帖子"
|
||||||
sound: "声音"
|
sound: "声音"
|
||||||
enable-sounds: "开启声音"
|
enable-sounds: "开启声音"
|
||||||
@@ -228,15 +251,15 @@ common:
|
|||||||
update-available-title: "有可用更新"
|
update-available-title: "有可用更新"
|
||||||
update-available: "新的 Misskey 版本现已发布({newer}。目前版本{current}). 刷新页面以应用更新。"
|
update-available: "新的 Misskey 版本现已发布({newer}。目前版本{current}). 刷新页面以应用更新。"
|
||||||
my-token-regenerated: "您的 Token 已被重置, 您将自动登出。"
|
my-token-regenerated: "您的 Token 已被重置, 您将自动登出。"
|
||||||
verified-user: "认证用户"
|
|
||||||
hide-password: "隐藏密码"
|
hide-password: "隐藏密码"
|
||||||
show-password: "显示密码"
|
show-password: "显示密码"
|
||||||
|
enter-username: "请输入用户名"
|
||||||
do-not-use-in-production: "这是一个开发者测试版. 请勿在生产环境中使用."
|
do-not-use-in-production: "这是一个开发者测试版. 请勿在生产环境中使用."
|
||||||
user-suspended: "该用户已被冻结。"
|
user-suspended: "该用户已被冻结。"
|
||||||
is-remote-user: "此用户信息可能不准确。"
|
is-remote-user: "此用户信息可能不准确。"
|
||||||
is-remote-post: "该投稿已被复制."
|
is-remote-post: "该投稿已被复制."
|
||||||
view-on-remote: "查看准确的信息"
|
view-on-remote: "查看准确的信息"
|
||||||
renoted-by: "由 {user} Renote"
|
renoted-by: "由 {user} 转推"
|
||||||
no-notes: "没有帖子"
|
no-notes: "没有帖子"
|
||||||
turn-on-darkmode: "切换暗色主题"
|
turn-on-darkmode: "切换暗色主题"
|
||||||
turn-off-darkmode: "切换亮色主题"
|
turn-off-darkmode: "切换亮色主题"
|
||||||
@@ -275,22 +298,14 @@ common:
|
|||||||
server: "服务器信息"
|
server: "服务器信息"
|
||||||
nav: "导航"
|
nav: "导航"
|
||||||
tips: "提示"
|
tips: "提示"
|
||||||
hashtags: "标签"
|
hashtags: "哈希标签"
|
||||||
|
queue: "队列"
|
||||||
dev: "构建应用程序失败,请再试一次。"
|
dev: "构建应用程序失败,请再试一次。"
|
||||||
ai-chan-kawaii: "小蓝真可爱"
|
ai-chan-kawaii: "小蓝真可爱"
|
||||||
you: "您"
|
you: "您"
|
||||||
auth/views/form.vue:
|
auth/views/form.vue:
|
||||||
share-access: "您要允许<i>{name}</i>来访问您的账户吗?"
|
share-access: "您要允许<i>{name}</i>来访问您的账户吗?"
|
||||||
permission-ask: "这个应用程序需要以下权限:"
|
permission-ask: "这个应用程序需要以下权限:"
|
||||||
account-read: "查看账户信息"
|
|
||||||
account-write: "修改账户信息"
|
|
||||||
note-write: "投稿。"
|
|
||||||
like-write: "点赞或取消赞。"
|
|
||||||
following-write: "关注或取消关注。"
|
|
||||||
drive-read: "查看您的网盘"
|
|
||||||
drive-write: "管理网盘文件。"
|
|
||||||
notification-read: "查看通知。"
|
|
||||||
notification-write: "管理通知。"
|
|
||||||
cancel: "取消"
|
cancel: "取消"
|
||||||
accept: "允许访问。"
|
accept: "允许访问。"
|
||||||
auth/views/index.vue:
|
auth/views/index.vue:
|
||||||
@@ -304,7 +319,7 @@ auth/views/index.vue:
|
|||||||
error: "会话不存在。"
|
error: "会话不存在。"
|
||||||
sign-in: "请登录。"
|
sign-in: "请登录。"
|
||||||
common/views/pages/explore.vue:
|
common/views/pages/explore.vue:
|
||||||
verified-users: "官方账户"
|
pinned-users: "已置顶用户"
|
||||||
popular-users: "热门用户"
|
popular-users: "热门用户"
|
||||||
recently-updated-users: "活跃用户"
|
recently-updated-users: "活跃用户"
|
||||||
recently-registered-users: "新用户"
|
recently-registered-users: "新用户"
|
||||||
@@ -325,8 +340,8 @@ common/views/components/games/reversi/reversi.game.vue:
|
|||||||
surrender: "认输"
|
surrender: "认输"
|
||||||
surrendered: "已认输"
|
surrendered: "已认输"
|
||||||
is-llotheo: "棋子较少一方获胜(LLoTheO规则)"
|
is-llotheo: "棋子较少一方获胜(LLoTheO规则)"
|
||||||
looped-map: "环形棋盘"
|
looped-map: "循环棋盘"
|
||||||
can-put-everywhere: "可以下在任意放置"
|
can-put-everywhere: "可以下在任意位置"
|
||||||
common/views/components/games/reversi/reversi.index.vue:
|
common/views/components/games/reversi/reversi.index.vue:
|
||||||
title: "Misskey 黑白棋"
|
title: "Misskey 黑白棋"
|
||||||
sub-title: "和其他人一起来玩Misskey黑白棋"
|
sub-title: "和其他人一起来玩Misskey黑白棋"
|
||||||
@@ -350,8 +365,8 @@ common/views/components/games/reversi/reversi.room.vue:
|
|||||||
black-is: "{}是黑"
|
black-is: "{}是黑"
|
||||||
rules: "规则"
|
rules: "规则"
|
||||||
is-llotheo: "棋子较少一方获胜(LLoTheO规则)"
|
is-llotheo: "棋子较少一方获胜(LLoTheO规则)"
|
||||||
looped-map: "环形棋盘"
|
looped-map: "循环棋盘"
|
||||||
can-put-everywhere: "可以下在任意放置"
|
can-put-everywhere: "可以下在任意位置"
|
||||||
settings-of-the-bot: "机器人设定"
|
settings-of-the-bot: "机器人设定"
|
||||||
this-game-is-started-soon: "游戏即将在数秒后开始"
|
this-game-is-started-soon: "游戏即将在数秒后开始"
|
||||||
waiting-for-other: "等待对手准备"
|
waiting-for-other: "等待对手准备"
|
||||||
@@ -434,18 +449,22 @@ common/views/components/messaging.vue:
|
|||||||
search-user: "查找用户"
|
search-user: "查找用户"
|
||||||
you: "您"
|
you: "您"
|
||||||
no-history: "没有历史记录"
|
no-history: "没有历史记录"
|
||||||
|
user: "用户"
|
||||||
|
group: "群组"
|
||||||
|
start-with-user: "开始用户聊天"
|
||||||
|
start-with-group: "开始群组聊天"
|
||||||
common/views/components/messaging-room.vue:
|
common/views/components/messaging-room.vue:
|
||||||
empty: "没有对话"
|
not-talked-user: "没有用户的会话记录"
|
||||||
|
not-talked-group: "没有群组的会话记录"
|
||||||
no-history: "没有更多的历史记录"
|
no-history: "没有更多的历史记录"
|
||||||
resize-form: "拖动以调整大小"
|
|
||||||
new-message: "新信息"
|
new-message: "新信息"
|
||||||
only-one-file-attached: "只有一个附件可以附加到消息中。"
|
only-one-file-attached: "只能添加一个附件"
|
||||||
common/views/components/messaging-room.form.vue:
|
common/views/components/messaging-room.form.vue:
|
||||||
input-message-here: "在此键入信息"
|
input-message-here: "在此键入信息"
|
||||||
send: "发送"
|
send: "发送"
|
||||||
attach-from-local: "从电脑中添加文件"
|
attach-from-local: "从电脑中添加文件"
|
||||||
attach-from-drive: "从网盘中添加文件"
|
attach-from-drive: "从网盘中添加文件"
|
||||||
only-one-file-attached: "在信息中只允许添加一个附件"
|
only-one-file-attached: "只能添加一个附件"
|
||||||
common/views/components/messaging-room.message.vue:
|
common/views/components/messaging-room.message.vue:
|
||||||
is-read: "已读"
|
is-read: "已读"
|
||||||
deleted: "此消息已被删除"
|
deleted: "此消息已被删除"
|
||||||
@@ -455,9 +474,10 @@ common/views/components/nav.vue:
|
|||||||
status: "状态"
|
status: "状态"
|
||||||
wiki: "维基百科"
|
wiki: "维基百科"
|
||||||
donors: "捐赠者"
|
donors: "捐赠者"
|
||||||
repository: "代码库"
|
repository: "源码库"
|
||||||
develop: "开发人员"
|
develop: "开发人员"
|
||||||
feedback: "反馈"
|
feedback: "反馈"
|
||||||
|
tos: "服务条款"
|
||||||
common/views/components/note-menu.vue:
|
common/views/components/note-menu.vue:
|
||||||
mention: "提到"
|
mention: "提到"
|
||||||
detail: "详细信息"
|
detail: "详细信息"
|
||||||
@@ -467,8 +487,8 @@ common/views/components/note-menu.vue:
|
|||||||
unfavorite: "取消收藏"
|
unfavorite: "取消收藏"
|
||||||
watch: "关注"
|
watch: "关注"
|
||||||
unwatch: "取消关注"
|
unwatch: "取消关注"
|
||||||
pin: "固定个人资料"
|
pin: "置顶"
|
||||||
unpin: "解除固定"
|
unpin: "取消置顶"
|
||||||
delete: "删除"
|
delete: "删除"
|
||||||
delete-confirm: "确定删除这个投稿吗?"
|
delete-confirm: "确定删除这个投稿吗?"
|
||||||
remote: "显示原始投稿"
|
remote: "显示原始投稿"
|
||||||
@@ -476,8 +496,12 @@ common/views/components/user-menu.vue:
|
|||||||
mention: "提到"
|
mention: "提到"
|
||||||
mute: "屏蔽"
|
mute: "屏蔽"
|
||||||
unmute: "解除屏蔽"
|
unmute: "解除屏蔽"
|
||||||
|
mute-confirm: "屏蔽此用户?"
|
||||||
|
unmute-confirm: "取消屏蔽用户?"
|
||||||
block: "拉黑"
|
block: "拉黑"
|
||||||
unblock: "取消拉黑"
|
unblock: "取消拉黑"
|
||||||
|
block-confirm: "确定拉黑此用户?"
|
||||||
|
unblock-confirm: "取消拉黑此用户?"
|
||||||
push-to-list: "添加至列表"
|
push-to-list: "添加至列表"
|
||||||
select-list: "请选择一个列表"
|
select-list: "请选择一个列表"
|
||||||
report-abuse: "举报骚扰"
|
report-abuse: "举报骚扰"
|
||||||
@@ -485,8 +509,12 @@ common/views/components/user-menu.vue:
|
|||||||
report-abuse-reported: "已报告给管理员。 非常感谢你的合作。"
|
report-abuse-reported: "已报告给管理员。 非常感谢你的合作。"
|
||||||
silence: "禁言"
|
silence: "禁言"
|
||||||
unsilence: "解除禁言"
|
unsilence: "解除禁言"
|
||||||
|
silence-confirm: "确认屏蔽此用户?"
|
||||||
|
unsilence-confirm: "取消屏蔽此用户?"
|
||||||
suspend: "冻结"
|
suspend: "冻结"
|
||||||
unsuspend: "解除冻结"
|
unsuspend: "解除冻结"
|
||||||
|
suspend-confirm: "确认冻结此用户?"
|
||||||
|
unsuspend-confirm: "确认解冻此用户?"
|
||||||
common/views/components/poll.vue:
|
common/views/components/poll.vue:
|
||||||
vote-to: "为\"{}\"投票"
|
vote-to: "为\"{}\"投票"
|
||||||
vote-count: "{}票"
|
vote-count: "{}票"
|
||||||
@@ -562,6 +590,8 @@ common/views/components/signup.vue:
|
|||||||
password-matched: "确认"
|
password-matched: "确认"
|
||||||
password-not-matched: "密码不一致"
|
password-not-matched: "密码不一致"
|
||||||
recaptcha: "验证"
|
recaptcha: "验证"
|
||||||
|
agree-to: "同意{0}"
|
||||||
|
tos: "服务条款"
|
||||||
create: "创建一个账户"
|
create: "创建一个账户"
|
||||||
some-error: "由于某种原因,创建帐户失败。请再试一次。"
|
some-error: "由于某种原因,创建帐户失败。请再试一次。"
|
||||||
common/views/components/special-message.vue:
|
common/views/components/special-message.vue:
|
||||||
@@ -577,7 +607,7 @@ common/views/components/notification-settings.vue:
|
|||||||
mark-as-read-all-unread-notes: "将所有帖子标为已读"
|
mark-as-read-all-unread-notes: "将所有帖子标为已读"
|
||||||
mark-as-read-all-talk-messages: "将所有对话标为已读"
|
mark-as-read-all-talk-messages: "将所有对话标为已读"
|
||||||
auto-watch: "自动查看帖子"
|
auto-watch: "自动查看帖子"
|
||||||
auto-watch-desc: "自动接收有关您做出反应或回复的帖子的通知。"
|
auto-watch-desc: "自动接收有关您做出回应或回复的帖子的通知。"
|
||||||
common/views/components/integration-settings.vue:
|
common/views/components/integration-settings.vue:
|
||||||
title: "服务合作"
|
title: "服务合作"
|
||||||
connect: "连接"
|
connect: "连接"
|
||||||
@@ -669,6 +699,25 @@ common/views/components/user-list-editor.vue:
|
|||||||
remove-user: "从此列表中删除"
|
remove-user: "从此列表中删除"
|
||||||
delete-are-you-sure: "删除列表“$1”?"
|
delete-are-you-sure: "删除列表“$1”?"
|
||||||
deleted: "已删除"
|
deleted: "已删除"
|
||||||
|
add-user: "添加用户"
|
||||||
|
common/views/components/user-group-editor.vue:
|
||||||
|
users: "成员"
|
||||||
|
rename: "更改群组名"
|
||||||
|
delete: "删除群组"
|
||||||
|
remove-user: "从本群组中删除"
|
||||||
|
delete-are-you-sure: "确定要删除「$1」组?"
|
||||||
|
deleted: "已删除"
|
||||||
|
invite: "邀请"
|
||||||
|
common/views/components/user-lists.vue:
|
||||||
|
user-lists: "列表"
|
||||||
|
create-list: "创建列表"
|
||||||
|
list-name: "列表名称"
|
||||||
|
common/views/components/user-groups.vue:
|
||||||
|
user-groups: "群组"
|
||||||
|
create-group: "创建群组"
|
||||||
|
group-name: "群组名"
|
||||||
|
invites: "邀请"
|
||||||
|
reject-invite: "拒绝"
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "确认中"
|
fetching: "确认中"
|
||||||
no-broadcasts: "没有公告"
|
no-broadcasts: "没有公告"
|
||||||
@@ -688,7 +737,7 @@ common/views/widgets/posts-monitor.vue:
|
|||||||
title: "投稿表格"
|
title: "投稿表格"
|
||||||
toggle: "切换视图"
|
toggle: "切换视图"
|
||||||
common/views/widgets/hashtags.vue:
|
common/views/widgets/hashtags.vue:
|
||||||
title: "标签"
|
title: "哈希标签"
|
||||||
common/views/widgets/server.vue:
|
common/views/widgets/server.vue:
|
||||||
title: "服务器信息"
|
title: "服务器信息"
|
||||||
toggle: "切换显示"
|
toggle: "切换显示"
|
||||||
@@ -711,7 +760,7 @@ common/views/widgets/tips.vue:
|
|||||||
tips-line8: "可以从设置中定制主页。"
|
tips-line8: "可以从设置中定制主页。"
|
||||||
tips-line9: "Misskey 根据 AGPLv3 获得许可。"
|
tips-line9: "Misskey 根据 AGPLv3 获得许可。"
|
||||||
tips-line10: "使用Time Machine(时光机)小部件可以轻松追溯到过去的时间轴。"
|
tips-line10: "使用Time Machine(时光机)小部件可以轻松追溯到过去的时间轴。"
|
||||||
tips-line11: "您可以点击“...”将帖子固定到用户页面"
|
tips-line11: "您可以点击“...”将帖子置顶到用户页面"
|
||||||
tips-line13: "附在帖子上的所有文件都会保存到网盘中。"
|
tips-line13: "附在帖子上的所有文件都会保存到网盘中。"
|
||||||
tips-line14: "在自定义首页布局时,您可以右键单击窗口小部件以更改其设计。"
|
tips-line14: "在自定义首页布局时,您可以右键单击窗口小部件以更改其设计。"
|
||||||
tips-line17: "用“**”围绕文本将突出显示它。"
|
tips-line17: "用“**”围绕文本将突出显示它。"
|
||||||
@@ -730,6 +779,10 @@ common/views/pages/follow.vue:
|
|||||||
request-pending: "发送关注申请"
|
request-pending: "发送关注申请"
|
||||||
follow-processing: "申请处理中"
|
follow-processing: "申请处理中"
|
||||||
follow-request: "关注请求"
|
follow-request: "关注请求"
|
||||||
|
common/views/pages/follow-requests.vue:
|
||||||
|
received-follow-requests: "关注申请"
|
||||||
|
accept: "接受"
|
||||||
|
reject: "拒绝"
|
||||||
desktop:
|
desktop:
|
||||||
banner-crop-title: "裁剪显示为背景的部分"
|
banner-crop-title: "裁剪显示为背景的部分"
|
||||||
banner: "背景"
|
banner: "背景"
|
||||||
@@ -746,7 +799,7 @@ desktop/views/components/activity.chart.vue:
|
|||||||
total: "黑 ... 总计"
|
total: "黑 ... 总计"
|
||||||
notes: "蓝 ... 投稿"
|
notes: "蓝 ... 投稿"
|
||||||
replies: "红 ... 回复"
|
replies: "红 ... 回复"
|
||||||
renotes: "绿 ... 转发"
|
renotes: "绿 ... 转推"
|
||||||
desktop/views/components/activity.vue:
|
desktop/views/components/activity.vue:
|
||||||
title: "活动"
|
title: "活动"
|
||||||
toggle: "切换显示"
|
toggle: "切换显示"
|
||||||
@@ -839,22 +892,18 @@ desktop/views/components/home.vue:
|
|||||||
desktop/views/input-dialog.vue:
|
desktop/views/input-dialog.vue:
|
||||||
cancel: "取消"
|
cancel: "取消"
|
||||||
ok: "确定"
|
ok: "确定"
|
||||||
desktop/views/components/messaging-room-window.vue:
|
|
||||||
title: "信息:"
|
|
||||||
desktop/views/components/messaging-window.vue:
|
|
||||||
title: "正在聊天"
|
|
||||||
desktop/views/components/note-detail.vue:
|
desktop/views/components/note-detail.vue:
|
||||||
private: "私密投稿"
|
private: "私密投稿"
|
||||||
deleted: "投稿已删除"
|
deleted: "投稿已删除"
|
||||||
location: "位置信息"
|
location: "位置信息"
|
||||||
renote: "转发"
|
renote: "转推"
|
||||||
add-reaction: "添加一个反应"
|
add-reaction: "回应"
|
||||||
undo-reaction: "取消反应"
|
undo-reaction: "取消回应"
|
||||||
desktop/views/components/note.vue:
|
desktop/views/components/note.vue:
|
||||||
reply: "回复"
|
reply: "回复"
|
||||||
renote: "Renote"
|
renote: "转推"
|
||||||
add-reaction: "添加一个反应"
|
add-reaction: "回应"
|
||||||
undo-reaction: "取消反应"
|
undo-reaction: "取消回应"
|
||||||
detail: "详细信息"
|
detail: "详细信息"
|
||||||
private: "这个投稿是私密的"
|
private: "这个投稿是私密的"
|
||||||
deleted: "投稿已删除"
|
deleted: "投稿已删除"
|
||||||
@@ -871,17 +920,16 @@ desktop/views/components/post-form.vue:
|
|||||||
quote-placeholder: "引用这个帖子…"
|
quote-placeholder: "引用这个帖子…"
|
||||||
submit: "投稿"
|
submit: "投稿"
|
||||||
reply: "回复"
|
reply: "回复"
|
||||||
renote: "转发"
|
renote: "转推"
|
||||||
posted: "已发送投稿!"
|
posted: "已发送投稿!"
|
||||||
replied: "已回复!"
|
replied: "已回复!"
|
||||||
reposted: "已转发!"
|
reposted: "已转推!"
|
||||||
note-failed: "发帖失败"
|
note-failed: "发帖失败"
|
||||||
reply-failed: "回复失败"
|
reply-failed: "回复失败"
|
||||||
renote-failed: "转发失败"
|
renote-failed: "转推失败"
|
||||||
posting: "发送中"
|
posting: "发送中"
|
||||||
attach-media-from-local: "从设备中添加媒体文件"
|
attach-media-from-local: "从设备中添加媒体文件"
|
||||||
attach-media-from-drive: "从网盘中添加媒体文件"
|
attach-media-from-drive: "从网盘中添加媒体文件"
|
||||||
attach-cancel: "删除附件"
|
|
||||||
insert-a-kao: "v('ω')v"
|
insert-a-kao: "v('ω')v"
|
||||||
create-poll: "创建一个投票"
|
create-poll: "创建一个投票"
|
||||||
text-remain: "还剩{}字"
|
text-remain: "还剩{}字"
|
||||||
@@ -903,13 +951,13 @@ desktop/views/components/progress-dialog.vue:
|
|||||||
desktop/views/components/renote-form.vue:
|
desktop/views/components/renote-form.vue:
|
||||||
quote: "引用..."
|
quote: "引用..."
|
||||||
cancel: "取消"
|
cancel: "取消"
|
||||||
renote: "重新发送"
|
renote: "转推"
|
||||||
renote-home: "重新发送(首页)"
|
renote-home: "转推(首页)"
|
||||||
reposting: "重新发送中..."
|
reposting: "重新发送中..."
|
||||||
success: "已重新发送!"
|
success: "已转推!"
|
||||||
failure: "重新发送失败"
|
failure: "转推失败"
|
||||||
desktop/views/components/renote-form-window.vue:
|
desktop/views/components/renote-form-window.vue:
|
||||||
title: "您是否要重新发送?"
|
title: "您是否要转推?"
|
||||||
desktop/views/pages/user-following-or-followers.vue:
|
desktop/views/pages/user-following-or-followers.vue:
|
||||||
following: "{user}的正在关注"
|
following: "{user}的正在关注"
|
||||||
followers: "{user}的关注者"
|
followers: "{user}的关注者"
|
||||||
@@ -959,7 +1007,7 @@ common/views/components/drive-settings.vue:
|
|||||||
common/views/components/mute-and-block.vue:
|
common/views/components/mute-and-block.vue:
|
||||||
mute-and-block: "屏蔽/拉黑"
|
mute-and-block: "屏蔽/拉黑"
|
||||||
mute: "屏蔽"
|
mute: "屏蔽"
|
||||||
block: "拉黑中"
|
block: "拉黑"
|
||||||
no-muted-users: "无屏蔽用户"
|
no-muted-users: "无屏蔽用户"
|
||||||
no-blocked-users: "无拉黑的用户"
|
no-blocked-users: "无拉黑的用户"
|
||||||
word-mute: "文字屏蔽"
|
word-mute: "文字屏蔽"
|
||||||
@@ -974,6 +1022,10 @@ common/views/components/password-settings.vue:
|
|||||||
not-match: "新密码不匹配"
|
not-match: "新密码不匹配"
|
||||||
changed: "密码已更改"
|
changed: "密码已更改"
|
||||||
failed: "更改密码失败"
|
failed: "更改密码失败"
|
||||||
|
common/views/components/post-form-attaches.vue:
|
||||||
|
attach-cancel: "删除附件"
|
||||||
|
mark-as-sensitive: "标记为“敏感”"
|
||||||
|
unmark-as-sensitive: "取消标记为“敏感”"
|
||||||
desktop/views/components/sub-note-content.vue:
|
desktop/views/components/sub-note-content.vue:
|
||||||
private: "这个帖子是私密的"
|
private: "这个帖子是私密的"
|
||||||
deleted: "帖子已删除"
|
deleted: "帖子已删除"
|
||||||
@@ -984,18 +1036,16 @@ desktop/views/components/settings.tags.vue:
|
|||||||
query: "查询 (可选)"
|
query: "查询 (可选)"
|
||||||
add: "添加"
|
add: "添加"
|
||||||
save: "保存"
|
save: "保存"
|
||||||
desktop/views/components/taskmanager.vue:
|
|
||||||
title: "任务管理器"
|
|
||||||
desktop/views/components/timeline.vue:
|
desktop/views/components/timeline.vue:
|
||||||
home: "首页"
|
home: "首页"
|
||||||
local: "本地"
|
local: "本地"
|
||||||
hybrid: "社交"
|
hybrid: "社交"
|
||||||
global: "全球"
|
global: "全球"
|
||||||
mentions: "提到的"
|
mentions: "提到的"
|
||||||
messages: "信息"
|
messages: "直接发布"
|
||||||
list: "列表"
|
list: "列表"
|
||||||
hashtag: "标签"
|
hashtag: "哈希标签"
|
||||||
add-tag-timeline: "添加标签"
|
add-tag-timeline: "添加哈希标签"
|
||||||
add-list: "添加列表"
|
add-list: "添加列表"
|
||||||
list-name: "列表名称"
|
list-name: "列表名称"
|
||||||
desktop/views/components/ui.header.vue:
|
desktop/views/components/ui.header.vue:
|
||||||
@@ -1004,6 +1054,7 @@ desktop/views/components/ui.header.vue:
|
|||||||
desktop/views/components/ui.header.account.vue:
|
desktop/views/components/ui.header.account.vue:
|
||||||
profile: "个人资料"
|
profile: "个人资料"
|
||||||
lists: "列表"
|
lists: "列表"
|
||||||
|
groups: "群组"
|
||||||
follow-requests: "关注申请"
|
follow-requests: "关注申请"
|
||||||
admin: "管理"
|
admin: "管理"
|
||||||
desktop/views/components/ui.header.nav.vue:
|
desktop/views/components/ui.header.nav.vue:
|
||||||
@@ -1014,14 +1065,6 @@ desktop/views/components/ui.header.post.vue:
|
|||||||
post: "撰写新帖子"
|
post: "撰写新帖子"
|
||||||
desktop/views/components/ui.header.search.vue:
|
desktop/views/components/ui.header.search.vue:
|
||||||
placeholder: "搜索"
|
placeholder: "搜索"
|
||||||
desktop/views/components/received-follow-requests-window.vue:
|
|
||||||
title: "关注申请"
|
|
||||||
accept: "接收"
|
|
||||||
reject: "拒绝"
|
|
||||||
desktop/views/components/user-lists-window.vue:
|
|
||||||
title: "用户列表"
|
|
||||||
create-list: "创建列表"
|
|
||||||
list-name: "列表名称"
|
|
||||||
desktop/views/components/user-preview.vue:
|
desktop/views/components/user-preview.vue:
|
||||||
notes: "帖子"
|
notes: "帖子"
|
||||||
following: "关注中"
|
following: "关注中"
|
||||||
@@ -1043,7 +1086,6 @@ admin/views/index.vue:
|
|||||||
users: "用户"
|
users: "用户"
|
||||||
federation: "联合"
|
federation: "联合"
|
||||||
announcements: "公告"
|
announcements: "公告"
|
||||||
hashtags: "标签"
|
|
||||||
abuse: "举报垃圾信息"
|
abuse: "举报垃圾信息"
|
||||||
queue: "作业队列"
|
queue: "作业队列"
|
||||||
logs: "登录"
|
logs: "登录"
|
||||||
@@ -1070,14 +1112,34 @@ admin/views/instance.vue:
|
|||||||
instance-name: "实例名称"
|
instance-name: "实例名称"
|
||||||
instance-description: "实例介绍"
|
instance-description: "实例介绍"
|
||||||
host: "主机名"
|
host: "主机名"
|
||||||
|
icon-url: "图标URL"
|
||||||
|
logo-url: "Logo URL"
|
||||||
banner-url: "背景图片地址"
|
banner-url: "背景图片地址"
|
||||||
error-image-url: "无效的图像URL"
|
error-image-url: "无效的图像URL"
|
||||||
languages: "实例语言"
|
languages: "实例语言"
|
||||||
languages-desc: "您可以添加多个,以空格分隔。"
|
languages-desc: "您可以添加多个,以空格分隔。"
|
||||||
|
tos-url: "服务条款URL"
|
||||||
|
repository-url: "源码库URL"
|
||||||
|
feedback-url: "反馈URL"
|
||||||
maintainer-config: "管理员信息"
|
maintainer-config: "管理员信息"
|
||||||
maintainer-name: "管理员名称"
|
maintainer-name: "管理员名称"
|
||||||
maintainer-email: "联系管理员"
|
maintainer-email: "联系管理员"
|
||||||
|
advanced-config: "其他设置"
|
||||||
|
note-and-tl: "帖子和时间线"
|
||||||
drive-config: "网盘设置"
|
drive-config: "网盘设置"
|
||||||
|
use-object-storage: "使用对象存储"
|
||||||
|
object-storage-base-url: "URL"
|
||||||
|
object-storage-bucket: "存储空间名"
|
||||||
|
object-storage-prefix: "前缀"
|
||||||
|
object-storage-endpoint: "端点"
|
||||||
|
object-storage-region: "区域"
|
||||||
|
object-storage-port: "端口"
|
||||||
|
object-storage-access-key: "访问密钥"
|
||||||
|
object-storage-secret-key: "密钥"
|
||||||
|
object-storage-use-ssl: "使用 SSL"
|
||||||
|
object-storage-s3-info: "使用Amazon S3作为对象存储时,请确认{0}相关“终端”和“区域”的设置。"
|
||||||
|
object-storage-s3-info-here: "这里"
|
||||||
|
object-storage-gcs-info: "将Google Cloud Storage用作对象存储时,请将“终端”设置为storage.googleapis.com,并将“区域”留空。"
|
||||||
cache-remote-files: "远程文件缓存"
|
cache-remote-files: "远程文件缓存"
|
||||||
cache-remote-files-desc: "如果没有此参数,则所有远程文件都将直接链接到其主机服务器。 这将是保存服务器存储的有效解决方案,但是对于设置禁用直接链接的用户而言,远程文件不可见,因为不会生成缩略图,从而增加流量。 建议启用此参数集。"
|
cache-remote-files-desc: "如果没有此参数,则所有远程文件都将直接链接到其主机服务器。 这将是保存服务器存储的有效解决方案,但是对于设置禁用直接链接的用户而言,远程文件不可见,因为不会生成缩略图,从而增加流量。 建议启用此参数集。"
|
||||||
local-drive-capacity-mb: "每个用户的网盘空间"
|
local-drive-capacity-mb: "每个用户的网盘空间"
|
||||||
@@ -1086,8 +1148,12 @@ admin/views/instance.vue:
|
|||||||
recaptcha-config: "reCAPTCHA设置"
|
recaptcha-config: "reCAPTCHA设置"
|
||||||
recaptcha-info: "reCAPTCHA token是必要的. 请从 https://www.google.com/recaptcha/intro/ 获取。\n请注意, 该功能在中国大陆不可用。"
|
recaptcha-info: "reCAPTCHA token是必要的. 请从 https://www.google.com/recaptcha/intro/ 获取。\n请注意, 该功能在中国大陆不可用。"
|
||||||
enable-recaptcha: "启用 reCAPTCHA\n(请注意, 此功能在中国大陆不可用. 如果启用, 可能导致无法正常使用登录或注册等功能)"
|
enable-recaptcha: "启用 reCAPTCHA\n(请注意, 此功能在中国大陆不可用. 如果启用, 可能导致无法正常使用登录或注册等功能)"
|
||||||
recaptcha-site-key: "reCAPTCHA site key"
|
recaptcha-site-key: "网站密钥"
|
||||||
recaptcha-secret-key: "reCAPTCHA secret key"
|
recaptcha-secret-key: "密钥"
|
||||||
|
recaptcha-preview: "预览"
|
||||||
|
hidden-tags: "隐藏哈希标签"
|
||||||
|
hidden-tags-info: "使用换行符分隔要从集合中排除的哈希标签。"
|
||||||
|
external-service-integration-config: "连接外部服务"
|
||||||
twitter-integration-config: "连接到Twitter的设置"
|
twitter-integration-config: "连接到Twitter的设置"
|
||||||
twitter-integration-info: "设置返回的URL{url}。"
|
twitter-integration-info: "设置返回的URL{url}。"
|
||||||
enable-twitter-integration: "启用连接到Twitter"
|
enable-twitter-integration: "启用连接到Twitter"
|
||||||
@@ -1113,15 +1179,13 @@ admin/views/instance.vue:
|
|||||||
disable-local-timeline: "停用本地时间线功能"
|
disable-local-timeline: "停用本地时间线功能"
|
||||||
disable-global-timeline: "禁用全局时间线"
|
disable-global-timeline: "禁用全局时间线"
|
||||||
disabling-timelines-info: "即使禁用时间线,管理员和版主仍然可用。"
|
disabling-timelines-info: "即使禁用时间线,管理员和版主仍然可用。"
|
||||||
|
enable-emoji-reaction: "在回应上使用表情符号"
|
||||||
|
use-star-for-reaction-fallback: "使用默认的star来表示未知的回应"
|
||||||
invite: "邀请"
|
invite: "邀请"
|
||||||
save: "保存"
|
save: "保存"
|
||||||
saved: "保存完毕"
|
saved: "保存完毕"
|
||||||
user-recommendation-config: "推荐用户"
|
pinned-users: "置顶用户"
|
||||||
enable-external-user-recommendation: "启用外部用户推荐"
|
pinned-users-info: "描述您要置顶的用户,以换行符分隔。"
|
||||||
external-user-recommendation-engine: "引擎"
|
|
||||||
external-user-recommendation-engine-desc: "例如: https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}"
|
|
||||||
external-user-recommendation-timeout: "超时"
|
|
||||||
external-user-recommendation-timeout-desc: "单位为毫秒 (例如:300000)"
|
|
||||||
email-config: "电子邮件服务器设置"
|
email-config: "电子邮件服务器设置"
|
||||||
email-config-info: "用于确认电子邮件和密码重置等。"
|
email-config-info: "用于确认电子邮件和密码重置等。"
|
||||||
enable-email: "启用电子邮件送递"
|
enable-email: "启用电子邮件送递"
|
||||||
@@ -1202,15 +1266,13 @@ admin/views/users.vue:
|
|||||||
unsuspend-confirm: "是否解除冻结?"
|
unsuspend-confirm: "是否解除冻结?"
|
||||||
unsuspended: "已成功解除用户冻结"
|
unsuspended: "已成功解除用户冻结"
|
||||||
make-silence: "禁言"
|
make-silence: "禁言"
|
||||||
|
silence-confirm: "确认屏蔽?"
|
||||||
unmake-silence: "解除禁言"
|
unmake-silence: "解除禁言"
|
||||||
verify: "认证用户"
|
unsilence-confirm: "解除屏蔽?"
|
||||||
verify-confirm: "是否官方账号?"
|
|
||||||
verified: "此账户已被认证"
|
|
||||||
unverify: "解除账户认证"
|
|
||||||
unverify-confirm: "是否解除官方账号认证?"
|
|
||||||
unverified: "该帐户未经认证"
|
|
||||||
update-remote-user: "更新远程用户信息"
|
update-remote-user: "更新远程用户信息"
|
||||||
remote-user-updated: "远程用户信息已更新"
|
remote-user-updated: "远程用户信息已更新"
|
||||||
|
delete-all-files: "删除所有文件"
|
||||||
|
delete-all-files-confirm: "删除所有文件吗?"
|
||||||
users:
|
users:
|
||||||
title: "用户"
|
title: "用户"
|
||||||
sort:
|
sort:
|
||||||
@@ -1225,7 +1287,6 @@ admin/views/users.vue:
|
|||||||
admin: "管理员"
|
admin: "管理员"
|
||||||
moderator: "版主"
|
moderator: "版主"
|
||||||
adminOrModerator: "管理员+版主"
|
adminOrModerator: "管理员+版主"
|
||||||
verified: "官方认证账户"
|
|
||||||
silenced: "已禁言"
|
silenced: "已禁言"
|
||||||
suspended: "已冻结"
|
suspended: "已冻结"
|
||||||
origin:
|
origin:
|
||||||
@@ -1287,6 +1348,7 @@ admin/views/federation.vue:
|
|||||||
latest-request-received-at: "上次收到的请求"
|
latest-request-received-at: "上次收到的请求"
|
||||||
remove-all-following: "取消所有关注"
|
remove-all-following: "取消所有关注"
|
||||||
remove-all-following-info: "取消{host}的所有关注者。当实例不存在时执行。"
|
remove-all-following-info: "取消{host}的所有关注者。当实例不存在时执行。"
|
||||||
|
delete-all-files: "删除所有文件"
|
||||||
block: "拉黑"
|
block: "拉黑"
|
||||||
marked-as-closed: "标记为已关闭"
|
marked-as-closed: "标记为已关闭"
|
||||||
lookup: "查询"
|
lookup: "查询"
|
||||||
@@ -1333,6 +1395,8 @@ admin/views/federation.vue:
|
|||||||
chart-spans:
|
chart-spans:
|
||||||
hour: "每小时"
|
hour: "每小时"
|
||||||
day: "每天"
|
day: "每天"
|
||||||
|
blocked-hosts: "拉黑"
|
||||||
|
blocked-hosts-info: "描述您要阻止的主机,以换行符分隔。"
|
||||||
desktop/views/pages/welcome.vue:
|
desktop/views/pages/welcome.vue:
|
||||||
about: "更多信息..."
|
about: "更多信息..."
|
||||||
timeline: "时间线"
|
timeline: "时间线"
|
||||||
@@ -1354,7 +1418,7 @@ desktop/views/pages/search.vue:
|
|||||||
not-available: "在此实例的设置中关闭搜索功能。"
|
not-available: "在此实例的设置中关闭搜索功能。"
|
||||||
not-found: "没有找到“{q}”的帖子"
|
not-found: "没有找到“{q}”的帖子"
|
||||||
desktop/views/pages/tag.vue:
|
desktop/views/pages/tag.vue:
|
||||||
no-posts-found: "没有找到带有主题标签“{q}”的帖子"
|
no-posts-found: "没有找到带有哈希标签“{q}”的帖子"
|
||||||
desktop/views/pages/user-list.users.vue:
|
desktop/views/pages/user-list.users.vue:
|
||||||
users: "用户"
|
users: "用户"
|
||||||
add-user: "添加用户"
|
add-user: "添加用户"
|
||||||
@@ -1387,8 +1451,6 @@ desktop/views/pages/user/user.timeline.vue:
|
|||||||
with-replies: "帖子与回复"
|
with-replies: "帖子与回复"
|
||||||
with-media: "媒体"
|
with-media: "媒体"
|
||||||
my-posts: "我的帖子"
|
my-posts: "我的帖子"
|
||||||
desktop/views/widgets/messaging.vue:
|
|
||||||
title: "信息"
|
|
||||||
desktop/views/widgets/notifications.vue:
|
desktop/views/widgets/notifications.vue:
|
||||||
title: "通知"
|
title: "通知"
|
||||||
desktop/views/widgets/polls.vue:
|
desktop/views/widgets/polls.vue:
|
||||||
@@ -1398,6 +1460,7 @@ desktop/views/widgets/polls.vue:
|
|||||||
desktop/views/widgets/post-form.vue:
|
desktop/views/widgets/post-form.vue:
|
||||||
title: "帖子"
|
title: "帖子"
|
||||||
note: "帖子"
|
note: "帖子"
|
||||||
|
something-happened: "由于某种原因无法发帖。"
|
||||||
desktop/views/widgets/profile.vue:
|
desktop/views/widgets/profile.vue:
|
||||||
update-banner: "点击来剪辑背景"
|
update-banner: "点击来剪辑背景"
|
||||||
update-avatar: "点击来剪辑头像"
|
update-avatar: "点击来剪辑头像"
|
||||||
@@ -1416,12 +1479,11 @@ mobile/views/components/drive.vue:
|
|||||||
file-count: "文件"
|
file-count: "文件"
|
||||||
nothing-in-drive: "网盘为空"
|
nothing-in-drive: "网盘为空"
|
||||||
folder-is-empty: "这文件夹是空的"
|
folder-is-empty: "这文件夹是空的"
|
||||||
prompt: "您想要干什么呢?(请输入数字):<1 → 上传文件 | 2 → 从URL上传文件 | 3 → 创建新文件夹 | 4 → 更改这个文件夹的名称 | 5 → 移动这个文件夹 | 6 → 删除这个文件夹>"
|
|
||||||
deletion-alert: "抱歉! 删除文件夹功能尚未实现。"
|
|
||||||
folder-name: "文件夹名称"
|
folder-name: "文件夹名称"
|
||||||
here-is-root: "当前位置为根目录。"
|
here-is-root: "当前位置为根目录。"
|
||||||
url-prompt: "要上传的文件的URL"
|
url-prompt: "要上传的文件的URL"
|
||||||
uploading: "已请求上传。 上传完成可能需要一段时间。"
|
uploading: "已请求上传。 上传完成可能需要一段时间。"
|
||||||
|
folder-name-cannot-empty: "文件夹名不能为空。"
|
||||||
mobile/views/components/drive-file-chooser.vue:
|
mobile/views/components/drive-file-chooser.vue:
|
||||||
select-file: "选择文件"
|
select-file: "选择文件"
|
||||||
mobile/views/components/drive-folder-chooser.vue:
|
mobile/views/components/drive-folder-chooser.vue:
|
||||||
@@ -1432,7 +1494,7 @@ mobile/views/components/drive.file-detail.vue:
|
|||||||
download: "下载"
|
download: "下载"
|
||||||
rename: "重命名"
|
rename: "重命名"
|
||||||
move: "移动"
|
move: "移动"
|
||||||
hash: "Hash (md5)"
|
hash: "哈希(md5)"
|
||||||
exif: "EXIF"
|
exif: "EXIF"
|
||||||
nsfw: "阅读注意"
|
nsfw: "阅读注意"
|
||||||
mark-as-sensitive: "标记为“敏感”"
|
mark-as-sensitive: "标记为“敏感”"
|
||||||
@@ -1452,7 +1514,7 @@ mobile/views/components/note.vue:
|
|||||||
location: "位置信息"
|
location: "位置信息"
|
||||||
mobile/views/components/note-detail.vue:
|
mobile/views/components/note-detail.vue:
|
||||||
reply: "回复"
|
reply: "回复"
|
||||||
reaction: "反应"
|
reaction: "回应"
|
||||||
private: "这个帖子是私密的"
|
private: "这个帖子是私密的"
|
||||||
deleted: "帖子已删除"
|
deleted: "帖子已删除"
|
||||||
location: "位置信息"
|
location: "位置信息"
|
||||||
@@ -1470,11 +1532,11 @@ mobile/views/components/post-form.vue:
|
|||||||
add-visible-user: "添加用户"
|
add-visible-user: "添加用户"
|
||||||
submit: "帖子"
|
submit: "帖子"
|
||||||
reply: "回复"
|
reply: "回复"
|
||||||
renote: "Renote"
|
renote: "转推"
|
||||||
quote-placeholder: "引用这个帖子t... (可选)"
|
quote-placeholder: "引用这个帖子t... (可选)"
|
||||||
reply-placeholder: "回复这个帖子"
|
reply-placeholder: "回复这个帖子"
|
||||||
cw-placeholder: "评论帖子(可选)"
|
cw-placeholder: "评论帖子(可选)"
|
||||||
location-alert: "您的设备不提供定位服务"
|
geolocation-alert: "您的设备不提供位置服务"
|
||||||
error: "错误"
|
error: "错误"
|
||||||
username-prompt: "请输入用户名"
|
username-prompt: "请输入用户名"
|
||||||
mobile/views/components/sub-note-content.vue:
|
mobile/views/components/sub-note-content.vue:
|
||||||
@@ -1491,13 +1553,19 @@ mobile/views/components/ui.nav.vue:
|
|||||||
follow-requests: "关注申请"
|
follow-requests: "关注申请"
|
||||||
search: "搜索"
|
search: "搜索"
|
||||||
user-lists: "列表"
|
user-lists: "列表"
|
||||||
|
user-groups: "群组"
|
||||||
widgets: "小部件"
|
widgets: "小部件"
|
||||||
game: "游戏"
|
game: "游戏"
|
||||||
admin: "管理"
|
admin: "管理"
|
||||||
about: "关于 Misskey"
|
about: "关于 Misskey"
|
||||||
mobile/views/pages/user-lists.vue:
|
mobile/views/pages/drive.vue:
|
||||||
title: "列表"
|
contextmenu:
|
||||||
enter-list-name: "输入要列出的列表的名称"
|
upload: "上传文件"
|
||||||
|
url-upload: "从URL上传文件"
|
||||||
|
create-folder: "创建文件夹"
|
||||||
|
rename-folder: "重命名文件夹"
|
||||||
|
move-folder: "移动此文件夹"
|
||||||
|
delete-folder: "删除此文件夹"
|
||||||
mobile/views/pages/signup.vue:
|
mobile/views/pages/signup.vue:
|
||||||
lets-start: "您的账户现已准备就绪! 📦"
|
lets-start: "您的账户现已准备就绪! 📦"
|
||||||
mobile/views/pages/followers.vue:
|
mobile/views/pages/followers.vue:
|
||||||
@@ -1507,12 +1575,12 @@ mobile/views/pages/following.vue:
|
|||||||
mobile/views/pages/home.vue:
|
mobile/views/pages/home.vue:
|
||||||
home: "首页"
|
home: "首页"
|
||||||
local: "Local"
|
local: "Local"
|
||||||
hybrid: "Social"
|
hybrid: "社交"
|
||||||
global: "Global"
|
global: "Global"
|
||||||
mentions: "Mentions"
|
mentions: "Mentions"
|
||||||
messages: "信息"
|
messages: "直接发布"
|
||||||
mobile/views/pages/tag.vue:
|
mobile/views/pages/tag.vue:
|
||||||
no-posts-found: "没有找到带有主题标签“{q}”的帖子"
|
no-posts-found: "没有找到带有哈希标签“{q}”的帖子"
|
||||||
mobile/views/pages/widgets.vue:
|
mobile/views/pages/widgets.vue:
|
||||||
dashboard: "仪表盘"
|
dashboard: "仪表盘"
|
||||||
widgets-hints: "您可以添加/删除/重新排列小部件。 要移动小部件,请拖动“三”。 点击“×”删除小部件。 某些小部件可以通过点击来更改显示。"
|
widgets-hints: "您可以添加/删除/重新排列小部件。 要移动小部件,请拖动“三”。 点击“×”删除小部件。 某些小部件可以通过点击来更改显示。"
|
||||||
@@ -1522,10 +1590,6 @@ mobile/views/pages/widgets/activity.vue:
|
|||||||
activity: "活动"
|
activity: "活动"
|
||||||
mobile/views/pages/share.vue:
|
mobile/views/pages/share.vue:
|
||||||
share-with: "共享{name}"
|
share-with: "共享{name}"
|
||||||
mobile/views/pages/received-follow-requests.vue:
|
|
||||||
title: "关注申请"
|
|
||||||
accept: "批准"
|
|
||||||
reject: "拒绝"
|
|
||||||
mobile/views/pages/note.vue:
|
mobile/views/pages/note.vue:
|
||||||
title: "帖文"
|
title: "帖文"
|
||||||
prev: "上一个帖子"
|
prev: "上一个帖子"
|
||||||
@@ -1563,8 +1627,8 @@ deck:
|
|||||||
widgets: "小部件"
|
widgets: "小部件"
|
||||||
home: "首页"
|
home: "首页"
|
||||||
local: "Local"
|
local: "Local"
|
||||||
hybrid: "Social"
|
hybrid: "社交"
|
||||||
hashtag: "标签"
|
hashtag: "哈希标签"
|
||||||
global: "Global"
|
global: "Global"
|
||||||
mentions: "Mentions"
|
mentions: "Mentions"
|
||||||
direct: "直接发布"
|
direct: "直接发布"
|
||||||
@@ -1594,29 +1658,10 @@ deck/deck.user-column.vue:
|
|||||||
images: "图片"
|
images: "图片"
|
||||||
activity: "活动"
|
activity: "活动"
|
||||||
timeline: "时间线"
|
timeline: "时间线"
|
||||||
pinned-notes: "标记投稿"
|
pinned-notes: "置顶帖"
|
||||||
docs:
|
docs:
|
||||||
edit-this-page-on-github: "发现错误或想要为文档做出贡献?"
|
edit-this-page-on-github: "发现错误或想要为文档做出贡献?"
|
||||||
edit-this-page-on-github-link: "在GitHub上编辑这个页面。"
|
edit-this-page-on-github-link: "在GitHub上编辑这个页面。"
|
||||||
api:
|
|
||||||
entities:
|
|
||||||
properties: "属性"
|
|
||||||
endpoints:
|
|
||||||
params: "参数"
|
|
||||||
no-params: "没有参数"
|
|
||||||
res: "回应"
|
|
||||||
require-credential: "此端点需要身份验证信息。"
|
|
||||||
require-permission: "此端点需要{permission}权限。"
|
|
||||||
has-limit: "有一个速率限制。"
|
|
||||||
duration-limit: "如果您发送请求在{duration}毫秒内多于{max}次,则无法发送更多请求。"
|
|
||||||
min-interval-limit: "如果自上次请求后未传递{interval}毫秒,则无法发送请求。"
|
|
||||||
show-src: "您可以查看此端点的源代码。"
|
|
||||||
show-src-link: "查阅GitHub上的代码"
|
|
||||||
generated: "该文档由API定义生成。"
|
|
||||||
props:
|
|
||||||
name: "名称"
|
|
||||||
type: "型号"
|
|
||||||
description: "描述"
|
|
||||||
dev/views/index.vue:
|
dev/views/index.vue:
|
||||||
manage-apps: "管理应用"
|
manage-apps: "管理应用"
|
||||||
dev/views/apps.vue:
|
dev/views/apps.vue:
|
||||||
@@ -1624,24 +1669,273 @@ dev/views/apps.vue:
|
|||||||
create-app: "创建应用"
|
create-app: "创建应用"
|
||||||
app-missing: "没有应用"
|
app-missing: "没有应用"
|
||||||
dev/views/new-app.vue:
|
dev/views/new-app.vue:
|
||||||
|
new-app: "新应用"
|
||||||
|
new-app-info: "可以从 API 中创建应用。 (app/create)"
|
||||||
create-app: "正在创建应用"
|
create-app: "正在创建应用"
|
||||||
app-name: "应用名称"
|
app-name: "应用名称"
|
||||||
|
app-name-placeholder: "ex) iOS版Misskey"
|
||||||
app-name-desc: "您应用的名称"
|
app-name-desc: "您应用的名称"
|
||||||
app-name-ex: "ex) iOS版本的Misskey"
|
|
||||||
app-overview: "应用摘要"
|
app-overview: "应用摘要"
|
||||||
app-desc: "您的应用的简要说明或介绍。"
|
app-overview-placeholder: " ex) iOS版Misskey客户端."
|
||||||
app-desc-ex: "ex) iOS版Misskey客户端."
|
app-overview-desc: "您的应用的简要说明或介绍。"
|
||||||
callback-url: "回应URL (optional)"
|
callback-url: "回应URL (optional)"
|
||||||
|
callback-url-placeholder: "ex) https://your.app.example.com/callback.php"
|
||||||
callback-url-desc: "通过身份验证表单对用户进行身份验证后重定向到的URL。"
|
callback-url-desc: "通过身份验证表单对用户进行身份验证后重定向到的URL。"
|
||||||
authority: "权限"
|
authority: "权限"
|
||||||
authority-desc: "只能通过API访问此处请求的功能。"
|
authority-desc: "只能通过API访问此处请求的功能。"
|
||||||
authority-warning: "您可以在创建应用程序后对其进行更改,但如果您授予不同的权限,则当时关联的所有用户密钥都将失效。"
|
authority-warning: "您可以在创建应用程序后对其进行更改,但如果您授予不同的权限,则当时关联的所有用户密钥都将失效。"
|
||||||
account-read: "查看账户信息"
|
pages:
|
||||||
account-write: "修改账户信息"
|
new-page: "创建页面"
|
||||||
note-write: "投稿。"
|
edit-page: "编辑页面"
|
||||||
reaction-write: "添加或删除反应。"
|
read-page: "查看源"
|
||||||
following-write: "关注和不关注"
|
page-created: "页面已创建"
|
||||||
drive-read: "查看网盘"
|
page-updated: "页面已更新"
|
||||||
drive-write: "管理网盘文件。"
|
are-you-sure-delete: "是否删除此页面?"
|
||||||
notification-read: "阅读您的通知"
|
page-deleted: "该页面已被删除。"
|
||||||
notification-write: "管理通知"
|
edit-this-page: "编辑此页面"
|
||||||
|
view-source: "查看源代码"
|
||||||
|
view-page: "查看页面"
|
||||||
|
like: "赞"
|
||||||
|
unlike: "取消赞"
|
||||||
|
liked-pages: "喜欢的页面"
|
||||||
|
my-pages: "个人页面"
|
||||||
|
inspector: "检查器"
|
||||||
|
content: "页面内容"
|
||||||
|
variables: "变量"
|
||||||
|
variables-info: "您可以使用变量创建动态页面。在文本中通过<b>{变量名}</b>的写法来嵌入变量值。例如在文本<b>Hello { thing } world!</b>中,如果变量(thing)的值为<b>ai</b>,那么该文本会成为<b>Hello ai world!</b>。"
|
||||||
|
variables-info2: "因为变量的计算(计算变量值)是从上到下执行的,所以不能在变量中引用下面的变量。例如从上到下依次定义了<b>A,B,C</b>3个变量,那么<b>C</b>中可以引用<b>A</b>或<b>B</b>,但是<b>A</b>无法引用<b>B</b>或<b>C</b>。"
|
||||||
|
variables-info3: "为了接收来自用户的输入,页面上设有“用户输入”块,在“变量名称”中设置要在其中保存输入值的变量名(变量会自动创建)。您可以使用该变量执行操作以响应用户输入。"
|
||||||
|
variables-info4: "通过使用函数,您可以将数值计算过程组合成可重用的形式。要创建函数,需要创建一个“函数”类型的变量。你可以将函数设定为槽函数(参数)的格式,槽函数的值可作为函数中的变量使用。另外,AiScript标准中还有一些函数会将函数作为参数(称为高阶函数)。\n除了已经预先定义的函数外,您也可以将它们设置为这些高阶函数的槽函数。"
|
||||||
|
more-details: "详细说明"
|
||||||
|
title: "标题"
|
||||||
|
url: "页面URL"
|
||||||
|
summary: "页面摘要"
|
||||||
|
align-center: "居中"
|
||||||
|
font: "字体"
|
||||||
|
fontSerif: "衬线字体"
|
||||||
|
fontSansSerif: "无衬线字体"
|
||||||
|
set-eye-catching-image: "设置封面图片"
|
||||||
|
remove-eye-catching-image: "删除封面图片"
|
||||||
|
choose-block: "添加块"
|
||||||
|
select-type: "类型选择"
|
||||||
|
enter-variable-name: "请确定变量名"
|
||||||
|
the-variable-name-is-already-used: "变量名已使用"
|
||||||
|
content-blocks: "内容"
|
||||||
|
input-blocks: "输入"
|
||||||
|
special-blocks: "特殊"
|
||||||
|
post-from-post-form: "发布此内容"
|
||||||
|
posted-from-post-form: "已发布"
|
||||||
|
blocks:
|
||||||
|
text: "文本"
|
||||||
|
textarea: "文本区域"
|
||||||
|
section: "章节"
|
||||||
|
image: "图片"
|
||||||
|
button: "按钮"
|
||||||
|
if: "如果"
|
||||||
|
_if:
|
||||||
|
variable: "变量"
|
||||||
|
post: "投稿形式"
|
||||||
|
_post:
|
||||||
|
text: "内容"
|
||||||
|
textInput: "文本输入"
|
||||||
|
_textInput:
|
||||||
|
name: "变量名"
|
||||||
|
text: "标题"
|
||||||
|
default: "默认值"
|
||||||
|
textareaInput: "多行文本输入"
|
||||||
|
_textareaInput:
|
||||||
|
name: "变量名"
|
||||||
|
text: "标题"
|
||||||
|
default: "默认值"
|
||||||
|
numberInput: "数值输入"
|
||||||
|
_numberInput:
|
||||||
|
name: "变量名"
|
||||||
|
text: "标题"
|
||||||
|
default: "默认值"
|
||||||
|
switch: "开关"
|
||||||
|
_switch:
|
||||||
|
name: "变量名"
|
||||||
|
text: "标题"
|
||||||
|
default: "默认值"
|
||||||
|
counter: "计数器"
|
||||||
|
_counter:
|
||||||
|
name: "变量名"
|
||||||
|
text: "标题"
|
||||||
|
inc: "增加值"
|
||||||
|
_button:
|
||||||
|
text: "标题"
|
||||||
|
action: "按下按钮时的行为"
|
||||||
|
_action:
|
||||||
|
dialog: "显示对话框"
|
||||||
|
_dialog:
|
||||||
|
content: "内容"
|
||||||
|
resetRandom: "随机值重置"
|
||||||
|
script:
|
||||||
|
categories:
|
||||||
|
flow: "控制"
|
||||||
|
logical: "逻辑运算"
|
||||||
|
operation: "计算"
|
||||||
|
comparison: "比较"
|
||||||
|
random: "随机"
|
||||||
|
value: "值"
|
||||||
|
fn: "函数"
|
||||||
|
text: "文本操作"
|
||||||
|
convert: "转换"
|
||||||
|
list: "列表"
|
||||||
|
blocks:
|
||||||
|
text: "文本"
|
||||||
|
multiLineText: "文本 (多行)"
|
||||||
|
textList: "文本列表"
|
||||||
|
_textList:
|
||||||
|
info: "情使用换行符分隔每行"
|
||||||
|
strLen: "文本长度"
|
||||||
|
_strLen:
|
||||||
|
arg1: "文本"
|
||||||
|
strPick: "字符提取"
|
||||||
|
_strPick:
|
||||||
|
arg1: "文本"
|
||||||
|
arg2: "字符位置"
|
||||||
|
strReplace: "文本替换"
|
||||||
|
_strReplace:
|
||||||
|
arg1: "文本"
|
||||||
|
arg2: "替换之前"
|
||||||
|
arg3: "替换之后"
|
||||||
|
strReverse: "文本反向"
|
||||||
|
_strReverse:
|
||||||
|
arg1: "文本"
|
||||||
|
join: "合并文本"
|
||||||
|
_join:
|
||||||
|
arg1: "列表"
|
||||||
|
arg2: "分隔符"
|
||||||
|
add: "+ 加"
|
||||||
|
_add:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
subtract: "- 减"
|
||||||
|
_subtract:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
multiply: "× 乘"
|
||||||
|
_multiply:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
divide: "÷ 除"
|
||||||
|
_divide:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
remind: "÷ 取模"
|
||||||
|
_remind:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
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: "位置"
|
||||||
|
number: "数值"
|
||||||
|
stringToNumber: "文本到数字"
|
||||||
|
_stringToNumber:
|
||||||
|
arg1: "文本"
|
||||||
|
numberToString: "数字到文本"
|
||||||
|
_numberToString:
|
||||||
|
arg1: "数值"
|
||||||
|
splitStrByLine: "将文本按行拆分"
|
||||||
|
_splitStrByLine:
|
||||||
|
arg1: "文本"
|
||||||
|
ref: "变量"
|
||||||
|
fn: "函数"
|
||||||
|
_fn:
|
||||||
|
slots: "槽函数"
|
||||||
|
slots-info: "请使用换行符分隔每个槽函数"
|
||||||
|
arg1: "输出"
|
||||||
|
for: "重复"
|
||||||
|
_for:
|
||||||
|
arg1: "次数"
|
||||||
|
arg2: "处理"
|
||||||
|
typeError: "槽函数{slot}需要传入“{expect}”,但是实际传入为“{actual}”!"
|
||||||
|
thereIsEmptySlot: "槽函数{slot}为空!"
|
||||||
|
types:
|
||||||
|
string: "文本"
|
||||||
|
number: "数值"
|
||||||
|
boolean: "布尔值"
|
||||||
|
array: "列表"
|
||||||
|
stringArray: "文本列表"
|
||||||
|
emptySlot: "空白槽函数"
|
||||||
|
enviromentVariables: "环境变量"
|
||||||
|
pageVariables: "页面元素"
|
||||||
|
argVariables: "输入槽函数"
|
||||||
|
|||||||
@@ -86,3 +86,5 @@ admin/views/dashboard.vue:
|
|||||||
drive: "雲端硬碟"
|
drive: "雲端硬碟"
|
||||||
admin/views/charts.vue:
|
admin/views/charts.vue:
|
||||||
drive: "雲端硬碟"
|
drive: "雲端硬碟"
|
||||||
|
pages:
|
||||||
|
like: "贊"
|
||||||
|
|||||||
31
migration/1556348509290-Pages.ts
Normal file
31
migration/1556348509290-Pages.ts
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
import {MigrationInterface, QueryRunner} from "typeorm";
|
||||||
|
|
||||||
|
export class Pages1556348509290 implements MigrationInterface {
|
||||||
|
|
||||||
|
public async up(queryRunner: QueryRunner): Promise<any> {
|
||||||
|
await queryRunner.query(`CREATE TYPE "page_visibility_enum" AS ENUM('public', 'followers', 'specified')`);
|
||||||
|
await queryRunner.query(`CREATE TABLE "page" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL, "title" character varying(256) NOT NULL, "name" character varying(256) NOT NULL, "summary" character varying(256), "alignCenter" boolean NOT NULL, "font" character varying(32) NOT NULL, "userId" character varying(32) NOT NULL, "eyeCatchingImageId" character varying(32), "content" jsonb NOT NULL DEFAULT '[]', "variables" jsonb NOT NULL DEFAULT '[]', "visibility" "page_visibility_enum" NOT NULL, "visibleUserIds" character varying(32) array NOT NULL DEFAULT '{}'::varchar[], CONSTRAINT "PK_742f4117e065c5b6ad21b37ba1f" PRIMARY KEY ("id"))`);
|
||||||
|
await queryRunner.query(`CREATE INDEX "IDX_fbb4297c927a9b85e9cefa2eb1" ON "page" ("createdAt") `);
|
||||||
|
await queryRunner.query(`CREATE INDEX "IDX_af639b066dfbca78b01a920f8a" ON "page" ("updatedAt") `);
|
||||||
|
await queryRunner.query(`CREATE INDEX "IDX_b82c19c08afb292de4600d99e4" ON "page" ("name") `);
|
||||||
|
await queryRunner.query(`CREATE INDEX "IDX_ae1d917992dd0c9d9bbdad06c4" ON "page" ("userId") `);
|
||||||
|
await queryRunner.query(`CREATE INDEX "IDX_90148bbc2bf0854428786bfc15" ON "page" ("visibleUserIds") `);
|
||||||
|
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_2133ef8317e4bdb839c0dcbf13" ON "page" ("userId", "name") `);
|
||||||
|
await queryRunner.query(`ALTER TABLE "page" ADD CONSTRAINT "FK_ae1d917992dd0c9d9bbdad06c4a" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "page" ADD CONSTRAINT "FK_3126dd7c502c9e4d7597ef7ef10" FOREIGN KEY ("eyeCatchingImageId") REFERENCES "drive_file"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async down(queryRunner: QueryRunner): Promise<any> {
|
||||||
|
await queryRunner.query(`ALTER TABLE "page" DROP CONSTRAINT "FK_3126dd7c502c9e4d7597ef7ef10"`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "page" DROP CONSTRAINT "FK_ae1d917992dd0c9d9bbdad06c4a"`);
|
||||||
|
await queryRunner.query(`DROP INDEX "IDX_2133ef8317e4bdb839c0dcbf13"`);
|
||||||
|
await queryRunner.query(`DROP INDEX "IDX_90148bbc2bf0854428786bfc15"`);
|
||||||
|
await queryRunner.query(`DROP INDEX "IDX_ae1d917992dd0c9d9bbdad06c4"`);
|
||||||
|
await queryRunner.query(`DROP INDEX "IDX_b82c19c08afb292de4600d99e4"`);
|
||||||
|
await queryRunner.query(`DROP INDEX "IDX_af639b066dfbca78b01a920f8a"`);
|
||||||
|
await queryRunner.query(`DROP INDEX "IDX_fbb4297c927a9b85e9cefa2eb1"`);
|
||||||
|
await queryRunner.query(`DROP TABLE "page"`);
|
||||||
|
await queryRunner.query(`DROP TYPE "page_visibility_enum"`);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
23
migration/1556746559567-UserProfile.ts
Normal file
23
migration/1556746559567-UserProfile.ts
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
import {MigrationInterface, QueryRunner} from "typeorm";
|
||||||
|
|
||||||
|
export class UserProfile1556746559567 implements MigrationInterface {
|
||||||
|
|
||||||
|
public async up(queryRunner: QueryRunner): Promise<any> {
|
||||||
|
await queryRunner.query(`UPDATE "user_profile" SET github = FALSE`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "githubId"`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "user_profile" ADD COLUMN "githubId" VARCHAR(64)`);
|
||||||
|
await queryRunner.query(`UPDATE "user_profile" SET discord = FALSE`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "discordExpiresDate"`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "user_profile" ADD COLUMN "discordExpiresDate" VARCHAR(64)`);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async down(queryRunner: QueryRunner): Promise<any> {
|
||||||
|
await queryRunner.query(`UPDATE "user_profile" SET github = FALSE`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "githubId"`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "user_profile" ADD COLUMN "githubId" INTEGER`);
|
||||||
|
await queryRunner.query(`UPDATE "user_profile" SET discord = FALSE`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "discordExpiresDate"`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "user_profile" ADD COLUMN "discordExpiresDate" INTEGER`);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
13
migration/1557476068003-PinnedUsers.ts
Normal file
13
migration/1557476068003-PinnedUsers.ts
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
import {MigrationInterface, QueryRunner} from "typeorm";
|
||||||
|
|
||||||
|
export class PinnedUsers1557476068003 implements MigrationInterface {
|
||||||
|
|
||||||
|
public async up(queryRunner: QueryRunner): Promise<any> {
|
||||||
|
await queryRunner.query(`ALTER TABLE "meta" ADD "pinnedUsers" character varying(256) array NOT NULL DEFAULT '{}'::varchar[]`);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async down(queryRunner: QueryRunner): Promise<any> {
|
||||||
|
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "pinnedUsers"`);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
16
migration/1557761316509-AddSomeUrls.ts
Normal file
16
migration/1557761316509-AddSomeUrls.ts
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import {MigrationInterface, QueryRunner} from "typeorm";
|
||||||
|
|
||||||
|
export class AddSomeUrls1557761316509 implements MigrationInterface {
|
||||||
|
|
||||||
|
public async up(queryRunner: QueryRunner): Promise<any> {
|
||||||
|
await queryRunner.query(`ALTER TABLE "meta" ADD "ToSUrl" character varying(512)`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "meta" ADD "repositoryUrl" character varying(512) NOT NULL DEFAULT 'https://github.com/syuilo/misskey'`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "meta" ADD "feedbackUrl" character varying(512) DEFAULT 'https://github.com/syuilo/misskey/issues/new'`);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async down(queryRunner: QueryRunner): Promise<any> {
|
||||||
|
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "feedbackUrl"`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "repositoryUrl"`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "ToSUrl"`);
|
||||||
|
}
|
||||||
|
}
|
||||||
31
migration/1557932705754-ObjectStorageSetting.ts
Normal file
31
migration/1557932705754-ObjectStorageSetting.ts
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
import {MigrationInterface, QueryRunner} from "typeorm";
|
||||||
|
|
||||||
|
export class ObjectStorageSetting1557932705754 implements MigrationInterface {
|
||||||
|
|
||||||
|
public async up(queryRunner: QueryRunner): Promise<any> {
|
||||||
|
await queryRunner.query(`ALTER TABLE "meta" ADD "useObjectStorage" boolean NOT NULL DEFAULT false`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "meta" ADD "objectStorageBucket" character varying(512)`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "meta" ADD "objectStoragePrefix" character varying(512)`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "meta" ADD "objectStorageBaseUrl" character varying(512)`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "meta" ADD "objectStorageEndpoint" character varying(512)`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "meta" ADD "objectStorageRegion" character varying(512)`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "meta" ADD "objectStorageAccessKey" character varying(512)`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "meta" ADD "objectStorageSecretKey" character varying(512)`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "meta" ADD "objectStoragePort" integer`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "meta" ADD "objectStorageUseSSL" boolean NOT NULL DEFAULT true`);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async down(queryRunner: QueryRunner): Promise<any> {
|
||||||
|
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "objectStorageUseSSL"`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "objectStoragePort"`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "objectStorageSecretKey"`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "objectStorageAccessKey"`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "objectStorageRegion"`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "objectStorageEndpoint"`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "objectStorageBaseUrl"`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "objectStoragePrefix"`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "objectStorageBucket"`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "useObjectStorage"`);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
23
migration/1558072954435-PageLike.ts
Normal file
23
migration/1558072954435-PageLike.ts
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
import {MigrationInterface, QueryRunner} from "typeorm";
|
||||||
|
|
||||||
|
export class PageLike1558072954435 implements MigrationInterface {
|
||||||
|
|
||||||
|
public async up(queryRunner: QueryRunner): Promise<any> {
|
||||||
|
await queryRunner.query(`CREATE TABLE "page_like" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "userId" character varying(32) NOT NULL, "pageId" character varying(32) NOT NULL, CONSTRAINT "PK_813f034843af992d3ae0f43c64c" PRIMARY KEY ("id"))`);
|
||||||
|
await queryRunner.query(`CREATE INDEX "IDX_0e61efab7f88dbb79c9166dbb4" ON "page_like" ("userId") `);
|
||||||
|
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_4ce6fb9c70529b4c8ac46c9bfa" ON "page_like" ("userId", "pageId") `);
|
||||||
|
await queryRunner.query(`ALTER TABLE "page" ADD "likedCount" integer NOT NULL DEFAULT 0`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "page_like" ADD CONSTRAINT "FK_0e61efab7f88dbb79c9166dbb48" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "page_like" ADD CONSTRAINT "FK_cf8782626dced3176038176a847" FOREIGN KEY ("pageId") REFERENCES "page"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async down(queryRunner: QueryRunner): Promise<any> {
|
||||||
|
await queryRunner.query(`ALTER TABLE "page_like" DROP CONSTRAINT "FK_cf8782626dced3176038176a847"`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "page_like" DROP CONSTRAINT "FK_0e61efab7f88dbb79c9166dbb48"`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "page" DROP COLUMN "likedCount"`);
|
||||||
|
await queryRunner.query(`DROP INDEX "IDX_4ce6fb9c70529b4c8ac46c9bfa"`);
|
||||||
|
await queryRunner.query(`DROP INDEX "IDX_0e61efab7f88dbb79c9166dbb4"`);
|
||||||
|
await queryRunner.query(`DROP TABLE "page_like"`);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
41
migration/1558103093633-UserGroup.ts
Normal file
41
migration/1558103093633-UserGroup.ts
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
import {MigrationInterface, QueryRunner} from "typeorm";
|
||||||
|
|
||||||
|
export class UserGroup1558103093633 implements MigrationInterface {
|
||||||
|
|
||||||
|
public async up(queryRunner: QueryRunner): Promise<any> {
|
||||||
|
await queryRunner.query(`CREATE TABLE "user_group" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "name" character varying(256) NOT NULL, "userId" character varying(32) NOT NULL, "isPrivate" boolean NOT NULL DEFAULT false, CONSTRAINT "PK_3c29fba6fe013ec8724378ce7c9" PRIMARY KEY ("id"))`);
|
||||||
|
await queryRunner.query(`CREATE INDEX "IDX_20e30aa35180e317e133d75316" ON "user_group" ("createdAt") `);
|
||||||
|
await queryRunner.query(`CREATE INDEX "IDX_3d6b372788ab01be58853003c9" ON "user_group" ("userId") `);
|
||||||
|
await queryRunner.query(`CREATE TABLE "user_group_joining" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "userId" character varying(32) NOT NULL, "userGroupId" character varying(32) NOT NULL, CONSTRAINT "PK_15f2425885253c5507e1599cfe7" PRIMARY KEY ("id"))`);
|
||||||
|
await queryRunner.query(`CREATE INDEX "IDX_f3a1b4bd0c7cabba958a0c0b23" ON "user_group_joining" ("userId") `);
|
||||||
|
await queryRunner.query(`CREATE INDEX "IDX_67dc758bc0566985d1b3d39986" ON "user_group_joining" ("userGroupId") `);
|
||||||
|
await queryRunner.query(`ALTER TABLE "messaging_message" ADD "groupId" character varying(32)`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "messaging_message" ADD "reads" character varying(32) array NOT NULL DEFAULT '{}'::varchar[]`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "messaging_message" ALTER COLUMN "recipientId" DROP NOT NULL`);
|
||||||
|
await queryRunner.query(`COMMENT ON COLUMN "messaging_message"."recipientId" IS 'The recipient user ID.'`);
|
||||||
|
await queryRunner.query(`CREATE INDEX "IDX_2c4be03b446884f9e9c502135b" ON "messaging_message" ("groupId") `);
|
||||||
|
await queryRunner.query(`ALTER TABLE "messaging_message" ADD CONSTRAINT "FK_2c4be03b446884f9e9c502135be" FOREIGN KEY ("groupId") REFERENCES "user_group"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "user_group" ADD CONSTRAINT "FK_3d6b372788ab01be58853003c93" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "user_group_joining" ADD CONSTRAINT "FK_f3a1b4bd0c7cabba958a0c0b231" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "user_group_joining" ADD CONSTRAINT "FK_67dc758bc0566985d1b3d399865" FOREIGN KEY ("userGroupId") REFERENCES "user_group"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async down(queryRunner: QueryRunner): Promise<any> {
|
||||||
|
await queryRunner.query(`ALTER TABLE "user_group_joining" DROP CONSTRAINT "FK_67dc758bc0566985d1b3d399865"`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "user_group_joining" DROP CONSTRAINT "FK_f3a1b4bd0c7cabba958a0c0b231"`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "user_group" DROP CONSTRAINT "FK_3d6b372788ab01be58853003c93"`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "messaging_message" DROP CONSTRAINT "FK_2c4be03b446884f9e9c502135be"`);
|
||||||
|
await queryRunner.query(`DROP INDEX "IDX_2c4be03b446884f9e9c502135b"`);
|
||||||
|
await queryRunner.query(`COMMENT ON COLUMN "messaging_message"."recipientId" IS ''`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "messaging_message" ALTER COLUMN "recipientId" SET NOT NULL`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "messaging_message" DROP COLUMN "reads"`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "messaging_message" DROP COLUMN "groupId"`);
|
||||||
|
await queryRunner.query(`DROP INDEX "IDX_67dc758bc0566985d1b3d39986"`);
|
||||||
|
await queryRunner.query(`DROP INDEX "IDX_f3a1b4bd0c7cabba958a0c0b23"`);
|
||||||
|
await queryRunner.query(`DROP TABLE "user_group_joining"`);
|
||||||
|
await queryRunner.query(`DROP INDEX "IDX_3d6b372788ab01be58853003c9"`);
|
||||||
|
await queryRunner.query(`DROP INDEX "IDX_20e30aa35180e317e133d75316"`);
|
||||||
|
await queryRunner.query(`DROP TABLE "user_group"`);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
25
migration/1558257926829-UserGroupInvite.ts
Normal file
25
migration/1558257926829-UserGroupInvite.ts
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
import {MigrationInterface, QueryRunner} from "typeorm";
|
||||||
|
|
||||||
|
export class UserGroupInvite1558257926829 implements MigrationInterface {
|
||||||
|
|
||||||
|
public async up(queryRunner: QueryRunner): Promise<any> {
|
||||||
|
await queryRunner.query(`CREATE TABLE "user_group_invite" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "userId" character varying(32) NOT NULL, "userGroupId" character varying(32) NOT NULL, CONSTRAINT "PK_3893884af0d3a5f4d01e7921a97" PRIMARY KEY ("id"))`);
|
||||||
|
await queryRunner.query(`CREATE INDEX "IDX_1039988afa3bf991185b277fe0" ON "user_group_invite" ("userId") `);
|
||||||
|
await queryRunner.query(`CREATE INDEX "IDX_e10924607d058004304611a436" ON "user_group_invite" ("userGroupId") `);
|
||||||
|
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_78787741f9010886796f2320a4" ON "user_group_invite" ("userId", "userGroupId") `);
|
||||||
|
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_d9ecaed8c6dc43f3592c229282" ON "user_group_joining" ("userId", "userGroupId") `);
|
||||||
|
await queryRunner.query(`ALTER TABLE "user_group_invite" ADD CONSTRAINT "FK_1039988afa3bf991185b277fe03" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "user_group_invite" ADD CONSTRAINT "FK_e10924607d058004304611a436a" FOREIGN KEY ("userGroupId") REFERENCES "user_group"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async down(queryRunner: QueryRunner): Promise<any> {
|
||||||
|
await queryRunner.query(`ALTER TABLE "user_group_invite" DROP CONSTRAINT "FK_e10924607d058004304611a436a"`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "user_group_invite" DROP CONSTRAINT "FK_1039988afa3bf991185b277fe03"`);
|
||||||
|
await queryRunner.query(`DROP INDEX "IDX_d9ecaed8c6dc43f3592c229282"`);
|
||||||
|
await queryRunner.query(`DROP INDEX "IDX_78787741f9010886796f2320a4"`);
|
||||||
|
await queryRunner.query(`DROP INDEX "IDX_e10924607d058004304611a436"`);
|
||||||
|
await queryRunner.query(`DROP INDEX "IDX_1039988afa3bf991185b277fe0"`);
|
||||||
|
await queryRunner.query(`DROP TABLE "user_group_invite"`);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
13
migration/1558266512381-UserListJoining.ts
Normal file
13
migration/1558266512381-UserListJoining.ts
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
import {MigrationInterface, QueryRunner} from "typeorm";
|
||||||
|
|
||||||
|
export class UserListJoining1558266512381 implements MigrationInterface {
|
||||||
|
|
||||||
|
public async up(queryRunner: QueryRunner): Promise<any> {
|
||||||
|
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_90f7da835e4c10aca6853621e1" ON "user_list_joining" ("userId", "userListId") `);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async down(queryRunner: QueryRunner): Promise<any> {
|
||||||
|
await queryRunner.query(`DROP INDEX "IDX_90f7da835e4c10aca6853621e1"`);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
154
package.json
154
package.json
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "misskey",
|
"name": "misskey",
|
||||||
"author": "syuilo <i@syuilo.com>",
|
"author": "syuilo <i@syuilo.com>",
|
||||||
"version": "10.98.0",
|
"version": "11.18.1",
|
||||||
"codename": "nighthike",
|
"codename": "daybreak",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/syuilo/misskey.git"
|
"url": "https://github.com/syuilo/misskey.git"
|
||||||
@@ -11,7 +11,10 @@
|
|||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "node ./index.js",
|
"start": "node ./index.js",
|
||||||
"debug": "DEBUG=misskey:* node ./index.js",
|
"init": "node ./built/init.js",
|
||||||
|
"ormconfig": "node ./built/ormconfig.js",
|
||||||
|
"migrate": "npm run ormconfig && ts-node ./node_modules/typeorm/cli.js migration:run",
|
||||||
|
"migrateandstart": "npm run migrate && npm run start",
|
||||||
"build": "webpack && gulp build",
|
"build": "webpack && gulp build",
|
||||||
"webpack": "webpack",
|
"webpack": "webpack",
|
||||||
"watch": "webpack --watch",
|
"watch": "webpack --watch",
|
||||||
@@ -23,23 +26,21 @@
|
|||||||
"format": "gulp format"
|
"format": "gulp format"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@elastic/elasticsearch": "7.0.0-rc.2",
|
||||||
"@fortawesome/fontawesome-svg-core": "1.2.15",
|
"@fortawesome/fontawesome-svg-core": "1.2.15",
|
||||||
"@fortawesome/free-brands-svg-icons": "5.7.2",
|
"@fortawesome/free-brands-svg-icons": "5.7.2",
|
||||||
"@fortawesome/free-regular-svg-icons": "5.7.2",
|
"@fortawesome/free-regular-svg-icons": "5.7.2",
|
||||||
"@fortawesome/free-solid-svg-icons": "5.7.2",
|
"@fortawesome/free-solid-svg-icons": "5.7.2",
|
||||||
"@fortawesome/vue-fontawesome": "0.1.5",
|
"@fortawesome/vue-fontawesome": "0.1.5",
|
||||||
"@koa/cors": "2.2.3",
|
"@koa/cors": "2.2.3",
|
||||||
"@prezzemolo/rap": "0.1.2",
|
|
||||||
"@prezzemolo/zip": "0.0.3",
|
"@prezzemolo/zip": "0.0.3",
|
||||||
"@types/bcryptjs": "2.4.2",
|
"@types/bcryptjs": "2.4.2",
|
||||||
"@types/bull": "3.5.8",
|
"@types/bull": "3.5.11",
|
||||||
"@types/chai-http": "3.0.5",
|
|
||||||
"@types/dateformat": "3.0.0",
|
"@types/dateformat": "3.0.0",
|
||||||
"@types/deep-equal": "1.0.1",
|
"@types/deep-equal": "1.0.1",
|
||||||
"@types/double-ended-queue": "2.1.0",
|
"@types/double-ended-queue": "2.1.0",
|
||||||
"@types/elasticsearch": "5.0.30",
|
"@types/file-type": "10.9.1",
|
||||||
"@types/file-type": "10.6.0",
|
"@types/gulp": "4.0.6",
|
||||||
"@types/gulp": "4.0.5",
|
|
||||||
"@types/gulp-mocha": "0.0.32",
|
"@types/gulp-mocha": "0.0.32",
|
||||||
"@types/gulp-rename": "0.0.33",
|
"@types/gulp-rename": "0.0.33",
|
||||||
"@types/gulp-replace": "0.0.31",
|
"@types/gulp-replace": "0.0.31",
|
||||||
@@ -47,86 +48,83 @@
|
|||||||
"@types/gulp-util": "3.0.34",
|
"@types/gulp-util": "3.0.34",
|
||||||
"@types/is-root": "1.0.0",
|
"@types/is-root": "1.0.0",
|
||||||
"@types/is-url": "1.2.28",
|
"@types/is-url": "1.2.28",
|
||||||
"@types/js-yaml": "3.12.0",
|
"@types/js-yaml": "3.12.1",
|
||||||
"@types/jsdom": "12.2.3",
|
"@types/jsdom": "12.2.3",
|
||||||
"@types/katex": "0.10.1",
|
"@types/katex": "0.10.1",
|
||||||
"@types/koa": "2.0.48",
|
"@types/koa": "2.0.48",
|
||||||
"@types/koa-bodyparser": "5.0.2",
|
"@types/koa-bodyparser": "5.0.2",
|
||||||
"@types/koa-compress": "2.0.8",
|
"@types/koa-compress": "2.0.9",
|
||||||
"@types/koa-cors": "0.0.0",
|
"@types/koa-cors": "0.0.0",
|
||||||
"@types/koa-favicon": "2.0.19",
|
"@types/koa-favicon": "2.0.19",
|
||||||
"@types/koa-logger": "3.1.1",
|
"@types/koa-logger": "3.1.1",
|
||||||
"@types/koa-mount": "3.0.1",
|
"@types/koa-mount": "3.0.1",
|
||||||
"@types/koa-multer": "1.0.0",
|
"@types/koa-multer": "1.0.0",
|
||||||
"@types/koa-router": "7.0.40",
|
"@types/koa-router": "7.0.40",
|
||||||
"@types/koa-send": "4.1.1",
|
"@types/koa-send": "4.1.2",
|
||||||
"@types/koa-views": "2.0.3",
|
"@types/koa-views": "2.0.3",
|
||||||
"@types/koa__cors": "2.2.3",
|
"@types/koa__cors": "2.2.3",
|
||||||
|
"@types/lolex": "3.1.1",
|
||||||
"@types/minio": "7.0.1",
|
"@types/minio": "7.0.1",
|
||||||
"@types/mkdirp": "0.5.2",
|
"@types/mocha": "5.2.6",
|
||||||
"@types/mocha": "5.2.5",
|
"@types/node": "11.13.8",
|
||||||
"@types/mongodb": "3.1.20",
|
"@types/nodemailer": "4.6.8",
|
||||||
"@types/node": "11.10.4",
|
|
||||||
"@types/nodemailer": "4.6.6",
|
|
||||||
"@types/nprogress": "0.0.29",
|
"@types/nprogress": "0.0.29",
|
||||||
"@types/oauth": "0.9.1",
|
"@types/oauth": "0.9.1",
|
||||||
"@types/parse5": "5.0.0",
|
"@types/parse5": "5.0.0",
|
||||||
"@types/parsimmon": "1.10.0",
|
"@types/parsimmon": "1.10.0",
|
||||||
"@types/portscanner": "2.1.0",
|
"@types/portscanner": "2.1.0",
|
||||||
"@types/pug": "2.0.4",
|
"@types/pug": "2.0.4",
|
||||||
"@types/qrcode": "1.3.0",
|
"@types/qrcode": "1.3.2",
|
||||||
|
"@types/random-seed": "0.3.3",
|
||||||
"@types/ratelimiter": "2.1.28",
|
"@types/ratelimiter": "2.1.28",
|
||||||
"@types/redis": "2.8.10",
|
"@types/redis": "2.8.12",
|
||||||
"@types/rename": "1.0.1",
|
"@types/rename": "1.0.1",
|
||||||
"@types/request": "2.48.1",
|
"@types/request": "2.48.1",
|
||||||
"@types/request-promise-native": "1.0.15",
|
"@types/request-promise-native": "1.0.16",
|
||||||
"@types/request-stats": "3.0.0",
|
"@types/request-stats": "3.0.0",
|
||||||
"@types/rimraf": "2.0.2",
|
"@types/rimraf": "2.0.2",
|
||||||
"@types/seedrandom": "2.4.27",
|
"@types/seedrandom": "2.4.28",
|
||||||
"@types/sharp": "0.21.2",
|
"@types/sharp": "0.22.1",
|
||||||
"@types/showdown": "1.9.2",
|
"@types/showdown": "1.9.2",
|
||||||
"@types/speakeasy": "2.0.4",
|
"@types/speakeasy": "2.0.4",
|
||||||
"@types/systeminformation": "3.23.1",
|
"@types/systeminformation": "3.23.1",
|
||||||
"@types/tinycolor2": "1.4.1",
|
"@types/tinycolor2": "1.4.1",
|
||||||
"@types/tmp": "0.0.33",
|
"@types/tmp": "0.1.0",
|
||||||
"@types/uuid": "3.4.4",
|
"@types/uuid": "3.4.4",
|
||||||
"@types/web-push": "3.3.0",
|
"@types/web-push": "3.3.0",
|
||||||
"@types/webpack": "4.4.24",
|
"@types/webpack": "4.4.29",
|
||||||
"@types/webpack-stream": "3.2.10",
|
"@types/webpack-stream": "3.2.10",
|
||||||
"@types/websocket": "0.0.40",
|
"@types/websocket": "0.0.40",
|
||||||
"@types/ws": "6.0.1",
|
"@types/ws": "6.0.1",
|
||||||
"animejs": "3.0.1",
|
"animejs": "3.0.1",
|
||||||
"apexcharts": "3.6.2",
|
"apexcharts": "3.6.12",
|
||||||
"autobind-decorator": "2.4.0",
|
"autobind-decorator": "2.4.0",
|
||||||
"autosize": "4.0.2",
|
"autosize": "4.0.2",
|
||||||
"autwh": "0.1.0",
|
"autwh": "0.1.0",
|
||||||
"bcryptjs": "2.4.3",
|
"bcryptjs": "2.4.3",
|
||||||
"bootstrap-vue": "2.0.0-rc.13",
|
"bootstrap-vue": "2.0.0-rc.13",
|
||||||
"bull": "3.7.0",
|
"bull": "3.9.1",
|
||||||
"cafy": "15.1.0",
|
"cafy": "15.1.1",
|
||||||
"chai": "4.2.0",
|
"chai": "4.2.0",
|
||||||
"chai-http": "4.2.1",
|
|
||||||
"chalk": "2.4.2",
|
"chalk": "2.4.2",
|
||||||
"commander": "2.19.0",
|
"cli-highlight": "2.1.1",
|
||||||
|
"commander": "2.20.0",
|
||||||
"content-disposition": "0.5.3",
|
"content-disposition": "0.5.3",
|
||||||
"crc-32": "1.2.0",
|
"crc-32": "1.2.0",
|
||||||
"css-loader": "2.1.1",
|
"css-loader": "2.1.1",
|
||||||
"cssnano": "4.1.10",
|
"cssnano": "4.1.10",
|
||||||
"dateformat": "3.0.3",
|
"dateformat": "3.0.3",
|
||||||
"deep-equal": "1.0.1",
|
"deep-equal": "1.0.1",
|
||||||
"deepcopy": "0.6.3",
|
"diskusage": "1.1.1",
|
||||||
"diskusage": "1.0.0",
|
|
||||||
"double-ended-queue": "2.1.0-0",
|
"double-ended-queue": "2.1.0-0",
|
||||||
"elasticsearch": "15.4.1",
|
|
||||||
"emojilib": "2.4.0",
|
"emojilib": "2.4.0",
|
||||||
"escape-regexp": "0.0.1",
|
"eslint": "5.16.0",
|
||||||
"eslint": "5.15.1",
|
|
||||||
"eslint-plugin-vue": "5.2.2",
|
"eslint-plugin-vue": "5.2.2",
|
||||||
"eventemitter3": "3.1.0",
|
"eventemitter3": "3.1.2",
|
||||||
"feed": "2.0.4",
|
"feed": "2.0.4",
|
||||||
"file-type": "10.9.0",
|
"file-type": "10.11.0",
|
||||||
"fuckadblock": "3.2.1",
|
"fuckadblock": "3.2.1",
|
||||||
"gulp": "4.0.0",
|
"gulp": "4.0.2",
|
||||||
"gulp-cssnano": "2.1.3",
|
"gulp-cssnano": "2.1.3",
|
||||||
"gulp-imagemin": "5.0.3",
|
"gulp-imagemin": "5.0.3",
|
||||||
"gulp-mocha": "6.0.0",
|
"gulp-mocha": "6.0.0",
|
||||||
@@ -135,19 +133,19 @@
|
|||||||
"gulp-sourcemaps": "2.6.5",
|
"gulp-sourcemaps": "2.6.5",
|
||||||
"gulp-stylus": "2.7.0",
|
"gulp-stylus": "2.7.0",
|
||||||
"gulp-tslint": "8.1.4",
|
"gulp-tslint": "8.1.4",
|
||||||
"gulp-typescript": "5.0.0",
|
"gulp-typescript": "5.0.1",
|
||||||
"gulp-uglify": "3.0.2",
|
"gulp-uglify": "3.0.2",
|
||||||
"gulp-util": "3.0.8",
|
"gulp-util": "3.0.8",
|
||||||
"hard-source-webpack-plugin": "0.13.1",
|
"hard-source-webpack-plugin": "0.13.1",
|
||||||
"html-minifier": "3.5.21",
|
"html-minifier": "4.0.0",
|
||||||
"http-signature": "1.2.0",
|
"http-signature": "1.2.0",
|
||||||
"insert-text-at-cursor": "0.1.2",
|
"insert-text-at-cursor": "0.2.0",
|
||||||
"is-root": "2.0.0",
|
"is-root": "2.1.0",
|
||||||
"is-svg": "4.0.0",
|
"is-svg": "4.1.0",
|
||||||
"js-yaml": "3.12.2",
|
"js-yaml": "3.13.1",
|
||||||
"jsdom": "14.0.0",
|
"jsdom": "15.1.0",
|
||||||
"json5": "2.1.0",
|
"json5": "2.1.0",
|
||||||
"json5-loader": "1.0.1",
|
"json5-loader": "2.0.0",
|
||||||
"katex": "0.10.1",
|
"katex": "0.10.1",
|
||||||
"koa": "2.7.0",
|
"koa": "2.7.0",
|
||||||
"koa-bodyparser": "4.2.1",
|
"koa-bodyparser": "4.2.1",
|
||||||
@@ -160,50 +158,53 @@
|
|||||||
"koa-router": "7.4.0",
|
"koa-router": "7.4.0",
|
||||||
"koa-send": "5.0.0",
|
"koa-send": "5.0.0",
|
||||||
"koa-slow": "2.1.0",
|
"koa-slow": "2.1.0",
|
||||||
"koa-views": "6.1.5",
|
"koa-views": "6.2.0",
|
||||||
"langmap": "0.0.16",
|
"langmap": "0.0.16",
|
||||||
"loader-utils": "1.2.3",
|
"loader-utils": "1.2.3",
|
||||||
|
"lolex": "3.1.0",
|
||||||
"lookup-dns-cache": "2.1.0",
|
"lookup-dns-cache": "2.1.0",
|
||||||
"minio": "7.0.5",
|
"minio": "7.0.8",
|
||||||
"mkdirp": "0.5.1",
|
"mocha": "6.1.4",
|
||||||
"mocha": "5.2.0",
|
|
||||||
"moji": "0.5.1",
|
"moji": "0.5.1",
|
||||||
"moment": "2.24.0",
|
"moment": "2.24.0",
|
||||||
"mongodb": "3.1.13",
|
|
||||||
"monk": "6.0.6",
|
|
||||||
"ms": "2.1.1",
|
"ms": "2.1.1",
|
||||||
"nan": "2.12.1",
|
|
||||||
"nested-property": "0.0.7",
|
"nested-property": "0.0.7",
|
||||||
"nodemailer": "5.1.1",
|
"node-fetch": "2.5.0",
|
||||||
|
"nodemailer": "6.1.1",
|
||||||
"nprogress": "0.2.0",
|
"nprogress": "0.2.0",
|
||||||
"object-assign-deep": "0.4.0",
|
"object-assign-deep": "0.4.0",
|
||||||
"os-utils": "0.0.14",
|
"os-utils": "0.0.14",
|
||||||
"parse5": "5.1.0",
|
"parse5": "5.1.0",
|
||||||
"parsimmon": "1.12.0",
|
"parsimmon": "1.12.0",
|
||||||
|
"pg": "7.11.0",
|
||||||
"portscanner": "2.2.0",
|
"portscanner": "2.2.0",
|
||||||
"postcss-loader": "3.0.0",
|
"postcss-loader": "3.0.0",
|
||||||
"prismjs": "1.15.0",
|
"prismjs": "1.16.0",
|
||||||
"progress-bar-webpack-plugin": "1.12.1",
|
"progress-bar-webpack-plugin": "1.12.1",
|
||||||
"promise-any": "0.2.0",
|
"promise-any": "0.2.0",
|
||||||
"promise-limit": "2.7.0",
|
"promise-limit": "2.7.0",
|
||||||
"promise-sequential": "1.1.1",
|
"promise-sequential": "1.1.1",
|
||||||
"pug": "2.0.3",
|
"pug": "2.0.3",
|
||||||
"punycode": "2.1.1",
|
"punycode": "2.1.1",
|
||||||
|
"pureimage": "0.1.6",
|
||||||
"qrcode": "1.3.3",
|
"qrcode": "1.3.3",
|
||||||
|
"random-seed": "0.3.0",
|
||||||
"randomcolor": "0.5.4",
|
"randomcolor": "0.5.4",
|
||||||
"ratelimiter": "3.3.0",
|
"ratelimiter": "3.3.0",
|
||||||
"recaptcha-promise": "0.1.3",
|
"recaptcha-promise": "0.1.3",
|
||||||
"reconnecting-websocket": "4.1.10",
|
"reconnecting-websocket": "4.1.10",
|
||||||
"redis": "2.8.0",
|
"redis": "2.8.0",
|
||||||
|
"reflect-metadata": "0.1.13",
|
||||||
"rename": "1.0.4",
|
"rename": "1.0.4",
|
||||||
"request": "2.88.0",
|
"request": "2.88.0",
|
||||||
"request-promise-native": "1.0.7",
|
"request-promise-native": "1.0.7",
|
||||||
"request-stats": "3.0.0",
|
"request-stats": "3.0.0",
|
||||||
|
"require-all": "3.0.0",
|
||||||
"rimraf": "2.6.3",
|
"rimraf": "2.6.3",
|
||||||
"rndstr": "1.0.0",
|
"rndstr": "1.0.0",
|
||||||
"s-age": "1.1.2",
|
"s-age": "1.1.2",
|
||||||
"seedrandom": "2.4.4",
|
"seedrandom": "3.0.1",
|
||||||
"sharp": "0.21.3",
|
"sharp": "0.22.1",
|
||||||
"showdown": "1.9.0",
|
"showdown": "1.9.0",
|
||||||
"showdown-highlightjs-extension": "0.1.2",
|
"showdown-highlightjs-extension": "0.1.2",
|
||||||
"speakeasy": "2.0.0",
|
"speakeasy": "2.0.0",
|
||||||
@@ -212,49 +213,50 @@
|
|||||||
"stylus": "0.54.5",
|
"stylus": "0.54.5",
|
||||||
"stylus-loader": "3.0.2",
|
"stylus-loader": "3.0.2",
|
||||||
"summaly": "2.2.0",
|
"summaly": "2.2.0",
|
||||||
"systeminformation": "4.0.16",
|
"systeminformation": "4.1.6",
|
||||||
"syuilo-password-strength": "0.0.1",
|
"syuilo-password-strength": "0.0.1",
|
||||||
"terser-webpack-plugin": "1.2.3",
|
"terser-webpack-plugin": "1.2.4",
|
||||||
"textarea-caret": "3.1.0",
|
"textarea-caret": "3.1.0",
|
||||||
"tinycolor2": "1.4.1",
|
"tinycolor2": "1.4.1",
|
||||||
"tmp": "0.0.33",
|
"tmp": "0.1.0",
|
||||||
"ts-loader": "5.3.3",
|
"ts-loader": "5.3.3",
|
||||||
"ts-node": "8.0.3",
|
"ts-node": "7.0.1",
|
||||||
"tslint": "5.13.1",
|
"tslint": "5.15.0",
|
||||||
"tslint-sonarts": "1.9.0",
|
"tslint-sonarts": "1.9.0",
|
||||||
|
"typeorm": "0.2.16-rc.1",
|
||||||
"typescript": "3.3.3333",
|
"typescript": "3.3.3333",
|
||||||
"typescript-eslint-parser": "22.0.0",
|
"typescript-eslint-parser": "22.0.0",
|
||||||
"uglify-es": "3.3.9",
|
"uglify-es": "3.3.9",
|
||||||
|
"ulid": "2.3.0",
|
||||||
"url-loader": "1.1.2",
|
"url-loader": "1.1.2",
|
||||||
"uuid": "3.3.2",
|
"uuid": "3.3.2",
|
||||||
"v-animate-css": "0.0.3",
|
"v-animate-css": "0.0.3",
|
||||||
"v-debounce": "0.1.2",
|
"v-debounce": "0.1.2",
|
||||||
"video-thumbnail-generator": "1.1.3",
|
"video-thumbnail-generator": "1.1.3",
|
||||||
"vue": "2.6.8",
|
"vue": "2.6.10",
|
||||||
"vue-color": "2.7.0",
|
"vue-color": "2.7.0",
|
||||||
"vue-content-loading": "1.5.3",
|
"vue-content-loading": "1.6.0",
|
||||||
"vue-cropperjs": "3.0.0",
|
"vue-cropperjs": "3.0.0",
|
||||||
"vue-i18n": "8.9.0",
|
"vue-i18n": "8.11.2",
|
||||||
"vue-js-modal": "1.3.28",
|
"vue-js-modal": "1.3.31",
|
||||||
"vue-json-pretty": "1.4.1",
|
"vue-json-pretty": "1.6.0",
|
||||||
"vue-loader": "15.7.0",
|
"vue-loader": "15.7.0",
|
||||||
"vue-marquee-text-component": "1.1.1",
|
"vue-marquee-text-component": "1.1.1",
|
||||||
"vue-prism-component": "1.1.1",
|
"vue-prism-component": "1.1.1",
|
||||||
"vue-router": "3.0.2",
|
"vue-router": "3.0.6",
|
||||||
"vue-sequential-entrance": "1.1.3",
|
"vue-sequential-entrance": "1.1.3",
|
||||||
"vue-style-loader": "4.1.2",
|
"vue-style-loader": "4.1.2",
|
||||||
"vue-svg-inline-loader": "1.2.13",
|
"vue-svg-inline-loader": "1.2.15",
|
||||||
"vue-template-compiler": "2.6.8",
|
"vue-template-compiler": "2.6.10",
|
||||||
"vuedraggable": "2.19.2",
|
"vuedraggable": "2.21.0",
|
||||||
"vuewordcloud": "18.7.11",
|
"vuewordcloud": "18.7.11",
|
||||||
"vuex": "3.1.0",
|
"vuex": "3.1.1",
|
||||||
"vuex-persistedstate": "2.5.4",
|
"vuex-persistedstate": "2.5.4",
|
||||||
"web-push": "3.3.3",
|
"web-push": "3.3.5",
|
||||||
"webfinger.js": "2.7.0",
|
"webpack": "4.32.0",
|
||||||
"webpack": "4.28.4",
|
"webpack-cli": "3.3.2",
|
||||||
"webpack-cli": "3.2.3",
|
|
||||||
"websocket": "1.0.28",
|
"websocket": "1.0.28",
|
||||||
"ws": "6.2.0",
|
"ws": "7.0.0",
|
||||||
"xev": "2.0.1"
|
"xev": "2.0.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
17
src/@types/deepcopy.d.ts
vendored
17
src/@types/deepcopy.d.ts
vendored
@@ -1,17 +0,0 @@
|
|||||||
declare module 'deepcopy';
|
|
||||||
|
|
||||||
declare namespace deepcopy {
|
|
||||||
type DeepcopyCustomizerValueType = 'Object';
|
|
||||||
|
|
||||||
type DeepcopyCustomizer<T> = (
|
|
||||||
value: T,
|
|
||||||
valueType: DeepcopyCustomizerValueType) => T;
|
|
||||||
|
|
||||||
interface DeepcopyOptions<T> {
|
|
||||||
customizer: DeepcopyCustomizer<T>;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function deepcopy<T>(
|
|
||||||
value: T,
|
|
||||||
options?: DeepcopyOptions<T> | DeepcopyCustomizer<T>): T;
|
|
||||||
}
|
|
||||||
7
src/@types/escape-regexp.d.ts
vendored
7
src/@types/escape-regexp.d.ts
vendored
@@ -1,7 +0,0 @@
|
|||||||
declare module 'escape-regexp' {
|
|
||||||
function escapeRegExp(str: string): string;
|
|
||||||
|
|
||||||
namespace escapeRegExp {} // Hack
|
|
||||||
|
|
||||||
export = escapeRegExp;
|
|
||||||
}
|
|
||||||
65
src/@types/webfinger.js.d.ts
vendored
65
src/@types/webfinger.js.d.ts
vendored
@@ -1,65 +0,0 @@
|
|||||||
declare module 'webfinger.js' {
|
|
||||||
interface IWebFingerConstructorConfig {
|
|
||||||
tls_only?: boolean;
|
|
||||||
webfist_fallback?: boolean;
|
|
||||||
uri_fallback?: boolean;
|
|
||||||
request_timeout?: number;
|
|
||||||
}
|
|
||||||
|
|
||||||
type JRDProperties = { [type: string]: string };
|
|
||||||
|
|
||||||
interface IJRDLink {
|
|
||||||
rel: string;
|
|
||||||
type?: string;
|
|
||||||
href?: string;
|
|
||||||
template?: string;
|
|
||||||
titles?: { [lang: string]: string };
|
|
||||||
properties?: JRDProperties;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface IJRD {
|
|
||||||
subject?: string;
|
|
||||||
expires?: Date;
|
|
||||||
aliases?: string[];
|
|
||||||
properties?: JRDProperties;
|
|
||||||
links?: IJRDLink[];
|
|
||||||
}
|
|
||||||
|
|
||||||
interface IIDXLinks {
|
|
||||||
'avatar': IJRDLink[];
|
|
||||||
'remotestorage': IJRDLink[];
|
|
||||||
'blog': IJRDLink[];
|
|
||||||
'vcard': IJRDLink[];
|
|
||||||
'updates': IJRDLink[];
|
|
||||||
'share': IJRDLink[];
|
|
||||||
'profile': IJRDLink[];
|
|
||||||
'webfist': IJRDLink[];
|
|
||||||
'camlistore': IJRDLink[];
|
|
||||||
[type: string]: IJRDLink[];
|
|
||||||
}
|
|
||||||
|
|
||||||
interface IIDXProperties {
|
|
||||||
'name': string;
|
|
||||||
[type: string]: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface IIDX {
|
|
||||||
links: IIDXLinks;
|
|
||||||
properties: IIDXProperties;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface ILookupCallbackResult {
|
|
||||||
object: IJRD;
|
|
||||||
json: string;
|
|
||||||
idx: IIDX;
|
|
||||||
}
|
|
||||||
|
|
||||||
type LookupCallback = (err: Error | string, result?: ILookupCallbackResult) => void;
|
|
||||||
|
|
||||||
export class WebFinger {
|
|
||||||
constructor(config?: IWebFingerConstructorConfig);
|
|
||||||
|
|
||||||
public lookup(address: string, cb: LookupCallback): NodeJS.Timeout;
|
|
||||||
public lookupLink(address: string, rel: string, cb: IJRDLink): void;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -15,5 +15,8 @@ program
|
|||||||
.parse(process.argv);
|
.parse(process.argv);
|
||||||
|
|
||||||
if (process.env.MK_ONLY_QUEUE) program.onlyQueue = true;
|
if (process.env.MK_ONLY_QUEUE) program.onlyQueue = true;
|
||||||
|
if (process.env.NODE_ENV === 'test') program.disableClustering = true;
|
||||||
|
if (process.env.NODE_ENV === 'test') program.quiet = true;
|
||||||
|
if (process.env.NODE_ENV === 'test') program.noDaemons = true;
|
||||||
|
|
||||||
export { program };
|
export { program };
|
||||||
|
|||||||
77
src/boot/index.ts
Normal file
77
src/boot/index.ts
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
import * as cluster from 'cluster';
|
||||||
|
import chalk from 'chalk';
|
||||||
|
import Xev from 'xev';
|
||||||
|
|
||||||
|
import Logger from '../services/logger';
|
||||||
|
import { program } from '../argv';
|
||||||
|
|
||||||
|
// for typeorm
|
||||||
|
import 'reflect-metadata';
|
||||||
|
import { masterMain } from './master';
|
||||||
|
import { workerMain } from './worker';
|
||||||
|
|
||||||
|
const logger = new Logger('core', 'cyan');
|
||||||
|
const clusterLogger = logger.createSubLogger('cluster', 'orange', false);
|
||||||
|
const ev = new Xev();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Init process
|
||||||
|
*/
|
||||||
|
export default async function() {
|
||||||
|
process.title = `Misskey (${cluster.isMaster ? 'master' : 'worker'})`;
|
||||||
|
|
||||||
|
if (cluster.isMaster || program.disableClustering) {
|
||||||
|
await masterMain();
|
||||||
|
|
||||||
|
if (cluster.isMaster) {
|
||||||
|
ev.mount();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cluster.isWorker || program.disableClustering) {
|
||||||
|
await workerMain();
|
||||||
|
}
|
||||||
|
|
||||||
|
// ユニットテスト時にMisskeyが子プロセスで起動された時のため
|
||||||
|
// それ以外のときは process.send は使えないので弾く
|
||||||
|
if (process.send) {
|
||||||
|
process.send('ok');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//#region Events
|
||||||
|
|
||||||
|
// Listen new workers
|
||||||
|
cluster.on('fork', worker => {
|
||||||
|
clusterLogger.debug(`Process forked: [${worker.id}]`);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Listen online workers
|
||||||
|
cluster.on('online', worker => {
|
||||||
|
clusterLogger.debug(`Process is now online: [${worker.id}]`);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Listen for dying workers
|
||||||
|
cluster.on('exit', worker => {
|
||||||
|
// Replace the dead worker,
|
||||||
|
// we're not sentimental
|
||||||
|
clusterLogger.error(chalk.red(`[${worker.id}] died :(`));
|
||||||
|
cluster.fork();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Display detail of unhandled promise rejection
|
||||||
|
if (!program.quiet) {
|
||||||
|
process.on('unhandledRejection', console.dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Display detail of uncaught exception
|
||||||
|
process.on('uncaughtException', err => {
|
||||||
|
logger.error(err);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Dying away...
|
||||||
|
process.on('exit', code => {
|
||||||
|
logger.info(`The process is going to exit with code ${code}`);
|
||||||
|
});
|
||||||
|
|
||||||
|
//#endregion
|
||||||
176
src/boot/master.ts
Normal file
176
src/boot/master.ts
Normal file
@@ -0,0 +1,176 @@
|
|||||||
|
import * as os from 'os';
|
||||||
|
import * as cluster from 'cluster';
|
||||||
|
import chalk from 'chalk';
|
||||||
|
import * as portscanner from 'portscanner';
|
||||||
|
import * as isRoot from 'is-root';
|
||||||
|
|
||||||
|
import Logger from '../services/logger';
|
||||||
|
import loadConfig from '../config/load';
|
||||||
|
import { Config } from '../config/types';
|
||||||
|
import { lessThan } from '../prelude/array';
|
||||||
|
import * as pkg from '../../package.json';
|
||||||
|
import { program } from '../argv';
|
||||||
|
import { showMachineInfo } from '../misc/show-machine-info';
|
||||||
|
import { initDb } from '../db/postgre';
|
||||||
|
|
||||||
|
const logger = new Logger('core', 'cyan');
|
||||||
|
const bootLogger = logger.createSubLogger('boot', 'magenta', false);
|
||||||
|
|
||||||
|
function greet() {
|
||||||
|
if (!program.quiet) {
|
||||||
|
//#region Misskey logo
|
||||||
|
const v = `v${pkg.version}`;
|
||||||
|
console.log(' _____ _ _ ');
|
||||||
|
console.log(' | |_|___ ___| |_ ___ _ _ ');
|
||||||
|
console.log(' | | | | |_ -|_ -| \'_| -_| | |');
|
||||||
|
console.log(' |_|_|_|_|___|___|_,_|___|_ |');
|
||||||
|
console.log(' ' + chalk.gray(v) + (' |___|\n'.substr(v.length)));
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
console.log(' Misskey is maintained by @syuilo, @AyaMorisawa, @mei23, @acid-chicken, and @rinsuki.');
|
||||||
|
console.log(chalk.keyword('orange')(' If you like Misskey, please donate to support development. https://www.patreon.com/syuilo'));
|
||||||
|
|
||||||
|
console.log('');
|
||||||
|
console.log(chalk`< ${os.hostname()} {gray (PID: ${process.pid.toString()})} >`);
|
||||||
|
}
|
||||||
|
|
||||||
|
bootLogger.info('Welcome to Misskey!');
|
||||||
|
bootLogger.info(`Misskey v${pkg.version}`, null, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Init master process
|
||||||
|
*/
|
||||||
|
export async function masterMain() {
|
||||||
|
greet();
|
||||||
|
|
||||||
|
let config!: Config;
|
||||||
|
|
||||||
|
try {
|
||||||
|
// initialize app
|
||||||
|
config = await init();
|
||||||
|
|
||||||
|
if (config.port == null) {
|
||||||
|
bootLogger.error('The port is not configured. Please configure port.', null, true);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (process.platform === 'linux' && isWellKnownPort(config.port) && !isRoot()) {
|
||||||
|
bootLogger.error('You need root privileges to listen on well-known port on Linux', null, true);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!await isPortAvailable(config.port)) {
|
||||||
|
bootLogger.error(`Port ${config.port} is already in use`, null, true);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
bootLogger.error('Fatal error occurred during initialization', null, true);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
bootLogger.succ('Misskey initialized');
|
||||||
|
|
||||||
|
if (!program.disableClustering) {
|
||||||
|
await spawnWorkers(config.clusterLimit);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!program.noDaemons) {
|
||||||
|
require('../daemons/server-stats').default();
|
||||||
|
require('../daemons/notes-stats').default();
|
||||||
|
require('../daemons/queue-stats').default();
|
||||||
|
}
|
||||||
|
|
||||||
|
bootLogger.succ(`Now listening on port ${config.port} on ${config.url}`, null, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
const runningNodejsVersion = process.version.slice(1).split('.').map(x => parseInt(x, 10));
|
||||||
|
const requiredNodejsVersion = [11, 7, 0];
|
||||||
|
const satisfyNodejsVersion = !lessThan(runningNodejsVersion, requiredNodejsVersion);
|
||||||
|
|
||||||
|
function isWellKnownPort(port: number): boolean {
|
||||||
|
return port < 1024;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function isPortAvailable(port: number): Promise<boolean> {
|
||||||
|
return await portscanner.checkPortStatus(port, '127.0.0.1') === 'closed';
|
||||||
|
}
|
||||||
|
|
||||||
|
function showEnvironment(): void {
|
||||||
|
const env = process.env.NODE_ENV;
|
||||||
|
const logger = bootLogger.createSubLogger('env');
|
||||||
|
logger.info(typeof env == 'undefined' ? 'NODE_ENV is not set' : `NODE_ENV: ${env}`);
|
||||||
|
|
||||||
|
if (env !== 'production') {
|
||||||
|
logger.warn('The environment is not in production mode.');
|
||||||
|
logger.warn('DO NOT USE FOR PRODUCTION PURPOSE!', null, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.info(`You ${isRoot() ? '' : 'do not '}have root privileges`);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Init app
|
||||||
|
*/
|
||||||
|
async function init(): Promise<Config> {
|
||||||
|
showEnvironment();
|
||||||
|
|
||||||
|
const nodejsLogger = bootLogger.createSubLogger('nodejs');
|
||||||
|
|
||||||
|
nodejsLogger.info(`Version ${runningNodejsVersion.join('.')}`);
|
||||||
|
|
||||||
|
if (!satisfyNodejsVersion) {
|
||||||
|
nodejsLogger.error(`Node.js version is less than ${requiredNodejsVersion.join('.')}. Please upgrade it.`, null, true);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
await showMachineInfo(bootLogger);
|
||||||
|
|
||||||
|
const configLogger = bootLogger.createSubLogger('config');
|
||||||
|
let config;
|
||||||
|
|
||||||
|
try {
|
||||||
|
config = loadConfig();
|
||||||
|
} catch (exception) {
|
||||||
|
if (typeof exception === 'string') {
|
||||||
|
configLogger.error(exception);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
if (exception.code === 'ENOENT') {
|
||||||
|
configLogger.error('Configuration file not found', null, true);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
throw exception;
|
||||||
|
}
|
||||||
|
|
||||||
|
configLogger.succ('Loaded');
|
||||||
|
|
||||||
|
// Try to connect to DB
|
||||||
|
try {
|
||||||
|
bootLogger.info('Connecting database...');
|
||||||
|
await initDb();
|
||||||
|
} catch (e) {
|
||||||
|
bootLogger.error('Cannot connect to database', null, true);
|
||||||
|
bootLogger.error(e);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function spawnWorkers(limit: number = Infinity) {
|
||||||
|
const workers = Math.min(limit, os.cpus().length);
|
||||||
|
bootLogger.info(`Starting ${workers} worker${workers === 1 ? '' : 's'}...`);
|
||||||
|
await Promise.all([...Array(workers)].map(spawnWorker));
|
||||||
|
bootLogger.succ('All workers started');
|
||||||
|
}
|
||||||
|
|
||||||
|
function spawnWorker(): Promise<void> {
|
||||||
|
return new Promise(res => {
|
||||||
|
const worker = cluster.fork();
|
||||||
|
worker.on('message', message => {
|
||||||
|
if (message !== 'ready') return;
|
||||||
|
res();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
20
src/boot/worker.ts
Normal file
20
src/boot/worker.ts
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
import * as cluster from 'cluster';
|
||||||
|
import { initDb } from '../db/postgre';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Init worker process
|
||||||
|
*/
|
||||||
|
export async function workerMain() {
|
||||||
|
await initDb();
|
||||||
|
|
||||||
|
// start server
|
||||||
|
await require('../server').default();
|
||||||
|
|
||||||
|
// start job queue
|
||||||
|
require('../queue').default();
|
||||||
|
|
||||||
|
if (cluster.isWorker) {
|
||||||
|
// Send a 'ready' message to parent process
|
||||||
|
process.send!('ready');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<ui-card>
|
<ui-card>
|
||||||
<template #title><fa icon="broadcast-tower"/> {{ $t('announcements') }}</template>
|
<template #title><fa :icon="faBroadcastTower"/> {{ $t('announcements') }}</template>
|
||||||
<section v-for="(announcement, i) in announcements" class="fit-top">
|
<section v-for="(announcement, i) in announcements" class="fit-top">
|
||||||
<ui-input v-model="announcement.title" @change="save">
|
<ui-input v-model="announcement.title" @change="save">
|
||||||
<span>{{ $t('title') }}</span>
|
<span>{{ $t('title') }}</span>
|
||||||
@@ -9,13 +9,16 @@
|
|||||||
<ui-textarea v-model="announcement.text">
|
<ui-textarea v-model="announcement.text">
|
||||||
<span>{{ $t('text') }}</span>
|
<span>{{ $t('text') }}</span>
|
||||||
</ui-textarea>
|
</ui-textarea>
|
||||||
|
<ui-input v-model="announcement.image">
|
||||||
|
<span>{{ $t('image-url') }}</span>
|
||||||
|
</ui-input>
|
||||||
<ui-horizon-group class="fit-bottom">
|
<ui-horizon-group class="fit-bottom">
|
||||||
<ui-button @click="save()"><fa :icon="['far', 'save']"/> {{ $t('save') }}</ui-button>
|
<ui-button @click="save()"><fa :icon="['far', 'save']"/> {{ $t('save') }}</ui-button>
|
||||||
<ui-button @click="remove(i)"><fa :icon="['far', 'trash-alt']"/> {{ $t('remove') }}</ui-button>
|
<ui-button @click="remove(i)"><fa :icon="['far', 'trash-alt']"/> {{ $t('remove') }}</ui-button>
|
||||||
</ui-horizon-group>
|
</ui-horizon-group>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<ui-button @click="add"><fa icon="plus"/> {{ $t('add') }}</ui-button>
|
<ui-button @click="add"><fa :icon="faPlus"/> {{ $t('add') }}</ui-button>
|
||||||
</section>
|
</section>
|
||||||
</ui-card>
|
</ui-card>
|
||||||
</div>
|
</div>
|
||||||
@@ -24,12 +27,14 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import i18n from '../../i18n';
|
import i18n from '../../i18n';
|
||||||
|
import { faBroadcastTower, faPlus } from '@fortawesome/free-solid-svg-icons';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
i18n: i18n('admin/views/announcements.vue'),
|
i18n: i18n('admin/views/announcements.vue'),
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
announcements: [],
|
announcements: [],
|
||||||
|
faBroadcastTower, faPlus
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -43,7 +48,8 @@ export default Vue.extend({
|
|||||||
add() {
|
add() {
|
||||||
this.announcements.unshift({
|
this.announcements.unshift({
|
||||||
title: '',
|
title: '',
|
||||||
text: ''
|
text: '',
|
||||||
|
image: null
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -245,6 +245,7 @@ export default Vue.extend({
|
|||||||
federationInstancesChart(total: boolean): any {
|
federationInstancesChart(total: boolean): any {
|
||||||
return {
|
return {
|
||||||
series: [{
|
series: [{
|
||||||
|
name: 'Instances',
|
||||||
data: this.format(total
|
data: this.format(total
|
||||||
? this.stats.federation.instance.total
|
? this.stats.federation.instance.total
|
||||||
: sum(this.stats.federation.instance.inc, negate(this.stats.federation.instance.dec))
|
: sum(this.stats.federation.instance.inc, negate(this.stats.federation.instance.dec))
|
||||||
|
|||||||
@@ -38,7 +38,7 @@
|
|||||||
<div class="kidvdlkg" v-for="file in files">
|
<div class="kidvdlkg" v-for="file in files">
|
||||||
<div @click="file._open = !file._open">
|
<div @click="file._open = !file._open">
|
||||||
<div>
|
<div>
|
||||||
<div class="thumbnail" :style="thumbnail(file)"></div>
|
<x-file-thumbnail class="thumbnail" :file="file" fit="contain" @click="showFileMenu(file)"/>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<header>
|
<header>
|
||||||
@@ -48,7 +48,7 @@
|
|||||||
<div>
|
<div>
|
||||||
<div>
|
<div>
|
||||||
<span style="margin-right:16px;">{{ file.type }}</span>
|
<span style="margin-right:16px;">{{ file.type }}</span>
|
||||||
<span>{{ file.datasize | bytes }}</span>
|
<span>{{ file.size | bytes }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div><mk-time :time="file.createdAt" mode="detail"/></div>
|
<div><mk-time :time="file.createdAt" mode="detail"/></div>
|
||||||
</div>
|
</div>
|
||||||
@@ -75,10 +75,15 @@ import Vue from 'vue';
|
|||||||
import i18n from '../../i18n';
|
import i18n from '../../i18n';
|
||||||
import { faCloud, faTerminal, faSearch } from '@fortawesome/free-solid-svg-icons';
|
import { faCloud, faTerminal, faSearch } from '@fortawesome/free-solid-svg-icons';
|
||||||
import { faTrashAlt, faEye, faEyeSlash } from '@fortawesome/free-regular-svg-icons';
|
import { faTrashAlt, faEye, faEyeSlash } from '@fortawesome/free-regular-svg-icons';
|
||||||
|
import XFileThumbnail from '../../common/views/components/drive-file-thumbnail.vue';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
i18n: i18n('admin/views/drive.vue'),
|
i18n: i18n('admin/views/drive.vue'),
|
||||||
|
|
||||||
|
components: {
|
||||||
|
XFileThumbnail
|
||||||
|
},
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
file: null,
|
file: null,
|
||||||
@@ -151,13 +156,6 @@ export default Vue.extend({
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
thumbnail(file: any): any {
|
|
||||||
return {
|
|
||||||
'background-color': file.properties.avgColor && file.properties.avgColor.length == 3 ? `rgb(${file.properties.avgColor.join(',')})` : 'transparent',
|
|
||||||
'background-image': `url(${file.thumbnailUrl})`
|
|
||||||
};
|
|
||||||
},
|
|
||||||
|
|
||||||
async del(file: any) {
|
async del(file: any) {
|
||||||
const process = async () => {
|
const process = async () => {
|
||||||
await this.$root.api('drive/files/delete', { fileId: file.id });
|
await this.$root.api('drive/files/delete', { fileId: file.id });
|
||||||
@@ -179,9 +177,9 @@ export default Vue.extend({
|
|||||||
this.$root.api('drive/files/update', {
|
this.$root.api('drive/files/update', {
|
||||||
fileId: file.id,
|
fileId: file.id,
|
||||||
isSensitive: !file.isSensitive
|
isSensitive: !file.isSensitive
|
||||||
});
|
}).then(() => {
|
||||||
|
|
||||||
file.isSensitive = !file.isSensitive;
|
file.isSensitive = !file.isSensitive;
|
||||||
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
async show() {
|
async show() {
|
||||||
@@ -244,7 +242,7 @@ export default Vue.extend({
|
|||||||
|
|
||||||
> div:nth-child(1)
|
> div:nth-child(1)
|
||||||
> .thumbnail
|
> .thumbnail
|
||||||
display block
|
display flex
|
||||||
width 64px
|
width 64px
|
||||||
height 64px
|
height 64px
|
||||||
background-size cover
|
background-size cover
|
||||||
|
|||||||
@@ -54,7 +54,6 @@
|
|||||||
<span>{{ $t('latest-request-received-at') }}</span>
|
<span>{{ $t('latest-request-received-at') }}</span>
|
||||||
<template #prefix><fa :icon="faInbox"/></template>
|
<template #prefix><fa :icon="faInbox"/></template>
|
||||||
</ui-input>
|
</ui-input>
|
||||||
<ui-switch v-model="instance.isBlocked" @change="updateInstance()">{{ $t('block') }}</ui-switch>
|
|
||||||
<ui-switch v-model="instance.isMarkedAsClosed" @change="updateInstance()">{{ $t('marked-as-closed') }}</ui-switch>
|
<ui-switch v-model="instance.isMarkedAsClosed" @change="updateInstance()">{{ $t('marked-as-closed') }}</ui-switch>
|
||||||
<details>
|
<details>
|
||||||
<summary>{{ $t('charts') }}</summary>
|
<summary>{{ $t('charts') }}</summary>
|
||||||
@@ -79,6 +78,10 @@
|
|||||||
</ui-horizon-group>
|
</ui-horizon-group>
|
||||||
<div ref="chart"></div>
|
<div ref="chart"></div>
|
||||||
</details>
|
</details>
|
||||||
|
<details>
|
||||||
|
<summary>{{ $t('delete-all-files') }}</summary>
|
||||||
|
<ui-button @click="deleteAllFiles()" style="margin-top: 16px;"><fa :icon="faTrashAlt"/> {{ $t('delete-all-files') }}</ui-button>
|
||||||
|
</details>
|
||||||
<details>
|
<details>
|
||||||
<summary>{{ $t('remove-all-following') }}</summary>
|
<summary>{{ $t('remove-all-following') }}</summary>
|
||||||
<ui-button @click="removeAllFollowing()" style="margin-top: 16px;"><fa :icon="faMinusCircle"/> {{ $t('remove-all-following') }}</ui-button>
|
<ui-button @click="removeAllFollowing()" style="margin-top: 16px;"><fa :icon="faMinusCircle"/> {{ $t('remove-all-following') }}</ui-button>
|
||||||
@@ -130,7 +133,7 @@
|
|||||||
<span>{{ $t('status') }}</span>
|
<span>{{ $t('status') }}</span>
|
||||||
</header>
|
</header>
|
||||||
<div v-for="instance in instances" :style="{ opacity: instance.isNotResponding ? 0.5 : 1 }">
|
<div v-for="instance in instances" :style="{ opacity: instance.isNotResponding ? 0.5 : 1 }">
|
||||||
<a @click.prevent="showInstance(instance.host)" target="_blank" :href="`https://${instance.host}`" :style="{ textDecoration: instance.isMarkedAsClosed ? 'line-through' : 'none' }">{{ instance.host }}</a>
|
<a @click.prevent="showInstance(instance.host)" rel="nofollow noopener" target="_blank" :href="`https://${instance.host}`" :style="{ textDecoration: instance.isMarkedAsClosed ? 'line-through' : 'none' }">{{ instance.host }}</a>
|
||||||
<span>{{ instance.notesCount | number }}</span>
|
<span>{{ instance.notesCount | number }}</span>
|
||||||
<span>{{ instance.usersCount | number }}</span>
|
<span>{{ instance.usersCount | number }}</span>
|
||||||
<span>{{ instance.followingCount | number }}</span>
|
<span>{{ instance.followingCount | number }}</span>
|
||||||
@@ -142,6 +145,16 @@
|
|||||||
<ui-info v-if="instances.length == limit">{{ $t('result-is-truncated', { n: limit }) }}</ui-info>
|
<ui-info v-if="instances.length == limit">{{ $t('result-is-truncated', { n: limit }) }}</ui-info>
|
||||||
</section>
|
</section>
|
||||||
</ui-card>
|
</ui-card>
|
||||||
|
|
||||||
|
<ui-card>
|
||||||
|
<template #title><fa :icon="faBan"/> {{ $t('blocked-hosts') }}</template>
|
||||||
|
<section class="fit-top">
|
||||||
|
<ui-textarea v-model="blockedHosts">
|
||||||
|
<template #desc>{{ $t('blocked-hosts-info') }}</template>
|
||||||
|
</ui-textarea>
|
||||||
|
<ui-button @click="saveBlockedHosts">{{ $t('save') }}</ui-button>
|
||||||
|
</section>
|
||||||
|
</ui-card>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -149,7 +162,7 @@
|
|||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import i18n from '../../i18n';
|
import i18n from '../../i18n';
|
||||||
import { faPaperPlane } from '@fortawesome/free-regular-svg-icons';
|
import { faPaperPlane } from '@fortawesome/free-regular-svg-icons';
|
||||||
import { faGlobe, faTerminal, faSearch, faMinusCircle, faServer, faCrosshairs, faEnvelopeOpenText, faUsers, faCaretDown, faCaretUp, faTrafficLight, faInbox } from '@fortawesome/free-solid-svg-icons';
|
import { faTrashAlt, faBan, faGlobe, faTerminal, faSearch, faMinusCircle, faServer, faCrosshairs, faEnvelopeOpenText, faUsers, faCaretDown, faCaretUp, faTrafficLight, faInbox } from '@fortawesome/free-solid-svg-icons';
|
||||||
import ApexCharts from 'apexcharts';
|
import ApexCharts from 'apexcharts';
|
||||||
import * as tinycolor from 'tinycolor2';
|
import * as tinycolor from 'tinycolor2';
|
||||||
|
|
||||||
@@ -176,7 +189,8 @@ export default Vue.extend({
|
|||||||
chartSrc: 'requests',
|
chartSrc: 'requests',
|
||||||
chartSpan: 'hour',
|
chartSpan: 'hour',
|
||||||
chartInstance: null,
|
chartInstance: null,
|
||||||
faGlobe, faTerminal, faSearch, faMinusCircle, faServer, faCrosshairs, faEnvelopeOpenText, faUsers, faCaretDown, faCaretUp, faPaperPlane, faTrafficLight, faInbox
|
blockedHosts: '',
|
||||||
|
faTrashAlt, faBan, faGlobe, faTerminal, faSearch, faMinusCircle, faServer, faCrosshairs, faEnvelopeOpenText, faUsers, faCaretDown, faCaretUp, faPaperPlane, faTrafficLight, faInbox
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -246,6 +260,10 @@ export default Vue.extend({
|
|||||||
|
|
||||||
mounted() {
|
mounted() {
|
||||||
this.fetchInstances();
|
this.fetchInstances();
|
||||||
|
|
||||||
|
this.$root.getMeta().then(meta => {
|
||||||
|
this.blockedHosts = meta.blockedHosts.join('\n');
|
||||||
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
beforeDestroy() {
|
beforeDestroy() {
|
||||||
@@ -293,6 +311,17 @@ export default Vue.extend({
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
deleteAllFiles() {
|
||||||
|
this.$root.api('admin/federation/delete-all-files', {
|
||||||
|
host: this.instance.host
|
||||||
|
}).then(() => {
|
||||||
|
this.$root.dialog({
|
||||||
|
type: 'success',
|
||||||
|
splash: true
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
updateInstance() {
|
updateInstance() {
|
||||||
this.$root.api('admin/federation/update-instance', {
|
this.$root.api('admin/federation/update-instance', {
|
||||||
host: this.instance.host,
|
host: this.instance.host,
|
||||||
@@ -477,6 +506,22 @@ export default Vue.extend({
|
|||||||
}]
|
}]
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
|
saveBlockedHosts() {
|
||||||
|
this.$root.api('admin/update-meta', {
|
||||||
|
blockedHosts: this.blockedHosts.split('\n')
|
||||||
|
}).then(() => {
|
||||||
|
this.$root.dialog({
|
||||||
|
type: 'success',
|
||||||
|
text: this.$t('saved')
|
||||||
|
});
|
||||||
|
}).catch(e => {
|
||||||
|
this.$root.dialog({
|
||||||
|
type: 'error',
|
||||||
|
text: e
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -1,41 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div>
|
|
||||||
<ui-card>
|
|
||||||
<template #title>{{ $t('hided-tags') }}</template>
|
|
||||||
<section>
|
|
||||||
<textarea class="jdnqwkzlnxcfftthoybjxrebyolvoucw" v-model="hidedTags"></textarea>
|
|
||||||
<ui-button @click="save">{{ $t('save') }}</ui-button>
|
|
||||||
</section>
|
|
||||||
</ui-card>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script lang="ts">
|
|
||||||
import Vue from 'vue';
|
|
||||||
import i18n from '../../i18n';
|
|
||||||
|
|
||||||
export default Vue.extend({
|
|
||||||
i18n: i18n('admin/views/hashtags.vue'),
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
hidedTags: '',
|
|
||||||
};
|
|
||||||
},
|
|
||||||
created() {
|
|
||||||
this.$root.getMeta().then(meta => {
|
|
||||||
this.hidedTags = meta.hidedTags.join('\n');
|
|
||||||
});
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
save() {
|
|
||||||
this.$root.api('admin/update-meta', {
|
|
||||||
hidedTags: this.hidedTags.split('\n')
|
|
||||||
}).then(() => {
|
|
||||||
//this.$root.os.apis.dialog({ text: `Saved` });
|
|
||||||
}).catch(e => {
|
|
||||||
//this.$root.os.apis.dialog({ text: `Failed ${e}` });
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
@@ -28,7 +28,6 @@
|
|||||||
<li @click="nav('federation')" :class="{ active: page == 'federation' }"><fa :icon="faGlobe" fixed-width/>{{ $t('federation') }}</li>
|
<li @click="nav('federation')" :class="{ active: page == 'federation' }"><fa :icon="faGlobe" fixed-width/>{{ $t('federation') }}</li>
|
||||||
<li @click="nav('emoji')" :class="{ active: page == 'emoji' }"><fa :icon="faGrin" fixed-width/>{{ $t('emoji') }}</li>
|
<li @click="nav('emoji')" :class="{ active: page == 'emoji' }"><fa :icon="faGrin" fixed-width/>{{ $t('emoji') }}</li>
|
||||||
<li @click="nav('announcements')" :class="{ active: page == 'announcements' }"><fa icon="broadcast-tower" fixed-width/>{{ $t('announcements') }}</li>
|
<li @click="nav('announcements')" :class="{ active: page == 'announcements' }"><fa icon="broadcast-tower" fixed-width/>{{ $t('announcements') }}</li>
|
||||||
<li @click="nav('hashtags')" :class="{ active: page == 'hashtags' }"><fa icon="hashtag" fixed-width/>{{ $t('hashtags') }}</li>
|
|
||||||
<li @click="nav('abuse')" :class="{ active: page == 'abuse' }"><fa :icon="faExclamationCircle" fixed-width/>{{ $t('abuse') }}</li>
|
<li @click="nav('abuse')" :class="{ active: page == 'abuse' }"><fa :icon="faExclamationCircle" fixed-width/>{{ $t('abuse') }}</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="back-to-misskey">
|
<div class="back-to-misskey">
|
||||||
@@ -48,7 +47,6 @@
|
|||||||
<div v-if="page == 'users'"><x-users/></div>
|
<div v-if="page == 'users'"><x-users/></div>
|
||||||
<div v-if="page == 'emoji'"><x-emoji/></div>
|
<div v-if="page == 'emoji'"><x-emoji/></div>
|
||||||
<div v-if="page == 'announcements'"><x-announcements/></div>
|
<div v-if="page == 'announcements'"><x-announcements/></div>
|
||||||
<div v-if="page == 'hashtags'"><x-hashtags/></div>
|
|
||||||
<div v-if="page == 'drive'"><x-drive/></div>
|
<div v-if="page == 'drive'"><x-drive/></div>
|
||||||
<div v-if="page == 'federation'"><x-federation/></div>
|
<div v-if="page == 'federation'"><x-federation/></div>
|
||||||
<div v-if="page == 'abuse'"><x-abuse/></div>
|
<div v-if="page == 'abuse'"><x-abuse/></div>
|
||||||
@@ -68,7 +66,6 @@ import XLogs from "./logs.vue";
|
|||||||
import XModerators from "./moderators.vue";
|
import XModerators from "./moderators.vue";
|
||||||
import XEmoji from "./emoji.vue";
|
import XEmoji from "./emoji.vue";
|
||||||
import XAnnouncements from "./announcements.vue";
|
import XAnnouncements from "./announcements.vue";
|
||||||
import XHashtags from "./hashtags.vue";
|
|
||||||
import XUsers from "./users.vue";
|
import XUsers from "./users.vue";
|
||||||
import XDrive from "./drive.vue";
|
import XDrive from "./drive.vue";
|
||||||
import XAbuse from "./abuse.vue";
|
import XAbuse from "./abuse.vue";
|
||||||
@@ -91,7 +88,6 @@ export default Vue.extend({
|
|||||||
XModerators,
|
XModerators,
|
||||||
XEmoji,
|
XEmoji,
|
||||||
XAnnouncements,
|
XAnnouncements,
|
||||||
XHashtags,
|
|
||||||
XUsers,
|
XUsers,
|
||||||
XDrive,
|
XDrive,
|
||||||
XAbuse,
|
XAbuse,
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<div>
|
<div>
|
||||||
<ui-card>
|
<ui-card>
|
||||||
<template #title><fa icon="cog"/> {{ $t('instance') }}</template>
|
<template #title><fa icon="cog"/> {{ $t('instance') }}</template>
|
||||||
<section class="fit-top fit-bottom">
|
<section class="fit-top">
|
||||||
<ui-input :value="host" readonly>{{ $t('host') }}</ui-input>
|
<ui-input :value="host" readonly>{{ $t('host') }}</ui-input>
|
||||||
<ui-input v-model="name">{{ $t('instance-name') }}</ui-input>
|
<ui-input v-model="name">{{ $t('instance-name') }}</ui-input>
|
||||||
<ui-textarea v-model="description">{{ $t('instance-description') }}</ui-textarea>
|
<ui-textarea v-model="description">{{ $t('instance-description') }}</ui-textarea>
|
||||||
@@ -10,48 +10,114 @@
|
|||||||
<ui-input v-model="mascotImageUrl"><template #icon><fa icon="link"/></template>{{ $t('logo-url') }}</ui-input>
|
<ui-input v-model="mascotImageUrl"><template #icon><fa icon="link"/></template>{{ $t('logo-url') }}</ui-input>
|
||||||
<ui-input v-model="bannerUrl"><template #icon><fa icon="link"/></template>{{ $t('banner-url') }}</ui-input>
|
<ui-input v-model="bannerUrl"><template #icon><fa icon="link"/></template>{{ $t('banner-url') }}</ui-input>
|
||||||
<ui-input v-model="errorImageUrl"><template #icon><fa icon="link"/></template>{{ $t('error-image-url') }}</ui-input>
|
<ui-input v-model="errorImageUrl"><template #icon><fa icon="link"/></template>{{ $t('error-image-url') }}</ui-input>
|
||||||
|
<ui-input v-model="ToSUrl"><template #icon><fa icon="link"/></template>{{ $t('tos-url') }}</ui-input>
|
||||||
<ui-input v-model="languages"><template #icon><fa icon="language"/></template>{{ $t('languages') }}<template #desc>{{ $t('languages-desc') }}</template></ui-input>
|
<ui-input v-model="languages"><template #icon><fa icon="language"/></template>{{ $t('languages') }}<template #desc>{{ $t('languages-desc') }}</template></ui-input>
|
||||||
|
<details>
|
||||||
|
<summary>{{ $t('advanced-config') }}</summary>
|
||||||
|
<ui-input v-model="repositoryUrl"><template #icon><fa icon="link"/></template>{{ $t('repository-url') }}</ui-input>
|
||||||
|
<ui-input v-model="feedbackUrl"><template #icon><fa icon="link"/></template>{{ $t('feedback-url') }}</ui-input>
|
||||||
|
</details>
|
||||||
</section>
|
</section>
|
||||||
<section class="fit-bottom">
|
<section class="fit-bottom">
|
||||||
<header><fa :icon="faHeadset"/> {{ $t('maintainer-config') }}</header>
|
<header><fa :icon="faHeadset"/> {{ $t('maintainer-config') }}</header>
|
||||||
<ui-input v-model="maintainerName">{{ $t('maintainer-name') }}</ui-input>
|
<ui-input v-model="maintainerName">{{ $t('maintainer-name') }}</ui-input>
|
||||||
<ui-input v-model="maintainerEmail" type="email"><template #icon><fa :icon="farEnvelope"/></template>{{ $t('maintainer-email') }}</ui-input>
|
<ui-input v-model="maintainerEmail" type="email"><template #icon><fa :icon="farEnvelope"/></template>{{ $t('maintainer-email') }}</ui-input>
|
||||||
</section>
|
</section>
|
||||||
|
<section>
|
||||||
|
<ui-switch v-model="disableRegistration">{{ $t('disable-registration') }}</ui-switch>
|
||||||
|
<ui-button v-if="disableRegistration" @click="invite">{{ $t('invite') }}</ui-button>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<ui-button @click="updateMeta"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
|
||||||
|
</section>
|
||||||
|
</ui-card>
|
||||||
|
|
||||||
|
<ui-card>
|
||||||
|
<template #title><fa :icon="faPencilAlt"/> {{ $t('note-and-tl') }}</template>
|
||||||
<section class="fit-top fit-bottom">
|
<section class="fit-top fit-bottom">
|
||||||
<ui-input v-model="maxNoteTextLength">{{ $t('max-note-text-length') }}</ui-input>
|
<ui-input v-model="maxNoteTextLength">{{ $t('max-note-text-length') }}</ui-input>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<ui-switch v-model="disableRegistration">{{ $t('disable-registration') }}</ui-switch>
|
|
||||||
<ui-switch v-model="disableLocalTimeline">{{ $t('disable-local-timeline') }}</ui-switch>
|
<ui-switch v-model="disableLocalTimeline">{{ $t('disable-local-timeline') }}</ui-switch>
|
||||||
<ui-switch v-model="disableGlobalTimeline">{{ $t('disable-global-timeline') }}</ui-switch>
|
<ui-switch v-model="disableGlobalTimeline">{{ $t('disable-global-timeline') }}</ui-switch>
|
||||||
<ui-info>{{ $t('disabling-timelines-info') }}</ui-info>
|
<ui-info>{{ $t('disabling-timelines-info') }}</ui-info>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
<ui-switch v-model="enableEmojiReaction">{{ $t('enable-emoji-reaction') }}</ui-switch>
|
<ui-switch v-model="enableEmojiReaction">{{ $t('enable-emoji-reaction') }}</ui-switch>
|
||||||
<ui-switch v-model="useStarForReactionFallback">{{ $t('use-star-for-reaction-fallback') }}</ui-switch>
|
<ui-switch v-model="useStarForReactionFallback">{{ $t('use-star-for-reaction-fallback') }}</ui-switch>
|
||||||
</section>
|
</section>
|
||||||
<section class="fit-bottom">
|
<section>
|
||||||
<header><fa icon="cloud"/> {{ $t('drive-config') }}</header>
|
<ui-button @click="updateMeta"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
|
||||||
|
</section>
|
||||||
|
</ui-card>
|
||||||
|
|
||||||
|
<ui-card>
|
||||||
|
<template #title><fa icon="cloud"/> {{ $t('drive-config') }}</template>
|
||||||
|
<section>
|
||||||
|
<ui-switch v-model="useObjectStorage">{{ $t('use-object-storage') }}</ui-switch>
|
||||||
|
<template v-if="useObjectStorage">
|
||||||
|
<ui-info>
|
||||||
|
<i18n path="object-storage-s3-info">
|
||||||
|
<a href="https://docs.aws.amazon.com/general/latest/gr/rande.html" target="_blank">{{ $t('object-storage-s3-info-here') }}</a>
|
||||||
|
</i18n>
|
||||||
|
</ui-info>
|
||||||
|
<ui-info>{{ $t('object-storage-gcs-info') }}</ui-info>
|
||||||
|
<ui-input v-model="objectStorageBaseUrl" :disabled="!useObjectStorage">{{ $t('object-storage-base-url') }}</ui-input>
|
||||||
|
<ui-horizon-group inputs>
|
||||||
|
<ui-input v-model="objectStorageBucket" :disabled="!useObjectStorage">{{ $t('object-storage-bucket') }}</ui-input>
|
||||||
|
<ui-input v-model="objectStoragePrefix" :disabled="!useObjectStorage">{{ $t('object-storage-prefix') }}</ui-input>
|
||||||
|
</ui-horizon-group>
|
||||||
|
<ui-input v-model="objectStorageEndpoint" :disabled="!useObjectStorage">{{ $t('object-storage-endpoint') }}</ui-input>
|
||||||
|
<ui-horizon-group inputs>
|
||||||
|
<ui-input v-model="objectStorageRegion" :disabled="!useObjectStorage">{{ $t('object-storage-region') }}</ui-input>
|
||||||
|
<ui-input v-model="objectStoragePort" type="number" :disabled="!useObjectStorage">{{ $t('object-storage-port') }}</ui-input>
|
||||||
|
</ui-horizon-group>
|
||||||
|
<ui-horizon-group inputs>
|
||||||
|
<ui-input v-model="objectStorageAccessKey" :disabled="!useObjectStorage"><template #icon><fa icon="key"/></template>{{ $t('object-storage-access-key') }}</ui-input>
|
||||||
|
<ui-input v-model="objectStorageSecretKey" :disabled="!useObjectStorage"><template #icon><fa icon="key"/></template>{{ $t('object-storage-secret-key') }}</ui-input>
|
||||||
|
</ui-horizon-group>
|
||||||
|
<ui-switch v-model="objectStorageUseSSL" :disabled="!useObjectStorage">{{ $t('object-storage-use-ssl') }}</ui-switch>
|
||||||
|
</template>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
<ui-switch v-model="cacheRemoteFiles">{{ $t('cache-remote-files') }}<template #desc>{{ $t('cache-remote-files-desc') }}</template></ui-switch>
|
<ui-switch v-model="cacheRemoteFiles">{{ $t('cache-remote-files') }}<template #desc>{{ $t('cache-remote-files-desc') }}</template></ui-switch>
|
||||||
|
</section>
|
||||||
|
<section class="fit-top fit-bottom">
|
||||||
<ui-input v-model="localDriveCapacityMb" type="number">{{ $t('local-drive-capacity-mb') }}<template #suffix>MB</template><template #desc>{{ $t('mb') }}</template></ui-input>
|
<ui-input v-model="localDriveCapacityMb" type="number">{{ $t('local-drive-capacity-mb') }}<template #suffix>MB</template><template #desc>{{ $t('mb') }}</template></ui-input>
|
||||||
<ui-input v-model="remoteDriveCapacityMb" type="number" :disabled="!cacheRemoteFiles">{{ $t('remote-drive-capacity-mb') }}<template #suffix>MB</template><template #desc>{{ $t('mb') }}</template></ui-input>
|
<ui-input v-model="remoteDriveCapacityMb" type="number" :disabled="!cacheRemoteFiles">{{ $t('remote-drive-capacity-mb') }}<template #suffix>MB</template><template #desc>{{ $t('mb') }}</template></ui-input>
|
||||||
</section>
|
</section>
|
||||||
<section class="fit-bottom">
|
|
||||||
<header><fa :icon="faShieldAlt"/> {{ $t('recaptcha-config') }}</header>
|
|
||||||
<ui-switch v-model="enableRecaptcha">{{ $t('enable-recaptcha') }}</ui-switch>
|
|
||||||
<ui-info>{{ $t('recaptcha-info') }}</ui-info>
|
|
||||||
<ui-horizon-group inputs>
|
|
||||||
<ui-input v-model="recaptchaSiteKey" :disabled="!enableRecaptcha"><template #icon><fa icon="key"/></template>{{ $t('recaptcha-site-key') }}</ui-input>
|
|
||||||
<ui-input v-model="recaptchaSecretKey" :disabled="!enableRecaptcha"><template #icon><fa icon="key"/></template>{{ $t('recaptcha-secret-key') }}</ui-input>
|
|
||||||
</ui-horizon-group>
|
|
||||||
</section>
|
|
||||||
<section>
|
<section>
|
||||||
<header><fa :icon="faGhost"/> {{ $t('proxy-account-config') }}</header>
|
<ui-button @click="updateMeta"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
|
||||||
|
</section>
|
||||||
|
</ui-card>
|
||||||
|
|
||||||
|
<ui-card>
|
||||||
|
<template #title><fa :icon="faThumbtack"/> {{ $t('pinned-users') }}</template>
|
||||||
|
<section class="fit-top">
|
||||||
|
<ui-textarea v-model="pinnedUsers">
|
||||||
|
<template #desc>{{ $t('pinned-users-info') }}</template>
|
||||||
|
</ui-textarea>
|
||||||
|
<ui-button @click="updateMeta"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
|
||||||
|
</section>
|
||||||
|
</ui-card>
|
||||||
|
|
||||||
|
<ui-card>
|
||||||
|
<template #title><fa :icon="faGhost"/> {{ $t('proxy-account-config') }}</template>
|
||||||
|
<section>
|
||||||
<ui-info>{{ $t('proxy-account-info') }}</ui-info>
|
<ui-info>{{ $t('proxy-account-info') }}</ui-info>
|
||||||
<ui-input v-model="proxyAccount"><template #prefix>@</template>{{ $t('proxy-account-username') }}<template #desc>{{ $t('proxy-account-username-desc') }}</template></ui-input>
|
<ui-input v-model="proxyAccount"><template #prefix>@</template>{{ $t('proxy-account-username') }}<template #desc>{{ $t('proxy-account-username-desc') }}</template></ui-input>
|
||||||
<ui-info warn>{{ $t('proxy-account-warn') }}</ui-info>
|
<ui-info warn>{{ $t('proxy-account-warn') }}</ui-info>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<header><fa :icon="farEnvelope"/> {{ $t('email-config') }}</header>
|
<ui-button @click="updateMeta"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
|
||||||
|
</section>
|
||||||
|
</ui-card>
|
||||||
|
|
||||||
|
<ui-card>
|
||||||
|
<template #title><fa :icon="farEnvelope"/> {{ $t('email-config') }}</template>
|
||||||
|
<section>
|
||||||
<ui-switch v-model="enableEmail">{{ $t('enable-email') }}<template #desc>{{ $t('email-config-info') }}</template></ui-switch>
|
<ui-switch v-model="enableEmail">{{ $t('enable-email') }}<template #desc>{{ $t('email-config-info') }}</template></ui-switch>
|
||||||
|
<template v-if="enableEmail">
|
||||||
<ui-input v-model="email" type="email" :disabled="!enableEmail">{{ $t('email') }}</ui-input>
|
<ui-input v-model="email" type="email" :disabled="!enableEmail">{{ $t('email') }}</ui-input>
|
||||||
<ui-horizon-group inputs>
|
<ui-horizon-group inputs>
|
||||||
<ui-input v-model="smtpHost" :disabled="!enableEmail">{{ $t('smtp-host') }}</ui-input>
|
<ui-input v-model="smtpHost" :disabled="!enableEmail">{{ $t('smtp-host') }}</ui-input>
|
||||||
@@ -60,80 +126,117 @@
|
|||||||
<ui-switch v-model="smtpAuth">{{ $t('smtp-auth') }}</ui-switch>
|
<ui-switch v-model="smtpAuth">{{ $t('smtp-auth') }}</ui-switch>
|
||||||
<ui-horizon-group inputs>
|
<ui-horizon-group inputs>
|
||||||
<ui-input v-model="smtpUser" :disabled="!enableEmail || !smtpAuth">{{ $t('smtp-user') }}</ui-input>
|
<ui-input v-model="smtpUser" :disabled="!enableEmail || !smtpAuth">{{ $t('smtp-user') }}</ui-input>
|
||||||
<ui-input v-model="smtpPass" type="password" :withPasswordToggle="true" :disabled="!enableEmail || !smtpAuth">{{ $t('smtp-pass') }}</ui-input>
|
<ui-input v-model="smtpPass" type="password" :with-password-toggle="true" :disabled="!enableEmail || !smtpAuth">{{ $t('smtp-pass') }}</ui-input>
|
||||||
</ui-horizon-group>
|
</ui-horizon-group>
|
||||||
<ui-switch v-model="smtpSecure" :disabled="!enableEmail">{{ $t('smtp-secure') }}<template #desc>{{ $t('smtp-secure-info') }}</template></ui-switch>
|
<ui-switch v-model="smtpSecure" :disabled="!enableEmail">{{ $t('smtp-secure') }}<template #desc>{{ $t('smtp-secure-info') }}</template></ui-switch>
|
||||||
|
</template>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<header><fa :icon="faBolt"/> {{ $t('serviceworker-config') }}</header>
|
<ui-button @click="updateMeta"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
|
||||||
|
</section>
|
||||||
|
</ui-card>
|
||||||
|
|
||||||
|
<ui-card>
|
||||||
|
<template #title><fa :icon="faBolt"/> {{ $t('serviceworker-config') }}</template>
|
||||||
|
<section>
|
||||||
<ui-switch v-model="enableServiceWorker">{{ $t('enable-serviceworker') }}<template #desc>{{ $t('serviceworker-info') }}</template></ui-switch>
|
<ui-switch v-model="enableServiceWorker">{{ $t('enable-serviceworker') }}<template #desc>{{ $t('serviceworker-info') }}</template></ui-switch>
|
||||||
|
<template v-if="enableServiceWorker">
|
||||||
<ui-info>{{ $t('vapid-info') }}<br><code>npm i web-push -g<br>web-push generate-vapid-keys</code></ui-info>
|
<ui-info>{{ $t('vapid-info') }}<br><code>npm i web-push -g<br>web-push generate-vapid-keys</code></ui-info>
|
||||||
<ui-horizon-group inputs class="fit-bottom">
|
<ui-horizon-group inputs class="fit-bottom">
|
||||||
<ui-input v-model="swPublicKey" :disabled="!enableServiceWorker"><template #icon><fa icon="key"/></template>{{ $t('vapid-publickey') }}</ui-input>
|
<ui-input v-model="swPublicKey" :disabled="!enableServiceWorker"><template #icon><fa icon="key"/></template>{{ $t('vapid-publickey') }}</ui-input>
|
||||||
<ui-input v-model="swPrivateKey" :disabled="!enableServiceWorker"><template #icon><fa icon="key"/></template>{{ $t('vapid-privatekey') }}</ui-input>
|
<ui-input v-model="swPrivateKey" :disabled="!enableServiceWorker"><template #icon><fa icon="key"/></template>{{ $t('vapid-privatekey') }}</ui-input>
|
||||||
</ui-horizon-group>
|
</ui-horizon-group>
|
||||||
|
</template>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<header>summaly Proxy</header>
|
<ui-button @click="updateMeta"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
|
||||||
<ui-input v-model="summalyProxy">URL</ui-input>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<header><fa :icon="faUserPlus"/> {{ $t('user-recommendation-config') }}</header>
|
|
||||||
<ui-switch v-model="enableExternalUserRecommendation">{{ $t('enable-external-user-recommendation') }}</ui-switch>
|
|
||||||
<ui-input v-model="externalUserRecommendationEngine" :disabled="!enableExternalUserRecommendation">{{ $t('external-user-recommendation-engine') }}<template #desc>{{ $t('external-user-recommendation-engine-desc') }}</template></ui-input>
|
|
||||||
<ui-input v-model="externalUserRecommendationTimeout" type="number" :disabled="!enableExternalUserRecommendation">{{ $t('external-user-recommendation-timeout') }}<template #suffix>ms</template><template #desc>{{ $t('external-user-recommendation-timeout-desc') }}</template></ui-input>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<ui-button @click="updateMeta">{{ $t('save') }}</ui-button>
|
|
||||||
</section>
|
</section>
|
||||||
</ui-card>
|
</ui-card>
|
||||||
|
|
||||||
<ui-card>
|
<ui-card>
|
||||||
<template #title>{{ $t('invite') }}</template>
|
<template #title><fa :icon="faShieldAlt"/> {{ $t('recaptcha-config') }}</template>
|
||||||
|
<section :class="enableRecaptcha ? 'fit-bottom' : ''">
|
||||||
|
<ui-switch v-model="enableRecaptcha">{{ $t('enable-recaptcha') }}</ui-switch>
|
||||||
|
<template v-if="enableRecaptcha">
|
||||||
|
<ui-info>{{ $t('recaptcha-info') }}</ui-info>
|
||||||
|
<ui-horizon-group inputs>
|
||||||
|
<ui-input v-model="recaptchaSiteKey" :disabled="!enableRecaptcha"><template #icon><fa icon="key"/></template>{{ $t('recaptcha-site-key') }}</ui-input>
|
||||||
|
<ui-input v-model="recaptchaSecretKey" :disabled="!enableRecaptcha"><template #icon><fa icon="key"/></template>{{ $t('recaptcha-secret-key') }}</ui-input>
|
||||||
|
</ui-horizon-group>
|
||||||
|
</template>
|
||||||
|
</section>
|
||||||
|
<section v-if="enableRecaptcha && recaptchaSiteKey">
|
||||||
|
<header>{{ $t('recaptcha-preview') }}</header>
|
||||||
|
<div ref="recaptcha" style="margin: 16px 0 0 0;" :key="recaptchaSiteKey"></div>
|
||||||
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<ui-button @click="invite">{{ $t('invite') }}</ui-button>
|
<ui-button @click="updateMeta"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
|
||||||
<p v-if="inviteCode">Code: <code>{{ inviteCode }}</code></p>
|
|
||||||
</section>
|
</section>
|
||||||
</ui-card>
|
</ui-card>
|
||||||
|
|
||||||
<ui-card>
|
<ui-card>
|
||||||
<template #title><fa :icon="['fab', 'twitter']"/> {{ $t('twitter-integration-config') }}</template>
|
<template #title><fa :icon="faShieldAlt"/> {{ $t('external-service-integration-config') }}</template>
|
||||||
<section>
|
<section>
|
||||||
|
<header><fa :icon="['fab', 'twitter']"/> {{ $t('twitter-integration-config') }}</header>
|
||||||
<ui-switch v-model="enableTwitterIntegration">{{ $t('enable-twitter-integration') }}</ui-switch>
|
<ui-switch v-model="enableTwitterIntegration">{{ $t('enable-twitter-integration') }}</ui-switch>
|
||||||
|
<template v-if="enableTwitterIntegration">
|
||||||
<ui-horizon-group>
|
<ui-horizon-group>
|
||||||
<ui-input v-model="twitterConsumerKey" :disabled="!enableTwitterIntegration"><template #icon><fa icon="key"/></template>{{ $t('twitter-integration-consumer-key') }}</ui-input>
|
<ui-input v-model="twitterConsumerKey" :disabled="!enableTwitterIntegration"><template #icon><fa icon="key"/></template>{{ $t('twitter-integration-consumer-key') }}</ui-input>
|
||||||
<ui-input v-model="twitterConsumerSecret" :disabled="!enableTwitterIntegration"><template #icon><fa icon="key"/></template>{{ $t('twitter-integration-consumer-secret') }}</ui-input>
|
<ui-input v-model="twitterConsumerSecret" :disabled="!enableTwitterIntegration"><template #icon><fa icon="key"/></template>{{ $t('twitter-integration-consumer-secret') }}</ui-input>
|
||||||
</ui-horizon-group>
|
</ui-horizon-group>
|
||||||
<ui-info>{{ $t('twitter-integration-info', { url: `${url}/api/tw/cb` }) }}</ui-info>
|
<ui-info>{{ $t('twitter-integration-info', { url: `${url}/api/tw/cb` }) }}</ui-info>
|
||||||
<ui-button @click="updateMeta">{{ $t('save') }}</ui-button>
|
</template>
|
||||||
</section>
|
</section>
|
||||||
</ui-card>
|
|
||||||
|
|
||||||
<ui-card>
|
|
||||||
<template #title><fa :icon="['fab', 'github']"/> {{ $t('github-integration-config') }}</template>
|
|
||||||
<section>
|
<section>
|
||||||
|
<header><fa :icon="['fab', 'github']"/> {{ $t('github-integration-config') }}</header>
|
||||||
<ui-switch v-model="enableGithubIntegration">{{ $t('enable-github-integration') }}</ui-switch>
|
<ui-switch v-model="enableGithubIntegration">{{ $t('enable-github-integration') }}</ui-switch>
|
||||||
|
<template v-if="enableGithubIntegration">
|
||||||
<ui-horizon-group>
|
<ui-horizon-group>
|
||||||
<ui-input v-model="githubClientId" :disabled="!enableGithubIntegration"><template #icon><fa icon="key"/></template>{{ $t('github-integration-client-id') }}</ui-input>
|
<ui-input v-model="githubClientId" :disabled="!enableGithubIntegration"><template #icon><fa icon="key"/></template>{{ $t('github-integration-client-id') }}</ui-input>
|
||||||
<ui-input v-model="githubClientSecret" :disabled="!enableGithubIntegration"><template #icon><fa icon="key"/></template>{{ $t('github-integration-client-secret') }}</ui-input>
|
<ui-input v-model="githubClientSecret" :disabled="!enableGithubIntegration"><template #icon><fa icon="key"/></template>{{ $t('github-integration-client-secret') }}</ui-input>
|
||||||
</ui-horizon-group>
|
</ui-horizon-group>
|
||||||
<ui-info>{{ $t('github-integration-info', { url: `${url}/api/gh/cb` }) }}</ui-info>
|
<ui-info>{{ $t('github-integration-info', { url: `${url}/api/gh/cb` }) }}</ui-info>
|
||||||
<ui-button @click="updateMeta">{{ $t('save') }}</ui-button>
|
</template>
|
||||||
</section>
|
</section>
|
||||||
</ui-card>
|
|
||||||
|
|
||||||
<ui-card>
|
|
||||||
<template #title><fa :icon="['fab', 'discord']"/> {{ $t('discord-integration-config') }}</template>
|
|
||||||
<section>
|
<section>
|
||||||
|
<header><fa :icon="['fab', 'discord']"/> {{ $t('discord-integration-config') }}</header>
|
||||||
<ui-switch v-model="enableDiscordIntegration">{{ $t('enable-discord-integration') }}</ui-switch>
|
<ui-switch v-model="enableDiscordIntegration">{{ $t('enable-discord-integration') }}</ui-switch>
|
||||||
|
<template v-if="enableDiscordIntegration">
|
||||||
<ui-horizon-group>
|
<ui-horizon-group>
|
||||||
<ui-input v-model="discordClientId" :disabled="!enableDiscordIntegration"><template #icon><fa icon="key"/></template>{{ $t('discord-integration-client-id') }}</ui-input>
|
<ui-input v-model="discordClientId" :disabled="!enableDiscordIntegration"><template #icon><fa icon="key"/></template>{{ $t('discord-integration-client-id') }}</ui-input>
|
||||||
<ui-input v-model="discordClientSecret" :disabled="!enableDiscordIntegration"><template #icon><fa icon="key"/></template>{{ $t('discord-integration-client-secret') }}</ui-input>
|
<ui-input v-model="discordClientSecret" :disabled="!enableDiscordIntegration"><template #icon><fa icon="key"/></template>{{ $t('discord-integration-client-secret') }}</ui-input>
|
||||||
</ui-horizon-group>
|
</ui-horizon-group>
|
||||||
<ui-info>{{ $t('discord-integration-info', { url: `${url}/api/dc/cb` }) }}</ui-info>
|
<ui-info>{{ $t('discord-integration-info', { url: `${url}/api/dc/cb` }) }}</ui-info>
|
||||||
<ui-button @click="updateMeta">{{ $t('save') }}</ui-button>
|
</template>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<ui-button @click="updateMeta"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
|
||||||
</section>
|
</section>
|
||||||
</ui-card>
|
</ui-card>
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary style="color:var(--text);">{{ $t('advanced-config') }}</summary>
|
||||||
|
|
||||||
|
<ui-card>
|
||||||
|
<template #title><fa :icon="faHashtag"/> {{ $t('hidden-tags') }}</template>
|
||||||
|
<section class="fit-top">
|
||||||
|
<ui-textarea v-model="hiddenTags">
|
||||||
|
<template #desc>{{ $t('hidden-tags-info') }}</template>
|
||||||
|
</ui-textarea>
|
||||||
|
<ui-button @click="updateMeta"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
|
||||||
|
</section>
|
||||||
|
</ui-card>
|
||||||
|
|
||||||
|
<ui-card>
|
||||||
|
<template #title>summaly Proxy</template>
|
||||||
|
<section class="fit-top fit-bottom">
|
||||||
|
<ui-input v-model="summalyProxy">URL</ui-input>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<ui-button @click="updateMeta"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
|
||||||
|
</section>
|
||||||
|
</ui-card>
|
||||||
|
</details>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -142,8 +245,8 @@ import Vue from 'vue';
|
|||||||
import i18n from '../../i18n';
|
import i18n from '../../i18n';
|
||||||
import { url, host } from '../../config';
|
import { url, host } from '../../config';
|
||||||
import { toUnicode } from 'punycode';
|
import { toUnicode } from 'punycode';
|
||||||
import { faHeadset, faShieldAlt, faGhost, faUserPlus, faBolt } from '@fortawesome/free-solid-svg-icons';
|
import { faHeadset, faShieldAlt, faGhost, faUserPlus, faBolt, faThumbtack, faPencilAlt, faHashtag } from '@fortawesome/free-solid-svg-icons';
|
||||||
import { faEnvelope as farEnvelope } from '@fortawesome/free-regular-svg-icons';
|
import { faEnvelope as farEnvelope, faSave } from '@fortawesome/free-regular-svg-icons';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
i18n: i18n('admin/views/instance.vue'),
|
i18n: i18n('admin/views/instance.vue'),
|
||||||
@@ -154,6 +257,9 @@ export default Vue.extend({
|
|||||||
host: toUnicode(host),
|
host: toUnicode(host),
|
||||||
maintainerName: null,
|
maintainerName: null,
|
||||||
maintainerEmail: null,
|
maintainerEmail: null,
|
||||||
|
ToSUrl: null,
|
||||||
|
repositoryUrl: "https://github.com/syuilo/misskey",
|
||||||
|
feedbackUrl: null,
|
||||||
disableRegistration: false,
|
disableRegistration: false,
|
||||||
disableLocalTimeline: false,
|
disableLocalTimeline: false,
|
||||||
disableGlobalTimeline: false,
|
disableGlobalTimeline: false,
|
||||||
@@ -183,10 +289,6 @@ export default Vue.extend({
|
|||||||
discordClientId: null,
|
discordClientId: null,
|
||||||
discordClientSecret: null,
|
discordClientSecret: null,
|
||||||
proxyAccount: null,
|
proxyAccount: null,
|
||||||
inviteCode: null,
|
|
||||||
enableExternalUserRecommendation: false,
|
|
||||||
externalUserRecommendationEngine: null,
|
|
||||||
externalUserRecommendationTimeout: null,
|
|
||||||
summalyProxy: null,
|
summalyProxy: null,
|
||||||
enableEmail: false,
|
enableEmail: false,
|
||||||
email: null,
|
email: null,
|
||||||
@@ -199,14 +301,29 @@ export default Vue.extend({
|
|||||||
enableServiceWorker: false,
|
enableServiceWorker: false,
|
||||||
swPublicKey: null,
|
swPublicKey: null,
|
||||||
swPrivateKey: null,
|
swPrivateKey: null,
|
||||||
faHeadset, faShieldAlt, faGhost, faUserPlus, farEnvelope, faBolt
|
pinnedUsers: '',
|
||||||
|
hiddenTags: '',
|
||||||
|
useObjectStorage: false,
|
||||||
|
objectStorageBaseUrl: null,
|
||||||
|
objectStorageBucket: null,
|
||||||
|
objectStoragePrefix: null,
|
||||||
|
objectStorageEndpoint: null,
|
||||||
|
objectStorageRegion: null,
|
||||||
|
objectStoragePort: null,
|
||||||
|
objectStorageAccessKey: null,
|
||||||
|
objectStorageSecretKey: null,
|
||||||
|
objectStorageUseSSL: false,
|
||||||
|
faHeadset, faShieldAlt, faGhost, faUserPlus, farEnvelope, faBolt, faThumbtack, faPencilAlt, faSave, faHashtag
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
created() {
|
created() {
|
||||||
this.$root.getMeta().then(meta => {
|
this.$root.getMeta(true).then(meta => {
|
||||||
this.maintainerName = meta.maintainer.name;
|
this.maintainerName = meta.maintainerName;
|
||||||
this.maintainerEmail = meta.maintainer.email;
|
this.maintainerEmail = meta.maintainerEmail;
|
||||||
|
this.ToSUrl = meta.ToSUrl;
|
||||||
|
this.repositoryUrl = meta.repositoryUrl;
|
||||||
|
this.feedbackUrl = meta.feedbackUrl;
|
||||||
this.disableRegistration = meta.disableRegistration;
|
this.disableRegistration = meta.disableRegistration;
|
||||||
this.disableLocalTimeline = meta.disableLocalTimeline;
|
this.disableLocalTimeline = meta.disableLocalTimeline;
|
||||||
this.disableGlobalTimeline = meta.disableGlobalTimeline;
|
this.disableGlobalTimeline = meta.disableGlobalTimeline;
|
||||||
@@ -236,9 +353,6 @@ export default Vue.extend({
|
|||||||
this.enableDiscordIntegration = meta.enableDiscordIntegration;
|
this.enableDiscordIntegration = meta.enableDiscordIntegration;
|
||||||
this.discordClientId = meta.discordClientId;
|
this.discordClientId = meta.discordClientId;
|
||||||
this.discordClientSecret = meta.discordClientSecret;
|
this.discordClientSecret = meta.discordClientSecret;
|
||||||
this.enableExternalUserRecommendation = meta.enableExternalUserRecommendation;
|
|
||||||
this.externalUserRecommendationEngine = meta.externalUserRecommendationEngine;
|
|
||||||
this.externalUserRecommendationTimeout = meta.externalUserRecommendationTimeout;
|
|
||||||
this.summalyProxy = meta.summalyProxy;
|
this.summalyProxy = meta.summalyProxy;
|
||||||
this.enableEmail = meta.enableEmail;
|
this.enableEmail = meta.enableEmail;
|
||||||
this.email = meta.email;
|
this.email = meta.email;
|
||||||
@@ -251,13 +365,56 @@ export default Vue.extend({
|
|||||||
this.enableServiceWorker = meta.enableServiceWorker;
|
this.enableServiceWorker = meta.enableServiceWorker;
|
||||||
this.swPublicKey = meta.swPublickey;
|
this.swPublicKey = meta.swPublickey;
|
||||||
this.swPrivateKey = meta.swPrivateKey;
|
this.swPrivateKey = meta.swPrivateKey;
|
||||||
|
this.pinnedUsers = meta.pinnedUsers.join('\n');
|
||||||
|
this.hiddenTags = meta.hiddenTags.join('\n');
|
||||||
|
this.useObjectStorage = meta.useObjectStorage;
|
||||||
|
this.objectStorageBaseUrl = meta.objectStorageBaseUrl;
|
||||||
|
this.objectStorageBucket = meta.objectStorageBucket;
|
||||||
|
this.objectStoragePrefix = meta.objectStoragePrefix;
|
||||||
|
this.objectStorageEndpoint = meta.objectStorageEndpoint;
|
||||||
|
this.objectStorageRegion = meta.objectStorageRegion;
|
||||||
|
this.objectStoragePort = meta.objectStoragePort;
|
||||||
|
this.objectStorageAccessKey = meta.objectStorageAccessKey;
|
||||||
|
this.objectStorageSecretKey = meta.objectStorageSecretKey;
|
||||||
|
this.objectStorageUseSSL = meta.objectStorageUseSSL;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
mounted() {
|
||||||
|
const renderRecaptchaPreview = () => {
|
||||||
|
if (!(window as any).grecaptcha) return;
|
||||||
|
if (!this.$refs.recaptcha) return;
|
||||||
|
if (!this.recaptchaSiteKey) return;
|
||||||
|
(window as any).grecaptcha.render(this.$refs.recaptcha, {
|
||||||
|
sitekey: this.recaptchaSiteKey
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
window.onRecaotchaLoad = () => {
|
||||||
|
renderRecaptchaPreview();
|
||||||
|
};
|
||||||
|
|
||||||
|
const head = document.getElementsByTagName('head')[0];
|
||||||
|
const script = document.createElement('script');
|
||||||
|
script.setAttribute('src', 'https://www.google.com/recaptcha/api.js?onload=onRecaotchaLoad');
|
||||||
|
head.appendChild(script);
|
||||||
|
|
||||||
|
this.$watch('enableRecaptcha', () => {
|
||||||
|
renderRecaptchaPreview();
|
||||||
|
});
|
||||||
|
|
||||||
|
this.$watch('recaptchaSiteKey', () => {
|
||||||
|
renderRecaptchaPreview();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
invite() {
|
invite() {
|
||||||
this.$root.api('admin/invite').then(x => {
|
this.$root.api('admin/invite').then(x => {
|
||||||
this.inviteCode = x.code;
|
this.$root.dialog({
|
||||||
|
type: 'info',
|
||||||
|
text: x.code
|
||||||
|
});
|
||||||
}).catch(e => {
|
}).catch(e => {
|
||||||
this.$root.dialog({
|
this.$root.dialog({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
@@ -270,6 +427,9 @@ export default Vue.extend({
|
|||||||
this.$root.api('admin/update-meta', {
|
this.$root.api('admin/update-meta', {
|
||||||
maintainerName: this.maintainerName,
|
maintainerName: this.maintainerName,
|
||||||
maintainerEmail: this.maintainerEmail,
|
maintainerEmail: this.maintainerEmail,
|
||||||
|
ToSUrl: this.ToSUrl,
|
||||||
|
repositoryUrl: this.repositoryUrl,
|
||||||
|
feedbackUrl: this.feedbackUrl,
|
||||||
disableRegistration: this.disableRegistration,
|
disableRegistration: this.disableRegistration,
|
||||||
disableLocalTimeline: this.disableLocalTimeline,
|
disableLocalTimeline: this.disableLocalTimeline,
|
||||||
disableGlobalTimeline: this.disableGlobalTimeline,
|
disableGlobalTimeline: this.disableGlobalTimeline,
|
||||||
@@ -299,9 +459,6 @@ export default Vue.extend({
|
|||||||
enableDiscordIntegration: this.enableDiscordIntegration,
|
enableDiscordIntegration: this.enableDiscordIntegration,
|
||||||
discordClientId: this.discordClientId,
|
discordClientId: this.discordClientId,
|
||||||
discordClientSecret: this.discordClientSecret,
|
discordClientSecret: this.discordClientSecret,
|
||||||
enableExternalUserRecommendation: this.enableExternalUserRecommendation,
|
|
||||||
externalUserRecommendationEngine: this.externalUserRecommendationEngine,
|
|
||||||
externalUserRecommendationTimeout: parseInt(this.externalUserRecommendationTimeout, 10),
|
|
||||||
summalyProxy: this.summalyProxy,
|
summalyProxy: this.summalyProxy,
|
||||||
enableEmail: this.enableEmail,
|
enableEmail: this.enableEmail,
|
||||||
email: this.email,
|
email: this.email,
|
||||||
@@ -312,7 +469,19 @@ export default Vue.extend({
|
|||||||
smtpPass: this.smtpAuth ? this.smtpPass : '',
|
smtpPass: this.smtpAuth ? this.smtpPass : '',
|
||||||
enableServiceWorker: this.enableServiceWorker,
|
enableServiceWorker: this.enableServiceWorker,
|
||||||
swPublicKey: this.swPublicKey,
|
swPublicKey: this.swPublicKey,
|
||||||
swPrivateKey: this.swPrivateKey
|
swPrivateKey: this.swPrivateKey,
|
||||||
|
pinnedUsers: this.pinnedUsers.split('\n'),
|
||||||
|
hiddenTags: this.hiddenTags.split('\n'),
|
||||||
|
useObjectStorage: this.useObjectStorage,
|
||||||
|
objectStorageBaseUrl: this.objectStorageBaseUrl ? this.objectStorageBaseUrl : null,
|
||||||
|
objectStorageBucket: this.objectStorageBucket ? this.objectStorageBucket : null,
|
||||||
|
objectStoragePrefix: this.objectStoragePrefix ? this.objectStoragePrefix : null,
|
||||||
|
objectStorageEndpoint: this.objectStorageEndpoint ? this.objectStorageEndpoint : null,
|
||||||
|
objectStorageRegion: this.objectStorageRegion ? this.objectStorageRegion : null,
|
||||||
|
objectStoragePort: this.objectStoragePort ? this.objectStoragePort : null,
|
||||||
|
objectStorageAccessKey: this.objectStorageAccessKey ? this.objectStorageAccessKey : null,
|
||||||
|
objectStorageSecretKey: this.objectStorageSecretKey ? this.objectStorageSecretKey : null,
|
||||||
|
objectStorageUseSSL: this.objectStorageUseSSL,
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
this.$root.dialog({
|
this.$root.dialog({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
</ui-horizon-group>
|
</ui-horizon-group>
|
||||||
|
|
||||||
<div class="nqjzuvev">
|
<div class="nqjzuvev">
|
||||||
<code v-for="log in logs" :key="log._id" :class="log.level">
|
<code v-for="log in logs" :key="log.id" :class="log.level">
|
||||||
<details>
|
<details>
|
||||||
<summary><mk-time :time="log.createdAt"/> [{{ log.domain.join('.') }}] {{ log.message }}</summary>
|
<summary><mk-time :time="log.createdAt"/> [{{ log.domain.join('.') }}] {{ log.message }}</summary>
|
||||||
<vue-json-pretty v-if="log.data" :data="log.data"></vue-json-pretty>
|
<vue-json-pretty v-if="log.data" :data="log.data"></vue-json-pretty>
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
<span class="username">@{{ user | acct }}</span>
|
<span class="username">@{{ user | acct }}</span>
|
||||||
<span class="is-admin" v-if="user.isAdmin">admin</span>
|
<span class="is-admin" v-if="user.isAdmin">admin</span>
|
||||||
<span class="is-moderator" v-if="user.isModerator">moderator</span>
|
<span class="is-moderator" v-if="user.isModerator">moderator</span>
|
||||||
<span class="is-verified" v-if="user.isVerified" :title="$t('@.verified-user')"><fa icon="star"/></span>
|
|
||||||
<span class="is-silenced" v-if="user.isSilenced" :title="$t('@.silenced-user')"><fa :icon="faMicrophoneSlash"/></span>
|
<span class="is-silenced" v-if="user.isSilenced" :title="$t('@.silenced-user')"><fa :icon="faMicrophoneSlash"/></span>
|
||||||
<span class="is-suspended" v-if="user.isSuspended" :title="$t('@.suspended-user')"><fa :icon="faSnowflake"/></span>
|
<span class="is-suspended" v-if="user.isSuspended" :title="$t('@.suspended-user')"><fa :icon="faSnowflake"/></span>
|
||||||
</header>
|
</header>
|
||||||
@@ -77,7 +76,6 @@ export default Vue.extend({
|
|||||||
background var(--noteHeaderAdminBg)
|
background var(--noteHeaderAdminBg)
|
||||||
color var(--noteHeaderAdminFg)
|
color var(--noteHeaderAdminFg)
|
||||||
|
|
||||||
> .is-verified
|
|
||||||
> .is-silenced
|
> .is-silenced
|
||||||
> .is-suspended
|
> .is-suspended
|
||||||
margin 0 0 0 .5em
|
margin 0 0 0 .5em
|
||||||
|
|||||||
@@ -9,13 +9,10 @@
|
|||||||
<ui-button @click="showUser"><fa :icon="faSearch"/> {{ $t('lookup') }}</ui-button>
|
<ui-button @click="showUser"><fa :icon="faSearch"/> {{ $t('lookup') }}</ui-button>
|
||||||
|
|
||||||
<div class="user" v-if="user">
|
<div class="user" v-if="user">
|
||||||
<x-user :user='user'/>
|
<x-user :user="user"/>
|
||||||
<div class="actions">
|
<div class="actions">
|
||||||
|
<ui-button v-if="user.host != null" @click="updateRemoteUser"><fa :icon="faSync"/> {{ $t('update-remote-user') }}</ui-button>
|
||||||
<ui-button @click="resetPassword"><fa :icon="faKey"/> {{ $t('reset-password') }}</ui-button>
|
<ui-button @click="resetPassword"><fa :icon="faKey"/> {{ $t('reset-password') }}</ui-button>
|
||||||
<ui-horizon-group>
|
|
||||||
<ui-button @click="verifyUser" :disabled="verifying"><fa :icon="faCertificate"/> {{ $t('verify') }}</ui-button>
|
|
||||||
<ui-button @click="unverifyUser" :disabled="unverifying">{{ $t('unverify') }}</ui-button>
|
|
||||||
</ui-horizon-group>
|
|
||||||
<ui-horizon-group>
|
<ui-horizon-group>
|
||||||
<ui-button @click="silenceUser"><fa :icon="faMicrophoneSlash"/> {{ $t('make-silence') }}</ui-button>
|
<ui-button @click="silenceUser"><fa :icon="faMicrophoneSlash"/> {{ $t('make-silence') }}</ui-button>
|
||||||
<ui-button @click="unsilenceUser">{{ $t('unmake-silence') }}</ui-button>
|
<ui-button @click="unsilenceUser">{{ $t('unmake-silence') }}</ui-button>
|
||||||
@@ -24,7 +21,7 @@
|
|||||||
<ui-button @click="suspendUser" :disabled="suspending"><fa :icon="faSnowflake"/> {{ $t('suspend') }}</ui-button>
|
<ui-button @click="suspendUser" :disabled="suspending"><fa :icon="faSnowflake"/> {{ $t('suspend') }}</ui-button>
|
||||||
<ui-button @click="unsuspendUser" :disabled="unsuspending">{{ $t('unsuspend') }}</ui-button>
|
<ui-button @click="unsuspendUser" :disabled="unsuspending">{{ $t('unsuspend') }}</ui-button>
|
||||||
</ui-horizon-group>
|
</ui-horizon-group>
|
||||||
<ui-button v-if="user.host != null" @click="updateRemoteUser"><fa :icon="faSync"/> {{ $t('update-remote-user') }}</ui-button>
|
<ui-button @click="deleteAllFiles"><fa :icon="faTrashAlt"/> {{ $t('delete-all-files') }}</ui-button>
|
||||||
<ui-textarea v-if="user" :value="user | json5" readonly tall style="margin-top:16px;"></ui-textarea>
|
<ui-textarea v-if="user" :value="user | json5" readonly tall style="margin-top:16px;"></ui-textarea>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -47,7 +44,6 @@
|
|||||||
<option value="all">{{ $t('users.state.all') }}</option>
|
<option value="all">{{ $t('users.state.all') }}</option>
|
||||||
<option value="admin">{{ $t('users.state.admin') }}</option>
|
<option value="admin">{{ $t('users.state.admin') }}</option>
|
||||||
<option value="moderator">{{ $t('users.state.moderator') }}</option>
|
<option value="moderator">{{ $t('users.state.moderator') }}</option>
|
||||||
<option value="verified">{{ $t('users.state.verified') }}</option>
|
|
||||||
<option value="silenced">{{ $t('users.state.silenced') }}</option>
|
<option value="silenced">{{ $t('users.state.silenced') }}</option>
|
||||||
<option value="suspended">{{ $t('users.state.suspended') }}</option>
|
<option value="suspended">{{ $t('users.state.suspended') }}</option>
|
||||||
</ui-select>
|
</ui-select>
|
||||||
@@ -71,8 +67,8 @@
|
|||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import i18n from '../../i18n';
|
import i18n from '../../i18n';
|
||||||
import parseAcct from "../../../../misc/acct/parse";
|
import parseAcct from "../../../../misc/acct/parse";
|
||||||
import { faCertificate, faUsers, faTerminal, faSearch, faKey, faSync, faMicrophoneSlash } from '@fortawesome/free-solid-svg-icons';
|
import { faUsers, faTerminal, faSearch, faKey, faSync, faMicrophoneSlash } from '@fortawesome/free-solid-svg-icons';
|
||||||
import { faSnowflake } from '@fortawesome/free-regular-svg-icons';
|
import { faSnowflake, faTrashAlt } from '@fortawesome/free-regular-svg-icons';
|
||||||
import XUser from './users.user.vue';
|
import XUser from './users.user.vue';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
@@ -84,8 +80,6 @@ export default Vue.extend({
|
|||||||
return {
|
return {
|
||||||
user: null,
|
user: null,
|
||||||
target: null,
|
target: null,
|
||||||
verifying: false,
|
|
||||||
unverifying: false,
|
|
||||||
suspending: false,
|
suspending: false,
|
||||||
unsuspending: false,
|
unsuspending: false,
|
||||||
sort: '+createdAt',
|
sort: '+createdAt',
|
||||||
@@ -95,7 +89,7 @@ export default Vue.extend({
|
|||||||
offset: 0,
|
offset: 0,
|
||||||
users: [],
|
users: [],
|
||||||
existMore: false,
|
existMore: false,
|
||||||
faTerminal, faCertificate, faUsers, faSnowflake, faSearch, faKey, faSync, faMicrophoneSlash
|
faTerminal, faUsers, faSnowflake, faSearch, faKey, faSync, faMicrophoneSlash, faTrashAlt
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -165,7 +159,7 @@ export default Vue.extend({
|
|||||||
|
|
||||||
/** 処理対象ユーザーの情報を更新する */
|
/** 処理対象ユーザーの情報を更新する */
|
||||||
async refreshUser() {
|
async refreshUser() {
|
||||||
this.$root.api('admin/show-user', { userId: this.user._id }).then(info => {
|
this.$root.api('admin/show-user', { userId: this.user.id }).then(info => {
|
||||||
this.user = info;
|
this.user = info;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
@@ -173,7 +167,7 @@ export default Vue.extend({
|
|||||||
async resetPassword() {
|
async resetPassword() {
|
||||||
if (!await this.getConfirmed(this.$t('reset-password-confirm'))) return;
|
if (!await this.getConfirmed(this.$t('reset-password-confirm'))) return;
|
||||||
|
|
||||||
this.$root.api('admin/reset-password', { userId: this.user._id }).then(res => {
|
this.$root.api('admin/reset-password', { userId: this.user.id }).then(res => {
|
||||||
this.$root.dialog({
|
this.$root.dialog({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
text: this.$t('password-updated', { password: res.password })
|
text: this.$t('password-updated', { password: res.password })
|
||||||
@@ -181,59 +175,11 @@ export default Vue.extend({
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
async verifyUser() {
|
|
||||||
if (!await this.getConfirmed(this.$t('verify-confirm'))) return;
|
|
||||||
|
|
||||||
this.verifying = true;
|
|
||||||
|
|
||||||
const process = async () => {
|
|
||||||
await this.$root.api('admin/verify-user', { userId: this.user._id });
|
|
||||||
this.$root.dialog({
|
|
||||||
type: 'success',
|
|
||||||
text: this.$t('verified')
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
await process().catch(e => {
|
|
||||||
this.$root.dialog({
|
|
||||||
type: 'error',
|
|
||||||
text: e.toString()
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
this.verifying = false;
|
|
||||||
|
|
||||||
this.refreshUser();
|
|
||||||
},
|
|
||||||
|
|
||||||
async unverifyUser() {
|
|
||||||
if (!await this.getConfirmed(this.$t('unverify-confirm'))) return;
|
|
||||||
|
|
||||||
this.unverifying = true;
|
|
||||||
|
|
||||||
const process = async () => {
|
|
||||||
await this.$root.api('admin/unverify-user', { userId: this.user._id });
|
|
||||||
this.$root.dialog({
|
|
||||||
type: 'success',
|
|
||||||
text: this.$t('unverified')
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
await process().catch(e => {
|
|
||||||
this.$root.dialog({
|
|
||||||
type: 'error',
|
|
||||||
text: e.toString()
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
this.unverifying = false;
|
|
||||||
|
|
||||||
this.refreshUser();
|
|
||||||
},
|
|
||||||
|
|
||||||
async silenceUser() {
|
async silenceUser() {
|
||||||
|
if (!await this.getConfirmed(this.$t('silence-confirm'))) return;
|
||||||
|
|
||||||
const process = async () => {
|
const process = async () => {
|
||||||
await this.$root.api('admin/silence-user', { userId: this.user._id });
|
await this.$root.api('admin/silence-user', { userId: this.user.id });
|
||||||
this.$root.dialog({
|
this.$root.dialog({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
splash: true
|
splash: true
|
||||||
@@ -251,8 +197,10 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
async unsilenceUser() {
|
async unsilenceUser() {
|
||||||
|
if (!await this.getConfirmed(this.$t('unsilence-confirm'))) return;
|
||||||
|
|
||||||
const process = async () => {
|
const process = async () => {
|
||||||
await this.$root.api('admin/unsilence-user', { userId: this.user._id });
|
await this.$root.api('admin/unsilence-user', { userId: this.user.id });
|
||||||
this.$root.dialog({
|
this.$root.dialog({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
splash: true
|
splash: true
|
||||||
@@ -275,7 +223,7 @@ export default Vue.extend({
|
|||||||
this.suspending = true;
|
this.suspending = true;
|
||||||
|
|
||||||
const process = async () => {
|
const process = async () => {
|
||||||
await this.$root.api('admin/suspend-user', { userId: this.user._id });
|
await this.$root.api('admin/suspend-user', { userId: this.user.id });
|
||||||
this.$root.dialog({
|
this.$root.dialog({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
text: this.$t('suspended')
|
text: this.$t('suspended')
|
||||||
@@ -300,7 +248,7 @@ export default Vue.extend({
|
|||||||
this.unsuspending = true;
|
this.unsuspending = true;
|
||||||
|
|
||||||
const process = async () => {
|
const process = async () => {
|
||||||
await this.$root.api('admin/unsuspend-user', { userId: this.user._id });
|
await this.$root.api('admin/unsuspend-user', { userId: this.user.id });
|
||||||
this.$root.dialog({
|
this.$root.dialog({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
text: this.$t('unsuspended')
|
text: this.$t('unsuspended')
|
||||||
@@ -320,7 +268,7 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
async updateRemoteUser() {
|
async updateRemoteUser() {
|
||||||
this.$root.api('admin/update-remote-user', { userId: this.user._id }).then(res => {
|
this.$root.api('admin/update-remote-user', { userId: this.user.id }).then(res => {
|
||||||
this.$root.dialog({
|
this.$root.dialog({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
text: this.$t('remote-user-updated')
|
text: this.$t('remote-user-updated')
|
||||||
@@ -330,6 +278,25 @@ export default Vue.extend({
|
|||||||
this.refreshUser();
|
this.refreshUser();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
async deleteAllFiles() {
|
||||||
|
if (!await this.getConfirmed(this.$t('delete-all-files-confirm'))) return;
|
||||||
|
|
||||||
|
const process = async () => {
|
||||||
|
await this.$root.api('admin/delete-all-files-of-a-user', { userId: this.user.id });
|
||||||
|
this.$root.dialog({
|
||||||
|
type: 'success',
|
||||||
|
splash: true
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
await process().catch(e => {
|
||||||
|
this.$root.dialog({
|
||||||
|
type: 'error',
|
||||||
|
text: e.toString()
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
async getConfirmed(text: string): Promise<Boolean> {
|
async getConfirmed(text: string): Promise<Boolean> {
|
||||||
const confirm = await this.$root.dialog({
|
const confirm = await this.$root.dialog({
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ body
|
|||||||
.peg
|
.peg
|
||||||
display block
|
display block
|
||||||
position absolute
|
position absolute
|
||||||
right 0px
|
right 0
|
||||||
width 100px
|
width 100px
|
||||||
height 100%
|
height 100%
|
||||||
box-shadow 0 0 10px var(--primary), 0 0 5px var(--primary)
|
box-shadow 0 0 10px var(--primary), 0 0 5px var(--primary)
|
||||||
|
|||||||
@@ -14,15 +14,7 @@
|
|||||||
<h2>{{ $t('permission-ask') }}</h2>
|
<h2>{{ $t('permission-ask') }}</h2>
|
||||||
<ul>
|
<ul>
|
||||||
<template v-for="p in app.permission">
|
<template v-for="p in app.permission">
|
||||||
<li v-if="p == 'account-read'">{{ $t('account-read') }}</li>
|
<li :key="p">{{ $t(`@.permissions.${p}`) }}</li>
|
||||||
<li v-if="p == 'account-write'">{{ $t('account-write') }}</li>
|
|
||||||
<li v-if="p == 'note-write'">{{ $t('note-write') }}</li>
|
|
||||||
<li v-if="p == 'like-write'">{{ $t('like-write') }}</li>
|
|
||||||
<li v-if="p == 'following-write'">{{ $t('following-write') }}</li>
|
|
||||||
<li v-if="p == 'drive-read'">{{ $t('drive-read') }}</li>
|
|
||||||
<li v-if="p == 'drive-write'">{{ $t('drive-write') }}</li>
|
|
||||||
<li v-if="p == 'notification-read'">{{ $t('notification-read') }}</li>
|
|
||||||
<li v-if="p == 'notification-write'">{{ $t('notification-write') }}</li>
|
|
||||||
</template>
|
</template>
|
||||||
</ul>
|
</ul>
|
||||||
</section>
|
</section>
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ export default Vue.extend({
|
|||||||
margin 0 auto
|
margin 0 auto
|
||||||
text-align center
|
text-align center
|
||||||
background #fff
|
background #fff
|
||||||
box-shadow 0px 4px 16px rgba(#000, 0.2)
|
box-shadow 0 4px 16px rgba(#000, 0.2)
|
||||||
|
|
||||||
> .fetching
|
> .fetching
|
||||||
margin 0
|
margin 0
|
||||||
|
|||||||
@@ -45,15 +45,9 @@ export default function <T extends object>(data: {
|
|||||||
this.$watch('props', () => {
|
this.$watch('props', () => {
|
||||||
this.mergeProps();
|
this.mergeProps();
|
||||||
});
|
});
|
||||||
|
|
||||||
this.bakeProps();
|
|
||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
bakeProps() {
|
|
||||||
this.bakedOldProps = JSON.stringify(this.props);
|
|
||||||
},
|
|
||||||
|
|
||||||
mergeProps() {
|
mergeProps() {
|
||||||
if (data.props) {
|
if (data.props) {
|
||||||
const defaultProps = data.props();
|
const defaultProps = data.props();
|
||||||
@@ -65,17 +59,10 @@ export default function <T extends object>(data: {
|
|||||||
},
|
},
|
||||||
|
|
||||||
save() {
|
save() {
|
||||||
if (this.bakedOldProps == JSON.stringify(this.props)) return;
|
|
||||||
|
|
||||||
this.bakeProps();
|
|
||||||
|
|
||||||
if (this.platform == 'deck') {
|
if (this.platform == 'deck') {
|
||||||
this.$store.commit('device/updateDeckColumn', this.column);
|
this.$store.commit('device/updateDeckColumn', this.column);
|
||||||
} else {
|
} else {
|
||||||
this.$root.api('i/update_widget', {
|
this.$store.commit('device/updateWidget', this.widget);
|
||||||
id: this.id,
|
|
||||||
data: this.props
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ function match(e: KeyboardEvent, patterns: action['patterns']): boolean {
|
|||||||
pattern.ctrl == e.ctrlKey &&
|
pattern.ctrl == e.ctrlKey &&
|
||||||
pattern.shift == e.shiftKey &&
|
pattern.shift == e.shiftKey &&
|
||||||
pattern.alt == e.altKey &&
|
pattern.alt == e.altKey &&
|
||||||
e.metaKey == false
|
!e.metaKey
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
42
src/client/app/common/scripts/collect-page-vars.ts
Normal file
42
src/client/app/common/scripts/collect-page-vars.ts
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
export function collectPageVars(content) {
|
||||||
|
const pageVars = [];
|
||||||
|
const collect = (xs: any[]) => {
|
||||||
|
for (const x of xs) {
|
||||||
|
if (x.type === 'textInput') {
|
||||||
|
pageVars.push({
|
||||||
|
name: x.name,
|
||||||
|
type: 'string',
|
||||||
|
value: x.default || ''
|
||||||
|
});
|
||||||
|
} else if (x.type === 'textareaInput') {
|
||||||
|
pageVars.push({
|
||||||
|
name: x.name,
|
||||||
|
type: 'string',
|
||||||
|
value: x.default || ''
|
||||||
|
});
|
||||||
|
} else if (x.type === 'numberInput') {
|
||||||
|
pageVars.push({
|
||||||
|
name: x.name,
|
||||||
|
type: 'number',
|
||||||
|
value: x.default || 0
|
||||||
|
});
|
||||||
|
} else if (x.type === 'switch') {
|
||||||
|
pageVars.push({
|
||||||
|
name: x.name,
|
||||||
|
type: 'boolean',
|
||||||
|
value: x.default || false
|
||||||
|
});
|
||||||
|
} else if (x.type === 'counter') {
|
||||||
|
pageVars.push({
|
||||||
|
name: x.name,
|
||||||
|
type: 'number',
|
||||||
|
value: 0
|
||||||
|
});
|
||||||
|
} else if (x.children) {
|
||||||
|
collect(x.children);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
collect(content);
|
||||||
|
return pageVars;
|
||||||
|
}
|
||||||
31
src/client/app/common/scripts/gen-search-query.ts
Normal file
31
src/client/app/common/scripts/gen-search-query.ts
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
import parseAcct from '../../../../misc/acct/parse';
|
||||||
|
import { host as localHost } from '../../config';
|
||||||
|
|
||||||
|
export async function genSearchQuery(v: any, q: string) {
|
||||||
|
let host: string;
|
||||||
|
let userId: string;
|
||||||
|
if (q.split(' ').some(x => x.startsWith('@'))) {
|
||||||
|
for (const at of q.split(' ').filter(x => x.startsWith('@')).map(x => x.substr(1))) {
|
||||||
|
if (at.includes('.')) {
|
||||||
|
if (at === localHost || at === '.') {
|
||||||
|
host = null;
|
||||||
|
} else {
|
||||||
|
host = at;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const user = await v.$root.api('users/show', parseAcct(at)).catch(x => null);
|
||||||
|
if (user) {
|
||||||
|
userId = user.id;
|
||||||
|
} else {
|
||||||
|
// todo: show error
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
query: q.split(' ').filter(x => !x.startsWith('/') && !x.startsWith('@')).join(' '),
|
||||||
|
host: host,
|
||||||
|
userId: userId
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -70,8 +70,8 @@ export default (opts: Opts = {}) => ({
|
|||||||
},
|
},
|
||||||
|
|
||||||
reactionsCount(): number {
|
reactionsCount(): number {
|
||||||
return this.appearNote.reactionCounts
|
return this.appearNote.reactions
|
||||||
? sum(Object.values(this.appearNote.reactionCounts))
|
? sum(Object.values(this.appearNote.reactions))
|
||||||
: 0;
|
: 0;
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -134,7 +134,7 @@ export default (opts: Opts = {}) => ({
|
|||||||
},
|
},
|
||||||
|
|
||||||
reactDirectly(reaction) {
|
reactDirectly(reaction) {
|
||||||
(this.$root.api('notes/reactions/create', {
|
this.$root.api('notes/reactions/create', {
|
||||||
noteId: this.appearNote.id,
|
noteId: this.appearNote.id,
|
||||||
reaction: reaction
|
reaction: reaction
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -87,16 +87,16 @@ export default prop => ({
|
|||||||
case 'reacted': {
|
case 'reacted': {
|
||||||
const reaction = body.reaction;
|
const reaction = body.reaction;
|
||||||
|
|
||||||
if (this.$_ns_target.reactionCounts == null) {
|
if (this.$_ns_target.reactions == null) {
|
||||||
Vue.set(this.$_ns_target, 'reactionCounts', {});
|
Vue.set(this.$_ns_target, 'reactions', {});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.$_ns_target.reactionCounts[reaction] == null) {
|
if (this.$_ns_target.reactions[reaction] == null) {
|
||||||
Vue.set(this.$_ns_target.reactionCounts, reaction, 0);
|
Vue.set(this.$_ns_target.reactions, reaction, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Increment the count
|
// Increment the count
|
||||||
this.$_ns_target.reactionCounts[reaction]++;
|
this.$_ns_target.reactions[reaction]++;
|
||||||
|
|
||||||
if (body.userId == this.$store.state.i.id) {
|
if (body.userId == this.$store.state.i.id) {
|
||||||
Vue.set(this.$_ns_target, 'myReaction', reaction);
|
Vue.set(this.$_ns_target, 'myReaction', reaction);
|
||||||
@@ -107,16 +107,16 @@ export default prop => ({
|
|||||||
case 'unreacted': {
|
case 'unreacted': {
|
||||||
const reaction = body.reaction;
|
const reaction = body.reaction;
|
||||||
|
|
||||||
if (this.$_ns_target.reactionCounts == null) {
|
if (this.$_ns_target.reactions == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.$_ns_target.reactionCounts[reaction] == null) {
|
if (this.$_ns_target.reactions[reaction] == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Decrement the count
|
// Decrement the count
|
||||||
if (this.$_ns_target.reactionCounts[reaction] > 0) this.$_ns_target.reactionCounts[reaction]--;
|
if (this.$_ns_target.reactions[reaction] > 0) this.$_ns_target.reactions[reaction]--;
|
||||||
|
|
||||||
if (body.userId == this.$store.state.i.id) {
|
if (body.userId == this.$store.state.i.id) {
|
||||||
Vue.set(this.$_ns_target, 'myReaction', null);
|
Vue.set(this.$_ns_target, 'myReaction', null);
|
||||||
@@ -125,9 +125,11 @@ export default prop => ({
|
|||||||
}
|
}
|
||||||
|
|
||||||
case 'pollVoted': {
|
case 'pollVoted': {
|
||||||
if (body.userId == this.$store.state.i.id) return;
|
|
||||||
const choice = body.choice;
|
const choice = body.choice;
|
||||||
this.$_ns_target.poll.choices.find(c => c.id === choice).votes++;
|
this.$_ns_target.poll.choices[choice].votes++;
|
||||||
|
if (body.userId == this.$store.state.i.id) {
|
||||||
|
Vue.set(this.$_ns_target.poll.choices[choice], 'isVoted', true);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -135,7 +137,6 @@ export default prop => ({
|
|||||||
Vue.set(this.$_ns_target, 'deletedAt', body.deletedAt);
|
Vue.set(this.$_ns_target, 'deletedAt', body.deletedAt);
|
||||||
Vue.set(this.$_ns_target, 'renote', null);
|
Vue.set(this.$_ns_target, 'renote', null);
|
||||||
this.$_ns_target.text = null;
|
this.$_ns_target.text = null;
|
||||||
this.$_ns_target.tags = [];
|
|
||||||
this.$_ns_target.fileIds = [];
|
this.$_ns_target.fileIds = [];
|
||||||
this.$_ns_target.poll = null;
|
this.$_ns_target.poll = null;
|
||||||
this.$_ns_target.geo = null;
|
this.$_ns_target.geo = null;
|
||||||
@@ -143,8 +144,6 @@ export default prop => ({
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.$emit(`update:${prop}`, this.$_ns_note_);
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
171
src/client/app/common/scripts/paging.ts
Normal file
171
src/client/app/common/scripts/paging.ts
Normal file
@@ -0,0 +1,171 @@
|
|||||||
|
import Vue from 'vue';
|
||||||
|
|
||||||
|
export default (opts) => ({
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
items: [],
|
||||||
|
queue: [],
|
||||||
|
fetching: true,
|
||||||
|
moreFetching: false,
|
||||||
|
inited: false,
|
||||||
|
more: false
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
computed: {
|
||||||
|
empty(): boolean {
|
||||||
|
return this.items.length == 0 && !this.fetching && this.inited;
|
||||||
|
},
|
||||||
|
|
||||||
|
error(): boolean {
|
||||||
|
return !this.fetching && !this.inited;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
watch: {
|
||||||
|
queue(x) {
|
||||||
|
if (opts.onQueueChanged) opts.onQueueChanged(this, x);
|
||||||
|
},
|
||||||
|
|
||||||
|
pagination() {
|
||||||
|
this.init();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
created() {
|
||||||
|
opts.displayLimit = opts.displayLimit || 30;
|
||||||
|
this.init();
|
||||||
|
},
|
||||||
|
|
||||||
|
mounted() {
|
||||||
|
if (opts.captureWindowScroll) {
|
||||||
|
this.isScrollTop = () => {
|
||||||
|
return window.scrollY <= 8;
|
||||||
|
};
|
||||||
|
|
||||||
|
window.addEventListener('scroll', this.onWindowScroll, { passive: true });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
beforeDestroy() {
|
||||||
|
if (opts.captureWindowScroll) {
|
||||||
|
window.removeEventListener('scroll', this.onWindowScroll);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
updateItem(i, item) {
|
||||||
|
Vue.set((this as any).items, i, item);
|
||||||
|
},
|
||||||
|
|
||||||
|
reload() {
|
||||||
|
this.queue = [];
|
||||||
|
this.items = [];
|
||||||
|
this.init();
|
||||||
|
},
|
||||||
|
|
||||||
|
async init() {
|
||||||
|
this.fetching = true;
|
||||||
|
let params = typeof this.pagination.params === 'function' ? this.pagination.params(true) : this.pagination.params;
|
||||||
|
if (params && params.then) params = await params;
|
||||||
|
await this.$root.api(this.pagination.endpoint, {
|
||||||
|
limit: (this.pagination.limit || 10) + 1,
|
||||||
|
...params
|
||||||
|
}).then(x => {
|
||||||
|
if (x.length == (this.pagination.limit || 10) + 1) {
|
||||||
|
x.pop();
|
||||||
|
this.items = x;
|
||||||
|
this.more = true;
|
||||||
|
} else {
|
||||||
|
this.items = x;
|
||||||
|
this.more = false;
|
||||||
|
}
|
||||||
|
this.inited = true;
|
||||||
|
this.fetching = false;
|
||||||
|
if (opts.onInited) opts.onInited(this);
|
||||||
|
}, e => {
|
||||||
|
this.fetching = false;
|
||||||
|
if (opts.onInited) opts.onInited(this);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
async fetchMore() {
|
||||||
|
if (!this.more || this.moreFetching || this.items.length === 0) return;
|
||||||
|
this.moreFetching = true;
|
||||||
|
let params = typeof this.pagination.params === 'function' ? this.pagination.params(false) : this.pagination.params;
|
||||||
|
if (params && params.then) params = await params;
|
||||||
|
await this.$root.api(this.pagination.endpoint, {
|
||||||
|
limit: (this.pagination.limit || 10) + 1,
|
||||||
|
untilId: this.items[this.items.length - 1].id,
|
||||||
|
...params
|
||||||
|
}).then(x => {
|
||||||
|
if (x.length == (this.pagination.limit || 10) + 1) {
|
||||||
|
x.pop();
|
||||||
|
this.items = this.items.concat(x);
|
||||||
|
this.more = true;
|
||||||
|
} else {
|
||||||
|
this.items = this.items.concat(x);
|
||||||
|
this.more = false;
|
||||||
|
}
|
||||||
|
this.moreFetching = false;
|
||||||
|
}, e => {
|
||||||
|
this.moreFetching = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
prepend(item, silent = false) {
|
||||||
|
if (opts.onPrepend) {
|
||||||
|
const cancel = opts.onPrepend(this, item, silent);
|
||||||
|
if (cancel) return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.isScrollTop == null || this.isScrollTop()) {
|
||||||
|
// Prepend the item
|
||||||
|
this.items.unshift(item);
|
||||||
|
|
||||||
|
// オーバーフローしたら古い投稿は捨てる
|
||||||
|
if (this.items.length >= opts.displayLimit) {
|
||||||
|
this.items = this.items.slice(0, opts.displayLimit);
|
||||||
|
this.more = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.queue.push(item);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
append(item) {
|
||||||
|
this.items.push(item);
|
||||||
|
},
|
||||||
|
|
||||||
|
releaseQueue() {
|
||||||
|
for (const n of this.queue) {
|
||||||
|
this.prepend(n, true);
|
||||||
|
}
|
||||||
|
this.queue = [];
|
||||||
|
},
|
||||||
|
|
||||||
|
onWindowScroll() {
|
||||||
|
if (this.isScrollTop()) {
|
||||||
|
this.onTop();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.$store.state.settings.fetchOnScroll) {
|
||||||
|
// 親要素が display none だったら弾く
|
||||||
|
// https://github.com/syuilo/misskey/issues/1569
|
||||||
|
// http://d.hatena.ne.jp/favril/20091105/1257403319
|
||||||
|
if (this.$el.offsetHeight == 0) return;
|
||||||
|
|
||||||
|
const current = window.scrollY + window.innerHeight;
|
||||||
|
if (current > document.body.offsetHeight - 8) this.onBottom();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
onTop() {
|
||||||
|
this.releaseQueue();
|
||||||
|
},
|
||||||
|
|
||||||
|
onBottom() {
|
||||||
|
this.fetchMore();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
64
src/client/app/common/scripts/search.ts
Normal file
64
src/client/app/common/scripts/search.ts
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
import { faHistory } from '@fortawesome/free-solid-svg-icons';
|
||||||
|
|
||||||
|
export async function search(v: any, q: string) {
|
||||||
|
q = q.trim();
|
||||||
|
|
||||||
|
if (q.startsWith('@') && !q.includes(' ')) {
|
||||||
|
v.$router.push(`/${q}`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (q.startsWith('#')) {
|
||||||
|
v.$router.push(`/tags/${encodeURIComponent(q.substr(1))}`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// like 2018/03/12
|
||||||
|
if (/^[0-9]{4}\/[0-9]{2}\/[0-9]{2}/.test(q.replace(/-/g, '/'))) {
|
||||||
|
const date = new Date(q.replace(/-/g, '/'));
|
||||||
|
|
||||||
|
// 日付しか指定されてない場合、例えば 2018/03/12 ならユーザーは
|
||||||
|
// 2018/03/12 のコンテンツを「含む」結果になることを期待するはずなので
|
||||||
|
// 23時間59分進める(そのままだと 2018/03/12 00:00:00 「まで」の
|
||||||
|
// 結果になってしまい、2018/03/12 のコンテンツは含まれない)
|
||||||
|
if (q.replace(/-/g, '/').match(/^[0-9]{4}\/[0-9]{2}\/[0-9]{2}$/)) {
|
||||||
|
date.setHours(23, 59, 59, 999);
|
||||||
|
}
|
||||||
|
|
||||||
|
v.$root.$emit('warp', date);
|
||||||
|
v.$root.dialog({
|
||||||
|
icon: faHistory,
|
||||||
|
splash: true,
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (q.startsWith('https://')) {
|
||||||
|
const dialog = v.$root.dialog({
|
||||||
|
type: 'waiting',
|
||||||
|
text: v.$t('@.fetching-as-ap-object'),
|
||||||
|
showOkButton: false,
|
||||||
|
showCancelButton: false,
|
||||||
|
cancelableByBgClick: false
|
||||||
|
});
|
||||||
|
|
||||||
|
try {
|
||||||
|
const res = await v.$root.api('ap/show', {
|
||||||
|
uri: q
|
||||||
|
});
|
||||||
|
dialog.close();
|
||||||
|
if (res.type == 'User') {
|
||||||
|
v.$router.push(`/@${res.object.username}@${res.object.host}`);
|
||||||
|
} else if (res.type == 'Note') {
|
||||||
|
v.$router.push(`/notes/${res.object.id}`);
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
dialog.close();
|
||||||
|
// TODO: Show error
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
v.$router.push(`/search?q=${encodeURIComponent(q)}`);
|
||||||
|
}
|
||||||
@@ -11,9 +11,9 @@ export default function(me, settings, note) {
|
|||||||
return (
|
return (
|
||||||
(!isMyNote && note.reply && includesMutedWords(note.reply.text)) ||
|
(!isMyNote && note.reply && includesMutedWords(note.reply.text)) ||
|
||||||
(!isMyNote && note.renote && includesMutedWords(note.renote.text)) ||
|
(!isMyNote && note.renote && includesMutedWords(note.renote.text)) ||
|
||||||
(settings.showMyRenotes === false && isMyNote && isPureRenote) ||
|
(!settings.showMyRenotes && isMyNote && isPureRenote) ||
|
||||||
(settings.showRenotedMyNotes === false && isPureRenote && note.renote.userId == me.id) ||
|
(!settings.showRenotedMyNotes && isPureRenote && note.renote.userId == me.id) ||
|
||||||
(settings.showLocalRenotes === false && isPureRenote && note.renote.user.host == null) ||
|
(!settings.showLocalRenotes && isPureRenote && note.renote.user.host == null) ||
|
||||||
(!isMyNote && includesMutedWords(note.text))
|
(!isMyNote && includesMutedWords(note.text))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ export default class Stream extends EventEmitter {
|
|||||||
|
|
||||||
const user = os.store.state.i;
|
const user = os.store.state.i;
|
||||||
|
|
||||||
this.stream = new ReconnectingWebsocket(wsUrl + (user ? `?i=${user.token}` : ''));
|
this.stream = new ReconnectingWebsocket(wsUrl + (user ? `?i=${user.token}` : ''), '', { minReconnectionDelay: 1 }); // https://github.com/pladaria/reconnecting-websocket/issues/91
|
||||||
this.stream.addEventListener('open', this.onOpen);
|
this.stream.addEventListener('open', this.onOpen);
|
||||||
this.stream.addEventListener('close', this.onClose);
|
this.stream.addEventListener('close', this.onClose);
|
||||||
this.stream.addEventListener('message', this.onMessage);
|
this.stream.addEventListener('message', this.onMessage);
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ export default Vue.extend({
|
|||||||
|
|
||||||
ms(): number {
|
ms(): number {
|
||||||
return this.now.getMilliseconds() * this.smooth;
|
return this.now.getMilliseconds() * this.smooth;
|
||||||
}
|
},
|
||||||
s(): number {
|
s(): number {
|
||||||
return this.now.getSeconds();
|
return this.now.getSeconds();
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -55,11 +55,7 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
icon(): any {
|
icon(): any {
|
||||||
return {
|
return {
|
||||||
backgroundColor: this.lightmode
|
backgroundColor: this.user.avatarColor,
|
||||||
? `rgb(${this.user.avatarColor.slice(0, 3).join(',')})`
|
|
||||||
: this.user.avatarColor && this.user.avatarColor.length == 3
|
|
||||||
? `rgb(${this.user.avatarColor.join(',')})`
|
|
||||||
: null,
|
|
||||||
backgroundImage: this.lightmode ? null : `url(${this.url})`,
|
backgroundImage: this.lightmode ? null : `url(${this.url})`,
|
||||||
borderRadius: this.$store.state.settings.circleIcons ? '100%' : null
|
borderRadius: this.$store.state.settings.circleIcons ? '100%' : null
|
||||||
};
|
};
|
||||||
@@ -67,7 +63,7 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
if (this.user.avatarColor) {
|
if (this.user.avatarColor) {
|
||||||
this.$el.style.color = `rgb(${this.user.avatarColor.slice(0, 3).join(',')})`;
|
this.$el.style.color = this.user.avatarColor;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
@@ -82,6 +78,7 @@ export default Vue.extend({
|
|||||||
.mk-avatar
|
.mk-avatar
|
||||||
display inline-block
|
display inline-block
|
||||||
vertical-align bottom
|
vertical-align bottom
|
||||||
|
flex-shrink 0
|
||||||
|
|
||||||
&:not(.cat)
|
&:not(.cat)
|
||||||
overflow hidden
|
overflow hidden
|
||||||
|
|||||||
27
src/client/app/common/views/components/avatars.vue
Normal file
27
src/client/app/common/views/components/avatars.vue
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<mk-avatar v-for="user in us" :user="user" :key="user.id" style="width:32px;height:32px;"/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import Vue from 'vue';
|
||||||
|
|
||||||
|
export default Vue.extend({
|
||||||
|
props: {
|
||||||
|
userIds: {
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
us: []
|
||||||
|
};
|
||||||
|
},
|
||||||
|
async created() {
|
||||||
|
this.us = await this.$root.api('users/show', {
|
||||||
|
userIds: this.userIds
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
@@ -1,21 +1,39 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="felqjxyj" :class="{ splash }">
|
<div class="felqjxyj" :class="{ splash }">
|
||||||
<div class="bg" ref="bg" @click="onBgClick"></div>
|
<div class="bg" ref="bg" @click="onBgClick"></div>
|
||||||
<div class="main" ref="main">
|
<div class="main" ref="main" :class="{ round: $store.state.device.roundedCorners }">
|
||||||
<template v-if="type == 'signin'">
|
<template v-if="type == 'signin'">
|
||||||
<mk-signin/>
|
<mk-signin/>
|
||||||
</template>
|
</template>
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<div class="icon" v-if="!input && !select && !user" :class="type"><fa :icon="icon"/></div>
|
<div class="icon" v-if="icon">
|
||||||
|
<fa :icon="icon"/>
|
||||||
|
</div>
|
||||||
|
<div class="icon" v-else-if="!input && !select && !user" :class="type">
|
||||||
|
<fa icon="check" v-if="type === 'success'"/>
|
||||||
|
<fa :icon="faTimesCircle" v-if="type === 'error'"/>
|
||||||
|
<fa icon="exclamation-triangle" v-if="type === 'warning'"/>
|
||||||
|
<fa icon="info-circle" v-if="type === 'info'"/>
|
||||||
|
<fa :icon="faQuestionCircle" v-if="type === 'question'"/>
|
||||||
|
<fa icon="spinner" pulse v-if="type === 'waiting'"/>
|
||||||
|
</div>
|
||||||
<header v-if="title" v-html="title"></header>
|
<header v-if="title" v-html="title"></header>
|
||||||
|
<header v-if="title == null && user">{{ $t('@.enter-username') }}</header>
|
||||||
<div class="body" v-if="text" v-html="text"></div>
|
<div class="body" v-if="text" v-html="text"></div>
|
||||||
<ui-input v-if="input" v-model="inputValue" autofocus :type="input.type || 'text'" :placeholder="input.placeholder" @keydown="onInputKeydown"></ui-input>
|
<ui-input v-if="input" v-model="inputValue" autofocus :type="input.type || 'text'" :placeholder="input.placeholder" @keydown="onInputKeydown"></ui-input>
|
||||||
<ui-input v-if="user" v-model="userInputValue" autofocus @keydown="onInputKeydown"><template #prefix>@</template></ui-input>
|
<ui-input v-if="user" v-model="userInputValue" autofocus @keydown="onInputKeydown"><template #prefix>@</template></ui-input>
|
||||||
<ui-select v-if="select" v-model="selectedValue" autofocus>
|
<ui-select v-if="select" v-model="selectedValue" autofocus>
|
||||||
|
<template v-if="select.items">
|
||||||
<option v-for="item in select.items" :value="item.value">{{ item.text }}</option>
|
<option v-for="item in select.items" :value="item.value">{{ item.text }}</option>
|
||||||
|
</template>
|
||||||
|
<template v-else>
|
||||||
|
<optgroup v-for="groupedItem in select.groupedItems" :label="groupedItem.label">
|
||||||
|
<option v-for="item in groupedItem.items" :value="item.value">{{ item.text }}</option>
|
||||||
|
</optgroup>
|
||||||
|
</template>
|
||||||
</ui-select>
|
</ui-select>
|
||||||
<ui-horizon-group no-grow class="buttons fit-bottom" v-if="!splash">
|
<ui-horizon-group no-grow class="buttons fit-bottom" v-if="!splash && (showOkButton || showCancelButton)">
|
||||||
<ui-button @click="ok" primary :autofocus="!input && !select && !user">{{ (showCancelButton || input || select || user) ? $t('@.ok') : $t('@.got-it') }}</ui-button>
|
<ui-button @click="ok" v-if="showOkButton" primary :autofocus="!input && !select && !user">{{ (showCancelButton || input || select || user) ? $t('@.ok') : $t('@.got-it') }}</ui-button>
|
||||||
<ui-button @click="cancel" v-if="showCancelButton || input || select || user">{{ $t('@.cancel') }}</ui-button>
|
<ui-button @click="cancel" v-if="showCancelButton || input || select || user">{{ $t('@.cancel') }}</ui-button>
|
||||||
</ui-horizon-group>
|
</ui-horizon-group>
|
||||||
</template>
|
</template>
|
||||||
@@ -55,10 +73,21 @@ export default Vue.extend({
|
|||||||
user: {
|
user: {
|
||||||
required: false
|
required: false
|
||||||
},
|
},
|
||||||
|
icon: {
|
||||||
|
required: false
|
||||||
|
},
|
||||||
|
showOkButton: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true
|
||||||
|
},
|
||||||
showCancelButton: {
|
showCancelButton: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false
|
default: false
|
||||||
},
|
},
|
||||||
|
cancelableByBgClick: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true
|
||||||
|
},
|
||||||
splash: {
|
splash: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false
|
default: false
|
||||||
@@ -69,22 +98,11 @@ export default Vue.extend({
|
|||||||
return {
|
return {
|
||||||
inputValue: this.input && this.input.default ? this.input.default : null,
|
inputValue: this.input && this.input.default ? this.input.default : null,
|
||||||
userInputValue: null,
|
userInputValue: null,
|
||||||
selectedValue: null
|
selectedValue: null,
|
||||||
|
faTimesCircle, faQuestionCircle
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
computed: {
|
|
||||||
icon(): any {
|
|
||||||
switch (this.type) {
|
|
||||||
case 'success': return 'check';
|
|
||||||
case 'error': return faTimesCircle;
|
|
||||||
case 'warning': return 'exclamation-triangle';
|
|
||||||
case 'info': return 'info-circle';
|
|
||||||
case 'question': return faQuestionCircle;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
mounted() {
|
mounted() {
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
(this.$refs.bg as any).style.pointerEvents = 'auto';
|
(this.$refs.bg as any).style.pointerEvents = 'auto';
|
||||||
@@ -113,6 +131,8 @@ export default Vue.extend({
|
|||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
async ok() {
|
async ok() {
|
||||||
|
if (!this.showOkButton) return;
|
||||||
|
|
||||||
if (this.user) {
|
if (this.user) {
|
||||||
const user = await this.$root.api('users/show', parseAcct(this.userInputValue));
|
const user = await this.$root.api('users/show', parseAcct(this.userInputValue));
|
||||||
if (user) {
|
if (user) {
|
||||||
@@ -156,7 +176,9 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
onBgClick() {
|
onBgClick() {
|
||||||
|
if (this.cancelableByBgClick) {
|
||||||
this.cancel();
|
this.cancel();
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
onInputKeydown(e) {
|
onInputKeydown(e) {
|
||||||
@@ -183,9 +205,6 @@ export default Vue.extend({
|
|||||||
height 100%
|
height 100%
|
||||||
|
|
||||||
&.splash
|
&.splash
|
||||||
&, *
|
|
||||||
pointer-events none !important
|
|
||||||
|
|
||||||
> .main
|
> .main
|
||||||
min-width 0
|
min-width 0
|
||||||
width initial
|
width initial
|
||||||
@@ -211,15 +230,17 @@ export default Vue.extend({
|
|||||||
width calc(100% - 32px)
|
width calc(100% - 32px)
|
||||||
text-align center
|
text-align center
|
||||||
background var(--face)
|
background var(--face)
|
||||||
border-radius 8px
|
|
||||||
color var(--faceText)
|
color var(--faceText)
|
||||||
opacity 0
|
opacity 0
|
||||||
|
|
||||||
|
&.round
|
||||||
|
border-radius 8px
|
||||||
|
|
||||||
> .icon
|
> .icon
|
||||||
font-size 32px
|
font-size 32px
|
||||||
|
|
||||||
&.success
|
&.success
|
||||||
color #37ec92
|
color #85da5a
|
||||||
|
|
||||||
&.error
|
&.error
|
||||||
color #ec4137
|
color #ec4137
|
||||||
@@ -243,7 +264,7 @@ export default Vue.extend({
|
|||||||
margin-top 8px
|
margin-top 8px
|
||||||
|
|
||||||
> .body
|
> .body
|
||||||
margin 16px 0
|
margin 16px 0 0 0
|
||||||
|
|
||||||
> .buttons
|
> .buttons
|
||||||
margin-top 16px
|
margin-top 16px
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
:src="file.url"
|
:src="file.url"
|
||||||
:alt="file.name"
|
:alt="file.name"
|
||||||
:title="file.name"
|
:title="file.name"
|
||||||
|
@load="onThumbnailLoaded"
|
||||||
v-if="detail && is === 'image'"/>
|
v-if="detail && is === 'image'"/>
|
||||||
<video
|
<video
|
||||||
:src="file.url"
|
:src="file.url"
|
||||||
@@ -36,7 +37,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import anime from 'animejs';
|
import anime from 'animejs';
|
||||||
import i18n from '../../../i18n';
|
|
||||||
import {
|
import {
|
||||||
faFile,
|
faFile,
|
||||||
faFileAlt,
|
faFileAlt,
|
||||||
@@ -104,12 +104,12 @@ export default Vue.extend({
|
|||||||
return 'unknown';
|
return 'unknown';
|
||||||
},
|
},
|
||||||
isThumbnailAvailable(): boolean {
|
isThumbnailAvailable(): boolean {
|
||||||
return this.file.thumbnailUrl.endsWith('?thumbnail') ? (this.is === 'image' || this.is === 'video') : true;
|
return this.file.thumbnailUrl
|
||||||
|
? (this.is === 'image' || this.is === 'video')
|
||||||
|
: false;
|
||||||
},
|
},
|
||||||
background(): string {
|
background(): string {
|
||||||
return this.file.properties.avgColor && this.file.properties.avgColor.length == 3
|
return this.file.properties.avgColor || 'transparent';
|
||||||
? `rgb(${this.file.properties.avgColor.join(',')})`
|
|
||||||
: 'transparent';
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
@@ -118,10 +118,10 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
onThumbnailLoaded() {
|
onThumbnailLoaded() {
|
||||||
if (this.file.properties.avgColor && this.file.properties.avgColor.length == 3) {
|
if (this.file.properties.avgColor) {
|
||||||
anime({
|
anime({
|
||||||
targets: this.$refs.thumbnail,
|
targets: this.$refs.thumbnail,
|
||||||
backgroundColor: `rgba(${this.file.properties.avgColor.join(',')}, 0)`,
|
backgroundColor: 'transparent', // TODO fade
|
||||||
duration: 100,
|
duration: 100,
|
||||||
easing: 'linear'
|
easing: 'linear'
|
||||||
});
|
});
|
||||||
@@ -143,21 +143,6 @@ export default Vue.extend({
|
|||||||
> .icon
|
> .icon
|
||||||
pointer-events none
|
pointer-events none
|
||||||
|
|
||||||
> img
|
|
||||||
height 100%
|
|
||||||
width 100%
|
|
||||||
margin auto
|
|
||||||
object-fit cover
|
|
||||||
|
|
||||||
> .icon
|
|
||||||
height 65%
|
|
||||||
width 65%
|
|
||||||
margin auto
|
|
||||||
|
|
||||||
> video,
|
|
||||||
> audio
|
|
||||||
width 100%
|
|
||||||
|
|
||||||
> .icon-sub
|
> .icon-sub
|
||||||
position absolute
|
position absolute
|
||||||
width 30%
|
width 30%
|
||||||
@@ -166,9 +151,33 @@ export default Vue.extend({
|
|||||||
right 4%
|
right 4%
|
||||||
bottom 4%
|
bottom 4%
|
||||||
|
|
||||||
|
> *
|
||||||
|
margin auto
|
||||||
|
|
||||||
|
&:not(.detail)
|
||||||
|
> img
|
||||||
|
height 100%
|
||||||
|
width 100%
|
||||||
|
object-fit cover
|
||||||
|
|
||||||
|
> .icon
|
||||||
|
height 65%
|
||||||
|
width 65%
|
||||||
|
|
||||||
|
> video,
|
||||||
|
> audio
|
||||||
|
width 100%
|
||||||
|
|
||||||
&.detail
|
&.detail
|
||||||
> .icon
|
> .icon
|
||||||
height 100px
|
height 100px
|
||||||
margin 16px auto
|
width 100px
|
||||||
|
margin 16px
|
||||||
|
|
||||||
|
> *:not(.icon)
|
||||||
|
max-height 300px
|
||||||
|
max-width 100%
|
||||||
|
height 100%
|
||||||
|
object-fit contain
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<a class="a" :href="repo" target="_blank" title="View source on GitHub">
|
<a class="a" :href="repositoryUrl" rel="noopener" target="_blank" title="View source on GitHub">
|
||||||
<svg width="80" height="80" viewBox="0 0 250 250" aria-hidden="aria-hidden">
|
<svg width="80" height="80" viewBox="0 0 250 250" aria-hidden="aria-hidden">
|
||||||
<path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path>
|
<path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path>
|
||||||
<path class="octo-arm" d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor"></path>
|
<path class="octo-arm" d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor"></path>
|
||||||
@@ -15,17 +15,10 @@ export default Vue.extend({
|
|||||||
return {
|
return {
|
||||||
repositoryUrl: 'https://github.com/syuilo/misskey'
|
repositoryUrl: 'https://github.com/syuilo/misskey'
|
||||||
};
|
};
|
||||||
},
|
|
||||||
created() {
|
|
||||||
this.$root.getMeta().then(meta => {
|
|
||||||
if (meta.maintainer)
|
|
||||||
this.repositoryUrl = meta.maintainer.repository_url;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
<style lang="stylus" scoped>
|
<style lang="stylus" scoped>
|
||||||
.a
|
.a
|
||||||
display block
|
display block
|
||||||
|
|||||||
@@ -24,11 +24,11 @@
|
|||||||
|
|
||||||
<div class="board">
|
<div class="board">
|
||||||
<div class="labels-x" v-if="this.$store.state.settings.games.reversi.showBoardLabels">
|
<div class="labels-x" v-if="this.$store.state.settings.games.reversi.showBoardLabels">
|
||||||
<span v-for="i in game.settings.map[0].length">{{ String.fromCharCode(64 + i) }}</span>
|
<span v-for="i in game.map[0].length">{{ String.fromCharCode(64 + i) }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex">
|
<div class="flex">
|
||||||
<div class="labels-y" v-if="this.$store.state.settings.games.reversi.showBoardLabels">
|
<div class="labels-y" v-if="this.$store.state.settings.games.reversi.showBoardLabels">
|
||||||
<div v-for="i in game.settings.map.length">{{ i }}</div>
|
<div v-for="i in game.map.length">{{ i }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="cells" :style="cellsStyle">
|
<div class="cells" :style="cellsStyle">
|
||||||
<div v-for="(stone, i) in o.board"
|
<div v-for="(stone, i) in o.board"
|
||||||
@@ -46,11 +46,11 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="labels-y" v-if="this.$store.state.settings.games.reversi.showBoardLabels">
|
<div class="labels-y" v-if="this.$store.state.settings.games.reversi.showBoardLabels">
|
||||||
<div v-for="i in game.settings.map.length">{{ i }}</div>
|
<div v-for="i in game.map.length">{{ i }}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="labels-x" v-if="this.$store.state.settings.games.reversi.showBoardLabels">
|
<div class="labels-x" v-if="this.$store.state.settings.games.reversi.showBoardLabels">
|
||||||
<span v-for="i in game.settings.map[0].length">{{ String.fromCharCode(64 + i) }}</span>
|
<span v-for="i in game.map[0].length">{{ String.fromCharCode(64 + i) }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -71,9 +71,9 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="info">
|
<div class="info">
|
||||||
<p v-if="game.settings.isLlotheo">{{ $t('is-llotheo') }}</p>
|
<p v-if="game.isLlotheo">{{ $t('is-llotheo') }}</p>
|
||||||
<p v-if="game.settings.loopedBoard">{{ $t('looped-map') }}</p>
|
<p v-if="game.loopedBoard">{{ $t('looped-map') }}</p>
|
||||||
<p v-if="game.settings.canPutEverywhere">{{ $t('can-put-everywhere') }}</p>
|
<p v-if="game.canPutEverywhere">{{ $t('can-put-everywhere') }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -160,8 +160,8 @@ export default Vue.extend({
|
|||||||
|
|
||||||
cellsStyle(): any {
|
cellsStyle(): any {
|
||||||
return {
|
return {
|
||||||
'grid-template-rows': `repeat(${this.game.settings.map.length}, 1fr)`,
|
'grid-template-rows': `repeat(${this.game.map.length}, 1fr)`,
|
||||||
'grid-template-columns': `repeat(${this.game.settings.map[0].length}, 1fr)`
|
'grid-template-columns': `repeat(${this.game.map[0].length}, 1fr)`
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -169,10 +169,10 @@ export default Vue.extend({
|
|||||||
watch: {
|
watch: {
|
||||||
logPos(v) {
|
logPos(v) {
|
||||||
if (!this.game.isEnded) return;
|
if (!this.game.isEnded) return;
|
||||||
this.o = new Reversi(this.game.settings.map, {
|
this.o = new Reversi(this.game.map, {
|
||||||
isLlotheo: this.game.settings.isLlotheo,
|
isLlotheo: this.game.isLlotheo,
|
||||||
canPutEverywhere: this.game.settings.canPutEverywhere,
|
canPutEverywhere: this.game.canPutEverywhere,
|
||||||
loopedBoard: this.game.settings.loopedBoard
|
loopedBoard: this.game.loopedBoard
|
||||||
});
|
});
|
||||||
for (const log of this.logs.slice(0, v)) {
|
for (const log of this.logs.slice(0, v)) {
|
||||||
this.o.put(log.color, log.pos);
|
this.o.put(log.color, log.pos);
|
||||||
@@ -184,10 +184,10 @@ export default Vue.extend({
|
|||||||
created() {
|
created() {
|
||||||
this.game = this.initGame;
|
this.game = this.initGame;
|
||||||
|
|
||||||
this.o = new Reversi(this.game.settings.map, {
|
this.o = new Reversi(this.game.map, {
|
||||||
isLlotheo: this.game.settings.isLlotheo,
|
isLlotheo: this.game.isLlotheo,
|
||||||
canPutEverywhere: this.game.settings.canPutEverywhere,
|
canPutEverywhere: this.game.canPutEverywhere,
|
||||||
loopedBoard: this.game.settings.loopedBoard
|
loopedBoard: this.game.loopedBoard
|
||||||
});
|
});
|
||||||
|
|
||||||
for (const log of this.game.logs) {
|
for (const log of this.game.logs) {
|
||||||
@@ -200,6 +200,7 @@ export default Vue.extend({
|
|||||||
// 通信を取りこぼしてもいいように定期的にポーリングさせる
|
// 通信を取りこぼしてもいいように定期的にポーリングさせる
|
||||||
if (this.game.isStarted && !this.game.isEnded) {
|
if (this.game.isStarted && !this.game.isEnded) {
|
||||||
this.pollingClock = setInterval(() => {
|
this.pollingClock = setInterval(() => {
|
||||||
|
if (this.game.isEnded) return;
|
||||||
const crc32 = CRC32.str(this.logs.map(x => x.pos.toString()).join(''));
|
const crc32 = CRC32.str(this.logs.map(x => x.pos.toString()).join(''));
|
||||||
this.connection.send('check', {
|
this.connection.send('check', {
|
||||||
crc32: crc32
|
crc32: crc32
|
||||||
@@ -286,10 +287,10 @@ export default Vue.extend({
|
|||||||
onRescue(game) {
|
onRescue(game) {
|
||||||
this.game = game;
|
this.game = game;
|
||||||
|
|
||||||
this.o = new Reversi(this.game.settings.map, {
|
this.o = new Reversi(this.game.map, {
|
||||||
isLlotheo: this.game.settings.isLlotheo,
|
isLlotheo: this.game.isLlotheo,
|
||||||
canPutEverywhere: this.game.settings.canPutEverywhere,
|
canPutEverywhere: this.game.canPutEverywhere,
|
||||||
loopedBoard: this.game.settings.loopedBoard
|
loopedBoard: this.game.loopedBoard
|
||||||
});
|
});
|
||||||
|
|
||||||
for (const log of this.game.logs) {
|
for (const log of this.game.logs) {
|
||||||
|
|||||||
@@ -17,9 +17,9 @@
|
|||||||
</header>
|
</header>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<div class="random" v-if="game.settings.map == null"><fa icon="dice"/></div>
|
<div class="random" v-if="game.map == null"><fa icon="dice"/></div>
|
||||||
<div class="board" v-else :style="{ 'grid-template-rows': `repeat(${ game.settings.map.length }, 1fr)`, 'grid-template-columns': `repeat(${ game.settings.map[0].length }, 1fr)` }">
|
<div class="board" v-else :style="{ 'grid-template-rows': `repeat(${ game.map.length }, 1fr)`, 'grid-template-columns': `repeat(${ game.map[0].length }, 1fr)` }">
|
||||||
<div v-for="(x, i) in game.settings.map.join('')"
|
<div v-for="(x, i) in game.map.join('')"
|
||||||
:data-none="x == ' '"
|
:data-none="x == ' '"
|
||||||
@click="onPixelClick(i, x)">
|
@click="onPixelClick(i, x)">
|
||||||
<fa v-if="x == 'b'" :icon="fasCircle"/>
|
<fa v-if="x == 'b'" :icon="fasCircle"/>
|
||||||
@@ -35,9 +35,9 @@
|
|||||||
</header>
|
</header>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<form-radio v-model="game.settings.bw" value="random" @change="updateSettings">{{ $t('random') }}</form-radio>
|
<form-radio v-model="game.bw" value="random" @change="updateSettings('bw')">{{ $t('random') }}</form-radio>
|
||||||
<form-radio v-model="game.settings.bw" :value="1" @change="updateSettings">{{ this.$t('black-is').split('{}')[0] }}<b><mk-user-name :user="game.user1"/></b>{{ this.$t('black-is').split('{}')[1] }}</form-radio>
|
<form-radio v-model="game.bw" :value="1" @change="updateSettings('bw')">{{ this.$t('black-is').split('{}')[0] }}<b><mk-user-name :user="game.user1"/></b>{{ this.$t('black-is').split('{}')[1] }}</form-radio>
|
||||||
<form-radio v-model="game.settings.bw" :value="2" @change="updateSettings">{{ this.$t('black-is').split('{}')[0] }}<b><mk-user-name :user="game.user2"/></b>{{ this.$t('black-is').split('{}')[1] }}</form-radio>
|
<form-radio v-model="game.bw" :value="2" @change="updateSettings('bw')">{{ this.$t('black-is').split('{}')[0] }}<b><mk-user-name :user="game.user2"/></b>{{ this.$t('black-is').split('{}')[1] }}</form-radio>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -47,9 +47,9 @@
|
|||||||
</header>
|
</header>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<ui-switch v-model="game.settings.isLlotheo" @change="updateSettings">{{ $t('is-llotheo') }}</ui-switch>
|
<ui-switch v-model="game.isLlotheo" @change="updateSettings('isLlotheo')">{{ $t('is-llotheo') }}</ui-switch>
|
||||||
<ui-switch v-model="game.settings.loopedBoard" @change="updateSettings">{{ $t('looped-map') }}</ui-switch>
|
<ui-switch v-model="game.loopedBoard" @change="updateSettings('loopedBoard')">{{ $t('looped-map') }}</ui-switch>
|
||||||
<ui-switch v-model="game.settings.canPutEverywhere" @change="updateSettings">{{ $t('can-put-everywhere') }}</ui-switch>
|
<ui-switch v-model="game.canPutEverywhere" @change="updateSettings('canPutEverywhere')">{{ $t('can-put-everywhere') }}</ui-switch>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -159,8 +159,8 @@ export default Vue.extend({
|
|||||||
this.connection.on('initForm', this.onInitForm);
|
this.connection.on('initForm', this.onInitForm);
|
||||||
this.connection.on('message', this.onMessage);
|
this.connection.on('message', this.onMessage);
|
||||||
|
|
||||||
if (this.game.user1Id != this.$store.state.i.id && this.game.settings.form1) this.form = this.game.settings.form1;
|
if (this.game.user1Id != this.$store.state.i.id && this.game.form1) this.form = this.game.form1;
|
||||||
if (this.game.user2Id != this.$store.state.i.id && this.game.settings.form2) this.form = this.game.settings.form2;
|
if (this.game.user2Id != this.$store.state.i.id && this.game.form2) this.form = this.game.form2;
|
||||||
},
|
},
|
||||||
|
|
||||||
beforeDestroy() {
|
beforeDestroy() {
|
||||||
@@ -189,18 +189,19 @@ export default Vue.extend({
|
|||||||
this.$forceUpdate();
|
this.$forceUpdate();
|
||||||
},
|
},
|
||||||
|
|
||||||
updateSettings() {
|
updateSettings(key: string) {
|
||||||
this.connection.send('updateSettings', {
|
this.connection.send('updateSettings', {
|
||||||
settings: this.game.settings
|
key: key,
|
||||||
|
value: this.game[key]
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
onUpdateSettings(settings) {
|
onUpdateSettings({ key, value }) {
|
||||||
this.game.settings = settings;
|
this.game[key] = value;
|
||||||
if (this.game.settings.map == null) {
|
if (this.game.map == null) {
|
||||||
this.mapName = null;
|
this.mapName = null;
|
||||||
} else {
|
} else {
|
||||||
const found = Object.values(maps).find(x => x.data.join('') == this.game.settings.map.join(''));
|
const found = Object.values(maps).find(x => x.data.join('') == this.game.map.join(''));
|
||||||
this.mapName = found ? found.name : '-Custom-';
|
this.mapName = found ? found.name : '-Custom-';
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -224,27 +225,27 @@ export default Vue.extend({
|
|||||||
|
|
||||||
onMapChange() {
|
onMapChange() {
|
||||||
if (this.mapName == null) {
|
if (this.mapName == null) {
|
||||||
this.game.settings.map = null;
|
this.game.map = null;
|
||||||
} else {
|
} else {
|
||||||
this.game.settings.map = Object.values(maps).find(x => x.name == this.mapName).data;
|
this.game.map = Object.values(maps).find(x => x.name == this.mapName).data;
|
||||||
}
|
}
|
||||||
this.$forceUpdate();
|
this.$forceUpdate();
|
||||||
this.updateSettings();
|
this.updateSettings('map');
|
||||||
},
|
},
|
||||||
|
|
||||||
onPixelClick(pos, pixel) {
|
onPixelClick(pos, pixel) {
|
||||||
const x = pos % this.game.settings.map[0].length;
|
const x = pos % this.game.map[0].length;
|
||||||
const y = Math.floor(pos / this.game.settings.map[0].length);
|
const y = Math.floor(pos / this.game.map[0].length);
|
||||||
const newPixel =
|
const newPixel =
|
||||||
pixel == ' ' ? '-' :
|
pixel == ' ' ? '-' :
|
||||||
pixel == '-' ? 'b' :
|
pixel == '-' ? 'b' :
|
||||||
pixel == 'b' ? 'w' :
|
pixel == 'b' ? 'w' :
|
||||||
' ';
|
' ';
|
||||||
const line = this.game.settings.map[y].split('');
|
const line = this.game.map[y].split('');
|
||||||
line[x] = newPixel;
|
line[x] = newPixel;
|
||||||
this.$set(this.game.settings.map, y, line.join(''));
|
this.$set(this.game.map, y, line.join(''));
|
||||||
this.$forceUpdate();
|
this.$forceUpdate();
|
||||||
this.updateSettings();
|
this.updateSettings('map');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ export default Vue.extend({
|
|||||||
async nav(game, actualNav = true) {
|
async nav(game, actualNav = true) {
|
||||||
if (this.selfNav) {
|
if (this.selfNav) {
|
||||||
// 受け取ったゲーム情報が省略されたものなら完全な情報を取得する
|
// 受け取ったゲーム情報が省略されたものなら完全な情報を取得する
|
||||||
if (game != null && (game.settings == null || game.settings.map == null)) {
|
if (game != null && game.map == null) {
|
||||||
game = await this.$root.api('games/reversi/games/show', {
|
game = await this.$root.api('games/reversi/games/show', {
|
||||||
gameId: game.id
|
gameId: game.id
|
||||||
});
|
});
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user