Compare commits
622 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cc5d2b2875 | ||
|
|
94ef03db9e | ||
|
|
038bd100b2 | ||
|
|
3b5c3f086a | ||
|
|
a136715111 | ||
|
|
daa22d68fa | ||
|
|
f24d202024 | ||
|
|
d3e0b8574b | ||
|
|
f4482cc34a | ||
|
|
3ff226cd6b | ||
|
|
5c0d37d021 | ||
|
|
b958959cca | ||
|
|
762418d0fa | ||
|
|
6831f0c192 | ||
|
|
64635fff2d | ||
|
|
e7e861fb5c | ||
|
|
08523ce271 | ||
|
|
833f63c1a9 | ||
|
|
1c05825bc8 | ||
|
|
26bb088a3d | ||
|
|
5c361cef23 | ||
|
|
04bef96aee | ||
|
|
a791981da9 | ||
|
|
264c47e07a | ||
|
|
863c44d15c | ||
|
|
cdec6f202e | ||
|
|
bdf6c739a9 | ||
|
|
843dd5fb58 | ||
|
|
c05853289a | ||
|
|
11c5d257f2 | ||
|
|
cee1a27348 | ||
|
|
690dc75e45 | ||
|
|
8dc82b7a6e | ||
|
|
a396b519bb | ||
|
|
d5f9ce0893 | ||
|
|
c1d7ae99ab | ||
|
|
d8aee7c310 | ||
|
|
3e43d847ca | ||
|
|
70273931b2 | ||
|
|
cc94d2acc5 | ||
|
|
327d9702ca | ||
|
|
1cdb285fe6 | ||
|
|
e9e61e3034 | ||
|
|
b613a51035 | ||
|
|
63e62ecb02 | ||
|
|
d11122af3f | ||
|
|
e8ddb7f6ee | ||
|
|
5ad0a158bc | ||
|
|
e3ea29a8b6 | ||
|
|
ead201ac3d | ||
|
|
19af2d7a7b | ||
|
|
8ba87443ca | ||
|
|
162ace2fd6 | ||
|
|
f51fdc0dbf | ||
|
|
d3d612a89b | ||
|
|
7c7f32d9a6 | ||
|
|
c8b6b6e44f | ||
|
|
12daa80071 | ||
|
|
2f8cc36d4b | ||
|
|
1af4f94338 | ||
|
|
172a0a85aa | ||
|
|
d37c06884d | ||
|
|
80e52c57e1 | ||
|
|
213a7f137e | ||
|
|
4848b71ca0 | ||
|
|
13bad106cc | ||
|
|
3bebf82501 | ||
|
|
e9a8090d7e | ||
|
|
e2a79abbe0 | ||
|
|
d7f57a4415 | ||
|
|
9dd5ed7f1a | ||
|
|
432e18a0c0 | ||
|
|
9a2d435cb1 | ||
|
|
b02274c178 | ||
|
|
91408bceb1 | ||
|
|
e1fd7e3f0c | ||
|
|
d18498cb6b | ||
|
|
b3986b8963 | ||
|
|
75e3d6f7fb | ||
|
|
ded78aa294 | ||
|
|
58e8938364 | ||
|
|
6e8e6c7352 | ||
|
|
270de03646 | ||
|
|
b6c7ff109b | ||
|
|
9b72a5a46d | ||
|
|
626e06c5fd | ||
|
|
b09d10ac52 | ||
|
|
d1568cda19 | ||
|
|
3400b4fa0d | ||
|
|
4455f110b1 | ||
|
|
25fc37449b | ||
|
|
e5ffc7c492 | ||
|
|
5c118e6d8a | ||
|
|
b49c70e67e | ||
|
|
3760fdeed0 | ||
|
|
3aece449e4 | ||
|
|
dcd2d8be77 | ||
|
|
b90e6f9abb | ||
|
|
d984652aa1 | ||
|
|
f176de6d2e | ||
|
|
ef31efabb2 | ||
|
|
53763acb76 | ||
|
|
6f39010133 | ||
|
|
04b5fe6af4 | ||
|
|
626f43f424 | ||
|
|
bebcc72deb | ||
|
|
9f285779ec | ||
|
|
57d3e9fc32 | ||
|
|
84cf09c1d0 | ||
|
|
0848bad960 | ||
|
|
c1b13c3b5b | ||
|
|
8abc4ed65a | ||
|
|
0eebe620cb | ||
|
|
62a0d87795 | ||
|
|
8318633749 | ||
|
|
a453f8aa2e | ||
|
|
54d2b90c25 | ||
|
|
7e1865984d | ||
|
|
a2c56cc112 | ||
|
|
5c0ee8ca48 | ||
|
|
7397b2b82b | ||
|
|
ddcbe21ce6 | ||
|
|
8fc7d1377d | ||
|
|
092403f362 | ||
|
|
bb179922b9 | ||
|
|
c29f912461 | ||
|
|
83d3e1cfe6 | ||
|
|
2914f0f65d | ||
|
|
99aa588ae7 | ||
|
|
0085e1f3ab | ||
|
|
53a9eb13f8 | ||
|
|
b8c56c4dda | ||
|
|
59266b3190 | ||
|
|
0dc94547f5 | ||
|
|
29fc6de330 | ||
|
|
e24d0c40cd | ||
|
|
e95845777a | ||
|
|
167648f61c | ||
|
|
9e6d6ff0dd | ||
|
|
e659cc3d58 | ||
|
|
ff6d45571a | ||
|
|
6cc9a2c945 | ||
|
|
a873401bd7 | ||
|
|
6b19745241 | ||
|
|
982fae80aa | ||
|
|
77b15a3535 | ||
|
|
72754ede4e | ||
|
|
b8ed8336e0 | ||
|
|
13f82856f9 | ||
|
|
a62013f54d | ||
|
|
4c180869c6 | ||
|
|
7bbf022978 | ||
|
|
6b0d48423d | ||
|
|
a617b8dbed | ||
|
|
c57f472caf | ||
|
|
e1ba19fd7e | ||
|
|
1bf8cbeb29 | ||
|
|
f13faf2243 | ||
|
|
6cccd9d288 | ||
|
|
be2cde106b | ||
|
|
17263fb459 | ||
|
|
fed04ef5ae | ||
|
|
969b6dbcad | ||
|
|
aa50d0ee11 | ||
|
|
f09999ad5a | ||
|
|
35814faf8a | ||
|
|
8447a7fafa | ||
|
|
c6e6c5e3ce | ||
|
|
85cbd8dd47 | ||
|
|
bebc9003a3 | ||
|
|
3c081fbd65 | ||
|
|
fdcf874306 | ||
|
|
6cbb741fa1 | ||
|
|
24129c1cb9 | ||
|
|
f0938c36f5 | ||
|
|
484a6eda2e | ||
|
|
3f2ebffbe7 | ||
|
|
ff278a7d8f | ||
|
|
844a3c3aff | ||
|
|
0db48993e9 | ||
|
|
81e21c4314 | ||
|
|
ba0e57396d | ||
|
|
6a728d160a | ||
|
|
180e507bc8 | ||
|
|
f3b7611ded | ||
|
|
c344de5546 | ||
|
|
0bd0aa2bf7 | ||
|
|
c786cbb3a1 | ||
|
|
cd856f653d | ||
|
|
d528c09da6 | ||
|
|
76b7ad006d | ||
|
|
ff33e405a3 | ||
|
|
f74de26d63 | ||
|
|
2c823798d8 | ||
|
|
381e261bbb | ||
|
|
ba9bb5db6c | ||
|
|
cd12bb33a5 | ||
|
|
e333aee232 | ||
|
|
54571f60c3 | ||
|
|
dd743aaeac | ||
|
|
22c76dc9f8 | ||
|
|
7c7e09cf64 | ||
|
|
e5e3d69371 | ||
|
|
82a700b24e | ||
|
|
0579425a4f | ||
|
|
218e74569d | ||
|
|
448f54cf84 | ||
|
|
c139e13049 | ||
|
|
65116fef32 | ||
|
|
a0a35b7dca | ||
|
|
11fb8a24b7 | ||
|
|
512336685c | ||
|
|
484f281c19 | ||
|
|
2169bc5d3e | ||
|
|
c653c84ad2 | ||
|
|
050f75aa60 | ||
|
|
dae3f3552a | ||
|
|
8b09b170d6 | ||
|
|
ec88f2ed8a | ||
|
|
607d8502ff | ||
|
|
2f084d7c15 | ||
|
|
5bf6e7d8f9 | ||
|
|
31cb9fbfaf | ||
|
|
c7c48f3bea | ||
|
|
6732d22e6c | ||
|
|
04c6b7fe31 | ||
|
|
2687879dbd | ||
|
|
20a660fa89 | ||
|
|
ba9781e1a8 | ||
|
|
f65ac74914 | ||
|
|
6c33d9aeed | ||
|
|
68e86ad40d | ||
|
|
0aa4aa49a7 | ||
|
|
0ff3846e49 | ||
|
|
bfb81299c3 | ||
|
|
0362a8e73c | ||
|
|
f00f5cbed1 | ||
|
|
c4e8cabae9 | ||
|
|
1729d05e8c | ||
|
|
770fb46ca7 | ||
|
|
a3c4e54bc0 | ||
|
|
b8a77fbada | ||
|
|
9182ebfc19 | ||
|
|
25c0cf5848 | ||
|
|
a160dc0a4d | ||
|
|
28f1ca9c17 | ||
|
|
6399a0f046 | ||
|
|
639413608b | ||
|
|
c14e4c7d22 | ||
|
|
c74ac64237 | ||
|
|
4b3289ed99 | ||
|
|
0c432b39dc | ||
|
|
c4b9276713 | ||
|
|
df300c0663 | ||
|
|
518114cbbd | ||
|
|
999f0e4d58 | ||
|
|
c2663529c1 | ||
|
|
9df74a02b6 | ||
|
|
71c9964e19 | ||
|
|
ae2e47f6a9 | ||
|
|
1524d35f66 | ||
|
|
845be966a0 | ||
|
|
80818d79eb | ||
|
|
cb9b3c00dd | ||
|
|
b3997fb5df | ||
|
|
09dde6b78a | ||
|
|
3345d3ab35 | ||
|
|
366be7bbdd | ||
|
|
7008ea66f8 | ||
|
|
70f881e989 | ||
|
|
94d2355089 | ||
|
|
dfbe48b25b | ||
|
|
931cb38b54 | ||
|
|
e5fd34f94e | ||
|
|
c638d7eb48 | ||
|
|
7e96384618 | ||
|
|
829cb99f5b | ||
|
|
1f93c99304 | ||
|
|
dbb7c756cd | ||
|
|
13f381710c | ||
|
|
70897c0e9a | ||
|
|
f51d1c5264 | ||
|
|
70d0937aab | ||
|
|
7d1ab6102f | ||
|
|
77ddd778be | ||
|
|
890ecb693f | ||
|
|
209fe7dcaf | ||
|
|
e0d6f7c7c4 | ||
|
|
5d3fe9599b | ||
|
|
0fe0b6d254 | ||
|
|
b794216eaf | ||
|
|
1fccde38f6 | ||
|
|
41bd436d3e | ||
|
|
c66155ed48 | ||
|
|
627bd410fa | ||
|
|
41a3932c6b | ||
|
|
785b8d7846 | ||
|
|
622c8f9598 | ||
|
|
ef978a6364 | ||
|
|
d95fbe1c6b | ||
|
|
d4ffddc2ab | ||
|
|
3d497cedfc | ||
|
|
e8de29ae79 | ||
|
|
b622946844 | ||
|
|
d013f78cc7 | ||
|
|
2afbafdb3b | ||
|
|
67148114a8 | ||
|
|
7903140ec2 | ||
|
|
cefd296200 | ||
|
|
99d1c15851 | ||
|
|
a3107ab26f | ||
|
|
854cfae75b | ||
|
|
36ab82957d | ||
|
|
de9f54386c | ||
|
|
7f43820765 | ||
|
|
955e907e7f | ||
|
|
4c18022e7d | ||
|
|
509f59e46d | ||
|
|
f14c372f5e | ||
|
|
f028800a96 | ||
|
|
8a1ce7a4f3 | ||
|
|
ea7a139ae0 | ||
|
|
63959eb3da | ||
|
|
a6adbc4e56 | ||
|
|
b418cb67ba | ||
|
|
0ccc360c0a | ||
|
|
1e0dda3c40 | ||
|
|
9197793bc8 | ||
|
|
29f62241bc | ||
|
|
8de1e91dec | ||
|
|
de822a22d4 | ||
|
|
f2cef456bd | ||
|
|
5d681d0fd6 | ||
|
|
2ed24ebd75 | ||
|
|
6e6824ecb0 | ||
|
|
0504a4f659 | ||
|
|
9a261755d2 | ||
|
|
8533663b26 | ||
|
|
0a4015b8a2 | ||
|
|
dcfe56322e | ||
|
|
d00a693026 | ||
|
|
fb36ecad70 | ||
|
|
26c39768ca | ||
|
|
df8abcfce8 | ||
|
|
e3aab0e9e3 | ||
|
|
e3dfc49ed0 | ||
|
|
8485284f63 | ||
|
|
e549e19c03 | ||
|
|
2ace47cbb9 | ||
|
|
dc184e7bc9 | ||
|
|
aef1bd094b | ||
|
|
4f8b22f53b | ||
|
|
0f3cbafe91 | ||
|
|
16ad232c40 | ||
|
|
4d235a2be5 | ||
|
|
aadf6fa9b1 | ||
|
|
a72e9bc8b2 | ||
|
|
f11ef93a81 | ||
|
|
9136556218 | ||
|
|
3ead008295 | ||
|
|
9ff5693442 | ||
|
|
ac84b42394 | ||
|
|
a79361c71f | ||
|
|
85e17d5dc7 | ||
|
|
45493fd093 | ||
|
|
6f987a2391 | ||
|
|
ddf785a393 | ||
|
|
b8e20fe717 | ||
|
|
82555bf9b6 | ||
|
|
ffe6f6c168 | ||
|
|
6b11f5bb7d | ||
|
|
1a65d14864 | ||
|
|
6c1f1ffdb1 | ||
|
|
61cdbd5dd2 | ||
|
|
e7e321e2b3 | ||
|
|
fb5f6fdc10 | ||
|
|
00290fbf75 | ||
|
|
ff02dc723b | ||
|
|
67521c0d2a | ||
|
|
da8765150b | ||
|
|
ea7f51bc12 | ||
|
|
1b34b3b7e2 | ||
|
|
bca4ceb7ae | ||
|
|
5648cd53d0 | ||
|
|
8dab37539f | ||
|
|
2dd42c0061 | ||
|
|
dfafed504a | ||
|
|
9fcd2bcb0a | ||
|
|
4c701b91a6 | ||
|
|
84f7aa6d09 | ||
|
|
82f0c64dee | ||
|
|
4b7c6b124b | ||
|
|
e043b678d4 | ||
|
|
fef4f7fce8 | ||
|
|
9732b3521a | ||
|
|
a59fcc4aec | ||
|
|
979e1e78fb | ||
|
|
c1a929022f | ||
|
|
611bb81032 | ||
|
|
5047020e6d | ||
|
|
fb74a6a689 | ||
|
|
a14a216c8d | ||
|
|
549e212a59 | ||
|
|
1bdc91ad47 | ||
|
|
67f288479c | ||
|
|
496e45c2bb | ||
|
|
e458bd3cc7 | ||
|
|
031911c463 | ||
|
|
4aa7f638f9 | ||
|
|
f6f4ea69ae | ||
|
|
ef945597f2 | ||
|
|
3ab4e1d368 | ||
|
|
c6216f5b5f | ||
|
|
4f24d58a79 | ||
|
|
73d6e7ba66 | ||
|
|
949707e18e | ||
|
|
f51b299c17 | ||
|
|
d2e0faa533 | ||
|
|
22015044a5 | ||
|
|
61f86dcb2b | ||
|
|
8f3bce6b11 | ||
|
|
ee736e73a9 | ||
|
|
99f867897e | ||
|
|
c66c5b6e75 | ||
|
|
f25ecc19b9 | ||
|
|
48e09970f3 | ||
|
|
f05cb79604 | ||
|
|
46d3293edd | ||
|
|
9703d613cf | ||
|
|
704e217dbb | ||
|
|
a103032d94 | ||
|
|
c7207a4bd7 | ||
|
|
35c65fe589 | ||
|
|
6d5bd0c484 | ||
|
|
cfbb6e8092 | ||
|
|
feef4a933e | ||
|
|
468bc67569 | ||
|
|
0d517fa52f | ||
|
|
d9054367c1 | ||
|
|
1213373027 | ||
|
|
100a525507 | ||
|
|
1bec4e2d12 | ||
|
|
03cd1d27bf | ||
|
|
9427a756c9 | ||
|
|
d32b2a8ce5 | ||
|
|
15473b4368 | ||
|
|
54de0dc4a7 | ||
|
|
0162eaf826 | ||
|
|
572cfafbe1 | ||
|
|
4d6335ce9a | ||
|
|
1c9c4af9f1 | ||
|
|
a6844ebc9d | ||
|
|
072492c29b | ||
|
|
99da4f9839 | ||
|
|
88664486af | ||
|
|
80daf7c749 | ||
|
|
92ba64c35c | ||
|
|
a8ee51ffd6 | ||
|
|
5538afc61d | ||
|
|
beb2f7e558 | ||
|
|
6243184c95 | ||
|
|
1b3baef966 | ||
|
|
98f38ee29b | ||
|
|
09b82bfea4 | ||
|
|
937f686264 | ||
|
|
9bc9cbac21 | ||
|
|
6024550158 | ||
|
|
4ae5f82171 | ||
|
|
6d2c9dcee9 | ||
|
|
0f1b0e1870 | ||
|
|
81c682cdc8 | ||
|
|
ab9fa67d9f | ||
|
|
9537fce335 | ||
|
|
9d97e7e348 | ||
|
|
ebe7939412 | ||
|
|
807e3e8ca7 | ||
|
|
a59faf9117 | ||
|
|
d786036155 | ||
|
|
61d6ed5489 | ||
|
|
b38200d48a | ||
|
|
a0c396a842 | ||
|
|
88fbc53e37 | ||
|
|
a2206b2d52 | ||
|
|
a95ff447d7 | ||
|
|
49dbd7f9d2 | ||
|
|
2ad2779096 | ||
|
|
23045369aa | ||
|
|
116faf26e6 | ||
|
|
2582b8d132 | ||
|
|
63f7941073 | ||
|
|
676f026085 | ||
|
|
a13319fd86 | ||
|
|
be8765278c | ||
|
|
c8bb3dc209 | ||
|
|
ea16befb73 | ||
|
|
20b1bb7681 | ||
|
|
bd10eb50eb | ||
|
|
d47c0eb31a | ||
|
|
177e8bb19f | ||
|
|
d156111637 | ||
|
|
8c13d3e50b | ||
|
|
6ff01016f0 | ||
|
|
5d659da012 | ||
|
|
28e7552a1a | ||
|
|
53d264814b | ||
|
|
2d6b20d34b | ||
|
|
99073b56df | ||
|
|
5dce81c0db | ||
|
|
be82d845a4 | ||
|
|
f49ccd0cd3 | ||
|
|
69d83f535d | ||
|
|
c7988fb6f5 | ||
|
|
3961fd08c9 | ||
|
|
e3faf64061 | ||
|
|
ed83993e15 | ||
|
|
0f8847bb74 | ||
|
|
a72cfa7535 | ||
|
|
514b74a19d | ||
|
|
a2c124306f | ||
|
|
273f67e268 | ||
|
|
2870a7e463 | ||
|
|
935b074a7a | ||
|
|
9d9c609bfb | ||
|
|
f6a664f181 | ||
|
|
fce68d1f75 | ||
|
|
88739c2444 | ||
|
|
7e2f10fce3 | ||
|
|
a494c3a5cc | ||
|
|
d6bb702883 | ||
|
|
d15a972c68 | ||
|
|
2ae7d31725 | ||
|
|
2e329b1888 | ||
|
|
522d40328b | ||
|
|
2ecbff45bf | ||
|
|
b6f7282c13 | ||
|
|
65e5cfa68e | ||
|
|
10e59957d1 | ||
|
|
4f74373df3 | ||
|
|
2d414bbf86 | ||
|
|
a199969b81 | ||
|
|
3aef5e6748 | ||
|
|
2b536a7443 | ||
|
|
20fe68de05 | ||
|
|
c7684b59de | ||
|
|
a7237d157a | ||
|
|
35f91fa280 | ||
|
|
299ac32225 | ||
|
|
a038738d72 | ||
|
|
2b0a919fb5 | ||
|
|
946c706913 | ||
|
|
89b5d976ee | ||
|
|
6f679bb6b4 | ||
|
|
db4e7b0e16 | ||
|
|
9ca942490d | ||
|
|
ebcf249c8b | ||
|
|
939c487503 | ||
|
|
981a8b267e | ||
|
|
9531da80a0 | ||
|
|
e1109b168c | ||
|
|
b7c70039aa | ||
|
|
17b6f6cf2a | ||
|
|
dd88483ba4 | ||
|
|
0ff27f65b3 | ||
|
|
b1655740df | ||
|
|
6d562aece1 | ||
|
|
2182c3372b | ||
|
|
d3331bfe82 | ||
|
|
cfc4a2e8b4 | ||
|
|
36c41c8eb3 | ||
|
|
d255157e6e | ||
|
|
c12e07277d | ||
|
|
06b4fb5095 | ||
|
|
8fafdcb428 | ||
|
|
537a606bb6 | ||
|
|
3dc7a4463c | ||
|
|
fd6ff05b60 | ||
|
|
1a159e41b8 | ||
|
|
23533cdd16 | ||
|
|
2f598b8fa1 | ||
|
|
bca349fec1 | ||
|
|
719fac6480 | ||
|
|
1012b2b2c7 | ||
|
|
5149be4b1b | ||
|
|
d12deeb0d8 | ||
|
|
9df81d1939 | ||
|
|
3be0079868 | ||
|
|
9b253ccb3a | ||
|
|
dded76099c | ||
|
|
41a7ec7d3d | ||
|
|
168c773ba0 | ||
|
|
9abed92196 | ||
|
|
4a75e3602a | ||
|
|
1a689f6641 | ||
|
|
08d7ae11d6 | ||
|
|
9535759787 | ||
|
|
f8fc31f14a | ||
|
|
b74bf97761 | ||
|
|
a090b908bd | ||
|
|
3046821026 | ||
|
|
e94c73efe2 | ||
|
|
e85f9f4aa5 | ||
|
|
ad67886f96 | ||
|
|
5df0e102fd | ||
|
|
a04f0e3545 | ||
|
|
dff9c7ac48 | ||
|
|
3a80b59986 | ||
|
|
07560a4fdd | ||
|
|
7edca21c05 | ||
|
|
34105abd9d | ||
|
|
1bbca48a0b | ||
|
|
21f6a86772 | ||
|
|
6559197c55 | ||
|
|
05f9ad11bb | ||
|
|
f06d586680 | ||
|
|
4f45e8125c | ||
|
|
cc2843503d | ||
|
|
324a974dec | ||
|
|
b9290a021b | ||
|
|
129ce93868 | ||
|
|
5f41e5d6d0 | ||
|
|
c706d030ea | ||
|
|
34716a34f8 |
@@ -30,7 +30,7 @@ while :
|
|||||||
touch patreon.cache && \
|
touch patreon.cache && \
|
||||||
rm patreon.cache && \
|
rm patreon.cache && \
|
||||||
cat patreon.raw.cache | \
|
cat patreon.raw.cache | \
|
||||||
jq -r '(.data|map(select(.relationships.currently_entitled_tiers.data[]))|map(.relationships.user.data.id))as$data|.included|map(select(.attributes.hide_pledges==false))|map(select(.id as$id|$data|contains([$id])))|map(.attributes|[.full_name,.thumb_url,.url]|@tsv)|.[]|@text' >> patreon.cache && \
|
jq -r '(.data|map(select(.relationships.currently_entitled_tiers.data[]))|map(.relationships.user.data.id))as$data|.included|map(select(.id as$id|$data|contains([$id])))|map(.attributes|[.full_name,.thumb_url,.url]|@tsv)|.[]|@text' >> patreon.cache && \
|
||||||
echo '<table><tr>' >> patreon.md.cache && \
|
echo '<table><tr>' >> patreon.md.cache && \
|
||||||
cat patreon.cache | \
|
cat patreon.cache | \
|
||||||
awk -F'\t' '{print $2,$1}' | \
|
awk -F'\t' '{print $2,$1}' | \
|
||||||
|
|||||||
@@ -164,3 +164,6 @@ drive:
|
|||||||
# external: true
|
# external: true
|
||||||
# engine: http://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}
|
# engine: http://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}
|
||||||
# timeout: 300000
|
# timeout: 300000
|
||||||
|
|
||||||
|
# Max allowed note text length in charactors
|
||||||
|
maxNoteTextLength: 1000
|
||||||
|
|||||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -16,3 +16,4 @@ api-docs.json
|
|||||||
/redis
|
/redis
|
||||||
/mongo
|
/mongo
|
||||||
/elasticsearch
|
/elasticsearch
|
||||||
|
*.code-workspace
|
||||||
|
|||||||
@@ -1,12 +1,8 @@
|
|||||||
maintainer: '@syuilo'
|
maintainer:
|
||||||
url: 'https://misskey.xyz'
|
name: syuilo
|
||||||
secondary_url: 'https://himasaku.net'
|
url: 'https://syuilo.com'
|
||||||
|
url: 'http://misskey.local'
|
||||||
port: 80
|
port: 80
|
||||||
https:
|
|
||||||
enable: false
|
|
||||||
key: null
|
|
||||||
cert: null
|
|
||||||
ca: null
|
|
||||||
mongodb:
|
mongodb:
|
||||||
host: localhost
|
host: localhost
|
||||||
port: 27017
|
port: 27017
|
||||||
@@ -21,6 +17,3 @@ elasticsearch:
|
|||||||
host: localhost
|
host: localhost
|
||||||
port: 9200
|
port: 9200
|
||||||
pass: ''
|
pass: ''
|
||||||
recaptcha:
|
|
||||||
site_key: hima
|
|
||||||
secret_key: saku
|
|
||||||
|
|||||||
@@ -1,12 +1,8 @@
|
|||||||
maintainer: '@syuilo'
|
maintainer:
|
||||||
url: 'https://misskey.xyz'
|
name: syuilo
|
||||||
secondary_url: 'https://himasaku.net'
|
url: 'https://syuilo.com'
|
||||||
|
url: 'http://misskey.local'
|
||||||
port: 80
|
port: 80
|
||||||
https:
|
|
||||||
enable: false
|
|
||||||
key: null
|
|
||||||
cert: null
|
|
||||||
ca: null
|
|
||||||
mongodb:
|
mongodb:
|
||||||
host: localhost
|
host: localhost
|
||||||
port: 27017
|
port: 27017
|
||||||
@@ -21,6 +17,3 @@ elasticsearch:
|
|||||||
host: localhost
|
host: localhost
|
||||||
port: 9200
|
port: 9200
|
||||||
pass: ''
|
pass: ''
|
||||||
recaptcha:
|
|
||||||
site_key: hima
|
|
||||||
secret_key: saku
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
FROM alpine:latest AS base
|
FROM alpine:edge AS base
|
||||||
|
|
||||||
ENV NODE_ENV=production
|
ENV NODE_ENV=production
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ Please install and setup these softwares:
|
|||||||
##### Optional
|
##### Optional
|
||||||
* [Redis](https://redis.io/)
|
* [Redis](https://redis.io/)
|
||||||
* Redis is optional, but we strongly recommended to install it
|
* Redis is optional, but we strongly recommended to install it
|
||||||
* [Elasticsearch](https://www.elastic.co/) - used to provide searching feature instead of MongoDB
|
* [Elasticsearch](https://www.elastic.co/) - required to enable the search feature
|
||||||
|
|
||||||
*3.* Setup MongoDB
|
*3.* Setup MongoDB
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
|
|||||||
@@ -27,9 +27,14 @@ adduser --disabled-password --disabled-login misskey
|
|||||||
|
|
||||||
##### オプション
|
##### オプション
|
||||||
* [Redis](https://redis.io/)
|
* [Redis](https://redis.io/)
|
||||||
* Redisはオプションですが、インストールすることを強く推奨します。
|
* Redisはオプションですが、インストールすることを強く推奨します。
|
||||||
* インストールしなくていいのは、あなたのインスタンスが自分専用のときだけです
|
* インストールしなくていいのは、あなたのインスタンスが自分専用のときだけとお考えください。
|
||||||
* [Elasticsearch](https://www.elastic.co/) - 検索機能を向上させるために用います。
|
* 具体的には、Redisをインストールしないと、次の事が出来なくなります:
|
||||||
|
* Misskeyプロセスを複数起動しての負荷分散
|
||||||
|
* レートリミット
|
||||||
|
* Twitter連携
|
||||||
|
* [Elasticsearch](https://www.elastic.co/)
|
||||||
|
* 検索機能を有効にするためにはインストールが必要です。
|
||||||
|
|
||||||
*3.* MongoDBの設定
|
*3.* MongoDBの設定
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
# **DO NOT edit locale files** except `ja-JP.yml`.
|
# **DO NOT edit locale files** except `ja-JP.yml`.
|
||||||
|
|
||||||
|
When you add text to the ja-JP file (of syuilo/misskey), it will automatically be applied to other language files.
|
||||||
|
Translations added in ja-JP file should contain the original Japanese strings.
|
||||||
|
|
||||||
Please see [Contribution guide](../CONTRIBUTING.md) for more information.
|
Please see [Contribution guide](../CONTRIBUTING.md) for more information.
|
||||||
|
|||||||
@@ -25,6 +25,14 @@ common:
|
|||||||
application-authorization: "アプリの連携"
|
application-authorization: "アプリの連携"
|
||||||
close: "閉じる"
|
close: "閉じる"
|
||||||
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
|
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
|
||||||
|
BSoD:
|
||||||
|
fatal-error: ":( 致命的な問題が発生しました。"
|
||||||
|
update-browser-os: "お使いのブラウザ(またはOS)のバージョンを更新すると解決する可能性があります。"
|
||||||
|
error-code: "エラーコード"
|
||||||
|
browser-version: "ブラウザ バージョン"
|
||||||
|
client-version: "クライアント バージョン"
|
||||||
|
email-support: "問題が解決しない場合は、上記の情報をお書き添えの上 syuilotan@yahoo.co.jp までご連絡ください。"
|
||||||
|
thanks: "Thank you for using Misskey."
|
||||||
got-it: "わかった"
|
got-it: "わかった"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "カスタマイズのヒント"
|
title: "カスタマイズのヒント"
|
||||||
@@ -115,6 +123,12 @@ common:
|
|||||||
reduce-motion: "UIの動きを減らす"
|
reduce-motion: "UIの動きを減らす"
|
||||||
this-setting-is-this-device-only: "このデバイスのみ"
|
this-setting-is-this-device-only: "このデバイスのみ"
|
||||||
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
|
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
|
||||||
|
is-remote-user: "このユーザー情報はコピーです。"
|
||||||
|
is-remote-post: "この投稿情報はコピーです。"
|
||||||
|
view-on-remote: "正確な情報を見る"
|
||||||
|
error:
|
||||||
|
title: '問題が発生しました'
|
||||||
|
retry: 'やり直す'
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "引き分け"
|
drawn: "引き分け"
|
||||||
my-turn: "あなたのターンです"
|
my-turn: "あなたのターンです"
|
||||||
@@ -170,6 +184,7 @@ common:
|
|||||||
rename: "名前を変更"
|
rename: "名前を変更"
|
||||||
stack-left: "左に重ねる"
|
stack-left: "左に重ねる"
|
||||||
pop-right: "右に出す"
|
pop-right: "右に出す"
|
||||||
|
dev: "アプリの作成に失敗しました。再度お試しください。"
|
||||||
auth/views/form.vue:
|
auth/views/form.vue:
|
||||||
share-access: "<i>{{ app.name }}</i>があなたのアカウントにアクセスすることを<b>許可</b>しますか?"
|
share-access: "<i>{{ app.name }}</i>があなたのアカウントにアクセスすることを<b>許可</b>しますか?"
|
||||||
permission-ask: "このアプリは次の権限を要求しています:"
|
permission-ask: "このアプリは次の権限を要求しています:"
|
||||||
@@ -335,6 +350,7 @@ common/views/components/note-menu.vue:
|
|||||||
detail: "詳細"
|
detail: "詳細"
|
||||||
copy-link: "リンクをコピー"
|
copy-link: "リンクをコピー"
|
||||||
favorite: "お気に入り"
|
favorite: "お気に入り"
|
||||||
|
unfavorite: "お気に入り解除"
|
||||||
pin: "ピン留め"
|
pin: "ピン留め"
|
||||||
unpin: "ピン留め解除"
|
unpin: "ピン留め解除"
|
||||||
delete: "削除"
|
delete: "削除"
|
||||||
@@ -415,6 +431,25 @@ common/views/components/visibility-chooser.vue:
|
|||||||
common/views/components/trends.vue:
|
common/views/components/trends.vue:
|
||||||
count: "{}人が投稿"
|
count: "{}人が投稿"
|
||||||
empty: "トレンドなし"
|
empty: "トレンドなし"
|
||||||
|
common/views/components/profile-editor.vue:
|
||||||
|
title: "プロフィール"
|
||||||
|
name: "名前"
|
||||||
|
account: "アカウント"
|
||||||
|
location: "場所"
|
||||||
|
description: "自己紹介"
|
||||||
|
birthday: "誕生日"
|
||||||
|
avatar: "アイコン"
|
||||||
|
banner: "バナー"
|
||||||
|
is-cat: "このアカウントはCatです"
|
||||||
|
is-bot: "このアカウントはBotです"
|
||||||
|
is-locked: "フォローを承認制にする"
|
||||||
|
careful-bot: "Botからのフォローだけ承認制にする"
|
||||||
|
advanced: "その他"
|
||||||
|
privacy: "プライバシー"
|
||||||
|
save: "保存"
|
||||||
|
saved: "プロフィールを保存しました"
|
||||||
|
uploading: "アップロード中"
|
||||||
|
upload-failed: "アップロードに失敗しました"
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "確認中"
|
fetching: "確認中"
|
||||||
no-broadcasts: "お知らせはありません"
|
no-broadcasts: "お知らせはありません"
|
||||||
@@ -639,7 +674,7 @@ desktop/views/components/note-detail.vue:
|
|||||||
location: "位置情報"
|
location: "位置情報"
|
||||||
renote: "Renote"
|
renote: "Renote"
|
||||||
add-reaction: "リアクション"
|
add-reaction: "リアクション"
|
||||||
desktop/views/components/notes.note.vue:
|
desktop/views/components/note.vue:
|
||||||
reposted-by: "{}がRenote"
|
reposted-by: "{}がRenote"
|
||||||
reply: "返信"
|
reply: "返信"
|
||||||
renote: "Renote"
|
renote: "Renote"
|
||||||
@@ -725,8 +760,12 @@ desktop/views/components/settings.vue:
|
|||||||
advanced: "詳細設定"
|
advanced: "詳細設定"
|
||||||
api-via-stream: "ストリームを経由したAPIリクエスト"
|
api-via-stream: "ストリームを経由したAPIリクエスト"
|
||||||
api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。"
|
api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。"
|
||||||
|
deck-nav: "デッキ内ナビゲーション"
|
||||||
|
deck-nav-desc: "デッキを使用しているとき、ナビゲーションが発生する際にページ遷移を行わずに一時的なカラムで受けるようにします。"
|
||||||
|
deck-default: "デッキをデフォルトのUIにする"
|
||||||
display: "デザインと表示"
|
display: "デザインと表示"
|
||||||
customize: "ホームをカスタマイズ"
|
customize: "ホームをカスタマイズ"
|
||||||
|
wallpaper: "壁紙"
|
||||||
choose-wallpaper: "壁紙を選択"
|
choose-wallpaper: "壁紙を選択"
|
||||||
delete-wallpaper: "壁紙を削除"
|
delete-wallpaper: "壁紙を削除"
|
||||||
dark-mode: "ダークモード"
|
dark-mode: "ダークモード"
|
||||||
@@ -738,17 +777,19 @@ desktop/views/components/settings.vue:
|
|||||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||||
show-clock-on-header: "右上に時計を表示する"
|
show-clock-on-header: "右上に時計を表示する"
|
||||||
show-reply-target: "リプライ先を表示する"
|
show-reply-target: "リプライ先を表示する"
|
||||||
|
timeline: "タイムライン"
|
||||||
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
||||||
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
||||||
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
||||||
show-maps: "マップの自動展開"
|
show-maps: "マップの自動展開"
|
||||||
|
deck-column-align: "デッキのカラムの位置"
|
||||||
|
deck-column-align-center: "中央"
|
||||||
|
deck-column-align-left: "左"
|
||||||
sound: "サウンド"
|
sound: "サウンド"
|
||||||
enable-sounds: "サウンドを有効にする"
|
enable-sounds: "サウンドを有効にする"
|
||||||
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
||||||
volume: "ボリューム"
|
volume: "ボリューム"
|
||||||
test: "テスト"
|
test: "テスト"
|
||||||
mobile: "モバイル"
|
|
||||||
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
|
||||||
language: "言語"
|
language: "言語"
|
||||||
pick-language: "言語を選択"
|
pick-language: "言語を選択"
|
||||||
recommended: "推奨"
|
recommended: "推奨"
|
||||||
@@ -784,6 +825,10 @@ desktop/views/components/settings.vue:
|
|||||||
tools: "ツール"
|
tools: "ツール"
|
||||||
task-manager: "タスクマネージャ"
|
task-manager: "タスクマネージャ"
|
||||||
third-parties: "サードパーティ"
|
third-parties: "サードパーティ"
|
||||||
|
navbar-position: "ナビゲーションバーの位置"
|
||||||
|
navbar-position-top: "上"
|
||||||
|
navbar-position-left: "左"
|
||||||
|
navbar-position-right: "右"
|
||||||
desktop/views/components/settings.2fa.vue:
|
desktop/views/components/settings.2fa.vue:
|
||||||
intro: "二段階認証を設定すると、サインイン時にパスワードだけでなく、予め登録しておいた物理的なデバイス(例えばあなたのスマートフォンなど)も必要になり、よりセキュリティが向上します。"
|
intro: "二段階認証を設定すると、サインイン時にパスワードだけでなく、予め登録しておいた物理的なデバイス(例えばあなたのスマートフォンなど)も必要になり、よりセキュリティが向上します。"
|
||||||
detail: "詳細..."
|
detail: "詳細..."
|
||||||
@@ -823,20 +868,6 @@ desktop/views/components/settings.password.vue:
|
|||||||
enter-new-password-again: "もう一度新しいパスワードを入力してください"
|
enter-new-password-again: "もう一度新しいパスワードを入力してください"
|
||||||
not-match: "新しいパスワードが一致しません"
|
not-match: "新しいパスワードが一致しません"
|
||||||
changed: "パスワードを変更しました"
|
changed: "パスワードを変更しました"
|
||||||
desktop/views/components/settings.profile.vue:
|
|
||||||
avatar: "アイコン"
|
|
||||||
choice-avatar: "画像を選択"
|
|
||||||
name: "名前"
|
|
||||||
location: "場所"
|
|
||||||
description: "自己紹介"
|
|
||||||
birthday: "誕生日"
|
|
||||||
save: "保存"
|
|
||||||
locked-account: "アカウントの保護"
|
|
||||||
is-locked: "フォローを承認制にする"
|
|
||||||
other: "その他"
|
|
||||||
is-bot: "このアカウントはBotです"
|
|
||||||
is-cat: "このアカウントはCatです"
|
|
||||||
profile-updated: "プロフィールを更新しました"
|
|
||||||
desktop/views/components/sub-note-content.vue:
|
desktop/views/components/sub-note-content.vue:
|
||||||
private: "この投稿は非公開です"
|
private: "この投稿は非公開です"
|
||||||
deleted: "この投稿は削除されました"
|
deleted: "この投稿は削除されました"
|
||||||
@@ -908,6 +939,8 @@ desktop/views/pages/admin/admin.vue:
|
|||||||
drive: "ドライブ"
|
drive: "ドライブ"
|
||||||
users: "ユーザー"
|
users: "ユーザー"
|
||||||
update: "更新"
|
update: "更新"
|
||||||
|
announcements: "お知らせ"
|
||||||
|
hashtags: "ハッシュタグ"
|
||||||
desktop/views/pages/admin/admin.dashboard.vue:
|
desktop/views/pages/admin/admin.dashboard.vue:
|
||||||
dashboard: "ダッシュボード"
|
dashboard: "ダッシュボード"
|
||||||
all-users: "全てのユーザー"
|
all-users: "全てのユーザー"
|
||||||
@@ -915,6 +948,9 @@ desktop/views/pages/admin/admin.dashboard.vue:
|
|||||||
all-notes: "全ての投稿"
|
all-notes: "全ての投稿"
|
||||||
original-notes: "このインスタンスの投稿"
|
original-notes: "このインスタンスの投稿"
|
||||||
invite: "招待"
|
invite: "招待"
|
||||||
|
banner-url: "Banner URL"
|
||||||
|
disableRegistration: "Disable new user registration"
|
||||||
|
disableLocalTimeline: "Disable the local timeline"
|
||||||
desktop/views/pages/admin/admin.suspend-user.vue:
|
desktop/views/pages/admin/admin.suspend-user.vue:
|
||||||
suspend-user: "ユーザーの凍結"
|
suspend-user: "ユーザーの凍結"
|
||||||
suspend: "凍結"
|
suspend: "凍結"
|
||||||
@@ -931,14 +967,23 @@ desktop/views/pages/admin/admin.unverify-user.vue:
|
|||||||
unverify-user: "ユーザーの公式アカウント解除"
|
unverify-user: "ユーザーの公式アカウント解除"
|
||||||
unverify: "公式アカウントを解除する"
|
unverify: "公式アカウントを解除する"
|
||||||
unverified: "公式アカウントを解除しました"
|
unverified: "公式アカウントを解除しました"
|
||||||
|
desktop/views/pages/admin/admin.announcements.vue:
|
||||||
|
announcements: "お知らせ"
|
||||||
|
desktop/views/pages/admin/admin.hashtags.vue:
|
||||||
|
hided-tags: "Hidden Tags"
|
||||||
desktop/views/pages/deck/deck.tl-column.vue:
|
desktop/views/pages/deck/deck.tl-column.vue:
|
||||||
is-media-only: "メディア投稿のみ"
|
is-media-only: "メディア投稿のみ"
|
||||||
is-media-view: "メディアビュー"
|
is-media-view: "メディアビュー"
|
||||||
edit: "オプション"
|
edit: "オプション"
|
||||||
desktop/views/pages/deck/deck.note.vue:
|
desktop/views/pages/deck/deck.user-column.vue:
|
||||||
reposted-by: "{}がRenote"
|
posts: "投稿"
|
||||||
private: "この投稿は非公開です"
|
following: "フォロー"
|
||||||
deleted: "この投稿は削除されました"
|
followers: "フォロワー"
|
||||||
|
images: "画像"
|
||||||
|
activity: "アクティビティ"
|
||||||
|
timeline: "タイムライン"
|
||||||
|
pinned-notes: "ピン留めされた投稿"
|
||||||
|
push-to-a-list: "リストに追加"
|
||||||
desktop/views/pages/stats/stats.vue:
|
desktop/views/pages/stats/stats.vue:
|
||||||
all-users: "全てのユーザー"
|
all-users: "全てのユーザー"
|
||||||
original-users: "このインスタンスのユーザー"
|
original-users: "このインスタンスのユーザー"
|
||||||
@@ -991,9 +1036,6 @@ desktop/views/pages/user/user.friends.vue:
|
|||||||
no-users: "よく話すユーザーはいません"
|
no-users: "よく話すユーザーはいません"
|
||||||
desktop/views/pages/user/user.vue:
|
desktop/views/pages/user/user.vue:
|
||||||
is-suspended: "このユーザーは凍結されています。"
|
is-suspended: "このユーザーは凍結されています。"
|
||||||
is-remote: "このユーザーはリモートユーザーです。"
|
|
||||||
view-remote: "正確な情報を見る"
|
|
||||||
desktop/views/pages/user/user.home.vue:
|
|
||||||
last-used-at: "最終アクセス"
|
last-used-at: "最終アクセス"
|
||||||
desktop/views/pages/user/user.photos.vue:
|
desktop/views/pages/user/user.photos.vue:
|
||||||
title: "フォト"
|
title: "フォト"
|
||||||
@@ -1014,6 +1056,10 @@ desktop/views/pages/user/user.header.vue:
|
|||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
followers: "フォロワー"
|
followers: "フォロワー"
|
||||||
is-bot: "このアカウントはBotです"
|
is-bot: "このアカウントはBotです"
|
||||||
|
years-old: "歳"
|
||||||
|
year: "年"
|
||||||
|
month: "月"
|
||||||
|
day: "日"
|
||||||
desktop/views/pages/user/user.timeline.vue:
|
desktop/views/pages/user/user.timeline.vue:
|
||||||
default: "投稿"
|
default: "投稿"
|
||||||
with-replies: "投稿と返信"
|
with-replies: "投稿と返信"
|
||||||
@@ -1073,6 +1119,8 @@ mobile/views/components/drive.file-detail.vue:
|
|||||||
hash: "ハッシュ (md5)"
|
hash: "ハッシュ (md5)"
|
||||||
exif: "EXIF"
|
exif: "EXIF"
|
||||||
nsfw: "閲覧注意"
|
nsfw: "閲覧注意"
|
||||||
|
mark-as-sensitive: "閲覧注意に設定"
|
||||||
|
unmark-as-sensitive: "閲覧注意を解除"
|
||||||
mobile/views/components/media-image.vue:
|
mobile/views/components/media-image.vue:
|
||||||
sensitive: "閲覧注意"
|
sensitive: "閲覧注意"
|
||||||
click-to-show: "クリックして表示"
|
click-to-show: "クリックして表示"
|
||||||
@@ -1213,23 +1261,6 @@ mobile/views/pages/notifications.vue:
|
|||||||
read-all: "すべての通知を既読にしますか?"
|
read-all: "すべての通知を既読にしますか?"
|
||||||
mobile/views/pages/games/reversi.vue:
|
mobile/views/pages/games/reversi.vue:
|
||||||
reversi: "リバーシ"
|
reversi: "リバーシ"
|
||||||
mobile/views/pages/settings/settings.profile.vue:
|
|
||||||
title: "プロフィール"
|
|
||||||
name: "名前"
|
|
||||||
account: "アカウント"
|
|
||||||
location: "場所"
|
|
||||||
description: "自己紹介"
|
|
||||||
birthday: "誕生日"
|
|
||||||
avatar: "アイコン"
|
|
||||||
banner: "バナー"
|
|
||||||
is-cat: "このアカウントはCatです"
|
|
||||||
is-locked: "フォローを承認制にする"
|
|
||||||
advanced: "その他"
|
|
||||||
privacy: "プライバシー"
|
|
||||||
save: "保存"
|
|
||||||
saved: "プロフィールを保存しました"
|
|
||||||
uploading: "アップロード中"
|
|
||||||
upload-failed: "アップロードに失敗しました"
|
|
||||||
mobile/views/pages/search.vue:
|
mobile/views/pages/search.vue:
|
||||||
search: "検索"
|
search: "検索"
|
||||||
empty: "「{}」に関する投稿は見つかりませんでした。"
|
empty: "「{}」に関する投稿は見つかりませんでした。"
|
||||||
@@ -1285,6 +1316,7 @@ mobile/views/pages/settings.vue:
|
|||||||
signout: "サインアウト"
|
signout: "サインアウト"
|
||||||
sound: "サウンド"
|
sound: "サウンド"
|
||||||
enable-sounds: "サウンドを有効にする"
|
enable-sounds: "サウンドを有効にする"
|
||||||
|
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
|
||||||
mobile/views/pages/user.vue:
|
mobile/views/pages/user.vue:
|
||||||
follows-you: "フォローされています"
|
follows-you: "フォローされています"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
@@ -1294,8 +1326,6 @@ mobile/views/pages/user.vue:
|
|||||||
timeline: "タイムライン"
|
timeline: "タイムライン"
|
||||||
media: "メディア"
|
media: "メディア"
|
||||||
is-suspended: "このユーザーは凍結されています。"
|
is-suspended: "このユーザーは凍結されています。"
|
||||||
is-remote: "このユーザーはリモートユーザーです。"
|
|
||||||
view-remote: "正確な情報を見る"
|
|
||||||
mobile/views/pages/user/home.vue:
|
mobile/views/pages/user/home.vue:
|
||||||
recent-notes: "最近の投稿"
|
recent-notes: "最近の投稿"
|
||||||
images: "画像"
|
images: "画像"
|
||||||
@@ -1341,3 +1371,29 @@ docs:
|
|||||||
description: "説明"
|
description: "説明"
|
||||||
dev/views/index.vue:
|
dev/views/index.vue:
|
||||||
manage-apps: "アプリの管理"
|
manage-apps: "アプリの管理"
|
||||||
|
dev/views/apps.vue:
|
||||||
|
manage-apps: "アプリを管理"
|
||||||
|
create-app: "アプリ作成"
|
||||||
|
app-missing: "アプリなし"
|
||||||
|
dev/views/new-app.vue:
|
||||||
|
create-app: "アプリケーションの作成"
|
||||||
|
app-name: "アプリケーション名"
|
||||||
|
app-name-desc: "あなたのアプリの名称。"
|
||||||
|
app-name-ex: "ex) Misskey for iOS"
|
||||||
|
app-overview: "アプリの概要"
|
||||||
|
app-desc: "あなたのアプリの簡単な説明や紹介。"
|
||||||
|
app-desc-ex: "ex) Misskey iOSクライアント。"
|
||||||
|
callback-url: "コールバックURL (オプション)"
|
||||||
|
callback-url-desc: "ユーザーが認証フォームで認証した際にリダイレクトするURLを設定できます。"
|
||||||
|
authority: "権限"
|
||||||
|
authority-desc: "ここで要求した機能だけがAPIからアクセスできます。"
|
||||||
|
authority-warning: "アプリ作成後も変更できますが、新たな権限を付与する場合、その時点で関連付けられているユーザーキーはすべて無効になります。"
|
||||||
|
account-read: "アカウントの情報を見る。"
|
||||||
|
account-write: "アカウントの情報を操作する。"
|
||||||
|
note-write: "投稿する。"
|
||||||
|
reaction-write: "リアクションしたりリアクションをキャンセルする。"
|
||||||
|
following-write: "フォローしたりフォロー解除する。"
|
||||||
|
drive-read: "ドライブを見る。"
|
||||||
|
drive-write: "ドライブを操作する。"
|
||||||
|
notification-read: "通知を見る。"
|
||||||
|
notification-write: "通知を操作する。"
|
||||||
|
|||||||
@@ -3,44 +3,52 @@ meta:
|
|||||||
lang: "Deutsch"
|
lang: "Deutsch"
|
||||||
divider: ""
|
divider: ""
|
||||||
common:
|
common:
|
||||||
misskey: "A ⭐ of fediverse"
|
misskey: "Ein ⭐ des Fediversums"
|
||||||
about-title: "A ⭐ of fediverse."
|
about-title: "Ein ⭐ des Fediversums."
|
||||||
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
|
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
|
||||||
intro:
|
intro:
|
||||||
title: "Misskeyって?"
|
title: "Was ist Misskey?"
|
||||||
about: "Misskeyはオープンソースの<b>分散型マイクロブログSNS</b>です。リッチで高度にカスタマイズできるUI、投稿へのリアクション、ファイルを一元管理できるドライブなど、先進的な機能を揃えています。また、Fediverseと呼ばれるネットワークに接続できるため、他のSNSともやり取りできます。例えば、あなたが何か投稿すると、その投稿はMisskeyだけでなく他のSNSにも伝わります。ちょうどある惑星から他の惑星に電波を発信している様子をイメージしてください。"
|
about: "Misskeyはオープンソースの<b>分散型マイクロブログSNS</b>です。リッチで高度にカスタマイズできるUI、投稿へのリアクション、ファイルを一元管理できるドライブなど、先進的な機能を揃えています。また、Fediverseと呼ばれるネットワークに接続できるため、他のSNSともやり取りできます。例えば、あなたが何か投稿すると、その投稿はMisskeyだけでなく他のSNSにも伝わります。ちょうどある惑星から他の惑星に電波を発信している様子をイメージしてください。"
|
||||||
features: "特徴"
|
features: "Funktionen"
|
||||||
rich-contents: "投稿"
|
rich-contents: "Notizen"
|
||||||
rich-contents-desc: "自分の考え、話題の出来事、皆と共有したいことについて発信してください。必要であれば、様々な構文を使って投稿を装飾したり、好きな画像、動画などのファイルやアンケートを添付することもできます。"
|
rich-contents-desc: "自分の考え、話題の出来事、皆と共有したいことについて発信してください。必要であれば、様々な構文を使って投稿を装飾したり、好きな画像、動画などのファイルやアンケートを添付することもできます。"
|
||||||
reaction: "リアクション"
|
reaction: "Reaktionen"
|
||||||
reaction-desc: "あなたの気持ちを伝える最も簡単な方法です。Misskeyは、他のユーザーの投稿に様々なリアクションを付けることができます。いちどMisskeyのリアクション機能を体験してしまうと、もう「いいね」の概念しか存在しないSNSには戻れなくなるかもしれません。"
|
reaction-desc: "あなたの気持ちを伝える最も簡単な方法です。Misskeyは、他のユーザーの投稿に様々なリアクションを付けることができます。いちどMisskeyのリアクション機能を体験してしまうと、もう「いいね」の概念しか存在しないSNSには戻れなくなるかもしれません。"
|
||||||
ui: "インターフェース"
|
ui: "Benutzeroberfläche"
|
||||||
ui-desc: "どのようなUIが使いやすいかは人それぞれです。だから、Misskeyは自由度の高いUIを持っています。レイアウトやデザインを調整したり、カスタマイズ可能な様々なウィジェットを配置したりして、自分だけのホームを作ってください。"
|
ui-desc: "どのようなUIが使いやすいかは人それぞれです。だから、Misskeyは自由度の高いUIを持っています。レイアウトやデザインを調整したり、カスタマイズ可能な様々なウィジェットを配置したりして、自分だけのホームを作ってください。"
|
||||||
drive: "ドライブ"
|
drive: "Drive"
|
||||||
drive-desc: "以前投稿したことのある画像をまた投稿したくなったことはありませんか?もしくは、アップロードしたファイルをフォルダ分けして整理したくなったことはありませんか?Misskeyの根幹に組み込まれたドライブ機能によってそれらが解決します。ファイルの共有も簡単です。"
|
drive-desc: "以前投稿したことのある画像をまた投稿したくなったことはありませんか?もしくは、アップロードしたファイルをフォルダ分けして整理したくなったことはありませんか?Misskeyの根幹に組み込まれたドライブ機能によってそれらが解決します。ファイルの共有も簡単です。"
|
||||||
outro: "他にもMisskeyにしかない機能はまだまだあるので、ぜひあなた自身の目で確かめてください。Misskeyは分散型SNSなので、このインスタンスが気に入らなければ他のインスタンスを試すこともできます。それでは、GLHF!"
|
outro: "他にもMisskeyにしかない機能はまだまだあるので、ぜひあなた自身の目で確かめてください。Misskeyは分散型SNSなので、このインスタンスが気に入らなければ他のインスタンスを試すこともできます。それでは、GLHF!"
|
||||||
adblock:
|
adblock:
|
||||||
detected: "広告ブロッカーを無効にしてください"
|
detected: "Bitte deaktiviere den Werbeblocker."
|
||||||
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
|
||||||
application-authorization: "アプリの連携"
|
application-authorization: "Autorisierte Anwendungen"
|
||||||
close: "閉じる"
|
close: "Schließen"
|
||||||
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
|
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
|
||||||
got-it: "わかった"
|
BSoD:
|
||||||
|
fatal-error: "Ein schwerwiegender Fehler ist aufgetreten :("
|
||||||
|
update-browser-os: "お使いのブラウザ(またはOS)のバージョンを更新すると解決する可能性があります。"
|
||||||
|
error-code: "Fehlercode"
|
||||||
|
browser-version: "Browserversion"
|
||||||
|
client-version: "Clientversion"
|
||||||
|
email-support: "問題が解決しない場合は、上記の情報をお書き添えの上 syuilotan@yahoo.co.jp までご連絡ください。"
|
||||||
|
thanks: "Vielen Dank dass du Misskey verwendest."
|
||||||
|
got-it: "Verstanden!"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "カスタマイズのヒント"
|
title: "Anpassung-Tipps"
|
||||||
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
|
paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
|
||||||
paragraph2: "一部のウィジェットは、<strong><strong>右</strong>クリック</strong>することで表示を変更することができます。"
|
paragraph2: "一部のウィジェットは、<strong><strong>右</strong>クリック</strong>することで表示を変更することができます。"
|
||||||
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
|
paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
|
||||||
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
|
paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
|
||||||
gotit: "Got it!"
|
gotit: "Verstanden!"
|
||||||
notification:
|
notification:
|
||||||
file-uploaded: "ファイルがアップロードされました"
|
file-uploaded: "Datei hochgeladen!"
|
||||||
message-from: "{}さんからメッセージ:"
|
message-from: "Nachricht von {}:"
|
||||||
reversi-invited: "対局への招待があります"
|
reversi-invited: "対局への招待があります"
|
||||||
reversi-invited-by: "{}さんから"
|
reversi-invited-by: "Eingeladen von {}:"
|
||||||
notified-by: "{}さんから"
|
notified-by: "Benachrichtigt von {}:"
|
||||||
reply-from: "{}さんから返信:"
|
reply-from: "Antwort von {}:"
|
||||||
quoted-by: "{}さんが引用:"
|
quoted-by: "Zitiert von {}:"
|
||||||
time:
|
time:
|
||||||
unknown: "Unbekannt"
|
unknown: "Unbekannt"
|
||||||
future: "Zukunft"
|
future: "Zukunft"
|
||||||
@@ -52,8 +60,8 @@ common:
|
|||||||
weeks_ago: "vor {0} Woche{0:n}"
|
weeks_ago: "vor {0} Woche{0:n}"
|
||||||
months_ago: "vor {0} Monat{0:en}"
|
months_ago: "vor {0} Monat{0:en}"
|
||||||
years_ago: "vor {} Jahr{0:en}"
|
years_ago: "vor {} Jahr{0:en}"
|
||||||
month-and-day: "{month}月 {day}日"
|
month-and-day: "{day}/{month}"
|
||||||
trash: "ゴミ箱"
|
trash: "Papierkorb"
|
||||||
weekday-short:
|
weekday-short:
|
||||||
sunday: "So"
|
sunday: "So"
|
||||||
monday: "Mo"
|
monday: "Mo"
|
||||||
@@ -63,15 +71,15 @@ common:
|
|||||||
friday: "Fr"
|
friday: "Fr"
|
||||||
saturday: "Sa"
|
saturday: "Sa"
|
||||||
weekday:
|
weekday:
|
||||||
sunday: "日曜日"
|
sunday: "Sonntag"
|
||||||
monday: "月曜日"
|
monday: "Montag"
|
||||||
tuesday: "火曜日"
|
tuesday: "Dienstag"
|
||||||
wednesday: "水曜日"
|
wednesday: "Mittwoch"
|
||||||
thursday: "木曜日"
|
thursday: "Donnerstag"
|
||||||
friday: "金曜日"
|
friday: "Freitag"
|
||||||
saturday: "土曜日"
|
saturday: "Samstag"
|
||||||
reactions:
|
reactions:
|
||||||
like: "いいね"
|
like: "Gefällt mir"
|
||||||
love: "Lieben"
|
love: "Lieben"
|
||||||
laugh: "Lachen"
|
laugh: "Lachen"
|
||||||
hmm: "Hmm...?"
|
hmm: "Hmm...?"
|
||||||
@@ -82,14 +90,14 @@ common:
|
|||||||
rip: "RIP"
|
rip: "RIP"
|
||||||
pudding: "Pudding"
|
pudding: "Pudding"
|
||||||
note-visibility:
|
note-visibility:
|
||||||
public: "公開"
|
public: "Öffentlich"
|
||||||
home: "ホーム"
|
home: "Startseite"
|
||||||
home-desc: "ホームタイムラインにのみ公開"
|
home-desc: "Nur auf die Startseite posten"
|
||||||
followers: "フォロワー"
|
followers: "Abonnenten"
|
||||||
followers-desc: "自分のフォロワーにのみ公開"
|
followers-desc: "Nur für diejenigen sichtbar, die dir folgen"
|
||||||
specified: "ダイレクト"
|
specified: "Direkt"
|
||||||
specified-desc: "指定したユーザーにのみ公開"
|
specified-desc: "Nur für bestimmte Benutzer posten"
|
||||||
private: "非公開"
|
private: "Privat"
|
||||||
note-placeholders:
|
note-placeholders:
|
||||||
a: "Was machst du gerade?"
|
a: "Was machst du gerade?"
|
||||||
b: "Was ist so passiert?"
|
b: "Was ist so passiert?"
|
||||||
@@ -97,34 +105,40 @@ common:
|
|||||||
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."
|
||||||
search: "検索"
|
search: "Suche"
|
||||||
delete: "Löschen"
|
delete: "Löschen"
|
||||||
loading: "Laden"
|
loading: "Laden"
|
||||||
ok: "OK"
|
ok: "OK"
|
||||||
update-available-title: "更新があります"
|
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."
|
||||||
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
i-like-sushi: "Ich bevorzuge Sushi anstelle von Pudding"
|
||||||
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
||||||
use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける"
|
use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける"
|
||||||
verified-user: "公式アカウント"
|
verified-user: "Verifizierter Benutzer"
|
||||||
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
|
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
|
||||||
always-show-nsfw: "常に閲覧注意のメディアを表示する"
|
always-show-nsfw: "常に閲覧注意のメディアを表示する"
|
||||||
always-mark-nsfw: "常にメディアを閲覧注意として投稿"
|
always-mark-nsfw: "常にメディアを閲覧注意として投稿"
|
||||||
show-full-acct: "ユーザー名のホストを省略しない"
|
show-full-acct: "ユーザー名のホストを省略しない"
|
||||||
reduce-motion: "UIの動きを減らす"
|
reduce-motion: "Animationen der Benutzeroberfläche reduzieren"
|
||||||
this-setting-is-this-device-only: "このデバイスのみ"
|
this-setting-is-this-device-only: "Nur auf diesem Gerät"
|
||||||
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
|
do-not-use-in-production: 'Dies ist eine Entwicklungsversion. Nicht in einer Produktionsumgebung verwenden.'
|
||||||
|
is-remote-user: "このユーザー情報はコピーです。"
|
||||||
|
is-remote-post: "この投稿情報はコピーです。"
|
||||||
|
view-on-remote: "正確な情報を見る"
|
||||||
|
error:
|
||||||
|
title: '問題が発生しました'
|
||||||
|
retry: 'Erneut versuchen'
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "引き分け"
|
drawn: "Unentschieden"
|
||||||
my-turn: "あなたのターンです"
|
my-turn: "Du bist am Zug"
|
||||||
opponent-turn: "相手のターンです"
|
opponent-turn: "Dein Gegner ist an der Reihe"
|
||||||
turn-of: "{}のターンです"
|
turn-of: "{} ist am Zug"
|
||||||
past-turn-of: "{}のターン"
|
past-turn-of: "Zug von {}"
|
||||||
won: "{}の勝ち"
|
won: "{} hat gewonnen!"
|
||||||
black: "黒"
|
black: "Schwarz"
|
||||||
white: "白"
|
white: "Weiß"
|
||||||
total: "合計"
|
total: "Gesamt"
|
||||||
this-turn: "{}ターン目"
|
this-turn: "{}ターン目"
|
||||||
widgets:
|
widgets:
|
||||||
analog-clock: "Analoge Uhr"
|
analog-clock: "Analoge Uhr"
|
||||||
@@ -142,23 +156,23 @@ common:
|
|||||||
broadcast: "ブロードキャスト"
|
broadcast: "ブロードキャスト"
|
||||||
notifications: "Benachrichtigungen"
|
notifications: "Benachrichtigungen"
|
||||||
users: "Empfohlene Benutzer"
|
users: "Empfohlene Benutzer"
|
||||||
polls: "アンケート"
|
polls: "Umfrage"
|
||||||
post-form: "Beitragsform"
|
post-form: "Beitragsform"
|
||||||
messaging: "Nachrichten"
|
messaging: "Nachrichten"
|
||||||
server: "Server-Info"
|
server: "Server-Info"
|
||||||
donation: "Spenden"
|
donation: "Spenden"
|
||||||
nav: "Navigation"
|
nav: "Navigation"
|
||||||
tips: "Tipps"
|
tips: "Tipps"
|
||||||
hashtags: "ハッシュタグ"
|
hashtags: "Hashtags"
|
||||||
deck:
|
deck:
|
||||||
widgets: "Widget hinzufügen:"
|
widgets: "Widget hinzufügen:"
|
||||||
home: "Startseite"
|
home: "Startseite"
|
||||||
local: "Lokal"
|
local: "Lokal"
|
||||||
hybrid: "ソーシャル"
|
hybrid: "Sozial"
|
||||||
hashtag: "ハッシュタグ"
|
hashtag: "Hashtag"
|
||||||
global: "Global"
|
global: "Global"
|
||||||
mentions: "あなた宛て"
|
mentions: "Erwähnungen"
|
||||||
direct: "ダイレクト投稿"
|
direct: "Direktnachrichten"
|
||||||
notifications: "Mitteilungen"
|
notifications: "Mitteilungen"
|
||||||
list: "Listen"
|
list: "Listen"
|
||||||
swap-left: "Nach links"
|
swap-left: "Nach links"
|
||||||
@@ -169,73 +183,74 @@ common:
|
|||||||
add-column: "Eine Spalte hinzufügen"
|
add-column: "Eine Spalte hinzufügen"
|
||||||
rename: "Umbenennen"
|
rename: "Umbenennen"
|
||||||
stack-left: "Nach links schichten"
|
stack-left: "Nach links schichten"
|
||||||
pop-right: "右に出す"
|
pop-right: "Rechts andocken"
|
||||||
|
dev: "Fehler beim Erstellen der Applikation. Bitte versuche es erneut."
|
||||||
auth/views/form.vue:
|
auth/views/form.vue:
|
||||||
share-access: "<i>{{ app.name }}</i>があなたのアカウントにアクセスすることを<b>許可</b>しますか?"
|
share-access: "<i>{{ app.name }}</i>があなたのアカウントにアクセスすることを<b>許可</b>しますか?"
|
||||||
permission-ask: "このアプリは次の権限を要求しています:"
|
permission-ask: "このアプリは次の権限を要求しています:"
|
||||||
account-read: "アカウントの情報を見る。"
|
account-read: "アカウントの情報を見る。"
|
||||||
account-write: "アカウントの情報を操作する。"
|
account-write: "アカウントの情報を操作する。"
|
||||||
note-write: "投稿する。"
|
note-write: "Senden."
|
||||||
like-write: "いいねしたりいいね解除する。"
|
like-write: "いいねしたりいいね解除する。"
|
||||||
following-write: "フォローしたりフォロー解除する。"
|
following-write: "フォローしたりフォロー解除する。"
|
||||||
drive-read: "ドライブを見る。"
|
drive-read: "ドライブを見る。"
|
||||||
drive-write: "ドライブを操作する。"
|
drive-write: "ドライブを操作する。"
|
||||||
notification-read: "通知を見る。"
|
notification-read: "通知を見る。"
|
||||||
notification-write: "通知を操作する。"
|
notification-write: "Benachrichtigungen verwalten."
|
||||||
cancel: "キャンセル"
|
cancel: "Abbrechen"
|
||||||
accept: "アクセスを許可"
|
accept: "Zugriff erlauben."
|
||||||
auth/views/index.vue:
|
auth/views/index.vue:
|
||||||
loading: "読み込み中"
|
loading: "Lädt"
|
||||||
denied: "アプリケーションの連携をキャンセルしました。"
|
denied: "Autorisierung der Anwendung wurde verweigert."
|
||||||
denied-paragraph: "このアプリがあなたのアカウントにアクセスすることはありません。"
|
denied-paragraph: "このアプリがあなたのアカウントにアクセスすることはありません。"
|
||||||
already-authorized: "このアプリは既に連携済みです"
|
already-authorized: "Diese Anwendung ist bereits autorisiert."
|
||||||
allowed: "アプリケーションの連携を許可しました"
|
allowed: "Autorisierung der Anwendung wurde erlaubt."
|
||||||
callback-url: "アプリケーションに戻っています"
|
callback-url: "アプリケーションに戻っています"
|
||||||
please-go-back: "アプリケーションに戻って、やっていってください。"
|
please-go-back: "Bitte gehe zurück zur Anwendung."
|
||||||
error: "セッションが存在しません。"
|
error: "Sitzung ist nicht vorhanden."
|
||||||
sign-in: "サインインしてください"
|
sign-in: "Bitte melde dich an."
|
||||||
common/views/components/games/reversi/reversi.vue:
|
common/views/components/games/reversi/reversi.vue:
|
||||||
matching:
|
matching:
|
||||||
waiting-for: "{}を待っています"
|
waiting-for: "Warten auf {}"
|
||||||
cancel: "キャンセル"
|
cancel: "Abbrechen"
|
||||||
common/views/components/games/reversi/reversi.game.vue:
|
common/views/components/games/reversi/reversi.game.vue:
|
||||||
surrender: "投了"
|
surrender: "Aufgeben"
|
||||||
surrendered: "投了により"
|
surrendered: "投了により"
|
||||||
is-llotheo: "石の少ない方が勝ち(ロセオ)"
|
is-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 Reversi"
|
title: "Misskey Reversi"
|
||||||
sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
|
sub-title: "Spiele Reversi mit deinen Freunden!"
|
||||||
invite: "招待"
|
invite: "Einladen"
|
||||||
rule: "遊び方"
|
rule: "Spielanleitung"
|
||||||
rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。"
|
rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。"
|
||||||
mode-invite: "招待"
|
mode-invite: "Einladen"
|
||||||
mode-invite-desc: "指定したユーザーと対戦するモードです。"
|
mode-invite-desc: "指定したユーザーと対戦するモードです。"
|
||||||
invitations: "対局の招待があります!"
|
invitations: "対局の招待があります!"
|
||||||
my-games: "自分の対局"
|
my-games: "自分の対局"
|
||||||
all-games: "みんなの対局"
|
all-games: "Alle Spiele"
|
||||||
enter-username: "ユーザー名を入力してください"
|
enter-username: "Bitte gib einen Benutzernamen ein"
|
||||||
game-state:
|
game-state:
|
||||||
ended: "終了"
|
ended: "Fertig"
|
||||||
playing: "進行中"
|
playing: "進行中"
|
||||||
common/views/components/games/reversi/reversi.room.vue:
|
common/views/components/games/reversi/reversi.room.vue:
|
||||||
settings-of-the-game: "ゲームの設定"
|
settings-of-the-game: "Spieleinstellungen"
|
||||||
choose-map: "マップを選択"
|
choose-map: "Wähle eine Karte"
|
||||||
random: "ランダム"
|
random: "Zufällige Auswahl"
|
||||||
black-or-white: "先手/後手"
|
black-or-white: "Schwarz/Weiß"
|
||||||
black-is: "{}が黒"
|
black-is: "Schwarz ist {}"
|
||||||
rules: "ルール"
|
rules: "Regeln"
|
||||||
is-llotheo: "石の少ない方が勝ち(ロセオ)"
|
is-llotheo: "石の少ない方が勝ち(ロセオ)"
|
||||||
looped-map: "ループマップ"
|
looped-map: "ループマップ"
|
||||||
can-put-everywhere: "どこでも置けるモード"
|
can-put-everywhere: "どこでも置けるモード"
|
||||||
settings-of-the-bot: "Botの設定"
|
settings-of-the-bot: "Botの設定"
|
||||||
this-game-is-started-soon: "ゲームは数秒後に開始されます"
|
this-game-is-started-soon: "ゲームは数秒後に開始されます"
|
||||||
waiting-for-other: "相手の準備が完了するのを待っています"
|
waiting-for-other: "Warte auf den Gegner"
|
||||||
waiting-for-me: "あなたの準備が完了するのを待っています"
|
waiting-for-me: "あなたの準備が完了するのを待っています"
|
||||||
waiting-for-both: "準備中"
|
waiting-for-both: "準備中"
|
||||||
cancel: "キャンセル"
|
cancel: "Abbrechen"
|
||||||
ready: "準備完了"
|
ready: "Bereit"
|
||||||
cancel-ready: "準備続行"
|
cancel-ready: "準備続行"
|
||||||
common/views/components/connect-failed.vue:
|
common/views/components/connect-failed.vue:
|
||||||
title: "Verbindung zum Server ist fehlgeschlagen"
|
title: "Verbindung zum Server ist fehlgeschlagen"
|
||||||
@@ -262,29 +277,29 @@ common/views/components/connect-failed.troubleshooter.vue:
|
|||||||
flush: "Cache leeren"
|
flush: "Cache leeren"
|
||||||
set-version: "Version angeben"
|
set-version: "Version angeben"
|
||||||
common/views/components/media-banner.vue:
|
common/views/components/media-banner.vue:
|
||||||
sensitive: "閲覧注意"
|
sensitive: "Dieser Inhalt ist NSFW"
|
||||||
click-to-show: "クリックして表示"
|
click-to-show: "Klicke zum den Inhalt anzusehen"
|
||||||
common/views/components/theme.vue:
|
common/views/components/theme.vue:
|
||||||
light-theme: "非ダークモード時に使用するテーマ"
|
light-theme: "Thema"
|
||||||
dark-theme: "ダークモード時に使用するテーマ"
|
dark-theme: "Thema während des Nachtmodus"
|
||||||
light-themes: "明るいテーマ"
|
light-themes: "Helles Thema"
|
||||||
dark-themes: "暗いテーマ"
|
dark-themes: "Dunkles Thema"
|
||||||
install-a-theme: "テーマのインストール"
|
install-a-theme: "テーマのインストール"
|
||||||
theme-code: "テーマコード"
|
theme-code: "テーマコード"
|
||||||
install: "インストール"
|
install: "Anwenden"
|
||||||
installed: "「{}」をインストールしました"
|
installed: "\"{}\" wurde installiert"
|
||||||
create-a-theme: "テーマの作成"
|
create-a-theme: "Thema erstellen"
|
||||||
save-created-theme: "テーマを保存"
|
save-created-theme: "Thema speichern"
|
||||||
primary-color: "プライマリ カラー"
|
primary-color: "Primäre Farbe"
|
||||||
secondary-color: "セカンダリ カラー"
|
secondary-color: "Sekundäre Farbe"
|
||||||
text-color: "文字色"
|
text-color: "Textfarbe"
|
||||||
base-theme: "ベーステーマ"
|
base-theme: "Basisthema"
|
||||||
base-theme-light: "Light"
|
base-theme-light: "Hell"
|
||||||
base-theme-dark: "Dark"
|
base-theme-dark: "Dunkel"
|
||||||
theme-name: "テーマ名"
|
theme-name: "Name des Themas"
|
||||||
preview-created-theme: "プレビュー"
|
preview-created-theme: "Vorschau"
|
||||||
invalid-theme: "テーマが正しくありません。"
|
invalid-theme: "Thema ist ungültig"
|
||||||
already-installed: "既にそのテーマはインストールされています。"
|
already-installed: "Thema ist bereits installiert"
|
||||||
saved: "保存しました"
|
saved: "保存しました"
|
||||||
manage-themes: "テーマの管理"
|
manage-themes: "テーマの管理"
|
||||||
builtin-themes: "標準テーマ"
|
builtin-themes: "標準テーマ"
|
||||||
@@ -293,10 +308,10 @@ common/views/components/theme.vue:
|
|||||||
select-theme: "テーマを選択してください"
|
select-theme: "テーマを選択してください"
|
||||||
uninstall: "アンインストール"
|
uninstall: "アンインストール"
|
||||||
uninstalled: "「{}」をアンインストールしました"
|
uninstalled: "「{}」をアンインストールしました"
|
||||||
author: "作者"
|
author: "Autor"
|
||||||
desc: "説明"
|
desc: "説明"
|
||||||
export: "エクスポート"
|
export: "Exportieren"
|
||||||
import: "インポート"
|
import: "Importieren"
|
||||||
import-by-code: "またはコードをペースト"
|
import-by-code: "またはコードをペースト"
|
||||||
theme-name-required: "テーマ名は必須です。"
|
theme-name-required: "テーマ名は必須です。"
|
||||||
common/views/components/cw-button.vue:
|
common/views/components/cw-button.vue:
|
||||||
@@ -334,7 +349,8 @@ common/views/components/nav.vue:
|
|||||||
common/views/components/note-menu.vue:
|
common/views/components/note-menu.vue:
|
||||||
detail: "詳細"
|
detail: "詳細"
|
||||||
copy-link: "リンクをコピー"
|
copy-link: "リンクをコピー"
|
||||||
favorite: "Diese Anmerkung favorisieren"
|
favorite: "Diese Notiz favorisieren"
|
||||||
|
unfavorite: "Aus Favoriten entfernen"
|
||||||
pin: "An die Profilseite pinnen"
|
pin: "An die Profilseite pinnen"
|
||||||
unpin: "ピン留め解除"
|
unpin: "ピン留め解除"
|
||||||
delete: "Löschen"
|
delete: "Löschen"
|
||||||
@@ -361,7 +377,7 @@ common/views/components/signin.vue:
|
|||||||
token: "Token"
|
token: "Token"
|
||||||
signing-in: "Melde an..."
|
signing-in: "Melde an..."
|
||||||
signin: "Anmelden"
|
signin: "Anmelden"
|
||||||
or: "または"
|
or: "Oder"
|
||||||
signin-with-twitter: "Twitterでログイン"
|
signin-with-twitter: "Twitterでログイン"
|
||||||
login-failed: "ログインできませんでした。ユーザー名とパスワードを確認してください。"
|
login-failed: "ログインできませんでした。ユーザー名とパスワードを確認してください。"
|
||||||
common/views/components/signup.vue:
|
common/views/components/signup.vue:
|
||||||
@@ -415,6 +431,25 @@ common/views/components/visibility-chooser.vue:
|
|||||||
common/views/components/trends.vue:
|
common/views/components/trends.vue:
|
||||||
count: "{}人が投稿"
|
count: "{}人が投稿"
|
||||||
empty: "トレンドなし"
|
empty: "トレンドなし"
|
||||||
|
common/views/components/profile-editor.vue:
|
||||||
|
title: "プロフィール"
|
||||||
|
name: "名前"
|
||||||
|
account: "アカウント"
|
||||||
|
location: "場所"
|
||||||
|
description: "自己紹介"
|
||||||
|
birthday: "誕生日"
|
||||||
|
avatar: "アイコン"
|
||||||
|
banner: "バナー"
|
||||||
|
is-cat: "このアカウントはCatです"
|
||||||
|
is-bot: "このアカウントはBotです"
|
||||||
|
is-locked: "フォローを承認制にする"
|
||||||
|
careful-bot: "Botからのフォローだけ承認制にする"
|
||||||
|
advanced: "その他"
|
||||||
|
privacy: "プライバシー"
|
||||||
|
save: "保存"
|
||||||
|
saved: "プロフィールを保存しました"
|
||||||
|
uploading: "アップロード中"
|
||||||
|
upload-failed: "アップロードに失敗しました"
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "Laden"
|
fetching: "Laden"
|
||||||
no-broadcasts: "Keine Broadcasts"
|
no-broadcasts: "Keine Broadcasts"
|
||||||
@@ -509,7 +544,7 @@ desktop/views/components/charts.vue:
|
|||||||
notes: "投稿"
|
notes: "投稿"
|
||||||
users: "ユーザー"
|
users: "ユーザー"
|
||||||
drive: "ドライブ"
|
drive: "ドライブ"
|
||||||
network: "ネットワーク"
|
network: "Netzwerk"
|
||||||
charts:
|
charts:
|
||||||
notes: "投稿の増減 (統合)"
|
notes: "投稿の増減 (統合)"
|
||||||
local-notes: "投稿の増減 (ローカル)"
|
local-notes: "投稿の増減 (ローカル)"
|
||||||
@@ -521,9 +556,9 @@ desktop/views/components/charts.vue:
|
|||||||
drive-total: "ドライブ使用量の積算"
|
drive-total: "ドライブ使用量の積算"
|
||||||
drive-files: "ドライブのファイル数の増減"
|
drive-files: "ドライブのファイル数の増減"
|
||||||
drive-files-total: "ドライブのファイル数の積算"
|
drive-files-total: "ドライブのファイル数の積算"
|
||||||
network-requests: "リクエスト"
|
network-requests: "Anfragen"
|
||||||
network-time: "応答時間"
|
network-time: "Antwortzeit"
|
||||||
network-usage: "通信量"
|
network-usage: "Datenverkehr"
|
||||||
desktop/views/components/choose-file-from-drive-window.vue:
|
desktop/views/components/choose-file-from-drive-window.vue:
|
||||||
choose-file: "Datei auswählen"
|
choose-file: "Datei auswählen"
|
||||||
upload: "Dateien von deinem PC hochladen"
|
upload: "Dateien von deinem PC hochladen"
|
||||||
@@ -557,7 +592,7 @@ desktop/views/components/drive.file.vue:
|
|||||||
open-in-app: "In der App öffnen"
|
open-in-app: "In der App öffnen"
|
||||||
add-app: "App hinzufügen"
|
add-app: "App hinzufügen"
|
||||||
rename-file: "Datei umbennen"
|
rename-file: "Datei umbennen"
|
||||||
input-new-file-name: "Geben Sie den neuen Dateinamen an"
|
input-new-file-name: "Gib den neuen Dateinamen an"
|
||||||
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:
|
||||||
@@ -639,25 +674,25 @@ desktop/views/components/note-detail.vue:
|
|||||||
location: "Ort"
|
location: "Ort"
|
||||||
renote: "Anmerkung"
|
renote: "Anmerkung"
|
||||||
add-reaction: "Reaktion hinzufügen"
|
add-reaction: "Reaktion hinzufügen"
|
||||||
desktop/views/components/notes.note.vue:
|
desktop/views/components/note.vue:
|
||||||
reposted-by: "Auch geteilt von"
|
reposted-by: "{}がRenote"
|
||||||
reply: "Antworten"
|
reply: "返信"
|
||||||
renote: "Anmerken"
|
renote: "Renote"
|
||||||
add-reaction: "Eine Reaktion hinzufügen"
|
add-reaction: "リアクション"
|
||||||
detail: "Zeige Details"
|
detail: "詳細"
|
||||||
private: "Dieser Beitrag ist eine privat"
|
private: "この投稿は非公開です"
|
||||||
deleted: "Dieser Beitrag wurde entfernt"
|
deleted: "この投稿は削除されました"
|
||||||
desktop/views/components/notes.vue:
|
desktop/views/components/notes.vue:
|
||||||
error: "Laden fehlgeschlagen."
|
error: "Laden fehlgeschlagen."
|
||||||
retry: "Erneut versuchen"
|
retry: "Erneut versuchen"
|
||||||
load-more: "もっと読み込む"
|
load-more: "Mehr laden"
|
||||||
desktop/views/components/notifications.vue:
|
desktop/views/components/notifications.vue:
|
||||||
more: "Mehr"
|
more: "Mehr"
|
||||||
empty: "Keine Benachrichtigungen"
|
empty: "Keine Benachrichtigungen"
|
||||||
desktop/views/components/post-form.vue:
|
desktop/views/components/post-form.vue:
|
||||||
add-visible-user: "+ユーザーを追加"
|
add-visible-user: "+Nutzer hinzufügen"
|
||||||
attach-location-information: "位置情報を添付する"
|
attach-location-information: "位置情報を添付する"
|
||||||
hide-contents: "内容を隠す"
|
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: "Beitragsform"
|
||||||
@@ -678,10 +713,10 @@ desktop/views/components/post-form.vue:
|
|||||||
text-remain: "{} Zeichen verbleibend"
|
text-remain: "{} Zeichen verbleibend"
|
||||||
recent-tags: "最近"
|
recent-tags: "最近"
|
||||||
click-to-tagging: "クリックでタグ付け"
|
click-to-tagging: "クリックでタグ付け"
|
||||||
visibility: "公開範囲"
|
visibility: "Sichtbarkeit"
|
||||||
geolocation-alert: "お使いの端末は位置情報に対応していません"
|
geolocation-alert: "お使いの端末は位置情報に対応していません"
|
||||||
error: "エラー"
|
error: "Fehler"
|
||||||
enter-username: "ユーザー名を入力してください"
|
enter-username: "Bitte gib einen Benutzernamen ein..."
|
||||||
annotations: "内容への注釈 (オプション)"
|
annotations: "内容への注釈 (オプション)"
|
||||||
desktop/views/components/post-form-window.vue:
|
desktop/views/components/post-form-window.vue:
|
||||||
note: "Neue Notiz"
|
note: "Neue Notiz"
|
||||||
@@ -725,30 +760,36 @@ desktop/views/components/settings.vue:
|
|||||||
advanced: "Erweiterte Einstellungen"
|
advanced: "Erweiterte Einstellungen"
|
||||||
api-via-stream: "API-Anfrage via stream"
|
api-via-stream: "API-Anfrage via stream"
|
||||||
api-via-stream-desc: "API-Anfrage über WebSocket statt native Aktualisierungs-API (für bessere Leistung). Diese Einstellung wird im Browser gespeichert."
|
api-via-stream-desc: "API-Anfrage über WebSocket statt native Aktualisierungs-API (für bessere Leistung). Diese Einstellung wird im Browser gespeichert."
|
||||||
|
deck-nav: "デッキ内ナビゲーション"
|
||||||
|
deck-nav-desc: "デッキを使用しているとき、ナビゲーションが発生する際にページ遷移を行わずに一時的なカラムで受けるようにします。"
|
||||||
|
deck-default: "デッキをデフォルトのUIにする"
|
||||||
display: "Erscheinungsbild und Anzeige"
|
display: "Erscheinungsbild und Anzeige"
|
||||||
customize: "Startseite anpassen"
|
customize: "Startseite anpassen"
|
||||||
|
wallpaper: "壁紙"
|
||||||
choose-wallpaper: "壁紙を選択"
|
choose-wallpaper: "壁紙を選択"
|
||||||
delete-wallpaper: "壁紙を削除"
|
delete-wallpaper: "壁紙を削除"
|
||||||
dark-mode: "Nacht Modus"
|
dark-mode: "Nacht Modus"
|
||||||
use-shadow: "UIに影を使用"
|
use-shadow: "UIに影を使用"
|
||||||
rounded-corners: "UIの角を丸める"
|
rounded-corners: "Abgerundete Ecken"
|
||||||
circle-icons: "Kreisförmige Icons"
|
circle-icons: "Kreisförmige Icons"
|
||||||
contrasted-acct: "ユーザー名にコントラストを付ける"
|
contrasted-acct: "ユーザー名にコントラストを付ける"
|
||||||
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
|
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
|
||||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||||
show-clock-on-header: "右上に時計を表示する"
|
show-clock-on-header: "右上に時計を表示する"
|
||||||
show-reply-target: "Zeige Antworten"
|
show-reply-target: "Zeige Antworten"
|
||||||
|
timeline: "タイムライン"
|
||||||
show-my-renotes: "Zeige meine Reposts auf der Zeitleiste"
|
show-my-renotes: "Zeige meine Reposts auf der Zeitleiste"
|
||||||
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
||||||
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
||||||
show-maps: "Karte anzeigen"
|
show-maps: "Karte anzeigen"
|
||||||
|
deck-column-align: "デッキのカラムの位置"
|
||||||
|
deck-column-align-center: "中央"
|
||||||
|
deck-column-align-left: "左"
|
||||||
sound: "Ton"
|
sound: "Ton"
|
||||||
enable-sounds: "Ton aktivieren"
|
enable-sounds: "Ton aktivieren"
|
||||||
enable-sounds-desc: "Spiel einen Ton ab beim Erhalten eines Beitrags bzw. einer Nachricht. Diese Einstellung wird im Browser gespeichert."
|
enable-sounds-desc: "Spiel einen Ton ab beim Erhalten eines Beitrags bzw. einer Nachricht. Diese Einstellung wird im Browser gespeichert."
|
||||||
volume: "Lautstärke"
|
volume: "Lautstärke"
|
||||||
test: "Test"
|
test: "Test"
|
||||||
mobile: "Mobil"
|
|
||||||
disable-via-mobile: "Diesen Beitrag nicht mit 'vom Handy' absenden"
|
|
||||||
language: "Sprache"
|
language: "Sprache"
|
||||||
pick-language: "Sprache auswählen"
|
pick-language: "Sprache auswählen"
|
||||||
recommended: "Empfohlen"
|
recommended: "Empfohlen"
|
||||||
@@ -784,6 +825,10 @@ desktop/views/components/settings.vue:
|
|||||||
tools: "Werkzeuge"
|
tools: "Werkzeuge"
|
||||||
task-manager: "Taskmanager"
|
task-manager: "Taskmanager"
|
||||||
third-parties: "サードパーティ"
|
third-parties: "サードパーティ"
|
||||||
|
navbar-position: "ナビゲーションバーの位置"
|
||||||
|
navbar-position-top: "上"
|
||||||
|
navbar-position-left: "左"
|
||||||
|
navbar-position-right: "右"
|
||||||
desktop/views/components/settings.2fa.vue:
|
desktop/views/components/settings.2fa.vue:
|
||||||
intro: "二段階認証を設定すると、サインイン時にパスワードだけでなく、予め登録しておいた物理的なデバイス(例えばあなたのスマートフォンなど)も必要になり、よりセキュリティが向上します。"
|
intro: "二段階認証を設定すると、サインイン時にパスワードだけでなく、予め登録しておいた物理的なデバイス(例えばあなたのスマートフォンなど)も必要になり、よりセキュリティが向上します。"
|
||||||
detail: "詳細..."
|
detail: "詳細..."
|
||||||
@@ -817,26 +862,12 @@ desktop/views/components/settings.drive.vue:
|
|||||||
desktop/views/components/settings.mute.vue:
|
desktop/views/components/settings.mute.vue:
|
||||||
no-users: "ミュートしているユーザーはいません"
|
no-users: "ミュートしているユーザーはいません"
|
||||||
desktop/views/components/settings.password.vue:
|
desktop/views/components/settings.password.vue:
|
||||||
reset: "パスワードを変更する"
|
reset: "Passwort ändern"
|
||||||
enter-current-password: "Derzeitiges Passwort eingeben"
|
enter-current-password: "Derzeitiges Passwort eingeben"
|
||||||
enter-new-password: "Neues Passwort eingeben"
|
enter-new-password: "Neues Passwort eingeben"
|
||||||
enter-new-password-again: "Neues Passwort erneut eingeben"
|
enter-new-password-again: "Neues Passwort erneut eingeben"
|
||||||
not-match: "新しいパスワードが一致しません"
|
not-match: "Passwörter stimmen nicht überein."
|
||||||
changed: "パスワードを変更しました"
|
changed: "Passwort geändert"
|
||||||
desktop/views/components/settings.profile.vue:
|
|
||||||
avatar: "アイコン"
|
|
||||||
choice-avatar: "画像を選択"
|
|
||||||
name: "名前"
|
|
||||||
location: "場所"
|
|
||||||
description: "自己紹介"
|
|
||||||
birthday: "誕生日"
|
|
||||||
save: "Profil aktualisieren"
|
|
||||||
locked-account: "アカウントの保護"
|
|
||||||
is-locked: "フォローを承認制にする"
|
|
||||||
other: "その他"
|
|
||||||
is-bot: "このアカウントはBotです"
|
|
||||||
is-cat: "このアカウントはCatです"
|
|
||||||
profile-updated: "プロフィールを更新しました"
|
|
||||||
desktop/views/components/sub-note-content.vue:
|
desktop/views/components/sub-note-content.vue:
|
||||||
private: "この投稿は非公開です"
|
private: "この投稿は非公開です"
|
||||||
deleted: "この投稿は削除されました"
|
deleted: "この投稿は削除されました"
|
||||||
@@ -896,7 +927,7 @@ desktop/views/components/user-preview.vue:
|
|||||||
desktop/views/components/users-list.vue:
|
desktop/views/components/users-list.vue:
|
||||||
all: "すべて"
|
all: "すべて"
|
||||||
iknow: "知り合い"
|
iknow: "知り合い"
|
||||||
load-more: "もっと"
|
load-more: "Mehr"
|
||||||
fetching: "Lade…"
|
fetching: "Lade…"
|
||||||
desktop/views/components/users-list-item.vue:
|
desktop/views/components/users-list-item.vue:
|
||||||
followed: "フォローされています"
|
followed: "フォローされています"
|
||||||
@@ -908,6 +939,8 @@ desktop/views/pages/admin/admin.vue:
|
|||||||
drive: "ドライブ"
|
drive: "ドライブ"
|
||||||
users: "ユーザー"
|
users: "ユーザー"
|
||||||
update: "更新"
|
update: "更新"
|
||||||
|
announcements: "お知らせ"
|
||||||
|
hashtags: "ハッシュタグ"
|
||||||
desktop/views/pages/admin/admin.dashboard.vue:
|
desktop/views/pages/admin/admin.dashboard.vue:
|
||||||
dashboard: "ダッシュボード"
|
dashboard: "ダッシュボード"
|
||||||
all-users: "全てのユーザー"
|
all-users: "全てのユーザー"
|
||||||
@@ -915,6 +948,9 @@ desktop/views/pages/admin/admin.dashboard.vue:
|
|||||||
all-notes: "全ての投稿"
|
all-notes: "全ての投稿"
|
||||||
original-notes: "このインスタンスの投稿"
|
original-notes: "このインスタンスの投稿"
|
||||||
invite: "招待"
|
invite: "招待"
|
||||||
|
banner-url: "Banner URL"
|
||||||
|
disableRegistration: "Disable new user registration"
|
||||||
|
disableLocalTimeline: "Disable the local timeline"
|
||||||
desktop/views/pages/admin/admin.suspend-user.vue:
|
desktop/views/pages/admin/admin.suspend-user.vue:
|
||||||
suspend-user: "ユーザーの凍結"
|
suspend-user: "ユーザーの凍結"
|
||||||
suspend: "凍結"
|
suspend: "凍結"
|
||||||
@@ -931,14 +967,23 @@ desktop/views/pages/admin/admin.unverify-user.vue:
|
|||||||
unverify-user: "ユーザーの公式アカウント解除"
|
unverify-user: "ユーザーの公式アカウント解除"
|
||||||
unverify: "公式アカウントを解除する"
|
unverify: "公式アカウントを解除する"
|
||||||
unverified: "公式アカウントを解除しました"
|
unverified: "公式アカウントを解除しました"
|
||||||
|
desktop/views/pages/admin/admin.announcements.vue:
|
||||||
|
announcements: "お知らせ"
|
||||||
|
desktop/views/pages/admin/admin.hashtags.vue:
|
||||||
|
hided-tags: "Hidden Tags"
|
||||||
desktop/views/pages/deck/deck.tl-column.vue:
|
desktop/views/pages/deck/deck.tl-column.vue:
|
||||||
is-media-only: "メディア投稿のみ"
|
is-media-only: "メディア投稿のみ"
|
||||||
is-media-view: "メディアビュー"
|
is-media-view: "メディアビュー"
|
||||||
edit: "オプション"
|
edit: "オプション"
|
||||||
desktop/views/pages/deck/deck.note.vue:
|
desktop/views/pages/deck/deck.user-column.vue:
|
||||||
reposted-by: "{}がRenote"
|
posts: "投稿"
|
||||||
private: "この投稿は非公開です"
|
following: "フォロー"
|
||||||
deleted: "この投稿は削除されました"
|
followers: "フォロワー"
|
||||||
|
images: "画像"
|
||||||
|
activity: "アクティビティ"
|
||||||
|
timeline: "タイムライン"
|
||||||
|
pinned-notes: "ピン留めされた投稿"
|
||||||
|
push-to-a-list: "リストに追加"
|
||||||
desktop/views/pages/stats/stats.vue:
|
desktop/views/pages/stats/stats.vue:
|
||||||
all-users: "全てのユーザー"
|
all-users: "全てのユーザー"
|
||||||
original-users: "このインスタンスのユーザー"
|
original-users: "このインスタンスのユーザー"
|
||||||
@@ -991,9 +1036,6 @@ desktop/views/pages/user/user.friends.vue:
|
|||||||
no-users: "よく話すユーザーはいません"
|
no-users: "よく話すユーザーはいません"
|
||||||
desktop/views/pages/user/user.vue:
|
desktop/views/pages/user/user.vue:
|
||||||
is-suspended: "このユーザーは凍結されています。"
|
is-suspended: "このユーザーは凍結されています。"
|
||||||
is-remote: "このユーザーはリモートユーザーです。"
|
|
||||||
view-remote: "正確な情報を見る"
|
|
||||||
desktop/views/pages/user/user.home.vue:
|
|
||||||
last-used-at: "最終アクセス"
|
last-used-at: "最終アクセス"
|
||||||
desktop/views/pages/user/user.photos.vue:
|
desktop/views/pages/user/user.photos.vue:
|
||||||
title: "フォト"
|
title: "フォト"
|
||||||
@@ -1014,6 +1056,10 @@ desktop/views/pages/user/user.header.vue:
|
|||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
followers: "フォロワー"
|
followers: "フォロワー"
|
||||||
is-bot: "このアカウントはBotです"
|
is-bot: "このアカウントはBotです"
|
||||||
|
years-old: "歳"
|
||||||
|
year: "年"
|
||||||
|
month: "月"
|
||||||
|
day: "日"
|
||||||
desktop/views/pages/user/user.timeline.vue:
|
desktop/views/pages/user/user.timeline.vue:
|
||||||
default: "投稿"
|
default: "投稿"
|
||||||
with-replies: "投稿と返信"
|
with-replies: "投稿と返信"
|
||||||
@@ -1073,6 +1119,8 @@ mobile/views/components/drive.file-detail.vue:
|
|||||||
hash: "ハッシュ (md5)"
|
hash: "ハッシュ (md5)"
|
||||||
exif: "EXIF"
|
exif: "EXIF"
|
||||||
nsfw: "閲覧注意"
|
nsfw: "閲覧注意"
|
||||||
|
mark-as-sensitive: "閲覧注意に設定"
|
||||||
|
unmark-as-sensitive: "閲覧注意を解除"
|
||||||
mobile/views/components/media-image.vue:
|
mobile/views/components/media-image.vue:
|
||||||
sensitive: "閲覧注意"
|
sensitive: "閲覧注意"
|
||||||
click-to-show: "クリックして表示"
|
click-to-show: "クリックして表示"
|
||||||
@@ -1157,19 +1205,19 @@ mobile/views/components/ui.nav.vue:
|
|||||||
mobile/views/components/user-timeline.vue:
|
mobile/views/components/user-timeline.vue:
|
||||||
no-notes: "このユーザーは投稿していないようです。"
|
no-notes: "このユーザーは投稿していないようです。"
|
||||||
no-notes-with-media: "メディア付き投稿はありません。"
|
no-notes-with-media: "メディア付き投稿はありません。"
|
||||||
load-more: "もっと"
|
load-more: "Mehr"
|
||||||
mobile/views/components/users-list.vue:
|
mobile/views/components/users-list.vue:
|
||||||
all: "すべて"
|
all: "すべて"
|
||||||
known: "知り合い"
|
known: "知り合い"
|
||||||
load-more: "もっと"
|
load-more: "Mehr"
|
||||||
mobile/views/pages/favorites.vue:
|
mobile/views/pages/favorites.vue:
|
||||||
title: "お気に入り"
|
title: "Favoriten"
|
||||||
mobile/views/pages/user-lists.vue:
|
mobile/views/pages/user-lists.vue:
|
||||||
title: "リスト"
|
title: "リスト"
|
||||||
enter-list-name: "リスト名を入力してください"
|
enter-list-name: "リスト名を入力してください"
|
||||||
mobile/views/pages/drive.vue:
|
mobile/views/pages/drive.vue:
|
||||||
drive: "ドライブ"
|
drive: "ドライブ"
|
||||||
more: "もっと見る"
|
more: "Mehr laden"
|
||||||
mobile/views/pages/signup.vue:
|
mobile/views/pages/signup.vue:
|
||||||
lets-start: "📦 始めましょう"
|
lets-start: "📦 始めましょう"
|
||||||
mobile/views/pages/followers.vue:
|
mobile/views/pages/followers.vue:
|
||||||
@@ -1213,23 +1261,6 @@ mobile/views/pages/notifications.vue:
|
|||||||
read-all: "すべての通知を既読にしますか?"
|
read-all: "すべての通知を既読にしますか?"
|
||||||
mobile/views/pages/games/reversi.vue:
|
mobile/views/pages/games/reversi.vue:
|
||||||
reversi: "リバーシ"
|
reversi: "リバーシ"
|
||||||
mobile/views/pages/settings/settings.profile.vue:
|
|
||||||
title: "Profil"
|
|
||||||
name: "名前"
|
|
||||||
account: "アカウント"
|
|
||||||
location: "場所"
|
|
||||||
description: "自己紹介"
|
|
||||||
birthday: "誕生日"
|
|
||||||
avatar: "アイコン"
|
|
||||||
banner: "バナー"
|
|
||||||
is-cat: "このアカウントはCatです"
|
|
||||||
is-locked: "フォローを承認制にする"
|
|
||||||
advanced: "その他"
|
|
||||||
privacy: "プライバシー"
|
|
||||||
save: "保存"
|
|
||||||
saved: "Profil wurde aktualisiert"
|
|
||||||
uploading: "アップロード中"
|
|
||||||
upload-failed: "アップロードに失敗しました"
|
|
||||||
mobile/views/pages/search.vue:
|
mobile/views/pages/search.vue:
|
||||||
search: "検索"
|
search: "検索"
|
||||||
empty: "「{}」に関する投稿は見つかりませんでした。"
|
empty: "「{}」に関する投稿は見つかりませんでした。"
|
||||||
@@ -1285,6 +1316,7 @@ mobile/views/pages/settings.vue:
|
|||||||
signout: "サインアウト"
|
signout: "サインアウト"
|
||||||
sound: "サウンド"
|
sound: "サウンド"
|
||||||
enable-sounds: "サウンドを有効にする"
|
enable-sounds: "サウンドを有効にする"
|
||||||
|
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
|
||||||
mobile/views/pages/user.vue:
|
mobile/views/pages/user.vue:
|
||||||
follows-you: "フォローされています"
|
follows-you: "フォローされています"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
@@ -1294,13 +1326,11 @@ mobile/views/pages/user.vue:
|
|||||||
timeline: "タイムライン"
|
timeline: "タイムライン"
|
||||||
media: "メディア"
|
media: "メディア"
|
||||||
is-suspended: "このユーザーは凍結されています。"
|
is-suspended: "このユーザーは凍結されています。"
|
||||||
is-remote: "このユーザーはリモートユーザーです。"
|
|
||||||
view-remote: "正確な情報を見る"
|
|
||||||
mobile/views/pages/user/home.vue:
|
mobile/views/pages/user/home.vue:
|
||||||
recent-notes: "最近の投稿"
|
recent-notes: "最近の投稿"
|
||||||
images: "画像"
|
images: "画像"
|
||||||
activity: "アクティビティ"
|
activity: "アクティビティ"
|
||||||
keywords: "キーワード"
|
keywords: "Schlagwörter"
|
||||||
domains: "頻出ドメイン"
|
domains: "頻出ドメイン"
|
||||||
frequently-replied-users: "よく会話するユーザー"
|
frequently-replied-users: "よく会話するユーザー"
|
||||||
followers-you-know: "知り合いのフォロワー"
|
followers-you-know: "知り合いのフォロワー"
|
||||||
@@ -1341,3 +1371,29 @@ docs:
|
|||||||
description: "説明"
|
description: "説明"
|
||||||
dev/views/index.vue:
|
dev/views/index.vue:
|
||||||
manage-apps: "アプリの管理"
|
manage-apps: "アプリの管理"
|
||||||
|
dev/views/apps.vue:
|
||||||
|
manage-apps: "アプリを管理"
|
||||||
|
create-app: "アプリ作成"
|
||||||
|
app-missing: "アプリなし"
|
||||||
|
dev/views/new-app.vue:
|
||||||
|
create-app: "アプリケーションの作成"
|
||||||
|
app-name: "アプリケーション名"
|
||||||
|
app-name-desc: "あなたのアプリの名称。"
|
||||||
|
app-name-ex: "ex) Misskey for iOS"
|
||||||
|
app-overview: "アプリの概要"
|
||||||
|
app-desc: "あなたのアプリの簡単な説明や紹介。"
|
||||||
|
app-desc-ex: "ex) Misskey iOSクライアント。"
|
||||||
|
callback-url: "コールバックURL (オプション)"
|
||||||
|
callback-url-desc: "ユーザーが認証フォームで認証した際にリダイレクトするURLを設定できます。"
|
||||||
|
authority: "権限"
|
||||||
|
authority-desc: "ここで要求した機能だけがAPIからアクセスできます。"
|
||||||
|
authority-warning: "アプリ作成後も変更できますが、新たな権限を付与する場合、その時点で関連付けられているユーザーキーはすべて無効になります。"
|
||||||
|
account-read: "アカウントの情報を見る。"
|
||||||
|
account-write: "アカウントの情報を操作する。"
|
||||||
|
note-write: "投稿する。"
|
||||||
|
reaction-write: "リアクションしたりリアクションをキャンセルする。"
|
||||||
|
following-write: "フォローしたりフォロー解除する。"
|
||||||
|
drive-read: "ドライブを見る。"
|
||||||
|
drive-write: "ドライブを操作する。"
|
||||||
|
notification-read: "通知を見る。"
|
||||||
|
notification-write: "通知を操作する。"
|
||||||
|
|||||||
@@ -25,6 +25,14 @@ common:
|
|||||||
application-authorization: "Application authorizations"
|
application-authorization: "Application authorizations"
|
||||||
close: "Close"
|
close: "Close"
|
||||||
do-not-copy-paste: "Please do not enter or paste the code here. Account may be compromised."
|
do-not-copy-paste: "Please do not enter or paste the code here. Account may be compromised."
|
||||||
|
BSoD:
|
||||||
|
fatal-error: "A fatal error has occurred :("
|
||||||
|
update-browser-os: "You might resolve to update the version of your browser (or OS)."
|
||||||
|
error-code: "Error code"
|
||||||
|
browser-version: "Browser version"
|
||||||
|
client-version: "Client version"
|
||||||
|
email-support: "If the problem persists, contact syuilotan@yahoo.co.jp please on the above information."
|
||||||
|
thanks: "Thank you for using Misskey."
|
||||||
got-it: "Got it!"
|
got-it: "Got it!"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "Customization tips"
|
title: "Customization tips"
|
||||||
@@ -110,11 +118,17 @@ common:
|
|||||||
verified-user: "Verified account"
|
verified-user: "Verified account"
|
||||||
disable-animated-mfm: "Disable animated texts in a post"
|
disable-animated-mfm: "Disable animated texts in a post"
|
||||||
always-show-nsfw: "Always show NSFW contents"
|
always-show-nsfw: "Always show NSFW contents"
|
||||||
always-mark-nsfw: "Always post with a warning about media attachment"
|
always-mark-nsfw: "Always mark posts with media attachments as NSFW"
|
||||||
show-full-acct: "Do not omit the hostname from the username"
|
show-full-acct: "Do not omit the hostname from the username"
|
||||||
reduce-motion: "Reduce motion in UI"
|
reduce-motion: "Reduce motion in UI"
|
||||||
this-setting-is-this-device-only: "Only for this device"
|
this-setting-is-this-device-only: "Only for this device"
|
||||||
do-not-use-in-production: 'As this is for development, do not use this in production.'
|
do-not-use-in-production: 'As this is for development, do not use this in production.'
|
||||||
|
is-remote-user: "This user information is copied."
|
||||||
|
is-remote-post: "This post information is a copy."
|
||||||
|
view-on-remote: "View it on remote"
|
||||||
|
error:
|
||||||
|
title: 'Something happened :('
|
||||||
|
retry: 'Retry'
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "Draw"
|
drawn: "Draw"
|
||||||
my-turn: "Your turn"
|
my-turn: "Your turn"
|
||||||
@@ -170,6 +184,7 @@ common:
|
|||||||
rename: "Rename"
|
rename: "Rename"
|
||||||
stack-left: "Stack to the left"
|
stack-left: "Stack to the left"
|
||||||
pop-right: "Dock on the right"
|
pop-right: "Dock on the right"
|
||||||
|
dev: "Failed to create the application. Please try again."
|
||||||
auth/views/form.vue:
|
auth/views/form.vue:
|
||||||
share-access: "Would you <b>allow</b> <i>{{ app.name }}</i> to access your account?"
|
share-access: "Would you <b>allow</b> <i>{{ app.name }}</i> to access your account?"
|
||||||
permission-ask: "This application requires the following permissions:"
|
permission-ask: "This application requires the following permissions:"
|
||||||
@@ -265,40 +280,40 @@ common/views/components/media-banner.vue:
|
|||||||
sensitive: "NSFW"
|
sensitive: "NSFW"
|
||||||
click-to-show: "Click to show"
|
click-to-show: "Click to show"
|
||||||
common/views/components/theme.vue:
|
common/views/components/theme.vue:
|
||||||
light-theme: "非ダークモード時に使用するテーマ"
|
light-theme: "Theme"
|
||||||
dark-theme: "ダークモード時に使用するテーマ"
|
dark-theme: "Theme during dark mode"
|
||||||
light-themes: "明るいテーマ"
|
light-themes: "Light theme"
|
||||||
dark-themes: "暗いテーマ"
|
dark-themes: "Dark theme"
|
||||||
install-a-theme: "テーマのインストール"
|
install-a-theme: "Install a theme"
|
||||||
theme-code: "テーマコード"
|
theme-code: "Theme code"
|
||||||
install: "インストール"
|
install: "Install"
|
||||||
installed: "「{}」をインストールしました"
|
installed: "\"{}\" has been installed"
|
||||||
create-a-theme: "テーマの作成"
|
create-a-theme: "Create a theme"
|
||||||
save-created-theme: "テーマを保存"
|
save-created-theme: "Save a theme"
|
||||||
primary-color: "プライマリ カラー"
|
primary-color: "Primary color"
|
||||||
secondary-color: "セカンダリ カラー"
|
secondary-color: "Secondary color"
|
||||||
text-color: "文字色"
|
text-color: "Text color"
|
||||||
base-theme: "ベーステーマ"
|
base-theme: "Base theme"
|
||||||
base-theme-light: "Light"
|
base-theme-light: "Light"
|
||||||
base-theme-dark: "Dark"
|
base-theme-dark: "Dark"
|
||||||
theme-name: "テーマ名"
|
theme-name: "Theme name"
|
||||||
preview-created-theme: "プレビュー"
|
preview-created-theme: "Preview"
|
||||||
invalid-theme: "テーマが正しくありません。"
|
invalid-theme: "Not valid theme"
|
||||||
already-installed: "既にそのテーマはインストールされています。"
|
already-installed: "This theme is already installed."
|
||||||
saved: "保存しました"
|
saved: "Saved"
|
||||||
manage-themes: "テーマの管理"
|
manage-themes: "Themes manager"
|
||||||
builtin-themes: "標準テーマ"
|
builtin-themes: "Standard themes"
|
||||||
my-themes: "マイテーマ"
|
my-themes: "My themes"
|
||||||
installed-themes: "インストールされたテーマ"
|
installed-themes: "Installed themes"
|
||||||
select-theme: "テーマを選択してください"
|
select-theme: "Select your theme"
|
||||||
uninstall: "アンインストール"
|
uninstall: "Uninstall"
|
||||||
uninstalled: "「{}」をアンインストールしました"
|
uninstalled: "\"{}\" has been uninstalled"
|
||||||
author: "作者"
|
author: "Author"
|
||||||
desc: "説明"
|
desc: "Description"
|
||||||
export: "エクスポート"
|
export: "Export"
|
||||||
import: "インポート"
|
import: "Import"
|
||||||
import-by-code: "またはコードをペースト"
|
import-by-code: "or paste code"
|
||||||
theme-name-required: "テーマ名は必須です。"
|
theme-name-required: "Theme name is required"
|
||||||
common/views/components/cw-button.vue:
|
common/views/components/cw-button.vue:
|
||||||
hide: "Hide"
|
hide: "Hide"
|
||||||
show: "See more"
|
show: "See more"
|
||||||
@@ -335,8 +350,9 @@ common/views/components/note-menu.vue:
|
|||||||
detail: "Details"
|
detail: "Details"
|
||||||
copy-link: "Copy link"
|
copy-link: "Copy link"
|
||||||
favorite: "Favorite this note"
|
favorite: "Favorite this note"
|
||||||
|
unfavorite: "Unfavorite"
|
||||||
pin: "Pin to your profile"
|
pin: "Pin to your profile"
|
||||||
unpin: "ピン留め解除"
|
unpin: "Unpin"
|
||||||
delete: "Delete"
|
delete: "Delete"
|
||||||
delete-confirm: "Delete this post?"
|
delete-confirm: "Delete this post?"
|
||||||
remote: "Show original note"
|
remote: "Show original note"
|
||||||
@@ -415,6 +431,25 @@ common/views/components/visibility-chooser.vue:
|
|||||||
common/views/components/trends.vue:
|
common/views/components/trends.vue:
|
||||||
count: "{} users mentioned"
|
count: "{} users mentioned"
|
||||||
empty: "No popular hashtag trends"
|
empty: "No popular hashtag trends"
|
||||||
|
common/views/components/profile-editor.vue:
|
||||||
|
title: "Profile"
|
||||||
|
name: "Name"
|
||||||
|
account: "Account"
|
||||||
|
location: "Location"
|
||||||
|
description: "About me"
|
||||||
|
birthday: "Birthday"
|
||||||
|
avatar: "Avatar"
|
||||||
|
banner: "Banner"
|
||||||
|
is-cat: "This account is a Cat"
|
||||||
|
is-bot: "This account is a Bot"
|
||||||
|
is-locked: "Follower requests require approval"
|
||||||
|
careful-bot: "Follower requests from bots require approval"
|
||||||
|
advanced: "Advanced"
|
||||||
|
privacy: "Privacy"
|
||||||
|
save: "Update profile"
|
||||||
|
saved: "Profile updated successfully"
|
||||||
|
uploading: "Uploading"
|
||||||
|
upload-failed: "Failed to upload"
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "Fetching"
|
fetching: "Fetching"
|
||||||
no-broadcasts: "No announcements"
|
no-broadcasts: "No announcements"
|
||||||
@@ -462,7 +497,7 @@ common/views/widgets/tips.vue:
|
|||||||
tips-line10: "Using the Time Machine widget makes it easy to trace back to the past timeline."
|
tips-line10: "Using the Time Machine widget makes it easy to trace back to the past timeline."
|
||||||
tips-line11: "You can pin posts to user page by clicking on \"...\""
|
tips-line11: "You can pin posts to user page by clicking on \"...\""
|
||||||
tips-line13: "All the files attached to the post are saved to Drive."
|
tips-line13: "All the files attached to the post are saved to Drive."
|
||||||
tips-line14: "While customizing the home, you can right click on the widget and change the design."
|
tips-line14: "While customizing your home layout, you can right click on a widget to change its design."
|
||||||
tips-line17: "Surrounding the text with ** ** will highlight it."
|
tips-line17: "Surrounding the text with ** ** will highlight it."
|
||||||
tips-line19: "Several windows can be detached outside the browser."
|
tips-line19: "Several windows can be detached outside the browser."
|
||||||
tips-line20: "The percentage of the calendar widget shows the percentage of time elapsed."
|
tips-line20: "The percentage of the calendar widget shows the percentage of time elapsed."
|
||||||
@@ -514,13 +549,13 @@ desktop/views/components/charts.vue:
|
|||||||
notes: "The number of posts: increase/decrease (Combined)"
|
notes: "The number of posts: increase/decrease (Combined)"
|
||||||
local-notes: "The number of posts: increase/decrease (Local)"
|
local-notes: "The number of posts: increase/decrease (Local)"
|
||||||
remote-notes: "The number of posts: increase/decrease (Remote)"
|
remote-notes: "The number of posts: increase/decrease (Remote)"
|
||||||
notes-total: "投稿の積算"
|
notes-total: "Total posts"
|
||||||
users: "The number of users: increase/decrease"
|
users: "The number of users: increase/decrease"
|
||||||
users-total: "ユーザーの積算"
|
users-total: "Total users"
|
||||||
drive: "Capacity used as the storage: increase/decrease"
|
drive: "Capacity used as the storage: increase/decrease"
|
||||||
drive-total: "ドライブ使用量の積算"
|
drive-total: "Total usage of Drive"
|
||||||
drive-files: "The number of files on the storage: increase/decrease"
|
drive-files: "The number of files on the storage: increase/decrease"
|
||||||
drive-files-total: "ドライブのファイル数の積算"
|
drive-files-total: "Total number of files on Drive"
|
||||||
network-requests: "Requests"
|
network-requests: "Requests"
|
||||||
network-time: "Response time"
|
network-time: "Response time"
|
||||||
network-usage: "Traffic"
|
network-usage: "Traffic"
|
||||||
@@ -639,14 +674,14 @@ desktop/views/components/note-detail.vue:
|
|||||||
location: "Location"
|
location: "Location"
|
||||||
renote: "Repost"
|
renote: "Repost"
|
||||||
add-reaction: "Add a reaction"
|
add-reaction: "Add a reaction"
|
||||||
desktop/views/components/notes.note.vue:
|
desktop/views/components/note.vue:
|
||||||
reposted-by: "Reposted by {}"
|
reposted-by: "Reposted by {}"
|
||||||
reply: "Reply"
|
reply: "Reply"
|
||||||
renote: "Repost"
|
renote: "Renote"
|
||||||
add-reaction: "Add a reaction"
|
add-reaction: "Add a reaction"
|
||||||
detail: "Show details"
|
detail: "Details"
|
||||||
private: "Post is private"
|
private: "This post is private"
|
||||||
deleted: "Post has been deleted"
|
deleted: "This post has been deleted"
|
||||||
desktop/views/components/notes.vue:
|
desktop/views/components/notes.vue:
|
||||||
error: "Loading failed."
|
error: "Loading failed."
|
||||||
retry: "Retry"
|
retry: "Retry"
|
||||||
@@ -725,30 +760,36 @@ desktop/views/components/settings.vue:
|
|||||||
advanced: "Advanced settings"
|
advanced: "Advanced settings"
|
||||||
api-via-stream: "API request via stream"
|
api-via-stream: "API request via stream"
|
||||||
api-via-stream-desc: "API request is performed via the WebSocket connection instead of native fetch API (for better performance). This setting is stored in the browser."
|
api-via-stream-desc: "API request is performed via the WebSocket connection instead of native fetch API (for better performance). This setting is stored in the browser."
|
||||||
|
deck-nav: "Transitionless deck navigation"
|
||||||
|
deck-nav-desc: "You get a temporary column without page transitions during navigation when using the deck."
|
||||||
|
deck-default: "Use Deck as default UI"
|
||||||
display: "Design and display"
|
display: "Design and display"
|
||||||
customize: "Customize home layout"
|
customize: "Customize home layout"
|
||||||
|
wallpaper: "Wallpaper"
|
||||||
choose-wallpaper: "Choose a background"
|
choose-wallpaper: "Choose a background"
|
||||||
delete-wallpaper: "Remove background"
|
delete-wallpaper: "Remove background"
|
||||||
dark-mode: "Dark Mode"
|
dark-mode: "Dark Mode"
|
||||||
use-shadow: "UIに影を使用"
|
use-shadow: "Use shadows in the UI"
|
||||||
rounded-corners: "UIの角を丸める"
|
rounded-corners: "Round corners of UI"
|
||||||
circle-icons: "Use circle icons"
|
circle-icons: "Use circle icons"
|
||||||
contrasted-acct: "Add contrast to username"
|
contrasted-acct: "Add contrast to username"
|
||||||
post-form-on-timeline: "Display post form at the top of the timeline"
|
post-form-on-timeline: "Display post form at the top of the timeline"
|
||||||
suggest-recent-hashtags: "Show recent popular hashtags on the post form"
|
suggest-recent-hashtags: "Show recent popular hashtags on the post form"
|
||||||
show-clock-on-header: "Show clock on upper-right"
|
show-clock-on-header: "Show clock on upper-right"
|
||||||
show-reply-target: "Display reply target"
|
show-reply-target: "Display reply target"
|
||||||
|
timeline: "Timeline"
|
||||||
show-my-renotes: "Show my renotes in the timeline"
|
show-my-renotes: "Show my renotes in the timeline"
|
||||||
show-renoted-my-notes: "Show renoted my posts in timelines"
|
show-renoted-my-notes: "Show renoted posts of mine in timelines"
|
||||||
show-local-renotes: "Show renoted local posts in timelines"
|
show-local-renotes: "Show renoted local posts in timelines"
|
||||||
show-maps: "Display a map to show the location"
|
show-maps: "Display a map to show the location"
|
||||||
|
deck-column-align: "Deck column alignment"
|
||||||
|
deck-column-align-center: "Center"
|
||||||
|
deck-column-align-left: "Left"
|
||||||
sound: "Sound"
|
sound: "Sound"
|
||||||
enable-sounds: "Enable sound"
|
enable-sounds: "Enable sound"
|
||||||
enable-sounds-desc: "Play a sound when you receive a post/message. This setting is stored in the browser."
|
enable-sounds-desc: "Play a sound when you receive a post/message. This setting is stored in the browser."
|
||||||
volume: "Volume"
|
volume: "Volume"
|
||||||
test: "Test"
|
test: "Test"
|
||||||
mobile: "Mobile"
|
|
||||||
disable-via-mobile: "Don't mark the post as 'from mobile'"
|
|
||||||
language: "Language"
|
language: "Language"
|
||||||
pick-language: "Select a language"
|
pick-language: "Select a language"
|
||||||
recommended: "Recommended"
|
recommended: "Recommended"
|
||||||
@@ -784,6 +825,10 @@ desktop/views/components/settings.vue:
|
|||||||
tools: "Tools"
|
tools: "Tools"
|
||||||
task-manager: "Task Manager"
|
task-manager: "Task Manager"
|
||||||
third-parties: "Third-parties"
|
third-parties: "Third-parties"
|
||||||
|
navbar-position: "Navigation bar position"
|
||||||
|
navbar-position-top: "Top"
|
||||||
|
navbar-position-left: "Left"
|
||||||
|
navbar-position-right: "Right"
|
||||||
desktop/views/components/settings.2fa.vue:
|
desktop/views/components/settings.2fa.vue:
|
||||||
intro: "If you set up 2-step verification, you will not only need a password at sign-in, but also a pre-registered physical device (such as your smartphone), which will improve security."
|
intro: "If you set up 2-step verification, you will not only need a password at sign-in, but also a pre-registered physical device (such as your smartphone), which will improve security."
|
||||||
detail: "Details…"
|
detail: "Details…"
|
||||||
@@ -823,20 +868,6 @@ desktop/views/components/settings.password.vue:
|
|||||||
enter-new-password-again: "Enter new password again"
|
enter-new-password-again: "Enter new password again"
|
||||||
not-match: "The new passwords do not match"
|
not-match: "The new passwords do not match"
|
||||||
changed: "Password updated"
|
changed: "Password updated"
|
||||||
desktop/views/components/settings.profile.vue:
|
|
||||||
avatar: "Avatar"
|
|
||||||
choice-avatar: "Select an image"
|
|
||||||
name: "Name"
|
|
||||||
location: "Location"
|
|
||||||
description: "Description"
|
|
||||||
birthday: "Birthday"
|
|
||||||
save: "Update profile"
|
|
||||||
locked-account: "Protect your account"
|
|
||||||
is-locked: "Follow request needs approval"
|
|
||||||
other: "Other"
|
|
||||||
is-bot: "This account is a Bot"
|
|
||||||
is-cat: "This account is a Cat"
|
|
||||||
profile-updated: "Your profile has been updated"
|
|
||||||
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"
|
||||||
@@ -869,7 +900,7 @@ desktop/views/components/ui.header.account.vue:
|
|||||||
admin: "Admin"
|
admin: "Admin"
|
||||||
settings: "Settings"
|
settings: "Settings"
|
||||||
signout: "Sign out"
|
signout: "Sign out"
|
||||||
dark: "Submerge in dark"
|
dark: "Toggle dark mode"
|
||||||
desktop/views/components/ui.header.nav.vue:
|
desktop/views/components/ui.header.nav.vue:
|
||||||
home: "Home"
|
home: "Home"
|
||||||
deck: "Deck"
|
deck: "Deck"
|
||||||
@@ -908,6 +939,8 @@ desktop/views/pages/admin/admin.vue:
|
|||||||
drive: "Drive"
|
drive: "Drive"
|
||||||
users: "Users"
|
users: "Users"
|
||||||
update: "Updates"
|
update: "Updates"
|
||||||
|
announcements: "Announcements"
|
||||||
|
hashtags: "Hashtags"
|
||||||
desktop/views/pages/admin/admin.dashboard.vue:
|
desktop/views/pages/admin/admin.dashboard.vue:
|
||||||
dashboard: "Dashboard"
|
dashboard: "Dashboard"
|
||||||
all-users: "All Users"
|
all-users: "All Users"
|
||||||
@@ -915,6 +948,9 @@ desktop/views/pages/admin/admin.dashboard.vue:
|
|||||||
all-notes: "All the posts"
|
all-notes: "All the posts"
|
||||||
original-notes: "Posts on this instance"
|
original-notes: "Posts on this instance"
|
||||||
invite: "Invite"
|
invite: "Invite"
|
||||||
|
banner-url: "Banner URL"
|
||||||
|
disableRegistration: "Disable new user registration"
|
||||||
|
disableLocalTimeline: "Disable the local timeline"
|
||||||
desktop/views/pages/admin/admin.suspend-user.vue:
|
desktop/views/pages/admin/admin.suspend-user.vue:
|
||||||
suspend-user: "Suspend a user"
|
suspend-user: "Suspend a user"
|
||||||
suspend: "Suspend"
|
suspend: "Suspend"
|
||||||
@@ -931,14 +967,23 @@ desktop/views/pages/admin/admin.unverify-user.vue:
|
|||||||
unverify-user: "User account unverification settings"
|
unverify-user: "User account unverification settings"
|
||||||
unverify: "Unverify account"
|
unverify: "Unverify account"
|
||||||
unverified: "The account is now being unverified"
|
unverified: "The account is now being unverified"
|
||||||
|
desktop/views/pages/admin/admin.announcements.vue:
|
||||||
|
announcements: "Announcements"
|
||||||
|
desktop/views/pages/admin/admin.hashtags.vue:
|
||||||
|
hided-tags: "Hidden Tags"
|
||||||
desktop/views/pages/deck/deck.tl-column.vue:
|
desktop/views/pages/deck/deck.tl-column.vue:
|
||||||
is-media-only: "Only media posts"
|
is-media-only: "Only media posts"
|
||||||
is-media-view: "Media view"
|
is-media-view: "Media view"
|
||||||
edit: "Options"
|
edit: "Options"
|
||||||
desktop/views/pages/deck/deck.note.vue:
|
desktop/views/pages/deck/deck.user-column.vue:
|
||||||
reposted-by: "Reposted by {}"
|
posts: "Posts"
|
||||||
private: "This post is private"
|
following: "Following"
|
||||||
deleted: "This post has been deleted"
|
followers: "Followers"
|
||||||
|
images: "Images"
|
||||||
|
activity: "Activity"
|
||||||
|
timeline: "Timeline"
|
||||||
|
pinned-notes: "Pinned posts"
|
||||||
|
push-to-a-list: "Add to list"
|
||||||
desktop/views/pages/stats/stats.vue:
|
desktop/views/pages/stats/stats.vue:
|
||||||
all-users: "All Users"
|
all-users: "All Users"
|
||||||
original-users: "Users on this instance"
|
original-users: "Users on this instance"
|
||||||
@@ -953,7 +998,7 @@ desktop/views/pages/welcome.vue:
|
|||||||
signup-button: "Sign up"
|
signup-button: "Sign up"
|
||||||
timeline: "Timeline"
|
timeline: "Timeline"
|
||||||
announcements: "Announcements"
|
announcements: "Announcements"
|
||||||
photos: "Recent uploaded"
|
photos: "Recent Images"
|
||||||
powered-by-misskey: "Powered by <b>Misskey</b>."
|
powered-by-misskey: "Powered by <b>Misskey</b>."
|
||||||
info: "Information"
|
info: "Information"
|
||||||
desktop/views/pages/drive.vue:
|
desktop/views/pages/drive.vue:
|
||||||
@@ -991,10 +1036,7 @@ desktop/views/pages/user/user.friends.vue:
|
|||||||
no-users: "No frequent mentions"
|
no-users: "No frequent mentions"
|
||||||
desktop/views/pages/user/user.vue:
|
desktop/views/pages/user/user.vue:
|
||||||
is-suspended: "This account has been suspended."
|
is-suspended: "This account has been suspended."
|
||||||
is-remote: "This profile belongs to a remote user. The profile that you see here may not be complete. "
|
last-used-at: "Last active"
|
||||||
view-remote: "See their complete profile"
|
|
||||||
desktop/views/pages/user/user.home.vue:
|
|
||||||
last-used-at: "Last active:"
|
|
||||||
desktop/views/pages/user/user.photos.vue:
|
desktop/views/pages/user/user.photos.vue:
|
||||||
title: "Photos"
|
title: "Photos"
|
||||||
loading: "Loading"
|
loading: "Loading"
|
||||||
@@ -1014,6 +1056,10 @@ desktop/views/pages/user/user.header.vue:
|
|||||||
following: "Following"
|
following: "Following"
|
||||||
followers: "Followers"
|
followers: "Followers"
|
||||||
is-bot: "This account is a Bot"
|
is-bot: "This account is a Bot"
|
||||||
|
years-old: " years old"
|
||||||
|
year: "/"
|
||||||
|
month: "/"
|
||||||
|
day: "-"
|
||||||
desktop/views/pages/user/user.timeline.vue:
|
desktop/views/pages/user/user.timeline.vue:
|
||||||
default: "Posts"
|
default: "Posts"
|
||||||
with-replies: "Posts and replies"
|
with-replies: "Posts and replies"
|
||||||
@@ -1073,6 +1119,8 @@ mobile/views/components/drive.file-detail.vue:
|
|||||||
hash: "Hash (md5)"
|
hash: "Hash (md5)"
|
||||||
exif: "EXIF"
|
exif: "EXIF"
|
||||||
nsfw: "NSFW"
|
nsfw: "NSFW"
|
||||||
|
mark-as-sensitive: "Mark as 'sensitive'"
|
||||||
|
unmark-as-sensitive: "Unmark as 'sensitive'"
|
||||||
mobile/views/components/media-image.vue:
|
mobile/views/components/media-image.vue:
|
||||||
sensitive: "NSFW"
|
sensitive: "NSFW"
|
||||||
click-to-show: "Click to show"
|
click-to-show: "Click to show"
|
||||||
@@ -1156,11 +1204,11 @@ mobile/views/components/ui.nav.vue:
|
|||||||
about: "About Misskey"
|
about: "About Misskey"
|
||||||
mobile/views/components/user-timeline.vue:
|
mobile/views/components/user-timeline.vue:
|
||||||
no-notes: "It seems this user hasn't posted anything yet."
|
no-notes: "It seems this user hasn't posted anything yet."
|
||||||
no-notes-with-media: "There are no posts attaching media"
|
no-notes-with-media: "There are no notes with media attachments"
|
||||||
load-more: "More"
|
load-more: "More"
|
||||||
mobile/views/components/users-list.vue:
|
mobile/views/components/users-list.vue:
|
||||||
all: "All"
|
all: "All"
|
||||||
known: "You know"
|
known: "In common"
|
||||||
load-more: "More"
|
load-more: "More"
|
||||||
mobile/views/pages/favorites.vue:
|
mobile/views/pages/favorites.vue:
|
||||||
title: "Favorites"
|
title: "Favorites"
|
||||||
@@ -1213,23 +1261,6 @@ mobile/views/pages/notifications.vue:
|
|||||||
read-all: "Do you wish to mark all notifications as read?"
|
read-all: "Do you wish to mark all notifications as read?"
|
||||||
mobile/views/pages/games/reversi.vue:
|
mobile/views/pages/games/reversi.vue:
|
||||||
reversi: "Reversi"
|
reversi: "Reversi"
|
||||||
mobile/views/pages/settings/settings.profile.vue:
|
|
||||||
title: "Profile"
|
|
||||||
name: "Name"
|
|
||||||
account: "Account"
|
|
||||||
location: "Location"
|
|
||||||
description: "Biography"
|
|
||||||
birthday: "Birthday"
|
|
||||||
avatar: "Avatar"
|
|
||||||
banner: "Banner"
|
|
||||||
is-cat: "This account is a Cat"
|
|
||||||
is-locked: "Follow request needs approval"
|
|
||||||
advanced: "Advanced"
|
|
||||||
privacy: "Privacy"
|
|
||||||
save: "Update profile"
|
|
||||||
saved: "Profile updated"
|
|
||||||
uploading: "Uploading"
|
|
||||||
upload-failed: "Failed to upload"
|
|
||||||
mobile/views/pages/search.vue:
|
mobile/views/pages/search.vue:
|
||||||
search: "Search"
|
search: "Search"
|
||||||
empty: "No posts were found for '{}'"
|
empty: "No posts were found for '{}'"
|
||||||
@@ -1251,7 +1282,7 @@ mobile/views/pages/settings.vue:
|
|||||||
timeline: "Timeline"
|
timeline: "Timeline"
|
||||||
show-reply-target: "Show reply target"
|
show-reply-target: "Show reply target"
|
||||||
show-my-renotes: "Show my reposts"
|
show-my-renotes: "Show my reposts"
|
||||||
show-renoted-my-notes: "Show renoted my posts"
|
show-renoted-my-notes: "Show renoted posts of mine"
|
||||||
show-local-renotes: "Show renoted local posts"
|
show-local-renotes: "Show renoted local posts"
|
||||||
post-style: "Post design"
|
post-style: "Post design"
|
||||||
post-style-standard: "Standard"
|
post-style-standard: "Standard"
|
||||||
@@ -1285,6 +1316,7 @@ mobile/views/pages/settings.vue:
|
|||||||
signout: "Sign out"
|
signout: "Sign out"
|
||||||
sound: "Sounds"
|
sound: "Sounds"
|
||||||
enable-sounds: "Enable sounds"
|
enable-sounds: "Enable sounds"
|
||||||
|
mark-as-read-all-unread-notes: "Mark all posts as read"
|
||||||
mobile/views/pages/user.vue:
|
mobile/views/pages/user.vue:
|
||||||
follows-you: "Follows you"
|
follows-you: "Follows you"
|
||||||
following: "Following"
|
following: "Following"
|
||||||
@@ -1294,8 +1326,6 @@ mobile/views/pages/user.vue:
|
|||||||
timeline: "Timeline"
|
timeline: "Timeline"
|
||||||
media: "Media"
|
media: "Media"
|
||||||
is-suspended: "This account has been suspended."
|
is-suspended: "This account has been suspended."
|
||||||
is-remote: "The user is a remote user. The profile that you see here may not complete."
|
|
||||||
view-remote: "See his/her complete profile"
|
|
||||||
mobile/views/pages/user/home.vue:
|
mobile/views/pages/user/home.vue:
|
||||||
recent-notes: "Recent notes"
|
recent-notes: "Recent notes"
|
||||||
images: "Images"
|
images: "Images"
|
||||||
@@ -1341,3 +1371,29 @@ docs:
|
|||||||
description: "Description"
|
description: "Description"
|
||||||
dev/views/index.vue:
|
dev/views/index.vue:
|
||||||
manage-apps: "Manage apps"
|
manage-apps: "Manage apps"
|
||||||
|
dev/views/apps.vue:
|
||||||
|
manage-apps: "Manage apps"
|
||||||
|
create-app: "Create app"
|
||||||
|
app-missing: "No apps"
|
||||||
|
dev/views/new-app.vue:
|
||||||
|
create-app: "Creating application"
|
||||||
|
app-name: "Application name"
|
||||||
|
app-name-desc: "The name of your app"
|
||||||
|
app-name-ex: "ex) Misskey for iOS"
|
||||||
|
app-overview: "Application summary"
|
||||||
|
app-desc: "A brief description or introduction of your app."
|
||||||
|
app-desc-ex: "ex) Misskey iOS client."
|
||||||
|
callback-url: "The callback URL (optional)"
|
||||||
|
callback-url-desc: "The URL to redirect to after the user is authenticated via the authentication form."
|
||||||
|
authority: "Permissions"
|
||||||
|
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."
|
||||||
|
account-read: "View account information."
|
||||||
|
account-write: "Modify account information."
|
||||||
|
note-write: "Post."
|
||||||
|
reaction-write: "Add or remove reactions."
|
||||||
|
following-write: "Follow and unfollow."
|
||||||
|
drive-read: "Read the drive."
|
||||||
|
drive-write: "Upload/delete files in the drive."
|
||||||
|
notification-read: "Read your notifications."
|
||||||
|
notification-write: "Manage your notifications."
|
||||||
|
|||||||
@@ -25,6 +25,14 @@ 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."
|
||||||
|
BSoD:
|
||||||
|
fatal-error: ":( 致命的な問題が発生しました。"
|
||||||
|
update-browser-os: "お使いのブラウザ(またはOS)のバージョンを更新すると解決する可能性があります。"
|
||||||
|
error-code: "エラーコード"
|
||||||
|
browser-version: "ブラウザ バージョン"
|
||||||
|
client-version: "クライアント バージョン"
|
||||||
|
email-support: "問題が解決しない場合は、上記の情報をお書き添えの上 syuilotan@yahoo.co.jp までご連絡ください。"
|
||||||
|
thanks: "Thank you for using Misskey."
|
||||||
got-it: "¡Listo!"
|
got-it: "¡Listo!"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "Consejos de personalización"
|
title: "Consejos de personalización"
|
||||||
@@ -115,6 +123,12 @@ common:
|
|||||||
reduce-motion: "UIの動きを減らす"
|
reduce-motion: "UIの動きを減らす"
|
||||||
this-setting-is-this-device-only: "このデバイスのみ"
|
this-setting-is-this-device-only: "このデバイスのみ"
|
||||||
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.'
|
||||||
|
is-remote-user: "このユーザー情報はコピーです。"
|
||||||
|
is-remote-post: "この投稿情報はコピーです。"
|
||||||
|
view-on-remote: "正確な情報を見る"
|
||||||
|
error:
|
||||||
|
title: '問題が発生しました'
|
||||||
|
retry: 'やり直す'
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "Empatado"
|
drawn: "Empatado"
|
||||||
my-turn: "Mi turno"
|
my-turn: "Mi turno"
|
||||||
@@ -170,6 +184,7 @@ common:
|
|||||||
rename: "Renombrar"
|
rename: "Renombrar"
|
||||||
stack-left: "A la izqda."
|
stack-left: "A la izqda."
|
||||||
pop-right: "A la dcha."
|
pop-right: "A la dcha."
|
||||||
|
dev: "アプリの作成に失敗しました。再度お試しください。"
|
||||||
auth/views/form.vue:
|
auth/views/form.vue:
|
||||||
share-access: "¿Deseas <b>permitir</b> a <i>{{ app.name }}</i> acceder a tu cuenta?"
|
share-access: "¿Deseas <b>permitir</b> a <i>{{ app.name }}</i> acceder a tu cuenta?"
|
||||||
permission-ask: "La aplicación requiere los siguientes permisos:"
|
permission-ask: "La aplicación requiere los siguientes permisos:"
|
||||||
@@ -335,6 +350,7 @@ common/views/components/note-menu.vue:
|
|||||||
detail: "Detalles"
|
detail: "Detalles"
|
||||||
copy-link: "Copiar enlace"
|
copy-link: "Copiar enlace"
|
||||||
favorite: "Me gusta esta nota"
|
favorite: "Me gusta esta nota"
|
||||||
|
unfavorite: "お気に入り解除"
|
||||||
pin: "Fijar en el perfil"
|
pin: "Fijar en el perfil"
|
||||||
unpin: "ピン留め解除"
|
unpin: "ピン留め解除"
|
||||||
delete: "Borrar"
|
delete: "Borrar"
|
||||||
@@ -415,6 +431,25 @@ common/views/components/visibility-chooser.vue:
|
|||||||
common/views/components/trends.vue:
|
common/views/components/trends.vue:
|
||||||
count: "{}人が投稿"
|
count: "{}人が投稿"
|
||||||
empty: "トレンドなし"
|
empty: "トレンドなし"
|
||||||
|
common/views/components/profile-editor.vue:
|
||||||
|
title: "プロフィール"
|
||||||
|
name: "名前"
|
||||||
|
account: "アカウント"
|
||||||
|
location: "場所"
|
||||||
|
description: "自己紹介"
|
||||||
|
birthday: "誕生日"
|
||||||
|
avatar: "アイコン"
|
||||||
|
banner: "バナー"
|
||||||
|
is-cat: "このアカウントはCatです"
|
||||||
|
is-bot: "このアカウントはBotです"
|
||||||
|
is-locked: "フォローを承認制にする"
|
||||||
|
careful-bot: "Botからのフォローだけ承認制にする"
|
||||||
|
advanced: "その他"
|
||||||
|
privacy: "プライバシー"
|
||||||
|
save: "保存"
|
||||||
|
saved: "プロフィールを保存しました"
|
||||||
|
uploading: "アップロード中"
|
||||||
|
upload-failed: "アップロードに失敗しました"
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "Recuperando"
|
fetching: "Recuperando"
|
||||||
no-broadcasts: "Sin emisión"
|
no-broadcasts: "Sin emisión"
|
||||||
@@ -639,14 +674,14 @@ desktop/views/components/note-detail.vue:
|
|||||||
location: "Localización"
|
location: "Localización"
|
||||||
renote: "Republicar"
|
renote: "Republicar"
|
||||||
add-reaction: "Agregar una reacción"
|
add-reaction: "Agregar una reacción"
|
||||||
desktop/views/components/notes.note.vue:
|
desktop/views/components/note.vue:
|
||||||
reposted-by: "Republicado por {}"
|
reposted-by: "{}がRenote"
|
||||||
reply: "Responder"
|
reply: "返信"
|
||||||
renote: "Republicar"
|
renote: "Renote"
|
||||||
add-reaction: "Agregar una reacción"
|
add-reaction: "リアクション"
|
||||||
detail: "Mostrar detalles"
|
detail: "詳細"
|
||||||
private: "Esta publicación es privada"
|
private: "この投稿は非公開です"
|
||||||
deleted: "Esta publicación ha sido borrada"
|
deleted: "この投稿は削除されました"
|
||||||
desktop/views/components/notes.vue:
|
desktop/views/components/notes.vue:
|
||||||
error: "Error al cargar."
|
error: "Error al cargar."
|
||||||
retry: "Reintentar"
|
retry: "Reintentar"
|
||||||
@@ -725,8 +760,12 @@ desktop/views/components/settings.vue:
|
|||||||
advanced: "Configuración avanzada"
|
advanced: "Configuración avanzada"
|
||||||
api-via-stream: "Solicitar API por medio de un stream"
|
api-via-stream: "Solicitar API por medio de un stream"
|
||||||
api-via-stream-desc: "Las peticiones de las API se realizan por conexiones WebSocket en lugar de las tradicionales (para una mejora en el rendimiento). Esta función depende del navegador."
|
api-via-stream-desc: "Las peticiones de las API se realizan por conexiones WebSocket en lugar de las tradicionales (para una mejora en el rendimiento). Esta función depende del navegador."
|
||||||
|
deck-nav: "デッキ内ナビゲーション"
|
||||||
|
deck-nav-desc: "デッキを使用しているとき、ナビゲーションが発生する際にページ遷移を行わずに一時的なカラムで受けるようにします。"
|
||||||
|
deck-default: "デッキをデフォルトのUIにする"
|
||||||
display: "Diseño y pantalla"
|
display: "Diseño y pantalla"
|
||||||
customize: "Personaliza la página principal"
|
customize: "Personaliza la página principal"
|
||||||
|
wallpaper: "壁紙"
|
||||||
choose-wallpaper: "Elije un fondo"
|
choose-wallpaper: "Elije un fondo"
|
||||||
delete-wallpaper: "Suprimir fondo"
|
delete-wallpaper: "Suprimir fondo"
|
||||||
dark-mode: "Modo Nocturno"
|
dark-mode: "Modo Nocturno"
|
||||||
@@ -738,17 +777,19 @@ desktop/views/components/settings.vue:
|
|||||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||||
show-clock-on-header: "右上に時計を表示する"
|
show-clock-on-header: "右上に時計を表示する"
|
||||||
show-reply-target: "リプライ先を表示する"
|
show-reply-target: "リプライ先を表示する"
|
||||||
|
timeline: "タイムライン"
|
||||||
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
||||||
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
||||||
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
||||||
show-maps: "マップの自動展開"
|
show-maps: "マップの自動展開"
|
||||||
|
deck-column-align: "デッキのカラムの位置"
|
||||||
|
deck-column-align-center: "中央"
|
||||||
|
deck-column-align-left: "左"
|
||||||
sound: "サウンド"
|
sound: "サウンド"
|
||||||
enable-sounds: "サウンドを有効にする"
|
enable-sounds: "サウンドを有効にする"
|
||||||
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
||||||
volume: "ボリューム"
|
volume: "ボリューム"
|
||||||
test: "テスト"
|
test: "テスト"
|
||||||
mobile: "モバイル"
|
|
||||||
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
|
||||||
language: "言語"
|
language: "言語"
|
||||||
pick-language: "言語を選択"
|
pick-language: "言語を選択"
|
||||||
recommended: "推奨"
|
recommended: "推奨"
|
||||||
@@ -784,6 +825,10 @@ desktop/views/components/settings.vue:
|
|||||||
tools: "Herramientas"
|
tools: "Herramientas"
|
||||||
task-manager: "Navegador de tareas"
|
task-manager: "Navegador de tareas"
|
||||||
third-parties: "Servicios externos"
|
third-parties: "Servicios externos"
|
||||||
|
navbar-position: "ナビゲーションバーの位置"
|
||||||
|
navbar-position-top: "上"
|
||||||
|
navbar-position-left: "左"
|
||||||
|
navbar-position-right: "右"
|
||||||
desktop/views/components/settings.2fa.vue:
|
desktop/views/components/settings.2fa.vue:
|
||||||
intro: "二段階認証を設定すると、サインイン時にパスワードだけでなく、予め登録しておいた物理的なデバイス(例えばあなたのスマートフォンなど)も必要になり、よりセキュリティが向上します。"
|
intro: "二段階認証を設定すると、サインイン時にパスワードだけでなく、予め登録しておいた物理的なデバイス(例えばあなたのスマートフォンなど)も必要になり、よりセキュリティが向上します。"
|
||||||
detail: "Ver detalles..."
|
detail: "Ver detalles..."
|
||||||
@@ -823,20 +868,6 @@ desktop/views/components/settings.password.vue:
|
|||||||
enter-new-password-again: "Ingresar nueva contraseña de nuevo"
|
enter-new-password-again: "Ingresar nueva contraseña de nuevo"
|
||||||
not-match: "Las nuevas contraseñas no se corresponden consigo mismas"
|
not-match: "Las nuevas contraseñas no se corresponden consigo mismas"
|
||||||
changed: "Contraseña actualizada"
|
changed: "Contraseña actualizada"
|
||||||
desktop/views/components/settings.profile.vue:
|
|
||||||
avatar: "Avatar"
|
|
||||||
choice-avatar: "Escoger una imagen"
|
|
||||||
name: "Nombre"
|
|
||||||
location: "Localización"
|
|
||||||
description: "Descripción"
|
|
||||||
birthday: "Fecha de nacimiento"
|
|
||||||
save: "Perfil actualizado"
|
|
||||||
locked-account: "Protege tu cuenta"
|
|
||||||
is-locked: "フォローを承認制にする"
|
|
||||||
other: "その他"
|
|
||||||
is-bot: "このアカウントはBotです"
|
|
||||||
is-cat: "このアカウントはCatです"
|
|
||||||
profile-updated: "プロフィールを更新しました"
|
|
||||||
desktop/views/components/sub-note-content.vue:
|
desktop/views/components/sub-note-content.vue:
|
||||||
private: "この投稿は非公開です"
|
private: "この投稿は非公開です"
|
||||||
deleted: "この投稿は削除されました"
|
deleted: "この投稿は削除されました"
|
||||||
@@ -908,6 +939,8 @@ desktop/views/pages/admin/admin.vue:
|
|||||||
drive: "ドライブ"
|
drive: "ドライブ"
|
||||||
users: "ユーザー"
|
users: "ユーザー"
|
||||||
update: "更新"
|
update: "更新"
|
||||||
|
announcements: "お知らせ"
|
||||||
|
hashtags: "ハッシュタグ"
|
||||||
desktop/views/pages/admin/admin.dashboard.vue:
|
desktop/views/pages/admin/admin.dashboard.vue:
|
||||||
dashboard: "ダッシュボード"
|
dashboard: "ダッシュボード"
|
||||||
all-users: "全てのユーザー"
|
all-users: "全てのユーザー"
|
||||||
@@ -915,6 +948,9 @@ desktop/views/pages/admin/admin.dashboard.vue:
|
|||||||
all-notes: "全ての投稿"
|
all-notes: "全ての投稿"
|
||||||
original-notes: "このインスタンスの投稿"
|
original-notes: "このインスタンスの投稿"
|
||||||
invite: "招待"
|
invite: "招待"
|
||||||
|
banner-url: "Banner URL"
|
||||||
|
disableRegistration: "Disable new user registration"
|
||||||
|
disableLocalTimeline: "Disable the local timeline"
|
||||||
desktop/views/pages/admin/admin.suspend-user.vue:
|
desktop/views/pages/admin/admin.suspend-user.vue:
|
||||||
suspend-user: "ユーザーの凍結"
|
suspend-user: "ユーザーの凍結"
|
||||||
suspend: "凍結"
|
suspend: "凍結"
|
||||||
@@ -931,14 +967,23 @@ desktop/views/pages/admin/admin.unverify-user.vue:
|
|||||||
unverify-user: "ユーザーの公式アカウント解除"
|
unverify-user: "ユーザーの公式アカウント解除"
|
||||||
unverify: "公式アカウントを解除する"
|
unverify: "公式アカウントを解除する"
|
||||||
unverified: "公式アカウントを解除しました"
|
unverified: "公式アカウントを解除しました"
|
||||||
|
desktop/views/pages/admin/admin.announcements.vue:
|
||||||
|
announcements: "お知らせ"
|
||||||
|
desktop/views/pages/admin/admin.hashtags.vue:
|
||||||
|
hided-tags: "Hidden Tags"
|
||||||
desktop/views/pages/deck/deck.tl-column.vue:
|
desktop/views/pages/deck/deck.tl-column.vue:
|
||||||
is-media-only: "メディア投稿のみ"
|
is-media-only: "メディア投稿のみ"
|
||||||
is-media-view: "メディアビュー"
|
is-media-view: "メディアビュー"
|
||||||
edit: "オプション"
|
edit: "オプション"
|
||||||
desktop/views/pages/deck/deck.note.vue:
|
desktop/views/pages/deck/deck.user-column.vue:
|
||||||
reposted-by: "{}がRenote"
|
posts: "投稿"
|
||||||
private: "この投稿は非公開です"
|
following: "フォロー"
|
||||||
deleted: "この投稿は削除されました"
|
followers: "フォロワー"
|
||||||
|
images: "画像"
|
||||||
|
activity: "アクティビティ"
|
||||||
|
timeline: "タイムライン"
|
||||||
|
pinned-notes: "ピン留めされた投稿"
|
||||||
|
push-to-a-list: "リストに追加"
|
||||||
desktop/views/pages/stats/stats.vue:
|
desktop/views/pages/stats/stats.vue:
|
||||||
all-users: "全てのユーザー"
|
all-users: "全てのユーザー"
|
||||||
original-users: "このインスタンスのユーザー"
|
original-users: "このインスタンスのユーザー"
|
||||||
@@ -991,9 +1036,6 @@ desktop/views/pages/user/user.friends.vue:
|
|||||||
no-users: "よく話すユーザーはいません"
|
no-users: "よく話すユーザーはいません"
|
||||||
desktop/views/pages/user/user.vue:
|
desktop/views/pages/user/user.vue:
|
||||||
is-suspended: "このユーザーは凍結されています。"
|
is-suspended: "このユーザーは凍結されています。"
|
||||||
is-remote: "このユーザーはリモートユーザーです。"
|
|
||||||
view-remote: "正確な情報を見る"
|
|
||||||
desktop/views/pages/user/user.home.vue:
|
|
||||||
last-used-at: "最終アクセス"
|
last-used-at: "最終アクセス"
|
||||||
desktop/views/pages/user/user.photos.vue:
|
desktop/views/pages/user/user.photos.vue:
|
||||||
title: "フォト"
|
title: "フォト"
|
||||||
@@ -1014,6 +1056,10 @@ desktop/views/pages/user/user.header.vue:
|
|||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
followers: "フォロワー"
|
followers: "フォロワー"
|
||||||
is-bot: "このアカウントはBotです"
|
is-bot: "このアカウントはBotです"
|
||||||
|
years-old: "歳"
|
||||||
|
year: "年"
|
||||||
|
month: "月"
|
||||||
|
day: "日"
|
||||||
desktop/views/pages/user/user.timeline.vue:
|
desktop/views/pages/user/user.timeline.vue:
|
||||||
default: "投稿"
|
default: "投稿"
|
||||||
with-replies: "投稿と返信"
|
with-replies: "投稿と返信"
|
||||||
@@ -1073,6 +1119,8 @@ mobile/views/components/drive.file-detail.vue:
|
|||||||
hash: "ハッシュ (md5)"
|
hash: "ハッシュ (md5)"
|
||||||
exif: "EXIF"
|
exif: "EXIF"
|
||||||
nsfw: "閲覧注意"
|
nsfw: "閲覧注意"
|
||||||
|
mark-as-sensitive: "閲覧注意に設定"
|
||||||
|
unmark-as-sensitive: "閲覧注意を解除"
|
||||||
mobile/views/components/media-image.vue:
|
mobile/views/components/media-image.vue:
|
||||||
sensitive: "閲覧注意"
|
sensitive: "閲覧注意"
|
||||||
click-to-show: "クリックして表示"
|
click-to-show: "クリックして表示"
|
||||||
@@ -1213,23 +1261,6 @@ mobile/views/pages/notifications.vue:
|
|||||||
read-all: "すべての通知を既読にしますか?"
|
read-all: "すべての通知を既読にしますか?"
|
||||||
mobile/views/pages/games/reversi.vue:
|
mobile/views/pages/games/reversi.vue:
|
||||||
reversi: "リバーシ"
|
reversi: "リバーシ"
|
||||||
mobile/views/pages/settings/settings.profile.vue:
|
|
||||||
title: "プロフィール"
|
|
||||||
name: "名前"
|
|
||||||
account: "アカウント"
|
|
||||||
location: "場所"
|
|
||||||
description: "自己紹介"
|
|
||||||
birthday: "誕生日"
|
|
||||||
avatar: "アイコン"
|
|
||||||
banner: "バナー"
|
|
||||||
is-cat: "このアカウントはCatです"
|
|
||||||
is-locked: "フォローを承認制にする"
|
|
||||||
advanced: "その他"
|
|
||||||
privacy: "プライバシー"
|
|
||||||
save: "保存"
|
|
||||||
saved: "プロフィールを保存しました"
|
|
||||||
uploading: "アップロード中"
|
|
||||||
upload-failed: "アップロードに失敗しました"
|
|
||||||
mobile/views/pages/search.vue:
|
mobile/views/pages/search.vue:
|
||||||
search: "検索"
|
search: "検索"
|
||||||
empty: "「{}」に関する投稿は見つかりませんでした。"
|
empty: "「{}」に関する投稿は見つかりませんでした。"
|
||||||
@@ -1285,6 +1316,7 @@ mobile/views/pages/settings.vue:
|
|||||||
signout: "サインアウト"
|
signout: "サインアウト"
|
||||||
sound: "サウンド"
|
sound: "サウンド"
|
||||||
enable-sounds: "サウンドを有効にする"
|
enable-sounds: "サウンドを有効にする"
|
||||||
|
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
|
||||||
mobile/views/pages/user.vue:
|
mobile/views/pages/user.vue:
|
||||||
follows-you: "フォローされています"
|
follows-you: "フォローされています"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
@@ -1294,8 +1326,6 @@ mobile/views/pages/user.vue:
|
|||||||
timeline: "タイムライン"
|
timeline: "タイムライン"
|
||||||
media: "メディア"
|
media: "メディア"
|
||||||
is-suspended: "このユーザーは凍結されています。"
|
is-suspended: "このユーザーは凍結されています。"
|
||||||
is-remote: "このユーザーはリモートユーザーです。"
|
|
||||||
view-remote: "正確な情報を見る"
|
|
||||||
mobile/views/pages/user/home.vue:
|
mobile/views/pages/user/home.vue:
|
||||||
recent-notes: "最近の投稿"
|
recent-notes: "最近の投稿"
|
||||||
images: "画像"
|
images: "画像"
|
||||||
@@ -1341,3 +1371,29 @@ docs:
|
|||||||
description: "説明"
|
description: "説明"
|
||||||
dev/views/index.vue:
|
dev/views/index.vue:
|
||||||
manage-apps: "アプリの管理"
|
manage-apps: "アプリの管理"
|
||||||
|
dev/views/apps.vue:
|
||||||
|
manage-apps: "アプリを管理"
|
||||||
|
create-app: "アプリ作成"
|
||||||
|
app-missing: "アプリなし"
|
||||||
|
dev/views/new-app.vue:
|
||||||
|
create-app: "アプリケーションの作成"
|
||||||
|
app-name: "アプリケーション名"
|
||||||
|
app-name-desc: "あなたのアプリの名称。"
|
||||||
|
app-name-ex: "ex) Misskey for iOS"
|
||||||
|
app-overview: "アプリの概要"
|
||||||
|
app-desc: "あなたのアプリの簡単な説明や紹介。"
|
||||||
|
app-desc-ex: "ex) Misskey iOSクライアント。"
|
||||||
|
callback-url: "コールバックURL (オプション)"
|
||||||
|
callback-url-desc: "ユーザーが認証フォームで認証した際にリダイレクトするURLを設定できます。"
|
||||||
|
authority: "権限"
|
||||||
|
authority-desc: "ここで要求した機能だけがAPIからアクセスできます。"
|
||||||
|
authority-warning: "アプリ作成後も変更できますが、新たな権限を付与する場合、その時点で関連付けられているユーザーキーはすべて無効になります。"
|
||||||
|
account-read: "アカウントの情報を見る。"
|
||||||
|
account-write: "アカウントの情報を操作する。"
|
||||||
|
note-write: "投稿する。"
|
||||||
|
reaction-write: "リアクションしたりリアクションをキャンセルする。"
|
||||||
|
following-write: "フォローしたりフォロー解除する。"
|
||||||
|
drive-read: "ドライブを見る。"
|
||||||
|
drive-write: "ドライブを操作する。"
|
||||||
|
notification-read: "通知を見る。"
|
||||||
|
notification-write: "通知を操作する。"
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ meta:
|
|||||||
common:
|
common:
|
||||||
misskey: "Une ⭐ du fédiverse"
|
misskey: "Une ⭐ du fédiverse"
|
||||||
about-title: "Une ⭐ du fédivers."
|
about-title: "Une ⭐ du fédivers."
|
||||||
about: "Merci d'avoir découvert Misskey. Misskey est une <b>plateforme de microblogage distribuée</b> née sur Terre. Parce qu'il fait partie du Fédivers (un univers composé de diverses plateformes de réseaux sociaux organisées), il est mutuellement connecté avec d'autres plateformes de réseaux sociaux. Désirez-vous prendre une pause, pendant un instant, loin de l'agitation de la ville et plonger dans un nouvel Internet ?"
|
about: "Merci d’avoir choisis Misskey. Misskey est une <b>plateforme de micro-blogging distribuée</b> née sur Terre et fait partie du Fédiverse (un univers composé de diverses plateformes de réseaux sociaux organisées), elle est connectée mutuellement avec d’autres plateformes de réseaux sociaux. Désirez-vous prendre une pause, un court instant, loin de l’agitation de la ville et plonger dans un Internet d’un nouveau genre ?"
|
||||||
intro:
|
intro:
|
||||||
title: "C’est quoi Misskey ?"
|
title: "C’est quoi Misskey ?"
|
||||||
about: "Misskeyはオープンソースの<b>分散型マイクロブログSNS</b>です。リッチで高度にカスタマイズできるUI、投稿へのリアクション、ファイルを一元管理できるドライブなど、先進的な機能を揃えています。また、Fediverseと呼ばれるネットワークに接続できるため、他のSNSともやり取りできます。例えば、あなたが何か投稿すると、その投稿はMisskeyだけでなく他のSNSにも伝わります。ちょうどある惑星から他の惑星に電波を発信している様子をイメージしてください。"
|
about: "Misskeyはオープンソースの<b>分散型マイクロブログSNS</b>です。リッチで高度にカスタマイズできるUI、投稿へのリアクション、ファイルを一元管理できるドライブなど、先進的な機能を揃えています。また、Fediverseと呼ばれるネットワークに接続できるため、他のSNSともやり取りできます。例えば、あなたが何か投稿すると、その投稿はMisskeyだけでなく他のSNSにも伝わります。ちょうどある惑星から他の惑星に電波を発信している様子をイメージしてください。"
|
||||||
@@ -25,6 +25,14 @@ common:
|
|||||||
application-authorization: "Permissions de l'application"
|
application-authorization: "Permissions de l'application"
|
||||||
close: "Fermer"
|
close: "Fermer"
|
||||||
do-not-copy-paste: "Veuillez ne pas entrer ou coller le code ici. Le compte peut être compromis."
|
do-not-copy-paste: "Veuillez ne pas entrer ou coller le code ici. Le compte peut être compromis."
|
||||||
|
BSoD:
|
||||||
|
fatal-error: ":( 致命的な問題が発生しました。"
|
||||||
|
update-browser-os: "お使いのブラウザ(またはOS)のバージョンを更新すると解決する可能性があります。"
|
||||||
|
error-code: "エラーコード"
|
||||||
|
browser-version: "ブラウザ バージョン"
|
||||||
|
client-version: "クライアント バージョン"
|
||||||
|
email-support: "問題が解決しない場合は、上記の情報をお書き添えの上 syuilotan@yahoo.co.jp までご連絡ください。"
|
||||||
|
thanks: "Thank you for using Misskey."
|
||||||
got-it: "J'ai compris !"
|
got-it: "J'ai compris !"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "Conseils de personnalisation"
|
title: "Conseils de personnalisation"
|
||||||
@@ -34,7 +42,7 @@ common:
|
|||||||
paragraph4: "Pour terminer la personnalisation, cliquez sur \"Terminer\" dans le coin supérieur droit."
|
paragraph4: "Pour terminer la personnalisation, cliquez sur \"Terminer\" dans le coin supérieur droit."
|
||||||
gotit: "Compris !"
|
gotit: "Compris !"
|
||||||
notification:
|
notification:
|
||||||
file-uploaded: "Le fichier a été téléversé !"
|
file-uploaded: "Le fichier a été transféré !"
|
||||||
message-from: "Message de {} :"
|
message-from: "Message de {} :"
|
||||||
reversi-invited: "Invité à jouer"
|
reversi-invited: "Invité à jouer"
|
||||||
reversi-invited-by: "Invité par {} :"
|
reversi-invited-by: "Invité par {} :"
|
||||||
@@ -43,7 +51,7 @@ common:
|
|||||||
quoted-by: "Cité·e par {} :"
|
quoted-by: "Cité·e par {} :"
|
||||||
time:
|
time:
|
||||||
unknown: "inconnu"
|
unknown: "inconnu"
|
||||||
future: "à l'instant"
|
future: "à l’instant"
|
||||||
just_now: "à l'instant"
|
just_now: "à l'instant"
|
||||||
seconds_ago: "Il y a {} seconde·s"
|
seconds_ago: "Il y a {} seconde·s"
|
||||||
minutes_ago: "Il y a {} minute·s"
|
minutes_ago: "Il y a {} minute·s"
|
||||||
@@ -106,15 +114,21 @@ common:
|
|||||||
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é."
|
||||||
i-like-sushi: "Je préfère les sushis plutôt que le pudding"
|
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"
|
show-reversi-board-labels: "Afficher les étiquettes des lignes et colonnes dans Reversi"
|
||||||
use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける"
|
use-contrast-reversi-stones: "Icône avec contraste sur Reversi"
|
||||||
verified-user: "Compte vérifié"
|
verified-user: "Compte vérifié"
|
||||||
disable-animated-mfm: "Désactiver les textes animés dans les publications"
|
disable-animated-mfm: "Désactiver les textes animés dans les publications"
|
||||||
always-show-nsfw: "常に閲覧注意のメディアを表示する"
|
always-show-nsfw: "Toujours afficher les contenus sensibles"
|
||||||
always-mark-nsfw: "常にメディアを閲覧注意として投稿"
|
always-mark-nsfw: "Toujours marquer les notes ayant des attachements comme sensibles"
|
||||||
show-full-acct: "Afficher l’adresse complète de l’utilisateur"
|
show-full-acct: "Afficher l’adresse complète de l’utilisateur"
|
||||||
reduce-motion: "Réduire les animations dans l’interface utilisateur"
|
reduce-motion: "Réduire les animations dans l’interface utilisateur"
|
||||||
this-setting-is-this-device-only: "Uniquement sur cet appareil"
|
this-setting-is-this-device-only: "Uniquement sur cet appareil"
|
||||||
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.'
|
||||||
|
is-remote-user: "このユーザー情報はコピーです。"
|
||||||
|
is-remote-post: "この投稿情報はコピーです。"
|
||||||
|
view-on-remote: "正確な情報を見る"
|
||||||
|
error:
|
||||||
|
title: '問題が発生しました'
|
||||||
|
retry: 'やり直す'
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "Partie nulle"
|
drawn: "Partie nulle"
|
||||||
my-turn: "C’est votre tour"
|
my-turn: "C’est votre tour"
|
||||||
@@ -136,7 +150,7 @@ common:
|
|||||||
memo: "Pense-bête"
|
memo: "Pense-bête"
|
||||||
trends: "Tendances"
|
trends: "Tendances"
|
||||||
photo-stream: "Flux de photos"
|
photo-stream: "Flux de photos"
|
||||||
posts-monitor: "Graphe des publications"
|
posts-monitor: "Graph des publications"
|
||||||
slideshow: "Diaporama"
|
slideshow: "Diaporama"
|
||||||
version: "Version"
|
version: "Version"
|
||||||
broadcast: "Diffusion"
|
broadcast: "Diffusion"
|
||||||
@@ -170,6 +184,7 @@ common:
|
|||||||
rename: "Renommer"
|
rename: "Renommer"
|
||||||
stack-left: "Vers la gauche"
|
stack-left: "Vers la gauche"
|
||||||
pop-right: "Vers la droite"
|
pop-right: "Vers la droite"
|
||||||
|
dev: "アプリの作成に失敗しました。再度お試しください。"
|
||||||
auth/views/form.vue:
|
auth/views/form.vue:
|
||||||
share-access: "Désirez-vous <b>autoriser</b> <i>{{ app.name }}</i> à avoir accès à votre compte ?"
|
share-access: "Désirez-vous <b>autoriser</b> <i>{{ app.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 :"
|
||||||
@@ -254,7 +269,7 @@ common/views/components/connect-failed.troubleshooter.vue:
|
|||||||
no-network: "Aucune connexion au réseau"
|
no-network: "Aucune connexion au réseau"
|
||||||
no-network-desc: "Veuillez vérifier que vous êtes bien connecté au réseau."
|
no-network-desc: "Veuillez vérifier que vous êtes bien connecté au réseau."
|
||||||
no-internet: "Aucune connexion internet."
|
no-internet: "Aucune connexion internet."
|
||||||
no-internet-desc: "Veuillez vérifier que vous êtes bien connecté à internet."
|
no-internet-desc: "Assurez-vous que vous êtes bien connectés à internet."
|
||||||
no-server: "Impossible de se connecter au serveur"
|
no-server: "Impossible de se connecter au serveur"
|
||||||
no-server-desc: "Votre connexion semble correcte, mais il a été impossible de vous connecter au serveur de Misskey. Il se peut que le serveur soit hors-ligne ou en maintenance, veuillez ressayer plus tard."
|
no-server-desc: "Votre connexion semble correcte, mais il a été impossible de vous connecter au serveur de Misskey. Il se peut que le serveur soit hors-ligne ou en maintenance, veuillez ressayer plus tard."
|
||||||
success: "Connexion au serveur de Misskey réussie !"
|
success: "Connexion au serveur de Misskey réussie !"
|
||||||
@@ -265,8 +280,8 @@ common/views/components/media-banner.vue:
|
|||||||
sensitive: "Contenu sensible"
|
sensitive: "Contenu sensible"
|
||||||
click-to-show: "Cliquer pour afficher"
|
click-to-show: "Cliquer pour afficher"
|
||||||
common/views/components/theme.vue:
|
common/views/components/theme.vue:
|
||||||
light-theme: "非ダークモード時に使用するテーマ"
|
light-theme: "Thème durant le mode clair"
|
||||||
dark-theme: "ダークモード時に使用するテーマ"
|
dark-theme: "Thème durant le mode sombre"
|
||||||
light-themes: "Thème clair"
|
light-themes: "Thème clair"
|
||||||
dark-themes: "Thème sombre"
|
dark-themes: "Thème sombre"
|
||||||
install-a-theme: "Installer un thème"
|
install-a-theme: "Installer un thème"
|
||||||
@@ -335,6 +350,7 @@ common/views/components/note-menu.vue:
|
|||||||
detail: "Détails"
|
detail: "Détails"
|
||||||
copy-link: "Copier le lien"
|
copy-link: "Copier le lien"
|
||||||
favorite: "Mettre cette note en favoris"
|
favorite: "Mettre cette note en favoris"
|
||||||
|
unfavorite: "Retirer des favoris"
|
||||||
pin: "Épingler sur votre profil"
|
pin: "Épingler sur votre profil"
|
||||||
unpin: "Désépingler"
|
unpin: "Désépingler"
|
||||||
delete: "Supprimer"
|
delete: "Supprimer"
|
||||||
@@ -415,6 +431,25 @@ common/views/components/visibility-chooser.vue:
|
|||||||
common/views/components/trends.vue:
|
common/views/components/trends.vue:
|
||||||
count: "{} utilisateurs·rices mentionnés·es"
|
count: "{} utilisateurs·rices mentionnés·es"
|
||||||
empty: "Aucune tendance"
|
empty: "Aucune tendance"
|
||||||
|
common/views/components/profile-editor.vue:
|
||||||
|
title: "Profil"
|
||||||
|
name: "Nom"
|
||||||
|
account: "Compte"
|
||||||
|
location: "Lieu"
|
||||||
|
description: "À propos de moi"
|
||||||
|
birthday: "Date de naissance"
|
||||||
|
avatar: "Avatar"
|
||||||
|
banner: "Bannière"
|
||||||
|
is-cat: "Ce compte est un Chat"
|
||||||
|
is-bot: "Ce compte est un Bot"
|
||||||
|
is-locked: "Demandes d’abonnements requièrent l’approbation"
|
||||||
|
careful-bot: "Botからのフォローだけ承認制にする"
|
||||||
|
advanced: "Avancé"
|
||||||
|
privacy: "Vie privée"
|
||||||
|
save: "Mettre à jour le profil"
|
||||||
|
saved: "Profil mis à jour avec succès"
|
||||||
|
uploading: "En cours d'envoi …"
|
||||||
|
upload-failed: "Échec de l'envoi"
|
||||||
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"
|
||||||
@@ -434,7 +469,7 @@ common/views/widgets/photo-stream.vue:
|
|||||||
title: "Flux de photos"
|
title: "Flux de photos"
|
||||||
no-photos: "Pas de photo"
|
no-photos: "Pas de photo"
|
||||||
common/views/widgets/posts-monitor.vue:
|
common/views/widgets/posts-monitor.vue:
|
||||||
title: "Graphe des publications"
|
title: "Graph des publications"
|
||||||
toggle: "Basculer entre les vues"
|
toggle: "Basculer entre les vues"
|
||||||
common/views/widgets/hashtags.vue:
|
common/views/widgets/hashtags.vue:
|
||||||
title: "Hashtags"
|
title: "Hashtags"
|
||||||
@@ -582,7 +617,7 @@ desktop/views/components/drive.vue:
|
|||||||
unable-to-process: "L'opération n'a pas pu être complétée"
|
unable-to-process: "L'opération n'a pas pu être complétée"
|
||||||
circular-reference-detected: "Le dossier de destination est un sous-dossier du dossier que vous souhaitez déplacer."
|
circular-reference-detected: "Le dossier de destination est un sous-dossier du dossier que vous souhaitez déplacer."
|
||||||
unhandled-error: "Erreur inconnue"
|
unhandled-error: "Erreur inconnue"
|
||||||
url-upload: "Uploader d'un URL"
|
url-upload: "Téléverser via une URL"
|
||||||
url-of-file: "URL de l'image que vous souhaitez uploader."
|
url-of-file: "URL de l'image que vous souhaitez uploader."
|
||||||
url-upload-requested: "Upload requested"
|
url-upload-requested: "Upload requested"
|
||||||
may-take-time: "L'upload de votre fichier peut prendre un certain temps."
|
may-take-time: "L'upload de votre fichier peut prendre un certain temps."
|
||||||
@@ -590,8 +625,8 @@ desktop/views/components/drive.vue:
|
|||||||
folder-name: "Nom du dossier"
|
folder-name: "Nom du dossier"
|
||||||
contextmenu:
|
contextmenu:
|
||||||
create-folder: "Créer un dossier"
|
create-folder: "Créer un dossier"
|
||||||
upload: "Uploader un fichier"
|
upload: "Transférer un fichier"
|
||||||
url-upload: "Uploader d'un URL"
|
url-upload: "Transférer à partir d’une URL"
|
||||||
desktop/views/components/media-image.vue:
|
desktop/views/components/media-image.vue:
|
||||||
sensitive: "Le contenu est NSFW"
|
sensitive: "Le contenu est NSFW"
|
||||||
click-to-show: "Cliquer pour afficher"
|
click-to-show: "Cliquer pour afficher"
|
||||||
@@ -639,14 +674,14 @@ desktop/views/components/note-detail.vue:
|
|||||||
location: "Géolocalisation"
|
location: "Géolocalisation"
|
||||||
renote: "Republier"
|
renote: "Republier"
|
||||||
add-reaction: "Ajouter votre reaction"
|
add-reaction: "Ajouter votre reaction"
|
||||||
desktop/views/components/notes.note.vue:
|
desktop/views/components/note.vue:
|
||||||
reposted-by: "Reposté par {}"
|
reposted-by: "Partagé par {}"
|
||||||
reply: "Répondre"
|
reply: "Répondre"
|
||||||
renote: "Republier"
|
renote: "Partager"
|
||||||
add-reaction: "Ajouter votre reaction"
|
add-reaction: "リアクション"
|
||||||
detail: "Afficher les détails"
|
detail: "詳細"
|
||||||
private: "cette publication est privée"
|
private: "この投稿は非公開です"
|
||||||
deleted: "cette publication a été supprimée"
|
deleted: "この投稿は削除されました"
|
||||||
desktop/views/components/notes.vue:
|
desktop/views/components/notes.vue:
|
||||||
error: "Échec du chargement."
|
error: "Échec du chargement."
|
||||||
retry: "Réessayer"
|
retry: "Réessayer"
|
||||||
@@ -658,21 +693,21 @@ desktop/views/components/post-form.vue:
|
|||||||
add-visible-user: "+Ajouter un utilisateur"
|
add-visible-user: "+Ajouter un utilisateur"
|
||||||
attach-location-information: "Attacher des informations de localisation"
|
attach-location-information: "Attacher des informations de localisation"
|
||||||
hide-contents: "Masquer les contenus"
|
hide-contents: "Masquer les contenus"
|
||||||
reply-placeholder: "Répondre à cette note"
|
reply-placeholder: "Répondre à cette note …"
|
||||||
quote-placeholder: "Citer cette note"
|
quote-placeholder: "Citer cette note …"
|
||||||
submit: "Poster"
|
submit: "Publier"
|
||||||
reply: "Répondre"
|
reply: "Répondre"
|
||||||
renote: "Republier"
|
renote: "Republier"
|
||||||
posted: "Posté!"
|
posted: "Publié !"
|
||||||
replied: "Répondu!"
|
replied: "Répondu !"
|
||||||
reposted: "Reposté!"
|
reposted: "Reposté !"
|
||||||
note-failed: "La note à échoué"
|
note-failed: "La note à échoué"
|
||||||
reply-failed: "La réponse à échoué"
|
reply-failed: "La réponse à échoué"
|
||||||
renote-failed: "La renote à échoué"
|
renote-failed: "Échec lors de la republication"
|
||||||
posting: "Publication..."
|
posting: "Publication …"
|
||||||
attach-media-from-local: "Joindre un media depuis votre PC"
|
attach-media-from-local: "Joindre un média depuis votre appareil"
|
||||||
attach-media-from-drive: "Joindre un media depuis votre Drive"
|
attach-media-from-drive: "Joindre un média depuis votre Drive"
|
||||||
attach-cancel: "Annuler la jointure de fichier"
|
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: "{} charactères restants"
|
text-remain: "{} charactères restants"
|
||||||
@@ -687,15 +722,15 @@ desktop/views/components/post-form-window.vue:
|
|||||||
note: "Nouvelle note"
|
note: "Nouvelle note"
|
||||||
reply: "Répondre"
|
reply: "Répondre"
|
||||||
attaches: "{} media joint(s)"
|
attaches: "{} media joint(s)"
|
||||||
uploading-media: "Upload du media {}"
|
uploading-media: "Transfert du média {}"
|
||||||
desktop/views/components/progress-dialog.vue:
|
desktop/views/components/progress-dialog.vue:
|
||||||
waiting: "En attente"
|
waiting: "En attente"
|
||||||
desktop/views/components/renote-form.vue:
|
desktop/views/components/renote-form.vue:
|
||||||
quote: "Citer..."
|
quote: "Citer..."
|
||||||
cancel: "Annuler"
|
cancel: "Annuler"
|
||||||
renote: "Republier"
|
renote: "Republier"
|
||||||
reposting: "Repost en cours..."
|
reposting: "Republication en cours …"
|
||||||
success: "Reposté!"
|
success: "Republié !"
|
||||||
failure: "La renote a échoué"
|
failure: "La renote a échoué"
|
||||||
desktop/views/components/renote-form-window.vue:
|
desktop/views/components/renote-form-window.vue:
|
||||||
title: "Êtes vous sûr de vouloir renote cette note?"
|
title: "Êtes vous sûr de vouloir renote cette note?"
|
||||||
@@ -725,8 +760,12 @@ desktop/views/components/settings.vue:
|
|||||||
advanced: "Paramètres avancés"
|
advanced: "Paramètres avancés"
|
||||||
api-via-stream: "Requête API via le flux"
|
api-via-stream: "Requête API via le flux"
|
||||||
api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。"
|
api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。"
|
||||||
|
deck-nav: "デッキ内ナビゲーション"
|
||||||
|
deck-nav-desc: "デッキを使用しているとき、ナビゲーションが発生する際にページ遷移を行わずに一時的なカラムで受けるようにします。"
|
||||||
|
deck-default: "デッキをデフォルトのUIにする"
|
||||||
display: "Affichage et design"
|
display: "Affichage et design"
|
||||||
customize: "Personnaliser l'Accueil"
|
customize: "Personnaliser l'Accueil"
|
||||||
|
wallpaper: "壁紙"
|
||||||
choose-wallpaper: "Sélectionner un fond d'écran"
|
choose-wallpaper: "Sélectionner un fond d'écran"
|
||||||
delete-wallpaper: "Supprimer le fond d'écran"
|
delete-wallpaper: "Supprimer le fond d'écran"
|
||||||
dark-mode: "Mode nuit"
|
dark-mode: "Mode nuit"
|
||||||
@@ -738,17 +777,19 @@ desktop/views/components/settings.vue:
|
|||||||
suggest-recent-hashtags: "Afficher les hashtags populaires dans le champs de saisie"
|
suggest-recent-hashtags: "Afficher les hashtags populaires dans le champs de saisie"
|
||||||
show-clock-on-header: "Afficher l'horloge à droite sur le coté supérieur"
|
show-clock-on-header: "Afficher l'horloge à droite sur le coté supérieur"
|
||||||
show-reply-target: "Afficher les réponses"
|
show-reply-target: "Afficher les réponses"
|
||||||
|
timeline: "タイムライン"
|
||||||
show-my-renotes: "Afficher mes republications dans le fil"
|
show-my-renotes: "Afficher mes republications dans le fil"
|
||||||
show-renoted-my-notes: "Afficher mes republications dans les fils"
|
show-renoted-my-notes: "Afficher mes republications dans les fils"
|
||||||
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
||||||
show-maps: "Afficher la carte"
|
show-maps: "Afficher la carte"
|
||||||
|
deck-column-align: "デッキのカラムの位置"
|
||||||
|
deck-column-align-center: "中央"
|
||||||
|
deck-column-align-left: "左"
|
||||||
sound: "Son"
|
sound: "Son"
|
||||||
enable-sounds: "Activer le son"
|
enable-sounds: "Activer le son"
|
||||||
enable-sounds-desc: "Jouer un son lorsque vous recevez un message. Ce paramètre est sauvegardé dans le navigateur."
|
enable-sounds-desc: "Jouer un son lorsque vous recevez un message. Ce paramètre est sauvegardé dans le navigateur."
|
||||||
volume: "Volume"
|
volume: "Volume"
|
||||||
test: "Test"
|
test: "Test"
|
||||||
mobile: "Mobile"
|
|
||||||
disable-via-mobile: "Enlever la mention publié via 'un périphérique mobile'"
|
|
||||||
language: "Langue"
|
language: "Langue"
|
||||||
pick-language: "Sélectionner une langue"
|
pick-language: "Sélectionner une langue"
|
||||||
recommended: "Recommandé"
|
recommended: "Recommandé"
|
||||||
@@ -784,6 +825,10 @@ desktop/views/components/settings.vue:
|
|||||||
tools: "Outils"
|
tools: "Outils"
|
||||||
task-manager: "Gestionnaire de tâches"
|
task-manager: "Gestionnaire de tâches"
|
||||||
third-parties: "Services tiers"
|
third-parties: "Services tiers"
|
||||||
|
navbar-position: "ナビゲーションバーの位置"
|
||||||
|
navbar-position-top: "En haut"
|
||||||
|
navbar-position-left: "à gauche"
|
||||||
|
navbar-position-right: "à droite"
|
||||||
desktop/views/components/settings.2fa.vue:
|
desktop/views/components/settings.2fa.vue:
|
||||||
intro: "Si vous configurez la vérication en deux étapes vous aurez non seulement besoin de votre mot de passe mais aussi un appareil déjà pré-enregistré(tel que votre smartphone) ce qui ameliora grandement la sécurité de votre compte."
|
intro: "Si vous configurez la vérication en deux étapes vous aurez non seulement besoin de votre mot de passe mais aussi un appareil déjà pré-enregistré(tel que votre smartphone) ce qui ameliora grandement la sécurité de votre compte."
|
||||||
detail: "Voir les détails..."
|
detail: "Voir les détails..."
|
||||||
@@ -823,20 +868,6 @@ desktop/views/components/settings.password.vue:
|
|||||||
enter-new-password-again: "Entrez à nouveau le nouveau mot de passe"
|
enter-new-password-again: "Entrez à nouveau le nouveau mot de passe"
|
||||||
not-match: "Le nouveau mot de passe ne correspond pas."
|
not-match: "Le nouveau mot de passe ne correspond pas."
|
||||||
changed: "Mot de passe modifié avec succès"
|
changed: "Mot de passe modifié avec succès"
|
||||||
desktop/views/components/settings.profile.vue:
|
|
||||||
avatar: "Avatar"
|
|
||||||
choice-avatar: "Choose an image"
|
|
||||||
name: "Nom"
|
|
||||||
location: "Localisation"
|
|
||||||
description: "Description"
|
|
||||||
birthday: "Date de naissance"
|
|
||||||
save: "Mettre à jour le profil"
|
|
||||||
locked-account: "Protéger votre compte"
|
|
||||||
is-locked: "Demande d’abonnement en attente d’approbation"
|
|
||||||
other: "Autre"
|
|
||||||
is-bot: "Ce compte est un Bot"
|
|
||||||
is-cat: "Ce compte est un Chat"
|
|
||||||
profile-updated: "Profil mis à jour"
|
|
||||||
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"
|
||||||
@@ -878,7 +909,7 @@ desktop/views/components/ui.header.nav.vue:
|
|||||||
desktop/views/components/ui.header.notifications.vue:
|
desktop/views/components/ui.header.notifications.vue:
|
||||||
title: "Notifications"
|
title: "Notifications"
|
||||||
desktop/views/components/ui.header.post.vue:
|
desktop/views/components/ui.header.post.vue:
|
||||||
post: "Composer un nouveau post"
|
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:
|
desktop/views/components/received-follow-requests-window.vue:
|
||||||
@@ -908,6 +939,8 @@ desktop/views/pages/admin/admin.vue:
|
|||||||
drive: "Drive"
|
drive: "Drive"
|
||||||
users: "Utilisateur·rice·s"
|
users: "Utilisateur·rice·s"
|
||||||
update: "Mises à jour"
|
update: "Mises à jour"
|
||||||
|
announcements: "お知らせ"
|
||||||
|
hashtags: "ハッシュタグ"
|
||||||
desktop/views/pages/admin/admin.dashboard.vue:
|
desktop/views/pages/admin/admin.dashboard.vue:
|
||||||
dashboard: "Tableau de bord"
|
dashboard: "Tableau de bord"
|
||||||
all-users: "Toutes les utilisateurrices"
|
all-users: "Toutes les utilisateurrices"
|
||||||
@@ -915,6 +948,9 @@ desktop/views/pages/admin/admin.dashboard.vue:
|
|||||||
all-notes: "Toutes les publications"
|
all-notes: "Toutes les publications"
|
||||||
original-notes: "Publications sur cette instance"
|
original-notes: "Publications sur cette instance"
|
||||||
invite: "Invitation"
|
invite: "Invitation"
|
||||||
|
banner-url: "Banner URL"
|
||||||
|
disableRegistration: "Disable new user registration"
|
||||||
|
disableLocalTimeline: "Disable the local timeline"
|
||||||
desktop/views/pages/admin/admin.suspend-user.vue:
|
desktop/views/pages/admin/admin.suspend-user.vue:
|
||||||
suspend-user: "Suspendre un·e utilisateur·rice"
|
suspend-user: "Suspendre un·e utilisateur·rice"
|
||||||
suspend: "Suspendre"
|
suspend: "Suspendre"
|
||||||
@@ -931,14 +967,23 @@ desktop/views/pages/admin/admin.unverify-user.vue:
|
|||||||
unverify-user: "ユーザーの公式アカウント解除"
|
unverify-user: "ユーザーの公式アカウント解除"
|
||||||
unverify: "Ôter la vérification du compte"
|
unverify: "Ôter la vérification du compte"
|
||||||
unverified: "Ce compte n'est pas vérifié"
|
unverified: "Ce compte n'est pas vérifié"
|
||||||
|
desktop/views/pages/admin/admin.announcements.vue:
|
||||||
|
announcements: "お知らせ"
|
||||||
|
desktop/views/pages/admin/admin.hashtags.vue:
|
||||||
|
hided-tags: "Hidden Tags"
|
||||||
desktop/views/pages/deck/deck.tl-column.vue:
|
desktop/views/pages/deck/deck.tl-column.vue:
|
||||||
is-media-only: "Les publications médias uniquement"
|
is-media-only: "Les publications médias uniquement"
|
||||||
is-media-view: "Vue média"
|
is-media-view: "Vue média"
|
||||||
edit: "Options"
|
edit: "Options"
|
||||||
desktop/views/pages/deck/deck.note.vue:
|
desktop/views/pages/deck/deck.user-column.vue:
|
||||||
reposted-by: "Reposté par {}"
|
posts: "投稿"
|
||||||
private: "cette publication est privée"
|
following: "フォロー"
|
||||||
deleted: "cette publication a été supprimée"
|
followers: "フォロワー"
|
||||||
|
images: "画像"
|
||||||
|
activity: "アクティビティ"
|
||||||
|
timeline: "タイムライン"
|
||||||
|
pinned-notes: "ピン留めされた投稿"
|
||||||
|
push-to-a-list: "リストに追加"
|
||||||
desktop/views/pages/stats/stats.vue:
|
desktop/views/pages/stats/stats.vue:
|
||||||
all-users: "Toutes les utilisateurrices"
|
all-users: "Toutes les utilisateurrices"
|
||||||
original-users: "Utilisateur·rice·s sur cette instance"
|
original-users: "Utilisateur·rice·s sur cette instance"
|
||||||
@@ -969,7 +1014,7 @@ desktop/views/pages/selectdrive.vue:
|
|||||||
title: "Choisir fichier(s)"
|
title: "Choisir fichier(s)"
|
||||||
ok: "OK"
|
ok: "OK"
|
||||||
cancel: "Annuler"
|
cancel: "Annuler"
|
||||||
upload: "Uploader un ou plusieurs fichier(s) depuis votre PC"
|
upload: "Téléverser des fichiers à partir de votre ordinateur"
|
||||||
desktop/views/pages/search.vue:
|
desktop/views/pages/search.vue:
|
||||||
not-available: "La fonction de recherche est désactivée dans les paramètres de l’instance."
|
not-available: "La fonction de recherche est désactivée dans les paramètres de l’instance."
|
||||||
not-found: "Aucun message trouvé pour '{}'"
|
not-found: "Aucun message trouvé pour '{}'"
|
||||||
@@ -991,10 +1036,7 @@ desktop/views/pages/user/user.friends.vue:
|
|||||||
no-users: "Pas d'utilisateurs"
|
no-users: "Pas d'utilisateurs"
|
||||||
desktop/views/pages/user/user.vue:
|
desktop/views/pages/user/user.vue:
|
||||||
is-suspended: "Ce compte a été suspendu."
|
is-suspended: "Ce compte a été suspendu."
|
||||||
is-remote: "Cet utilisateur n'est pas un utilisateur Misskey. Certaines informations peuvent ne pas refléter ce profil dans sa totalité."
|
last-used-at: "最終アクセス"
|
||||||
view-remote: "Consulter le profil complet"
|
|
||||||
desktop/views/pages/user/user.home.vue:
|
|
||||||
last-used-at: "Last used at"
|
|
||||||
desktop/views/pages/user/user.photos.vue:
|
desktop/views/pages/user/user.photos.vue:
|
||||||
title: "Photos"
|
title: "Photos"
|
||||||
loading: "Chargement en cours"
|
loading: "Chargement en cours"
|
||||||
@@ -1014,6 +1056,10 @@ desktop/views/pages/user/user.header.vue:
|
|||||||
following: "Suit"
|
following: "Suit"
|
||||||
followers: "Abonné·e·s"
|
followers: "Abonné·e·s"
|
||||||
is-bot: "Ce compte est un Bot"
|
is-bot: "Ce compte est un Bot"
|
||||||
|
years-old: "歳"
|
||||||
|
year: "年"
|
||||||
|
month: "月"
|
||||||
|
day: "日"
|
||||||
desktop/views/pages/user/user.timeline.vue:
|
desktop/views/pages/user/user.timeline.vue:
|
||||||
default: "Publications"
|
default: "Publications"
|
||||||
with-replies: "Publications et réponses"
|
with-replies: "Publications et réponses"
|
||||||
@@ -1029,8 +1075,8 @@ desktop/views/widgets/polls.vue:
|
|||||||
refresh: "Afficher d'autres"
|
refresh: "Afficher d'autres"
|
||||||
nothing: "Rien"
|
nothing: "Rien"
|
||||||
desktop/views/widgets/post-form.vue:
|
desktop/views/widgets/post-form.vue:
|
||||||
title: "Post"
|
title: "Publication"
|
||||||
note: "Post"
|
note: "Publication"
|
||||||
desktop/views/widgets/profile.vue:
|
desktop/views/widgets/profile.vue:
|
||||||
update-banner: "Cliquer pour éditer votre bannière"
|
update-banner: "Cliquer pour éditer votre bannière"
|
||||||
update-avatar: "Cliquer pour éditer votre avatar"
|
update-avatar: "Cliquer pour éditer votre avatar"
|
||||||
@@ -1073,6 +1119,8 @@ mobile/views/components/drive.file-detail.vue:
|
|||||||
hash: "Hash (md5)"
|
hash: "Hash (md5)"
|
||||||
exif: "EXIF"
|
exif: "EXIF"
|
||||||
nsfw: "CW"
|
nsfw: "CW"
|
||||||
|
mark-as-sensitive: "閲覧注意に設定"
|
||||||
|
unmark-as-sensitive: "閲覧注意を解除"
|
||||||
mobile/views/components/media-image.vue:
|
mobile/views/components/media-image.vue:
|
||||||
sensitive: "Le contenu est NSFW"
|
sensitive: "Le contenu est NSFW"
|
||||||
click-to-show: "Cliquer pour afficher"
|
click-to-show: "Cliquer pour afficher"
|
||||||
@@ -1092,7 +1140,7 @@ mobile/views/components/friends-maker.vue:
|
|||||||
refresh: "Voir plus"
|
refresh: "Voir plus"
|
||||||
close: "Fermer"
|
close: "Fermer"
|
||||||
mobile/views/components/note.vue:
|
mobile/views/components/note.vue:
|
||||||
reposted-by: "Renoté par {}"
|
reposted-by: "Republié par {}"
|
||||||
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"
|
||||||
location: "Géolocalisation"
|
location: "Géolocalisation"
|
||||||
@@ -1119,7 +1167,7 @@ mobile/views/components/notifications.vue:
|
|||||||
empty: "Pas de notifications"
|
empty: "Pas de notifications"
|
||||||
mobile/views/components/post-form.vue:
|
mobile/views/components/post-form.vue:
|
||||||
add-visible-user: "Ajouter un utilisateur"
|
add-visible-user: "Ajouter un utilisateur"
|
||||||
submit: "Poster"
|
submit: "Publier"
|
||||||
reply: "Répondre"
|
reply: "Répondre"
|
||||||
renote: "Republier"
|
renote: "Republier"
|
||||||
quote-placeholder: "Citer ce billet ... (Facultatif)"
|
quote-placeholder: "Citer ce billet ... (Facultatif)"
|
||||||
@@ -1213,23 +1261,6 @@ mobile/views/pages/notifications.vue:
|
|||||||
read-all: "Êtes vous sûr de vouloir marqués toutes les notifications non-lus en tant que lus?"
|
read-all: "Êtes vous sûr de vouloir marqués toutes les notifications non-lus en tant que lus?"
|
||||||
mobile/views/pages/games/reversi.vue:
|
mobile/views/pages/games/reversi.vue:
|
||||||
reversi: "Reversi"
|
reversi: "Reversi"
|
||||||
mobile/views/pages/settings/settings.profile.vue:
|
|
||||||
title: "Profil"
|
|
||||||
name: "Nom"
|
|
||||||
account: "Compte"
|
|
||||||
location: "Lieu"
|
|
||||||
description: "Description"
|
|
||||||
birthday: "Date de naissance"
|
|
||||||
avatar: "Avatar"
|
|
||||||
banner: "Bannière"
|
|
||||||
is-cat: "Ce compte est un Bot"
|
|
||||||
is-locked: "Demande d’abonnement en attente d’approbation"
|
|
||||||
advanced: "Avancé"
|
|
||||||
privacy: "Vie privée"
|
|
||||||
save: "Mettre à jour le profil"
|
|
||||||
saved: "Profil mis à jour avec succès"
|
|
||||||
uploading: "En cours d'envoi"
|
|
||||||
upload-failed: "Échec de l'envoi"
|
|
||||||
mobile/views/pages/search.vue:
|
mobile/views/pages/search.vue:
|
||||||
search: "Chercher"
|
search: "Chercher"
|
||||||
empty: "Aucun message trouvé pour '{}' "
|
empty: "Aucun message trouvé pour '{}' "
|
||||||
@@ -1285,6 +1316,7 @@ mobile/views/pages/settings.vue:
|
|||||||
signout: "Déconnexion"
|
signout: "Déconnexion"
|
||||||
sound: "Sons"
|
sound: "Sons"
|
||||||
enable-sounds: "Activer les sons"
|
enable-sounds: "Activer les sons"
|
||||||
|
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
|
||||||
mobile/views/pages/user.vue:
|
mobile/views/pages/user.vue:
|
||||||
follows-you: "Vous suit"
|
follows-you: "Vous suit"
|
||||||
following: "Abonnements"
|
following: "Abonnements"
|
||||||
@@ -1294,8 +1326,6 @@ mobile/views/pages/user.vue:
|
|||||||
timeline: "Fil d'actualité"
|
timeline: "Fil d'actualité"
|
||||||
media: "Media"
|
media: "Media"
|
||||||
is-suspended: "This account has been suspended."
|
is-suspended: "This account has been suspended."
|
||||||
is-remote: "Ceci est le profil d’un utilisateur·rice distant·e. Certaines informations peuvent ne pas refléter ce profil dans sa totalité."
|
|
||||||
view-remote: "Consulter son profil complet"
|
|
||||||
mobile/views/pages/user/home.vue:
|
mobile/views/pages/user/home.vue:
|
||||||
recent-notes: "Notes récentes"
|
recent-notes: "Notes récentes"
|
||||||
images: "Images"
|
images: "Images"
|
||||||
@@ -1341,3 +1371,29 @@ docs:
|
|||||||
description: "Description"
|
description: "Description"
|
||||||
dev/views/index.vue:
|
dev/views/index.vue:
|
||||||
manage-apps: "Gestion des applications"
|
manage-apps: "Gestion des applications"
|
||||||
|
dev/views/apps.vue:
|
||||||
|
manage-apps: "アプリを管理"
|
||||||
|
create-app: "アプリ作成"
|
||||||
|
app-missing: "アプリなし"
|
||||||
|
dev/views/new-app.vue:
|
||||||
|
create-app: "アプリケーションの作成"
|
||||||
|
app-name: "アプリケーション名"
|
||||||
|
app-name-desc: "あなたのアプリの名称。"
|
||||||
|
app-name-ex: "ex) Misskey for iOS"
|
||||||
|
app-overview: "アプリの概要"
|
||||||
|
app-desc: "あなたのアプリの簡単な説明や紹介。"
|
||||||
|
app-desc-ex: "ex) Misskey iOSクライアント。"
|
||||||
|
callback-url: "コールバックURL (オプション)"
|
||||||
|
callback-url-desc: "ユーザーが認証フォームで認証した際にリダイレクトするURLを設定できます。"
|
||||||
|
authority: "権限"
|
||||||
|
authority-desc: "ここで要求した機能だけがAPIからアクセスできます。"
|
||||||
|
authority-warning: "アプリ作成後も変更できますが、新たな権限を付与する場合、その時点で関連付けられているユーザーキーはすべて無効になります。"
|
||||||
|
account-read: "アカウントの情報を見る。"
|
||||||
|
account-write: "アカウントの情報を操作する。"
|
||||||
|
note-write: "投稿する。"
|
||||||
|
reaction-write: "リアクションしたりリアクションをキャンセルする。"
|
||||||
|
following-write: "フォローしたりフォロー解除する。"
|
||||||
|
drive-read: "ドライブを見る。"
|
||||||
|
drive-write: "ドライブを操作する。"
|
||||||
|
notification-read: "通知を見る。"
|
||||||
|
notification-write: "通知を操作する。"
|
||||||
|
|||||||
@@ -25,6 +25,14 @@ common:
|
|||||||
application-authorization: "アプリの連携"
|
application-authorization: "アプリの連携"
|
||||||
close: "閉じる"
|
close: "閉じる"
|
||||||
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
|
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
|
||||||
|
BSoD:
|
||||||
|
fatal-error: ":( 致命的な問題が発生しました。"
|
||||||
|
update-browser-os: "お使いのブラウザ(またはOS)のバージョンを更新すると解決する可能性があります。"
|
||||||
|
error-code: "エラーコード"
|
||||||
|
browser-version: "ブラウザ バージョン"
|
||||||
|
client-version: "クライアント バージョン"
|
||||||
|
email-support: "問題が解決しない場合は、上記の情報をお書き添えの上 syuilotan@yahoo.co.jp までご連絡ください。"
|
||||||
|
thanks: "Thank you for using Misskey."
|
||||||
got-it: "わかった"
|
got-it: "わかった"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "カスタマイズのヒント"
|
title: "カスタマイズのヒント"
|
||||||
@@ -115,6 +123,12 @@ common:
|
|||||||
reduce-motion: "UIの動きを減らす"
|
reduce-motion: "UIの動きを減らす"
|
||||||
this-setting-is-this-device-only: "このデバイスのみ"
|
this-setting-is-this-device-only: "このデバイスのみ"
|
||||||
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
|
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
|
||||||
|
is-remote-user: "このユーザー情報はコピーです。"
|
||||||
|
is-remote-post: "この投稿情報はコピーです。"
|
||||||
|
view-on-remote: "正確な情報を見る"
|
||||||
|
error:
|
||||||
|
title: '問題が発生しました'
|
||||||
|
retry: 'やり直す'
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "引き分け"
|
drawn: "引き分け"
|
||||||
my-turn: "あなたのターンです"
|
my-turn: "あなたのターンです"
|
||||||
@@ -170,6 +184,7 @@ common:
|
|||||||
rename: "名前を変更"
|
rename: "名前を変更"
|
||||||
stack-left: "左に重ねる"
|
stack-left: "左に重ねる"
|
||||||
pop-right: "右に出す"
|
pop-right: "右に出す"
|
||||||
|
dev: "アプリの作成に失敗しました。再度お試しください。"
|
||||||
auth/views/form.vue:
|
auth/views/form.vue:
|
||||||
share-access: "<i>{{ app.name }}</i>があなたのアカウントにアクセスすることを<b>許可</b>しますか?"
|
share-access: "<i>{{ app.name }}</i>があなたのアカウントにアクセスすることを<b>許可</b>しますか?"
|
||||||
permission-ask: "このアプリは次の権限を要求しています:"
|
permission-ask: "このアプリは次の権限を要求しています:"
|
||||||
@@ -335,6 +350,7 @@ common/views/components/note-menu.vue:
|
|||||||
detail: "詳細"
|
detail: "詳細"
|
||||||
copy-link: "リンクをコピー"
|
copy-link: "リンクをコピー"
|
||||||
favorite: "お気に入り"
|
favorite: "お気に入り"
|
||||||
|
unfavorite: "お気に入り解除"
|
||||||
pin: "ピン留め"
|
pin: "ピン留め"
|
||||||
unpin: "ピン留め解除"
|
unpin: "ピン留め解除"
|
||||||
delete: "削除"
|
delete: "削除"
|
||||||
@@ -415,6 +431,25 @@ common/views/components/visibility-chooser.vue:
|
|||||||
common/views/components/trends.vue:
|
common/views/components/trends.vue:
|
||||||
count: "{}人が投稿"
|
count: "{}人が投稿"
|
||||||
empty: "トレンドなし"
|
empty: "トレンドなし"
|
||||||
|
common/views/components/profile-editor.vue:
|
||||||
|
title: "プロフィール"
|
||||||
|
name: "名前"
|
||||||
|
account: "アカウント"
|
||||||
|
location: "場所"
|
||||||
|
description: "自己紹介"
|
||||||
|
birthday: "誕生日"
|
||||||
|
avatar: "アイコン"
|
||||||
|
banner: "バナー"
|
||||||
|
is-cat: "このアカウントはCatです"
|
||||||
|
is-bot: "このアカウントはBotです"
|
||||||
|
is-locked: "フォローを承認制にする"
|
||||||
|
careful-bot: "Botからのフォローだけ承認制にする"
|
||||||
|
advanced: "その他"
|
||||||
|
privacy: "プライバシー"
|
||||||
|
save: "保存"
|
||||||
|
saved: "プロフィールを保存しました"
|
||||||
|
uploading: "アップロード中"
|
||||||
|
upload-failed: "アップロードに失敗しました"
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "確認中"
|
fetching: "確認中"
|
||||||
no-broadcasts: "お知らせはありません"
|
no-broadcasts: "お知らせはありません"
|
||||||
@@ -639,7 +674,7 @@ desktop/views/components/note-detail.vue:
|
|||||||
location: "位置情報"
|
location: "位置情報"
|
||||||
renote: "Renote"
|
renote: "Renote"
|
||||||
add-reaction: "リアクション"
|
add-reaction: "リアクション"
|
||||||
desktop/views/components/notes.note.vue:
|
desktop/views/components/note.vue:
|
||||||
reposted-by: "{}がRenote"
|
reposted-by: "{}がRenote"
|
||||||
reply: "返信"
|
reply: "返信"
|
||||||
renote: "Renote"
|
renote: "Renote"
|
||||||
@@ -725,8 +760,12 @@ desktop/views/components/settings.vue:
|
|||||||
advanced: "詳細設定"
|
advanced: "詳細設定"
|
||||||
api-via-stream: "ストリームを経由したAPIリクエスト"
|
api-via-stream: "ストリームを経由したAPIリクエスト"
|
||||||
api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。"
|
api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。"
|
||||||
|
deck-nav: "デッキ内ナビゲーション"
|
||||||
|
deck-nav-desc: "デッキを使用しているとき、ナビゲーションが発生する際にページ遷移を行わずに一時的なカラムで受けるようにします。"
|
||||||
|
deck-default: "デッキをデフォルトのUIにする"
|
||||||
display: "デザインと表示"
|
display: "デザインと表示"
|
||||||
customize: "ホームをカスタマイズ"
|
customize: "ホームをカスタマイズ"
|
||||||
|
wallpaper: "壁紙"
|
||||||
choose-wallpaper: "壁紙を選択"
|
choose-wallpaper: "壁紙を選択"
|
||||||
delete-wallpaper: "壁紙を削除"
|
delete-wallpaper: "壁紙を削除"
|
||||||
dark-mode: "ダークモード"
|
dark-mode: "ダークモード"
|
||||||
@@ -738,17 +777,19 @@ desktop/views/components/settings.vue:
|
|||||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||||
show-clock-on-header: "右上に時計を表示する"
|
show-clock-on-header: "右上に時計を表示する"
|
||||||
show-reply-target: "リプライ先を表示する"
|
show-reply-target: "リプライ先を表示する"
|
||||||
|
timeline: "タイムライン"
|
||||||
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
||||||
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
||||||
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
||||||
show-maps: "マップの自動展開"
|
show-maps: "マップの自動展開"
|
||||||
|
deck-column-align: "デッキのカラムの位置"
|
||||||
|
deck-column-align-center: "中央"
|
||||||
|
deck-column-align-left: "左"
|
||||||
sound: "サウンド"
|
sound: "サウンド"
|
||||||
enable-sounds: "サウンドを有効にする"
|
enable-sounds: "サウンドを有効にする"
|
||||||
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
||||||
volume: "ボリューム"
|
volume: "ボリューム"
|
||||||
test: "テスト"
|
test: "テスト"
|
||||||
mobile: "モバイル"
|
|
||||||
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
|
||||||
language: "言語"
|
language: "言語"
|
||||||
pick-language: "言語を選択"
|
pick-language: "言語を選択"
|
||||||
recommended: "推奨"
|
recommended: "推奨"
|
||||||
@@ -784,6 +825,10 @@ desktop/views/components/settings.vue:
|
|||||||
tools: "ツール"
|
tools: "ツール"
|
||||||
task-manager: "タスクマネージャ"
|
task-manager: "タスクマネージャ"
|
||||||
third-parties: "サードパーティ"
|
third-parties: "サードパーティ"
|
||||||
|
navbar-position: "ナビゲーションバーの位置"
|
||||||
|
navbar-position-top: "上"
|
||||||
|
navbar-position-left: "左"
|
||||||
|
navbar-position-right: "右"
|
||||||
desktop/views/components/settings.2fa.vue:
|
desktop/views/components/settings.2fa.vue:
|
||||||
intro: "二段階認証を設定すると、サインイン時にパスワードだけでなく、予め登録しておいた物理的なデバイス(例えばあなたのスマートフォンなど)も必要になり、よりセキュリティが向上します。"
|
intro: "二段階認証を設定すると、サインイン時にパスワードだけでなく、予め登録しておいた物理的なデバイス(例えばあなたのスマートフォンなど)も必要になり、よりセキュリティが向上します。"
|
||||||
detail: "詳細..."
|
detail: "詳細..."
|
||||||
@@ -823,20 +868,6 @@ desktop/views/components/settings.password.vue:
|
|||||||
enter-new-password-again: "もう一度新しいパスワードを入力してください"
|
enter-new-password-again: "もう一度新しいパスワードを入力してください"
|
||||||
not-match: "新しいパスワードが一致しません"
|
not-match: "新しいパスワードが一致しません"
|
||||||
changed: "パスワードを変更しました"
|
changed: "パスワードを変更しました"
|
||||||
desktop/views/components/settings.profile.vue:
|
|
||||||
avatar: "アイコン"
|
|
||||||
choice-avatar: "画像を選択"
|
|
||||||
name: "名前"
|
|
||||||
location: "場所"
|
|
||||||
description: "自己紹介"
|
|
||||||
birthday: "誕生日"
|
|
||||||
save: "保存"
|
|
||||||
locked-account: "アカウントの保護"
|
|
||||||
is-locked: "フォローを承認制にする"
|
|
||||||
other: "その他"
|
|
||||||
is-bot: "このアカウントはBotです"
|
|
||||||
is-cat: "このアカウントはCatです"
|
|
||||||
profile-updated: "プロフィールを更新しました"
|
|
||||||
desktop/views/components/sub-note-content.vue:
|
desktop/views/components/sub-note-content.vue:
|
||||||
private: "この投稿は非公開です"
|
private: "この投稿は非公開です"
|
||||||
deleted: "この投稿は削除されました"
|
deleted: "この投稿は削除されました"
|
||||||
@@ -908,6 +939,8 @@ desktop/views/pages/admin/admin.vue:
|
|||||||
drive: "ドライブ"
|
drive: "ドライブ"
|
||||||
users: "ユーザー"
|
users: "ユーザー"
|
||||||
update: "更新"
|
update: "更新"
|
||||||
|
announcements: "お知らせ"
|
||||||
|
hashtags: "ハッシュタグ"
|
||||||
desktop/views/pages/admin/admin.dashboard.vue:
|
desktop/views/pages/admin/admin.dashboard.vue:
|
||||||
dashboard: "ダッシュボード"
|
dashboard: "ダッシュボード"
|
||||||
all-users: "全てのユーザー"
|
all-users: "全てのユーザー"
|
||||||
@@ -915,6 +948,9 @@ desktop/views/pages/admin/admin.dashboard.vue:
|
|||||||
all-notes: "全ての投稿"
|
all-notes: "全ての投稿"
|
||||||
original-notes: "このインスタンスの投稿"
|
original-notes: "このインスタンスの投稿"
|
||||||
invite: "招待"
|
invite: "招待"
|
||||||
|
banner-url: "Banner URL"
|
||||||
|
disableRegistration: "Disable new user registration"
|
||||||
|
disableLocalTimeline: "Disable the local timeline"
|
||||||
desktop/views/pages/admin/admin.suspend-user.vue:
|
desktop/views/pages/admin/admin.suspend-user.vue:
|
||||||
suspend-user: "ユーザーの凍結"
|
suspend-user: "ユーザーの凍結"
|
||||||
suspend: "凍結"
|
suspend: "凍結"
|
||||||
@@ -931,14 +967,23 @@ desktop/views/pages/admin/admin.unverify-user.vue:
|
|||||||
unverify-user: "ユーザーの公式アカウント解除"
|
unverify-user: "ユーザーの公式アカウント解除"
|
||||||
unverify: "公式アカウントを解除する"
|
unverify: "公式アカウントを解除する"
|
||||||
unverified: "公式アカウントを解除しました"
|
unverified: "公式アカウントを解除しました"
|
||||||
|
desktop/views/pages/admin/admin.announcements.vue:
|
||||||
|
announcements: "お知らせ"
|
||||||
|
desktop/views/pages/admin/admin.hashtags.vue:
|
||||||
|
hided-tags: "Hidden Tags"
|
||||||
desktop/views/pages/deck/deck.tl-column.vue:
|
desktop/views/pages/deck/deck.tl-column.vue:
|
||||||
is-media-only: "メディア投稿のみ"
|
is-media-only: "メディア投稿のみ"
|
||||||
is-media-view: "メディアビュー"
|
is-media-view: "メディアビュー"
|
||||||
edit: "オプション"
|
edit: "オプション"
|
||||||
desktop/views/pages/deck/deck.note.vue:
|
desktop/views/pages/deck/deck.user-column.vue:
|
||||||
reposted-by: "{}がRenote"
|
posts: "投稿"
|
||||||
private: "この投稿は非公開です"
|
following: "フォロー"
|
||||||
deleted: "この投稿は削除されました"
|
followers: "フォロワー"
|
||||||
|
images: "画像"
|
||||||
|
activity: "アクティビティ"
|
||||||
|
timeline: "タイムライン"
|
||||||
|
pinned-notes: "ピン留めされた投稿"
|
||||||
|
push-to-a-list: "リストに追加"
|
||||||
desktop/views/pages/stats/stats.vue:
|
desktop/views/pages/stats/stats.vue:
|
||||||
all-users: "全てのユーザー"
|
all-users: "全てのユーザー"
|
||||||
original-users: "このインスタンスのユーザー"
|
original-users: "このインスタンスのユーザー"
|
||||||
@@ -991,9 +1036,6 @@ desktop/views/pages/user/user.friends.vue:
|
|||||||
no-users: "よく話すユーザーはいません"
|
no-users: "よく話すユーザーはいません"
|
||||||
desktop/views/pages/user/user.vue:
|
desktop/views/pages/user/user.vue:
|
||||||
is-suspended: "このユーザーは凍結されています。"
|
is-suspended: "このユーザーは凍結されています。"
|
||||||
is-remote: "このユーザーはリモートユーザーです。"
|
|
||||||
view-remote: "正確な情報を見る"
|
|
||||||
desktop/views/pages/user/user.home.vue:
|
|
||||||
last-used-at: "最終アクセス"
|
last-used-at: "最終アクセス"
|
||||||
desktop/views/pages/user/user.photos.vue:
|
desktop/views/pages/user/user.photos.vue:
|
||||||
title: "フォト"
|
title: "フォト"
|
||||||
@@ -1014,6 +1056,10 @@ desktop/views/pages/user/user.header.vue:
|
|||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
followers: "フォロワー"
|
followers: "フォロワー"
|
||||||
is-bot: "このアカウントはBotです"
|
is-bot: "このアカウントはBotです"
|
||||||
|
years-old: "歳"
|
||||||
|
year: "年"
|
||||||
|
month: "月"
|
||||||
|
day: "日"
|
||||||
desktop/views/pages/user/user.timeline.vue:
|
desktop/views/pages/user/user.timeline.vue:
|
||||||
default: "投稿"
|
default: "投稿"
|
||||||
with-replies: "投稿と返信"
|
with-replies: "投稿と返信"
|
||||||
@@ -1073,6 +1119,8 @@ mobile/views/components/drive.file-detail.vue:
|
|||||||
hash: "ハッシュ (md5)"
|
hash: "ハッシュ (md5)"
|
||||||
exif: "EXIF"
|
exif: "EXIF"
|
||||||
nsfw: "閲覧注意"
|
nsfw: "閲覧注意"
|
||||||
|
mark-as-sensitive: "閲覧注意に設定"
|
||||||
|
unmark-as-sensitive: "閲覧注意を解除"
|
||||||
mobile/views/components/media-image.vue:
|
mobile/views/components/media-image.vue:
|
||||||
sensitive: "閲覧注意"
|
sensitive: "閲覧注意"
|
||||||
click-to-show: "クリックして表示"
|
click-to-show: "クリックして表示"
|
||||||
@@ -1213,23 +1261,6 @@ mobile/views/pages/notifications.vue:
|
|||||||
read-all: "すべての通知を既読にしますか?"
|
read-all: "すべての通知を既読にしますか?"
|
||||||
mobile/views/pages/games/reversi.vue:
|
mobile/views/pages/games/reversi.vue:
|
||||||
reversi: "リバーシ"
|
reversi: "リバーシ"
|
||||||
mobile/views/pages/settings/settings.profile.vue:
|
|
||||||
title: "プロフィール"
|
|
||||||
name: "名前"
|
|
||||||
account: "アカウント"
|
|
||||||
location: "場所"
|
|
||||||
description: "自己紹介"
|
|
||||||
birthday: "誕生日"
|
|
||||||
avatar: "アイコン"
|
|
||||||
banner: "バナー"
|
|
||||||
is-cat: "このアカウントはCatです"
|
|
||||||
is-locked: "フォローを承認制にする"
|
|
||||||
advanced: "その他"
|
|
||||||
privacy: "プライバシー"
|
|
||||||
save: "保存"
|
|
||||||
saved: "プロフィールを保存しました"
|
|
||||||
uploading: "アップロード中"
|
|
||||||
upload-failed: "アップロードに失敗しました"
|
|
||||||
mobile/views/pages/search.vue:
|
mobile/views/pages/search.vue:
|
||||||
search: "検索"
|
search: "検索"
|
||||||
empty: "「{}」に関する投稿は見つかりませんでした。"
|
empty: "「{}」に関する投稿は見つかりませんでした。"
|
||||||
@@ -1285,6 +1316,7 @@ mobile/views/pages/settings.vue:
|
|||||||
signout: "サインアウト"
|
signout: "サインアウト"
|
||||||
sound: "サウンド"
|
sound: "サウンド"
|
||||||
enable-sounds: "サウンドを有効にする"
|
enable-sounds: "サウンドを有効にする"
|
||||||
|
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
|
||||||
mobile/views/pages/user.vue:
|
mobile/views/pages/user.vue:
|
||||||
follows-you: "フォローされています"
|
follows-you: "フォローされています"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
@@ -1294,8 +1326,6 @@ mobile/views/pages/user.vue:
|
|||||||
timeline: "タイムライン"
|
timeline: "タイムライン"
|
||||||
media: "メディア"
|
media: "メディア"
|
||||||
is-suspended: "このユーザーは凍結されています。"
|
is-suspended: "このユーザーは凍結されています。"
|
||||||
is-remote: "このユーザーはリモートユーザーです。"
|
|
||||||
view-remote: "正確な情報を見る"
|
|
||||||
mobile/views/pages/user/home.vue:
|
mobile/views/pages/user/home.vue:
|
||||||
recent-notes: "最近の投稿"
|
recent-notes: "最近の投稿"
|
||||||
images: "画像"
|
images: "画像"
|
||||||
@@ -1341,3 +1371,29 @@ docs:
|
|||||||
description: "説明"
|
description: "説明"
|
||||||
dev/views/index.vue:
|
dev/views/index.vue:
|
||||||
manage-apps: "アプリの管理"
|
manage-apps: "アプリの管理"
|
||||||
|
dev/views/apps.vue:
|
||||||
|
manage-apps: "アプリを管理"
|
||||||
|
create-app: "アプリ作成"
|
||||||
|
app-missing: "アプリなし"
|
||||||
|
dev/views/new-app.vue:
|
||||||
|
create-app: "アプリケーションの作成"
|
||||||
|
app-name: "アプリケーション名"
|
||||||
|
app-name-desc: "あなたのアプリの名称。"
|
||||||
|
app-name-ex: "ex) Misskey for iOS"
|
||||||
|
app-overview: "アプリの概要"
|
||||||
|
app-desc: "あなたのアプリの簡単な説明や紹介。"
|
||||||
|
app-desc-ex: "ex) Misskey iOSクライアント。"
|
||||||
|
callback-url: "コールバックURL (オプション)"
|
||||||
|
callback-url-desc: "ユーザーが認証フォームで認証した際にリダイレクトするURLを設定できます。"
|
||||||
|
authority: "権限"
|
||||||
|
authority-desc: "ここで要求した機能だけがAPIからアクセスできます。"
|
||||||
|
authority-warning: "アプリ作成後も変更できますが、新たな権限を付与する場合、その時点で関連付けられているユーザーキーはすべて無効になります。"
|
||||||
|
account-read: "アカウントの情報を見る。"
|
||||||
|
account-write: "アカウントの情報を操作する。"
|
||||||
|
note-write: "投稿する。"
|
||||||
|
reaction-write: "リアクションしたりリアクションをキャンセルする。"
|
||||||
|
following-write: "フォローしたりフォロー解除する。"
|
||||||
|
drive-read: "ドライブを見る。"
|
||||||
|
drive-write: "ドライブを操作する。"
|
||||||
|
notification-read: "通知を見る。"
|
||||||
|
notification-write: "通知を操作する。"
|
||||||
|
|||||||
@@ -25,6 +25,15 @@ common:
|
|||||||
application-authorization: "アプリの連携"
|
application-authorization: "アプリの連携"
|
||||||
close: "閉じる"
|
close: "閉じる"
|
||||||
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
|
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
|
||||||
|
BSoD:
|
||||||
|
fatal-error: ":( 致命的な問題が発生しました。"
|
||||||
|
update-browser-os: "お使いのブラウザ(またはOS)のバージョンを更新すると解決する可能性があります。"
|
||||||
|
error-code: "エラーコード"
|
||||||
|
browser-version: "ブラウザ バージョン"
|
||||||
|
client-version: "クライアント バージョン"
|
||||||
|
email-support: "問題が解決しない場合は、上記の情報をお書き添えの上 syuilotan@yahoo.co.jp までご連絡ください。"
|
||||||
|
thanks: "Thank you for using Misskey."
|
||||||
|
|
||||||
got-it: "わかった"
|
got-it: "わかった"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "カスタマイズのヒント"
|
title: "カスタマイズのヒント"
|
||||||
@@ -124,6 +133,14 @@ common:
|
|||||||
|
|
||||||
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
|
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
|
||||||
|
|
||||||
|
is-remote-user: "このユーザー情報はコピーです。"
|
||||||
|
is-remote-post: "この投稿情報はコピーです。"
|
||||||
|
view-on-remote: "正確な情報を見る"
|
||||||
|
|
||||||
|
error:
|
||||||
|
title: '問題が発生しました'
|
||||||
|
retry: 'やり直す'
|
||||||
|
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "引き分け"
|
drawn: "引き分け"
|
||||||
my-turn: "あなたのターンです"
|
my-turn: "あなたのターンです"
|
||||||
@@ -182,6 +199,8 @@ common:
|
|||||||
stack-left: "左に重ねる"
|
stack-left: "左に重ねる"
|
||||||
pop-right: "右に出す"
|
pop-right: "右に出す"
|
||||||
|
|
||||||
|
dev: "アプリの作成に失敗しました。再度お試しください。"
|
||||||
|
|
||||||
auth/views/form.vue:
|
auth/views/form.vue:
|
||||||
share-access: "<i>{{ app.name }}</i>があなたのアカウントにアクセスすることを<b>許可</b>しますか?"
|
share-access: "<i>{{ app.name }}</i>があなたのアカウントにアクセスすることを<b>許可</b>しますか?"
|
||||||
permission-ask: "このアプリは次の権限を要求しています:"
|
permission-ask: "このアプリは次の権限を要求しています:"
|
||||||
@@ -363,6 +382,7 @@ common/views/components/note-menu.vue:
|
|||||||
detail: "詳細"
|
detail: "詳細"
|
||||||
copy-link: "リンクをコピー"
|
copy-link: "リンクをコピー"
|
||||||
favorite: "お気に入り"
|
favorite: "お気に入り"
|
||||||
|
unfavorite: "お気に入り解除"
|
||||||
pin: "ピン留め"
|
pin: "ピン留め"
|
||||||
unpin: "ピン留め解除"
|
unpin: "ピン留め解除"
|
||||||
delete: "削除"
|
delete: "削除"
|
||||||
@@ -455,6 +475,26 @@ common/views/components/trends.vue:
|
|||||||
count: "{}人が投稿"
|
count: "{}人が投稿"
|
||||||
empty: "トレンドなし"
|
empty: "トレンドなし"
|
||||||
|
|
||||||
|
common/views/components/profile-editor.vue:
|
||||||
|
title: "プロフィール"
|
||||||
|
name: "名前"
|
||||||
|
account: "アカウント"
|
||||||
|
location: "場所"
|
||||||
|
description: "自己紹介"
|
||||||
|
birthday: "誕生日"
|
||||||
|
avatar: "アイコン"
|
||||||
|
banner: "バナー"
|
||||||
|
is-cat: "このアカウントはCatです"
|
||||||
|
is-bot: "このアカウントはBotです"
|
||||||
|
is-locked: "フォローを承認制にする"
|
||||||
|
careful-bot: "Botからのフォローだけ承認制にする"
|
||||||
|
advanced: "その他"
|
||||||
|
privacy: "プライバシー"
|
||||||
|
save: "保存"
|
||||||
|
saved: "プロフィールを保存しました"
|
||||||
|
uploading: "アップロード中"
|
||||||
|
upload-failed: "アップロードに失敗しました"
|
||||||
|
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "確認中"
|
fetching: "確認中"
|
||||||
no-broadcasts: "お知らせはありません"
|
no-broadcasts: "お知らせはありません"
|
||||||
@@ -566,6 +606,9 @@ desktop/views/components/charts.vue:
|
|||||||
drive: "ドライブ"
|
drive: "ドライブ"
|
||||||
network: "ネットワーク"
|
network: "ネットワーク"
|
||||||
charts:
|
charts:
|
||||||
|
federation: "フェデレーション"
|
||||||
|
federation-instances: "インスタンスの増減"
|
||||||
|
federation-instances-total: "インスタンスの積算"
|
||||||
notes: "投稿の増減 (統合)"
|
notes: "投稿の増減 (統合)"
|
||||||
local-notes: "投稿の増減 (ローカル)"
|
local-notes: "投稿の増減 (ローカル)"
|
||||||
remote-notes: "投稿の増減 (リモート)"
|
remote-notes: "投稿の増減 (リモート)"
|
||||||
@@ -717,7 +760,7 @@ desktop/views/components/note-detail.vue:
|
|||||||
renote: "Renote"
|
renote: "Renote"
|
||||||
add-reaction: "リアクション"
|
add-reaction: "リアクション"
|
||||||
|
|
||||||
desktop/views/components/notes.note.vue:
|
desktop/views/components/note.vue:
|
||||||
reposted-by: "{}がRenote"
|
reposted-by: "{}がRenote"
|
||||||
reply: "返信"
|
reply: "返信"
|
||||||
renote: "Renote"
|
renote: "Renote"
|
||||||
@@ -813,9 +856,13 @@ desktop/views/components/settings.vue:
|
|||||||
advanced: "詳細設定"
|
advanced: "詳細設定"
|
||||||
api-via-stream: "ストリームを経由したAPIリクエスト"
|
api-via-stream: "ストリームを経由したAPIリクエスト"
|
||||||
api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。"
|
api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。"
|
||||||
|
deck-nav: "デッキ内ナビゲーション"
|
||||||
|
deck-nav-desc: "デッキを使用しているとき、ナビゲーションが発生する際にページ遷移を行わずに一時的なカラムで受けるようにします。"
|
||||||
|
deck-default: "デッキをデフォルトのUIにする"
|
||||||
|
|
||||||
display: "デザインと表示"
|
display: "デザインと表示"
|
||||||
customize: "ホームをカスタマイズ"
|
customize: "ホームをカスタマイズ"
|
||||||
|
wallpaper: "壁紙"
|
||||||
choose-wallpaper: "壁紙を選択"
|
choose-wallpaper: "壁紙を選択"
|
||||||
delete-wallpaper: "壁紙を削除"
|
delete-wallpaper: "壁紙を削除"
|
||||||
dark-mode: "ダークモード"
|
dark-mode: "ダークモード"
|
||||||
@@ -827,10 +874,14 @@ desktop/views/components/settings.vue:
|
|||||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||||
show-clock-on-header: "右上に時計を表示する"
|
show-clock-on-header: "右上に時計を表示する"
|
||||||
show-reply-target: "リプライ先を表示する"
|
show-reply-target: "リプライ先を表示する"
|
||||||
|
timeline: "タイムライン"
|
||||||
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
||||||
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
||||||
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
||||||
show-maps: "マップの自動展開"
|
show-maps: "マップの自動展開"
|
||||||
|
deck-column-align: "デッキのカラムの位置"
|
||||||
|
deck-column-align-center: "中央"
|
||||||
|
deck-column-align-left: "左"
|
||||||
|
|
||||||
sound: "サウンド"
|
sound: "サウンド"
|
||||||
enable-sounds: "サウンドを有効にする"
|
enable-sounds: "サウンドを有効にする"
|
||||||
@@ -838,9 +889,6 @@ desktop/views/components/settings.vue:
|
|||||||
volume: "ボリューム"
|
volume: "ボリューム"
|
||||||
test: "テスト"
|
test: "テスト"
|
||||||
|
|
||||||
mobile: "モバイル"
|
|
||||||
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
|
||||||
|
|
||||||
language: "言語"
|
language: "言語"
|
||||||
pick-language: "言語を選択"
|
pick-language: "言語を選択"
|
||||||
recommended: "推奨"
|
recommended: "推奨"
|
||||||
@@ -882,6 +930,11 @@ desktop/views/components/settings.vue:
|
|||||||
task-manager: "タスクマネージャ"
|
task-manager: "タスクマネージャ"
|
||||||
third-parties: "サードパーティ"
|
third-parties: "サードパーティ"
|
||||||
|
|
||||||
|
navbar-position: "ナビゲーションバーの位置"
|
||||||
|
navbar-position-top: "上"
|
||||||
|
navbar-position-left: "左"
|
||||||
|
navbar-position-right: "右"
|
||||||
|
|
||||||
desktop/views/components/settings.2fa.vue:
|
desktop/views/components/settings.2fa.vue:
|
||||||
intro: "二段階認証を設定すると、サインイン時にパスワードだけでなく、予め登録しておいた物理的なデバイス(例えばあなたのスマートフォンなど)も必要になり、よりセキュリティが向上します。"
|
intro: "二段階認証を設定すると、サインイン時にパスワードだけでなく、予め登録しておいた物理的なデバイス(例えばあなたのスマートフォンなど)も必要になり、よりセキュリティが向上します。"
|
||||||
detail: "詳細..."
|
detail: "詳細..."
|
||||||
@@ -927,21 +980,6 @@ desktop/views/components/settings.password.vue:
|
|||||||
not-match: "新しいパスワードが一致しません"
|
not-match: "新しいパスワードが一致しません"
|
||||||
changed: "パスワードを変更しました"
|
changed: "パスワードを変更しました"
|
||||||
|
|
||||||
desktop/views/components/settings.profile.vue:
|
|
||||||
avatar: "アイコン"
|
|
||||||
choice-avatar: "画像を選択"
|
|
||||||
name: "名前"
|
|
||||||
location: "場所"
|
|
||||||
description: "自己紹介"
|
|
||||||
birthday: "誕生日"
|
|
||||||
save: "保存"
|
|
||||||
locked-account: "アカウントの保護"
|
|
||||||
is-locked: "フォローを承認制にする"
|
|
||||||
other: "その他"
|
|
||||||
is-bot: "このアカウントはBotです"
|
|
||||||
is-cat: "このアカウントはCatです"
|
|
||||||
profile-updated: "プロフィールを更新しました"
|
|
||||||
|
|
||||||
desktop/views/components/sub-note-content.vue:
|
desktop/views/components/sub-note-content.vue:
|
||||||
private: "この投稿は非公開です"
|
private: "この投稿は非公開です"
|
||||||
deleted: "この投稿は削除されました"
|
deleted: "この投稿は削除されました"
|
||||||
@@ -1028,6 +1066,8 @@ desktop/views/pages/admin/admin.vue:
|
|||||||
drive: "ドライブ"
|
drive: "ドライブ"
|
||||||
users: "ユーザー"
|
users: "ユーザー"
|
||||||
update: "更新"
|
update: "更新"
|
||||||
|
announcements: "お知らせ"
|
||||||
|
hashtags: "ハッシュタグ"
|
||||||
|
|
||||||
desktop/views/pages/admin/admin.dashboard.vue:
|
desktop/views/pages/admin/admin.dashboard.vue:
|
||||||
dashboard: "ダッシュボード"
|
dashboard: "ダッシュボード"
|
||||||
@@ -1036,6 +1076,9 @@ desktop/views/pages/admin/admin.dashboard.vue:
|
|||||||
all-notes: "全ての投稿"
|
all-notes: "全ての投稿"
|
||||||
original-notes: "このインスタンスの投稿"
|
original-notes: "このインスタンスの投稿"
|
||||||
invite: "招待"
|
invite: "招待"
|
||||||
|
banner-url: "Banner URL"
|
||||||
|
disableRegistration: "Disable new user registration"
|
||||||
|
disableLocalTimeline: "Disable the local timeline"
|
||||||
|
|
||||||
desktop/views/pages/admin/admin.suspend-user.vue:
|
desktop/views/pages/admin/admin.suspend-user.vue:
|
||||||
suspend-user: "ユーザーの凍結"
|
suspend-user: "ユーザーの凍結"
|
||||||
@@ -1057,15 +1100,26 @@ desktop/views/pages/admin/admin.unverify-user.vue:
|
|||||||
unverify: "公式アカウントを解除する"
|
unverify: "公式アカウントを解除する"
|
||||||
unverified: "公式アカウントを解除しました"
|
unverified: "公式アカウントを解除しました"
|
||||||
|
|
||||||
|
desktop/views/pages/admin/admin.announcements.vue:
|
||||||
|
announcements: "お知らせ"
|
||||||
|
|
||||||
|
desktop/views/pages/admin/admin.hashtags.vue:
|
||||||
|
hided-tags: "Hidden Tags"
|
||||||
|
|
||||||
desktop/views/pages/deck/deck.tl-column.vue:
|
desktop/views/pages/deck/deck.tl-column.vue:
|
||||||
is-media-only: "メディア投稿のみ"
|
is-media-only: "メディア投稿のみ"
|
||||||
is-media-view: "メディアビュー"
|
is-media-view: "メディアビュー"
|
||||||
edit: "オプション"
|
edit: "オプション"
|
||||||
|
|
||||||
desktop/views/pages/deck/deck.note.vue:
|
desktop/views/pages/deck/deck.user-column.vue:
|
||||||
reposted-by: "{}がRenote"
|
posts: "投稿"
|
||||||
private: "この投稿は非公開です"
|
following: "フォロー"
|
||||||
deleted: "この投稿は削除されました"
|
followers: "フォロワー"
|
||||||
|
images: "画像"
|
||||||
|
activity: "アクティビティ"
|
||||||
|
timeline: "タイムライン"
|
||||||
|
pinned-notes: "ピン留めされた投稿"
|
||||||
|
push-to-a-list: "リストに追加"
|
||||||
|
|
||||||
desktop/views/pages/stats/stats.vue:
|
desktop/views/pages/stats/stats.vue:
|
||||||
all-users: "全てのユーザー"
|
all-users: "全てのユーザー"
|
||||||
@@ -1132,10 +1186,6 @@ desktop/views/pages/user/user.friends.vue:
|
|||||||
|
|
||||||
desktop/views/pages/user/user.vue:
|
desktop/views/pages/user/user.vue:
|
||||||
is-suspended: "このユーザーは凍結されています。"
|
is-suspended: "このユーザーは凍結されています。"
|
||||||
is-remote: "このユーザーはリモートユーザーです。"
|
|
||||||
view-remote: "正確な情報を見る"
|
|
||||||
|
|
||||||
desktop/views/pages/user/user.home.vue:
|
|
||||||
last-used-at: "最終アクセス"
|
last-used-at: "最終アクセス"
|
||||||
|
|
||||||
desktop/views/pages/user/user.photos.vue:
|
desktop/views/pages/user/user.photos.vue:
|
||||||
@@ -1159,6 +1209,10 @@ desktop/views/pages/user/user.header.vue:
|
|||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
followers: "フォロワー"
|
followers: "フォロワー"
|
||||||
is-bot: "このアカウントはBotです"
|
is-bot: "このアカウントはBotです"
|
||||||
|
years-old: "歳"
|
||||||
|
year: "年"
|
||||||
|
month: "月"
|
||||||
|
day: "日"
|
||||||
|
|
||||||
desktop/views/pages/user/user.timeline.vue:
|
desktop/views/pages/user/user.timeline.vue:
|
||||||
default: "投稿"
|
default: "投稿"
|
||||||
@@ -1232,6 +1286,8 @@ mobile/views/components/drive.file-detail.vue:
|
|||||||
hash: "ハッシュ (md5)"
|
hash: "ハッシュ (md5)"
|
||||||
exif: "EXIF"
|
exif: "EXIF"
|
||||||
nsfw: "閲覧注意"
|
nsfw: "閲覧注意"
|
||||||
|
mark-as-sensitive: "閲覧注意に設定"
|
||||||
|
unmark-as-sensitive: "閲覧注意を解除"
|
||||||
|
|
||||||
mobile/views/components/media-image.vue:
|
mobile/views/components/media-image.vue:
|
||||||
sensitive: "閲覧注意"
|
sensitive: "閲覧注意"
|
||||||
@@ -1408,24 +1464,6 @@ mobile/views/pages/notifications.vue:
|
|||||||
mobile/views/pages/games/reversi.vue:
|
mobile/views/pages/games/reversi.vue:
|
||||||
reversi: "リバーシ"
|
reversi: "リバーシ"
|
||||||
|
|
||||||
mobile/views/pages/settings/settings.profile.vue:
|
|
||||||
title: "プロフィール"
|
|
||||||
name: "名前"
|
|
||||||
account: "アカウント"
|
|
||||||
location: "場所"
|
|
||||||
description: "自己紹介"
|
|
||||||
birthday: "誕生日"
|
|
||||||
avatar: "アイコン"
|
|
||||||
banner: "バナー"
|
|
||||||
is-cat: "このアカウントはCatです"
|
|
||||||
is-locked: "フォローを承認制にする"
|
|
||||||
advanced: "その他"
|
|
||||||
privacy: "プライバシー"
|
|
||||||
save: "保存"
|
|
||||||
saved: "プロフィールを保存しました"
|
|
||||||
uploading: "アップロード中"
|
|
||||||
upload-failed: "アップロードに失敗しました"
|
|
||||||
|
|
||||||
mobile/views/pages/search.vue:
|
mobile/views/pages/search.vue:
|
||||||
search: "検索"
|
search: "検索"
|
||||||
empty: "「{}」に関する投稿は見つかりませんでした。"
|
empty: "「{}」に関する投稿は見つかりませんでした。"
|
||||||
@@ -1483,6 +1521,7 @@ mobile/views/pages/settings.vue:
|
|||||||
signout: "サインアウト"
|
signout: "サインアウト"
|
||||||
sound: "サウンド"
|
sound: "サウンド"
|
||||||
enable-sounds: "サウンドを有効にする"
|
enable-sounds: "サウンドを有効にする"
|
||||||
|
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
|
||||||
|
|
||||||
mobile/views/pages/user.vue:
|
mobile/views/pages/user.vue:
|
||||||
follows-you: "フォローされています"
|
follows-you: "フォローされています"
|
||||||
@@ -1493,8 +1532,6 @@ mobile/views/pages/user.vue:
|
|||||||
timeline: "タイムライン"
|
timeline: "タイムライン"
|
||||||
media: "メディア"
|
media: "メディア"
|
||||||
is-suspended: "このユーザーは凍結されています。"
|
is-suspended: "このユーザーは凍結されています。"
|
||||||
is-remote: "このユーザーはリモートユーザーです。"
|
|
||||||
view-remote: "正確な情報を見る"
|
|
||||||
|
|
||||||
mobile/views/pages/user/home.vue:
|
mobile/views/pages/user/home.vue:
|
||||||
recent-notes: "最近の投稿"
|
recent-notes: "最近の投稿"
|
||||||
@@ -1548,3 +1585,31 @@ docs:
|
|||||||
|
|
||||||
dev/views/index.vue:
|
dev/views/index.vue:
|
||||||
manage-apps: "アプリの管理"
|
manage-apps: "アプリの管理"
|
||||||
|
|
||||||
|
dev/views/apps.vue:
|
||||||
|
manage-apps: "アプリを管理"
|
||||||
|
create-app: "アプリ作成"
|
||||||
|
app-missing: "アプリなし"
|
||||||
|
|
||||||
|
dev/views/new-app.vue:
|
||||||
|
create-app: "アプリケーションの作成"
|
||||||
|
app-name: "アプリケーション名"
|
||||||
|
app-name-desc: "あなたのアプリの名称。"
|
||||||
|
app-name-ex: "ex) Misskey for iOS"
|
||||||
|
app-overview: "アプリの概要"
|
||||||
|
app-desc: "あなたのアプリの簡単な説明や紹介。"
|
||||||
|
app-desc-ex: "ex) Misskey iOSクライアント。"
|
||||||
|
callback-url: "コールバックURL (オプション)"
|
||||||
|
callback-url-desc: "ユーザーが認証フォームで認証した際にリダイレクトするURLを設定できます。"
|
||||||
|
authority: "権限"
|
||||||
|
authority-desc: "ここで要求した機能だけがAPIからアクセスできます。"
|
||||||
|
authority-warning: "アプリ作成後も変更できますが、新たな権限を付与する場合、その時点で関連付けられているユーザーキーはすべて無効になります。"
|
||||||
|
account-read: "アカウントの情報を見る。"
|
||||||
|
account-write: "アカウントの情報を操作する。"
|
||||||
|
note-write: "投稿する。"
|
||||||
|
reaction-write: "リアクションしたりリアクションをキャンセルする。"
|
||||||
|
following-write: "フォローしたりフォロー解除する。"
|
||||||
|
drive-read: "ドライブを見る。"
|
||||||
|
drive-write: "ドライブを操作する。"
|
||||||
|
notification-read: "通知を見る。"
|
||||||
|
notification-write: "通知を操作する。"
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ common:
|
|||||||
ui: "インターフェイス"
|
ui: "インターフェイス"
|
||||||
ui-desc: "このUIええ言うてたで、知らんけど。あんたの好みのUIなんて知ったこっちゃない。Misskeyは好きにいじれるからな、レイアウトやデザイン変えたり、色んなウィジェットひっつけたりして、あんただけのMisskey作って楽しんでな!"
|
ui-desc: "このUIええ言うてたで、知らんけど。あんたの好みのUIなんて知ったこっちゃない。Misskeyは好きにいじれるからな、レイアウトやデザイン変えたり、色んなウィジェットひっつけたりして、あんただけのMisskey作って楽しんでな!"
|
||||||
drive: "ドライブ"
|
drive: "ドライブ"
|
||||||
drive-desc: "「こないだの画像、どこやったかな…また投稿したいんやけど…」「さっきのファイルあのフォルダに直しといて」そんなこと言わんとって。Misskeyはもとからドライブ機能持っとるさかい、心配あらへん。ファイルの「わけわけ」したってな。"
|
drive-desc: "「こないだの画像、どこやったかな……また投稿したいんやけど……」「さっきのファイルあのフォルダに直しといて」そんなこと言わんとって。Misskeyはもとからドライブ機能持っとるさかい、心配あらへん。ファイルの「わけわけ」したってな。"
|
||||||
outro: "Misskeyの機能は無限大や!知らんけど。知らん言うとるやんけ、あんたが見に行けや!Misskeyは分散型SNSやから、ここがあかんくても他がある。阪神でもオリックスでもワイは応援するで!"
|
outro: "Misskeyの機能は無限大や!知らんけど。知らん言うとるやんけ、あんたが見に行けや!Misskeyは分散型SNSやから、ここがあかんくても他がある。阪神でもオリックスでもワイは応援するで!"
|
||||||
adblock:
|
adblock:
|
||||||
detected: "広告ブロッカーを無効にしてや"
|
detected: "広告ブロッカーを無効にしてや"
|
||||||
@@ -25,6 +25,14 @@ common:
|
|||||||
application-authorization: "アプリの連携"
|
application-authorization: "アプリの連携"
|
||||||
close: "さいなら"
|
close: "さいなら"
|
||||||
do-not-copy-paste: "ここにコードを入力したり張り付けたりせんといてください。アカウントが不正利用されるかも分からん。知らんけど。"
|
do-not-copy-paste: "ここにコードを入力したり張り付けたりせんといてください。アカウントが不正利用されるかも分からん。知らんけど。"
|
||||||
|
BSoD:
|
||||||
|
fatal-error: "あかん、やってもうたわ… (致命的なエラー"
|
||||||
|
update-browser-os: "ブラウザ(またはOS)のバージョン更新してくれへん?なおるかもしれんわ。"
|
||||||
|
error-code: "エラーコード"
|
||||||
|
browser-version: "ブラウザ バージョン"
|
||||||
|
client-version: "クライアント バージョン"
|
||||||
|
email-support: "それでもあかん?せやったら syuilotan@yahoo.co.jp に連絡してや!"
|
||||||
|
thanks: "Thank you おおきに。Misskey"
|
||||||
got-it: "ほい"
|
got-it: "ほい"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "カスタマイズのヒント"
|
title: "カスタマイズのヒント"
|
||||||
@@ -115,6 +123,12 @@ common:
|
|||||||
reduce-motion: "UI、動き過ぎや、静かにしてや"
|
reduce-motion: "UI、動き過ぎや、静かにしてや"
|
||||||
this-setting-is-this-device-only: "このデバイスのみ"
|
this-setting-is-this-device-only: "このデバイスのみ"
|
||||||
do-not-use-in-production: '開発ビルドや。本番環境で使わんといて!知らんで!'
|
do-not-use-in-production: '開発ビルドや。本番環境で使わんといて!知らんで!'
|
||||||
|
is-remote-user: "このユーザー情報はコピーです。"
|
||||||
|
is-remote-post: "この投稿情報はコピーです。"
|
||||||
|
view-on-remote: "ちゃんとした情報見せてや!"
|
||||||
|
error:
|
||||||
|
title: '問題が起こったわ'
|
||||||
|
retry: 'もっぺん'
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "おあいこ"
|
drawn: "おあいこ"
|
||||||
my-turn: "あんさんのターンや"
|
my-turn: "あんさんのターンや"
|
||||||
@@ -170,6 +184,7 @@ common:
|
|||||||
rename: "名前を変更や!"
|
rename: "名前を変更や!"
|
||||||
stack-left: "左に重ねんで!"
|
stack-left: "左に重ねんで!"
|
||||||
pop-right: "右に出すで!"
|
pop-right: "右に出すで!"
|
||||||
|
dev: "アプリの作成あかんかったわ。もっぺんやってみて。"
|
||||||
auth/views/form.vue:
|
auth/views/form.vue:
|
||||||
share-access: "<i>{{ app.name }}</i>があんさんのアカウントにアクセスすんのを<b>許可</b>してもええか?"
|
share-access: "<i>{{ app.name }}</i>があんさんのアカウントにアクセスすんのを<b>許可</b>してもええか?"
|
||||||
permission-ask: "このアプリは次の権限を要求してんで:"
|
permission-ask: "このアプリは次の権限を要求してんで:"
|
||||||
@@ -265,40 +280,40 @@ common/views/components/media-banner.vue:
|
|||||||
sensitive: "見せたらあかん"
|
sensitive: "見せたらあかん"
|
||||||
click-to-show: "押してみ、見せたるわ"
|
click-to-show: "押してみ、見せたるわ"
|
||||||
common/views/components/theme.vue:
|
common/views/components/theme.vue:
|
||||||
light-theme: "非ダークモード時に使用するテーマ"
|
light-theme: "ナイトゲームちゃう時のテーマどないする?"
|
||||||
dark-theme: "ダークモード時に使用するテーマ"
|
dark-theme: "ナイトゲームの時のテーマどないする?"
|
||||||
light-themes: "明るいテーマ"
|
light-themes: "デイゲーム"
|
||||||
dark-themes: "暗いテーマ"
|
dark-themes: "ナイトゲーム"
|
||||||
install-a-theme: "テーマのインストール"
|
install-a-theme: "テーマ入れるで"
|
||||||
theme-code: "テーマコード"
|
theme-code: "テーマコード"
|
||||||
install: "インストール"
|
install: "インストール"
|
||||||
installed: "「{}」をインストールしました"
|
installed: "「{}」を入れたで!"
|
||||||
create-a-theme: "テーマの作成"
|
create-a-theme: "テーマ作る"
|
||||||
save-created-theme: "テーマを保存"
|
save-created-theme: "テーマ保存"
|
||||||
primary-color: "プライマリ カラー"
|
primary-color: "この色一番重要や"
|
||||||
secondary-color: "セカンダリ カラー"
|
secondary-color: "次はこの色出したって"
|
||||||
text-color: "文字色"
|
text-color: "文字はこの色や!"
|
||||||
base-theme: "ベーステーマ"
|
base-theme: "この色が背景や!"
|
||||||
base-theme-light: "Light"
|
base-theme-light: "Light"
|
||||||
base-theme-dark: "Dark"
|
base-theme-dark: "Dark"
|
||||||
theme-name: "テーマ名"
|
theme-name: "テーマ名"
|
||||||
preview-created-theme: "プレビュー"
|
preview-created-theme: "試してみる"
|
||||||
invalid-theme: "テーマが正しくありません。"
|
invalid-theme: "このテーマあかんわ、なんか間違うとる"
|
||||||
already-installed: "既にそのテーマはインストールされています。"
|
already-installed: "このテーマもうあるで"
|
||||||
saved: "保存しました"
|
saved: "保存したで!"
|
||||||
manage-themes: "テーマの管理"
|
manage-themes: "テーマの管理"
|
||||||
builtin-themes: "標準テーマ"
|
builtin-themes: "いつものテーマ"
|
||||||
my-themes: "マイテーマ"
|
my-themes: "ワイのテーマ"
|
||||||
installed-themes: "インストールされたテーマ"
|
installed-themes: "入れたテーマ"
|
||||||
select-theme: "テーマを選択してください"
|
select-theme: "テーマ選んでや!"
|
||||||
uninstall: "アンインストール"
|
uninstall: "ほかす"
|
||||||
uninstalled: "「{}」をアンインストールしました"
|
uninstalled: "「{}」をほかしてもうたわ"
|
||||||
author: "作者"
|
author: "作った人"
|
||||||
desc: "説明"
|
desc: "説明"
|
||||||
export: "エクスポート"
|
export: "エクスポート"
|
||||||
import: "インポート"
|
import: "インポート"
|
||||||
import-by-code: "またはコードをペースト"
|
import-by-code: "それかコードを貼っつける"
|
||||||
theme-name-required: "テーマ名は必須です。"
|
theme-name-required: "テーマ名は絶対要るで"
|
||||||
common/views/components/cw-button.vue:
|
common/views/components/cw-button.vue:
|
||||||
hide: "もうええわ"
|
hide: "もうええわ"
|
||||||
show: "見たいやろ?"
|
show: "見たいやろ?"
|
||||||
@@ -335,6 +350,7 @@ common/views/components/note-menu.vue:
|
|||||||
detail: "もっと"
|
detail: "もっと"
|
||||||
copy-link: "リンクをコピー"
|
copy-link: "リンクをコピー"
|
||||||
favorite: "お気に入り"
|
favorite: "お気に入り"
|
||||||
|
unfavorite: "お気に入りやめる"
|
||||||
pin: "ピン留め"
|
pin: "ピン留め"
|
||||||
unpin: "ピン留めやめる"
|
unpin: "ピン留めやめる"
|
||||||
delete: "ほかす"
|
delete: "ほかす"
|
||||||
@@ -368,7 +384,7 @@ common/views/components/signup.vue:
|
|||||||
invitation-code: "招待コード"
|
invitation-code: "招待コード"
|
||||||
invitation-info: "招待コードをもっとらんのやったら、<a href=\"{}\">管理者</a>まで連絡してや。"
|
invitation-info: "招待コードをもっとらんのやったら、<a href=\"{}\">管理者</a>まで連絡してや。"
|
||||||
username: "ユーザー名"
|
username: "ユーザー名"
|
||||||
checking: "確認中や…"
|
checking: "確認中や……"
|
||||||
available: "使えるで"
|
available: "使えるで"
|
||||||
unavailable: "もう使われとるで"
|
unavailable: "もう使われとるで"
|
||||||
error: "通信あかんわ"
|
error: "通信あかんわ"
|
||||||
@@ -415,6 +431,25 @@ common/views/components/visibility-chooser.vue:
|
|||||||
common/views/components/trends.vue:
|
common/views/components/trends.vue:
|
||||||
count: "{}人が投稿"
|
count: "{}人が投稿"
|
||||||
empty: "流行は自分で作るんや"
|
empty: "流行は自分で作るんや"
|
||||||
|
common/views/components/profile-editor.vue:
|
||||||
|
title: "プロフィール"
|
||||||
|
name: "名前"
|
||||||
|
account: "アカウント"
|
||||||
|
location: "場所"
|
||||||
|
description: "自己紹介"
|
||||||
|
birthday: "誕生日"
|
||||||
|
avatar: "アイコン"
|
||||||
|
banner: "バナー"
|
||||||
|
is-cat: "このアカウントはCatやで"
|
||||||
|
is-bot: "このアカウントはBotやで"
|
||||||
|
is-locked: "他人のフォローは許可してからや!"
|
||||||
|
careful-bot: "Botからのフォローだけは許可制や"
|
||||||
|
advanced: "その他"
|
||||||
|
privacy: "プライバシーってなんや?オカンの年齢か?"
|
||||||
|
save: "保存"
|
||||||
|
saved: "プロフィールを保存したで"
|
||||||
|
uploading: "アップロードしとります"
|
||||||
|
upload-failed: "これアップロードでけへんわ"
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "見てみるわ…"
|
fetching: "見てみるわ…"
|
||||||
no-broadcasts: "お知らせはあらへんで"
|
no-broadcasts: "お知らせはあらへんで"
|
||||||
@@ -475,7 +510,7 @@ common/views/pages/follow.vue:
|
|||||||
following: "フォローしとる"
|
following: "フォローしとる"
|
||||||
follow: "フォロー"
|
follow: "フォロー"
|
||||||
request-pending: "フォローの許し待っとる"
|
request-pending: "フォローの許し待っとる"
|
||||||
follow-processing: "フォロー処理中"
|
follow-processing: "今フォロー処理やっとる‥"
|
||||||
follow-request: "フォロー許してくれや!言うてみる"
|
follow-request: "フォロー許してくれや!言うてみる"
|
||||||
desktop:
|
desktop:
|
||||||
banner-crop-title: "どこバナーとして出す?"
|
banner-crop-title: "どこバナーとして出す?"
|
||||||
@@ -490,10 +525,10 @@ desktop:
|
|||||||
choose-avatar: "アバターにする画像選んでや"
|
choose-avatar: "アバターにする画像選んでや"
|
||||||
invalid-filetype: "この形式のファイル無理やねん"
|
invalid-filetype: "この形式のファイル無理やねん"
|
||||||
desktop/views/components/activity.chart.vue:
|
desktop/views/components/activity.chart.vue:
|
||||||
total: "黒いの… 全部"
|
total: "黒いの ... 全部"
|
||||||
notes: "青いの… 投稿"
|
notes: "青いの ... 投稿"
|
||||||
replies: "赤いの… 返信"
|
replies: "赤いの ... 返信"
|
||||||
renotes: "みどり… Renotes"
|
renotes: "碧いの ... Renotes"
|
||||||
desktop/views/components/activity.vue:
|
desktop/views/components/activity.vue:
|
||||||
title: "アクティビティ"
|
title: "アクティビティ"
|
||||||
toggle: "表示変える"
|
toggle: "表示変える"
|
||||||
@@ -551,7 +586,7 @@ desktop/views/components/drive.file.vue:
|
|||||||
unmark-as-sensitive: "やっぱ見せたるわ"
|
unmark-as-sensitive: "やっぱ見せたるわ"
|
||||||
copy-url: "URLをコピー"
|
copy-url: "URLをコピー"
|
||||||
download: "ダウンロード"
|
download: "ダウンロード"
|
||||||
else-files: "もっとあるで…"
|
else-files: "まだあんで..."
|
||||||
set-as-avatar: "アイコンにする"
|
set-as-avatar: "アイコンにする"
|
||||||
set-as-banner: "バナーにする"
|
set-as-banner: "バナーにする"
|
||||||
open-in-app: "アプリで開く"
|
open-in-app: "アプリで開く"
|
||||||
@@ -585,7 +620,7 @@ desktop/views/components/drive.vue:
|
|||||||
url-upload: "URLアップロード"
|
url-upload: "URLアップロード"
|
||||||
url-of-file: "このURLのファイルをアップロードしたいねん"
|
url-of-file: "このURLのファイルをアップロードしたいねん"
|
||||||
url-upload-requested: "アップロードしたい言うといたで"
|
url-upload-requested: "アップロードしたい言うといたで"
|
||||||
may-take-time: "アップロード終わるまで時間かかるわ、知らんけど。たこ焼き何個食べれるやろか…"
|
may-take-time: "アップロード終わるんにちょい時間かかるかもしれへんわ。"
|
||||||
create-folder: "フォルダー作成"
|
create-folder: "フォルダー作成"
|
||||||
folder-name: "フォルダー名"
|
folder-name: "フォルダー名"
|
||||||
contextmenu:
|
contextmenu:
|
||||||
@@ -602,7 +637,7 @@ desktop/views/components/follow-button.vue:
|
|||||||
following: "フォローしとる"
|
following: "フォローしとる"
|
||||||
follow: "フォロー"
|
follow: "フォロー"
|
||||||
request-pending: "フォローの許し待っとる"
|
request-pending: "フォローの許し待っとる"
|
||||||
follow-processing: "フォロー処理中"
|
follow-processing: "今フォロー処理やっとる‥"
|
||||||
follow-request: "フォロー許してくれや!言うてみる"
|
follow-request: "フォロー許してくれや!言うてみる"
|
||||||
desktop/views/components/followers-window.vue:
|
desktop/views/components/followers-window.vue:
|
||||||
followers: "{} のフォロワー"
|
followers: "{} のフォロワー"
|
||||||
@@ -615,7 +650,7 @@ desktop/views/components/following.vue:
|
|||||||
desktop/views/components/friends-maker.vue:
|
desktop/views/components/friends-maker.vue:
|
||||||
title: "おもろそうやな:"
|
title: "おもろそうやな:"
|
||||||
empty: "おもろいユーザー居らんかったわ"
|
empty: "おもろいユーザー居らんかったわ"
|
||||||
fetching: "読みこんどるで…"
|
fetching: "読み込んどります"
|
||||||
refresh: "もっとあるやろ!"
|
refresh: "もっとあるやろ!"
|
||||||
close: "さいなら"
|
close: "さいなら"
|
||||||
desktop/views/components/game-window.vue:
|
desktop/views/components/game-window.vue:
|
||||||
@@ -639,7 +674,7 @@ desktop/views/components/note-detail.vue:
|
|||||||
location: "ここおるで:"
|
location: "ここおるで:"
|
||||||
renote: "Renote"
|
renote: "Renote"
|
||||||
add-reaction: "リアクション"
|
add-reaction: "リアクション"
|
||||||
desktop/views/components/notes.note.vue:
|
desktop/views/components/note.vue:
|
||||||
reposted-by: "{}がRenote"
|
reposted-by: "{}がRenote"
|
||||||
reply: "返す"
|
reply: "返す"
|
||||||
renote: "Renote"
|
renote: "Renote"
|
||||||
@@ -687,11 +722,11 @@ desktop/views/components/post-form-window.vue:
|
|||||||
note: "新規投稿"
|
note: "新規投稿"
|
||||||
reply: "返す"
|
reply: "返す"
|
||||||
attaches: "添付: {}メディア"
|
attaches: "添付: {}メディア"
|
||||||
uploading-media: "{}個のメディアを上げてるで…"
|
uploading-media: "{}個のメディアを上げとんねん……"
|
||||||
desktop/views/components/progress-dialog.vue:
|
desktop/views/components/progress-dialog.vue:
|
||||||
waiting: "待っとる"
|
waiting: "待っとる"
|
||||||
desktop/views/components/renote-form.vue:
|
desktop/views/components/renote-form.vue:
|
||||||
quote: "持ってくる…"
|
quote: "取ってくる……"
|
||||||
cancel: "やめとくわ"
|
cancel: "やめとくわ"
|
||||||
renote: "Renote"
|
renote: "Renote"
|
||||||
reposting: "やっとります..."
|
reposting: "やっとります..."
|
||||||
@@ -725,8 +760,12 @@ desktop/views/components/settings.vue:
|
|||||||
advanced: "もっと設定"
|
advanced: "もっと設定"
|
||||||
api-via-stream: "ストリームを経由したAPIリクエスト"
|
api-via-stream: "ストリームを経由したAPIリクエスト"
|
||||||
api-via-stream-desc: "この設定をオンにすると、WebSocket接続を経由してAPIリクエストが行われんで(パフォーマンス向上するかも、知らんけど)。オフにすると、ネイティブの fetch API が利用されるで。この設定はこのデバイスのみ有効やで。"
|
api-via-stream-desc: "この設定をオンにすると、WebSocket接続を経由してAPIリクエストが行われんで(パフォーマンス向上するかも、知らんけど)。オフにすると、ネイティブの fetch API が利用されるで。この設定はこのデバイスのみ有効やで。"
|
||||||
|
deck-nav: "デッキ内ナビゲーション"
|
||||||
|
deck-nav-desc: "デッキを使うとるとき、ナビゲーションが発生するときにページ移動せんで、一時的なカラムで受けれるようにするで"
|
||||||
|
deck-default: "デッキをデフォルトのUIにする"
|
||||||
display: "見た感じ"
|
display: "見た感じ"
|
||||||
customize: "ホームをカスタマイズ"
|
customize: "ホームをカスタマイズ"
|
||||||
|
wallpaper: "壁紙"
|
||||||
choose-wallpaper: "壁紙選ぶ"
|
choose-wallpaper: "壁紙選ぶ"
|
||||||
delete-wallpaper: "壁紙ほかす"
|
delete-wallpaper: "壁紙ほかす"
|
||||||
dark-mode: "夜にすんで"
|
dark-mode: "夜にすんで"
|
||||||
@@ -738,17 +777,19 @@ desktop/views/components/settings.vue:
|
|||||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示すんで"
|
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示すんで"
|
||||||
show-clock-on-header: "右上をカリヨン広場にする(時計表示)"
|
show-clock-on-header: "右上をカリヨン広場にする(時計表示)"
|
||||||
show-reply-target: "どこにリプライするんや見せて"
|
show-reply-target: "どこにリプライするんや見せて"
|
||||||
|
timeline: "タイムライン"
|
||||||
show-my-renotes: "わしのRenoteもタイムライン載せてくれや"
|
show-my-renotes: "わしのRenoteもタイムライン載せてくれや"
|
||||||
show-renoted-my-notes: "わしのRenoteもタイムライン載せてくれや"
|
show-renoted-my-notes: "わしのRenoteもタイムライン載せてくれや"
|
||||||
show-local-renotes: "ローカル投稿のRenoteも見たいんや"
|
show-local-renotes: "ローカル投稿のRenoteも見たいんや"
|
||||||
show-maps: "地図勝手にバァーって開いてくれ"
|
show-maps: "地図勝手にバァーって開いてくれ"
|
||||||
|
deck-column-align: "デッキのカラムの位置"
|
||||||
|
deck-column-align-center: "真ん中"
|
||||||
|
deck-column-align-left: "左"
|
||||||
sound: "サウンド"
|
sound: "サウンド"
|
||||||
enable-sounds: "サウンド鳴らす"
|
enable-sounds: "サウンド鳴らす"
|
||||||
enable-sounds-desc: "投稿やメッセージもろたとき、音鳴らしたるわ。大丈夫や、この設定はブラウザが覚えてくれとる。"
|
enable-sounds-desc: "投稿やメッセージもろたとき、音鳴らしたるわ。大丈夫や、この設定はブラウザが覚えてくれとる。"
|
||||||
volume: "ボリューム"
|
volume: "ボリューム"
|
||||||
test: "テスト"
|
test: "テスト"
|
||||||
mobile: "モバイル"
|
|
||||||
disable-via-mobile: "「モバイルからの投稿」フラグなんて要らんわ"
|
|
||||||
language: "言語"
|
language: "言語"
|
||||||
pick-language: "言語選んでや"
|
pick-language: "言語選んでや"
|
||||||
recommended: "おすすめ"
|
recommended: "おすすめ"
|
||||||
@@ -767,7 +808,7 @@ desktop/views/components/settings.vue:
|
|||||||
update: "Misskey Update"
|
update: "Misskey Update"
|
||||||
version: "バージョン:"
|
version: "バージョン:"
|
||||||
latest-version: "最新のバージョン:"
|
latest-version: "最新のバージョン:"
|
||||||
update-checking: "アップデートはあらへんか…"
|
update-checking: "アップデートはあらへんか……"
|
||||||
do-update: "アップデートあるか見てみる"
|
do-update: "アップデートあるか見てみる"
|
||||||
update-settings: "もっと設定"
|
update-settings: "もっと設定"
|
||||||
prevent-update: "アップデートしたないわ、また今度や(やめときや)"
|
prevent-update: "アップデートしたないわ、また今度や(やめときや)"
|
||||||
@@ -784,6 +825,10 @@ desktop/views/components/settings.vue:
|
|||||||
tools: "ツール"
|
tools: "ツール"
|
||||||
task-manager: "タスクマネージャ"
|
task-manager: "タスクマネージャ"
|
||||||
third-parties: "サードパーティ"
|
third-parties: "サードパーティ"
|
||||||
|
navbar-position: "ナビゲーションバーの位置"
|
||||||
|
navbar-position-top: "上"
|
||||||
|
navbar-position-left: "左"
|
||||||
|
navbar-position-right: "右"
|
||||||
desktop/views/components/settings.2fa.vue:
|
desktop/views/components/settings.2fa.vue:
|
||||||
intro: "二段階認証を設定すると、サインイン時にパスワードだけとちゃうくて、予め登録しておいた物理的なデバイス(例えばあんさんのスマートフォンなど)も必要になり、よりセキュリティが向上すんで。"
|
intro: "二段階認証を設定すると、サインイン時にパスワードだけとちゃうくて、予め登録しておいた物理的なデバイス(例えばあんさんのスマートフォンなど)も必要になり、よりセキュリティが向上すんで。"
|
||||||
detail: "詳細..."
|
detail: "詳細..."
|
||||||
@@ -823,20 +868,6 @@ desktop/views/components/settings.password.vue:
|
|||||||
enter-new-password-again: "もういっぺんさらのパスワードを入れてや"
|
enter-new-password-again: "もういっぺんさらのパスワードを入れてや"
|
||||||
not-match: "パスワードがおうとらん"
|
not-match: "パスワードがおうとらん"
|
||||||
changed: "パスワード変えたわ"
|
changed: "パスワード変えたわ"
|
||||||
desktop/views/components/settings.profile.vue:
|
|
||||||
avatar: "アイコン"
|
|
||||||
choice-avatar: "画像選んでや"
|
|
||||||
name: "名前"
|
|
||||||
location: "場所"
|
|
||||||
description: "ワイのこと"
|
|
||||||
birthday: "誕生日"
|
|
||||||
save: "保存"
|
|
||||||
locked-account: "アカウント守る"
|
|
||||||
is-locked: "他人のフォローは許可してからや!"
|
|
||||||
other: "その他"
|
|
||||||
is-bot: "このアカウントはBotやで"
|
|
||||||
is-cat: "このアカウントはCatやで"
|
|
||||||
profile-updated: "プロフィールを更新したで"
|
|
||||||
desktop/views/components/sub-note-content.vue:
|
desktop/views/components/sub-note-content.vue:
|
||||||
private: "この投稿は見せられへんわ"
|
private: "この投稿は見せられへんわ"
|
||||||
deleted: "この投稿なんか無くなってもうたわ"
|
deleted: "この投稿なんか無くなってもうたわ"
|
||||||
@@ -897,7 +928,7 @@ desktop/views/components/users-list.vue:
|
|||||||
all: "すべて"
|
all: "すべて"
|
||||||
iknow: "知っとる"
|
iknow: "知っとる"
|
||||||
load-more: "もっと"
|
load-more: "もっと"
|
||||||
fetching: "読みこんどるで…"
|
fetching: "読み込んどります"
|
||||||
desktop/views/components/users-list-item.vue:
|
desktop/views/components/users-list-item.vue:
|
||||||
followed: "フォローされとるで"
|
followed: "フォローされとるで"
|
||||||
desktop/views/components/window.vue:
|
desktop/views/components/window.vue:
|
||||||
@@ -908,6 +939,8 @@ desktop/views/pages/admin/admin.vue:
|
|||||||
drive: "ドライブ"
|
drive: "ドライブ"
|
||||||
users: "ユーザー"
|
users: "ユーザー"
|
||||||
update: "更新"
|
update: "更新"
|
||||||
|
announcements: "お知らせ"
|
||||||
|
hashtags: "ハッシュタグ"
|
||||||
desktop/views/pages/admin/admin.dashboard.vue:
|
desktop/views/pages/admin/admin.dashboard.vue:
|
||||||
dashboard: "ダッシュボード"
|
dashboard: "ダッシュボード"
|
||||||
all-users: "知り合い全員や"
|
all-users: "知り合い全員や"
|
||||||
@@ -915,6 +948,9 @@ desktop/views/pages/admin/admin.dashboard.vue:
|
|||||||
all-notes: "全ての投稿"
|
all-notes: "全ての投稿"
|
||||||
original-notes: "このインスタンスの投稿"
|
original-notes: "このインスタンスの投稿"
|
||||||
invite: "来てや"
|
invite: "来てや"
|
||||||
|
banner-url: "Banner URL"
|
||||||
|
disableRegistration: "Disable new user registration"
|
||||||
|
disableLocalTimeline: "Disable the local timeline"
|
||||||
desktop/views/pages/admin/admin.suspend-user.vue:
|
desktop/views/pages/admin/admin.suspend-user.vue:
|
||||||
suspend-user: "ユーザーの凍結"
|
suspend-user: "ユーザーの凍結"
|
||||||
suspend: "凍結"
|
suspend: "凍結"
|
||||||
@@ -931,25 +967,34 @@ desktop/views/pages/admin/admin.unverify-user.vue:
|
|||||||
unverify-user: "ユーザーの公式アカウントにせーへん"
|
unverify-user: "ユーザーの公式アカウントにせーへん"
|
||||||
unverify: "公式アカウントにはさせへんで"
|
unverify: "公式アカウントにはさせへんで"
|
||||||
unverified: "公式アカウントを解除したで"
|
unverified: "公式アカウントを解除したで"
|
||||||
|
desktop/views/pages/admin/admin.announcements.vue:
|
||||||
|
announcements: "お知らせ"
|
||||||
|
desktop/views/pages/admin/admin.hashtags.vue:
|
||||||
|
hided-tags: "Hidden Tags"
|
||||||
desktop/views/pages/deck/deck.tl-column.vue:
|
desktop/views/pages/deck/deck.tl-column.vue:
|
||||||
is-media-only: "メディア投稿だけや"
|
is-media-only: "メディア投稿だけや"
|
||||||
is-media-view: "メディアビュー"
|
is-media-view: "メディアビュー"
|
||||||
edit: "オプション"
|
edit: "オプション"
|
||||||
desktop/views/pages/deck/deck.note.vue:
|
desktop/views/pages/deck/deck.user-column.vue:
|
||||||
reposted-by: "{}がRenote"
|
posts: "投稿"
|
||||||
private: "この投稿は見せられへんわ"
|
following: "フォロー"
|
||||||
deleted: "この投稿なんか無くなってもうたわ"
|
followers: "フォロワー"
|
||||||
|
images: "画像"
|
||||||
|
activity: "アクティビティ"
|
||||||
|
timeline: "タイムライン"
|
||||||
|
pinned-notes: "ピン留めされた投稿"
|
||||||
|
push-to-a-list: "リストに追加"
|
||||||
desktop/views/pages/stats/stats.vue:
|
desktop/views/pages/stats/stats.vue:
|
||||||
all-users: "全てのユーザー"
|
all-users: "全てのユーザー"
|
||||||
original-users: "ここの人らだけ"
|
original-users: "ここの人らだけ"
|
||||||
all-notes: "全ての投稿"
|
all-notes: "全ての投稿"
|
||||||
original-notes: "このインスタンスの投稿"
|
original-notes: "このインスタンスの投稿"
|
||||||
desktop/views/pages/welcome.vue:
|
desktop/views/pages/welcome.vue:
|
||||||
about: "もっと…"
|
about: "もうちょい……"
|
||||||
gotit: "ほい"
|
gotit: "ほい"
|
||||||
signin: "サインイン"
|
signin: "サインイン"
|
||||||
signup: "サインアップ"
|
signup: "サインアップ"
|
||||||
signin-button: "サインイン中…"
|
signin-button: "やっとる"
|
||||||
signup-button: "サインアップ"
|
signup-button: "サインアップ"
|
||||||
timeline: "タイムライン"
|
timeline: "タイムライン"
|
||||||
announcements: "知っときや"
|
announcements: "知っときや"
|
||||||
@@ -983,21 +1028,18 @@ desktop/views/pages/user-list.users.vue:
|
|||||||
username: "ユーザー名"
|
username: "ユーザー名"
|
||||||
desktop/views/pages/user/user.followers-you-know.vue:
|
desktop/views/pages/user/user.followers-you-know.vue:
|
||||||
title: "知っとるフォロワー"
|
title: "知っとるフォロワー"
|
||||||
loading: "読み込んどる…"
|
loading: "読み込んどります"
|
||||||
no-users: "フォロワー全員知らんわ"
|
no-users: "フォロワー全員知らんわ"
|
||||||
desktop/views/pages/user/user.friends.vue:
|
desktop/views/pages/user/user.friends.vue:
|
||||||
title: "よう話すツレ"
|
title: "よう話すツレ"
|
||||||
loading: "読み込んどる…"
|
loading: "読み込んどります"
|
||||||
no-users: "よう話すツレは居らん"
|
no-users: "よう話すツレは居らん"
|
||||||
desktop/views/pages/user/user.vue:
|
desktop/views/pages/user/user.vue:
|
||||||
is-suspended: "このユーザーはあかんわ。凍結されとる。"
|
is-suspended: "このユーザーはあかんわ。凍結されとる。"
|
||||||
is-remote: "このユーザーはリモートユーザーや。"
|
last-used-at: "最終アクセス"
|
||||||
view-remote: "ちゃんとした情報を見る"
|
|
||||||
desktop/views/pages/user/user.home.vue:
|
|
||||||
last-used-at: "最後いつ来た?"
|
|
||||||
desktop/views/pages/user/user.photos.vue:
|
desktop/views/pages/user/user.photos.vue:
|
||||||
title: "写真"
|
title: "写真"
|
||||||
loading: "読み込んどる…"
|
loading: "読み込んどります"
|
||||||
no-photos: "写真はあらへんで"
|
no-photos: "写真はあらへんで"
|
||||||
desktop/views/pages/user/user.profile.vue:
|
desktop/views/pages/user/user.profile.vue:
|
||||||
follows-you: "フォローされとるで"
|
follows-you: "フォローされとるで"
|
||||||
@@ -1014,6 +1056,10 @@ desktop/views/pages/user/user.header.vue:
|
|||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
followers: "フォロワー"
|
followers: "フォロワー"
|
||||||
is-bot: "このアカウントはBotや"
|
is-bot: "このアカウントはBotや"
|
||||||
|
years-old: "歳"
|
||||||
|
year: "年"
|
||||||
|
month: "月"
|
||||||
|
day: "日"
|
||||||
desktop/views/pages/user/user.timeline.vue:
|
desktop/views/pages/user/user.timeline.vue:
|
||||||
default: "投稿"
|
default: "投稿"
|
||||||
with-replies: "投稿と返信"
|
with-replies: "投稿と返信"
|
||||||
@@ -1073,6 +1119,8 @@ mobile/views/components/drive.file-detail.vue:
|
|||||||
hash: "ハッシュ(md5)"
|
hash: "ハッシュ(md5)"
|
||||||
exif: "EXIF"
|
exif: "EXIF"
|
||||||
nsfw: "ちょっと見せられへんわ"
|
nsfw: "ちょっと見せられへんわ"
|
||||||
|
mark-as-sensitive: "閲覧注意に設定"
|
||||||
|
unmark-as-sensitive: "閲覧注意を解除"
|
||||||
mobile/views/components/media-image.vue:
|
mobile/views/components/media-image.vue:
|
||||||
sensitive: "見たらあかんで"
|
sensitive: "見たらあかんで"
|
||||||
click-to-show: "押してみ、見せたるわ"
|
click-to-show: "押してみ、見せたるわ"
|
||||||
@@ -1083,12 +1131,12 @@ mobile/views/components/follow-button.vue:
|
|||||||
following: "フォローしとる"
|
following: "フォローしとる"
|
||||||
follow: "フォロー"
|
follow: "フォロー"
|
||||||
request-pending: "フォローの許し待っとる"
|
request-pending: "フォローの許し待っとる"
|
||||||
follow-processing: "フォロー処理中"
|
follow-processing: "今フォロー処理やっとる‥"
|
||||||
follow-request: "フォロー許してくれや!言うてみる"
|
follow-request: "フォロー許してくれや!言うてみる"
|
||||||
mobile/views/components/friends-maker.vue:
|
mobile/views/components/friends-maker.vue:
|
||||||
title: "おもろそうやな"
|
title: "おもろそうやな"
|
||||||
empty: "おすすめのユーザーはおらん。"
|
empty: "おすすめのユーザーはおらん。"
|
||||||
fetching: "読みこんどるで…"
|
fetching: "読み込んどります"
|
||||||
refresh: "もっとあるやろ!"
|
refresh: "もっとあるやろ!"
|
||||||
close: "さいなら"
|
close: "さいなら"
|
||||||
mobile/views/components/note.vue:
|
mobile/views/components/note.vue:
|
||||||
@@ -1213,23 +1261,6 @@ mobile/views/pages/notifications.vue:
|
|||||||
read-all: "通知全部読んだか?"
|
read-all: "通知全部読んだか?"
|
||||||
mobile/views/pages/games/reversi.vue:
|
mobile/views/pages/games/reversi.vue:
|
||||||
reversi: "リバーシ"
|
reversi: "リバーシ"
|
||||||
mobile/views/pages/settings/settings.profile.vue:
|
|
||||||
title: "プロフィール"
|
|
||||||
name: "名前"
|
|
||||||
account: "アカウント"
|
|
||||||
location: "場所"
|
|
||||||
description: "ワイのこと"
|
|
||||||
birthday: "誕生日"
|
|
||||||
avatar: "アイコン"
|
|
||||||
banner: "バナー"
|
|
||||||
is-cat: "このアカウントはCatや"
|
|
||||||
is-locked: "他人のフォローは許してからや!"
|
|
||||||
advanced: "その他"
|
|
||||||
privacy: "プライバシー⇔オカンの年齢"
|
|
||||||
save: "保存"
|
|
||||||
saved: "プロフィールを保存したで"
|
|
||||||
uploading: "アップロードしとるで…"
|
|
||||||
upload-failed: "これアップロードでけへんわ"
|
|
||||||
mobile/views/pages/search.vue:
|
mobile/views/pages/search.vue:
|
||||||
search: "探す"
|
search: "探す"
|
||||||
empty: "ワイは「{}」なんて投稿知らんわ、無いんちゃう?知らんけど。"
|
empty: "ワイは「{}」なんて投稿知らんわ、無いんちゃう?知らんけど。"
|
||||||
@@ -1245,7 +1276,7 @@ mobile/views/pages/settings.vue:
|
|||||||
specify-language: "言語選びや"
|
specify-language: "言語選びや"
|
||||||
design: "見た感じ"
|
design: "見た感じ"
|
||||||
dark-mode: "ナイトゲームや!"
|
dark-mode: "ナイトゲームや!"
|
||||||
i-am-under-limited-internet: "電波がバァーっといけへんねん"
|
i-am-under-limited-internet: "電波と阪神がザコいんや"
|
||||||
circle-icons: "アイコンもタコ焼きも丸いやんな?"
|
circle-icons: "アイコンもタコ焼きも丸いやんな?"
|
||||||
contrasted-acct: "ユーザー名ようわからんし見やすしといて"
|
contrasted-acct: "ユーザー名ようわからんし見やすしといて"
|
||||||
timeline: "タイムライン"
|
timeline: "タイムライン"
|
||||||
@@ -1257,8 +1288,8 @@ mobile/views/pages/settings.vue:
|
|||||||
post-style-standard: "標準"
|
post-style-standard: "標準"
|
||||||
post-style-smart: "べっぴんさん"
|
post-style-smart: "べっぴんさん"
|
||||||
notification-position: "通知どこ見せる?"
|
notification-position: "通知どこ見せる?"
|
||||||
notification-position-bottom: "ミナミ"
|
notification-position-bottom: "ミナミの方"
|
||||||
notification-position-top: "キタ"
|
notification-position-top: "キタの方"
|
||||||
theme: "テーマ"
|
theme: "テーマ"
|
||||||
behavior: "動き"
|
behavior: "動き"
|
||||||
fetch-on-scroll: "スクロールしたらもっと見せてや"
|
fetch-on-scroll: "スクロールしたらもっと見せてや"
|
||||||
@@ -1275,7 +1306,7 @@ mobile/views/pages/settings.vue:
|
|||||||
update: "あんたのMisskeyいつのや?"
|
update: "あんたのMisskeyいつのや?"
|
||||||
version: "バージョン:"
|
version: "バージョン:"
|
||||||
latest-version: "いっちゃん新しいやつ:"
|
latest-version: "いっちゃん新しいやつ:"
|
||||||
update-checking: "アップデートはあらへんか…"
|
update-checking: "アップデートあるか見とるで"
|
||||||
check-for-updates: "アップデートあるんかな?"
|
check-for-updates: "アップデートあるんかな?"
|
||||||
no-updates: "アップデートあらへんわ"
|
no-updates: "アップデートあらへんわ"
|
||||||
no-updates-desc: "つこてるMisskeyは最新や!"
|
no-updates-desc: "つこてるMisskeyは最新や!"
|
||||||
@@ -1285,6 +1316,7 @@ mobile/views/pages/settings.vue:
|
|||||||
signout: "さいなら"
|
signout: "さいなら"
|
||||||
sound: "サウンド"
|
sound: "サウンド"
|
||||||
enable-sounds: "サウンド鳴らす"
|
enable-sounds: "サウンド鳴らす"
|
||||||
|
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
|
||||||
mobile/views/pages/user.vue:
|
mobile/views/pages/user.vue:
|
||||||
follows-you: "フォローされとるで"
|
follows-you: "フォローされとるで"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
@@ -1294,8 +1326,6 @@ mobile/views/pages/user.vue:
|
|||||||
timeline: "タイムライン"
|
timeline: "タイムライン"
|
||||||
media: "メディア"
|
media: "メディア"
|
||||||
is-suspended: "このユーザーはあかんわ。凍結されとる。"
|
is-suspended: "このユーザーはあかんわ。凍結されとる。"
|
||||||
is-remote: "このユーザーは東京とかそこらへんのリモートユーザーや。"
|
|
||||||
view-remote: "ちゃんとした情報を見る"
|
|
||||||
mobile/views/pages/user/home.vue:
|
mobile/views/pages/user/home.vue:
|
||||||
recent-notes: "最近儲かりまっか?"
|
recent-notes: "最近儲かりまっか?"
|
||||||
images: "画像"
|
images: "画像"
|
||||||
@@ -1306,16 +1336,16 @@ mobile/views/pages/user/home.vue:
|
|||||||
followers-you-know: "知っとるフォロワー"
|
followers-you-know: "知っとるフォロワー"
|
||||||
last-used-at: "最後いつ来た?"
|
last-used-at: "最後いつ来た?"
|
||||||
mobile/views/pages/user/home.followers-you-know.vue:
|
mobile/views/pages/user/home.followers-you-know.vue:
|
||||||
loading: "読み込んどる…"
|
loading: "読み込んどります"
|
||||||
no-users: "知っとるユーザーは居らん"
|
no-users: "知っとるユーザーは居らん"
|
||||||
mobile/views/pages/user/home.friends.vue:
|
mobile/views/pages/user/home.friends.vue:
|
||||||
loading: "読み込んどる…"
|
loading: "読み込んどります"
|
||||||
no-users: "よう話すユーザーは居らん"
|
no-users: "よう話すユーザーは居らん"
|
||||||
mobile/views/pages/user/home.notes.vue:
|
mobile/views/pages/user/home.notes.vue:
|
||||||
loading: "読み込んどる…"
|
loading: "読み込んどります"
|
||||||
no-notes: "投稿はあらへん"
|
no-notes: "投稿はあらへん"
|
||||||
mobile/views/pages/user/home.photos.vue:
|
mobile/views/pages/user/home.photos.vue:
|
||||||
loading: "読み込んどる…"
|
loading: "読み込んどります"
|
||||||
no-photos: "写真はあらへんで"
|
no-photos: "写真はあらへんで"
|
||||||
docs:
|
docs:
|
||||||
edit-this-page-on-github: "間違いや改善点を見つけましたか?"
|
edit-this-page-on-github: "間違いや改善点を見つけましたか?"
|
||||||
@@ -1341,3 +1371,29 @@ docs:
|
|||||||
description: "説明"
|
description: "説明"
|
||||||
dev/views/index.vue:
|
dev/views/index.vue:
|
||||||
manage-apps: "アプリの管理"
|
manage-apps: "アプリの管理"
|
||||||
|
dev/views/apps.vue:
|
||||||
|
manage-apps: "アプリを管理"
|
||||||
|
create-app: "アプリ作成"
|
||||||
|
app-missing: "アプリなし"
|
||||||
|
dev/views/new-app.vue:
|
||||||
|
create-app: "アプリケーションの作成"
|
||||||
|
app-name: "アプリケーション名"
|
||||||
|
app-name-desc: "あなたのアプリの名称。"
|
||||||
|
app-name-ex: "ex) Misskey for iOS"
|
||||||
|
app-overview: "アプリの概要"
|
||||||
|
app-desc: "あなたのアプリの簡単な説明や紹介。"
|
||||||
|
app-desc-ex: "ex) Misskey iOSクライアント。"
|
||||||
|
callback-url: "コールバックURL (オプション)"
|
||||||
|
callback-url-desc: "ユーザーが認証フォームで認証した際にリダイレクトするURLを設定できます。"
|
||||||
|
authority: "権限"
|
||||||
|
authority-desc: "ここで要求した機能だけがAPIからアクセスできます。"
|
||||||
|
authority-warning: "アプリ作成後も変更できますが、新たな権限を付与する場合、その時点で関連付けられているユーザーキーはすべて無効になります。"
|
||||||
|
account-read: "アカウントの情報を見る。"
|
||||||
|
account-write: "アカウントの情報を操作する。"
|
||||||
|
note-write: "投稿する。"
|
||||||
|
reaction-write: "リアクションしたりリアクションをキャンセルする。"
|
||||||
|
following-write: "フォローしたりフォロー解除する。"
|
||||||
|
drive-read: "ドライブを見る。"
|
||||||
|
drive-write: "ドライブを操作する。"
|
||||||
|
notification-read: "通知を見る。"
|
||||||
|
notification-write: "通知を操作する。"
|
||||||
|
|||||||
@@ -25,6 +25,14 @@ common:
|
|||||||
application-authorization: "앱의 연계"
|
application-authorization: "앱의 연계"
|
||||||
close: "닫기"
|
close: "닫기"
|
||||||
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
|
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
|
||||||
|
BSoD:
|
||||||
|
fatal-error: ":( 致命的な問題が発生しました。"
|
||||||
|
update-browser-os: "お使いのブラウザ(またはOS)のバージョンを更新すると解決する可能性があります。"
|
||||||
|
error-code: "エラーコード"
|
||||||
|
browser-version: "ブラウザ バージョン"
|
||||||
|
client-version: "クライアント バージョン"
|
||||||
|
email-support: "問題が解決しない場合は、上記の情報をお書き添えの上 syuilotan@yahoo.co.jp までご連絡ください。"
|
||||||
|
thanks: "Thank you for using Misskey."
|
||||||
got-it: "알았습니다"
|
got-it: "알았습니다"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "사용자 정의 팁"
|
title: "사용자 정의 팁"
|
||||||
@@ -115,6 +123,12 @@ common:
|
|||||||
reduce-motion: "UIの動きを減らす"
|
reduce-motion: "UIの動きを減らす"
|
||||||
this-setting-is-this-device-only: "이 장치만"
|
this-setting-is-this-device-only: "이 장치만"
|
||||||
do-not-use-in-production: '이것은 개발 빌드입니다. 프로덕션 환경에서 사용하지 마십시오.'
|
do-not-use-in-production: '이것은 개발 빌드입니다. 프로덕션 환경에서 사용하지 마십시오.'
|
||||||
|
is-remote-user: "このユーザー情報はコピーです。"
|
||||||
|
is-remote-post: "この投稿情報はコピーです。"
|
||||||
|
view-on-remote: "正確な情報を見る"
|
||||||
|
error:
|
||||||
|
title: '問題が発生しました'
|
||||||
|
retry: 'やり直す'
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "무승부"
|
drawn: "무승부"
|
||||||
my-turn: "당신의 차례입니다"
|
my-turn: "당신의 차례입니다"
|
||||||
@@ -170,6 +184,7 @@ common:
|
|||||||
rename: "이름 변경"
|
rename: "이름 변경"
|
||||||
stack-left: "左に重ねる"
|
stack-left: "左に重ねる"
|
||||||
pop-right: "右に出す"
|
pop-right: "右に出す"
|
||||||
|
dev: "アプリの作成に失敗しました。再度お試しください。"
|
||||||
auth/views/form.vue:
|
auth/views/form.vue:
|
||||||
share-access: "<i>{{ app.name }}</i>があなたのアカウントにアクセスすることを<b>許可</b>しますか?"
|
share-access: "<i>{{ app.name }}</i>があなたのアカウントにアクセスすることを<b>許可</b>しますか?"
|
||||||
permission-ask: "このアプリは次の権限を要求しています:"
|
permission-ask: "このアプリは次の権限を要求しています:"
|
||||||
@@ -335,6 +350,7 @@ common/views/components/note-menu.vue:
|
|||||||
detail: "詳細"
|
detail: "詳細"
|
||||||
copy-link: "링크 복사"
|
copy-link: "링크 복사"
|
||||||
favorite: "お気に入り"
|
favorite: "お気に入り"
|
||||||
|
unfavorite: "お気に入り解除"
|
||||||
pin: "ピン留め"
|
pin: "ピン留め"
|
||||||
unpin: "ピン留め解除"
|
unpin: "ピン留め解除"
|
||||||
delete: "削除"
|
delete: "削除"
|
||||||
@@ -415,6 +431,25 @@ common/views/components/visibility-chooser.vue:
|
|||||||
common/views/components/trends.vue:
|
common/views/components/trends.vue:
|
||||||
count: "{}人が投稿"
|
count: "{}人が投稿"
|
||||||
empty: "トレンドなし"
|
empty: "トレンドなし"
|
||||||
|
common/views/components/profile-editor.vue:
|
||||||
|
title: "プロフィール"
|
||||||
|
name: "名前"
|
||||||
|
account: "アカウント"
|
||||||
|
location: "場所"
|
||||||
|
description: "自己紹介"
|
||||||
|
birthday: "誕生日"
|
||||||
|
avatar: "アイコン"
|
||||||
|
banner: "バナー"
|
||||||
|
is-cat: "このアカウントはCatです"
|
||||||
|
is-bot: "このアカウントはBotです"
|
||||||
|
is-locked: "フォローを承認制にする"
|
||||||
|
careful-bot: "Botからのフォローだけ承認制にする"
|
||||||
|
advanced: "その他"
|
||||||
|
privacy: "プライバシー"
|
||||||
|
save: "保存"
|
||||||
|
saved: "プロフィールを保存しました"
|
||||||
|
uploading: "アップロード中"
|
||||||
|
upload-failed: "アップロードに失敗しました"
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "確認中"
|
fetching: "確認中"
|
||||||
no-broadcasts: "お知らせはありません"
|
no-broadcasts: "お知らせはありません"
|
||||||
@@ -639,7 +674,7 @@ desktop/views/components/note-detail.vue:
|
|||||||
location: "位置情報"
|
location: "位置情報"
|
||||||
renote: "Renote"
|
renote: "Renote"
|
||||||
add-reaction: "リアクション"
|
add-reaction: "リアクション"
|
||||||
desktop/views/components/notes.note.vue:
|
desktop/views/components/note.vue:
|
||||||
reposted-by: "{}がRenote"
|
reposted-by: "{}がRenote"
|
||||||
reply: "返信"
|
reply: "返信"
|
||||||
renote: "Renote"
|
renote: "Renote"
|
||||||
@@ -725,8 +760,12 @@ desktop/views/components/settings.vue:
|
|||||||
advanced: "詳細設定"
|
advanced: "詳細設定"
|
||||||
api-via-stream: "ストリームを経由したAPIリクエスト"
|
api-via-stream: "ストリームを経由したAPIリクエスト"
|
||||||
api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。"
|
api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。"
|
||||||
|
deck-nav: "デッキ内ナビゲーション"
|
||||||
|
deck-nav-desc: "デッキを使用しているとき、ナビゲーションが発生する際にページ遷移を行わずに一時的なカラムで受けるようにします。"
|
||||||
|
deck-default: "デッキをデフォルトのUIにする"
|
||||||
display: "デザインと表示"
|
display: "デザインと表示"
|
||||||
customize: "ホームをカスタマイズ"
|
customize: "ホームをカスタマイズ"
|
||||||
|
wallpaper: "壁紙"
|
||||||
choose-wallpaper: "壁紙を選択"
|
choose-wallpaper: "壁紙を選択"
|
||||||
delete-wallpaper: "壁紙を削除"
|
delete-wallpaper: "壁紙を削除"
|
||||||
dark-mode: "ダークモード"
|
dark-mode: "ダークモード"
|
||||||
@@ -738,17 +777,19 @@ desktop/views/components/settings.vue:
|
|||||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||||
show-clock-on-header: "右上に時計を表示する"
|
show-clock-on-header: "右上に時計を表示する"
|
||||||
show-reply-target: "リプライ先を表示する"
|
show-reply-target: "リプライ先を表示する"
|
||||||
|
timeline: "タイムライン"
|
||||||
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
||||||
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
||||||
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
||||||
show-maps: "マップの自動展開"
|
show-maps: "マップの自動展開"
|
||||||
|
deck-column-align: "デッキのカラムの位置"
|
||||||
|
deck-column-align-center: "中央"
|
||||||
|
deck-column-align-left: "左"
|
||||||
sound: "サウンド"
|
sound: "サウンド"
|
||||||
enable-sounds: "サウンドを有効にする"
|
enable-sounds: "サウンドを有効にする"
|
||||||
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
||||||
volume: "ボリューム"
|
volume: "ボリューム"
|
||||||
test: "テスト"
|
test: "テスト"
|
||||||
mobile: "モバイル"
|
|
||||||
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
|
||||||
language: "言語"
|
language: "言語"
|
||||||
pick-language: "言語を選択"
|
pick-language: "言語を選択"
|
||||||
recommended: "推奨"
|
recommended: "推奨"
|
||||||
@@ -784,6 +825,10 @@ desktop/views/components/settings.vue:
|
|||||||
tools: "ツール"
|
tools: "ツール"
|
||||||
task-manager: "タスクマネージャ"
|
task-manager: "タスクマネージャ"
|
||||||
third-parties: "サードパーティ"
|
third-parties: "サードパーティ"
|
||||||
|
navbar-position: "ナビゲーションバーの位置"
|
||||||
|
navbar-position-top: "上"
|
||||||
|
navbar-position-left: "左"
|
||||||
|
navbar-position-right: "右"
|
||||||
desktop/views/components/settings.2fa.vue:
|
desktop/views/components/settings.2fa.vue:
|
||||||
intro: "二段階認証を設定すると、サインイン時にパスワードだけでなく、予め登録しておいた物理的なデバイス(例えばあなたのスマートフォンなど)も必要になり、よりセキュリティが向上します。"
|
intro: "二段階認証を設定すると、サインイン時にパスワードだけでなく、予め登録しておいた物理的なデバイス(例えばあなたのスマートフォンなど)も必要になり、よりセキュリティが向上します。"
|
||||||
detail: "詳細..."
|
detail: "詳細..."
|
||||||
@@ -823,20 +868,6 @@ desktop/views/components/settings.password.vue:
|
|||||||
enter-new-password-again: "もう一度新しいパスワードを入力してください"
|
enter-new-password-again: "もう一度新しいパスワードを入力してください"
|
||||||
not-match: "新しいパスワードが一致しません"
|
not-match: "新しいパスワードが一致しません"
|
||||||
changed: "パスワードを変更しました"
|
changed: "パスワードを変更しました"
|
||||||
desktop/views/components/settings.profile.vue:
|
|
||||||
avatar: "アイコン"
|
|
||||||
choice-avatar: "画像を選択"
|
|
||||||
name: "名前"
|
|
||||||
location: "場所"
|
|
||||||
description: "自己紹介"
|
|
||||||
birthday: "誕生日"
|
|
||||||
save: "保存"
|
|
||||||
locked-account: "アカウントの保護"
|
|
||||||
is-locked: "フォローを承認制にする"
|
|
||||||
other: "その他"
|
|
||||||
is-bot: "このアカウントはBotです"
|
|
||||||
is-cat: "このアカウントはCatです"
|
|
||||||
profile-updated: "プロフィールを更新しました"
|
|
||||||
desktop/views/components/sub-note-content.vue:
|
desktop/views/components/sub-note-content.vue:
|
||||||
private: "この投稿は非公開です"
|
private: "この投稿は非公開です"
|
||||||
deleted: "この投稿は削除されました"
|
deleted: "この投稿は削除されました"
|
||||||
@@ -908,6 +939,8 @@ desktop/views/pages/admin/admin.vue:
|
|||||||
drive: "ドライブ"
|
drive: "ドライブ"
|
||||||
users: "ユーザー"
|
users: "ユーザー"
|
||||||
update: "更新"
|
update: "更新"
|
||||||
|
announcements: "お知らせ"
|
||||||
|
hashtags: "ハッシュタグ"
|
||||||
desktop/views/pages/admin/admin.dashboard.vue:
|
desktop/views/pages/admin/admin.dashboard.vue:
|
||||||
dashboard: "ダッシュボード"
|
dashboard: "ダッシュボード"
|
||||||
all-users: "全てのユーザー"
|
all-users: "全てのユーザー"
|
||||||
@@ -915,6 +948,9 @@ desktop/views/pages/admin/admin.dashboard.vue:
|
|||||||
all-notes: "全ての投稿"
|
all-notes: "全ての投稿"
|
||||||
original-notes: "このインスタンスの投稿"
|
original-notes: "このインスタンスの投稿"
|
||||||
invite: "招待"
|
invite: "招待"
|
||||||
|
banner-url: "Banner URL"
|
||||||
|
disableRegistration: "Disable new user registration"
|
||||||
|
disableLocalTimeline: "Disable the local timeline"
|
||||||
desktop/views/pages/admin/admin.suspend-user.vue:
|
desktop/views/pages/admin/admin.suspend-user.vue:
|
||||||
suspend-user: "ユーザーの凍結"
|
suspend-user: "ユーザーの凍結"
|
||||||
suspend: "凍結"
|
suspend: "凍結"
|
||||||
@@ -931,14 +967,23 @@ desktop/views/pages/admin/admin.unverify-user.vue:
|
|||||||
unverify-user: "ユーザーの公式アカウント解除"
|
unverify-user: "ユーザーの公式アカウント解除"
|
||||||
unverify: "公式アカウントを解除する"
|
unverify: "公式アカウントを解除する"
|
||||||
unverified: "公式アカウントを解除しました"
|
unverified: "公式アカウントを解除しました"
|
||||||
|
desktop/views/pages/admin/admin.announcements.vue:
|
||||||
|
announcements: "お知らせ"
|
||||||
|
desktop/views/pages/admin/admin.hashtags.vue:
|
||||||
|
hided-tags: "Hidden Tags"
|
||||||
desktop/views/pages/deck/deck.tl-column.vue:
|
desktop/views/pages/deck/deck.tl-column.vue:
|
||||||
is-media-only: "メディア投稿のみ"
|
is-media-only: "メディア投稿のみ"
|
||||||
is-media-view: "メディアビュー"
|
is-media-view: "メディアビュー"
|
||||||
edit: "オプション"
|
edit: "オプション"
|
||||||
desktop/views/pages/deck/deck.note.vue:
|
desktop/views/pages/deck/deck.user-column.vue:
|
||||||
reposted-by: "{}がRenote"
|
posts: "投稿"
|
||||||
private: "この投稿は非公開です"
|
following: "フォロー"
|
||||||
deleted: "この投稿は削除されました"
|
followers: "フォロワー"
|
||||||
|
images: "画像"
|
||||||
|
activity: "アクティビティ"
|
||||||
|
timeline: "タイムライン"
|
||||||
|
pinned-notes: "ピン留めされた投稿"
|
||||||
|
push-to-a-list: "リストに追加"
|
||||||
desktop/views/pages/stats/stats.vue:
|
desktop/views/pages/stats/stats.vue:
|
||||||
all-users: "全てのユーザー"
|
all-users: "全てのユーザー"
|
||||||
original-users: "このインスタンスのユーザー"
|
original-users: "このインスタンスのユーザー"
|
||||||
@@ -991,9 +1036,6 @@ desktop/views/pages/user/user.friends.vue:
|
|||||||
no-users: "よく話すユーザーはいません"
|
no-users: "よく話すユーザーはいません"
|
||||||
desktop/views/pages/user/user.vue:
|
desktop/views/pages/user/user.vue:
|
||||||
is-suspended: "このユーザーは凍結されています。"
|
is-suspended: "このユーザーは凍結されています。"
|
||||||
is-remote: "このユーザーはリモートユーザーです。"
|
|
||||||
view-remote: "正確な情報を見る"
|
|
||||||
desktop/views/pages/user/user.home.vue:
|
|
||||||
last-used-at: "最終アクセス"
|
last-used-at: "最終アクセス"
|
||||||
desktop/views/pages/user/user.photos.vue:
|
desktop/views/pages/user/user.photos.vue:
|
||||||
title: "フォト"
|
title: "フォト"
|
||||||
@@ -1014,6 +1056,10 @@ desktop/views/pages/user/user.header.vue:
|
|||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
followers: "フォロワー"
|
followers: "フォロワー"
|
||||||
is-bot: "このアカウントはBotです"
|
is-bot: "このアカウントはBotです"
|
||||||
|
years-old: "歳"
|
||||||
|
year: "年"
|
||||||
|
month: "月"
|
||||||
|
day: "日"
|
||||||
desktop/views/pages/user/user.timeline.vue:
|
desktop/views/pages/user/user.timeline.vue:
|
||||||
default: "投稿"
|
default: "投稿"
|
||||||
with-replies: "投稿と返信"
|
with-replies: "投稿と返信"
|
||||||
@@ -1073,6 +1119,8 @@ mobile/views/components/drive.file-detail.vue:
|
|||||||
hash: "ハッシュ (md5)"
|
hash: "ハッシュ (md5)"
|
||||||
exif: "EXIF"
|
exif: "EXIF"
|
||||||
nsfw: "閲覧注意"
|
nsfw: "閲覧注意"
|
||||||
|
mark-as-sensitive: "閲覧注意に設定"
|
||||||
|
unmark-as-sensitive: "閲覧注意を解除"
|
||||||
mobile/views/components/media-image.vue:
|
mobile/views/components/media-image.vue:
|
||||||
sensitive: "閲覧注意"
|
sensitive: "閲覧注意"
|
||||||
click-to-show: "クリックして表示"
|
click-to-show: "クリックして表示"
|
||||||
@@ -1213,23 +1261,6 @@ mobile/views/pages/notifications.vue:
|
|||||||
read-all: "すべての通知を既読にしますか?"
|
read-all: "すべての通知を既読にしますか?"
|
||||||
mobile/views/pages/games/reversi.vue:
|
mobile/views/pages/games/reversi.vue:
|
||||||
reversi: "リバーシ"
|
reversi: "リバーシ"
|
||||||
mobile/views/pages/settings/settings.profile.vue:
|
|
||||||
title: "プロフィール"
|
|
||||||
name: "名前"
|
|
||||||
account: "アカウント"
|
|
||||||
location: "場所"
|
|
||||||
description: "自己紹介"
|
|
||||||
birthday: "誕生日"
|
|
||||||
avatar: "アイコン"
|
|
||||||
banner: "バナー"
|
|
||||||
is-cat: "このアカウントはCatです"
|
|
||||||
is-locked: "フォローを承認制にする"
|
|
||||||
advanced: "その他"
|
|
||||||
privacy: "プライバシー"
|
|
||||||
save: "保存"
|
|
||||||
saved: "プロフィールを保存しました"
|
|
||||||
uploading: "アップロード中"
|
|
||||||
upload-failed: "アップロードに失敗しました"
|
|
||||||
mobile/views/pages/search.vue:
|
mobile/views/pages/search.vue:
|
||||||
search: "検索"
|
search: "検索"
|
||||||
empty: "「{}」に関する投稿は見つかりませんでした。"
|
empty: "「{}」に関する投稿は見つかりませんでした。"
|
||||||
@@ -1285,6 +1316,7 @@ mobile/views/pages/settings.vue:
|
|||||||
signout: "サインアウト"
|
signout: "サインアウト"
|
||||||
sound: "サウンド"
|
sound: "サウンド"
|
||||||
enable-sounds: "サウンドを有効にする"
|
enable-sounds: "サウンドを有効にする"
|
||||||
|
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
|
||||||
mobile/views/pages/user.vue:
|
mobile/views/pages/user.vue:
|
||||||
follows-you: "フォローされています"
|
follows-you: "フォローされています"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
@@ -1294,8 +1326,6 @@ mobile/views/pages/user.vue:
|
|||||||
timeline: "タイムライン"
|
timeline: "タイムライン"
|
||||||
media: "メディア"
|
media: "メディア"
|
||||||
is-suspended: "このユーザーは凍結されています。"
|
is-suspended: "このユーザーは凍結されています。"
|
||||||
is-remote: "このユーザーはリモートユーザーです。"
|
|
||||||
view-remote: "正確な情報を見る"
|
|
||||||
mobile/views/pages/user/home.vue:
|
mobile/views/pages/user/home.vue:
|
||||||
recent-notes: "最近の投稿"
|
recent-notes: "最近の投稿"
|
||||||
images: "画像"
|
images: "画像"
|
||||||
@@ -1341,3 +1371,29 @@ docs:
|
|||||||
description: "説明"
|
description: "説明"
|
||||||
dev/views/index.vue:
|
dev/views/index.vue:
|
||||||
manage-apps: "アプリの管理"
|
manage-apps: "アプリの管理"
|
||||||
|
dev/views/apps.vue:
|
||||||
|
manage-apps: "アプリを管理"
|
||||||
|
create-app: "アプリ作成"
|
||||||
|
app-missing: "アプリなし"
|
||||||
|
dev/views/new-app.vue:
|
||||||
|
create-app: "アプリケーションの作成"
|
||||||
|
app-name: "アプリケーション名"
|
||||||
|
app-name-desc: "あなたのアプリの名称。"
|
||||||
|
app-name-ex: "ex) Misskey for iOS"
|
||||||
|
app-overview: "アプリの概要"
|
||||||
|
app-desc: "あなたのアプリの簡単な説明や紹介。"
|
||||||
|
app-desc-ex: "ex) Misskey iOSクライアント。"
|
||||||
|
callback-url: "コールバックURL (オプション)"
|
||||||
|
callback-url-desc: "ユーザーが認証フォームで認証した際にリダイレクトするURLを設定できます。"
|
||||||
|
authority: "権限"
|
||||||
|
authority-desc: "ここで要求した機能だけがAPIからアクセスできます。"
|
||||||
|
authority-warning: "アプリ作成後も変更できますが、新たな権限を付与する場合、その時点で関連付けられているユーザーキーはすべて無効になります。"
|
||||||
|
account-read: "アカウントの情報を見る。"
|
||||||
|
account-write: "アカウントの情報を操作する。"
|
||||||
|
note-write: "投稿する。"
|
||||||
|
reaction-write: "リアクションしたりリアクションをキャンセルする。"
|
||||||
|
following-write: "フォローしたりフォロー解除する。"
|
||||||
|
drive-read: "ドライブを見る。"
|
||||||
|
drive-write: "ドライブを操作する。"
|
||||||
|
notification-read: "通知を見る。"
|
||||||
|
notification-write: "通知を操作する。"
|
||||||
|
|||||||
@@ -25,6 +25,14 @@ common:
|
|||||||
application-authorization: "アプリの連携"
|
application-authorization: "アプリの連携"
|
||||||
close: "閉じる"
|
close: "閉じる"
|
||||||
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
|
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
|
||||||
|
BSoD:
|
||||||
|
fatal-error: ":( 致命的な問題が発生しました。"
|
||||||
|
update-browser-os: "お使いのブラウザ(またはOS)のバージョンを更新すると解決する可能性があります。"
|
||||||
|
error-code: "エラーコード"
|
||||||
|
browser-version: "ブラウザ バージョン"
|
||||||
|
client-version: "クライアント バージョン"
|
||||||
|
email-support: "問題が解決しない場合は、上記の情報をお書き添えの上 syuilotan@yahoo.co.jp までご連絡ください。"
|
||||||
|
thanks: "Thank you for using Misskey."
|
||||||
got-it: "わかった"
|
got-it: "わかった"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "カスタマイズのヒント"
|
title: "カスタマイズのヒント"
|
||||||
@@ -115,6 +123,12 @@ common:
|
|||||||
reduce-motion: "UIの動きを減らす"
|
reduce-motion: "UIの動きを減らす"
|
||||||
this-setting-is-this-device-only: "このデバイスのみ"
|
this-setting-is-this-device-only: "このデバイスのみ"
|
||||||
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
|
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
|
||||||
|
is-remote-user: "このユーザー情報はコピーです。"
|
||||||
|
is-remote-post: "この投稿情報はコピーです。"
|
||||||
|
view-on-remote: "正確な情報を見る"
|
||||||
|
error:
|
||||||
|
title: '問題が発生しました'
|
||||||
|
retry: 'やり直す'
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "引き分け"
|
drawn: "引き分け"
|
||||||
my-turn: "あなたのターンです"
|
my-turn: "あなたのターンです"
|
||||||
@@ -170,6 +184,7 @@ common:
|
|||||||
rename: "名前を変更"
|
rename: "名前を変更"
|
||||||
stack-left: "左に重ねる"
|
stack-left: "左に重ねる"
|
||||||
pop-right: "右に出す"
|
pop-right: "右に出す"
|
||||||
|
dev: "アプリの作成に失敗しました。再度お試しください。"
|
||||||
auth/views/form.vue:
|
auth/views/form.vue:
|
||||||
share-access: "<i>{{ app.name }}</i>があなたのアカウントにアクセスすることを<b>許可</b>しますか?"
|
share-access: "<i>{{ app.name }}</i>があなたのアカウントにアクセスすることを<b>許可</b>しますか?"
|
||||||
permission-ask: "このアプリは次の権限を要求しています:"
|
permission-ask: "このアプリは次の権限を要求しています:"
|
||||||
@@ -335,6 +350,7 @@ common/views/components/note-menu.vue:
|
|||||||
detail: "詳細"
|
detail: "詳細"
|
||||||
copy-link: "リンクをコピー"
|
copy-link: "リンクをコピー"
|
||||||
favorite: "Deze notitie toevoegen aan favorieten"
|
favorite: "Deze notitie toevoegen aan favorieten"
|
||||||
|
unfavorite: "お気に入り解除"
|
||||||
pin: "Vastmaken aan profielpagina"
|
pin: "Vastmaken aan profielpagina"
|
||||||
unpin: "ピン留め解除"
|
unpin: "ピン留め解除"
|
||||||
delete: "削除"
|
delete: "削除"
|
||||||
@@ -415,6 +431,25 @@ common/views/components/visibility-chooser.vue:
|
|||||||
common/views/components/trends.vue:
|
common/views/components/trends.vue:
|
||||||
count: "{}人が投稿"
|
count: "{}人が投稿"
|
||||||
empty: "トレンドなし"
|
empty: "トレンドなし"
|
||||||
|
common/views/components/profile-editor.vue:
|
||||||
|
title: "プロフィール"
|
||||||
|
name: "名前"
|
||||||
|
account: "アカウント"
|
||||||
|
location: "場所"
|
||||||
|
description: "自己紹介"
|
||||||
|
birthday: "誕生日"
|
||||||
|
avatar: "アイコン"
|
||||||
|
banner: "バナー"
|
||||||
|
is-cat: "このアカウントはCatです"
|
||||||
|
is-bot: "このアカウントはBotです"
|
||||||
|
is-locked: "フォローを承認制にする"
|
||||||
|
careful-bot: "Botからのフォローだけ承認制にする"
|
||||||
|
advanced: "その他"
|
||||||
|
privacy: "プライバシー"
|
||||||
|
save: "保存"
|
||||||
|
saved: "プロフィールを保存しました"
|
||||||
|
uploading: "アップロード中"
|
||||||
|
upload-failed: "アップロードに失敗しました"
|
||||||
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"
|
||||||
@@ -639,12 +674,12 @@ desktop/views/components/note-detail.vue:
|
|||||||
location: "Locatie"
|
location: "Locatie"
|
||||||
renote: "Renote"
|
renote: "Renote"
|
||||||
add-reaction: "リアクション"
|
add-reaction: "リアクション"
|
||||||
desktop/views/components/notes.note.vue:
|
desktop/views/components/note.vue:
|
||||||
reposted-by: "Hergeplaatst door {}"
|
reposted-by: "{}がRenote"
|
||||||
reply: "Antwoord"
|
reply: "返信"
|
||||||
renote: "Renote"
|
renote: "Renote"
|
||||||
add-reaction: "Reactie toevoegen"
|
add-reaction: "リアクション"
|
||||||
detail: "Details tonen"
|
detail: "詳細"
|
||||||
private: "この投稿は非公開です"
|
private: "この投稿は非公開です"
|
||||||
deleted: "この投稿は削除されました"
|
deleted: "この投稿は削除されました"
|
||||||
desktop/views/components/notes.vue:
|
desktop/views/components/notes.vue:
|
||||||
@@ -725,8 +760,12 @@ desktop/views/components/settings.vue:
|
|||||||
advanced: "Geavanceerde instellingen"
|
advanced: "Geavanceerde instellingen"
|
||||||
api-via-stream: "API-verzoek via stream"
|
api-via-stream: "API-verzoek via stream"
|
||||||
api-via-stream-desc: "API-verzoek wordt uitgevoerd via de WebSocket-verbinding i.p.v. de ingebouwde ophaal-API (voor verbeterde prestaties). Deze instelling wordt opgeslagen in je browser."
|
api-via-stream-desc: "API-verzoek wordt uitgevoerd via de WebSocket-verbinding i.p.v. de ingebouwde ophaal-API (voor verbeterde prestaties). Deze instelling wordt opgeslagen in je browser."
|
||||||
|
deck-nav: "デッキ内ナビゲーション"
|
||||||
|
deck-nav-desc: "デッキを使用しているとき、ナビゲーションが発生する際にページ遷移を行わずに一時的なカラムで受けるようにします。"
|
||||||
|
deck-default: "デッキをデフォルトのUIにする"
|
||||||
display: "Ontwerp en weergave"
|
display: "Ontwerp en weergave"
|
||||||
customize: "Startpagina aanpassen"
|
customize: "Startpagina aanpassen"
|
||||||
|
wallpaper: "壁紙"
|
||||||
choose-wallpaper: "壁紙を選択"
|
choose-wallpaper: "壁紙を選択"
|
||||||
delete-wallpaper: "壁紙を削除"
|
delete-wallpaper: "壁紙を削除"
|
||||||
dark-mode: "Donkere modus"
|
dark-mode: "Donkere modus"
|
||||||
@@ -738,17 +777,19 @@ desktop/views/components/settings.vue:
|
|||||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||||
show-clock-on-header: "右上に時計を表示する"
|
show-clock-on-header: "右上に時計を表示する"
|
||||||
show-reply-target: "Antwoord-knop tonen"
|
show-reply-target: "Antwoord-knop tonen"
|
||||||
|
timeline: "タイムライン"
|
||||||
show-my-renotes: "Mijn renote tonen op de tijdlijn"
|
show-my-renotes: "Mijn renote tonen op de tijdlijn"
|
||||||
show-renoted-my-notes: "Mijn gerenote bericht tonen op de tijdlijn"
|
show-renoted-my-notes: "Mijn gerenote bericht tonen op de tijdlijn"
|
||||||
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
||||||
show-maps: "Kaart tonen"
|
show-maps: "Kaart tonen"
|
||||||
|
deck-column-align: "デッキのカラムの位置"
|
||||||
|
deck-column-align-center: "中央"
|
||||||
|
deck-column-align-left: "左"
|
||||||
sound: "Geluid"
|
sound: "Geluid"
|
||||||
enable-sounds: "Geluid inschakelen"
|
enable-sounds: "Geluid inschakelen"
|
||||||
enable-sounds-desc: "Een geluid afspelen bij het ontvangen van een bericht. Deze instelling wordt opgeslagen in je browser."
|
enable-sounds-desc: "Een geluid afspelen bij het ontvangen van een bericht. Deze instelling wordt opgeslagen in je browser."
|
||||||
volume: "Volume"
|
volume: "Volume"
|
||||||
test: "Testen"
|
test: "Testen"
|
||||||
mobile: "Mobiel"
|
|
||||||
disable-via-mobile: "Berichten niet markeren als 'via mobiel'"
|
|
||||||
language: "Taal"
|
language: "Taal"
|
||||||
pick-language: "Selecteer een taal"
|
pick-language: "Selecteer een taal"
|
||||||
recommended: "Aanbevolen"
|
recommended: "Aanbevolen"
|
||||||
@@ -784,6 +825,10 @@ desktop/views/components/settings.vue:
|
|||||||
tools: "Hulpmiddelen"
|
tools: "Hulpmiddelen"
|
||||||
task-manager: "Taakbeheer"
|
task-manager: "Taakbeheer"
|
||||||
third-parties: "Derde partij"
|
third-parties: "Derde partij"
|
||||||
|
navbar-position: "ナビゲーションバーの位置"
|
||||||
|
navbar-position-top: "上"
|
||||||
|
navbar-position-left: "左"
|
||||||
|
navbar-position-right: "右"
|
||||||
desktop/views/components/settings.2fa.vue:
|
desktop/views/components/settings.2fa.vue:
|
||||||
intro: "Als je verificatie in twee stappen instelt, dan heb je niet alleen een wachtwoord nodig bij het inloggen, maar ook een geregistreerd fysiek apparaat (zoals je smartphone). Dit verhoogt de veiligheid. "
|
intro: "Als je verificatie in twee stappen instelt, dan heb je niet alleen een wachtwoord nodig bij het inloggen, maar ook een geregistreerd fysiek apparaat (zoals je smartphone). Dit verhoogt de veiligheid. "
|
||||||
detail: "Details bekijken..."
|
detail: "Details bekijken..."
|
||||||
@@ -823,20 +868,6 @@ desktop/views/components/settings.password.vue:
|
|||||||
enter-new-password-again: "Voer je nieuwe wachtwoord nogmaals in"
|
enter-new-password-again: "Voer je nieuwe wachtwoord nogmaals in"
|
||||||
not-match: "Het nieuwe wachtwoord komt niet overeen"
|
not-match: "Het nieuwe wachtwoord komt niet overeen"
|
||||||
changed: "Wachtwoord bijgewerkt"
|
changed: "Wachtwoord bijgewerkt"
|
||||||
desktop/views/components/settings.profile.vue:
|
|
||||||
avatar: "Gebruikersafbeelding"
|
|
||||||
choice-avatar: "Kies een afbeelding"
|
|
||||||
name: "Naam"
|
|
||||||
location: "Locatie"
|
|
||||||
description: "Omschrijving"
|
|
||||||
birthday: "Geboortedatum"
|
|
||||||
save: "Profiel bijwerken"
|
|
||||||
locked-account: "アカウントの保護"
|
|
||||||
is-locked: "フォローを承認制にする"
|
|
||||||
other: "その他"
|
|
||||||
is-bot: "Dit account is een Bot"
|
|
||||||
is-cat: "Dit account is een Kat"
|
|
||||||
profile-updated: "プロフィールを更新しました"
|
|
||||||
desktop/views/components/sub-note-content.vue:
|
desktop/views/components/sub-note-content.vue:
|
||||||
private: "この投稿は非公開です"
|
private: "この投稿は非公開です"
|
||||||
deleted: "この投稿は削除されました"
|
deleted: "この投稿は削除されました"
|
||||||
@@ -908,6 +939,8 @@ desktop/views/pages/admin/admin.vue:
|
|||||||
drive: "ドライブ"
|
drive: "ドライブ"
|
||||||
users: "ユーザー"
|
users: "ユーザー"
|
||||||
update: "更新"
|
update: "更新"
|
||||||
|
announcements: "お知らせ"
|
||||||
|
hashtags: "ハッシュタグ"
|
||||||
desktop/views/pages/admin/admin.dashboard.vue:
|
desktop/views/pages/admin/admin.dashboard.vue:
|
||||||
dashboard: "ダッシュボード"
|
dashboard: "ダッシュボード"
|
||||||
all-users: "全てのユーザー"
|
all-users: "全てのユーザー"
|
||||||
@@ -915,6 +948,9 @@ desktop/views/pages/admin/admin.dashboard.vue:
|
|||||||
all-notes: "全ての投稿"
|
all-notes: "全ての投稿"
|
||||||
original-notes: "このインスタンスの投稿"
|
original-notes: "このインスタンスの投稿"
|
||||||
invite: "招待"
|
invite: "招待"
|
||||||
|
banner-url: "Banner URL"
|
||||||
|
disableRegistration: "Disable new user registration"
|
||||||
|
disableLocalTimeline: "Disable the local timeline"
|
||||||
desktop/views/pages/admin/admin.suspend-user.vue:
|
desktop/views/pages/admin/admin.suspend-user.vue:
|
||||||
suspend-user: "ユーザーの凍結"
|
suspend-user: "ユーザーの凍結"
|
||||||
suspend: "凍結"
|
suspend: "凍結"
|
||||||
@@ -931,14 +967,23 @@ desktop/views/pages/admin/admin.unverify-user.vue:
|
|||||||
unverify-user: "ユーザーの公式アカウント解除"
|
unverify-user: "ユーザーの公式アカウント解除"
|
||||||
unverify: "公式アカウントを解除する"
|
unverify: "公式アカウントを解除する"
|
||||||
unverified: "公式アカウントを解除しました"
|
unverified: "公式アカウントを解除しました"
|
||||||
|
desktop/views/pages/admin/admin.announcements.vue:
|
||||||
|
announcements: "お知らせ"
|
||||||
|
desktop/views/pages/admin/admin.hashtags.vue:
|
||||||
|
hided-tags: "Hidden Tags"
|
||||||
desktop/views/pages/deck/deck.tl-column.vue:
|
desktop/views/pages/deck/deck.tl-column.vue:
|
||||||
is-media-only: "メディア投稿のみ"
|
is-media-only: "メディア投稿のみ"
|
||||||
is-media-view: "メディアビュー"
|
is-media-view: "メディアビュー"
|
||||||
edit: "オプション"
|
edit: "オプション"
|
||||||
desktop/views/pages/deck/deck.note.vue:
|
desktop/views/pages/deck/deck.user-column.vue:
|
||||||
reposted-by: "{}がRenote"
|
posts: "投稿"
|
||||||
private: "この投稿は非公開です"
|
following: "フォロー"
|
||||||
deleted: "この投稿は削除されました"
|
followers: "フォロワー"
|
||||||
|
images: "画像"
|
||||||
|
activity: "アクティビティ"
|
||||||
|
timeline: "タイムライン"
|
||||||
|
pinned-notes: "ピン留めされた投稿"
|
||||||
|
push-to-a-list: "リストに追加"
|
||||||
desktop/views/pages/stats/stats.vue:
|
desktop/views/pages/stats/stats.vue:
|
||||||
all-users: "全てのユーザー"
|
all-users: "全てのユーザー"
|
||||||
original-users: "このインスタンスのユーザー"
|
original-users: "このインスタンスのユーザー"
|
||||||
@@ -991,10 +1036,7 @@ desktop/views/pages/user/user.friends.vue:
|
|||||||
no-users: "Geen gebruikers"
|
no-users: "Geen gebruikers"
|
||||||
desktop/views/pages/user/user.vue:
|
desktop/views/pages/user/user.vue:
|
||||||
is-suspended: "このユーザーは凍結されています。"
|
is-suspended: "このユーザーは凍結されています。"
|
||||||
is-remote: "このユーザーはリモートユーザーです。"
|
last-used-at: "最終アクセス"
|
||||||
view-remote: "正確な情報を見る"
|
|
||||||
desktop/views/pages/user/user.home.vue:
|
|
||||||
last-used-at: "Laatst actief: "
|
|
||||||
desktop/views/pages/user/user.photos.vue:
|
desktop/views/pages/user/user.photos.vue:
|
||||||
title: "Foto's"
|
title: "Foto's"
|
||||||
loading: "Bezig met laden"
|
loading: "Bezig met laden"
|
||||||
@@ -1014,6 +1056,10 @@ desktop/views/pages/user/user.header.vue:
|
|||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
followers: "フォロワー"
|
followers: "フォロワー"
|
||||||
is-bot: "このアカウントはBotです"
|
is-bot: "このアカウントはBotです"
|
||||||
|
years-old: "歳"
|
||||||
|
year: "年"
|
||||||
|
month: "月"
|
||||||
|
day: "日"
|
||||||
desktop/views/pages/user/user.timeline.vue:
|
desktop/views/pages/user/user.timeline.vue:
|
||||||
default: "Berichten"
|
default: "Berichten"
|
||||||
with-replies: "Berichten en antwoorden"
|
with-replies: "Berichten en antwoorden"
|
||||||
@@ -1073,6 +1119,8 @@ mobile/views/components/drive.file-detail.vue:
|
|||||||
hash: "Hash (md5)"
|
hash: "Hash (md5)"
|
||||||
exif: "EXIF"
|
exif: "EXIF"
|
||||||
nsfw: "閲覧注意"
|
nsfw: "閲覧注意"
|
||||||
|
mark-as-sensitive: "閲覧注意に設定"
|
||||||
|
unmark-as-sensitive: "閲覧注意を解除"
|
||||||
mobile/views/components/media-image.vue:
|
mobile/views/components/media-image.vue:
|
||||||
sensitive: "閲覧注意"
|
sensitive: "閲覧注意"
|
||||||
click-to-show: "クリックして表示"
|
click-to-show: "クリックして表示"
|
||||||
@@ -1213,23 +1261,6 @@ mobile/views/pages/notifications.vue:
|
|||||||
read-all: "Weet je zeker dat je alle meldingen wilt markeren als gelezen?"
|
read-all: "Weet je zeker dat je alle meldingen wilt markeren als gelezen?"
|
||||||
mobile/views/pages/games/reversi.vue:
|
mobile/views/pages/games/reversi.vue:
|
||||||
reversi: "リバーシ"
|
reversi: "リバーシ"
|
||||||
mobile/views/pages/settings/settings.profile.vue:
|
|
||||||
title: "Profiel"
|
|
||||||
name: "Naam"
|
|
||||||
account: "Account"
|
|
||||||
location: "Locatie"
|
|
||||||
description: "Omschrijving"
|
|
||||||
birthday: "Geboortedatum"
|
|
||||||
avatar: "Gebruikersafbeelding"
|
|
||||||
banner: "Omslagfoto"
|
|
||||||
is-cat: "Dit account is een Kat"
|
|
||||||
is-locked: "フォローを承認制にする"
|
|
||||||
advanced: "その他"
|
|
||||||
privacy: "プライバシー"
|
|
||||||
save: "Profiel bijwerken"
|
|
||||||
saved: "Profiel bijgewerkt"
|
|
||||||
uploading: "Bezig met uploaden"
|
|
||||||
upload-failed: "Upload mislukt"
|
|
||||||
mobile/views/pages/search.vue:
|
mobile/views/pages/search.vue:
|
||||||
search: "Zoeken"
|
search: "Zoeken"
|
||||||
empty: "Geen berichten gevonden voor '{}'"
|
empty: "Geen berichten gevonden voor '{}'"
|
||||||
@@ -1285,6 +1316,7 @@ mobile/views/pages/settings.vue:
|
|||||||
signout: "Uitloggen"
|
signout: "Uitloggen"
|
||||||
sound: "サウンド"
|
sound: "サウンド"
|
||||||
enable-sounds: "サウンドを有効にする"
|
enable-sounds: "サウンドを有効にする"
|
||||||
|
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
|
||||||
mobile/views/pages/user.vue:
|
mobile/views/pages/user.vue:
|
||||||
follows-you: "Volgt jou"
|
follows-you: "Volgt jou"
|
||||||
following: "Volgend"
|
following: "Volgend"
|
||||||
@@ -1294,8 +1326,6 @@ mobile/views/pages/user.vue:
|
|||||||
timeline: "Tijdlijn"
|
timeline: "Tijdlijn"
|
||||||
media: "Media"
|
media: "Media"
|
||||||
is-suspended: "Dit account is geschorst."
|
is-suspended: "Dit account is geschorst."
|
||||||
is-remote: "Deze gebruiker is een externe gebruiker; de informatie is daarom niet volledig. "
|
|
||||||
view-remote: "Volledige informatie bekijken"
|
|
||||||
mobile/views/pages/user/home.vue:
|
mobile/views/pages/user/home.vue:
|
||||||
recent-notes: "Recente notities"
|
recent-notes: "Recente notities"
|
||||||
images: "Afbeeldingen"
|
images: "Afbeeldingen"
|
||||||
@@ -1304,7 +1334,7 @@ mobile/views/pages/user/home.vue:
|
|||||||
domains: "Domeinnamen"
|
domains: "Domeinnamen"
|
||||||
frequently-replied-users: "Frequent gesproken gebruikers"
|
frequently-replied-users: "Frequent gesproken gebruikers"
|
||||||
followers-you-know: "Volgers die je kent"
|
followers-you-know: "Volgers die je kent"
|
||||||
last-used-at: "Laatst actief:"
|
last-used-at: "Laatst actief"
|
||||||
mobile/views/pages/user/home.followers-you-know.vue:
|
mobile/views/pages/user/home.followers-you-know.vue:
|
||||||
loading: "Bezig met laden"
|
loading: "Bezig met laden"
|
||||||
no-users: "Geen gebruikers"
|
no-users: "Geen gebruikers"
|
||||||
@@ -1341,3 +1371,29 @@ docs:
|
|||||||
description: "Omschrijving"
|
description: "Omschrijving"
|
||||||
dev/views/index.vue:
|
dev/views/index.vue:
|
||||||
manage-apps: "アプリの管理"
|
manage-apps: "アプリの管理"
|
||||||
|
dev/views/apps.vue:
|
||||||
|
manage-apps: "アプリを管理"
|
||||||
|
create-app: "アプリ作成"
|
||||||
|
app-missing: "アプリなし"
|
||||||
|
dev/views/new-app.vue:
|
||||||
|
create-app: "アプリケーションの作成"
|
||||||
|
app-name: "アプリケーション名"
|
||||||
|
app-name-desc: "あなたのアプリの名称。"
|
||||||
|
app-name-ex: "ex) Misskey for iOS"
|
||||||
|
app-overview: "アプリの概要"
|
||||||
|
app-desc: "あなたのアプリの簡単な説明や紹介。"
|
||||||
|
app-desc-ex: "ex) Misskey iOSクライアント。"
|
||||||
|
callback-url: "コールバックURL (オプション)"
|
||||||
|
callback-url-desc: "ユーザーが認証フォームで認証した際にリダイレクトするURLを設定できます。"
|
||||||
|
authority: "権限"
|
||||||
|
authority-desc: "ここで要求した機能だけがAPIからアクセスできます。"
|
||||||
|
authority-warning: "アプリ作成後も変更できますが、新たな権限を付与する場合、その時点で関連付けられているユーザーキーはすべて無効になります。"
|
||||||
|
account-read: "アカウントの情報を見る。"
|
||||||
|
account-write: "アカウントの情報を操作する。"
|
||||||
|
note-write: "投稿する。"
|
||||||
|
reaction-write: "リアクションしたりリアクションをキャンセルする。"
|
||||||
|
following-write: "フォローしたりフォロー解除する。"
|
||||||
|
drive-read: "ドライブを見る。"
|
||||||
|
drive-write: "ドライブを操作する。"
|
||||||
|
notification-read: "通知を見る。"
|
||||||
|
notification-write: "通知を操作する。"
|
||||||
|
|||||||
@@ -25,6 +25,14 @@ common:
|
|||||||
application-authorization: "アプリの連携"
|
application-authorization: "アプリの連携"
|
||||||
close: "Lukk"
|
close: "Lukk"
|
||||||
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
|
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
|
||||||
|
BSoD:
|
||||||
|
fatal-error: ":( 致命的な問題が発生しました。"
|
||||||
|
update-browser-os: "お使いのブラウザ(またはOS)のバージョンを更新すると解決する可能性があります。"
|
||||||
|
error-code: "エラーコード"
|
||||||
|
browser-version: "ブラウザ バージョン"
|
||||||
|
client-version: "クライアント バージョン"
|
||||||
|
email-support: "問題が解決しない場合は、上記の情報をお書き添えの上 syuilotan@yahoo.co.jp までご連絡ください。"
|
||||||
|
thanks: "Thank you for using Misskey."
|
||||||
got-it: "Skjønner!"
|
got-it: "Skjønner!"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "カスタマイズのヒント"
|
title: "カスタマイズのヒント"
|
||||||
@@ -115,6 +123,12 @@ common:
|
|||||||
reduce-motion: "UIの動きを減らす"
|
reduce-motion: "UIの動きを減らす"
|
||||||
this-setting-is-this-device-only: "このデバイスのみ"
|
this-setting-is-this-device-only: "このデバイスのみ"
|
||||||
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
|
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
|
||||||
|
is-remote-user: "このユーザー情報はコピーです。"
|
||||||
|
is-remote-post: "この投稿情報はコピーです。"
|
||||||
|
view-on-remote: "正確な情報を見る"
|
||||||
|
error:
|
||||||
|
title: '問題が発生しました'
|
||||||
|
retry: 'やり直す'
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "引き分け"
|
drawn: "引き分け"
|
||||||
my-turn: "あなたのターンです"
|
my-turn: "あなたのターンです"
|
||||||
@@ -170,6 +184,7 @@ common:
|
|||||||
rename: "Endre navn"
|
rename: "Endre navn"
|
||||||
stack-left: "左に重ねる"
|
stack-left: "左に重ねる"
|
||||||
pop-right: "Til høyre"
|
pop-right: "Til høyre"
|
||||||
|
dev: "アプリの作成に失敗しました。再度お試しください。"
|
||||||
auth/views/form.vue:
|
auth/views/form.vue:
|
||||||
share-access: "<i>{{ app.name }}</i>があなたのアカウントにアクセスすることを<b>許可</b>しますか?"
|
share-access: "<i>{{ app.name }}</i>があなたのアカウントにアクセスすることを<b>許可</b>しますか?"
|
||||||
permission-ask: "このアプリは次の権限を要求しています:"
|
permission-ask: "このアプリは次の権限を要求しています:"
|
||||||
@@ -335,6 +350,7 @@ common/views/components/note-menu.vue:
|
|||||||
detail: "Detaljer"
|
detail: "Detaljer"
|
||||||
copy-link: "リンクをコピー"
|
copy-link: "リンクをコピー"
|
||||||
favorite: "Merket som favoritt"
|
favorite: "Merket som favoritt"
|
||||||
|
unfavorite: "お気に入り解除"
|
||||||
pin: "Fest til profilen din"
|
pin: "Fest til profilen din"
|
||||||
unpin: "ピン留め解除"
|
unpin: "ピン留め解除"
|
||||||
delete: "Slett"
|
delete: "Slett"
|
||||||
@@ -415,6 +431,25 @@ common/views/components/visibility-chooser.vue:
|
|||||||
common/views/components/trends.vue:
|
common/views/components/trends.vue:
|
||||||
count: "{}人が投稿"
|
count: "{}人が投稿"
|
||||||
empty: "トレンドなし"
|
empty: "トレンドなし"
|
||||||
|
common/views/components/profile-editor.vue:
|
||||||
|
title: "プロフィール"
|
||||||
|
name: "名前"
|
||||||
|
account: "アカウント"
|
||||||
|
location: "場所"
|
||||||
|
description: "自己紹介"
|
||||||
|
birthday: "誕生日"
|
||||||
|
avatar: "アイコン"
|
||||||
|
banner: "バナー"
|
||||||
|
is-cat: "このアカウントはCatです"
|
||||||
|
is-bot: "このアカウントはBotです"
|
||||||
|
is-locked: "フォローを承認制にする"
|
||||||
|
careful-bot: "Botからのフォローだけ承認制にする"
|
||||||
|
advanced: "その他"
|
||||||
|
privacy: "プライバシー"
|
||||||
|
save: "保存"
|
||||||
|
saved: "プロフィールを保存しました"
|
||||||
|
uploading: "アップロード中"
|
||||||
|
upload-failed: "アップロードに失敗しました"
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "Henter"
|
fetching: "Henter"
|
||||||
no-broadcasts: "お知らせはありません"
|
no-broadcasts: "お知らせはありません"
|
||||||
@@ -639,12 +674,12 @@ desktop/views/components/note-detail.vue:
|
|||||||
location: "Lokasjon"
|
location: "Lokasjon"
|
||||||
renote: "Renote"
|
renote: "Renote"
|
||||||
add-reaction: "リアクション"
|
add-reaction: "リアクション"
|
||||||
desktop/views/components/notes.note.vue:
|
desktop/views/components/note.vue:
|
||||||
reposted-by: "{}がRenote"
|
reposted-by: "{}がRenote"
|
||||||
reply: "Svar"
|
reply: "返信"
|
||||||
renote: "Renote"
|
renote: "Renote"
|
||||||
add-reaction: "リアクション"
|
add-reaction: "リアクション"
|
||||||
detail: "Vis detaljer"
|
detail: "詳細"
|
||||||
private: "この投稿は非公開です"
|
private: "この投稿は非公開です"
|
||||||
deleted: "この投稿は削除されました"
|
deleted: "この投稿は削除されました"
|
||||||
desktop/views/components/notes.vue:
|
desktop/views/components/notes.vue:
|
||||||
@@ -725,8 +760,12 @@ desktop/views/components/settings.vue:
|
|||||||
advanced: "Avanserte innstillinger"
|
advanced: "Avanserte innstillinger"
|
||||||
api-via-stream: "ストリームを経由したAPIリクエスト"
|
api-via-stream: "ストリームを経由したAPIリクエスト"
|
||||||
api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。"
|
api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。"
|
||||||
|
deck-nav: "デッキ内ナビゲーション"
|
||||||
|
deck-nav-desc: "デッキを使用しているとき、ナビゲーションが発生する際にページ遷移を行わずに一時的なカラムで受けるようにします。"
|
||||||
|
deck-default: "デッキをデフォルトのUIにする"
|
||||||
display: "デザインと表示"
|
display: "デザインと表示"
|
||||||
customize: "ホームをカスタマイズ"
|
customize: "ホームをカスタマイズ"
|
||||||
|
wallpaper: "壁紙"
|
||||||
choose-wallpaper: "壁紙を選択"
|
choose-wallpaper: "壁紙を選択"
|
||||||
delete-wallpaper: "壁紙を削除"
|
delete-wallpaper: "壁紙を削除"
|
||||||
dark-mode: "ダークモード"
|
dark-mode: "ダークモード"
|
||||||
@@ -738,17 +777,19 @@ desktop/views/components/settings.vue:
|
|||||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||||
show-clock-on-header: "右上に時計を表示する"
|
show-clock-on-header: "右上に時計を表示する"
|
||||||
show-reply-target: "リプライ先を表示する"
|
show-reply-target: "リプライ先を表示する"
|
||||||
|
timeline: "タイムライン"
|
||||||
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
||||||
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
||||||
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
||||||
show-maps: "マップの自動展開"
|
show-maps: "マップの自動展開"
|
||||||
|
deck-column-align: "デッキのカラムの位置"
|
||||||
|
deck-column-align-center: "中央"
|
||||||
|
deck-column-align-left: "左"
|
||||||
sound: "Lyd"
|
sound: "Lyd"
|
||||||
enable-sounds: "サウンドを有効にする"
|
enable-sounds: "サウンドを有効にする"
|
||||||
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
||||||
volume: "Volum"
|
volume: "Volum"
|
||||||
test: "Test"
|
test: "Test"
|
||||||
mobile: "Mobil"
|
|
||||||
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
|
||||||
language: "Språk"
|
language: "Språk"
|
||||||
pick-language: "Velg språk"
|
pick-language: "Velg språk"
|
||||||
recommended: "Anbefalt"
|
recommended: "Anbefalt"
|
||||||
@@ -784,6 +825,10 @@ desktop/views/components/settings.vue:
|
|||||||
tools: "Verktøy"
|
tools: "Verktøy"
|
||||||
task-manager: "タスクマネージャ"
|
task-manager: "タスクマネージャ"
|
||||||
third-parties: "サードパーティ"
|
third-parties: "サードパーティ"
|
||||||
|
navbar-position: "ナビゲーションバーの位置"
|
||||||
|
navbar-position-top: "上"
|
||||||
|
navbar-position-left: "左"
|
||||||
|
navbar-position-right: "右"
|
||||||
desktop/views/components/settings.2fa.vue:
|
desktop/views/components/settings.2fa.vue:
|
||||||
intro: "二段階認証を設定すると、サインイン時にパスワードだけでなく、予め登録しておいた物理的なデバイス(例えばあなたのスマートフォンなど)も必要になり、よりセキュリティが向上します。"
|
intro: "二段階認証を設定すると、サインイン時にパスワードだけでなく、予め登録しておいた物理的なデバイス(例えばあなたのスマートフォンなど)も必要になり、よりセキュリティが向上します。"
|
||||||
detail: "Detaljer..."
|
detail: "Detaljer..."
|
||||||
@@ -823,20 +868,6 @@ desktop/views/components/settings.password.vue:
|
|||||||
enter-new-password-again: "もう一度新しいパスワードを入力してください"
|
enter-new-password-again: "もう一度新しいパスワードを入力してください"
|
||||||
not-match: "新しいパスワードが一致しません"
|
not-match: "新しいパスワードが一致しません"
|
||||||
changed: "パスワードを変更しました"
|
changed: "パスワードを変更しました"
|
||||||
desktop/views/components/settings.profile.vue:
|
|
||||||
avatar: "Avatar"
|
|
||||||
choice-avatar: "Velg et bilde"
|
|
||||||
name: "Navn"
|
|
||||||
location: "Lokasjon"
|
|
||||||
description: "Om meg"
|
|
||||||
birthday: "Bursdag"
|
|
||||||
save: "Lagre profilen"
|
|
||||||
locked-account: "アカウントの保護"
|
|
||||||
is-locked: "フォローを承認制にする"
|
|
||||||
other: "Annet"
|
|
||||||
is-bot: "このアカウントはBotです"
|
|
||||||
is-cat: "このアカウントはCatです"
|
|
||||||
profile-updated: "プロフィールを更新しました"
|
|
||||||
desktop/views/components/sub-note-content.vue:
|
desktop/views/components/sub-note-content.vue:
|
||||||
private: "この投稿は非公開です"
|
private: "この投稿は非公開です"
|
||||||
deleted: "この投稿は削除されました"
|
deleted: "この投稿は削除されました"
|
||||||
@@ -908,6 +939,8 @@ desktop/views/pages/admin/admin.vue:
|
|||||||
drive: "Disk"
|
drive: "Disk"
|
||||||
users: "Brukere"
|
users: "Brukere"
|
||||||
update: "Oppdater"
|
update: "Oppdater"
|
||||||
|
announcements: "お知らせ"
|
||||||
|
hashtags: "ハッシュタグ"
|
||||||
desktop/views/pages/admin/admin.dashboard.vue:
|
desktop/views/pages/admin/admin.dashboard.vue:
|
||||||
dashboard: "ダッシュボード"
|
dashboard: "ダッシュボード"
|
||||||
all-users: "全てのユーザー"
|
all-users: "全てのユーザー"
|
||||||
@@ -915,6 +948,9 @@ desktop/views/pages/admin/admin.dashboard.vue:
|
|||||||
all-notes: "全ての投稿"
|
all-notes: "全ての投稿"
|
||||||
original-notes: "このインスタンスの投稿"
|
original-notes: "このインスタンスの投稿"
|
||||||
invite: "Inviter"
|
invite: "Inviter"
|
||||||
|
banner-url: "Banner URL"
|
||||||
|
disableRegistration: "Disable new user registration"
|
||||||
|
disableLocalTimeline: "Disable the local timeline"
|
||||||
desktop/views/pages/admin/admin.suspend-user.vue:
|
desktop/views/pages/admin/admin.suspend-user.vue:
|
||||||
suspend-user: "ユーザーの凍結"
|
suspend-user: "ユーザーの凍結"
|
||||||
suspend: "Suspender"
|
suspend: "Suspender"
|
||||||
@@ -931,14 +967,23 @@ desktop/views/pages/admin/admin.unverify-user.vue:
|
|||||||
unverify-user: "ユーザーの公式アカウント解除"
|
unverify-user: "ユーザーの公式アカウント解除"
|
||||||
unverify: "公式アカウントを解除する"
|
unverify: "公式アカウントを解除する"
|
||||||
unverified: "公式アカウントを解除しました"
|
unverified: "公式アカウントを解除しました"
|
||||||
|
desktop/views/pages/admin/admin.announcements.vue:
|
||||||
|
announcements: "お知らせ"
|
||||||
|
desktop/views/pages/admin/admin.hashtags.vue:
|
||||||
|
hided-tags: "Hidden Tags"
|
||||||
desktop/views/pages/deck/deck.tl-column.vue:
|
desktop/views/pages/deck/deck.tl-column.vue:
|
||||||
is-media-only: "メディア投稿のみ"
|
is-media-only: "メディア投稿のみ"
|
||||||
is-media-view: "メディアビュー"
|
is-media-view: "メディアビュー"
|
||||||
edit: "オプション"
|
edit: "オプション"
|
||||||
desktop/views/pages/deck/deck.note.vue:
|
desktop/views/pages/deck/deck.user-column.vue:
|
||||||
reposted-by: "{}がRenote"
|
posts: "投稿"
|
||||||
private: "この投稿は非公開です"
|
following: "フォロー"
|
||||||
deleted: "この投稿は削除されました"
|
followers: "フォロワー"
|
||||||
|
images: "画像"
|
||||||
|
activity: "アクティビティ"
|
||||||
|
timeline: "タイムライン"
|
||||||
|
pinned-notes: "ピン留めされた投稿"
|
||||||
|
push-to-a-list: "リストに追加"
|
||||||
desktop/views/pages/stats/stats.vue:
|
desktop/views/pages/stats/stats.vue:
|
||||||
all-users: "全てのユーザー"
|
all-users: "全てのユーザー"
|
||||||
original-users: "このインスタンスのユーザー"
|
original-users: "このインスタンスのユーザー"
|
||||||
@@ -991,9 +1036,6 @@ desktop/views/pages/user/user.friends.vue:
|
|||||||
no-users: "よく話すユーザーはいません"
|
no-users: "よく話すユーザーはいません"
|
||||||
desktop/views/pages/user/user.vue:
|
desktop/views/pages/user/user.vue:
|
||||||
is-suspended: "このユーザーは凍結されています。"
|
is-suspended: "このユーザーは凍結されています。"
|
||||||
is-remote: "このユーザーはリモートユーザーです。"
|
|
||||||
view-remote: "正確な情報を見る"
|
|
||||||
desktop/views/pages/user/user.home.vue:
|
|
||||||
last-used-at: "最終アクセス"
|
last-used-at: "最終アクセス"
|
||||||
desktop/views/pages/user/user.photos.vue:
|
desktop/views/pages/user/user.photos.vue:
|
||||||
title: "Bilder"
|
title: "Bilder"
|
||||||
@@ -1014,6 +1056,10 @@ desktop/views/pages/user/user.header.vue:
|
|||||||
following: "Følger"
|
following: "Følger"
|
||||||
followers: "フォロワー"
|
followers: "フォロワー"
|
||||||
is-bot: "このアカウントはBotです"
|
is-bot: "このアカウントはBotです"
|
||||||
|
years-old: "歳"
|
||||||
|
year: "年"
|
||||||
|
month: "月"
|
||||||
|
day: "日"
|
||||||
desktop/views/pages/user/user.timeline.vue:
|
desktop/views/pages/user/user.timeline.vue:
|
||||||
default: "Innlegg"
|
default: "Innlegg"
|
||||||
with-replies: "Innlegg og svar"
|
with-replies: "Innlegg og svar"
|
||||||
@@ -1073,6 +1119,8 @@ mobile/views/components/drive.file-detail.vue:
|
|||||||
hash: "ハッシュ (md5)"
|
hash: "ハッシュ (md5)"
|
||||||
exif: "EXIF"
|
exif: "EXIF"
|
||||||
nsfw: "NSFW"
|
nsfw: "NSFW"
|
||||||
|
mark-as-sensitive: "閲覧注意に設定"
|
||||||
|
unmark-as-sensitive: "閲覧注意を解除"
|
||||||
mobile/views/components/media-image.vue:
|
mobile/views/components/media-image.vue:
|
||||||
sensitive: "NSFW"
|
sensitive: "NSFW"
|
||||||
click-to-show: "クリックして表示"
|
click-to-show: "クリックして表示"
|
||||||
@@ -1213,23 +1261,6 @@ mobile/views/pages/notifications.vue:
|
|||||||
read-all: "すべての通知を既読にしますか?"
|
read-all: "すべての通知を既読にしますか?"
|
||||||
mobile/views/pages/games/reversi.vue:
|
mobile/views/pages/games/reversi.vue:
|
||||||
reversi: "Reversi"
|
reversi: "Reversi"
|
||||||
mobile/views/pages/settings/settings.profile.vue:
|
|
||||||
title: "プロフィール"
|
|
||||||
name: "Navn"
|
|
||||||
account: "Konto"
|
|
||||||
location: "Lokasjon"
|
|
||||||
description: "Om meg"
|
|
||||||
birthday: "Bursdag"
|
|
||||||
avatar: "Avatar"
|
|
||||||
banner: "Banner"
|
|
||||||
is-cat: "このアカウントはCatです"
|
|
||||||
is-locked: "フォローを承認制にする"
|
|
||||||
advanced: "Avansert"
|
|
||||||
privacy: "プライバシー"
|
|
||||||
save: "Lagre profilen"
|
|
||||||
saved: "プロフィールを保存しました"
|
|
||||||
uploading: "アップロード中"
|
|
||||||
upload-failed: "アップロードに失敗しました"
|
|
||||||
mobile/views/pages/search.vue:
|
mobile/views/pages/search.vue:
|
||||||
search: "Søk"
|
search: "Søk"
|
||||||
empty: "「{}」に関する投稿は見つかりませんでした。"
|
empty: "「{}」に関する投稿は見つかりませんでした。"
|
||||||
@@ -1285,6 +1316,7 @@ mobile/views/pages/settings.vue:
|
|||||||
signout: "サインアウト"
|
signout: "サインアウト"
|
||||||
sound: "Lyder"
|
sound: "Lyder"
|
||||||
enable-sounds: "サウンドを有効にする"
|
enable-sounds: "サウンドを有効にする"
|
||||||
|
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
|
||||||
mobile/views/pages/user.vue:
|
mobile/views/pages/user.vue:
|
||||||
follows-you: "フォローされています"
|
follows-you: "フォローされています"
|
||||||
following: "Følger"
|
following: "Følger"
|
||||||
@@ -1294,8 +1326,6 @@ mobile/views/pages/user.vue:
|
|||||||
timeline: "タイムライン"
|
timeline: "タイムライン"
|
||||||
media: "Media"
|
media: "Media"
|
||||||
is-suspended: "このユーザーは凍結されています。"
|
is-suspended: "このユーザーは凍結されています。"
|
||||||
is-remote: "このユーザーはリモートユーザーです。"
|
|
||||||
view-remote: "正確な情報を見る"
|
|
||||||
mobile/views/pages/user/home.vue:
|
mobile/views/pages/user/home.vue:
|
||||||
recent-notes: "Nylige innlegg"
|
recent-notes: "Nylige innlegg"
|
||||||
images: "Bilder"
|
images: "Bilder"
|
||||||
@@ -1341,3 +1371,29 @@ docs:
|
|||||||
description: "Beskrivelse"
|
description: "Beskrivelse"
|
||||||
dev/views/index.vue:
|
dev/views/index.vue:
|
||||||
manage-apps: "アプリの管理"
|
manage-apps: "アプリの管理"
|
||||||
|
dev/views/apps.vue:
|
||||||
|
manage-apps: "アプリを管理"
|
||||||
|
create-app: "アプリ作成"
|
||||||
|
app-missing: "アプリなし"
|
||||||
|
dev/views/new-app.vue:
|
||||||
|
create-app: "アプリケーションの作成"
|
||||||
|
app-name: "アプリケーション名"
|
||||||
|
app-name-desc: "あなたのアプリの名称。"
|
||||||
|
app-name-ex: "ex) Misskey for iOS"
|
||||||
|
app-overview: "アプリの概要"
|
||||||
|
app-desc: "あなたのアプリの簡単な説明や紹介。"
|
||||||
|
app-desc-ex: "ex) Misskey iOSクライアント。"
|
||||||
|
callback-url: "コールバックURL (オプション)"
|
||||||
|
callback-url-desc: "ユーザーが認証フォームで認証した際にリダイレクトするURLを設定できます。"
|
||||||
|
authority: "権限"
|
||||||
|
authority-desc: "ここで要求した機能だけがAPIからアクセスできます。"
|
||||||
|
authority-warning: "アプリ作成後も変更できますが、新たな権限を付与する場合、その時点で関連付けられているユーザーキーはすべて無効になります。"
|
||||||
|
account-read: "アカウントの情報を見る。"
|
||||||
|
account-write: "アカウントの情報を操作する。"
|
||||||
|
note-write: "投稿する。"
|
||||||
|
reaction-write: "リアクションしたりリアクションをキャンセルする。"
|
||||||
|
following-write: "フォローしたりフォロー解除する。"
|
||||||
|
drive-read: "ドライブを見る。"
|
||||||
|
drive-write: "ドライブを操作する。"
|
||||||
|
notification-read: "通知を見る。"
|
||||||
|
notification-write: "通知を操作する。"
|
||||||
|
|||||||
@@ -25,6 +25,14 @@ common:
|
|||||||
application-authorization: "アプリの連携"
|
application-authorization: "アプリの連携"
|
||||||
close: "Zamknij"
|
close: "Zamknij"
|
||||||
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
|
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
|
||||||
|
BSoD:
|
||||||
|
fatal-error: ":( 致命的な問題が発生しました。"
|
||||||
|
update-browser-os: "お使いのブラウザ(またはOS)のバージョンを更新すると解決する可能性があります。"
|
||||||
|
error-code: "エラーコード"
|
||||||
|
browser-version: "ブラウザ バージョン"
|
||||||
|
client-version: "クライアント バージョン"
|
||||||
|
email-support: "問題が解決しない場合は、上記の情報をお書き添えの上 syuilotan@yahoo.co.jp までご連絡ください。"
|
||||||
|
thanks: "Thank you for using Misskey."
|
||||||
got-it: "Rozumiem!"
|
got-it: "Rozumiem!"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "Wskazówki o dostosowywaniu"
|
title: "Wskazówki o dostosowywaniu"
|
||||||
@@ -115,6 +123,12 @@ common:
|
|||||||
reduce-motion: "UIの動きを減らす"
|
reduce-motion: "UIの動きを減らす"
|
||||||
this-setting-is-this-device-only: "このデバイスのみ"
|
this-setting-is-this-device-only: "このデバイスのみ"
|
||||||
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
|
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
|
||||||
|
is-remote-user: "このユーザー情報はコピーです。"
|
||||||
|
is-remote-post: "この投稿情報はコピーです。"
|
||||||
|
view-on-remote: "正確な情報を見る"
|
||||||
|
error:
|
||||||
|
title: '問題が発生しました'
|
||||||
|
retry: 'やり直す'
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "Remis"
|
drawn: "Remis"
|
||||||
my-turn: "Twoja kolej"
|
my-turn: "Twoja kolej"
|
||||||
@@ -170,6 +184,7 @@ common:
|
|||||||
rename: "Zmień nazwę"
|
rename: "Zmień nazwę"
|
||||||
stack-left: "Przypnij do lewej"
|
stack-left: "Przypnij do lewej"
|
||||||
pop-right: "Odepnij w prawo"
|
pop-right: "Odepnij w prawo"
|
||||||
|
dev: "アプリの作成に失敗しました。再度お試しください。"
|
||||||
auth/views/form.vue:
|
auth/views/form.vue:
|
||||||
share-access: "Czy chcesz <b>zezwolić</b> <i>{{ app.name }}</i> na dostęp do Twojego konta?"
|
share-access: "Czy chcesz <b>zezwolić</b> <i>{{ app.name }}</i> na dostęp do Twojego konta?"
|
||||||
permission-ask: "Ta aplikacja wymaga następujących uprawnień:"
|
permission-ask: "Ta aplikacja wymaga następujących uprawnień:"
|
||||||
@@ -335,6 +350,7 @@ common/views/components/note-menu.vue:
|
|||||||
detail: "詳細"
|
detail: "詳細"
|
||||||
copy-link: "リンクをコピー"
|
copy-link: "リンクをコピー"
|
||||||
favorite: "Dodaj do ulubionych"
|
favorite: "Dodaj do ulubionych"
|
||||||
|
unfavorite: "お気に入り解除"
|
||||||
pin: "Przypnij do profilu"
|
pin: "Przypnij do profilu"
|
||||||
unpin: "ピン留め解除"
|
unpin: "ピン留め解除"
|
||||||
delete: "Usuń"
|
delete: "Usuń"
|
||||||
@@ -415,6 +431,25 @@ common/views/components/visibility-chooser.vue:
|
|||||||
common/views/components/trends.vue:
|
common/views/components/trends.vue:
|
||||||
count: "{}人が投稿"
|
count: "{}人が投稿"
|
||||||
empty: "トレンドなし"
|
empty: "トレンドなし"
|
||||||
|
common/views/components/profile-editor.vue:
|
||||||
|
title: "プロフィール"
|
||||||
|
name: "名前"
|
||||||
|
account: "アカウント"
|
||||||
|
location: "場所"
|
||||||
|
description: "自己紹介"
|
||||||
|
birthday: "誕生日"
|
||||||
|
avatar: "アイコン"
|
||||||
|
banner: "バナー"
|
||||||
|
is-cat: "このアカウントはCatです"
|
||||||
|
is-bot: "このアカウントはBotです"
|
||||||
|
is-locked: "フォローを承認制にする"
|
||||||
|
careful-bot: "Botからのフォローだけ承認制にする"
|
||||||
|
advanced: "その他"
|
||||||
|
privacy: "プライバシー"
|
||||||
|
save: "保存"
|
||||||
|
saved: "プロフィールを保存しました"
|
||||||
|
uploading: "アップロード中"
|
||||||
|
upload-failed: "アップロードに失敗しました"
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "Sprawdzanie"
|
fetching: "Sprawdzanie"
|
||||||
no-broadcasts: "Brak transmisji"
|
no-broadcasts: "Brak transmisji"
|
||||||
@@ -639,14 +674,14 @@ desktop/views/components/note-detail.vue:
|
|||||||
location: "Informacje o lokalizacji"
|
location: "Informacje o lokalizacji"
|
||||||
renote: "Udostępnienie"
|
renote: "Udostępnienie"
|
||||||
add-reaction: "Dodaj reakcję"
|
add-reaction: "Dodaj reakcję"
|
||||||
desktop/views/components/notes.note.vue:
|
desktop/views/components/note.vue:
|
||||||
reposted-by: "Udostępniono przez {}"
|
reposted-by: "{}がRenote"
|
||||||
reply: "Odpowiedz"
|
reply: "返信"
|
||||||
renote: "Udostępnij"
|
renote: "Renote"
|
||||||
add-reaction: "Dodaj reakcję"
|
add-reaction: "リアクション"
|
||||||
detail: "Pokaż szczegóły"
|
detail: "詳細"
|
||||||
private: "ten wpis jest prywatny"
|
private: "この投稿は非公開です"
|
||||||
deleted: "ten wpis został usunięty"
|
deleted: "この投稿は削除されました"
|
||||||
desktop/views/components/notes.vue:
|
desktop/views/components/notes.vue:
|
||||||
error: "Ładowanie nie powiodło się."
|
error: "Ładowanie nie powiodło się."
|
||||||
retry: "Spróbuj ponownie"
|
retry: "Spróbuj ponownie"
|
||||||
@@ -725,8 +760,12 @@ desktop/views/components/settings.vue:
|
|||||||
advanced: "Ustawienia zaawansowane"
|
advanced: "Ustawienia zaawansowane"
|
||||||
api-via-stream: "ストリームを経由したAPIリクエスト"
|
api-via-stream: "ストリームを経由したAPIリクエスト"
|
||||||
api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。"
|
api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。"
|
||||||
|
deck-nav: "デッキ内ナビゲーション"
|
||||||
|
deck-nav-desc: "デッキを使用しているとき、ナビゲーションが発生する際にページ遷移を行わずに一時的なカラムで受けるようにします。"
|
||||||
|
deck-default: "デッキをデフォルトのUIにする"
|
||||||
display: "Wygląd i wyświetlanie"
|
display: "Wygląd i wyświetlanie"
|
||||||
customize: "Dostosuj stronę główną"
|
customize: "Dostosuj stronę główną"
|
||||||
|
wallpaper: "壁紙"
|
||||||
choose-wallpaper: "Wybierz tło"
|
choose-wallpaper: "Wybierz tło"
|
||||||
delete-wallpaper: "Usuń tło"
|
delete-wallpaper: "Usuń tło"
|
||||||
dark-mode: "Tryb ciemny"
|
dark-mode: "Tryb ciemny"
|
||||||
@@ -738,17 +777,19 @@ desktop/views/components/settings.vue:
|
|||||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||||
show-clock-on-header: "右上に時計を表示する"
|
show-clock-on-header: "右上に時計を表示する"
|
||||||
show-reply-target: "Pokazuj cel odpowiedzi"
|
show-reply-target: "Pokazuj cel odpowiedzi"
|
||||||
|
timeline: "タイムライン"
|
||||||
show-my-renotes: "Pokazuj moje udostępnienia na osi czasu"
|
show-my-renotes: "Pokazuj moje udostępnienia na osi czasu"
|
||||||
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
||||||
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
||||||
show-maps: "Automatycznie pokazuj mapę"
|
show-maps: "Automatycznie pokazuj mapę"
|
||||||
|
deck-column-align: "デッキのカラムの位置"
|
||||||
|
deck-column-align-center: "中央"
|
||||||
|
deck-column-align-left: "左"
|
||||||
sound: "Dźwięk"
|
sound: "Dźwięk"
|
||||||
enable-sounds: "Włącz dźwięk"
|
enable-sounds: "Włącz dźwięk"
|
||||||
enable-sounds-desc: "Odtwarzaj dźwięk przy wstawianiu wpisów, wysyłaniu lub otrzymywaniu wiadomości. Opcja ta jest zapamiętywana przez przeglądarkę."
|
enable-sounds-desc: "Odtwarzaj dźwięk przy wstawianiu wpisów, wysyłaniu lub otrzymywaniu wiadomości. Opcja ta jest zapamiętywana przez przeglądarkę."
|
||||||
volume: "Głośność"
|
volume: "Głośność"
|
||||||
test: "Test"
|
test: "Test"
|
||||||
mobile: "Wersja mobilna"
|
|
||||||
disable-via-mobile: "Nie oznaczaj wpisów jako „wysłane z telefonu”"
|
|
||||||
language: "Język"
|
language: "Język"
|
||||||
pick-language: "Wybierz język"
|
pick-language: "Wybierz język"
|
||||||
recommended: "Zalecane"
|
recommended: "Zalecane"
|
||||||
@@ -784,6 +825,10 @@ desktop/views/components/settings.vue:
|
|||||||
tools: "Narzędzia"
|
tools: "Narzędzia"
|
||||||
task-manager: "Menedżer zadań"
|
task-manager: "Menedżer zadań"
|
||||||
third-parties: "Autorzy trzeci"
|
third-parties: "Autorzy trzeci"
|
||||||
|
navbar-position: "ナビゲーションバーの位置"
|
||||||
|
navbar-position-top: "上"
|
||||||
|
navbar-position-left: "左"
|
||||||
|
navbar-position-right: "右"
|
||||||
desktop/views/components/settings.2fa.vue:
|
desktop/views/components/settings.2fa.vue:
|
||||||
intro: "Jeżeli skonfigurujesz uwierzytelnianie dwuetapowe, aby zablokować się będziesz potrzebować (oprócz hasła) kodu ze skonfigurowanego urządzenia (np. smartfonu), co zwiększy bezpieczeństwo."
|
intro: "Jeżeli skonfigurujesz uwierzytelnianie dwuetapowe, aby zablokować się będziesz potrzebować (oprócz hasła) kodu ze skonfigurowanego urządzenia (np. smartfonu), co zwiększy bezpieczeństwo."
|
||||||
detail: "Zobacz szczegóły…"
|
detail: "Zobacz szczegóły…"
|
||||||
@@ -823,20 +868,6 @@ desktop/views/components/settings.password.vue:
|
|||||||
enter-new-password-again: "Wprowadź ponownie nowe hasło"
|
enter-new-password-again: "Wprowadź ponownie nowe hasło"
|
||||||
not-match: "Nowe hasła nie pasują do siebie"
|
not-match: "Nowe hasła nie pasują do siebie"
|
||||||
changed: "Pomyślnie zmieniono hasło"
|
changed: "Pomyślnie zmieniono hasło"
|
||||||
desktop/views/components/settings.profile.vue:
|
|
||||||
avatar: "Awatar"
|
|
||||||
choice-avatar: "Wybierz obraz"
|
|
||||||
name: "Nazwa"
|
|
||||||
location: "Lokalizacja"
|
|
||||||
description: "Opis"
|
|
||||||
birthday: "Data urodzenia"
|
|
||||||
save: "Aktualizuj profil"
|
|
||||||
locked-account: "Zabezpiecz swoje konto"
|
|
||||||
is-locked: "フォローを承認制にする"
|
|
||||||
other: "Inne"
|
|
||||||
is-bot: "To konto jest prowadzone przez bota"
|
|
||||||
is-cat: "To konto jest prowadzone przez kota"
|
|
||||||
profile-updated: "Zaktualizowano profil"
|
|
||||||
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"
|
||||||
@@ -908,6 +939,8 @@ desktop/views/pages/admin/admin.vue:
|
|||||||
drive: "ドライブ"
|
drive: "ドライブ"
|
||||||
users: "ユーザー"
|
users: "ユーザー"
|
||||||
update: "更新"
|
update: "更新"
|
||||||
|
announcements: "お知らせ"
|
||||||
|
hashtags: "ハッシュタグ"
|
||||||
desktop/views/pages/admin/admin.dashboard.vue:
|
desktop/views/pages/admin/admin.dashboard.vue:
|
||||||
dashboard: "ダッシュボード"
|
dashboard: "ダッシュボード"
|
||||||
all-users: "全てのユーザー"
|
all-users: "全てのユーザー"
|
||||||
@@ -915,6 +948,9 @@ desktop/views/pages/admin/admin.dashboard.vue:
|
|||||||
all-notes: "全ての投稿"
|
all-notes: "全ての投稿"
|
||||||
original-notes: "このインスタンスの投稿"
|
original-notes: "このインスタンスの投稿"
|
||||||
invite: "招待"
|
invite: "招待"
|
||||||
|
banner-url: "Banner URL"
|
||||||
|
disableRegistration: "Disable new user registration"
|
||||||
|
disableLocalTimeline: "Disable the local timeline"
|
||||||
desktop/views/pages/admin/admin.suspend-user.vue:
|
desktop/views/pages/admin/admin.suspend-user.vue:
|
||||||
suspend-user: "ユーザーの凍結"
|
suspend-user: "ユーザーの凍結"
|
||||||
suspend: "凍結"
|
suspend: "凍結"
|
||||||
@@ -931,14 +967,23 @@ desktop/views/pages/admin/admin.unverify-user.vue:
|
|||||||
unverify-user: "ユーザーの公式アカウント解除"
|
unverify-user: "ユーザーの公式アカウント解除"
|
||||||
unverify: "公式アカウントを解除する"
|
unverify: "公式アカウントを解除する"
|
||||||
unverified: "公式アカウントを解除しました"
|
unverified: "公式アカウントを解除しました"
|
||||||
|
desktop/views/pages/admin/admin.announcements.vue:
|
||||||
|
announcements: "お知らせ"
|
||||||
|
desktop/views/pages/admin/admin.hashtags.vue:
|
||||||
|
hided-tags: "Hidden Tags"
|
||||||
desktop/views/pages/deck/deck.tl-column.vue:
|
desktop/views/pages/deck/deck.tl-column.vue:
|
||||||
is-media-only: "Tylko wpisy z zawartością multimedialną"
|
is-media-only: "Tylko wpisy z zawartością multimedialną"
|
||||||
is-media-view: "Widok multimediów"
|
is-media-view: "Widok multimediów"
|
||||||
edit: "Opcje"
|
edit: "Opcje"
|
||||||
desktop/views/pages/deck/deck.note.vue:
|
desktop/views/pages/deck/deck.user-column.vue:
|
||||||
reposted-by: "Udostępniono przez {}"
|
posts: "投稿"
|
||||||
private: "ten wpis jest prywatny"
|
following: "フォロー"
|
||||||
deleted: "ten wpis został usunięty"
|
followers: "フォロワー"
|
||||||
|
images: "画像"
|
||||||
|
activity: "アクティビティ"
|
||||||
|
timeline: "タイムライン"
|
||||||
|
pinned-notes: "ピン留めされた投稿"
|
||||||
|
push-to-a-list: "リストに追加"
|
||||||
desktop/views/pages/stats/stats.vue:
|
desktop/views/pages/stats/stats.vue:
|
||||||
all-users: "全てのユーザー"
|
all-users: "全てのユーザー"
|
||||||
original-users: "このインスタンスのユーザー"
|
original-users: "このインスタンスのユーザー"
|
||||||
@@ -991,10 +1036,7 @@ desktop/views/pages/user/user.friends.vue:
|
|||||||
no-users: "Brak użytkowników"
|
no-users: "Brak użytkowników"
|
||||||
desktop/views/pages/user/user.vue:
|
desktop/views/pages/user/user.vue:
|
||||||
is-suspended: "To konto zostało zawieszone."
|
is-suspended: "To konto zostało zawieszone."
|
||||||
is-remote: "To jest użytkownik zdalnej instancji, informacje mogą nie być w pełni dokładne."
|
last-used-at: "最終アクセス"
|
||||||
view-remote: "Wyświetl dokładne informacje"
|
|
||||||
desktop/views/pages/user/user.home.vue:
|
|
||||||
last-used-at: "Ostatnio aktywny: "
|
|
||||||
desktop/views/pages/user/user.photos.vue:
|
desktop/views/pages/user/user.photos.vue:
|
||||||
title: "Zdjęcia"
|
title: "Zdjęcia"
|
||||||
loading: "Ładowanie"
|
loading: "Ładowanie"
|
||||||
@@ -1014,6 +1056,10 @@ desktop/views/pages/user/user.header.vue:
|
|||||||
following: "Śledzeni"
|
following: "Śledzeni"
|
||||||
followers: "Śledzący"
|
followers: "Śledzący"
|
||||||
is-bot: "To konto jest botem"
|
is-bot: "To konto jest botem"
|
||||||
|
years-old: "歳"
|
||||||
|
year: "年"
|
||||||
|
month: "月"
|
||||||
|
day: "日"
|
||||||
desktop/views/pages/user/user.timeline.vue:
|
desktop/views/pages/user/user.timeline.vue:
|
||||||
default: "Wpisy"
|
default: "Wpisy"
|
||||||
with-replies: "Wpisy i odpowiedzi"
|
with-replies: "Wpisy i odpowiedzi"
|
||||||
@@ -1073,6 +1119,8 @@ mobile/views/components/drive.file-detail.vue:
|
|||||||
hash: "Hash (md5)"
|
hash: "Hash (md5)"
|
||||||
exif: "EXIF"
|
exif: "EXIF"
|
||||||
nsfw: "閲覧注意"
|
nsfw: "閲覧注意"
|
||||||
|
mark-as-sensitive: "閲覧注意に設定"
|
||||||
|
unmark-as-sensitive: "閲覧注意を解除"
|
||||||
mobile/views/components/media-image.vue:
|
mobile/views/components/media-image.vue:
|
||||||
sensitive: "To jest zawartość NSFW"
|
sensitive: "To jest zawartość NSFW"
|
||||||
click-to-show: "Naciśnij aby wyświetlić"
|
click-to-show: "Naciśnij aby wyświetlić"
|
||||||
@@ -1213,23 +1261,6 @@ mobile/views/pages/notifications.vue:
|
|||||||
read-all: "Czy na pewno chcesz oznaczyć wszystkie powiadomienia jako przeczytane?"
|
read-all: "Czy na pewno chcesz oznaczyć wszystkie powiadomienia jako przeczytane?"
|
||||||
mobile/views/pages/games/reversi.vue:
|
mobile/views/pages/games/reversi.vue:
|
||||||
reversi: "Reversi"
|
reversi: "Reversi"
|
||||||
mobile/views/pages/settings/settings.profile.vue:
|
|
||||||
title: "Profil"
|
|
||||||
name: "Nazwa"
|
|
||||||
account: "Konto"
|
|
||||||
location: "Lokalizacja"
|
|
||||||
description: "Opis"
|
|
||||||
birthday: "Data urodzenia"
|
|
||||||
avatar: "Awatar"
|
|
||||||
banner: "Baner"
|
|
||||||
is-cat: "To konto jest prowadzone przez kota"
|
|
||||||
is-locked: "フォローを承認制にする"
|
|
||||||
advanced: "その他"
|
|
||||||
privacy: "プライバシー"
|
|
||||||
save: "Aktualizuj profil"
|
|
||||||
saved: "Pomyślnie zaktualizowano profil"
|
|
||||||
uploading: "Wysyłanie"
|
|
||||||
upload-failed: "Wysyłanie nie powiodło się"
|
|
||||||
mobile/views/pages/search.vue:
|
mobile/views/pages/search.vue:
|
||||||
search: "Szukaj"
|
search: "Szukaj"
|
||||||
empty: "Nie znaleziono wpisów zawierających '{}'"
|
empty: "Nie znaleziono wpisów zawierających '{}'"
|
||||||
@@ -1285,6 +1316,7 @@ mobile/views/pages/settings.vue:
|
|||||||
signout: "Wyloguj"
|
signout: "Wyloguj"
|
||||||
sound: "サウンド"
|
sound: "サウンド"
|
||||||
enable-sounds: "サウンドを有効にする"
|
enable-sounds: "サウンドを有効にする"
|
||||||
|
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
|
||||||
mobile/views/pages/user.vue:
|
mobile/views/pages/user.vue:
|
||||||
follows-you: "Śledzi Cię"
|
follows-you: "Śledzi Cię"
|
||||||
following: "Śledzeni"
|
following: "Śledzeni"
|
||||||
@@ -1294,8 +1326,6 @@ mobile/views/pages/user.vue:
|
|||||||
timeline: "Oś czasu"
|
timeline: "Oś czasu"
|
||||||
media: "Multimedia"
|
media: "Multimedia"
|
||||||
is-suspended: "To konto zostało zablokowane"
|
is-suspended: "To konto zostało zablokowane"
|
||||||
is-remote: "To jest użytkownik zdalnej instancji, informacje mogą nie być w pełni dokładne."
|
|
||||||
view-remote: "Wyświetl dokładne informacje"
|
|
||||||
mobile/views/pages/user/home.vue:
|
mobile/views/pages/user/home.vue:
|
||||||
recent-notes: "Ostatnie wpisy"
|
recent-notes: "Ostatnie wpisy"
|
||||||
images: "Zdjęcia"
|
images: "Zdjęcia"
|
||||||
@@ -1341,3 +1371,29 @@ docs:
|
|||||||
description: "Opis"
|
description: "Opis"
|
||||||
dev/views/index.vue:
|
dev/views/index.vue:
|
||||||
manage-apps: "Zarządzaj aplikacjami"
|
manage-apps: "Zarządzaj aplikacjami"
|
||||||
|
dev/views/apps.vue:
|
||||||
|
manage-apps: "アプリを管理"
|
||||||
|
create-app: "アプリ作成"
|
||||||
|
app-missing: "アプリなし"
|
||||||
|
dev/views/new-app.vue:
|
||||||
|
create-app: "アプリケーションの作成"
|
||||||
|
app-name: "アプリケーション名"
|
||||||
|
app-name-desc: "あなたのアプリの名称。"
|
||||||
|
app-name-ex: "ex) Misskey for iOS"
|
||||||
|
app-overview: "アプリの概要"
|
||||||
|
app-desc: "あなたのアプリの簡単な説明や紹介。"
|
||||||
|
app-desc-ex: "ex) Misskey iOSクライアント。"
|
||||||
|
callback-url: "コールバックURL (オプション)"
|
||||||
|
callback-url-desc: "ユーザーが認証フォームで認証した際にリダイレクトするURLを設定できます。"
|
||||||
|
authority: "権限"
|
||||||
|
authority-desc: "ここで要求した機能だけがAPIからアクセスできます。"
|
||||||
|
authority-warning: "アプリ作成後も変更できますが、新たな権限を付与する場合、その時点で関連付けられているユーザーキーはすべて無効になります。"
|
||||||
|
account-read: "アカウントの情報を見る。"
|
||||||
|
account-write: "アカウントの情報を操作する。"
|
||||||
|
note-write: "投稿する。"
|
||||||
|
reaction-write: "リアクションしたりリアクションをキャンセルする。"
|
||||||
|
following-write: "フォローしたりフォロー解除する。"
|
||||||
|
drive-read: "ドライブを見る。"
|
||||||
|
drive-write: "ドライブを操作する。"
|
||||||
|
notification-read: "通知を見る。"
|
||||||
|
notification-write: "通知を操作する。"
|
||||||
|
|||||||
@@ -25,6 +25,14 @@ common:
|
|||||||
application-authorization: "Aplicativos autorizados"
|
application-authorization: "Aplicativos autorizados"
|
||||||
close: "Fechar"
|
close: "Fechar"
|
||||||
do-not-copy-paste: "Por favor, não digite ou copie o código aqui. A conta pode ser comprometida."
|
do-not-copy-paste: "Por favor, não digite ou copie o código aqui. A conta pode ser comprometida."
|
||||||
|
BSoD:
|
||||||
|
fatal-error: ":( 致命的な問題が発生しました。"
|
||||||
|
update-browser-os: "お使いのブラウザ(またはOS)のバージョンを更新すると解決する可能性があります。"
|
||||||
|
error-code: "エラーコード"
|
||||||
|
browser-version: "ブラウザ バージョン"
|
||||||
|
client-version: "クライアント バージョン"
|
||||||
|
email-support: "問題が解決しない場合は、上記の情報をお書き添えの上 syuilotan@yahoo.co.jp までご連絡ください。"
|
||||||
|
thanks: "Thank you for using Misskey."
|
||||||
got-it: "Entendi!"
|
got-it: "Entendi!"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "Dicas de personalização"
|
title: "Dicas de personalização"
|
||||||
@@ -115,6 +123,12 @@ common:
|
|||||||
reduce-motion: "UIの動きを減らす"
|
reduce-motion: "UIの動きを減らす"
|
||||||
this-setting-is-this-device-only: "このデバイスのみ"
|
this-setting-is-this-device-only: "このデバイスのみ"
|
||||||
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
|
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
|
||||||
|
is-remote-user: "このユーザー情報はコピーです。"
|
||||||
|
is-remote-post: "この投稿情報はコピーです。"
|
||||||
|
view-on-remote: "正確な情報を見る"
|
||||||
|
error:
|
||||||
|
title: '問題が発生しました'
|
||||||
|
retry: 'やり直す'
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "Empatado"
|
drawn: "Empatado"
|
||||||
my-turn: "Seu turno"
|
my-turn: "Seu turno"
|
||||||
@@ -170,6 +184,7 @@ common:
|
|||||||
rename: "Renomear"
|
rename: "Renomear"
|
||||||
stack-left: "左に重ねる"
|
stack-left: "左に重ねる"
|
||||||
pop-right: "Acoplar à direita"
|
pop-right: "Acoplar à direita"
|
||||||
|
dev: "アプリの作成に失敗しました。再度お試しください。"
|
||||||
auth/views/form.vue:
|
auth/views/form.vue:
|
||||||
share-access: "Você <b>permite</b> que <i>{{ app.name }}</i> acesse sua conta?"
|
share-access: "Você <b>permite</b> que <i>{{ app.name }}</i> acesse sua conta?"
|
||||||
permission-ask: "Este aplicativo precisa das seguintes permissões:"
|
permission-ask: "Este aplicativo precisa das seguintes permissões:"
|
||||||
@@ -335,6 +350,7 @@ common/views/components/note-menu.vue:
|
|||||||
detail: "詳細"
|
detail: "詳細"
|
||||||
copy-link: "リンクをコピー"
|
copy-link: "リンクをコピー"
|
||||||
favorite: "お気に入り"
|
favorite: "お気に入り"
|
||||||
|
unfavorite: "お気に入り解除"
|
||||||
pin: "ピン留め"
|
pin: "ピン留め"
|
||||||
unpin: "ピン留め解除"
|
unpin: "ピン留め解除"
|
||||||
delete: "削除"
|
delete: "削除"
|
||||||
@@ -415,6 +431,25 @@ common/views/components/visibility-chooser.vue:
|
|||||||
common/views/components/trends.vue:
|
common/views/components/trends.vue:
|
||||||
count: "{}人が投稿"
|
count: "{}人が投稿"
|
||||||
empty: "トレンドなし"
|
empty: "トレンドなし"
|
||||||
|
common/views/components/profile-editor.vue:
|
||||||
|
title: "プロフィール"
|
||||||
|
name: "名前"
|
||||||
|
account: "アカウント"
|
||||||
|
location: "場所"
|
||||||
|
description: "自己紹介"
|
||||||
|
birthday: "誕生日"
|
||||||
|
avatar: "アイコン"
|
||||||
|
banner: "バナー"
|
||||||
|
is-cat: "このアカウントはCatです"
|
||||||
|
is-bot: "このアカウントはBotです"
|
||||||
|
is-locked: "フォローを承認制にする"
|
||||||
|
careful-bot: "Botからのフォローだけ承認制にする"
|
||||||
|
advanced: "その他"
|
||||||
|
privacy: "プライバシー"
|
||||||
|
save: "保存"
|
||||||
|
saved: "プロフィールを保存しました"
|
||||||
|
uploading: "アップロード中"
|
||||||
|
upload-failed: "アップロードに失敗しました"
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "確認中"
|
fetching: "確認中"
|
||||||
no-broadcasts: "お知らせはありません"
|
no-broadcasts: "お知らせはありません"
|
||||||
@@ -639,7 +674,7 @@ desktop/views/components/note-detail.vue:
|
|||||||
location: "位置情報"
|
location: "位置情報"
|
||||||
renote: "Renote"
|
renote: "Renote"
|
||||||
add-reaction: "リアクション"
|
add-reaction: "リアクション"
|
||||||
desktop/views/components/notes.note.vue:
|
desktop/views/components/note.vue:
|
||||||
reposted-by: "{}がRenote"
|
reposted-by: "{}がRenote"
|
||||||
reply: "返信"
|
reply: "返信"
|
||||||
renote: "Renote"
|
renote: "Renote"
|
||||||
@@ -725,8 +760,12 @@ desktop/views/components/settings.vue:
|
|||||||
advanced: "詳細設定"
|
advanced: "詳細設定"
|
||||||
api-via-stream: "ストリームを経由したAPIリクエスト"
|
api-via-stream: "ストリームを経由したAPIリクエスト"
|
||||||
api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。"
|
api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。"
|
||||||
|
deck-nav: "デッキ内ナビゲーション"
|
||||||
|
deck-nav-desc: "デッキを使用しているとき、ナビゲーションが発生する際にページ遷移を行わずに一時的なカラムで受けるようにします。"
|
||||||
|
deck-default: "デッキをデフォルトのUIにする"
|
||||||
display: "デザインと表示"
|
display: "デザインと表示"
|
||||||
customize: "ホームをカスタマイズ"
|
customize: "ホームをカスタマイズ"
|
||||||
|
wallpaper: "壁紙"
|
||||||
choose-wallpaper: "壁紙を選択"
|
choose-wallpaper: "壁紙を選択"
|
||||||
delete-wallpaper: "壁紙を削除"
|
delete-wallpaper: "壁紙を削除"
|
||||||
dark-mode: "ダークモード"
|
dark-mode: "ダークモード"
|
||||||
@@ -738,17 +777,19 @@ desktop/views/components/settings.vue:
|
|||||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||||
show-clock-on-header: "右上に時計を表示する"
|
show-clock-on-header: "右上に時計を表示する"
|
||||||
show-reply-target: "リプライ先を表示する"
|
show-reply-target: "リプライ先を表示する"
|
||||||
|
timeline: "タイムライン"
|
||||||
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
||||||
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
||||||
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
||||||
show-maps: "マップの自動展開"
|
show-maps: "マップの自動展開"
|
||||||
|
deck-column-align: "デッキのカラムの位置"
|
||||||
|
deck-column-align-center: "中央"
|
||||||
|
deck-column-align-left: "左"
|
||||||
sound: "サウンド"
|
sound: "サウンド"
|
||||||
enable-sounds: "サウンドを有効にする"
|
enable-sounds: "サウンドを有効にする"
|
||||||
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
||||||
volume: "ボリューム"
|
volume: "ボリューム"
|
||||||
test: "テスト"
|
test: "テスト"
|
||||||
mobile: "モバイル"
|
|
||||||
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
|
||||||
language: "言語"
|
language: "言語"
|
||||||
pick-language: "言語を選択"
|
pick-language: "言語を選択"
|
||||||
recommended: "推奨"
|
recommended: "推奨"
|
||||||
@@ -784,6 +825,10 @@ desktop/views/components/settings.vue:
|
|||||||
tools: "ツール"
|
tools: "ツール"
|
||||||
task-manager: "タスクマネージャ"
|
task-manager: "タスクマネージャ"
|
||||||
third-parties: "サードパーティ"
|
third-parties: "サードパーティ"
|
||||||
|
navbar-position: "ナビゲーションバーの位置"
|
||||||
|
navbar-position-top: "上"
|
||||||
|
navbar-position-left: "左"
|
||||||
|
navbar-position-right: "右"
|
||||||
desktop/views/components/settings.2fa.vue:
|
desktop/views/components/settings.2fa.vue:
|
||||||
intro: "二段階認証を設定すると、サインイン時にパスワードだけでなく、予め登録しておいた物理的なデバイス(例えばあなたのスマートフォンなど)も必要になり、よりセキュリティが向上します。"
|
intro: "二段階認証を設定すると、サインイン時にパスワードだけでなく、予め登録しておいた物理的なデバイス(例えばあなたのスマートフォンなど)も必要になり、よりセキュリティが向上します。"
|
||||||
detail: "詳細..."
|
detail: "詳細..."
|
||||||
@@ -823,20 +868,6 @@ desktop/views/components/settings.password.vue:
|
|||||||
enter-new-password-again: "もう一度新しいパスワードを入力してください"
|
enter-new-password-again: "もう一度新しいパスワードを入力してください"
|
||||||
not-match: "新しいパスワードが一致しません"
|
not-match: "新しいパスワードが一致しません"
|
||||||
changed: "パスワードを変更しました"
|
changed: "パスワードを変更しました"
|
||||||
desktop/views/components/settings.profile.vue:
|
|
||||||
avatar: "アイコン"
|
|
||||||
choice-avatar: "画像を選択"
|
|
||||||
name: "名前"
|
|
||||||
location: "場所"
|
|
||||||
description: "自己紹介"
|
|
||||||
birthday: "誕生日"
|
|
||||||
save: "保存"
|
|
||||||
locked-account: "アカウントの保護"
|
|
||||||
is-locked: "フォローを承認制にする"
|
|
||||||
other: "その他"
|
|
||||||
is-bot: "このアカウントはBotです"
|
|
||||||
is-cat: "このアカウントはCatです"
|
|
||||||
profile-updated: "プロフィールを更新しました"
|
|
||||||
desktop/views/components/sub-note-content.vue:
|
desktop/views/components/sub-note-content.vue:
|
||||||
private: "この投稿は非公開です"
|
private: "この投稿は非公開です"
|
||||||
deleted: "この投稿は削除されました"
|
deleted: "この投稿は削除されました"
|
||||||
@@ -908,6 +939,8 @@ desktop/views/pages/admin/admin.vue:
|
|||||||
drive: "ドライブ"
|
drive: "ドライブ"
|
||||||
users: "Usuários"
|
users: "Usuários"
|
||||||
update: "Actualizações"
|
update: "Actualizações"
|
||||||
|
announcements: "お知らせ"
|
||||||
|
hashtags: "ハッシュタグ"
|
||||||
desktop/views/pages/admin/admin.dashboard.vue:
|
desktop/views/pages/admin/admin.dashboard.vue:
|
||||||
dashboard: "ダッシュボード"
|
dashboard: "ダッシュボード"
|
||||||
all-users: "Todos os usuários"
|
all-users: "Todos os usuários"
|
||||||
@@ -915,6 +948,9 @@ desktop/views/pages/admin/admin.dashboard.vue:
|
|||||||
all-notes: "全ての投稿"
|
all-notes: "全ての投稿"
|
||||||
original-notes: "このインスタンスの投稿"
|
original-notes: "このインスタンスの投稿"
|
||||||
invite: "招待"
|
invite: "招待"
|
||||||
|
banner-url: "Banner URL"
|
||||||
|
disableRegistration: "Disable new user registration"
|
||||||
|
disableLocalTimeline: "Disable the local timeline"
|
||||||
desktop/views/pages/admin/admin.suspend-user.vue:
|
desktop/views/pages/admin/admin.suspend-user.vue:
|
||||||
suspend-user: "ユーザーの凍結"
|
suspend-user: "ユーザーの凍結"
|
||||||
suspend: "凍結"
|
suspend: "凍結"
|
||||||
@@ -931,14 +967,23 @@ desktop/views/pages/admin/admin.unverify-user.vue:
|
|||||||
unverify-user: "ユーザーの公式アカウント解除"
|
unverify-user: "ユーザーの公式アカウント解除"
|
||||||
unverify: "公式アカウントを解除する"
|
unverify: "公式アカウントを解除する"
|
||||||
unverified: "公式アカウントを解除しました"
|
unverified: "公式アカウントを解除しました"
|
||||||
|
desktop/views/pages/admin/admin.announcements.vue:
|
||||||
|
announcements: "お知らせ"
|
||||||
|
desktop/views/pages/admin/admin.hashtags.vue:
|
||||||
|
hided-tags: "Hidden Tags"
|
||||||
desktop/views/pages/deck/deck.tl-column.vue:
|
desktop/views/pages/deck/deck.tl-column.vue:
|
||||||
is-media-only: "メディア投稿のみ"
|
is-media-only: "メディア投稿のみ"
|
||||||
is-media-view: "メディアビュー"
|
is-media-view: "メディアビュー"
|
||||||
edit: "オプション"
|
edit: "オプション"
|
||||||
desktop/views/pages/deck/deck.note.vue:
|
desktop/views/pages/deck/deck.user-column.vue:
|
||||||
reposted-by: "{}がRenote"
|
posts: "投稿"
|
||||||
private: "この投稿は非公開です"
|
following: "フォロー"
|
||||||
deleted: "この投稿は削除されました"
|
followers: "フォロワー"
|
||||||
|
images: "画像"
|
||||||
|
activity: "アクティビティ"
|
||||||
|
timeline: "タイムライン"
|
||||||
|
pinned-notes: "ピン留めされた投稿"
|
||||||
|
push-to-a-list: "リストに追加"
|
||||||
desktop/views/pages/stats/stats.vue:
|
desktop/views/pages/stats/stats.vue:
|
||||||
all-users: "全てのユーザー"
|
all-users: "全てのユーザー"
|
||||||
original-users: "このインスタンスのユーザー"
|
original-users: "このインスタンスのユーザー"
|
||||||
@@ -991,9 +1036,6 @@ desktop/views/pages/user/user.friends.vue:
|
|||||||
no-users: "よく話すユーザーはいません"
|
no-users: "よく話すユーザーはいません"
|
||||||
desktop/views/pages/user/user.vue:
|
desktop/views/pages/user/user.vue:
|
||||||
is-suspended: "このユーザーは凍結されています。"
|
is-suspended: "このユーザーは凍結されています。"
|
||||||
is-remote: "このユーザーはリモートユーザーです。"
|
|
||||||
view-remote: "正確な情報を見る"
|
|
||||||
desktop/views/pages/user/user.home.vue:
|
|
||||||
last-used-at: "最終アクセス"
|
last-used-at: "最終アクセス"
|
||||||
desktop/views/pages/user/user.photos.vue:
|
desktop/views/pages/user/user.photos.vue:
|
||||||
title: "フォト"
|
title: "フォト"
|
||||||
@@ -1014,6 +1056,10 @@ desktop/views/pages/user/user.header.vue:
|
|||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
followers: "フォロワー"
|
followers: "フォロワー"
|
||||||
is-bot: "このアカウントはBotです"
|
is-bot: "このアカウントはBotです"
|
||||||
|
years-old: "歳"
|
||||||
|
year: "年"
|
||||||
|
month: "月"
|
||||||
|
day: "日"
|
||||||
desktop/views/pages/user/user.timeline.vue:
|
desktop/views/pages/user/user.timeline.vue:
|
||||||
default: "投稿"
|
default: "投稿"
|
||||||
with-replies: "投稿と返信"
|
with-replies: "投稿と返信"
|
||||||
@@ -1073,6 +1119,8 @@ mobile/views/components/drive.file-detail.vue:
|
|||||||
hash: "ハッシュ (md5)"
|
hash: "ハッシュ (md5)"
|
||||||
exif: "EXIF"
|
exif: "EXIF"
|
||||||
nsfw: "閲覧注意"
|
nsfw: "閲覧注意"
|
||||||
|
mark-as-sensitive: "閲覧注意に設定"
|
||||||
|
unmark-as-sensitive: "閲覧注意を解除"
|
||||||
mobile/views/components/media-image.vue:
|
mobile/views/components/media-image.vue:
|
||||||
sensitive: "閲覧注意"
|
sensitive: "閲覧注意"
|
||||||
click-to-show: "クリックして表示"
|
click-to-show: "クリックして表示"
|
||||||
@@ -1213,23 +1261,6 @@ mobile/views/pages/notifications.vue:
|
|||||||
read-all: "すべての通知を既読にしますか?"
|
read-all: "すべての通知を既読にしますか?"
|
||||||
mobile/views/pages/games/reversi.vue:
|
mobile/views/pages/games/reversi.vue:
|
||||||
reversi: "リバーシ"
|
reversi: "リバーシ"
|
||||||
mobile/views/pages/settings/settings.profile.vue:
|
|
||||||
title: "プロフィール"
|
|
||||||
name: "Nome"
|
|
||||||
account: "Conta"
|
|
||||||
location: "Lugar"
|
|
||||||
description: "Biografia"
|
|
||||||
birthday: "Data de nascimento"
|
|
||||||
avatar: "Avatar"
|
|
||||||
banner: "Capa"
|
|
||||||
is-cat: "Esta conta é gato"
|
|
||||||
is-locked: "Pedido para seguir precisa ser aprovado"
|
|
||||||
advanced: "Avançado"
|
|
||||||
privacy: "Provacidade"
|
|
||||||
save: "Atualizar perfil"
|
|
||||||
saved: "Perfil atualizado"
|
|
||||||
uploading: "Enviando"
|
|
||||||
upload-failed: "Falha ao enviar"
|
|
||||||
mobile/views/pages/search.vue:
|
mobile/views/pages/search.vue:
|
||||||
search: "Pesquisar"
|
search: "Pesquisar"
|
||||||
empty: "「{}」に関する投稿は見つかりませんでした。"
|
empty: "「{}」に関する投稿は見つかりませんでした。"
|
||||||
@@ -1285,6 +1316,7 @@ mobile/views/pages/settings.vue:
|
|||||||
signout: "Sair"
|
signout: "Sair"
|
||||||
sound: "Sons"
|
sound: "Sons"
|
||||||
enable-sounds: "Ativar sons"
|
enable-sounds: "Ativar sons"
|
||||||
|
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
|
||||||
mobile/views/pages/user.vue:
|
mobile/views/pages/user.vue:
|
||||||
follows-you: "Te segue"
|
follows-you: "Te segue"
|
||||||
following: "Seguindo"
|
following: "Seguindo"
|
||||||
@@ -1294,8 +1326,6 @@ mobile/views/pages/user.vue:
|
|||||||
timeline: "Linha do tempo"
|
timeline: "Linha do tempo"
|
||||||
media: "Mídia"
|
media: "Mídia"
|
||||||
is-suspended: "Esta conta foi suspensa"
|
is-suspended: "Esta conta foi suspensa"
|
||||||
is-remote: "Este é uma usuário remoto. O perfil que vê aqui pode não estar completo."
|
|
||||||
view-remote: "Ver o perfil completo."
|
|
||||||
mobile/views/pages/user/home.vue:
|
mobile/views/pages/user/home.vue:
|
||||||
recent-notes: "Notas recentes"
|
recent-notes: "Notas recentes"
|
||||||
images: "Imagens"
|
images: "Imagens"
|
||||||
@@ -1304,7 +1334,7 @@ mobile/views/pages/user/home.vue:
|
|||||||
domains: "Domínios"
|
domains: "Domínios"
|
||||||
frequently-replied-users: "Perguntas frequentes"
|
frequently-replied-users: "Perguntas frequentes"
|
||||||
followers-you-know: "Seguidores que você conhece"
|
followers-you-know: "Seguidores que você conhece"
|
||||||
last-used-at: "Ativo pela última vez:"
|
last-used-at: "Ativo pela última vez"
|
||||||
mobile/views/pages/user/home.followers-you-know.vue:
|
mobile/views/pages/user/home.followers-you-know.vue:
|
||||||
loading: "Carregando"
|
loading: "Carregando"
|
||||||
no-users: "知り合いのユーザーはいません"
|
no-users: "知り合いのユーザーはいません"
|
||||||
@@ -1341,3 +1371,29 @@ docs:
|
|||||||
description: "Descrição"
|
description: "Descrição"
|
||||||
dev/views/index.vue:
|
dev/views/index.vue:
|
||||||
manage-apps: "Gerenciar aplicativos"
|
manage-apps: "Gerenciar aplicativos"
|
||||||
|
dev/views/apps.vue:
|
||||||
|
manage-apps: "アプリを管理"
|
||||||
|
create-app: "アプリ作成"
|
||||||
|
app-missing: "アプリなし"
|
||||||
|
dev/views/new-app.vue:
|
||||||
|
create-app: "アプリケーションの作成"
|
||||||
|
app-name: "アプリケーション名"
|
||||||
|
app-name-desc: "あなたのアプリの名称。"
|
||||||
|
app-name-ex: "ex) Misskey for iOS"
|
||||||
|
app-overview: "アプリの概要"
|
||||||
|
app-desc: "あなたのアプリの簡単な説明や紹介。"
|
||||||
|
app-desc-ex: "ex) Misskey iOSクライアント。"
|
||||||
|
callback-url: "コールバックURL (オプション)"
|
||||||
|
callback-url-desc: "ユーザーが認証フォームで認証した際にリダイレクトするURLを設定できます。"
|
||||||
|
authority: "権限"
|
||||||
|
authority-desc: "ここで要求した機能だけがAPIからアクセスできます。"
|
||||||
|
authority-warning: "アプリ作成後も変更できますが、新たな権限を付与する場合、その時点で関連付けられているユーザーキーはすべて無効になります。"
|
||||||
|
account-read: "アカウントの情報を見る。"
|
||||||
|
account-write: "アカウントの情報を操作する。"
|
||||||
|
note-write: "投稿する。"
|
||||||
|
reaction-write: "リアクションしたりリアクションをキャンセルする。"
|
||||||
|
following-write: "フォローしたりフォロー解除する。"
|
||||||
|
drive-read: "ドライブを見る。"
|
||||||
|
drive-write: "ドライブを操作する。"
|
||||||
|
notification-read: "通知を見る。"
|
||||||
|
notification-write: "通知を操作する。"
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ meta:
|
|||||||
lang: "Русский язык"
|
lang: "Русский язык"
|
||||||
divider: ""
|
divider: ""
|
||||||
common:
|
common:
|
||||||
misskey: "A ⭐ of fediverse"
|
misskey: "Мы — ⭐ fediverse"
|
||||||
about-title: "A ⭐ of fediverse."
|
about-title: "Мы — ⭐ fediverse"
|
||||||
about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
|
about: "Спасибо, что нашли Misskey. Misskey — это <b>децентрализованная платформа для микроблоггинга</b> родом с планеты Земля. Поскольку она существует внутри Fediverse (вселенной различных социальных платформ), она связана с другими платформами. Отдохните от шума большого города — и познакомьтесь с новым интернетом."
|
||||||
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にも伝わります。ちょうどある惑星から他の惑星に電波を発信している様子をイメージしてください。"
|
||||||
@@ -25,6 +25,14 @@ common:
|
|||||||
application-authorization: "アプリの連携"
|
application-authorization: "アプリの連携"
|
||||||
close: "閉じる"
|
close: "閉じる"
|
||||||
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
|
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
|
||||||
|
BSoD:
|
||||||
|
fatal-error: ":( 致命的な問題が発生しました。"
|
||||||
|
update-browser-os: "お使いのブラウザ(またはOS)のバージョンを更新すると解決する可能性があります。"
|
||||||
|
error-code: "エラーコード"
|
||||||
|
browser-version: "ブラウザ バージョン"
|
||||||
|
client-version: "クライアント バージョン"
|
||||||
|
email-support: "問題が解決しない場合は、上記の情報をお書き添えの上 syuilotan@yahoo.co.jp までご連絡ください。"
|
||||||
|
thanks: "Thank you for using Misskey."
|
||||||
got-it: "わかった"
|
got-it: "わかった"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "カスタマイズのヒント"
|
title: "カスタマイズのヒント"
|
||||||
@@ -115,6 +123,12 @@ common:
|
|||||||
reduce-motion: "UIの動きを減らす"
|
reduce-motion: "UIの動きを減らす"
|
||||||
this-setting-is-this-device-only: "このデバイスのみ"
|
this-setting-is-this-device-only: "このデバイスのみ"
|
||||||
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
|
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
|
||||||
|
is-remote-user: "このユーザー情報はコピーです。"
|
||||||
|
is-remote-post: "この投稿情報はコピーです。"
|
||||||
|
view-on-remote: "正確な情報を見る"
|
||||||
|
error:
|
||||||
|
title: '問題が発生しました'
|
||||||
|
retry: 'やり直す'
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "引き分け"
|
drawn: "引き分け"
|
||||||
my-turn: "あなたのターンです"
|
my-turn: "あなたのターンです"
|
||||||
@@ -170,6 +184,7 @@ common:
|
|||||||
rename: "名前を変更"
|
rename: "名前を変更"
|
||||||
stack-left: "左に重ねる"
|
stack-left: "左に重ねる"
|
||||||
pop-right: "右に出す"
|
pop-right: "右に出す"
|
||||||
|
dev: "アプリの作成に失敗しました。再度お試しください。"
|
||||||
auth/views/form.vue:
|
auth/views/form.vue:
|
||||||
share-access: "<i>{{ app.name }}</i>があなたのアカウントにアクセスすることを<b>許可</b>しますか?"
|
share-access: "<i>{{ app.name }}</i>があなたのアカウントにアクセスすることを<b>許可</b>しますか?"
|
||||||
permission-ask: "このアプリは次の権限を要求しています:"
|
permission-ask: "このアプリは次の権限を要求しています:"
|
||||||
@@ -335,6 +350,7 @@ common/views/components/note-menu.vue:
|
|||||||
detail: "詳細"
|
detail: "詳細"
|
||||||
copy-link: "リンクをコピー"
|
copy-link: "リンクをコピー"
|
||||||
favorite: "お気に入り"
|
favorite: "お気に入り"
|
||||||
|
unfavorite: "お気に入り解除"
|
||||||
pin: "ピン留め"
|
pin: "ピン留め"
|
||||||
unpin: "ピン留め解除"
|
unpin: "ピン留め解除"
|
||||||
delete: "削除"
|
delete: "削除"
|
||||||
@@ -415,6 +431,25 @@ common/views/components/visibility-chooser.vue:
|
|||||||
common/views/components/trends.vue:
|
common/views/components/trends.vue:
|
||||||
count: "{}人が投稿"
|
count: "{}人が投稿"
|
||||||
empty: "トレンドなし"
|
empty: "トレンドなし"
|
||||||
|
common/views/components/profile-editor.vue:
|
||||||
|
title: "プロフィール"
|
||||||
|
name: "名前"
|
||||||
|
account: "アカウント"
|
||||||
|
location: "場所"
|
||||||
|
description: "自己紹介"
|
||||||
|
birthday: "誕生日"
|
||||||
|
avatar: "アイコン"
|
||||||
|
banner: "バナー"
|
||||||
|
is-cat: "このアカウントはCatです"
|
||||||
|
is-bot: "このアカウントはBotです"
|
||||||
|
is-locked: "フォローを承認制にする"
|
||||||
|
careful-bot: "Botからのフォローだけ承認制にする"
|
||||||
|
advanced: "その他"
|
||||||
|
privacy: "プライバシー"
|
||||||
|
save: "保存"
|
||||||
|
saved: "プロフィールを保存しました"
|
||||||
|
uploading: "アップロード中"
|
||||||
|
upload-failed: "アップロードに失敗しました"
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "確認中"
|
fetching: "確認中"
|
||||||
no-broadcasts: "お知らせはありません"
|
no-broadcasts: "お知らせはありません"
|
||||||
@@ -639,7 +674,7 @@ desktop/views/components/note-detail.vue:
|
|||||||
location: "位置情報"
|
location: "位置情報"
|
||||||
renote: "Renote"
|
renote: "Renote"
|
||||||
add-reaction: "リアクション"
|
add-reaction: "リアクション"
|
||||||
desktop/views/components/notes.note.vue:
|
desktop/views/components/note.vue:
|
||||||
reposted-by: "{}がRenote"
|
reposted-by: "{}がRenote"
|
||||||
reply: "返信"
|
reply: "返信"
|
||||||
renote: "Renote"
|
renote: "Renote"
|
||||||
@@ -725,8 +760,12 @@ desktop/views/components/settings.vue:
|
|||||||
advanced: "詳細設定"
|
advanced: "詳細設定"
|
||||||
api-via-stream: "ストリームを経由したAPIリクエスト"
|
api-via-stream: "ストリームを経由したAPIリクエスト"
|
||||||
api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。"
|
api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。"
|
||||||
|
deck-nav: "デッキ内ナビゲーション"
|
||||||
|
deck-nav-desc: "デッキを使用しているとき、ナビゲーションが発生する際にページ遷移を行わずに一時的なカラムで受けるようにします。"
|
||||||
|
deck-default: "デッキをデフォルトのUIにする"
|
||||||
display: "デザインと表示"
|
display: "デザインと表示"
|
||||||
customize: "ホームをカスタマイズ"
|
customize: "ホームをカスタマイズ"
|
||||||
|
wallpaper: "壁紙"
|
||||||
choose-wallpaper: "壁紙を選択"
|
choose-wallpaper: "壁紙を選択"
|
||||||
delete-wallpaper: "壁紙を削除"
|
delete-wallpaper: "壁紙を削除"
|
||||||
dark-mode: "ダークモード"
|
dark-mode: "ダークモード"
|
||||||
@@ -738,17 +777,19 @@ desktop/views/components/settings.vue:
|
|||||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||||
show-clock-on-header: "右上に時計を表示する"
|
show-clock-on-header: "右上に時計を表示する"
|
||||||
show-reply-target: "リプライ先を表示する"
|
show-reply-target: "リプライ先を表示する"
|
||||||
|
timeline: "タイムライン"
|
||||||
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
||||||
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
||||||
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
||||||
show-maps: "マップの自動展開"
|
show-maps: "マップの自動展開"
|
||||||
|
deck-column-align: "デッキのカラムの位置"
|
||||||
|
deck-column-align-center: "中央"
|
||||||
|
deck-column-align-left: "左"
|
||||||
sound: "サウンド"
|
sound: "サウンド"
|
||||||
enable-sounds: "サウンドを有効にする"
|
enable-sounds: "サウンドを有効にする"
|
||||||
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
||||||
volume: "ボリューム"
|
volume: "ボリューム"
|
||||||
test: "テスト"
|
test: "テスト"
|
||||||
mobile: "モバイル"
|
|
||||||
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
|
||||||
language: "言語"
|
language: "言語"
|
||||||
pick-language: "言語を選択"
|
pick-language: "言語を選択"
|
||||||
recommended: "推奨"
|
recommended: "推奨"
|
||||||
@@ -784,6 +825,10 @@ desktop/views/components/settings.vue:
|
|||||||
tools: "ツール"
|
tools: "ツール"
|
||||||
task-manager: "タスクマネージャ"
|
task-manager: "タスクマネージャ"
|
||||||
third-parties: "サードパーティ"
|
third-parties: "サードパーティ"
|
||||||
|
navbar-position: "ナビゲーションバーの位置"
|
||||||
|
navbar-position-top: "上"
|
||||||
|
navbar-position-left: "左"
|
||||||
|
navbar-position-right: "右"
|
||||||
desktop/views/components/settings.2fa.vue:
|
desktop/views/components/settings.2fa.vue:
|
||||||
intro: "二段階認証を設定すると、サインイン時にパスワードだけでなく、予め登録しておいた物理的なデバイス(例えばあなたのスマートフォンなど)も必要になり、よりセキュリティが向上します。"
|
intro: "二段階認証を設定すると、サインイン時にパスワードだけでなく、予め登録しておいた物理的なデバイス(例えばあなたのスマートフォンなど)も必要になり、よりセキュリティが向上します。"
|
||||||
detail: "詳細..."
|
detail: "詳細..."
|
||||||
@@ -823,20 +868,6 @@ desktop/views/components/settings.password.vue:
|
|||||||
enter-new-password-again: "もう一度新しいパスワードを入力してください"
|
enter-new-password-again: "もう一度新しいパスワードを入力してください"
|
||||||
not-match: "新しいパスワードが一致しません"
|
not-match: "新しいパスワードが一致しません"
|
||||||
changed: "パスワードを変更しました"
|
changed: "パスワードを変更しました"
|
||||||
desktop/views/components/settings.profile.vue:
|
|
||||||
avatar: "アイコン"
|
|
||||||
choice-avatar: "画像を選択"
|
|
||||||
name: "名前"
|
|
||||||
location: "場所"
|
|
||||||
description: "自己紹介"
|
|
||||||
birthday: "誕生日"
|
|
||||||
save: "保存"
|
|
||||||
locked-account: "アカウントの保護"
|
|
||||||
is-locked: "フォローを承認制にする"
|
|
||||||
other: "その他"
|
|
||||||
is-bot: "このアカウントはBotです"
|
|
||||||
is-cat: "このアカウントはCatです"
|
|
||||||
profile-updated: "プロフィールを更新しました"
|
|
||||||
desktop/views/components/sub-note-content.vue:
|
desktop/views/components/sub-note-content.vue:
|
||||||
private: "この投稿は非公開です"
|
private: "この投稿は非公開です"
|
||||||
deleted: "この投稿は削除されました"
|
deleted: "この投稿は削除されました"
|
||||||
@@ -908,6 +939,8 @@ desktop/views/pages/admin/admin.vue:
|
|||||||
drive: "ドライブ"
|
drive: "ドライブ"
|
||||||
users: "ユーザー"
|
users: "ユーザー"
|
||||||
update: "更新"
|
update: "更新"
|
||||||
|
announcements: "お知らせ"
|
||||||
|
hashtags: "ハッシュタグ"
|
||||||
desktop/views/pages/admin/admin.dashboard.vue:
|
desktop/views/pages/admin/admin.dashboard.vue:
|
||||||
dashboard: "ダッシュボード"
|
dashboard: "ダッシュボード"
|
||||||
all-users: "全てのユーザー"
|
all-users: "全てのユーザー"
|
||||||
@@ -915,6 +948,9 @@ desktop/views/pages/admin/admin.dashboard.vue:
|
|||||||
all-notes: "全ての投稿"
|
all-notes: "全ての投稿"
|
||||||
original-notes: "このインスタンスの投稿"
|
original-notes: "このインスタンスの投稿"
|
||||||
invite: "招待"
|
invite: "招待"
|
||||||
|
banner-url: "Banner URL"
|
||||||
|
disableRegistration: "Disable new user registration"
|
||||||
|
disableLocalTimeline: "Disable the local timeline"
|
||||||
desktop/views/pages/admin/admin.suspend-user.vue:
|
desktop/views/pages/admin/admin.suspend-user.vue:
|
||||||
suspend-user: "ユーザーの凍結"
|
suspend-user: "ユーザーの凍結"
|
||||||
suspend: "凍結"
|
suspend: "凍結"
|
||||||
@@ -931,14 +967,23 @@ desktop/views/pages/admin/admin.unverify-user.vue:
|
|||||||
unverify-user: "ユーザーの公式アカウント解除"
|
unverify-user: "ユーザーの公式アカウント解除"
|
||||||
unverify: "公式アカウントを解除する"
|
unverify: "公式アカウントを解除する"
|
||||||
unverified: "公式アカウントを解除しました"
|
unverified: "公式アカウントを解除しました"
|
||||||
|
desktop/views/pages/admin/admin.announcements.vue:
|
||||||
|
announcements: "お知らせ"
|
||||||
|
desktop/views/pages/admin/admin.hashtags.vue:
|
||||||
|
hided-tags: "Hidden Tags"
|
||||||
desktop/views/pages/deck/deck.tl-column.vue:
|
desktop/views/pages/deck/deck.tl-column.vue:
|
||||||
is-media-only: "メディア投稿のみ"
|
is-media-only: "メディア投稿のみ"
|
||||||
is-media-view: "メディアビュー"
|
is-media-view: "メディアビュー"
|
||||||
edit: "オプション"
|
edit: "オプション"
|
||||||
desktop/views/pages/deck/deck.note.vue:
|
desktop/views/pages/deck/deck.user-column.vue:
|
||||||
reposted-by: "{}がRenote"
|
posts: "投稿"
|
||||||
private: "この投稿は非公開です"
|
following: "フォロー"
|
||||||
deleted: "この投稿は削除されました"
|
followers: "フォロワー"
|
||||||
|
images: "画像"
|
||||||
|
activity: "アクティビティ"
|
||||||
|
timeline: "タイムライン"
|
||||||
|
pinned-notes: "ピン留めされた投稿"
|
||||||
|
push-to-a-list: "リストに追加"
|
||||||
desktop/views/pages/stats/stats.vue:
|
desktop/views/pages/stats/stats.vue:
|
||||||
all-users: "全てのユーザー"
|
all-users: "全てのユーザー"
|
||||||
original-users: "このインスタンスのユーザー"
|
original-users: "このインスタンスのユーザー"
|
||||||
@@ -991,9 +1036,6 @@ desktop/views/pages/user/user.friends.vue:
|
|||||||
no-users: "よく話すユーザーはいません"
|
no-users: "よく話すユーザーはいません"
|
||||||
desktop/views/pages/user/user.vue:
|
desktop/views/pages/user/user.vue:
|
||||||
is-suspended: "このユーザーは凍結されています。"
|
is-suspended: "このユーザーは凍結されています。"
|
||||||
is-remote: "このユーザーはリモートユーザーです。"
|
|
||||||
view-remote: "正確な情報を見る"
|
|
||||||
desktop/views/pages/user/user.home.vue:
|
|
||||||
last-used-at: "最終アクセス"
|
last-used-at: "最終アクセス"
|
||||||
desktop/views/pages/user/user.photos.vue:
|
desktop/views/pages/user/user.photos.vue:
|
||||||
title: "フォト"
|
title: "フォト"
|
||||||
@@ -1014,6 +1056,10 @@ desktop/views/pages/user/user.header.vue:
|
|||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
followers: "フォロワー"
|
followers: "フォロワー"
|
||||||
is-bot: "このアカウントはBotです"
|
is-bot: "このアカウントはBotです"
|
||||||
|
years-old: "歳"
|
||||||
|
year: "年"
|
||||||
|
month: "月"
|
||||||
|
day: "日"
|
||||||
desktop/views/pages/user/user.timeline.vue:
|
desktop/views/pages/user/user.timeline.vue:
|
||||||
default: "投稿"
|
default: "投稿"
|
||||||
with-replies: "投稿と返信"
|
with-replies: "投稿と返信"
|
||||||
@@ -1073,6 +1119,8 @@ mobile/views/components/drive.file-detail.vue:
|
|||||||
hash: "ハッシュ (md5)"
|
hash: "ハッシュ (md5)"
|
||||||
exif: "EXIF"
|
exif: "EXIF"
|
||||||
nsfw: "閲覧注意"
|
nsfw: "閲覧注意"
|
||||||
|
mark-as-sensitive: "閲覧注意に設定"
|
||||||
|
unmark-as-sensitive: "閲覧注意を解除"
|
||||||
mobile/views/components/media-image.vue:
|
mobile/views/components/media-image.vue:
|
||||||
sensitive: "閲覧注意"
|
sensitive: "閲覧注意"
|
||||||
click-to-show: "クリックして表示"
|
click-to-show: "クリックして表示"
|
||||||
@@ -1213,23 +1261,6 @@ mobile/views/pages/notifications.vue:
|
|||||||
read-all: "すべての通知を既読にしますか?"
|
read-all: "すべての通知を既読にしますか?"
|
||||||
mobile/views/pages/games/reversi.vue:
|
mobile/views/pages/games/reversi.vue:
|
||||||
reversi: "リバーシ"
|
reversi: "リバーシ"
|
||||||
mobile/views/pages/settings/settings.profile.vue:
|
|
||||||
title: "プロフィール"
|
|
||||||
name: "名前"
|
|
||||||
account: "アカウント"
|
|
||||||
location: "場所"
|
|
||||||
description: "自己紹介"
|
|
||||||
birthday: "誕生日"
|
|
||||||
avatar: "アイコン"
|
|
||||||
banner: "バナー"
|
|
||||||
is-cat: "このアカウントはCatです"
|
|
||||||
is-locked: "フォローを承認制にする"
|
|
||||||
advanced: "その他"
|
|
||||||
privacy: "プライバシー"
|
|
||||||
save: "保存"
|
|
||||||
saved: "プロフィールを保存しました"
|
|
||||||
uploading: "アップロード中"
|
|
||||||
upload-failed: "アップロードに失敗しました"
|
|
||||||
mobile/views/pages/search.vue:
|
mobile/views/pages/search.vue:
|
||||||
search: "検索"
|
search: "検索"
|
||||||
empty: "「{}」に関する投稿は見つかりませんでした。"
|
empty: "「{}」に関する投稿は見つかりませんでした。"
|
||||||
@@ -1285,6 +1316,7 @@ mobile/views/pages/settings.vue:
|
|||||||
signout: "サインアウト"
|
signout: "サインアウト"
|
||||||
sound: "サウンド"
|
sound: "サウンド"
|
||||||
enable-sounds: "サウンドを有効にする"
|
enable-sounds: "サウンドを有効にする"
|
||||||
|
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
|
||||||
mobile/views/pages/user.vue:
|
mobile/views/pages/user.vue:
|
||||||
follows-you: "フォローされています"
|
follows-you: "フォローされています"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
@@ -1294,8 +1326,6 @@ mobile/views/pages/user.vue:
|
|||||||
timeline: "タイムライン"
|
timeline: "タイムライン"
|
||||||
media: "メディア"
|
media: "メディア"
|
||||||
is-suspended: "このユーザーは凍結されています。"
|
is-suspended: "このユーザーは凍結されています。"
|
||||||
is-remote: "このユーザーはリモートユーザーです。"
|
|
||||||
view-remote: "正確な情報を見る"
|
|
||||||
mobile/views/pages/user/home.vue:
|
mobile/views/pages/user/home.vue:
|
||||||
recent-notes: "最近の投稿"
|
recent-notes: "最近の投稿"
|
||||||
images: "画像"
|
images: "画像"
|
||||||
@@ -1341,3 +1371,29 @@ docs:
|
|||||||
description: "説明"
|
description: "説明"
|
||||||
dev/views/index.vue:
|
dev/views/index.vue:
|
||||||
manage-apps: "アプリの管理"
|
manage-apps: "アプリの管理"
|
||||||
|
dev/views/apps.vue:
|
||||||
|
manage-apps: "アプリを管理"
|
||||||
|
create-app: "アプリ作成"
|
||||||
|
app-missing: "アプリなし"
|
||||||
|
dev/views/new-app.vue:
|
||||||
|
create-app: "アプリケーションの作成"
|
||||||
|
app-name: "アプリケーション名"
|
||||||
|
app-name-desc: "あなたのアプリの名称。"
|
||||||
|
app-name-ex: "ex) Misskey for iOS"
|
||||||
|
app-overview: "アプリの概要"
|
||||||
|
app-desc: "あなたのアプリの簡単な説明や紹介。"
|
||||||
|
app-desc-ex: "ex) Misskey iOSクライアント。"
|
||||||
|
callback-url: "コールバックURL (オプション)"
|
||||||
|
callback-url-desc: "ユーザーが認証フォームで認証した際にリダイレクトするURLを設定できます。"
|
||||||
|
authority: "権限"
|
||||||
|
authority-desc: "ここで要求した機能だけがAPIからアクセスできます。"
|
||||||
|
authority-warning: "アプリ作成後も変更できますが、新たな権限を付与する場合、その時点で関連付けられているユーザーキーはすべて無効になります。"
|
||||||
|
account-read: "アカウントの情報を見る。"
|
||||||
|
account-write: "アカウントの情報を操作する。"
|
||||||
|
note-write: "投稿する。"
|
||||||
|
reaction-write: "リアクションしたりリアクションをキャンセルする。"
|
||||||
|
following-write: "フォローしたりフォロー解除する。"
|
||||||
|
drive-read: "ドライブを見る。"
|
||||||
|
drive-write: "ドライブを操作する。"
|
||||||
|
notification-read: "通知を見る。"
|
||||||
|
notification-write: "通知を操作する。"
|
||||||
|
|||||||
@@ -25,6 +25,14 @@ common:
|
|||||||
application-authorization: "アプリの連携"
|
application-authorization: "アプリの連携"
|
||||||
close: "閉じる"
|
close: "閉じる"
|
||||||
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
|
do-not-copy-paste: "ここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。"
|
||||||
|
BSoD:
|
||||||
|
fatal-error: ":( 致命的な問題が発生しました。"
|
||||||
|
update-browser-os: "お使いのブラウザ(またはOS)のバージョンを更新すると解決する可能性があります。"
|
||||||
|
error-code: "エラーコード"
|
||||||
|
browser-version: "ブラウザ バージョン"
|
||||||
|
client-version: "クライアント バージョン"
|
||||||
|
email-support: "問題が解決しない場合は、上記の情報をお書き添えの上 syuilotan@yahoo.co.jp までご連絡ください。"
|
||||||
|
thanks: "Thank you for using Misskey."
|
||||||
got-it: "わかった"
|
got-it: "わかった"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "カスタマイズのヒント"
|
title: "カスタマイズのヒント"
|
||||||
@@ -115,6 +123,12 @@ common:
|
|||||||
reduce-motion: "UIの動きを減らす"
|
reduce-motion: "UIの動きを減らす"
|
||||||
this-setting-is-this-device-only: "このデバイスのみ"
|
this-setting-is-this-device-only: "このデバイスのみ"
|
||||||
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
|
do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
|
||||||
|
is-remote-user: "このユーザー情報はコピーです。"
|
||||||
|
is-remote-post: "この投稿情報はコピーです。"
|
||||||
|
view-on-remote: "正確な情報を見る"
|
||||||
|
error:
|
||||||
|
title: '問題が発生しました'
|
||||||
|
retry: 'やり直す'
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "引き分け"
|
drawn: "引き分け"
|
||||||
my-turn: "あなたのターンです"
|
my-turn: "あなたのターンです"
|
||||||
@@ -170,6 +184,7 @@ common:
|
|||||||
rename: "名前を変更"
|
rename: "名前を変更"
|
||||||
stack-left: "左に重ねる"
|
stack-left: "左に重ねる"
|
||||||
pop-right: "右に出す"
|
pop-right: "右に出す"
|
||||||
|
dev: "アプリの作成に失敗しました。再度お試しください。"
|
||||||
auth/views/form.vue:
|
auth/views/form.vue:
|
||||||
share-access: "<i>{{ app.name }}</i>があなたのアカウントにアクセスすることを<b>許可</b>しますか?"
|
share-access: "<i>{{ app.name }}</i>があなたのアカウントにアクセスすることを<b>許可</b>しますか?"
|
||||||
permission-ask: "このアプリは次の権限を要求しています:"
|
permission-ask: "このアプリは次の権限を要求しています:"
|
||||||
@@ -335,6 +350,7 @@ common/views/components/note-menu.vue:
|
|||||||
detail: "詳細"
|
detail: "詳細"
|
||||||
copy-link: "リンクをコピー"
|
copy-link: "リンクをコピー"
|
||||||
favorite: "お気に入り"
|
favorite: "お気に入り"
|
||||||
|
unfavorite: "お気に入り解除"
|
||||||
pin: "ピン留め"
|
pin: "ピン留め"
|
||||||
unpin: "ピン留め解除"
|
unpin: "ピン留め解除"
|
||||||
delete: "削除"
|
delete: "削除"
|
||||||
@@ -415,6 +431,25 @@ common/views/components/visibility-chooser.vue:
|
|||||||
common/views/components/trends.vue:
|
common/views/components/trends.vue:
|
||||||
count: "{}人が投稿"
|
count: "{}人が投稿"
|
||||||
empty: "トレンドなし"
|
empty: "トレンドなし"
|
||||||
|
common/views/components/profile-editor.vue:
|
||||||
|
title: "プロフィール"
|
||||||
|
name: "名前"
|
||||||
|
account: "アカウント"
|
||||||
|
location: "場所"
|
||||||
|
description: "自己紹介"
|
||||||
|
birthday: "誕生日"
|
||||||
|
avatar: "アイコン"
|
||||||
|
banner: "バナー"
|
||||||
|
is-cat: "このアカウントはCatです"
|
||||||
|
is-bot: "このアカウントはBotです"
|
||||||
|
is-locked: "フォローを承認制にする"
|
||||||
|
careful-bot: "Botからのフォローだけ承認制にする"
|
||||||
|
advanced: "その他"
|
||||||
|
privacy: "プライバシー"
|
||||||
|
save: "保存"
|
||||||
|
saved: "プロフィールを保存しました"
|
||||||
|
uploading: "アップロード中"
|
||||||
|
upload-failed: "アップロードに失敗しました"
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "確認中"
|
fetching: "確認中"
|
||||||
no-broadcasts: "お知らせはありません"
|
no-broadcasts: "お知らせはありません"
|
||||||
@@ -639,7 +674,7 @@ desktop/views/components/note-detail.vue:
|
|||||||
location: "位置情報"
|
location: "位置情報"
|
||||||
renote: "Renote"
|
renote: "Renote"
|
||||||
add-reaction: "リアクション"
|
add-reaction: "リアクション"
|
||||||
desktop/views/components/notes.note.vue:
|
desktop/views/components/note.vue:
|
||||||
reposted-by: "{}がRenote"
|
reposted-by: "{}がRenote"
|
||||||
reply: "返信"
|
reply: "返信"
|
||||||
renote: "Renote"
|
renote: "Renote"
|
||||||
@@ -725,8 +760,12 @@ desktop/views/components/settings.vue:
|
|||||||
advanced: "詳細設定"
|
advanced: "詳細設定"
|
||||||
api-via-stream: "ストリームを経由したAPIリクエスト"
|
api-via-stream: "ストリームを経由したAPIリクエスト"
|
||||||
api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。"
|
api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。"
|
||||||
|
deck-nav: "デッキ内ナビゲーション"
|
||||||
|
deck-nav-desc: "デッキを使用しているとき、ナビゲーションが発生する際にページ遷移を行わずに一時的なカラムで受けるようにします。"
|
||||||
|
deck-default: "デッキをデフォルトのUIにする"
|
||||||
display: "デザインと表示"
|
display: "デザインと表示"
|
||||||
customize: "ホームをカスタマイズ"
|
customize: "ホームをカスタマイズ"
|
||||||
|
wallpaper: "壁紙"
|
||||||
choose-wallpaper: "壁紙を選択"
|
choose-wallpaper: "壁紙を選択"
|
||||||
delete-wallpaper: "壁紙を削除"
|
delete-wallpaper: "壁紙を削除"
|
||||||
dark-mode: "ダークモード"
|
dark-mode: "ダークモード"
|
||||||
@@ -738,17 +777,19 @@ desktop/views/components/settings.vue:
|
|||||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||||
show-clock-on-header: "右上に時計を表示する"
|
show-clock-on-header: "右上に時計を表示する"
|
||||||
show-reply-target: "リプライ先を表示する"
|
show-reply-target: "リプライ先を表示する"
|
||||||
|
timeline: "タイムライン"
|
||||||
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
|
||||||
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
|
||||||
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
|
||||||
show-maps: "マップの自動展開"
|
show-maps: "マップの自動展開"
|
||||||
|
deck-column-align: "デッキのカラムの位置"
|
||||||
|
deck-column-align-center: "中央"
|
||||||
|
deck-column-align-left: "左"
|
||||||
sound: "サウンド"
|
sound: "サウンド"
|
||||||
enable-sounds: "サウンドを有効にする"
|
enable-sounds: "サウンドを有効にする"
|
||||||
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
||||||
volume: "ボリューム"
|
volume: "ボリューム"
|
||||||
test: "テスト"
|
test: "テスト"
|
||||||
mobile: "モバイル"
|
|
||||||
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
|
||||||
language: "言語"
|
language: "言語"
|
||||||
pick-language: "言語を選択"
|
pick-language: "言語を選択"
|
||||||
recommended: "推奨"
|
recommended: "推奨"
|
||||||
@@ -784,6 +825,10 @@ desktop/views/components/settings.vue:
|
|||||||
tools: "ツール"
|
tools: "ツール"
|
||||||
task-manager: "タスクマネージャ"
|
task-manager: "タスクマネージャ"
|
||||||
third-parties: "サードパーティ"
|
third-parties: "サードパーティ"
|
||||||
|
navbar-position: "ナビゲーションバーの位置"
|
||||||
|
navbar-position-top: "上"
|
||||||
|
navbar-position-left: "左"
|
||||||
|
navbar-position-right: "右"
|
||||||
desktop/views/components/settings.2fa.vue:
|
desktop/views/components/settings.2fa.vue:
|
||||||
intro: "二段階認証を設定すると、サインイン時にパスワードだけでなく、予め登録しておいた物理的なデバイス(例えばあなたのスマートフォンなど)も必要になり、よりセキュリティが向上します。"
|
intro: "二段階認証を設定すると、サインイン時にパスワードだけでなく、予め登録しておいた物理的なデバイス(例えばあなたのスマートフォンなど)も必要になり、よりセキュリティが向上します。"
|
||||||
detail: "詳細..."
|
detail: "詳細..."
|
||||||
@@ -823,20 +868,6 @@ desktop/views/components/settings.password.vue:
|
|||||||
enter-new-password-again: "もう一度新しいパスワードを入力してください"
|
enter-new-password-again: "もう一度新しいパスワードを入力してください"
|
||||||
not-match: "新しいパスワードが一致しません"
|
not-match: "新しいパスワードが一致しません"
|
||||||
changed: "パスワードを変更しました"
|
changed: "パスワードを変更しました"
|
||||||
desktop/views/components/settings.profile.vue:
|
|
||||||
avatar: "アイコン"
|
|
||||||
choice-avatar: "画像を選択"
|
|
||||||
name: "名前"
|
|
||||||
location: "場所"
|
|
||||||
description: "自己紹介"
|
|
||||||
birthday: "誕生日"
|
|
||||||
save: "保存"
|
|
||||||
locked-account: "アカウントの保護"
|
|
||||||
is-locked: "フォローを承認制にする"
|
|
||||||
other: "その他"
|
|
||||||
is-bot: "このアカウントはBotです"
|
|
||||||
is-cat: "このアカウントはCatです"
|
|
||||||
profile-updated: "プロフィールを更新しました"
|
|
||||||
desktop/views/components/sub-note-content.vue:
|
desktop/views/components/sub-note-content.vue:
|
||||||
private: "この投稿は非公開です"
|
private: "この投稿は非公開です"
|
||||||
deleted: "この投稿は削除されました"
|
deleted: "この投稿は削除されました"
|
||||||
@@ -908,6 +939,8 @@ desktop/views/pages/admin/admin.vue:
|
|||||||
drive: "ドライブ"
|
drive: "ドライブ"
|
||||||
users: "ユーザー"
|
users: "ユーザー"
|
||||||
update: "更新"
|
update: "更新"
|
||||||
|
announcements: "お知らせ"
|
||||||
|
hashtags: "ハッシュタグ"
|
||||||
desktop/views/pages/admin/admin.dashboard.vue:
|
desktop/views/pages/admin/admin.dashboard.vue:
|
||||||
dashboard: "ダッシュボード"
|
dashboard: "ダッシュボード"
|
||||||
all-users: "全てのユーザー"
|
all-users: "全てのユーザー"
|
||||||
@@ -915,6 +948,9 @@ desktop/views/pages/admin/admin.dashboard.vue:
|
|||||||
all-notes: "全ての投稿"
|
all-notes: "全ての投稿"
|
||||||
original-notes: "このインスタンスの投稿"
|
original-notes: "このインスタンスの投稿"
|
||||||
invite: "招待"
|
invite: "招待"
|
||||||
|
banner-url: "Banner URL"
|
||||||
|
disableRegistration: "Disable new user registration"
|
||||||
|
disableLocalTimeline: "Disable the local timeline"
|
||||||
desktop/views/pages/admin/admin.suspend-user.vue:
|
desktop/views/pages/admin/admin.suspend-user.vue:
|
||||||
suspend-user: "ユーザーの凍結"
|
suspend-user: "ユーザーの凍結"
|
||||||
suspend: "凍結"
|
suspend: "凍結"
|
||||||
@@ -931,14 +967,23 @@ desktop/views/pages/admin/admin.unverify-user.vue:
|
|||||||
unverify-user: "ユーザーの公式アカウント解除"
|
unverify-user: "ユーザーの公式アカウント解除"
|
||||||
unverify: "公式アカウントを解除する"
|
unverify: "公式アカウントを解除する"
|
||||||
unverified: "公式アカウントを解除しました"
|
unverified: "公式アカウントを解除しました"
|
||||||
|
desktop/views/pages/admin/admin.announcements.vue:
|
||||||
|
announcements: "お知らせ"
|
||||||
|
desktop/views/pages/admin/admin.hashtags.vue:
|
||||||
|
hided-tags: "Hidden Tags"
|
||||||
desktop/views/pages/deck/deck.tl-column.vue:
|
desktop/views/pages/deck/deck.tl-column.vue:
|
||||||
is-media-only: "メディア投稿のみ"
|
is-media-only: "メディア投稿のみ"
|
||||||
is-media-view: "メディアビュー"
|
is-media-view: "メディアビュー"
|
||||||
edit: "オプション"
|
edit: "オプション"
|
||||||
desktop/views/pages/deck/deck.note.vue:
|
desktop/views/pages/deck/deck.user-column.vue:
|
||||||
reposted-by: "{}がRenote"
|
posts: "投稿"
|
||||||
private: "この投稿は非公開です"
|
following: "フォロー"
|
||||||
deleted: "この投稿は削除されました"
|
followers: "フォロワー"
|
||||||
|
images: "画像"
|
||||||
|
activity: "アクティビティ"
|
||||||
|
timeline: "タイムライン"
|
||||||
|
pinned-notes: "ピン留めされた投稿"
|
||||||
|
push-to-a-list: "リストに追加"
|
||||||
desktop/views/pages/stats/stats.vue:
|
desktop/views/pages/stats/stats.vue:
|
||||||
all-users: "全てのユーザー"
|
all-users: "全てのユーザー"
|
||||||
original-users: "このインスタンスのユーザー"
|
original-users: "このインスタンスのユーザー"
|
||||||
@@ -991,9 +1036,6 @@ desktop/views/pages/user/user.friends.vue:
|
|||||||
no-users: "よく話すユーザーはいません"
|
no-users: "よく話すユーザーはいません"
|
||||||
desktop/views/pages/user/user.vue:
|
desktop/views/pages/user/user.vue:
|
||||||
is-suspended: "このユーザーは凍結されています。"
|
is-suspended: "このユーザーは凍結されています。"
|
||||||
is-remote: "このユーザーはリモートユーザーです。"
|
|
||||||
view-remote: "正確な情報を見る"
|
|
||||||
desktop/views/pages/user/user.home.vue:
|
|
||||||
last-used-at: "最終アクセス"
|
last-used-at: "最終アクセス"
|
||||||
desktop/views/pages/user/user.photos.vue:
|
desktop/views/pages/user/user.photos.vue:
|
||||||
title: "フォト"
|
title: "フォト"
|
||||||
@@ -1014,6 +1056,10 @@ desktop/views/pages/user/user.header.vue:
|
|||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
followers: "フォロワー"
|
followers: "フォロワー"
|
||||||
is-bot: "このアカウントはBotです"
|
is-bot: "このアカウントはBotです"
|
||||||
|
years-old: "歳"
|
||||||
|
year: "年"
|
||||||
|
month: "月"
|
||||||
|
day: "日"
|
||||||
desktop/views/pages/user/user.timeline.vue:
|
desktop/views/pages/user/user.timeline.vue:
|
||||||
default: "投稿"
|
default: "投稿"
|
||||||
with-replies: "投稿と返信"
|
with-replies: "投稿と返信"
|
||||||
@@ -1073,6 +1119,8 @@ mobile/views/components/drive.file-detail.vue:
|
|||||||
hash: "ハッシュ (md5)"
|
hash: "ハッシュ (md5)"
|
||||||
exif: "EXIF"
|
exif: "EXIF"
|
||||||
nsfw: "閲覧注意"
|
nsfw: "閲覧注意"
|
||||||
|
mark-as-sensitive: "閲覧注意に設定"
|
||||||
|
unmark-as-sensitive: "閲覧注意を解除"
|
||||||
mobile/views/components/media-image.vue:
|
mobile/views/components/media-image.vue:
|
||||||
sensitive: "閲覧注意"
|
sensitive: "閲覧注意"
|
||||||
click-to-show: "クリックして表示"
|
click-to-show: "クリックして表示"
|
||||||
@@ -1213,23 +1261,6 @@ mobile/views/pages/notifications.vue:
|
|||||||
read-all: "すべての通知を既読にしますか?"
|
read-all: "すべての通知を既読にしますか?"
|
||||||
mobile/views/pages/games/reversi.vue:
|
mobile/views/pages/games/reversi.vue:
|
||||||
reversi: "リバーシ"
|
reversi: "リバーシ"
|
||||||
mobile/views/pages/settings/settings.profile.vue:
|
|
||||||
title: "プロフィール"
|
|
||||||
name: "名前"
|
|
||||||
account: "アカウント"
|
|
||||||
location: "場所"
|
|
||||||
description: "自己紹介"
|
|
||||||
birthday: "誕生日"
|
|
||||||
avatar: "アイコン"
|
|
||||||
banner: "バナー"
|
|
||||||
is-cat: "このアカウントはCatです"
|
|
||||||
is-locked: "フォローを承認制にする"
|
|
||||||
advanced: "その他"
|
|
||||||
privacy: "プライバシー"
|
|
||||||
save: "保存"
|
|
||||||
saved: "プロフィールを保存しました"
|
|
||||||
uploading: "アップロード中"
|
|
||||||
upload-failed: "アップロードに失敗しました"
|
|
||||||
mobile/views/pages/search.vue:
|
mobile/views/pages/search.vue:
|
||||||
search: "検索"
|
search: "検索"
|
||||||
empty: "「{}」に関する投稿は見つかりませんでした。"
|
empty: "「{}」に関する投稿は見つかりませんでした。"
|
||||||
@@ -1285,6 +1316,7 @@ mobile/views/pages/settings.vue:
|
|||||||
signout: "サインアウト"
|
signout: "サインアウト"
|
||||||
sound: "サウンド"
|
sound: "サウンド"
|
||||||
enable-sounds: "サウンドを有効にする"
|
enable-sounds: "サウンドを有効にする"
|
||||||
|
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
|
||||||
mobile/views/pages/user.vue:
|
mobile/views/pages/user.vue:
|
||||||
follows-you: "フォローされています"
|
follows-you: "フォローされています"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
@@ -1294,8 +1326,6 @@ mobile/views/pages/user.vue:
|
|||||||
timeline: "タイムライン"
|
timeline: "タイムライン"
|
||||||
media: "メディア"
|
media: "メディア"
|
||||||
is-suspended: "このユーザーは凍結されています。"
|
is-suspended: "このユーザーは凍結されています。"
|
||||||
is-remote: "このユーザーはリモートユーザーです。"
|
|
||||||
view-remote: "正確な情報を見る"
|
|
||||||
mobile/views/pages/user/home.vue:
|
mobile/views/pages/user/home.vue:
|
||||||
recent-notes: "最近の投稿"
|
recent-notes: "最近の投稿"
|
||||||
images: "画像"
|
images: "画像"
|
||||||
@@ -1341,3 +1371,29 @@ docs:
|
|||||||
description: "説明"
|
description: "説明"
|
||||||
dev/views/index.vue:
|
dev/views/index.vue:
|
||||||
manage-apps: "アプリの管理"
|
manage-apps: "アプリの管理"
|
||||||
|
dev/views/apps.vue:
|
||||||
|
manage-apps: "アプリを管理"
|
||||||
|
create-app: "アプリ作成"
|
||||||
|
app-missing: "アプリなし"
|
||||||
|
dev/views/new-app.vue:
|
||||||
|
create-app: "アプリケーションの作成"
|
||||||
|
app-name: "アプリケーション名"
|
||||||
|
app-name-desc: "あなたのアプリの名称。"
|
||||||
|
app-name-ex: "ex) Misskey for iOS"
|
||||||
|
app-overview: "アプリの概要"
|
||||||
|
app-desc: "あなたのアプリの簡単な説明や紹介。"
|
||||||
|
app-desc-ex: "ex) Misskey iOSクライアント。"
|
||||||
|
callback-url: "コールバックURL (オプション)"
|
||||||
|
callback-url-desc: "ユーザーが認証フォームで認証した際にリダイレクトするURLを設定できます。"
|
||||||
|
authority: "権限"
|
||||||
|
authority-desc: "ここで要求した機能だけがAPIからアクセスできます。"
|
||||||
|
authority-warning: "アプリ作成後も変更できますが、新たな権限を付与する場合、その時点で関連付けられているユーザーキーはすべて無効になります。"
|
||||||
|
account-read: "アカウントの情報を見る。"
|
||||||
|
account-write: "アカウントの情報を操作する。"
|
||||||
|
note-write: "投稿する。"
|
||||||
|
reaction-write: "リアクションしたりリアクションをキャンセルする。"
|
||||||
|
following-write: "フォローしたりフォロー解除する。"
|
||||||
|
drive-read: "ドライブを見る。"
|
||||||
|
drive-write: "ドライブを操作する。"
|
||||||
|
notification-read: "通知を見る。"
|
||||||
|
notification-write: "通知を操作する。"
|
||||||
|
|||||||
46
package.json
46
package.json
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "misskey",
|
"name": "misskey",
|
||||||
"author": "syuilo <i@syuilo.com>",
|
"author": "syuilo <i@syuilo.com>",
|
||||||
"version": "10.7.0",
|
"version": "10.31.0",
|
||||||
"clientVersion": "1.0.10417",
|
"clientVersion": "1.0.11051",
|
||||||
"codename": "nighthike",
|
"codename": "nighthike",
|
||||||
"main": "./built/index.js",
|
"main": "./built/index.js",
|
||||||
"private": true,
|
"private": true,
|
||||||
@@ -20,26 +20,27 @@
|
|||||||
"format": "gulp format"
|
"format": "gulp format"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@fortawesome/fontawesome-svg-core": "1.2.4",
|
"@fortawesome/fontawesome-svg-core": "1.2.6",
|
||||||
"@fortawesome/free-brands-svg-icons": "5.3.1",
|
"@fortawesome/free-brands-svg-icons": "5.4.1",
|
||||||
"@fortawesome/free-regular-svg-icons": "5.3.1",
|
"@fortawesome/free-regular-svg-icons": "5.4.1",
|
||||||
"@fortawesome/free-solid-svg-icons": "5.3.1",
|
"@fortawesome/free-solid-svg-icons": "5.4.1",
|
||||||
"@koa/cors": "2.2.2",
|
"@koa/cors": "2.2.2",
|
||||||
"@prezzemolo/rap": "0.1.2",
|
"@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/chai-http": "3.0.5",
|
||||||
"@types/dateformat": "1.0.1",
|
"@types/dateformat": "1.0.1",
|
||||||
"@types/debug": "0.0.31",
|
"@types/debug": "0.0.31",
|
||||||
"@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.26",
|
"@types/elasticsearch": "5.0.28",
|
||||||
"@types/file-type": "5.2.1",
|
"@types/file-type": "5.2.1",
|
||||||
"@types/gulp": "3.8.36",
|
"@types/gulp": "3.8.36",
|
||||||
"@types/gulp-htmlmin": "1.3.32",
|
"@types/gulp-htmlmin": "1.3.32",
|
||||||
"@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",
|
||||||
"@types/gulp-uglify": "3.0.5",
|
"@types/gulp-uglify": "3.0.6",
|
||||||
"@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",
|
||||||
@@ -60,7 +61,7 @@
|
|||||||
"@types/mocha": "5.2.3",
|
"@types/mocha": "5.2.3",
|
||||||
"@types/mongodb": "3.1.12",
|
"@types/mongodb": "3.1.12",
|
||||||
"@types/ms": "0.7.30",
|
"@types/ms": "0.7.30",
|
||||||
"@types/node": "10.11.7",
|
"@types/node": "10.12.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.0",
|
||||||
@@ -70,7 +71,7 @@
|
|||||||
"@types/request-promise-native": "1.0.15",
|
"@types/request-promise-native": "1.0.15",
|
||||||
"@types/rimraf": "2.0.2",
|
"@types/rimraf": "2.0.2",
|
||||||
"@types/seedrandom": "2.4.27",
|
"@types/seedrandom": "2.4.27",
|
||||||
"@types/sharp": "0.17.10",
|
"@types/sharp": "0.21.0",
|
||||||
"@types/showdown": "1.7.5",
|
"@types/showdown": "1.7.5",
|
||||||
"@types/single-line-log": "1.1.0",
|
"@types/single-line-log": "1.1.0",
|
||||||
"@types/speakeasy": "2.0.2",
|
"@types/speakeasy": "2.0.2",
|
||||||
@@ -78,11 +79,12 @@
|
|||||||
"@types/tinycolor2": "1.4.1",
|
"@types/tinycolor2": "1.4.1",
|
||||||
"@types/tmp": "0.0.33",
|
"@types/tmp": "0.0.33",
|
||||||
"@types/uuid": "3.4.4",
|
"@types/uuid": "3.4.4",
|
||||||
"@types/webpack": "4.4.16",
|
"@types/webpack": "4.4.17",
|
||||||
"@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": "2.2.0",
|
"animejs": "2.2.0",
|
||||||
|
"apexcharts": "2.1.5",
|
||||||
"autobind-decorator": "2.1.0",
|
"autobind-decorator": "2.1.0",
|
||||||
"autosize": "4.0.2",
|
"autosize": "4.0.2",
|
||||||
"autwh": "0.1.0",
|
"autwh": "0.1.0",
|
||||||
@@ -90,8 +92,10 @@
|
|||||||
"bee-queue": "1.2.2",
|
"bee-queue": "1.2.2",
|
||||||
"bootstrap-vue": "2.0.0-rc.11",
|
"bootstrap-vue": "2.0.0-rc.11",
|
||||||
"cafy": "11.3.0",
|
"cafy": "11.3.0",
|
||||||
|
"chai": "4.2.0",
|
||||||
|
"chai-http": "4.2.0",
|
||||||
"chalk": "2.4.1",
|
"chalk": "2.4.1",
|
||||||
"chart.js": "2.7.2",
|
"chart.js": "2.7.3",
|
||||||
"commander": "2.19.0",
|
"commander": "2.19.0",
|
||||||
"crc-32": "1.2.0",
|
"crc-32": "1.2.0",
|
||||||
"css-loader": "1.0.0",
|
"css-loader": "1.0.0",
|
||||||
@@ -110,7 +114,7 @@
|
|||||||
"eventemitter3": "3.1.0",
|
"eventemitter3": "3.1.0",
|
||||||
"exif-js": "2.3.0",
|
"exif-js": "2.3.0",
|
||||||
"file-loader": "2.0.0",
|
"file-loader": "2.0.0",
|
||||||
"file-type": "10.0.0",
|
"file-type": "10.1.0",
|
||||||
"fuckadblock": "3.2.1",
|
"fuckadblock": "3.2.1",
|
||||||
"gulp": "3.9.1",
|
"gulp": "3.9.1",
|
||||||
"gulp-cssnano": "2.1.3",
|
"gulp-cssnano": "2.1.3",
|
||||||
@@ -157,7 +161,7 @@
|
|||||||
"mkdirp": "0.5.1",
|
"mkdirp": "0.5.1",
|
||||||
"mocha": "5.2.0",
|
"mocha": "5.2.0",
|
||||||
"moji": "0.5.1",
|
"moji": "0.5.1",
|
||||||
"mongodb": "3.1.1",
|
"mongodb": "3.1.8",
|
||||||
"monk": "6.0.6",
|
"monk": "6.0.6",
|
||||||
"ms": "2.1.1",
|
"ms": "2.1.1",
|
||||||
"nan": "2.11.1",
|
"nan": "2.11.1",
|
||||||
@@ -169,13 +173,14 @@
|
|||||||
"parse5": "5.1.0",
|
"parse5": "5.1.0",
|
||||||
"portscanner": "2.2.0",
|
"portscanner": "2.2.0",
|
||||||
"progress-bar-webpack-plugin": "1.11.0",
|
"progress-bar-webpack-plugin": "1.11.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",
|
||||||
"qrcode": "1.3.0",
|
"qrcode": "1.3.0",
|
||||||
"ratelimiter": "3.2.0",
|
"ratelimiter": "3.2.0",
|
||||||
"recaptcha-promise": "0.1.3",
|
"recaptcha-promise": "0.1.3",
|
||||||
"reconnecting-websocket": "4.1.5",
|
"reconnecting-websocket": "4.1.10",
|
||||||
"redis": "2.8.0",
|
"redis": "2.8.0",
|
||||||
"request": "2.88.0",
|
"request": "2.88.0",
|
||||||
"request-promise-native": "1.0.5",
|
"request-promise-native": "1.0.5",
|
||||||
@@ -186,7 +191,7 @@
|
|||||||
"sass-loader": "7.1.0",
|
"sass-loader": "7.1.0",
|
||||||
"seedrandom": "2.4.4",
|
"seedrandom": "2.4.4",
|
||||||
"sharp": "0.21.0",
|
"sharp": "0.21.0",
|
||||||
"showdown": "1.8.6",
|
"showdown": "1.8.7",
|
||||||
"showdown-highlightjs-extension": "0.1.2",
|
"showdown-highlightjs-extension": "0.1.2",
|
||||||
"single-line-log": "1.1.2",
|
"single-line-log": "1.1.2",
|
||||||
"speakeasy": "2.0.0",
|
"speakeasy": "2.0.0",
|
||||||
@@ -195,7 +200,7 @@
|
|||||||
"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": "3.45.7",
|
"systeminformation": "3.45.9",
|
||||||
"syuilo-password-strength": "0.0.1",
|
"syuilo-password-strength": "0.0.1",
|
||||||
"textarea-caret": "3.1.0",
|
"textarea-caret": "3.1.0",
|
||||||
"tinycolor2": "1.4.1",
|
"tinycolor2": "1.4.1",
|
||||||
@@ -212,14 +217,15 @@
|
|||||||
"vue": "2.5.17",
|
"vue": "2.5.17",
|
||||||
"vue-chartjs": "3.4.0",
|
"vue-chartjs": "3.4.0",
|
||||||
"vue-color": "2.7.0",
|
"vue-color": "2.7.0",
|
||||||
|
"vue-content-loading": "1.5.3",
|
||||||
"vue-cropperjs": "2.2.2",
|
"vue-cropperjs": "2.2.2",
|
||||||
"vue-js-modal": "1.3.26",
|
"vue-js-modal": "1.3.26",
|
||||||
"vue-json-tree-view": "2.1.4",
|
"vue-json-tree-view": "2.1.4",
|
||||||
"vue-loader": "15.4.2",
|
"vue-loader": "15.4.2",
|
||||||
"vue-router": "3.0.1",
|
"vue-router": "3.0.1",
|
||||||
"vue-style-loader": "4.1.2",
|
"vue-style-loader": "4.1.2",
|
||||||
"vue-svg-inline-loader": "1.2.0",
|
"vue-svg-inline-loader": "1.2.1",
|
||||||
"vue-sweetalert2": "1.5.5",
|
"vue-sweetalert2": "1.5.6",
|
||||||
"vue-template-compiler": "2.5.17",
|
"vue-template-compiler": "2.5.17",
|
||||||
"vuedraggable": "2.16.0",
|
"vuedraggable": "2.16.0",
|
||||||
"vuewordcloud": "18.7.11",
|
"vuewordcloud": "18.7.11",
|
||||||
@@ -227,7 +233,7 @@
|
|||||||
"vuex-persistedstate": "2.5.4",
|
"vuex-persistedstate": "2.5.4",
|
||||||
"web-push": "3.3.3",
|
"web-push": "3.3.3",
|
||||||
"webfinger.js": "2.6.6",
|
"webfinger.js": "2.6.6",
|
||||||
"webpack": "4.20.2",
|
"webpack": "4.22.0",
|
||||||
"webpack-cli": "3.1.2",
|
"webpack-cli": "3.1.2",
|
||||||
"websocket": "1.0.28",
|
"websocket": "1.0.28",
|
||||||
"ws": "6.1.0",
|
"ws": "6.1.0",
|
||||||
|
|||||||
122
src/chart/drive.ts
Normal file
122
src/chart/drive.ts
Normal file
@@ -0,0 +1,122 @@
|
|||||||
|
import autobind from 'autobind-decorator';
|
||||||
|
import Chart, { Obj } from './';
|
||||||
|
import DriveFile, { IDriveFile } from '../models/drive-file';
|
||||||
|
import { isLocalUser } from '../models/user';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ドライブに関するチャート
|
||||||
|
*/
|
||||||
|
type DriveLog = {
|
||||||
|
local: {
|
||||||
|
/**
|
||||||
|
* 集計期間時点での、全ドライブファイル数
|
||||||
|
*/
|
||||||
|
totalCount: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 集計期間時点での、全ドライブファイルの合計サイズ
|
||||||
|
*/
|
||||||
|
totalSize: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 増加したドライブファイル数
|
||||||
|
*/
|
||||||
|
incCount: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 増加したドライブ使用量
|
||||||
|
*/
|
||||||
|
incSize: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 減少したドライブファイル数
|
||||||
|
*/
|
||||||
|
decCount: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 減少したドライブ使用量
|
||||||
|
*/
|
||||||
|
decSize: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
remote: DriveLog['local'];
|
||||||
|
};
|
||||||
|
|
||||||
|
class DriveChart extends Chart<DriveLog> {
|
||||||
|
constructor() {
|
||||||
|
super('drive');
|
||||||
|
}
|
||||||
|
|
||||||
|
@autobind
|
||||||
|
protected async getTemplate(init: boolean, latest?: DriveLog): Promise<DriveLog> {
|
||||||
|
const calcSize = (local: boolean) => DriveFile
|
||||||
|
.aggregate([{
|
||||||
|
$match: {
|
||||||
|
'metadata._user.host': local ? null : { $ne: null },
|
||||||
|
'metadata.deletedAt': { $exists: false }
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
$project: {
|
||||||
|
length: true
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
$group: {
|
||||||
|
_id: null,
|
||||||
|
usage: { $sum: '$length' }
|
||||||
|
}
|
||||||
|
}])
|
||||||
|
.then(res => res.length > 0 ? res[0].usage : 0);
|
||||||
|
|
||||||
|
const [localCount, remoteCount, localSize, remoteSize] = init ? await Promise.all([
|
||||||
|
DriveFile.count({ 'metadata._user.host': null }),
|
||||||
|
DriveFile.count({ 'metadata._user.host': { $ne: null } }),
|
||||||
|
calcSize(true),
|
||||||
|
calcSize(false)
|
||||||
|
]) : [
|
||||||
|
latest ? latest.local.totalCount : 0,
|
||||||
|
latest ? latest.remote.totalCount : 0,
|
||||||
|
latest ? latest.local.totalSize : 0,
|
||||||
|
latest ? latest.remote.totalSize : 0
|
||||||
|
];
|
||||||
|
|
||||||
|
return {
|
||||||
|
local: {
|
||||||
|
totalCount: localCount,
|
||||||
|
totalSize: localSize,
|
||||||
|
incCount: 0,
|
||||||
|
incSize: 0,
|
||||||
|
decCount: 0,
|
||||||
|
decSize: 0
|
||||||
|
},
|
||||||
|
remote: {
|
||||||
|
totalCount: remoteCount,
|
||||||
|
totalSize: remoteSize,
|
||||||
|
incCount: 0,
|
||||||
|
incSize: 0,
|
||||||
|
decCount: 0,
|
||||||
|
decSize: 0
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@autobind
|
||||||
|
public async update(file: IDriveFile, isAdditional: boolean) {
|
||||||
|
const update: Obj = {};
|
||||||
|
|
||||||
|
update.totalCount = isAdditional ? 1 : -1;
|
||||||
|
update.totalSize = isAdditional ? file.length : -file.length;
|
||||||
|
if (isAdditional) {
|
||||||
|
update.incCount = 1;
|
||||||
|
update.incSize = file.length;
|
||||||
|
} else {
|
||||||
|
update.decCount = 1;
|
||||||
|
update.decSize = file.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
await this.inc({
|
||||||
|
[isLocalUser(file.metadata._user) ? 'local' : 'remote']: update
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default new DriveChart();
|
||||||
66
src/chart/federation.ts
Normal file
66
src/chart/federation.ts
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
import autobind from 'autobind-decorator';
|
||||||
|
import Chart, { Obj } from '.';
|
||||||
|
import Instance from '../models/instance';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* フェデレーションに関するチャート
|
||||||
|
*/
|
||||||
|
type FederationLog = {
|
||||||
|
instance: {
|
||||||
|
/**
|
||||||
|
* インスタンス数の合計
|
||||||
|
*/
|
||||||
|
total: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 増加インスタンス数
|
||||||
|
*/
|
||||||
|
inc: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 減少インスタンス数
|
||||||
|
*/
|
||||||
|
dec: number;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
class FederationChart extends Chart<FederationLog> {
|
||||||
|
constructor() {
|
||||||
|
super('federation');
|
||||||
|
}
|
||||||
|
|
||||||
|
@autobind
|
||||||
|
protected async getTemplate(init: boolean, latest?: FederationLog): Promise<FederationLog> {
|
||||||
|
const [total] = init ? await Promise.all([
|
||||||
|
Instance.count({})
|
||||||
|
]) : [
|
||||||
|
latest ? latest.instance.total : 0
|
||||||
|
];
|
||||||
|
|
||||||
|
return {
|
||||||
|
instance: {
|
||||||
|
total: total,
|
||||||
|
inc: 0,
|
||||||
|
dec: 0
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@autobind
|
||||||
|
public async update(isAdditional: boolean) {
|
||||||
|
const update: Obj = {};
|
||||||
|
|
||||||
|
update.total = isAdditional ? 1 : -1;
|
||||||
|
if (isAdditional) {
|
||||||
|
update.inc = 1;
|
||||||
|
} else {
|
||||||
|
update.dec = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
await this.inc({
|
||||||
|
instance: update
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default new FederationChart();
|
||||||
56
src/chart/hashtag.ts
Normal file
56
src/chart/hashtag.ts
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
import autobind from 'autobind-decorator';
|
||||||
|
import Chart, { Obj } from './';
|
||||||
|
import { IUser, isLocalUser } from '../models/user';
|
||||||
|
import db from '../db/mongodb';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ハッシュタグに関するチャート
|
||||||
|
*/
|
||||||
|
type HashtagLog = {
|
||||||
|
local: {
|
||||||
|
/**
|
||||||
|
* 投稿された数
|
||||||
|
*/
|
||||||
|
count: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
remote: HashtagLog['local'];
|
||||||
|
};
|
||||||
|
|
||||||
|
class HashtagChart extends Chart<HashtagLog> {
|
||||||
|
constructor() {
|
||||||
|
super('hashtag', true);
|
||||||
|
|
||||||
|
// 後方互換性のため
|
||||||
|
db.get('chart.hashtag').findOne().then(doc => {
|
||||||
|
if (doc != null && doc.data.local == null) {
|
||||||
|
db.get('chart.hashtag').drop();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@autobind
|
||||||
|
protected async getTemplate(init: boolean, latest?: HashtagLog): Promise<HashtagLog> {
|
||||||
|
return {
|
||||||
|
local: {
|
||||||
|
count: 0
|
||||||
|
},
|
||||||
|
remote: {
|
||||||
|
count: 0
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@autobind
|
||||||
|
public async update(hashtag: string, user: IUser) {
|
||||||
|
const update: Obj = {
|
||||||
|
count: 1
|
||||||
|
};
|
||||||
|
|
||||||
|
await this.incIfUnique({
|
||||||
|
[isLocalUser(user) ? 'local' : 'remote']: update
|
||||||
|
}, 'users', user._id.toHexString(), hashtag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default new HashtagChart();
|
||||||
285
src/chart/index.ts
Normal file
285
src/chart/index.ts
Normal file
@@ -0,0 +1,285 @@
|
|||||||
|
/**
|
||||||
|
* チャートエンジン
|
||||||
|
*/
|
||||||
|
|
||||||
|
const nestedProperty = require('nested-property');
|
||||||
|
import autobind from 'autobind-decorator';
|
||||||
|
import * as mongo from 'mongodb';
|
||||||
|
import db from '../db/mongodb';
|
||||||
|
import { ICollection } from 'monk';
|
||||||
|
|
||||||
|
export type Obj = { [key: string]: any };
|
||||||
|
|
||||||
|
export type Partial<T> = {
|
||||||
|
[P in keyof T]?: Partial<T[P]>;
|
||||||
|
};
|
||||||
|
|
||||||
|
type ArrayValue<T> = {
|
||||||
|
[P in keyof T]: T[P] extends number ? Array<T[P]> : ArrayValue<T[P]>;
|
||||||
|
};
|
||||||
|
|
||||||
|
type Span = 'day' | 'hour';
|
||||||
|
|
||||||
|
//#region Chart Core
|
||||||
|
type Log<T extends Obj> = {
|
||||||
|
_id: mongo.ObjectID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 集計のグループ
|
||||||
|
*/
|
||||||
|
group?: any;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 集計日時
|
||||||
|
*/
|
||||||
|
date: Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 集計期間
|
||||||
|
*/
|
||||||
|
span: Span;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* データ
|
||||||
|
*/
|
||||||
|
data: T;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ユニークインクリメント用
|
||||||
|
*/
|
||||||
|
unique?: Obj;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 様々なチャートの管理を司るクラス
|
||||||
|
*/
|
||||||
|
export default abstract class Chart<T> {
|
||||||
|
protected collection: ICollection<Log<T>>;
|
||||||
|
protected abstract async getTemplate(init: boolean, latest?: T, group?: any): Promise<T>;
|
||||||
|
|
||||||
|
constructor(name: string, grouped = false) {
|
||||||
|
this.collection = db.get<Log<T>>(`chart.${name}`);
|
||||||
|
if (grouped) {
|
||||||
|
this.collection.createIndex({ span: -1, date: -1, group: -1 }, { unique: true });
|
||||||
|
} else {
|
||||||
|
this.collection.createIndex({ span: -1, date: -1 }, { unique: true });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@autobind
|
||||||
|
private convertQuery(x: Obj, path: string): Obj {
|
||||||
|
const query: Obj = {};
|
||||||
|
|
||||||
|
const dive = (x: Obj, path: string) => {
|
||||||
|
Object.entries(x).forEach(([k, v]) => {
|
||||||
|
const p = path ? `${path}.${k}` : k;
|
||||||
|
if (typeof v === 'number') {
|
||||||
|
query[p] = v;
|
||||||
|
} else {
|
||||||
|
dive(v, p);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
dive(x, path);
|
||||||
|
|
||||||
|
return query;
|
||||||
|
}
|
||||||
|
|
||||||
|
@autobind
|
||||||
|
private async getCurrentLog(span: Span, group?: any): Promise<Log<T>> {
|
||||||
|
const now = new Date();
|
||||||
|
const y = now.getFullYear();
|
||||||
|
const m = now.getMonth();
|
||||||
|
const d = now.getDate();
|
||||||
|
const h = now.getHours();
|
||||||
|
|
||||||
|
const current =
|
||||||
|
span == 'day' ? new Date(y, m, d) :
|
||||||
|
span == 'hour' ? new Date(y, m, d, h) :
|
||||||
|
null;
|
||||||
|
|
||||||
|
// 現在(今日または今のHour)のログ
|
||||||
|
const currentLog = await this.collection.findOne({
|
||||||
|
group: group,
|
||||||
|
span: span,
|
||||||
|
date: current
|
||||||
|
});
|
||||||
|
|
||||||
|
if (currentLog) {
|
||||||
|
return currentLog;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 集計期間が変わってから、初めてのチャート更新なら
|
||||||
|
// 最も最近のログを持ってくる
|
||||||
|
// * 例えば集計期間が「日」である場合で考えると、
|
||||||
|
// * 昨日何もチャートを更新するような出来事がなかった場合は、
|
||||||
|
// * ログがそもそも作られずドキュメントが存在しないということがあり得るため、
|
||||||
|
// * 「昨日の」と決め打ちせずに「もっとも最近の」とします
|
||||||
|
const latest = await this.collection.findOne({
|
||||||
|
group: group,
|
||||||
|
span: span
|
||||||
|
}, {
|
||||||
|
sort: {
|
||||||
|
date: -1
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (latest) {
|
||||||
|
// 現在のログを初期挿入
|
||||||
|
const data = await this.getTemplate(false, latest.data);
|
||||||
|
|
||||||
|
const log = await this.collection.insert({
|
||||||
|
group: group,
|
||||||
|
span: span,
|
||||||
|
date: current,
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
|
||||||
|
return log;
|
||||||
|
} else {
|
||||||
|
// ログが存在しなかったら
|
||||||
|
// * Misskeyインスタンスを建てて初めてのチャート更新時など
|
||||||
|
|
||||||
|
// 空のログを作成
|
||||||
|
const data = await this.getTemplate(true, null, group);
|
||||||
|
|
||||||
|
const log = await this.collection.insert({
|
||||||
|
group: group,
|
||||||
|
span: span,
|
||||||
|
date: current,
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
|
||||||
|
return log;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@autobind
|
||||||
|
protected commit(query: Obj, group?: any, uniqueKey?: string, uniqueValue?: string): void {
|
||||||
|
const update = (log: Log<T>) => {
|
||||||
|
// ユニークインクリメントの場合、指定のキーに指定の値が既に存在していたら弾く
|
||||||
|
if (
|
||||||
|
uniqueKey &&
|
||||||
|
log.unique &&
|
||||||
|
log.unique[uniqueKey] &&
|
||||||
|
log.unique[uniqueKey].includes(uniqueValue)
|
||||||
|
) return;
|
||||||
|
|
||||||
|
// ユニークインクリメントの指定のキーに値を追加
|
||||||
|
if (uniqueKey) {
|
||||||
|
query['$push'] = {
|
||||||
|
[`unique.${uniqueKey}`]: uniqueValue
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
this.collection.update({
|
||||||
|
_id: log._id
|
||||||
|
}, query);
|
||||||
|
};
|
||||||
|
|
||||||
|
this.getCurrentLog('day', group).then(log => update(log));
|
||||||
|
this.getCurrentLog('hour', group).then(log => update(log));
|
||||||
|
}
|
||||||
|
|
||||||
|
@autobind
|
||||||
|
protected inc(inc: Partial<T>, group?: any): void {
|
||||||
|
this.commit({
|
||||||
|
$inc: this.convertQuery(inc, 'data')
|
||||||
|
}, group);
|
||||||
|
}
|
||||||
|
|
||||||
|
@autobind
|
||||||
|
protected incIfUnique(inc: Partial<T>, key: string, value: string, group?: any): void {
|
||||||
|
this.commit({
|
||||||
|
$inc: this.convertQuery(inc, 'data')
|
||||||
|
}, group, key, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@autobind
|
||||||
|
public async getChart(span: Span, range: number, group?: any): Promise<ArrayValue<T>> {
|
||||||
|
const promisedChart: Promise<T>[] = [];
|
||||||
|
|
||||||
|
const now = new Date();
|
||||||
|
const y = now.getFullYear();
|
||||||
|
const m = now.getMonth();
|
||||||
|
const d = now.getDate();
|
||||||
|
const h = now.getHours();
|
||||||
|
|
||||||
|
const gt =
|
||||||
|
span == 'day' ? new Date(y, m, d - range) :
|
||||||
|
span == 'hour' ? new Date(y, m, d, h - range) : null;
|
||||||
|
|
||||||
|
const logs = await this.collection.find({
|
||||||
|
group: group,
|
||||||
|
span: span,
|
||||||
|
date: {
|
||||||
|
$gt: gt
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
sort: {
|
||||||
|
date: -1
|
||||||
|
},
|
||||||
|
fields: {
|
||||||
|
_id: 0
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
for (let i = (range - 1); i >= 0; i--) {
|
||||||
|
const current =
|
||||||
|
span == 'day' ? new Date(y, m, d - i) :
|
||||||
|
span == 'hour' ? new Date(y, m, d, h - i) :
|
||||||
|
null;
|
||||||
|
|
||||||
|
const log = logs.find(l => l.date.getTime() == current.getTime());
|
||||||
|
|
||||||
|
if (log) {
|
||||||
|
promisedChart.unshift(Promise.resolve(log.data));
|
||||||
|
} else { // 隙間埋め
|
||||||
|
const latest = logs.find(l => l.date.getTime() < current.getTime());
|
||||||
|
promisedChart.unshift(this.getTemplate(false, latest ? latest.data : null));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const chart = await Promise.all(promisedChart);
|
||||||
|
|
||||||
|
const res: ArrayValue<T> = {} as any;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* [{
|
||||||
|
* xxxxx: 1,
|
||||||
|
* yyyyy: 5
|
||||||
|
* }, {
|
||||||
|
* xxxxx: 2,
|
||||||
|
* yyyyy: 6
|
||||||
|
* }, {
|
||||||
|
* xxxxx: 3,
|
||||||
|
* yyyyy: 7
|
||||||
|
* }]
|
||||||
|
*
|
||||||
|
* を
|
||||||
|
*
|
||||||
|
* {
|
||||||
|
* xxxxx: [1, 2, 3],
|
||||||
|
* yyyyy: [5, 6, 7]
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* にする
|
||||||
|
*/
|
||||||
|
const dive = (x: Obj, path?: string) => {
|
||||||
|
Object.entries(x).forEach(([k, v]) => {
|
||||||
|
const p = path ? `${path}.${k}` : k;
|
||||||
|
if (typeof v == 'object') {
|
||||||
|
dive(v, p);
|
||||||
|
} else {
|
||||||
|
nestedProperty.set(res, p, chart.map(s => nestedProperty.get(s, p)));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
dive(chart[0]);
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
64
src/chart/network.ts
Normal file
64
src/chart/network.ts
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
import autobind from 'autobind-decorator';
|
||||||
|
import Chart, { Partial } from './';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ネットワークに関するチャート
|
||||||
|
*/
|
||||||
|
type NetworkLog = {
|
||||||
|
/**
|
||||||
|
* 受信したリクエスト数
|
||||||
|
*/
|
||||||
|
incomingRequests: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 送信したリクエスト数
|
||||||
|
*/
|
||||||
|
outgoingRequests: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 応答時間の合計
|
||||||
|
* TIP: (totalTime / incomingRequests) でひとつのリクエストに平均でどれくらいの時間がかかったか知れる
|
||||||
|
*/
|
||||||
|
totalTime: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 合計受信データ量
|
||||||
|
*/
|
||||||
|
incomingBytes: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 合計送信データ量
|
||||||
|
*/
|
||||||
|
outgoingBytes: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
class NetworkChart extends Chart<NetworkLog> {
|
||||||
|
constructor() {
|
||||||
|
super('network');
|
||||||
|
}
|
||||||
|
|
||||||
|
@autobind
|
||||||
|
protected async getTemplate(init: boolean, latest?: NetworkLog): Promise<NetworkLog> {
|
||||||
|
return {
|
||||||
|
incomingRequests: 0,
|
||||||
|
outgoingRequests: 0,
|
||||||
|
totalTime: 0,
|
||||||
|
incomingBytes: 0,
|
||||||
|
outgoingBytes: 0
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@autobind
|
||||||
|
public async update(incomingRequests: number, time: number, incomingBytes: number, outgoingBytes: number) {
|
||||||
|
const inc: Partial<NetworkLog> = {
|
||||||
|
incomingRequests: incomingRequests,
|
||||||
|
totalTime: time,
|
||||||
|
incomingBytes: incomingBytes,
|
||||||
|
outgoingBytes: outgoingBytes
|
||||||
|
};
|
||||||
|
|
||||||
|
await this.inc(inc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default new NetworkChart();
|
||||||
114
src/chart/notes.ts
Normal file
114
src/chart/notes.ts
Normal file
@@ -0,0 +1,114 @@
|
|||||||
|
import autobind from 'autobind-decorator';
|
||||||
|
import Chart, { Obj } from '.';
|
||||||
|
import Note, { INote } from '../models/note';
|
||||||
|
import { isLocalUser } from '../models/user';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 投稿に関するチャート
|
||||||
|
*/
|
||||||
|
type NotesLog = {
|
||||||
|
local: {
|
||||||
|
/**
|
||||||
|
* 集計期間時点での、全投稿数
|
||||||
|
*/
|
||||||
|
total: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 増加した投稿数
|
||||||
|
*/
|
||||||
|
inc: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 減少した投稿数
|
||||||
|
*/
|
||||||
|
dec: number;
|
||||||
|
|
||||||
|
diffs: {
|
||||||
|
/**
|
||||||
|
* 通常の投稿数の差分
|
||||||
|
*/
|
||||||
|
normal: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* リプライの投稿数の差分
|
||||||
|
*/
|
||||||
|
reply: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renoteの投稿数の差分
|
||||||
|
*/
|
||||||
|
renote: number;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
remote: NotesLog['local'];
|
||||||
|
};
|
||||||
|
|
||||||
|
class NotesChart extends Chart<NotesLog> {
|
||||||
|
constructor() {
|
||||||
|
super('notes');
|
||||||
|
}
|
||||||
|
|
||||||
|
@autobind
|
||||||
|
protected async getTemplate(init: boolean, latest?: NotesLog): Promise<NotesLog> {
|
||||||
|
const [localCount, remoteCount] = init ? await Promise.all([
|
||||||
|
Note.count({ '_user.host': null }),
|
||||||
|
Note.count({ '_user.host': { $ne: null } })
|
||||||
|
]) : [
|
||||||
|
latest ? latest.local.total : 0,
|
||||||
|
latest ? latest.remote.total : 0
|
||||||
|
];
|
||||||
|
|
||||||
|
return {
|
||||||
|
local: {
|
||||||
|
total: localCount,
|
||||||
|
inc: 0,
|
||||||
|
dec: 0,
|
||||||
|
diffs: {
|
||||||
|
normal: 0,
|
||||||
|
reply: 0,
|
||||||
|
renote: 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
remote: {
|
||||||
|
total: remoteCount,
|
||||||
|
inc: 0,
|
||||||
|
dec: 0,
|
||||||
|
diffs: {
|
||||||
|
normal: 0,
|
||||||
|
reply: 0,
|
||||||
|
renote: 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@autobind
|
||||||
|
public async update(note: INote, isAdditional: boolean) {
|
||||||
|
const update: Obj = {
|
||||||
|
diffs: {}
|
||||||
|
};
|
||||||
|
|
||||||
|
update.total = isAdditional ? 1 : -1;
|
||||||
|
|
||||||
|
if (isAdditional) {
|
||||||
|
update.inc = 1;
|
||||||
|
} else {
|
||||||
|
update.dec = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (note.replyId != null) {
|
||||||
|
update.diffs.reply = isAdditional ? 1 : -1;
|
||||||
|
} else if (note.renoteId != null) {
|
||||||
|
update.diffs.renote = isAdditional ? 1 : -1;
|
||||||
|
} else {
|
||||||
|
update.diffs.normal = isAdditional ? 1 : -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
await this.inc({
|
||||||
|
[isLocalUser(note._user) ? 'local' : 'remote']: update
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default new NotesChart();
|
||||||
101
src/chart/per-user-drive.ts
Normal file
101
src/chart/per-user-drive.ts
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
import autobind from 'autobind-decorator';
|
||||||
|
import Chart, { Obj } from './';
|
||||||
|
import DriveFile, { IDriveFile } from '../models/drive-file';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ユーザーごとのドライブに関するチャート
|
||||||
|
*/
|
||||||
|
type PerUserDriveLog = {
|
||||||
|
/**
|
||||||
|
* 集計期間時点での、全ドライブファイル数
|
||||||
|
*/
|
||||||
|
totalCount: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 集計期間時点での、全ドライブファイルの合計サイズ
|
||||||
|
*/
|
||||||
|
totalSize: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 増加したドライブファイル数
|
||||||
|
*/
|
||||||
|
incCount: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 増加したドライブ使用量
|
||||||
|
*/
|
||||||
|
incSize: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 減少したドライブファイル数
|
||||||
|
*/
|
||||||
|
decCount: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 減少したドライブ使用量
|
||||||
|
*/
|
||||||
|
decSize: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
class PerUserDriveChart extends Chart<PerUserDriveLog> {
|
||||||
|
constructor() {
|
||||||
|
super('perUserDrive', true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@autobind
|
||||||
|
protected async getTemplate(init: boolean, latest?: PerUserDriveLog, group?: any): Promise<PerUserDriveLog> {
|
||||||
|
const calcSize = () => DriveFile
|
||||||
|
.aggregate([{
|
||||||
|
$match: {
|
||||||
|
'metadata.userId': group,
|
||||||
|
'metadata.deletedAt': { $exists: false }
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
$project: {
|
||||||
|
length: true
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
$group: {
|
||||||
|
_id: null,
|
||||||
|
usage: { $sum: '$length' }
|
||||||
|
}
|
||||||
|
}])
|
||||||
|
.then(res => res.length > 0 ? res[0].usage : 0);
|
||||||
|
|
||||||
|
const [count, size] = init ? await Promise.all([
|
||||||
|
DriveFile.count({ 'metadata.userId': group }),
|
||||||
|
calcSize()
|
||||||
|
]) : [
|
||||||
|
latest ? latest.totalCount : 0,
|
||||||
|
latest ? latest.totalSize : 0
|
||||||
|
];
|
||||||
|
|
||||||
|
return {
|
||||||
|
totalCount: count,
|
||||||
|
totalSize: size,
|
||||||
|
incCount: 0,
|
||||||
|
incSize: 0,
|
||||||
|
decCount: 0,
|
||||||
|
decSize: 0
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@autobind
|
||||||
|
public async update(file: IDriveFile, isAdditional: boolean) {
|
||||||
|
const update: Obj = {};
|
||||||
|
|
||||||
|
update.totalCount = isAdditional ? 1 : -1;
|
||||||
|
update.totalSize = isAdditional ? file.length : -file.length;
|
||||||
|
if (isAdditional) {
|
||||||
|
update.incCount = 1;
|
||||||
|
update.incSize = file.length;
|
||||||
|
} else {
|
||||||
|
update.decCount = 1;
|
||||||
|
update.decSize = file.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
await this.inc(update, file.metadata.userId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default new PerUserDriveChart();
|
||||||
128
src/chart/per-user-following.ts
Normal file
128
src/chart/per-user-following.ts
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
import autobind from 'autobind-decorator';
|
||||||
|
import Chart, { Obj } from './';
|
||||||
|
import Following from '../models/following';
|
||||||
|
import { IUser, isLocalUser } from '../models/user';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ユーザーごとのフォローに関するチャート
|
||||||
|
*/
|
||||||
|
type PerUserFollowingLog = {
|
||||||
|
local: {
|
||||||
|
/**
|
||||||
|
* フォローしている
|
||||||
|
*/
|
||||||
|
followings: {
|
||||||
|
/**
|
||||||
|
* 合計
|
||||||
|
*/
|
||||||
|
total: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* フォローした数
|
||||||
|
*/
|
||||||
|
inc: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* フォロー解除した数
|
||||||
|
*/
|
||||||
|
dec: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* フォローされている
|
||||||
|
*/
|
||||||
|
followers: {
|
||||||
|
/**
|
||||||
|
* 合計
|
||||||
|
*/
|
||||||
|
total: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* フォローされた数
|
||||||
|
*/
|
||||||
|
inc: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* フォロー解除された数
|
||||||
|
*/
|
||||||
|
dec: number;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
remote: PerUserFollowingLog['local'];
|
||||||
|
};
|
||||||
|
|
||||||
|
class PerUserFollowingChart extends Chart<PerUserFollowingLog> {
|
||||||
|
constructor() {
|
||||||
|
super('perUserFollowing', true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@autobind
|
||||||
|
protected async getTemplate(init: boolean, latest?: PerUserFollowingLog, group?: any): Promise<PerUserFollowingLog> {
|
||||||
|
const [
|
||||||
|
localFollowingsCount,
|
||||||
|
localFollowersCount,
|
||||||
|
remoteFollowingsCount,
|
||||||
|
remoteFollowersCount
|
||||||
|
] = init ? await Promise.all([
|
||||||
|
Following.count({ followerId: group, '_followee.host': null }),
|
||||||
|
Following.count({ followeeId: group, '_follower.host': null }),
|
||||||
|
Following.count({ followerId: group, '_followee.host': { $ne: null } }),
|
||||||
|
Following.count({ followeeId: group, '_follower.host': { $ne: null } })
|
||||||
|
]) : [
|
||||||
|
latest ? latest.local.followings.total : 0,
|
||||||
|
latest ? latest.local.followers.total : 0,
|
||||||
|
latest ? latest.remote.followings.total : 0,
|
||||||
|
latest ? latest.remote.followers.total : 0
|
||||||
|
];
|
||||||
|
|
||||||
|
return {
|
||||||
|
local: {
|
||||||
|
followings: {
|
||||||
|
total: localFollowingsCount,
|
||||||
|
inc: 0,
|
||||||
|
dec: 0
|
||||||
|
},
|
||||||
|
followers: {
|
||||||
|
total: localFollowersCount,
|
||||||
|
inc: 0,
|
||||||
|
dec: 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
remote: {
|
||||||
|
followings: {
|
||||||
|
total: remoteFollowingsCount,
|
||||||
|
inc: 0,
|
||||||
|
dec: 0
|
||||||
|
},
|
||||||
|
followers: {
|
||||||
|
total: remoteFollowersCount,
|
||||||
|
inc: 0,
|
||||||
|
dec: 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@autobind
|
||||||
|
public async update(follower: IUser, followee: IUser, isFollow: boolean) {
|
||||||
|
const update: Obj = {};
|
||||||
|
|
||||||
|
update.total = isFollow ? 1 : -1;
|
||||||
|
|
||||||
|
if (isFollow) {
|
||||||
|
update.inc = 1;
|
||||||
|
} else {
|
||||||
|
update.dec = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.inc({
|
||||||
|
[isLocalUser(follower) ? 'local' : 'remote']: { followings: update }
|
||||||
|
}, follower._id);
|
||||||
|
this.inc({
|
||||||
|
[isLocalUser(followee) ? 'local' : 'remote']: { followers: update }
|
||||||
|
}, followee._id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default new PerUserFollowingChart();
|
||||||
94
src/chart/per-user-notes.ts
Normal file
94
src/chart/per-user-notes.ts
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
import autobind from 'autobind-decorator';
|
||||||
|
import Chart, { Obj } from './';
|
||||||
|
import Note, { INote } from '../models/note';
|
||||||
|
import { IUser } from '../models/user';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ユーザーごとの投稿に関するチャート
|
||||||
|
*/
|
||||||
|
type PerUserNotesLog = {
|
||||||
|
/**
|
||||||
|
* 集計期間時点での、全投稿数
|
||||||
|
*/
|
||||||
|
total: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 増加した投稿数
|
||||||
|
*/
|
||||||
|
inc: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 減少した投稿数
|
||||||
|
*/
|
||||||
|
dec: number;
|
||||||
|
|
||||||
|
diffs: {
|
||||||
|
/**
|
||||||
|
* 通常の投稿数の差分
|
||||||
|
*/
|
||||||
|
normal: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* リプライの投稿数の差分
|
||||||
|
*/
|
||||||
|
reply: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renoteの投稿数の差分
|
||||||
|
*/
|
||||||
|
renote: number;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
class PerUserNotesChart extends Chart<PerUserNotesLog> {
|
||||||
|
constructor() {
|
||||||
|
super('perUserNotes', true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@autobind
|
||||||
|
protected async getTemplate(init: boolean, latest?: PerUserNotesLog, group?: any): Promise<PerUserNotesLog> {
|
||||||
|
const [count] = init ? await Promise.all([
|
||||||
|
Note.count({ userId: group, deletedAt: null }),
|
||||||
|
]) : [
|
||||||
|
latest ? latest.total : 0
|
||||||
|
];
|
||||||
|
|
||||||
|
return {
|
||||||
|
total: count,
|
||||||
|
inc: 0,
|
||||||
|
dec: 0,
|
||||||
|
diffs: {
|
||||||
|
normal: 0,
|
||||||
|
reply: 0,
|
||||||
|
renote: 0
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@autobind
|
||||||
|
public async update(user: IUser, note: INote, isAdditional: boolean) {
|
||||||
|
const update: Obj = {
|
||||||
|
diffs: {}
|
||||||
|
};
|
||||||
|
|
||||||
|
update.total = isAdditional ? 1 : -1;
|
||||||
|
|
||||||
|
if (isAdditional) {
|
||||||
|
update.inc = 1;
|
||||||
|
} else {
|
||||||
|
update.dec = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (note.replyId != null) {
|
||||||
|
update.diffs.reply = isAdditional ? 1 : -1;
|
||||||
|
} else if (note.renoteId != null) {
|
||||||
|
update.diffs.renote = isAdditional ? 1 : -1;
|
||||||
|
} else {
|
||||||
|
update.diffs.normal = isAdditional ? 1 : -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
await this.inc(update, user._id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default new PerUserNotesChart();
|
||||||
45
src/chart/per-user-reactions.ts
Normal file
45
src/chart/per-user-reactions.ts
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
import autobind from 'autobind-decorator';
|
||||||
|
import Chart from './';
|
||||||
|
import { IUser, isLocalUser } from '../models/user';
|
||||||
|
import { INote } from '../models/note';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ユーザーごとのリアクションに関するチャート
|
||||||
|
*/
|
||||||
|
type PerUserReactionsLog = {
|
||||||
|
local: {
|
||||||
|
/**
|
||||||
|
* リアクションされた数
|
||||||
|
*/
|
||||||
|
count: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
remote: PerUserReactionsLog['local'];
|
||||||
|
};
|
||||||
|
|
||||||
|
class PerUserReactionsChart extends Chart<PerUserReactionsLog> {
|
||||||
|
constructor() {
|
||||||
|
super('perUserReaction', true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@autobind
|
||||||
|
protected async getTemplate(init: boolean, latest?: PerUserReactionsLog, group?: any): Promise<PerUserReactionsLog> {
|
||||||
|
return {
|
||||||
|
local: {
|
||||||
|
count: 0
|
||||||
|
},
|
||||||
|
remote: {
|
||||||
|
count: 0
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@autobind
|
||||||
|
public async update(user: IUser, note: INote) {
|
||||||
|
this.inc({
|
||||||
|
[isLocalUser(user) ? 'local' : 'remote']: { count: 1 }
|
||||||
|
}, note.userId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default new PerUserReactionsChart();
|
||||||
75
src/chart/users.ts
Normal file
75
src/chart/users.ts
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
import autobind from 'autobind-decorator';
|
||||||
|
import Chart, { Obj } from './';
|
||||||
|
import User, { IUser, isLocalUser } from '../models/user';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ユーザーに関するチャート
|
||||||
|
*/
|
||||||
|
type UsersLog = {
|
||||||
|
local: {
|
||||||
|
/**
|
||||||
|
* 集計期間時点での、全ユーザー数
|
||||||
|
*/
|
||||||
|
total: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 増加したユーザー数
|
||||||
|
*/
|
||||||
|
inc: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 減少したユーザー数
|
||||||
|
*/
|
||||||
|
dec: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
remote: UsersLog['local'];
|
||||||
|
};
|
||||||
|
|
||||||
|
class UsersChart extends Chart<UsersLog> {
|
||||||
|
constructor() {
|
||||||
|
super('users');
|
||||||
|
}
|
||||||
|
|
||||||
|
@autobind
|
||||||
|
protected async getTemplate(init: boolean, latest?: UsersLog): Promise<UsersLog> {
|
||||||
|
const [localCount, remoteCount] = init ? await Promise.all([
|
||||||
|
User.count({ host: null }),
|
||||||
|
User.count({ host: { $ne: null } })
|
||||||
|
]) : [
|
||||||
|
latest ? latest.local.total : 0,
|
||||||
|
latest ? latest.remote.total : 0
|
||||||
|
];
|
||||||
|
|
||||||
|
return {
|
||||||
|
local: {
|
||||||
|
total: localCount,
|
||||||
|
inc: 0,
|
||||||
|
dec: 0
|
||||||
|
},
|
||||||
|
remote: {
|
||||||
|
total: remoteCount,
|
||||||
|
inc: 0,
|
||||||
|
dec: 0
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@autobind
|
||||||
|
public async update(user: IUser, isAdditional: boolean) {
|
||||||
|
const update: Obj = {};
|
||||||
|
|
||||||
|
update.total = isAdditional ? 1 : -1;
|
||||||
|
if (isAdditional) {
|
||||||
|
update.inc = 1;
|
||||||
|
} else {
|
||||||
|
update.dec = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
await this.inc({
|
||||||
|
[isLocalUser(user) ? 'local' : 'remote']: update
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default new UsersChart();
|
||||||
@@ -142,7 +142,7 @@
|
|||||||
localStorage.setItem('shouldFlush', 'false');
|
localStorage.setItem('shouldFlush', 'false');
|
||||||
|
|
||||||
// Random
|
// Random
|
||||||
localStorage.setItem('salt', Math.random().toString());
|
localStorage.setItem('salt', Math.random().toString().substr(2, 8));
|
||||||
|
|
||||||
// Clear cache (service worker)
|
// Clear cache (service worker)
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -46,6 +46,16 @@ const getKeyMap = keymap => Object.entries(keymap).map(([patterns, callback]): a
|
|||||||
|
|
||||||
const ignoreElemens = ['input', 'textarea'];
|
const ignoreElemens = ['input', 'textarea'];
|
||||||
|
|
||||||
|
function match(e: KeyboardEvent, patterns: action['patterns']): boolean {
|
||||||
|
const key = e.code.toLowerCase();
|
||||||
|
return patterns.some(pattern => pattern.which.includes(key) &&
|
||||||
|
pattern.ctrl == e.ctrlKey &&
|
||||||
|
pattern.shift == e.shiftKey &&
|
||||||
|
pattern.alt == e.altKey &&
|
||||||
|
e.metaKey == false
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
install(Vue) {
|
install(Vue) {
|
||||||
Vue.directive('hotkey', {
|
Vue.directive('hotkey', {
|
||||||
@@ -55,37 +65,27 @@ export default {
|
|||||||
const actions = getKeyMap(binding.value);
|
const actions = getKeyMap(binding.value);
|
||||||
|
|
||||||
// flatten
|
// flatten
|
||||||
const reservedKeys = concat(concat(actions.map(a => a.patterns.map(p => p.which))));
|
const reservedKeys = concat(actions.map(a => a.patterns));
|
||||||
|
|
||||||
el.dataset.reservedKeys = reservedKeys.map(key => `'${key}'`).join(' ');
|
el._misskey_reservedKeys = reservedKeys;
|
||||||
|
|
||||||
el._keyHandler = (e: KeyboardEvent) => {
|
el._keyHandler = (e: KeyboardEvent) => {
|
||||||
const key = e.code.toLowerCase();
|
const targetReservedKeys = document.activeElement ? ((document.activeElement as any)._misskey_reservedKeys || []) : [];
|
||||||
|
|
||||||
const targetReservedKeys = document.activeElement ? ((document.activeElement as any).dataset || {}).reservedKeys || '' : '';
|
|
||||||
if (document.activeElement && ignoreElemens.some(el => document.activeElement.matches(el))) return;
|
if (document.activeElement && ignoreElemens.some(el => document.activeElement.matches(el))) return;
|
||||||
|
|
||||||
for (const action of actions) {
|
for (const action of actions) {
|
||||||
if (el._hotkey_global && targetReservedKeys.includes(`'${key}'`)) break;
|
const matched = match(e, action.patterns);
|
||||||
|
|
||||||
const matched = action.patterns.some(pattern => {
|
|
||||||
const matched = pattern.which.includes(key) &&
|
|
||||||
pattern.ctrl == e.ctrlKey &&
|
|
||||||
pattern.shift == e.shiftKey &&
|
|
||||||
pattern.alt == e.altKey &&
|
|
||||||
e.metaKey == false;
|
|
||||||
|
|
||||||
if (matched) {
|
|
||||||
e.preventDefault();
|
|
||||||
e.stopPropagation();
|
|
||||||
action.callback(e);
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
if (matched) {
|
if (matched) {
|
||||||
|
if (el._hotkey_global) {
|
||||||
|
if (match(e, targetReservedKeys)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
action.callback(e);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
178
src/client/app/common/scripts/note-mixin.ts
Normal file
178
src/client/app/common/scripts/note-mixin.ts
Normal file
@@ -0,0 +1,178 @@
|
|||||||
|
import parse from '../../../../mfm/parse';
|
||||||
|
import { sum } from '../../../../prelude/array';
|
||||||
|
import MkNoteMenu from '../views/components/note-menu.vue';
|
||||||
|
import MkReactionPicker from '../views/components/reaction-picker.vue';
|
||||||
|
import Ok from '../views/components/ok.vue';
|
||||||
|
|
||||||
|
function focus(el, fn) {
|
||||||
|
const target = fn(el);
|
||||||
|
if (target) {
|
||||||
|
if (target.hasAttribute('tabindex')) {
|
||||||
|
target.focus();
|
||||||
|
} else {
|
||||||
|
focus(target, fn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type Opts = {
|
||||||
|
mobile?: boolean;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default (opts: Opts = {}) => ({
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
showContent: false
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
computed: {
|
||||||
|
keymap(): any {
|
||||||
|
return {
|
||||||
|
'r': () => this.reply(true),
|
||||||
|
'e|a|plus': () => this.react(true),
|
||||||
|
'q': () => this.renote(true),
|
||||||
|
'f|b': this.favorite,
|
||||||
|
'delete|ctrl+d': this.del,
|
||||||
|
'ctrl+q': this.renoteDirectly,
|
||||||
|
'up|k|shift+tab': this.focusBefore,
|
||||||
|
'down|j|tab': this.focusAfter,
|
||||||
|
'esc': this.blur,
|
||||||
|
'm|o': () => this.menu(true),
|
||||||
|
's': this.toggleShowContent,
|
||||||
|
'1': () => this.reactDirectly('like'),
|
||||||
|
'2': () => this.reactDirectly('love'),
|
||||||
|
'3': () => this.reactDirectly('laugh'),
|
||||||
|
'4': () => this.reactDirectly('hmm'),
|
||||||
|
'5': () => this.reactDirectly('surprise'),
|
||||||
|
'6': () => this.reactDirectly('congrats'),
|
||||||
|
'7': () => this.reactDirectly('angry'),
|
||||||
|
'8': () => this.reactDirectly('confused'),
|
||||||
|
'9': () => this.reactDirectly('rip'),
|
||||||
|
'0': () => this.reactDirectly('pudding'),
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
isRenote(): boolean {
|
||||||
|
return (this.note.renote &&
|
||||||
|
this.note.text == null &&
|
||||||
|
this.note.fileIds.length == 0 &&
|
||||||
|
this.note.poll == null);
|
||||||
|
},
|
||||||
|
|
||||||
|
appearNote(): any {
|
||||||
|
return this.isRenote ? this.note.renote : this.note;
|
||||||
|
},
|
||||||
|
|
||||||
|
reactionsCount(): number {
|
||||||
|
return this.appearNote.reactionCounts
|
||||||
|
? sum(Object.values(this.appearNote.reactionCounts))
|
||||||
|
: 0;
|
||||||
|
},
|
||||||
|
|
||||||
|
title(): string {
|
||||||
|
return new Date(this.appearNote.createdAt).toLocaleString();
|
||||||
|
},
|
||||||
|
|
||||||
|
urls(): string[] {
|
||||||
|
if (this.appearNote.text) {
|
||||||
|
const ast = parse(this.appearNote.text);
|
||||||
|
return ast
|
||||||
|
.filter(t => (t.type == 'url' || t.type == 'link') && !t.silent)
|
||||||
|
.map(t => t.url);
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
reply(viaKeyboard = false) {
|
||||||
|
(this as any).apis.post({
|
||||||
|
reply: this.appearNote,
|
||||||
|
animation: !viaKeyboard,
|
||||||
|
cb: () => {
|
||||||
|
this.focus();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
renote(viaKeyboard = false) {
|
||||||
|
(this as any).apis.post({
|
||||||
|
renote: this.appearNote,
|
||||||
|
animation: !viaKeyboard,
|
||||||
|
cb: () => {
|
||||||
|
this.focus();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
renoteDirectly() {
|
||||||
|
(this as any).api('notes/create', {
|
||||||
|
renoteId: this.appearNote.id
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
react(viaKeyboard = false) {
|
||||||
|
this.blur();
|
||||||
|
(this as any).os.new(MkReactionPicker, {
|
||||||
|
source: this.$refs.reactButton,
|
||||||
|
note: this.appearNote,
|
||||||
|
showFocus: viaKeyboard,
|
||||||
|
animation: !viaKeyboard,
|
||||||
|
compact: opts.mobile,
|
||||||
|
big: opts.mobile
|
||||||
|
}).$once('closed', this.focus);
|
||||||
|
},
|
||||||
|
|
||||||
|
reactDirectly(reaction) {
|
||||||
|
(this as any).api('notes/reactions/create', {
|
||||||
|
noteId: this.appearNote.id,
|
||||||
|
reaction: reaction
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
favorite() {
|
||||||
|
(this as any).api('notes/favorites/create', {
|
||||||
|
noteId: this.appearNote.id
|
||||||
|
}).then(() => {
|
||||||
|
(this as any).os.new(Ok);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
del() {
|
||||||
|
(this as any).api('notes/delete', {
|
||||||
|
noteId: this.appearNote.id
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
menu(viaKeyboard = false) {
|
||||||
|
(this as any).os.new(MkNoteMenu, {
|
||||||
|
source: this.$refs.menuButton,
|
||||||
|
note: this.appearNote,
|
||||||
|
animation: !viaKeyboard,
|
||||||
|
compact: opts.mobile,
|
||||||
|
}).$once('closed', this.focus);
|
||||||
|
},
|
||||||
|
|
||||||
|
toggleShowContent() {
|
||||||
|
this.showContent = !this.showContent;
|
||||||
|
},
|
||||||
|
|
||||||
|
focus() {
|
||||||
|
this.$el.focus();
|
||||||
|
},
|
||||||
|
|
||||||
|
blur() {
|
||||||
|
this.$el.blur();
|
||||||
|
},
|
||||||
|
|
||||||
|
focusBefore() {
|
||||||
|
focus(this.$el, e => e.previousElementSibling);
|
||||||
|
},
|
||||||
|
|
||||||
|
focusAfter() {
|
||||||
|
focus(this.$el, e => e.nextElementSibling);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
@@ -9,8 +9,7 @@ import MiOS from '../../mios';
|
|||||||
*/
|
*/
|
||||||
export default class Stream extends EventEmitter {
|
export default class Stream extends EventEmitter {
|
||||||
private stream: ReconnectingWebsocket;
|
private stream: ReconnectingWebsocket;
|
||||||
private state: string;
|
public state: string;
|
||||||
private buffer: any[];
|
|
||||||
private sharedConnectionPools: Pool[] = [];
|
private sharedConnectionPools: Pool[] = [];
|
||||||
private sharedConnections: SharedConnection[] = [];
|
private sharedConnections: SharedConnection[] = [];
|
||||||
private nonSharedConnections: NonSharedConnection[] = [];
|
private nonSharedConnections: NonSharedConnection[] = [];
|
||||||
@@ -19,7 +18,6 @@ export default class Stream extends EventEmitter {
|
|||||||
super();
|
super();
|
||||||
|
|
||||||
this.state = 'initializing';
|
this.state = 'initializing';
|
||||||
this.buffer = [];
|
|
||||||
|
|
||||||
const user = os.store.state.i;
|
const user = os.store.state.i;
|
||||||
|
|
||||||
@@ -48,6 +46,11 @@ export default class Stream extends EventEmitter {
|
|||||||
this.sharedConnections = this.sharedConnections.filter(c => c !== connection);
|
this.sharedConnections = this.sharedConnections.filter(c => c !== connection);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@autobind
|
||||||
|
public removeSharedConnectionPool(pool: Pool) {
|
||||||
|
this.sharedConnectionPools = this.sharedConnectionPools.filter(p => p !== pool);
|
||||||
|
}
|
||||||
|
|
||||||
@autobind
|
@autobind
|
||||||
public connectToChannel(channel: string, params?: any): NonSharedConnection {
|
public connectToChannel(channel: string, params?: any): NonSharedConnection {
|
||||||
const connection = new NonSharedConnection(this, channel, params);
|
const connection = new NonSharedConnection(this, channel, params);
|
||||||
@@ -70,13 +73,6 @@ export default class Stream extends EventEmitter {
|
|||||||
this.state = 'connected';
|
this.state = 'connected';
|
||||||
this.emit('_connected_');
|
this.emit('_connected_');
|
||||||
|
|
||||||
// バッファーを処理
|
|
||||||
const _buffer = [].concat(this.buffer); // Shallow copy
|
|
||||||
this.buffer = []; // Clear buffer
|
|
||||||
_buffer.forEach(data => {
|
|
||||||
this.send(data); // Resend each buffered messages
|
|
||||||
});
|
|
||||||
|
|
||||||
// チャンネル再接続
|
// チャンネル再接続
|
||||||
if (isReconnect) {
|
if (isReconnect) {
|
||||||
this.sharedConnectionPools.forEach(p => {
|
this.sharedConnectionPools.forEach(p => {
|
||||||
@@ -93,8 +89,10 @@ export default class Stream extends EventEmitter {
|
|||||||
*/
|
*/
|
||||||
@autobind
|
@autobind
|
||||||
private onClose() {
|
private onClose() {
|
||||||
this.state = 'reconnecting';
|
if (this.state == 'connected') {
|
||||||
this.emit('_disconnected_');
|
this.state = 'reconnecting';
|
||||||
|
this.emit('_disconnected_');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -133,12 +131,6 @@ export default class Stream extends EventEmitter {
|
|||||||
body: payload
|
body: payload
|
||||||
};
|
};
|
||||||
|
|
||||||
// まだ接続が確立されていなかったらバッファリングして次に接続した時に送信する
|
|
||||||
if (this.state != 'connected') {
|
|
||||||
this.buffer.push(data);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.stream.send(JSON.stringify(data));
|
this.stream.send(JSON.stringify(data));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -156,7 +148,7 @@ class Pool {
|
|||||||
public channel: string;
|
public channel: string;
|
||||||
public id: string;
|
public id: string;
|
||||||
protected stream: Stream;
|
protected stream: Stream;
|
||||||
private users = 0;
|
public users = 0;
|
||||||
private disposeTimerId: any;
|
private disposeTimerId: any;
|
||||||
private isConnected = false;
|
private isConnected = false;
|
||||||
|
|
||||||
@@ -164,7 +156,14 @@ class Pool {
|
|||||||
this.channel = channel;
|
this.channel = channel;
|
||||||
this.stream = stream;
|
this.stream = stream;
|
||||||
|
|
||||||
this.id = Math.random().toString();
|
this.id = Math.random().toString().substr(2, 8);
|
||||||
|
|
||||||
|
this.stream.on('_disconnected_', this.onStreamDisconnected);
|
||||||
|
}
|
||||||
|
|
||||||
|
@autobind
|
||||||
|
private onStreamDisconnected() {
|
||||||
|
this.isConnected = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@autobind
|
@autobind
|
||||||
@@ -198,6 +197,7 @@ class Pool {
|
|||||||
|
|
||||||
@autobind
|
@autobind
|
||||||
public connect() {
|
public connect() {
|
||||||
|
if (this.isConnected) return;
|
||||||
this.isConnected = true;
|
this.isConnected = true;
|
||||||
this.stream.send('connect', {
|
this.stream.send('connect', {
|
||||||
channel: this.channel,
|
channel: this.channel,
|
||||||
@@ -207,9 +207,9 @@ class Pool {
|
|||||||
|
|
||||||
@autobind
|
@autobind
|
||||||
private disconnect() {
|
private disconnect() {
|
||||||
this.isConnected = false;
|
this.stream.off('_disconnected_', this.onStreamDisconnected);
|
||||||
this.disposeTimerId = null;
|
|
||||||
this.stream.send('disconnect', { id: this.id });
|
this.stream.send('disconnect', { id: this.id });
|
||||||
|
this.stream.removeSharedConnectionPool(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -275,7 +275,7 @@ class NonSharedConnection extends Connection {
|
|||||||
super(stream, channel);
|
super(stream, channel);
|
||||||
|
|
||||||
this.params = params;
|
this.params = params;
|
||||||
this.id = Math.random().toString();
|
this.id = Math.random().toString().substr(2, 8);
|
||||||
|
|
||||||
this.connect();
|
this.connect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
|
|
||||||
|
import profileEditor from './profile-editor.vue';
|
||||||
|
import noteSkeleton from './note-skeleton.vue';
|
||||||
import theme from './theme.vue';
|
import theme from './theme.vue';
|
||||||
import instance from './instance.vue';
|
import instance from './instance.vue';
|
||||||
import cwButton from './cw-button.vue';
|
import cwButton from './cw-button.vue';
|
||||||
@@ -44,6 +46,8 @@ import uiSelect from './ui/select.vue';
|
|||||||
import formButton from './ui/form/button.vue';
|
import formButton from './ui/form/button.vue';
|
||||||
import formRadio from './ui/form/radio.vue';
|
import formRadio from './ui/form/radio.vue';
|
||||||
|
|
||||||
|
Vue.component('mk-profile-editor', profileEditor);
|
||||||
|
Vue.component('mk-note-skeleton', noteSkeleton);
|
||||||
Vue.component('mk-theme', theme);
|
Vue.component('mk-theme', theme);
|
||||||
Vue.component('mk-instance', instance);
|
Vue.component('mk-instance', instance);
|
||||||
Vue.component('mk-cw-button', cwButton);
|
Vue.component('mk-cw-button', cwButton);
|
||||||
|
|||||||
@@ -354,7 +354,7 @@ export default Vue.extend({
|
|||||||
max-width 600px
|
max-width 600px
|
||||||
margin 0 auto
|
margin 0 auto
|
||||||
padding 0
|
padding 0
|
||||||
//background rgba(var(--face), 0.95)
|
background var(--messagingRoomBg)
|
||||||
background-clip content-box
|
background-clip content-box
|
||||||
|
|
||||||
> .new-message
|
> .new-message
|
||||||
|
|||||||
@@ -114,25 +114,23 @@ export default Vue.component('misskey-flavored-markdown', {
|
|||||||
}
|
}
|
||||||
|
|
||||||
case 'mention': {
|
case 'mention': {
|
||||||
return (createElement as any)('a', {
|
return (createElement as any)('router-link', {
|
||||||
attrs: {
|
attrs: {
|
||||||
href: `${url}/@${getAcct(token)}`,
|
to: `/${token.canonical}`,
|
||||||
target: '_blank',
|
|
||||||
dataIsMe: (this as any).i && getAcct((this as any).i) == getAcct(token),
|
dataIsMe: (this as any).i && getAcct((this as any).i) == getAcct(token),
|
||||||
style: 'color:var(--mfmMention);'
|
style: 'color:var(--mfmMention);'
|
||||||
},
|
},
|
||||||
directives: [{
|
directives: [{
|
||||||
name: 'user-preview',
|
name: 'user-preview',
|
||||||
value: token.content
|
value: token.canonical
|
||||||
}]
|
}]
|
||||||
}, token.content);
|
}, token.canonical);
|
||||||
}
|
}
|
||||||
|
|
||||||
case 'hashtag': {
|
case 'hashtag': {
|
||||||
return [createElement('a', {
|
return [createElement('router-link', {
|
||||||
attrs: {
|
attrs: {
|
||||||
href: `${url}/tags/${encodeURIComponent(token.hashtag)}`,
|
to: `/tags/${encodeURIComponent(token.hashtag)}`,
|
||||||
target: '_blank',
|
|
||||||
style: 'color:var(--mfmHashtag);'
|
style: 'color:var(--mfmHashtag);'
|
||||||
}
|
}
|
||||||
}, token.content)];
|
}, token.content)];
|
||||||
|
|||||||
@@ -22,12 +22,34 @@ export default Vue.extend({
|
|||||||
icon: '%fa:link%',
|
icon: '%fa:link%',
|
||||||
text: '%i18n:@copy-link%',
|
text: '%i18n:@copy-link%',
|
||||||
action: this.copyLink
|
action: this.copyLink
|
||||||
}, null, {
|
|
||||||
icon: '%fa:star%',
|
|
||||||
text: '%i18n:@favorite%',
|
|
||||||
action: this.favorite
|
|
||||||
}];
|
}];
|
||||||
|
|
||||||
|
if (this.note.uri) {
|
||||||
|
items.push({
|
||||||
|
icon: '%fa:external-link-square-alt%',
|
||||||
|
text: '%i18n:@remote%',
|
||||||
|
action: () => {
|
||||||
|
window.open(this.note.uri, '_blank');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
items.push(null);
|
||||||
|
|
||||||
|
if (this.note.isFavorited) {
|
||||||
|
items.push({
|
||||||
|
icon: '%fa:star%',
|
||||||
|
text: '%i18n:@unfavorite%',
|
||||||
|
action: this.unfavorite
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
items.push({
|
||||||
|
icon: '%fa:star%',
|
||||||
|
text: '%i18n:@favorite%',
|
||||||
|
action: this.favorite
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
if (this.note.userId == this.$store.state.i.id) {
|
if (this.note.userId == this.$store.state.i.id) {
|
||||||
if ((this.$store.state.i.pinnedNoteIds || []).includes(this.note.id)) {
|
if ((this.$store.state.i.pinnedNoteIds || []).includes(this.note.id)) {
|
||||||
items.push({
|
items.push({
|
||||||
@@ -45,6 +67,7 @@ export default Vue.extend({
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (this.note.userId == this.$store.state.i.id || this.$store.state.i.isAdmin) {
|
if (this.note.userId == this.$store.state.i.id || this.$store.state.i.isAdmin) {
|
||||||
|
items.push(null);
|
||||||
items.push({
|
items.push({
|
||||||
icon: '%fa:trash-alt R%',
|
icon: '%fa:trash-alt R%',
|
||||||
text: '%i18n:@delete%',
|
text: '%i18n:@delete%',
|
||||||
@@ -52,16 +75,6 @@ export default Vue.extend({
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.note.uri) {
|
|
||||||
items.push({
|
|
||||||
icon: '%fa:external-link-square-alt%',
|
|
||||||
text: '%i18n:@remote%',
|
|
||||||
action: () => {
|
|
||||||
window.open(this.note.uri, '_blank');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return items;
|
return items;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -110,6 +123,15 @@ export default Vue.extend({
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
unfavorite() {
|
||||||
|
(this as any).api('notes/favorites/delete', {
|
||||||
|
noteId: this.note.id
|
||||||
|
}).then(() => {
|
||||||
|
(this as any).os.new(Ok);
|
||||||
|
this.destroyDom();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
closed() {
|
closed() {
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
this.destroyDom();
|
this.destroyDom();
|
||||||
|
|||||||
52
src/client/app/common/views/components/note-skeleton.vue
Normal file
52
src/client/app/common/views/components/note-skeleton.vue
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<vue-content-loading v-if="width" :width="width" :height="100" :primary="primary" :secondary="secondary">
|
||||||
|
<circle cx="30" cy="30" r="30" />
|
||||||
|
<rect x="75" y="13" rx="4" ry="4" :width="150 + r1" height="15" />
|
||||||
|
<rect x="75" y="39" rx="4" ry="4" :width="260 + r2" height="10" />
|
||||||
|
<rect x="75" y="59" rx="4" ry="4" :width="230 + r3" height="10" />
|
||||||
|
</vue-content-loading>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import Vue from 'vue';
|
||||||
|
import VueContentLoading from 'vue-content-loading';
|
||||||
|
import * as tinycolor from 'tinycolor2';
|
||||||
|
|
||||||
|
export default Vue.extend({
|
||||||
|
components: {
|
||||||
|
VueContentLoading,
|
||||||
|
},
|
||||||
|
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
width: 0,
|
||||||
|
r1: (Math.random() * 100) - 50,
|
||||||
|
r2: (Math.random() * 100) - 50,
|
||||||
|
r3: (Math.random() * 100) - 50
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
computed: {
|
||||||
|
text(): tinycolor.Instance {
|
||||||
|
const text = tinycolor(getComputedStyle(document.documentElement).getPropertyValue('--text'));
|
||||||
|
return text;
|
||||||
|
},
|
||||||
|
|
||||||
|
primary(): string {
|
||||||
|
return '#' + this.text.clone().toHex();
|
||||||
|
},
|
||||||
|
|
||||||
|
secondary(): string {
|
||||||
|
return '#' + this.text.clone().darken(20).toHex();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
mounted() {
|
||||||
|
let width = this.$el.clientWidth;
|
||||||
|
if (width < 400) width = 400;
|
||||||
|
this.width = width;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
@@ -49,6 +49,7 @@
|
|||||||
|
|
||||||
<div>
|
<div>
|
||||||
<ui-switch v-model="isCat" @change="save(false)">%i18n:@is-cat%</ui-switch>
|
<ui-switch v-model="isCat" @change="save(false)">%i18n:@is-cat%</ui-switch>
|
||||||
|
<ui-switch v-model="isBot" @change="save(false)">%i18n:@is-bot%</ui-switch>
|
||||||
<ui-switch v-model="alwaysMarkNsfw">%i18n:common.always-mark-nsfw%</ui-switch>
|
<ui-switch v-model="alwaysMarkNsfw">%i18n:common.always-mark-nsfw%</ui-switch>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
@@ -58,6 +59,7 @@
|
|||||||
|
|
||||||
<div>
|
<div>
|
||||||
<ui-switch v-model="isLocked" @change="save(false)">%i18n:@is-locked%</ui-switch>
|
<ui-switch v-model="isLocked" @change="save(false)">%i18n:@is-locked%</ui-switch>
|
||||||
|
<ui-switch v-model="carefulBot" @change="save(false)">%i18n:@careful-bot%</ui-switch>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
</ui-card>
|
</ui-card>
|
||||||
@@ -65,7 +67,7 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import { apiUrl, host } from '../../../../config';
|
import { apiUrl, host } from '../../../config';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
data() {
|
data() {
|
||||||
@@ -79,7 +81,9 @@ export default Vue.extend({
|
|||||||
avatarId: null,
|
avatarId: null,
|
||||||
bannerId: null,
|
bannerId: null,
|
||||||
isCat: false,
|
isCat: false,
|
||||||
|
isBot: false,
|
||||||
isLocked: false,
|
isLocked: false,
|
||||||
|
carefulBot: false,
|
||||||
saving: false,
|
saving: false,
|
||||||
avatarUploading: false,
|
avatarUploading: false,
|
||||||
bannerUploading: false
|
bannerUploading: false
|
||||||
@@ -102,7 +106,9 @@ export default Vue.extend({
|
|||||||
this.avatarId = this.$store.state.i.avatarId;
|
this.avatarId = this.$store.state.i.avatarId;
|
||||||
this.bannerId = this.$store.state.i.bannerId;
|
this.bannerId = this.$store.state.i.bannerId;
|
||||||
this.isCat = this.$store.state.i.isCat;
|
this.isCat = this.$store.state.i.isCat;
|
||||||
|
this.isBot = this.$store.state.i.isBot;
|
||||||
this.isLocked = this.$store.state.i.isLocked;
|
this.isLocked = this.$store.state.i.isLocked;
|
||||||
|
this.carefulBot = this.$store.state.i.carefulBot;
|
||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
@@ -161,7 +167,9 @@ export default Vue.extend({
|
|||||||
avatarId: this.avatarId,
|
avatarId: this.avatarId,
|
||||||
bannerId: this.bannerId,
|
bannerId: this.bannerId,
|
||||||
isCat: this.isCat,
|
isCat: this.isCat,
|
||||||
isLocked: this.isLocked
|
isBot: this.isBot,
|
||||||
|
isLocked: this.isLocked,
|
||||||
|
carefulBot: this.carefulBot
|
||||||
}).then(i => {
|
}).then(i => {
|
||||||
this.saving = false;
|
this.saving = false;
|
||||||
this.$store.state.i.avatarId = i.avatarId;
|
this.$store.state.i.avatarId = i.avatarId;
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="ui-card">
|
<div class="ui-card" :class="{ shadow: $store.state.settings.useShadow }">
|
||||||
<header>
|
<header>
|
||||||
<slot name="title"></slot>
|
<slot name="title"></slot>
|
||||||
</header>
|
</header>
|
||||||
@@ -24,7 +24,10 @@ export default Vue.extend({
|
|||||||
margin 16px
|
margin 16px
|
||||||
color var(--faceText)
|
color var(--faceText)
|
||||||
background var(--face)
|
background var(--face)
|
||||||
box-shadow 0 3px 1px -2px rgba(#000, 0.2), 0 2px 2px 0 rgba(#000, 0.14), 0 1px 5px 0 rgba(#000, 0.12)
|
border-radius var(--round)
|
||||||
|
|
||||||
|
&.shadow
|
||||||
|
box-shadow 0 3px 1px -2px rgba(#000, 0.2), 0 2px 2px 0 rgba(#000, 0.14), 0 1px 5px 0 rgba(#000, 0.12)
|
||||||
|
|
||||||
> header
|
> header
|
||||||
padding 16px
|
padding 16px
|
||||||
|
|||||||
@@ -122,17 +122,19 @@ export default Vue.extend({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
if (this.$refs.prefix) {
|
this.$nextTick(() => {
|
||||||
this.$refs.label.style.left = (this.$refs.prefix.offsetLeft + this.$refs.prefix.offsetWidth) + 'px';
|
if (this.$refs.prefix) {
|
||||||
if (this.$refs.prefix.offsetWidth) {
|
this.$refs.label.style.left = (this.$refs.prefix.offsetLeft + this.$refs.prefix.offsetWidth) + 'px';
|
||||||
this.$refs.input.style.paddingLeft = this.$refs.prefix.offsetWidth + 'px';
|
if (this.$refs.prefix.offsetWidth) {
|
||||||
|
this.$refs.input.style.paddingLeft = this.$refs.prefix.offsetWidth + 'px';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
if (this.$refs.suffix) {
|
||||||
if (this.$refs.suffix) {
|
if (this.$refs.suffix.offsetWidth) {
|
||||||
if (this.$refs.suffix.offsetWidth) {
|
this.$refs.input.style.paddingRight = this.$refs.suffix.offsetWidth + 'px';
|
||||||
this.$refs.input.style.paddingRight = this.$refs.suffix.offsetWidth + 'px';
|
}
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
focus() {
|
focus() {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import * as getCaretCoordinates from 'textarea-caret';
|
import * as getCaretCoordinates from 'textarea-caret';
|
||||||
import MkAutocomplete from '../components/autocomplete.vue';
|
import MkAutocomplete from '../components/autocomplete.vue';
|
||||||
import renderAcct from '../../../../../misc/acct/render';
|
import { toASCII } from 'punycode';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
bind(el, binding, vn) {
|
bind(el, binding, vn) {
|
||||||
@@ -188,7 +188,7 @@ class Autocomplete {
|
|||||||
const trimmedBefore = before.substring(0, before.lastIndexOf('@'));
|
const trimmedBefore = before.substring(0, before.lastIndexOf('@'));
|
||||||
const after = source.substr(caret);
|
const after = source.substr(caret);
|
||||||
|
|
||||||
const acct = renderAcct(value);
|
const acct = value.host === null ? value.username : `${value.username}@${toASCII(value.host)}`;
|
||||||
|
|
||||||
// 挿入
|
// 挿入
|
||||||
this.text = `${trimmedBefore}@${acct} ${after}`;
|
this.text = `${trimmedBefore}@${acct} ${after}`;
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
<p :class="$style.fetching" v-if="fetching">%fa:spinner .pulse .fw%%i18n:common.loading%<mk-ellipsis/></p>
|
<p :class="$style.fetching" v-if="fetching">%fa:spinner .pulse .fw%%i18n:common.loading%<mk-ellipsis/></p>
|
||||||
<div :class="$style.stream" v-if="!fetching && images.length > 0">
|
<div :class="$style.stream" v-if="!fetching && images.length > 0">
|
||||||
<div v-for="image in images" :class="$style.img" :style="`background-image: url(${image.url})`"></div>
|
<div v-for="image in images" :class="$style.img" :style="`background-image: url(${image.thumbnailUrl || image.url})`"></div>
|
||||||
</div>
|
</div>
|
||||||
<p :class="$style.empty" v-if="!fetching && images.length == 0">%i18n:@no-photos%</p>
|
<p :class="$style.empty" v-if="!fetching && images.length == 0">%i18n:@no-photos%</p>
|
||||||
</mk-widget-container>
|
</mk-widget-container>
|
||||||
@@ -73,9 +73,6 @@ export default define({
|
|||||||
border-radius 8px
|
border-radius 8px
|
||||||
|
|
||||||
.stream
|
.stream
|
||||||
display -webkit-flex
|
|
||||||
display -moz-flex
|
|
||||||
display -ms-flex
|
|
||||||
display flex
|
display flex
|
||||||
justify-content center
|
justify-content center
|
||||||
flex-wrap wrap
|
flex-wrap wrap
|
||||||
|
|||||||
@@ -114,7 +114,7 @@ export default define({
|
|||||||
this.connection.on('stats', this.onStats);
|
this.connection.on('stats', this.onStats);
|
||||||
this.connection.on('statsLog', this.onStatsLog);
|
this.connection.on('statsLog', this.onStatsLog);
|
||||||
this.connection.send('requestLog',{
|
this.connection.send('requestLog',{
|
||||||
id: Math.random().toString()
|
id: Math.random().toString().substr(2, 8)
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
beforeDestroy() {
|
beforeDestroy() {
|
||||||
|
|||||||
@@ -44,7 +44,6 @@ export default define({
|
|||||||
},
|
},
|
||||||
fetch() {
|
fetch() {
|
||||||
fetch(`https://api.rss2json.com/v1/api.json?rss_url=${this.props.url}`, {
|
fetch(`https://api.rss2json.com/v1/api.json?rss_url=${this.props.url}`, {
|
||||||
cache: 'no-cache'
|
|
||||||
}).then(res => {
|
}).then(res => {
|
||||||
res.json().then(feed => {
|
res.json().then(feed => {
|
||||||
this.items = feed.items;
|
this.items = feed.items;
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ export default Vue.extend({
|
|||||||
this.connection.on('stats', this.onStats);
|
this.connection.on('stats', this.onStats);
|
||||||
this.connection.on('statsLog', this.onStatsLog);
|
this.connection.on('statsLog', this.onStatsLog);
|
||||||
this.connection.send('requestLog', {
|
this.connection.send('requestLog', {
|
||||||
id: Math.random().toString()
|
id: Math.random().toString().substr(2, 8)
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
beforeDestroy() {
|
beforeDestroy() {
|
||||||
|
|||||||
@@ -6,13 +6,17 @@ export default (os: OS) => opts => {
|
|||||||
const o = opts || {};
|
const o = opts || {};
|
||||||
if (o.renote) {
|
if (o.renote) {
|
||||||
const vm = os.new(RenoteFormWindow, {
|
const vm = os.new(RenoteFormWindow, {
|
||||||
note: o.renote
|
note: o.renote,
|
||||||
|
animation: o.animation == null ? true : o.animation
|
||||||
});
|
});
|
||||||
|
if (o.cb) vm.$once('closed', o.cb);
|
||||||
document.body.appendChild(vm.$el);
|
document.body.appendChild(vm.$el);
|
||||||
} else {
|
} else {
|
||||||
const vm = os.new(PostFormWindow, {
|
const vm = os.new(PostFormWindow, {
|
||||||
reply: o.reply
|
reply: o.reply,
|
||||||
|
animation: o.animation == null ? true : o.animation
|
||||||
});
|
});
|
||||||
|
if (o.cb) vm.$once('closed', o.cb);
|
||||||
document.body.appendChild(vm.$el);
|
document.body.appendChild(vm.$el);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import updateAvatar from './api/update-avatar';
|
|||||||
import updateBanner from './api/update-banner';
|
import updateBanner from './api/update-banner';
|
||||||
|
|
||||||
import MkIndex from './views/pages/index.vue';
|
import MkIndex from './views/pages/index.vue';
|
||||||
|
import MkHome from './views/pages/home.vue';
|
||||||
import MkDeck from './views/pages/deck/deck.vue';
|
import MkDeck from './views/pages/deck/deck.vue';
|
||||||
import MkAdmin from './views/pages/admin/admin.vue';
|
import MkAdmin from './views/pages/admin/admin.vue';
|
||||||
import MkStats from './views/pages/stats/stats.vue';
|
import MkStats from './views/pages/stats/stats.vue';
|
||||||
@@ -54,6 +55,7 @@ init(async (launch) => {
|
|||||||
mode: 'history',
|
mode: 'history',
|
||||||
routes: [
|
routes: [
|
||||||
{ path: '/', name: 'index', component: MkIndex },
|
{ path: '/', name: 'index', component: MkIndex },
|
||||||
|
{ path: '/home', name: 'home', component: MkHome },
|
||||||
{ path: '/deck', name: 'deck', component: MkDeck },
|
{ path: '/deck', name: 'deck', component: MkDeck },
|
||||||
{ path: '/admin', name: 'admin', component: MkAdmin },
|
{ path: '/admin', name: 'admin', component: MkAdmin },
|
||||||
{ path: '/stats', name: 'stats', component: MkStats },
|
{ path: '/stats', name: 'stats', component: MkStats },
|
||||||
@@ -64,11 +66,11 @@ init(async (launch) => {
|
|||||||
{ path: '/i/drive/folder/:folder', component: MkDrive },
|
{ path: '/i/drive/folder/:folder', component: MkDrive },
|
||||||
{ path: '/selectdrive', component: MkSelectDrive },
|
{ path: '/selectdrive', component: MkSelectDrive },
|
||||||
{ path: '/search', component: MkSearch },
|
{ path: '/search', component: MkSearch },
|
||||||
{ path: '/tags/:tag', component: MkTag },
|
{ path: '/tags/:tag', name: 'tag', component: MkTag },
|
||||||
{ path: '/share', component: MkShare },
|
{ path: '/share', component: MkShare },
|
||||||
{ path: '/reversi/:game?', component: MkReversi },
|
{ path: '/reversi/:game?', component: MkReversi },
|
||||||
{ path: '/@:user', component: MkUser },
|
{ path: '/@:user', name: 'user', component: MkUser },
|
||||||
{ path: '/notes/:note', component: MkNote },
|
{ path: '/notes/:note', name: 'note', component: MkNote },
|
||||||
{ path: '/authorize-follow', component: MkFollow }
|
{ path: '/authorize-follow', component: MkFollow }
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
tooltips: {
|
tooltips: {
|
||||||
intersect: false,
|
intersect: false,
|
||||||
mode: 'x',
|
mode: 'index',
|
||||||
position: 'nearest'
|
position: 'nearest'
|
||||||
}
|
}
|
||||||
}, this.opts || {}));
|
}, this.opts || {}));
|
||||||
|
|||||||
@@ -3,6 +3,10 @@
|
|||||||
<header>
|
<header>
|
||||||
<b>%i18n:@title%:</b>
|
<b>%i18n:@title%:</b>
|
||||||
<select v-model="chartType">
|
<select v-model="chartType">
|
||||||
|
<optgroup label="%i18n:@federation%">
|
||||||
|
<option value="federation-instances">%i18n:@charts.federation-instances%</option>
|
||||||
|
<option value="federation-instances-total">%i18n:@charts.federation-instances-total%</option>
|
||||||
|
</optgroup>
|
||||||
<optgroup label="%i18n:@users%">
|
<optgroup label="%i18n:@users%">
|
||||||
<option value="users">%i18n:@charts.users%</option>
|
<option value="users">%i18n:@charts.users%</option>
|
||||||
<option value="users-total">%i18n:@charts.users-total%</option>
|
<option value="users-total">%i18n:@charts.users-total%</option>
|
||||||
@@ -56,6 +60,11 @@ const rgba = (color: string): string => {
|
|||||||
return color.replace('rgb', 'rgba').replace(')', ', 0.1)');
|
return color.replace('rgb', 'rgba').replace(')', ', 0.1)');
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const limit = 35;
|
||||||
|
|
||||||
|
const sum = (...arr) => arr.reduce((r, a) => r.map((b, i) => a[i] + b));
|
||||||
|
const negate = arr => arr.map(x => -x);
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
components: {
|
components: {
|
||||||
XChart
|
XChart
|
||||||
@@ -63,6 +72,7 @@ export default Vue.extend({
|
|||||||
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
now: null,
|
||||||
chart: null,
|
chart: null,
|
||||||
chartType: 'notes',
|
chartType: 'notes',
|
||||||
span: 'hour'
|
span: 'hour'
|
||||||
@@ -73,6 +83,8 @@ export default Vue.extend({
|
|||||||
data(): any {
|
data(): any {
|
||||||
if (this.chart == null) return null;
|
if (this.chart == null) return null;
|
||||||
switch (this.chartType) {
|
switch (this.chartType) {
|
||||||
|
case 'federation-instances': return this.federationInstancesChart(false);
|
||||||
|
case 'federation-instances-total': return this.federationInstancesChart(true);
|
||||||
case 'users': return this.usersChart(false);
|
case 'users': return this.usersChart(false);
|
||||||
case 'users-total': return this.usersChart(true);
|
case 'users-total': return this.usersChart(true);
|
||||||
case 'notes': return this.notesChart('combined');
|
case 'notes': return this.notesChart('combined');
|
||||||
@@ -90,32 +102,88 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
stats(): any[] {
|
stats(): any[] {
|
||||||
return (
|
const stats =
|
||||||
this.span == 'day' ? this.chart.perDay :
|
this.span == 'day' ? this.chart.perDay :
|
||||||
this.span == 'hour' ? this.chart.perHour :
|
this.span == 'hour' ? this.chart.perHour :
|
||||||
null
|
null;
|
||||||
);
|
|
||||||
|
return stats;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
created() {
|
async created() {
|
||||||
(this as any).api('chart', {
|
this.now = new Date();
|
||||||
limit: 35
|
|
||||||
}).then(chart => {
|
const [perHour, perDay] = await Promise.all([Promise.all([
|
||||||
this.chart = chart;
|
(this as any).api('charts/federation', { limit: limit, span: 'hour' }),
|
||||||
});
|
(this as any).api('charts/users', { limit: limit, span: 'hour' }),
|
||||||
|
(this as any).api('charts/notes', { limit: limit, span: 'hour' }),
|
||||||
|
(this as any).api('charts/drive', { limit: limit, span: 'hour' }),
|
||||||
|
(this as any).api('charts/network', { limit: limit, span: 'hour' })
|
||||||
|
]), Promise.all([
|
||||||
|
(this as any).api('charts/federation', { limit: limit, span: 'day' }),
|
||||||
|
(this as any).api('charts/users', { limit: limit, span: 'day' }),
|
||||||
|
(this as any).api('charts/notes', { limit: limit, span: 'day' }),
|
||||||
|
(this as any).api('charts/drive', { limit: limit, span: 'day' }),
|
||||||
|
(this as any).api('charts/network', { limit: limit, span: 'day' })
|
||||||
|
])]);
|
||||||
|
|
||||||
|
const chart = {
|
||||||
|
perHour: {
|
||||||
|
federation: perHour[0],
|
||||||
|
users: perHour[1],
|
||||||
|
notes: perHour[2],
|
||||||
|
drive: perHour[3],
|
||||||
|
network: perHour[4]
|
||||||
|
},
|
||||||
|
perDay: {
|
||||||
|
federation: perDay[0],
|
||||||
|
users: perDay[1],
|
||||||
|
notes: perDay[2],
|
||||||
|
drive: perDay[3],
|
||||||
|
network: perDay[4]
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
this.chart = chart;
|
||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
notesChart(type: string): any {
|
getDate(i: number) {
|
||||||
const data = this.stats.slice().reverse().map(x => ({
|
const y = this.now.getFullYear();
|
||||||
date: new Date(x.date),
|
const m = this.now.getMonth();
|
||||||
normal: type == 'local' ? x.notes.local.diffs.normal : type == 'remote' ? x.notes.remote.diffs.normal : x.notes.local.diffs.normal + x.notes.remote.diffs.normal,
|
const d = this.now.getDate();
|
||||||
reply: type == 'local' ? x.notes.local.diffs.reply : type == 'remote' ? x.notes.remote.diffs.reply : x.notes.local.diffs.reply + x.notes.remote.diffs.reply,
|
const h = this.now.getHours();
|
||||||
renote: type == 'local' ? x.notes.local.diffs.renote : type == 'remote' ? x.notes.remote.diffs.renote : x.notes.local.diffs.renote + x.notes.remote.diffs.renote,
|
|
||||||
all: type == 'local' ? (x.notes.local.inc + -x.notes.local.dec) : type == 'remote' ? (x.notes.remote.inc + -x.notes.remote.dec) : (x.notes.local.inc + -x.notes.local.dec) + (x.notes.remote.inc + -x.notes.remote.dec)
|
|
||||||
}));
|
|
||||||
|
|
||||||
|
return (
|
||||||
|
this.span == 'day' ? new Date(y, m, d - i) :
|
||||||
|
this.span == 'hour' ? new Date(y, m, d, h - i) :
|
||||||
|
null
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
format(arr) {
|
||||||
|
return arr.map((v, i) => ({ t: this.getDate(i).getTime(), y: v }));
|
||||||
|
},
|
||||||
|
|
||||||
|
federationInstancesChart(total: boolean): any {
|
||||||
|
return [{
|
||||||
|
datasets: [{
|
||||||
|
label: 'Instances',
|
||||||
|
fill: true,
|
||||||
|
backgroundColor: rgba(colors.localPlus),
|
||||||
|
borderColor: colors.localPlus,
|
||||||
|
borderWidth: 2,
|
||||||
|
pointBackgroundColor: '#fff',
|
||||||
|
lineTension: 0,
|
||||||
|
data: this.format(total
|
||||||
|
? this.stats.federation.instance.total
|
||||||
|
: sum(this.stats.federation.instance.inc, negate(this.stats.federation.instance.dec)))
|
||||||
|
}]
|
||||||
|
}];
|
||||||
|
},
|
||||||
|
|
||||||
|
notesChart(type: string): any {
|
||||||
return [{
|
return [{
|
||||||
datasets: [{
|
datasets: [{
|
||||||
label: 'All',
|
label: 'All',
|
||||||
@@ -125,7 +193,10 @@ export default Vue.extend({
|
|||||||
borderDash: [4, 4],
|
borderDash: [4, 4],
|
||||||
pointBackgroundColor: '#fff',
|
pointBackgroundColor: '#fff',
|
||||||
lineTension: 0,
|
lineTension: 0,
|
||||||
data: data.map(x => ({ t: x.date, y: x.all }))
|
data: this.format(type == 'combined'
|
||||||
|
? sum(this.stats.notes.local.inc, negate(this.stats.notes.local.dec), this.stats.notes.remote.inc, negate(this.stats.notes.remote.dec))
|
||||||
|
: sum(this.stats.notes[type].inc, negate(this.stats.notes[type].dec))
|
||||||
|
)
|
||||||
}, {
|
}, {
|
||||||
label: 'Renotes',
|
label: 'Renotes',
|
||||||
fill: true,
|
fill: true,
|
||||||
@@ -134,7 +205,10 @@ export default Vue.extend({
|
|||||||
borderWidth: 2,
|
borderWidth: 2,
|
||||||
pointBackgroundColor: '#fff',
|
pointBackgroundColor: '#fff',
|
||||||
lineTension: 0,
|
lineTension: 0,
|
||||||
data: data.map(x => ({ t: x.date, y: x.renote }))
|
data: this.format(type == 'combined'
|
||||||
|
? sum(this.stats.notes.local.diffs.renote, this.stats.notes.remote.diffs.renote)
|
||||||
|
: this.stats.notes[type].diffs.renote
|
||||||
|
)
|
||||||
}, {
|
}, {
|
||||||
label: 'Replies',
|
label: 'Replies',
|
||||||
fill: true,
|
fill: true,
|
||||||
@@ -143,7 +217,10 @@ export default Vue.extend({
|
|||||||
borderWidth: 2,
|
borderWidth: 2,
|
||||||
pointBackgroundColor: '#fff',
|
pointBackgroundColor: '#fff',
|
||||||
lineTension: 0,
|
lineTension: 0,
|
||||||
data: data.map(x => ({ t: x.date, y: x.reply }))
|
data: this.format(type == 'combined'
|
||||||
|
? sum(this.stats.notes.local.diffs.reply, this.stats.notes.remote.diffs.reply)
|
||||||
|
: this.stats.notes[type].diffs.reply
|
||||||
|
)
|
||||||
}, {
|
}, {
|
||||||
label: 'Normal',
|
label: 'Normal',
|
||||||
fill: true,
|
fill: true,
|
||||||
@@ -152,7 +229,10 @@ export default Vue.extend({
|
|||||||
borderWidth: 2,
|
borderWidth: 2,
|
||||||
pointBackgroundColor: '#fff',
|
pointBackgroundColor: '#fff',
|
||||||
lineTension: 0,
|
lineTension: 0,
|
||||||
data: data.map(x => ({ t: x.date, y: x.normal }))
|
data: this.format(type == 'combined'
|
||||||
|
? sum(this.stats.notes.local.diffs.normal, this.stats.notes.remote.diffs.normal)
|
||||||
|
: this.stats.notes[type].diffs.normal
|
||||||
|
)
|
||||||
}]
|
}]
|
||||||
}, {
|
}, {
|
||||||
scales: {
|
scales: {
|
||||||
@@ -176,12 +256,6 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
notesTotalChart(): any {
|
notesTotalChart(): any {
|
||||||
const data = this.stats.slice().reverse().map(x => ({
|
|
||||||
date: new Date(x.date),
|
|
||||||
localCount: x.notes.local.total,
|
|
||||||
remoteCount: x.notes.remote.total
|
|
||||||
}));
|
|
||||||
|
|
||||||
return [{
|
return [{
|
||||||
datasets: [{
|
datasets: [{
|
||||||
label: 'Combined',
|
label: 'Combined',
|
||||||
@@ -191,7 +265,7 @@ export default Vue.extend({
|
|||||||
borderDash: [4, 4],
|
borderDash: [4, 4],
|
||||||
pointBackgroundColor: '#fff',
|
pointBackgroundColor: '#fff',
|
||||||
lineTension: 0,
|
lineTension: 0,
|
||||||
data: data.map(x => ({ t: x.date, y: x.remoteCount + x.localCount }))
|
data: this.format(sum(this.stats.notes.local.total, this.stats.notes.remote.total))
|
||||||
}, {
|
}, {
|
||||||
label: 'Local',
|
label: 'Local',
|
||||||
fill: true,
|
fill: true,
|
||||||
@@ -200,7 +274,7 @@ export default Vue.extend({
|
|||||||
borderWidth: 2,
|
borderWidth: 2,
|
||||||
pointBackgroundColor: '#fff',
|
pointBackgroundColor: '#fff',
|
||||||
lineTension: 0,
|
lineTension: 0,
|
||||||
data: data.map(x => ({ t: x.date, y: x.localCount }))
|
data: this.format(this.stats.notes.local.total)
|
||||||
}, {
|
}, {
|
||||||
label: 'Remote',
|
label: 'Remote',
|
||||||
fill: true,
|
fill: true,
|
||||||
@@ -209,7 +283,7 @@ export default Vue.extend({
|
|||||||
borderWidth: 2,
|
borderWidth: 2,
|
||||||
pointBackgroundColor: '#fff',
|
pointBackgroundColor: '#fff',
|
||||||
lineTension: 0,
|
lineTension: 0,
|
||||||
data: data.map(x => ({ t: x.date, y: x.remoteCount }))
|
data: this.format(this.stats.notes.remote.total)
|
||||||
}]
|
}]
|
||||||
}, {
|
}, {
|
||||||
scales: {
|
scales: {
|
||||||
@@ -233,12 +307,6 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
usersChart(total: boolean): any {
|
usersChart(total: boolean): any {
|
||||||
const data = this.stats.slice().reverse().map(x => ({
|
|
||||||
date: new Date(x.date),
|
|
||||||
localCount: total ? x.users.local.total : (x.users.local.inc + -x.users.local.dec),
|
|
||||||
remoteCount: total ? x.users.remote.total : (x.users.remote.inc + -x.users.remote.dec)
|
|
||||||
}));
|
|
||||||
|
|
||||||
return [{
|
return [{
|
||||||
datasets: [{
|
datasets: [{
|
||||||
label: 'Combined',
|
label: 'Combined',
|
||||||
@@ -248,7 +316,10 @@ export default Vue.extend({
|
|||||||
borderDash: [4, 4],
|
borderDash: [4, 4],
|
||||||
pointBackgroundColor: '#fff',
|
pointBackgroundColor: '#fff',
|
||||||
lineTension: 0,
|
lineTension: 0,
|
||||||
data: data.map(x => ({ t: x.date, y: x.remoteCount + x.localCount }))
|
data: this.format(total
|
||||||
|
? sum(this.stats.users.local.total, this.stats.users.remote.total)
|
||||||
|
: sum(this.stats.users.local.inc, negate(this.stats.users.local.dec), this.stats.users.remote.inc, negate(this.stats.users.remote.dec))
|
||||||
|
)
|
||||||
}, {
|
}, {
|
||||||
label: 'Local',
|
label: 'Local',
|
||||||
fill: true,
|
fill: true,
|
||||||
@@ -257,7 +328,10 @@ export default Vue.extend({
|
|||||||
borderWidth: 2,
|
borderWidth: 2,
|
||||||
pointBackgroundColor: '#fff',
|
pointBackgroundColor: '#fff',
|
||||||
lineTension: 0,
|
lineTension: 0,
|
||||||
data: data.map(x => ({ t: x.date, y: x.localCount }))
|
data: this.format(total
|
||||||
|
? this.stats.users.local.total
|
||||||
|
: sum(this.stats.users.local.inc, negate(this.stats.users.local.dec))
|
||||||
|
)
|
||||||
}, {
|
}, {
|
||||||
label: 'Remote',
|
label: 'Remote',
|
||||||
fill: true,
|
fill: true,
|
||||||
@@ -266,7 +340,10 @@ export default Vue.extend({
|
|||||||
borderWidth: 2,
|
borderWidth: 2,
|
||||||
pointBackgroundColor: '#fff',
|
pointBackgroundColor: '#fff',
|
||||||
lineTension: 0,
|
lineTension: 0,
|
||||||
data: data.map(x => ({ t: x.date, y: x.remoteCount }))
|
data: this.format(total
|
||||||
|
? this.stats.users.remote.total
|
||||||
|
: sum(this.stats.users.remote.inc, negate(this.stats.users.remote.dec))
|
||||||
|
)
|
||||||
}]
|
}]
|
||||||
}, {
|
}, {
|
||||||
scales: {
|
scales: {
|
||||||
@@ -290,14 +367,6 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
driveChart(): any {
|
driveChart(): any {
|
||||||
const data = this.stats.slice().reverse().map(x => ({
|
|
||||||
date: new Date(x.date),
|
|
||||||
localInc: x.drive.local.incSize,
|
|
||||||
localDec: -x.drive.local.decSize,
|
|
||||||
remoteInc: x.drive.remote.incSize,
|
|
||||||
remoteDec: -x.drive.remote.decSize,
|
|
||||||
}));
|
|
||||||
|
|
||||||
return [{
|
return [{
|
||||||
datasets: [{
|
datasets: [{
|
||||||
label: 'All',
|
label: 'All',
|
||||||
@@ -307,7 +376,7 @@ export default Vue.extend({
|
|||||||
borderDash: [4, 4],
|
borderDash: [4, 4],
|
||||||
pointBackgroundColor: '#fff',
|
pointBackgroundColor: '#fff',
|
||||||
lineTension: 0,
|
lineTension: 0,
|
||||||
data: data.map(x => ({ t: x.date, y: x.localInc + x.localDec + x.remoteInc + x.remoteDec }))
|
data: this.format(sum(this.stats.drive.local.incSize, negate(this.stats.drive.local.decSize), this.stats.drive.remote.incSize, negate(this.stats.drive.remote.decSize)))
|
||||||
}, {
|
}, {
|
||||||
label: 'Local +',
|
label: 'Local +',
|
||||||
fill: true,
|
fill: true,
|
||||||
@@ -316,7 +385,7 @@ export default Vue.extend({
|
|||||||
borderWidth: 2,
|
borderWidth: 2,
|
||||||
pointBackgroundColor: '#fff',
|
pointBackgroundColor: '#fff',
|
||||||
lineTension: 0,
|
lineTension: 0,
|
||||||
data: data.map(x => ({ t: x.date, y: x.localInc }))
|
data: this.format(this.stats.drive.local.incSize)
|
||||||
}, {
|
}, {
|
||||||
label: 'Local -',
|
label: 'Local -',
|
||||||
fill: true,
|
fill: true,
|
||||||
@@ -325,7 +394,7 @@ export default Vue.extend({
|
|||||||
borderWidth: 2,
|
borderWidth: 2,
|
||||||
pointBackgroundColor: '#fff',
|
pointBackgroundColor: '#fff',
|
||||||
lineTension: 0,
|
lineTension: 0,
|
||||||
data: data.map(x => ({ t: x.date, y: x.localDec }))
|
data: this.format(negate(this.stats.drive.local.decSize))
|
||||||
}, {
|
}, {
|
||||||
label: 'Remote +',
|
label: 'Remote +',
|
||||||
fill: true,
|
fill: true,
|
||||||
@@ -334,7 +403,7 @@ export default Vue.extend({
|
|||||||
borderWidth: 2,
|
borderWidth: 2,
|
||||||
pointBackgroundColor: '#fff',
|
pointBackgroundColor: '#fff',
|
||||||
lineTension: 0,
|
lineTension: 0,
|
||||||
data: data.map(x => ({ t: x.date, y: x.remoteInc }))
|
data: this.format(this.stats.drive.remote.incSize)
|
||||||
}, {
|
}, {
|
||||||
label: 'Remote -',
|
label: 'Remote -',
|
||||||
fill: true,
|
fill: true,
|
||||||
@@ -343,7 +412,7 @@ export default Vue.extend({
|
|||||||
borderWidth: 2,
|
borderWidth: 2,
|
||||||
pointBackgroundColor: '#fff',
|
pointBackgroundColor: '#fff',
|
||||||
lineTension: 0,
|
lineTension: 0,
|
||||||
data: data.map(x => ({ t: x.date, y: x.remoteDec }))
|
data: this.format(negate(this.stats.drive.remote.decSize))
|
||||||
}]
|
}]
|
||||||
}, {
|
}, {
|
||||||
scales: {
|
scales: {
|
||||||
@@ -367,12 +436,6 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
driveTotalChart(): any {
|
driveTotalChart(): any {
|
||||||
const data = this.stats.slice().reverse().map(x => ({
|
|
||||||
date: new Date(x.date),
|
|
||||||
localSize: x.drive.local.totalSize,
|
|
||||||
remoteSize: x.drive.remote.totalSize
|
|
||||||
}));
|
|
||||||
|
|
||||||
return [{
|
return [{
|
||||||
datasets: [{
|
datasets: [{
|
||||||
label: 'Combined',
|
label: 'Combined',
|
||||||
@@ -382,7 +445,7 @@ export default Vue.extend({
|
|||||||
borderDash: [4, 4],
|
borderDash: [4, 4],
|
||||||
pointBackgroundColor: '#fff',
|
pointBackgroundColor: '#fff',
|
||||||
lineTension: 0,
|
lineTension: 0,
|
||||||
data: data.map(x => ({ t: x.date, y: x.remoteSize + x.localSize }))
|
data: this.format(sum(this.stats.drive.local.totalSize, this.stats.drive.remote.totalSize))
|
||||||
}, {
|
}, {
|
||||||
label: 'Local',
|
label: 'Local',
|
||||||
fill: true,
|
fill: true,
|
||||||
@@ -391,7 +454,7 @@ export default Vue.extend({
|
|||||||
borderWidth: 2,
|
borderWidth: 2,
|
||||||
pointBackgroundColor: '#fff',
|
pointBackgroundColor: '#fff',
|
||||||
lineTension: 0,
|
lineTension: 0,
|
||||||
data: data.map(x => ({ t: x.date, y: x.localSize }))
|
data: this.format(this.stats.drive.local.totalSize)
|
||||||
}, {
|
}, {
|
||||||
label: 'Remote',
|
label: 'Remote',
|
||||||
fill: true,
|
fill: true,
|
||||||
@@ -400,7 +463,7 @@ export default Vue.extend({
|
|||||||
borderWidth: 2,
|
borderWidth: 2,
|
||||||
pointBackgroundColor: '#fff',
|
pointBackgroundColor: '#fff',
|
||||||
lineTension: 0,
|
lineTension: 0,
|
||||||
data: data.map(x => ({ t: x.date, y: x.remoteSize }))
|
data: this.format(this.stats.drive.remote.totalSize)
|
||||||
}]
|
}]
|
||||||
}, {
|
}, {
|
||||||
scales: {
|
scales: {
|
||||||
@@ -424,14 +487,6 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
driveFilesChart(): any {
|
driveFilesChart(): any {
|
||||||
const data = this.stats.slice().reverse().map(x => ({
|
|
||||||
date: new Date(x.date),
|
|
||||||
localInc: x.drive.local.incCount,
|
|
||||||
localDec: -x.drive.local.decCount,
|
|
||||||
remoteInc: x.drive.remote.incCount,
|
|
||||||
remoteDec: -x.drive.remote.decCount
|
|
||||||
}));
|
|
||||||
|
|
||||||
return [{
|
return [{
|
||||||
datasets: [{
|
datasets: [{
|
||||||
label: 'All',
|
label: 'All',
|
||||||
@@ -441,7 +496,7 @@ export default Vue.extend({
|
|||||||
borderDash: [4, 4],
|
borderDash: [4, 4],
|
||||||
pointBackgroundColor: '#fff',
|
pointBackgroundColor: '#fff',
|
||||||
lineTension: 0,
|
lineTension: 0,
|
||||||
data: data.map(x => ({ t: x.date, y: x.localInc + x.localDec + x.remoteInc + x.remoteDec }))
|
data: this.format(sum(this.stats.drive.local.incCount, negate(this.stats.drive.local.decCount), this.stats.drive.remote.incCount, negate(this.stats.drive.remote.decCount)))
|
||||||
}, {
|
}, {
|
||||||
label: 'Local +',
|
label: 'Local +',
|
||||||
fill: true,
|
fill: true,
|
||||||
@@ -450,7 +505,7 @@ export default Vue.extend({
|
|||||||
borderWidth: 2,
|
borderWidth: 2,
|
||||||
pointBackgroundColor: '#fff',
|
pointBackgroundColor: '#fff',
|
||||||
lineTension: 0,
|
lineTension: 0,
|
||||||
data: data.map(x => ({ t: x.date, y: x.localInc }))
|
data: this.format(this.stats.drive.local.incCount)
|
||||||
}, {
|
}, {
|
||||||
label: 'Local -',
|
label: 'Local -',
|
||||||
fill: true,
|
fill: true,
|
||||||
@@ -459,7 +514,7 @@ export default Vue.extend({
|
|||||||
borderWidth: 2,
|
borderWidth: 2,
|
||||||
pointBackgroundColor: '#fff',
|
pointBackgroundColor: '#fff',
|
||||||
lineTension: 0,
|
lineTension: 0,
|
||||||
data: data.map(x => ({ t: x.date, y: x.localDec }))
|
data: this.format(negate(this.stats.drive.local.decCount))
|
||||||
}, {
|
}, {
|
||||||
label: 'Remote +',
|
label: 'Remote +',
|
||||||
fill: true,
|
fill: true,
|
||||||
@@ -468,7 +523,7 @@ export default Vue.extend({
|
|||||||
borderWidth: 2,
|
borderWidth: 2,
|
||||||
pointBackgroundColor: '#fff',
|
pointBackgroundColor: '#fff',
|
||||||
lineTension: 0,
|
lineTension: 0,
|
||||||
data: data.map(x => ({ t: x.date, y: x.remoteInc }))
|
data: this.format(this.stats.drive.remote.incCount)
|
||||||
}, {
|
}, {
|
||||||
label: 'Remote -',
|
label: 'Remote -',
|
||||||
fill: true,
|
fill: true,
|
||||||
@@ -477,7 +532,7 @@ export default Vue.extend({
|
|||||||
borderWidth: 2,
|
borderWidth: 2,
|
||||||
pointBackgroundColor: '#fff',
|
pointBackgroundColor: '#fff',
|
||||||
lineTension: 0,
|
lineTension: 0,
|
||||||
data: data.map(x => ({ t: x.date, y: x.remoteDec }))
|
data: this.format(negate(this.stats.drive.remote.decCount))
|
||||||
}]
|
}]
|
||||||
}, {
|
}, {
|
||||||
scales: {
|
scales: {
|
||||||
@@ -501,12 +556,6 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
driveFilesTotalChart(): any {
|
driveFilesTotalChart(): any {
|
||||||
const data = this.stats.slice().reverse().map(x => ({
|
|
||||||
date: new Date(x.date),
|
|
||||||
localCount: x.drive.local.totalCount,
|
|
||||||
remoteCount: x.drive.remote.totalCount,
|
|
||||||
}));
|
|
||||||
|
|
||||||
return [{
|
return [{
|
||||||
datasets: [{
|
datasets: [{
|
||||||
label: 'Combined',
|
label: 'Combined',
|
||||||
@@ -516,7 +565,7 @@ export default Vue.extend({
|
|||||||
borderDash: [4, 4],
|
borderDash: [4, 4],
|
||||||
pointBackgroundColor: '#fff',
|
pointBackgroundColor: '#fff',
|
||||||
lineTension: 0,
|
lineTension: 0,
|
||||||
data: data.map(x => ({ t: x.date, y: x.localCount + x.remoteCount }))
|
data: this.format(sum(this.stats.drive.local.totalCount, this.stats.drive.remote.totalCount))
|
||||||
}, {
|
}, {
|
||||||
label: 'Local',
|
label: 'Local',
|
||||||
fill: true,
|
fill: true,
|
||||||
@@ -525,7 +574,7 @@ export default Vue.extend({
|
|||||||
borderWidth: 2,
|
borderWidth: 2,
|
||||||
pointBackgroundColor: '#fff',
|
pointBackgroundColor: '#fff',
|
||||||
lineTension: 0,
|
lineTension: 0,
|
||||||
data: data.map(x => ({ t: x.date, y: x.localCount }))
|
data: this.format(this.stats.drive.local.totalCount)
|
||||||
}, {
|
}, {
|
||||||
label: 'Remote',
|
label: 'Remote',
|
||||||
fill: true,
|
fill: true,
|
||||||
@@ -534,7 +583,7 @@ export default Vue.extend({
|
|||||||
borderWidth: 2,
|
borderWidth: 2,
|
||||||
pointBackgroundColor: '#fff',
|
pointBackgroundColor: '#fff',
|
||||||
lineTension: 0,
|
lineTension: 0,
|
||||||
data: data.map(x => ({ t: x.date, y: x.remoteCount }))
|
data: this.format(this.stats.drive.remote.totalCount)
|
||||||
}]
|
}]
|
||||||
}, {
|
}, {
|
||||||
scales: {
|
scales: {
|
||||||
@@ -558,30 +607,26 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
networkRequestsChart(): any {
|
networkRequestsChart(): any {
|
||||||
const data = this.stats.slice().reverse().map(x => ({
|
|
||||||
date: new Date(x.date),
|
|
||||||
requests: x.network.requests
|
|
||||||
}));
|
|
||||||
|
|
||||||
return [{
|
return [{
|
||||||
datasets: [{
|
datasets: [{
|
||||||
label: 'Requests',
|
label: 'Incoming',
|
||||||
fill: true,
|
fill: true,
|
||||||
backgroundColor: rgba(colors.localPlus),
|
backgroundColor: rgba(colors.localPlus),
|
||||||
borderColor: colors.localPlus,
|
borderColor: colors.localPlus,
|
||||||
borderWidth: 2,
|
borderWidth: 2,
|
||||||
pointBackgroundColor: '#fff',
|
pointBackgroundColor: '#fff',
|
||||||
lineTension: 0,
|
lineTension: 0,
|
||||||
data: data.map(x => ({ t: x.date, y: x.requests }))
|
data: this.format(this.stats.network.incomingRequests)
|
||||||
}]
|
}]
|
||||||
}];
|
}];
|
||||||
},
|
},
|
||||||
|
|
||||||
networkTimeChart(): any {
|
networkTimeChart(): any {
|
||||||
const data = this.stats.slice().reverse().map(x => ({
|
const data = [];
|
||||||
date: new Date(x.date),
|
|
||||||
time: x.network.requests != 0 ? (x.network.totalTime / x.network.requests) : 0,
|
for (let i = 0; i < limit; i++) {
|
||||||
}));
|
data.push(this.stats.network.incomingRequests[i] != 0 ? (this.stats.network.totalTime[i] / this.stats.network.incomingRequests[i]) : 0);
|
||||||
|
}
|
||||||
|
|
||||||
return [{
|
return [{
|
||||||
datasets: [{
|
datasets: [{
|
||||||
@@ -592,18 +637,12 @@ export default Vue.extend({
|
|||||||
borderWidth: 2,
|
borderWidth: 2,
|
||||||
pointBackgroundColor: '#fff',
|
pointBackgroundColor: '#fff',
|
||||||
lineTension: 0,
|
lineTension: 0,
|
||||||
data: data.map(x => ({ t: x.date, y: x.time }))
|
data: this.format(data)
|
||||||
}]
|
}]
|
||||||
}];
|
}];
|
||||||
},
|
},
|
||||||
|
|
||||||
networkUsageChart(): any {
|
networkUsageChart(): any {
|
||||||
const data = this.stats.slice().reverse().map(x => ({
|
|
||||||
date: new Date(x.date),
|
|
||||||
incoming: x.network.incomingBytes,
|
|
||||||
outgoing: x.network.outgoingBytes
|
|
||||||
}));
|
|
||||||
|
|
||||||
return [{
|
return [{
|
||||||
datasets: [{
|
datasets: [{
|
||||||
label: 'Incoming',
|
label: 'Incoming',
|
||||||
@@ -613,7 +652,7 @@ export default Vue.extend({
|
|||||||
borderWidth: 2,
|
borderWidth: 2,
|
||||||
pointBackgroundColor: '#fff',
|
pointBackgroundColor: '#fff',
|
||||||
lineTension: 0,
|
lineTension: 0,
|
||||||
data: data.map(x => ({ t: x.date, y: x.incoming }))
|
data: this.format(this.stats.network.incomingBytes)
|
||||||
}, {
|
}, {
|
||||||
label: 'Outgoing',
|
label: 'Outgoing',
|
||||||
fill: true,
|
fill: true,
|
||||||
@@ -622,7 +661,7 @@ export default Vue.extend({
|
|||||||
borderWidth: 2,
|
borderWidth: 2,
|
||||||
pointBackgroundColor: '#fff',
|
pointBackgroundColor: '#fff',
|
||||||
lineTension: 0,
|
lineTension: 0,
|
||||||
data: data.map(x => ({ t: x.date, y: x.outgoing }))
|
data: this.format(this.stats.network.outgoingBytes)
|
||||||
}]
|
}]
|
||||||
}, {
|
}, {
|
||||||
scales: {
|
scales: {
|
||||||
@@ -649,8 +688,6 @@ export default Vue.extend({
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="stylus" scoped>
|
<style lang="stylus" scoped>
|
||||||
|
|
||||||
|
|
||||||
.gkgckalzgidaygcxnugepioremxvxvpt
|
.gkgckalzgidaygcxnugepioremxvxvpt
|
||||||
padding 32px
|
padding 32px
|
||||||
background #fff
|
background #fff
|
||||||
|
|||||||
@@ -117,11 +117,11 @@ export default Vue.extend({
|
|||||||
mounted() {
|
mounted() {
|
||||||
this.connection = (this as any).os.stream.useSharedConnection('drive');
|
this.connection = (this as any).os.stream.useSharedConnection('drive');
|
||||||
|
|
||||||
this.connection.on('file_created', this.onStreamDriveFileCreated);
|
this.connection.on('fileCreated', this.onStreamDriveFileCreated);
|
||||||
this.connection.on('file_updated', this.onStreamDriveFileUpdated);
|
this.connection.on('fileUpdated', this.onStreamDriveFileUpdated);
|
||||||
this.connection.on('file_deleted', this.onStreamDriveFileDeleted);
|
this.connection.on('fileDeleted', this.onStreamDriveFileDeleted);
|
||||||
this.connection.on('folder_created', this.onStreamDriveFolderCreated);
|
this.connection.on('folderCreated', this.onStreamDriveFolderCreated);
|
||||||
this.connection.on('folder_updated', this.onStreamDriveFolderUpdated);
|
this.connection.on('folderUpdated', this.onStreamDriveFolderUpdated);
|
||||||
|
|
||||||
if (this.initFolder) {
|
if (this.initFolder) {
|
||||||
this.move(this.initFolder);
|
this.move(this.initFolder);
|
||||||
|
|||||||
@@ -1,37 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="mk-ellipsis-icon">
|
|
||||||
<div></div><div></div><div></div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<style lang="stylus" scoped>
|
|
||||||
.mk-ellipsis-icon
|
|
||||||
width 70px
|
|
||||||
margin 0 auto
|
|
||||||
text-align center
|
|
||||||
|
|
||||||
> div
|
|
||||||
display inline-block
|
|
||||||
width 18px
|
|
||||||
height 18px
|
|
||||||
background-color rgba(#000, 0.3)
|
|
||||||
border-radius 100%
|
|
||||||
animation bounce 1.4s infinite ease-in-out both
|
|
||||||
|
|
||||||
&:nth-child(1)
|
|
||||||
animation-delay 0s
|
|
||||||
|
|
||||||
&:nth-child(2)
|
|
||||||
margin 0 6px
|
|
||||||
animation-delay 0.16s
|
|
||||||
|
|
||||||
&:nth-child(3)
|
|
||||||
animation-delay 0.32s
|
|
||||||
|
|
||||||
@keyframes bounce
|
|
||||||
0%, 80%, 100%
|
|
||||||
transform scale(0)
|
|
||||||
40%
|
|
||||||
transform scale(1)
|
|
||||||
|
|
||||||
</style>
|
|
||||||
@@ -38,7 +38,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="main">
|
<div class="main" :class="{ side: widgets.left.length == 0 || widgets.right.length == 0 }">
|
||||||
<template v-if="customize">
|
<template v-if="customize">
|
||||||
<x-draggable v-for="place in ['left', 'right']"
|
<x-draggable v-for="place in ['left', 'right']"
|
||||||
:list="widgets[place]"
|
:list="widgets[place]"
|
||||||
@@ -359,12 +359,10 @@ export default Vue.extend({
|
|||||||
box-shadow var(--shadow)
|
box-shadow var(--shadow)
|
||||||
border-radius var(--round)
|
border-radius var(--round)
|
||||||
|
|
||||||
@media (max-width 700px)
|
&.side
|
||||||
padding 0
|
> .main
|
||||||
|
width calc(100% - 280px)
|
||||||
> .tl
|
max-width 680px
|
||||||
border none
|
|
||||||
border-radius 0
|
|
||||||
|
|
||||||
> *:not(.main)
|
> *:not(.main)
|
||||||
width 280px
|
width 280px
|
||||||
@@ -381,14 +379,24 @@ export default Vue.extend({
|
|||||||
padding-right 16px
|
padding-right 16px
|
||||||
order 3
|
order 3
|
||||||
|
|
||||||
@media (max-width 1100px)
|
&.side
|
||||||
> *:not(.main)
|
@media (max-width 1000px)
|
||||||
display none
|
> *:not(.main)
|
||||||
|
display none
|
||||||
|
|
||||||
> .main
|
> .main
|
||||||
float none
|
width 100%
|
||||||
width 100%
|
max-width 700px
|
||||||
max-width 700px
|
margin 0 auto
|
||||||
margin 0 auto
|
|
||||||
|
&:not(.side)
|
||||||
|
@media (max-width 1200px)
|
||||||
|
> *:not(.main)
|
||||||
|
display none
|
||||||
|
|
||||||
|
> .main
|
||||||
|
width 100%
|
||||||
|
max-width 700px
|
||||||
|
margin 0 auto
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ import subNoteContent from './sub-note-content.vue';
|
|||||||
import window from './window.vue';
|
import window from './window.vue';
|
||||||
import noteFormWindow from './post-form-window.vue';
|
import noteFormWindow from './post-form-window.vue';
|
||||||
import renoteFormWindow from './renote-form-window.vue';
|
import renoteFormWindow from './renote-form-window.vue';
|
||||||
import ellipsisIcon from './ellipsis-icon.vue';
|
|
||||||
import mediaImage from './media-image.vue';
|
import mediaImage from './media-image.vue';
|
||||||
import mediaImageDialog from './media-image-dialog.vue';
|
import mediaImageDialog from './media-image-dialog.vue';
|
||||||
import mediaVideo from './media-video.vue';
|
import mediaVideo from './media-video.vue';
|
||||||
@@ -39,7 +38,6 @@ Vue.component('mk-sub-note-content', subNoteContent);
|
|||||||
Vue.component('mk-window', window);
|
Vue.component('mk-window', window);
|
||||||
Vue.component('mk-post-form-window', noteFormWindow);
|
Vue.component('mk-post-form-window', noteFormWindow);
|
||||||
Vue.component('mk-renote-form-window', renoteFormWindow);
|
Vue.component('mk-renote-form-window', renoteFormWindow);
|
||||||
Vue.component('mk-ellipsis-icon', ellipsisIcon);
|
|
||||||
Vue.component('mk-media-image', mediaImage);
|
Vue.component('mk-media-image', mediaImage);
|
||||||
Vue.component('mk-media-image-dialog', mediaImageDialog);
|
Vue.component('mk-media-image-dialog', mediaImageDialog);
|
||||||
Vue.component('mk-media-video', mediaVideo);
|
Vue.component('mk-media-video', mediaVideo);
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ import MkPostFormWindow from './post-form-window.vue';
|
|||||||
import MkRenoteFormWindow from './renote-form-window.vue';
|
import MkRenoteFormWindow from './renote-form-window.vue';
|
||||||
import MkNoteMenu from '../../../common/views/components/note-menu.vue';
|
import MkNoteMenu from '../../../common/views/components/note-menu.vue';
|
||||||
import MkReactionPicker from '../../../common/views/components/reaction-picker.vue';
|
import MkReactionPicker from '../../../common/views/components/reaction-picker.vue';
|
||||||
import XSub from './notes.note.sub.vue';
|
import XSub from './note.sub.vue';
|
||||||
import { sum } from '../../../../../prelude/array';
|
import { sum } from '../../../../../prelude/array';
|
||||||
import noteSubscriber from '../../../common/scripts/note-subscriber';
|
import noteSubscriber from '../../../common/scripts/note-subscriber';
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="tkfdzaxtkdeianobciwadajxzbddorql" :title="title">
|
<div class="tkfdzaxtkdeianobciwadajxzbddorql" :class="{ mini }" :title="title">
|
||||||
<mk-avatar class="avatar" :user="note.user"/>
|
<mk-avatar class="avatar" :user="note.user"/>
|
||||||
<div class="main">
|
<div class="main">
|
||||||
<mk-note-header class="header" :note="note"/>
|
<mk-note-header class="header" :note="note"/>
|
||||||
@@ -24,6 +24,11 @@ export default Vue.extend({
|
|||||||
note: {
|
note: {
|
||||||
type: Object,
|
type: Object,
|
||||||
required: true
|
required: true
|
||||||
|
},
|
||||||
|
mini: {
|
||||||
|
type: Boolean,
|
||||||
|
required: false,
|
||||||
|
default: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -44,11 +49,19 @@ export default Vue.extend({
|
|||||||
<style lang="stylus" scoped>
|
<style lang="stylus" scoped>
|
||||||
.tkfdzaxtkdeianobciwadajxzbddorql
|
.tkfdzaxtkdeianobciwadajxzbddorql
|
||||||
display flex
|
display flex
|
||||||
margin 0
|
|
||||||
padding 16px 32px
|
padding 16px 32px
|
||||||
font-size 0.9em
|
font-size 0.9em
|
||||||
background var(--subNoteBg)
|
background var(--subNoteBg)
|
||||||
|
|
||||||
|
&.mini
|
||||||
|
padding 16px
|
||||||
|
font-size 10px
|
||||||
|
|
||||||
|
> .avatar
|
||||||
|
margin 0 8px 0 0
|
||||||
|
width 38px
|
||||||
|
height 38px
|
||||||
|
|
||||||
> .avatar
|
> .avatar
|
||||||
flex-shrink 0
|
flex-shrink 0
|
||||||
display block
|
display block
|
||||||
379
src/client/app/desktop/views/components/note.vue
Normal file
379
src/client/app/desktop/views/components/note.vue
Normal file
@@ -0,0 +1,379 @@
|
|||||||
|
<template>
|
||||||
|
<div
|
||||||
|
class="note"
|
||||||
|
:class="{ mini }"
|
||||||
|
v-show="appearNote.deletedAt == null"
|
||||||
|
:tabindex="appearNote.deletedAt == null ? '-1' : null"
|
||||||
|
v-hotkey="keymap"
|
||||||
|
:title="title"
|
||||||
|
>
|
||||||
|
<div class="conversation" v-if="detail && conversation.length > 0">
|
||||||
|
<x-sub v-for="note in conversation" :key="note.id" :note="note" :mini="mini"/>
|
||||||
|
</div>
|
||||||
|
<div class="reply-to" v-if="appearNote.reply && (!$store.getters.isSignedIn || $store.state.settings.showReplyTarget)">
|
||||||
|
<x-sub :note="appearNote.reply" :mini="mini"/>
|
||||||
|
</div>
|
||||||
|
<div class="renote" v-if="isRenote">
|
||||||
|
<mk-avatar class="avatar" :user="note.user"/>
|
||||||
|
%fa:retweet%
|
||||||
|
<span>{{ '%i18n:@reposted-by%'.substr(0, '%i18n:@reposted-by%'.indexOf('{')) }}</span>
|
||||||
|
<router-link class="name" :to="note.user | userPage" v-user-preview="note.userId">{{ note.user | userName }}</router-link>
|
||||||
|
<span>{{ '%i18n:@reposted-by%'.substr('%i18n:@reposted-by%'.indexOf('}') + 1) }}</span>
|
||||||
|
<mk-time :time="note.createdAt"/>
|
||||||
|
</div>
|
||||||
|
<article>
|
||||||
|
<mk-avatar class="avatar" :user="appearNote.user"/>
|
||||||
|
<div class="main">
|
||||||
|
<mk-note-header class="header" :note="appearNote"/>
|
||||||
|
<div class="body">
|
||||||
|
<p v-if="appearNote.cw != null" class="cw">
|
||||||
|
<span class="text" v-if="appearNote.cw != ''">{{ appearNote.cw }}</span>
|
||||||
|
<mk-cw-button v-model="showContent"/>
|
||||||
|
</p>
|
||||||
|
<div class="content" v-show="appearNote.cw == null || showContent">
|
||||||
|
<div class="text">
|
||||||
|
<span v-if="appearNote.isHidden" style="opacity: 0.5">%i18n:@private%</span>
|
||||||
|
<a class="reply" v-if="appearNote.reply">%fa:reply%</a>
|
||||||
|
<misskey-flavored-markdown v-if="appearNote.text" :text="appearNote.text" :i="$store.state.i" :class="$style.text"/>
|
||||||
|
<a class="rp" v-if="appearNote.renote">RN:</a>
|
||||||
|
</div>
|
||||||
|
<div class="files" v-if="appearNote.files.length > 0">
|
||||||
|
<mk-media-list :media-list="appearNote.files"/>
|
||||||
|
</div>
|
||||||
|
<mk-poll v-if="appearNote.poll" :note="appearNote" ref="pollViewer"/>
|
||||||
|
<a class="location" v-if="appearNote.geo" :href="`https://maps.google.com/maps?q=${appearNote.geo.coordinates[1]},${appearNote.geo.coordinates[0]}`" target="_blank">%fa:map-marker-alt% 位置情報</a>
|
||||||
|
<div class="renote" v-if="appearNote.renote"><mk-note-preview :note="appearNote.renote" :mini="mini"/></div>
|
||||||
|
<mk-url-preview v-for="url in urls" :url="url" :key="url" :mini="mini"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
<mk-reactions-viewer :note="appearNote" ref="reactionsViewer"/>
|
||||||
|
<button class="replyButton" @click="reply()" title="%i18n:@reply%">
|
||||||
|
<template v-if="appearNote.reply">%fa:reply-all%</template>
|
||||||
|
<template v-else>%fa:reply%</template>
|
||||||
|
<p class="count" v-if="appearNote.repliesCount > 0">{{ appearNote.repliesCount }}</p>
|
||||||
|
</button>
|
||||||
|
<button class="renoteButton" @click="renote()" title="%i18n:@renote%">
|
||||||
|
%fa:retweet%<p class="count" v-if="appearNote.renoteCount > 0">{{ appearNote.renoteCount }}</p>
|
||||||
|
</button>
|
||||||
|
<button class="reactionButton" :class="{ reacted: appearNote.myReaction != null }" @click="react()" ref="reactButton" title="%i18n:@add-reaction%">
|
||||||
|
%fa:plus%<p class="count" v-if="appearNote.reactions_count > 0">{{ appearNote.reactions_count }}</p>
|
||||||
|
</button>
|
||||||
|
<button @click="menu()" ref="menuButton">
|
||||||
|
%fa:ellipsis-h%
|
||||||
|
</button>
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
<div class="replies" v-if="detail && replies.length > 0">
|
||||||
|
<x-sub v-for="note in replies" :key="note.id" :note="note" :mini="mini"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import Vue from 'vue';
|
||||||
|
|
||||||
|
import XSub from './note.sub.vue';
|
||||||
|
import noteMixin from '../../../common/scripts/note-mixin';
|
||||||
|
import noteSubscriber from '../../../common/scripts/note-subscriber';
|
||||||
|
|
||||||
|
export default Vue.extend({
|
||||||
|
components: {
|
||||||
|
XSub
|
||||||
|
},
|
||||||
|
|
||||||
|
mixins: [
|
||||||
|
noteMixin(),
|
||||||
|
noteSubscriber('note')
|
||||||
|
],
|
||||||
|
|
||||||
|
props: {
|
||||||
|
note: {
|
||||||
|
type: Object,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
detail: {
|
||||||
|
type: Boolean,
|
||||||
|
required: false,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
mini: {
|
||||||
|
type: Boolean,
|
||||||
|
required: false,
|
||||||
|
default: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
conversation: [],
|
||||||
|
replies: []
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
created() {
|
||||||
|
if (this.detail) {
|
||||||
|
(this as any).api('notes/replies', {
|
||||||
|
noteId: this.appearNote.id,
|
||||||
|
limit: 8
|
||||||
|
}).then(replies => {
|
||||||
|
this.replies = replies;
|
||||||
|
});
|
||||||
|
|
||||||
|
(this as any).api('notes/conversation', {
|
||||||
|
noteId: this.appearNote.replyId
|
||||||
|
}).then(conversation => {
|
||||||
|
this.conversation = conversation.reverse();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="stylus" scoped>
|
||||||
|
.note
|
||||||
|
margin 0
|
||||||
|
padding 0
|
||||||
|
background var(--face)
|
||||||
|
border-bottom solid 1px var(--faceDivider)
|
||||||
|
|
||||||
|
&.mini
|
||||||
|
font-size 13px
|
||||||
|
|
||||||
|
> .renote
|
||||||
|
padding 8px 16px 0 16px
|
||||||
|
|
||||||
|
.avatar
|
||||||
|
width 20px
|
||||||
|
height 20px
|
||||||
|
|
||||||
|
> article
|
||||||
|
padding 16px 16px 4px
|
||||||
|
|
||||||
|
> .avatar
|
||||||
|
margin 0 10px 8px 0
|
||||||
|
width 42px
|
||||||
|
height 42px
|
||||||
|
|
||||||
|
&:last-of-type
|
||||||
|
border-bottom none
|
||||||
|
|
||||||
|
&:focus
|
||||||
|
z-index 1
|
||||||
|
|
||||||
|
&:after
|
||||||
|
content ""
|
||||||
|
pointer-events none
|
||||||
|
position absolute
|
||||||
|
top 2px
|
||||||
|
right 2px
|
||||||
|
bottom 2px
|
||||||
|
left 2px
|
||||||
|
border 2px solid var(--primaryAlpha03)
|
||||||
|
border-radius 4px
|
||||||
|
|
||||||
|
> .renote
|
||||||
|
display flex
|
||||||
|
align-items center
|
||||||
|
padding 16px 32px 8px 32px
|
||||||
|
line-height 28px
|
||||||
|
white-space pre
|
||||||
|
color var(--renoteText)
|
||||||
|
background linear-gradient(to bottom, var(--renoteGradient) 0%, var(--face) 100%)
|
||||||
|
|
||||||
|
.avatar
|
||||||
|
flex-shrink 0
|
||||||
|
display inline-block
|
||||||
|
width 28px
|
||||||
|
height 28px
|
||||||
|
margin 0 8px 0 0
|
||||||
|
border-radius 6px
|
||||||
|
|
||||||
|
[data-fa]
|
||||||
|
margin-right 4px
|
||||||
|
|
||||||
|
> span
|
||||||
|
flex-shrink 0
|
||||||
|
|
||||||
|
&:last-of-type
|
||||||
|
margin-right 8px
|
||||||
|
|
||||||
|
.name
|
||||||
|
overflow hidden
|
||||||
|
flex-shrink 1
|
||||||
|
text-overflow ellipsis
|
||||||
|
white-space nowrap
|
||||||
|
font-weight bold
|
||||||
|
|
||||||
|
> .mk-time
|
||||||
|
display block
|
||||||
|
margin-left auto
|
||||||
|
flex-shrink 0
|
||||||
|
font-size 0.9em
|
||||||
|
|
||||||
|
& + article
|
||||||
|
padding-top 8px
|
||||||
|
|
||||||
|
> article
|
||||||
|
display flex
|
||||||
|
padding 28px 32px 18px 32px
|
||||||
|
|
||||||
|
&:hover
|
||||||
|
> .main > footer > button
|
||||||
|
color var(--noteActionsHighlighted)
|
||||||
|
|
||||||
|
> .avatar
|
||||||
|
flex-shrink 0
|
||||||
|
display block
|
||||||
|
margin 0 16px 10px 0
|
||||||
|
width 58px
|
||||||
|
height 58px
|
||||||
|
border-radius 8px
|
||||||
|
//position -webkit-sticky
|
||||||
|
//position sticky
|
||||||
|
//top 74px
|
||||||
|
|
||||||
|
> .main
|
||||||
|
flex 1
|
||||||
|
min-width 0
|
||||||
|
|
||||||
|
> .header
|
||||||
|
margin-bottom 4px
|
||||||
|
|
||||||
|
> .body
|
||||||
|
|
||||||
|
> .cw
|
||||||
|
cursor default
|
||||||
|
display block
|
||||||
|
margin 0
|
||||||
|
padding 0
|
||||||
|
overflow-wrap break-word
|
||||||
|
color var(--noteText)
|
||||||
|
|
||||||
|
> .text
|
||||||
|
margin-right 8px
|
||||||
|
|
||||||
|
> .content
|
||||||
|
|
||||||
|
> .text
|
||||||
|
cursor default
|
||||||
|
display block
|
||||||
|
margin 0
|
||||||
|
padding 0
|
||||||
|
overflow-wrap break-word
|
||||||
|
color var(--noteText)
|
||||||
|
|
||||||
|
>>> .title
|
||||||
|
display block
|
||||||
|
margin-bottom 4px
|
||||||
|
padding 4px
|
||||||
|
font-size 90%
|
||||||
|
text-align center
|
||||||
|
background var(--mfmTitleBg)
|
||||||
|
border-radius 4px
|
||||||
|
|
||||||
|
>>> .code
|
||||||
|
margin 8px 0
|
||||||
|
|
||||||
|
>>> .quote
|
||||||
|
margin 8px
|
||||||
|
padding 6px 12px
|
||||||
|
color var(--mfmQuote)
|
||||||
|
border-left solid 3px var(--mfmQuoteLine)
|
||||||
|
|
||||||
|
> .reply
|
||||||
|
margin-right 8px
|
||||||
|
color var(--text)
|
||||||
|
|
||||||
|
> .rp
|
||||||
|
margin-left 4px
|
||||||
|
font-style oblique
|
||||||
|
color var(--renoteText)
|
||||||
|
|
||||||
|
> .location
|
||||||
|
margin 4px 0
|
||||||
|
font-size 12px
|
||||||
|
color #ccc
|
||||||
|
|
||||||
|
> .map
|
||||||
|
width 100%
|
||||||
|
height 300px
|
||||||
|
|
||||||
|
&:empty
|
||||||
|
display none
|
||||||
|
|
||||||
|
.mk-url-preview
|
||||||
|
margin-top 8px
|
||||||
|
|
||||||
|
> .mk-poll
|
||||||
|
font-size 80%
|
||||||
|
|
||||||
|
> .renote
|
||||||
|
margin 8px 0
|
||||||
|
|
||||||
|
> *
|
||||||
|
padding 16px
|
||||||
|
border dashed 1px var(--quoteBorder)
|
||||||
|
border-radius 8px
|
||||||
|
|
||||||
|
> footer
|
||||||
|
> button
|
||||||
|
margin 0 28px 0 0
|
||||||
|
padding 0 8px
|
||||||
|
line-height 32px
|
||||||
|
font-size 1em
|
||||||
|
color var(--noteActions)
|
||||||
|
background transparent
|
||||||
|
border none
|
||||||
|
cursor pointer
|
||||||
|
|
||||||
|
&:last-child
|
||||||
|
margin-right 0
|
||||||
|
|
||||||
|
&:hover
|
||||||
|
color var(--noteActionsHover)
|
||||||
|
|
||||||
|
&.replyButton:hover
|
||||||
|
color var(--noteActionsReplyHover)
|
||||||
|
|
||||||
|
&.renoteButton:hover
|
||||||
|
color var(--noteActionsRenoteHover)
|
||||||
|
|
||||||
|
&.reactionButton:hover
|
||||||
|
color var(--noteActionsReactionHover)
|
||||||
|
|
||||||
|
> .count
|
||||||
|
display inline
|
||||||
|
margin 0 0 0 8px
|
||||||
|
color #999
|
||||||
|
|
||||||
|
&.reacted, &.reacted:hover
|
||||||
|
color var(--noteActionsReactionHover)
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style lang="stylus" module>
|
||||||
|
.text
|
||||||
|
|
||||||
|
code
|
||||||
|
padding 4px 8px
|
||||||
|
margin 0 0.5em
|
||||||
|
font-size 80%
|
||||||
|
color #525252
|
||||||
|
background #f8f8f8
|
||||||
|
border-radius 2px
|
||||||
|
|
||||||
|
pre > code
|
||||||
|
padding 16px
|
||||||
|
margin 0
|
||||||
|
|
||||||
|
[data-is-me]:after
|
||||||
|
content "you"
|
||||||
|
padding 0 4px
|
||||||
|
margin-left 4px
|
||||||
|
font-size 80%
|
||||||
|
color var(--primaryForeground)
|
||||||
|
background var(--primary)
|
||||||
|
border-radius 4px
|
||||||
|
</style>
|
||||||
@@ -1,477 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="note" tabindex="-1" v-hotkey="keymap" :title="title">
|
|
||||||
<div class="reply-to" v-if="p.reply && (!$store.getters.isSignedIn || $store.state.settings.showReplyTarget)">
|
|
||||||
<x-sub :note="p.reply"/>
|
|
||||||
</div>
|
|
||||||
<div class="renote" v-if="isRenote">
|
|
||||||
<mk-avatar class="avatar" :user="note.user"/>
|
|
||||||
%fa:retweet%
|
|
||||||
<span>{{ '%i18n:@reposted-by%'.substr(0, '%i18n:@reposted-by%'.indexOf('{')) }}</span>
|
|
||||||
<a class="name" :href="note.user | userPage" v-user-preview="note.userId">{{ note.user | userName }}</a>
|
|
||||||
<span>{{ '%i18n:@reposted-by%'.substr('%i18n:@reposted-by%'.indexOf('}') + 1) }}</span>
|
|
||||||
<mk-time :time="note.createdAt"/>
|
|
||||||
</div>
|
|
||||||
<article>
|
|
||||||
<mk-avatar class="avatar" :user="p.user"/>
|
|
||||||
<div class="main">
|
|
||||||
<mk-note-header class="header" :note="p"/>
|
|
||||||
<div class="body">
|
|
||||||
<p v-if="p.cw != null" class="cw">
|
|
||||||
<span class="text" v-if="p.cw != ''">{{ p.cw }}</span>
|
|
||||||
<mk-cw-button v-model="showContent"/>
|
|
||||||
</p>
|
|
||||||
<div class="content" v-show="p.cw == null || showContent">
|
|
||||||
<div class="text">
|
|
||||||
<span v-if="p.isHidden" style="opacity: 0.5">%i18n:@private%</span>
|
|
||||||
<span v-if="p.deletedAt" style="opacity: 0.5">%i18n:@deleted%</span>
|
|
||||||
<a class="reply" v-if="p.reply">%fa:reply%</a>
|
|
||||||
<misskey-flavored-markdown v-if="p.text" :text="p.text" :i="$store.state.i" :class="$style.text"/>
|
|
||||||
<a class="rp" v-if="p.renote">RP:</a>
|
|
||||||
</div>
|
|
||||||
<div class="files" v-if="p.files.length > 0">
|
|
||||||
<mk-media-list :media-list="p.files"/>
|
|
||||||
</div>
|
|
||||||
<mk-poll v-if="p.poll" :note="p" ref="pollViewer"/>
|
|
||||||
<a class="location" v-if="p.geo" :href="`https://maps.google.com/maps?q=${p.geo.coordinates[1]},${p.geo.coordinates[0]}`" target="_blank">%fa:map-marker-alt% 位置情報</a>
|
|
||||||
<div class="map" v-if="p.geo" ref="map"></div>
|
|
||||||
<div class="renote" v-if="p.renote"><mk-note-preview :note="p.renote"/></div>
|
|
||||||
<mk-url-preview v-for="url in urls" :url="url" :key="url"/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<footer v-if="p.deletedAt == null">
|
|
||||||
<mk-reactions-viewer :note="p" ref="reactionsViewer"/>
|
|
||||||
<button class="replyButton" @click="reply()" title="%i18n:@reply%">
|
|
||||||
<template v-if="p.reply">%fa:reply-all%</template>
|
|
||||||
<template v-else>%fa:reply%</template>
|
|
||||||
<p class="count" v-if="p.repliesCount > 0">{{ p.repliesCount }}</p>
|
|
||||||
</button>
|
|
||||||
<button class="renoteButton" @click="renote()" title="%i18n:@renote%">
|
|
||||||
%fa:retweet%<p class="count" v-if="p.renoteCount > 0">{{ p.renoteCount }}</p>
|
|
||||||
</button>
|
|
||||||
<button class="reactionButton" :class="{ reacted: p.myReaction != null }" @click="react()" ref="reactButton" title="%i18n:@add-reaction%">
|
|
||||||
%fa:plus%<p class="count" v-if="p.reactions_count > 0">{{ p.reactions_count }}</p>
|
|
||||||
</button>
|
|
||||||
<button @click="menu()" ref="menuButton">
|
|
||||||
%fa:ellipsis-h%
|
|
||||||
</button>
|
|
||||||
<!-- <button title="%i18n:@detail">
|
|
||||||
<template v-if="!isDetailOpened">%fa:caret-down%</template>
|
|
||||||
<template v-if="isDetailOpened">%fa:caret-up%</template>
|
|
||||||
</button> -->
|
|
||||||
</footer>
|
|
||||||
</div>
|
|
||||||
</article>
|
|
||||||
<div class="detail" v-if="isDetailOpened">
|
|
||||||
<mk-note-status-graph width="462" height="130" :note="p"/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script lang="ts">
|
|
||||||
import Vue from 'vue';
|
|
||||||
import parse from '../../../../../mfm/parse';
|
|
||||||
|
|
||||||
import MkPostFormWindow from './post-form-window.vue';
|
|
||||||
import MkRenoteFormWindow from './renote-form-window.vue';
|
|
||||||
import MkNoteMenu from '../../../common/views/components/note-menu.vue';
|
|
||||||
import MkReactionPicker from '../../../common/views/components/reaction-picker.vue';
|
|
||||||
import XSub from './notes.note.sub.vue';
|
|
||||||
import { sum } from '../../../../../prelude/array';
|
|
||||||
import noteSubscriber from '../../../common/scripts/note-subscriber';
|
|
||||||
|
|
||||||
function focus(el, fn) {
|
|
||||||
const target = fn(el);
|
|
||||||
if (target) {
|
|
||||||
if (target.hasAttribute('tabindex')) {
|
|
||||||
target.focus();
|
|
||||||
} else {
|
|
||||||
focus(target, fn);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default Vue.extend({
|
|
||||||
components: {
|
|
||||||
XSub
|
|
||||||
},
|
|
||||||
|
|
||||||
mixins: [noteSubscriber('note')],
|
|
||||||
|
|
||||||
props: {
|
|
||||||
note: {
|
|
||||||
type: Object,
|
|
||||||
required: true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
showContent: false,
|
|
||||||
isDetailOpened: false
|
|
||||||
};
|
|
||||||
},
|
|
||||||
|
|
||||||
computed: {
|
|
||||||
keymap(): any {
|
|
||||||
return {
|
|
||||||
'r|left': () => this.reply(true),
|
|
||||||
'e|a|plus': () => this.react(true),
|
|
||||||
'q|right': () => this.renote(true),
|
|
||||||
'ctrl+q|ctrl+right': this.renoteDirectly,
|
|
||||||
'up|k|shift+tab': this.focusBefore,
|
|
||||||
'down|j|tab': this.focusAfter,
|
|
||||||
'esc': this.blur,
|
|
||||||
'm|o': () => this.menu(true),
|
|
||||||
's': this.toggleShowContent,
|
|
||||||
'1': () => this.reactDirectly('like'),
|
|
||||||
'2': () => this.reactDirectly('love'),
|
|
||||||
'3': () => this.reactDirectly('laugh'),
|
|
||||||
'4': () => this.reactDirectly('hmm'),
|
|
||||||
'5': () => this.reactDirectly('surprise'),
|
|
||||||
'6': () => this.reactDirectly('congrats'),
|
|
||||||
'7': () => this.reactDirectly('angry'),
|
|
||||||
'8': () => this.reactDirectly('confused'),
|
|
||||||
'9': () => this.reactDirectly('rip'),
|
|
||||||
'0': () => this.reactDirectly('pudding'),
|
|
||||||
};
|
|
||||||
},
|
|
||||||
|
|
||||||
isRenote(): boolean {
|
|
||||||
return (this.note.renote &&
|
|
||||||
this.note.text == null &&
|
|
||||||
this.note.fileIds.length == 0 &&
|
|
||||||
this.note.poll == null);
|
|
||||||
},
|
|
||||||
|
|
||||||
p(): any {
|
|
||||||
return this.isRenote ? this.note.renote : this.note;
|
|
||||||
},
|
|
||||||
|
|
||||||
reactionsCount(): number {
|
|
||||||
return this.p.reactionCounts
|
|
||||||
? sum(Object.values(this.p.reactionCounts))
|
|
||||||
: 0;
|
|
||||||
},
|
|
||||||
|
|
||||||
title(): string {
|
|
||||||
return new Date(this.p.createdAt).toLocaleString();
|
|
||||||
},
|
|
||||||
|
|
||||||
urls(): string[] {
|
|
||||||
if (this.p.text) {
|
|
||||||
const ast = parse(this.p.text);
|
|
||||||
return ast
|
|
||||||
.filter(t => (t.type == 'url' || t.type == 'link') && !t.silent)
|
|
||||||
.map(t => t.url);
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
methods: {
|
|
||||||
reply(viaKeyboard = false) {
|
|
||||||
(this as any).os.new(MkPostFormWindow, {
|
|
||||||
reply: this.p,
|
|
||||||
animation: !viaKeyboard
|
|
||||||
}).$once('closed', this.focus);
|
|
||||||
},
|
|
||||||
|
|
||||||
renote(viaKeyboard = false) {
|
|
||||||
(this as any).os.new(MkRenoteFormWindow, {
|
|
||||||
note: this.p,
|
|
||||||
animation: !viaKeyboard
|
|
||||||
}).$once('closed', this.focus);
|
|
||||||
},
|
|
||||||
|
|
||||||
renoteDirectly() {
|
|
||||||
(this as any).api('notes/create', {
|
|
||||||
renoteId: this.p.id
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
react(viaKeyboard = false) {
|
|
||||||
this.blur();
|
|
||||||
(this as any).os.new(MkReactionPicker, {
|
|
||||||
source: this.$refs.reactButton,
|
|
||||||
note: this.p,
|
|
||||||
showFocus: viaKeyboard,
|
|
||||||
animation: !viaKeyboard
|
|
||||||
}).$once('closed', this.focus);
|
|
||||||
},
|
|
||||||
|
|
||||||
reactDirectly(reaction) {
|
|
||||||
(this as any).api('notes/reactions/create', {
|
|
||||||
noteId: this.p.id,
|
|
||||||
reaction: reaction
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
menu(viaKeyboard = false) {
|
|
||||||
(this as any).os.new(MkNoteMenu, {
|
|
||||||
source: this.$refs.menuButton,
|
|
||||||
note: this.p,
|
|
||||||
animation: !viaKeyboard
|
|
||||||
}).$once('closed', this.focus);
|
|
||||||
},
|
|
||||||
|
|
||||||
toggleShowContent() {
|
|
||||||
this.showContent = !this.showContent;
|
|
||||||
},
|
|
||||||
|
|
||||||
focus() {
|
|
||||||
this.$el.focus();
|
|
||||||
},
|
|
||||||
|
|
||||||
blur() {
|
|
||||||
this.$el.blur();
|
|
||||||
},
|
|
||||||
|
|
||||||
focusBefore() {
|
|
||||||
focus(this.$el, e => e.previousElementSibling);
|
|
||||||
},
|
|
||||||
|
|
||||||
focusAfter() {
|
|
||||||
focus(this.$el, e => e.nextElementSibling);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="stylus" scoped>
|
|
||||||
.note
|
|
||||||
margin 0
|
|
||||||
padding 0
|
|
||||||
background var(--face)
|
|
||||||
border-bottom solid 1px var(--faceDivider)
|
|
||||||
|
|
||||||
&[data-round]
|
|
||||||
&:first-child
|
|
||||||
border-top-left-radius 6px
|
|
||||||
border-top-right-radius 6px
|
|
||||||
|
|
||||||
> .renote
|
|
||||||
border-top-left-radius 6px
|
|
||||||
border-top-right-radius 6px
|
|
||||||
|
|
||||||
&:last-of-type
|
|
||||||
border-bottom none
|
|
||||||
|
|
||||||
&:focus
|
|
||||||
z-index 1
|
|
||||||
|
|
||||||
&:after
|
|
||||||
content ""
|
|
||||||
pointer-events none
|
|
||||||
position absolute
|
|
||||||
top 2px
|
|
||||||
right 2px
|
|
||||||
bottom 2px
|
|
||||||
left 2px
|
|
||||||
border 2px solid var(--primaryAlpha03)
|
|
||||||
border-radius 4px
|
|
||||||
|
|
||||||
> .renote
|
|
||||||
display flex
|
|
||||||
align-items center
|
|
||||||
padding 16px 32px 8px 32px
|
|
||||||
line-height 28px
|
|
||||||
white-space pre
|
|
||||||
color var(--renoteText)
|
|
||||||
background linear-gradient(to bottom, var(--renoteGradient) 0%, var(--face) 100%)
|
|
||||||
|
|
||||||
.avatar
|
|
||||||
display inline-block
|
|
||||||
width 28px
|
|
||||||
height 28px
|
|
||||||
margin 0 8px 0 0
|
|
||||||
border-radius 6px
|
|
||||||
|
|
||||||
[data-fa]
|
|
||||||
margin-right 4px
|
|
||||||
|
|
||||||
> span
|
|
||||||
flex-shrink 0
|
|
||||||
|
|
||||||
&:last-of-type
|
|
||||||
margin-right 8px
|
|
||||||
|
|
||||||
.name
|
|
||||||
overflow hidden
|
|
||||||
flex-shrink 1
|
|
||||||
text-overflow ellipsis
|
|
||||||
white-space nowrap
|
|
||||||
font-weight bold
|
|
||||||
|
|
||||||
> .mk-time
|
|
||||||
display block
|
|
||||||
margin-left auto
|
|
||||||
flex-shrink 0
|
|
||||||
font-size 0.9em
|
|
||||||
|
|
||||||
& + article
|
|
||||||
padding-top 8px
|
|
||||||
|
|
||||||
> article
|
|
||||||
display flex
|
|
||||||
padding 28px 32px 18px 32px
|
|
||||||
|
|
||||||
&:hover
|
|
||||||
> .main > footer > button
|
|
||||||
color var(--noteActionsHighlighted)
|
|
||||||
|
|
||||||
> .avatar
|
|
||||||
flex-shrink 0
|
|
||||||
display block
|
|
||||||
margin 0 16px 10px 0
|
|
||||||
width 58px
|
|
||||||
height 58px
|
|
||||||
border-radius 8px
|
|
||||||
//position -webkit-sticky
|
|
||||||
//position sticky
|
|
||||||
//top 74px
|
|
||||||
|
|
||||||
> .main
|
|
||||||
flex 1
|
|
||||||
min-width 0
|
|
||||||
|
|
||||||
> .header
|
|
||||||
margin-bottom 4px
|
|
||||||
|
|
||||||
> .body
|
|
||||||
|
|
||||||
> .cw
|
|
||||||
cursor default
|
|
||||||
display block
|
|
||||||
margin 0
|
|
||||||
padding 0
|
|
||||||
overflow-wrap break-word
|
|
||||||
color var(--noteText)
|
|
||||||
|
|
||||||
> .text
|
|
||||||
margin-right 8px
|
|
||||||
|
|
||||||
> .content
|
|
||||||
|
|
||||||
> .text
|
|
||||||
cursor default
|
|
||||||
display block
|
|
||||||
margin 0
|
|
||||||
padding 0
|
|
||||||
overflow-wrap break-word
|
|
||||||
color var(--noteText)
|
|
||||||
|
|
||||||
>>> .title
|
|
||||||
display block
|
|
||||||
margin-bottom 4px
|
|
||||||
padding 4px
|
|
||||||
font-size 90%
|
|
||||||
text-align center
|
|
||||||
background var(--mfmTitleBg)
|
|
||||||
border-radius 4px
|
|
||||||
|
|
||||||
>>> .code
|
|
||||||
margin 8px 0
|
|
||||||
|
|
||||||
>>> .quote
|
|
||||||
margin 8px
|
|
||||||
padding 6px 12px
|
|
||||||
color var(--mfmQuote)
|
|
||||||
border-left solid 3px var(--mfmQuoteLine)
|
|
||||||
|
|
||||||
> .reply
|
|
||||||
margin-right 8px
|
|
||||||
color var(--text)
|
|
||||||
|
|
||||||
> .rp
|
|
||||||
margin-left 4px
|
|
||||||
font-style oblique
|
|
||||||
color var(--renoteText)
|
|
||||||
|
|
||||||
> .location
|
|
||||||
margin 4px 0
|
|
||||||
font-size 12px
|
|
||||||
color #ccc
|
|
||||||
|
|
||||||
> .map
|
|
||||||
width 100%
|
|
||||||
height 300px
|
|
||||||
|
|
||||||
&:empty
|
|
||||||
display none
|
|
||||||
|
|
||||||
.mk-url-preview
|
|
||||||
margin-top 8px
|
|
||||||
|
|
||||||
> .mk-poll
|
|
||||||
font-size 80%
|
|
||||||
|
|
||||||
> .renote
|
|
||||||
margin 8px 0
|
|
||||||
|
|
||||||
> *
|
|
||||||
padding 16px
|
|
||||||
border dashed 1px var(--quoteBorder)
|
|
||||||
border-radius 8px
|
|
||||||
|
|
||||||
> footer
|
|
||||||
> button
|
|
||||||
margin 0 28px 0 0
|
|
||||||
padding 0 8px
|
|
||||||
line-height 32px
|
|
||||||
font-size 1em
|
|
||||||
color var(--noteActions)
|
|
||||||
background transparent
|
|
||||||
border none
|
|
||||||
cursor pointer
|
|
||||||
|
|
||||||
&:hover
|
|
||||||
color var(--noteActionsHover)
|
|
||||||
|
|
||||||
&.replyButton:hover
|
|
||||||
color var(--noteActionsReplyHover)
|
|
||||||
|
|
||||||
&.renoteButton:hover
|
|
||||||
color var(--noteActionsRenoteHover)
|
|
||||||
|
|
||||||
&.reactionButton:hover
|
|
||||||
color var(--noteActionsReactionHover)
|
|
||||||
|
|
||||||
> .count
|
|
||||||
display inline
|
|
||||||
margin 0 0 0 8px
|
|
||||||
color #999
|
|
||||||
|
|
||||||
&.reacted, &.reacted:hover
|
|
||||||
color var(--noteActionsReactionHover)
|
|
||||||
|
|
||||||
> .detail
|
|
||||||
padding-top 4px
|
|
||||||
background rgba(#000, 0.0125)
|
|
||||||
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style lang="stylus" module>
|
|
||||||
.text
|
|
||||||
|
|
||||||
code
|
|
||||||
padding 4px 8px
|
|
||||||
margin 0 0.5em
|
|
||||||
font-size 80%
|
|
||||||
color #525252
|
|
||||||
background #f8f8f8
|
|
||||||
border-radius 2px
|
|
||||||
|
|
||||||
pre > code
|
|
||||||
padding 16px
|
|
||||||
margin 0
|
|
||||||
|
|
||||||
[data-is-me]:after
|
|
||||||
content "you"
|
|
||||||
padding 0 4px
|
|
||||||
margin-left 4px
|
|
||||||
font-size 80%
|
|
||||||
color var(--primaryForeground)
|
|
||||||
background var(--primary)
|
|
||||||
border-radius 4px
|
|
||||||
</style>
|
|
||||||
@@ -4,9 +4,15 @@
|
|||||||
|
|
||||||
<slot name="empty" v-if="notes.length == 0 && !fetching && requestInitPromise == null"></slot>
|
<slot name="empty" v-if="notes.length == 0 && !fetching && requestInitPromise == null"></slot>
|
||||||
|
|
||||||
<div v-if="!fetching && requestInitPromise != null">
|
<div v-if="!fetching && requestInitPromise != null" class="error">
|
||||||
<p>%i18n:@error%</p>
|
<p>%fa:exclamation-triangle% %i18n:common.error.title%</p>
|
||||||
<button @click="resolveInitPromise">%i18n:@retry%</button>
|
<ui-button @click="resolveInitPromise">%i18n:common.error.retry%</ui-button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="placeholder" v-if="fetching">
|
||||||
|
<template v-for="i in 10">
|
||||||
|
<mk-note-skeleton :key="i"/>
|
||||||
|
</template>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- トランジションを有効にするとなぜかメモリリークする -->
|
<!-- トランジションを有効にするとなぜかメモリリークする -->
|
||||||
@@ -32,9 +38,8 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import * as config from '../../../config';
|
import * as config from '../../../config';
|
||||||
import getNoteSummary from '../../../../../misc/get-note-summary';
|
|
||||||
|
|
||||||
import XNote from './notes.note.vue';
|
import XNote from './note.vue';
|
||||||
|
|
||||||
const displayLimit = 30;
|
const displayLimit = 30;
|
||||||
|
|
||||||
@@ -55,7 +60,6 @@ export default Vue.extend({
|
|||||||
requestInitPromise: null as () => Promise<any[]>,
|
requestInitPromise: null as () => Promise<any[]>,
|
||||||
notes: [],
|
notes: [],
|
||||||
queue: [],
|
queue: [],
|
||||||
unreadCount: 0,
|
|
||||||
fetching: true,
|
fetching: true,
|
||||||
moreFetching: false
|
moreFetching: false
|
||||||
};
|
};
|
||||||
@@ -74,12 +78,10 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
mounted() {
|
mounted() {
|
||||||
document.addEventListener('visibilitychange', this.onVisibilitychange, false);
|
|
||||||
window.addEventListener('scroll', this.onScroll, { passive: true });
|
window.addEventListener('scroll', this.onScroll, { passive: true });
|
||||||
},
|
},
|
||||||
|
|
||||||
beforeDestroy() {
|
beforeDestroy() {
|
||||||
document.removeEventListener('visibilitychange', this.onVisibilitychange);
|
|
||||||
window.removeEventListener('scroll', this.onScroll);
|
window.removeEventListener('scroll', this.onScroll);
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -141,10 +143,9 @@ export default Vue.extend({
|
|||||||
}
|
}
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
// 投稿が自分のものではないかつ、タブが非表示またはスクロール位置が最上部ではないならタイトルで通知
|
// タブが非表示またはスクロール位置が最上部ではないならタイトルで通知
|
||||||
if ((document.hidden || !this.isScrollTop()) && note.userId !== this.$store.state.i.id) {
|
if (document.hidden || !this.isScrollTop()) {
|
||||||
this.unreadCount++;
|
this.$store.commit('pushBehindNote', note);
|
||||||
document.title = `(${this.unreadCount}) ${getNoteSummary(note)}`;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.isScrollTop()) {
|
if (this.isScrollTop()) {
|
||||||
@@ -189,21 +190,9 @@ export default Vue.extend({
|
|||||||
this.moreFetching = false;
|
this.moreFetching = false;
|
||||||
},
|
},
|
||||||
|
|
||||||
clearNotification() {
|
|
||||||
this.unreadCount = 0;
|
|
||||||
document.title = (this as any).os.instanceName;
|
|
||||||
},
|
|
||||||
|
|
||||||
onVisibilitychange() {
|
|
||||||
if (!document.hidden) {
|
|
||||||
this.clearNotification();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
onScroll() {
|
onScroll() {
|
||||||
if (this.isScrollTop()) {
|
if (this.isScrollTop()) {
|
||||||
this.releaseQueue();
|
this.releaseQueue();
|
||||||
this.clearNotification();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.$store.state.settings.fetchOnScroll !== false) {
|
if (this.$store.state.settings.fetchOnScroll !== false) {
|
||||||
@@ -226,6 +215,20 @@ export default Vue.extend({
|
|||||||
> *
|
> *
|
||||||
transition transform .3s ease, opacity .3s ease
|
transition transform .3s ease, opacity .3s ease
|
||||||
|
|
||||||
|
> .error
|
||||||
|
max-width 300px
|
||||||
|
margin 0 auto
|
||||||
|
padding 32px
|
||||||
|
text-align center
|
||||||
|
color var(--text)
|
||||||
|
|
||||||
|
> p
|
||||||
|
margin 0 0 8px 0
|
||||||
|
|
||||||
|
> .placeholder
|
||||||
|
padding 32px
|
||||||
|
opacity 0.3
|
||||||
|
|
||||||
> .notes
|
> .notes
|
||||||
> .date
|
> .date
|
||||||
display block
|
display block
|
||||||
|
|||||||
@@ -1,5 +1,11 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="mk-notifications">
|
<div class="mk-notifications">
|
||||||
|
<div class="placeholder" v-if="fetching">
|
||||||
|
<template v-for="i in 10">
|
||||||
|
<mk-note-skeleton :key="i"/>
|
||||||
|
</template>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="notifications" v-if="notifications.length != 0">
|
<div class="notifications" v-if="notifications.length != 0">
|
||||||
<!-- トランジションを有効にするとなぜかメモリリークする -->
|
<!-- トランジションを有効にするとなぜかメモリリークする -->
|
||||||
<component :is="!$store.state.device.reduceMotion ? 'transition-group' : 'div'" name="mk-notifications" class="transition" tag="div">
|
<component :is="!$store.state.device.reduceMotion ? 'transition-group' : 'div'" name="mk-notifications" class="transition" tag="div">
|
||||||
@@ -102,7 +108,6 @@
|
|||||||
<template v-if="fetchingMoreNotifications">%fa:spinner .pulse .fw%</template>{{ fetchingMoreNotifications ? '%i18n:common.loading%' : '%i18n:@more%' }}
|
<template v-if="fetchingMoreNotifications">%fa:spinner .pulse .fw%</template>{{ fetchingMoreNotifications ? '%i18n:common.loading%' : '%i18n:@more%' }}
|
||||||
</button>
|
</button>
|
||||||
<p class="empty" v-if="notifications.length == 0 && !fetching">%i18n:@empty%</p>
|
<p class="empty" v-if="notifications.length == 0 && !fetching">%i18n:@empty%</p>
|
||||||
<p class="loading" v-if="fetching">%fa:spinner .pulse .fw%%i18n:common.loading%<mk-ellipsis/></p>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -202,6 +207,10 @@ export default Vue.extend({
|
|||||||
> *
|
> *
|
||||||
transition transform .3s ease, opacity .3s ease
|
transition transform .3s ease, opacity .3s ease
|
||||||
|
|
||||||
|
> .placeholder
|
||||||
|
padding 16px
|
||||||
|
opacity 0.3
|
||||||
|
|
||||||
> .notifications
|
> .notifications
|
||||||
> div
|
> div
|
||||||
> .notification
|
> .notification
|
||||||
@@ -298,7 +307,7 @@ export default Vue.extend({
|
|||||||
display block
|
display block
|
||||||
width 100%
|
width 100%
|
||||||
padding 16px
|
padding 16px
|
||||||
color #555
|
color var(--text)
|
||||||
border-top solid 1px rgba(#000, 0.05)
|
border-top solid 1px rgba(#000, 0.05)
|
||||||
|
|
||||||
&:hover
|
&:hover
|
||||||
@@ -317,15 +326,6 @@ export default Vue.extend({
|
|||||||
margin 0
|
margin 0
|
||||||
padding 16px
|
padding 16px
|
||||||
text-align center
|
text-align center
|
||||||
color #aaa
|
color var(--text)
|
||||||
|
|
||||||
> .loading
|
|
||||||
margin 0
|
|
||||||
padding 16px
|
|
||||||
text-align center
|
|
||||||
color #aaa
|
|
||||||
|
|
||||||
> [data-fa]
|
|
||||||
margin-right 4px
|
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="hashtags" v-if="recentHashtags.length > 0 && $store.state.settings.suggestRecentHashtags">
|
<div class="hashtags" v-if="recentHashtags.length > 0 && $store.state.settings.suggestRecentHashtags">
|
||||||
<b>%i18n:@recent-tags%:</b>
|
<b>%i18n:@recent-tags%:</b>
|
||||||
<a v-for="tag in recentHashtags.slice(0, 5)" @click="addTag(tag)" title="%@click-to-tagging%">#{{ tag }}</a>
|
<a v-for="tag in recentHashtags.slice(0, 5)" @click="addTag(tag)" title="%i18n:@click-to-tagging%">#{{ tag }}</a>
|
||||||
</div>
|
</div>
|
||||||
<input v-show="useCw" v-model="cw" placeholder="%i18n:@annotations%">
|
<input v-show="useCw" v-model="cw" placeholder="%i18n:@annotations%">
|
||||||
<textarea :class="{ with: (files.length != 0 || poll) }"
|
<textarea :class="{ with: (files.length != 0 || poll) }"
|
||||||
@@ -45,7 +45,7 @@
|
|||||||
<span v-if="visibility === 'specified'">%fa:envelope%</span>
|
<span v-if="visibility === 'specified'">%fa:envelope%</span>
|
||||||
<span v-if="visibility === 'private'">%fa:lock%</span>
|
<span v-if="visibility === 'private'">%fa:lock%</span>
|
||||||
</button>
|
</button>
|
||||||
<p class="text-count" :class="{ over: this.trimmedLength(text) > 1000 }">{{ 1000 - this.trimmedLength(text) }}</p>
|
<p class="text-count" :class="{ over: this.trimmedLength(text) > this.maxNoteTextLength }">{{ this.maxNoteTextLength - this.trimmedLength(text) }}</p>
|
||||||
<button :class="{ posting }" class="submit" :disabled="!canPost" @click="post">
|
<button :class="{ posting }" class="submit" :disabled="!canPost" @click="post">
|
||||||
{{ posting ? '%i18n:@posting%' : submitText }}<mk-ellipsis v-if="posting"/>
|
{{ posting ? '%i18n:@posting%' : submitText }}<mk-ellipsis v-if="posting"/>
|
||||||
</button>
|
</button>
|
||||||
@@ -65,6 +65,7 @@ import { host } from '../../../config';
|
|||||||
import { erase, unique } from '../../../../../prelude/array';
|
import { erase, unique } from '../../../../../prelude/array';
|
||||||
import { length } from 'stringz';
|
import { length } from 'stringz';
|
||||||
import parseAcct from '../../../../../misc/acct/parse';
|
import parseAcct from '../../../../../misc/acct/parse';
|
||||||
|
import { toASCII } from 'punycode';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
components: {
|
components: {
|
||||||
@@ -106,10 +107,17 @@ export default Vue.extend({
|
|||||||
visibleUsers: [],
|
visibleUsers: [],
|
||||||
autocomplete: null,
|
autocomplete: null,
|
||||||
draghover: false,
|
draghover: false,
|
||||||
recentHashtags: JSON.parse(localStorage.getItem('hashtags') || '[]')
|
recentHashtags: JSON.parse(localStorage.getItem('hashtags') || '[]'),
|
||||||
|
maxNoteTextLength: 1000
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
|
created() {
|
||||||
|
(this as any).os.getMeta().then(meta => {
|
||||||
|
this.maxNoteTextLength = meta.maxNoteTextLength;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
computed: {
|
computed: {
|
||||||
draftId(): string {
|
draftId(): string {
|
||||||
return this.renote
|
return this.renote
|
||||||
@@ -148,7 +156,7 @@ export default Vue.extend({
|
|||||||
canPost(): boolean {
|
canPost(): boolean {
|
||||||
return !this.posting &&
|
return !this.posting &&
|
||||||
(1 <= this.text.length || 1 <= this.files.length || this.poll || this.renote) &&
|
(1 <= this.text.length || 1 <= this.files.length || this.poll || this.renote) &&
|
||||||
(length(this.text.trim()) <= 1000);
|
(length(this.text.trim()) <= this.maxNoteTextLength);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -158,14 +166,14 @@ export default Vue.extend({
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (this.reply && this.reply.user.host != null) {
|
if (this.reply && this.reply.user.host != null) {
|
||||||
this.text = `@${this.reply.user.username}@${this.reply.user.host} `;
|
this.text = `@${this.reply.user.username}@${toASCII(this.reply.user.host)} `;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.reply && this.reply.text != null) {
|
if (this.reply && this.reply.text != null) {
|
||||||
const ast = parse(this.reply.text);
|
const ast = parse(this.reply.text);
|
||||||
|
|
||||||
ast.filter(t => t.type == 'mention').forEach(x => {
|
ast.filter(t => t.type == 'mention').forEach(x => {
|
||||||
const mention = x.host ? `@${x.username}@${x.host}` : `@${x.username}`;
|
const mention = x.host ? `@${x.username}@${toASCII(x.host)}` : `@${x.username}`;
|
||||||
|
|
||||||
// 自分は除外
|
// 自分は除外
|
||||||
if (this.$store.state.i.username == x.username && x.host == null) return;
|
if (this.$store.state.i.username == x.username && x.host == null) return;
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
<div class="2fa">
|
<div class="2fa">
|
||||||
<p>%i18n:@intro%<a href="%i18n:@url%" target="_blank">%i18n:@detail%</a></p>
|
<p>%i18n:@intro%<a href="%i18n:@url%" target="_blank">%i18n:@detail%</a></p>
|
||||||
<div class="ui info warn"><p>%fa:exclamation-triangle%%i18n:@caution%</p></div>
|
<div class="ui info warn"><p>%fa:exclamation-triangle%%i18n:@caution%</p></div>
|
||||||
<p v-if="!data && !$store.state.i.twoFactorEnabled"><button @click="register" class="ui primary">%i18n:@register%</button></p>
|
<p v-if="!data && !$store.state.i.twoFactorEnabled"><ui-button @click="register">%i18n:@register%</ui-button></p>
|
||||||
<template v-if="$store.state.i.twoFactorEnabled">
|
<template v-if="$store.state.i.twoFactorEnabled">
|
||||||
<p>%i18n:@already-registered%</p>
|
<p>%i18n:@already-registered%</p>
|
||||||
<button @click="unregister" class="ui">%i18n:@unregister%</button>
|
<ui-button @click="unregister">%i18n:@unregister%</ui-button>
|
||||||
</template>
|
</template>
|
||||||
<div v-if="data">
|
<div v-if="data">
|
||||||
<ol>
|
<ol>
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
<li>%i18n:@scan%<br><img :src="data.qr"></li>
|
<li>%i18n:@scan%<br><img :src="data.qr"></li>
|
||||||
<li>%i18n:@done%<br>
|
<li>%i18n:@done%<br>
|
||||||
<input type="number" v-model="token" class="ui">
|
<input type="number" v-model="token" class="ui">
|
||||||
<button @click="submit" class="ui primary">%i18n:@submit%</button>
|
<ui-button primary @click="submit">%i18n:@submit%</ui-button>
|
||||||
</li>
|
</li>
|
||||||
</ol>
|
</ol>
|
||||||
<div class="ui info"><p>%fa:info-circle%%i18n:@info%</p></div>
|
<div class="ui info"><p>%fa:info-circle%%i18n:@info%</p></div>
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="root api">
|
<div class="root api">
|
||||||
<p>%i18n:@token% <code>{{ $store.state.i.token }}</code></p>
|
<ui-input :value="$store.state.i.token" readonly>
|
||||||
|
<span>%i18n:@token%</span>
|
||||||
|
</ui-input>
|
||||||
<p>%i18n:@intro%</p>
|
<p>%i18n:@intro%</p>
|
||||||
<div class="ui info warn"><p>%fa:exclamation-triangle%%i18n:@caution%</p></div>
|
<div class="ui info warn"><p>%fa:exclamation-triangle%%i18n:@caution%</p></div>
|
||||||
<p>%i18n:@regeneration-of-token%</p>
|
<p>%i18n:@regeneration-of-token%</p>
|
||||||
<button class="ui" @click="regenerateToken">%i18n:@regenerate-token%</button>
|
<ui-button @click="regenerateToken">%i18n:@regenerate-token%</ui-button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="root">
|
<div class="root">
|
||||||
<template v-if="!fetching">
|
<template v-if="!fetching">
|
||||||
<p><b>{{ capacity | bytes }}</b>%i18n:max%<b>{{ usage | bytes }}</b>%i18n:in-use%</p>
|
<p><b>{{ capacity | bytes }}</b>%i18n:@max%<b>{{ usage | bytes }}</b>%i18n:@in-use%</p>
|
||||||
</template>
|
</template>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<button @click="reset" class="ui primary">%i18n:@reset%</button>
|
<ui-button @click="reset">%i18n:@reset%</ui-button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|||||||
@@ -1,106 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="profile">
|
|
||||||
<label class="avatar ui from group">
|
|
||||||
<p>%i18n:@avatar%</p>
|
|
||||||
<img class="avatar" :src="$store.state.i.avatarUrl" alt="avatar"/>
|
|
||||||
<button class="ui" @click="updateAvatar">%i18n:@choice-avatar%</button>
|
|
||||||
</label>
|
|
||||||
<label class="ui from group">
|
|
||||||
<ui-input v-model="name" type="text">%i18n:@name%</ui-input>
|
|
||||||
</label>
|
|
||||||
<label class="ui from group">
|
|
||||||
<ui-input v-model="location" type="text">%i18n:@location%</ui-input>
|
|
||||||
</label>
|
|
||||||
<label class="ui from group">
|
|
||||||
<ui-textarea v-model="description">%i18n:@description%</ui-textarea>
|
|
||||||
</label>
|
|
||||||
<label class="ui from group">
|
|
||||||
<p>%i18n:@birthday%</p>
|
|
||||||
<input type="date" v-model="birthday"/>
|
|
||||||
</label>
|
|
||||||
<ui-button primary @click="save">%i18n:@save%</ui-button>
|
|
||||||
<section>
|
|
||||||
<h2>%i18n:@locked-account%</h2>
|
|
||||||
<ui-switch v-model="$store.state.i.isLocked" @change="onChangeIsLocked">%i18n:@is-locked%</ui-switch>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<h2>%i18n:@other%</h2>
|
|
||||||
<ui-switch v-model="$store.state.i.isBot" @change="onChangeIsBot">%i18n:@is-bot%</ui-switch>
|
|
||||||
<ui-switch v-model="$store.state.i.isCat" @change="onChangeIsCat">%i18n:@is-cat%</ui-switch>
|
|
||||||
<ui-switch v-model="alwaysMarkNsfw">%i18n:common.always-mark-nsfw%</ui-switch>
|
|
||||||
</section>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script lang="ts">
|
|
||||||
import Vue from 'vue';
|
|
||||||
|
|
||||||
export default Vue.extend({
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
name: null,
|
|
||||||
location: null,
|
|
||||||
description: null,
|
|
||||||
birthday: null,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
alwaysMarkNsfw: {
|
|
||||||
get() { return this.$store.state.i.settings.alwaysMarkNsfw; },
|
|
||||||
set(value) { (this as any).api('i/update', { alwaysMarkNsfw: value }); }
|
|
||||||
},
|
|
||||||
},
|
|
||||||
created() {
|
|
||||||
this.name = this.$store.state.i.name || '';
|
|
||||||
this.location = this.$store.state.i.profile.location;
|
|
||||||
this.description = this.$store.state.i.description;
|
|
||||||
this.birthday = this.$store.state.i.profile.birthday;
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
updateAvatar() {
|
|
||||||
(this as any).apis.updateAvatar();
|
|
||||||
},
|
|
||||||
save() {
|
|
||||||
(this as any).api('i/update', {
|
|
||||||
name: this.name || null,
|
|
||||||
location: this.location || null,
|
|
||||||
description: this.description || null,
|
|
||||||
birthday: this.birthday || null
|
|
||||||
}).then(() => {
|
|
||||||
(this as any).apis.notify('%i18n:@profile-updated%');
|
|
||||||
});
|
|
||||||
},
|
|
||||||
onChangeIsLocked() {
|
|
||||||
(this as any).api('i/update', {
|
|
||||||
isLocked: this.$store.state.i.isLocked
|
|
||||||
});
|
|
||||||
},
|
|
||||||
onChangeIsBot() {
|
|
||||||
(this as any).api('i/update', {
|
|
||||||
isBot: this.$store.state.i.isBot
|
|
||||||
});
|
|
||||||
},
|
|
||||||
onChangeIsCat() {
|
|
||||||
(this as any).api('i/update', {
|
|
||||||
isCat: this.$store.state.i.isCat
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="stylus" scoped>
|
|
||||||
.profile
|
|
||||||
> .avatar
|
|
||||||
> img
|
|
||||||
display inline-block
|
|
||||||
vertical-align top
|
|
||||||
width 64px
|
|
||||||
height 64px
|
|
||||||
border-radius 4px
|
|
||||||
|
|
||||||
> button
|
|
||||||
margin-left 8px
|
|
||||||
|
|
||||||
</style>
|
|
||||||
|
|
||||||
@@ -2,38 +2,66 @@
|
|||||||
<div class="mk-settings">
|
<div class="mk-settings">
|
||||||
<div class="nav">
|
<div class="nav">
|
||||||
<p :class="{ active: page == 'profile' }" @mousedown="page = 'profile'">%fa:user .fw%%i18n:@profile%</p>
|
<p :class="{ active: page == 'profile' }" @mousedown="page = 'profile'">%fa:user .fw%%i18n:@profile%</p>
|
||||||
|
<p :class="{ active: page == 'theme' }" @mousedown="page = 'theme'">%fa:palette .fw%%i18n:@theme%</p>
|
||||||
<p :class="{ active: page == 'web' }" @mousedown="page = 'web'">%fa:desktop .fw%Web</p>
|
<p :class="{ active: page == 'web' }" @mousedown="page = 'web'">%fa:desktop .fw%Web</p>
|
||||||
<p :class="{ active: page == 'notification' }" @mousedown="page = 'notification'">%fa:R bell .fw%%i18n:@notification%</p>
|
<p :class="{ active: page == 'notification' }" @mousedown="page = 'notification'">%fa:R bell .fw%%i18n:@notification%</p>
|
||||||
<p :class="{ active: page == 'drive' }" @mousedown="page = 'drive'">%fa:cloud .fw%%i18n:@drive%</p>
|
<p :class="{ active: page == 'drive' }" @mousedown="page = 'drive'">%fa:cloud .fw%%i18n:@drive%</p>
|
||||||
<p :class="{ active: page == 'hashtags' }" @mousedown="page = 'hashtags'">%fa:hashtag .fw%%i18n:@tags%</p>
|
<p :class="{ active: page == 'hashtags' }" @mousedown="page = 'hashtags'">%fa:hashtag .fw%%i18n:@tags%</p>
|
||||||
<p :class="{ active: page == 'mute' }" @mousedown="page = 'mute'">%fa:ban .fw%%i18n:@mute%</p>
|
<p :class="{ active: page == 'mute' }" @mousedown="page = 'mute'">%fa:ban .fw%%i18n:@mute%</p>
|
||||||
<p :class="{ active: page == 'apps' }" @mousedown="page = 'apps'">%fa:puzzle-piece .fw%%i18n:@apps%</p>
|
<p :class="{ active: page == 'apps' }" @mousedown="page = 'apps'">%fa:puzzle-piece .fw%%i18n:@apps%</p>
|
||||||
<p :class="{ active: page == 'twitter' }" @mousedown="page = 'twitter'">%fa:B twitter .fw%Twitter</p>
|
|
||||||
<p :class="{ active: page == 'security' }" @mousedown="page = 'security'">%fa:unlock-alt .fw%%i18n:@security%</p>
|
<p :class="{ active: page == 'security' }" @mousedown="page = 'security'">%fa:unlock-alt .fw%%i18n:@security%</p>
|
||||||
<p :class="{ active: page == 'api' }" @mousedown="page = 'api'">%fa:key .fw%API</p>
|
<p :class="{ active: page == 'api' }" @mousedown="page = 'api'">%fa:key .fw%API</p>
|
||||||
<p :class="{ active: page == 'other' }" @mousedown="page = 'other'">%fa:cogs .fw%%i18n:@other%</p>
|
<p :class="{ active: page == 'other' }" @mousedown="page = 'other'">%fa:cogs .fw%%i18n:@other%</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="pages">
|
<div class="pages">
|
||||||
<section class="profile" v-show="page == 'profile'">
|
<div class="profile" v-show="page == 'profile'">
|
||||||
<h1>%i18n:@profile%</h1>
|
<mk-profile-editor/>
|
||||||
<x-profile/>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="web" v-show="page == 'web'">
|
<ui-card>
|
||||||
<h1>%i18n:@theme%</h1>
|
<div slot="title">%fa:B twitter% %i18n:@twitter%</div>
|
||||||
<mk-theme/>
|
<section>
|
||||||
</section>
|
<mk-twitter-setting/>
|
||||||
|
</section>
|
||||||
|
</ui-card>
|
||||||
|
</div>
|
||||||
|
|
||||||
<section class="web" v-show="page == 'web'">
|
<ui-card class="theme" v-show="page == 'theme'">
|
||||||
<h1>%i18n:@behaviour%</h1>
|
<div slot="title">%fa:palette% %i18n:@theme%</div>
|
||||||
<ui-switch v-model="fetchOnScroll">
|
|
||||||
%i18n:@fetch-on-scroll%
|
<section>
|
||||||
<span slot="desc">%i18n:@fetch-on-scroll-desc%</span>
|
<mk-theme/>
|
||||||
</ui-switch>
|
</section>
|
||||||
<ui-switch v-model="autoPopout">
|
</ui-card>
|
||||||
%i18n:@auto-popout%
|
|
||||||
<span slot="desc">%i18n:@auto-popout-desc%</span>
|
<ui-card class="web" v-show="page == 'web'">
|
||||||
</ui-switch>
|
<div slot="title">%fa:sliders-h% %i18n:@behaviour%</div>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<ui-switch v-model="fetchOnScroll">
|
||||||
|
%i18n:@fetch-on-scroll%
|
||||||
|
<span slot="desc">%i18n:@fetch-on-scroll-desc%</span>
|
||||||
|
</ui-switch>
|
||||||
|
<ui-switch v-model="autoPopout">
|
||||||
|
%i18n:@auto-popout%
|
||||||
|
<span slot="desc">%i18n:@auto-popout-desc%</span>
|
||||||
|
</ui-switch>
|
||||||
|
<ui-switch v-model="deckNav">%i18n:@deck-nav%<span slot="desc">%i18n:@deck-nav-desc%</span></ui-switch>
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>%i18n:@advanced%</summary>
|
||||||
|
<ui-switch v-model="apiViaStream">
|
||||||
|
%i18n:@api-via-stream%
|
||||||
|
<span slot="desc">%i18n:@api-via-stream-desc%</span>
|
||||||
|
</ui-switch>
|
||||||
|
</details>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<header>%i18n:@timeline%</header>
|
||||||
|
<ui-switch v-model="showMyRenotes">%i18n:@show-my-renotes%</ui-switch>
|
||||||
|
<ui-switch v-model="showRenotedMyNotes">%i18n:@show-renoted-my-notes%</ui-switch>
|
||||||
|
<ui-switch v-model="showLocalRenotes">%i18n:@show-local-renotes%</ui-switch>
|
||||||
|
</section>
|
||||||
|
|
||||||
<section>
|
<section>
|
||||||
<header>%i18n:@note-visibility%</header>
|
<header>%i18n:@note-visibility%</header>
|
||||||
@@ -49,24 +77,30 @@
|
|||||||
</ui-select>
|
</ui-select>
|
||||||
</section>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
|
</ui-card>
|
||||||
|
|
||||||
<details>
|
<ui-card class="web" v-show="page == 'web'">
|
||||||
<summary>%i18n:@advanced%</summary>
|
<div slot="title">%fa:desktop% %i18n:@display%</div>
|
||||||
<ui-switch v-model="apiViaStream">
|
|
||||||
%i18n:@api-via-stream%
|
|
||||||
<span slot="desc">%i18n:@api-via-stream-desc%</span>
|
|
||||||
</ui-switch>
|
|
||||||
</details>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="web" v-show="page == 'web'">
|
<section>
|
||||||
<h1>%i18n:@display%</h1>
|
<ui-switch v-model="showPostFormOnTopOfTl">%i18n:@post-form-on-timeline%</ui-switch>
|
||||||
<div class="div">
|
<ui-button @click="customizeHome">%i18n:@customize%</ui-button>
|
||||||
<button class="ui button" @click="customizeHome" style="margin-bottom: 16px">%i18n:@customize%</button>
|
</section>
|
||||||
</div>
|
<section>
|
||||||
<div class="div">
|
<header>%i18n:@wallpaper%</header>
|
||||||
<button class="ui" @click="updateWallpaper">%i18n:@choose-wallpaper%</button>
|
<ui-button @click="updateWallpaper">%i18n:@choose-wallpaper%</ui-button>
|
||||||
<button class="ui" @click="deleteWallpaper">%i18n:@delete-wallpaper%</button>
|
<ui-button @click="deleteWallpaper">%i18n:@delete-wallpaper%</ui-button>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<header>%i18n:@navbar-position%</header>
|
||||||
|
<ui-radio v-model="navbar" value="top">%i18n:@navbar-position-top%</ui-radio>
|
||||||
|
<ui-radio v-model="navbar" value="left">%i18n:@navbar-position-left%</ui-radio>
|
||||||
|
<ui-radio v-model="navbar" value="right">%i18n:@navbar-position-right%</ui-radio>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<ui-switch v-model="deckDefault">%i18n:@deck-default%</ui-switch>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
<ui-switch v-model="darkmode">%i18n:@dark-mode%</ui-switch>
|
<ui-switch v-model="darkmode">%i18n:@dark-mode%</ui-switch>
|
||||||
<ui-switch v-model="useShadow">%i18n:@use-shadow%</ui-switch>
|
<ui-switch v-model="useShadow">%i18n:@use-shadow%</ui-switch>
|
||||||
<ui-switch v-model="roundedCorners">%i18n:@rounded-corners%</ui-switch>
|
<ui-switch v-model="roundedCorners">%i18n:@rounded-corners%</ui-switch>
|
||||||
@@ -75,164 +109,192 @@
|
|||||||
<ui-switch v-model="contrastedAcct">%i18n:@contrasted-acct%</ui-switch>
|
<ui-switch v-model="contrastedAcct">%i18n:@contrasted-acct%</ui-switch>
|
||||||
<ui-switch v-model="showFullAcct">%i18n:common.show-full-acct%</ui-switch>
|
<ui-switch v-model="showFullAcct">%i18n:common.show-full-acct%</ui-switch>
|
||||||
<ui-switch v-model="iLikeSushi">%i18n:common.i-like-sushi%</ui-switch>
|
<ui-switch v-model="iLikeSushi">%i18n:common.i-like-sushi%</ui-switch>
|
||||||
</div>
|
</section>
|
||||||
<ui-switch v-model="showPostFormOnTopOfTl">%i18n:@post-form-on-timeline%</ui-switch>
|
<section>
|
||||||
<ui-switch v-model="suggestRecentHashtags">%i18n:@suggest-recent-hashtags%</ui-switch>
|
<ui-switch v-model="suggestRecentHashtags">%i18n:@suggest-recent-hashtags%</ui-switch>
|
||||||
<ui-switch v-model="showClockOnHeader">%i18n:@show-clock-on-header%</ui-switch>
|
<ui-switch v-model="showClockOnHeader">%i18n:@show-clock-on-header%</ui-switch>
|
||||||
<ui-switch v-model="alwaysShowNsfw">%i18n:common.always-show-nsfw%</ui-switch>
|
<ui-switch v-model="alwaysShowNsfw">%i18n:common.always-show-nsfw%</ui-switch>
|
||||||
<ui-switch v-model="showReplyTarget">%i18n:@show-reply-target%</ui-switch>
|
<ui-switch v-model="showReplyTarget">%i18n:@show-reply-target%</ui-switch>
|
||||||
<ui-switch v-model="showMyRenotes">%i18n:@show-my-renotes%</ui-switch>
|
<ui-switch v-model="showMaps">%i18n:@show-maps%</ui-switch>
|
||||||
<ui-switch v-model="showRenotedMyNotes">%i18n:@show-renoted-my-notes%</ui-switch>
|
<ui-switch v-model="disableAnimatedMfm">%i18n:common.disable-animated-mfm%</ui-switch>
|
||||||
<ui-switch v-model="showLocalRenotes">%i18n:@show-local-renotes%</ui-switch>
|
</section>
|
||||||
<ui-switch v-model="showMaps">%i18n:@show-maps%</ui-switch>
|
<section>
|
||||||
<ui-switch v-model="disableAnimatedMfm">%i18n:common.disable-animated-mfm%</ui-switch>
|
<header>%i18n:@deck-column-align%</header>
|
||||||
<ui-switch v-model="games_reversi_showBoardLabels">%i18n:common.show-reversi-board-labels%</ui-switch>
|
<ui-radio v-model="deckColumnAlign" value="center">%i18n:@deck-column-align-center%</ui-radio>
|
||||||
<ui-switch v-model="games_reversi_useContrastStones">%i18n:common.use-contrast-reversi-stones%</ui-switch>
|
<ui-radio v-model="deckColumnAlign" value="left">%i18n:@deck-column-align-left%</ui-radio>
|
||||||
</section>
|
</section>
|
||||||
|
<section>
|
||||||
|
<ui-switch v-model="games_reversi_showBoardLabels">%i18n:common.show-reversi-board-labels%</ui-switch>
|
||||||
|
<ui-switch v-model="games_reversi_useContrastStones">%i18n:common.use-contrast-reversi-stones%</ui-switch>
|
||||||
|
</section>
|
||||||
|
</ui-card>
|
||||||
|
|
||||||
<section class="web" v-show="page == 'web'">
|
<ui-card class="web" v-show="page == 'web'">
|
||||||
<h1>%i18n:@sound%</h1>
|
<div slot="title">%fa:volume-up% %i18n:@sound%</div>
|
||||||
<ui-switch v-model="enableSounds">
|
|
||||||
%i18n:@enable-sounds%
|
|
||||||
<span slot="desc">%i18n:@enable-sounds-desc%</span>
|
|
||||||
</ui-switch>
|
|
||||||
<label>%i18n:@volume%</label>
|
|
||||||
<input type="range"
|
|
||||||
v-model="soundVolume"
|
|
||||||
:disabled="!enableSounds"
|
|
||||||
max="1"
|
|
||||||
step="0.1"
|
|
||||||
/>
|
|
||||||
<button class="ui button" @click="soundTest">%fa:volume-up% %i18n:@test%</button>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="web" v-show="page == 'web'">
|
<section>
|
||||||
<h1>%i18n:@mobile%</h1>
|
<ui-switch v-model="enableSounds">
|
||||||
<ui-switch v-model="disableViaMobile">%i18n:@disable-via-mobile%</ui-switch>
|
%i18n:@enable-sounds%
|
||||||
</section>
|
<span slot="desc">%i18n:@enable-sounds-desc%</span>
|
||||||
|
|
||||||
<section class="web" v-show="page == 'web'">
|
|
||||||
<h1>%i18n:@language%</h1>
|
|
||||||
<select v-model="lang" placeholder="%i18n:@pick-language%">
|
|
||||||
<optgroup label="%i18n:@recommended%">
|
|
||||||
<option value="">%i18n:@auto%</option>
|
|
||||||
</optgroup>
|
|
||||||
|
|
||||||
<optgroup label="%i18n:@specify-language%">
|
|
||||||
<option v-for="x in langs" :value="x[0]" :key="x[0]">{{ x[1] }}</option>
|
|
||||||
</optgroup>
|
|
||||||
</select>
|
|
||||||
<div class="none ui info">
|
|
||||||
<p>%fa:info-circle%%i18n:@language-desc%</p>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="web" v-show="page == 'web'">
|
|
||||||
<h1>%i18n:@cache%</h1>
|
|
||||||
<button class="ui button" @click="clean">%i18n:@clean-cache%</button>
|
|
||||||
<div class="none ui info warn">
|
|
||||||
<p>%fa:exclamation-triangle%%i18n:@cache-warn%</p>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="notification" v-show="page == 'notification'">
|
|
||||||
<h1>%i18n:@notification%</h1>
|
|
||||||
<ui-switch v-model="$store.state.i.settings.autoWatch" @change="onChangeAutoWatch">
|
|
||||||
%i18n:@auto-watch%
|
|
||||||
<span slot="desc">%i18n:@auto-watch-desc%</span>
|
|
||||||
</ui-switch>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="drive" v-show="page == 'drive'">
|
|
||||||
<h1>%i18n:@drive%</h1>
|
|
||||||
<x-drive/>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="hashtags" v-show="page == 'hashtags'">
|
|
||||||
<h1>%i18n:@tags%</h1>
|
|
||||||
<x-tags/>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="mute" v-show="page == 'mute'">
|
|
||||||
<h1>%i18n:@mute%</h1>
|
|
||||||
<x-mute/>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="apps" v-show="page == 'apps'">
|
|
||||||
<h1>%i18n:@apps%</h1>
|
|
||||||
<x-apps/>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="twitter" v-show="page == 'twitter'">
|
|
||||||
<h1>Twitter</h1>
|
|
||||||
<mk-twitter-setting/>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="password" v-show="page == 'security'">
|
|
||||||
<h1>%i18n:@password%</h1>
|
|
||||||
<x-password/>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="2fa" v-show="page == 'security'">
|
|
||||||
<h1>%i18n:@2fa%</h1>
|
|
||||||
<x-2fa/>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="signin" v-show="page == 'security'">
|
|
||||||
<h1>%i18n:@signin%</h1>
|
|
||||||
<x-signins/>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="api" v-show="page == 'api'">
|
|
||||||
<h1>API</h1>
|
|
||||||
<x-api/>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="other" v-show="page == 'other'">
|
|
||||||
<h1>%i18n:@about%</h1>
|
|
||||||
<p v-if="meta">%i18n:@operator%: <i><a :href="meta.maintainer.url" target="_blank">{{ meta.maintainer.name }}</a></i></p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="other" v-show="page == 'other'">
|
|
||||||
<h1>%i18n:@update%</h1>
|
|
||||||
<p>
|
|
||||||
<span>%i18n:@version% <i>{{ version }}</i></span>
|
|
||||||
<template v-if="latestVersion !== undefined">
|
|
||||||
<br>
|
|
||||||
<span>%i18n:@latest-version% <i>{{ latestVersion ? latestVersion : version }}</i></span>
|
|
||||||
</template>
|
|
||||||
</p>
|
|
||||||
<button class="ui button block" @click="checkForUpdate" :disabled="checkingForUpdate">
|
|
||||||
<template v-if="checkingForUpdate">%i18n:@update-checking%<mk-ellipsis/></template>
|
|
||||||
<template v-else>%i18n:@do-update%</template>
|
|
||||||
</button>
|
|
||||||
<details>
|
|
||||||
<summary>%i18n:@update-settings%</summary>
|
|
||||||
<ui-switch v-model="preventUpdate">
|
|
||||||
%i18n:@prevent-update%
|
|
||||||
<span slot="desc">%i18n:@prevent-update-desc%</span>
|
|
||||||
</ui-switch>
|
</ui-switch>
|
||||||
</details>
|
<label>%i18n:@volume%</label>
|
||||||
</section>
|
<input type="range"
|
||||||
|
v-model="soundVolume"
|
||||||
|
:disabled="!enableSounds"
|
||||||
|
max="1"
|
||||||
|
step="0.1"
|
||||||
|
/>
|
||||||
|
<ui-button @click="soundTest">%fa:volume-up% %i18n:@test%</ui-button>
|
||||||
|
</section>
|
||||||
|
</ui-card>
|
||||||
|
|
||||||
<section class="other" v-show="page == 'other'">
|
<ui-card class="web" v-show="page == 'web'">
|
||||||
<h1>%i18n:@advanced-settings%</h1>
|
<div slot="title">%fa:language% %i18n:@language%</div>
|
||||||
<ui-switch v-model="debug">
|
<section class="fit-top">
|
||||||
%i18n:@debug-mode%
|
<ui-select v-model="lang" placeholder="%i18n:@pick-language%">
|
||||||
<span slot="desc">%i18n:@debug-mode-desc%</span>
|
<optgroup label="%i18n:@recommended%">
|
||||||
</ui-switch>
|
<option value="">%i18n:@auto%</option>
|
||||||
<ui-switch v-model="enableExperimentalFeatures">
|
</optgroup>
|
||||||
%i18n:@experimental%
|
|
||||||
<span slot="desc">%i18n:@experimental-desc%</span>
|
<optgroup label="%i18n:@specify-language%">
|
||||||
</ui-switch>
|
<option v-for="x in langs" :value="x[0]" :key="x[0]">{{ x[1] }}</option>
|
||||||
</section>
|
</optgroup>
|
||||||
|
</ui-select>
|
||||||
|
<div class="none ui info">
|
||||||
|
<p>%fa:info-circle%%i18n:@language-desc%</p>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</ui-card>
|
||||||
|
|
||||||
|
<ui-card class="web" v-show="page == 'web'">
|
||||||
|
<div slot="title">%fa:trash-alt R% %i18n:@cache%</div>
|
||||||
|
<section>
|
||||||
|
<ui-button @click="clean">%i18n:@clean-cache%</ui-button>
|
||||||
|
<div class="none ui info warn">
|
||||||
|
<p>%fa:exclamation-triangle%%i18n:@cache-warn%</p>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</ui-card>
|
||||||
|
|
||||||
|
<ui-card class="notification" v-show="page == 'notification'">
|
||||||
|
<div slot="title">%fa:bell R% %i18n:@notification%</div>
|
||||||
|
<section>
|
||||||
|
<ui-switch v-model="$store.state.i.settings.autoWatch" @change="onChangeAutoWatch">
|
||||||
|
%i18n:@auto-watch%
|
||||||
|
<span slot="desc">%i18n:@auto-watch-desc%</span>
|
||||||
|
</ui-switch>
|
||||||
|
<section>
|
||||||
|
<ui-button @click="readAllUnreadNotes">%i18n:@mark-as-read-all-unread-notes%</ui-button>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
</ui-card>
|
||||||
|
|
||||||
|
<ui-card class="drive" v-show="page == 'drive'">
|
||||||
|
<div slot="title">%fa:cloud% %i18n:@drive%</div>
|
||||||
|
<section>
|
||||||
|
<x-drive/>
|
||||||
|
</section>
|
||||||
|
</ui-card>
|
||||||
|
|
||||||
|
<ui-card class="hashtags" v-show="page == 'hashtags'">
|
||||||
|
<div slot="title">%fa:hashtag% %i18n:@tags%</div>
|
||||||
|
<section>
|
||||||
|
<x-tags/>
|
||||||
|
</section>
|
||||||
|
</ui-card>
|
||||||
|
|
||||||
|
<ui-card class="mute" v-show="page == 'mute'">
|
||||||
|
<div slot="title">%fa:ban% %i18n:@mute%</div>
|
||||||
|
<section>
|
||||||
|
<x-mute/>
|
||||||
|
</section>
|
||||||
|
</ui-card>
|
||||||
|
|
||||||
|
<ui-card class="apps" v-show="page == 'apps'">
|
||||||
|
<div slot="title">%fa:puzzle-piece% %i18n:@apps%</div>
|
||||||
|
<section>
|
||||||
|
<x-apps/>
|
||||||
|
</section>
|
||||||
|
</ui-card>
|
||||||
|
|
||||||
|
<ui-card class="password" v-show="page == 'security'">
|
||||||
|
<div slot="title">%fa:unlock-alt% %i18n:@password%</div>
|
||||||
|
<section>
|
||||||
|
<x-password/>
|
||||||
|
</section>
|
||||||
|
</ui-card>
|
||||||
|
|
||||||
|
<ui-card class="2fa" v-show="page == 'security'">
|
||||||
|
<div slot="title">%fa:mobile-alt% %i18n:@2fa%</div>
|
||||||
|
<section>
|
||||||
|
<x-2fa/>
|
||||||
|
</section>
|
||||||
|
</ui-card>
|
||||||
|
|
||||||
|
<ui-card class="signin" v-show="page == 'security'">
|
||||||
|
<div slot="title">%fa:sign-in-alt% %i18n:@signin%</div>
|
||||||
|
<section>
|
||||||
|
<x-signins/>
|
||||||
|
</section>
|
||||||
|
</ui-card>
|
||||||
|
|
||||||
|
<ui-card class="api" v-show="page == 'api'">
|
||||||
|
<div slot="title">%fa:key% API</div>
|
||||||
|
<section class="fit-top">
|
||||||
|
<x-api/>
|
||||||
|
</section>
|
||||||
|
</ui-card>
|
||||||
|
|
||||||
|
<ui-card class="other" v-show="page == 'other'">
|
||||||
|
<div slot="title">%fa:info-circle% %i18n:@about%</div>
|
||||||
|
<section>
|
||||||
|
<p v-if="meta">%i18n:@operator%: <i><a :href="meta.maintainer.url" target="_blank">{{ meta.maintainer.name }}</a></i></p>
|
||||||
|
</section>
|
||||||
|
</ui-card>
|
||||||
|
|
||||||
|
<ui-card class="other" v-show="page == 'other'">
|
||||||
|
<div slot="title">%fa:sync-alt% %i18n:@update%</div>
|
||||||
|
<section>
|
||||||
|
<p>
|
||||||
|
<span>%i18n:@version% <i>{{ version }}</i></span>
|
||||||
|
<template v-if="latestVersion !== undefined">
|
||||||
|
<br>
|
||||||
|
<span>%i18n:@latest-version% <i>{{ latestVersion ? latestVersion : version }}</i></span>
|
||||||
|
</template>
|
||||||
|
</p>
|
||||||
|
<button class="ui button block" @click="checkForUpdate" :disabled="checkingForUpdate">
|
||||||
|
<template v-if="checkingForUpdate">%i18n:@update-checking%<mk-ellipsis/></template>
|
||||||
|
<template v-else>%i18n:@do-update%</template>
|
||||||
|
</button>
|
||||||
|
<details>
|
||||||
|
<summary>%i18n:@update-settings%</summary>
|
||||||
|
<ui-switch v-model="preventUpdate">
|
||||||
|
%i18n:@prevent-update%
|
||||||
|
<span slot="desc">%i18n:@prevent-update-desc%</span>
|
||||||
|
</ui-switch>
|
||||||
|
</details>
|
||||||
|
</section>
|
||||||
|
</ui-card>
|
||||||
|
|
||||||
|
<ui-card class="other" v-show="page == 'other'">
|
||||||
|
<div slot="title">%fa:cogs% %i18n:@advanced-settings%</div>
|
||||||
|
<section>
|
||||||
|
<ui-switch v-model="debug">
|
||||||
|
%i18n:@debug-mode%
|
||||||
|
<span slot="desc">%i18n:@debug-mode-desc%</span>
|
||||||
|
</ui-switch>
|
||||||
|
<ui-switch v-model="enableExperimentalFeatures">
|
||||||
|
%i18n:@experimental%
|
||||||
|
<span slot="desc">%i18n:@experimental-desc%</span>
|
||||||
|
</ui-switch>
|
||||||
|
</section>
|
||||||
|
</ui-card>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import XProfile from './settings.profile.vue';
|
|
||||||
import XMute from './settings.mute.vue';
|
import XMute from './settings.mute.vue';
|
||||||
import XPassword from './settings.password.vue';
|
import XPassword from './settings.password.vue';
|
||||||
import X2fa from './settings.2fa.vue';
|
import X2fa from './settings.2fa.vue';
|
||||||
@@ -246,7 +308,6 @@ import checkForUpdate from '../../../common/scripts/check-for-update';
|
|||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
components: {
|
components: {
|
||||||
XProfile,
|
|
||||||
XMute,
|
XMute,
|
||||||
XPassword,
|
XPassword,
|
||||||
X2fa,
|
X2fa,
|
||||||
@@ -288,11 +349,31 @@ export default Vue.extend({
|
|||||||
set(value) { this.$store.commit('device/set', { key: 'autoPopout', value }); }
|
set(value) { this.$store.commit('device/set', { key: 'autoPopout', value }); }
|
||||||
},
|
},
|
||||||
|
|
||||||
|
deckNav: {
|
||||||
|
get() { return this.$store.state.settings.deckNav; },
|
||||||
|
set(value) { this.$store.commit('settings/set', { key: 'deckNav', value }); }
|
||||||
|
},
|
||||||
|
|
||||||
darkmode: {
|
darkmode: {
|
||||||
get() { return this.$store.state.device.darkmode; },
|
get() { return this.$store.state.device.darkmode; },
|
||||||
set(value) { this.$store.commit('device/set', { key: 'darkmode', value }); }
|
set(value) { this.$store.commit('device/set', { key: 'darkmode', value }); }
|
||||||
},
|
},
|
||||||
|
|
||||||
|
navbar: {
|
||||||
|
get() { return this.$store.state.device.navbar; },
|
||||||
|
set(value) { this.$store.commit('device/set', { key: 'navbar', value }); }
|
||||||
|
},
|
||||||
|
|
||||||
|
deckColumnAlign: {
|
||||||
|
get() { return this.$store.state.device.deckColumnAlign; },
|
||||||
|
set(value) { this.$store.commit('device/set', { key: 'deckColumnAlign', value }); }
|
||||||
|
},
|
||||||
|
|
||||||
|
deckDefault: {
|
||||||
|
get() { return this.$store.state.device.deckDefault; },
|
||||||
|
set(value) { this.$store.commit('device/set', { key: 'deckDefault', value }); }
|
||||||
|
},
|
||||||
|
|
||||||
enableSounds: {
|
enableSounds: {
|
||||||
get() { return this.$store.state.device.enableSounds; },
|
get() { return this.$store.state.device.enableSounds; },
|
||||||
set(value) { this.$store.commit('device/set', { key: 'enableSounds', value }); }
|
set(value) { this.$store.commit('device/set', { key: 'enableSounds', value }); }
|
||||||
@@ -426,11 +507,6 @@ export default Vue.extend({
|
|||||||
disableAnimatedMfm: {
|
disableAnimatedMfm: {
|
||||||
get() { return this.$store.state.settings.disableAnimatedMfm; },
|
get() { return this.$store.state.settings.disableAnimatedMfm; },
|
||||||
set(value) { this.$store.dispatch('settings/set', { key: 'disableAnimatedMfm', value }); }
|
set(value) { this.$store.dispatch('settings/set', { key: 'disableAnimatedMfm', value }); }
|
||||||
},
|
|
||||||
|
|
||||||
disableViaMobile: {
|
|
||||||
get() { return this.$store.state.settings.disableViaMobile; },
|
|
||||||
set(value) { this.$store.dispatch('settings/set', { key: 'disableViaMobile', value }); }
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
@@ -439,6 +515,9 @@ export default Vue.extend({
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
readAllUnreadNotes() {
|
||||||
|
(this as any).api('i/read_all_unread_notes');
|
||||||
|
},
|
||||||
customizeHome() {
|
customizeHome() {
|
||||||
this.$router.push('/i/customize-home');
|
this.$router.push('/i/customize-home');
|
||||||
this.$emit('done');
|
this.$emit('done');
|
||||||
@@ -508,7 +587,8 @@ export default Vue.extend({
|
|||||||
height 100%
|
height 100%
|
||||||
padding 16px 0 0 0
|
padding 16px 0 0 0
|
||||||
overflow auto
|
overflow auto
|
||||||
border-right solid 1px var(--faceDivider)
|
box-shadow var(--shadowRight)
|
||||||
|
z-index 1
|
||||||
|
|
||||||
> p
|
> p
|
||||||
display block
|
display block
|
||||||
@@ -534,34 +614,10 @@ export default Vue.extend({
|
|||||||
height 100%
|
height 100%
|
||||||
flex auto
|
flex auto
|
||||||
overflow auto
|
overflow auto
|
||||||
|
background var(--bg)
|
||||||
|
|
||||||
> section
|
> section
|
||||||
margin 32px
|
margin 32px
|
||||||
color var(--text)
|
color var(--text)
|
||||||
|
|
||||||
> h1
|
|
||||||
margin 0 0 1em 0
|
|
||||||
padding 0 0 8px 0
|
|
||||||
font-size 1em
|
|
||||||
border-bottom solid 1px var(--faceDivider)
|
|
||||||
|
|
||||||
&, >>> *
|
|
||||||
.ui.button.block
|
|
||||||
margin 16px 0
|
|
||||||
|
|
||||||
> section
|
|
||||||
margin 32px 0
|
|
||||||
|
|
||||||
> h2
|
|
||||||
margin 0 0 1em 0
|
|
||||||
padding 0 0 8px 0
|
|
||||||
font-size 1em
|
|
||||||
color var(--text)
|
|
||||||
border-bottom solid 1px var(--faceDivider)
|
|
||||||
|
|
||||||
> .web
|
|
||||||
> .div
|
|
||||||
border-bottom solid 1px var(--faceDivider)
|
|
||||||
margin 16px 0
|
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<span v-if="note.deletedAt" style="opacity: 0.5">%i18n:@deleted%</span>
|
<span v-if="note.deletedAt" style="opacity: 0.5">%i18n:@deleted%</span>
|
||||||
<a class="reply" v-if="note.replyId">%fa:reply%</a>
|
<a class="reply" v-if="note.replyId">%fa:reply%</a>
|
||||||
<misskey-flavored-markdown v-if="note.text" :text="note.text" :i="$store.state.i"/>
|
<misskey-flavored-markdown v-if="note.text" :text="note.text" :i="$store.state.i"/>
|
||||||
<a class="rp" v-if="note.renoteId" :href="`/notes/${note.renoteId}`">RP: ...</a>
|
<a class="rp" v-if="note.renoteId" :href="`/notes/${note.renoteId}`">RN: ...</a>
|
||||||
</div>
|
</div>
|
||||||
<details v-if="note.files.length > 0">
|
<details v-if="note.files.length > 0">
|
||||||
<summary>({{ '%i18n:@media-count%'.replace('{}', note.files.length) }})</summary>
|
<summary>({{ '%i18n:@media-count%'.replace('{}', note.files.length) }})</summary>
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="mk-timeline-core">
|
<div class="mk-timeline-core">
|
||||||
<mk-friends-maker v-if="src == 'home' && alone"/>
|
<mk-friends-maker v-if="src == 'home' && alone"/>
|
||||||
<div class="fetching" v-if="fetching">
|
|
||||||
<mk-ellipsis-icon/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<mk-notes ref="timeline" :more="existMore ? more : null">
|
<mk-notes ref="timeline" :more="existMore ? more : null">
|
||||||
<p :class="$style.empty" slot="empty">
|
<p :class="$style.empty" slot="empty">
|
||||||
@@ -170,15 +167,10 @@ export default Vue.extend({
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="stylus" scoped>
|
<style lang="stylus" scoped>
|
||||||
|
|
||||||
|
|
||||||
.mk-timeline-core
|
.mk-timeline-core
|
||||||
> .mk-friends-maker
|
> .mk-friends-maker
|
||||||
border-bottom solid 1px #eee
|
border-bottom solid 1px #eee
|
||||||
|
|
||||||
> .fetching
|
|
||||||
padding 64px 0
|
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style lang="stylus" module>
|
<style lang="stylus" module>
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
<li @click="list">
|
<li @click="list">
|
||||||
<p>%fa:list%<span>%i18n:@lists%</span>%fa:angle-right%</p>
|
<p>%fa:list%<span>%i18n:@lists%</span>%fa:angle-right%</p>
|
||||||
</li>
|
</li>
|
||||||
<li @click="followRequests" v-if="$store.state.i.isLocked">
|
<li @click="followRequests" v-if="($store.state.i.isLocked || $store.state.i.carefulBot)">
|
||||||
<p>%fa:envelope R%<span>%i18n:@follow-requests%<i v-if="$store.state.i.pendingReceivedFollowRequestsCount">{{ $store.state.i.pendingReceivedFollowRequestsCount }}</i></span>%fa:angle-right%</p>
|
<p>%fa:envelope R%<span>%i18n:@follow-requests%<i v-if="$store.state.i.pendingReceivedFollowRequestsCount">{{ $store.state.i.pendingReceivedFollowRequestsCount }}</i></span>%fa:angle-right%</p>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
@@ -157,6 +157,9 @@ export default Vue.extend({
|
|||||||
font-family Meiryo, sans-serif
|
font-family Meiryo, sans-serif
|
||||||
text-decoration none
|
text-decoration none
|
||||||
|
|
||||||
|
@media (max-width 1100px)
|
||||||
|
display none
|
||||||
|
|
||||||
[data-fa]
|
[data-fa]
|
||||||
margin-left 8px
|
margin-left 8px
|
||||||
|
|
||||||
@@ -171,6 +174,9 @@ export default Vue.extend({
|
|||||||
border-radius 4px
|
border-radius 4px
|
||||||
transition filter 100ms ease
|
transition filter 100ms ease
|
||||||
|
|
||||||
|
@media (max-width 1100px)
|
||||||
|
margin-left 8px
|
||||||
|
|
||||||
> .menu
|
> .menu
|
||||||
$bgcolor = var(--face)
|
$bgcolor = var(--face)
|
||||||
display block
|
display block
|
||||||
|
|||||||
@@ -2,18 +2,22 @@
|
|||||||
<div class="nav">
|
<div class="nav">
|
||||||
<ul>
|
<ul>
|
||||||
<template v-if="$store.getters.isSignedIn">
|
<template v-if="$store.getters.isSignedIn">
|
||||||
<li class="home" :class="{ active: $route.name == 'index' }" @click="goToTop">
|
<template v-if="$store.state.device.deckDefault">
|
||||||
<router-link to="/">
|
<li class="deck" :class="{ active: $route.name == 'deck' || $route.name == 'index' }" @click="goToTop">
|
||||||
%fa:home%
|
<router-link to="/">%fa:columns%<p>%i18n:@deck%</p></router-link>
|
||||||
<p>%i18n:@home%</p>
|
</li>
|
||||||
</router-link>
|
<li class="home" :class="{ active: $route.name == 'home' }" @click="goToTop">
|
||||||
</li>
|
<router-link to="/home">%fa:home%<p>%i18n:@home%</p></router-link>
|
||||||
<li class="deck" :class="{ active: $route.name == 'deck' }" @click="goToTop">
|
</li>
|
||||||
<router-link to="/deck">
|
</template>
|
||||||
%fa:columns%
|
<template v-else>
|
||||||
<p>%i18n:@deck%</p>
|
<li class="home" :class="{ active: $route.name == 'home' || $route.name == 'index' }" @click="goToTop">
|
||||||
</router-link>
|
<router-link to="/">%fa:home%<p>%i18n:@home%</p></router-link>
|
||||||
</li>
|
</li>
|
||||||
|
<li class="deck" :class="{ active: $route.name == 'deck' }" @click="goToTop">
|
||||||
|
<router-link to="/deck">%fa:columns%<p>%i18n:@deck%</p></router-link>
|
||||||
|
</li>
|
||||||
|
</template>
|
||||||
<li class="messaging">
|
<li class="messaging">
|
||||||
<a @click="messaging">
|
<a @click="messaging">
|
||||||
%fa:comments%
|
%fa:comments%
|
||||||
|
|||||||
@@ -17,8 +17,6 @@ export default Vue.extend({
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="stylus" scoped>
|
<style lang="stylus" scoped>
|
||||||
|
|
||||||
|
|
||||||
.note
|
.note
|
||||||
display inline-block
|
display inline-block
|
||||||
padding 8px
|
padding 8px
|
||||||
|
|||||||
@@ -29,6 +29,9 @@ export default Vue.extend({
|
|||||||
|
|
||||||
<style lang="stylus" scoped>
|
<style lang="stylus" scoped>
|
||||||
.search
|
.search
|
||||||
|
@media (max-width 800px)
|
||||||
|
display none !important
|
||||||
|
|
||||||
> [data-fa]
|
> [data-fa]
|
||||||
display block
|
display block
|
||||||
position absolute
|
position absolute
|
||||||
@@ -58,6 +61,9 @@ export default Vue.extend({
|
|||||||
transition color 0.5s ease, border 0.5s ease
|
transition color 0.5s ease, border 0.5s ease
|
||||||
color var(--desktopHeaderSearchFg)
|
color var(--desktopHeaderSearchFg)
|
||||||
|
|
||||||
|
@media (max-width 1000px)
|
||||||
|
width 10em
|
||||||
|
|
||||||
&::placeholder
|
&::placeholder
|
||||||
color var(--desktopHeaderFg)
|
color var(--desktopHeaderFg)
|
||||||
|
|
||||||
|
|||||||
378
src/client/app/desktop/views/components/ui.sidebar.vue
Normal file
378
src/client/app/desktop/views/components/ui.sidebar.vue
Normal file
@@ -0,0 +1,378 @@
|
|||||||
|
<template>
|
||||||
|
<div class="header" :class="navbar">
|
||||||
|
<div class="body">
|
||||||
|
<div class="post">
|
||||||
|
<button @click="post" title="%i18n:@post%">%fa:pencil-alt%</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="nav" v-if="$store.getters.isSignedIn">
|
||||||
|
<template v-if="$store.state.device.deckDefault">
|
||||||
|
<div class="deck" :class="{ active: $route.name == 'deck' || $route.name == 'index' }" @click="goToTop">
|
||||||
|
<router-link to="/">%fa:columns%</router-link>
|
||||||
|
</div>
|
||||||
|
<div class="home" :class="{ active: $route.name == 'home' }" @click="goToTop">
|
||||||
|
<router-link to="/home">%fa:home%</router-link>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<template v-else>
|
||||||
|
<div class="home" :class="{ active: $route.name == 'home' || $route.name == 'index' }" @click="goToTop">
|
||||||
|
<router-link to="/">%fa:home%</router-link>
|
||||||
|
</div>
|
||||||
|
<div class="deck" :class="{ active: $route.name == 'deck' }" @click="goToTop">
|
||||||
|
<router-link to="/deck">%fa:columns%</router-link>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<div class="messaging">
|
||||||
|
<a @click="messaging">%fa:comments%<template v-if="hasUnreadMessagingMessage">%fa:circle%</template></a>
|
||||||
|
</div>
|
||||||
|
<div class="game">
|
||||||
|
<a @click="game">%fa:gamepad%<template v-if="hasGameInvitations">%fa:circle%</template></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="nav bottom" v-if="$store.getters.isSignedIn">
|
||||||
|
<div>
|
||||||
|
<a @click="drive">%fa:cloud%</a>
|
||||||
|
</div>
|
||||||
|
<div ref="notificationsButton" :class="{ active: showNotifications }">
|
||||||
|
<a @click="notifications">%fa:R bell%</a>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<a @click="settings">%fa:cog%</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="account">
|
||||||
|
<router-link :to="`/@${ $store.state.i.username }`">
|
||||||
|
<mk-avatar class="avatar" :user="$store.state.i"/>
|
||||||
|
</router-link>
|
||||||
|
|
||||||
|
<div class="nav menu">
|
||||||
|
<div class="signout">
|
||||||
|
<a @click="signout">%fa:power-off%</a>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<router-link to="/i/favorites">%fa:star%</router-link>
|
||||||
|
</div>
|
||||||
|
<div v-if="($store.state.i.isLocked || $store.state.i.carefulBot)">
|
||||||
|
<a @click="followRequests">%fa:envelope R%<i v-if="$store.state.i.pendingReceivedFollowRequestsCount">{{ $store.state.i.pendingReceivedFollowRequestsCount }}</i></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="nav dark">
|
||||||
|
<div>
|
||||||
|
<a @click="dark"><template v-if="$store.state.device.darkmode">%fa:moon%</template><template v-else>%fa:R moon%</template></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<transition :name="`slide-${navbar}`">
|
||||||
|
<div class="notifications" v-if="showNotifications" ref="notifications" :class="navbar">
|
||||||
|
<mk-notifications/>
|
||||||
|
</div>
|
||||||
|
</transition>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import Vue from 'vue';
|
||||||
|
import MkUserListsWindow from './user-lists-window.vue';
|
||||||
|
import MkFollowRequestsWindow from './received-follow-requests-window.vue';
|
||||||
|
import MkSettingsWindow from './settings-window.vue';
|
||||||
|
import MkDriveWindow from './drive-window.vue';
|
||||||
|
import MkMessagingWindow from './messaging-window.vue';
|
||||||
|
import MkGameWindow from './game-window.vue';
|
||||||
|
import contains from '../../../common/scripts/contains';
|
||||||
|
|
||||||
|
export default Vue.extend({
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
hasGameInvitations: false,
|
||||||
|
connection: null,
|
||||||
|
showNotifications: false
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
computed: {
|
||||||
|
hasUnreadMessagingMessage(): boolean {
|
||||||
|
return this.$store.getters.isSignedIn && this.$store.state.i.hasUnreadMessagingMessage;
|
||||||
|
},
|
||||||
|
|
||||||
|
navbar(): string {
|
||||||
|
return this.$store.state.device.navbar;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
mounted() {
|
||||||
|
if (this.$store.getters.isSignedIn) {
|
||||||
|
this.connection = (this as any).os.stream.useSharedConnection('main');
|
||||||
|
|
||||||
|
this.connection.on('reversiInvited', this.onReversiInvited);
|
||||||
|
this.connection.on('reversi_no_invites', this.onReversiNoInvites);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
beforeDestroy() {
|
||||||
|
if (this.$store.getters.isSignedIn) {
|
||||||
|
this.connection.dispose();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
onReversiInvited() {
|
||||||
|
this.hasGameInvitations = true;
|
||||||
|
},
|
||||||
|
|
||||||
|
onReversiNoInvites() {
|
||||||
|
this.hasGameInvitations = false;
|
||||||
|
},
|
||||||
|
|
||||||
|
messaging() {
|
||||||
|
(this as any).os.new(MkMessagingWindow);
|
||||||
|
},
|
||||||
|
|
||||||
|
game() {
|
||||||
|
(this as any).os.new(MkGameWindow);
|
||||||
|
},
|
||||||
|
|
||||||
|
post() {
|
||||||
|
(this as any).apis.post();
|
||||||
|
},
|
||||||
|
|
||||||
|
drive() {
|
||||||
|
(this as any).os.new(MkDriveWindow);
|
||||||
|
},
|
||||||
|
|
||||||
|
list() {
|
||||||
|
const w = (this as any).os.new(MkUserListsWindow);
|
||||||
|
w.$once('choosen', list => {
|
||||||
|
this.$router.push(`i/lists/${ list.id }`);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
followRequests() {
|
||||||
|
(this as any).os.new(MkFollowRequestsWindow);
|
||||||
|
},
|
||||||
|
|
||||||
|
settings() {
|
||||||
|
(this as any).os.new(MkSettingsWindow);
|
||||||
|
},
|
||||||
|
|
||||||
|
signout() {
|
||||||
|
(this as any).os.signout();
|
||||||
|
},
|
||||||
|
|
||||||
|
notifications() {
|
||||||
|
this.showNotifications ? this.closeNotifications() : this.openNotifications();
|
||||||
|
},
|
||||||
|
|
||||||
|
openNotifications() {
|
||||||
|
this.showNotifications = true;
|
||||||
|
Array.from(document.querySelectorAll('body *')).forEach(el => {
|
||||||
|
el.addEventListener('mousedown', this.onMousedown);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
closeNotifications() {
|
||||||
|
this.showNotifications = false;
|
||||||
|
Array.from(document.querySelectorAll('body *')).forEach(el => {
|
||||||
|
el.removeEventListener('mousedown', this.onMousedown);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
onMousedown(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
if (
|
||||||
|
!contains(this.$refs.notifications, e.target) &&
|
||||||
|
this.$refs.notifications != e.target &&
|
||||||
|
!contains(this.$refs.notificationsButton, e.target) &&
|
||||||
|
this.$refs.notificationsButton != e.target
|
||||||
|
) {
|
||||||
|
this.closeNotifications();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
|
||||||
|
dark() {
|
||||||
|
this.$store.commit('device/set', {
|
||||||
|
key: 'darkmode',
|
||||||
|
value: !this.$store.state.device.darkmode
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
goToTop() {
|
||||||
|
window.scrollTo({
|
||||||
|
top: 0,
|
||||||
|
behavior: 'smooth'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="stylus" scoped>
|
||||||
|
.header
|
||||||
|
$width = 68px
|
||||||
|
|
||||||
|
position fixed
|
||||||
|
top 0
|
||||||
|
z-index 1000
|
||||||
|
width $width
|
||||||
|
height 100%
|
||||||
|
|
||||||
|
&.left
|
||||||
|
left 0
|
||||||
|
box-shadow var(--shadowRight)
|
||||||
|
|
||||||
|
&.right
|
||||||
|
right 0
|
||||||
|
box-shadow var(--shadowLeft)
|
||||||
|
|
||||||
|
> .body
|
||||||
|
position fixed
|
||||||
|
top 0
|
||||||
|
z-index 1
|
||||||
|
width $width
|
||||||
|
height 100%
|
||||||
|
background var(--desktopHeaderBg)
|
||||||
|
|
||||||
|
> .post
|
||||||
|
width $width
|
||||||
|
height $width
|
||||||
|
padding 12px
|
||||||
|
|
||||||
|
> button
|
||||||
|
display inline-block
|
||||||
|
margin 0
|
||||||
|
padding 0
|
||||||
|
height 100%
|
||||||
|
width 100%
|
||||||
|
font-size 1.2em
|
||||||
|
font-weight normal
|
||||||
|
text-decoration none
|
||||||
|
color var(--primaryForeground)
|
||||||
|
background var(--primary) !important
|
||||||
|
outline none
|
||||||
|
border none
|
||||||
|
border-radius 100%
|
||||||
|
transition background 0.1s ease
|
||||||
|
cursor pointer
|
||||||
|
|
||||||
|
*
|
||||||
|
pointer-events none
|
||||||
|
|
||||||
|
&:hover
|
||||||
|
background var(--primaryLighten10) !important
|
||||||
|
|
||||||
|
&:active
|
||||||
|
background var(--primaryDarken10) !important
|
||||||
|
transition background 0s ease
|
||||||
|
|
||||||
|
> .nav.bottom
|
||||||
|
position absolute
|
||||||
|
bottom 128px
|
||||||
|
left 0
|
||||||
|
|
||||||
|
> .account
|
||||||
|
position absolute
|
||||||
|
bottom 64px
|
||||||
|
left 0
|
||||||
|
width $width
|
||||||
|
height $width
|
||||||
|
padding 14px
|
||||||
|
|
||||||
|
> .menu
|
||||||
|
display none
|
||||||
|
position absolute
|
||||||
|
bottom 64px
|
||||||
|
left 0
|
||||||
|
background var(--desktopHeaderBg)
|
||||||
|
|
||||||
|
&:hover
|
||||||
|
> .menu
|
||||||
|
display block
|
||||||
|
|
||||||
|
> *:not(.menu)
|
||||||
|
display block
|
||||||
|
width 100%
|
||||||
|
height 100%
|
||||||
|
|
||||||
|
> .avatar
|
||||||
|
pointer-events none
|
||||||
|
width 100%
|
||||||
|
height 100%
|
||||||
|
|
||||||
|
> .dark
|
||||||
|
position absolute
|
||||||
|
bottom 0
|
||||||
|
left 0
|
||||||
|
width $width
|
||||||
|
height $width
|
||||||
|
|
||||||
|
> .notifications
|
||||||
|
position fixed
|
||||||
|
top 0
|
||||||
|
width 350px
|
||||||
|
height 100%
|
||||||
|
overflow auto
|
||||||
|
background var(--face)
|
||||||
|
|
||||||
|
&.left
|
||||||
|
left $width
|
||||||
|
box-shadow var(--shadowRight)
|
||||||
|
|
||||||
|
&.right
|
||||||
|
right $width
|
||||||
|
box-shadow var(--shadowLeft)
|
||||||
|
|
||||||
|
.nav
|
||||||
|
> *
|
||||||
|
> *
|
||||||
|
display block
|
||||||
|
width $width
|
||||||
|
line-height 52px
|
||||||
|
text-align center
|
||||||
|
font-size 18px
|
||||||
|
color var(--desktopHeaderFg)
|
||||||
|
|
||||||
|
&:hover
|
||||||
|
background rgba(0, 0, 0, 0.05)
|
||||||
|
color var(--desktopHeaderHoverFg)
|
||||||
|
text-decoration none
|
||||||
|
|
||||||
|
&:active
|
||||||
|
background rgba(0, 0, 0, 0.1)
|
||||||
|
|
||||||
|
&.left
|
||||||
|
.nav
|
||||||
|
> *
|
||||||
|
&.active
|
||||||
|
box-shadow -4px 0 var(--primary) inset
|
||||||
|
|
||||||
|
&.right
|
||||||
|
.nav
|
||||||
|
> *
|
||||||
|
&.active
|
||||||
|
box-shadow 4px 0 var(--primary) inset
|
||||||
|
|
||||||
|
.slide-left-enter-active,
|
||||||
|
.slide-left-leave-active {
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slide-left-enter, .slide-left-leave-to {
|
||||||
|
transform: translateX(-16px);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slide-right-enter-active,
|
||||||
|
.slide-right-leave-active {
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slide-right-enter, .slide-right-leave-to {
|
||||||
|
transform: translateX(16px);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -1,8 +1,9 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="mk-ui" v-hotkey.global="keymap">
|
<div class="mk-ui" v-hotkey.global="keymap">
|
||||||
<div class="bg" v-if="$store.getters.isSignedIn && $store.state.i.wallpaperUrl" :style="style"></div>
|
<div class="bg" v-if="$store.getters.isSignedIn && $store.state.i.wallpaperUrl" :style="style"></div>
|
||||||
<x-header class="header" v-show="!zenMode" ref="header"/>
|
<x-header class="header" v-if="navbar == 'top'" v-show="!zenMode" ref="header"/>
|
||||||
<div class="content">
|
<x-sidebar class="sidebar" v-if="navbar != 'top'" v-show="!zenMode" ref="sidebar"/>
|
||||||
|
<div class="content" :class="[{ sidebar: navbar != 'top', zen: zenMode }, navbar]">
|
||||||
<slot></slot>
|
<slot></slot>
|
||||||
</div>
|
</div>
|
||||||
<mk-stream-indicator v-if="$store.getters.isSignedIn"/>
|
<mk-stream-indicator v-if="$store.getters.isSignedIn"/>
|
||||||
@@ -12,10 +13,12 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import XHeader from './ui.header.vue';
|
import XHeader from './ui.header.vue';
|
||||||
|
import XSidebar from './ui.sidebar.vue';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
components: {
|
components: {
|
||||||
XHeader
|
XHeader,
|
||||||
|
XSidebar
|
||||||
},
|
},
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
@@ -25,6 +28,10 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
computed: {
|
computed: {
|
||||||
|
navbar(): string {
|
||||||
|
return this.$store.state.device.navbar;
|
||||||
|
},
|
||||||
|
|
||||||
style(): any {
|
style(): any {
|
||||||
if (!this.$store.getters.isSignedIn || this.$store.state.i.wallpaperUrl == null) return {};
|
if (!this.$store.getters.isSignedIn || this.$store.state.i.wallpaperUrl == null) return {};
|
||||||
return {
|
return {
|
||||||
@@ -45,6 +52,12 @@ export default Vue.extend({
|
|||||||
watch: {
|
watch: {
|
||||||
'$store.state.uiHeaderHeight'() {
|
'$store.state.uiHeaderHeight'() {
|
||||||
this.$el.style.paddingTop = this.$store.state.uiHeaderHeight + 'px';
|
this.$el.style.paddingTop = this.$store.state.uiHeaderHeight + 'px';
|
||||||
|
},
|
||||||
|
|
||||||
|
navbar() {
|
||||||
|
if (this.navbar != 'top') {
|
||||||
|
this.$store.commit('setUiHeaderHeight', 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -60,7 +73,9 @@ export default Vue.extend({
|
|||||||
toggleZenMode() {
|
toggleZenMode() {
|
||||||
this.zenMode = !this.zenMode;
|
this.zenMode = !this.zenMode;
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
this.$store.commit('setUiHeaderHeight', this.$refs.header.$el.offsetHeight);
|
if (this.$refs.header) {
|
||||||
|
this.$store.commit('setUiHeaderHeight', this.$refs.header.$el.offsetHeight);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -83,8 +98,13 @@ export default Vue.extend({
|
|||||||
background-attachment fixed
|
background-attachment fixed
|
||||||
opacity 0.3
|
opacity 0.3
|
||||||
|
|
||||||
> .header
|
> .content.sidebar.left
|
||||||
@media (max-width 1000px)
|
padding-left 68px
|
||||||
display none
|
|
||||||
|
> .content.sidebar.right
|
||||||
|
padding-right 68px
|
||||||
|
|
||||||
|
> .content.zen
|
||||||
|
padding 0 !important
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ export default Vue.extend({
|
|||||||
this.connection.on('stats', this.onStats);
|
this.connection.on('stats', this.onStats);
|
||||||
this.connection.on('statsLog', this.onStatsLog);
|
this.connection.on('statsLog', this.onStatsLog);
|
||||||
this.connection.send('requestLog', {
|
this.connection.send('requestLog', {
|
||||||
id: Math.random().toString(),
|
id: Math.random().toString().substr(2, 8),
|
||||||
length: 200
|
length: 200
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
<template>
|
<template>
|
||||||
<x-widgets-column v-if="column.type == 'widgets'" :column="column" :is-stacked="isStacked"/>
|
<x-widgets-column v-if="column.type == 'widgets'" :column="column" :is-stacked="isStacked" v-on="$listeners"/>
|
||||||
<x-notifications-column v-else-if="column.type == 'notifications'" :column="column" :is-stacked="isStacked"/>
|
<x-notifications-column v-else-if="column.type == 'notifications'" :column="column" :is-stacked="isStacked" v-on="$listeners"/>
|
||||||
<x-tl-column v-else-if="column.type == 'home'" :column="column" :is-stacked="isStacked"/>
|
<x-tl-column v-else-if="column.type == 'home'" :column="column" :is-stacked="isStacked" v-on="$listeners"/>
|
||||||
<x-tl-column v-else-if="column.type == 'local'" :column="column" :is-stacked="isStacked"/>
|
<x-tl-column v-else-if="column.type == 'local'" :column="column" :is-stacked="isStacked" v-on="$listeners"/>
|
||||||
<x-tl-column v-else-if="column.type == 'hybrid'" :column="column" :is-stacked="isStacked"/>
|
<x-tl-column v-else-if="column.type == 'hybrid'" :column="column" :is-stacked="isStacked" v-on="$listeners"/>
|
||||||
<x-tl-column v-else-if="column.type == 'global'" :column="column" :is-stacked="isStacked"/>
|
<x-tl-column v-else-if="column.type == 'global'" :column="column" :is-stacked="isStacked" v-on="$listeners"/>
|
||||||
<x-tl-column v-else-if="column.type == 'list'" :column="column" :is-stacked="isStacked"/>
|
<x-tl-column v-else-if="column.type == 'list'" :column="column" :is-stacked="isStacked" v-on="$listeners"/>
|
||||||
<x-tl-column v-else-if="column.type == 'hashtag'" :column="column" :is-stacked="isStacked"/>
|
<x-tl-column v-else-if="column.type == 'hashtag'" :column="column" :is-stacked="isStacked" v-on="$listeners"/>
|
||||||
<x-mentions-column v-else-if="column.type == 'mentions'" :column="column" :is-stacked="isStacked"/>
|
<x-mentions-column v-else-if="column.type == 'mentions'" :column="column" :is-stacked="isStacked" v-on="$listeners"/>
|
||||||
<x-direct-column v-else-if="column.type == 'direct'" :column="column" :is-stacked="isStacked"/>
|
<x-direct-column v-else-if="column.type == 'direct'" :column="column" :is-stacked="isStacked" v-on="$listeners"/>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
@@ -38,6 +38,12 @@ export default Vue.extend({
|
|||||||
required: false,
|
required: false,
|
||||||
default: false
|
default: false
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
focus() {
|
||||||
|
this.$children[0].focus();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="dnpfarvgbnfmyzbdquhhzyxcmstpdqzs" :class="{ naked, narrow, active, isStacked, draghover, dragging, dropready }"
|
<div class="dnpfarvgbnfmyzbdquhhzyxcmstpdqzs" :class="{ naked, narrow, active, isStacked, draghover, dragging, dropready }"
|
||||||
@dragover.prevent.stop="onDragover"
|
@dragover.prevent.stop="onDragover"
|
||||||
@dragenter.prevent="onDragenter"
|
|
||||||
@dragleave="onDragleave"
|
@dragleave="onDragleave"
|
||||||
@drop.prevent.stop="onDrop">
|
@drop.prevent.stop="onDrop"
|
||||||
|
v-hotkey="keymap">
|
||||||
<header :class="{ indicate: count > 0 }"
|
<header :class="{ indicate: count > 0 }"
|
||||||
draggable="true"
|
draggable="true"
|
||||||
@click="goTop"
|
@click="goTop"
|
||||||
@@ -16,7 +16,8 @@
|
|||||||
</button>
|
</button>
|
||||||
<slot name="header"></slot>
|
<slot name="header"></slot>
|
||||||
<span class="count" v-if="count > 0">({{ count }})</span>
|
<span class="count" v-if="count > 0">({{ count }})</span>
|
||||||
<button class="menu" ref="menu" @click.stop="showMenu">%fa:caret-down%</button>
|
<button v-if="!isTemporaryColumn" class="menu" ref="menu" @click.stop="showMenu">%fa:caret-down%</button>
|
||||||
|
<button v-else class="close" @click.stop="close">%fa:times%</button>
|
||||||
</header>
|
</header>
|
||||||
<div ref="body" v-show="active">
|
<div ref="body" v-show="active">
|
||||||
<slot></slot>
|
<slot></slot>
|
||||||
@@ -34,11 +35,13 @@ export default Vue.extend({
|
|||||||
props: {
|
props: {
|
||||||
column: {
|
column: {
|
||||||
type: Object,
|
type: Object,
|
||||||
required: true
|
required: false,
|
||||||
|
default: null
|
||||||
},
|
},
|
||||||
isStacked: {
|
isStacked: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
required: true
|
required: false,
|
||||||
|
default: false
|
||||||
},
|
},
|
||||||
name: {
|
name: {
|
||||||
type: String,
|
type: String,
|
||||||
@@ -61,6 +64,21 @@ export default Vue.extend({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
computed: {
|
||||||
|
isTemporaryColumn(): boolean {
|
||||||
|
return this.column == null;
|
||||||
|
},
|
||||||
|
|
||||||
|
keymap(): any {
|
||||||
|
return {
|
||||||
|
'shift+up': () => this.$parent.$emit('parentFocus', 'up'),
|
||||||
|
'shift+down': () => this.$parent.$emit('parentFocus', 'down'),
|
||||||
|
'shift+left': () => this.$parent.$emit('parentFocus', 'left'),
|
||||||
|
'shift+right': () => this.$parent.$emit('parentFocus', 'right'),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
inject: {
|
inject: {
|
||||||
getColumnVm: { from: 'getColumnVm' }
|
getColumnVm: { from: 'getColumnVm' }
|
||||||
},
|
},
|
||||||
@@ -96,14 +114,20 @@ export default Vue.extend({
|
|||||||
|
|
||||||
mounted() {
|
mounted() {
|
||||||
this.$refs.body.addEventListener('scroll', this.onScroll, { passive: true });
|
this.$refs.body.addEventListener('scroll', this.onScroll, { passive: true });
|
||||||
this.$root.$on('deck.column.dragStart', this.onOtherDragStart);
|
|
||||||
this.$root.$on('deck.column.dragEnd', this.onOtherDragEnd);
|
if (!this.isTemporaryColumn) {
|
||||||
|
this.$root.$on('deck.column.dragStart', this.onOtherDragStart);
|
||||||
|
this.$root.$on('deck.column.dragEnd', this.onOtherDragEnd);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
beforeDestroy() {
|
beforeDestroy() {
|
||||||
this.$refs.body.removeEventListener('scroll', this.onScroll);
|
this.$refs.body.removeEventListener('scroll', this.onScroll);
|
||||||
this.$root.$off('deck.column.dragStart', this.onOtherDragStart);
|
|
||||||
this.$root.$off('deck.column.dragEnd', this.onOtherDragEnd);
|
if (!this.isTemporaryColumn) {
|
||||||
|
this.$root.$off('deck.column.dragStart', this.onOtherDragStart);
|
||||||
|
this.$root.$off('deck.column.dragEnd', this.onOtherDragEnd);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
@@ -203,6 +227,7 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
onContextmenu(e) {
|
onContextmenu(e) {
|
||||||
|
if (this.isTemporaryColumn) return;
|
||||||
contextmenu((this as any).os)(e, this.getMenu());
|
contextmenu((this as any).os)(e, this.getMenu());
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -214,6 +239,13 @@ export default Vue.extend({
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
close() {
|
||||||
|
this.$store.commit('device/set', {
|
||||||
|
key: 'deckTemporaryColumn',
|
||||||
|
value: null
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
goTop() {
|
goTop() {
|
||||||
this.$refs.body.scrollTo({
|
this.$refs.body.scrollTo({
|
||||||
top: 0,
|
top: 0,
|
||||||
@@ -222,6 +254,12 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
onDragstart(e) {
|
onDragstart(e) {
|
||||||
|
// テンポラリカラムはドラッグさせない
|
||||||
|
if (this.isTemporaryColumn) {
|
||||||
|
e.preventDefault();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
e.dataTransfer.effectAllowed = 'move';
|
e.dataTransfer.effectAllowed = 'move';
|
||||||
e.dataTransfer.setData('mk-deck-column', this.column.id);
|
e.dataTransfer.setData('mk-deck-column', this.column.id);
|
||||||
this.dragging = true;
|
this.dragging = true;
|
||||||
@@ -232,6 +270,12 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
onDragover(e) {
|
onDragover(e) {
|
||||||
|
// テンポラリカラムにはドロップさせない
|
||||||
|
if (this.isTemporaryColumn) {
|
||||||
|
e.dataTransfer.dropEffect = 'none';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// 自分自身がドラッグされている場合
|
// 自分自身がドラッグされている場合
|
||||||
if (this.dragging) {
|
if (this.dragging) {
|
||||||
// 自分自身にはドロップさせない
|
// 自分自身にはドロップさせない
|
||||||
@@ -242,9 +286,7 @@ export default Vue.extend({
|
|||||||
const isDeckColumn = e.dataTransfer.types[0] == 'mk-deck-column';
|
const isDeckColumn = e.dataTransfer.types[0] == 'mk-deck-column';
|
||||||
|
|
||||||
e.dataTransfer.dropEffect = isDeckColumn ? 'move' : 'none';
|
e.dataTransfer.dropEffect = isDeckColumn ? 'move' : 'none';
|
||||||
},
|
|
||||||
|
|
||||||
onDragenter() {
|
|
||||||
if (!this.dragging) this.draghover = true;
|
if (!this.dragging) this.draghover = true;
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -276,13 +318,24 @@ export default Vue.extend({
|
|||||||
min-width 330px
|
min-width 330px
|
||||||
height 100%
|
height 100%
|
||||||
background var(--face)
|
background var(--face)
|
||||||
border-radius 6px
|
border-radius var(--round)
|
||||||
//box-shadow 0 2px 16px rgba(#000, 0.1)
|
box-shadow var(--shadow)
|
||||||
overflow hidden
|
overflow hidden
|
||||||
|
|
||||||
&.draghover
|
&.draghover
|
||||||
box-shadow 0 0 0 2px var(--primaryAlpha08)
|
box-shadow 0 0 0 2px var(--primaryAlpha08)
|
||||||
|
|
||||||
|
&:after
|
||||||
|
content ""
|
||||||
|
display block
|
||||||
|
position absolute
|
||||||
|
z-index 1000
|
||||||
|
top 0
|
||||||
|
left 0
|
||||||
|
width 100%
|
||||||
|
height 100%
|
||||||
|
background var(--primaryAlpha02)
|
||||||
|
|
||||||
&.dragging
|
&.dragging
|
||||||
box-shadow 0 0 0 2px var(--primaryAlpha04)
|
box-shadow 0 0 0 2px var(--primaryAlpha04)
|
||||||
|
|
||||||
@@ -310,7 +363,7 @@ export default Vue.extend({
|
|||||||
|
|
||||||
> header
|
> header
|
||||||
display flex
|
display flex
|
||||||
z-index 1
|
z-index 2
|
||||||
line-height $header-height
|
line-height $header-height
|
||||||
padding 0 16px
|
padding 0 16px
|
||||||
font-size 14px
|
font-size 14px
|
||||||
@@ -338,6 +391,8 @@ export default Vue.extend({
|
|||||||
|
|
||||||
> .toggleActive
|
> .toggleActive
|
||||||
> .menu
|
> .menu
|
||||||
|
> .close
|
||||||
|
padding 0
|
||||||
width $header-height
|
width $header-height
|
||||||
line-height $header-height
|
line-height $header-height
|
||||||
font-size 16px
|
font-size 16px
|
||||||
@@ -353,6 +408,7 @@ export default Vue.extend({
|
|||||||
margin-left -16px
|
margin-left -16px
|
||||||
|
|
||||||
> .menu
|
> .menu
|
||||||
|
> .close
|
||||||
margin-left auto
|
margin-left auto
|
||||||
margin-right -16px
|
margin-right -16px
|
||||||
|
|
||||||
|
|||||||
@@ -34,5 +34,11 @@ export default Vue.extend({
|
|||||||
return '%i18n:common.deck.direct%';
|
return '%i18n:common.deck.direct%';
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
focus() {
|
||||||
|
this.$refs.tl.focus();
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -58,6 +58,7 @@ export default Vue.extend({
|
|||||||
}, rej);
|
}, rej);
|
||||||
}));
|
}));
|
||||||
},
|
},
|
||||||
|
|
||||||
more() {
|
more() {
|
||||||
this.moreFetching = true;
|
this.moreFetching = true;
|
||||||
|
|
||||||
@@ -82,11 +83,16 @@ export default Vue.extend({
|
|||||||
|
|
||||||
return promise;
|
return promise;
|
||||||
},
|
},
|
||||||
|
|
||||||
onNote(note) {
|
onNote(note) {
|
||||||
// Prepend a note
|
// Prepend a note
|
||||||
if (note.visibility == 'specified') {
|
if (note.visibility == 'specified') {
|
||||||
(this.$refs.timeline as any).prepend(note);
|
(this.$refs.timeline as any).prepend(note);
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
focus() {
|
||||||
|
this.$refs.timeline.focus();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
112
src/client/app/desktop/views/pages/deck/deck.hashtag-column.vue
Normal file
112
src/client/app/desktop/views/pages/deck/deck.hashtag-column.vue
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
<template>
|
||||||
|
<x-column>
|
||||||
|
<span slot="header">
|
||||||
|
%fa:hashtag%<span>{{ tag }}</span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<div class="xroyrflcmhhtmlwmyiwpfqiirqokfueb">
|
||||||
|
<div ref="chart" class="chart"></div>
|
||||||
|
<x-hashtag-tl :tag-tl="tagTl" class="tl"/>
|
||||||
|
</div>
|
||||||
|
</x-column>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import Vue from 'vue';
|
||||||
|
import XColumn from './deck.column.vue';
|
||||||
|
import XHashtagTl from './deck.hashtag-tl.vue';
|
||||||
|
import * as ApexCharts from 'apexcharts';
|
||||||
|
|
||||||
|
export default Vue.extend({
|
||||||
|
components: {
|
||||||
|
XColumn,
|
||||||
|
XHashtagTl
|
||||||
|
},
|
||||||
|
|
||||||
|
props: {
|
||||||
|
tag: {
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
computed: {
|
||||||
|
tagTl(): any {
|
||||||
|
return {
|
||||||
|
query: [[this.tag]]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
mounted() {
|
||||||
|
(this as any).api('charts/hashtag', {
|
||||||
|
tag: this.tag,
|
||||||
|
span: 'hour',
|
||||||
|
limit: 24
|
||||||
|
}).then(stats => {
|
||||||
|
const local = [];
|
||||||
|
const remote = [];
|
||||||
|
|
||||||
|
const now = new Date();
|
||||||
|
const y = now.getFullYear();
|
||||||
|
const m = now.getMonth();
|
||||||
|
const d = now.getDate();
|
||||||
|
const h = now.getHours();
|
||||||
|
|
||||||
|
for (let i = 0; i < 24; i++) {
|
||||||
|
const x = new Date(y, m, d, h - i);
|
||||||
|
local.push([x, stats.local.count[i]]);
|
||||||
|
remote.push([x, stats.remote.count[i]]);
|
||||||
|
}
|
||||||
|
|
||||||
|
const chart = new ApexCharts(this.$refs.chart, {
|
||||||
|
chart: {
|
||||||
|
type: 'area',
|
||||||
|
height: 70,
|
||||||
|
sparkline: {
|
||||||
|
enabled: true
|
||||||
|
},
|
||||||
|
},
|
||||||
|
grid: {
|
||||||
|
clipMarkers: false,
|
||||||
|
padding: {
|
||||||
|
top: 16,
|
||||||
|
right: 16,
|
||||||
|
bottom: 16,
|
||||||
|
left: 16
|
||||||
|
}
|
||||||
|
},
|
||||||
|
stroke: {
|
||||||
|
curve: 'straight',
|
||||||
|
width: 2
|
||||||
|
},
|
||||||
|
series: [{
|
||||||
|
name: 'Local',
|
||||||
|
data: local
|
||||||
|
}, {
|
||||||
|
name: 'Remote',
|
||||||
|
data: remote
|
||||||
|
}],
|
||||||
|
xaxis: {
|
||||||
|
type: 'datetime',
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
chart.render();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="stylus" scoped>
|
||||||
|
.xroyrflcmhhtmlwmyiwpfqiirqokfueb
|
||||||
|
background var(--deckColumnBg)
|
||||||
|
|
||||||
|
> .chart
|
||||||
|
margin-bottom 16px
|
||||||
|
background var(--face)
|
||||||
|
|
||||||
|
> .tl
|
||||||
|
background var(--face)
|
||||||
|
|
||||||
|
</style>
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<x-notes ref="timeline" :more="existMore ? more : null" :media-view="mediaView"/>
|
<x-notes ref="timeline" :more="existMore ? more : null" :media-view="mediaView"/>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
@@ -47,14 +47,16 @@ export default Vue.extend({
|
|||||||
|
|
||||||
mounted() {
|
mounted() {
|
||||||
if (this.connection) this.connection.close();
|
if (this.connection) this.connection.close();
|
||||||
this.connection = (this as any).os.stream.connectToChannel('hashtag', this.tagTl.query);
|
this.connection = (this as any).os.stream.connectToChannel('hashtag', {
|
||||||
|
q: this.tagTl.query
|
||||||
|
});
|
||||||
this.connection.on('note', this.onNote);
|
this.connection.on('note', this.onNote);
|
||||||
|
|
||||||
this.fetch();
|
this.fetch();
|
||||||
},
|
},
|
||||||
|
|
||||||
beforeDestroy() {
|
beforeDestroy() {
|
||||||
this.connection.close();
|
this.connection.dispose();
|
||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
@@ -80,6 +82,7 @@ export default Vue.extend({
|
|||||||
}, rej);
|
}, rej);
|
||||||
}));
|
}));
|
||||||
},
|
},
|
||||||
|
|
||||||
more() {
|
more() {
|
||||||
this.moreFetching = true;
|
this.moreFetching = true;
|
||||||
|
|
||||||
@@ -105,11 +108,16 @@ export default Vue.extend({
|
|||||||
|
|
||||||
return promise;
|
return promise;
|
||||||
},
|
},
|
||||||
|
|
||||||
onNote(note) {
|
onNote(note) {
|
||||||
if (this.mediaOnly && note.files.length == 0) return;
|
if (this.mediaOnly && note.files.length == 0) return;
|
||||||
|
|
||||||
// Prepend a note
|
// Prepend a note
|
||||||
(this.$refs.timeline as any).prepend(note);
|
(this.$refs.timeline as any).prepend(note);
|
||||||
|
},
|
||||||
|
|
||||||
|
focus() {
|
||||||
|
this.$refs.timeline.focus();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<x-notes ref="timeline" :more="existMore ? more : null" :media-view="mediaView"/>
|
<x-notes ref="timeline" :more="existMore ? more : null" :media-view="mediaView"/>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
@@ -84,6 +84,7 @@ export default Vue.extend({
|
|||||||
}, rej);
|
}, rej);
|
||||||
}));
|
}));
|
||||||
},
|
},
|
||||||
|
|
||||||
more() {
|
more() {
|
||||||
this.moreFetching = true;
|
this.moreFetching = true;
|
||||||
|
|
||||||
@@ -109,17 +110,24 @@ export default Vue.extend({
|
|||||||
|
|
||||||
return promise;
|
return promise;
|
||||||
},
|
},
|
||||||
|
|
||||||
onNote(note) {
|
onNote(note) {
|
||||||
if (this.mediaOnly && note.files.length == 0) return;
|
if (this.mediaOnly && note.files.length == 0) return;
|
||||||
|
|
||||||
// Prepend a note
|
// Prepend a note
|
||||||
(this.$refs.timeline as any).prepend(note);
|
(this.$refs.timeline as any).prepend(note);
|
||||||
},
|
},
|
||||||
|
|
||||||
onUserAdded() {
|
onUserAdded() {
|
||||||
this.fetch();
|
this.fetch();
|
||||||
},
|
},
|
||||||
|
|
||||||
onUserRemoved() {
|
onUserRemoved() {
|
||||||
this.fetch();
|
this.fetch();
|
||||||
|
},
|
||||||
|
|
||||||
|
focus() {
|
||||||
|
this.$refs.timeline.focus();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<x-column :name="name" :column="column" :is-stacked="isStacked">
|
<x-column :name="name" :column="column" :is-stacked="isStacked">
|
||||||
<span slot="header">%fa:at%{{ name }}</span>
|
<span slot="header">%fa:at%{{ name }}</span>
|
||||||
|
|
||||||
<x-mentions/>
|
<x-mentions ref="tl"/>
|
||||||
</x-column>
|
</x-column>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -34,5 +34,11 @@ export default Vue.extend({
|
|||||||
return '%i18n:common.deck.mentions%';
|
return '%i18n:common.deck.mentions%';
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
focus() {
|
||||||
|
this.$refs.tl.focus();
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ export default Vue.extend({
|
|||||||
}, rej);
|
}, rej);
|
||||||
}));
|
}));
|
||||||
},
|
},
|
||||||
|
|
||||||
more() {
|
more() {
|
||||||
this.moreFetching = true;
|
this.moreFetching = true;
|
||||||
|
|
||||||
@@ -80,9 +81,14 @@ export default Vue.extend({
|
|||||||
|
|
||||||
return promise;
|
return promise;
|
||||||
},
|
},
|
||||||
|
|
||||||
onNote(note) {
|
onNote(note) {
|
||||||
// Prepend a note
|
// Prepend a note
|
||||||
(this.$refs.timeline as any).prepend(note);
|
(this.$refs.timeline as any).prepend(note);
|
||||||
|
},
|
||||||
|
|
||||||
|
focus() {
|
||||||
|
this.$refs.timeline.focus();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
74
src/client/app/desktop/views/pages/deck/deck.note-column.vue
Normal file
74
src/client/app/desktop/views/pages/deck/deck.note-column.vue
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
<template>
|
||||||
|
<x-column>
|
||||||
|
<span slot="header">
|
||||||
|
%fa:comment-alt R%<span>{{ title }}</span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<div class="rvtscbadixhhbsczoorqoaygovdeecsx" v-if="note">
|
||||||
|
<div class="is-remote" v-if="note.user.host != null">
|
||||||
|
<details>
|
||||||
|
<summary>%fa:exclamation-triangle% %i18n:common.is-remote-post%</summary>
|
||||||
|
<a :href="note.url || note.uri" target="_blank">%i18n:common.view-on-remote%</a>
|
||||||
|
</details>
|
||||||
|
</div>
|
||||||
|
<x-note :note="note" :detail="true" :mini="true"/>
|
||||||
|
</div>
|
||||||
|
</x-column>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import Vue from 'vue';
|
||||||
|
import XColumn from './deck.column.vue';
|
||||||
|
import XNotes from './deck.notes.vue';
|
||||||
|
import XNote from '../../components/note.vue';
|
||||||
|
|
||||||
|
export default Vue.extend({
|
||||||
|
components: {
|
||||||
|
XColumn,
|
||||||
|
XNotes,
|
||||||
|
XNote
|
||||||
|
},
|
||||||
|
|
||||||
|
props: {
|
||||||
|
noteId: {
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
note: null,
|
||||||
|
fetching: true
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
computed: {
|
||||||
|
title(): string {
|
||||||
|
return this.note ? Vue.filter('userName')(this.note.user) : '';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
created() {
|
||||||
|
(this as any).api('notes/show', { noteId: this.noteId }).then(note => {
|
||||||
|
this.note = note;
|
||||||
|
this.fetching = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="stylus" scoped>
|
||||||
|
.rvtscbadixhhbsczoorqoaygovdeecsx
|
||||||
|
> .is-remote
|
||||||
|
padding 8px 16px
|
||||||
|
font-size 12px
|
||||||
|
|
||||||
|
&.is-remote
|
||||||
|
color var(--remoteInfoFg)
|
||||||
|
background var(--remoteInfoBg)
|
||||||
|
|
||||||
|
> a
|
||||||
|
font-weight bold
|
||||||
|
|
||||||
|
</style>
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="fnlfosztlhtptnongximhlbykxblytcq">
|
|
||||||
<mk-avatar class="avatar" :user="note.user"/>
|
|
||||||
<div class="main">
|
|
||||||
<mk-note-header class="header" :note="note" :mini="true"/>
|
|
||||||
<div class="body">
|
|
||||||
<mk-sub-note-content class="text" :note="note"/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script lang="ts">
|
|
||||||
import Vue from 'vue';
|
|
||||||
|
|
||||||
export default Vue.extend({
|
|
||||||
props: {
|
|
||||||
note: {
|
|
||||||
type: Object,
|
|
||||||
required: true
|
|
||||||
},
|
|
||||||
// TODO
|
|
||||||
truncate: {
|
|
||||||
type: Boolean,
|
|
||||||
default: true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="stylus" scoped>
|
|
||||||
.fnlfosztlhtptnongximhlbykxblytcq
|
|
||||||
display flex
|
|
||||||
padding 16px
|
|
||||||
font-size 10px
|
|
||||||
background var(--subNoteBg)
|
|
||||||
|
|
||||||
&.smart
|
|
||||||
> .main
|
|
||||||
width 100%
|
|
||||||
|
|
||||||
> header
|
|
||||||
align-items center
|
|
||||||
|
|
||||||
> .avatar
|
|
||||||
flex-shrink 0
|
|
||||||
display block
|
|
||||||
margin 0 8px 0 0
|
|
||||||
width 38px
|
|
||||||
height 38px
|
|
||||||
border-radius 8px
|
|
||||||
|
|
||||||
> .main
|
|
||||||
flex 1
|
|
||||||
min-width 0
|
|
||||||
|
|
||||||
> .header
|
|
||||||
margin-bottom 2px
|
|
||||||
|
|
||||||
> .body
|
|
||||||
|
|
||||||
> .text
|
|
||||||
margin 0
|
|
||||||
padding 0
|
|
||||||
color var(--subNoteText)
|
|
||||||
|
|
||||||
pre
|
|
||||||
max-height 120px
|
|
||||||
font-size 80%
|
|
||||||
|
|
||||||
</style>
|
|
||||||
@@ -1,360 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div v-if="!mediaView" class="zyjjkidcqjnlegkqebitfviomuqmseqk" :class="{ renote: isRenote }">
|
|
||||||
<div class="reply-to" v-if="p.reply && (!$store.getters.isSignedIn || $store.state.settings.showReplyTarget)">
|
|
||||||
<x-sub :note="p.reply"/>
|
|
||||||
</div>
|
|
||||||
<div class="renote" v-if="isRenote">
|
|
||||||
<mk-avatar class="avatar" :user="note.user"/>
|
|
||||||
%fa:retweet%
|
|
||||||
<span>{{ '%i18n:@reposted-by%'.substr(0, '%i18n:@reposted-by%'.indexOf('{')) }}</span>
|
|
||||||
<router-link class="name" :to="note.user | userPage">{{ note.user | userName }}</router-link>
|
|
||||||
<span>{{ '%i18n:@reposted-by%'.substr('%i18n:@reposted-by%'.indexOf('}') + 1) }}</span>
|
|
||||||
<mk-time :time="note.createdAt"/>
|
|
||||||
</div>
|
|
||||||
<article>
|
|
||||||
<mk-avatar class="avatar" :user="p.user"/>
|
|
||||||
<div class="main">
|
|
||||||
<mk-note-header class="header" :note="p" :mini="true"/>
|
|
||||||
<div class="body">
|
|
||||||
<p v-if="p.cw != null" class="cw">
|
|
||||||
<span class="text" v-if="p.cw != ''">{{ p.cw }}</span>
|
|
||||||
<mk-cw-button v-model="showContent"/>
|
|
||||||
</p>
|
|
||||||
<div class="content" v-show="p.cw == null || showContent">
|
|
||||||
<div class="text">
|
|
||||||
<span v-if="p.isHidden" style="opacity: 0.5">(%i18n:@private%)</span>
|
|
||||||
<span v-if="p.deletedAt" style="opacity: 0.5">(%i18n:@deleted%)</span>
|
|
||||||
<a class="reply" v-if="p.reply">%fa:reply%</a>
|
|
||||||
<misskey-flavored-markdown v-if="p.text" :text="p.text" :i="$store.state.i"/>
|
|
||||||
<a class="rp" v-if="p.renote != null">RP:</a>
|
|
||||||
</div>
|
|
||||||
<div class="files" v-if="p.files.length > 0">
|
|
||||||
<mk-media-list :media-list="p.files"/>
|
|
||||||
</div>
|
|
||||||
<mk-poll v-if="p.poll" :note="p" ref="pollViewer"/>
|
|
||||||
<a class="location" v-if="p.geo" :href="`https://maps.google.com/maps?q=${p.geo.coordinates[1]},${p.geo.coordinates[0]}`" target="_blank">%fa:map-marker-alt% %i18n:@location%</a>
|
|
||||||
<div class="renote" v-if="p.renote">
|
|
||||||
<mk-note-preview :note="p.renote" :mini="true"/>
|
|
||||||
</div>
|
|
||||||
<mk-url-preview v-for="url in urls" :url="url" :key="url" :detail="false" :mini="true"/>
|
|
||||||
</div>
|
|
||||||
<span class="app" v-if="p.app">via <b>{{ p.app.name }}</b></span>
|
|
||||||
</div>
|
|
||||||
<footer>
|
|
||||||
<mk-reactions-viewer :note="p" ref="reactionsViewer"/>
|
|
||||||
<button @click="reply">
|
|
||||||
<template v-if="p.reply">%fa:reply-all%</template>
|
|
||||||
<template v-else>%fa:reply%</template>
|
|
||||||
</button>
|
|
||||||
<button @click="renote" title="Renote">%fa:retweet%</button>
|
|
||||||
<button :class="{ reacted: p.myReaction != null }" @click="react" ref="reactButton">%fa:plus%</button>
|
|
||||||
<button class="menu" @click="menu" ref="menuButton">%fa:ellipsis-h%</button>
|
|
||||||
</footer>
|
|
||||||
</div>
|
|
||||||
</article>
|
|
||||||
</div>
|
|
||||||
<div v-else class="srwrkujossgfuhrbnvqkybtzxpblgchi">
|
|
||||||
<div v-if="note.files.length > 0">
|
|
||||||
<mk-media-list :media-list="note.files"/>
|
|
||||||
</div>
|
|
||||||
<div v-if="note.renote && note.renote.files.length > 0">
|
|
||||||
<mk-media-list :media-list="note.renote.files"/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script lang="ts">
|
|
||||||
import Vue from 'vue';
|
|
||||||
import parse from '../../../../../../mfm/parse';
|
|
||||||
|
|
||||||
import MkNoteMenu from '../../../../common/views/components/note-menu.vue';
|
|
||||||
import MkReactionPicker from '../../../../common/views/components/reaction-picker.vue';
|
|
||||||
import XSub from './deck.note.sub.vue';
|
|
||||||
import noteSubscriber from '../../../../common/scripts/note-subscriber';
|
|
||||||
|
|
||||||
export default Vue.extend({
|
|
||||||
components: {
|
|
||||||
XSub
|
|
||||||
},
|
|
||||||
|
|
||||||
mixins: [noteSubscriber('note')],
|
|
||||||
|
|
||||||
props: {
|
|
||||||
note: {
|
|
||||||
type: Object,
|
|
||||||
required: true
|
|
||||||
},
|
|
||||||
mediaView: {
|
|
||||||
type: Boolean,
|
|
||||||
required: false,
|
|
||||||
default: false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
showContent: false
|
|
||||||
};
|
|
||||||
},
|
|
||||||
|
|
||||||
computed: {
|
|
||||||
isRenote(): boolean {
|
|
||||||
return (this.note.renote &&
|
|
||||||
this.note.text == null &&
|
|
||||||
this.note.fileIds.length == 0 &&
|
|
||||||
this.note.poll == null);
|
|
||||||
},
|
|
||||||
|
|
||||||
p(): any {
|
|
||||||
return this.isRenote ? this.note.renote : this.note;
|
|
||||||
},
|
|
||||||
|
|
||||||
urls(): string[] {
|
|
||||||
if (this.p.text) {
|
|
||||||
const ast = parse(this.p.text);
|
|
||||||
return ast
|
|
||||||
.filter(t => (t.type == 'url' || t.type == 'link') && !t.silent)
|
|
||||||
.map(t => t.url);
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
methods: {
|
|
||||||
reply() {
|
|
||||||
(this as any).apis.post({
|
|
||||||
reply: this.p
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
renote() {
|
|
||||||
(this as any).apis.post({
|
|
||||||
renote: this.p
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
react() {
|
|
||||||
(this as any).os.new(MkReactionPicker, {
|
|
||||||
source: this.$refs.reactButton,
|
|
||||||
note: this.p,
|
|
||||||
compact: true
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
menu() {
|
|
||||||
(this as any).os.new(MkNoteMenu, {
|
|
||||||
source: this.$refs.menuButton,
|
|
||||||
note: this.p,
|
|
||||||
compact: true
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="stylus" scoped>
|
|
||||||
.srwrkujossgfuhrbnvqkybtzxpblgchi
|
|
||||||
font-size 13px
|
|
||||||
margin 4px 12px
|
|
||||||
|
|
||||||
&:first-child
|
|
||||||
margin-top 12px
|
|
||||||
|
|
||||||
&:last-child
|
|
||||||
margin-bottom 12px
|
|
||||||
|
|
||||||
.zyjjkidcqjnlegkqebitfviomuqmseqk
|
|
||||||
font-size 13px
|
|
||||||
border-bottom solid 1px var(--faceDivider)
|
|
||||||
|
|
||||||
&:last-of-type
|
|
||||||
border-bottom none
|
|
||||||
|
|
||||||
&.smart
|
|
||||||
> article
|
|
||||||
> .main
|
|
||||||
> header
|
|
||||||
align-items center
|
|
||||||
margin-bottom 4px
|
|
||||||
|
|
||||||
> .renote
|
|
||||||
display flex
|
|
||||||
align-items center
|
|
||||||
padding 8px 16px 0 16px
|
|
||||||
line-height 28px
|
|
||||||
white-space pre
|
|
||||||
color var(--renoteText)
|
|
||||||
background linear-gradient(to bottom, var(--renoteGradient) 0%, var(--face) 100%)
|
|
||||||
|
|
||||||
.avatar
|
|
||||||
flex-shrink 0
|
|
||||||
display inline-block
|
|
||||||
width 20px
|
|
||||||
height 20px
|
|
||||||
margin 0 8px 0 0
|
|
||||||
border-radius 6px
|
|
||||||
|
|
||||||
[data-fa]
|
|
||||||
margin-right 4px
|
|
||||||
|
|
||||||
> span
|
|
||||||
flex-shrink 0
|
|
||||||
|
|
||||||
&:last-of-type
|
|
||||||
margin-right 8px
|
|
||||||
|
|
||||||
.name
|
|
||||||
overflow hidden
|
|
||||||
flex-shrink 1
|
|
||||||
text-overflow ellipsis
|
|
||||||
white-space nowrap
|
|
||||||
font-weight bold
|
|
||||||
|
|
||||||
> .mk-time
|
|
||||||
display block
|
|
||||||
margin-left auto
|
|
||||||
flex-shrink 0
|
|
||||||
font-size 0.9em
|
|
||||||
|
|
||||||
& + article
|
|
||||||
padding-top 8px
|
|
||||||
|
|
||||||
> article
|
|
||||||
display flex
|
|
||||||
padding 16px 16px 4px
|
|
||||||
|
|
||||||
> .avatar
|
|
||||||
flex-shrink 0
|
|
||||||
display block
|
|
||||||
margin 0 10px 8px 0
|
|
||||||
width 42px
|
|
||||||
height 42px
|
|
||||||
border-radius 6px
|
|
||||||
//position -webkit-sticky
|
|
||||||
//position sticky
|
|
||||||
//top 62px
|
|
||||||
|
|
||||||
> .main
|
|
||||||
flex 1
|
|
||||||
min-width 0
|
|
||||||
|
|
||||||
> .body
|
|
||||||
|
|
||||||
> .cw
|
|
||||||
cursor default
|
|
||||||
display block
|
|
||||||
margin 0
|
|
||||||
padding 0
|
|
||||||
overflow-wrap break-word
|
|
||||||
color var(--noteText)
|
|
||||||
|
|
||||||
> .text
|
|
||||||
margin-right 8px
|
|
||||||
|
|
||||||
> .content
|
|
||||||
|
|
||||||
> .text
|
|
||||||
display block
|
|
||||||
margin 0
|
|
||||||
padding 0
|
|
||||||
overflow-wrap break-word
|
|
||||||
color var(--noteText)
|
|
||||||
|
|
||||||
>>> .title
|
|
||||||
display block
|
|
||||||
margin-bottom 4px
|
|
||||||
padding 4px
|
|
||||||
font-size 90%
|
|
||||||
text-align center
|
|
||||||
background var(--mfmTitleBg)
|
|
||||||
border-radius 4px
|
|
||||||
|
|
||||||
>>> .code
|
|
||||||
margin 8px 0
|
|
||||||
|
|
||||||
>>> .quote
|
|
||||||
margin 8px
|
|
||||||
padding 6px 12px
|
|
||||||
color var(--mfmQuote)
|
|
||||||
border-left solid 3px var(--mfmQuoteLine)
|
|
||||||
|
|
||||||
> .reply
|
|
||||||
margin-right 8px
|
|
||||||
color var(--noteText)
|
|
||||||
|
|
||||||
> .rp
|
|
||||||
margin-left 4px
|
|
||||||
font-style oblique
|
|
||||||
color var(--renoteText)
|
|
||||||
|
|
||||||
[data-is-me]:after
|
|
||||||
content "you"
|
|
||||||
padding 0 4px
|
|
||||||
margin-left 4px
|
|
||||||
font-size 80%
|
|
||||||
color var(--primaryForeground)
|
|
||||||
background var(--primary)
|
|
||||||
border-radius 4px
|
|
||||||
|
|
||||||
.mk-url-preview
|
|
||||||
margin-top 8px
|
|
||||||
|
|
||||||
> .files
|
|
||||||
> img
|
|
||||||
display block
|
|
||||||
max-width 100%
|
|
||||||
|
|
||||||
> .location
|
|
||||||
margin 4px 0
|
|
||||||
font-size 12px
|
|
||||||
color #ccc
|
|
||||||
|
|
||||||
> .map
|
|
||||||
width 100%
|
|
||||||
height 200px
|
|
||||||
|
|
||||||
&:empty
|
|
||||||
display none
|
|
||||||
|
|
||||||
> .mk-poll
|
|
||||||
font-size 80%
|
|
||||||
|
|
||||||
> .renote
|
|
||||||
margin 8px 0
|
|
||||||
|
|
||||||
> *
|
|
||||||
padding 16px
|
|
||||||
border dashed 1px var(--quoteBorder)
|
|
||||||
border-radius 8px
|
|
||||||
|
|
||||||
> .app
|
|
||||||
font-size 12px
|
|
||||||
color #ccc
|
|
||||||
|
|
||||||
> footer
|
|
||||||
> button
|
|
||||||
margin 0
|
|
||||||
padding 4px 8px 8px 8px
|
|
||||||
background transparent
|
|
||||||
border none
|
|
||||||
box-shadow none
|
|
||||||
font-size 1em
|
|
||||||
color var(--noteActions)
|
|
||||||
cursor pointer
|
|
||||||
|
|
||||||
&:not(:last-child)
|
|
||||||
margin-right 28px
|
|
||||||
|
|
||||||
&:hover
|
|
||||||
color var(--noteActionsHover)
|
|
||||||
|
|
||||||
> .count
|
|
||||||
display inline
|
|
||||||
margin 0 0 0 8px
|
|
||||||
color #999
|
|
||||||
|
|
||||||
&.reacted
|
|
||||||
color var(--primary)
|
|
||||||
|
|
||||||
</style>
|
|
||||||
@@ -2,16 +2,27 @@
|
|||||||
<div class="eamppglmnmimdhrlzhplwpvyeaqmmhxu">
|
<div class="eamppglmnmimdhrlzhplwpvyeaqmmhxu">
|
||||||
<slot name="empty" v-if="notes.length == 0 && !fetching && requestInitPromise == null"></slot>
|
<slot name="empty" v-if="notes.length == 0 && !fetching && requestInitPromise == null"></slot>
|
||||||
|
|
||||||
<div v-if="!fetching && requestInitPromise != null">
|
<div class="placeholder" v-if="fetching">
|
||||||
<p>%i18n:@error%</p>
|
<template v-for="i in 10">
|
||||||
<button @click="resolveInitPromise">%i18n:@retry%</button>
|
<mk-note-skeleton :key="i"/>
|
||||||
|
</template>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div v-if="!fetching && requestInitPromise != null" class="error">
|
||||||
|
<p>%fa:exclamation-triangle% %i18n:common.error.title%</p>
|
||||||
|
<ui-button @click="resolveInitPromise">%i18n:common.error.retry%</ui-button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- トランジションを有効にするとなぜかメモリリークする -->
|
<!-- トランジションを有効にするとなぜかメモリリークする -->
|
||||||
<!--<transition-group name="mk-notes" class="transition">-->
|
<!--<transition-group name="mk-notes" class="transition" ref="notes">-->
|
||||||
<div class="notes">
|
<div class="notes" ref="notes">
|
||||||
<template v-for="(note, i) in _notes">
|
<template v-for="(note, i) in _notes">
|
||||||
<x-note :note="note" :key="note.id" @update:note="onNoteUpdated(i, $event)" :media-view="mediaView"/>
|
<x-note
|
||||||
|
:note="note"
|
||||||
|
:key="note.id"
|
||||||
|
@update:note="onNoteUpdated(i, $event)"
|
||||||
|
:media-view="mediaView"
|
||||||
|
:mini="true"/>
|
||||||
<p class="date" :key="note.id + '_date'" v-if="i != notes.length - 1 && note._date != _notes[i + 1]._date">
|
<p class="date" :key="note.id + '_date'" v-if="i != notes.length - 1 && note._date != _notes[i + 1]._date">
|
||||||
<span>%fa:angle-up%{{ note._datetext }}</span>
|
<span>%fa:angle-up%{{ note._datetext }}</span>
|
||||||
<span>%fa:angle-down%{{ _notes[i + 1]._datetext }}</span>
|
<span>%fa:angle-down%{{ _notes[i + 1]._datetext }}</span>
|
||||||
@@ -32,7 +43,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
|
|
||||||
import XNote from './deck.note.vue';
|
import XNote from '../../components/note.vue';
|
||||||
|
|
||||||
const displayLimit = 20;
|
const displayLimit = 20;
|
||||||
|
|
||||||
@@ -96,7 +107,7 @@ export default Vue.extend({
|
|||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
focus() {
|
focus() {
|
||||||
(this.$el as any).children[0].focus();
|
(this.$refs.notes as any).children[0].focus ? (this.$refs.notes as any).children[0].focus() : (this.$refs.notes as any).$el.children[0].focus();
|
||||||
},
|
},
|
||||||
|
|
||||||
onNoteUpdated(i, note) {
|
onNoteUpdated(i, note) {
|
||||||
@@ -148,6 +159,11 @@ export default Vue.extend({
|
|||||||
}
|
}
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
|
// タブが非表示またはスクロール位置が最上部ではないならタイトルで通知
|
||||||
|
if (document.hidden || !this.isScrollTop()) {
|
||||||
|
this.$store.commit('pushBehindNote', note);
|
||||||
|
}
|
||||||
|
|
||||||
if (this.isScrollTop()) {
|
if (this.isScrollTop()) {
|
||||||
// Prepend the note
|
// Prepend the note
|
||||||
this.notes.unshift(note);
|
this.notes.unshift(note);
|
||||||
@@ -205,12 +221,23 @@ export default Vue.extend({
|
|||||||
> *
|
> *
|
||||||
transition transform .3s ease, opacity .3s ease
|
transition transform .3s ease, opacity .3s ease
|
||||||
|
|
||||||
|
> .error
|
||||||
|
max-width 300px
|
||||||
|
margin 0 auto
|
||||||
|
padding 16px
|
||||||
|
text-align center
|
||||||
|
color var(--text)
|
||||||
|
|
||||||
|
> .placeholder
|
||||||
|
padding 16px
|
||||||
|
opacity 0.3
|
||||||
|
|
||||||
> .notes
|
> .notes
|
||||||
> .date
|
> .date
|
||||||
display block
|
display block
|
||||||
margin 0
|
margin 0
|
||||||
line-height 32px
|
line-height 28px
|
||||||
font-size 14px
|
font-size 12px
|
||||||
text-align center
|
text-align center
|
||||||
color var(--dateDividerFg)
|
color var(--dateDividerFg)
|
||||||
background var(--dateDividerBg)
|
background var(--dateDividerBg)
|
||||||
|
|||||||
@@ -66,15 +66,15 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<template v-if="notification.type == 'quote'">
|
<template v-if="notification.type == 'quote'">
|
||||||
<x-note :note="notification.note" @update:note="onNoteUpdated"/>
|
<x-note :note="notification.note" @update:note="onNoteUpdated" :mini="true"/>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template v-if="notification.type == 'reply'">
|
<template v-if="notification.type == 'reply'">
|
||||||
<x-note :note="notification.note" @update:note="onNoteUpdated"/>
|
<x-note :note="notification.note" @update:note="onNoteUpdated" :mini="true"/>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template v-if="notification.type == 'mention'">
|
<template v-if="notification.type == 'mention'">
|
||||||
<x-note :note="notification.note" @update:note="onNoteUpdated"/>
|
<x-note :note="notification.note" @update:note="onNoteUpdated" :mini="true"/>
|
||||||
</template>
|
</template>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -82,7 +82,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import getNoteSummary from '../../../../../../misc/get-note-summary';
|
import getNoteSummary from '../../../../../../misc/get-note-summary';
|
||||||
import XNote from './deck.note.vue';
|
import XNote from '../../components/note.vue';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
components: {
|
components: {
|
||||||
|
|||||||
@@ -1,5 +1,11 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="oxynyeqmfvracxnglgulyqfgqxnxmehl">
|
<div class="oxynyeqmfvracxnglgulyqfgqxnxmehl">
|
||||||
|
<div class="placeholder" v-if="fetching">
|
||||||
|
<template v-for="i in 10">
|
||||||
|
<mk-note-skeleton :key="i"/>
|
||||||
|
</template>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- トランジションを有効にするとなぜかメモリリークする -->
|
<!-- トランジションを有効にするとなぜかメモリリークする -->
|
||||||
<component :is="!$store.state.device.reduceMotion ? 'transition-group' : 'div'" name="mk-notifications" class="transition notifications">
|
<component :is="!$store.state.device.reduceMotion ? 'transition-group' : 'div'" name="mk-notifications" class="transition notifications">
|
||||||
<template v-for="(notification, i) in _notifications">
|
<template v-for="(notification, i) in _notifications">
|
||||||
@@ -14,7 +20,6 @@
|
|||||||
<template v-if="fetchingMoreNotifications">%fa:spinner .pulse .fw%</template>{{ fetchingMoreNotifications ? '%i18n:common.loading%' : '%i18n:@more%' }}
|
<template v-if="fetchingMoreNotifications">%fa:spinner .pulse .fw%</template>{{ fetchingMoreNotifications ? '%i18n:common.loading%' : '%i18n:@more%' }}
|
||||||
</button>
|
</button>
|
||||||
<p class="empty" v-if="notifications.length == 0 && !fetching">%i18n:@empty%</p>
|
<p class="empty" v-if="notifications.length == 0 && !fetching">%i18n:@empty%</p>
|
||||||
<p class="loading" v-if="fetching">%fa:spinner .pulse .fw%%i18n:common.loading%<mk-ellipsis/></p>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -161,6 +166,10 @@ export default Vue.extend({
|
|||||||
> *
|
> *
|
||||||
transition transform .3s ease, opacity .3s ease
|
transition transform .3s ease, opacity .3s ease
|
||||||
|
|
||||||
|
> .placeholder
|
||||||
|
padding 16px
|
||||||
|
opacity 0.3
|
||||||
|
|
||||||
> .notifications
|
> .notifications
|
||||||
|
|
||||||
> .notification:not(:last-child)
|
> .notification:not(:last-child)
|
||||||
@@ -169,9 +178,9 @@ export default Vue.extend({
|
|||||||
> .date
|
> .date
|
||||||
display block
|
display block
|
||||||
margin 0
|
margin 0
|
||||||
line-height 32px
|
line-height 28px
|
||||||
text-align center
|
text-align center
|
||||||
font-size 0.8em
|
font-size 12px
|
||||||
color var(--dateDividerFg)
|
color var(--dateDividerFg)
|
||||||
background var(--dateDividerBg)
|
background var(--dateDividerBg)
|
||||||
border-bottom solid 1px var(--faceDivider)
|
border-bottom solid 1px var(--faceDivider)
|
||||||
@@ -207,13 +216,4 @@ export default Vue.extend({
|
|||||||
text-align center
|
text-align center
|
||||||
color #aaa
|
color #aaa
|
||||||
|
|
||||||
> .loading
|
|
||||||
margin 0
|
|
||||||
padding 16px
|
|
||||||
text-align center
|
|
||||||
color #aaa
|
|
||||||
|
|
||||||
> [data-fa]
|
|
||||||
margin-right 4px
|
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -14,9 +14,25 @@
|
|||||||
<ui-switch v-model="column.isMediaOnly" @change="onChangeSettings">%i18n:@is-media-only%</ui-switch>
|
<ui-switch v-model="column.isMediaOnly" @change="onChangeSettings">%i18n:@is-media-only%</ui-switch>
|
||||||
<ui-switch v-model="column.isMediaView" @change="onChangeSettings">%i18n:@is-media-view%</ui-switch>
|
<ui-switch v-model="column.isMediaView" @change="onChangeSettings">%i18n:@is-media-view%</ui-switch>
|
||||||
</div>
|
</div>
|
||||||
<x-list-tl v-if="column.type == 'list'" :list="column.list" :media-only="column.isMediaOnly" :media-view="column.isMediaView"/>
|
|
||||||
<x-hashtag-tl v-if="column.type == 'hashtag'" :tag-tl="$store.state.settings.tagTimelines.find(x => x.id == column.tagTlId)" :media-only="column.isMediaOnly" :media-view="column.isMediaView"/>
|
<x-list-tl v-if="column.type == 'list'"
|
||||||
<x-tl v-else :src="column.type" :media-only="column.isMediaOnly" :media-view="column.isMediaView"/>
|
:list="column.list"
|
||||||
|
:media-only="column.isMediaOnly"
|
||||||
|
:media-view="column.isMediaView"
|
||||||
|
ref="tl"
|
||||||
|
/>
|
||||||
|
<x-hashtag-tl v-else-if="column.type == 'hashtag'"
|
||||||
|
:tag-tl="$store.state.settings.tagTimelines.find(x => x.id == column.tagTlId)"
|
||||||
|
:media-only="column.isMediaOnly"
|
||||||
|
:media-view="column.isMediaView"
|
||||||
|
ref="tl"
|
||||||
|
/>
|
||||||
|
<x-tl v-else
|
||||||
|
:src="column.type"
|
||||||
|
:media-only="column.isMediaOnly"
|
||||||
|
:media-view="column.isMediaView"
|
||||||
|
ref="tl"
|
||||||
|
/>
|
||||||
</x-column>
|
</x-column>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -77,6 +93,10 @@ export default Vue.extend({
|
|||||||
methods: {
|
methods: {
|
||||||
onChangeSettings(v) {
|
onChangeSettings(v) {
|
||||||
this.$store.dispatch('settings/saveDeck');
|
this.$store.dispatch('settings/saveDeck');
|
||||||
|
},
|
||||||
|
|
||||||
|
focus() {
|
||||||
|
this.$refs.tl.focus();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<x-notes ref="timeline" :more="existMore ? more : null" :media-view="mediaView"/>
|
<x-notes ref="timeline" :more="existMore ? more : null" :media-view="mediaView"/>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user